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