ISO 7810 协议小结

时间:2022-09-12 23:18:23

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 协议小结的更多相关文章

  1. 转:oracle ebs po模块一揽子采购协议小结

    转自:http://yedward.net/?id=193 oracle ebs po模块一揽子采购协议小结 本文总结oracle ebs采购订单(po)模块一揽子采购协议的相关知识,总结如下: 1. ...

  2. KERMIT&comma;XMODEM&comma;YMODEM&comma;ZMODEM传输协议小结(转)

    源:KERMIT,XMODEM,YMODEM,ZMODEM传输协议小结 Kermit协议 报文格式: 1.MARK,起始标记START_CHAR,为 0x01(CTRIL-A): 2.LEN,报文剩余 ...

  3. HTTP协议小结

    HTTP/0.9已过时.只接受GET一种请求方法,没有在通讯中指定版本号,且不支持请求头.由于该版本不支持POST方法,因此客户端无法向服务器传递太多信息. HTTP/1.0 这是第一个在通讯中指定版 ...

  4. TCP&UDP协议小结

    TCP和UDP 传输层功能 网络安全 Tcp可靠性 Tcp流控 Tcp拥塞控制 Tcp运输连接管理 一个网页可能很大,一个数据包传不过来,就需要分段传输. 网络可能拥塞,某段可能丢失.那必须有人监管, ...

  5. Oracle PO - 模块一揽子采购协议小结

    本文总结oracle ebs采购订单(po)模块一揽子采购协议的相关知识,总结如下: 1.理论介绍 (1)名词术语 一揽子采购协议(Blanket Purchase Agreement,BPA)是指某 ...

  6. 《SDN核心技术剖析和实战指南》2&period;3 OF-CONFIG配置管理协议小结

    OpenFlow协议定义了交换机和控制器交换数据的方式和规范,但并没有定义如何配置和管理必需的网络参数和网络资源,OF-CONFIG的提出就是为了对OpenFlow提供配置管理支持.如下图所示,OF- ...

  7. KERMIT&comma;XMODEM&comma;YMODEM&comma;ZMODEM传输协议小结

    转:http://blog.163.com/czblaze_3333/blog/static/208996228201272295236713/ Kermit协议 报文格式: 1.       MAR ...

  8. &lbrack;na&rsqb;数据链路层&amp&semi;网络层协议小结截图版

    ip层:分组选路 tcp:端到端的通信 中间系统没必要有应用程序,分组选路即可 应用程序中隐藏所有的物理细节. 语音肯定用udp linux主版本 次版本号 修订号 次版本为偶数说明是稳定版.奇数是开 ...

  9. &lbrack;na&rsqb;tcp&amp&semi;udp层各协议小结

    TCP和UDP 传输层功能: 可靠性:序列号.确认号&flag位 有效性:win滑动窗口 这篇目录索引: Tcp可靠性 Tcp流控 Tcp拥塞控制 Tcp运输连接管理 TCP的可靠性和流控 为 ...

随机推荐

  1. 第二百九十、一、二天 how can I 坚持

    上周日,腊八,好冷,去菏泽了.坐火车,没座.好冷,下午菏泽学院,大体看了看,很是怀念,有点遗憾,在网吧玩的时间太长了,留不住. 周一,长太婚礼,竟然没有只是吃了个饭,有点小失望,下午坐车回京,两点坐的 ...

  2. Azure File SMB3&period;0文件共享服务&lpar;3&rpar;

    在Windows上使用Azure文件共享服务 之前简单介绍过,你可以通过SMB 3.0协议,将Azure文件共享挂载在本地,就如使用一个网络驱动器是一样的,但需要注意不同版本的Windows对于SMB ...

  3. jQuery选择

    1.基本的选择 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY29tZW9uc3RvbmU=/font/5a6L5L2T/fontsize/400/fil ...

  4. CareerCup chapter 1 Arrays and Strings

    1.Implement an algorithm to determine if a string has all unique characters What if you can not use ...

  5. Scala是一门现代的多范式编程语言

    Scala是一门现代的多范式编程语言 Scala是一门现代的多范式编程语言,志在以简练.优雅及类型安全的方式来表达常用编程模式.它平滑地集成了面向对象和函数语言的特性. Scala是面向对象的:Sca ...

  6. LuaHotUpdate原理

    LuaHotUpdate原理(金庆的专栏)项目地址:https://github.com/asqbtcupid/lua_hotupdate只更新函数,不更新数据.主页上有个动画演示.限Windows平 ...

  7. &lbrack;Swift&rsqb;LeetCode674&period; 最长连续递增序列 &vert; Longest Continuous Increasing Subsequence

    Given an unsorted array of integers, find the length of longest continuous increasing subsequence (s ...

  8. &lbrack; 9&period;10 &rsqb;CF每日一题系列—— 186A模拟处理字符串

    Description: 跟你两个不相同的字符串,问你能否将第一个字符串任意两个字母交换一次使得两字符串相同,YES or NO Solution: 一维模拟就好了 #include <iost ...

  9. MVC5为WebAPI添加命名空间的支持1

    前言 默认情况下,微软提供的MVC框架模板中,WebAPI路由是不支持Namespace参数的.这导致一些比较大型的项目,无法把WebApi分离到单独的类库中. 本文将提供解决该问题的方案. 微软官方 ...

  10. Winform 两个窗体通讯 一个窗体调用另一个窗体的方法

    主要用到 委托 和 注册事件. 功能:点击form1的按钮,改变form2的label文本