3. 密码学基础(下):对称加密与非对称加密、密钥管理、硬件安全模块(HSM/TPM)简介

好,我们接着往下聊。上一节我们把哈希、HMAC、数字签名这些基础概念过了一遍。这一节,咱们得把加密本身掰开揉碎了讲清楚。说白了,安全启动的整个链条,就是靠加密算法把信任从硬件一层层传递到操作系统。你如果不懂对称和非对称的区别,后面看代码签名、固件加密、密钥存储这些环节,会非常吃力。

我个人习惯把这一节分成三块:加密算法本身、密钥怎么管、以及硬件怎么帮你守住密钥。咱们一个一个来。

3.1 对称加密 vs 非对称加密:到底差在哪?

先问个问题:你给朋友发一个加密文件,你用密码锁上,他拿同一个密码解开——这叫对称加密。但如果你把锁挂在门口,谁都可以往里面塞东西,只有你有钥匙能打开——这叫非对称加密。

对称加密,加密和解密用的是同一把密钥。速度快,适合加密大量数据。我在项目中遇到过用 AES-128 加密固件镜像的场景,几兆的固件,几毫秒就搞定了。常用的对称算法有:

  • AES(Advanced Encryption Standard):目前最主流,密钥长度支持 128、192、256 位。安全启动里最常见的是 AES-128。
  • SM4:国密标准,国内很多 IoT 芯片强制要求。
  • ChaCha20:流密码,在资源受限的 MCU 上表现很好,我最近一个低功耗项目就在用。

非对称加密,加密和解密用一对密钥:公钥公开,私钥保密。公钥加密的数据只有私钥能解;私钥签名的数据,公钥能验。速度慢,通常只用来加密对称密钥或做数字签名。常用算法:

  • RSA:老牌算法,2048 位以上才安全。签名验证慢,但生态成熟。
  • ECC(椭圆曲线):256 位的 ECC 安全性相当于 3072 位的 RSA,密钥更小,适合嵌入式。
  • SM2:国密椭圆曲线算法,国内安全启动方案里越来越常见。

核心区别一句话:对称加密快,但密钥分发难;非对称加密慢,但解决了密钥分发问题。实际方案里,两者配合使用——非对称加密传递对称密钥,对称密钥加密实际数据。这叫“混合加密”。

下面这张图把两者的关系画清楚了:

对称加密 vs 非对称加密 对比图 对称加密 同一把密钥加密和解密 速度快,适合大量数据 密钥分发困难 非对称加密 公钥加密,私钥解密 速度慢,适合小数据 公钥可公开,私钥保密 实际方案:混合加密 非对称加密传递对称密钥 → 对称密钥加密实际数据 既解决了密钥分发,又保证了加解密速度 安全启动中:非对称用于签名验证,对称用于固件加密和会话保护

3.2 密钥管理:安全启动的命门

算法再强,密钥泄露了,一切白搭。我在一个客户现场见过,他们把 RSA 私钥明文存在 Git 仓库里——嗯,那套安全启动方案基本等于没做。

密钥管理有几个核心原则:

  1. 密钥分级:不要所有密钥平级。根密钥(Root Key)必须硬件保护,派生密钥可以软件管理。
  2. 最小权限:每个密钥只做一件事。签名密钥不加密,加密密钥不签名。
  3. 密钥轮换:同一把密钥用十年?我建议最多两三年就换一次。
  4. 安全存储:密钥不能明文躺在 Flash 里。要么硬件隔离,要么加密存储。

我的经验:在量产阶段,密钥注入是最容易出问题的环节。我曾经见过一条产线,因为烧录器脚本写错了,把测试密钥刷进了正式产品——结果整批货都得返工。建议在产线端增加密钥校验步骤,烧录完成后读回来比对哈希。

密钥的生命周期大致如下:

阶段 说明 安全要求
生成 在安全环境中产生真随机数 使用硬件随机数发生器(TRNG)
分发 注入到设备或安全芯片 加密传输,产线环境隔离
使用 加解密、签名、验证 仅在硬件安全模块内操作
销毁 设备退役或密钥泄露时 物理销毁或安全擦除

3.3 硬件安全模块:HSM 与 TPM

你想想看,如果密钥存在 CPU 的普通 RAM 里,攻击者通过 JTAG 或者冷启动攻击就能读出来。那怎么办?得用硬件把密钥“锁”起来。

HSM(硬件安全模块)和 TPM(可信平台模块)就是干这个的。它们本质上是独立的安全芯片,专门处理密钥存储和密码运算。

  • HSM:通常用在服务器、汽车、工业控制等高端场景。性能强,支持大量密钥管理和高速签名。价格也贵,一个入门级 HSM 几千块起步。
  • TPM:消费级产品更常见,笔记本、PC、服务器主板上都有。功能相对精简,主要做平台身份认证和密钥保护。TPM 2.0 是目前的主流标准。

注意:TPM 不是万能的。它只能保护密钥不被软件读取,但如果攻击者物理接触芯片,通过侧信道攻击(比如功耗分析、电磁辐射)还是有可能提取密钥。所以,安全是分层的,硬件安全模块只是其中一层。

在安全启动场景里,HSM/TPM 通常承担以下角色:

  1. 存储根密钥:芯片出厂时注入的根公钥或根证书,存在 HSM/TPM 的不可读区域。
  2. 验证签名:启动时,HSM/TPM 用存储的根公钥验证下一级固件的签名。
  3. 派生密钥:基于根密钥和平台配置(PCR 值),派生会话密钥或加密密钥。
  4. 提供随机数:硬件真随机数发生器,用于密钥生成和协议防重放。

下面这张图展示了 HSM/TPM 在安全启动中的位置:

HSM/TPM 在安全启动中的角色 HSM / TPM 硬件安全模块 根密钥存储 签名验证 密钥派生 Boot ROM 固件镜像 HSM/TPM 不直接执行固件,而是为 Boot ROM 提供密码学服务

嗯,这里要注意:HSM 和 TPM 不是替代关系,而是不同定位。如果你的产品是高端网关或者汽车域控制器,我建议上 HSM。如果是消费级 IoT 设备,一颗带 TPM 功能的 MCU 或者独立 TPM 芯片就够用了。

避坑指南:我曾经在一个项目里选了某款 TPM 芯片,结果发现它的 ECC 签名验证速度只有 10 次/秒——根本满足不了启动时延要求。后来换了一款带硬件加速的型号才解决。选型时一定要实测性能,别只看数据手册。

最后总结一下这一节的核心:对称加密管速度,非对称加密管信任,密钥管理管安全,HSM/TPM 管落地。四者缺一不可,少了任何一个环节,你的安全启动方案都会有漏洞。