NFC通信 - Mifare DESFire EV1 - AES - 初始向量

时间:2014-05-21 16:19:01

标签: encryption aes nfc mifare contactless-smartcard

我正在使用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但我不知道为什么。

0 个答案:

没有答案