2013年8月5日月曜日

NTAGのロック機能を試す

Mifare Ultralightもそうですが、NTAGにはロック機能が付いています。タグは書き換えができるのが便利なのですが、スマートポスターなど勝手に書き換えられたら困るものもありますので、書き換えができないようにロックをするわけです。

ロックの情報は、タグの3ページ目(Page02)にあります。仕様書によると、3ページ目の後ろ2バイトがロック情報になっています。
2バイトの詳細は次のようになっています。

 1バイト目
  bit7 : LOCK PAGE 7
  bit6 : LOCK PAGE 6
  bit5 : LOCK PAGE 5
  bit4 : LOCK PAGE 4
  bit3 : LOCK PAGE 3
  bit2 : BLOCK LOCKING LOCKBITS 15 - 10
  bit1 : BLOCK LOCKING LOCKBITS 9 - 4
  bit0 : BLOCK LOCKING LOCKBIT 3

 2バイト目
  bit7 : LOCK PAGE 15
  bit6 : LOCK PAGE 14
  bit5 : LOCK PAGE 13
  bit4 : LOCK PAGE 12
  bit3 : LOCK PAGE 11
  bit2 : LOCK PAGE 10
  bit1 : LOCK PAGE 9
  bit0 : LOCK PAGE 8

これを見ると解る通り、ページごとにロックができます。ロックしたいページのビットを1にすると、そのページは読取専用になるわけです。
このロック情報は一度1にすると0には戻せないようになっているようです。

ではやってみましょう。NTAG203を利用します。AndroidアプリのTagInfoを使って中身を確認します。


Page02 の後ろ2バイトを見ると 0x00 0x00 になっています。ロックされてない状態です。
試しに Page07 と Page06 のロックビットを1に書き換えてみます。


Page07 と Page06 の部分に x マークが付きました。Page07 と Page06 はもう書込みができなくなっています。ロック情報をリセットできないか試してみましたが、ロックビットを0に戻すことはできませんでした。

もうひとつ、ブロックロックというのがありますね。これ何でしょうか。試しに 15 - 10 のブロックロックビットを1にしてみます。


今度はページの部分に + マークが付きました。これってロックされてるんでしょうか。ということで試しに Page10 のデータを書きかえてみます。


あら?書けました。よく見ると BLOCK LOCKING LOCKBITS になってますので、ロックビットをロックするということらしいです。現在は 15 - 10 のページはロック無しになっていますが、これをロック状態にできない(ロックビットを変更できない)ということです。
試しに Page15 と Page14 のロックビットを1に書いてみましたが(ロックバイトの2バイト目を 0xC0 へ)、書き換えできませんでした(0x00のまま)。
ロックビットをロックというのがややこしいですねー。

0 件のコメント:

コメントを投稿