APDU命令集

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字段

 

 

猜你喜欢

转载自blog.csdn.net/u012158332/article/details/75658765