smartcard
7816简介
7816协议,也称为ISO/IEC 7816,是一种定义智能卡(IC卡)与智能卡读卡器之间通讯的国际标准。它规定了智能卡与读卡器之间的物理接口、电气特性、传输协议以及数据元素等。该协议的目标是确保智能卡可以与各种读卡器设备进行兼容性通信,并保护智能卡内的数据安全。
7816协议的主要内容包括以下几个方面:
物理接口和电气特性:协议规定了智能卡的触点分配和电气特性,包括电源输入(VCC)、地线(GND)、复位(RST)、输入/输出(I/O)以及时钟(CLK)等。这些触点用于智能卡与读卡器之间的电气连接和数据传输。
传输协议:7816协议采用了全双工通信方式,即智能卡和读卡器可以同时发送和接收数据。这种通信方式提高了数据传输的效率,并方便了读卡器对智能卡的管理和控制。协议还规定了数据传输的时序和时钟同步方式,确保数据的正确传输。
通信指令和数据交换格式:协议定义了一系列通信指令和数据交换格式,用于智能卡与读卡器之间的信息交互。这些指令包括选择文件、读取二进制数据、更新二进制数据等,用于对智能卡内的数据进行读取、写入和修改操作。
安全认证和密钥交换:7816协议还提供了一些特殊的指令和数据格式,用于智能卡与读卡器之间的安全认证和密钥交换。这些机制可以保护智能卡内的敏感数据不被非法访问和篡改。
7816协议在智能卡领域有着广泛的应用,特别是在金融、电信等领域。例如,银行卡、电子钱包等支付工具就采用了7816协议进行数据传输和安全认证,确保用户的账户信息和资金安全。此外,在移动通信和物联网领域,智能卡也扮演着存储用户信息和提供身份认证的重要角色。
APDU指令
ISO/IEC 7816-4 标准中定义的 APDU (Application Protocol Data Unit) 指令是用于智能卡(IC卡)和读卡器之间进行通信的基本单元。APDU 指令包括一个头部和一个可选的数据体。头部由 CLA(类别字节)、INS(指令字节)、P1 和 P2(参数字节)组成,而数据体则包含实际要传输到卡片或从卡片接收的数据。
APDU 指令结构详解
字段 | 描述 | 长度 |
---|---|---|
CLA | 类别字节,用于识别应用和它们专有的命令组。 | 1 字节 |
INS | 指令字节,对实际的命令进行编码。 | 1 字节 |
P1 | 参数1字节,用于详细说明具体指令。 | 1 字节 |
P2 | 参数2字节,用于详细说明具体指令。 | 1 字节 |
Le (可选) | 期望返回数据的长度。当 Le 为 00 时,表示不期望返回数据。 | 1 字节 |
Lc (可选) | 发送数据的长度。当存在数据体时,Lc 表示数据体的长度。 | 1 字节 |
Data (可选) | 数据体,包含要发送到卡片或从卡片接收的数据。 | 可变长度 |
SW1, SW2 | 状态字,表示命令执行的结果。 | 2 字节 |
APDU 指令的几种情况
Case1
- APDU 格式:
[CLA] [INS] [P1] [P2]
- 示例:
80 00 00 00 00
(SELECT 命令,选择应用)
- APDU 格式:
Case2
- APDU 格式:
[CLA] [INS] [P1] [P2] [Le]
- 示例:
00 B0 00 00 04
(READ BINARY 命令,读取二进制数据,期望返回4个字节)
- APDU 格式:
Case3
- APDU 格式:
[CLA] [INS] [P1] [P2] [Lc] [Data]
- 示例:
00 D6 00 00 04 [Data]
(UPDATE BINARY 命令,更新二进制数据)
- APDU 格式:
Case4
- APDU 格式:
[CLA] [INS] [P1] [P2] [Lc] [Data] [Le]
- 示例:
80 AE 00 00 04 [Data] 00
(APDU 命令与响应结合的例子)
- APDU 格式:
在 APDU 指令中,CLA、INS、P1 和 P2 是固定的头部字段,而 Lc、Data 和 Le 是可选的,取决于具体的通信需求。状态字 SW1 和 SW2 用于表示命令执行的结果,其中 SW1 的高位为 '9' 通常表示命令执行成功,而 SW1 的高位为 '6' 到 'F' 则表示出现错误。