非接触IC卡片APDU指令介绍(一)
APDU指令介绍
1. APDU指令格式
根据7816-4规范,从终端发出的命令和卡片响应的信息必须遵从以下4种格式。
情形1:
命令 : | CLA | INS | P1 | P2 | 00 |
响应 : | SW1 | SW2 |
情形2:
命令: | CLA | INS | P1 | P2 | Le |
响应: | Le字节的DATA | SW1 | SW2 |
情形3:
命令: | CLA | INS | P1 | P2 | Lc | DATA |
响应 : | SW1 | SW2 |
情形4:
命令: | CLA | INS | P1 | P2 | Lc | DATA | Le |
响应: | Le字节的DATA | SW1 | SW2 |
1.1 APDU命令格式
命令由4字节的命令头和命令体组成,见图1。
命令头(必备体) | 命令体(可选体) | |||||
CLA | INS | P1 | P2 | Lc | DATA | Le |
图1 APDU命令格式
1.1.1 命令头域
命令头定义报文的内容如下表所示:
表1 命令头域
代码 | 长度(byte) | 值 (Hex) | 描述 |
CLA | 1 | X0 | 不带安全报文的命令 |
X4 | 带安全报文的命令 | ||
INS | 1 | XX | 指令代码 |
P1 | 1 | XX | 参数1 |
P2 | 1 | XX | 参数2 |
1.1.2 命令体
命令体中各项是可选的。
Lc命令数据域中DATA的长度,该长度不可超过255字节。
Data 命令和响应中的数据域。
Le响应数据域中期望数据的长度。
Le=00,表示需要最大字节数, 该长度不可超过255字节。
1.2 APDU响应数据格式
APDU命令的应答由数据和状态字组成,见下图2。
数据 | 状态字 | |
响应中接收的数据位串 | SW1 | SW2 |
图2 APDU响应数据格式
1.2.1 返回数据
返回数据域是可选项。
1.2.2 返回状态字(SW1SW2)
SW1 SW2是卡片执行命令的返回代码,任何命令的返回信息都至少由一个状态字组成。
1.3 状态字SW1SW2意义
状态字说明了命令处理的情况,即命令是否被正确执行,如果未被正确执行,原因是什么。状态字由2部分组成:
SW1(status word1):表示命令处理状态;
SW2(status word2):表示命令处理限定。
表2 状态字SW1-SW2
SW1 | SW2 | Description |
90 | 00 | 正确执行 |
61 | XX | 正确执行 XX表示响应数据长度。可用Get Response命令取回响应数据。(仅用于T=0) |
62 | 81 | 回送的数据可能错误 |
62 | 83 | 选择文件无效,文件或密钥校验错误 |
63 | CX | X表示还可再试次数 |
64 | 00 | 状态标志未改变 |
65 | 81 | 写EEPROM不成功 |
67 | 00 | 错误的长度 |
69 | 00 | CLA与线路保护要求不匹配 |
69 | 01 | 无效的状态 |
69 | 81 | 命令与文件结构不相容 |
69 | 82 | 不满足安全状态 |
69 | 83 | 密钥被锁死 |
69 | 85 | 使用条件不满足 |
69 | 87 | 无安全报文 |
69 | 88 | 安全报文数据项不正确 |
6A | 80 | 数据域参数错误 |
6A | 81 | 功能不支持或卡中无MF或卡片已锁定 |
6A | 82 | 文件未找到 |
6A | 83 | 记录未找到 |
6A | 84 | 文件无足够空间 |
6A | 86 | 参数P1 P2错误 |
6B | 00 | 在达到Le/Lc字节之前文件结束,偏移量错误 |
6C | XX | Le错误 |
6E | 00 | 无效的CLA |
6F | 00 | 数据无效 |
93 | 02 | MAC错误 |
93 | 03 | 应用已被锁定 |
94 | 01 | 金额不足 |
94 | 03 | 密钥未找到 |
94 | 06 | 所需的MAC不可用 |
注意:
当SW1的高半字节为‘9’,且低半字节不为‘0’时,其含义依赖于相关应用。
当SW1的高半字节为‘6’,且低半字节不为‘0’时,其含义与应用无关。