我正在使用 HID Omnikey 5321 阅读器与 Mifare DESFire EV1 标签进行通信。我想在标准数据文件中写入 16 个字节。我正在使用 WinSCard DLL (C++) 将 Native DESFire 命令包装在 ISO 7816 APDU 消息结构中。应用程序选择和身份验证已成功完成,但写入数据命令有问题。该文件的通信设置设置为 AES,完全加密。
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 = 7B 8A 60 0F
然后我使用会话密钥和设置为 00 的 IV 进行加密:
32 bytes data to encipher : (Data) (CRC) 80 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
作为回应,我得到一个“1E”状态码,表示 CRC 或填充错误。我不知道问题出在哪里,AES加密算法似乎很好,因为我设法读取数据。
它可能是 CRC 或 IV。我必须用 CMAC 异或数据吗?