密码学基础回顾:对称加密、非对称加密、哈希
做 KMS 和 HSM 集成这么多年,我经常跟团队说一句话:不懂密码学基础,就别碰密钥管理。这章我们快速过一遍三大核心算法族——对称加密、非对称加密、哈希。你别当复习课听,我会讲点实际项目里踩过的坑。
对称加密:快,但钥匙怎么分?
对称加密,说白了就一把钥匙。加密用它,解密也用它。算法上 AES(尤其 AES-256)现在是公认的标配。我在给某金融机构做 HSM 迁移时遇到过老系统还在用 DES,嗯,当时吓得我连夜写了风险评估报告——DES 的 56 位密钥,用现在的 GPU 集群几小时就爆了。
说到模式,大家最常用的是 AES-GCM 和 AES-CBC。我个人的习惯是:能上 GCM 就别用 CBC。为什么?
- GCM 是认证加密模式,自带完整性校验。加密的同时生成 MAC,防止篡改。我做过一个网关项目,用 CBC 加密后忘了加 HMAC,结果被中间人改密文导致业务崩溃。惨痛教训。
- CBC 需要一个随机 IV,而且不防篡改。你必须在外面再套一层 HMAC,麻烦且容易出错。
对称加密主要用在大量数据加密(比如数据库存储加密、文件加密),因为性能极高。HSM 里硬件加速 AES-GCM 带宽可以到 10 Gbps+,软件实现的话就差远了。
避坑点:我曾经在配置 KMS 的 envelope encryption 时,习惯把数据密钥(DEK)直接挂在密文头上。结果有人反馈说 DEK 长度不对——原来我用的是 256 位密钥,但某个 SDK 默认只读 128 位。从此我强制在协议头里显式写明密钥算法和长度,不能依赖隐式约定。
非对称加密:公私钥分离,性能是瓶颈
非对称加密(也称公钥加密)解决了对称加密最头疼的问题——密钥分发。你留私钥,我拿公钥,就能安全通信。主流算法:RSA、ECC(椭圆曲线),现在还有后量子算法在路上了。
RSA 密钥长度推荐 2048 位以上。3072 位是当前主流,4096 位虽然更安全但签名/解密慢得让人抓狂。我测过一台 HSM 跑 RSA-4096 签名,每秒不到 2000 次,而 ECC P-256 能到 5 万次。所以,能上 ECC 就别硬扛 RSA。
非对称加密在 KMS 场景里最常见的用途:
- 密钥协商(如 ECDH)——建立共享秘密。
- 数字签名(如 ECDSA、RSA-PSS)——验证数据来源和完整性。
- 证书签发——PKI 的命根子。
但注意:非对称加密不适合加密大块数据。RSA 加密长度受限(2048 位密钥最多加密 245 字节)。所以实际方案都是“混合加密”:用非对称加密保护对称密钥,再用对称加密处理真实数据。这就是 KMS 里 envelope encryption 的底层逻辑。
我记得有个客户想把整个数据库用 RSA 加密,我赶紧叫停——真那么干,加密 1GB 数据得花几个小时,而且密钥长度限制导致逻辑极其复杂。后来改成 AES-256-GCM + RSA 密钥包装,性能提升上千倍。
哈希:指纹,不是加密
哈希函数把任意长度数据映射成固定长度的摘要。注意,它不是加密——加密可逆,哈希不可逆。大家最熟的 SHA-256(输出 256 位)和 SHA-3(新一代标准)。
哈希在密钥管理里的应用很广:
- 密钥派生:用 KDF(如 HKDF)从主密钥派生子密钥,底层依赖哈希。
- 完整性校验:计算文件或消息的哈希值,比对是否被篡改。
- 口令存储:不能明文存密码,要用加盐哈希(如 bcrypt、scrypt)。
- 证书指纹:CA 对证书内容的哈希值做签名,验证时重新算一次。
我曾经被问过一个很尴尬的问题:“SHA-256 碰撞概率多大?” 嗯,理论上 2^128 次尝试才会有一半概率碰撞。你想想看,这个数字比宇宙原子数还大。但注意——MD5 和 SHA-1 已经彻底不安全了。我在项目评审时只要看到 SHA-1 就无条件打回,哪怕只是用来做校验和。Google 在 2017 年就演示了 SHA-1 碰撞攻击(SHAttered),成本才 11 万美元。
三者关系——一个完整的加密场景
我把对称加密、非对称加密、哈希结合起来画张图,你看一眼就明白了。
这张图展示了一个典型的 密钥封装流程:数据用 DEK(对称)加密,DEK 用 KEK(非对称)加密,哈希全程保障完整性。你想想看,这就是 KMS 中最核心的“envelope encryption”思想——每一层密钥都被上一层的密钥保护,只有根密钥存在 HSM 里。
算法选择速查表
| 用途 | 推荐算法 | 密钥长度 | 注意事项 |
|---|---|---|---|
| 批量数据加密 | AES-256-GCM | 256 bit | 必须用随机 IV,首选 12 字节 |
| 密钥传输/交换 | ECDH + HKDF | P-256 / P-384 | 配合盐值进行密钥派生 |
| 数字签名 | ECDSA P-256 | 256 bit | 性能优于 RSA-2048 约 10 倍 |
| 完整性 + 防篡改 | SHA-256 + HMAC | — | HMAC 密钥必须独立于加密密钥 |
| 口令存储 | scrypt / Argon2id | — | 绝不能只用 SHA-256 加盐 |
最后说一句
对称加密、非对称加密、哈希,不是三个孤立的知识点。它们组合起来才构成安全的密钥管理体系。HSM 本质上就是硬件加速这三种运算,并保证私钥永远不离开安全边界。下一层我们就会讲 HSM 到底是怎么把密钥锁在那一小块芯片里的——嗯,那里可有不少坑等着你。