ISO7816协议深度解析-简单易懂协议详解(五)-- APDU

上一章链接:ISO7816协议深度解析-简单易懂协议详解(四)-- T= 1

13. APDU报文结构
13.1APDU命令
APDU结构如下所示:
在这里插入图片描述

• 在命令APDU的数据字段中呈现的字节数用Lc表示。
• 在响应APDU的数据字段中期望的字节最大数用Le(期望数据的长度)来表示,当Le字段只包含0时,则要求有效数据字节的最大数。

9.2命令主体用的解码约定
在命令响应对中,命令报文和响应报文都可以包含有数据,于是引起了四种APDU结构。
1)情况1: Lc、Le都为空,则主体为空;
2)情况2: Lc为空,Le不为空,从而主体由Le字段组成;
3)情况3:Lc不为空,Le为空,从而主体由Lc字段及其后的数据字段组成;
4)情况4: Lc、Le均不为空,则主体由Lc字段,其后的数据字段及Le字段组成。
在这里插入图片描述
• 在情况1时,命令APDU的主体为空,这种命令APDU未运载长度字段。
• 在情况2、3和4时,命令APDU的主体由B1至Bn所表示的N字节组成,如下表所示。这种主体运载了1或2长度字段;B1是第一个长度字段的一部分。
表1 不空的主体

命令主体
B1,B2,···,Bn(N字节)

在卡能力中,在命令APDU内,卡说明了Lc字段和Le字段即可为短的(一个字节,默认值),也可为扩充的(显式语句)。因此,情况2,3和4即可为短的(一个字节用于每个长度字段)也可为补充的(Bn的值为‘00’,并且每个长度值都按2个其他字节进行编码)。
Le用的解码约定:
如果Le的值不为全空而按1个或2个字节进行编码,则Le的值等于该字节的值,他位于从1至255(或65535)的范围内;所有这些位的空值意味着Le的最大值为256(或65536)。表5示出了按照图4和表1中定义的四种情况及可能的Lc,Le扩展的命令APDU的编码。
在这里插入图片描述
9.3 APDU响应
APDU由下列内容组成,如图6所示。
• 有条件的可变长度主体;
• 必备的2字节尾标(SW1 SW2).
在这里插入图片描述
在响应APDU的数据字段中呈现的字节数用Lr来表示。尾标编码了处理“命令响应对”之后的接收实体的状态。如果该命令被放弃,则响应APDU是一个尾标,它按2个状态字节来编码差错条件。
表6 命令APDU内容

代码名称长度描述
CLA类别1指令的类别
INS指令1指令代码
P1参数11指令参数1
P2参数21指令参数2
Lc字段长度变量1或3在命令的数据字段中呈现的字节数
数据字段数据变量 = Lc在命令的数据字段中发送的字节串
Le字段长度变量 <= 3在向命令响应的数据字段中期望的字节最大数

表7 响应APDU内容

代码名称长度描述
数据字段数据变量 = Lr在响应的数据字段中收到的字节串
SW1状态字节11命令处理状态
SW2状态字节21命令处理受限字符

后续条规定了类别字节、指令字节、参数字节、数据字段字节和状态字节用的编码约定。除非另有规定,在这些字节中,RFU的比特都编码为0,并且RFU字节也都编码为‘00’。

9.4 CAL类别字节
表8 CLA的编码及含义

序号含义
1ox0X按照本规范定义,命令和响应的结构和编码(对于编码’X’ 见表9)
20x10 ~ 0x7FRFU
30x8X 0x9X按照本规范定义,命令和响应的结构。’X’除外(对于编码’X’ 见表9)命令和响应的编码及含义是专有的。
40xAX除非通过应用上下文另有规定,按照本规范定义命令和响应的编码及含义(对于编码’X’ 见表9)
50xB0 ~ 0xCF按照本规范定义,命令和响应的结构。
60xDO ~ 0xFE命令和响应的结构。
70xFF保留供PTS用

表9 当CLA = ‘0X’ ‘8X’ ‘9X’ 或’AX’时,半字节’X’的编码及含义

序号b4 b3 b2 b1含义
1X X – –安全报文(SM)格式
20 X – –没有SM
30 0 – –没有SM或没有SM指示
40 1 – –专有的SM格式
51 X – –安全报文交换
61 0 – --不被鉴别的命令首标
71 1 – --被鉴别的命令首标
8– – X X逻辑信道号(当不使用逻辑信道号或逻辑信道号#0被选择时,b2b1 = 00)

9.5 INS指令字节

表11 INS代码
在这里插入图片描述
在这里插入图片描述

9.5.1 ‘DC’ :Update Binary
在这里插入图片描述
在这里插入图片描述
9.5.2 ‘CA’:Get Data
Get DATA 命令可在当前上下文(例如,应用特定环境或当前DF)范围内用于检索一个原始数据对象或者包含在结构化数据对象中所包含的一个或多个数据对象。
在这里插入图片描述
在这里插入图片描述

9.6 参数字节 P1 P2

命令中的参数字节P1,P2可以具有任何值。若参数字节不提供进一步限定,则其应置为’00’.

9.7 数据字段字节 Lc

9.8 响应的状态字节 SW1-SW2**
在这里插入图片描述
表12 SW1–SW2的编码

SW1–SW2操作类型含义
0x9000正常的处理无进一步限定
0x61XX正常的处理SW2指示仍然有效的响应字节数(见下面文本)
0x62XX报警处理非易失存储器状态不变化(在SW2中进一步的限定,见表13)
0x63XX报警处理非易失存储器状态不变化(在SW2中进一步的限定,见表13)
0x64XX执行差错非易失存储器状态不变化(SW2 = 00,其他值都是RFU)
0x65XX执行差错非易失存储器状态变化(在SW2中进一步的限定,见表15)
0x66XX执行差错保留供安全相关的发布使用(本规范本部分补定义)
0x6700校验差错错误长度
0x68XX校验差错CLA的功能不被支持(在SW2中进一步的限定,见表16)
0x69XX校验差错不允许的命令(在SW2中进一步的限定,见表17)
0x6AXX校验差错错误的参数P1~P2(在SW2中进一步的限定,见表18)
0x6B00校验差错错误的参数P1~P2
0x6CXX校验差错错误的长度Le:SW2指示的准确的长度(见下面的文本)
0x6D00校验差错指令代码不被支持或无效
0x6E00校验差错类别不被支持
0x6F00校验差错没有精确的诊断

表12 当SW1 = 62,SW2编码

SW2含义
0x00没有信息被给出
0x81返回数据的一部分可能被损坏
0x82读出Le字节之前,文件/记录已结束
0x83选择的文件无效
0x84FCI未按照5.1.5格式化

表14 当SWI = 0X63时,SW2编码

SW2含义
0x00没有信息被给出
0x81通过最后写入来填满文件
0xCX通过’X‘值(0~15)提供的计数器(正确的含义依赖于命令)

表15 当SWI = 0X65时,SW2编码

SW2含义
0x00没有信息被给出
0x81存储器故障

表16 当SWI = 0X68时,SW2编码

SW2含义
0x00没有信息被给出
0x81逻辑信道不被支持
0x82安全报文不被支持

表17 当SWI = 0X69时,SW2编码

SW2含义
0x00没有信息被给出
0x81命令与文件结构补兼容
0x82安全状态不被满足
0x83认证方法被阻塞
0x84引用的数据无效
0x85使用的条件不被满足
0x86命令不被允许(无当前EF)
0x87期望的SM数据对象失踪
0x88SM数据对象不正确

表18 当SWI = 0X6A时,SW2编码

SW2含义
0x00没有信息被给出
0x80在数据字段中的不正确参数
0x81功能不被支持
0x82文件未找到
0x83记录未找到
0x84无足够的文件存储空间
0x85Lc与TLV结构不一致
0x86不正确的参数P1~P2
0x87L与P1~P2不一致
0x88引用的数据未找到

13 T=0 通信示例
本实例使用金思特电子的Kingst LA5016 usb 逻辑分析仪检测iso7816数据通讯。
下图是一个T=1中的INF字段(APDU)的解析参数。
在这里插入图片描述

参考资料:ISO7816-1234.pdf
ISO7816协议解析完成!

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值