3、密码学基础回顾:哈希函数、非对称加密、数字签名、证书链在信任链中的作用

说实话,很多做嵌入式或者 IoT 的工程师,一听到「密码学」三个字就头疼。我当年也一样。

但做设备信任链,你绕不开这些东西。它们不是理论,是实实在在的工程工具。说白了,信任链的每一环,都靠这些密码学原语撑着。

这一节,我们快速过一遍。不扯数学公式,只讲它们在信任链里到底干嘛用。

3.1 哈希函数:信任链的「指纹」

哈希函数,你肯定听过。SHA-256、SHA-384,这些是信任链里最常用的。

它的核心作用就一个:给数据打指纹。不管输入多大,输出固定长度。而且,哪怕改一个比特,指纹就完全变了。

信任链里的典型场景:

  • 固件镜像的哈希值,用来校验完整性。
  • 启动过程中,前一阶段计算后一阶段的哈希,比对是否被篡改。
  • 数字签名里,先对消息哈希,再对哈希签名。

我在项目里遇到过一件事。有个同事把固件哈希存在了明文配置文件里。嗯,这等于没存。攻击者改了固件,顺手把哈希也改了。所以哈希值必须放在安全存储里,或者用签名保护起来。

工程建议: 信任链里优先用 SHA-256 或 SHA-384。SHA-1 已经不安全了,别再用。MD5?忘掉它。

3.2 非对称加密:信任链的「钥匙对」

非对称加密,就是公钥和私钥。私钥自己藏着,公钥发出去。

在信任链里,非对称加密主要干两件事:身份认证和密钥协商。

你想想看,设备第一次上电,谁都不认识谁。怎么建立信任?靠的就是非对称加密。设备用私钥签名,服务器用公钥验签。反过来也一样。

角色 持有密钥 信任链中的作用
设备 私钥(安全存储) 签名启动度量值、证明身份
服务器/验证方 公钥(预置或证书) 验签、确认设备合法性
CA 根 根私钥(离线保护) 签发下级证书

注意: 设备私钥一旦泄露,信任链就断了。所以私钥必须放在硬件安全模块(HSM)或安全元件(SE)里。纯软件存储?我见过太多被提 root 权限后直接读走的案例。

3.3 数字签名:信任链的「封条」

数字签名 = 哈希 + 非对称加密。

流程很简单:发送方对消息哈希,然后用私钥加密这个哈希。接收方用公钥解密,再自己算一遍哈希。比对一致,说明消息没被改,而且确实是私钥持有者发的。

在信任链里,数字签名无处不在:

  • 固件包签名,设备升级时验签。
  • 启动过程中,每个阶段对下一阶段的镜像签名。
  • 设备向服务器发送证明报告时,附上签名。

我曾经踩过一个坑。验签时只检查了签名格式,没检查签名内容是否过期。结果一个旧版本的签名被重放攻击利用了。所以验签一定要检查签名有效期和撤销状态。

一句话总结: 哈希保证完整性,签名保证完整性和真实性。两者结合,就是信任链的「封条」。

3.4 证书链:信任链的「传递」

单个签名好理解。但设备成千上万,每个设备都预置一个公钥?不现实。

证书链解决了这个问题。它让信任可以传递。

结构是这样的:

  • 根 CA:自签名证书,信任的起点。根私钥必须离线、物理隔离。
  • 中间 CA:由根 CA 签发,用来分担风险。根 CA 不用天天在线。
  • 设备证书:由中间 CA 签发,每个设备一个。里面包含设备的公钥和身份信息。

验证的时候,从设备证书开始,逐级向上,直到信任的根证书。每一级都要验签。只要根证书是可信的,整条链就可信。

下面这张图,就是证书链的典型结构:

证书链结构图 根 CA 自签名 · 离线保护 中间 CA 由根 CA 签发 设备证书 A 由中间 CA 签发 设备证书 B 由中间 CA 签发 设备证书 C 由中间 CA 签发 签发 签发 验证路径:设备证书 → 中间 CA → 根 CA(信任锚)

工程实践: 设备端只存根证书的公钥。中间 CA 和设备证书可以在运行时下发。这样根私钥永远不用暴露。我见过一些方案把整条证书链都烧死在设备里,灵活性太差,证书轮换时很痛苦。

3.5 它们在信任链中的协作关系

这四个东西不是孤立的。它们组合起来,才构成完整的信任链。

举个例子,设备安全启动流程:

  1. BootROM 里预置了根 CA 的公钥。
  2. BootROM 加载下一级 Bootloader,先验签。验签过程:用根公钥验证 Bootloader 证书的合法性,再用 Bootloader 证书里的公钥验证 Bootloader 镜像的签名。
  3. Bootloader 再加载内核,同样流程。每一级都验签。
  4. 内核启动后,验证系统服务和应用的签名。

你看,哈希、签名、证书链,全用上了。每一级都信任上一级,上一级保护下一级。这就是信任链的核心逻辑。

核心要点:

  • 哈希:保证数据没被改。
  • 非对称加密:提供密钥对,一个签名,一个验签。
  • 数字签名:哈希 + 私钥加密,保证完整性和真实性。
  • 证书链:让信任可以传递,解决大规模部署的密钥分发问题。

嗯,基础就这些。后面几章,我们会把这些东西一个一个搭起来,做成真正的设备信任链。到时候你会发现,理解了这些原语,剩下的就是工程细节了。