更改 MIFARE Classic 中扇区的身份验证密钥

Changing authentication key of a sector in MIFARE Classic

根据 Evan 在 this page 中的回答,为了更改扇区的身份验证密钥,我们需要覆盖该扇区的第 4 个块(最后一个块)中的密钥。

默认密钥始终是 'FF FF FF FF FF FF',这是一个六字节密钥。现在,如果我尝试使用 pi-rc522 library 中的 write 方法更改它,它会引发 Index Error,因为每个块必须为 16 个字节,但身份验证密钥只有 6 个字节长。

我哪里错了?

设备是 RC522,我在 Raspberry Pi 上使用 Raspbian 3.

您只能在 MIFARE Classic 卡上写入整块。因此,您需要编写完整的扇区尾部而不仅仅是密钥 A(前 6 个字节)。

完整的扇区预告片如下所示:

+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| KEY A                       | ACCESS BITS  | GP | KEY B                       |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+

如果您希望该扇区的所有块 readable/writable 仅具有密钥 A(即不使用密钥 B),您可以使用访问位 FF 07 80。因此,如果您想将键 A 设置为 11 22 33 44 55 66,您可以将此值用于尾部块:

+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| KEY A                       | ACCESS BITS  | GP | KEY B                       |
| 11   22   33   44   55   66 | FF   07   80 | 00 | 00   00   00   00   00   00 |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+

最后,请注意您写入扇区尾部的内容。访问位由冗余机制保护。如果将无效的访问位写入尾块,整个扇区将被不可逆转地阻塞。