← 返回知识库

EMV芯片卡交易流程与数据解析指南

约 3800 字 | EMV/PBOC 支付规范 | 2026-07

什么是 EMV?

EMV 是全球芯片卡支付的互操作标准,由 Europay、Mastercard 和 Visa 三大卡组织联合制定,现由 EMVCo 维护。在中国,银联基于 EMV 标准制定了 PBOC(中国金融集成电路卡)规范。市面上每张带芯片的银行卡——无论借记卡还是信用卡——都遵循 EMV/PBOC 协议。

对于智能卡工程师而言,理解 EMV 交易流程不仅是支付行业的入门课,也是理解"智能卡 + 终端 + 后台"三位一体协同工作的最佳范例。本文重点讲脱机数据认证(Offline Data Authentication)——这是 EMV 安全体系中对工程师最有技术含量的部分。

EMV 交易流程全景

一次完整的接触式 EMV 交易经历以下步骤:

1
应用选择(Application Selection)
终端发 SELECT 选择 PSE 或 PPSE,获取卡片支持的支付应用列表(AID)。用户或终端选择具体应用(如 PBOC 借记 vs 电子现金)。
2
应用初始化(Initiate Application Processing)
终端发 GPO(GET PROCESSING OPTIONS)指令,卡片返回 AFL(应用文件定位符)和 AIP(应用交互特征)。AFL 告诉终端"交易数据分布在哪些文件记录里"。
3
读取应用数据(Read Application Data)
终端按 AFL 指示逐条读取记录,获取卡号、有效期、发卡行公钥证书、持卡人验证方法列表等。这些数据用 BER-TLV 编码。
4
脱机数据认证(Offline Data Authentication)
这是安全核心!终端验证卡片的真实性,防止伪卡。三种方式:SDA(静态)、DDA(动态)、CDA(复合)。中国 PBOC 借记卡普遍使用 SDA,贷记卡推荐 DDA/CDA。
5
持卡人验证(Cardholder Verification)
验证持卡人身份:联机 PIN、脱机明文 PIN、脱机加密 PIN、或签名。国内借记卡通常用联机 PIN。
6
终端风险管理(Terminal Risk Management)
终端做 floor limit 检查、随机交易选择、异常文件检查,决定走脱机批准还是联机授权。
7
终端行为分析(Terminal Action Analysis)
终端汇总所有检查结果,发 GENERATE AC 指令请求卡片生成应用密文(ARQC/TC/AAC)。联机交易生成 ARQC 送后台验证。
8
联机处理 & 发卡行认证(Online Processing)
后台收到 ARQC 后做发卡行认证(验证卡片密钥的合法性),生成 ARPC 返回给终端。终端发 EXTERNAL AUTHENTICATE 将 ARPC 传给卡片验证。
9
交易完成(Transaction Completion)
卡片验证 ARPC 通过后,发卡行脚本(Issuer Script)可更新卡片参数(如重置 PIN 错误计数器)。终端生成 TC(交易证书)完成交易。
关键认知:EMV 安全分为"卡片真伪验证"(脱机数据认证)和"交易授权"(联机认证)两个独立环节。一张真卡也可能被拒绝交易——比如余额不足。这两个环节经常被混淆。

深入:脱机数据认证(SDA / DDA / CDA)

SDA — 静态数据认证

SDA 只验证静态应用数据的签名,不防止卡片复制。流程:

  1. 终端从卡片读取发卡行公钥证书(Tag 90)和签名的静态应用数据 SSAD(Tag 93)
  2. 用 CA 公钥(预置在终端)验证发卡行公钥证书 → 获得发卡行公钥
  3. 用发卡行公钥验证 SSAD 签名 → 确认数据未被篡改

SDA 的致命弱点:攻击者可以复制一张卡的完整静态数据(含签名)到另一张卡上,终端无法区分。因此 PBOC 3.0 已经不推荐借记卡单独使用 SDA

DDA — 动态数据认证

DDA 通过挑战-响应机制验证卡片持有私钥:

  1. 终端生成随机数,发 INTERNAL AUTHENTICATE 给卡片
  2. 卡片用 ICC 私钥对"随机数 + 卡片数据"签名,返回签名值
  3. 终端用卡片 ICC 公钥(从 ICC 公钥证书 Tag 9F46 中还原)验签

因为私钥不能从一张卡复制到另一张卡(安全芯片保护),所以 DDA 能有效防止伪卡。

CDA — 复合动态数据认证

CDA 是 DDA 的增强版:将 DDA 的签名操作与 GENERATE AC(生成应用密文)合并。卡片在生成 ARQC 的同时完成动态签名。这样做的好处是:连 ARQC 也被签名保护了——防止中间人篡改交易数据。

CDA 是 EMV 4.0+ 和 PBOC 3.0 推荐的最强脱机认证方式。

核心数据对象速查

Tag名称长度说明
5APAN(主账号)8~19 bytes银行卡号,采用 Luhn 算法校验
5F24应用失效日期3 bytesYYMMDD 格式
5F34PAN 序列号1 byte区分同一 PAN 下的多张卡
82AIP(应用交互特征)2 bytes卡片支持的认证方式:SDA/DDA/CDA、持卡人验证方法
94AFL(应用文件定位器)可变每个条目 4 字节:SFI + 首记录 + 末记录 + 脱机数据认证记录数
8CCDOL1(卡片风险管理数据对象列表1)可变卡片要求终端在 GENERATE AC 中包含的字段列表
8DCDOL2可变卡片要求终端在 GENERATE AC(第二次)中包含的字段
9F26应用密文 AC8 bytes卡片生成的 ARQC/TC/AAC
9F27密文信息数据 CID1 byte指示 AC 类型(ARQC=0x80, TC=0x40, AAC=0x00)
9F36ATC(应用交易计数器)2 bytes每笔交易递增的唯一计数器,防重放
9F10发卡行应用数据 IAD可变包含 CVR(卡片验证结果)、发卡行认证码等信息
9F46ICC 公钥证书可变用于 DDA/CDA 认证
90发卡行公钥证书可变用于 SDA 认证
9F6E第三方数据(如手机 NFC)可变Apple Pay/云闪付等附加数据

实战:解析一条 GPO 响应

以 PBOC 借记卡为例:

# GPO 命令
80 A8 00 00 02 83 00 00

# GPO 响应
77 0E 82 02 58 00 94 08 18 01 02 01 20 01 02 01 90 00

TLV 解析器拆解:

77 0E  → 响应模板,长度 14 字节
  82 02 58 00    → AIP = 0x5800
    0x5800 = 0101 1000 0000 0000
      bit 15 = 1 → SDA 支持
      bit 14 = 0 → DDA 不支持
      bit 13 = 1 → 持卡人验证支持
      bit 12 = 1 → 终端风险管理
      bit 8  = 1 → CDA 不支持
  94 08 18 01 02 01 20 01 02 01 → AFL
    条目1: 18 01 02 01 → SFI=0x18/8=3, 记录1~2, 脱机认证需1条
    条目2: 20 01 02 01 → SFI=0x20/8=4, 记录1~2, 脱机认证需1条
为什么 SFI 要除以 8?SFI 字段的高 5 位是真正的 SFI 值,低 3 位恒为 0。所以 0x18 >> 3 = 3。对,就是这么奇怪——这是为了在一个字节里同时编码 SFI 和访问模式。

PBOC vs EMV:中国版的差异

项目EMV 4.3PBOC 3.0
国密支持不支持可选择 SM2/SM3/SM4 替代 RSA/SHA-1/AES
脱机认证SDA/DDA/CDA同 EMV + 可选国密增强
电子现金Visa/MS 各自扩展银联电子现金(联机/脱机双模式)
非接交易qVSDC (Visa) / PayPass (MC)银联闪付(QuickPass),支持脱机/联机
可选应用信用卡/借记卡/预付费借记卡为主 + 社保一卡通 + 金融IC卡

相关工具:解析 EMV 数据常用的在线工具

📋 TLV 解析器 🏦 EMV 标签查询 🔍 AID 查询 💳 Luhn 校验 🏷️ ASN.1 解析器 📜 证书解析器