Mifare访问条件计算

Den*_*sil 2 permissions rfid nfc mifare contactless-smartcard

我知道这篇文章: - Mifare Classic 1K的锁定机制

但是,实际上并不清楚 - 如何FF 07 80 FF在此字符串中计算值:

D3 F7 D3 F7 D3 F7 FF 07 80 FF 00 00 00 00 00 00
Run Code Online (Sandbox Code Playgroud)

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

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

任何帮助将非常感激.

Mic*_*and 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
Run Code Online (Sandbox Code Playgroud)

因此,可以使用密钥A only(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
    
    Run Code Online (Sandbox Code Playgroud)

这导致访问位08 77 8F.因此,您的扇区预告片可能看起来像这样(键A = D3F7D3F7D3F7和键B = 000000000000):

D3F7D3F7D3F7 08778F FF 000000000000
Run Code Online (Sandbox Code Playgroud)