APDU格式详解
- 2014-11-26 15:37:21
- admin
- 17786
- 最后编辑:admin 于 2014-12-11 15:27:27
APDU定义了主机和JAVA卡之间交互的数据格式,绝大部分卡片遵循此数据格式,当然为了保密或其它原因是可以自定义新的数据格式。APDU分为发送命令(C-APDU)和返回命令(R-APDU)。
一、C-APDU元素说明:
发送命令(C-APDU)的格式如下,包含一个必须头部段和一个可选数据段:
1、CLA(1字节):用于命令类别的标示,传输安全控制,传输信道说明等。
比特值 |
说明 |
0XXXXXXX |
为ISO规定的指令类别,0x00,0x04(线路保护)等 |
1XXXXXXX |
为私有自定义指令类别,0x80,0x84(线路保护)等 |
2、INS(1字节):用于指明CLA字段中标示的指令类中的一个特定指令。
ISO的INS值 |
命令描述 |
0E |
Erase Binary |
20 |
Verify |
70 |
Manage Channel |
82 |
External Authenticate |
84 |
Get Challenge |
88 |
Internal Authenticate |
A4 |
Select File |
B0 |
Read Binary |
B2 |
Read Record(s) |
C0 |
Get Response |
C2 |
Envelope |
CA |
Get Data |
D0 |
Write Binary |
D2 |
Write Record |
D6 |
Update Binary |
DA |
Put Data |
DC |
Update Record |
E2 |
Append Record |
3、P1(1字节):指令参数1,如没有填0x00。
4、P2(1字节):指令参数2,如没有填0x00。
5、LC(1字节):这个可选的字段是命令的数据字段的字节数。
6、LE(1字节):这个可选的字段指定在期望响应的数据字段中的极限字节数。
7、四种C-APDU结构如下:
二、R-APDU元素说明:
返回命令(R-APDU)的格式如下,包含一个可选数据段和一个必须状态值:
数据字段(可变长度,由APDU命令中的LE确定):这个可选择的字段包含卡片返回的数据。
SW1(1字节):这个必要的字段是状态字1。
SW2(1字节):这个必要的字段是状态字2。
SW1-SW2成功一般为9000,其他值为某种状态、警告或者错误!
常用SW1-SW2值:
9000: 执行成功
6100: 数据被截断
6283: 应用无效
6300: 认证失败
6400: 原因不明
6700: 长度不对
6982: 需要PIN验证
6983: 文件无效
6984: 数据无效
6985: 条件不满足
6986: 不允许该命令
6982: 安全条件不满足
6987: 安全消息丢失
6988: 安全消息不正确
6999: 应用选择失败
6A80: 数据错误
6A81: 功能不支持
6A82: 文件找不到
6A83: 记录找不到
6A84: 没有足够的空间
6A86: 不正确的参数(P1,P2)
6A88: 引用数据没找到
6B00: 错误的参数 (P1,P2)
6C00: 长度错误 (Le)
6D00: INS不支持
6E00: CLA 不支持
6F00: 未知错误