• 正文
  • 相关推荐
申请入驻 产业图谱

STM32 X-CUBE-SBSFU 安全启动与固件更新集成指南

5小时前
168
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

AN5056 是 ST 官方针对X-CUBE-SBSFU扩展包的硬核集成指南,聚焦安全启动 + 安全固件更新方案的移植、配置、调试、优化全流程,解决开发者从评估板迁移到自定义硬件、按需裁剪功能、对接用户应用的核心问题。本文以实战视角完整拆解集成要点,直接落地量产级安全固件方案。

资料获取:【应用笔记】AN5056 X-CUBE-SBSFU STM32Cube扩展包集成指南

1. SBSFU 集成核心基础

X-CUBE-SBSFU 是 STM32 的可信根 + 安全升级一站式方案,复位优先运行安全启动,校验固件合法性;安全更新支持加密传输、验签安装、防回滚、断电续更STMicroelectronics。

  • 两种运行模式
    • 单槽(1_Image):最大化用户固件空间,无回滚、仅支持本地更新
    • 双槽(2_Images):活动槽 + 下载槽 + 交换区,支持 OTA、断电恢复、自动回滚
  • 三种加密方案
    1. ECDSA 验签 + AES-CBC 加密(默认)
    2. ECDSA 验签 + 明文固件
    3. AES-GCM 一体加密验签
  • 安全底座:RDP 读保护、WRP 写保护、PCROP 只读执行、MPU 内存隔离、防火墙 FWALL、防篡改 Tamper

2. 跨板移植全流程(最常用核心步骤)

移植是 AN5056 的核心章节,按硬件适配→内存映射→双核适配三步完成:

2.1 硬件适配

修改 4 个底层文件即可适配自定义板卡:

  • UART 引脚:sfu_low_level.h/c(Ymodem 下载通信)
  • Flash 接口:单 / 双存储区驱动配置
  • 按键 / GPIO:app_hw.h(触发更新按键)
  • 安全引脚:Tamper、DAP 调试端口配置
  • STSAFE-A110:I2C 通信配置(高阶安全方案)

2.2 内存映射(最关键)

三个工程(SECoreBin/SBSFU/UserApp)共享链接文件,严格遵守约束:

  • SBSFU 区:安全引擎、向量表、可信代码
  • 插槽区:活动槽、下载槽、交换区
  • 对齐规则:插槽按扇区对齐;交换区≥最大扇区;双槽大小为交换区倍数
  • 双 Bank 器件:防火墙代码放 Bank1,数据放 Bank2,确保切换后仍受保护
  • 向量表偏移:L4/L0/WB/F4 为 512 字节,H7/F7 为 1024 字节,G0 为 2048 字节,G4 为 4096 字节

2.3 双核适配(H7 系列)

  • CM7 运行 SBSFU,默认禁用 CM4
  • 用户应用校验通过后,由 CM7 触发 CM4 启动
  • 选项字节取消 BCM4 位,禁用双核自动启动

3. SBSFU 核心配置

3.1 功能配置

  • 裁剪本地加载器:禁用 SECBOOT_USE_LOCAL_LOADER,节省 Flash
  • 开启多镜像:最多 3 组活动 / 下载槽,适配协议栈 + 用户应用复合系统
  • 镜像验证:ENABLE_IMAGE_STATE_HANDLING,新固件自检失败自动回滚

3.2 加密方案切换

通过宏SECBOOT_CRYPTO_SCHEME指定,同步修改 se_crypto_config.h 与 app_sfu.h,保持一致。

3.3 安全配置开关(app_sfu.h)

量产必须开启:

  • SFU_WRP_PROTECT_ENABLE:写保护
  • SFU_RDP_PROTECT_ENABLE:读保护(必开 RDP2)
  • SFU_PCROP_PROTECT_ENABLE:代码只读保护
  • SFU_FWALL_PROTECT_ENABLE:防火墙隔离
  • SFU_DAP_PROTECT_ENABLE:禁用调试端口

3.4 开发 / 生产模式切换

  • 开发:关闭所有安全 IP、开启 Verbose、允许调试
  • 生产:开启全部保护、关闭调试日志、激活 RDP2、锁定选项字节

4. 加密密钥生成与替换

AN5056 提供标准化密钥流程,杜绝明文泄露:

  1. AES 对称密钥:替换 OEM_KEY_COMPANY1_key_AES_xxx.bin,编译自动生成 se_key.s
  2. ECDSA 非对称密钥:替换 ECCKEY1.txt,公钥嵌入设备,私钥留存服务器
  3. STM32WB:密钥通过 FUS 服务写入 M0 + 安全存储,使用 CubeProgrammer 配置
  4. KMS 模式:密钥存入安全隔区,通过 PKCS#11 接口调用,不暴露明文
  5. STSAFE-A110:配对密钥 + 证书链烧录安全元件,EAL5 + 硬件级防护

5. 调试技巧(避坑必备)

  1. 编译器优化:调试阶段降低优化级别,避免变量被优化导致断点失效
  2. 内存映射调整:开启 Verbose 后缩小插槽空间,防止区域重叠
  3. SECoreBin 调试:IDE 加载符号文件,定位安全引擎执行问题
  4. 保护排查:用 CubeProgrammer 检查 WRP/PCROP 配置,确认保护生效
  5. 日志开关:SFU_VERBOSE_DEBUG_MODE 输出启动流程,快速定位卡死点

6. 定制化优化(按需裁剪)

6.1 内存优化

  • 单槽模式:用户空间翻倍
  • 禁用调试日志:节省约 9KB
  • 关闭本地加载器:节省约 3KB
  • 对称加密 AES-GCM:减小代码体积

6.2 功能优化

  • 防火墙内中断管理:低延迟外设响应
  • 精简校验流程:缩短启动时间(无物理攻击场景)

6.3 外部 Flash 适配

  • OTFDEC 器件:AES-CTR 加密,运行时动态解密
  • 无 OTFDEC:使用 SFU_NO_SWAP,下载槽保持加密

7. 用户应用适配(必改要点)

  1. 链接地址:向量表置于活动槽起始 + 偏移地址,与映射一致
  2. 向量表重定向:SystemInit 中修改 VTOR,指向新位置
  3. 固件长度:bin 文件按 16 字节对齐,满足 AES 加密要求
  4. 数据存储:避开 SBSFU / 插槽 / 交换区,使用空白 Flash 扇区
  5. 升级触发:双槽模式可替换 UART 为 BLE/WiFi,实现无线 OTA
  6. 固件版本:postbuild 脚本指定版本号,防回滚生效
  7. 镜像验证:首次启动调用 SE_APP_Validate,确认固件合法

8. 量产配置要点

  1. 必开 RDP Level2,实现最高防护,禁止外部读取 Flash
  2. 锁定选项字节,不可修改保护配置
  3. 烧录 SBSFU 后,再通过安全方式刷入用户应用
  4. 密钥统一管理,服务器与设备密钥一一对应
  5. 全量测试:掉电升级、版本回滚、物理攻击防护

AN5056 是 X-CUBE-SBSFU 从演示工程到量产产品的核心集成手册,覆盖移植、配置、密钥、调试、优化、适配全环节。遵循本文流程,可快速将安全启动与安全固件更新落地到自定义 STM32 硬件,实现防篡改、防破解、零风险升级的量产级安全能力,覆盖工业、物联网消费电子全场景。

相关推荐