上一章链接:ISO7816协议深度解析-简单易懂协议详解(二)
9. 协议T=0,异步半双工字符传输
本协议在”复位应答”或”成功的PPS交换”之后开始。
9.1 命令头
接口设备通过发送5个字节报头,告诉卡启动什么样的命令。称为命令头。该命令头是5个字节的系列,这5个字节指定为CLA、INS、PI、P2、P3。
• CLA:指令类别,“A0”表示命令类别,“FF”表示PPS过程的头标;
• INS:指令代码,指令代码仅当位b8-b5不等于‘6’和‘9’时才有效;
• P1,P2:指令附加参数(如地址);
• P3:由INS的编码而定,或是表示命令中送给SIM卡的数据长度,或表示等待从SIM卡响应的数据最大长度。
---- 在输出数据的传送命令中,P3=0表示从卡传输256个字节。
---- 在输入数据的传送命令中,P3=0表示不从卡传输数据。
举例:A0A40000023F00:进入到3F00文件,其中A4是命令,相当于终端中用cd进入文件位置一样。
文件标识符:3F:主文件;7F:第一级专有文件;5F:第二级专有文件;
• 2F:主文件下的基本文件;6F:在第一级专有文件下的基本文件;
• 4F:在第二级专有文件下的基本文件。
9.2 过程字节
过程字节的值将指明接口设备请求的动作,即智能卡的应答响应。有三种类型的过程字节。
在每一个过程字节中,智能卡可以用一个ACK或NULL字节来把这个命令继续进行下去,或以适当的不应答表示不赞成,或用结束序列SW1-SW2结束这个命令。
• NULL 等于’60’:NULL请求不影响数据传出,仅等待一个过程字节。
• ACK。在ACK中,位b8b2应与INS中的b8b2相一致或互补,但INS的这些位的值应不等于’6x’和‘9x’。
① 若ACK=INS,所有剩余的字节将随后传送;
② 若ACK与INC异或=0xFF,那么仅下一个字节将被传输。
• SW1等于‘6x’或‘9x’,但不等于‘60’。
接受到SW1以后,接口设备将等待一个SW2字节传输。对SW2的值无限制。
结束命令SW1- SW2 在命令的结尾给出卡的状态。置为9000只是处理正常完成。
SW1的有效位的高4位等于6时,SW1的含义与应用无关。
T=0、1的区别: 协议最明显的不同是T=1协议按照OSI的参考模型进行了分层,分别是:物理层、数据链路层和应用层。物理层主要是数据字符的传输,数据链路层主要是数据块的传输,而应用层主要是APDU的交互传输。APDU的交互与数据字符的传输,这些和T=0协议里面描述的大体相同,关键的就是数据链路层定义的数据块传输。因为这个数据链路层的定义,使得T=1协议基本具备了可以实现复杂网络数据传输的全部特征,相比而言T=0协议简直就等同于“裸传”了。
9.3 实例
9.3.1 判断SIM卡是否是白卡
9.3.2读取短信中心
9.3.3读取iccid
9.3.4读取IMSI号
10 T=0 传输示例
代码 | 数值 |
---|---|
CLA | ‘00’ |
INS | ‘20’(Send bytes) |
P1 | ‘00’ |
P2 | ‘00’ |
P3 (Le/Lc) | ‘y’(y个字节的数据) |
DATA | 发送给卡片的数据 (y Byte) |
Le | 无 |
SW1- SW2 | ‘9000’: 正常结束 |
在这个示例中,读卡器会发送Lc(y)个字节到卡中,卡会接受这些数据(由INS值告诉cos执行接收的指令,P3(Lc)作为一个参数传递到所执行的函数中,函数就知道要接收多少个字节了),然后返回状态自(SW)。在这个APDU中,没有Le,所以卡不会向读卡器发送数据(也是由cos控制的)。
11 T=0 通信示例
本实例使用金思特电子的Kingst LA5016 usb 逻辑分析仪检测iso7816数据通讯。
以下几图是一个完整的数据包分析截图。
11.1 协议解析参数设置
11.2 T=0:根据INS的数据,发送主机需要执行的命令,通过解析P3,可以后一帧协议的长度
11.3 从机接收到主机的T=0协议后,返回应答命令
11.4 主机发送要选择的文件信息
11.5 从机返回命令执行结果
参考资料:ISO7816-1234.pdf
下一章链接:ISO7816协议深度解析-简单易懂协议详解(四)-- T = 1