CPU卡中T=0通讯协议的分析与实现
(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的尾部。
(2)当C-APDU不含有数据而R-APDU含有数据时,将C-APDU的CLA、INS、P1、P2、Le映射为C-TPDU的CLA、INS、P1、P2、P3,其中P3可以置为“00”,也可以置为需要返回的数据字节数,卡片接收到C-TPDU后,如果命令处理失败,卡片直接将状态代码通过TTL返回给TAL;当命令能够正常处理时,如果P3指定的字节数能够正确返回,待卡片内部应用数据处理完成后,这时卡片首先返回给TTL该命令的过程字节,通知TTL准备接收卡片数据缓冲区中的数据,然后卡片直接将P3字节的数据和状态字节通过TTL返回给TAL,否则,卡片只将过程字节“6Cxx”或“61xx”返回给TTL这一层。当过程字节为“6Cxx”时,TTL根据xx重发命令取回数据,当过程字节为“61xx”时,TTL发GET RESPONSE命令取回数据。
(3)当C-APDU含有数据而R-APDU不含数据时,将C-APDU的CLA、INS、P1、PS、Lc映射为C-TPDU的CLA、INS、P1、P2、P3,待卡片对C-TPDU检查通过后,卡片直接将过程字节返回给TTL,TTL根据返回的过程字节继续向卡片发送P3字节的后续数据。待数据接收完后,卡片对应用数据进行处理,然后将处理结果以状态字节的方式通过TTL返回给TAL。
(4)当C-APDU和R-APDU均含有数据时,将C-APDU的CLA、P1、P2、Lc映射为C-TPDU的CLA、INS,P1、P2、P3,待卡片对C-TPDU检查通过后,卡片直接将过程字节返回给TTL,TTL根据返回的过程字节继续向卡片发送P3字节的后续数据。待数据接收完后,卡片对应用数据进行处理,如果命令处理失败,卡片直接将状态代码返回给TTL。当命令正常处理时,卡片返回给TTL过程字节“6Cxx”或“61xx”,当为“6Cxx”时,TTL根据xx重发命令取回数据。当过程字节为“61xx”时,TTL发GET RESPONSE命令取回数据。
(1)由于T=0协议字符级检错重发,与面向块的传输协议T=1相比,在出现传输错误时,T=0协议可以不必整个数据报文全部重发,节省了时间。
(2)在编程过程中,对位帧进行采样时,采用了三次采样判决的方式,避免了由于采样时的偶然误差而造成误码。
(3)T=0协议是应用于智能卡中的第一个接触式通讯协议,但该协议并没有考虑传输中断和检测到传输错误码后卡和读写器的再同步问题。唯一的检错机制就是奇偶位校验。对错误的处理就是对出错的字节重新发送一次,这样极有可能导致无限次的循环状态。
(4)T=0协议并没有与应用层完全分割开,应用层的命令解释器必须告诉传输层当前命令是接收还是发送数据。由于这个原因,这两个模块在命令处理过程中需要交互操作,在程序中能够提取出一个通用的传输层,供应用层调用来负责完成数据的传输。这种情况给编程和调试带来了不便。同时造成模块的可重用性较差。
(5)对于命令报文中包含数据域,同时又需要卡片返回数据