4. 密码学基础

固件升级的安全验证,本质上是一组密码学原语的组合运用。理解每种原语“能解决什么问题、不能解决什么问题”,是设计升级方案的前提。本章从工程视角梳理六类核心机制,并给出在固件验证场景下的选型原则。

一、核心原理:六类原语的角色分工

哈希(Hash)是单向压缩函数,把任意长度固件映像映射为固定长度摘要,如 SHA-256 输出 32 字节。它提供完整性,但不提供任何身份保证——攻击者可以同时替换固件和摘要。因此哈希只能作为其他机制的“被保护对象”。

对称加密(如 AES-128/256-GCM)用同一密钥加解密,速度快、适合大块固件数据,但密钥分发困难:设备端必须预置密钥,一旦泄露则全部设备失守。它解决机密性,不解决来源真实性。

非对称加密(如 RSA、ECC)使用公私钥对。私钥签名、公钥验证,天然适合“一对多”的固件分发:厂商持私钥,海量设备只存公钥。它解决来源真实性与不可否认性,但运算慢,通常只用于签名摘要而非整包固件。

数字签名 = 哈希 + 非对称加密。先对固件算摘要,再用私钥对摘要签名;设备端用公钥验签并比对摘要。它同时提供完整性与真实性,是固件验证的主干机制。

证书链解决“公钥本身是否可信”的问题。设备不直接信任某个公钥,而是信任一个根 CA,通过“根 CA → 中间 CA → 固件签名证书”的链式签名逐级验证,最终确认签名公钥归属合法厂商。

HMAC(基于哈希的消息认证码)用共享密钥同时提供完整性与真实性,速度快、实现简单,但属于对称机制:验证方与签名方共享同一密钥,无法防抵赖,且密钥泄露即全面失守。

固件验证中的密码学原语角色与信任链 固件映像 firmware.bin 哈希 SHA-256 完整性 数字签名 私钥签摘要 证书链 公钥可信性 对称加密 AES-GCM 机密性 · 速度快 密钥分发难 HMAC 完整性+真实性 共享密钥 · 不防抵赖 非对称 RSA/ECC 公私钥对 慢 · 只签摘要 设备端验证流程 ① 用根CA公钥验证证书链 → ② 提取固件签名证书公钥 ③ 用公钥验签 → ④ 比对固件摘要 → ⑤ 通过后写入分区 任一环节失败 → 拒绝升级并触发回滚

二、方法流程:从签名到设备验证的完整链路

厂商侧构建签名包的标准流程如下:

# 1. 计算固件摘要
sha256sum firmware.bin > firmware.sha256

# 2. 用私钥对摘要签名(ECDSA P-256 示例)
openssl dgst -sha256 -sign vendor_private.pem \
  -out firmware.sig firmware.bin

# 3. 打包:固件 + 签名 + 签名证书 + 中间CA证书
tar -cf update.pkg firmware.bin firmware.sig \
  signer_cert.pem intermediate_ca.pem

设备端验证顺序不可颠倒:先验证书链,再验签名,最后比对摘要。若先验签名再验证书,攻击者可用自签证书绕过信任锚。验证通过后才允许写入,且写入前应再次校验目标分区完整性。

三、选型原则与对比

机制提供属性密钥关系性能固件场景适用性
哈希完整性无密钥极快仅作辅助,不可单独信任
对称加密机密性共享密钥快固件保密分发,需安全密钥注入
非对称加密真实性基础公私钥对慢签名摘要,不直接加密整包
数字签名完整性+真实性+不可否认私签公验中固件验证主干,首选
证书链公钥可信性层级签名中多产品线、可轮换密钥的必备
HMAC完整性+真实性共享密钥快产线烧录、内部可信通道

选型口诀:对外分发用“签名+证书链”,内部产线用“HMAC+安全密钥”,需要保密再叠加“对称加密”,哈希永远只是被保护对象而非信任根。

四、案例与误区复盘

案例:某 IoT 厂商早期固件升级仅使用 SHA-256 摘要校验。攻击者篡改固件后同步替换摘要文件,设备照常升级,导致批量设备被植入后门。复盘结论:摘要必须被签名保护,否则完整性形同虚设。

误区一:用 HMAC 替代数字签名做对外升级。HMAC 密钥必须预置在每台设备中,一旦某台设备被物理提取密钥,全部设备失去真实性保障,且厂商无法抵赖。对外分发应使用非对称签名。

误区二:忽略证书链验证。只校验签名证书本身而不回溯到根 CA,攻击者可用自签证书通过验证。必须完整验证“根→中间→签名证书”的每一级签名与有效期。

误区三:签名算法与密钥长度过时。SHA-1 与 RSA-1024 已不安全,固件签名应使用 SHA-256 及以上、RSA-2048/3072 或 ECDSA P-256/P-384。ECC 在同等安全强度下密钥更短,更适合资源受限设备。

工程提醒:验证失败必须拒绝升级并保留原固件,同时记录失败原因(证书过期、签名不匹配、摘要不符),为回滚策略提供触发依据。切勿在验证失败时“降级放行”。