6283
选择文件无效
6284
FCI格式与P2指定的不符
6300
认证失败
63Cx
验证失败,x=0表示不提供计数器x!
=0表示重试次数
6581
EEPROM损坏,导致卡锁定
6700
Lc或Le长度错
6900
无信息提供
6901
命令不接受(无效状态)
6981
命令与文件结构不相容
6982
不满足安全状态
6983
认证方法锁定
6984
引用数据无效(未申请随机数)
6985
使用条件不满足
6986
没有选择当前文件
6988
安全报文数据项不正确
6A80
数据域参数不正确
6A81
功能不支持
6A82
未找到文件
6A83
未找到记录
6A84
记录空间已满
6A85
Lc与TLV结构不匹配
6A86
参数P1、P2不正确
6A88
未找到引用数据
6B00
参数错误(偏移地址超出了EF)
6Cxx
长度错误(Le错误;‘xx’为实际长度)
6D00
命令不存在
6E00
命令类型错,CLA错
6F00
数据无效
9302
MAC无效
9303
应用被永久锁定
9401
金额不足
9402
交易计数器达到最大值
9403
密钥索引不支持
9406
所需MAC不可用
9840
空间不够
9850
文件已存在,或文件信息错误
11.ATR
1) 冷复位(ColdReset)
当IC卡的电源电压和其他信号从静止状态中复苏且申请复位信号时,IC卡产生的复位。
2) 热复位(WarmReset)
在时钟(CLK)和电源电压(VCC)处于激活状态的前提下,IC卡收到复位信号时产生的复位。
11.1.缺省模式
当IC卡上电时,COS向卡外发送“复位应答”序列,返回:
3B6D0000,0081,543100,8660,1108160000xx(固定标识,T1-T2芯片制造商标识符,T3-T5操作系统版本,T6-T7卡片制造商标识符,T8-TD卡片序列号)说明:
∙这个序列总是以3B6D0000打头。
∙芯片制造商标识符=0081(代表华大)0085(代表华虹)0087(代表大唐)0090(FM)
∙芯片操作系统信息=543100(54是“T”,代表TurboCOS/SS3.1)
∙卡片制造商标识符=8660(代表东信和平)。
符号
值
说明
TS
3B
正向约定,首先传送的是字符最低有效位
T0
6D
TB1、TC1存在,历史字符为13个
TB1
00
无须额外编程电压
TC1
00
无须额外的保护时间
T1-T2
0090
芯片提供机构注册标识号
T3-T5
543116
芯片提供方或卡操作系统提供方自定义(T4为COS版本号)
54为cos名称
31为cos版本号。
16为这款芯片容量
T6-T7
8660
卡片制造机构注册标识号
T8-TD
YYYYYY+ZZZZZZ
YYYYYY为时间日期:
110816
ZZZZZZ为卡序列号:
000001~000020依序递增
复位应答中回送字符的最大个数(包括历史字符,但不包括TS)为32个。
11.1.1TS(初始字符)
TS有两个功能:
向终端提供一个便于位同步的已知位模式,并指定解释后续字符的逻辑约定。
对于正向逻辑约定,I/O的高电平状态等效于逻辑l,并且该数据字节的最低位在起始位之后首先发送,第1个半字节LHHL用于位同步。
基本响应:
IC卡将回送的TS为:
(H)LHHLHHHLLH——正向约定,值为3B,即从IO口向外传送数据时,先传送低位。
11.1.2T0(格式字符)
T0由两部分组成,高半字节(b5-b8)表示后续控制字符TA1、TB1、TC1和TD1是否存在,b5-b8位设置成逻辑1,表明TA1到TD1存在;相应地,低半字节(b1-b4)表明可选历史字符的数目(0到15)
基本响应:
IC卡应回送T0。
x的值表示要回送的可选历史字符的数目。
b8
b7
b6
b5
b4
b3
b2
b1
2x
0
0
1
0
x
x
x
x
3x
0
0
1
1
x
x
x
x
6x
0
1
1
0
x
x
x
x
7x
0
1
1
1
x
x
x
x
8x
1
0
0
0
x
x
x
x
9x
1
0
0
1
x
x
x
x
Cx
1
1
0
0
x
x
x
x
Dx
1
1
0
1
x
x
x
x
11.1.3TA1到TA3(接口字符)
在复位应答后的终端和IC卡信息交换期间,TA1到TA3表示传输控制参数F、D、N、P、I、X及U的值。
TA1到TC1和TA3传送的信息将用于后续数据交换。
TA1传送FI和DI的值,其中:
——FI用于确定F的值,F为时钟速率转换因子。
用于修改复位应答之后终端所提供的时钟频率。
——DI用于确定D的值,D为比特速率调节因子。
用于调整复位应答之后所使用的位持续时间。
TA1传送FI(用于确定时钟速率转换因子F的值)和DI(用于确定比特速率调节因子D的值)的值,复位应答期间缺省值分别为十进制的372和1。
若不回送TA1,则在整个后续信息交换过程中仍继续使用缺省值F=372和D=1。
TA2的存在与否表示IC卡是以特定模式还是以协商模式工作。
基本响应:
IC卡将不回送TA2,TA2不存在表示以协商模式工作。
TA3传送XI和UI的值,其中:
——XI在b8、b7位中定义,用于确定时钟停止指示符X的值。
X向接口设备表明是否支持时钟停止,如果支持,则在时钟停止时CLK端上的电平状态见表14。
——UI在b1到b6位中定义,用于确定类别指示符U的值。
U向接口设备表明卡所接受的操作条件。
TD1表示是否有后续的接口字符及后续传输所使用的协议。
选用T=0协议时,不回送TD1。
选用T=1协议时,TD1应为十六进制的81H,表示TD2存在,且后续传输协议为T=1协议。
TD2在选用T=1协议时,其值为十六进制的31H,表示TA3(IC卡信息域字节数,大小为10H到FEH)和TB3(低半字节指示字符等待时间整数CWI的值,取值范围0到4;高半字节指示块等待时间整数BWI的值,取值范围0到5)存在且后续传输协议为T=1协议。
下面是其中一些常用芯片测试的返回值,参考:
Ø 华大:
3B6D000000815444368660440200000001
3B6D0000008154400086604401000000A6
Ø 大唐:
3B6D000000875450008660000000000001
Ø 复旦:
3B6B00002090000000000016FE81530000
3B6D000000902020900090000066560BA1
Ø NXP
3B6D000000814D22088660122226200001
3B8D800100814D220886601222262000013B(CONTACTLESS)
3B6C00004A4345535632305F5034310000(NEW)
11.2.协商模式
卡上电复位或热复位后,卡发送的复位应答结构如下:
3B
7x('0'~'F')
FD
00
00
历史字节(0~15字节)
11.3.特定模式
卡片在该模式下,返回复位应答后,将直接使用特定波特率因子FD进行通讯,不接受协商命令。
3B
FX(1~F)
FD
00
00
10
80
历史字节(0~15字节)
典型时钟频率:
f=3.5712MHZ,FD值如下:
F
D
Fi
Di
分频比
典型通讯速率
1001
0001
512
1
512
6975bps
1001
0010
512
2
256
13950bps
1001
0011
512
4
128
27900bps
1001
0100
512
8
64
55800bps
1001
0101
512
16
32
111600bps
1001
0110
512
32
16
223200kbps
1001
0111
512
64
8
446400bps
0001
0001
372
1
372
9600bps
0001
0010
372
2
186
19200bps
0001
0011
372
4
93
38400bps
0011
1000
744
12
62
57600bps
0001
1000
372
12
31
115200bps
12.常用加密机及使用
数据加密机主要用于实现对主机应用层数据加/解密、消息来源正确性验证、密钥管理等。
全国大多数商业银行,城市一卡通系统、公交卡系统、社保卡系统、加油卡系统,金融IC卡系统、电子联行系统、综合业务系统、信用卡系统、银证转帐系统、企业银行系统、网上证券交易系统都有应用。
在1996年以前,国产的数据加密机尚未产生,国内银行均采用国外的加密产品,主要是英国的RACAL(雷卡)和加拿大的ATALLA品牌。
这两个公司有着较长的从事金融信息安全的研究和为金融业提供信息安全产品的历史,其产品可适应金融信息安全的各种要求,方便地和各种计算机硬件平台和软件平台接口,技术比较成熟。
为彻底解决我国金融交易的安全问题,并同时做到和国外金融业务接轨。
1996年国家信息安全主管部门指定两家最具实力的科研机构(总参56所和电子部30所)进行研究开发,这两家单位在同年先后推出了各自的金融数据加密机(总参56所的SJL06型,电子部30所的SJL05型),两种机型都属于信源加密设备,并均通过了国家密码管理委员会的鉴定。
目前在社保领域用到的国内加密机主要有成都卫士通信息安全技术有限公司的SJL05型,广州江南科友科技股份有限公司的SJL06型,北京江南歌盟科技有限公司的SJL22型。
12.1. 成都卫士通
成都卫士通信息产业股份有限公司成立于1998年,由中国电子科技集团公司第30研究所发起成立。
所以SJL05加密机也叫做30所加密机,主要应用在珠海社保,韶关社保,贵州省,内蒙古,天津市,重庆市等。
SJL05加密机在社保发卡取密钥过程指令如下:
∙取出指定的次主密钥一SHSMK1和次主密钥二SHSMK2;
∙用SHSMK1对分散数据做指定次数的分散,得到子密钥SubKey;
∙用SHSMK2对SubKey做3DES加密,得到密文CsubKey;
∙用SubKey对8字节0做3DES加密,得到校验码CheckValue;
∙返回CsubKey和CheckValueE的前四个字节.
1.LoadEncmc(suo30) ;;30所加密机
2.JMJ=LINK(172_16_0_239,6666) ;;连接加密机 注意IP的表示方式
3.PAD=0102030405060708 ;;导密钥指令中用户自填充数据
4.TKA=0003 ;;次主密钥索引二
5.ATR=0000000000000000
6.CPKEY=SENDCMD(JMJ,B060+PAD+0170+TKA+01+ ATR,36)
7.
8.
9.对于STK采用B0A0指令,如下:
10.CKEY=SENDCMD(JMJ,B0A0+PAD+0173+TKA+02+DispKey+ATR,36)
11.CKEY=COPY(CKEY,1,32)
12.ECB_3DES_DE(CKEY,TKEY,DEKEY)
13.STK=COPY(DEKEY,1,16)
从加密中离散密钥后返回密钥值和校验值,通过校验值,我们可以检测密钥值是否离散正确。
以30suo加密机为例,校验值计算如下:
1.INDEX[004C]=94851AB5439C41A250D35A3B5787C3F4
2.VERIFY=AAD0DF47
3.TPKEY=11111111111111111111111111111111
4.
5.
6.ECB_3DES_DE(INDEX[004C],TPKEY,KEY)// KEY=9E8870C9ADF00B6E462483A4F187D292
7.ECB_3DES_EN(0000000000000000,KEY,VERIFY_)//VERIFY_=AAD0DF4744BB32A4
所以在从加密机导出密钥后,首先需要验证密钥是否和TPKEY(传输密钥)匹配。
12.2.科友SJL06
SJL06加密机也就是我们常说的总参56所加密机,主要应用在山东社保,广州社保等。
由于军队不能够经商,科友科技同总参56所签订了合作协议,负责推广总参56所的金融数据加密机