3. 密钥生成与管理:RSA/ECC密钥对生成、HSM安全存储、密钥生命周期、密钥备份与恢复
密钥管理这事儿,说小了是生成几个文件,说大了能决定整个物联网平台的生死。我见过太多项目,设备证书体系搭得漂漂亮亮,结果密钥管理一塌糊涂,最后被攻击者从私钥入手直接捅穿。嗯,咱们今天就把这块硬骨头啃透。
3.1 密钥对生成:RSA 还是 ECC?
选算法之前,先想清楚你的设备是什么资源水平。我个人的习惯是:能上 ECC 就别用 RSA。为什么?
| 对比维度 | RSA-2048 | ECC P-256 |
|---|---|---|
| 密钥长度 | 2048 bit | 256 bit |
| 签名速度 | 较慢 | 快 3~5 倍 |
| CPU 占用 | 高 | 低 |
| 安全等级 | 112 位 | 128 位 |
| 适合场景 | 网关、服务器 | MCU、传感器 |
说白了,ECC 用更短的密钥达到更高的安全强度。你在一个 100MHz 的 Cortex-M4 上跑 RSA-2048 签名,可能要等好几秒;换成 ECC P-256,几百毫秒就完事。我在一个智能门锁项目里就吃过 RSA 的亏——用户按指纹后要等 3 秒才能开门,体验极差。后来换成 ECC,延迟降到 0.4 秒。
核心原则:新设计优先选 ECC P-256 或 P-384。除非你有兼容旧系统的硬性要求,否则别碰 RSA-1024(已不安全)和 RSA-4096(太慢)。
3.1.1 生成命令示例
用 OpenSSL 生成 ECC P-256 密钥对,我一般这么写:
# 生成 ECC 私钥(P-256 曲线)
openssl ecparam -genkey -name prime256v1 -out device_priv.pem
# 从私钥导出公钥
openssl ec -in device_priv.pem -pubout -out device_pub.pem
# 查看密钥详情
openssl ec -in device_priv.pem -text -noout
如果是 RSA,命令稍微不同:
# 生成 RSA 2048 私钥
openssl genrsa -out rsa_priv.pem 2048
# 导出公钥
openssl rsa -in rsa_priv.pem -pubout -out rsa_pub.pem
小技巧:生产环境别用 PEM 格式存私钥,它没加密。用 openssl pkcs8 -topk8 加一层 AES-256 加密再存盘。
3.2 HSM 安全存储:把私钥锁进保险柜
私钥放在文件系统里?那跟把家门钥匙贴在门上有什么区别。真正的生产环境,私钥必须进 HSM(硬件安全模块)。
HSM 是什么?你可以把它理解成一个专门干密码学操作的保险柜。私钥一旦生成在 HSM 内部,就永远无法以明文形式导出。所有签名、解密操作都在 HSM 芯片里完成,外部只能拿到结果。
我曾在某车联网平台遇到过一件事:开发人员图省事,把根 CA 私钥放在一台云服务器上,还忘了设文件权限。结果被内部员工拷走,整个证书体系都得重建。那次之后,我定了一条死规矩——所有 CA 级私钥必须进 HSM。
3.2.1 HSM 选型参考
| 类型 | 代表产品 | 适用场景 | 价格区间 |
|---|---|---|---|
| 独立 HSM | Thales Luna, Utimaco | 根 CA、中间 CA | ¥5万~¥50万 |
| 云 HSM | AWS CloudHSM, Azure Dedicated HSM | 云端 CA 集群 | 按小时计费 |
| 安全芯片 | ATECC608A, SE050 | 物联网终端设备 | ¥5~¥30 |
| TEE | ARM TrustZone, Intel SGX | 手机、网关 | 集成在 SoC 中 |
注意:别把 HSM 当成万能药。HSM 只保护密钥不被导出,但谁有权调用 HSM 的签名接口才是真正的安全边界。访问控制策略没设好,HSM 就是个昂贵的签名机器人。
3.3 密钥生命周期:从生到死都要管
密钥不是生成出来就完事了。它有自己的生命周期,每个阶段都有坑。我画了一张图帮你理清脉络:
每个阶段都有要注意的地方。我挑几个重点说说。
3.3.1 密钥轮换策略
密钥用久了,泄露风险会累积。我建议的轮换周期:
- 根 CA 密钥:5~10 年轮换一次,物理 HSM 存储
- 中间 CA 密钥:2~3 年轮换一次
- 设备证书密钥:随证书有效期轮换,通常 1~2 年
- 会话密钥:每次会话重新生成
避坑指南:我曾经见过一个项目,设备密钥轮换时没做灰度发布,结果 10 万台设备同时发起证书更新请求,CA 服务器直接被打挂。后来我改成按设备批次轮换,每次只更新 5%,平稳多了。
3.4 密钥备份与恢复:最后的救命稻草
密钥丢了,比密钥泄露更可怕。泄露了还能吊销,丢了就真的什么都没了。我见过一个智慧城市项目,根 CA 所在的 HSM 因为机房火灾被烧毁,而他们从来没做过备份……嗯,整个城市的设备证书体系都得重建,损失几千万。
3.4.1 备份策略
| 密钥类型 | 备份方式 | 存储位置 | 恢复验证频率 |
|---|---|---|---|
| 根 CA 私钥 | HSM 密钥分割(Shamir 秘密共享) | 异地保险柜 + 云 HSM | 每季度一次 |
| 中间 CA 私钥 | HSM 加密导出 + 离线存储 | 异地机房 | 每月一次 |
| 设备私钥 | 不备份(重新签发) | — | — |
注意看,设备私钥我建议不备份。为什么?因为设备私钥数量太大,备份本身就是风险。丢了就重新签发证书,成本更低。
3.4.2 Shamir 秘密共享示例
根 CA 私钥的备份,我推荐用 Shamir 秘密共享。把私钥拆成 5 份,任意 3 份就能恢复。这样既防单点故障,又防单人作恶。
# 使用 ssss 工具拆分密钥(5 份中需 3 份恢复)
ssss-split -t 3 -n 5 < root_ca_priv.pem
# 输出类似:
# 1-abc123...
# 2-def456...
# 3-ghi789...
# 4-jkl012...
# 5-mno345...
# 恢复时:
ssss-combine -t 3
# 输入任意 3 份即可还原原始私钥
重要:备份恢复流程必须每年至少演练一次。别等到真出事才发现恢复脚本早就跑不通了。我每年都会拉上运维团队做一次「密钥恢复演习」,模拟 HSM 损坏场景,从异地取回密钥碎片,重新构建 CA 环境。第一次演练时,我们发现备份磁带已经发霉读不出来了……从那以后,我们改用固态介质 + 云存储双备份。
3.5 本章小结
密钥管理没有银弹。我的经验是:算法选 ECC,存储用 HSM,流程自动化,备份要演练。这四个点做到位,你的物联网证书体系就稳了八成。剩下的两成,靠制度和审计来补。
嗯,记住一句话:密钥管理不是技术问题,是管理问题。技术手段再强,人掉链子一样白搭。