第一部分:卡的电气特性
一、 卡的触点分配
IC卡触点的分配遵循ISO7816-2的规定,如下所示:
C1 | 电源电压(Vcc) | C5 | 地(GND) |
C2 | 复位信号(RST) | C6 | 不使用 |
C3 | 时钟信号(CLK) | C7 | 输入/输出(I/0) |
二、 卡的电气特性
1、 测量约定
所有测量均应在IC卡和接口设备(IFD)之间的触点上进行,并以GND为参照。环境温度范围为0℃~50℃。
所有流入IC卡的电流均为正值。
2、 输入/输出(I/O)
该触点作为输入端(接收模式)从终端接收数据或者作为输出端(传输模式)向终端传送数据。在操作过程中,IC卡和终端不能同时处于传输模式,若万一发生此情况,I/O触点的状态(电平)将处于不确定状态,但不应损坏IC卡。
(1) 接收模式
在接收模式下,当电源电压(VCC)在第6中所规定的范围内时,IC卡应能正确的解释来自终端的信号,其特性如表2所示:
符 号 | 最小值 | 最大值 | 单 位 |
VIH | 0.7×Vcc | Vcc | V |
VIL | 0 | 0.8 | V |
tR 和 tF | ---- | 1.0 | μs |
表2 接收模式下的I/O的电气特性
(2) 传输模式
在传输模式下,IC卡向终端传送数据,其特性如表3所示:
符 号 | 条 件 | 最小值 | 最大值 | 单 位 |
VoH | -20μA<IoH<0,Vcc=min. | 0.7×Vcc | Vcc | V |
VoL | 0 <IOL<1mA,Vcc=min. | 0 | 0.4 | V |
tR 和 tF | CIN(terminal)=30pF max. | ----- | 1.0 | μs |
表3 传输模式下的I/O的电气特性
除向终端传送数据外,IC卡应将其I/O信号驱动模式设置为接收模式,且不要求I/O具备任何电流源性能。
3、 编程电压(Vpp)
IC卡不需要编程电压Vpp。
4、 时钟(CLK)
当VCC在第6中所规定的范围内时,IC卡将在具有表4所示特性的时钟信号作用下正常工作。
符 号 | 条 件 | 最小值 | 最大值 | 单 位 |
VIH |
| Vcc-0.7 | Vcc | V |
VIL |
| 0 | 0.5 | V |
tR 和 tF | Vcc=min. To max. | ----- | 9%的时钟周期 | μs |
表4 CLK的电气特性
当时钟占空因数处于其稳定运行周期的44%~56%之间时,IC卡应能正常工作。
当时钟频率处于1MHZ到5MHZ之间时,IC卡应能正常工作。
注:在卡片操作过程中,频率值将由终端维持在复位应答期间所用频率的±10%之内。
5、 复位(RST)
当VCC在第6中所规定的范围内时,IC卡应能正确的解释具有表5所示电气特性的复位信号。
符 号 | 条 件 | 最小值 | 最大值 | 单 位 |
VIH |
| Vcc-0.7 | Vcc | V |
VIL |
| 0 | 0.6 | V |
tR 和 tF | Vcc=min. To max. | ----- | 1.0 | μs |
表5 RST的电气特性
IC卡将利用激活的低复位信号,采用异步方式进行复位应答。
6、 电源电压(VCC)
在电源电压VCC为5V±0.5V直流电的情况下,IC卡应能正常工作。此时,时钟频率应在
第4中所规定的范围内。最大电流为50mA。
7、 触点电阻
在整个生命周期内,IC卡触点电阻(在清洁的IC卡和清洁的标准接口设备触点间测量时)应小于500mΩ。
三、终端的电气特性
1、 测量约定
同卡片。
2、 输入/输出(I/O)
该触点作为输出端(传输模式)向IC卡传送数据,作为输入端(接收模式)从IC卡接收数据。在操作过程中,终端和IC卡不能同时处于传输模式,若万一发生此情况,I/O触点的状态(电平)将处于不确定状态,但不应损坏终端。
当终端和IC卡都处于接收模式时,触点将处于高电平状态。为了达到这种状态,终端应在VCC上或其它装置上连接一个上拉电阻。除非VCC加电并稳定在第6中允许的范围内,终端不应将I/O置于高电平状态。见卡操作过程中有关触点激活的内容。
在任何情况下,均应将流入或流出I/O触点的电流限定在±5mA以内。
(1) 传输模式
在传输模式下,终端向IC卡传送数据,其特性如表7所示:
符 号 | 条 件 | 最小值 | 最大值 | 单 位 |
VoH | -20μA<IoH<20μA,Vcc=min. | 0.8×Vcc | Vcc | V |
VoL | - 1mA <IOL<0,Vcc=min. | 0 | 0.4 | V |
tR 和 tF | CIN(ICC)=30pF max. | ----- | 1.0 | Μs |
正负脉冲峰值 |
| -0.25 | Vcc+0.25 | V |
表7 传输模式下的I/O的电气特性
(2) 接收模式
在接收模式下,终端应能正确的解释从IC卡发来的具有表8所示特性的信号。
符 号 | 最小值 | 最大值 | 单 位 |
VIH | 0.7×Vcc | Vcc | V |
VIL | 0 | 0.8 | V |
tR 和 tF | ---- | 1.0 | Μs |
表8 接收模式下的I/O的电气特性
3、 编程电压(VPP)
终端不产生编程电压VPP。
4、 时钟(CLK)
终端将产生一个具有表9所示特性的时钟信号:
符 号 | 条 件 | 最小值 | 最大值 | 单 位 |
VoH | 0<IoH<50μA, Vcc=min. | Vcc-0.5 | Vcc | V |
VoL | - 50μA <IOL<0, Vcc=min. | 0 | 0.4 | V |
tR 和 tF | CIN(ICC)=30pF max. | ----- | 8%的时钟周期 | Μs |
正负脉冲峰值 |
| -0.25 | Vcc+0.25 | V |
表9 CLK的电气特性
频率范围在1MHZ~5MHZ之间,且在整个交易期间,其变化范围不超过±1%(见卡的操作过程)。时钟占空因数应在其稳定运行周期的45%~55%之间。
5、 复位(RST)
终端产生一个具有表10所示特性的复位信号:
符 号 | 条 件 | 最小值 | 最大值 | 单 位 |
VoH | 0<IoH<50μA, Vcc=min. | Vcc-0.5 | Vcc | V |
VoL | - 50μA <IOL<0, Vcc=min. | 0 | 0.4 | V |
tR 和 tF | CIN(ICC)=30pF max. | ----- | 0.8 | Μs |
正负脉冲峰值 |
| -0.25 | Vcc+0.25 | V |
表10 RST的电气特性
6、 电源电压(VCC)
终端提供一个5V±0.4V的直流电压,并能稳定输出0~55mA的电流。终端应带有保护电路以防止在误操作如对地或VCC短路时所造成的损坏。误操作既可能来源于内部,也可能来自外部接口如电源干扰、通讯链路故障等。
在IC卡的正常操作中,电流脉冲可在IC卡触点上引起VCC波动。电源应能中和小于40nAs且持续时间不超过400ns的电源波动。并能承受IC卡上100mA的电流消耗。
7、 触点电阻
在终端的整个设计寿命期间,触点电阻(在清洁的接口设备和清洁的标准IC卡触点间测量时)应小于500mΩ。
8、 短路保护
当任何两个触点之间发生短路时,无论时间长短,终端都不应被损坏或功能失常。
9、 插入IC卡后,当对终端进行加电或断电
插入IC卡后,当对终端进行加电或断电时,触点的接口界面不应出现杂乱信号或电源干扰,触点激活和释放的时序见用卡过程。
第二部分:IC卡的用卡过程
以下用卡过程是按照《EMV规范》(即《支付系统集成电路卡规范》)的规定来叙述的。对于其它应用的IC卡,只要符合ISO-7816标准的规定,其用卡过程也大体相同。
一、 用卡过程
(一) 正常的用卡过程
这里所说的正常用卡过程,是指IC卡所插入的终端设备将其触点断电后,持卡人才拔出IC卡而结束的用卡过程。
1、用卡过程可划分为如下几个阶段:
1) 把IC卡插入IFD(接口设备Interface Device)并接通各触点。
2) 使IC卡复位并在终端和IC卡间建立通讯。
3) 执行交易
4) 释放触点并取出IC卡。所谓释放触点。
2、IC卡插入和触点接通序列
IC卡插入IFD,但触点还没有进行物理接触时,终端必须确保所有触点都处于低电平状态(VOL值应满足终端电气特性的规定(一般为0~0.4V),而VCC小于或等于0.4V或0.4V以 下)。当IC卡按插入的方向置入时,IFD应能检测它是否定位在标准的正确位置,即IFD触点的中心恰好和IC触点的中心相重合的位置,允许误差为±0.5mm。 当IFD检测到IC卡是处在这个范围内时,且所有的触点都已接触上,其激活过程如下(如图1-4所示):
1、终端在整个激活过程中始终保持RST(复位Reset)为低电平状态;
2、触点物理接通后,应在I/O或CLK(时钟Clock)激活之前给VCC加电;
3、终端确认VCC稳定在5V±0.4V(状态H)的范围内后,终端将I/O线置为接收方式,并提供一个(5。1。4。4)规定的稳定而适用的时钟,终端将其I/O置于接收方式可以在时钟启动之前,最迟不得超过时钟启动后的200个时钟周期。
注:根据设计,终端可以给VCC一个足够的等待时间使之稳定,待稳定后再通过测量或其它方式检查它的状态。终端将其I/O置为接收模式后,其I/O状态取决于IC卡上I/O的状态。
3、 IC卡的复位
(1) 冷复位
触点接通后,终端将发出一个冷复位信号,并从IC卡得到一个复位应答,过程如下:
l 从T0时刻起,终端施加CLK;
l 在T0后不超过200个时钟周期内,IC卡必须将其I/O线置为接收方式。由于终端也必须在这段期限内置其I/O线驱动器为接收方式,所以I/O线在T0后最迟不超过200个时钟周期的时间内置为高电平。为此,终端的I/O触点应经过一个上拉电阻接到V CC;
l 终端应从T0开始保持RST端为低电平状态,并在从T 0 开始到T 1后的40,000至45,000个时钟周期内将RST置为高电平;
l IC卡上I/O的复位应答将在T 1时刻后的400至40,000个时钟周期内开始;
l 如果IC卡未在这段时间内进行复位应答,则终端必须启动一个触点释放时序。
(2) 热复位
IC卡对终端的复位应答有着规定的规格和内容(详见后述),如果终端收到的复位应答不符合规定要求时,终端将启动一个热复位并从IC卡获得复位信号。过程如下:
l 热复位从时刻T 0 ‘开始,此时终端置RST为低电平状态;
l 在整个热复位过程中,终端应保持V CC和CLK稳定并符合上一部分的规定;
l 在T 0 ‘之后的最多200周期内,IC卡和终端都必须置I/O为接收方式,即I/O线在T 0 ‘后最迟不超过200个时钟周期内置为高电平;
l 终端应从T 0 ‘开始保持RST为低电平状态,并在T 0 ‘至T 1 ‘后的40,000到45,000个时钟周期内将RST端置为高电平状态。
l IC卡上I/O的复位应答将在T 1 ‘后的400至40,000个时钟周期内开始;
l 如果IC卡未在这段时间内进行复位应答,则终端必须启动一个触点释放时序。
4、 执行交易
IC卡的应用选择以及其后在IC卡与终端间的信息交换都是执行一项交易所必不可少的,详情将在以后叙述。
5、 触点释放序列
作为用卡过程的最后一个步骤,不论交易是正常或异常结束(包括用卡过程中从IFD取回IC卡),终端必须按以下步骤释放IFD的触点。
l 终端以置RST为低电平状态来开始触点释放序列;
l 在置RST为低电平状态之后且Vcc断电之前,终端将CLK和I/O也置为低电平;
l
最后,在实际断开触点之前,终端必须先将V CC去电,V CC在IFD触点实际断开之前必须为0.4V或更低些。
(二)交易过程的非正常结束
如果在执行一项交易的过程中,过早地把IC卡从终端以高达1m/S的速度取出时,终端必须能够觉察出IC卡的运动,并按照上述触点释放序列,并在相对位移达到1mm之前,释放所有的IFD的触点。在这种情况下不得对IC卡产生任何电气的或机械的损伤。
二、字符的物理传送
交易过程中,数据以异步半双工方式经I/O线在终端和IC卡双向传送。由终端向IC卡提供时钟信号,并以此来控制交易的时序。信息交换时的数据位和字符的规定如下所述,它适用于复位应答,以及现行的符合ISO7816标准规定的T=0和T=1两种传输协议。
(一)位持续时间
I/O线上所用的位持续时间被确定为基本时间单位(etu-elementary time uint),它和时钟频率间存在着线性关系。终端给出时钟信号的IC卡被称为外时钟卡。
复位应答时的位持续时间称为初始etu,并由正式算出
初始etu=372/f 秒
式中 f 的单位为Hz,表示复位响应时的初始频率。
复位应答(以及全局参数F与D的设立,见后述)之后的持续时间,称为当前etu,其计算公式为:
当前etu=F/Df 秒
式中f 的单位为Hz,表示后续传送时的当前工作频率。
注:《EMV卡规范》约定当前仅F=372、D=1之值受到支持,因而,初始的和当前的etu是一样的,均由372/f算出。今后,除非特别说明,凡提到etu指的都是当前etu。
在卡的整个交易过程中,f的值应在1~5MHZ之间。
(二)字符帧
数据在I/O线上以字符帧传送,所用约定在IC卡复位应答传送的起始字符TS中予以规定(参见后述)。
字符传送之前,I/O线置为高电平状态。
一个字符帧包含着10个相连的数位:
——1个状态为L的起始
——8数位组成的数据字节
——1位偶校验位
起始位由接收端周期性地对I/O线采样检测。采样时间小于或等于0.2etu.
在一个字符帧中的逻辑‘1’的数量必须为偶数,8个数据位和奇偶位本身都包括在此校验中,但起始位不作校验计算。
起始时间固定地从最后一个检测到的高电平至第一个检测到的低电平的中间算起`,起始位的存在必须在0.7etu之内确定,相继的的各位必须在(n+0.5±0.2)etu区间内被接收。(n为各数位之秩),起始位为位1。
在一个字符帧内,从它的起始位的前沿起到第n位的后沿间的时间是(n±0.2)etu.
相连两字符的起始位前沿之间的区间包括了字符宽度(10±0.2)etu,加上保护时间,在保护时间内,IC卡和终端二者都处于接收方式(I/O线处于高电平状态)。当T=0时,如果IC卡或终端作为接收方对刚收到的字符检测出奇偶错误,则I/O将被置为低电平状态,以向发送方表明出现错误。
三 、复位应答
IC卡被终端复位后,用一串称之为复位应答(ATR-Answer To Resest)的字节应答。这些字节传达给终端的信息规定了IC卡和终端之间要建立的通讯的某种特性。
我们规定一个字符的最高位为b8位,最低位为b1位,其代码用括在引号的16进制数表示,如“3F”。
(一)复位应答期间回送字符的物理传输
复位应答期间,相连二字符的起始位上升沿之间的最小间隔为12初始etu,而最大间隔为9600初始etu。
在复位应答期间(热的或冷的),IC卡应在19,200个初始etu之内发送完所有要回送的字符。发送时间应从第一字符(TS)起始位的上升沿开始,到最后一个字符的起始位上升沿后的12个初始etu之间。
(二)复位应答时回送的字符
IC卡在复位应答时回送的字符的数量和编码随传输协议和所支持的传输控制参数之值而定。本节描述两各种基本的复位应答:一种是IC卡支持T=0,另一种是IC卡支持T=1,它规定了回送的字符,以及所容许的传输控制参数的数值范围。
表1 T=0的复位应答回送的字符
字符 | 值 | 备注 |
TS | “3B“或“3F” | 表示正向或反向约定 |
T0 | “6X” | TB和TC1出现,X表示历史字节的存在个数 |
TB1 | “00” | 不使用Vpp |
TC1 | “00”到“FF” | 表示需要额外保护时间,数据“FF”有特殊含义 |
表2 T=1的复位应答回送的字符
字符 | 值 | 备注 |
TS | “3B”或 “3F” | 表示正向或反向约定 |
T0 | “EX” | TB1和TD1出现,X表示历史字节存在的个数 |
TB1 | “00” | 不需要Vpp |
TC1 | “00”到“FF” | 表示所需额外保护时间的数量,数据“FF”有特殊含义。 |
TD1 | “81” | 使用T=1协议,TA2至TC2不存在,TD2存在 |
TD2 | “31” | 使用T=1协议,TA3至TB3存在,TC3和 TD3不存在 |
TA3 | “10”至“FE” | 回送IFSI,表示IC卡信息域大小的初始值,其初始值为16-254字节 |
TB3 | 高四位组“0”至“4 低四位组“0“至”5 | BWI=0至4 CWI=0至5 |
TCK | 参看4。3。3。5 | 校验字符 |
三、字符定义
以下将对复位应答中可能回送的字符做具体的说明。如果复位应答符合基本ATR(复位应答)二者之一,则一个字符是否出现,以及其容许的数值范围(如果出现的话),由说明每个字符的“基本响应”来表示。
复位应答中回送字符的最大个数(包括历史字符,但不包括TS)为32个。
《EMV》规范只要求(最低限度)终端支持这里所说的基本的ATR,以及在“终端反应”中所指定的任何附加要求。
以下的说明中,如果指出一个终端必须拒绝IC卡,这就意味着终端必须发出一个热复位或释放IC卡的触点以结束用卡过程。
1、 TS——起始字符
TS执行两项功能:
l 向终端提供了一个已知的位组合模型,以便于同步;
l 提示所用逻辑约定,以便对后继的字符进行解释。
基本响应:IC卡必须以下列二值之一来回送TS
反向约定 (H)LHHLLLLLLH,其值为“3F”;
正向约定 (H)LHHLHHHLLH,其值为“3B”。
终端反应:终端必须拒绝回送的TS不等于“3B”或“3F”的IC卡。
注:特别推荐使用“3B”作为IC卡的回送值,因为在以后的版本中可能不支持“3F”。
2、 T0——格式字符
T0由两部分组成,高四位(b5-b8)称之为Y1,用来指示后继字符TA1至TD1是否存在,b5-b8位被置为逻辑“1“状态者,相应地表明TA1至TD1的存在。低四位组(b1-b4)称之为K,则表明历史字节存在的数量(0-15)。字符的构成及编码如下:
T0的构成:
B8 | B7 | B6 | B5 | B4 | B3 | B2 | B1 |
| Y1 | Y2 |
T0的基本响应代码:
| B8 | B7 | B6 | B5 | B4 | B3 | B2 | B1 |
T=0 | 0 | 1 | 1 | 0 | X | X | X | X |
T=1 | 1 | 1 | 1 | 0 | X | X | X | X |
基本响应:如果只使用了T=0,IC卡将回送T0=“6X”,指明字符TB1和TC1的存在。如果只使用了T=1,则IC卡回送T0=“EX“,指明字符TB1至TD1的存在。“X”之值表明传送的历史字符的数量。
终端反应:若IC卡回送的T0为任意值,只要它正确地指明并和接口字符TA1至TD1及实际回送的历史字节一致,终端不得拒绝。
3、 TAi、TBi、TCi、TDi(i=1、2、3等等)——接口字符
TAi、TBi、TCi(i=1、2、3等等)指明了协议参数。
TDi指明协议类型和是否存在后续接口字符,TDi包括Yi+1和T两部分,Yi+1为高四位组,分别表示后续接口字符TAi+1、TBi+1、TCi+1、TDi+1是否存在,T为低四位组,表示后续发送的协议类型。
Tdi指明的信息:
B8 | B7 | B6 | B5 | B4 | B3 | B2 | B1 |
| Yi+1 | T |
Yi+1——接口字符存在的指示符
B5=1,发送TAi+1
B6=1,发送TBi+1
B7=1,发送TCi+1
B8=1,发送TDi+1
T=0 异步半双工字符传输协议
T=1 异步半双工字组传输协议
TA1、TB1、TC1、TB2是全局性接口字符,其余的 TAi、TBi、和Tci是专用接口字符,它们的解释取决于TDi-1中的T所指明的协议类型。
(1) TA1
TA1传达FI和DI的数值,其中:
l FI用来确定F的数值,F为时钟频率转换因子,用于 修改继复位应答之后由终端所提供的时钟频率。
l DI用来确定D的数值,称为比特率调节因子,用于调整复位应答之后所使用的位持续时间,ATR后位持续时间(当前etu)的计算方法见五(一)。
复位应答期间使用的缺省值为:FI=1和DI=1,表示:F=372和D=1
基本响应:IC卡不回送TA1,则在整个后续信息交换过程中继续使用缺省值F=372和D=1。
终端反应:终端不得拒绝一个回送TA1=“11”的IC卡(如果T0的b5位被置为1),并在所有后继交易中,继续使用F=372,D=1。
(2) TB1
TB1传送PI1和I1之值,其中:
——PI1在b1~b5位中定义,用于确定IC卡所需的最大编程电压P值。PI1=0表示IC卡不
使用Vpp。
——I1在b6~b7位中定义,用于确定IC卡所需的最大编程电流I值。PI1=0表示不使用此
参数。
——b8位不使用,并设置为逻辑“0”。
基本响应:IC卡将回送TB1=“00”,表示IC卡不使用VPP。
终端响应:若T0的b6被置“1”,IC卡回送的TB1为任意值时,或T0的b6被置为“0”,IC卡回送TB1时,终端不得拒绝此卡,但也不产生VPP,并继续用卡过程,就象回送了TB1=“00”一样。
TB1的基本响应代码:
B8 | B7 | B6 | B5 | B4 | B3 | B2 | B1 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
(3) TC1
TC1传送N之值,N为额外保护时间。N为TC1的b8~b1位的二进制码,其值表示了额外保护时间所增加的etu数,其值为0~255之间。N=255(TC1=“FF”)有特别的含义,它表明两相邻字符的起始位前沿之间的最短间隔时间:
T=0,为12etu
T=1, 为 11etu
注意,TC1仅用于从终端送到IC卡的两相邻字符间的定时,它既不用于从IC卡送到终端的两相邻字符间的定时,也不用于反向传送的二字符间的定时(请参看传输协议一节中关于T=0或T=1的时序的叙述)。
基本响应:IC卡回送的TC1之值应在“00”至“FF”的范围内。
终端响应:当IC卡不回送TC1(假定T0的b7位被置为“0”)时,终端不得拒绝,并继续用卡过程的处理,就像回送了TC1=“00”一样。
建议在设计IC卡时,应把TC1置成IC卡可接受的最小值,较大的TC1值会导致终端和IC卡间的通信过慢,从而延长了交易时间。
(4) TD1
TD1表示有无更多的接口字节传送,以及关于传输协议类型的信息,其中
l 高半字节用来表示字符TA2至TD2是否存在,b5~b8各位中被置为逻辑“1”的,就表示相应的TA2至TD2中该字符的存在。
l 低半字节提供了关于后继交换所用传输协议类型的信息。
基本响应:当选用T=0协议时,则IC卡将不回送TD1,后继传送协议缺省为T=0。
当选用T=1协议时,则IC卡必须回送TD1=“81”,以表明TD2的存在,并
后继传送传输协议为T=1。
终端反应:当IC卡回送的TD1的高四位组有任意值(假设回送之值正确地表示并与实际回送的接口字符TA2至TD2一致),且低四位组之值为“0“或“1”,则终端不得拒绝。终端必须拒绝回送其它TD1之值的IC卡。
(5) TA2
字符TA2的存在与否相应地表示IC卡是以特定模式或是交互模式工作。
基本响应:IC卡UQF 不回送TA2,TA2不存在表示以交互模式工作。
终端反应:如果终端在复位应答期间能够支持由IC卡通过TA2所指明的额外条件,它不拒绝这样的IC卡,并应能立即使用这些条件。
(6) TB2
TB2传送PI2,PI2用于确定IC卡所需编程电压P的值。当它存在时,它就取代由TB1中回送的PI1的值。
基本响应:IC卡不应回送TB2。
终端反应:终端不应拒绝IC卡回送TB2,但不论是否回送、回送了何值,终端均不产生VPP。
(7) TC2
TC2是T=0型协议所特有的,它传达了用来决定由IC卡发送的任意一个字符起始位上升沿与由IC卡或终端传送的前一字符的起始位上升沿之间的最大间隔的工作等待时间(WI)。工作等待时间为:960×D×WI。
基本响应:IC卡不得回送TC2,且后续通讯中使用缺省值WI=10。
终端反应:终端不得拒绝回送TC2=10的IC卡。
(8) TD2
TD2表示是否还要发送更多的接口字节,以及关于后继传输所用的协议类型,其中
l 高半字节用来表示字符TA3至TD3是否存在,b5~b8各位中被置为逻辑“1”的,就表示相应的TA3至TD3的存在。
l 低半字节表示用于后继传送的协议类型,如果使用T=1,低半字节值为“1”。
基本响应:如果使用的是T=0,则IC卡不回送TD2,后续传输协议缺省的T=0。
如果使用的是T=1,而IC卡必须回送TD2=“31”,以表示TA3和TB3的存
在,而后续传输协议为T=1。
终端反应:当IC卡回送的TD2的高半字节有任意值(假设回送之值正确且与实际回送的接口字符TA3至TD3一致),而低半字节的值为“1”或“E”,则终端不得拒绝,终端必须拒绝回送其它TD2之值的IC卡。
(9) TA3
TA3回送信息域长度整数(IFSI),它决定了IC卡信息字段长度(IFSC),并规定了IC卡能够接收的字组的最大长度。它以字节形式表示IFSC的长度,取值范围为“01”至“FE”之间的任何值,“00”和“FF”二值留作备用。
基本响应:如果使用了T=1,则IC卡必须以TA3为“10”至“FE”间之值予以回送,以表示初始的IFSC在16至254字节的范围内。
终端反应:终端不得拒绝未回送TA3(假设TD2的b5位被置为“0”)的IC卡,但如果接受了这样的IC卡,它必须以“20”作为TA3之值继续用卡过程。终端必须拒绝回送的TA3之值在“00”至“0F”间或为“FF”的IC卡。
(10)、TB3
TB3表明了用来计算CWT和BWT的CWI和BWI之值, TB3由两部分组成,低半字节(b1~b4)用来表示CWI之值,而高半字节(b5~b8)用来表示BWI之值。
基本响应:如果使用了T=1,则IC卡应回送这样的TB3:高半字节取值为‘0’~‘5’,低半字节取值为‘0’~‘4’。即CWI之值为0至5之间,而BWI之值为0—4之间。
(11)、TC3
TC3指明了所用的块错误检测代码的类型,类型由b1位表示,而b2至b8未用。
基本响应:使用纵向冗余校验(LRC)作为错误检测码时,IC卡不必回送TC3。
4、 TCK——校验字符
TCK具有一个检验复位应答期间所发送数据完整性的值,TCK的值应使从T0至TCK(包括TCK)的所有字节的异或操作结果为0。
基本响应: 如使用T=0协议,将不发送TCK,而在其他情况下,都发送TCK。
终端反应:在使用T=0协议时,终端应拒绝回送TCK的IC卡。如果IC卡回送了TCK,终端应能对TCK进行赋值。
接口字符的基本响应字符编码表
接口字符 | 编码条件 | B8 b7 b6 b5 b3 b2 b1 | 说 明 |
TA1 | B | X X X X X X X | 可不回送,缺省值为F=372,D=1 |
TB1 | B | 0 0 0 0 0 0 0 | Vpp未连至IC卡 |
TC1 | B | X X X X X X X | 额外保护时间N之值 |
TD1 | T=1 | 1 0 0 0 0 0 0 1 | T=0时,可不回送TD1 |
TA2 | 专用接口字符 | ———————— | 协商方式(非专用)时,可不回送TA2 |
TB2 | ------ | ———————— | 不得回送,因为是表示Vpp之值的PI2 |
TC2 | T=0 | ———————— | 传达WI用,IC卡不得回送,缺省为10 |
TD2 | T=1 | 0 0 1 1 0 0 0 1 | T=0时,不得回送 |
TA3 | T=1 | X X X X X X X X | “00”—“F”及“FF”禁止使用 |
TB3 | T=1 | 0 X X X 0 Y Y Y | XXX在000~100内,YYY在000~101内 |
TC3 | T=1 |
| 可不回送,缺省之意为采用LRG校验 |
表中B表示适用于T=0和T=1两种传输协议;X或Y表示可为0或1,编码的限制参看各有关说明,——表示《EMV规范》中未采用。
(四)复位应答的序列和一致性
随着IC卡的触点的实际接通,终端必须启动一个冷复位。
l 如果IC卡的冷复位的应答所回送的字节不符合前面小节中的规定,或IC卡的复位应答未在19,200初始etu之内完成,终端不必立刻取消用卡过程,而是发出一个热复位信号。
l 如果应答符合要求,而且是在19,200初始etu之内回送,则终端必须使用回送的参数进行卡片操作过程。
l 如果终端启动了一个上述的热复位,而IC卡对热复位的应答所回送的字节仍不符合上述小节中的规定,或IC卡的复位应答未能在19,200初始etu之内完成,则终端将执行释放IC卡的触点序列,从而取消用卡过程。
l 如果对热复位的应答符合这些规定,而且是在19,200初始之内回送,则终端必须使用回送的参数处理卡片操作过程。
l 不论是对冷复位或热复位,如果在应答时由IC卡回送的相邻二字节的起始位的上升沿之间的时间超过了9,600初始etu,终端就必须执行释放触点序列,从而取消用卡过程。
(五)复位应答——终端的流程
图10展示出IC卡回送复位应答给终端的流程,以及由终端为保证对本节的一致性而执行的检测。
四、传输协议
本节规定了在异步半双工传输协议中,终端为实现传输控制和特殊控制而发出的命令的结构及其处理过程。
在此规定了两种类型的协议:字符协议(T=0)和字组协议(T=1)。IC卡必须支持T=0协议或T=1协议中的一种,但不是同时支持这两种协议。终端则必须同时支持T=0和T=1的两种协议。在IC卡和终端间后续的通讯所用的协议在TD1中指明,必须是T=0或T=1,如果在ATR(复位应答)中无TD1,则设定为T=0。在复位应答后立即使用IC卡使用的协议,因为这里没有协议类型选择(PTS)过程。在复位应答中提供的其它参数,以及相关的具体协议将在本节的相应部分予以规定。
两种协议都是按照如下的分层模型制定的:
——物理层,描述信息位的交换,是两种协议共用的。
——数据链路层,包括下列规定:
a) 字符帧,规定字符的交换,是两种协议共用的。
b) 字符协议T=0,规定了T=0所指定的字符交换。
c) 规定了T=0的错误检测和校正。
d) 字组协议T=1规定了T=1所指定的字组交换。
e) 规定了T=1的错误检测和校正。
——传输层,规定了各个协议的面向应用的报文传送。
——应用层,根据应用协议规定了报文的交换,应用协议对于两种传送协议是共用的。
(一)物理层:
T=0和T=1两协议所用的物理层和字符帧已在前面章节做了规定,适用于IC卡和终端交换的所有报文。
(二)数据链路层:
本小节说明T=0和T=1协议的时序、信息字段INF(INFormation Field)和错误处理。
1、 字符帧
在前面章节中描述的字符帧适用于IC卡和终端之间的所有交换报文。
2、 T=0字符协议
1) 特定选项——用于T=0的时段分配
在复位应答中,TC1的值决定了终端送到IC卡的相邻二字符的起始位的上升沿的最小区间在12至266etu之间。
由IC卡传送给终端的相邻二字符的起始位上升沿之间的最小间隔必须是12etu。
由IC卡送出的任何字符的起始位上升沿与由IC卡或终端送出的前一字符的起始位上升
之间的最大时间间隔(工作等待时间)必须不超过960×D×WI=9,600etu。(位速率转换因子D的缺省值为1。当ATR中不回送TC2时,WI的缺省值为10)。
相邻二字符起始位上升沿间的最小时间间隔在反方向传输时不小于16个etu.。
由终端传送给IC卡的相邻二字符的起始位上升沿之间的最小时间间隔是由TC1之值控制的,可以小于反方向传送的二字符间所容许的最小区间16etu。
2) 命令头
命令均由由终端应用层(TAL——Terminal Application Layer)发出的。它经终端传输层(TTL——Terminal Transport Layer)以5个字节的称做命令头的形式向IC卡发出命令。命令头由五相连的字节构成:
l CLA——命令类别
l INS——指令代码
l P1、P2——指令附加特定参数
l P3——由INS的编码而定,或是表示命令中送给IC卡的数据,或是等待从IC卡响应的最大数据长度。
对于T=0,这些字节和随命令一起发送的数据就构成了命令传输协议数据单元(C-TP-DU)。命令应用协议数据单元C-APDU到C-TPDU的变换在后面讲述。
TTL传送这五个命令头字节给IC卡并等待着一个过程字节。
3) 过程字节
IC卡收到命令头后,应回送给终端传输层(TTL)一过程字节或状态字节。过程字节向TTL指明下一步必须采取 的措施。过程字节的编码和必须采取的措施如表4-1所示。
在情况Ⅰ、Ⅱ或Ⅲ时,当TTL采取的措施实行后,它就等待着另一个过程字节。当情况为Ⅳ时,在收到第2个状态字节SW2之后,TTL必须处理如下:
l 如果过程字节为“61”,则TTL送出一条GET RESPONSE命令头标给IC卡,其中的最大长度为“XX”, “XX”为SW2的值.
l 如果过程字节为“6C”, 则TTL立即重发前一个命令的命令头给IC卡,其长度为“XX”, “XX”是SW2之值.
l 如果过程字节为“6X”(除了”60”、”61”和“6C”)或“9X”,则TTL在响应APDU(R-APDU)中回送状态字节以及相关的数据(参看后面章节),并等待下一个的C-APDU。
在TTL和IC卡之间交换命令和数据时,TTL和IC卡都必须清楚地知道数据的流向以及是由TTL还是由IC卡来驱动I/O线。
表4-1 终端对过程字节的响应
| 过程字节之值 | 措 施 |
Ⅰ | 等于INS字节 | 由TTL传送所有其余数据字节,准备接收由IC卡送来的其余的数据字节 |
Ⅱ | 等于INS字节的补码 | 由TTL传送下一数据字节,或由TTL准备接收由IC卡送来的下一数据字节 |
Ⅲ | “60” | TTL将提供附加的工作等待时间,如本书中所规定 |
Ⅳ | “6X”或“9X“,除“60” 之外(状态字节SW1) | TTL等待更进一步的状态字节SW2 |
4)C-APDU的传送
采用T=0协议时,C-APDU仅仅包含送至IC卡命令数据,或者仅仅只包含IC卡响应数据可直接映射到C-TPDU。含有数据或者不要求数据的C-APDU,或者在IC卡往返传送数据的C-APDU,均按T=0的C-TPDU的传送中所规定的规则进行解释。
3、 T=0的错误检测和校正
当T=0时,这个过程是强制的,但在复位应答时不使用。
如果一个字符没有正确地接收到或接收正确但奇偶位错,则接收方必须在字符起始位的上升沿之后的(10.5±0.2)个etu内,向I/O线发送持续1-2个etu的低电平信号,以指示出了错误。
发送方必须在被送出的字符的起始位的上升沿后的(11±0.2)个etu内,检测I/O的电平状态,若I/O线处在高电平状态,由表明字符已被正确接收。
如果发送方检测到一个错误,则在检测到此错误之后至少延迟2etu,并重发送有争议的字符,最多只发送三次。
4、 T=1字组协议
协议包含IC卡和TTL间的字组传送,以传达命令和R-APDU及控制信息(例如,确认)。数据链路层的字组帧结构,协议的时序和INF,以及协议的运用规定如下。
1)字组帧结构
前面所规定的字符帧仍是适用的,字组的结构如(表4-2所示)下:
l 强制性的组头字段
l 可选性的信息字段
l 强制性的组尾字段
表4-2 字组的结构
组头字段 | 信息字段 | 组尾字段 | ||
结点地址 (NAD) | 协议控制字节 (PCB) | 长 度 (LEN) | APDU或控制信息(INF) | 错误检测 (EDC) |
1字节 | 1字节 | 1字节 | 0—254字节 | 1字节 |
A、组头字段
组头字段由3个强制性的字节组成:
l 结点地址用以标识数据块的源地址和目标地址,并提供对VPP状态控制的节点地址。
l 协议控制字节,控制数据的传送。
l 长度,指可选数据域长度。
结点地址(NAD—NODE ADDRESS)
NAD 的b1~b3位表明字组的源点地址(SAD—Source Node Address),而b5~b7则表明
字组指向的目标地址(DAD—Destination Node Address)b4和b8位未用且必须置为0。
终端对结点编址的使用是可选的,但IC卡在使用T=1型协议时,必须支持按如下规则的结点编址:
l 若不使用节点地址,终端发往IC卡的第一个数据块的SAD和DAD值均应设为0。
l 若使用节点地址,由终端发给IC卡的第一数据块的SAD和DAD应设定为不同的值(其中之一可以是零)。
l 若使用了结点地址,在卡片操作过程中,IC卡收到的第一个有效I块和S块中的NAD,用于建立起整个卡片操作过程中的终端和IC卡的节点地址,在同一个过程中,终端发给IC卡的后续块应使用同一个NAD,如此建立的结点地址适用于所有类型的数据块。
l 在一个用卡过程中,任何由IC卡送向终端的字组,在此过程中必须使用由终端送向IC卡的第一字组确定的结点地址。(注意,从终端送向IC卡的源点和目标地址,在由IC卡送向终端时要分别变为目标和源点地址)。
l 在卡片操作过程中,若IC卡接收到的数据块的NAD和交易开始时所建立的NAD不同,则IC卡应向交易开始时建立的DAD回复一个R块。
协议控制字节(PCB-Protocol Control Byte)
协议控制字节对数据块的类型进行编码,有三种类型的数据块,规定如下:
l 用于传送APDU的信息字组(I块)
l 用于传达确认(ACK-Acknowlegement)或否认(NAK-Negative Acknowlegement)的接收就绪块(R块)
l 用于交换控制信息的管理块(S块)
PCB的编码按其类型而定,如表4-3所示。
表4-3 PCB的编码
信息位 | I-字组 | R-字组 | S-字组 |
B8 | 0 | 1 | 1 |
B7 | 顺序号 | 0 | 1 |
B6 | 链接(多个数据) | 0 | 0=请求 1=响应 |
|
| 顺序号 | 0=再同步请求 |
B5 B4 B3 B2 B1 | RFU RFU RFU RFU RFU
|
| 1=信息字段容量请求 2=取消请求 3=扩充BWT请求 4=VPP错误(《EMV规范》未用) 未用值为RFU |
长度(LEN-Length)
长度指明块的INF(Information Field)的长度,取值范围2~254个字节。注意:在《EMV规范》中不支持LEN=0的I-块。
B、 信息域(INF)
信息字段是有条件的,当出现在I块中时,它传送的是应用数据;在S块中,它传送控制信息;在R块中不包含INF。
C、 尾域(EDC-Error Detection Code检错码)
组尾字段包含所传送的字组的错误检测码(EDC)。当奇偶错或EDC错误发生时,字组是无效的。作为EDC在《EMV规范》中仅支持纵向冗余校验(LRC-Longitudinal Redundancy Check)。LRC的长度是一个字节,从NAD开始到INF的最后字节在内的所有字节的“异或”值即为此字节之值。
D、 块的编号
I块的编号采用了一位编码的模2数,编号系统对IC卡保持独立,而终端则作为发送方。在复位应答后,发送方传送的第一个I块的编号从0开始,而后,每传送一个I块就加1,此数由发送方在重新同步后,复位为0。
R块的编号也采用了一位编码的模2数。当用来在链接期间去确认一个I块时,R块带有所需求的下一个I块的编号。当用来请求重复某块时,R块带有所接收的I块的编号。
S块不带编号。
(2)信息字段INF的容量和时序(特别选择)
① 信息域大小
IFSC是IC卡所能接收的字组信息字段INF的最大长度,复位应答时,IC卡在TA3中回送的IFSI表示了IC卡的接纳的IFSC的最大长度.IFSI的取值范围为”10”至”EF”,即IFSC的范围为16-254字节。因此,IC卡可能接收的最大块长度为(IFSC+3+1)字节,包括了头域和尾域。在复位应答中所确定的长度必须用于用卡过程中的其余部分,直至由于IC卡向终端发送S块(IFS请求)取得新的IFSC值为止。
终端的信息域大小(IFSD)即终端可能接收的数据块的最大长度。紧接在复位应答的起始长度必须是32字节,这个长度适用于用卡过程的其余部分,或由终端向IC卡发送一个S块(IFS请求)而得到一个新的IFSC值为止。为了加快IC卡对终端的通讯,建议终端应支持的IFSD之值为254字节。
② T=1的时序
按复位应答中TC1之值的规定,由终端送给IC卡的相邻二字符起始位的上升沿间的最小区间必须在11至266etu之间。
由IC卡送给终端的相邻二字符起始位的上升沿间的最短时间间隔应是11个etu,同一块中两个连续字符起始位上升沿之间的最大时间间隔CWT不得超过(2CWI+11)etu, CWI之值在0-5之间, 所以CWT的取值范围为12-43etu之间。
终端发给IC卡的最后一个字符的起始位上升沿与由IC卡发出的第一个字符起始位上升沿之间的最大时间间隔BWT不应超过{(2BWI×960)+11}etu。BWI之值在0-4之间,所以BWT将在971-15371etu之间。
反向传送的二相邻字符的起始位上升沿之间的最小时间间隔(块保护时间BGT)为22etu。
(3) 容错操作
容错操作时的协议规则定义如下:
A、 在复位应答后,第一个数据块是则终端发往IC卡,而且只能是一个I块S块。
B、若终端不希望使用长度为32字节的初始值,它必须发送一个S(IFS请求)块给IC卡。S(IFS请求)块的PCB之值必须为“c1”,以表达一个改变IFSD的请求。INF域包含一个字节,其值表明了所请求的新IFSD的长度的字节数。这个字节的取值范围为“20”—“FE”之间。IC卡应向终端回送了一个S(IFS响应)块,以确认对IFSD的长度的改变。其中S(IFS响应)块的PCB之值应是“E1”,而INF域应具有与请求改变块的INF域相同的值。
C、若IC卡希望把IFSC的长度从复位应答中所给出其的起始值加以改变,它必须发送一个S(IFS请求)块给终端。S(IFS请求)块的PCB之值必须为“C1”,以表达一个改变IFSC的请求。INF字段必须包含有一字节,其值表明了所请求的新的IFSC的长度的字节数。这个字节的取值范围为必须在“10”至“FE”之间。终端必须回送一个S(IFS响应)块给IC卡,以确认对IFSC的长度的改变。在响应中送出的S(IFS响应)块的PCB之值必须是“E1”,且INF字段必须和请求改变的字组中的INF字段有相同之值。
D、如果使用了结点编址,则由终端所传送的第一个块中的SAD和DAD必须被置为贯穿整个用卡过程始终所用之值。若不采用节点地址,则将其设成零。
E、在用卡过程中,只有本节所规定的块才能相互传送。半双工块传输协议包括了终端和IC卡交替传输块的情况。当发送方完整的传输了一个字组后,就应节换至接收状态。
F、当接收方接收的字符数符合LEN和EDC之值时,接收方就获得了发送权。
G、若接收方需要确认发送方传来的I块,则应在回送给发送方的I块中指明。若使用链接,则在R块的序列号中指明(链接的最后一个数据块除外)
H、若响应中收到的I-块的序列号与前一个已收到的I-块序列号不同,则发送方即认为此I-块已被确认。如果先前未收到过I-块,则在响应中I-块序列号必须为0。
I、当链接时,如果在响应中收R-块的序列号与已确认的I-块的序列号不同,则发送方即认为此I-块已被确认。
J、如果IC卡需要比BWT长的时间去处理先前接收到I-块,它就要发送一个等待时间扩展请求S块(WTX请求——Waiting Time Exension请求),其中INF包含有所需的BWT值的一个字节的二进制整数,其值为BWT的倍数。终端必须传送一个在INF中具有相同值的等待时间扩充响应S(WTX响应)块来确认。取得的时间从S块(WTX响应)的最末字符的上升沿开始算起。
K、S块总是成对使用,一个S(请求)块总对应个S(响应)块。
(4) 链接
当发送方要传输的数据长度超过IFSC或IFSD所定义的字节数时,它必须把其分成几个相连的I块。使用了下述的链接功能来实现这样的多个I块的传输。
I-块的链接为PCB中的b6所实现,b6的编码如下:
——b6=0,链中的最后一个块;
——b6=1,后面还有后续块。
任何一个b6=1的I-块,必须由一个R-块来确认。
如果接收正确,对应b6=0的最末块,会被I-块确认,否则,就会被R块确认。
A、链接的规则
IC卡和TTL都必须支持链接,而且链接只能沿一个方向来进行,其规则如下:
——终端是接收方时,只要来自IC卡的每个块的长度≤IFSC字节,终端应能够接收一组
链接的I块。
——终端是接收方时,如果IC卡发送的I块的长度>IFSC,终端应通过发送一个R块
来表示拒绝,R块的PCB的b1~b4位之值为“2”
——IC卡是接收方时,只要来自终端的每个块长度≤IFSC字节,IC卡必须接受一系
列从终端发送的链接在一起的I-块。
——IC卡是接收方时,IC卡通过发回一个R-块来拒绝由终端发送的长度>IFSC的I-
块,R块的PCB的b1~b4位的值为“2”。
——IC卡是发送方时,IC卡必须能发送链接在一起的I块,每块的长度≤IFSC字节。
——终端是发送方时,终端必须发送链接在一起的I块,每块的长度≤IFSC字节。
B、 链接块的结构
C-APDU是在I块的INF域中。并由TTL传送给IC卡的。若C-APDU太长,以致不能装入一个块,可通过如下的方法链接在几个块中,说明如下:
字组(1) | CLA INS P1 P2 | LC | DATA DATA |
字组(2) | DATA DATA |
字组(n) | DATA | Le |
如果由IC卡回送的数据和状态太多,以致不能装入一个块,则就链接在几个I-块中,如下所示:
字组(1) | DATA DATA DATA |
字组(2) | DATA DATA DATA |
字组(n) | DATA | SW1-SW2 |
以上是以情况4的命令为例来说明的,只展示了链接愉的INF域,每一块还有头域和尾域。
5、 T=1的错误检测和校正
下列错误必须由TTL检出:
l 传输错误(奇偶错或EDC错)或BWT超时。
l 丧失同步(关于字符数量的上溢运行或下溢运行)。
l 协议错(违反协议的规则)。
l 取消关于链接块的请求。
按照下述方法进行纠正错误:
——重新传输块
——释放IC卡的触点。
错在IC卡,则IC卡应按下面给定的顺序,尝试纠正错误;
——重新传输块。
——处于无响应的。
A、错误处理协议规则
下列规则用于错误的处理和校正,在每一种情况下有一个R-块送出,低半字节应按表4-3的规定置成相应之值。
——若在复位应答后,IC卡所接收的第一个块无效。它必须回送一个R块给TTL,并置
b5=0和NAD=0。
——如果TTL发送的任何块在BWT时间内没有得到IC卡的响应,TTL将通过使IC卡的
触点处于静止状态来结束卡片操作过程。
——如果响应I块的无效块被收到,发送方应发送一个R块,其中b5位置成期望的I块编
号。
——如果响应R块的无效块被收到,发送方应重发R块。
——如果响应S块(请求)的S(响应)块没有收到,,发送方应重发一个S块(请
求)。
——如果响应S(响应)块的应答中收到无效块,发送方应重发一个R块,b5位设为下
一个期望I块的编号。
——如果TTL连续三次传送一个块,或IC卡连续两次传送一个块,而得不到有效的响
应时,TTL必须释放IC卡的触点结束此用卡过程。
——如果接收方检测到了上溢运行或下溢运行,在重新传输前必须等待一段时间(取
CWT或BWT的最大值)
——IC卡最多连续三次传送一个S(IFS请求)块,以试图从TTL获得一个有效的S
(IFS响应)字组。在三次不成功的尝试后, IC卡即进入接收方式。
——TTL不应发送一个S(ABORT取消请求)块,如果TTL从IC卡收到了一个S
(ABORT请求),它必须释放IC卡触点以结束此用卡过程。
(三)终端传输层(TTL)
本节叙述的是在终端和IC卡用以传输命令和响应的APDU的机制。APDU都是命令或响应报文,既是命令或响应报文就可能包含着数据,TTL必须能对(五)中所规定的四种情况进行处理。C-APDU和R-APDU的结构也将在其中说明。
C-APDU由TAL(终端应用层)传至TTL,在传送IC卡之前,应将其转换成传输协议认可的形式。IC卡处理完命令后,以R-APDU的格式将数据(如果存在)和状态码回送给TTL。
1、 T=0 APDU的传送
本小节叙述C-APDU和R-APDU的变换,TTL和IC卡间进行数据变换的机制,以及使用情况2或4的命令时,以GET RESPONSE命令取回IC卡的数据。
1)C-APDU和R-APDU的变换及数据交换
C-APDU和T=0命令头的变换与命令的情况有关。由数据(如果存在)与IC卡回送的状态变换到R-APDU取决于回送数据的长度以及状态字节的含义。
状态字节SW1 SW2=“61rr”或“6Crr”都是由IC卡回送来用以控制IC卡和TTL之间的变换的,它不会回送给TAL。若SW1 SW2=“61rr”或“6Crr”就表示IC卡对命令的处理尚未完成。
若SW1 SW2=“9000”,就表示IC卡已在正常状态下完成了对命令的处理。SW1 SW2的其它值(“61rr”或“6Crr”除外)均表示IC卡已结束对命令的处理,但处理不成功,原因在状态字节中指出。
下面所述的是将IC卡加送的数据和状态字节构造成R-APDU方法,仅适用于IC卡已经完成命令处理(不管理成功与否)之后,以有IC卡在状态字节“61rr”或“6Crr”的控制下已经回送所有的数据(如果存在)之后,INS,INS和“60”过程字节的具体使用未做叙述。
A、情况1
C-APDU的头映射到T=0的命令头的前四个字节,而T=0的命令头的P3被置为“00”,交换的流程是:
——TTL传送T=0的命令头标给IC卡;
——IC卡回送状态字节给TTL。
由IC卡在完成对命令的处理后回送给TTL的状态字节,不作改变地被变换到R-APDU的强制性尾标上。
IC卡在处理命令时必须对T=0的命令头加以分析,判断是命令情况1或是情况2在请求最大长度的响应数据。
B、 情况2
C-APDU头映射到T=0的命令头的前四个字节,长度字节‘Le’从C-APDU的条件体被映射到T=0的命令头的P3。
所有遵照《EMV规范》发出的情况2的命令均须置Le为“00”。交换流程:
——TTL传送T=0的命令头给IC卡;
——在过程字节的控制下,IC卡回送数据和状态(或者,在不正常处理时,只回送状
态)给TTL。
IC卡回送的状态字节若是SW1 SW2=“61rr”或“6Crr”时,可能要求TTL重新发送T=0命令头并使用GET RESPONSE命令从IC卡取回数据。
当IC卡完成对命令的处理后,由它回送给TTL的数据(如果存在)和状态到R-APDU的映射如下:
——若回送的状态SW1 SW2≠”9000”,则不作改变地变换到R-APDU的强制性尾标,并且扔
掉任何可能已回送的数据;
——如果Le≥Liee,则回送数据不作改变地被变换到R-AAPDU的条件体上,而回送的状
态不做改变地变换到R-APDU的强制性尾标上去。
——如果Le<Liee,则把回送的数据的第一个Le字节变换到R-TPDU的条件体上,而回送
的发送的状态不和改变地变换到R-APDU的强制性尾标上去。
其实,既然所有按照《EMV规范》发给的情况2的命令已经把Le置为“00”,则后一“如果”就不应发生,这里的说明只是参考而已。
C、 情况3
C-APDU的头标变换到T=0的命令头的前四个字节,而C-APDU的条件体中长度字节“Le”则被变换到T=0的命令头中的P3中去,交换的流程是:
——TTL传送T=0的命令头给IC卡。
——如果IC卡回送的是一过程字节而不是状态码,则C-APDU的条件体中的数据部分在
IC卡所回送的过程字节的控制下,由TTL回送给IC卡。
——如果IC卡回送的是状态字节SW1 SW2,则TTL中止对命令的处理。
——如果处理未在上一步中止,则IC卡在完成命令处理时回送其状态。
IC卡在完成对命令的处理后回送到TTL的状态字节,或由IC卡回送的导致TTL中止对命令处理的状态字节,均不作改变地变换到R-APDU上。
D、情况4
C-APDU头变换到T=0的命令头的前四个字节,而C-APDU的条件体中的长度字节“Le”则被变换到T=0的命令头的P3。
所有按照《EMV规范》出的情况4的命令,在C-APDU中必须把Le置为“00”。交换的流程是:
——TTL传送T=0的命令头到IC卡
——如果IC卡回送的是一过程字节而不是状态,则在此过程字节控制下,TTL给IC卡
发送C-APDU条件体的部分数据。
—— 如果IC卡回送的是状态字节SW1 SW2,则TTL中止对命令的处理。
——如果处理未在上一步中止,而TTL传送一条GET RESPONSE 命令的长度字节的赋值,或者是C-APDU条件体Le字节所指 的长度,或者是IC卡回送状态则IC卡在完成命令处理时回送其状态“61rr”或“6Crr”状态字节所含长度。然后按上述情况2命令处理方式,处理GET RESPONSE 命令。IC卡在过程字节的控制下,回送数据与 状态给TTL(或者在非正常处理情况下,只回送状态)。
IC卡在完成对命令处理后回送给TTL的数据(如果存在)和状态字节,或由IC卡回送的导致TTL中止对命令处理的状态字节,均按下述变换到R-APDU上去。
——若SW1 SW2 ≠”9000”,则回送的状态不作改变地变换到R-APDU的强制性尾标上去,
并且扔掉任何可能回送的数据。
——若SW1 SW2=“9000”,则变换取决于回送的长度。
——如果Le≥Liee,则回送数据不作改变地被变换到R-AAPDU的条件体上,而回送的状
态不做改变地变换到R-APDU的强制性尾标上去。
——如果Le<Liee,则把回送的数据的第一个Le字节变换到R-TPDU的条件体上,而回送
的发送的状态不和改变地变换到R-APDU的强制性尾标上去。
其实,既然所有按照《EMV规范》发出的情况4的命令,必须把Le置为“00”,则后一“如果”就不会发生,这里的说明只是参照而已。
(2)过程字节“61rr”或“6Crr”的使用
由IC卡回送到TTL的过程字节“61rr”或“6Crr”指明了TTL取回当前正在处理的命令请求数据方式,在T=0时,仅仅在处理情况2和情况4时使用。
状态字节“61rr”通知TTL发出一条GET RESPONSE命令给IC卡。GET RESPONSE 命令头中的P3应置为≤”rr”。
状态字节“6Crr”指示TTL立即重发先前的命令头,置P3=“rr”。
这些状态字节在情况2和情况4的命令中的用途如下:
A、情况2的命令
如果IC卡接收一条情况2的命令头,并且Le≠Licc,它可以或是回送状态“6700”(长度错)以拒绝此命令,或是回送状态“6Clicc“以指示TTL立即按P3=Licc重发命令头标。
这也是对一条GET RESPONSE命令的有效响应。
如果IC卡接收一条情况2的命令头,并且Le=Licc,它可以在过程字节的控制下回送所请求的数据及相关的状态,或是回送状态“61XX”以指示TTL发一条最大长度为“XX”的GET RESPONSE命令。
B、 情况4的命令
如果IC卡接收一条情况4的命令,处理完随C-APDU一同发送来的数据之后,应回送过程字节 “61XX”(或表明警告或错误情况的状态码,)通知TTL去发送一条最大长度为“XX”的GET RESPONSE 命令。
这样发出的GET RESPONSE命令将按前面所说的情况2的命令那样处理。
(3)GET RESPONSE命令
TTL发出GET RESPONSE命令,是为了从IC卡取得对应于命令情况2和4的C-APDU的Le字节的数据。它只适用于T=0协议。
命令的报文结构如下所示。
表4-4 GET RESPONSE 命令报文的结构
CLA | “00” |
INS | “C0” |
P1 | “00” |
P2 | “00” |
Le | 要求的最大数据长度 |
对于正常的处理,IC卡回送状态字节SW1 SW2=“9000”以及Licc字节的数据。
在发生错误事件的情况下,错误状态字节的编码如下表所示。
表4-5 GET RESPONSE 命令的错误条件
SW1 | SW2 | 意义 |
“64“ | “00“ | GET RESPONSE失败 |
“67“ | “00“ | 域长度错误 |
“6A“ | “86“ | P1P2≠”00” |
2、T=1 APDU传送
C-APDU由TAL传给TTL,TTL把C-APDU不作改变地映射到一个I-块的INF域中,然后把这个I块发送给IC卡。
IC卡在I-块的INF域中向TTL回送响应数据(如果存在)和状态码,I块的INF域的内容不加改变地映射到R-APDU上,然后回送给TAL。
如果需要时,C-APDU和响应数据状态可以在多个块的INF域中链接起来。
(四)应用层
应用层协议由TAL和TTL之间的一个有序的数据交换组成。
在应用层交换中的每一步都是由一对命令响应对构成,TAL经TTL送出一个命令给IC卡,IC卡对它进行处理并经TTL返回给TAL一个响应。每条特定的命令都有一特定的响应相匹配,一个APDU就是一个命令报文或一个响应报文。
命令和响应报文二者都含有数据。传输协议通过TTL来管理四种命令情况,如表4-5所示。
表4-5 APDU中的数据在各种情况下的定义
情 况 | 1 | 2 | 3 | 4 |
命令数据 | 无 | 无 | 有 | 有 |
响应数据 | 无 | 有 | 无 | 有 |
1、C-APDU
C-APDU包含了由CLA、INS、P1和P2四个相邻字节组成的强制性命令头,并跟随着一个可变长度的条件体。
命令头的各字节的规定如下:
——CLA:命令类别;除“FF“外可取任何值。
——INS:指令类别的命令码,INS仅在最低位为0时才有效,而高四位既不能是“6“,
也不能是“9”。
——P1、P2:补充INS的参数字节。
条件体由一串字节构成,规定如下:
——Le占用一个字节,规定了在C-APDU中要传送数据的字节数,Lc的数据范围为1-
255。
——在C-APDU中将要发送的数据,字节数已由Le规定。
——Le占用一个字节,指明R-APDU中期望返回的最大字节数,Le的数值范围为0-
255;若Le=0,则要求的最大响应字节数为256。
至于每条命令的条件情况下的可能的结构如下表4-6所示。
表4-6 C-APDU在四种情况下的结构
情况 |
|
1 | CLA INS P1 P2 |
2 | CLA INS P1 P2 Le |
3 | CLA INS P1 P2 Le Data |
4 | CLA INS P1 P2 Le Data Le |
2、R-APDU
响应的APDU由一串字节由一个条件体以及必备的两字节状态码SW1 SW2组成。
条件体是一串数据字节,其最大长度由C-APDU中的Le所规定。状态码表示处理完命令后的状态。
SW1 SW2的编码服从下列规则:
——SW1的高半字节必须是“6”或“9”;
—— SW1禁止取“60”;
——SW1之值为“61”或“6C”时,必须按出错处理。
——随着对一条命令的正常处理,SW1 SW2之值必须为“9000”;
——当SW1的高半字节为“9”,低半字节为“0”时,所表示的状态和应用有关;
——当SW1的高半字节为“6”,低半字节“0”时,所表示的状态和应用有关。