原创 IC卡安全操作基本命令-写密钥(WRITE KEY)

2008-10-20 13:33 8683 8 8 分类: 软件与OS
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下的主控密钥都单独存放,在更新过程中要能够区分开。

    * 数据域的密钥属性字节中包含有密钥的用途、版本、索引等标识,通过这些标识能够分辨出要写入的密钥和原文件中的密钥是否重复,如果重复的话写操作是覆盖操作,否则为添加操作。

    * 如果是覆盖操作的话,前后密钥的算法类型等信息必须一致;如果是添加操作的话,要检查KEY文件剩余空间是否能够足够。

    * 在KEY文件的文件描述块中包含了文件写操作的控制标识符,在进行写密钥操作进(除了主控密钥)需要满足其定义的条件。

  7、命令使用示例

   (1)预设环境

    假设已经满足KEY添加条件。对称KEY文件支持多条KEY记录。

   (2)命令报文

    写对称密钥记录的APDU:

    84 D4 00 00 13 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF 01 02 03 04

    其中:

    * 84 表示WRITE KEY命令的CLA。
    * D4 表示WRITE KEY命令的INS。
    * 00 表示WRITE KEY命令的P1,即添加的是对称密钥。
    * 00 表示WRITE KEY命令的P2。
    * 13 表示WRITE KEY命令的Lc。
    * 112233445566778899AABBCCDDEEFF 表示WRITE KEY命令的KEY记录加密结果,假设原文为0102030105063308090A0B0C0D0E0F:01 表示密钥类型;02表示密钥版本;03表示密钥索引号;01表示对应算法为DES算法;05表示使用密钥的安全条件;06表示密钥认证成功之后的安全状态;33表示密钥认证计数器,第一个3表示最大允许尝试次数,第二个3表示当前剩余尝试次数;08090A0B0C0D0E0F表示DES8Byte密钥的原文。
    * 01020304 表示WRITE KEY命令的MAC。

   (3)WRITE KEY响应报文

    卡片处理以后,WRITE KEY没有响应报文。

文章评论0条评论)

登录后参与讨论
我要评论
0
8
关闭 站长推荐上一条 /2 下一条