0

我正在使用 HID Omnikey 5321 阅读器与 Mifare DESFire EV1 标签进行通信。我想在标准数据文件中写入 16 个字节。我正在使用 WinSCard DLL (C++) 将 Native 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     

然后我使用会话密钥和设置为 00 的 IV 进行加密:

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 

但是当我尝试写入之前创建的文件时遇到问题。

在使用应用程序主密钥进行 AES 身份验证后,我计算了两个子密钥(K1 和 K2)。我将 IV 设置为 0x00...00。然后我创建两个文件:

文件 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 是好的。

我不知道我的写入数据命令中的问题在哪里。可能是静脉注射,但我不知道为什么。

4

0 回答 0