1. 安全启动与固件升级工程导论

在嵌入式产品中,固件是设备行为的最终决定者。谁能改写固件,谁就 фактически 掌握了设备。安全启动(Secure Boot)与固件升级(Firmware Update)正是围绕"固件可信"这一核心命题展开的两项工程能力:前者保证设备每次上电只运行经过授权的固件,后者保证固件在生命周期内可以被安全地替换与修复。二者不是彼此独立的功能,而是一条完整信任链的两端——安全启动建立信任,安全升级延续信任。

一、核心概念:从信任根到信任链

要理解安全启动,必须先理解三个层层递进的概念。

信任根(Root of Trust, RoT)是整个安全体系的起点,它必须是一段"不可被篡改、且被无条件信任"的代码或数据。在 Microchip 的架构中,信任根通常由芯片出厂时固化在不可擦写区域(如 Boot ROM 或硬件安全模块中的不可变引导代码)实现,配合一次性可编程(OTP)熔丝中烧录的公钥哈希,构成硬件级的信任锚点。信任根之所以"可信",不是因为它被验证过,而是因为它无法被修改——这是整个体系唯一不需要证明的假设。

信任链(Chain of Trust)是把信任从根逐级传递下去的过程。信任根验证第一级引导程序(如 MCUboot 或厂商 Bootloader)的签名,第一级引导程序验证第二级引导程序或应用固件,应用固件再验证其加载的资源或外设固件。每一级在把控制权交给下一级之前,都必须先完成对下一级的密码学验证。只要链条中任何一环验证失败,启动流程就应中止或进入受限的安全恢复模式。

安全启动就是这条信任链在每次上电时的执行过程;安全固件升级则是把新的、已签名的固件镜像写入设备,并保证写入过程本身不被降级攻击、回滚攻击或中间人篡改。二者共享同一套密钥体系与验证逻辑,因此工程上通常统一设计。

安全启动信任链与固件升级数据流 信任根 RoT Boot ROM / OTP 公钥哈希 不可篡改 · 硬件锚点 验证签名 一级引导程序 MCUboot / 厂商 Bootloader 公钥验证 · 防回滚计数器 验证签名 应用固件 业务逻辑 · 通信协议栈 运行时安全策略 安全固件升级数据流 新固件镜像 签名 + 版本号 传输通道 UART / CAN / BLE / OTA 验证与写入 验签 · 防回滚 · 双区切换 重启 进入新固件 威胁模型:安全启动与升级需抵御的攻击面 固件篡改 替换镜像 / 注入恶意代码 回滚攻击 降级到含漏洞旧版本 中间人攻击 传输通道劫持 / 伪造更新 密钥泄露 签名私钥被窃取 / 滥用

二、威胁模型:我们到底在防谁

安全启动与升级的工程目标,完全由威胁模型决定。脱离威胁模型谈安全,只会得到过度设计或防护不足两种结果。在嵌入式固件场景中,需要重点考虑的攻击面包括:

  • 固件篡改:攻击者通过调试接口、物理访问或通信通道替换设备中的固件镜像,植入恶意代码。防御手段是签名验证——设备只运行由可信私钥签名的镜像。
  • 回滚攻击:攻击者把设备降级到已知存在漏洞的旧版本固件,再利用该漏洞实施进一步攻击。防御手段是防回滚计数器(Anti-Rollback Counter),通常存储在 OTP 或受保护的非易失存储中,每次升级只增不减。
  • 中间人攻击:在 OTA 或远程升级通道中,攻击者截获并替换固件包。防御手段是端到端签名验证,传输层加密(如 TLS)只是补充,不能替代镜像本身的签名。
  • 密钥泄露:签名私钥一旦泄露,整个信任体系崩塌。工程上必须使用硬件安全模块(HSM)保护私钥,并设计密钥轮换与吊销机制。

需要特别注意的是,安全启动并不防御"设备被物理拆解后直接读取 Flash 内容"这类机密性攻击——那是安全存储与加密引擎的职责。安全启动解决的是完整性与真实性问题:设备运行的固件,是不是我们签发的、未被修改的那一份。

三、工程目标与典型应用场景

从工程落地角度看,一套可交付的安全启动与升级方案需要同时满足以下目标:

  • 可验证性:每一级固件在运行前都经过密码学验证,验证失败有明确的降级策略(如进入恢复模式、保持旧版本运行)。
  • 可升级性:支持现场升级,且升级过程断电、断网等异常情况下不会导致设备"变砖"。这通常通过双区(A/B 分区)或外部 Flash 暂存实现。
  • 可制造性:产线烧录流程中,密钥注入、OTP 熔丝烧写、初始固件签名必须可重复、可审计。
  • 可维护性:密钥轮换、证书吊销、版本回退策略在设备生命周期内可操作。

典型应用场景包括:工业控制器需要防止现场固件被恶意替换;汽车 ECU 需要满足 ISO 21434 的网络安全要求;智能电表需要支持远程安全升级并防止电费篡改;医疗设备需要保证固件版本可追溯且不可降级到未认证版本。这些场景的共同点是:设备部署后难以物理回收,一旦固件被篡改,后果由厂商和用户共同承担。

工程提示:在项目早期就应明确"信任根放在哪里、私钥由谁保管、防回滚计数器存在哪里、升级失败如何恢复"这四个问题。它们决定了后续所有硬件选型与软件架构,后期修改成本极高。