跳转至

MCU启动流程与安全启动链实现

难度:🟡 中级 | 领域:嵌入式安全 | 关键词:RoT, Secure Boot, OTP, 反回滚 | 阅读时间:约 16 分钟

日常类比

起床流程:闹钟(复位)→ 确认在自己家(复位向量)→ 穿衣(栈与时钟初始化)→ 出门(main)。安全启动(Secure Boot)要求每一步都核验“衣服没被调包”——从不可篡改的信任根(Root of Trust, RoT)起,逐级验证下一级镜像签名,防止野外设备被刷恶意固件[1][5]。

摘要

梳理 Cortex-M 类上电到 main、Bootloader/VTOR、签名链、OTP/eFuse、反回滚与 OTA 关系,并对照 STM32 SBSFU、ESP32 Secure Boot、MCUboot。算法与熔丝细节以芯片安全手册为准[2][3][4]。

1. 启动路径

阶段 内容
复位 取 MSP 与 Reset_Handler(向量表)
早期初始化 时钟、存储、可选 RAM 向量
SystemInit / libc C 运行时
Bootloader 选槽、验签、跳转应用
应用 可再设 VTOR
机制 作用
VTOR 重定位向量表,支持双槽升级
A/B Bank 更新失败可回滚(需防恶意降级)

2. 安全启动链

要素 要求
RoT ROM/OTP/eFuse 公钥哈希或密钥,不可软件改
验签 常 ECDSA P-256 / RSA;摘要匹配
加密(可选) 防拷贝,与签名密钥分离
反回滚 单调版本计数器写入 OTP
调试关闭 量产锁 JTAG/SWD、读保护
方案 生态
STM32 SBSFU ST 工具链与中间件
ESP32 Secure Boot V2 eFuse + 签名摘要
MCUboot Zephyr 等跨平台

3. 局限、挑战与可改进方向

1. 无反回滚的“假安全”

局限:攻击者刷回含漏洞的旧合法版本。 改进:OTP 单调版本;拒绝低版本。

2. 密钥与产线管理

局限:私钥泄露或熔丝烧错变砖。 改进:HSM 签包、分阶段熔丝、保留安全恢复策略(受控)。

3. 实现侧信道与比较漏洞

局限:非恒定时间比较、调试口残留。 改进:恒定时间校验;量产关闭调试;代码审计。

4. 启动时延与功耗

局限:大镜像验签变慢。 改进:硬件加速 HASH/PKA;分区验签;评估算法强度与时延折中。

4. 实践要点

  1. 先无安全跑通 A/B,再加验签与熔丝。
  2. 检查清单:RoT、链上每级验签、反回滚、RDP、调试锁。
  3. Bootloader 结构见 bootloader-design-embedded

参考文献

[1] ARM, ARMv7-M Architecture Reference Manual(向量表). [2] ST, AN4968 / SBSFU documentation. [3] Espressif, ESP32 Secure Boot V2 guide. [4] MCUboot design documentation. [5] NIST SP 800-193 Platform Firmware Resiliency Guidelines. [6] PSA Certified / Platform Security Architecture overviews. [7] ECDSA P-256 performance on Cortex-M notes. [8] OTP/eFuse programming vendor manuals. [9] Rollback protection design patterns. [10] Secure OTA + TLS channel guidance. [11] Flash readout protection (RDP) application notes.