智能IC卡与终端(读卡器)之间的传输协议
1.有两种协议
T=0,异步半双工字符传输协议
T=1,异步半双工块传输协议
终端一般都支持这两种协议,IC卡可以选择支持其中的一种。(因为终端可能需要面对各种类型的卡片,所以必须两种协议都支持,而卡片则不然了)
2.如何判断卡片支持哪种传输协议?
在ATR值得TD1字段中规定了后续传输中所采用的传输协议,T=0或T=1,如果ATR中不存在ATR的话,则假定采用T=0
如果在ATR之后卡片与终端之间没有参数协商的PTS过程的话(详细细节可参考ISO7816相关部分),由IC卡指定的协议将在复位应答之后立即被采用。
3.两种协议在物理层并没有任何的区别,区别在于数据链路层
4.APDU指令
命令由终端应用层(Terminal Application Layer,简称TAL)发出,它包括一个由5Byte组成的命令头。每个命令头由5个连续字节CLA、INS、P1、P2和P3组成。
* CLA(Class Byte of the Command Message)表示命令类别。
* INS(Instruction Byte of the Command Message)表示指令代码。
* P1(Parameter 1)和P2(Parameter 2)表示命令的两个附加参数。
* 根据不同的INS,P3(Parameter 3)指明了发送给IC卡的命令的字节长度或者期待IC卡回送响应的最大数据长度。
对于T=0,这些字节和通过命令发送的数据一起构成命令传输协议数据单元(Command Transport Protocol Data Unit,简称C-TPDU),命令应用协议数据单元(Command Application Protocol Data Unit,简称C-APDU)到C-TPDU的映射将在后续文章中学习。
终端传输层(Terminal Transport Layer,简称TTL)传送发送5Byte的命令头给IC卡并等待一个过程字节。
过程字节(有点类似于响应码)
IC卡接收到命令头以后,向TTL回送一个过程字节。过程字节向TTL指明了下一步该做什么,其编码与TTL行为的对应关系如下所示:
终端对过程字节的响应:
过程字节值 步骤
1 与INS字节值相同 所有余下的数据将要由TTL传送或者准备接收所有来自IC卡的数据。
2 与INS字节值的补码相同 下一个数据字节将由TTL传送或者准备接收来自IC卡的下一下数据字节。
3 0x60 TTL提供根据额外的工作等待时间。
4 0x6X或者0x9X(除0x60以外) TTL将等待下一个过程字节或者状态码SW2。
在情况1、2、3中,操作完成后TTL将等待另一个过程字节。
在情况4中,第二个过程字节或状态码SW2已被收到后,TTL将要做如下事情。
* 如果过程字节为0x61,TTL将向IC卡发送一个最大长度为0xXX的Get Response命令头,XX为SW2值。
* 如果过程字节为0x6C,TTL将立即向IC卡重发一个命令的命令头,其长度为XX,XX是SW2的值。
* 如果过程字节为0x6X(除0x60、0x61、0x6C以外)或者0x9X(即状态),TTL将在响应APDU中向TAL回送状态码,并等待下一个C-APDU。
TTL与IC卡之间交换命令和数据时,TTL和IC卡必须清楚地知道数据流向和I/O的驱动者,即是终端向IC卡发送数据还是IC卡向终端发送数据。(数据流的方向)