密钥分片(也称为密钥共享或密钥组件管理)是加密密钥管理中的基本安全实践。本指南解释了其数学原理、合规要求和实际实现。
什么是密钥分片?
密钥分片是将加密密钥分割成多个组件(分片)的过程,使得:
- 没有单个人知道完整的密钥
- 只有当所有分片组合在一起时才能重建原始密钥
- 每个分片都不会泄露关于原始密钥的任何信息
这一实践是 PCI DSS(支付卡行业数据安全标准)对敏感加密密钥管理的强制要求。
为什么需要密钥分片?
- 双重控制:确保没有单个人可以访问完整密钥
- 分离知识:每个保管人只知道他们的部分
- 审计合规:PCI DSS、PCI PIN 和其他安全标准的要求
- 风险缓解:泄露一个分片不会危及整个密钥
XOR 背后的数学原理
密钥分片通常使用 XOR(异或) 运算。工作原理如下:
XOR 真值表
| A | B | A ⊕ B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
关键特性
XOR 有一个特殊的属性,使其非常适合密钥分片:
A ⊕ B ⊕ B = A
这意味着如果你用某个值对一个数进行 XOR,然后再用同样的值进行 XOR,你会得到原始值!
示例:2 路分片
给定密钥 K,我们可以将其分成两个分片:
- 生成随机分片
S1 - 计算
S2 = K ⊕ S1
重建:K = S1 ⊕ S2
示例:3 路分片
对于 3 路分片:
- 生成随机分片
S1 - 生成随机分片
S2 - 计算
S3 = K ⊕ S1 ⊕ S2
重建:K = S1 ⊕ S2 ⊕ S3
理解密钥校验值 (KCV)
密钥校验值 (KCV) 是一种加密校验和,用于验证密钥是否已正确输入或传输,而不会泄露密钥本身。
KCV 如何计算
对于 DES/3DES 密钥:
- 加密一个全零块(8 字节的
0x00) - 取结果的前 3 或 6 个字节
对于 AES 密钥:
- 加密一个全零块(16 字节的
0x00) - 取结果的前 3 或 6 个字节
KCV 特性
- 确定性:相同的密钥始终产生相同的 KCV
- 不可逆:无法从 KCV 推导出密钥
- 抗碰撞:不同的密钥产生不同的 KCV(高概率)
实际使用
通过密钥分片交换密钥时:
- 每个保管人输入他们的分片
- 系统对所有分片进行 XOR 以获得组合密钥
- 系统计算组合密钥的 KCV
- 将 KCV 与预期值进行比较
- 如果匹配:密钥正确。如果不匹配:需要重新输入。
密钥奇偶校验(仅限 DES 密钥)
DES 密钥有 奇偶校验 的概念。每个字节有 7 位实际密钥数据和 1 位奇偶校验位。奇偶校验位确保每个字节有奇数个 1 位。
奇偶校验示例
之前:0101 0100(4 个 1 - 偶数)
之后:0101 0101(5 个 1 - 奇数,奇偶校验位已设置)
对于 DES 密钥,组合密钥分片后始终要调整奇偶校验。
最佳实践
- 使用安全生成:使用加密安全的随机数生成器生成分片
- 使用 KCV 验证:始终使用 KCV 验证组合密钥
- 分离保管:将分片存储在不同的安全位置
- 记录程序:维护清晰的密钥仪式程序
- 定期轮换:实施密钥轮换计划
亲自尝试
准备好生成密钥分片了吗?使用我们的免费在线密钥分片生成器工具:
- 将密钥分成 2 或 3 个组件
- 自动计算 KCV
- 调整 DES 密钥奇偶校验
- 导出以进行安全分发
该工具完全在您的浏览器中运行 - 您的密钥永远不会离开您的设备。