# VISA 证书验证：CA 密钥、发卡行证书与 EMV

> VISA 证书验证的工作原理——VSDC CA 公钥、发卡行证书验证、签名数据验证和 EMV 证书链。

Canonical: https://hsmkit.com/zh/guides/visa-certificate-validation-guide/

Last updated: 2026-05-21

VISA 证书验证是使用数字证书链验证 EMV 芯片卡真实性的过程。本指南解释 VISA 证书系统的工作原理，从 CA 公钥到发卡行证书验证。

## 什么是 VISA 证书验证？

VISA 证书验证是 EMV 芯片卡安全模型的一部分。当 VISA 卡（VSDC——VISA 智能借记/贷记卡）在终端使用时，终端必须验证卡片是真实的且未被篡改。这通过数字证书链完成。

证书链确保：
- 卡片由合法的发卡行发行
- 卡片的公钥是真实的
- 卡片上的数据未被修改

## EMV 证书链

EMV 证书链有三个层级：

```
证书颁发机构（CA）公钥
    └── 发卡行公钥证书
            └── ICC 公钥证书（在卡上）
```

### 层级 1：CA 公钥

- 信任根
- 由支付网络（VISA、Mastercard 等）拥有
- 预加载在终端中
- 用于验证发卡行证书

### 层级 2：发卡行公钥证书

- 由 CA 颁发给发卡行（银行）
- 包含发卡行的公钥
- 由 CA 的私钥签名

### 层级 3：ICC 公钥证书

- 由发卡行颁发给单张卡
- 包含卡片（ICC）的公钥
- 由发卡行的私钥签名

## VSDC CA 公钥

VSDC（VISA 智能借记/贷记卡）CA 公钥是 VISA EMV 证书系统的根密钥。

### 密钥属性

- **算法**：RSA
- **密钥大小**：1408、1728、1976 或 2048 位
- **指数**：通常为 65537（0x010001）
- **RID**：注册应用提供商标识符（VISA：`A000000003`）

### 密钥分发

CA 公钥通过以下方式分发到终端：

- 终端加载/密钥注入仪式
- 用于安全传输的 [TR-31 密钥块](/zh/guides/what-is-tr31-key-block/)
- 从支付网络直接加载

### 密钥索引（Index）

每个 CA 公钥都有一个索引（1-255）来标识它：

- 卡片存储所使用的 CA 密钥的索引
- 终端使用此索引选择正确的 CA 密钥
- 这使得无需重新发行所有终端即可进行密钥轮换

## 发卡行公钥证书

发卡行公钥证书由 CA 颁发给发卡行。它包含：

### 证书内容

- 发卡行公钥
- 发卡行标识符
- 证书过期日期
- 证书序列号

### 证书格式

证书是 RSA 数字签名：

```
证书 = RSA_Sign(CA_私钥, 证书数据)
```

其中证书数据包括：
- 证书头
- 发卡行公钥（模数和指数）
- 发卡行标识符
- 过期日期

### 验证过程

1. 终端从卡上提取证书
2. 终端检索 CA 公钥（使用 RID 和索引）
3. 终端使用 CA 公钥解密证书：
   ```
   解密结果 = RSA_Verify(CA_公钥, 证书)
   ```
4. 终端从解密数据中提取发卡行公钥
5. 终端验证证书未过期

## 签名数据验证

签名数据是卡上由发卡行签名的附加数据：

### 目的

签名数据为以下内容提供完整性保护：
- 卡上的静态数据（PAN、有效期等）
- 应用数据
- 其他关键字段

### 验证过程

1. 终端从卡上读取签名数据
2. 终端使用发卡行的公钥（从证书中获取）进行验证：
   ```
   有效 = RSA_Verify(发卡行公钥, 签名数据, 签名)
   ```
3. 如果验证成功，则数据是真实的

### 签名数据保护的内容

- 防止修改卡片数据
- 确保卡片未被克隆并使用不同数据
- 防止某些类型的欺诈

## 完整验证流程

### 步骤 1：选择应用

1. 终端向卡片发送 SELECT 命令
2. 卡片返回应用数据，包括：
   - RID（VISA 为 `A000000003`）
   - CA 公钥索引
   - 应用数据

### 步骤 2：检索 CA 公钥

1. 终端使用 RID 和索引查找 CA 公钥
2. 如果未找到密钥，交易可能以离线验证继续或被拒绝

### 步骤 3：读取发卡行证书

1. 终端从卡上读取发卡行公钥证书
2. 终端读取验证所需的附加数据

### 步骤 4：验证发卡行证书

1. 终端使用 CA 公钥解密证书
2. 终端提取发卡行公钥
3. 终端验证证书过期日期

### 步骤 5：读取 ICC 证书

1. 终端从卡上读取 ICC 公钥证书
2. 终端读取 ICC PIN 加密公钥（如果存在）

### 步骤 6：验证 ICC 证书

1. 终端使用发卡行公钥解密 ICC 证书
2. 终端提取 ICC 公钥
3. 终端验证证书过期日期

### 步骤 7：验证签名数据

1. 终端从卡上读取签名数据和签名
2. 终端使用发卡行公钥验证签名
3. 如果所有验证成功，则卡片是真实的

## 证书验证中的 RSA 操作

证书验证涉及多个 [RSA](/zh/guides/rsa-encryption-guide/) 操作：

### RSA 验证

```
签名^e mod n = 哈希(数据)
```

其中：
- `e` 是公钥指数
- `n` 是模数
- `哈希` 通常是 SHA-1（传统）或 SHA-256

### 证书恢复

对于 EMV 证书，过程包括：
1. 将证书提升到公钥指数的幂
2. 应用解密算法
3. 恢复签名数据
4. 验证哈希

这在 [HSM](/zh/guides/hsm-key-management-overview/) 中使用专门的 RSA 命令实现。

## 实际注意事项

### 终端实现

终端必须：
- 存储所有相关的 CA 公钥
- 实现完整的证书验证链
- 处理密钥索引查找
- 管理证书过期

### HSM 支持

[HSM](/zh/guides/hsm-key-management-overview/) 执行繁重的密码学操作：
- 用于证书恢复的 RSA 解密
- 哈希验证
- 密钥存储和管理

### 错误处理

如果证书验证失败：
- 交易应被拒绝
- 错误记录供调查
- 卡片可能被标记供审查

## 安全特性

### 信任链

证书链提供：
- 信任根（CA 密钥）
- 分层验证
- 各层级之间的密钥分离

### 防克隆

证书验证防止：
- 使用不同数据的卡片克隆
- 修改卡片数据
- 未授权的卡片发行

### 密钥轮换

系统支持密钥轮换：
- 可以分发新的 CA 密钥
- 可以逐步淘汰旧密钥
- 卡片携带所使用密钥的索引

## 常见问题

### 如果 CA 密钥泄露会怎样？

如果 CA 密钥泄露，由该密钥颁发的所有证书都可能无效。支付网络将颁发新的 CA 密钥并重新发行受影响的卡。

### 没有 HSM 可以验证证书吗？

虽然算法是已知的，但 HSM 提供：
- 安全的密钥存储
- 性能优化
- 符合支付网络要求

### CA 密钥多久轮换一次？

CA 密钥是长期的（数年到数十年）。轮换提前计划并在整个支付生态系统中协调。

### 离线和在线验证有什么区别？

- **离线**：终端在本地验证完整的证书链
- **在线**：证书验证可能由发卡行的 HSM 在授权期间执行

## 亲自尝试

使用我们的 VISA 证书验证工具理解和练习 EMV 证书验证：

- [VISA 证书验证工具](/payments-visa-certificates) —— 验证 CA 公钥、发卡行证书、ICC 证书和签名数据

所有处理在您的浏览器本地完成——您的密钥不会离开您的设备。
