1

Android で Mifare Ultralight を保護するのは簡単Ndef.makeReadonly()です。そのための方法があります。しかし、Mifare Classic タグは を返すNdef.canMakeReadonly() == falseため、これは不可能です。このようなタグを読み取り専用にするか、少なくとも a または b キーを設定することでキーで保護できると聞きました。

MifareClassic 技術には次の方法があります。authenticateSectorWithKeyB(int sectorIndex, byte[] key)

これを使用して、mifare クラシック タグの ndef メッセージを読み取り専用にすることができるかどうかを知っている人はいますか? または、タグに ndef メッセージを書き込んで、新しい書き込みに対して何らかの方法でロックするにはどうすればよいでしょうか?

4

1 に答える 1

9

認証方法を使用することが可能です。

まず、MifareClassic4kのデータシートは次のとおりです。

http://www.nxp.com/documents/data_sheet/MF1S703x.pdf

あなたにとって重要な章は次のとおりです。

  • 3.6メモリ構成
  • 3.6.3セクタートレーラー

要するに、書き込み保護は次のように機能します。

Mifare Classicは、それぞれ4 * 16バイトのセクターに分割されます(最初の1k程度にのみ適用されます...上位のブロックは少し異なりますが、仕様に記載されています)。これらの64バイトのうち16バイトは認証/保護に使用されます。カードのセクターごとに、次のことを行います。

  1. KeyAを使用してセクターを認証する
  2. セクターの予告編を読んでください。
  3. セクタートレーラーのアクセスビットを変更します。
  4. セクタートレーラーをカードに書き戻します。

MifareClassicsのKeyA値は次のとおりです。

byte [] KEY_DEFAULT = {(byte)0xFF、(byte)0xFF、(byte)0xFF、(byte)0xFF、(byte)0xFF、(byte)0xFF};

フォーマットされていない、工場出荷時の新しいカードの場合。

byte [] KEY_MIFARE_APPLICATION_DIRECTORY = {(byte)0xA0、(byte)0xA1、(byte)0xA2、(byte)0xA3、(byte)0xA4、(byte)0xA5};

カードの最初のセクター用

byte [] KEY_NFC_FORUM =
{(byte)0xD3、(byte)0xF7、(byte)0xD3、(byte)0xF7、(byte)0xD3、(byte)0xF7};

他のすべてのセクターの場合。

重要:元のKeyAキーをカードに書き戻す必要があります。これらが上記のキーと異なる場合、カードはNdefに準拠しなくなります。

変更されたアクセスビットには、2つの選択肢があります。

  1. KeyAの読み取りのみを有効にします。これにより、取り消すことのできない100%の書き込み保護が提供されます。

  2. KeyAの読み取りとKeyBの読み取り/書き込みを有効にします。また、KeyBに秘密鍵を保存します。これにより、秘密のKeyBを使用して書き込み保護されたセクターを認証し、カードの保護を解除できます。

背景:Androidは、上記のKeyA値を使用してのみNdef形式のタグを認証します。Ndef検出コードがKeyBを単独で試行することはないため、KeyBを独自の目的に使用できます。

于 2011-05-16T23:23:04.820 に答える