APDU命令集
来源:互联网 发布:1hhhh.com域名升级访问 编辑:程序博客网 时间:2024/06/07 20:40
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.2 GSM 11.11定制APDU(详细介绍:GSM 11.11协议—98年11月版 第8章 第30页至36页)
编号
指令名称
CLA
INS
功能描述
1
SELECT
A0
A4
选择文件
2
STATUS
A0
F2
用来给SIM一个机会发送主动命令给ME
3
READ BINARY
A0
B0
从当前的EF中读一个字节字符串
4
UPDATE BINARY
A0
D6
用命令中的字节字符串更新当前EF中的字节字符串
5
READ RECORD
A0
B2
从固定长度记录EF或循环EF中读一条完整的记录
6
UPDATE RECORD
A0
DC
更新固定长度记录EF或循环EF中读一条完整的记录
7
SEEK
A0
A2
从固定长度记录的EF文件中查找给定的记录
8
INCREASE
A0
32
用来在循环EF中最后一个被写入记录的后面增加一条记录,如果最后被写入记录位于循环EF尾,则更新最后有一条记录
9
VERIFY CHV
A0
20
把从接口设备送入卡内的验证数据与卡内存储的引用数据进行比较
10
CHANGE CHV
A0
24
修改卡内存储的验证数据
11
DISABLE CHV
A0
26
使验证数据不可读
12
ENABLE CHV
A0
28
使验证数据可被读
13
UNBLOCK CHV
A0
2C
解锁由于3次输入错误验证而被锁的验证数据
14
INVALIDATE
A0
04
使当前EF文件无效
15
REHABILITATE
A0
44
恢复无效的EF文件
16
RUN GSM ALGORITHM
A0
88
运行SIM卡内置算法
17
SLEEP
A0
FA
在SIM Phase 2阶段已被去除
18
GET RESPONSE
A0
C0
用来获得前一条命令的响应数据,GET RESPONSE只允许跟在RUN GSM ALGORITHM,SEEK,SELECT和INCREASE命令的后面
19
TERMINAL PROFILE
A0
10
ME用来把涉及到SAT的功能传递给SIM卡
20
ENVELOPE
A0
C2
用来传递数据给SIM卡中的SAT应用程序
21
FETCH
A0
12
用来接收SIM卡传给ME的主动命令内容
22
TERMINAL RESPONSE
A0
14
把ME执行完主动命令后的信息返回给SIM卡
命令格式:
SELECT
COMMAND
CLASS
INS
P1
P2
P3
SELECT
A0
A4
00
00
02
STATUS
COMMAND
CLASS
INS
P1
P2
P3
STATUS
A0
F2
00
00
lgth
READ BINARY
COMMAND
CLASS
INS
P1
P2
P3
READ BINARY
A0
B0
Offset high
Offset low
lgth
UPDATE BINARY
COMMAND
CLASS
INS
P1
P2
P3
UPDATE BINARY
A0
D6
Offset high
Offset low
lgth
READ RECORD
COMMAND
CLASS
INS
P1
P2
P3
READ RECORD
A0
B2
Rec.NO.
Mode
lgth
UPDATE RECORD
COMMAND
CLASS
INS
P1
P2
P3
UPDATE RECORD
A0
DC
Rec.NO.
Mode
lgth
SEEK
COMMAND
CLASS
INS
P1
P2
P3
SEEK
A0
A2
00
Type/Mode
lgth
INCREASE
COMMAND
CLASS
INS
P1
P2
P3
INCREASE
A0
32
00
00
03
VERIFY CHV
COMMAND
CLASS
INS
P1
P2
P3
VERIFY CHV
A0
20
00
CHV NO.
08
CHANGE CHV
COMMAND
CLASS
INS
P1
P2
P3
CHANGE CHV
A0
24
00
CHV NO.
10
DISABLE CHV
COMMAND
CLASS
INS
P1
P2
P3
DISABLE CHV
A0
26
00
01
08
ENABLE CHV
COMMAND
CLASS
INS
P1
P2
P3
ENABLE CHV
A0
28
00
01
08
UNBLOCK CHV
COMMAND
CLASS
INS
P1
P2
P3
UNBLOCK CHV
A0
2C
00
CHV NO.
10
INVALIDATE
COMMAND
CLASS
INS
P1
P2
P3
INVALIDATE
A0
04
00
00
00
REHABILITATE
COMMAND
CLASS
INS
P1
P2
P3
REHABILITATE
A0
44
00
00
00
RUN GSM ALGORITHM
COMMAND
CLASS
INS
P1
P2
P3
RUN GSM ALGORITHM
A0
88
00
00
10
GET RESPONSE
COMMAND
CLASS
INS
P1
P2
P3
GET RESPONSE
A0
C0
00
00
lgth
TERMINAL PROFILE
COMMAND
CLASS
INS
P1
P2
P3
TERMINAL PROFILE
A0
10
00
00
lgth
ENVELOPE
COMMAND
CLASS
INS
P1
P2
P3
ENVELOPE
A0
C2
00
00
lgth
FETCH
COMMAND
CLASS
INS
P1
P2
P3
FETCH
A0
12
00
00
lgth
TERMINAL RESPONSE
COMMAND
CLASS
INS
P1
P2
P3
TERMINAL RESPONSE
A0
14
00
00
lgth
注:详细格式说明请参考GSM 11.11协议—98年11月版 第9章 第40页至52页.
1.3 ETSI TS 102.221协议—2007年7月版 定制APDU
编号
指令名称
CLA
INS
功能描述
1
SELECT
0X/4X/6X
A4
选择文件
2
STATUS
8X/CX/EX
F2
用来给SIM一个机会发送主动命令给ME
3
READ BINARY
0X/4X/6X
B0
从当前的EF中读一个字节字符串
4
UPDATE BINARY
0X/4X/6X
D6
用命令中的字节字符串更新当前EF中的字节字符串
5
READ RECORD
0X/4X/6X
B2
从固定长度记录EF或循环EF中读一条完整的记录
6
UPDATE RECORD
0X/4X/6X
DC
更新固定长度记录EF或循环EF中读一条完整的记录
7
SEARCH RECORD
0X/4X/6X
A2
从固定长度记录的EF文件中查找给定的记录
8
INCREASE
8X/CX/EX
32
用来在循环EF中最后一个被写入记录的后面增加一条记录,如果最后被写入记录位于循环EF尾,则更新最后有一条记录
9
RETRIEVE DATA
8X/CX/EX
CB
用来从当前的BER-TLV结构的EF文件中获得一个数据对象
10
SET DATA
8X/CX/EX
DB
用来在当前的BER-TLV结构的EF文件中创建一个新的数据对象或替代一个已经存在的数据对象或删除一个数据对象
11
VERIFY PIN
0X/4X/6X
20
验证PIN码
12
CHANGE PIN
0X/4X/6X
24
修改PIN码
13
DISABLE PIN
0X/4X/6X
26
使PIN码不可访问
14
ENABLE PIN
0X/4X/6X
28
使PIN码可被访问
15
UNBLOCK PIN
0X/4X/6X
2C
解锁由于3次输入错误PIN值而被锁的PIN码
16
DEACTIVATE FILE
0X/4X/6X
04
使当前EF文件无效
17
ACTIVATE FILE
0X/4X/6X
44
恢复无效的EF文件
18
AUTHENTICATE
0X/4X/6X
88/89
使用从接口设备发送来的询问数据和在卡内存储的相关秘密(例如密钥)来计算鉴别数据
19
GET CHALLENGE
0X/4X/6X
84
用来产生一个随机数
20
TERMINAL CAPABILITY
8X/CX/EX
AA
用来告诉SIM关于终端的功能
21
TERMINAL PROFILE
80
10
ME用来把涉及到SAT的功能传递给SIM卡
22
ENVELOPE
80
C2
用来传递数据给SIM卡中的SAT应用程序
23
FETCH
80
12
用来接收SIM卡传给ME的主动命令内容
24
TERMINAL RESPONSE
80
14
把ME执行完主动命令后的信息返回给SIM卡
25
MANAGE CHANNEL
0X/4X/6X
70
打开和关闭逻辑信道
26
GET RESPONSE
0X/4X/6X
C0
用于从卡发送至接口设备用可用的协议不能传送的那一
些的APDU(或APDU的一部分)
命令格式(下面只列出在GSM 11.11协议的基础上增加或改变的APDU命令):
SEARCHRECORD命令就是GSM 11.11中的SEEK命令;
VERIFYPIN命令就是GSM 11.11中的VERIFY CHV命令;
CHANGEPIN命令就是GSM 11.11中的CHANGE CHV命令;
DISABLEPIN命令就是GSM 11.11中的DISABLE CHV命令;
ENABLEPIN命令就是GSM 11.11中的ENABLE CHV命令;
UNBLOCKPIN命令就是GSM 11.11中的UNBLOCK CHV命令;
DEACTIVATEFILE命令就是GSM 11.11中的INVALIDATE命令;
ACTIVATEFILE命令就是GSM 11.11中的REHABILITATE命令;
AUTHENTICATE命令同GSM 11.11中的RUS GSM ALGORITHM命令;
MANAGECHANNEL命令属于ISO7816-4标准APDU命令集;
GETCHALLENGE命令属于ISO7816-4标准APDU命令集;
TERMINALCAPABILITY的命令报文:
CLA
8X/CX/EX
INS
AA
P1-P2
0000
Lc字段
接下来数据字段的长度
数据字段
命令数据
Le字段
RETRIEVE DATA的命令报文:
CLA
8X/CX/EX
INS
CB
P1-P2
P1=00;
P2:见表3-1.
Lc字段
后续数据字段的长度
数据字段
空或数据对象的标签
Le字段
响应数据的长度
B8
B7
B6
B5
B4
B3
B2
B1
含义
1
0
-
-
-
-
-
-
第一个模块
0
0
-
0
0
0
0
0
接下来一个模块
0
1
-
0
0
0
0
0
转发前一个模块
1
1
-
-
-
-
-
-
保留供将来使用
-
-
-
×
×
×
×
×
安全报文标识
-
-
-
0
0
0
0
0
当前EF
任何其他值
保留供将来使用
表 3-1 P2编码
SET DATA的命令报文:
CLA
8X/CX/EX
INS
DB
P1-P2
P1:00;
P2:见表3-1
Lc字段
后续数据字段的长度
数据字段
BER-TLV数据对象或删除时的标签字段
Le字段
- APDU命令集
- APDU命令集
- APDU命令集
- APDU命令集
- APDU命令
- APDU命令
- APDU命令
- APDU命令
- APDU命令
- apdu基本命令
- PBOC APDU命令解析
- APDU命令整理
- sim开机APDU命令流程
- sim开机APDU命令流程
- APDU
- APDU
- APDU
- APDU命令(闫小海的文章)
- tf.is_finite(x, name=None)
- maven手动打包pom文件配置
- 莫名其妙的错误之BigDecimal.setsetScale()报错java.lang.ArithmeticException: Rounding necessary
- Open CV小细节
- Rebranding 找规律
- APDU命令集
- 算法系列——Missing Number
- iOS In-App Purchase 内购之问题总结
- 关于驱动隐藏那点事(不触发PG 支持win10)
- 高效Linux 1 概述
- etcd的简单使用
- Java中正则表达式的使用
- May Day Holiday
- iOS之healthKit