CPU卡详解【转】

本文转载自:http://blog.csdn.net/logaa/article/details/7571805

第一部分 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卡的出现,我们有了一种更完整的系统解决方案。

在发卡时,我们将主密钥存入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 operationsystem),就是芯片操作系统,类似于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。各个目录之间的安全都是独立的。

四、复位应答

符号字节内容 内容解释

TS3B 正向约定

T06C TB1和TC1存在,历史字符为12个

TB100 无需额外的编程电压

TC102 需2个额外的保护时间

T1-TC XX 历史字符

SMARTCOS 历史字符的特定意义:

符号字节内容 内容解释

T1XX SMARTCOS 的版本号

T2XX 卡状态字节

T386 明华公司IC卡制造机构标识号

T438

T5-TC XX 卡唯一序号

卡状态字节描述如下:

B7B6 B5 B4 B3 B2 B1 B0 状态

011XXX XXX 001 XXX XXX XXX XXX 该卡已初始化,并成功该卡未被初始化该卡初始化过程被锁

0 00 0 0 0 X X 该卡未个人化

0 01 0 X X X X 该卡个人化未结束

0 11 0 X X X X 该卡个人化成功

0 00 1 X X X X 该卡个人化没有成功,卡被锁

0 11 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-2ED或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作用描述

0B01 0F 1 个人密码PIN,用于个人密码校验

0801 11 2 外部认证密钥,用于电子钱包圈存

0802 1F F 外部认证密钥,用于基本文件的修改、密钥的修改

0101 22 无圈存密钥,用于产生圈存MAC

0002 01 无电子钱包消费密钥,用于产生钱包消费MAC

0201 03 无 TAC密钥,用于产生圈存、消费、取现、修改透支限额的TAC

0501 33 无应用维护密钥,用于产生应用锁定、应用解锁、卡片锁定、卡片锁定和读、更新二进制、记录命令的MAC

3、指令序列:

1)发卡过程,在卡上建立文件及安装密钥

[Create MF] APDU命令:80(CLA) e0(INS) 00(P1) 00(P2) 18(Lc) ff ff ff ffff ff ff ff (8字节传输代码) ff (在MF下建立文件的安全属性) 01(目录文件的短文件标识符) 31 50 4159 2e 53 59 53 2e 44 44 46 30 31(创建的文件名称)

[Create DF] APDU命令:80(CLA)E0(INS)01(P1) 00(P2) 0D (Lc信息长度)2F01(文件标识符)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 XXXX(密钥内容)

安装外部认证密钥(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 XXXX(密钥内容)

。安装电子钱包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 XXXX(密钥内容)

安装电子钱包的圈存密钥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 XXXX(密钥内容)

。安装消费/取现中用来生成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 XXXX 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 XXXX(密钥内容)

建立公共应用基本文件[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 0001(发卡方标识)03(应用类型标识)01(应用版本) 00 00 19 98 08 15 00 00 00 01(应用序列号) 2000 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 0000 00 00 00 00 00 00 00(持卡人姓名) 31 31 30 31 30 38 37 30 30 33 31 3731 38 39 00(持卡人证件号码) 00 (持卡人证件类型)

建立电子钱包EP文件[Create File] APDU 命令:80(CLA)E0(INS)02(P1)00(P2)07(Lc)0001(文件标识符)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(长度)2F01(文件标识符)

校验PIN[Verify] APDU命令:00(CLA) 20(INS) 00(P1) 00(P2) 02(长度) 1234(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)

YYYY 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 0001(6字节终端机编号)YY YY MM DD (交易日期)HH MM SS (交易时间)

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

B、消费过程:

在消费之前先校验PIN:

校验PIN[Verify] APDU命令:00(CLA) 20(INS) 00(P1) 00(P2) 02(长度) 1234(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)

YYYY YY YY (终端交易序号)YY YY MM DD(终端交易日期)HH MM SS (交易时间)XX XX XXXX(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)使用上一层的应用主控密钥(SmartCOS3.2中规定:密钥标识为01的外部认证密钥为应用主控密钥)对密钥信息进行加密(密钥信息为:明文密钥信息长度+密钥信息+80 00 0000 00 00 00),对密钥信息的加密方式按标准的Triple DES或Single DES,如果密钥为16字节,则用TripleDES加密,如果为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’

密钥为:应用维护密钥

代码值

CLA04

INSD6

P1Xx

P2Xx

Lc写入数据长度+4

DATA 写入数据+4字节MAC

8、PIN Unblock个人密码的解锁

命令报文编码如下:

代码值

CLA84

INS24

P100

P201-解锁个人密码

Lc0C

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()函数做进一步处理,向读写器下发取应答字节指令(GetRespond),并将数据和状态字节一并返回;而cpu_comres()函数不做任何处理,直接将状态字节SW1SW2返回。

b.当上层函数库接收到状态字节SW1SW=6CXX时,Cpu_protocol()函数做进一步处理,将XX赋予le后重新发送上次指令,并将数据和状态字节一并返回;而cpu_comres()函数不做任何处理,直接将状态字节SW1SW2返回。

时间: 2024-11-06 03:39:18

CPU卡详解【转】的相关文章

CPU参数详解

PcpCPU参数详解 1.主频 主频也叫时钟频率,单位是MHz,用来表示CPU的运算速度.CPU的主频=外频×倍频系数.很多人认为主频就决定着CPU的运行速度,这不仅是个片面的,而且对于服务器来讲,这个认识也出现了偏差.至今,没有一条确定的公式能够实现主频和实际的运算速度两者之间的数值关系,即使是两大处理器厂家 Intel和AMD,在这点上也存在着很大的争议,我们从Intel的产品的发展趋势,可以看出Intel很注重加强自身主频的发展.像其他的处理器厂家,有人曾经拿过一快1G的全美达来做比较,它

linux sysbench: CPU性能测试详解

网上sysbench教材众多,但没有一篇中文教材对cpu测试参数和结果进行详解.本文旨在能够让读者对sysbench的cpu有一定了解. 小慢哥的原创文章,欢迎转载 1.sysbench基础知识 sysbench的cpu测试是在指定时间内,循环进行素数计算 素数(也叫质数)就是从1开始的自然数中,无法被整除的数,比如2.3.5.7.11.13.17等.编程公式:对正整数n,如果用2到根号n之间的所有整数去除,均无法整除,则n为素数. 2.sysbench安装 # CentOS7下可使用yum安装

Linux下CPU使用率详解

CPU使用率其实就是你运行的程序占用的CPU资源,表示你的机器在某个时间点的运行程序的情况.使用率越高,说明你的机器在这个时间上运行了很多程序,反之较少 Top命令是Linux下常用的系统性能分析工具,能实时查看系统中各个进程资源占用情况 top - 10:02:17 up 14 days, 19:18, 4 users, load average: 2.11, 2.32, 2.14 Tasks: 251 total, 1 running, 247 sleeping, 3 stopped, 0

cpu 状态详解

CPU的: us(user time) 表示CPU执行用户进程的时间,包括ni时间.通常我们只看这项. sy(system time) 表示CPU在内核运行时间,包括IRQ和softirq时间,系统CPU占用率高,表明系统某部份存在瓶颈,通常值越低越好. wa(waiting time) CPI在等待I/O操作完成所花费的时间,系统不应该花费大量时间来等待I/O操作,否则说明I/O存在问题. id(idle time) 系统处于空闲期,等待进程运行. ni(nice time) 系统调整进程优先

Windows下caffe安装详解(仅CPU)

本文大多转载自 http://blog.csdn.net/guoyk1990/article/details/52909864,加入部分自己实战心得. 1.环境:windows 7\VS2013 2.caffe-windows准备 (1)下载官方caffe-windows并解压,将 .\windows\CommonSettings.props.example备份,并改名为CommonSettings.props.如图4所示: 图 4:修改后的CommonSettings.props文件 附带说明

CPU的快速互联通道(QPI)详解

翻译自:http://www.hardwaresecrets.com/article/Everything-You-Need-to-Know-About-The-QuickPath-Interconnect-QPI/610/1 自Intel有CPU开始,便一直采用的是称之为"前端总线(Front Side Bus, FSB)"的外部总线.前端总线是由内存和I/O共享的一条通往CPU的通道.新一代的Intel 处理器将内置内存控制器,所以该处理器将提供两个通道:连接CPU和内存的内存总线

Linux CPU实时监控mpstat命令详解

Linux CPU实时监控mpstat命令详解 简介 mpstat是Multiprocessor Statistics的缩写,是实时系统监控工具.其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中.在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息.mpstat最大的特点是:可以查看多核心cpu中每个计算核心的统计数据:而类似工具vmstat只能查看系统整体cpu情况. 语法 mpstat [-P {|ALL}] [internal [co

SQLServer2008-2012资源及性能监控—CPU使用率监控详解

 本文接着上文继续,讲述如何监控CPU的使用情况 前言: CPU是服务器中最重要的资源.在数据库服务器中,CPU的使用情况应该时刻监控以便SQLServer一直处于最佳状态. 本文将会使用可靠性和性能监视器来获取CPU相关的使用统计信息 可靠性和性能监视器是过去性能监视器工具的加强版.同时拥有性能监视器的全部功能. 性能计数器提供对各种系统活动的统计功能.可以找到有数百种性能计数器来针对Windows操作系统或者第三方应用程序的性能.SQLServer同样有数百个性能计数器供DBA使用. 在

直播卡顿原因详解及优化

随着视频直播的发展,很多直播团队可能会遇到视频直播卡顿,频繁出现缓冲标志或者直播画面一卡一卡等情况.究竟是哪些原因造成了视频直播观看的卡顿情况呢? 又拍直播云结合实践经验,从设备.视频流.网络这三方面进行解剖分析造成直播卡顿的问题及其解决方法. 视频直播卡顿原因 造成直播视频卡顿的原因主要有设备.视频流.网络这三方面的问题. 问题排查及解决方法 设备 高清视频往往会给硬件带来解码压力,由于解码造成的卡顿尤为明显.同时如果PC端Flash Player或移动端播放软件版本过低,可能也会造成解码问题