摘要:t=0是国际标准中规定的一种接触式cpu卡通讯协议。结合开发实践,将该协议分为四个层次,主要从cpu卡的角度出发,结合终端,从两个方面系统地阐述了该协议的特点和实现过程,并对t=0协议的优缺点进行了分析,目前已将开发成果应用于实际中。 关键词:卡片操作系统(cos) 终端应用层(tal) 终端传输层(ttl) 应用协议数据单元(apdu) 传输协议数据单元(tpdu)ic卡的应用越来越广泛,从存储卡到逻辑加密卡,目前cpu卡已经逐渐在应用中占据主导地位。cpu卡根据通讯协议可分为两种:接触式和非接触式。接触式cpu卡主要采用两种通讯协议:t=0和t=1通讯协议。t=0是异步半双工字符传输协议,t=1是异步半双工块传输协议。目前t=0通讯协议的应用较为广泛,国内外大多数cpu卡都支持该协议,在金融交易中也采用这种通讯协议。为了便于说明问题,本文从t=0协议的功能出发,将该协议分为四个层次:物理层、数据链路层、终端传输层和应用层,见图1。由于该协议的特殊性,终端传输层与应用层联系非常紧密,实现起来比较繁琐,在cpu卡中,这些任务通过卡片操作系统(cos)来实现。终端在与卡的信息交换中,始终处于主动地位,终端向卡发送符合t=0协议的命令字节,卡中的cos完成对数据的处理并将处理结果返回给终端。下面对t=0协议的四个层次进行详述。1 t=0协议的物理层描述终端与智能卡之间通过改变i/o传输线上的电平来交换信息。由于t=0协议是面向字符的传输协议,这里先定义字符帧的结构,并对组成字符帧位的信息表示作了具体描述。字符帧的结构如图2所示。字符帧由1个起始位s、8个数据位和1个偶校验位p共10位组成。在数据传输中每一位的持续时间称为基本时间单元etu(elementary time unit),etu的值由时钟频率决定,etu与时钟频率呈现性关系:1etu=(f/d) ×(1/f) (1)其中f称为时钟频率转换因子,d称为波特率调整因子。时钟频率的范围为1mhz~5mhz,正常的工作频率为3.57mhz,数据传输的波特率采用9600bps,根据国际标准的取值范围,取f=372,d=1,代入式(1),可得:1etu=372/f=372 (2)即一个基本时间单元为372个时钟周期。将工作频率定为3.57mhz,可以保证数据传输的波特率为9600bps。如果要提高数据的传输率,可以调整参数f来确定传输率。对每一位电平采用三次采样来确定,在位持续时间的中间和左右15%的间隔各取样一次,取样点如图3所示。当有两次以上电平为低,则判断该位为0;否则该位为1,这样确保了取样值的可靠性。由于数据位的持续时间是用汇编语句来控制的,可以通过延时语句调整采样的时间间隔。但实现采样的最基本汇编语句的执行时间不能再缩短,因此数据传输率有一上限。当每一位取样三次时,数据传输率最高可达到57600bps。如果再提高速率,取样时序将无法保证。字符帧的起始位为低电平,起始位的检测是通过周期性地对i/o传输线进行采样来得到。国际标准中规定采样时间间隔不得大于0.2etu,实际上起始位的采样时间间隔只有几个时钟周期,完全满足要求。2 t=0协议的数据链路层实现数据链路层描述了字符交换的时序要求和差错控制以及终端对面向传输的错误的处理,在逻辑上保证终端和卡片之间能够正确可靠地通讯。采用上述的字符帧,终端与卡之间进行数据将交换,字符之间有严格的时序,时序是通过汇编程序语句的执行时间来控制的。从终端到卡发送的连续字符的起始位下降沿之间的最小时间间隔由复位应答信息通知终端,其值在12etu~266etu之间。从卡发送到终端的连续字符的起始位下降沿之间的最小时间间隔应为12etu。如果字符接收不正确或字符接收正确但校验位不正确,接收端需要在字符起始位下降沿后的(10.5±0.2个etu时刻将i/o线置为低电平约1~2个etu,见图4,用于向发送端指明错误;发送端在(11±0.2)个etu时刻检测i/o线。如为高电平则表示字符已经正确接收;如果发送端检测到错误,则在检测到错误那一刻起,2个etu后重发该字符,但重复发送同一字符的次数不得超过3次。如果最后一次发送失败,当终端是接收端时,则终端应该在无效字符的起始位下降沿后的960个etu时间范围内启动释放序列;当终端是发送端时,在卡片检测到字符的偶校验错误后960个etu时间范围内,终端启动释放序列。命令的执行总是由终端应用层(tal)启动,通过终端传输层(ttl)送给卡片。ttl与卡片进行命令字节和数据字节交换时,要保证能够有序正确地进行。
因此,在数据交换过程中,在任何时刻ttl和卡片都应该隐含地知道哪一方是发送者,哪一方是接收者。当卡片接收到5个字节的命令字节后,需要向ttl返回一个过程字节或两个字节的状态字节,具体含义如表1、表2所示。
表1 终端对过程字节的处理过程字节ttl执行的操作与ins字节相同ttl向卡片发送或从卡片接收所有数据ins字节的补码ttl向卡片发送或从卡片接收下一个字节'60'ttl延长等待时间'61'ttl等待第二个过程字节'xx'并根据'xx'发
get response命令取回数据'6c'ttl等待第二个过程字节'xx'并根据'xx'重发上一条命令表2 卡返回的状态字节编码第一个状态字节值ttl执行的操作'6'或'9x'(除表1中的值外)ttl等待第二个过程字节sw2当返回的过程字节或状态字节均不是表中规定的值时,终端在接收到的无效字符的起始位降沿开始的9600个etu时间范围内启动释放序列。3 t=0协议的终端传输层和应用层的实现数据链路层保证了ttl与卡片正常的数据交换。在此基础上,ttl定义了命令和响应apdu(application protocol data unit)通过ttl和卡片之间的数据传输机制,因此该层协议定义了apdu到tpdu(transport protocol data unit)的映射机制以及tpdu和卡片之间如何来完成数据的交换。根据命令和响应apdu包含的数据情况,共有四种不同的apdu,ttl应能够对四种情况进行处理,完成终端和卡之间的数据交换。由于t=0协议的特殊性,终端传输层和应用层并没有完全隔离开。为了便于说明问题,先简要描述一下应用层,然后将终端传输层和应用层结合起来进行说明。应用层协议定义了c-apdu和r-apdu的具体结构。应用层之间的数据交换都是由一个命令-响应对完成的,tal通过ttl将c-apdu送给集成电路卡(icc),icc处理完后将处理结果组成r-apdu通过ttl送给tal。apdu由命令报文和响应报文共同组成,根据c-apdu和r-apdu是否包含数据域,apdu有四种情况,见表3。
表3 apdu包含数据的情况 命令apdu数据域响应apdu数据域1无无2无有3有无4有有c-apdu由一个强制性的四字节命令头cla、ins、p1、p2和一个可变长度的条件体组成。cla为命令类型字节;ins为命令代码字节;p1和p2为命令参数;条件体包括命令数据域长度字节lc,命令数据域和响应返回的最大长度字节le。根据不同的命令,条件体的组成也不相同,c-apdu有四种情况,见表4。
表4 c-apdu的结构情 况c-apdu结构1cla ins p1 p22cla ins p1 p2 le3cla ins p1 p2 lc data4cla ins p1 p2 lc data ler-apdu由一个最大长度为le的数据域和一个强制性的两字节状态代码组成,状态代码给出了ic卡对当前命令的处理结果。对于c-apdu,终端先将其映射成t=0传输层的格式,然后通过ttl传送给卡片,卡片返回的数据和状态先返回给ttl,再映射成r-apdu返回给tal。这里根据四种不同的情况,分析了c-apdu到c-tpdu以及r-apdu到r-tpdu的映射方法,并对情况2和情况4时,如何使用get response命令进行了说明。c-apdu到c-tpdu的映射根据命令的情况决定,卡片返回的数据和状态到r-apdu的映射要根据返回数据的长度来判断。对于卡片返回的过程字节“61xx”和“6cxx”,将用于ttl和卡片之间进行数据交换,当卡片返回“61xx”时,表示命令没有结束,ttl不将过程字节返回给tal,而是从ttl直接向卡片发出get response命令,取回上一条命令应该返回的数据。并返回给tal。当卡片返回“6cxx”时,ttl将根据“xx”的值调整并重发上一条命令。下面分别对四种命令情况进行分析。(1)当c-apdu和r-apdu均不含有数据时,将c-apdu的cla、ins、p1、p2映射为c-tpdu的cla、ins、p1、p2、c-tpdu的p3置为“00”,卡片接收到c-tpdu后,根据命令头决定该命令所含数据的情况。ttl接收到卡片返回的状态后,该命令完成,ttl将状态字节强制性地加到r-apdu的尾部。
百度搜索“70edu”或“70教育网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,70教育网,提供经典综合文库CPU卡中T=0通讯协议的分析与实现在线全文阅读。
相关推荐: