MIFARE Classic - 什么可能导致“全零键”和“未知键”错误?

时间:2015-12-16 04:09:44

标签: c# authentication rfid mifare contactless-smartcard

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

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

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

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

那么什么可能导致这个问题?

2 个答案:

答案 0 :(得分:1)

什么可能导致NXP TagInfo中的“全零键”和“未知键”错误?

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

什么可能导致该部门变得不可读?

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

但是,因为你指出

  

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

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

angular.module('myApp', [])
.directive('pluginNameOrWhatever', function() {
  return function(scope, element, attrs) {        
    setTimeout(function doWork(){
      //jquery code and plugins
    }, 0);        
  };
});

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

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

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

关于预告片和访问位,也请看这些问题:

答案 1 :(得分:1)

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

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

  2. 在扇区拖车上完成写入之前,已将卡从读取器中取出。众所周知,卡片撕裂会导致全部16字节的所有0x00写入。

在上述两种情况下,“访问位”现在都为00 00 00 ...,这将不可逆地锁定扇区。