当前位置: 首页 > 知识库问答 >
问题:

NFC通信-Mifare DESFire EV1-AES

堵昊焱
2023-03-14

我正在使用 HID Omnikey 5321 读卡器与 Mifare DESFire EV1 标签进行通信。我想在标准数据文件中写入 16 个字节。我正在使用WinSCard DLL(C)将Native DESFire命令包装在ISO 7816 APDU消息结构中。应用程序选择和身份验证已成功完成,但我的“写入数据”命令有问题。文件的通信设置设置为 AES,完全加密。

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 = 7B 8A 60 0F 

然后我用会话密钥和设置为00的IV进行加密:

32 bytes data to encipher : (Data) (CRC) 80 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

作为响应,我得到一个“1E”状态代码,这意味着CRC或填充错误。我不知道问题出在哪里,AES加密算法似乎很好,因为我设法读取数据。

可能是CRC或IV。我必须用CMAC对数据进行异或吗?

共有1个答案

谈琛
2023-03-14

您使用的CRC错误。对于问题中显示的命令,命令头数据的CRC应为30 D2 07 00

此外,要小心填充的方式。DesFire EV1数据表对此含糊不清。虽然关于AES加密的部分建议CMAC填充应始终与AES一起使用,但关于填充的部分指出,已知数据长度的命令应填充全零,而未知数据长度的命令应填充0x80后跟零。最后,写入命令上的档留明确指出,写入命令应填充全零以进行加密(这就是您应该做的)。

 类似资料:
  • 使用Nexus 4和最新的Android API level 18与Mifare DESFire EV1 AES标签通信让我头疼。根据恩智浦本机协议,要写入和读取此类标签,必须遵循以下步骤: 选择应用程序 身份验证 写入或读取 我也用ISO 7816-4 APDU结构进行了同样的尝试。奇怪的是,使用Galaxy Nexus不会发生select应用程序的奇怪响应,而是总是写命令一个。

  • 问题内容: 我已经实现了通过低级通信方法与NTAG216进行交互的代码(紧随NTAG212 Mifare Ultralight withAuthentication和NTAG216的数据表之后)。 到目前为止,我取得了以下成就: 如果未设置密码或新标签/空白标签,请在NTAG216上设置密码写保护。 如果已设置密码,请使用PWD_AUTH并比较PACK进行身份验证。 读取数据。 写入/覆盖数据。

  • 我已经实现了通过低级通信方法与NTAG216交互的代码(遵循NTAG212 Mifare Ultralight与身份验证和NTAG216的数据表)。 如果未设置或如果新/空白标签,请在NTAG216上设置密码写入保护。 如果已设置密码,请使用PWD_AUTH并比较PACK进行身份验证。 读取数据。 写入/覆盖数据。 检测我在其他应用程序中写入标签的NDEF消息。换句话说,我可以使用方法写入标签,也

  • 我有一个Android平板电脑,Android4.2。这款平板电脑没有NFC硬件。然而,我有一个外部USB阅读器:ACR1252U,它附带了一个Android库。不幸的是,这个库只给了我基本的功能--读和写标记。虽然这很有效,但还不够... 因为对于我的应用程序,我需要将文件从我的Android4.2平板电脑传输到其他NFC设备(Android智能手机)。因此,我需要将NFC阅读器置于对等模式--

  • NFC是一个用JMS实现,稳定可靠,分布式的聊天服务器与客户端。它的特点包括:内置负载平衡和HTTP Tunneling支持。利用负载平衡这个特点能够形成一个分布式的服务器网络,类似于一个IRC网络。

  • NativeScript NFC plugin Installation From the command prompt go to your app's root folder and execute: NativeScript Version 7+: ns plugin add nativescript-nfc NativeScript Version 6 and below: tns plu