IC卡安全操作基本命令共32页文档.docx
《IC卡安全操作基本命令共32页文档.docx》由会员分享,可在线阅读,更多相关《IC卡安全操作基本命令共32页文档.docx(59页珍藏版)》请在冰豆网上搜索。
IC卡安全操作基本命令共32页文档
一、IC卡安全操作基本命令-写密钥(WRITEKEY)
其实,任何一门学科都离不开死记硬背,关键是记忆有技巧,“死记”之后会“活用”。
不记住那些基础知识,怎么会向高层次进军?
尤其是语文学科涉猎的范围很广,要真正提高学生的写作水平,单靠分析文章的写作技巧是远远不够的,必须从基础知识抓起,每天挤一点时间让学生“死记”名篇佳句、名言警句,以及丰富的词语、新颖的材料等。
这样,就会在有限的时间、空间里给学生的脑海里注入无限的内容。
日积月累,积少成多,从而收到水滴石穿,绳锯木断的功效。
1、命令功能描述
单靠“死”记还不行,还得“活”用,姑且称之为“先死后活”吧。
让学生把一周看到或听到的新鲜事记下来,摒弃那些假话套话空话,写出自己的真情实感,篇幅可长可短,并要求运用积累的成语、名言警句等,定期检查点评,选择优秀篇目在班里朗读或展出。
这样,即巩固了所学的材料,又锻炼了学生的写作能力,同时还培养了学生的观察能力、思维能力等等,达到“一石多鸟”的效果。
写密钥命令提供将密钥从卡外转入卡片中指定位置的功能,即包括新的密钥的添加,也包括对原有密钥的修改。
宋以后,京师所设小学馆和武学堂中的教师称谓皆称之为“教谕”。
至元明清之县学一律循之不变。
明朝入选翰林院的进士之师称“教习”。
到清末,学堂兴起,各科教师仍沿用“教习”一称。
其实“教谕”在明清时还有学官一意,即主管县一级的教育生员。
而相应府和州掌管教育生员者则谓“教授”和“学正”。
“教授”“学正”和“教谕”的副手一律称“训导”。
于民间,特别是汉代以后,对于在“校”或“学”中传授经学者也称为“经师”。
在一些特定的讲学场合,比如书院、皇室,也称教师为“院长、西席、讲席”等。
为了保证密钥在传输过程中的安全性,在命令报文中的密钥将以密文的形式存在,用卡内外双方共有的密钥进行加密。
该命令可以提供对称密钥的写操行,也可以提供非对称密钥的写操作。
传输过程中用以加密密钥内容的密钥一般选用对称密钥,可以是相应DF的主控密钥。
为了防止在传输过程中数据错误,命令数据域还带安全报文MAC。
下面主要介绍对称密钥的写操作。
2、命令报文格式
命令的APDU内容如下所示:
代码值
CLA0x84
INS0xD4
P1KEYTYPE
P20x00
LcDATA域长度
Data密钥信息密文+MAC
Le不存在
其中:
*P1指定了要写入的密钥的类型,对于对称密钥给0x00。
*如果写入的是对称密钥的话,分为DES密钥和3DES密钥两种,密钥体的长度分别为8Byte和16Byte。
*DATA域的密钥信息数据为加密以后的数据,加密的密钥为对应DF的主控密钥,加密算法为3DES。
*DATA域密钥信息密文加密前的明文为对称密钥属性和密钥体组成的记录条,编码格式同KEY文件的编码格式。
*为了保证密钥的完整性,在传输过程中命令数据报文带安全报文字节,用对应DF的主控密钥计算。
3、响应报文数据
响应报文数据域不存在。
4、响应报文状态码
此命令执行成功的状态码为0x9000。
对于异常情况,IC卡可能回送的错误码如下所示:
SW1SW2含义
0x650x81存储区错误
0x670x00Lc错误
0x690x81对应的KEY文件没有找到
0x690x82安全条件不满足
0x690x84随机数无效
0x690x85命令执行条件不满足
0x690x87MAC丢失
0x690x88MAC错误
0x6A0x81应用锁定
0x6A0x84文件空间不足
0x6A0x86P1、P2不正确
0x6D0x00INS错误
0x6E0x00CLA错误
5、命令实现的其他要求
对于命令报文数据域的格式可以根据COS内部数据结构实现的不同自定义,但是需要严格保证的是密钥明文的安全性和完整性。
6、命令实现设计
在写密钥的过程中,需要注意如下问题:
*数据域的密钥属性字节中要能够分辨密钥是主控密钥,在一般实现中,DF下的主控密钥都单独存放,在更新过程中要能够区分开。
*数据域的密钥属性字节中包含有密钥的用途、版本、索引等标识,通过这些标识能够分辨出要写入的密钥和原文件中的密钥是否重复,如果重复的话写操作是覆盖操作,否则为添加操作。
*如果是覆盖操作的话,前后密钥的算法类型等信息必须一致;如果是添加操作的话,要检查KEY文件剩余空间是否能够足够。
*在KEY文件的文件描述块中包含了文件写操作的控制标识符,在进行写密钥操作进(除了主控密钥)需要满足其定义的条件。
7、命令使用示例
(1)预设环境
假设已经满足KEY添加条件。
对称KEY文件支持多条KEY记录。
(2)命令报文
写对称密钥记录的APDU:
84D4000013112233445566778899AABBCCDDEEFF01020304
其中:
*84表示WRITEKEY命令的CLA。
*D4表示WRITEKEY命令的INS。
*00表示WRITEKEY命令的P1,即添加的是对称密钥。
*00表示WRITEKEY命令的P2。
*13表示WRITEKEY命令的Lc。
*112233445566778899AABBCCDDEEFF表示WRITEKEY命令的KEY记录加密结果,假设原文为0102030105063308090A0B0C0D0E0F:
01表示密钥类型;02表示密钥版本;03表示密钥索引号;01表示对应算法为DES算法;05表示使用密钥的安全条件;06表示密钥认证成功之后的安全状态;33表示密钥认证计数器,第一个3表示最大允许尝试次数,第二个3表示当前剩余尝试次数;08090A0B0C0D0E0F表示DES8Byte密钥的原文。
*01020304表示WRITEKEY命令的MAC。
(3)WRITEKEY响应报文
卡片处理以后,WRITEKEY没有响应报文。
二、IC卡安全操作基本命令-密码解锁(PINUNBLOCK)
1、命令功能描述
验证码命令用以解锁个人密码,是PIN维护的一个重要命令。
每一个PIN记录都含有一个尝试次数计数器,在校验PIN的过程中,如果PIN校验失败的话,尝试计数器的值减一,如果连续多次失败的话,尝试计数器的值可能减为0,这时PIN记录被锁定,将无法再进行校验操作,也就是无法使用了。
这时需要对PIN记录进行解锁操作。
解锁操作主要是将PIN记录的尝试计数器复位。
2、命令报文格式
命令的APDU内容如下所示:
代码值
CLA0x84
INS0x24
P1PINID
P20x01
Lc0x04
DataMAC
Le不存在
其中:
*P1指定要解锁PIN的ID号,如果P1为0x00表示对PIN文件的第一条记录进行解锁,否则根据P1指定的PINID进行查找。
*为了进行安全控制,命令数据域带MAC,MAC用对应DF的主控密钥计算。
3、响应报文数据
响应报文数据域不存在。
4、响应报文状态码
此命令执行成功的状态码为0x9000。
对于异常情况,IC卡可能回送的错误码如下所示:
SW1SW2含义
0x650x81存储区错误
0x670x00Lc错误
0x690x81PIN文件没有找到
0x690x82安全条件不满足
0x690x84随机数无效
0x690x85命令执行条件不满足
0x690x87MAC丢失
0x690x88MAC错误
0x6A0x86P1、P2不正确
0x6D0x00INS错误
0x6E0x00CLA错误
5、命令实现的其他要求
根据COS提供的功能不同,该命令的功能可以用应用中定义的重装个人密码(RELOADPIN)命令代替。
6、命令实现设计
在执行该命令前,应用必须先发一条取随机数命令,卡片存在4Byte有效随机数。
7、命令使用示例
(1)预设环境
假设PIN文件支持多个PIN记录,要解锁的PIN示例对应的为添加命令示例中添加的PIN。
(2)命令报文
解锁PIN记录的APDU:
842401010411223344
其中:
*84表示PINUNBLOCK命令的CLA。
*24表示PINUNBLOCK命令的INS。
*01表示PINUNBLOCK命令的P1,即要解锁的PIN的ID。
*01表示PINUNBLOCK命令的P2。
*04表示PINUNBLOCK命令的Lc,即数据域的长度。
*11223344表示PINUNBLOCK命令的MAC。
(3)PINUNBLOCK响应报文
卡片处理以后,PINUNBLOCK没有响应报文。
三、IC卡安全操作基本命令-内部认证(INTERNALAUTHENTICATION)
1、命令功能描述
内部认证命令提供了利用终端设备发来的随机数和自身存储的密钥进行数据认证的功能,也就是终端认证卡片合法性的过程。
2、命令报文格式
命令的APDU内容如下所示:
代码值
CLA0x00
INS0x88
P10x00
P20x00
Lc0x10
Data认证数据
Le0x00
其中:
*DATA域长度为16Byte,前8Byte是外部产生的随机数,也就是验证的中间数据,后8Byte是外部给出的分散向量,用来计算认证过程密钥。
3、响应报文数据
如果命令执行成功以后,响应报文数据域给出来卡片的计算结果供终端认证,长度为8Byte。
4、响应报文状态码
此命令执行成功的状态码为0x9000。
对于异常情况,IC卡可能回送的错误码如下所示:
SW1SW2含义
0x620x81回送数据可能有错
0x640x00标志状态位没有改变
0x670x00Lc错误
0x680x82不支持安全报文
0x690x01命令执行条件不满足
0x690x85不满足密钥使用条件
0x6A0x80数据域参数不正确
0x6A0x86P1、P2不正确
0x6A0x88密钥查找失败
0x6D0x00INS错误
0x6E0x00CLA错误
5、命令实现的其他要求
内部认证命令是终端认证卡片的过程,不同的应用可能会有不同的规定,如果要支持特殊应用的话,需要参考相关的应用需求,明确命令的数据的具体格式和计算方法。
6、命令实现设计
对认证数据的计算包括了如下几个步骤:
*密码的查找。
内部认证需要专门的密钥,是对称密钥,通常为3DES密钥,在当前文件的对称密钥文件中查找,查找条件包括密钥用途、密钥版本和密钥索引等,可以使用单一条件,也可以使用组合条件。
*过程密钥生成。
利用找到的认证密钥对命令数据域中后8Byte分散向量做3DES加密计算,结果为8Byte,即为此次内部认证的过程密钥。
*认证结果计算。
将得到的过程密钥对命令数据域中前8Byte外部终端给出的随机数做DES加密计算,得到8Byte认证结果,返回。
7、命令使用示例
(1)预设环境
除了需要有相应密钥外无其他特殊环境要求。
(2)命令报文
进行内部认证的APDU:
00880000100102030405060708090A0B0C0D0E0F10
其中:
*00表示INTERNALAUTHENTICATION命令的CLA。
*88表示INTERNALAUTHENTICATION命令的INS。
*00表示INTERNALAUTHENTICATION命令的P1。
*00表示INTERNALAUTHENTICATION命令的P2。
*10表示INTERNALAUTHENTICATION命令的Lc,验证数据和分散数据。
*0102030405060708表示INTERNALAUTHENTICATION命令的DATA前半部分,是终端产生的8Byte随机数。
*090A0B0C0D0E0F10表示INTERNALAUTHENTICATION命令的DATA后半部分,是终端产生的过程密钥分散数据。
(3)INTERNALAUTHENTICATION响应报文
卡片处理以后,INTERNALAUTHENTICATION的响应报文为卡片计算得到的8Byte验证数据。
四、IC卡安全操作基本命令-外部认证(EXTERNALAUTHENTICATION)
1、命令功能描述
外部认证命令提供了利用卡片产生随机数,外部利用密钥设备对该数据进行计算完成对终端的数据认证功能,也就是卡片认证终端合法性的过程。
外部认证成功以后,将修改对应的安全状态为内部认证结果的安全状态,并且复位卡片内对应密钥的尝试计数器到初值。
如果验证失败,将对应密钥的尝试计数器值减一,直至减为0将密钥锁定不能再进行外部认证操作为止。
由于外部认证过程中需要卡片产生的随机数,所以,在外部认证命令执行前终端必须向卡片发送一条随机数命令。
2、命令报文格式
命令的APDU内容如下所示:
代码值
CLA0x00
INS0x82
P10x00
P20x00
Lc0x10
Data认证数据
Le不存在
其中:
DATA域长度为16Byte,前8Byte是外部计算后的认证结果,也就是需要卡片验证的数据,后8Byte是外部给出的分散向量,用来计算认证过程密钥。
3、响应报文数据
响应报文数据域不存在。
4、响应报文状态码
此命令执行成功的状态码为0x9000。
对于异常情况,IC卡可能回送的错误码如下所示:
SW1SW2含义
0x630xCX认证失败,X表示对应密钥还能够尝试的次数
0x650x81存储空间错误
0x670x00Lc错误
0x690x83对应密钥锁定
0x690x84随机数无效
0x690x85不满足密钥使用条件
0x6A0x80数据域参数不正确
0x6A0x86P1、P2不正确
0x6A0x88密钥查找失败
0x6D0x00INS错误
0x6E0x00CLA错误
5、命令实现的其他要求
外部认证命令是卡片认证终端过程,不同的应用可能会有不同的规定,如果要支持特殊应用的话,需要参与相关的应用需求,明确命令的数据的具体格式和计算方法。
6、命令实现设计
对认证数据的处理包括了如下几个步骤:
*随机数有效性检查。
在数据处理前需要检查卡内是否事先存在4Byte有效的随机数。
如果随机数有效的话,在随机数后补4Byte的0x00。
*密码的查找。
外部认证需要专门的密钥,是对称密钥,通常是3DES密钥,在当前文件的对称密钥文件中查找,查找条件包括密钥用途、密钥版本和密钥索引等,可以使用单一条件,也可以使用组合条件。
密钥找到以后需要检查相应的使用条件是否满足,密钥是否有效等等。
*过程密钥生成。
利用找到的认证密钥对命令数据域中后8Byte分散向量做3DES加密计算,结果为8Byte,即为此次外部认证的过程密钥。
*卡内认证结果计算。
将得到的过程密钥对补充0x00以后的随机数做DES加密计算,得到8Byte的卡片计算结果。
*将卡内计算结果和命令数据域前8Byte的终端认证数据做比较,如果一致的话表示认证成功,将对应密钥的尝试计数器复位,同时修改对应的安全状态;如果数据不一致的话,表示认证失败,将对应密钥的尝试计数器减一,对应的安全状态不变。
*最后返回相应的结果。
7、命令使用示例
(1)预设环境
假设已经在卡片取得4Byte随机数。
(2)命令报文
进行外部认证的APDU:
00820000100102030405060708090A0B0C0D0E0F10
其中:
*00表示EXTERNALAUTHENTICATION命令的CLA。
*82表示EXTERNALAUTHENTICATION命令的INS。
*00表示EXTERNALAUTHENTICATION命令的P1。
*00表示EXTERNALAUTHENTICATION命令的P2。
*10表示EXTERNALAUTHENTICATION命令的Lc,待验证数据和分散数据。
*0102030405060708表示EXTERNALAUTHENTICATION命令的DATA前半部分,是终端计算得到的8Byte待验证数据。
*090A0B0C0D0E0F10表示EXTERNALAUTHENTICATION命令的DATA后半部分,是终端产生的过程密钥分散数据。
(3)EXTERNALAUTHENTICATION响应报文
卡片处理以后,EXTERNALAUTHENTICATION没有响应报文。
五、IC卡安全操作基本命令-添加密码(ADDPIN)
添加密码命令是向当前文件下的PIN文件中添加一条新的PIN记录。
添加PIN的过程应用必须给出PIN的内容和PIN的相关属性,具体的格式定义可以参考PIN文件记录的数据结构。
2、命令报文格式
命令的APDU内容如下所示:
代码值
CLA0x84
INS0xFC
P10x00
P20x00
LcDATA域的长度
DataPIN记录+MAC
Le不存在
其中:
*DATA域中PIN记录的具体内容和相应的格式定义可以参考PIN文件的记录格式。
*为了保证PIN记录的完整性,命令需要带安全报文。
3、响应报文数据。
响应报文数据域为空。
4、响应报文状态码
此命令执行成功的状态码为0x9000。
对于异常情况,IC卡可能回送的错误码如下所示:
SW1SW2含义
0x650x81存储空间错误
0x670x00Lc错误
0x690x81PIN文件没有找到
0x690x82安全条件不满足
0x690x86命令执行条件不满足
0x690x87MAC丢失
0x690x88MAC错误
0x6A0x80数据域参数不正确
0x6A0x84文件中存储空间不足
0x6A0x86P1、P2不正确
0x6A0x88密钥查找失败
0x6D0x00INS错误
0x6E0x00CLA错误
5、命令实现的其他要求
在PIN文件的文件描述块中通常包含了文件写操作的控制标识符,执行添加个人密码命令以前要求对应安全状态满足条件。
命令MAC用对应DF文件的主控密钥计算。
6、命令实现设计
在修改PIN文件之前需要依次检查MAC、命令格式、PIN记录格式、PIN文件、安全状态和PIN文件空闲空间等等。
7、命令使用示例
(1)预设环境
假设PIN文件支持多个PIN记录。
(2)命令报文
添加PIN记录的APDU:
84FC00000E010F0804331234FFFFFF11223344
其中:
*84表示ADDPIN命令的CLA。
*FC表示ADDPIN命令的INS。
*00表示ADDPIN命令的P1。
*00表示ADDPIN命令的P2。
*0E表示ADDPIN命令的Lc,即PIN记录的长度。
*01表示ADDPIN命令的ID。
*0F表示PIN命令的使用安全条件。
*08表示PIN验证成功之后的安全状态。
*04表示PIN的最短长度4位。
*33表示PIN的计数器,第一个3表示允许尝试的最大次数,第二个3表示剩余的尝试次数。
*1234表示PIN的值。
*FFFFFF表示PIN值填充的内容。
*11223344表示ADDPIN命令的MAC。
(3)ADDPIN响应报文
卡片处理以后,ADDPIN没有响应报文。
六、IC卡安全操作基本命令-修改密码(CHANGEPIN)
修改密码命令将PIN文件中指定的一条PIN内容替换为新的PIN内容。
修改PIN之前要求验证旧的PIN,而且只能够修改PIN的内容,不包括PIN的属性。
由于PIN记录空间的限制,新的PIN长度有一定的限制。
新PIN添加成功以后,需要将原PIN的尝试计数器复位。
2、命令报文格式
命令的APDU内容如下所示:
代码值
CLA0x80
INS0x5E
P10x01
P2PINID
LcDATA域的长度
Data旧PIN|0xFF|新PIN
Le不存在
其中:
*P1指定要修改的ID号,如果P1为0x00表示对PIN文件的第一条记录进行修改,否则根据P1指定的PINID进行查找。
*DATA域包含的新旧PIN为PIN的内容,和PIN文件的格式一样,用BCD编码方式,不足字节用0xFF补齐。
3、响应报文数据
响应报文数据域不存在。
4、响应报文状态码
此命令执行成功的状态码为0x9000。
对于异常情况,IC卡可能回送的错误码如下所示:
SW1SW2含义
0x630xCX旧密码校验失败,X表示剩余的尝试次数
0x650x81存储区错误
0x670x00Lc错误
0x690x81PIN文件没有找到
0x690x82安全条件不满足
0x690x83PIN记录被锁定
0x690x85命令执行条件不满足
0x6A0x80数据域参数不正确
0x6A0x86P1、P2不正确
0x6D0x00INS错误
0x6E0x00CLA错误
5、命令实现的其他要求
修改密码命令在不同的应用中可能有不同的定义,这里给出的是一个通用的实现过程,具体的实现还可以参考相关的应用规范。
6、命令实现设计
修改密码操作的条件检查包括:
命令格式的检查、PIN文件的查找、PIN记录的查找、PIN记录的使用条件检查、旧PIN的校验等。
新PIN写入过程中要特别注意的是,如果新PIN内容比旧PIN短的话,需要写入多个0xFF,以覆盖旧PIN多余的内容。
7、命令使用示例
(1)预设环境
假设PIN文件支持多个PIN记录,修改PIN示例对应的为添加命令示例中添加的PIN。
(2)命令报文
修改PIN记录的APDU:
805E0101051234FF5678
其中:
*80表示CHANGEPIN命令的CLA。
*5E表示CHANGEPIN命令的INS。
*01表示CHANGEPIN命令的P1。
*01表示CHANGEPIN命令的P2,即要修改的PIN的ID。
*05表示CHAN