ACR122U 的 MIFARE Classic 1K 加载身份验证密钥失败

Posted

技术标签:

【中文标题】ACR122U 的 MIFARE Classic 1K 加载身份验证密钥失败【英文标题】:MIFARE Classic 1K load authentication keys failure with ACR122U 【发布时间】:2016-03-22 05:12:18 【问题描述】:

我正在使用 ACR122U NFC 读写器和 MIFARE Classic 1K 卡。要为 MIFARE 卡加载身份验证密钥,我使用以下 APDU 命令:

FF 82 20 00 06 FF FF FF FF FF FF

读者回复90 00(表示成功)。但是,在另一台 PC 上,我有相同的读写器和相同的标签,但我收到响应代码 63 00,这意味着操作失败。

当我阅读 ACR122U 文档时,它将命令声明为

FF 82 00 00 06

这个字节被命名为key structure,在文档中它的值是00。这个字节会不会是这个问题的根源?

谁能帮我解释一下密钥结构字节的值?

【问题讨论】:

【参考方案1】:

我很惊讶您发现支持密钥结构 (P1) 设置为 0x20 的 ACR122U。 API manual of the reader(请参阅第 5.1 节 加载身份验证密钥)清楚地表明 0x00 以外的值是保留的(即不得使用)。这意味着 ACR122U 仅支持易失性内存中的卡密钥(即卡的身份验证密钥)(即拔出读卡器时从内存中清除密钥)。

您可以在PC/SC specification 中找到密钥结构 (P1) 字节的定义(在第 3 部分。PC 连接接口设备的要求):

Bit 7:该位指示在此命令中传输的密钥是卡片密钥('0')还是读卡器密钥('1')。读卡器密钥是在 LOAD KEYS 命令(见第 6 位)中传输期间用于加密卡密钥的密钥。 位 6:在此命令中传输的密钥以纯文本 ('0') 或使用读取器密钥加密 ('1') 传输(请参阅位 3..0)。 第 5 位:该位指示传输的密钥是否应存储在易失性 ('0') 或非易失性 ('1') 内存中。 位 4:保留并始终设置为“0”。 第 3..0 位:如果设置了第 6 位,则用于加密传输密钥的读取器密钥编号。

【讨论】:

好吧,我什至还尝试了 0x10、0x30 和 0x40 之类的值。除了 40.. 发出连续的哔声之外,它们都工作了。 我的问题通过将值改回 0x00 解决了。但真正让我吃惊的是这些值是如何在我的 NFC 阅读器上发挥作用的?【参考方案2】:

加载身份验证密钥

找到附图

load key Image

密钥结构:00 密钥加载到读卡器易失性存储器中 钥匙编号:阅读器上的 00~01 钥匙位置 Key:加载到阅读器中的键值,例如 FF FF FF FF FF FF

响应:90 00 操作成功完成 : 63 00 操作失败

【讨论】:

以上是关于ACR122U 的 MIFARE Classic 1K 加载身份验证密钥失败的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 ACR122U 验证 NTAG213

Mifare Classic一操作就显示。 错误: 这不是一张MIFARE CLASSIC卡片。

ACR122U 发送直接命令返回 -2 和分段错误

ACR122u卡仿真模式发送PN532指令

无法验证具有 7 字节 UID ACR122U 的 NFC 标签

智能卡与 ACR122U 交互