使用 APDU C# 设置自己的身份验证密钥 MiFare Classic

Posted

技术标签:

【中文标题】使用 APDU C# 设置自己的身份验证密钥 MiFare Classic【英文标题】:Set own authentication keys MiFare Classic with APDU C# 【发布时间】:2014-05-12 18:31:01 【问题描述】:

我正在使用 CardWerk 的 SMARTCARD API。

如何使用 APDU 更改默认密钥 ((byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF)?

APDU 由 CLASS、INSTRUCTION、P1、P2 组成。 我一直在阅读文档,但找不到将实际密钥更改为新密钥所需的参数。

【问题讨论】:

您要更改卡上的密钥还是读卡器用于认证的密钥? 迈克尔,卡片上的钥匙。 【参考方案1】:

MIFARE Classic卡的密钥变更流程如下:

    向要更改密钥的 secor 进行身份验证。 使用正常的读取操作读取扇区尾部(或生成包含所需访问字节的新扇区尾部)。扇区尾部是扇区的最后一个块(即对于 MF Classic 1K,每个扇区的块 3)。 用新密钥填充扇区尾部。请注意,您将无法在第 2 步中读取当前密钥,因此您必须填写密钥 A 和密钥 B(如果存在),即使您希望它们与以前保持一致!) 使用正常的写入操作写入扇区尾部。 向另一个扇区进行身份验证(如果您希望更改立即生效)。

扇区尾部的格式如下:

xx xx xx xx xx xx zz zz zz gg yy yy yy yy yy yy

xx xx xx xx xx xx 是密钥 A,yy yy yy yy yy yy 是密钥 B,zz zz zz 是强制基于密钥的访问权限的访问字节。 gg 是一个通用字节,没有特定含义,除非您使用 MIFARE 应用程序目录或 NXP 的 NDEF 映射来使用 MIFARE Classic 作为 NFC 标签)。

请注意,将访问字节设置为无效值会导致卡无法访问!

一个示例扇区预告片可能如下所示:

FF FF FF FF FF FF 78 77 88 00 FF FF FF FF FF FF

访问条件意味着您可以使用密钥A读取并使用密钥B读取/写入。

由于 MIFARE Classic 卡不支持 APDU,因此很难为此提供现成的 APDU 命令。 (MIFARE Classic 卡是非接触式存储卡,使用自己专有的非接触式协议和 PC/SC 兼容的智能卡读卡器通常只将这些专有的内存访问命令映射到 APDU。)

但是,如果您的阅读器支持存储卡的 PC/SC 2.01 命令,则命令可能如下所示:

    将密钥 xxxxxxxxxxxx 加载到密钥槽 0(取决于您的阅读器,您可能需要在 P2 中编码不同的槽号;记住在这种情况下调整身份验证命令):

    FF 82 2000 06 xxxxxxxxxxxx
    

    使用该密钥作为密钥 A 验证扇区 0:

    FF 86 0000 05 01 0000 60 00
    

    使用该密钥作为密钥 B 验证扇区 0:

    FF 86 0000 05 01 0000 61 00
    

    为扇区 0(在块 3 中)编写新的扇区预告片:

    FF D6 0003 10 xxxxxxxxxxxx zzzzzz gg yyyyyyyyyyyy
    

【讨论】:

非常感谢,这有助于我理解。我得到 'SW1='65' 和 SW2='81':内存故障(写入不成功)。当我尝试编写新密钥时。这是我当前的身份验证的问题吗?我使用默认键,他们返回我是成功的。 @GeorgeMR 您使用什么密钥进行身份验证以及您阅读的扇区预告片是什么?或者您在身份验证或读取期间是否已经收到错误? 我正在使用新 mifare 卡中的默认密钥 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF。我的身份验证成功,但是当我使用写入命令发送新密钥时:new Key A sector 0x00 new key B 我得到了错误。 我真的不知道扇区拖车命令。也许是我的问题? 我正在发送 78 77 88 00

以上是关于使用 APDU C# 设置自己的身份验证密钥 MiFare Classic的主要内容,如果未能解决你的问题,请参考以下文章

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

APDU FF 88 00 给出的长度不正确

使用 ISO 7816-4 APDU 的 DESFire 卡中的外部身份验证

Mifare desfire apdu 命令

Bitstamp - C# 中的新身份验证 - 签名

C# 微软身份认证