智能卡应用协议数据单元(APDU)
智能卡应用协议数据单元(APDU)
·
1. 引言
在智能卡的上下文中,应用协议数据单元(APDU)是Smart card readers智能卡读卡器与智能卡之间的通信单元。APDU 的结构由 ISO/IEC 7816-4 组织、安全性和交换命令 定义。
应用协议数据单元(APDU)是特殊的通信单元,其定义见 ISO/IEC 7816-4。与 Type 4 Tag 交互的 APDU 子集在nRF Connect SDK 库中实现。
命令 APDU(C-APDU)是由轮询设备发送的命令,而响应 APDU(R-APDU)是轮询设备从标签接收的特定命令的响应。
APDU 读/写模块提供了根据描述符对 C-APDU 进行编码的功能,并能够将原始 R-APDU 数据解码为相应的描述符。
nRF Connect SDK 库可与 NFC 读卡器 ST25R3911B 库结合使用,以交换 NFC Type 4 Tag 数据。
2. APDU 消息的命令-响应对
APDU 分为两类:命令 APDU 和响应 APDU。
- 命令 APDU 由读卡器发送至智能卡,它包含一个强制性的 4-字节 header(CLA、INS、P1、P2)以及 0 到 65,535 字节的数据。
- 响应 APDU 由智能卡发送至读卡器,它包含 0 到 65,536 字节的数据,以及 2 个强制性的状态字节(SW1、SW2)。
命令 APDU | ||
---|---|---|
字段名称 | 长度(字节) | 描述 |
CLA | 1 | 指令类别:指示命令的类型,如,行业通用或专有命令 |
INS | 1 | 指令代码:指示具体的命令,如 “select”(选择)、“write data”(写入数据) |
P1-P2 | 2 | 指令参数:如数据写入的文件偏移量 |
L c L_c Lc | 0、1 或 3 | 编码后续命令数据的字节数 ( N c N_c Nc): 0 字节表示 N c = 0 N_c=0 Nc=0; 1 字节表示 N c N_c Nc 的值范围 1 到 255; 3 字节(第一字节必须为 0)表示 N c N_c Nc值 在 1 到 65,535 之间(3个字节不能都为零)。 |
命令数据 | N c N_c Nc | N c N_c Nc 字节的数据 |
L e L_e Le | 0、1、2 或 3 | 编码期望的最大响应字节数 ( N e N_e Ne): 0 字节表示 N e = 0 N_e=0 Ne=0; 1 字节表示 N e N_e Ne 的值范围 1 到 255,或 0 表示 N e = 256 N_e=256 Ne=256; 2 字节(如果命令中存在扩展 L c L_c Lc)表示 1 到 65,535 之间的 Ne,或两个零字节表示 65,536; 3 字节(如果命令中未出现 L c L_c Lc),第一个字节必须为 0所表示 的 N e N_e Ne,与 2 字节 L e L_e Le 具有相同的方式。 |
响应 APDU | ||
响应数据 | N r N_r Nr(最多为 N e N_e Ne) | 响应数据 |
SW1-SW2(响应结尾) | 2 | 命令处理状态,如十六进制的 90 00 表示成功。 |
3. Type 4 Tag 平台的APDU
对于 Type 4 Tag 平台,有三种相关的 APDU 类型:
APDU 类型 | 用途 |
---|---|
Select | 选择应用程序或文件。 |
ReadBinary | 从文件中读取数据。 |
UpdateBinary | 向文件中写入数据。 |
C-APDU 和 R-APDU 格式
C-APDU 由以下字段组成:
字段 | 长度 | 必需 | 描述 |
---|---|---|---|
CLA | 1 字节 | 是 | 指定消息的安全级别。 |
INS | 1 字节 | 是 | 指定要处理的命令类型。 |
P1 | 1 字节 | 是 | 指定所选命令类型的第一个参数。 |
P2 | 1 字节 | 是 | 指定所选命令类型的第二个参数。 |
Lc | 1 或 3 字节 | 否 | 指定数据长度。 |
Data | Lc 字节 | 否 | 如果存在 LC 字段,则必需。包含 C-APDU 的有效负载。 |
Le | 1 或 2 字节 | 否 | 指定 R-APDU 预期的响应体长度。 |
R-APDU 由以下字段组成:
字段 | 长度 | 必需 | 描述 |
---|---|---|---|
响应体 | 可变 | 否 | 携带 R-APDU 的数据。 |
SW1 | 1 字节 | 是 | 指定第一个状态字。 |
SW2 | 1 字节 | 是 | 指定第二个状态字。 |
参考资料
[1] Wiki百科 Smart card application protocol data unit
[2] APDU reader and writer

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)