ESP32-S31 安全启动与 Flash 加密概述

安全启动(Secure Boot)与 Flash 加密(Flash Encryption)可在 ESP32-S31 量产部署中保护固件完整性与机密性。


安全启动 — 固件完整性

安全启动是基于 数字签名验证 的硬件信任链。芯片复位后仅运行通过签名校验的固件镜像。

工作原理

  • 数字签名验证: 构建时使用私钥对固件签名(RSA-3072 或 ECDSA)。
  • 公钥写入 eFuse: 公钥哈希在制造阶段写入只读 eFuse
  • 启动校验链: 每次启动时,ROM bootloader 使用 eFuse 中的公钥哈希校验 flash 中的一级 bootloader;通过后依次校验分区表与应用镜像。
  • 侧信道防护: ESP32-S31 提供 Brownout DetectorDPA(差分功耗分析)防护,降低启动与密钥使用阶段的侧信道攻击风险。

Flash 加密 — 固件机密性

Flash 加密保护存储在 外部 flash 中的代码与数据,降低通过编程器或逻辑分析仪读取固件并进行克隆或逆向的风险。

工作原理

  • 实时加解密(On-the-fly): 采用 XTS-AES-256。CPU 经 MMU 缓存从 flash 读取时由硬件实时解密,写入时实时加密,对应用软件透明。
  • 物理隔离密钥: 加密密钥由片上 TRNG 在首次启动时生成(或在产线安全写入),存入只读 eFuse 密钥块。写入后软件及 USB/JTAG 等外部接口无法读取该密钥。
  • 静态密文: 直接从 flash 芯片读出的数据在无密钥情况下为密文。

量产中同时启用两项功能

建议 同时启用 Secure Boot 与 Flash Encryption

  1. 仅 Flash 加密: 若未启用 Secure Boot,攻击者仍可能替换 flash 中的未签名固件。
  2. 仅 Secure Boot: 攻击者仍可能从 flash 读取明文固件进行逆向。
  3. Secure Boot + Flash 加密: 同时保护执行完整性与存储机密性。

实现说明

安全启动与 flash 加密的启用流程,包括密钥生成、eFuse 配置及量产签名,请参阅 ESP32-S31 安全指南

[!NOTE] eFuse 为一次性可编程(OTP)介质,密钥或锁定位写入后不可恢复。开发阶段请使用 开发模式(Development mode) 配置;除非有意永久锁定设备,否则勿在工程样机上启用 发布模式(Release mode)