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

2008-10-20 13:30 7225 6 7 分类: 软件与OS
1、命令功能描述

    内部认证命令提供了利用终端设备发来的随机数和自身存储的密钥进行数据认证的功能,也就是终端认证卡片合法性的过程。

  2、命令报文格式

    命令的APDU内容如下所示:

      代码              值
       CLA                 0x00
       INS                 0x88
       P1                  0x00
       P2                  0x00
       Lc                  0x10
       Data                认证数据
       Le                  0x00

    其中:

    * DATA域长度为16Byte,前8Byte是外部产生的随机数,也就是验证的中间数据,后8Byte是外部给出的分散向量,用来计算认证过程密钥。

  3、响应报文数据

    如果命令执行成功以后,响应报文数据域给出来卡片的计算结果供终端认证,长度为8Byte。

  4、响应报文状态码

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

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

       SW1     SW2      含义
       0x62     0x81        回送数据可能有错
       0x64     0x00        标志状态位没有改变
       0x67     0x00        Lc错误
       0x68     0x82        不支持安全报文
       0x69     0x01        命令执行条件不满足
       0x69     0x85        不满足密钥使用条件
       0x6A     0x80        数据域参数不正确
       0x6A     0x86        P1、P2不正确
       0x6A     0x88        密钥查找失败
       0x6D     0x00        INS错误
       0x6E     0x00        CLA错误

  5、命令实现的其他要求

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

  6、命令实现设计

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

    * 密码的查找。内部认证需要专门的密钥,是对称密钥,通常为3DES密钥,在当前文件的对称密钥文件中查找,查找条件包括密钥用途、密钥版本和密钥索引等,可以使用单一条件,也可以使用组合条件。

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

    * 认证结果计算。将得到的过程密钥对命令数据域中前8Byte外部终端给出的随机数做DES加密计算,得到8Byte认证结果,返回。

  7、命令使用示例

   (1)预设环境

    除了需要有相应密钥外无其他特殊环境要求。

   (2)命令报文

    进行内部认证的APDU:

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

    其中:

    * 00 表示INTERNAL AUTHENTICATION命令的CLA。
    * 88 表示INTERNAL AUTHENTICATION命令的INS。
    * 00 表示INTERNAL AUTHENTICATION命令的P1。
    * 00 表示INTERNAL AUTHENTICATION命令的P2。
    * 10 表示INTERNAL AUTHENTICATION命令的Lc,验证数据和分散数据。
    * 0102030405060708 表示INTERNAL AUTHENTICATION命令的DATA前半部分,是终端产生的8Byte随机数。
    * 090A0B0C0D0E0F10 表示INTERNAL AUTHENTICATION命令的DATA后半部分,是终端产生的过程密钥分散数据。

   (3)INTERNAL AUTHENTICATION响应报文

    卡片处理以后,INTERNAL AUTHENTICATION的响应报文为卡片计算得到的8Byte验证数据。


文章评论1条评论)

登录后参与讨论

用户377235 2015-11-25 10:20

不知道“终端产生的8Byte随机数”和 “终端产生的过程密钥分散数据”,怎么产生怎么获取
相关推荐阅读
用户6646 2010-06-09 16:44
Linux C中令人讨厌的段错误
作者:孙晓明,华清远见嵌入式学院讲师同学们在做练习的时候,编译完程序,执行的时候,有时会莫名的出现 “Segment fault”,即段错误,段错误是让许多C程序员都头疼的提示,因为对于这种模糊的提示...
用户6646 2010-06-09 13:06
VC6 显示行号 (无限制注册版)
make编译时出现错误, 会提示哪一行。可惜vc中不能显示行号,很是郁闷。这个插件可以显示行号,呵呵,很有用。VC显示行号插件说明-----------------------------------...
用户6646 2010-05-22 10:07
删除 nero search 的有效方法
不知道从什么时候开始,Nero多出来一个绑定的Nero Search,虽然可以不然它显示,可是他仍然会在后台占用资源。可以用以下方法解决:开始->运行,依次输入下列文字回车、确定即可(每次输一行...
用户6646 2010-04-03 08:46
2007年5月22日完成的全电控小电视(版本V2.0)
基础功能部分写了4000多行汇编,加上遥控红外部分达到了6000多行,大体介绍如下:1. 内置开关电源转换,11-37V供电;2. 全轻触操作,无机械可调器件,PWM调节亮度/色彩/背光;3.按钮有:...
用户6646 2010-03-17 09:41
三极管HFE与β的关系
hfe是三极管H参数,全称“共发射极低频小信号输出交流短路电流放大系数”,在等效四端网络中又叫“h21”。β是Ic与Ib函数关系的普遍表达式,尤其特指在晶体管基区中电流的分配关系。无论在教科书还是在应...
用户6646 2010-03-17 09:35
三极管饱和(2)
from:http://blog.ednchina.com/xcbao/10816/category.aspx本图片来自于<模拟集成电路的分析与设计>,用来表现三极管饱和时的carriers的分布。但...
我要评论
1
6
关闭 站长推荐上一条 /2 下一条