我正在使用HID Omnikey 5321阅读器与Mifare DESFire EV1标签进行通信。我想在标准数据文件中写入16个字节。我正在使用WinSCard DLL(C ++)在ISO 7816 APDU消息结构中包装Native DESFire命令。
我设法在现有文件中写入数据:
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身份验证后,我计算了两个子项(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很好。
我不知道写数据命令的问题在哪里。它可能是IV但我不知道为什么。