我正在使用Omnikey 5321阅读器与Mifare DESFire EV1标签进行通信。我想在标准数据文件中读取40个字节。我正在使用Winscard DLL(c ++)在ISO 7816 APDU消息结构中包装本机desfire命令。
应用程序选择和AES身份验证都可以。我有读取数据命令的问题。通信设置设置为0x03(完全加密)。
APDU sended :
0x90 BD 00 00 07 01 00 00 00 28 00 00 00
我收到了48个数据字节和“0x9100”状态代码。进入计算IV用于解密数据:
我首先是XOR(0xBD 01 00 00 00 28 00 00 80 00 00 00 00 00 00 00)和AES认证后计算的子密钥2。
然后我使用设置为0x00的Init Vector和会话密钥加密结果。加密的数据被视为IV。
我最终解密了用IV和会话密钥接收的48个数据字节。
I get :
40 data bytes + 4 CRC bytes + 4 padding bytes (0x00 00 00 00)
40个数据字节有时很好,但有时会出错。我不知道为什么它总是不一样的结果。 CRC解密的CRC始终是相同的,填充也是如此。
当我尝试读取另一个文件中的普通数据时,我没有问题。所以我认为这是一个有问题的解密。但CRC和填充并不总是一样的。
一些帮助非常有用
答案 0 :(得分:0)
好吧,我猜错了:你在CBC模式下使用AES解密吗?如果是这种情况,那么您需要正确的IV和正确的密钥才能解密。
如果你有正确的密钥,但错误的IV,你将能够解密密文,但解密明文的前16个字节将是错误的。由于CRC和填充字节不在前16个字节中,所以即使你有错误的IV,它们也总是正确的。坏的IV只会破坏解密输出的前16个字节。
因此,在数据字节错误的情况下,如果只有前16个字节错误,并且您正在使用CBC模式,那将会很有趣。在这种情况下,请查看IV。