4

我正在使用 CardWerk 的 SMARTCARD API。

如何(byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF使用 APDU 更改默认键 ( )?

APDU 由 CLASS、INSTRUCTION、P1、P2 组成。我一直在阅读文档,但找不到将实际密钥更改为新密钥所需的参数。

4

1 回答 1

15

修改 MIFARE Classic 卡的密钥的过程是这样的:

  1. 向要更改密钥的 secor 进行身份验证。
  2. 使用正常的读取操作读取扇区尾部(或生成包含所需访问字节的新扇区尾部)。扇区尾部是扇区的最后一个块(即对于 MF Classic 1K,每个扇区的块 3)。
  3. 用新密钥填充扇区尾部。请注意,您将无法在步骤 2 中读取当前密钥,因此您必须填写密钥 A 和密钥 B(如果存在),即使您希望它们与以前保持相同!)
  4. 使用正常的写入操作写入扇区尾部。
  5. 向另一个扇区进行身份验证(如果您希望更改立即生效)。

扇区预告片的格式如下:

xx xx xx xx xx xx zz zz zz gg yy yy yy yy yy yy

xx xx xx xx xx xx密钥 A在哪里,yy yy yy yy yy yy密钥 B 在哪里,并且zz zz zz是强制基于密钥的访问权限的访问字节。gg是一个没有特定含义的通用字节,除非您使用 MIFARE 应用程序目录或 NXP 的 NDEF 映射来使用 MIFARE Classic 作为 NFC 标签)。

请注意,将访问字节设置为无效值将导致卡无法访问!

示例扇区预告片可能如下所示:

FF FF FF FF FF FF 78 77 88 00 FF FF FF FF FF FF

访问条件意味着您可以使用密钥 A 读取并使用密钥 B 读取/写入。

由于 MIFARE Classic 卡不使用 APDU,因此很难为此提供现成的 APDU 命令。(MIFARE Classic 卡是非接触式存储卡,使用其专有的非接触式协议和符合 PC/SC 的智能卡读卡器通常仅将这些专有的内存访问命令映射到 APDU。)

但是,如果您的阅读器支持存储卡的 PC/SC 2.01 命令,则命令可能如下所示:

  1. 将密钥加载xxxxxxxxxxxx到密钥槽 0(取决于您的阅读器,您可能需要在 P2 中编码不同的槽号;记住在这种情况下调整身份验证命令):

    FF 82 2000 06 xxxxxxxxxxxx
    
  2. 使用该密钥作为密钥 A 验证扇区 0:

    FF 86 0000 05 01 0000 60 00
    
  3. 或者使用该密钥作为密钥 B 验证扇区 0:

    FF 86 0000 05 01 0000 61 00
    
  4. 为扇区 0(在块 3 中)编写新的扇区尾部:

    FF D6 0003 10 xxxxxxxxxxxx zzzzzz gg yyyyyyyyyyyy
    
于 2014-05-15T06:37:13.313 回答