ISO 7810 协议小结
ISO 7816规定了Smart Card的传输协议分为
T=0 异步半双工字符传输协议
T=1 异步半双工块传输协议
T=0命令介绍
命令总是由接口设备启动,他以一个5字节的报头通知卡要做什么,然后等待卡发回的控制字节 ,并且允许在卡发出的过程字节的控制下传输数据字节。
命令报头:
接口设备通过5个连续字节传送报头,这5个字节分别指定为CLS, INS, P1, P2, P3
CLS:指令类别
INS:指令代码(最高有效的半字节不能为‘6’或‘9’)
P1,P2:INS的参数
P3:要传输的数据字节的数目,在输入数据的传输命令(执行时数据进入卡),P3=0表示没有数据字节;在输出数据的传输命令(执行时卡传出数据),P3=0表示传出256字节的数据。
在传出5个字节的报头之后,接口设备会等待卡返回一个过程字节或者状态字节。
过程字节指明了终端需要采取的下一步操作。
过程字节编码
| 字节 | 值 | 动作 |
| ACK | 与 INS 相同 | 终端传输所有剩余的字节到UICC或者终端准备接收从UICC发送的所有剩余字节 |
| 与 INS 补码相同 | 终端传输下一个字节到UICC或者终端准备接收从UICC发送的下一个字节 | |
| SW1 | ‘61’ | 终端需要等待第二个过程字节然后发送GET RESPONSE指令给UICC。 |
| ‘6C’ | 终端需要等待第二个过程字节然后迅速重发前一个命令头到UICC。 | |
| NULL | ‘60’ | 没有数据需要传输,终端只需等待过程字节。这个行为提供了额外的工作时间。 |
经过以上动作后,终端需要再次等待进一步的过程字节或者状态字节。
状态字节:
状态字SW1, SW2用来表示命令结束时UICC的状态,正常结束时的状态为SW1,SW2="90 00"
| 字节 | 值 | 动作 |
| SW1 | "6X"或者"9X"(除了"61","6C"和"60") |
终端需要等待第二个状态字SW2。 终端需将状态字和相关的数据发动到应用层,并等待下一个C-APDU |
当SW1的最高有效半字节等于6时,SW1的含义是与应用无关的
“6E”卡不支持指令类型
“6F”没有给出准确的诊断
“6D”指令代码没有被编程或者无效
“6B”参考错误
“67”长度错误
其他值保留将来使用。6E和6D表示卡不支持指令,其余的表示卡支持该指令,但是出现别的错误
T=1命令介绍
块传输协议在复位应答(冷复位/热复位)或者一个成功的PPS交换后发起。
交互是在终端向UICC发送数据块时开始。然后终端与UICC交替发送数据块。
一个数据块是用于发送的最小的数据单元,可以包含应用数据或者传输控制数据。在处理接收到的数据前,有必要对接收的数据进行check。
数据块的结构成为块帧,块由下列域构成
起始域:(强制性)包括节点地址字节,协议控制字节,长度字节
信息域:(非强制性)由0-254个字节组成
终止域:(强制性)包括1或2个字节
块帧的结构
| 起始域 | 信息域 | 终止域 | ||
| NAD | PCB | LENGTH | INF | EDC |
| 1字节 | 1字节 | 1字节 | 0-254字节 | 1或2字节 |
起始域
1、节点地址字节(NAD):
节点地址字节是用来标示块的源和期望的目的的字节,可用于区分同时存在的多个逻辑链接
| b8 | b7 | b6 | b5 | b4 | b3 | b2 | b1 |
| unused | DAD | unused | SAD | ||||
b1-b3指明源节点地址,b5-b7指明目标节点地址,b4和b8用于标示VPP控制状态,未使用时设为0。
由终端发送第一个块时,就基于NAD中的DAD和SAD地址建立了一个逻辑关系。后续的块中包含的相同DAD&SAD对,并且具有相同的逻辑关系。
2、协议控制字节(PCB):
所有控制传输的数据信息都由协议控制字节来进行传输。PCB的编码指定了数据块的类型,T=1协议支持3中类型的数据块
Information-block(I-block 信息块):用于传输C-APDU和R-APDU
Receive ready-block(R-block 接受准备块) : 用于传输确认信息(ACK)
Supervisory-block(S-block 管理块):用于传输控制信息
编码细节:
Information-block
| b8 | b7 | b6 | b5 | b4 | b3 | b2 | b1 |
| 0 | Sequence number, N (S) | Chaining more data bit , (M) | RFU | ||||
Receive ready-block
| b8 | b7 | b6 | b5 | b4 | b3 | b2 | b1 |
| 1 | 0 | 0 | Sequence number N | …… | |||
b4 -b1
0000:无差错
0001:EDC或奇偶校验错误
0010:其他错误
XXXX;RFU
Supervisory-block
| b8 | b7 | b6 | b5 | b4 | b3 | b2 | b1 |
| 1 | 1 | X | …… | ||||
b5-b1
00000:二次同步
00001:信息域
00010:中断
00011:额外的BWT(WTX)
00100:VPP状态错误
XXXXX:RFU
b6:用于表明是请求(b6=0)还是响应(b6=1)
例如:
b6-b1
100000:二次同步响应
000000:二次同步请求
100001:IFS响应
000001:IFS请求
100010:中断响应
000010:中断请求
3、长度
长度用于指示该块的信息域中传输的字节数,长度取值范围由0-254, “00”表示不存在信息域,“01”-“FE”表示要
传输的信息域的字节数,“FF”RFU。
信息域
信息域(INF)是可选的,并且其取值依赖于块的类型。
| 块类型 | INF域 |
| I-block | 用于传输R-APDU和C-APDU |
| R-block | 不存在INF |
| S-block |
传输应用无关的信息 •通过WTX调整IFS时需要INF •在一个指示VPP状态出错或者管理联终止或者再同步的S块中,不需要INF |
终止域
终止域包含了错误检测码(EDC),协议定义该域可以为LRC校验(纵向冗余校验)或者CRC校验(循环冗余校验)
LRC长度为一个字节,CRC长度为两个字节
LRC值与块中所有数据进行异或运算时结果都为0。
附:
Chaining(链接)
链接允许UICC或者终端接收长度超过IFSC和IFSD的数据块。当信息的长度超过IFSC或者IFSD时,在传输时,该信息会被分割为多个部分,每个部分的长度都<= IFSC或者IFSD,并在I-block中通过Chaining模式发送。
PCB字节中I-block类型中的M位控制了Chaining模式
M=0:该block不与下一个block进行链接
M=1:该块需要与下一个block进行链接,他们同属于一个I-block。
ISO 7810 协议小结的更多相关文章
- 转:oracle ebs po模块一揽子采购协议小结
转自:http://yedward.net/?id=193 oracle ebs po模块一揽子采购协议小结 本文总结oracle ebs采购订单(po)模块一揽子采购协议的相关知识,总结如下: 1. ...
- KERMIT,XMODEM,YMODEM,ZMODEM传输协议小结(转)
源:KERMIT,XMODEM,YMODEM,ZMODEM传输协议小结 Kermit协议 报文格式: 1.MARK,起始标记START_CHAR,为 0x01(CTRIL-A): 2.LEN,报文剩余 ...
- HTTP协议小结
HTTP/0.9已过时.只接受GET一种请求方法,没有在通讯中指定版本号,且不支持请求头.由于该版本不支持POST方法,因此客户端无法向服务器传递太多信息. HTTP/1.0 这是第一个在通讯中指定版 ...
- TCP&UDP协议小结
TCP和UDP 传输层功能 网络安全 Tcp可靠性 Tcp流控 Tcp拥塞控制 Tcp运输连接管理 一个网页可能很大,一个数据包传不过来,就需要分段传输. 网络可能拥塞,某段可能丢失.那必须有人监管, ...
- Oracle PO - 模块一揽子采购协议小结
本文总结oracle ebs采购订单(po)模块一揽子采购协议的相关知识,总结如下: 1.理论介绍 (1)名词术语 一揽子采购协议(Blanket Purchase Agreement,BPA)是指某 ...
- 《SDN核心技术剖析和实战指南》2.3 OF-CONFIG配置管理协议小结
OpenFlow协议定义了交换机和控制器交换数据的方式和规范,但并没有定义如何配置和管理必需的网络参数和网络资源,OF-CONFIG的提出就是为了对OpenFlow提供配置管理支持.如下图所示,OF- ...
- KERMIT,XMODEM,YMODEM,ZMODEM传输协议小结
转:http://blog.163.com/czblaze_3333/blog/static/208996228201272295236713/ Kermit协议 报文格式: 1. MAR ...
- [na]数据链路层&网络层协议小结截图版
ip层:分组选路 tcp:端到端的通信 中间系统没必要有应用程序,分组选路即可 应用程序中隐藏所有的物理细节. 语音肯定用udp linux主版本 次版本号 修订号 次版本为偶数说明是稳定版.奇数是开 ...
- [na]tcp&udp层各协议小结
TCP和UDP 传输层功能: 可靠性:序列号.确认号&flag位 有效性:win滑动窗口 这篇目录索引: Tcp可靠性 Tcp流控 Tcp拥塞控制 Tcp运输连接管理 TCP的可靠性和流控 为 ...
随机推荐
- opencv2对读书笔记——使用均值漂移算法查找物体
一些小概念 1.反投影直方图的结果是一个概率映射,体现了已知图像内容出如今图像中特定位置的概率. 2.概率映射能够找到最初的位置,从最初的位置開始而且迭代移动,便能够找到精确的位置,这就是均值漂移算法 ...
- 美丽的表格样式(使用CSS样式表控制表格样式)
按照WEB2.0风格,设计了几个表格样式,希望大家喜欢. WEB2.0提倡使用div开布局,但不是要全然放弃使用表格,表格在数据展现方面还是不错的选择. 如今使用介绍使用CSS样式表来控制.美化表格的 ...
- 各种div+css居中方式调整(转载)
盘点8种CSS实现垂直居中水平居中的绝对定位居中技术 分类: 前端开发2013-09-11 21:06 24959人阅读 评论(3) 收藏 举报 绝对居中垂直居中水平居中CSS居中代码 目录(?) ...
- linux之CentOS-7.0环境搭建
此文作为新手安装centos-7的图文教程. 一. 前言 最近,师兄要进行实验室架构搭建,需要学习docker.而docker是完全依赖于linux系统的.所以,有了这篇文章. linux有很多发 ...
- Dhroid框架笔记(IOC、EventBus)
dhroid 目前包含了6大组件供大家使用1.Ioc容器: (用过spring的都知道)视图注入,对象注入,接口注入,解决类依赖关系2.Eventbus: android平台事件总线框架,独创延时事件 ...
- Directive Definition Object
不知道为什么这个我并没有想翻译过来的欲望,或许我并没有都看熟透,不好误人子弟,原版奉上. Here's an example directive declared with a Directive D ...
- Xcode7新特性
更新Xcode7之后报错: Assertion failure in -[UIApplication _runWithMainScene:transitionContext:completion:], ...
- 使用<span>标签为文字设置单独样式
这一小节讲解<span>标签,我们对<em>.<strong>.<span>这三个标签进行一下总结: 1. <em>和<strong& ...
- Delphi 封装Frame到Dll文件
做项目的时候,发现这个Frame很好用,为了省空间.调用和修改方便,就将Frame封装到dll(动态链接库)里面,确实很好使. 效果图如下: 上图是临时测试用的,忘了将Frame的align设置成al ...
- java学习——网络编程UDP
UDP 将数据及源和目的封装成数据包中,不需要建立连接 每个数据报的大小限制在64k内 因无连接,是不可靠协议 不需要建立连接,速度快 TCP 建立连接,形成传输数据的通道 在连接中进行大数据量传输 ...