密钥生成策略:对称 vs 非对称、随机数、密钥长度与 HSM

密钥生成,是整个设备安全的第一道关卡。说白了一句话:密钥如果生成得不够随机,后面所有加密都是白搭。我见过太多项目,密钥本身没问题,但生成过程有漏洞,结果被攻击者轻松猜出来。今天咱们就把这块掰开揉碎了讲。

对称密钥 vs 非对称密钥:什么时候该用谁?

先搞清楚一个基本问题:你生成的密钥是用来干嘛的?

对称密钥,就是加密和解密用同一个密钥。优点是快,特别快。我做过一个智能门锁的项目,MCU 主频才 80MHz,用 AES-128 加密一次握手数据只要几十微秒。但缺点也明显——密钥怎么安全地分发给对方?

非对称密钥,公钥加密、私钥解密,或者私钥签名、公钥验签。慢,但解决了密钥分发问题。比如设备出厂时烧入私钥,服务器存公钥,双方不用提前共享同一个秘密。

我个人习惯的选型原则是这样的:

场景 推荐方案 原因
设备与服务器通信加密 对称密钥(会话密钥) 速度快,适合大量数据
设备身份认证 非对称密钥(签名/验签) 私钥不泄露,防伪造
固件安全更新 非对称签名 + 对称解密 签名验来源,解密保内容
传感器数据上报 对称密钥(预置) 资源受限,能省则省

嗯,这里要注意:实际产品中往往是混合使用。比如 TLS 握手阶段用非对称交换密钥,后续通信用对称加密。别死磕只用一种。

随机数生成器:TRNG 和 PRNG,别搞混了

密钥的随机性,直接决定了它能不能扛住暴力破解。随机数生成器分两种:真随机数生成器(TRNG) 和 伪随机数生成器(PRNG)。

TRNG 靠物理噪声源,比如芯片内部的热噪声、时钟抖动、放射性衰变。优点是真正不可预测。缺点是速度慢,而且硬件成本高。我做过一个安全芯片的项目,TRNG 模块占了整个芯片面积的 5%,就为了那点熵。

PRNG 靠算法加种子(seed)来生成看似随机的序列。速度快,但种子一旦泄露或不够随机,整个序列都能被复现。你想想看,如果种子用的是系统时间戳,攻击者只要知道大致时间范围,就能缩小搜索空间。

实际项目中,我建议这样搭配:

  • 用 TRNG 生成种子,哪怕只采集 256 位真随机数,也足够安全。
  • 用 PRNG 扩展出大量密钥,比如 CTR_DRBG、Hash_DRBG 这类标准算法。
  • 定期重新播种,防止 PRNG 状态被逆向。

我曾经踩过的坑: 有个项目用了芯片内置的 PRNG,但没检查它是否已经过 NIST SP 800-90A 认证。结果量产时发现随机数质量不达标,密钥空间实际只有理论值的一半。从那以后,我每次选型都会要求厂商提供随机数测试报告。

密钥长度与安全强度:不是越长越好

很多人觉得密钥越长越安全,这话对了一半。密钥长度确实影响安全强度,但也要考虑性能和成本。

我整理了一个对照表,方便你快速参考:

算法 密钥长度(位) 安全强度(位) 推荐场景
AES 128 128 物联网设备、低功耗场景
AES 256 256 金融、政府等高安全场景
RSA 2048 112 传统系统、兼容性要求高
RSA 4096 128 对性能不敏感的场景
ECC(P-256) 256 128 资源受限设备、现代协议
ECC(P-384) 384 192 长期安全、顶级防护

你看,RSA 2048 位才提供 112 位安全强度,而 ECC 256 位就能达到 128 位。说白了,ECC 在同等安全强度下密钥更短,这对 IoT 设备来说太重要了——存储空间、传输带宽、计算开销都能省不少。

我的建议: 新项目优先选 ECC,特别是 P-256 或 P-384。如果必须兼容老系统,RSA 2048 是底线,别再往下走了。RSA 1024 位已经被破解,别问我怎么知道的——我见过有人还在用。

硬件安全模块(HSM)生成:为什么我坚持用硬件?

软件生成密钥,密钥在内存里是明文。攻击者只要能读到内存,密钥就没了。HSM 就是专门干这个的——在硬件内部生成、存储和使用密钥,密钥永远不出模块。

HSM 生成密钥的核心流程:

  1. TRNG 采集熵:HSM 内部集成真随机数发生器,采集物理噪声。
  2. 密钥派生:用标准算法(如 NIST SP 800-56C)从熵源派生出最终密钥。
  3. 密钥封装:生成的密钥可以直接存储在 HSM 的安全存储区,或者用传输密钥加密后导出。
  4. 生命周期绑定:密钥可以关联到特定用途(签名、加密、认证),防止滥用。

我在一个车联网项目里用过某款工业级 HSM,生成一对 ECC P-256 密钥只需要 50 毫秒,而且整个过程密钥在外部完全不可见。你想想看,如果换成软件生成,密钥在内存里停留的那几微秒,都可能被侧信道攻击抓走。

关键点: HSM 生成密钥的优势不在于速度,而在于密钥材料从不暴露在安全边界之外。即使攻击者拿到了设备的管理员权限,只要 HSM 没被物理破解,密钥就是安全的。

知识体系总览

下面这张图把本章的核心逻辑串起来了,建议你保存下来对照着看:

密钥生成策略知识体系 密钥生成策略 对称 vs 非对称 随机数生成器 密钥长度与安全强度 对称:AES 非对称:ECC/RSA TRNG PRNG 128/256 位 2048/4096 位 硬件安全模块(HSM) TRNG 采集熵 密钥派生(NIST SP 800-56C) 密钥封装与安全存储 核心:密钥不出安全边界

实战建议:怎么选?

最后给你几条我这些年总结出来的经验:

  • 能用硬件就别用软件:哪怕只是一个便宜的 TPM 或 Secure Element,也比纯软件方案强一个数量级。
  • TRNG 是底线:如果芯片没有 TRNG,至少用多个独立熵源混合(比如 ADC 噪声 + 时钟抖动)。
  • 密钥长度选当前主流:对称 128 位起步,非对称 ECC P-256 或 RSA 2048。别为了省那几字节存储去用 64 位密钥——我见过有人这么干,结果被暴力破解了。
  • 生成后立即验证:密钥生成完,跑一遍 Known Answer Test(KAT),确保硬件没出故障。

一个小技巧: 量产时可以用 HSM 批量生成密钥对,然后通过安全通道注入到设备中。这样既保证了随机性,又避免了每台设备单独生成带来的性能瓶颈。我在一个百万级出货的项目里就是这么干的,效率提升了 10 倍。