《安全启动验证方法实操课程》
第3章 密码学基础(二)

第三节:密码学基础(二)——数字签名、PKI与证书链

在上一节中,我们学习了对称与非对称加密,解决了“如何秘密通信”的问题。但在嵌入式安全启动中,我们更关心“如何验证代码的发布者”以及“如何确保代码未被篡改”。本节将深入探讨数字签名、公钥基础设施(PKI)以及证书链,这些是构建可信执行环境的基石。

3.1 数字签名:身份认证与完整性保障

数字签名是非对称加密的逆用。发送方使用私钥对数据的哈希值进行签名,接收方使用公钥验证签名。这提供了两个核心安全属性:

  • 真实性(Authentication):证明数据确实来自持有私钥的特定实体。
  • 完整性(Integrity):证明数据在传输过程中未被修改。

3.1.1 RSA 数字签名

RSA 签名基于大整数分解难题。签名过程即使用私钥指数 \(d\) 对哈希值 \(h\) 进行模幂运算:\(s = h^d \mod n\)。验证过程使用公钥指数 \(e\):\(h' = s^e \mod n\),若 \(h'\) 与原始哈希匹配,则验证通过。

发送方 原始数据 私钥签名 网络传输 数据 + 签名 接收方 公钥验证 ✓ 通过 / ✗ 拒绝 RSA 数字签名流程 私钥签名 → 公钥验证

3.1.2 ECDSA 数字签名

ECDSA(椭圆曲线数字签名算法)基于椭圆曲线离散对数难题。相比 RSA,ECDSA 在提供相同安全强度时,密钥长度更短、计算效率更高,非常适合资源受限的嵌入式设备。签名由一对值 \((r, s)\) 组成。

基点 G 公钥 Q = d·G 签名生成 随机数 k → (r, s) 签名验证 计算 u·G + v·Q ECDSA:基于椭圆曲线的数字签名

3.2 公钥基础设施(PKI)与证书

在安全启动中,设备需要验证固件签名者的公钥是否可信。PKI 通过引入证书颁发机构(CA)解决了“公钥分发”的信任问题。数字证书将公钥与实体身份绑定,并由 CA 签名。

3.2.1 X.509 证书结构

字段 说明 安全启动中的意义
版本号 证书格式版本(通常为 V3) 兼容性判断
序列号 CA 分配的唯一标识 吊销列表查询
签名算法 如 sha256WithRSAEncryption 指定验证算法
颁发者 签发该证书的 CA 名称 构建证书链
有效期 起始与结束时间 检查证书是否过期
主体 证书持有者身份 固件发布者身份
公钥信息 算法 + 公钥值 用于验证签名
扩展项 密钥用途、基本约束等 限制证书用途(如仅用于代码签名)

3.3 证书链与信任根

嵌入式设备通常预置一个根证书(信任锚)。固件签名证书由中间 CA 签发,中间 CA 再由根 CA 签发,形成证书链。验证时,设备从固件证书开始,逐级向上验证,直到信任的根证书。

根 CA(信任锚) 自签名证书 预置于设备 ROM 签发 中间 CA 由根 CA 签发 管理固件签名证书 签发 固件签名证书 由中间 CA 签发 用于验证固件签名 验证方向 ↓ 从下往上 1. 用中间 CA 公钥 验证固件证书签名 2. 用根 CA 公钥 验证中间 CA 证书 3. 信任根 → 信任链

3.4 安全启动中的实践

在嵌入式安全启动中,证书链验证通常发生在 BootROM 或早期启动阶段:

  1. 硬件信任根:根证书公钥的哈希值烧录在一次性可编程(OTP)存储器中。
  2. 逐级验证:BootROM 使用根公钥验证 Bootloader 1 的签名证书,Bootloader 1 再验证 Bootloader 2,最终验证 OS 内核。
  3. 抗回滚:结合版本号检查,防止攻击者加载旧版本的有漏洞固件。

3.4.1 代码示例:使用 OpenSSL 进行 ECDSA 签名与验证

# 1. 生成 ECDSA 私钥(P-256 曲线)
openssl ecparam -genkey -name prime256v1 -out firmware_priv.pem

# 2. 提取公钥
openssl ec -in firmware_priv.pem -pubout -out firmware_pub.pem

# 3. 对固件镜像进行签名
openssl dgst -sha256 -sign firmware_priv.pem -out firmware.bin.sig firmware.bin

# 4. 验证签名
openssl dgst -sha256 -verify firmware_pub.pem -signature firmware.bin.sig firmware.bin
# 输出: Verified OK

3.5 本节要点总结

概念 核心作用 安全启动中的角色
RSA 签名 基于大整数分解,广泛兼容 传统 BootROM 验证
ECDSA 签名 短密钥、高性能,适合 IoT 现代嵌入式安全启动首选
X.509 证书 绑定公钥与身份信息 固件发布者身份凭证
证书链 分层信任模型 从根证书到固件证书的信任传递
PKI 管理密钥与证书的生命周期 提供可撤销、可更新的信任体系