修改密钥命令说明-0xC4:
此命令允许更改存储在 PICC 上的任何密钥。
如果选择 AID = 0x00,则更改适用于 PICC 主密钥,因此只有 KeyNo = 0x00 有效(PICC 上仅存在一个 PICC 主密钥)。在所有其他情况下(AID≠0x00),更改适用于当前所选应用程序(由其 AID 表示)中指定的 KeyNo。
作为参数,该命令采用一个字节长度的 KeyNo,并且必须在从 0x00 到应用程序密钥数量 - 1 的范围内。
第二个参数保存有关打包在密码中的新密钥的信息。
相应的密钥设置(参见第 4.3.2 章)定义了是否允许更改密钥,此外,它们还显示了在 ChangeKey 命令之前进行身份验证所需的密钥。
• 要更改任何密钥(Master Key 和ChangeKey Key 除外),需要使用ChangeKey 进行身份验证。
• 要更改ChangeKey Key 或Master Key,需要使用Master Key 进行验证。
• 如果用于验证的 KeyNo 与要更改的 KeyNo 不同,并且 ChangeKey Key 设置为值 ≠ 0xE,则 PCD 需要通过以下方式生成数据帧“解密密钥数据”:
新密钥和当前密钥按位异或(16 字节)。 CRC(2 字节)在异或数据上计算并附加在末尾。此外,附加了新密钥的 CRC(2 字节)。在应用此零填充(4 字节)以达到 8 的倍数(总共 24 字节)的足够帧大小之后。
最后对整个密钥数据字段执行 DES/3DES 解密操作(使用当前会话密钥)。这三个密码块使用 CBC 发送模式链接在一起。
• 如果用于认证的 KeyNo 与要更改的 KeyNo 相同,或者 ChangeKey Key 设置为 0xE,PCD 需要通过以下方式生成数据帧“解密密钥数据”:
CRC(2 字节)是在新的密钥数据(16 字节)上计算出来的,并附加在末尾。在应用此零填充(6 个字节)后,达到 8 的倍数(总共 24 个字节)的足够帧大小。最后对整个密钥数据字段执行 DES/3DES 解密操作(使用当前会话密钥)。
这三个密码块使用 CBC 发送模式链接在一起。
• 如果 ChangeKey 密钥设置为 0xF(“从不”),则除主密钥(参见第 4.3.2 章 Bit0)之外的所有密钥都将被冻结。因此,ChangeKey 命令在尝试执行时将返回错误代码
更改与主密钥不同的密钥。
注意:成功更改用于达到当前身份验证状态的密钥后,此身份验证将失效,即后续操作需要使用新密钥进行身份验证。