使用APDU C#设置自己的身份验证密钥MiFare Classic

Geo*_*eMR 4 rfid apdu smartcard-reader mifare contactless-smartcard

我正在使用CardWerk的SMARTCARD API.

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

APDU包括CLASS,INSTRUCTION,P1,P2.我一直在阅读文档,但我无法找到将实际密钥更改为新密钥所需的参数.

Mic*_*and 13

更改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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

    FF 82 2000 06 xxxxxxxxxxxx
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用该密钥作为密钥A验证扇区0:

    FF 86 0000 05 01 0000 60 00
    
    Run Code Online (Sandbox Code Playgroud)
  3. 或者使用该密钥作为密钥B验证扇区0:

    FF 86 0000 05 01 0000 61 00
    
    Run Code Online (Sandbox Code Playgroud)
  4. 为扇区0编写新的扇区预告片(在块3中):

    FF D6 0003 10 xxxxxxxxxxxx zzzzzz gg yyyyyyyyyyyy
    
    Run Code Online (Sandbox Code Playgroud)