Omnikey 5321 リーダーを使用して、Mifare DESFire EV1 タグと通信しています。標準データ ファイルで 40 バイトを読み取りたい。Winscard DLL (c++) を使用して、ISO 7816 APDU メッセージ構造でネイティブ desfire コマンドをラップしています。
アプリ選択もAES認証もOK。データ読み取りコマンドに問題があります。通信設定は 0x03 (完全暗号化) に設定されます。
APDU sended :
0x90 BD 00 00 07 01 00 00 00 28 00 00 00
48 データ バイトと "0x9100" ステータス コードを受け取りました。データの復号化に使用する IV を計算するには:
最初に XOR (0xBD 01 00 00 00 28 00 00 80 00 00 00 00 00 00 00) と AES 認証後に計算されたサブキー 2)。
次に、Init Vector を 0x00 に設定し、セッション キーを使用して結果を暗号化します。暗号化されたデータは IV と見なされます。
最後に、IV とセッション キーで受信した 48 データ バイトを復号化します。
I get :
40 data bytes + 4 CRC bytes + 4 padding bytes (0x00 00 00 00)
40 データ バイトは良い場合もあれば、間違っている場合もあります。なぜいつも同じ結果にならないのかわかりません。復号化された CRC は常に同じであり、パディングも同じです。
別のファイルのプレーン データを読み込もうとしても、問題はありません。ですから、問題なのは解読だと思います。ただし、CRC とパディングは常に同じとは限りません。
いくつかのヘルプは非常に便利です