用于 MIFARE Classic 身份验证的奇偶校验位

Parity bit for MIFARE Classic authentication

我了解到 MIFARE Classic 身份验证在奇偶校验位方面存在弱点。但我想知道 reader 是如何将奇偶校验位发送到标签的?

例如,这是一次失败的身份验证尝试的痕迹:

reader:26
tag:   02 00
reader:93 20
tag:   c1 08 41 6a e2
reader:93 70 c1 08 41 6a e2 e4 7c
tag:   18 37 cd
reader:60 00 f5 7b
tag:   ab cd 19 49
reader:59 d5 92 0f 15 b9 d5 53
tag:   a   //error code: 0x5

我知道在防冲突之后,标签会发送 NT(32-bit) 作为质询给 reader,而 reader 响应质询 {NR}(32-位)和 {AR}(32 位)。但是我不知道上面例子中的8位奇偶校验位在哪里。哪些是奇偶校验位?

您在问题中发布的示例跟踪要么不包含有关奇偶校验位的信息,要么所有奇偶校验位均有效(根据 ISO/IEC 14443-3)。

例如当通信跟踪显示 reader 发送 60 00 f5 7b 时,通过 RF 接口发送的实际数据将是(P 是奇偶校验位):

  b1 ... b8 P b1 ... b8 P b1 ... b8 P b1 ... b8 P
S 0000 0110 1 0000 0000 1 1010 1111 1 1101 1110 0 E

奇偶校验位在每个第 8 个字节 之后(即在每个八位字节之后)发送,并确保所有 9 位包含奇数个二进制 1(奇奇偶校验)。因此,它在该字节上形成一个 1 位校验和。在您的跟踪中,仅显示字节(但不显示它们之间的奇偶校验位)。

MIFARE Classic 中关于奇偶校验位的漏洞是奇偶校验位与实际数据一起加密(参见 de Koning Gans、Hoepman、 和 Garcia (2008):对 MIFARE Classic 的实际攻击,CARDIS 2008,LNCS 5189,第 267-282 页,Springer)。

因此,当您在不考虑加密的情况下查看通信轨迹时,根据 ISO/IEC 14443-3 奇偶校验计算规则可能会出现奇偶校验错误,因为加密的奇偶校验位可能与原始数据流。 Proxmark III 等工具会在通信跟踪中的相应字节后以感叹号 ("!") 指示观察到的奇偶校验错误。