我有兴趣将RFID1356MIFARE与ESP32-EVB集成,并将其用作UART上的读卡器。基本上是读取uid,向UART串行写入命令,并根据读取器的输出授予访问权限。最初我尝试使用这个库:https://github.com/elechouse/PN532但我发现RFID1356MIFARE固件与它不兼容。
我想了解RFID阅读器如何授予对卡的访问权限,例如打开门。感谢这个线程:Mifare 1K认证密钥,我开始理解这两个认证密钥是如何工作的。
我还是不明白的是:
- 谁设置认证密钥
- 这些密钥是每张卡唯一的吗? 这些键是否存储在读取器中?
- 我可以读取卡上的密钥吗?
- 这些钥匙是授予访问权限的钥匙吗,比如说,与阅读器相连的门?如果没有,是什么使卡具有访问权限? 这些密钥是唯一的认证形式吗?
- UID仅用于标识吗?
- 如果所有信息都在第一个扇区可用,为什么要有16个扇区?为每个扇区设置不同的键的目的是什么?
我最重要的问题是:是什么让读卡器赋予"访问权限"?到一张卡片?
我在Mifare Authentication上找到了这些文档,它们提到了针对特定阅读器的Load Authentication Keys
和Authentication
命令。我正在使用的阅读器没有这样的命令。看着这个线程Mifare卡安全也让我意识到我的读卡器缺少一些命令,或者它们只是非常糟糕的文档。
我也从NXP读了MIFARE文档,但没有什么是我真正需要的。
好的,这里是你相应问题的答案:
- KEY A和KEY B由卡制造商设置为默认值(0xFF…)。
- 默认情况下,每个卡都是相同的。
- 两个密钥都存储在Card中。阅读器还需要知道这些键才能读取您的卡片。
- 不,你不能从卡读取密钥,除非你至少有一个密钥。即使您可以访问任何密钥,也可以同时禁用读取密钥。 不,这些钥匙不允许进入门。它们用于授予相应扇区上的读/写访问权限。这些密钥是身份验证的一种形式,通常用于阅读器。UID对于大多数身份验证情况几乎是无用的,因为任何人都可以读取和修改它们。
- 每个扇区有3个数据块,最后一个扇区有一对键。读取扇区前三个块的数据需要这些键。
所以总的来说,首先你创建一个身份验证/标识字符串,并将其存储在任何扇区(假设扇区4)的数据块中。然后你需要更改该扇区的KEY a/B,以便除了你自己的访问控制设备外,没有人可以从该扇区读取数据。现在只有知道您的特定键的读取器可以读取扇区4上的数据,从而防止卡的克隆。您的读卡器将从扇区4读取数据,并使用您存储的字符串来检查该卡是否具有访问权限。希望我解决了你的问题。Mifare经典1k数据表有很多关于这方面的信息,请查看8.7内存访问部分。