smartcard

7816简介

7816协议,也称为ISO/IEC 7816,是一种定义智能卡(IC卡)与智能卡读卡器之间通讯的国际标准。它规定了智能卡与读卡器之间的物理接口、电气特性、传输协议以及数据元素等。该协议的目标是确保智能卡可以与各种读卡器设备进行兼容性通信,并保护智能卡内的数据安全。

7816协议的主要内容包括以下几个方面:

  1. 物理接口和电气特性:协议规定了智能卡的触点分配和电气特性,包括电源输入(VCC)、地线(GND)、复位(RST)、输入/输出(I/O)以及时钟(CLK)等。这些触点用于智能卡与读卡器之间的电气连接和数据传输。

  2. 传输协议:7816协议采用了全双工通信方式,即智能卡和读卡器可以同时发送和接收数据。这种通信方式提高了数据传输的效率,并方便了读卡器对智能卡的管理和控制。协议还规定了数据传输的时序和时钟同步方式,确保数据的正确传输。

  3. 通信指令和数据交换格式:协议定义了一系列通信指令和数据交换格式,用于智能卡与读卡器之间的信息交互。这些指令包括选择文件、读取二进制数据、更新二进制数据等,用于对智能卡内的数据进行读取、写入和修改操作。

  4. 安全认证和密钥交换: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 命令,选择应用)
  • Case2

    • APDU 格式:[CLA] [INS] [P1] [P2] [Le]
    • 示例:00 B0 00 00 04(READ BINARY 命令,读取二进制数据,期望返回4个字节)
  • Case3

    • APDU 格式:[CLA] [INS] [P1] [P2] [Lc] [Data]
    • 示例:00 D6 00 00 04 [Data](UPDATE BINARY 命令,更新二进制数据)
  • Case4

    • APDU 格式:[CLA] [INS] [P1] [P2] [Lc] [Data] [Le]
    • 示例:80 AE 00 00 04 [Data] 00(APDU 命令与响应结合的例子)

在 APDU 指令中,CLA、INS、P1 和 P2 是固定的头部字段,而 Lc、Data 和 Le 是可选的,取决于具体的通信需求。状态字 SW1 和 SW2 用于表示命令执行的结果,其中 SW1 的高位为 '9' 通常表示命令执行成功,而 SW1 的高位为 '6' 到 'F' 则表示出现错误。