9.   APDU命令参考

9.1  总的编码规则

A.生命周期状态的编码

可执行的装载文件

b8

b7

b6

b5

b4

b3

b2

b1

含义

16进制命令 

0

0

0

0

0

0

0

1

LOADED

01

应用

b8

b7

b6

b5

b4

b3

b2

b1

含义

16进制命令 

0

0

0

0

0

0

1

1

INSTALLED

03

0

X

X

X

X

1

1

1

SELECTABLE

>07?

1

X

X

X

X

X

1

1

LOCKED

>83?

//LOCKED>256?

安全域

b8

b7

b6

b5

b4

b3

b2

b1

含义

16进制命令 

0

0

0

0

0

0

1

1

INSTALLED

03

0

0

0

0

0

1

1

1

SELECTABLE

07

0

0

0

0

1

1

1

1

PERSONALIZED

0F

1

0

0

0

X

X

1

1

LOCKED

83?

主安全域

b8

b7

b6

b5

b4

b3

b2

b1

含义

16进制命令 

0

0

0

0

0

0

0

1

OP_READY

01

0

0

0

0

0

1

1

1

INITIALIZED

07

0

0

0

0

1

1

1

1

SECURED

0F

0

1

1

1

1

1

1

1

CARD_LOCKED

7F

1

1

1

1

1

1

1

1

TERMINATED

FF

B.应用的权限编码

b8

b7

b6

b5

b4

b3

b2

b1

含义

1

X

X

X

X

X

X

X

安全域

1

1

X

X

X

X

X

0

DAP验证

1

X

1

X

X

X

X

X

委托管理

X

X

X

1

X

X

X

X

卡锁定

X

X

X

X

1

X

X

X

卡终止

X

X

X

X

X

1

X

X

缺省选定

X

X

X

X

X

X

1

X

CVM管理

1

1

X

X

X

X

X

1

强制DAP验证

C.一般性的错误情形

SW1

SW2

含义

‘64’

‘00’

未指定。

‘67’

‘00’

LC中错误的长度。

’68’

‘81’

逻辑通道不支持或没有激活。

‘69’

‘82’

安全状态不满足。

‘69’

‘85’

使用条件不满足。

‘6A’

‘86’

P1P2不正确。

‘6D’

‘00’

无效的指令(INS)。

‘6E’

‘00’

无效的类(CLA)。

D.CLASS字节编码

CLA

含义

‘00’

ISO/IEC7816中定义的命令。

‘80’

私有命令。

‘84’

带安全消息的私有命令。

E.APDU命令和响应数据

Lc字节被编码为1字节

所有GlobalPlatform命令消息(包括APDU头)在长度上都被限制到255字节。

所有期待有响应数据的GP命令都会具有设置为0的LE字节,表示所有可用的响应数据将被返回。根据ISO/IEC 7816-4,在APDU响应消息中返回的所有GP响应最大长度为256字节。

F.密钥类型编码

含义

‘00’-‘7F’

保留为私用

‘80’

DES – mode (EBC/CBC) implicitly known

‘81’

保留(TDES)。

‘82’

CBC模式的TDES。

‘83’

ECB模式的DES。

‘84’

CBC模式的DES。

‘85’-‘9F’

RFU(对称算法)

‘A0’

RSA公钥-E(明文)。

‘A1’

RSA公钥-N(明文)。

‘A2’

RSA私钥-N

‘A3’

RSA私钥-D

‘A4’

RSA私钥-P (中国剩余定理)

‘A5’

RSA私钥-Q

‘A6’

RSA私钥-PQ

‘A7’

RSA私钥-DP1

‘A8’

RSA私钥-DQ1

‘A9’-‘FE’

RFU(非对称算法)

‘FF’

不可用

G.在委托管理的响应消息中的收条信息

长度

数据元素

1

收条的长度。

0-n

收条。

1

确认信息计数的长度。

2

确认信息的计数值。

1

卡唯一数据的长度。

1-n

卡唯一数据。

9.2  DELETE命令

A. 命令消息

代码

含义

CLA

‘80’或‘84’

INS

‘E4’

DELETE

P1

‘00’

引用控制参数P1。总被设置为00

P2

‘xx’

引用控制参数P2。00or80

Lc

‘xx’

数据字段的长度。

Data

‘xxxx…’

TLV格式编码的对象(和MAC如果存在)。

Le

‘00’

P1: 删除对象(实例)

P2: 删除对象及相关对象(包)

将被删除的应用或可执行的装载文件的标识将被指定为AID的tag‘4F’后面跟着长度以及应用或可执行装载文件的AID。

例:

80/84 E4 00 00/80 Lc 4F Lc V

80E4 00 80 12 4F 10 A0000000000006002200 0001

密钥管理

Tag

长度

删除一个密钥标识符

‘D0’

‘01’

密钥标识符。

删除一个密钥版本号

‘D2’

‘01’

密钥版本号。

80E4 00 00 Lc D0 01 KID D2 01 KVN

B. 响应消息

如果主安全域处理DELETE命令,或者一个密钥正在被删除,一个用于指明没有额外的数据存在的单字节‘00’将被返回

存在

字节长度

名字

强制的

1

删除确认信息的长度。

有条件的

0-n

删除确认信息(参见节9.1.7)。

一个命令的成功执行将通过状态字‘90’’00’来表示

错误情形:

SW1

SW2

含义

‘65’

‘81’

内存故障。

‘6A’

‘88’

引用数据未找到。

’6A’

‘82’

应用没有找到。

‘6A’

‘80’

在命令数据中有不正确的值。

‘64’

‘00’

未指定。

‘67’

‘00’

LC中错误的长度。

’68’

‘81’

逻辑通道不支持或没有激活。

‘69’

‘82’

安全状态不满足。

‘69’

‘85’

使用条件不满足。

‘6A’

‘86’

P1P2不正确。

‘6D’

‘00’

无效的指令(INS)。

‘6E’

‘00’

无效的类(CLA)。

9.3 GET DATA命令(ISD

A. 命令消息

代码

含义

CLA

‘00’,‘80’或‘84’

INS

‘CA’

GET DATA

P1

‘xx’

‘00’或Tag值的高字节部分。

P2

‘xx’

Tag值的低字节部分。

Lc

‘xx’

MAC的长度,否则为空。

Data

‘xxxx…’

如果存在的话为MAC,否则为空。

Le

‘00’

l  Tag‘42’:发行者标识号。

l  Tag‘45’:卡Image号。

l  Tag‘66’:卡数据。

l  Tag‘E0’:密钥信息模板。

l  Tag‘C1’:缺省密钥版本号的序列计数值。

卡支持委托管理且要求收条

l  Tag‘C2’:确认信息计数值。

一个应用提供者的安全域将至少支持下面的数据对象的Tag:

l  Tag‘E0’:密钥信息模板。

l  Tag‘C1’:缺省密钥版本号的序列计数值。

l  Tag‘73’:卡识别数据。

(勘误文档)对于只支持安全通道协议‘01’的安全域或主安全域, tag ’C1’将会被拒绝

GET DATA响应的数据字段将包含TLV编码的数据对象,这个数据对象是在命令消息的引用控制参数P1和P2中所指定的。

Tag lc value

E0返回密钥信息

参数

长度

编码

密钥标识符

1字节

0-255

密钥版本号

1字节

0-255

第一个(或仅有的一个)密钥元素的密钥类型

1字节

参见节9.1.6-密钥类型编码

第一个(或仅有的一个)密钥元素的长度

1字节

1-255

最后一个密钥元素的密钥类型

1字节

参见节9.1.6-密钥类型编码

最后一个密钥元素的长度

1字节

1-255

一个命令的成功执行将通过状态字‘90’ ‘00’来表示

SW1

SW2

含义

‘6A’

‘88’

引用数据未找到。返回一个或多个

‘64’

‘00’

未指定。

‘67’

‘00’

LC中错误的长度。

’68’

‘81’

逻辑通道不支持或没有激活。

‘69’

‘82’

安全状态不满足。

‘69’

‘85’

使用条件不满足。

‘6A’

‘86’

P1P2不正确。

‘6D’

‘00’

无效的指令(INS)。

‘6E’

‘00’

无效的类(CLA)。

9.4 GET STATUS

代码

含义

CLA

‘80’或‘84’

INS

‘F2’

GET STATUS

P1

‘xx’

引用控制参数P1。

P2

‘xx’

引用控制参数P2。

Lc

‘xx’

检索标准(和MAC如果存在)。

Le

‘00’

P1:

80:ISD

40:application&SD

20:包

10:包和相关模块

SD和普通App区别仅限于权限

(额外)

引用控制参数下列组合的值可以应用:

'E0' – 发行者安全域、应用、安全域、可执行装载文件。

'D0' –发行者安全域、应用、安全域、可执行装载文件及它们的可执行模块。

'C0' –发行者安全域、应用、安全域。

'A0' – 发行者安全域、可执行装载文件。

'90' – 发行者安全域、可执行装载文件及它们的可执行模块。

'60' – 应用、安全域、可执行装载文件。

'50' – 应用、安全域、可执行装载文件及它们的可执行模块。

P2:

b8

b7

b6

b5

b4

b3

b2

b1

含义

X

X

X

X

X

X

RFU

X

0

取得第一个或所有的。

X

1

取得下一个。

0

X

根据表9-22和表9-24的响应数据结构。

1

X

根据表9-23的响应数据结构。

两位数字同时生效:前者决定查找目标,后者决定返回的数据结构

返回消息:基于P1和P2

表9-22

长度

含义

1

‘xx’

AID的长度。

1-n

‘xxxx…’

AID。

1

‘xx’

生命周期状态。

1

‘xx’

应用的权限。

GP注册表

Tag

长度

存在

‘E3’

变长

GlobalPlatform注册表相关数据。

‘4F’

1-n

AID。

‘9F70’

‘01’

生命周期状态。

‘C5’

‘01’

应用权限。

条件存在:ISD、SSD、App

‘CE’

1-n

可执行装载文件版本号。

可选

‘84’

1-n

第一个或仅有的一个可执行模块的AID。

条件存在:P1=10

‘84’

1-n

最后一个可执行模块的AID。

条件存在:P1=10

可执行装载文件和可执行模块信息数据:表9-24

长度

含义

1

‘xx’

可执行装载文件AID的长度。

1-n

‘xxxx…’

可执行装载文件AID。

1

‘xx’

可执行装载文件的生命周期状态。

1

‘00’

应用的权限。

1

‘xx’

相关的可执行模块的个数。

1

‘xx’

可执行模块AID的长度。

1-n

‘xxxx…’

可执行模块AID。

1

‘xx’

可执行模块AID的长度。

1-n

‘xxxx…’

可执行模块AID。

处理状态

一个命令的成功执行是通过状态字‘90’ ‘00’来表示的。

SW1

SW2

含义

‘63’

‘10’

更多数据可用。

GET STATUS [get nextoccurrence(s)]警告

SW1

SW2

含义

‘63’

‘10’

更多数据可用。

错误

SW1

SW2

含义

‘6A’

‘88’

引用数据未找到。

‘6A’

‘80’

在命令数据中含有不正确的值。

‘64’

‘00’

未指定。

‘67’

‘00’

LC中错误的长度。

’68’

‘81’

逻辑通道不支持或没有激活。

‘69’

‘82’

安全状态不满足。

‘69’

‘85’

使用条件不满足。

‘6A’

‘86’

P1P2不正确。

‘6D’

‘00’

无效的指令(INS)。

‘6E’

‘00’

无效的类(CLA)。

GP card规范学习笔记的更多相关文章

  1. PSR规范学习笔记

    PSR已经经历了5次变革,如今PSR4就是最新的标准,但是还是有必要了解下5个版本的内容的,于是去php-fig网站看了下英文原版: 大概看了遍,发现这规范很多的必须很多时候只是建议,但是PHP解析器 ...

  2. AMD规范学习笔记

    背景 NodeJS的一套比较简洁 Moudles 规范, 使得在服务器端的模块化变得更加简单.很长一段时间,很多公司或者项目都有自己的一套模块化机制, 却未能形成一套统一的标准, NodeJS的Mou ...

  3. 阿里Java编程规范 学习笔记

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  4. CMD规范学习笔记——基于SEAJS实现

    CMD(Common Module Definition):该规范明确了模块的书写格式和基本交互规则.通常一个模块就是一个JS文件. 通过define关键字来定义模块,最基本的格式为: define( ...

  5. SDM439平台出现部分机型SD卡不能识别mmc1: error -110 whilst initialising SD card【学习笔记】

    SDM439平台出现部分机型SD卡不能识别mmc1: error -110 whilst initialising SD card 打印了如下的log: - ::>[ after ms - :: ...

  6. usb2.0 规范学习笔记

    1.一个USB HOST 最多可以同时支持128 个地址,地址0 作为默认地址,只在设备枚举期间临时使 用,而不能被分配给任何一个设备,因此一个USB HOST 最多可以同时支持127 个地址,如果一 ...

  7. CSS规范—分类方法(NEC规范学习笔记)

    一.CSS文件的分类和引用顺序 Css按照性质和用途,将Css文件分成“公共型样式”.“特殊型样式”.“皮肤型样式”,并以此顺序引用,有需要可以添加版本号 1.公共型样式:包含以下几个部分 标签的重置 ...

  8. 阿里巴巴JAVA开发规范学习笔记

    一.编程规约 (一)命名规约 1.类名驼峰.领域模型除外VO.BO.DTO.DO统称POJO 4.数组String[] args 8.枚举类 Enum ,其实就是特殊的常量类,构造方法强制私有 ( 二 ...

  9. java虚拟机规范学习笔记之数据类型

    1.1 class文件格式 编译后被Java虚拟机所执行的代码使用了一种平台中立的二进制格式来表示,并且经常以文件的形式来存储,这种格式称为class文件格式.class文件格式中精确的定义了类与接口 ...

随机推荐

  1. CSS布局学习(三) - position属性定义及解释(官网直译)

    static ①元素的位置是在文档正常布局流中的位置. ②设置top right bottom left与z-index无效. ③在未指定position时,static是默认值 以下例子进行说明: ...

  2. (未完结)“文远知行杯”GDET第十四届竞赛(网络赛共10题,仅整理出6题)

    刚开学没多久就打了一个网络赛,通过这次网络赛我是发现我是真的菜... 放假前校赛的排名让我有些自满,寒假丝毫没有接触ACM,一直沉迷于Steam,这个真的值得好好反省. 虽然现在大一课有点多,在学校也 ...

  3. angular2-4 之动效-animation

    提示:   angular2 时animation代码在核心模块里面(@angular/core里面);到了angular4.0时animation从核心模块中提取出来作为一个单独的模块, 这样可以在 ...

  4. Appium Desktop-Permission to start activity denied.

    可能情况1:activity查找错误 如何查找activity (1)确保手机和电脑已连接   adb devices (2)确保在你手机上,要测试的包启动着 (3)dos运行:adb shell d ...

  5. 【洛谷p1605】迷宫

    (还记得我昨天大概没人看到的博客(我删辽)吗qwq,2019.4.14下午交的qwq 那篇博客大致内容就是:我提交楼上这道题,交了好久好久好久好久 现在我告诉你,那次评测还N/A着呢qwq) tqlq ...

  6. git branch 不显示的原因

    转自:https://blog.csdn.net/qq_39671159/article/details/81261049 必须使用git init命令创建仓库,执行git add . 和git co ...

  7. 网络模型 —— OSI七层模型,TCP五层模型,以及区分

    1. OSI七层模型 OSI层  介绍 功能 TCP/IP协议 应用层 操作系统或网络应用程序提供访问网络服务的接口. 文件传输.浏览器.电子邮件 HTTP, FTP, TFTP, SNMP, DNS ...

  8. Python—迭代器与生成器

    迭代器与生成器 生成器(generator) 先来了解一下列表生成器: list = [i*2 for i in range(10)] print(list)>>>>[0, 2 ...

  9. C++实现 电子邮件客户端程序(简易版)

    #Windows操作系统下 用命令行工具实现发送邮件(编程前工作) 步骤: 1.telnet连接服务器(以用QQ邮箱向网易邮箱发送邮件为例,端口号25) 2.返回220 说明连接成功 3.ehlo发送 ...

  10. vue初体验-ES6 基础知识补充 let 和const

    本人水平有限,如内容有误,欢迎指正,谢谢. let  : 主要特点: 1.作用域只局限于当前代码块.2.使用let 声明的变量作用域不会被提升.3.在相同的作用域下不能声明相同的变量.4.for循环体 ...