GP card规范学习笔记
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规范学习笔记的更多相关文章
- PSR规范学习笔记
PSR已经经历了5次变革,如今PSR4就是最新的标准,但是还是有必要了解下5个版本的内容的,于是去php-fig网站看了下英文原版: 大概看了遍,发现这规范很多的必须很多时候只是建议,但是PHP解析器 ...
- AMD规范学习笔记
背景 NodeJS的一套比较简洁 Moudles 规范, 使得在服务器端的模块化变得更加简单.很长一段时间,很多公司或者项目都有自己的一套模块化机制, 却未能形成一套统一的标准, NodeJS的Mou ...
- 阿里Java编程规范 学习笔记
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- CMD规范学习笔记——基于SEAJS实现
CMD(Common Module Definition):该规范明确了模块的书写格式和基本交互规则.通常一个模块就是一个JS文件. 通过define关键字来定义模块,最基本的格式为: define( ...
- SDM439平台出现部分机型SD卡不能识别mmc1: error -110 whilst initialising SD card【学习笔记】
SDM439平台出现部分机型SD卡不能识别mmc1: error -110 whilst initialising SD card 打印了如下的log: - ::>[ after ms - :: ...
- usb2.0 规范学习笔记
1.一个USB HOST 最多可以同时支持128 个地址,地址0 作为默认地址,只在设备枚举期间临时使 用,而不能被分配给任何一个设备,因此一个USB HOST 最多可以同时支持127 个地址,如果一 ...
- CSS规范—分类方法(NEC规范学习笔记)
一.CSS文件的分类和引用顺序 Css按照性质和用途,将Css文件分成“公共型样式”.“特殊型样式”.“皮肤型样式”,并以此顺序引用,有需要可以添加版本号 1.公共型样式:包含以下几个部分 标签的重置 ...
- 阿里巴巴JAVA开发规范学习笔记
一.编程规约 (一)命名规约 1.类名驼峰.领域模型除外VO.BO.DTO.DO统称POJO 4.数组String[] args 8.枚举类 Enum ,其实就是特殊的常量类,构造方法强制私有 ( 二 ...
- java虚拟机规范学习笔记之数据类型
1.1 class文件格式 编译后被Java虚拟机所执行的代码使用了一种平台中立的二进制格式来表示,并且经常以文件的形式来存储,这种格式称为class文件格式.class文件格式中精确的定义了类与接口 ...
随机推荐
- docker从容器里面拷文件到宿主机或从宿主机拷文件到docker容器里面
1.从容器里面拷文件到宿主机? 答:在宿主机里面执行以下命令 docker cp 容器名:要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径 示例: 假设容器名为testtomcat, ...
- MAC之间共享屏幕
A 机设置-->共享-->屏幕共享 ☑️勾选上,打开屏幕共享. B 机 safari 里输入 vnc://ip 回车就可以共享屏幕了 转载请注明出处:https://www.cnb ...
- 虚拟现实外包公司—VR游戏你不知道的以及你该知道的WebVR
VR基础——原理其实很简单 我们地球人之所以能够看到立体的景物,是因为双眼可以各自独立看东西,也就是左眼只能看到左眼的景物,而右眼只能看到右眼的景物.因为人类左右两眼有间距,造成两眼的视角有些细微的差 ...
- Linux下修改用户的UID、GID
01.用户的UID和GID不能被占用 [root@26 ~]# id mvpuid=503(mvp) gid=503(mvp) groups=503(mvp) ###假定我需要设置mvp的uid/gi ...
- Java项目中使用log记录日志的一些总结
本文介绍了一下自己在Java项目中使用log的一些总结,从日志的作用.日志的选用.日志级别介绍.日志记录的一些最佳实践几个方面阐述. 日志的作用 主要作用包括: 1.出问题后定位当时问题 2.显示程序 ...
- fast-route的使用
<?php require 'vendor/autoload.php'; // 通过 FastRoute\simpleDispatcher() 方法定义路由,第一个参数必须是 FastRoute ...
- string部分方法
1.string.lastIndexOf() lastIndexOf 是从string末尾查找,但是返回值仍是首部的位置值. 2.string.replace() 放一个正则匹配会全部替换. 3.st ...
- java泛型的理解
总体介绍泛型: 1.泛型是计算机程序中一种重要的思维方式,它将数据结构和算法与数据类型相分离,使得同一套数据结构和算法,能够应用于各种数据类型,而且还可以保证类型安全,提高可读性.在Java中,泛型广 ...
- mysql 5.7版本的安装(非解压版)
这次的开发项目数据库方面要用到mysql,为了更好的学习,就在本地安装了一个mysql 一:下载安装步骤: https://blog.csdn.net/qq_34952973/article/deta ...
- 牛客练习赛23CD
链接:https://www.nowcoder.com/acm/contest/156/C 来源:牛客网 题目描述 托米完成了1317的上一个任务,十分高兴,可是考验还没有结束 说话间1317给了托米 ...