0

HID Omnikey 5321 リーダーを使用して、Mifare DESFire EV1 タグと通信しています。標準データファイルに 16 バイトを書き込みたい。WinSCard DLL (C++) を使用して、ネイティブ DESFire コマンドを ISO 7816 APDU メッセージ構造にラップしています。

既存のファイルにデータを書き込むことができました:

File Nb         : 00
Offset          : 00 00 00
Length          : 10 00 00 (LSB first)
Data (16 bytes) : 23 00 00 00 00 00 00 08 12 34 56 78 00 00 00 00

Native コマンドから CRC を計算します。

Native command : 3D (File Nb) (Offset) (Length) (Data)
CRC = 30 D2 07 00     

次に、セッション キーと IV を 00 に設定して暗号化します。

32 bytes data to encipher : (Data) (CRC) 00 00 00 00 00 00 00 00 00 00 00 00

APDU が送信されました:

90 3D 00 00 27 00 00 00 00 10 00 00 (32 bytes enciphered data) 00 

しかし、以前に作成したファイルに書き込もうとすると問題が発生します。

Application Master Key による AES 認証の後、2 つのサブキー (K1 と K2) を計算します。IV を 0x00...00 に設定します。次に、2 つのファイルを作成します。

ファイル 0

CMAC calculation :
  (CD 00 03 00 21 30 00 00 80 00...00) XOR (K2)
  encryption with session key and IV
  copy of encryption result into IV

APDU sended : 90 CD 00 00 07 00 03 00 21 30 00 00 00
Creation file 0 OK

ファイル 1

CMAC calculation :
  (CD 01 03 00 11 F0 05 00 80 00...00) XOR (K2)
  encryption with session key and IV
  copy of encryption result into IV

APDU sended : 90 CD 00 00 07 01 03 00 11 F0 05 00 00
Creation file 1 OK

次に、暗号化に IV を使用してファイル 0 にデータを書き込みます。「1E」エラーが発生します。

既存のファイルでデータを読み取ることができました:

CMAC calculation
  (BD 00 00 00 00 10 00 00 80 00...00) XOR (K2)
  encryption with session key and IV = 0x00...00
  copy of encryption result into IV

IV を使用して受信したデータを復号化すると、良好なバイト値が得られます。なので、サブキーK2がいいと思います。

データ書き込みコマンドのどこに問題があるのか​​わかりません。IVかもしれませんが、理由はわかりません。

4

0 に答える 0