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

Logo

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

更多推荐