扫码加入

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

STM32H5 OEMiROT 实操:安全启动与加密固件更新全流程

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

OEMiROT(OEM Integrated Root of Trust)是 STM32H5 系列的核心安全功能,作为信任根支撑安全启动、固件加密签名与安全更新,适用于需要高安全性的嵌入式场景。本文基于 ST 官方 LAT1330 应用笔记,以 NUCLEO-H563ZI 开发板为例,详解 OEMiROT 的固件烧录、预配置、加密固件更新及芯片还原的完整实操流程,助力 OEM 开发者快速落地安全信任根方案。

1. 核心背景与功能价值

1.1 OEMiROT 核心定位

  • 信任根基础:为 STM32H5 提供硬件级安全根基,确保启动流程、固件完整性与机密性;
  • 核心能力:支持 Secure/NonSecure 双工程加密签名、安全启动校验、串口触发固件更新;
  • 密钥体系:包含三套密钥对,分别用于 Secure APP 认证、NonSecure APP 认证、固件加密解包。

1.2 关键术语说明

  • Secure APP(S APP):运行在安全域的应用,优先级高,负责核心安全逻辑;
  • NonSecure APP(NS APP):运行在非安全域的应用,负责业务功能;
  • OBK 文件(OB Key):预配置文件,包含密钥与安全配置,通过 TPC 工具生成;
  • Product State:芯片生命周期状态(Open/Provisioning/Closed/Locked),Closed 状态下仅支持授权调试与更新。

2. 准备工作

2.1 硬件与软件清单

  • 开发板:NUCLEO-H563ZI;
  • 软件包:STM32Cube_FW_H5_V1.1.0(需放置在无中文、无空格路径,示例:C:workspace);
  • 工具:STM32CubeProgrammer v2.14.0、Tera Term(串口终端)、Trust Package Creator(TPC,随 CubeProgrammer 安装并勾选);
  • IDE:STM32CubeIDE v1.13.0(用于工程编译)。

2.2 环境预处理

  • 脚本路径配置:打开STM32Cube_FW_H5_V1.1.0ProjectsNUCLEO-H563ZIROT_Provisioningenv.bat,核对STM32CubeProgrammer_CLI.exeSTM32TrustedPackageCreator_CLI.exe的安装路径,确保与本地一致。

3. 核心流程:OEMiROT 部署与固件更新

第一步:运行预配置脚本,启动流程引导

  1. 进入路径STM32Cube_FW_H5_V1.1.0ProjectsNUCLEO-H563ZIROT_ProvisioningOEMiROT,双击运行provisioning.bat
  2. 系统弹出 DOS 终端窗口,按提示逐步执行操作,全程保持终端开启。

第二步:生成核心配置文件(OBK 与 DA 文件)

(1)生成 OEMiROT_Config.obk(安全配置文件)

  1. 打开 TPC 工具,左侧选择 “STM32H5”,上方切换至 “OBKey” 选项卡;
  2. 点击 “Open DA Config”,选择 XML 模板路径:C:workspaceSTM32Cube_FW_H5_V1.1.0ProjectsNUCLEO-H563ZIROT_ProvisioningOEMiROTConfigOEMiRoT_Config.xml
  3. 界面将显示三套默认密钥对(可点击 “Regenerate” 自定义生成,需妥善保存):
    • OEMiRoT_Authentication_S.pem:Secure APP 认证公钥;
    • OEMiRoT_Authentication_NS.pem:NonSecure APP 认证公钥;
    • OEMiRoT_Encryption.pem:固件加密解包私钥;
  4. 设置输出路径为Binary目录,点击 “Generate OBkey”,生成OEMiROT_Config.obk

(2)复用 / 生成 DA_Config.obk(调试认证文件)

  • 直接复用 SDK 自带文件:路径STM32Cube_FW_H5_V1.1.0ProjectsNUCLEO-H563ZIROT_ProvisioningDABinaryDA_Config.obk
  • 自定义生成:通过 TPC 工具 “DA CertifGen” 选项卡生成,需同步更新 Keys 目录下的密钥与 Certificates 目录下的证书。

第三步:编译核心工程(Boot+S APP+NS APP)

(1)编译 OEMiROT_Boot 工程(安全启动引导)

  1. 用 STM32CubeIDE 打开工程:C:workspaceSTM32Cube_FW_H5_V1.1.0ProjectsNUCLEO-H563ZIApplicationsROTOEMiROT_BootSTM32CubeIDE
  2. 编译工程,生成OEMiROT_Boot.bin(路径:工程 / Binary 目录)。

(2)编译 OEMiROT_Appli_TrustZone 双工程

  1. 打开工程:C:workspaceSTM32Cube_FW_H5_V1.1.0ProjectsNUCLEO-H563ZIApplicationsROTOEMiROT_Appli_TrustZoneSTM32CubeIDE
  2. 先编译Secure子工程(S APP),再编译NonSecure子工程(NS APP);
  3. 编译后,postbuild 脚本自动生成 4 个核心文件(路径:工程 / Binary 目录):
    • rot_tz_s_app.bin/rot_tz_s_app_enc_sign.hex:S APP 原始固件 / 加密签名固件;
    • rot_tz_ns_app.bin/rot_tz_ns_app_enc_sign.hex:NS APP 原始固件 / 加密签名固件。

第四步:芯片预配置(Provisioning)

  1. 确认 NUCLEO-H563ZI 的 BOOT0 引脚未接 VDD(拉低状态);
  2. 在 DOS 终端按回车键,脚本提示输入最终 Product State,输入 “CLOSED”(禁止非法调试,勿设为 LOCKED);
  3. 脚本自动执行以下操作:
    • 烧录 Boot、S APP、NS APP 固件;
    • 配置 Option Bytes;
    • 切换 Product State 至 Provisioning,预配置 OEMiROT_Config.obk 与 DA_Config.obk;
    • 最终切换 Product State 至 CLOSED,预配置完成。

第五步:验证运行状态

  1. 打开 Tera Term,配置串口波特率 115200 bps,连接开发板;
  2. 复位开发板,串口打印 “User App #A”,表示 NS APP 运行正常,安全启动与预配置生效。

第六步:加密固件更新(以 NS APP 为例)

(1)修改并重新编译 NS APP

  1. 打开 NS APP 工程,在main.c中修改版本号:const uint8_t UserAppId = 'B';
  2. 重新编译 NS APP,postbuild 脚本生成新的加密签名固件rot_tz_ns_app_enc_sign.hex

(2)跳转到内置 Bootloader

  1. 在 Tera Term 串口终端输入 “1”,程序跳转至 Bootloader;
  2. 断开 Tera Term 串口连接。

(3)通过 CubeProgrammer 下载新固件

  1. 打开 STM32CubeProgrammer,选择 UART 模式连接开发板(COM 口与串口终端一致);
  2. 将新生成的rot_tz_ns_app_enc_sign.hex拖入 CubeProgrammer,点击 “Download”;
  3. 下载完成后,断开 CubeProgrammer 连接,重新连接 Tera Term,复位开发板;
  4. 串口打印 “User App #B”,固件更新成功。

第七步:芯片还原(恢复原始状态)

(1)DA 回退解锁

  1. 打开 STM32CubeProgrammer,选择 ST-LINK 模式,切换至 “DA” 标签页,点击 “Discover”;
  2. 配置密钥与证书路径:
    • Key File Path:C:workspaceSTM32Cube_FW_H5_V1.1.0ProjectsNUCLEO-H563ZIROT_ProvisioningDAKeyskey_1_root.pem
    • Certificate File Path:C:workspaceSTM32Cube_FW_H5_V1.1.0ProjectsNUCLEO-H563ZIROT_ProvisioningDACertificatescert_root.b64
  3. 点击 “Full Regression”→“Execute”,DA 回退成功,Product State 恢复为 Open(0xED)。

(2)关闭 TrustZone(可选)

在 CubeProgrammer “Option bytes” 标签页,设置 TZEN=0xC3(关闭 TrustZone),芯片完全恢复原始状态。

4. 关键注意事项

  1. 路径要求:STM32Cube_FW_H5 软件包必须放置在无中文、无空格路径,否则脚本运行失败;
  2. 密钥管理:自定义生成的密钥对需妥善保存,丢失将导致固件无法更新与调试;
  3. Product State:严禁设置为 LOCKED 状态,否则芯片将完全锁定,无法还原;
  4. 编译顺序:必须先编译 Secure 工程,再编译 NonSecure 工程,否则 postbuild 脚本无法生成正确的加密固件;
  5. 固件类型:原始固件用于初始安装,加密签名固件用于后续安全更新。
STM32H5 OEMiROT 的核心落地逻辑是 “配置生成→工程编译→预配置→安全启动→加密更新”,关键在于通过 TPC 工具生成安全配置文件、确保双工程编译顺序正确、严格按流程切换 Product State。该方案通过加密签名与安全启动,从根源上保障固件完整性与机密性,适用于工业控制物联网终端等对安全性要求较高的场景。

相关推荐