ISO7816协议深度解析-简单易懂协议详解(四)-- T = 1

上一章链接:ISO7816协议深度解析-简单易懂协议详解(三)-- T= 0

12. 协议T=1,异步半双工字块传输
协议包含IC卡和TTL间的字组传送,以传达命令和R-APDU及控制信息(例如,确认)。数据链路层的字组帧结构,协议的时序和INF,以及协议的运用规定如下。

12.1 字组帧结构
• 强制性的组头字段
• 可选性的信息字段
• 强制性的组尾字段
前面所规定的字符帧仍是适用的,字组的结构如下所示:
在这里插入图片描述

12.1.1 组头字段
组头字段由3个强制性的字节组成:
• 结点地址用以标识数据块的源地址和目标地址,并提供对VPP状态控制的节点地址。
• 协议控制字节,控制数据的传送。
• 长度,指可选数据域长度。

12.1.1.1 结点地址(NAD—NODE ADDRESS
NAD 的b1~b3位指明源节点地址(SAD—Source Node Address),而b5~b7则指明目的节点地址(DAD—Destination Node Address), b4和b8位未用且必须置为0。

12.1.1.2 协议控制字节(PCB-Protocol Control Byte)
协议通过PCB定义了三种基本块结构(不同类型的“块帧”):
1)信息快(I 块):用于传送应用层信息(APDU),及肯定或否定的确认信息。
2)接收就绪块(R块):用于发送肯定(ACK-Acknowlegement)或否定(NAK-Negative Acknowlegement)的确认信息,其信息域(INF)不出现。
3)管理快(S块):用于读卡器和卡之间交换控制信息,S块的信息域存在与否取决于S块控制功能的需要。
在这里插入图片描述

I-块和R-块会包含有“0”和“1”的序列号,序列号的初始值为“0”,重新同步之后也是再次从“0”开始,之后在“0”和“1”之间交替切换;如果一条应用数据大于数据块信息域的最大长度,则需要分割为若干个链接的数据块来传输;和T=0协议卡片发送“0x60”类似,如果卡片需要较长时间进行命令处理,可以用延长等待时间的WTX请求S-块让终端继续等待;一旦传输过程中出现错误,可以通过数据块重发、重新同步、卡片复位等动作来进行纠错。

12.1.1.3 长度(LEN-Length)
长度指明块的INF(Information Field)的长度,取值范围2~254个字节。0x00表明不存在信息域,0xFF留用。

12.1.2 信息域(INF)
信息字段是有条件的,当出现在I块中时,它传送的是应用数据;在S块中,它传送控制信息;在R块中不包含INF。

12.1.3 尾域(EDC-Error Detection Code检错码)
组尾字段包含所传送的字组的错误检测码(EDC)。当奇偶错或EDC错误发生时,字组是无效的。作为EDC在《EMV规范》中仅支持纵向冗余校验(LRC-Longitudinal Redundancy
Check)。LRC的长度是一个字节,从NAD开始到INF的最后字节在内的所有字节的“异或”值即为此字节之值。

12.1.4 块的编号
I块的编号采用了一位编码的模2数,编号系统对IC卡保持独立,而终端则作为发送方。在复位应答后,发送方传送的第一个I块的编号从0开始,而后,每传送一个I块就加1,此数由发送方在重新同步后,复位为0。
R块的编号也采用了一位编码的模2数。当用来在链接期间去确认一个I块时,R块带有所需求的下一个I块的编号。当用来请求重复某块时,R块带有所接收的I块的编号。
S块不带编号。

12.2 信息字段INF的容量和时序
12.2.1信息域大小
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字节。

12.2.2 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。

12.2.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(响应)块。

12.2.4 链接
12.2.4.1 链接的规则

12.2.4.2 链接块的结构

12.3 T=1的错误检测和校正

  1. 下列错误必须由TTL检出:
    • 传输错误(奇偶错或EDC错)或BWT超时。
    • 丧失同步(关于字符数量的上溢运行或下溢运行)。
    • 协议错(违反协议的规则)。
    • 取消关于链接块的请求。
    2.按照下述方法进行纠正错误:
    • 重新传输块
    • 释放IC卡的触点。
    3.错在IC卡,则IC卡应按下面给定的顺序,尝试纠正错误;
    • 重新传输块。
    • 处于无响应的。
    4.错误处理协议规则
    下列规则用于错误的处理和校正,在每一种情况下有一个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卡触点以结束此用卡过程。

12.4 协议传输小结
数据链路层主要进行的是3类数据块的交互传输,基本的原则是:
• 第一个数据块一定是从终端发给卡片的I-块或者S-块;
• I-块可以用R-块或者I-块来应答,而S-块的请求只能用S-块的响应来应答;
• I-块和R-块会包含有“0”和“1”的序列号,序列号的初始值为“0”,重新同步之后也是再次从“0”开始,之后在“0”和“1”之间交替切换;
• 如果一条应用数据大于数据块信息域的最大长度,则需要分割为若干个链接的数据块来传输;
• 和T=0协议卡片发送“0x60”类似,如果卡片需要较长时间进行命令处理,可以用延长等待时间的WTX请求S-块让终端继续等待;
• 一旦传输过程中出现错误,可以通过数据块重发、重新同步、卡片复位等动作来进行纠错。

如下图所示,读卡器向卡发送块帧(蓝色)和卡向读卡器返回的块帧。”00” “00” 对应的是NAD和PCB,”07”是INF的长度(LEN)。之后的 ”00 A4 00 00 02 3F 00” 就是INF,在这个例子里没有特殊含义,”9E”是LRC的值,就是将前面所有的值异或(但是这个值是错的,原因在后面说明)。之后是卡的返回数据,也是一个块。”00” “00”对应的是NAD和PCB,”02”是INF的长度(LEN)。之后是”6581”,这是代表前面读卡器发送的数据LRC错误,这是cos处理的。”E6”是LRC,这是正确的值。
在这里插入图片描述

13 T=0 通信示例
本实例使用金思特电子的Kingst LA5016 usb 逻辑分析仪检测iso7816数据通讯。
以下几图是一个完整的T=1通信数据包分析截图。

13.1 协议解析参数设置
在这里插入图片描述
13.2 T=1,I-Bolck 传输2bytes数据,ECD=0xE6,校验正确
在这里插入图片描述
13.3 T=1,I-Bolck 传输7bytes数据,ECD=0x9F,但此校验是错误的
在这里插入图片描述
在这里插入图片描述

参考资料:ISO7816-1234.pdf
下一章链接:ISO7816协议深度解析-简单易懂协议详解(五)- APDU

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值