我正在使用 HID Omnikey 5321 阅读器与 Mifare DESFire EV1 标签进行通信。我使用 WinSCard DLL(在 C++ 中)将本机 DESFire 命令包装在 ISO 7816 APDU 消息结构中。在标签上,我有一个带有 3 个键的应用程序。由于密钥设置设置为 0x0B,我使用应用程序主密钥进行身份验证以更改密钥值。
我设法更改了应用程序主密钥,但没有更改密钥 1 和 2。
使用应用程序主密钥进行 AES 身份验证后,我尝试更改密钥 2:
Old Key 2 = 00...00
New Key 2 = 22...22
我通过(旧密钥 2)异或(新密钥 2)计算 CRC
CRCxor = F1 4A D1 C0
我通过本机命令计算 CRC
Native Command = C4 02 (New Key 2)
CRCnc = C9 1F 03 80
然后我用会话密钥加密,IV 设置为 00
32 bytes data to encipher : (New Key 2 XOR Old Key 2) (CRCxor) (CRCnc) 00...00
发送的 APDU
90 C4 00 00 21 02 (enciphered data) 00
作为回应,我得到“1E”状态码,表示 CRC 或填充错误。
我也尝试不使用 XORing 数据。我只是附加了通过本机命令计算的 CRC,就像我成功更改主密钥一样,但我仍然有同样的错误。
我不知道问题出在哪里。