C# MIFARE经典-什么可能导致;“所有零键”;及;“未知密钥”;错误?

C# MIFARE经典-什么可能导致;“所有零键”;及;“未知密钥”;错误?,c#,authentication,rfid,mifare,contactless-smartcard,C#,Authentication,Rfid,Mifare,Contactless Smartcard,我已经开发了一个C#应用程序来写入MIFARE经典卡。我使用默认键(FF FF FF)写入卡 写入卡后,我注意到没有数据进入扇区1的块。相反,扇区1如下图所示(使用NXP TagInfo读取时): 此外,我无法再验证扇区1内的块 这是在我写了我的申请卡后发生的。在写入之前,块很好(可以读取) 那么,是什么导致了这个问题?是什么导致NXP TagInfo中的“全零键”和“未知键”错误? 这些并不是真正的错误。这只是告诉您,NXP TagInfo无法读取扇区,因为它不知道(“未知密钥”)对扇区1进

我已经开发了一个C#应用程序来写入MIFARE经典卡。我使用默认键(
FF FF FF
)写入卡

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

此外,我无法再验证扇区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
(6字节)是键B,
ZZ ZZ
(3字节)是访问条件,
GG
(1字节)是通用字节

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

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

关于拖车挡块和访问位,另请参见以下问题:


00 KeyA可能在两种情况下发生

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

  • 在扇区预告片上的写入完成之前,该卡已从读卡器中移除。这称为卡撕裂,它可能导致所有0x00全部写入16个字节


  • 在上述任一条件下,Accces位现在将为00…这将不可逆地锁定扇区。

    我可以用不同的密钥重置块吗?@VijayKumbhoje,这取决于。如果您已经用有效的访问条件覆盖了块,并且您知道您写入了拖车块的内容,则可以将这些字节作为新密钥。如果您向访问位写入了一些无效值,则否,扇区永久不可用。无法重置此值。