# Mastercard 动态 CVC3：EMV 验证与 ATC

> 了解 Mastercard 动态 CVC3——EMV 验证流程、应用交易计数器（ATC）、不可预测数和磁道数据的使用。

Canonical: https://hsmkit.com/zh/guides/mastercard-dynamic-cvc3-guide/

Last updated: 2026-05-21

Mastercard 动态 CVC3 是一种每笔交易都会变化的卡验证值，比静态 CVV 码提供更强的安全性。本指南解释 CVC3 在 EMV 非接触和芯片交易中的工作原理。

## 什么是动态 CVC3？

动态 CVC3（卡验证码 3）是 Mastercard 的动态卡验证实现。与印刷在卡上的静态 CVV 不同，CVC3 使用存储在卡片芯片中的密钥为每笔交易重新生成。

这使得被盗的 CVC3 值对未来交易毫无用处——相比静态 [CVV/CVC](/zh/guides/cvv-cvc-calculation-methods/)，这是显著的安全改进。

## EMV 动态验证工作原理

EMV 芯片卡使用挑战-响应机制进行动态验证：

1. **终端发送挑战**：POS 终端生成不可预测数（UN）
2. **卡片计算响应**：芯片使用其密钥、ATC 和 UN 生成 CVC3
3. **终端转发结果**：CVC3 包含在授权消息中
4. **发卡行验证**：发卡行的 HSM 使用相同输入重新计算 CVC3 并进行比较

### 关键组件

- **应用交易计数器（ATC）**：芯片中的计数器，每笔交易递增。它确保即使其他输入相同，每笔交易也会产生不同的 CVC3。
- **不可预测数（UN）**：由终端生成的随机或伪随机值，用于防止重放攻击。
- **卡片密钥**：从发卡行主密钥（IMK）派生的密钥，每张卡唯一。

## CVC3 计算过程

### 输入

- **ATC**：2 字节计数器（0x0000 到 0xFFFF）
- **不可预测数**：由终端生成的 4 字节
- **磁道 2 数据**：包含 PAN、有效期和服务码
- **卡片密钥**：使用 PAN 从 IMK 派生

### 算法步骤

**步骤 1：派生卡片密钥**

卡特定密钥从发卡行主密钥派生：

```
卡片密钥 = DerivedKey(IMK, PAN)
```

这使用标准 EMV 密钥派生方法，通常涉及以 PAN 作为多样化数据进行 [3DES](/zh/guides/des-3des-legacy-encryption/) 加密。

**步骤 2：构造数据块**

连接 ATC、不可预测数和相关磁道 2 数据：

```
数据块 = ATC || UN || 磁道2数据
```

磁道 2 数据通常包括 PAN（不含校验位）、有效期和服务码。

**步骤 3：计算 CVC3**

使用卡片密钥加密数据块：

```
CVC3 = Encrypt(卡片密钥, 数据块)
```

结果通过十进制化处理以提取数字 CVC3 值（非接触通常为 5 位）。

**步骤 4：截断为 5 位**

CVC3 被截断为 5 位十进制数字，用于包含在交易消息中。

## ATC（应用交易计数器）

ATC 是动态 CVC3 的关键组件：

- **大小**：2 字节（16 位），允许 65,536 个唯一值
- **递增**：每笔交易增加 1
- **持久性**：存储在芯片的非易失性存储器中
- **溢出**：当 ATC 达到 0xFFFF 时，卡片可能被阻止

### ATC 的安全作用

ATC 确保即使：
- 同一张卡在同一终端使用
- 终端生成相同的不可预测数（不太可能）
- 存在相同的磁道 2 数据

...CVC3 仍然会不同，因为 ATC 已经改变。

## 不可预测数

不可预测数（UN）增加了另一层随机性：

- 由 POS 终端生成
- 必须不可预测以防止预计算攻击
- 通常为 4 字节（32 位）
- 包含在授权消息中供发卡行验证

### UN 生成

良好的 UN 生成使用：
- 终端中的密码学随机数生成器
- 硬件 RNG
- 时间戳和随机种子的组合

## 磁道数据在 CVC3 中的作用

等效磁道 2 数据提供卡特定信息：

```
磁道 2 数据 = PAN || 分隔符 || 有效期 || 服务码 || 自由数据
```

对于 CVC3 计算，通常仅使用此数据的部分：
- PAN（不含校验位）
- 有效期
- 服务码

## 实际交易流程

### 非接触支付

1. 客户在非接触读卡器上拍卡
2. 终端生成不可预测数
3. 终端向卡片发送 GET PROCESSING OPTIONS 命令
4. 卡片递增 ATC
5. 终端发送包含 UN 的 COMPUTE CVC3 命令
6. 卡片使用 ATC、UN 和磁道 2 数据计算 CVC3
7. 卡片返回 CVC3 和 ATC
8. 终端在授权消息中包含 CVC3、ATC 和 UN
9. 收单方转发到 Mastercard 网络
10. 发卡行 HSM 验证 CVC3

### 芯片（接触）支付

接触芯片交易的过程类似，但：
- 终端通过芯片接触接口通信
- 可能涉及额外的 EMV 命令
- CVC3 可能是更大密文（ARQC）的一部分

## 安全分析

### 为什么 CVC3 是安全的

1. **动态**：每笔交易都会变化
2. **密钥依赖**：需要卡片的密钥才能计算
3. **多因素**：结合 ATC、UN 和卡片数据
4. **防重放**：被盗的 CVC3 值无法重复使用

### 局限性

1. **仅卡端**：安全性取决于芯片密钥未被提取
2. **ATC 耗尽**：65,536 笔交易后，卡片可能需要更换
3. **终端信任**：不可预测数必须真正不可预测

## CVC3 与其他验证方法对比

| 方法 | 动态？ | 位数 | 卡类型 | 用例 |
|------|--------|------|--------|------|
| CVV1 | 否 | 3 | 磁条 | 持卡交易 |
| CVV2 | 否 | 3 | 印刷 | 无卡交易 |
| CVC3 | 是 | 5 | 芯片/非接触 | 动态验证 |
| iCVV | 否 | 3 | 芯片 | 静态芯片验证 |

## 亲自尝试

使用我们的 Mastercard CVC3 工具理解和验证动态卡验证：

- [Mastercard CVC3 计算器](/payments-card-validation-mastercard-cvc3) —— 使用 ATC、不可预测数和磁道 2 数据计算 CVC3 值

所有计算在您的浏览器中运行——您的卡片密钥不会离开您的设备。
