分类: 嵌入式
2012-12-05 17:12:28
为了运行一个应用,在终端上还要实现一个附加的应用协议层。
应用层发出的命令报文和卡片回送到应用层的应答报文统称为应用协议数据单元(APDU)。应答是和命令相对应的,通常被称为APDU命令-应答对。
1.1.1 命令APDU格式命令APDU由一个4字节长的必备头后跟一个变长的条件体组成,见图12:
CLA | INS | P1 | P2 | Lc | Data | Le |
← | 必备头 | → | ← | 条件体 | → |
图 12 - 命令 APDU 结构
命令APDU报文的内容见表30:
代码 | 描述 | 长度 |
CLA | 命令类别 | 1 |
INS | 指令代码 | 1 |
P1 | 指令参数1 | 1 |
P2 | 指令参数2 | 1 |
Lc | 命令数据域中存在的字节数 | 0或1 |
Data | 命令发送的数据位串(=Lc) | 变长 |
Le | 应答数据域中期望的最大数据字节数 | 0或1 |
应答APDU格式由一个变长的条件体和后随两字节长的必备尾组成,见图13:
Data | SW1 | SW2 | ||||
← | 条件体 | → | ← | 必备尾 | → |
图 13 – 应答 APDU 结构
应答APDU中接收到的数据字节数用Lr(应答数据域长度)表示。Lr不通过传输层返回,应用在需要时可以依靠应答报文数据域对象结构计算出Lr。
应答结尾的2个字节代码是命令的处理状态,它们通过传输层回送。
应答APDU的内容见表31:
代码 | 描述 | 长度 |
Data | 应答中接收的数据位串 | 变长(=Lr) |
SW1 | 命令处理状态 | 1 |
SW2 | 命令处理限定 | 1 |
表 31 – 应答 APDU 内容
1.2 读记录(READ RECORD)命令-应答APDU读记录命令用于读取线性文件中的记录。
IC卡的应答由回送记录组成。
1.2.2 命令报文读记录命令报文编码见表33:
代码 | 值 |
CLA | ‘00’ |
INS | ‘B2’ |
P1 | 记录号 |
P2 | 引用控制参数(见表34) |
Lc | 不存在 |
Data | 不存在 |
Le | ‘00’ |
表33 – 读记录命令报文
表34定义了命令报文的引用控制参数。
b8 | b7 | b6 | b5 | b4 | b3 | b2 | b1 | 含义 |
X | X | X | X | X | SF1 | |||
1 | 0 | 0 | P1为记录号 |
表34 – 读记录命令引用控制参数
1.2.3 命令报文数据域命令报文数据域不存在。
1.2.4 应答报文数据域执行成功的读记录命令的应答报文数据域由读取的记录组成。在应用选择过程中读取的记录是目录记录(格式由8.2.3节定义)。应用处理中读取的记录格式与应用有关。
1.2.5 应答报文状态码此命令执行成功的状态码是‘9000’。
1.3 选择(SELECT)命令-应答APDU选择命令通过文件名或AID来选择IC卡中的PSE、DDF或ADF。应用选择在本规范的第8章中描述。
成功执行该命令设定PSE、DDF或ADF的路径。后续命令作用于与用SFI选定的PSE、DDF或ADF相联系的AEF。
从IC卡返回的应答报文包含回送FCI。
1.3.2 命令报文选择命令报文编码见表35:
代码 | 值 |
CLA | ‘00’ |
INS | ‘A4’ |
P1 | 引用控制参数(见表36) |
P2 | 选择选项(见表37) |
Lc | ‘05’ - ‘10’ |
Data | 文件名 |
Le | ‘00’ |
表 35 - SELECT命令报文
表36定义了选择(SELECT)命令报文的引用控制参数:
b8 | b7 | b6 | b5 | b4 | b3 | b2 | b1 | 含义 |
0 | 0 | 0 | 0 | 0 | ||||
1 | 通过名称选择 | |||||||
0 | 0 |
表 36 - SELECT命令引用控制参数
表37定义了选择(SELECT)命令报文的选择选项P2:
b8 | b7 | b6 | b5 | b4 | b3 | b2 | B1 | 含义 |
0 | 0 | 第一个有或仅有一个 | ||||||
1 | 0 | 下一个 |
表 37 - 选择(SELECT)命令的可选参数
1.3.3 命令报文数据域命令报文数据域应包括所选择的PSE名、DF名或AID。
1.3.4 应答报文数据域应答报文中数据域应包括所选择的PSE、DDF或ADF的FCI。表38、表39和表40定义了本规范所应用的标识。对于本规范所不规定的FCI中回送的附加标签应该被忽略。
表38定义了成功选择PSE后回送的FCI:
标识 | 值 | 存在性 | |||
‘6F’ | FCI模板 | M | |||
‘84’ | DF名 | M | |||
‘A5’ | FCI数据专用模板 | M | |||
‘88’ | 目录基本文件的SFI | M | |||
‘5F2D’ | 语言选择 | O | |||
‘9F11’ | 发卡行代码表索引 | O | |||
‘BF0C’ | 发卡行自定义数据(FC-I) | O | |||
‘XXXX’ (第3册规定的标签) | 来自从应用提供商、发卡行或IC卡供应商的1个或多个附加(专用)数据元。 | O |
表 38 - 选择PSE的应答报文 (FCI)
表39定义了成功选择DDF后回送的FCI:
标签 | 值 | 存在性 | |||
‘6F’ | FCI模板 | M | |||
‘84’ | DF名 | M | |||
‘A5’ | FCI数据专用模板 | M | |||
‘88’ | 目录基本文件的SFI | M | |||
‘BF0C’ | 发卡行自定义数据(FCI) | O | |||
‘XXXX’ (第3册规定的标识符) | 来自从应用提供商、发卡行或IC卡供应商的1个或多个附加(专用)数据元。 | O |
表 39 – 选择DDF的应答报文 (FCI)
表40定义了成功选择ADF后回送的FCI:
标签 | 值 | 存在性 | |||
‘6F’ | FCI模板 | M | |||
‘84’ | DF名 | M | |||
‘A5’ | FCI数据专用模板 | M | |||
‘50’ | 应用标签 | M | |||
‘87’ | 应用优先指示符 | O | |||
‘9F38’ | PDOL | O | |||
‘5F2D’ | 首选语言 | O | |||
‘9F11’ | 发卡行代码表索引 | O | |||
‘9F12’ | 应用优先名称 | O | |||
‘BF0C’ | 发卡行自定义数据(FCI) | O | |||
‘XXXX’ (第3册规定的标识符) | 来自从应用提供商、发卡行或IC卡供应商的1个或多个附加(专用)数据元。 | O |
表 40 – 选择ADF的应答报文 (FCI)
注意:对于多应用卡片,强烈建议在响应报文中包含“应用标签”数据元,使得在终端用“AID列表”方法进行应用选择时,能方便持卡人选择/确认应用。
1.3.5 应答报文状态码
此命令执行成功的状态码是‘9000’。