更新时间:2014-04-11 10:01:06点击次数:247字号:|
第一部分 cpu基础知识
一、为什么用cpu卡
ic卡从接口方式上分,可以分为接触式ic卡、非接触式ic卡及复合卡。从器件技术上分,可分为非加密存储卡、加密存储卡及cpu卡。非加密卡没有安全性,可以任意改写卡内的数据,加密存储卡在普通存储卡的基础上加了逻辑加密电路,成了加密存储卡。逻辑加密存储卡由于采用密码控制逻辑来控制对eeprom的访问和改写,在使用之前需要校验密码才可以进行写操作,所以对于芯片本身来说是安全的,但在应用上是不安全的。它有如下不安全性因素:
1、密码在线路上是明文传输的,易被截取;
2、对于系统商来说,密码及加密算法都是透明的。
3、逻辑加密卡是无法认证应用是否合法的。例如,假设有人伪造了atm,你无法知道它的合法性,当您插入信用卡,输入pin的时候,信用卡的密码就被截获了。再如intenet网上购物,如果用逻辑加密卡,购物者同样无法确定网上商店的合法性。
正是由于逻辑加密卡使用上的不安全因素,促进了cpu卡的发展。cpu卡可以做到对人、对卡、对系统的三方的合法性认证。

二、 cpu卡的三种认证
cpu卡具有三种认证方法:
持卡者合法性认证——pin校验
卡合法性认证——内部认证
系统合法性认证——外部认证
持卡者合法性认证:
通过持卡人输入个人口令来进行验证的过程。
系统合法性认证(外部认证)过程:
系统 卡,
送随机数x
[用指定算法、密钥]对随机数加密

[用指定算法、密钥]解密y,得结果z
比较x,z,如果相同则表示系统是合法的;
卡的合法性认证(内部认证)过程:
系统 卡
送随机数x

用指定算法、密钥]对随机数加密

[用指定算法、密钥]解密y,得结果z

比较x,z,如果相同则表示卡是合法的;

在以上认证过程中,密钥是不在线路上以明文出现的,它每次的送出都是经过随机数加密的,而且因为有随机数的参加,确保每次传输的内容不同。如果截获了没有任何意义。这不单单是密码对密码的认证,是方法认证方法,就象早期在军队中使用的密码电报,发送方将报文按一定的方法加密成密文发送出去,然后接收方收到后又按一定的方法将密文解密。
通过这种认证方式,线路上就没有了攻击点,同时卡也可以验证应用的合法性;
但是因为系统方用于认证的密钥及算法是在应用程序中,还是不能去除系统商的攻击性。

在此,我们引进了sam卡的概念。
sam卡是一种具有特殊性能的cpu卡,用于存放密钥和加密算法,可完成交易中的相互认证、密码验证和加密、解密运算,一般用作身份标志。
由于sam卡的出现,我们有了一种更完整的系统凯发k8娱乐平台的解决方案。
在发卡时,我们将主密钥存入sam卡中,然后由sam卡中的主密钥,对用户卡的特征字节(如:应用序列号)加密生成子密钥,将子密钥注入用户卡中。由于应用序列号的唯一性,使每张用户卡内的子密钥都不同。
密钥一旦注入卡中,则不会在卡外出现。在使用时,由sam卡的主密钥生成子密钥存放在ram区中,用于加密、解密数据。
上述的认证过程就成为如下形式:

系统合法性认证(外部认证)过程:

sam卡 系统 卡
送随机数x

sam卡生成子密钥对随机数加密

解密y,得结果z
比较x,z,如果相同则表示系统是合法的;

卡的合法性认证(内部认证)过程:

sam卡 系统 卡

送随机数x

用指定算法、密钥]对随机数加密

sam卡解密y,得结果z

比较x,z,如果相同则表示卡是合法的;

这样在应用程序中的密钥,就转移到了sam卡中,认证成为卡——卡的认证,系统商不再存在责任。

三、 线路保护
卡与外界进行数据传输时,若以明文方式传输,数据易被载获和分析。同时,也可以对传输的数据进行窜改,要解决这个问题,cpu卡提供了线路保护功能。
线路保护分为两种,一是将传输的数据进行des加密,以密文形式传输,以防止截获分析。二是对传输的数据附加mac(安全报文鉴别码),接收方收到后首先进行校验,校验正确后才予以接收,以保证数据的真实性与完整性。

四、 硬件结构图





eeprom用于存放用户数据;rom中用于存放cos操作系统,而ram区中用于存放cos运行时的中间变量。
cos(chip operation system),就是芯片操作系统,类似于dos和windwos,没有cos的cpu卡就象没有dos和windows的pc机一样无法使用。
cos是在芯片出厂时由芯片供应商固化到rom区的,这个过程就称之为掩膜。
cos是cpu卡的核心部分,它和硬件一起实现cpu卡的安全性。






第二部分 smartcos简介
smartcos是由明华公司自主开发的芯片操作系统,于1999年6月通过了人行认证。
cos主要分为四部分:
一、 smartcos的文件系统
cpu卡是以文件方式来管理smartcos支持如下文件系统。
1、文件可分为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,当前应用的安全状态在被成功地选择或复位后自动清0。安全状态的改变必须通过密钥的认证来实现。
**只有当前目录下的pin核对和外部认证才能改变安全状态。

2、 安全属性即访问权限
访问权限是在建立文件的时候指定的。
它是一个区间的概念,例如,描述一个文件的读权限为xy,则表示当前应用的状态机(安全状态)m必须满足x=〈m=〈y。如读权限设为2f,就表示当前的状态机(安全状态)达到2及以上就可以读这个文件。

3、 密钥与安全状态的关系
每个密钥在建立的时候都定义了后续状态,即通过密钥认证后能达到的安全状态,在各种密钥中,只有pin认证和外部认证才能改变当前目录的安全状态。

4、安全状态与访问权限的关系
(安全状态)
使用权限--------密钥的使用------------后续状态------------文件读写取限

5、安全状态只在当前目录下有效,一旦选择别的应用,状态机自动跳到最低权限0。各个目录之间的安全都是独立的。


四、复位应答

符号 字节内容 内容解释
ts 3b 正向约定
t0 6c tb1和tc1存在,历史字符为12个
tb1 00 无需额外的编程电压
tc1 02 需2个额外的保护时间
t1-tc xx 历史字符
smartcos 历史字符的特定意义:
符号 字节内容 内容解释
t1 xx smartcos 的版本号
t2 xx 卡状态字节
t3 86 明华公司ic卡制造机构标识号
t4 38
t5-tc xx 卡唯一序号
卡状态字节描述如下:
b7 b6 b5 b4 b3 b2 b1 b0 状态
011 xxx xxx 001 xxx xxx xxx xxx 该卡已初始化,并成功该卡未被初始化该卡初始化过程被锁
0 0 0 0 0 0 x x 该卡未个人化
0 0 1 0 x x x x 该卡个人化未结束
0 1 1 0 x x x x 该卡个人化成功
0 0 0 1 x x x x 该卡个人化没有成功,卡被锁
0 1 1 1 x x x x 该卡个人化成功,卡被锁


卡片状态字节中有关于初始化、个人化的概念,我们从卡片的生命周期来看这两个概念,卡片的生命周期一般包括如下几部分:

芯片 芯片生产商

掩膜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、文件结构:









在人行规范中定义了如下文件结构:
1)电子存折ed/电子钱包ep应用的公共应用基本数据文件
文件结构:
文件标识(sfi) ‘21’(十进制)
文件类型 透明
文件大小 30
文件存取控制 读=自由 改写=需要安全信息
字节 数据元 长度
1-8 发卡方标识 8
9 应用类型标识 1
10 应用版本 1
11-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交易明细文件

文件标识(sfi) ‘24’(十进制)
文件类型 循环
文件存取控制 读=pin保护
改写=不允许
记录大小 23
字节 数据元 长度
1-2 ed或ep联机或脱机交易序号 2
3-5 透支限额 3
6-9 交易金额 4
10 交易类型标识 1
11-16 终端机编号 6
17-20 交易日期(终端) 4
21-23 交易时间(终端) 3

2、安全设计如下:
1) 核对口令后可以进行外部认证;
2) 01号外部认证密钥用于控制电子钱包的圈存;
3) 02号外部认证密钥用于控制基本文件的修改、密钥的修改;
4) 核对口令后可以进行消费。

key文件安装如下密钥:
key类型 标识kid 使用权限 后续状态 该key作用描述
0b 01 0f 1 个人密码pin,用于个人密码校验
08 01 11 2 外部认证密钥,用于电子钱包圈存
08 02 1f f 外部认证密钥,用于基本文件的修改、密钥的修改
01 01 22 无 圈存密钥,用于产生圈存mac
00 02 01 无 电子钱包消费密钥,用于产生钱包消费mac
02 01 03 无 tac密钥,用于产生圈存、消费、取现、修改透支限额的tac
05 01 33 无 应用维护密钥,用于产生应用锁定、应用解锁、卡片锁定、卡片锁定和读、更新二进制、记录命令的mac

3、指令序列:
1) 发卡过程,在卡上建立文件及安装密钥
[create mf] apdu命令:80(cla) e0(ins) 00(p1) 00(p2) 18(lc) ff ff ff ff ff ff ff ff (8字节传输代码) ff (在mf下建立文件的安全属性) 01(目录文件的短文件标识符) 31 50 41 59 2e 53 59 53 2e 44 44 46 30 31(创建的文件名称)

[create df] apdu命令:80(cla)e0(ins)01(p1) 00(p2) 0d (lc信息长度)2f 01(文件标识符)ff(建立文件权限) 00(cos保留) a0 00 00 00 03 86 98 07 01(adf名称)

建立df下密钥文件[create file] apdu命令:80(cla) e0(ins)02(p1) 00(p2) 07(文件信息长度) 6f 02(密钥文件标识 )05(文件类型) ff(增加新密钥的权限)00(cos保留) 09(记录数) 19(记录长度):

安装个人密码pin [write key] apdu命令:80(cla) e8(ins) 00(p1) 00(p2) 0a (密钥信息长度)01(密钥标识符)01(密钥版本号) 00(算法标识)0b(密钥类型)0f(使用权限) 01(后续状态)2f(修改权限)33 (错误计数器)12 34(个人密码)

安装外部认证密钥(deak)[write key] apdu命令:80 (cla)e8(ins) 00(p1) 00(p2) 18(密钥信息长度) 01(密钥标识符) 01(密钥版本号) 00(算法标识) 08(密钥类型) 11(使用权限) 02(后续状态) ff(修改权限) 33 (错误计数器)xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx(密钥内容)

安装外部认证密钥(deak)[write key] apdu命令:80 (cla)e8(ins) 00(p1) 00(p2) 18(密钥信息长度) 02(密钥标识符) 01(密钥版本号) 00(算法标识) 08(密钥类型) 1f(使用权限) 0f(后续状态) ff(修改权限) 33 (错误计数器)xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx(密钥内容)

。安装电子钱包ep的消费密钥dpk。[write key] apdu命令:80 (cla)e8(ins) 00(p1) 00(p2) 18(密钥信息长度) 02(密钥标识符) 01(密钥版本号) 00(算法标识) 00(密钥类型) 01(使用权限) 00(后续状态) ff(修改权限) 00 (错误计数器)xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx(密钥内容)

安装电子钱包的圈存密钥dlk [write key] apdu命令:80 (cla )e8(ins) 00(p1) 00(p2) 18(密钥信息长度) 01(密钥标识符) 01(密钥版本号) 00(算法标识) 01(密钥类型) 22(使用权限) 00(后续状态) ff(修改权限) 00 (错误计数器)xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx(密钥内容)

。安装消费/取现中用来生成tac的密钥dtk[write key] apdu命令:80 (cla)e8(ins) 00(p1) 00(p2) 18(密钥信息长度) 01(密钥标识符) 01(密钥版本号) 00(算法标识) 07(密钥类型) 0f(使用权限) 00(后续状态) ff(修改权限) 00 (错误计数器)xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx(密钥内容)

安装应用维护密钥damk[write key] apdu命令:80 (cla)e8(ins) 00(p1) 00(p2) 18(密钥信息长度) 01(密钥标识符) 01(密钥版本号) 00(算法标识) 05(密钥类型) 0f(使用权限) 00(后续状态) ff(修改权限) 00 (错误计数器)xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx(密钥内容)


建立公共应用基本文件[create file] apdu命令:80(cla) e0(ins) 02(p1) 00(p2) 07(lc信息长度) 00 15 (文件标识符)00 (二进制文件类型)0f(读权限)ff(更新权限)00 1e(文件长度)

建立持卡者基本数据文件[create file] apdu命令:80(cla) e0(ins) 02(p1) 00(p2) 07(文件信息长度) 00 16 (文件标识符)00(二进制文件类型)0f(读权限)ff(更新权限) 00 27(文件长度)

建立交易明细文件[create file] apdu命令:80(cla) e0(ins) 02(p1) 00 (p2)07 (文件信息长度)00 18(文件标识符) 03(循环记录文件类型)1f(读权限)10(更新权限)0a 17(文件长度)

写公共应用基本数据文件[update binary] apdu命令:00(cla)d6(ins)95(p1)00(p2)1e(信息长度)a0 00 00 00 03 00 00 01(发卡方标识)03(应用类型标识)01(应用版本) 00 00 19 98 08 15 00 00 00 01(应用序列号) 20 00 10 01 (应用启用日期)20 02 12 31(应用有效日期)55 66 (发卡方自定义fci数据)

写卡持有者基本数据文件[update binary] apdu命令:00(cla) d6(ins) 96(p1) 00(p2) 27(文件信息长度) 00(卡类型标识) 00(本行职工标识) 53 41 4d 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00(持卡人姓名) 31 31 30 31 30 38 37 30 30 33 31 37 31 38 39 00(持卡人证件号码) 00 (持卡人证件类型)

建立电子钱包ep文件[create file] apdu 命令:80(cla)e0(ins)02(p1)00(p2)07(lc)00 01(文件标识符)06(文件类型)00(权限1)00(权限2)00(len1)00(len2)

结束建立应用(df)[create end] apdu命令:80(cla) e0(ins) 01(p1) 01(p2) 02 (文件标识符长度)2f 01(文件标识符)

结束建立mf [create end] apdu命令:80(cla) e0(ins) 00(p1) 01(p2) 02 (文件标识符长度)3f 00(文件标识符)

2) 交易过程
在此,我们以圈存过程及消费过程为例:
a、 圈存——将金额存入卡中
在圈存前必须先校对个人口令及01号外部认证;

选择应用[select file]apdu命令:00(cla)a4(ins)00(p1)00(p2)02(长度)2f 01(文件标识符)

校验pin[verify] apdu命令:00(cla) 20(ins) 00(p1) 00(p2) 02(长度) 12 34(pin)

外部认证:[
取随机数[get challenge] apdu命令:00(cla) 84(ins) 00(p1) 00(p2) 08

用01号外部认证密钥对随机数进行3des加密;

外部认证[external authentication] apdu命令:00(cla) 82(ins) 00(p1) 01
(p2) 08(长度)xx xx xx xx xx xx xx xx (加密后的随机数)
]

圈存:[
初始化圈存[initalize for load] apdu命令:80(cla) 50(ins) 00(p1) 02(p2) 0b(长度) 01(密钥标识符) 00 00 10 00(交易金额) 00 00 00 00 00 01(终
端机编号)

如果初始化圈存成功,则应答数据域内容:
说明 长度(字节)
电子存折或电子钱包旧余额 4
电子存折或电子钱包联机交易序号 2
密钥版本号 1
算法标识 1
伪随机数icc 4
mac1 4


用圈存对应答内容(4字节伪随机数icc 2字节电子存折或电子钱包联机交易序号 80 00)进行3des加密生成过程密钥;

圈存[credit for load]apdu命令:80(cla)52(ins)00(p1)00(p2)0b(lc)
yy yy mm dd (交易日期)hh mm ss (交易时间)xx xx xx xx(mac2)

mac2的计算:
初始值:00 00 00 00 00 00 00 00
密钥:上面生成的过程密钥
生成mac2的数据:00 00 10 00(4字节交易金额)02(交易类型标识)00 00 00 00 00 01(6字节终端机编号)yy yy mm dd (交易日期)hh mm ss (交易时间)

如果圈存交易成功,电子钱包文件的联机交易序号加1,交易金额加在电子钱包的余额上,并且在交易明细文件中增加一条记录。

b、消费过程:
在消费之前先校验pin:
校验pin[verify] apdu命令:00(cla) 20(ins) 00(p1) 00(p2) 02(长度) 12 34(pin)

初始化消费[initialize for purchase] apdu命令:80(cla) 50(ins) 01(p1) 02(p2) 0b(长度) 01(消费密钥标识符)00 00 00 01(消费金额)00 00 00 00 00 01(终端机编号)

如果初始化消费成功,则应答数据域内容:
说明 长度(字节)
电子存折或电子钱包旧余额 4
电子存折或电子钱包联机交易序号 2
透支限额 3
密钥版本号 1
算法标识 1
伪随机数icc 4

消费[debit for purchase]apdu命令:80(cla)54(ins)01(p1)00(p2)0f(lc)
yy yy yy yy (终端交易序号)yy yy mm dd(终端交易日期)hh mm ss (交易时间)xx xx xx xx(mac1)

用消费/取现密钥对(4字节伪随机数icc 2字节电子存折或电子钱包联机交易序号 终端交易序号的最后2个字节))进行3des加密生成过程密钥;

mac1的计算:
初始值:00 00 00 00 00 00 00 00 00(8个字节)
密钥:过程密钥
生成mac码的数据:4字节交易金额 1字节交易类型标识 6字节终端机编号 4字节终端交易日期 3字节终端交易时间

如果消费交易成功,电子钱包文件的联机交易序号加1,电子钱包减去交易金额,并且在交易明细文件中增加一条记录。

六、其它指令解析
以下指令在使用过程中有较多的疑问,解释如下:
1、密钥的密文安装过程:
在3.2版本中对密钥的密文安装会有所不同,它的过程如下:
1)建立密钥文件:
建立密钥文件时,有关的文件信息如下表:
lc 有关文件信息
07 文件标识符 (2字节) 文件类型 (1字节) 权限1 (1字节) 权限2(1字节) len1(1字节) len2 (1字节)
权限1指明增加新密钥的权限,权限2指明用何种方式安装密钥。权限2设为80h,表示以密文方式安装。
2)使用上一层的应用主控密钥(smartcos 3.2中规定:密钥标识为01的外部认证密钥为应用主控密钥)对密钥信息进行加密(密钥信息为:明文密钥信息长度 密钥信息 80 00 00 00 00 00 00),对密钥信息的加密方式按标准的triple des或single des,如果密钥为16字节,则用triple des加密,如果为8字节,则用single des加密。
3)生成mac码,初始值为:4个字节的随机数 00 00 00 00,生成mac码的数据为:5个命令头 加密后的密钥信息。
4)其它密钥的密文安装都使用应用主控密钥加密安装。
5)密文安装mf下的应用主控密钥时,则使用卡片的传输密钥进行安装。

2、采用安全报文写二进制文件
1) 在建立二进制文件时,文件类型的第4位为1表示采用安全报文。
2)lc为写入的字节数 4
3)安全报文(mac)的计算:
初始值为:4个字节的随机数 ‘00 00 00 00’
密钥为:应用维护密钥

代码 值
cla 04
ins d6
p1 xx
p2 xx
lc 写入数据长度 4
data 写入数据 4字节mac

8、pin unblock个人密码的解锁
命令报文编码如下:
代码 值
cla 84
ins 24
p1 00
p2 01-解锁个人密码
lc 0c
data 加密的个人密码数据元 报文鉴别代码(mac)数据元,使用pin解锁密钥。
其中:
加密的个人密码数据元:
pin解锁密钥对 pin明文长度 pin 80 00(补足8的倍数)进行加密生成
mac的生成:
初始值:4字节随机数 00 00 00 00
密码:pin解锁密钥
生成mac码的数据:cla ins p1 p2 lc 加密的pin(8字节)

六、cpudemo的使用

七、rd读写器函数库的使用说明
(1) int cpu_reset(int icdev,unsigned char *data_buffer);
说明: cpu卡复位操作
参数: icdev: 初始化返回的设备标识符
data_buffer:复位响应返回的字符串
返回: = 0 正确
< 0 错误(见错误代码)


(2) int cpu_protocol(int icdev,int len, unsigned char *send_cmd,
unsigned char *receive_data)
说明: 按照cpu卡t=1的传输协议向读写器发送命令串
参数: icdev: 初始化返回的设备标识符
send_cmd: 对卡操作的命令串(t=1格式)
len: 命令串的长度
receive_data: cpu卡返回的数据串
返回: = 0 正确
< 0 错误(见错误代码)

(3) int cpu_comres(int icdev,int len, unsigned char *send_cmd,
unsigned char *receive_data)

注意事项:
1)不管是t=0或t=1的卡,rd读写器都是按t=1格式来传输命令的。
发送的命令串send_cmd包括:
nad pcb len command bcc
对于t=0的卡,nad、pcb可填‘00’;
返回值receive_data结构与send_cmd相同。

2)cpu_comres与cpu_protocol()的不同
a. 当上层函数库收到状态字节sw1sw=61xx时,cpu_protocol()函数做进一步处理,向读写器下发取应答字节指令(get respond),并将数据和状态字节一并返回;而cpu_comres()函数不做任何处理,直接将状态字节sw1sw2返回。
b. 当上层函数库接收到状态字节sw1sw=6cxx时,cpu_protocol()函数做进一步处理,将xx赋予le后重新发送上次指令,并将数据和状态字节一并返回;而cpu_comres()函数不做任何处理,直接将状态字节sw1sw2返回。