首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NFC - Mifare DESFire - AES通信

NFC - Mifare DESFire - AES通信
EN

Stack Overflow用户
提问于 2014-06-11 00:48:42
回答 1查看 1.3K关注 0票数 0

我正在使用Omnikey 5321阅读器与Mifare DESFire EV1标签进行通信。我想读取标准数据文件中的40个字节。我使用Winscard DLL (c++)在ISO7816APDU消息结构中包装本地的desfire命令。

应用程序选择和AES身份验证正常。我对读取数据命令有问题。通信设置设为0x03 (完全加密)。

代码语言:javascript
复制
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)和AES认证后计算的子密钥2)。

然后,我使用设置为0x00的Init Vector和会话密钥对结果进行加密。加密的数据被认为是IV。

最后,我使用IV和会话密钥对收到的48个数据字节进行解密。

代码语言:javascript
复制
I get :
40 data bytes + 4 CRC bytes + 4 padding bytes (0x00 00 00 00)

40个数据字节有时是好的,但有时是错误的。我不知道为什么结果并不总是一样。解密的CRC总是相同的,填充也是如此。

当我尝试读取另一个文件中的普通数据时,没有任何问题。所以我认为破译是有问题的。但是CRC和填充并不总是相同的。

一些帮助是非常有用的

EN

回答 1

Stack Overflow用户

发布于 2014-06-11 08:50:52

好吧,我来猜一猜:你是否在CBC模式下使用AES解密?如果是这种情况,那么您需要正确的IV和正确的密钥才能解密。

如果你有正确的密钥,但是错误的IV,你将能够解密密文,但是解密的明文的前16个字节将是错误的。由于CRC和填充字节不在前16个字节中,即使IV错误,它们也将始终正确。坏的IV只会破坏解密输出的前16个字节。

因此,在数据字节错误的情况下,如果只有前16个字节是错误的,并且如果您使用的是CBC模式,那么这将是有趣的。在这种情况下,看一下静脉输液器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24146635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档