假设在对某文件进行读操作之前,要求必须先通过个人身份鉴别一种可行的办法是: 将PIN的使用权限设为10,后续状态定为2,而文件的读权限定为22执行步骤–卡上电复位,安全状态被清除–满足PIN密钥的使用权限10,执行Verify Pin 指令,至此,安全状态V=2–V=2满足文件的读权限22H,允许对文件进行读操作3、应用实例预设环境–MF下有4个二进制文件,其访问权限分别为F0、94、23和52–MF下的KEY文件中有一个PIN密钥,其值为1122334455667788,后续状态为77操作–在验证PIN前后分别对4个文件进行读操作安全属性(访问权限)分析–EF1: F0–EF2: 94–EF3: 23 –EF4: 52预期结果(PIN验证后,安全状态变为7)–EF1:–EF2: –EF3:–EF4:永远都满足,可任意读写不可读写安全属性需属于[2,5]才可读写永远都不满足,禁止读写安全属性需属于[4,9]才可读写不可读写可读写可读写实现步骤–插卡,卡片上电(无安全状态)–在MF下的KEY EF中添加PIN密钥–建立4个EF文件–读取4个EF文件的内容–选择MF文件(安全状态变为0)–读取4个EF文件的内容–验证PIN(安全状态变为7)–读取4个EF文件的内容6.2 智能卡的安全访问机制6.2.1 鉴别与核实6.2.2 安全报文传送6.2.3 文件访问的安全控制6.2.4 数字签名/认证6.2.4 数字签名/认证基本概念数字签名/认证的过程如何在智能卡中实现数字签名1、数字签名数字签名是建立在公钥体制基础上的一种服务数字签名必须保证以下3点:–接收者能够对报文发送者的签名进行认证–发送者事后不能抵赖对报文的签名–任何人都不能伪造其他人的签名数字签名的一般过程 “私钥加密(签名),公钥解密(验证)” 数字签名过程原文原文签名签名存在的问题–要签名数据的大小是任意的,最终签名的大小也是任意的。
解决办法–引入单向散列算法(HASH)2、HASH算法单向散列函数也称HASH函数,作用在一任意长度的消息M上,返回一个固定长度的散列值hh=H(M)(设h的长度为m)HASH函数具有如下的特性:–给定M,很容易计算出h;–给定h,根据h=H(M),计算M很难;–给定M,要找到另一消息M’并满足H(M)=H(M’)很难两种典型的HASH算法–MD5算法 可以产生128位的散列结果–SHA算法 也叫做安全散列算法,可以产生160位的散列结果3、数字签名/验证过程数字签名过程–签名者通过HASH函数把原文变成固定大小–签名者用私钥对散列结果加密,生成数字签名签名验证过程–验证者获得原文和签名–验证者通过HASH函数把原文变成固定大小–验证者将签名解密,并用解密结果和计算出的散列结果进行比较,如果相同,签名有效,否则,验证失败,签名无效SKA是指发送方A的私钥,PKA是指与SKA相对应的A的公钥提出问题如何得到签名者的公钥?4、数字/签名/公钥证书公钥证书:认证机构CA通过对一个包含身份信息和相应公钥的数据结构进行数字签名来捆绑用户的公钥和身份这个数据结构被称为公钥证书证书验证包括如下内容:–验证CA在证书上的签名–证书有良好的完整性,即:证书上的数字签名–证书在有效期内签名证书通常遵照X.509标准制成,必须含有下列信息:–版本号:表示证书的版本–序列号:由证书颁发者分配的证书的唯一标识符–签名密钥持有人的名字–签名算法标识符:用于说明本证书所用的数字签名算法–主体公钥信息–证书的开始有效和终止日期提出问题如何将智能卡与数字签名联系起来?解决问题实现数字签名卡5、数字签名卡的优点CPU卡特有的硬件制造工艺可以抵御物理、电子、化学方法的攻击体积小,便于携带COS可以防止攻击者利用软件方式窃取卡内的机密信息存储在卡中的私钥绝对安全。
自动锁定保护总之,CPU卡是存储私钥和数字证书的理想介质6、数字签名卡的实现实现条件及要求–智能卡支持某非对称密码算法(RSA、ECC等)–智能卡文件系统中需有公钥文件和私钥文件以TimeCOS/PK为例说明数字签名卡的实现过程–TimeCOS/PK支持SHA-1算法和RSA算法–可在卡内生成1024位RSA密钥对•命令操作一般流程 相关指令相关指令6.3 智能卡防拔插处理若智能卡正在对卡片的用户数据进行修改(如执行创建文件指令,更新EF文件的内容等)时,持卡人突然将卡从读写器中拔出或移开,或者读写器由于某种原因突然掉电,都有可能造成数据更新操作中断,从而造成卡内用户数据出错为了保证数据的完整性,COS本身应该具备处理这种突发事件的能力,也就是具有防拔插处理的能力 掉电保护机制 在COS主程序中,首先要判断掉电标志位,如果标志位为‘0x01’,说明上一条命令没有执行成功,程序将首先恢复备份数据将备份区清空,将掉电标识复位①③②④⑤3种意外状况:1)在步骤3之前发生断电 无影响2)在步骤3-5之间发生断电 进入数据安全写恢复流程3)在步骤5之后发生断电 无影响数据备份举例数据备份举例数据备份格式示例•在创建文件的时候留出一定大小的区域,用来备份数据。
备份项数数据地址数据长度数据内容数据地址数据长度数据内容…1字节2字节1字节…2字节1字节……数据安全写恢复流程6.4 智能卡的安全使用 IC卡使用时,要与读写器相互确认,以防止伪卡或插错卡使用过程:1. 插卡:读写器向卡加电,并发复位信号,令卡初始化,做好交易准备,卡发出应答信号ATR;2. 读写器鉴别卡的真伪;3. 卡鉴别读写器的真伪;4. 检查卡是否列入黑名单;5. 鉴别持卡人的身份:通常采用密码比较的方法,即由持卡人输入密码,与卡内密码比较;6. 检查上次交易是否完成,未完成,卡应有自动恢复数据的功能;7. 根据应用需求进行交易;8. 拔卡6.5 安全操作相关的基本命令基本安全命令–6.5.1 Verify PIN(验证口令)–6.5.2 Unblock(解锁口令)–6.5.3 Get Challenge(取随机数)–6.5.4 External Authentication(外部认证)–6.5.5 Internal Authentication(内部认证)6.5 安全操作相关的基本命令RSA算法相关命令–6.5.6 Generate RSA Key(生成公私钥对)–6.5.7 Data Compress(数据压缩)–6.6.5 Data Encrypt(数据加密)–6.5.9 Data Decrypt(数据解密)–6.5.10 Digital Signatures(数字签名)–6.5.11 Signatures Verify(签名验证)6.5.1 Verify PIN(验证口令)1、命令功能描述–用于校验命令数据域的口令密钥正确性。
–在满足口令密钥的使用权限时才可执行该命令–若口令验证成功,则系统安全状态寄存器的值被置成该密钥的后续状态,同时口令错误计数器被置成初始值–若验证错误,则口令可试次数减1,若口令已被锁死,则不能再执行该命令–当口令长度为8字节时,可用Unblock命令对其进行解锁2、命令报文格式代码长度(byte)值(Hex)描述CLA100/04-INS120-P1100-P21XX口令密钥标识号Lc102-08-DATA02-08XX…XX外部输入的口令密钥Le--不存在说明:密钥标识在Write Key时给出3、响应报文数据–不存在4、响应报文状态码–90 00–63 CX 还剩X次可试机会–当卡片回送63C0时,表示不能重试口令密钥,此时再使用Verify PIN命令时,将回送失败状态码6983(认证方法锁死)5、命令使用示例1–预设环境 正确的PIN值为11 22 33 44 ,设其密钥标识号为01 ,错误计数器值为33–命令报文1: APDU:00 20 00 01 04 11 22 33 44–响应报文1:90 00 错误计数器值:33–命令报文2 APDU:00 20 00 01 04 11 22 33 33–响应报文2:63 C2 错误计数器值:32–命令报文3 APDU:00 20 00 01 04 11 22 33 44–响应报文3:90 00 错误计数器值:335、命令使用示例2–预设环境 正确的PIN值为11 22 33 44 ,设其密钥标识号为01 ,错误计数器值为33–命令报文1 APDU:00 20 00 01 04 11 22 33 44–响应报文1:90 00 错误计数器值:33–命令报文2 APDU:00 20 00 01 04 11 22 33 33–响应报文2:63 C2 错误计数器值:32–命令报文3 APDU:00 20 00 01 04 11 22 22 22–响应报文3:63 C1 错误计数器值:31–命令报文4 APDU:00 20 00 01 04 11 11 11 11–响应报文4:63 C0 错误计数器值:30–命令报文5 APDU:00 20 00 01 04 44 33 22 11–响应报文5:69 83 错误计数器值:306.5.2 Unblock(解锁口令)1、命令功能描述–用于解锁被锁定的8字节的口令–只有满足该解锁口令使用条件且该解锁口令未被锁死时才能执行此命令,该命令不改变安全状态–若解锁口令核对成功,则新口令取代原有口令,且将口令错误计数器和解锁口令错误计数器恢复成原始值–若解锁口令失败,则解锁口令可再试次数减1,如果解锁口令锁死,解锁口令无法再被解锁。
2、命令报文格式3、响应报文数据–不存在4、响应报文状态码–略代码长度(byte)值(Hex)描述CLA180-INS12C-P1100-P21XX解锁口令密钥标识Lc110-DATA16XX…XX8字节解锁口令+8字节新口令Le--不存在5、命令使用示例–预设环境 某PIN密钥被锁,要求用密钥标识号为06的口令解锁密钥进行解锁(新口令为01 02 03 04 05 06 07 08),解锁密钥使用权=0xF0、更改权=0xEF、错误计数器=0x33、8字节解锁口令=’11 22 33 44 55 66 77 88’–命令报文 APDU:80 2C 00 06 10 11 22 33 44 55 66 77 88 01 02 03 04 05 06 07 08–响应报文 90 006.5.3 Get Challenge(取随机数)1、命令功能描述–请求一个用于安全相关过程(如安全报文)的随机数2、命令报文格式代码长度(byte)值(Hex)描述CLA100-INS184-P1100-P2100-Lc1-不存在DATA16-不存在Le104-10要求卡片返回的随机数长度3、响应报文数据–随机数,长度为Le个字节4、响应报文状态码–略5、命令使用示例–略6.5.4 Internal Authentication(内部认证)1、命令功能描述–提供了利用接口设备发来的随机数和自身存储的相关密钥进行数据认证的功能。
–在满足该密钥的使用条件时才能执行此命令 参看流程图2、内部认证过程–内部认证是读卡器对卡片的认证,认证过程如下图所示:终端方向卡片产生1个8字节随机数RNDIFD送RNDIFD作内部认证用指定的DES加密密钥对随机数RNDIFD进行DES加密运算,产生鉴别数据D1即:D1=DES(K, RNDIFD)送D1用与卡片DES加密密钥相同密钥对RNDIFD进行DES解密运算,产生D2,后比较D1和D2即:1)D2=DES-1(K, RNDIFD)2)D1?=D23、命令报文格式代码长度(byte)值(Hex)描述CLA100-INS188-P1100加密01解密02计算MACP21XXDES密钥标识号Lc1XX-DATAXXXX..XX认证数据Le100-说明:P1=00表示进行加密运算,密钥类型是DES加密密钥 P1=01表示进行解密运算,密钥类型是DES解密密钥 P1=02表示进行MAC运算,密钥类型是DES&MAC密钥4、响应报文数据–相关认证数据,即DES运算的结果5、响应报文状态码–略6、命令使用示例1–预设环境 密钥标识号=01;密钥类型是DES加密密钥;使用权限=0xF0;更改权限=0xEF,16字节密钥为“57415443484441544154696D65434F53”;读卡器产生的随机数为“1122334455667788”–命令报文APDU:00 88 00 01 08 11 22 33 44 55 66 77 88–响应报文 07 CB F6 15 E7 D7 2F 96 90 00DES加密结果BACK TO 鉴别7、命令使用示例2–预设环境 密钥标识号=01; 密钥类型为DES解密密钥; 使用权限=0xF0;更改权限=0xEF, 16字节密钥为“57415443484441544154696D65434F53”; 待解密数据为“07CBF615E7D72F96 ”–命令报文 APDU:00 88 01 01 08 07 CB F6 15 E7 D7 2F 96–响应报文 11 22 33 44 55 66 77 88 90 008、命令使用示例3–预设环境 密钥标识号=01; 密钥类型为DES&MAC解密密钥; 使用权限=0xF0;更改权限=0xEF, 16字节密钥为“57415443484441544154696D65434F53”; 待计算MAC数据=“1122334455667788” –命令报文 APDU:00 88 02 01 08 11 22 33 44 55 66 77 88–响应报文 87 56 E2 85 90 00 说明:“87 56 E2 85 ”是MAC计算结果,计算MAC的8字节初始值是“00000”6.5.5 External Authentication(外部认证)1、命令功能描述–IC卡验证读卡器的真伪–在满足该外部认证密钥的使用权限且该密钥未被锁死时才可执行该命令–将命令中的数据用指定外部认证密钥解密,然后与先前产生的随机数进行比较•若一致则表示认证通过•若不一致则认证失败 参看流程图2、外部认证过程–外部认证是卡片对读卡器的认证,认证过程如下:终端方向卡片取8字节随机数产生1个8字节随机数RNDICC送随机数RNDICC用与卡片认证密钥相同密钥对RNDICC进行DES加密运算,产生D1,即:D1=DES(K, RNDIFD)送D1作外部认证用指定的外部认证密钥对D1进行DES解密运算,产生鉴别数据D2。
,后比较D2和RNDICC 即:1)D2=DES-1(K, RNDIFD)2)D2?= RNDICC送比较结果(SW1SW2),若为9000,则置安全状态寄存器值为该密钥后续状态3、命令报文格式代码长度(byte)值(Hex)描述CLA100-INS182-P1100-P21XX外部认证密钥标识号Lc18-DATA8XX…XX8字节加密后的随机数Le--- 说明:•若认证通过,置安全状态寄存器为该密钥规定的后续状态值,错误计数器恢复成初始值;•若认证失败,可再试错误数减1,且不改变安全状态寄存器的值4、响应报文数据–不存在5、响应报文状态码–略6、命令使用示例–预设环境 外部认证密钥标识号=01;使用权限=0xF0;更改权限=0xEF;错误计数器=0x33;后续状态=11;16字节密钥为“57415443484441544154696D65434F53”;BACK TO 鉴别–命令报文 [步骤1]取8字节随机数APDU:00 84 00 00 08 响应:D3 89 BF 67 45 B9 35 50 90 00 [步骤2]读卡器用与外部认证密钥相同的密钥“57 41 54 43 48 44 41 54 41 54 69 6D 65 43 4F 53”对随机数进行加密,加密后的结果为C2 A8 5B 4B 13 40 25 21 [步骤3]读卡器将加密后的随机数送到卡中作外部认证 APDU:00 82 00 00 08 C2 A8 5B 4B 13 40 25 21 响应:90 00 说明:成功执行后置安全状态寄存器值为该外部认证密钥的后续状态16.5.6 Generate RSA Key(生成公私钥对)1、命令功能描述–该命令用于卡片自动生成模长为1024位的RSA密钥对,根据P1、P2参数的不同,决定私钥是回送出来还是存于由P2指定的私钥文件中2、命令报文格式代码 长度(byte)值(Hex)描述CLA180-INS1CE-P1100-P21XX私钥文件标识符Lc--不存在DATA--不存在Le100- 说明:P2=00时,私钥回送给终端,否则,私钥存于由P1、P2指定的文件标识的私钥文件中。
3、响应报文数据–公钥(包括模数n和公开指数e)–若P2=00时,响应报文还包括私钥(包括q,d mod(q-1)、p、d mod(p-1)、q-1 mod p)–响应报文将以TLV格式送出,T定义如下:T(Hex)含义6E模数n65公开指数e70素数p71素数q50私钥指数d mod(q-1)51私钥指数d mod(p-1)49q-1 mod p4、响应报文状态码–略5、命令使用示例–略6.5.7 Data Compress(数据压缩)1、命令功能描述–用安全散列算法SHA-1将数据压缩为20个字节,用RSA签名或验证时使用2、命令报文格式代码长度(byte)值(Hex)描述CLA180-INS1CC-P1P22XXXX见说明Lc1XX-DATAXXXX…XX待压缩数据Le114-•说明:若数据总长度小于138字节,直接对该数据进行压缩;否则以64字节为一块重复执行此命令进行分块压缩,压缩结果由最后一块数据产生3、响应报文数据–当进行单块数据压缩时,响应报文是20字节HASH结果–当进行分块数据压缩时,除对最后一块数据压缩,卡片只回送90 00,并不返回压缩结果,只有对最后一块数据进行压缩时,卡片才返回压缩结果。
4、响应报文状态码–略5、命令使用示例1–预设环境 对长度为64字节的数据(’0’串)进行压缩,输入数据不需保留–命令报文 APDU:80 CC 40 40 40 DATA(DATA表示64个字节的0)–响应报文 C8 D7 D0 EF 0E ED FA 82 D2 EA 1A A5 92 84 5B 9A 6D 4B 02 B7 90 006、命令使用示例2–预设环境: 对长度为160(64+64+32)字节的数据(’0’串)进行压缩,将输入数据保留在卡内–命令报文1 APDU:80 CC 3F FF 40 DATA1(64个字节的0)–响应报文1:90 00–命令报文2 APDU:80 CC BF FF 40 DATA2 (64个字节的0)–响应报文2:90 00–命令报文3 APDU:80 CC 80 A0 20 DATA3 (32个字节的0)–响应报文3:97 97 ED F8 D0 EE D3 6B 1C F9 25 47 81 60 51 C8 AF 4E 45 EE 90 006.5.8 Data Encrypt(数据加密)1、命令功能描述–用非对称密码算法RSA的公钥对数据进行加密–在满足该公钥文件的使用权限时才能执行此命令2、命令报文格式代码长度(byte)值(Hex)描述CLA180-INS1C6-P1P22XX XX公钥文件标识符Lc1XX-DATAXXXX…XX需要加密的数据Le180说明:1)P1P2=0000时,表示用卡内临时公钥对数据进行加密。
该临时公钥由Data Compress命令分批送入2)在进行数据加密之前,COS会对加密数据进行编码,后对编码数据进行加密运算编码数据EM=00||BT||PS||00||D–BT=02,表示为数据加密–PS为不小于8字节的随机数–D:待加密数据(加密数据最大长度为117字节)3、响应报文数据–由加密后的密文组成4、响应报文状态码–略5、命令使用示例–略6.5.9 Data Decrypt(数据解密)1、命令功能描述–用非对称密码算法RSA的私钥对加密数据进行解密–在满足该私钥文件的使用权限时才能执行此命令2、命令报文格式代码长度(byte)值(Hex)描述CLA180-INS1C8-P1 P22XXXX私钥文件标识符Lc180-DATA128XX…XX需解密的密文Le100-3、响应报文数据–由解密后的明文组成4、响应报文状态码–略5、命令使用示例–略6.5.10 Digital Signatures(数字签名)1、命令功能描述–用非对称密码算法RSA的私钥对数据进行签字–在满足该私钥文件的使用权限时才能执行此命令2、命令报文格式代码长度(byte)值(Hex)描述CLA180-INS1C2-P1 P22XXXX私钥文件标识符Lc1XX-DATAXXXX…XX需要签字的数据Le180-说明:Lc=00时,表示用卡中压缩好的数据进行签名(即先将须签字的数据用Data Compress命令进行压缩)3、响应报文数据–略4、响应报文状态码–略5、命令使用示例–略6.5.11 Signatures Verify(签名验证)1、命令功能描述–用非对称密码算法RSA的公钥对签名数据进行认证–在满足该公钥文件的使用权限时才能执行此命令2、命令报文格式代码长度(byte)值(Hex)描述CLA180-INS1C4-P1 P22XXXX公钥文件标识符Lc180-DATA128XX…XX本公钥对应的私钥所产生的数字签名Le180-说明:P1P2=0000时,表示用卡内临时公钥对数据进行验证。
该临时公钥由Data Compress命令分批送入3、响应报文数据–由认证后的数据组成(128字节),认证后的数据EM=00||BT||PS||00||D1)BT=01,表示为数字签名2)PS=‘FF…FF’,表示填充数据PS由‘FF’数据块组成PS的长度=LEN(EM)-3-LEN(D)PS至少为1个字节的‘FF’3)D=30||XX(LEN(M)+0D)||30||09||06||05||2B||0E||03||02||1A||05||00||04||LEN(M)||M (M的长度最大为108字节)4、响应报文状态码–略5、命令使用示例–略本章小结1、密钥管理–三层密钥管理系统(主密钥、子密钥、会话密钥)2、智能卡的安全访问机制–鉴别与核实•内/外部认证•PIN验证(明码验证、密码验证)•生物识别–安全报文传送•保证完整性(MAC)•保证机密性(对称加密算法)•保证完整性和机密性–文件访问的安全控制•安全状态•安全属性(或访问权限)–数字签名/认证3、智能卡的防插拔处理–待修改数据备份–掉电标识置位–更新数据–掉电标识复位4、智能卡的安全使用–卡和读卡器相互验证–检查黑名单–验证持卡人身份5、安全操作相关的基本指令第六章作业(5月2日交) 1、为验证持卡人是否是假冒的而经常采取的验证方法是什么?2、如果持卡人多次输入PIN,但都不正确,将发生什么情况?3、说明智能卡和读写设备之间相互认证的方法,即如何确定对方是真实的而不是伪造的。
4、系统中交换信息报文时在报尾增加鉴别码的作用及产生方法The End141《智能卡安全技术》PPT课件命令报文格式(不带线路保护)代码长度(byte)值(Hex)描述CLA100-INS1D6-P11XXP21XXLc1XX-DATAXXXX… XX写入文件的数据Le--不存在1)2)前提:所写文件为当前文件Create File1、命令报文格式代码长度(byte)值(Hex)描述CLA180INS1E0P1P22XX XX文件标识符FIDLc1XXDATALcXX…XX文件控制信息Le不存在•建立MF文件时–P1P2=‘3F00’–DATA域文件控制信息为DATA文件类型文件空间建立权限擦除权限8字节传输代码长度(byte)12118值(HEX)38FFFFXXXXXX…XX建立DF文件时–DATA域文件控制信息为DATA文件类型 文件空间 建立权限 擦除权限保留字DF名称(可选)长度(byte)121135-16值(HEX)38XXXXXXXXFFFFFFDF名称建立EF文件时–Lc=’07’–DATA域文件控制信息为(不带线路保护时)‘FF’‘FF’存款权限读/扣款权限记录长度记录数‘2F’普通钱包文件‘FF’‘FF’写权限读权限记录长度记录数‘2A’定长记录文件‘FF’‘FF’写权限读权限记录长度记录数‘2E’循环文件‘FF’‘FF’写权限读权限文件空间‘2C’变长记录文件‘FF’读权限更改权限使用权限文件空间≥330‘3D’私钥文件‘FF’读权限更改权限使用权限文件空间≥135‘3E’公钥文件当前DF文件SFI读权限Byte4文件空间文件空间Byte2‘FF’‘FF’增加权限‘3F’密钥文件‘FF’‘FF’写权限‘28’二进制文件Byte7Byte6Byte5Byte3Byte1 数据域文件类型Read Binary(不带线路保护)代码长度(byte)值(Hex)描述CLA100-INS1B0-P11XXP21XXLc--不存在DATA--不存在Le1XX要读取的数据长度注:Read Binary代码长度(byte)值(Hex)描述CLA100/04-INS1B0-P11XXP21XXLc--不存在(CLA=04时除外)DATA--不存在(CLA=04时,应包括MAC)Le1XX要读取的数据长度注:代码长度(byte)值(Hex)描述CLA100/04-INS1D6-P11XXP21XXLc1XX-DATAXXXX… XX写入文件的数据Le--不存在Update Binary。