# ZKA：德国银行会话密钥与 PIN 标准

> 了解 ZKA 标准——会话密钥（SK-pac）派生、PIN 加密、MAC 计算，以及德国支付终端的要求。

Canonical: https://hsmkit.com/zh/guides/zka-german-banking-standard/

Last updated: 2026-05-21

ZKA（Zentraler Kreditausschuss，德国中央信贷委员会）是德国银行业用于安全 PIN 处理和消息认证的标准。本指南涵盖 ZKA 规范、会话密钥派生及其密码学操作。

## 什么是 ZKA？

ZKA 是由德国中央信贷委员会定义的标准，用于保护德国电子银行交易的安全。它规定：

- PIN 加密和验证
- 会话密钥派生
- MAC（消息认证码）计算
- 银行终端的密钥管理

ZKA 广泛应用于德国银行基础设施，包括 ATM、POS 终端和网上银行系统。它为德国银行生态系统特有的交易安全提供了标准化方法。

## 会话密钥派生

ZKA 的核心概念是**会话密钥**——为每个银行会话或交易派生的临时密钥。这限制了任何单个密钥泄露时的影响。

### 会话密钥组件

会话密钥从以下内容派生：

- **主密钥**：存储在 [HSM](/zh/guides/hsm-key-management-overview/) 中的长期密钥
- **交易数据**：来自当前交易的唯一数据（例如时间戳、序列号）
- **随机数据**：随机数或随机值以确保唯一性

### 派生过程

```
会话密钥 = KDF(主密钥, 交易数据 || 随机数据)
```

密钥派生函数（KDF）通常使用：

- CBC 模式下的 [3DES](/zh/guides/des-3des-legacy-encryption/) 加密
- 较新实现使用 [AES](/zh/guides/aes-encryption-explained/)
- 基于 CMAC 的派生以获得更强的安全性

### 密钥层次结构

```
主密钥（MK）
 ├── PIN 加密会话密钥
 ├── MAC 会话密钥
 └── 数据加密会话密钥
```

每个会话密钥独立派生，为不同安全功能提供密钥分离。

## SK-pac（PIN 和认证密文会话密钥）

SK-pac 是 ZKA 框架中用于 PIN 加密和认证的特定会话密钥。

### 用途

SK-pac 用于：

- 加密传输的 PIN 块
- 生成认证密文
- 验证交易完整性

### 派生

SK-pac 使用以下方式从主密钥派生：

```
SK-pac = Derive(MK, "pac" || 会话数据)
```

派生包含上下文标签（"pac"），以确保密钥仅用于其预期目的。

### 使用

1. 终端请求新会话
2. HSM 从主密钥派生 SK-pac
3. SK-pac 用于加密客户的 PIN
4. PIN 块安全传输
5. 接收方的 HSM 派生相同的 SK-pac 进行解密

## ZKA 中的 PIN 加密

ZKA 定义了如何加密 PIN 以进行安全传输：

### PIN 块格式

ZKA 通常使用 [ISO 9564 格式 0](/zh/guides/pin-block-formats-iso9564/) 作为 PIN 块格式：

```
PIN 块 = PIN 字段 XOR PAN 字段
```

PAN 字段使用标准 ISO-0 格式，包含 PAN 最右边 12 位数字。

### 加密过程

1. 客户在终端输入 PIN
2. 终端将 PIN 格式化为 ISO-0 PIN 块
3. PIN 块使用 SK-pac 加密
4. 加密的 PIN 块放入交易消息中
5. 消息发送到银行的 HSM 进行验证

### 密钥安全

- SK-pac 是会话密钥，仅对当前会话有效
- 即使被截获，密钥在会话后过期
- 主密钥永远不会在 [HSM](/zh/guides/hsm-key-management-overview/) 外暴露

## ZKA 中的 MAC 计算

ZKA 使用消息认证码确保交易完整性：

### MAC 算法

ZKA 通常使用基于 [3DES](/zh/guides/des-3des-legacy-encryption/) 的 CBC-MAC：

1. 将消息分成 8 字节块
2. 使用 MAC 会话密钥加密第一块
3. 将结果与下一块进行 XOR
4. 再次加密
5. 对所有块重复此过程
6. 最终结果是 MAC（截断为 4 或 8 字节）

### MAC 密钥派生

MAC 会话密钥从 SK-pac 单独派生：

```
SK-mac = Derive(MK, "mac" || 会话数据)
```

这提供了密钥分离——即使 PIN 密钥泄露，MAC 密钥仍然安全。

### MAC 验证

1. 发送方对交易消息计算 MAC
2. MAC 附加到消息中
3. 接收方使用相同密钥重新计算 MAC
4. 如果 MAC 匹配，则消息是真实的且未被修改

## 实际交易流程

### ATM 交易

1. 客户插入卡片并输入 PIN
2. ATM 与银行的 HSM 建立安全会话
3. HSM 为会话派生 SK-pac 和 SK-mac
4. ATM 使用 SK-pac 加密 PIN 块
5. ATM 使用 SK-mac 计算 MAC
6. 交易消息发送到银行
7. 银行的 HSM 验证 MAC 和 PIN
8. 交易授权或拒绝

### POS 交易

与 ATM 类似，但有一些额外考虑：

- 终端可能支持多种卡品牌
- 会话密钥可以预先派生以提高效率
- 非接触交易可能使用不同的会话管理

## ZKA 与国际标准对比

| 特性 | ZKA | ISO 9564 | ANSI X9.24 |
|------|-----|----------|------------|
| 区域 | 德国 | 国际 | 国际 |
| 会话密钥 | 是 | 可选 | 是 |
| MAC 标准 | CBC-MAC | N/A | CBC-MAC |
| 密钥派生 | ZKA 特定 | 标准 KDF | 标准 KDF |
| PIN 格式 | 格式 0 | 所有格式 | 所有格式 |

## 安全特性

### 密钥分离

ZKA 强制执行严格的密钥分离：

- PIN、MAC 和数据使用不同的会话密钥
- 上下文标签防止密钥误用
- 每个会话有唯一的密钥

### 会话隔离

每个银行会话使用新鲜密钥：

- 被泄露的会话密钥不影响其他会话
- 密钥在会话结束后过期
- 会话密钥的前向保密性

### 主密钥保护

主密钥永远不会离开 HSM：

- 所有密钥派生在 HSM 内部进行
- 会话密钥按需派生
- 主密钥组件分拆加载（参见[密钥分片指南](/zh/guides/understanding-key-splitting-kcv/)）

## 常见问题

### ZKA 只在德国使用吗？

ZKA 主要是德国银行标准，但可能被国际运营的德国银行使用。其他国家有自己的标准（例如澳大利亚的 AS2805）。

### ZKA 可以使用 AES 吗？

较新的 ZKA 实现支持 [AES](/zh/guides/aes-encryption-explained/) 加密，尽管 3DES 在传统系统中仍然常见。

### ZKA 与 EMV 有什么关系？

ZKA 在网络/主机级别运行，而 EMV 在卡/终端级别运行。它们相互补充——EMV 保护卡-终端接口，而 ZKA 保护终端-主机接口。

### ZKA 和 TR-31 有什么区别？

[TR-31](/zh/guides/what-is-tr31-key-block/) 是用于传输密钥的密钥块格式。ZKA 是定义密钥如何派生和使用的完整安全框架。TR-31 可以在 ZKA 实现中用于密钥传输。

## 亲自尝试

使用我们的 ZKA 工具理解和练习德国银行安全标准：

- [ZKA 工具](/payments-zka) —— 按照 ZKA 规范进行会话密钥派生、PIN 加密和 MAC 计算

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