ZKA(Zentraler Kreditausschuss,德国中央信贷委员会)是德国银行业用于安全 PIN 处理和消息认证的标准。本指南涵盖 ZKA 规范、会话密钥派生及其密码学操作。
什么是 ZKA?
ZKA 是由德国中央信贷委员会定义的标准,用于保护德国电子银行交易的安全。它规定:
- PIN 加密和验证
- 会话密钥派生
- MAC(消息认证码)计算
- 银行终端的密钥管理
ZKA 广泛应用于德国银行基础设施,包括 ATM、POS 终端和网上银行系统。它为德国银行生态系统特有的交易安全提供了标准化方法。
会话密钥派生
ZKA 的核心概念是会话密钥——为每个银行会话或交易派生的临时密钥。这限制了任何单个密钥泄露时的影响。
会话密钥组件
会话密钥从以下内容派生:
- 主密钥:存储在 HSM 中的长期密钥
- 交易数据:来自当前交易的唯一数据(例如时间戳、序列号)
- 随机数据:随机数或随机值以确保唯一性
派生过程
会话密钥 = KDF(主密钥, 交易数据 || 随机数据)
密钥派生函数(KDF)通常使用:
密钥层次结构
主密钥(MK)
├── PIN 加密会话密钥
├── MAC 会话密钥
└── 数据加密会话密钥
每个会话密钥独立派生,为不同安全功能提供密钥分离。
SK-pac(PIN 和认证密文会话密钥)
SK-pac 是 ZKA 框架中用于 PIN 加密和认证的特定会话密钥。
用途
SK-pac 用于:
- 加密传输的 PIN 块
- 生成认证密文
- 验证交易完整性
派生
SK-pac 使用以下方式从主密钥派生:
SK-pac = Derive(MK, "pac" || 会话数据)
派生包含上下文标签("pac"),以确保密钥仅用于其预期目的。
使用
- 终端请求新会话
- HSM 从主密钥派生 SK-pac
- SK-pac 用于加密客户的 PIN
- PIN 块安全传输
- 接收方的 HSM 派生相同的 SK-pac 进行解密
ZKA 中的 PIN 加密
ZKA 定义了如何加密 PIN 以进行安全传输:
PIN 块格式
ZKA 通常使用 ISO 9564 格式 0 作为 PIN 块格式:
PIN 块 = PIN 字段 XOR PAN 字段
PAN 字段使用标准 ISO-0 格式,包含 PAN 最右边 12 位数字。
加密过程
- 客户在终端输入 PIN
- 终端将 PIN 格式化为 ISO-0 PIN 块
- PIN 块使用 SK-pac 加密
- 加密的 PIN 块放入交易消息中
- 消息发送到银行的 HSM 进行验证
密钥安全
- SK-pac 是会话密钥,仅对当前会话有效
- 即使被截获,密钥在会话后过期
- 主密钥永远不会在 HSM 外暴露
ZKA 中的 MAC 计算
ZKA 使用消息认证码确保交易完整性:
MAC 算法
ZKA 通常使用基于 3DES 的 CBC-MAC:
- 将消息分成 8 字节块
- 使用 MAC 会话密钥加密第一块
- 将结果与下一块进行 XOR
- 再次加密
- 对所有块重复此过程
- 最终结果是 MAC(截断为 4 或 8 字节)
MAC 密钥派生
MAC 会话密钥从 SK-pac 单独派生:
SK-mac = Derive(MK, "mac" || 会话数据)
这提供了密钥分离——即使 PIN 密钥泄露,MAC 密钥仍然安全。
MAC 验证
- 发送方对交易消息计算 MAC
- MAC 附加到消息中
- 接收方使用相同密钥重新计算 MAC
- 如果 MAC 匹配,则消息是真实的且未被修改
实际交易流程
ATM 交易
- 客户插入卡片并输入 PIN
- ATM 与银行的 HSM 建立安全会话
- HSM 为会话派生 SK-pac 和 SK-mac
- ATM 使用 SK-pac 加密 PIN 块
- ATM 使用 SK-mac 计算 MAC
- 交易消息发送到银行
- 银行的 HSM 验证 MAC 和 PIN
- 交易授权或拒绝
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 内部进行
- 会话密钥按需派生
- 主密钥组件分拆加载(参见密钥分片指南)
常见问题
ZKA 只在德国使用吗?
ZKA 主要是德国银行标准,但可能被国际运营的德国银行使用。其他国家有自己的标准(例如澳大利亚的 AS2805)。
ZKA 可以使用 AES 吗?
较新的 ZKA 实现支持 AES 加密,尽管 3DES 在传统系统中仍然常见。
ZKA 与 EMV 有什么关系?
ZKA 在网络/主机级别运行,而 EMV 在卡/终端级别运行。它们相互补充——EMV 保护卡-终端接口,而 ZKA 保护终端-主机接口。
ZKA 和 TR-31 有什么区别?
TR-31 是用于传输密钥的密钥块格式。ZKA 是定义密钥如何派生和使用的完整安全框架。TR-31 可以在 ZKA 实现中用于密钥传输。
亲自尝试
使用我们的 ZKA 工具理解和练习德国银行安全标准:
- ZKA 工具 —— 按照 ZKA 规范进行会话密钥派生、PIN 加密和 MAC 计算
所有处理在您的浏览器本地完成——您的主密钥不会离开您的设备。