単純に書込みのパスワード制限がかかるだけかなーと思って仕様書を見ると読取にもかけられるようです。というわけで試してみます。試すタグは前回登場した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 件のコメント:
コメントを投稿