cpu卡学习资料docxWord文件下载.docx
《cpu卡学习资料docxWord文件下载.docx》由会员分享,可在线阅读,更多相关《cpu卡学习资料docxWord文件下载.docx(27页珍藏版)》请在冰豆网上搜索。
这不单单是密码对密码的认证,是方法认证方法,就象早期在军队中使用的密码电报,发送方将报文按一定的方法加密成密文发送出去,然后接收方收到后又按一定的方法将密文解密。
通过这种认证方式,线路上就没有了攻击点,同时卡也可以验证应用的合法性;
但是因为系统方用于认证的密钥及算法是在应用程序中,还是不能去除系统商的攻击性。
在此,我们引进了SAM卡的概念。
SAM卡是一种具有特殊性能的CPU卡,用于存放密钥和加密算法,可完成交易中的相互认证、密码验证和加密、解密运算,一般用作身份标志。
由于SAM卡的出现,我们有了一种更完整的系统解决方案。
在发卡时,我们将主密钥存入SAM卡中,然后由SAM卡中的主密钥,对用户卡的特征字节(如:
应用序列号)加密生成子密钥,将子密钥注入用户卡中。
由于应用序列号的唯一性,使每张用户卡内的子密钥都不同。
密钥一旦注入卡中,则不会在卡外出现。
在使用时,由SAM卡的主密钥生成子密钥存放在RAM区中,用于加密、解密数据。
上述的认证过程就成为如下形式:
SAM卡系统卡
SAM卡生成子密钥对随机数加密
解密Y,得结果Z
SAM卡解密Y,得结果Z
这样在应用程序中的密钥,就转移到了SAM卡中,认证成为卡——卡的认证,系统商不再存在责任。
三、线路保护
卡与外界进行数据传输时,若以明文方式传输,数据易被载获和分析。
同时,也可以对传输的数据进行窜改,要解决这个问题,CPU卡提供了线路保护功能。
线路保护分为两种,一是将传输的数据进行DES加密,以密文形式传输,以防止截获分析。
二是对传输的数据附加MAC(安全报文鉴别码),接收方收到后首先进行校验,校验正确后才予以接收,以保证数据的真实性与完整性。
四、硬件结构图
EEPROM用于存放用户数据;
ROM中用于存放COS操作系统,而RAM区中用于存放COS运行时的中间变量。
COS(chipoperationsystem),就是芯片操作系统,类似于DOS和WINDWOS,没有COS的CPU卡就象没有DOS和WINDOWS的PC机一样无法使用。
COS是在芯片出厂时由芯片供应商固化到ROM区的,这个过程就称之为掩膜。
COS是CPU卡的核心部分,它和硬件一起实现CPU卡的安全性。
第二部分SmartCOS简介
SmartCOS是由明华公司自主开发的芯片操作系统,于1999年6月通过了人行认证。
COS主要分为四部分:
一、SMARTCOS的文件系统
CPU卡是以文件方式来管理SmartCOS支持如下文件系统。
仁文件可分为MF文件、DF文件、EF文件
MF:
主控文件,是整个文件系统的根,是唯一的,相当于根目录;
DF:
专用文件,相当于子目录,可用于存储某个应用的所有文件,DF下不可再建立DF。
一个DF可以是一个应用,也可以多个DF用于同一个应用。
EF:
基本文件,用于存储各种应用数据和管理信息。
2、EF从存储内容上分为两种:
安全基本文件:
用于存放密钥,每个目录下只能建立一个安全基本文件,密钥文件不能通过文件选择来选取,密钥内容不可以读出,但在满足条件时可使用和修改。
工作基本文件:
用于存放应用的实际数据,个数及大小只受空间限制。
在满足条件时可读写。
3、基本文件结构
基本文件的结构可分为以下四种:
二进制文件:
数据以字节为单位进行读写,每次读写的长度不能超过110字节;
可用于存储无序的数据。
线性定长记录文件:
每条记录为固定长度,可以通过记录号访问记录,记录范围不超过254;
每条记录的长度不超过110字节,密钥文件就是线性定长记录文件,其每条记录长度固定
为25外字节。
可用于存放有规律定长的数据。
线性变长记录文件:
每条记录的长度可以各不相同,但最大长度不能超过110
字节,可以通过记录号来访问。
循环定长记录文件结构:
相当于一个环形记录队列,按照先进先出的原则存储,最新写入的记录号为1,上一次写入的记录号为2,以此类推,记录写满后自动覆盖最早的记录。
4、文件结构图
在MF下可建立EF和DF:
在DF下不可再建立DF,只能建立EF;
KEY文件:
用于控制MF下的文件的创建及读写
数据文件
密钥文件:
用于控制DF下的文件的创建及访问
数据文件(如钱包文件等)
5、文件空间的计算
MF的头文件长度为10个字节+文件名长度(5-16个字节)
DF的头文件长度为10个字节+文件名长度
EF文件所占空间:
定义记录和循环记录文件的空间=文件头空间(10字节)+记录数*记录长度
变长记录结构文件的空间=文件头空间(10个字节)+建立时申请的空间密钥文件所占空间=文件头空间(10个字节)+密钥个数*25个字节钱包文件的空间=文件头(10个字节)+文件体(17个字节)存折文件的空间=文件头(10个字节)+文件体(20个字节)建立了文件系统,那么怎样才能保证文件的安全,下面讲述安全系统。
二、SMARTCOS的安全系统
1、状态机即安全状态:
是指卡在当前所处的一种安全级别,具有(0-F)16种安全状态。
复位后自动设为0,当前应用的安全状态在被成功地选择或复位后自动清0o安全状态的改变必须通过密钥的认证来实现。
**只有当前目录下的PIN核对和外部认证才能改变安全状态。
2、安全属性即访问权限
访问权限是在建立文件的时候指定的。
它是一个区间的概念,例如,描述一个文件的读权限为XY,则表示当前应用的状态机(安全状态)M必须满足乂=<
M=〈Y。
如读权限设为2F,就表示当前的状态机(安全状态)达到2及以上就可以读这个文件。
3、密钥与安全状态的关系
每个密钥在建立的时候都定义了后续状态,即通过密钥认证后能达到的安全状态,在各种密钥中,只有PIN认证和外部认证才能改变当前目录的安全状态。
4、安全状态与访问权限的关系
(安全状态)
使用权限——密钥的使用后续状态文件读写取限
5、安全状态只在当前目录下有效,一旦选择别的应用,状态机自动跳到最低权限0。
各个目录之间的安全都是独立的。
四、复位应答
符号字节内容內容解释
TS3B正向约定
TO6CTB1和TC1存在,历史字符为12个
TB100无需额外的编程电压
TC102需2个额外的保护时间
T1-TCXX历史字符
SMARTCOS历史字符的特定意义:
T1XXSMARTCOS的版本号
T2XX卡状态字节
T386明华公司IC卡制造机构标识号
T438
T5-TCXX卡唯一序号
卡状态字节描述如下:
B7B6B5B4B3B2B1B0状态
011XXXXXX001XXXXXXXXXXXX该卡已初始化,并成功该卡未被初始化该卡初始化
过程被锁
000000XX该卡未个人化
0010XXXX该卡个人化未结束
0110XXXX该卡个人化成功
0001XXXX该卡个人化没有成功,卡被锁
0111XXXX该卡个人化成功,卡被锁
卡片状态字节中有关于初始化、个人化的概念,我们从卡片的生命周期来看这两个概念,卡
片的生命周期一般包括如下几部分:
芯片芯片生产商
掩膜cos芯片生产商
封装成卡片卡片生产商
卡片的初始化(COS启用)卡片生产商
传输密码保护
卡片的个人化卡片发行商
卡片的使用卡片的使用者卡片的回收卡片发行商
初始化过程就是激活cos,定义cos版本,经过这个过程cos才可以使用。
个人化过程是指建立文件,写入用户数据等操作。
卡片生产商在进行初始化后交付卡片发行商使用时,有传输密码保护。
IC卡必须支持T=0或T=1的协议,但不是同时支持这两种协议,而终端则必须同时支持
T=0和T=1的协议。
T=0通讯协议是异步半双工字符传输协议;
T=1通讯协议是异步半双工块传输协议;
在ISO7816-3标准中,具体规定了这两种协议;
IC卡所用的协议在TD1中指定,如果在复位应答信息中没有TD1,则表示用T=0的协议进行通讯。
在复位应答后,IC卡和终端之间即用IC卡指定的协议进行通讯。
五、指令解析
在此,我们以一个电子钱包的应用为例,讲解SmartCOS的指令。
仁文件结构:
在人行规范中定义了如下文件结构:
1)电子存折ED/电子钱包EP应用的公共应用基本数据文件
文件结构:
文件标识(SFI)'
21'
(十进制)
文件类型透明
文件大小30
文件存取控制读=自由改写=需要安全信息
字节数据元长度
I-8发卡方标识8
9应用类型标识1
10应用版本1
II-20应用序列号10
21-24应用启用日期4
25-28应用有效日期4
29-30发卡方自定义FCI数据2
2)电子存折ED/电子钱包EP应用的持卡者基本数据文件文件标识(SFI)'
22'
文件大小39
1卡类型标识1
2本行职工标识1
3-22持卡人姓名20
23-38持卡人证件号码16
39持卡人证件类型1
3)电子存折ED交易明细文件
24'
文件类型循环
文件存取控制读=戸11\1保护
改写=不允许
记录大小23
I-2ED或EP联机或脱机交易序号2
3-5透支限额3
6-9交易金额4
10交易类型标识1
II-16终端机编号6
17-20交易日期(终端)4
21-23交易时间(终端)3
2、安全设计如下:
1)核对口令后可以进行外部认证;
2)01号外部认证密钥用于控制电子钱包的圈存;
3)02号外部认证密钥用于控制基本文件的修改、密钥的修改;
4)核对口令后可以进行消费。
KEY文件安装如下密钥:
KEY类型标识KID使用权限后续状态该KEY作用描述
0B010F1个人密码PIN,用于个人密码校验
0801112外部认证密钥,用于电子钱包圈存
08021FF外部认证密钥,用于基本文件的修改、密钥的修改
010122无圈存密钥,用于产生圈存MAC
000201无电子钱包消费密钥,用于产生钱包消费MAC
020103无TAC密钥,用于产生圈存、消费、取现、修改透支限额的TAC
050133无应用维护密钥,用于产生应用锁定、应用解锁、卡片锁定、卡片锁定和读、更新二进制、记录命令的MAC
3、指令序列:
1)发卡过程,在卡上建立文件及安装密钥
[CreateMF]APDU命令:
80(CLA)eO(INS)00(P1)00(P2)18(Lc)ffffffffffffffff(8字节传输代码)ff(在MF下建立文件的安全属性)01(目录文件的短文件标识符)315041592e5359532e4444463031(创建的文件名称)
[CreateDF]APDU命令:
80(CLA)EO(INS)01(P1)00(P2)OD(Lc信息长度)2F01(文件标识符)ff(建立文件权限)00(COS保留)A00000000386980701
(ADF名称)
建立DF下密钥文件[CreateFile]APDU命令:
80(CLA)EO(INS)02(P1)00(P2)
07(文件信息长度)6F02(密钥文件标识)05(文件类型)FF(增加新密钥的权限)00(COS保留)09(记录数)19(记录长度):
安装个人密码PIN[WriteKey]APDU命令:
80(CLA)E8(INS)00(P1)00(P2)0A
(密钥信息长度)01(密钥标识符)01(密钥版本号)00(算法标识)0B(密钥类型)0F(使用权限)01(后续状态)2F(修改权限)33(错误计数器)1234(个人密码)
安装外部认证密钥(DEAK)[WriteKey]APDU命令:
80(CLA)E8(INS)00(P1)00(P2)18(密钥信息长度)01(密钥标识符)01(密钥版本号)00(算法标识)08
(密钥类型)11(使用权限)02(后续状态)FF(修改权限)33(错误计数器)XXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXX(密钥内容)
80(CLA)E8(INS)00(P1)00(P2)18(密钥信息长度)02(密钥标识符)01(密钥版本号)00(算法标识)08
(密钥类型)1F(使用权限)0F(后续状态)FF(修改权限)33(错误计数器)XXXX
o安装电子钱包EP的消费密钥DPK。
[WriteKey]APDU命令:
80(CLA)E8(INS)00
(P1)00(P2)18(密钥信息长度)02(密钥标识符)01(密钥版本号)00(算法标识)00(密钥类型)01(使用权限)00(后续状态)FF(修改权限)00(错误计
数器)XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX(密钥内容)
安装电子钱包的圈存密钥DLK[WriteKey]APDU命令:
80(CLA)E8(INS)00(P1)
00(P2)18(密钥信息长度)01(密钥标识符)01(密钥版本号)00(算法标识)01(密钥类型)22(使用权限)00(后续状态)FF(修改权限)00(错误计数器)XXXX
。
安装消费/取现中用来生成TAC的密钥DTK[WriteKey]APDU命令:
80(CLA)E8(INS)
00(P1)00(P2)18(密钥信息长度)01(密钥标识符)01(密钥版本号)00(算法标识)07(密钥类型)0F(使用权限)00(后续状态)FF(修改权限)00(错误计数器)XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX(密钥内容)
安装应用维护密钥DAMK[WriteKey]APDU命令:
80(CLA)E8(INS)00(P1)00(P2)18(密钥信息长度)01(密钥标识符)01(密钥版本号)00(算法标识)05(密钥类型)0F(使用权限)00(后续状态)FF(修改权限)00(错误计数器)XXXX
建立公共应用基本文件[CreateFile]APDU命令:
80(CLA)EO(INS)02(P1)00(P2)
07(Lc信息长度)0015(文件标识符)00(二进制文件类型)OF(读权限)FF(更新权限)001e(文件长度)
建立持卡者基本数据文件[CreateFile]APDU命令:
80(CLA)E0(INS)02(P1)00
(P2)07(文件信息长度)0016(文件标识符)00(二进制文件类型)OF(读权限)FF(更新权限)0027(文件长度)
建立交易明细文件[CreateFile]APDU命令:
80(CLA)E0(INS)02(P1)00(P2)
07(文件信息长度)0018(文件标识符)03(循环记录文件类型)1F(读权限)10(更新权限)0a17(文件长度)
写公共应用基本数据文件[UpdateBinary]APDU命令:
00(CLA)D6(INS)95(P1)00
(P2)1E(信息长度)A000000003000001(发卡方标识)03(应用类型标识)01(应用版本)00001998081500000001(应用序列号)20001001(应用启用日期)20021231(应用有效日期)5566(发卡方自定义FCI数据)
写卡持有者基本数据文件[UpdateBinary]APDU命令:
00(CLA)D6(INS)96(P1)00(P2)27(文件信息长度)00(卡类型标识)00(本行职工标识)53414d5000000000000000000000000000000000(持卡人姓名)31313031303837303033
313731383900(持卡人证件号码)00(持卡人证件类型)
建立电子钱包EP文件[CreateFile]APDU命令:
07(Lc)0001(文件标识符)06(文件类型)00(权限1)00(权限2)00(LEN1)00
(LEN2)
结束建立应用(DF)[CreateEnd]APDU命令:
80(CLA)E0(INS)01(P1)01(P2)
02(文件标识符长度)2F01(文件标识符)
结束建立MF[CreateEnd]APDU命令:
80(CLA)E0(INS)00(P1)01(P2)02
(文件标识符长度)3F00(文件标识符)
2)交易过程
在此,我们以圈存过程及消费过程为例:
A、圈存——将金额存入卡中
在圈存前必须先校对个人口令及01号外部认证;
选择应用[SelectFile]APDU命令:
00(CLA)A4(INS)00(P1)00(P2)02(长度)2F01(文件标识符)
校验PIN[Verify]APDU命令:
00(CLA)20(INS)00(P1)00(P2)02(长度)1234(PIN)
外部认证:
[
取随机数[GetChallenge]APDU命令:
00(CLA)84(INS)00(P1)00(P2)08
用01号外部认证密钥对随机数进行3DES加密;
外部认证[ExternalAuthentication]APDU命令:
00(CLA)82(INS)00(P1)01
(P2)08(长度)XXXXXXXXXXXXXXXX(加密后的随机数)
]
圈存:
初始化圈存[InitalizeForLoad]APDU命令:
80(CLA)50(INS)00(P1)02(P2)0B(长度)01(密钥标识符)00001000(交易金额)000000000001(终
端机编号)
如果初始化圈存成功,则应答数据域内容:
说明长度(字节)
电子存折或电子钱包旧余额4
电子存折或电子钱包联机交易序号2
密钥版本号1
算法标识1
伪随机数ICC4
MAC14
用圈存对应答内容(4字节伪随机数ICC+2字节电子存折或电子钱包联机交易序号+8000)
进行3DES加密生成过程密钥;
圈存[CreditForLoad]APDU命令:
80(CLA)52(INS)00(P1)00(P2)OB(LC)
YYYYMMDD(交易日期)HHMMSS(交易时间)XXXXXXXX(MAC2)
MAC2的计算:
初始值:
0000000000000000
密钥:
上面生成的过程密钥
生成MAC2的数据:
00001000(4字节交易金额)02(交易类型标识)000000000001
(6字节终端机编号)YYYYMMDD(交易日期)HHMMSS(交易时间)
如果圈存交易成功,电子钱包文件的联机交易序号加1,交易金额加在电子钱包的余额上,并且在交易明细文件中增加一条记录。
B、消费过程:
在消费之前先校验PIN:
00(CLA)20(INS)00(P1)00(P2)02(长度)12
34(PIN)
初始化消费[InitializeForPurchase]APDU命令:
80(CLA)50(INS)01(P1)02(P2)
OB(长度)01(消费密钥标识符)00000001(消费金额)000000000001(终端机编号)
如果初始化消费成功,则应答数据域内容:
透支限额3
消费[DebitForPurchase]APDU命令:
80(CLA)54(INS)01(P1)00(P2)OF(LC)
YYYYYYYY