密钥管理基础:对称与非对称密钥、密钥类型、加密算法概览
正式开始搭建KMS之前,咱们先把底层的密码学概念捋一遍。说实话,很多刚接触密钥管理的人,一上来就去搞HSM、搞密钥轮换,结果连对称和非对称的区别都说不清楚。
这就像盖楼不打地基——早晚要塌。
为什么需要密钥管理?
你想想看,数据加密就像给文件上了一把锁。钥匙就是密钥。如果钥匙随便乱放,或者所有门都用同一把钥匙,那加密还有什么意义?
我在项目中遇到过一家公司,他们把所有业务的加密密钥都写死在配置文件里,还放到Git仓库……结果一次代码泄露,整个数据库的密文全被解密了。嗯,从那以后,我再也不敢轻视密钥管理了。
密钥管理的本质就三件事:生成、存储、使用。但做好这三件事,远比想象中复杂。
核心理念:密钥的安全强度 = 密钥本身的强度 + 密钥生命周期的管控能力。后者往往更关键。
对称加密 vs 非对称加密
这是最基础也是最容易混淆的一对概念。我习惯用两句话来区分:
- 对称加密:加密和解密用同一把钥匙。就像你家大门,一把钥匙开关。
- 非对称加密:加密用公钥,解密用私钥。就像信箱,谁都能往里面塞信(公钥加密),但只有你有钥匙能打开看(私钥解密)。
具体区别?看这张表就清楚了。
| 维度 | 对称加密 | 非对称加密 |
|---|---|---|
| 密钥数量 | 1个(共享密钥) | 2个(公钥+私钥) |
| 性能 | 快(硬件加速后可达GB/s级) | 慢(比对称慢100-1000倍) |
| 典型算法 | AES、SM4、ChaCha20 | RSA、ECC(SM2)、DSA |
| 密钥分发 | 困难(需要安全通道传递密钥) | 容易(公钥可以公开) |
| 主要用途 | 大数据量加密(文件、数据库) | 数字签名、密钥交换、小数据加密 |
避坑提示:我曾经看到有人用RSA直接加密大文件(比如几百MB的视频),结果加密耗时十几分钟,解密也慢得离谱。正确做法是:用对称密钥加密数据,再用非对称加密保护对称密钥。
密钥类型分层
实际企业级KMS里,不会只有一种密钥。我们需要建立分层结构,降低风险。
常见的密钥分层是这样的:
- 主密钥(MK / Master Key) — 最顶层的根密钥,通常存储在HSM里,永远不解密到内存。
- 密钥加密密钥(KEK) — 用主密钥加密后存储,用于加密下级密钥。
- 数据加密密钥(DEK) — 真正用来加密业务数据的密钥。每个数据对象可以有自己的DEK。
你想想看,如果一张表里有100万条记录,每条记录都用不同的DEK加密,就算黑客搞到了一条DEK,他能解密的也就是那一条数据。损失可控。
下表总结了三种密钥的典型特征:
| 类型 | 生命周期 | 存储位置 | 更换频率 |
|---|---|---|---|
| 主密钥(MK) | 极长(数年) | HSM或离线保管 | 极少(仅在安全事件时更换) |
| 密钥加密密钥(KEK) | 较长(数月~年) | 加密后存数据库 | 定期(季度或半年度) |
| 数据加密密钥(DEK) | 短(数天~月) | 内存或加密后持久化 | 频繁(每次数据更新可换) |
加密算法概览
咱们在企业级KMS里打交道最多的算法,其实就那么几个。我把常用的列出来,顺带提一嘴我的选型习惯。
- AES(Advanced Encryption Standard) — 对称加密事实标准。推荐用AES-256-GCM(带认证加密,防篡改)。
- RSA(Rivest-Shamir-Adleman) — 非对称加密老大哥,密钥长度至少2048位。我一般只用来做密钥交换或数字签名,不加密大块数据。
- ECC(Elliptic Curve Cryptography) — 椭圆曲线,相同安全强度下密钥长度更短(256位ECC ≈ 3072位RSA)。推荐用曲线P-256或Curve25519。
- SM2 / SM4 — 国密算法。涉及国内合规场景时必须支持,但选型时要注意生态兼容性。
- ChaCha20-Poly1305 — 移动端和IoT场景的优选,比AES-GCM在无硬件加速时更快。
经验之谈:我建议新项目直接上AES-256-GCM + ECDH密钥交换。这套组合在安全性和性能上都很均衡,主流云KMS也都支持。
选型建议
最后给刚入门的朋友一个实用清单:
- 加密业务数据 → 用对称算法(AES-256-GCM)
- 保护对称密钥 → 用非对称算法或分层KEK
- 数字签名/身份认证 → 用非对称(RSA 2048+ 或 ECC P-256)
- 密钥存储 → 能放HSM就别放磁盘,能加密存就别明文存