我使用HID Omnikey 5321阅读器与Mifare DESFire EV1标签进行通信。我使用WinSCard DLL(在C ++中)将Native DESFire命令包装在ISO 7816 APDU消息结构中。在标签上,我有一个带有3个键的应用程序。由于密钥设置设置为0x0B,我使用应用程序主密钥进行身份验证以更改密钥值。
我设法更改应用程序主密钥,但不是密钥1和2。
使用应用程序主密钥进行AES身份验证后,我尝试更改密钥2:
Old Key 2 = 00...00
New Key 2 = 22...22
我计算CRC over(旧密钥2)XOR(新密钥2)
CRCxor = F1 4A D1 C0
我通过Native Command计算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数据。我只是通过Native Command附加CRC计算,就像我成功更改Master密钥一样,但我仍然有同样的错误。
我不知道问题出在哪里。