一、IC 卡安全操作基本命令-写密钥(WRITE KEY) 1、命令功能描述 写密钥命令提供将密钥从卡外转入卡片中指定位置的功能,即包括新的密钥的添加,也包括对原有密钥的修改。 为了保证密钥在传输过程中的安全性,在命令报文中的密钥将以密文的形式存在,用卡内外双方共有的密钥进行加密。 该命令可以提供对称密钥的写操行,也可以提供非对称密钥的写操作。传输过程中用以加密密钥内容的密钥一般选用对称密钥,可以是相应 DF 的主控密钥。 为了防止在传输过程中数据错误,命令数据域还带安全报文 MAC。 下面主要介绍对称密钥的写操作。 2、命令报文格式 命令的 APDU 内容如下所示: 代码 值 CLA 0x84 INS 0xD4 P1 KEY TYPE P2 0x00 Lc DATA 域长度 Data 密钥信息密文+MAC Le 不存在 其中: * P1 指定了要写入的密钥的类型,对于对称密钥给 0x00。 * 如果写入的是对称密钥的话,分为 DES 密钥和 3DES 密钥两种,密钥体的长度分别为8Byte 和 16Byte。 * DATA 域的密钥信息数据为加密以后的数据,加密的密钥为对应 DF 的主控密钥,加密算法为 3DES。 * DATA 域密钥信息密文加密前的明文为对称密钥属性和密钥体组成的记录条,编码格式同 KEY 文件的编码格式。 * 为了保证密钥的完整性,在传输过程中命令数据报文带安全报文字节,用对应 DF 的主控密钥计算。 3、响应报文数据 响应报文数据域不存在。 4、响应报文状态码 此命令执行成功的状态码为 0x9000。 对于异常情况,IC 卡可能回送的错误码如下所示: SW1 SW2 含义 0x65 0x81 存储区错误 0x67 0x00 Lc 错误 0x69 0x81 对应的 KEY 文件没有找到 0x69 0x82 安全条件不满足 0x69 0x84 随机数无效 0x69 0x85 命令执行条件不满足 0x69 0x87 MAC 丢失 0x69 0x88 MAC 错误 0x6A 0x81 应用锁定 0x6A 0x84 文件空间不足 0x6A 0x86 P1、P2 不正确 0x6D 0x00 INS 错误 0x6E 0x00 CLA 错误 5、命令实现的其他要求 对于命令报文数据域的格式可以根据 COS 内部数据结构实现的不同自定义,但是需要严格保证的是密钥明文的安全性和完整性。 6、命令实现设计 在写密钥的过程中,需要注意如下问题: * 数据域的密钥属性字节中要能够分辨密钥是主控密钥,在一般实现中,DF 下的主控密钥都单独存放,在更新过程中要能够区分开。 * 数据域的密钥属性字节中包含有密钥的用途、版本、索引等...