1、IC卡安全操作基本命令共32页文档一、IC卡安全操作基本命令-写密钥(WRITE KEY) 其实,任何一门学科都离不开死记硬背,关键是记忆有技巧,“死记”之后会“活用”。不记住那些基础知识,怎么会向高层次进军?尤其是语文学科涉猎的范围很广,要真正提高学生的写作水平,单靠分析文章的写作技巧是远远不够的,必须从基础知识抓起,每天挤一点时间让学生“死记”名篇佳句、名言警句,以及丰富的词语、新颖的材料等。这样,就会在有限的时间、空间里给学生的脑海里注入无限的内容。日积月累,积少成多,从而收到水滴石穿,绳锯木断的功效。 1、命令功能描述单靠“死”记还不行,还得“活”用,姑且称之为“先死后活”吧。让学生把
2、一周看到或听到的新鲜事记下来,摒弃那些假话套话空话,写出自己的真情实感,篇幅可长可短,并要求运用积累的成语、名言警句等,定期检查点评,选择优秀篇目在班里朗读或展出。这样,即巩固了所学的材料,又锻炼了学生的写作能力,同时还培养了学生的观察能力、思维能力等等,达到“一石多鸟”的效果。 写密钥命令提供将密钥从卡外转入卡片中指定位置的功能,即包括新的密钥的添加,也包括对原有密钥的修改。宋以后,京师所设小学馆和武学堂中的教师称谓皆称之为“教谕”。至元明清之县学一律循之不变。明朝入选翰林院的进士之师称“教习”。到清末,学堂兴起,各科教师仍沿用“教习”一称。其实“教谕”在明清时还有学官一意,即主管县一级的教
3、育生员。而相应府和州掌管教育生员者则谓“教授”和“学正”。“教授”“学正”和“教谕”的副手一律称“训导”。于民间,特别是汉代以后,对于在“校”或“学”中传授经学者也称为“经师”。在一些特定的讲学场合,比如书院、皇室,也称教师为“院长、西席、讲席”等。 为了保证密钥在传输过程中的安全性,在命令报文中的密钥将以密文的形式存在,用卡内外双方共有的密钥进行加密。 该命令可以提供对称密钥的写操行,也可以提供非对称密钥的写操作。传输过程中用以加密密钥内容的密钥一般选用对称密钥,可以是相应DF的主控密钥。 为了防止在传输过程中数据错误,命令数据域还带安全报文MAC。 下面主要介绍对称密钥的写操作。 2、命令
4、报文格式 命令的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文件的编码格式。 * 为了保证密钥的完
5、整性,在传输过程中命令数据报文带安全报文字节,用对应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
6、0x86 P1、P2不正确 0x6D 0x00 INS错误 0x6E 0x00 CLA错误 5、命令实现的其他要求 对于命令报文数据域的格式可以根据COS内部数据结构实现的不同自定义,但是需要严格保证的是密钥明文的安全性和完整性。 6、命令实现设计 在写密钥的过程中,需要注意如下问题: * 数据域的密钥属性字节中要能够分辨密钥是主控密钥,在一般实现中,DF下的主控密钥都单独存放,在更新过程中要能够区分开。 * 数据域的密钥属性字节中包含有密钥的用途、版本、索引等标识,通过这些标识能够分辨出要写入的密钥和原文件中的密钥是否重复,如果重复的话写操作是覆盖操作,否则为添加操作。 * 如果是覆盖操作的
7、话,前后密钥的算法类型等信息必须一致;如果是添加操作的话,要检查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。
8、 * 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表示当前剩余尝试次数;08090A0B0
9、C0D0E0F表示DES8Byte密钥的原文。 * 01020304 表示WRITE KEY命令的MAC。 (3)WRITE KEY响应报文 卡片处理以后,WRITE KEY没有响应报文。二、IC卡安全操作基本命令-密码解锁(PIN UNBLOCK) 1、命令功能描述 验证码命令用以解锁个人密码,是PIN维护的一个重要命令。 每一个PIN记录都含有一个尝试次数计数器,在校验PIN的过程中,如果PIN校验失败的话,尝试计数器的值减一,如果连续多次失败的话,尝试计数器的值可能减为0,这时PIN记录被锁定,将无法再进行校验操作,也就是无法使用了。这时需要对PIN记录进行解锁操作。 解锁操作主要是将P
10、IN记录的尝试计数器复位。 2、命令报文格式 命令的APDU内容如下所示: 代码 值 CLA 0x84 INS 0x24 P1 PIN ID P2 0x01 Lc 0x04 Data MAC Le 不存在 其中: * P1指定要解锁PIN的ID号,如果P1为0x00表示对PIN文件的第一条记录进行解锁,否则根据P1指定的PIN ID进行查找。 * 为了进行安全控制,命令数据域带MAC,MAC用对应DF的主控密钥计算。 3、响应报文数据 响应报文数据域不存在。 4、响应报文状态码 此命令执行成功的状态码为0x9000。 对于异常情况,IC卡可能回送的错误码如下所示: SW1 SW2 含义 0x6
11、5 0x81 存储区错误 0x67 0x00 Lc错误 0x69 0x81 PIN文件没有找到 0x69 0x82 安全条件不满足 0x69 0x84 随机数无效 0x69 0x85 命令执行条件不满足 0x69 0x87 MAC丢失 0x69 0x88 MAC错误 0x6A 0x86 P1、P2不正确 0x6D 0x00 INS错误 0x6E 0x00 CLA错误 5、命令实现的其他要求 根据COS提供的功能不同,该命令的功能可以用应用中定义的重装个人密码(RELOAD PIN)命令代替。 6、命令实现设计 在执行该命令前,应用必须先发一条取随机数命令,卡片存在4Byte有效随机数。 7、命
12、令使用示例 (1)预设环境 假设PIN文件支持多个PIN记录,要解锁的PIN示例对应的为添加命令示例中添加的PIN。 (2)命令报文 解锁PIN记录的APDU: 84 24 01 01 04 11 22 33 44 其中: * 84 表示PIN UNBLOCK命令的CLA。 * 24 表示PIN UNBLOCK命令的INS。 * 01 表示PIN UNBLOCK命令的P1,即要解锁的PIN的ID。 * 01 表示PIN UNBLOCK命令的P2。 * 04 表示PIN UNBLOCK命令的Lc,即数据域的长度。 * 11223344 表示PIN UNBLOCK命令的MAC。 (3)PIN UN
13、BLOCK 响应报文 卡片处理以后,PIN UNBLOCK 没有响应报文。三、IC卡安全操作基本命令-内部认证(INTERNAL AUTHENTICATION) 1、命令功能描述 内部认证命令提供了利用终端设备发来的随机数和自身存储的密钥进行数据认证的功能,也就是终端认证卡片合法性的过程。 2、命令报文格式 命令的APDU内容如下所示: 代码 值 CLA 0x00 INS 0x88 P1 0x00 P2 0x00 Lc 0x10 Data 认证数据 Le 0x00 其中: * DATA域长度为16Byte,前8Byte是外部产生的随机数,也就是验证的中间数据,后8Byte是外部给出的分散向量,
14、用来计算认证过程密钥。 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 密钥查找失败 0x6
15、D 0x00 INS错误 0x6E 0x00 CLA错误 5、命令实现的其他要求 内部认证命令是终端认证卡片的过程,不同的应用可能会有不同的规定,如果要支持特殊应用的话,需要参考相关的应用需求,明确命令的数据的具体格式和计算方法。 6、命令实现设计 对认证数据的计算包括了如下几个步骤: * 密码的查找。内部认证需要专门的密钥,是对称密钥,通常为3DES密钥,在当前文件的对称密钥文件中查找,查找条件包括密钥用途、密钥版本和密钥索引等,可以使用单一条件,也可以使用组合条件。 * 过程密钥生成。利用找到的认证密钥对命令数据域中后8Byte分散向量做3DES加密计算,结果为8Byte,即为此次内部认证
16、的过程密钥。 * 认证结果计算。将得到的过程密钥对命令数据域中前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 AUTHENTICA
17、TION命令的P1。 * 00 表示INTERNAL AUTHENTICATION命令的P2。 * 10 表示INTERNAL AUTHENTICATION命令的Lc,验证数据和分散数据。 * 0102030405060708 表示INTERNAL AUTHENTICATION命令的DATA前半部分,是终端产生的8Byte随机数。 * 090A0B0C0D0E0F10 表示INTERNAL AUTHENTICATION命令的DATA后半部分,是终端产生的过程密钥分散数据。 (3)INTERNAL AUTHENTICATION响应报文 卡片处理以后,INTERNAL AUTHENTICATION
18、的响应报文为卡片计算得到的8Byte验证数据。四、IC卡安全操作基本命令-外部认证(EXTERNAL AUTHENTICATION) 1、命令功能描述 外部认证命令提供了利用卡片产生随机数,外部利用密钥设备对该数据进行计算完成对终端的数据认证功能,也就是卡片认证终端合法性的过程。 外部认证成功以后,将修改对应的安全状态为内部认证结果的安全状态,并且复位卡片内对应密钥的尝试计数器到初值。 如果验证失败,将对应密钥的尝试计数器值减一,直至减为0将密钥锁定不能再进行外部认证操作为止。 由于外部认证过程中需要卡片产生的随机数,所以,在外部认证命令执行前终端必须向卡片发送一条随机数命令。 2、命令报文格
19、式 命令的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 0x
20、00 Lc错误 0x69 0x83 对应密钥锁定 0x69 0x84 随机数无效 0x69 0x85 不满足密钥使用条件 0x6A 0x80 数据域参数不正确 0x6A 0x86 P1、P2不正确 0x6A 0x88 密钥查找失败 0x6D 0x00 INS错误 0x6E 0x00 CLA错误 5、命令实现的其他要求 外部认证命令是卡片认证终端过程,不同的应用可能会有不同的规定,如果要支持特殊应用的话,需要参与相关的应用需求,明确命令的数据的具体格式和计算方法。 6、命令实现设计 对认证数据的处理包括了如下几个步骤: * 随机数有效性检查。在数据处理前需要检查卡内是否事先存在4Byte有效的随
21、机数。如果随机数有效的话,在随机数后补4Byte的0x00。 * 密码的查找。外部认证需要专门的密钥,是对称密钥,通常是3DES密钥,在当前文件的对称密钥文件中查找,查找条件包括密钥用途、密钥版本和密钥索引等,可以使用单一条件,也可以使用组合条件。密钥找到以后需要检查相应的使用条件是否满足,密钥是否有效等等。 * 过程密钥生成。利用找到的认证密钥对命令数据域中后8Byte分散向量做3DES加密计算,结果为8Byte,即为此次外部认证的过程密钥。 * 卡内认证结果计算。将得到的过程密钥对补充0x00以后的随机数做DES加密计算,得到8Byte的卡片计算结果。 * 将卡内计算结果和命令数据域前8B
22、yte的终端认证数据做比较,如果一致的话表示认证成功,将对应密钥的尝试计数器复位,同时修改对应的安全状态;如果数据不一致的话,表示认证失败,将对应密钥的尝试计数器减一,对应的安全状态不变。 * 最后返回相应的结果。 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
23、命令的INS。 * 00 表示EXTERNAL AUTHENTICATION命令的P1。 * 00 表示EXTERNAL AUTHENTICATION命令的P2。 * 10 表示EXTERNAL AUTHENTICATION命令的Lc,待验证数据和分散数据。 * 0102030405060708 表示EXTERNAL AUTHENTICATION命令的DATA前半部分,是终端计算得到的8Byte待验证数据。 * 090A0B0C0D0E0F10 表示EXTERNAL AUTHENTICATION命令的DATA后半部分,是终端产生的过程密钥分散数据。 (3)EXTERNAL AUTHENTICA
24、TION响应报文 卡片处理以后,EXTERNAL AUTHENTICATION没有响应报文。五、IC卡安全操作基本命令-添加密码(ADD PIN) 添加密码命令是向当前文件下的PIN文件中添加一条新的PIN记录。 添加PIN的过程应用必须给出PIN的内容和PIN的相关属性,具体的格式定义可以参考PIN文件记录的数据结构。 2、命令报文格式 命令的APDU内容如下所示: 代码 值 CLA 0x84 INS 0xFC P1 0x00 P2 0x00 Lc DATA域的长度 Data PIN记录+MAC Le 不存在 其中: * DATA域中PIN记录的具体内容和相应的格式定义可以参考PIN文件的记
25、录格式。 * 为了保证PIN记录的完整性,命令需要带安全报文。 3、响应报文数据。 响应报文数据域为空。 4、响应报文状态码 此命令执行成功的状态码为0x9000。 对于异常情况,IC卡可能回送的错误码如下所示: SW1 SW2 含义 0x65 0x81 存储空间错误 0x67 0x00 Lc错误 0x69 0x81 PIN文件没有找到 0x69 0x82 安全条件不满足 0x69 0x86 命令执行条件不满足 0x69 0x87 MAC丢失 0x69 0x88 MAC错误 0x6A 0x80 数据域参数不正确 0x6A 0x84 文件中存储空间不足 0x6A 0x86 P1、P2不正确 0x
26、6A 0x88 密钥查找失败 0x6D 0x00 INS错误 0x6E 0x00 CLA错误 5、命令实现的其他要求 在PIN文件的文件描述块中通常包含了文件写操作的控制标识符,执行添加个人密码命令以前要求对应安全状态满足条件。 命令MAC用对应DF文件的主控密钥计算。 6、命令实现设计 在修改PIN文件之前需要依次检查MAC、命令格式、PIN记录格式、PIN文件、安全状态和PIN文件空闲空间等等。 7、命令使用示例 (1)预设环境 假设PIN文件支持多个PIN记录。 (2)命令报文添加PIN记录的APDU:84 FC 00 00 0E 01 0F 08 04 33 12 34 FF FF F
27、F 11 22 33 44 其中: * 84 表示ADD PIN命令的CLA。 * FC 表示ADD PIN命令的INS。 * 00 表示ADD PIN命令的P1。 * 00 表示ADD PIN命令的P2。 * 0E 表示ADD PIN命令的Lc,即PIN记录的长度。 * 01 表示ADD PIN命令的ID。 * 0F 表示PIN命令的使用安全条件。 * 08 表示PIN验证成功之后的安全状态。 * 04 表示PIN的最短长度4位。 * 33 表示PIN的计数器,第一个3表示允许尝试的最大次数,第二个3表示剩余的尝试次数。 * 1234 表示PIN的值。 * FFFFFF表示PIN值填充的内容
28、。 * 11223344表示ADD PIN命令的MAC。 (3)ADD PIN响应报文 卡片处理以后,ADD PIN没有响应报文。六、IC卡安全操作基本命令-修改密码(CHANGE PIN) 修改密码命令将PIN文件中指定的一条PIN内容替换为新的PIN内容。 修改PIN之前要求验证旧的PIN,而且只能够修改PIN的内容,不包括PIN的属性。由于PIN记录空间的限制,新的PIN长度有一定的限制。 新PIN添加成功以后,需要将原PIN的尝试计数器复位。 2、命令报文格式 命令的APDU内容如下所示: 代码 值 CLA 0x80 INS 0x5E P1 0x01 P2 PIN ID Lc DATA
29、域的长度 Data 旧PIN |0xFF| 新PIN Le 不存在 其中: * P1指定要修改的ID号,如果P1为0x00表示对PIN文件的第一条记录进行修改,否则根据P1指定的PIN ID进行查找。 * DATA域包含的新旧PIN为PIN的内容,和PIN文件的格式一样,用BCD编码方式,不足字节用0xFF补齐。 3、响应报文数据 响应报文数据域不存在。 4、响应报文状态码 此命令执行成功的状态码为0x9000。 对于异常情况,IC卡可能回送的错误码如下所示: SW1 SW2 含义 0x63 0xCX 旧密码校验失败,X表示剩余的尝试次数 0x65 0x81 存储区错误 0x67 0x00 L
30、c错误 0x69 0x81 PIN文件没有找到 0x69 0x82 安全条件不满足 0x69 0x83 PIN记录被锁定 0x69 0x85 命令执行条件不满足 0x6A 0x80 数据域参数不正确 0x6A 0x86 P1、P2不正确 0x6D 0x00 INS错误 0x6E 0x00 CLA错误 5、命令实现的其他要求 修改密码命令在不同的应用中可能有不同的定义,这里给出的是一个通用的实现过程,具体的实现还可以参考相关的应用规范。 6、命令实现设计 修改密码操作的条件检查包括:命令格式的检查、PIN文件的查找、PIN记录的查找、PIN记录的使用条件检查、旧PIN的校验等。 新PIN写入过程中要特别注意的是,如果新PIN内容比旧PIN短的话,需要写入多个0xFF,以覆盖旧PIN多余的内容。 7、命令使用示例 (1)预设环境 假设PIN文件支持多个PIN记录,修改PIN示例对应的为添加命令示例中添加的PIN。 (2)命令报文 修改PIN记录的APDU: 80 5E 01 01 05 12 34 FF 56 78 其中: * 80 表示CHANGE PIN命令的CLA。 * 5E 表示CHANGE PIN命令的INS。 * 01 表示CHANGE PIN命令的P1。 * 01 表示CHANGE PIN命令的P2,即要修改的PIN的ID。 * 05 表示CHAN
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1