2013年10月8日火曜日

NTAG21x のパスワード機能を試す

NATG21xシリーズにはパスワードプロテクションの機能が搭載されています。
単純に書込みのパスワード制限がかかるだけかなーと思って仕様書を見ると読取にもかけられるようです。というわけで試してみます。試すタグは前回登場したNTAG210です。

タグの最後の方の領域に設定情報が書き込まれています。


Page16からPage19の部分です。UIDミラーのときにも少し触れましたが、この部分の構造は以下のようになっています。

Page 16  MIRROR_BYTE  RFUI  MIRROR_PAGE  AUTH0
Page 17  ACCESS  RFUI  RFUI  RFUI
Page 18  PWD(4byte)
Page 19  PACK(2byte)  RFUI  RFUI

この中でパスワードに関連するパラメータは AUTH0、ACCESS、PWD、PACKの4つです。
さらにACCESSがビットごとに設定が決まっていて、PROT、CFGLCK、AUTHLIMの3つの
設定が含まれています。たくさんありますねー。それぞれどんな設定なんでしょうか。

AUTH0
 ページ番号を設定するようです。ここで設定した値以上のページに対してプロテクションがかかるようです。初期値はFFになっていますので、ここを書き換えないとプロテクションが有効になりません。

PWD
 パスワードの実体ですね。4バイトです。初期値は FF FF FF FF のようです。

PACK
 よくわかんないんですが、パスワード認証に成功するとここの値が返り値として戻ってきます。

PWD、PACKの2つは、リードコマンドで読み込もうとしても常にオール00が返ってきます。

PROT
 プロテクションの種別です。1ビットの情報でここが0だと書込みが制限され、1だと読み込みと書込みが制限されます。

CFGLCK
 設定領域のロックフラグのようです。1ビットでここが1になると設定情報が永久に変更できなくなってしまいます。

AUTHLIM
 認証の試行回数のようです。この回数を超えて認証に失敗すると何か起きるようです。

まずは認証コマンドを試します。認証コマンドは 0x1B で、続けてパスワードの4ケタを送信します。
初期値のパスワード FF FF FF FF で投げてみます。


00 00 が返ってきました。ここがPACKの値らしいです。
今度はPACKの値を 01 02 に書き換えてから同じように認証コマンド投げてみます。


確かにPACKの値が返ってきてるようです。
じゃパスワードを別の値にしてみます。


「Tag was lost.」というエラーになりました。まぁ、しっくりいきませんが認証に失敗してるってことらしいです。
では AUTH0 に4を書き込みます。こうすることでユーザ領域の4ページ以降は書込み不可状態になります。


実際に書き込もうとするとエラーになりました。
さらに PROT を1にしてみます。これで読み込みも制限されます。試しにTagInfoで読んでみたらアプリ落ちました(笑
Readコマンドを投げると


00が返ってきました。通常は4ページ分のデータ(16バイト)が返ってくるはずなんですが、コマンド自体はエラーにならずに 00 の1バイトだけ返ってきました。あぁー、プログラマー泣かせですなー。
認証後にReadコマンドを投げると、


きちんと読めてます。

さて、ここで疑問が。AUTH0 に 0 を書いたらどうなるんでしょうか。Page 0 と 1 はタグのUIDが入っています。とするとUIDまで読めなくなってしまうのか!?

というわけでやってみたんですが、UIDは読めました。しかし認証が成功しないようになってしまいました(理由は不明)。というわけで貴重な NTAG210 タグがまた1つ UID しか読めないタグになってしまいました。あーあ、たっちなうには使えるかなー。

0 件のコメント:

コメントを投稿