Nexus 4 と最新の Android API レベル 18 を使用して Mifare DESFire EV1 AES タグと通信すると、頭が痛くなります。このタイプのタグを読み書きするには、NXP ネイティブ プロトコルに従って、次の手順に従う必要があります。
- アプリケーションを選択
- 認証する
- 書き込みまたは読み取り
そのために、ISO 14443-4プロパティと I/O 操作へのアクセスを提供する Android のIsoDepクラスを使用します。非常に奇妙な点は、select application ネイティブ コマンドを送信すると、予期しない応答が返されることです。私がAIDを持っていると想像してください。F4013D
-> 5AF4013D
<- 6E00
考えられるすべての応答は、1 バイトの長さ (success0x00
または error_code) である必要があり、2 バイト以上であってはなりません。したがって、0x6E
成功応答の前はまったく予想外です。常に発生するとは限りません。発生せず正常に動作する場合、アプリケーションの選択と認証プロセスは正常に動作します。ただし、一度認証された書き込みコマンドは正しい動作をしません。すべての書き込みコマンド0xAF
は、成功の代わりに PICC からの で終了します0x00
。PICC は、予期しないときに余分なデータを予期しているようです (正しい長さのペイロードを送信します)。他のコマンドを送信すると、0xCA
(Command Aborted) エラー コードが表示されます。
-> 5AF4013D
<- 00 /*Success*/
-> AA01
<- AFA8394ED57A5E83106B4EE72FD2BB0CC4
-> AF148F525E1DDE0AD6AB60B4B615552475C91F2E8D89B8523E4465113DD5BD19C6
<- 0066D255C93F2F492AFE3715C88964F1BD /*Authentication success*/
-> 3D02000000030000222222 /*Write 3 bytes to file nº2*/
<- AF /*Unexpected, 0x00 was expected*/
通常、これらのタイプのコマンドを個人用リーダー (非 Android NFC) で送信すると、常に正常に動作します。Android NFC API の何かがおかしくなっているようです。データを解釈したり変更したりしない生のデータ トランスポーターである必要があります。
ISO 7816-4 APDU 構造でも試してみましたが、同じ結果が得られました。興味深いことに、Galaxy Nexus では select アプリケーションの奇妙な応答は発生しませんが、書き込みコマンドは常に 1 つです。