密钥体系入门:对称加密与非对称加密、密钥的生命周期、密钥存储的安全要求
好,我们正式开始聊密钥。说实话,很多做身份认证的方案最后翻车,问题都出在密钥管理上。算法再强,密钥泄露了,一切归零。这一节,我把密钥体系里最核心的几个概念掰开揉碎讲清楚。
对称加密 vs 非对称加密:两个流派
加密算法分两大阵营。对称加密,说白了就是加密和解密用同一把钥匙。你想想看,就像你家大门钥匙,自己锁门自己开。非对称加密呢,有两把钥匙——公钥和私钥。公钥可以公开,私钥自己藏好。
我在项目中遇到过不少新人,一上来就问「哪个更安全?」。其实这不是安全性的问题,是场景的问题。
| 特性 | 对称加密 | 非对称加密 |
|---|---|---|
| 密钥数量 | 1 个(共享密钥) | 2 个(公钥 + 私钥) |
| 计算速度 | 快(适合大数据量) | 慢(适合小数据量) |
| 密钥分发 | 困难(需要安全通道) | 容易(公钥可公开) |
| 典型算法 | AES, ChaCha20, SM4 | RSA, ECDSA, SM2 |
| 典型用途 | 数据加密、通信加密 | 数字签名、密钥交换 |
实战经验:我个人的习惯是,能用对称加密的地方绝不用非对称。比如传输大量业务数据,先用 ECDH 协商出一个对称密钥,再用 AES 加密数据。这样既解决了密钥分发问题,又保证了性能。
密钥的生命周期:从生到死
密钥不是永久的。它有自己的生命周期。我见过最惨的一次事故,就是因为用了三年前的旧密钥,攻击者早就拿到了备份,结果整个系统被脱库。
一个标准的密钥生命周期,分这么几个阶段:
- 生成——必须用真随机数发生器,不能用伪随机。我曾经见过有人用
Math.random()生成密钥,嗯,那基本等于没锁门。 - 分发——对称密钥的分发是最头疼的。非对称密钥相对简单,但私钥的传输必须离线或通过加密通道。
- 使用——使用过程中要记录密钥的用途、使用次数、使用时间。别让一把密钥干所有事。
- 轮换——密钥必须定期更换。我建议最长不超过一年,高安全场景三个月一换。
- 吊销——密钥泄露或人员离职,必须立即吊销。吊销列表(CRL)要实时更新。
- 销毁——密钥退役后,必须彻底销毁。不能只是删文件,要覆写、物理销毁。
避坑指南:我曾经在一个项目中,发现开发同学把密钥销毁写成了「删除文件」。你以为删了就没了?文件系统的「删除」只是标记为可覆盖,数据还在磁盘上。正确的做法是用 shred 或硬件安全模块的销毁接口。
密钥存储的安全要求
密钥存哪儿?这是个大学问。我见过最离谱的,是把私钥写在配置文件里,明文提交到 Git 仓库。嗯,那基本等于把银行密码贴在ATM机上。
安全的密钥存储,有几个硬性要求:
- 硬件隔离——高安全场景必须用 HSM(硬件安全模块)或 TPM(可信平台模块)。密钥永远不出硬件。
- 加密存储——如果必须存文件,至少用主密钥加密后再存。主密钥再存到另一个地方。
- 访问控制——谁能用这把密钥?什么时候能用?从哪个 IP 能用?都要严格控制。
- 审计日志——每次密钥的读取、使用、修改都要记录。出了问题才能追溯。
- 备份与容灾——密钥丢了,数据就废了。但备份本身又要安全。我建议用 Shamir 秘密共享算法拆分备份。
小技巧:如果你用云服务,优先用云厂商的 KMS(密钥管理服务)。别自己造轮子。AWS KMS、阿里云 KMS、腾讯云 KMS 都经过了大量安全审计,比自己写一个靠谱得多。
密钥体系核心逻辑图
下面这张图,把密钥体系的几个核心模块串起来了。你仔细看一遍,基本就能理解密钥从生成到销毁的全流程。
总结一下
密钥体系是整个身份认证的基石。对称加密和非对称加密各有各的战场,别混用。密钥的生命周期要管好,从生成到销毁每一步都不能马虎。存储方面,能用硬件就别用软件,能用 KMS 就别自己写。
嗯,这一节的内容就到这里。记住一句话:密钥安全,就是系统安全。密钥丢了,什么都没了。