原创 IC卡安全操作基本命令-外部认证(EXTERNAL AUTHENTICATION)

2008-10-20 13:31 10909 12 12 分类: 软件与OS
  1、命令功能描述

    外部认证命令提供了利用卡片产生随机数,外部利用密钥设备对该数据进行计算完成对终端的数据认证功能,也就是卡片认证终端合法性的过程。

    外部认证成功以后,将修改对应的安全状态为内部认证结果的安全状态,并且复位卡片内对应密钥的尝试计数器到初值。

    如果验证失败,将对应密钥的尝试计数器值减一,直至减为0将密钥锁定不能再进行外部认证操作为止。

    由于外部认证过程中需要卡片产生的随机数,所以,在外部认证命令执行前终端必须向卡片发送一条随机数命令。

  2、命令报文格式

    命令的APDU内容如下所示:

      代码              值
       CLA                 0x00
       INS                 0x82
       P1                  0x00
       P2                  0x00
       Lc                  0x10
       Data                认证数据
       Le                  不存在

    其中:DATA域长度为16Byte,前8Byte是外部计算后的认证结果,也就是需要卡片验证的数据,后8Byte是外部给出的分散向量,用来计算认证过程密钥。

  3、响应报文数据

    响应报文数据域不存在。

  4、响应报文状态码

    此命令执行成功的状态码为0x9000。

    对于异常情况,IC卡可能回送的错误码如下所示:

       SW1     SW2      含义
       0x63     0xCX        认证失败,X表示对应密钥还能够尝试的次数
       0x65     0x81        存储空间错误
       0x67     0x00        Lc错误
       0x69     0x83        对应密钥锁定
       0x69     0x84        随机数无效
       0x69     0x85        不满足密钥使用条件
       0x6A     0x80        数据域参数不正确
       0x6A     0x86        P1、P2不正确
       0x6A     0x88        密钥查找失败
       0x6D     0x00        INS错误
       0x6E     0x00        CLA错误  

  5、命令实现的其他要求

    外部认证命令是卡片认证终端过程,不同的应用可能会有不同的规定,如果要支持特殊应用的话,需要参与相关的应用需求,明确命令的数据的具体格式和计算方法。

  6、命令实现设计

    对认证数据的处理包括了如下几个步骤:

    * 随机数有效性检查。在数据处理前需要检查卡内是否事先存在4Byte有效的随机数。如果随机数有效的话,在随机数后补4Byte的0x00。

    * 密码的查找。外部认证需要专门的密钥,是对称密钥,通常是3DES密钥,在当前文件的对称密钥文件中查找,查找条件包括密钥用途、密钥版本和密钥索引等,可以使用单一条件,也可以使用组合条件。密钥找到以后需要检查相应的使用条件是否满足,密钥是否有效等等。

    * 过程密钥生成。利用找到的认证密钥对命令数据域中后8Byte分散向量做3DES加密计算,结果为8Byte,即为此次外部认证的过程密钥。

    * 卡内认证结果计算。将得到的过程密钥对补充0x00以后的随机数做DES加密计算,得到8Byte的卡片计算结果。

    * 将卡内计算结果和命令数据域前8Byte的终端认证数据做比较,如果一致的话表示认证成功,将对应密钥的尝试计数器复位,同时修改对应的安全状态;如果数据不一致的话,表示认证失败,将对应密钥的尝试计数器减一,对应的安全状态不变。

    * 最后返回相应的结果。

  7、命令使用示例

   (1)预设环境

    假设已经在卡片取得4Byte随机数。

   (2)命令报文

    进行外部认证的APDU:

    00 82 00 00 10 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10

    其中:

    * 00 表示EXTERNAL AUTHENTICATION命令的CLA。
    * 82 表示EXTERNAL AUTHENTICATION命令的INS。
    * 00 表示EXTERNAL AUTHENTICATION命令的P1。
    * 00 表示EXTERNAL AUTHENTICATION命令的P2。
    * 10 表示EXTERNAL AUTHENTICATION命令的Lc,待验证数据和分散数据。
    * 0102030405060708 表示EXTERNAL AUTHENTICATION命令的DATA前半部分,是终端计算得到的8Byte待验证数据。
    * 090A0B0C0D0E0F10 表示EXTERNAL AUTHENTICATION命令的DATA后半部分,是终端产生的过程密钥分散数据。

   (3)EXTERNAL AUTHENTICATION响应报文

    卡片处理以后,EXTERNAL AUTHENTICATION没有响应报文。

文章评论0条评论)

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