第3章 密钥管理基础:非对称密钥生成、存储、生命周期及常见算法(RSA/ECC)
密钥管理这事,说简单也简单,说复杂能写一本书。我个人习惯是把密钥当作「数字资产」来看——你一旦丢了私钥,那跟丢了钱包没啥两样。我在项目里见过不少开发同学,把私钥直接硬编码在代码里,或者随手一个chmod 777。嗯,后果嘛……补丁发了一整夜。
这一章,咱们就聊聊非对称密钥的生成、存储、生命周期,还有最常见的RSA和ECC。你如果能把这里面的关键点吃透,后面做PKI SDK接口改造就顺多了。
3.1 非对称密钥的基本概念
非对称密钥,说白了就是一对儿钥匙:公钥公开,私钥私藏。公钥加密的数据只有私钥能解开,私钥签名的数据公钥能验。这个「非对称」的特性,让它成为数字证书、SSL/TLS、数字签名的基石。
- 公钥:可以随便发给别人,不怕泄露。
- 私钥:必须严格保护,一旦泄露,安全体系就垮了。
- 密钥对:由特定算法一次性生成,数学上相关联。
3.2 常见算法:RSA与ECC
目前最主流的非对称算法就两个:RSA 和 ECC(椭圆曲线)。RSA 已经用了四十多年,可靠但慢;ECC 是后起之秀,同等安全强度下密钥短,性能高。你想想看,移动端、IoT 设备现在基本都倾向 ECC。
| 特性 | RSA | ECC |
|---|---|---|
| 安全强度 | 基于大整数分解 | 基于椭圆曲线离散对数 |
| 密钥长度(等效128位对称加密) | 3072位 | 256位 |
| 签名/加密性能 | 慢(尤其密钥生成) | 快(尤其密钥生成) |
| 常见曲线/模长 | 2048、4096位 | P-256、P-384、P-521 |
| 典型场景 | 传统PKI、证书签发 | 移动端、区块链、TLS 1.3 |
注意:NIST 已经建议 2030 年后逐步淘汰 2048位以下 RSA。我个人建议新产品直接上 ECC P-256,省心。
3.3 密钥生成实践
生成密钥对,最常用的工具是 OpenSSL。我曾经在一个项目中需要批量生成几千个设备证书,脚本里用的就是下面这两行。生成过程要依赖系统的随机数发生器——质量不够的话,密钥就有规律可循,那等于没锁门。
# 生成 RSA 2048 位私钥
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out rsa_private.pem
# 从私钥提取公钥
openssl pkey -in rsa_private.pem -pubout -out rsa_public.pem
# 生成 ECC P-256 私钥
openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:prime256v1 -out ecc_private.pem
# 提取公钥
openssl pkey -in ecc_private.pem -pubout -out ecc_public.pem
/dev/urandom替代/dev/random才解决。生产环境务必检查随机数质量,必要时配硬件熵源。
3.4 密钥存储
私钥存哪儿?你想想看,文件系统的权限控制够吗?对于个人开发环境,PEM 文件加文件权限 400 勉强可行。但到了企业级,必须上硬件安全模块(HSM)或专用密钥管理服务(KMS)。
- 文件系统:最不推荐。容易误操作、被木马读取。
- 密钥库(PKCS#12 / JKS):可以用密码保护,但密码本身又成了新问题。
- HSM / TPM:私钥永远不出硬件,签名在芯片内部完成。最安全。
- 云 KMS:比如 AWS KMS、阿里云 KMS,适合云原生架构。
3.5 密钥生命周期
密钥不是「生成→用到死」。每个密钥都有生命周期,从生到死都得管起来。我习惯用下面这张图来跟团队对齐流程。
步骤看起来不少,但核心就这六步。我特别想强调一点:轮换和吊销是两个容易混淆的概念。轮换是定期换新密钥,旧的停止使用但保留验证;吊销是密钥出了问题(泄露、人员离职),立即标记为无效。
- 生成:使用安全随机数,选择合适算法和密钥长度。
- 分发:公钥通过证书方式分发;私钥通过带外安全通道交付。
- 使用:签名、加密、TLS握手等。
- 轮换:按照安全策略定期更换(比如每1年)。
- 吊销:发现泄露或策略变更时,通过CRL/OCSP宣告无效。
- 销毁:彻底删除私钥,包括备份,确保不可恢复。