T=0协议不能用一条命令来实现,必须分为两步实现:第一条命令为卡片提供数据,然后用另外一条相关的命令来取回数据。这样给卡片的编程带来很大麻烦,同时卡片内存中必须保留上一次操作需要返回的数据。这时如果不及时发送取数据命令而发送其它命令,可能会将敏感数据泄漏,并产生其它问题。这些都是T=0协议考虑不周的地方。(6)终端传输层需要根据卡片返回的子程字节和状态字节执行相应的操作,使终端对数据的处理复杂化。(7)由于目前大多数接触式终端只支持T=0通讯协议,因此该协议仍将得到广泛的应用。随着智能卡芯片功能的增强,对于数据传输量较大的应用,该协议将不再适用,面向块的异步半双工接触式传输协议T=1将体现出优势
传输协议
本节规定了在异步半双工传输协议中,终端为实现传输控制和特殊控制而发出的命令的结构及其处理过程。
在此规定了两种类型的协议:字符协议(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) 命令头
CLA INS P1 P2 P3 |
命令均由终端应用层(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。
(1)容错操作 容错操作时的协议规则定义如下:
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(响应)块。
(2) 链接
当发送方要传输的数据长度超过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卡触点以结束此用卡过程。