Mifare访问条件计算

时间:2015-02-02 09:06:40

标签: permissions nfc rfid mifare contactless-smartcard

我知道这篇文章: - Locking mechanism of Mifare Classic 1K

然而,实际上并不清楚 - 如何在此字符串中计算FF 07 80 FF之类的值:

D3 F7 D3 F7 D3 F7 FF 07 80 FF 00 00 00 00 00 00

这意味着可以使用密钥A读取块并使用密钥B写入但不允许使用inc / dec。

如果我必须支持递增和递减操作,访问位应该如何。我知道C1,C2和C3必须是1,1,0这是如何反映到字节6,7和8的。

任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:5)

访问位FF 07 80转换为

C1 = 0x0 => C1_3 = 0, C1_2 = 0, C1_1 = 0, C1_0 = 0
C2 = 0x0 => C2_3 = 0, C2_2 = 0, C2_1 = 0, C2_0 = 0
C3 = 0x8 => C3_3 = 1, C3_2 = 0, C3_1 = 0, C3_0 = 0

因此,可以使用仅限密钥A Cx_3 = 0 0 1)来读取和编写扇区预告片。所有操作(读,写,递增,递减等)都可以使用键A Cx_{0,1,2} = 0 0 0对数据块执行,由于预告片的访问条件,键B被禁用块)。

如果您希望能够使用键A读取所有块,使用键B写入,使用键B执行值块增量并使用键A和B执行值块减少等,您可以使用如下访问条件:

  • 仅使用密钥B编写扇区预告片:Cx_3 = 0 1 1
  • 数据/值块:使用键A读取/递减,使用键B写入/递增:Cx_{0,1,2} = 1 1 0

    C1_3 = 0, C1_2 = 1, C1_1 = 1, C1_0 = 1 => C1 = 0x7
    C2_3 = 1, C2_2 = 1, C2_1 = 1, C2_0 = 1 => C2 = 0xF
    C3_3 = 1, C3_2 = 0, C3_1 = 0, C3_0 = 0 => C3 = 0x8
    

这会导致访问位08 77 8F。因此,您的扇区预告片可能如下所示(键A = D3F7D3F7D3F7且键B = 000000000000):

D3F7D3F7D3F7 08778F FF 000000000000