【问题标题】:MIFARE Classic - What could cause "All-zero key" and "Unknown key" error?MIFARE Classic - 什么可能导致“全零密钥”和“未知密钥”错误?
【发布时间】:2015-12-16 04:09:44
【问题描述】:

我开发了一个 C# 应用程序来写入 MIFARE Classic 卡。我使用默认密钥 (FF FF FF FF FF FF) 写入卡。

写入卡后,我注意到没有数据进入扇区 1 的块。相反,扇区 1 如下图所示(使用 NXP TagInfo 读取时):

此外,我无法再验证扇区 1 内的块。

这是在我使用我的应用程序写入卡片后发生的。在写之前,blocks很好(可以读取)。

那么什么会导致这个问题呢?

【问题讨论】:

    标签: c# authentication rfid mifare contactless-smartcard


    【解决方案1】:

    什么可能导致 NXP TagInfo 中出现“全零密钥”和“未知密钥”错误?

    这些并不是真正的错误。这只是告诉您 NXP TagInfo 无法读取该扇区,因为它不知道(“未知密钥”)对扇区 1 进行身份验证所需的密钥。

    什么可能导致扇区变得不可读?

    最明显的原因是您使用的卡已经包含一些受非标准密钥保护的数据(既不是出厂默认密钥,也不是 NDEF 密钥,也不是 NXP TagInfo 默认测试的任何其他密钥。在这种情况下,您的应用程序一开始就无法写入该卡的扇区 1。

    但是,既然你指出了

    这发生在我使用我的应用程序写入卡之后。写之前,积木没问题(可以读)。

    我假设您的应用程序写入扇区 1 的最后一个块(块 7)。每个扇区的最后一个块是扇区尾。该块包含该块的访问控制信息(认证密钥 A 和 B 以及访问位)。该块的格式如下:

    XX XX XX XX XX XX  ZZ ZZ ZZ  GG  YY YY YY YY YY YY
    

    其中XX XX XX XX XX XX(6字节)是密钥A,YY YY YY YY YY YY(6字节)是密钥B,ZZ ZZ ZZ(3字节)是访问条件,GG(1字节)是通用目的字节。

    因此,如果您覆盖此块,则会更改该扇区的身份验证密钥和访问条件。因此,如果您向该块写入新的身份验证数据(新的密钥 A/B 和新的访问位),则需要使用该更新后的信息进行未来的身份验证尝试。

    但是,如果您将部分数据写入该块,您很可能会将访问位设置为无效值。在这种情况下(访问位包含无效值),整个扇区永久不可用。作为一项安全功能,MIFARE CLassic 卡将阻止对具有无效访问条件的扇区的访问。一旦扇区处于该状态,就无法恢复。

    关于尾部块和访问位,另请参阅以下问题:

    【讨论】:

    • 我可以用不同的键重置块吗?
    • @VijayKumbhoje 这取决于。如果您已经用有效的访问条件覆盖了该块,并且您知道您向尾部块写入了什么,那么是的,您可以将这些字节作为新密钥。如果您向访问位写入了一些无效值,则不,该扇区永久不可用。无法重置。
    【解决方案2】:

    00 00 00 00 00 00 KeyA 可能在 2 种可能的情况下发生

    1. 0x00 写入扇区尾部的所有 16 个字节

    2. 在扇区尾部的写入完成之前,卡已从读卡器中取出。被称为卡片撕裂,它可能导致所有 0x00 都写入所有 16 个字节。

    在上述任一条件下,Accces Bits 现在将是 00 00 00... 这将不可逆转地锁定扇区。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-12
      • 2017-09-01
      • 2011-02-18
      • 1970-01-01
      • 1970-01-01
      • 2019-03-24
      • 1970-01-01
      相关资源
      最近更新 更多