上一章链接: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 参数1 1 指令参数1
P2 参数2 1 指令参数2
Lc字段 长度 变量1或3 在命令的数据字段中呈现的字节数
数据字段 数据 变量 = Lc 在命令的数据字段中发送的字节串
Le字段 长度 变量 <= 3 在向命令响应的数据字段中期望的字节最大数

表7 响应APDU内容

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

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

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

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

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

序号 b4 b3 b2 b1 含义
1 X X – – 安全报文(SM)格式
2 0 X – – 没有SM
3 0 0 – – 没有SM或没有SM指示
4 0 1 – – 专有的SM格式
5 1 X – – 安全报文交换
6 1 0 – -- 不被鉴别的命令首标
7 1 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 选择的文件无效
0x84 FCI未按照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数据对象失踪
0x88 SM数据对象不正确

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

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

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

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

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐