智能卡 APTU命令
来源:互联网 发布:linux配置hadoop环境 编辑:程序博客网 时间:2024/05/21 09:52
头标由四个数据元组成,它们是类CLA(ClAss)字节,命令INS(INStructic,n)字节和两个参数Pl和P2 (Parameters 1 and 2)字节,如图1所示。类字节仍旧用于识别应用和它们专有的命令组。例如,GSM使用 类字节‘AO’,而代码‘8X’则最常用于公司专用(私用)命令。相反,基于ISO的命令都用类字节‘OX’ 编码。标准另外规定了类字节用于识别安全报文和逻辑通道。虽然如此,仍然和前面所述把类字类当做应用 识别符使用是相容的。类字节的编码参见表1和表2
CLA
INS
P1
P2
Lc—段
数据段
Le—段
头标
主体
图1 命令APDU的结构
表1 按照ISO/IEC 7816-4的最重要的类别字节(CLA)的编码
b8-b5
b4
b3
b2
b1
意义
...
...
...
X
X
逻辑通道编号
...
0
0
...
...
没有安全报文
...
0
1
...
...
安全报文未遵照LSO,使用自己的方法
...
1
0
...
...
安全报文未遵照LSO,头标不是真实的
...
1
1
...
...
安全报文未遵照LSO,头标是真实的
‘0’
...
...
...
...
结构和编码遵照ISO/IIEC 7816-4
‘8’,‘9’
...
...
...
...
命令和应答具有用户专用的编码和含义(私用),
‘A’
...
...
...
...
规定附加文件
‘F’
1
1
1
1
为PIS保留
在命令APDU中的下一个字节是指令字节,它对实际的命令编码。这个字节的几乎全部的地址空间都可以使 用,而惟一的限制是只可以使用偶编码。这是因为T=0协议允许在回送的命令字节中用把先前的字节增量1来 激活可编程电压。因此,命令字节永远是偶数的。
表2 关于类字节的适用概况的补充说明
类
适用范围
0X
用于遵照ISO/IEC 7816-4的标准命令
80
用于遵照EN 1546-3的电子钱包
8X
用于应用和企业专用命令
8X
用于遵照EMV-2的具有芯片的信用卡
A0
用于遵照prETS300 608/GSM11.11的GXM移动电话和遵照EN726-3的标准
两个参数字节主要用来提供更多的关于指令字节选择命令的信息。于是,它们主要用来作为命令不同选项 的选择开关。例如,把它们用来选择SELECT FLE的不同选项或是规定READ BINARY的区距。
接着头标的下一段是本体,除有了长度规定之外,它可以被略去,本体承担了双重角色。首先,它规定了 送给卡的数据部分的长度(在Lc字段),以及由卡回送的数据部分的长度(在Le字段)。其次,它含有发送 给卡的有关命令的数据。如果Le字段之值为‘00’,则终端期待着卡传送这条命令最大可用数量的数据,这 是关于长度的数值规定的惟一例外。
Le和L字段通常为1字节长。然而能够把它们转换为每个有3字节长的字段,这样可用来表示高达65 536的长 度,因为第1字节中含有扩展符序列‘∞’,参见图2。标准已经规定这个三字节长度的规格是为将来的应用 的,但由于目前可用存储器大小的限制这一点尚未能实现。
前面所述命令APDU的各部分可以组合成四种一般的个案如图3所示。
00
Le/Lc(MSB)
Le/Lc(LSB)
字节1
字节2
字节3
1.APDU命令集1.1 ISO智能卡通用APDU命令集(详细介绍:ISO 7816标准(中文版).pdf中75~100页)
编号
指令名称
CLA
INS
功能描述
1
READ BINARY
00/04
B0
读出带有透明结构的EF内容的一部分
2
WRITE BINARY
D0
将二进制值写入EF
3
UPDATE BINARY
00/04
D6
启动使用在命令APDU中给出的位来更新早已呈现在EF中的位
4
ERASE BINARY
0E
顺序地从给出的偏移开始将EF的内容的一部分置为其逻辑擦除的状态
5
READ RECORD
00/04
B2
给出了EF的规定记录的内容或EF的一个记录开始部分的内容
6
WRITE RECORD
D2
WRITE RECORD命令报文启动下列操作之一:
写一次记录;
对早已呈现在卡内的记录数据字节与在命令APDU中给出的记录数据字节进行逻辑“或”运算;
对早已呈现在卡内的记录数据字节与在命令APDU中给出的记录数据字节进行逻辑“和”运算
7
APPEND RECORD
00/04
E2
启动在线性结构EF的结束端添加记录或者在循环结构的EF内写记录号1
8
UPDATE RECORD
00/04
DC
启动使用命令APDU给出的位来更新特定记录
9
GET DATA
CA
可在当前上下文(例如应用特定环境或当前DF)范围内用于检索一个原始数据对象或者包含在结构化数据对象中所包含的一个或多个数据对象
10
PUT DATA
DA
可在当前上下文(例如应用特定环境或当前DF)范围内用于存储一个原始数据对象或者包含在结构化数据对象中的一个或多个数据对象正确的
存储功能(写一次和/或更新和/或添加)通过数据对象的定义和性质来引出
11
SELECT FILE
00
A4
设置当前文件后续命令可以通过那个逻辑信道隐式地引用该当前文件
12
VERIFY
00/04
20
启动从接口设备送入卡内的验证数据与卡内存储的引用数据(例如口令)进行比较
13
INTERNAL AUTHENTICATE
00
88
启动卡使用从接口设备发送来的询问数据和在卡内存储的相关秘密(例如密钥)来计算鉴别数据
当该相关秘密被连接到MF时命令可以用来鉴别整个卡
当该相关秘密被连接到另一个DF时命令可以用来鉴别那个DF
14
EXTERNAL AUTHENTICATE
00
82
使用卡计算的结果(是或否)有条件地来更新安全状态而该卡的计算是以该卡先前发出(例如通过GETCHALLENGE命令)的询问在卡内存储的可能的秘密密钥以及接口设备发送的鉴别数据为基础的
15
GET CHALLENGE
00
84
要求发出一个询问(例如随机数)以便用于安全相关的规程(例EXTERNAL AUTHENTICATE 命令)
16
MANAGE CHANNEL
70
打开和关闭逻辑信道
17
GET RESPONSE
00
C0
用于从卡发送至接口设备用可用的协议不能传送的那一些的APDU(或APDU的一部分)
18
ENVOLOPE
80
C2
用来发送那些不能由有效协议来发送的APDU 或APDU的一部分或任何数据串
表6 ISO智能卡APDU命令集
命令格式:
1.READ BINARY的命令报文:
CLA
00/04
INS
B0
P1-P2
见表下面说明
Lc字段
空
数据字段
空
Le字段
待读的字节数
说明:
如果在P1中b8=1, 则P1的b7和b6置为0(RFU若干位) P1的b5至b1是短EF标识
符并且P2是在从文件开始的数据单元中被读的第1个字节的偏移。
如果在P1中b8=0, 则P1_P2是在从文件开始的数据单元中被读的第1个字节的
偏移。
如果Le字段仅包含若干“0” 则对于短的长度在不超过256的范围内或者对扩充长
度在不超过65536的范围内所有字节(直到文件结束为止)应被读出。
READ BINARY的响应报文:
数据字段
读的字节(Le字节)
SW1-SW2
状态字节:用来说明指令执行是否出错,由于什么原因出错
2.WRITE BINARY命令报文:
CLA
00/04
INS
D0
P1-P2
见表下面说明
Lc字段
后续数据字段的长度
数据字段
待写的数据单元串
Le字段
空
说明:
如果在P1中b8=1, 则P1的b7和b6显域 0(RFU若干位) P1的b5至b1是短EF标识
符并且P2是在从文件开始的数据单元中被写的第1个字节的偏移。
如果在P1中b8=0, 则P1_P2是在从文件开始的数据单元中被写的第1个字节的
偏移。
WRITE BINARY的响应报文:
数据字段
空
SW1-SW2
状态字节:用来说明指令执行是否出错,由于什么原因出错
3.UPDATA BINARY命令报文:
CLA
00/04
INS
D6
P1-P2
见表下面说明
Lc字段
后续数据字段的长度
数据字段
待写的数据单元串
Le字段
空
说明:
如果在P1中b8=1, 则P1的b7和b6置为0(RFU若干位), P1的b5至b1是短EF标识
符,并且P2是在从文件开始的数据单元中被更新的第1个字节的偏移。
如果在P1中b8=0, 则P1_P2是在从文件开始的数据单元中被更新的第1个字节
的偏移。
UPDATE BINARY的响应报文:
数据字段
空
SW1-SW2
状态字节:用来说明指令执行是否出错,由于什么原因出错
4 .ERASE BINARY命令报文:
CLA
00/04
INS
0E
P1-P2
见表下面说明
Lc字段
空或02
数据字段
见下表说明
Le字段
空
说明:
如果在P1中b8=1, 则P1的b7和b6显示0(RFU若干位), P1的b5至b1是短EF标识
符,并且P2是在从文件开始的数据单元中被写的第1个字节的偏移。
如果在P1中b8=0, 则P1_P2是在从文件开始的数据单元中被写的第1个字节的
偏移。
如果数据字段呈现,它编码不被擦除的第1个数据单元的偏移,该偏移
应大于在P1 —P2中编码的一个偏移,当数据字段为空时,该命令擦除到该文件的结
束端。
ERASE BINARY的响应报文:
数据字段
空
SW1-SW2
状态字节:用来说明指令执行是否出错,由于什么原因出错
5.READ RECORD命令报文:
CLA
00/04
INS
B2
P1-P2
P1: 记录号或被读的第1个记录的标识符(‘00’表示当前记录);
P2: 引用控制
Lc字段
空
数据字段
空
Le字段
被读字节数
READ RECORD的响应报文:
数据字段
Le字节
SW1-SW2
状态字节:用来说明指令执行是否出错,由于什么原因出错
6.WRITE RECORD命令报文:
CLA
00/04
INS
D2
P1-P2
P1=‘00’指明当前记录
P1:所指定的记录号
Lc字段
后续数据字段的长度
数据字段
待写的记录
Le字段
空
WRITE RECORD的响应报文:
数据字段
空
SW1-SW2
状态字节:用来说明指令执行是否出错,由于什么原因出错
7.APPEND RECORD命令报文:
CLA
00/04
INS
E2
P1-P2
只有P1 ‘00’是有效的
Lc字段
后续数据字段的长度
数据字段
待添加的记录
Le字段
空
APPEND RECORD的响应报文:
数据字段
空
SW1-SW2
状态字节:用来说明指令执行是否出错,由于什么原因出错
8.UPDATE RECORD命令报文:
CLA
00/04
INS
DC
P1-P2
P1=‘00’指明当前记录
P1:所指定的记录号
Lc字段
后续数据字段的长度
数据字段
待更新的记录
Le字段
空
UPDATE RECORD的响应报文:
数据字段
空
SW1-SW2
状态字节:用来说明指令执行是否出错,由于什么原因出错
9.GET DATA命令报文:
CLA
00/04
INS
CA
P1-P2
见表1-9
Lc字段
空
数据字段
空
Le字段
在响应时期望的字节数
值
含义
‘0000’至‘003F
RFU(保留供将来使用)
‘0040’至‘00FF’
P2中的BER-TLV标签(1个字节)
‘0100’至‘01FF’
应用数据(专有编码)
‘0200’至‘02FF’
P2中的简单TLV标签
‘0300’至‘3FFF’
RFU(保留供将来使用)
‘0400’至‘FFFF’
P1-P2中的BER-TLV标签(2个字节)
表1-9参数P1-P2的编码
GET DATA的响应报文:
数据字段
Le字节
SW1-SW2
状态字节:用来说明指令执行是否出错,由于什么原因出错
10.PUT DATA命令报文:
CLA
00/04
INS
DA
P1-P2
见表1-9
Lc字段
后续数据字段的长度
数据字段
待写的参数和数据
Le字段
空
PUT DATA的响应报文:
数据字段
空
SW1-SW2
状态字节:用来说明指令执行是否出错,由于什么原因出错
11.SELECT FILE命令报文:
CLA
00/04
INS
A4
P1-P2
P1:选择控制;
P2:选择选项
Lc字段
空或后续数据字段的长度
数据字段
如果存在下列内容则按照P1-P2
——文件标识符
——MF的路径
——当前DF的路径
——DF名称
Le字段
空或在响应时期望的数据最大长度
SELECT FILE的响应报文:
数据字段
信息按照P2(至多Le个字节)
SW1-SW2
状态字节:用来说明指令执行是否出错,由于什么原因出错
12.VERIFY命令报文:
CLA
00/04
INS
20
P1-P2
P1:‘00’(其他值为RFU)
P2:引用数据的限定符
Lc字段
空或后续数据字段的长度
数据字段
空或验证数据
Le字段
空
VERIFY的响应报文:
数据字段
空
SW1-SW2
状态字节:用来说明指令执行是否出错,由于什么原因出错
13.INTERNAL AUTHENTICATE命令报文:
CLA
00/04
INS
88
P1-P2
P1: 在卡内引用的算法
P2: 引用的秘钥
Lc字段
后续数据字段的长度
数据字段
鉴别相关的数据(例如询问)
Le字段
在响应中期望的字节最大数
INTERNAL AUTHENTICATE的响应报文:
数据字段
鉴别相关的数据(例如对询问的响应)
SW1-SW2
状态字节:用来说明指令执行是否出错,由于什么原因出错
14. EXTERNAL AUTHENTICATE命令报文:
CLA
00/04
INS
82
P1-P2
P1: 在卡内引用的算法
P2: 引用的秘钥
Lc字段
空或后续数据字段的长度
数据字段
空或鉴别相关的数据(例如对询问的响应)
Le字段
空
说明:
P1=‘00’表示没有信息被给出,在发出命令之前引用的算法为已知,或在数据
字段中提供。
P2=‘00’表示没有信息被给出,在发出命令之前引用的秘密为已知,或在数据
字段中提供。
EXTERNAL AUTHENTICATE的响应报文:
数据字段
空
SW1-SW2
状态字节:用来说明指令执行是否出错,由于什么原因出错
15.GET CHALLENGE命令报文:
CLA
00/04
INS
84
P1-P2
‘0000’(其他值为RFU)
Lc字段
空
数据字段
空
Le字段
在响应中期望的最大字节数
GET CHALLENGE的响应报文:
数据字段
询问数据
SW1-SW2
状态字节:用来说明指令执行是否出错,由于什么原因出错
16.MANAGE CHANNEL命令报文:
CLA
00/04
INS
70
P1-P2
P1=‘00’打开逻辑信道
P1=‘80’关闭逻辑信道(其他值为RFU)
P2:‘00’ ‘01’ ‘02’ ‘03’(其他值为RFU)
Lc字段
空
数据字段
空
Le字段
‘01’ 如果P1-P2=‘0000’;
空,如果P1-P2不等于‘0000’
说明:
P1的位b8用来表示开放功能或关闭功能;如果b8为“0” ,则MANAGE CHANNEL应打
开逻辑信道,如果b8为“1”, 则MANAGE CHANNEL应关闭逻辑信道。
MANAGE CHANNEL的响应报文:
数据字段
逻辑信道号,如果P1-P2=‘0000’;
空,如果P1-P2不等于‘0000’
SW1-SW2
状态字节:用来说明指令执行是否出错,由于什么原因出错
17.GET RESPONSE命令报文:
CLA
00/04
INS
C0
P1-P2
‘0000’(其他值为RFU)
Lc字段
空
数据字段
空
Le字段
在响应中期望的数据最大长度
GET RESPONSE的响应报文:
数据字段
按照Le的APDU(的一部分)
SW1-SW2
状态字节:用来说明指令执行是否出错,由于什么原因出错
18.ENVELOPE命令报文:
CLA
80
INS
C2
P1-P2
‘0000’(其他值为RFU)
Lc字段
后续数据字段的长度
数据字段
APDU(的一部分)
Le字段
空或期望数据的长度
说明:
当对于发送数据串而言根据T=0来使用ENVELOPE命令时,在ENVELOPE命令
ADPU中的空数据字段意味着“数据串的结束”.
ENVELOPE的响应报文:
数据字段
空或按照Le的APDU(的一部分)
SW1-SW2
状态字节:用来说明指令执行是否出错,由于什么原因出错
==============================================================
1.命令APDU
(1)必备的4字节首标(CLA INS P1 P2);
(2)有条件的可变长度主体
—在命令APDU的数据字段中呈现的字节数用Lc 来表示
—在响应APDU的数据字段中期望的字节最大数用Le (期望数据的长度)来表示 当Le 字段只包含0时 则要求有效数据字节的最大数
(3)Lc字段和Le字段
既可为短的(一个字节 默认值) 也可为扩充的(显式语句)
(4)Le 用的解码约定
—如果Le 的值不为全空而按1个或2个字节进行编码 则LE 的值等于该字节的值它位于从1至255(或65 535)的范围内;所有这些位的空值意味着Le 的最大值
为256(或65536)
2.响应APDU
(1)有条件的可变长度主体
(2)必备的2字节尾标(SW1 SW2)
—如果该命令被放弃 则响应APDU是一个尾标 它按2个状态字节来编码差错条件
3.命令编程
(1)命令字分两类讨论:1.命令长度大于5
2.命令长度等于5
(2)相应命令分4类: 1.响应大于2字节;2.响应等于2字节;3.响应等于1字节;4.响应等于0字节
(3)当响应状态字(第一个)和命令INS相等,按(1)分类再次处理处理
- 智能卡 APTU命令
- 智能卡
- 智能卡
- 智能卡
- win7_不主动发送智能卡命令
- 智能卡—CREATE(建立文件)命令
- win7_不主动发送智能卡命令
- 【智能卡】智能卡之ISO7816
- 【智能卡】智能卡之SWP
- 智能卡概论
- 关于智能卡
- 颠覆智能卡
- 智能卡概述
- 智能卡数据传输
- 智能卡操作系统
- JAVA智能卡
- 【智能卡】智能卡之入门科普
- 智能卡操作系统(COS),什么是智能卡操作系统(COS)
- bean的实例化时机
- Json,List,Map的数据格式详解。
- 反转数字
- tensroflow建立一个完整的单层网络
- 从0开始学习 GitHub 系列之「初识 GitHub」
- 智能卡 APTU命令
- ssh 免密码登录
- Qt+OpenCV在不同ubuntu系统移植时SIGSEGV问题解决
- 面试常见问题总结
- robot framework调整Text Edit调整字体颜色
- htm和html有什么区别
- Android中关于使用空格对齐文字
- 51Nod1202子序列个数
- MTK MT8163 7.0 TP驱动简单移植