STiROT(ST Integrated Root of Trust)是 STM32H573 专属的硬件级信任根功能,核心支撑安全启动、固件加密签名与安全更新,仅适用于带安全硬件加速器的 STM32H573(H563、H503 不支持)。本文基于 ST 官方 LAT1342 应用笔记,以 STM32H573-DK 开发板为例,分步拆解 Full Secure(全安全)和 Secure+Non Secure(S+NS)两种工程类型的部署、固件更新与芯片还原流程,适配 STM32Cube_FW_H5_V1.1.0 及配套工具链。
1. 核心背景与适用范围
1.1 STiROT 核心价值
- 安全启动:仅允许经加密签名的固件运行,阻断恶意固件;
- 固件保护:通过密钥对实现固件加密(STiRoT_Encryption.pem)与认证(STiRoT_Authentication.pem);
- 灵活部署:支持 “全安全工程”(仅 Secure 域)和 “S+NS 工程”(安全域 + 非安全域),适配不同安全需求。
1.2 关键前提
- 芯片限制:仅 STM32H573 支持 STiROT,需确认硬件型号;
- TrustZone 状态:Full Secure 工程无需使能 TrustZone,S+NS 工程需激活 TrustZone(TZEN=0xB4);
- 路径要求:STM32Cube_FW_H5 软件包需放置在无中文、无空格路径(示例:C:workspace)。
2. 准备工作
2.1 硬件与软件清单
- 开发板:STM32H573-DK(MR1 版本);
- 软件包:STM32Cube_FW_H5_V1.1.0;
- 工具:STM32CubeProgrammer v2.14.0、Trust Package Creator(TPC,随 CubeProgrammer 安装并勾选)、Tera Term(串口终端);
- IDE:STM32CubeIDE v1.13.0。
2.2 环境预处理
- TrustZone 检查:通过 STM32CubeProgrammer 查看 Option bytes,Full Secure 工程确保 TZEN 未使能(后续 S+NS 工程需激活);
- 脚本路径配置:打开
STM32Cube_FW_H5_V1.1.0ProjectsSTM32H573I-DKROT_Provisioningenv.bat,核对STM32CubeProgrammer_CLI.exe与STM32TrustedPackageCreator_CLI.exe的安装路径,确保与本地一致。
3. 实操流程:Full Secure 工程部署(默认配置)
Full Secure 工程仅含安全域代码,部署步骤简洁,适合纯安全需求场景:
3.1 运行 STiROT 预配置脚本
- 进入路径
STM32Cube_FW_H5_V1.1.0ProjectsSTM32H573I-DKROT_ProvisioningSTiROT,双击运行provisioning.bat; - 系统弹出 DOS 终端,按提示逐步操作(全程保持终端开启)。
3.2 生成 STiROT_Config.obk 文件(核心配置文件)
- 打开 TPC 工具,左侧选择 “STM32H5”,上方切换至 “OBKey” 选项卡;
- 加载 XML 配置文件:
C:workspaceSTM32Cube_FW_H5_V1.1.0ProjectsSTM32H573I-DKROT_ProvisioningSTiROTConfigSTiRoT_Config.xml; - 配置关键参数:
- 勾选 “Is the firmware full secure”(全安全工程标识);
- 密钥选择:使用默认密钥对(或点击 “Regenerate” 自定义生成,需妥善保存);
- 输出路径:选择
Binary目录,点击 “生成”,得到STiROT_Config.obk文件。
3.3 复用 DA_Config.obk 文件
无需额外生成,直接使用 SDK 自带文件:
C:workspaceSTM32Cube_FW_H5_V1.1.0ProjectsSTM32H573I-DKROT_ProvisioningDABinaryDA_Config.obk,其密钥与证书位于同级目录的 Keys 和 Certificates 文件夹。3.4 编译 Full Secure 工程
- 用 STM32CubeIDE 打开工程:
C:workspaceSTM32Cube_FW_H5_V1.1.0ProjectsSTM32H573I-DKApplicationsROTSTiROT_Appli; - 直接编译,生成两个核心文件(路径:工程 / Binary 目录):
appli.bin:原始固件(初始安装用);appli_enc_sign.hex:加密签名固件(后续升级用)。
3.5 芯片预配置(Provisioning)
- 确认开发板 BOOT0 引脚拉低;
- 在 DOS 终端按回车键,提示输入最终 Product State,输入 “CLOSED”(禁止非法调试),按回车;
- 脚本自动完成:Option bytes 配置、固件烧录、STiROT_Config.obk 预配置,直至提示 “预配置完成”。
3.6 验证运行状态
- 打开 Tera Term,配置串口波特率 115200 bps,连接开发板;
- 复位开发板,串口打印 “User App#A”“Appli Code version:1.0.0”,表示工程正常运行。
4. 实操流程:S+NS 工程部署(安全 + 非安全域)
S+NS 工程需划分安全域与非安全域代码,适用于复杂业务场景,核心差异在配置与工程选择:
4.1 修改脚本工程路径
- 打开
env.bat文件,修改目标工程配置:set stirot_boot_path_project=Applications/ROT/STiROT_Appli_TrustZone - 保存后,重新运行
provisioning.bat脚本。
4.2 TPC 工具特殊配置
- 加载同路径 XML 配置文件,取消勾选 “Is the firmware full secure”;
- 配置安全域大小:
- 打开
STiROT_Appli_TrustZone工程,查看 Secure 域 Flash 占用(示例:0x6000); - 在 TPC 中 “Size of the secure area” 填写 0x6000,“Firmware area size” 填写 0x20000(128K,需大于 S+NS 工程总占用);
- 打开
- 生成新的
STiROT_Config.obk文件。
4.3 编译 S+NS 双工程
- 打开
STiROT_Appli_TrustZone工程,先编译Secure子工程,再编译NonSecure子工程; - 编译后自动生成加密签名固件,后续预配置、运行验证步骤与 Full Secure 工程一致,串口打印正常即表示部署成功。
5. 固件更新步骤(两种工程通用)
以 Full Secure 工程为例,更新固件版本从 “A” 到 “B”:
5.1 修改代码并重新编译
- 打开
STiROT_Appli工程,修改版本号:const uint8_t UserAppId = 'B';; - 重新编译,生成新的
appli_enc_sign.hex(加密签名固件)。
5.2 触发跳转到 Bootloader
- 在 Tera Term 串口终端输入 “1”,程序跳转至内置 Bootloader;
- 断开 Tera Term 串口连接。
5.3 串口下载新固件
- 打开 STM32CubeProgrammer,选择 UART 模式连接开发板(波特率 115200 bps);
- 将新生成的
appli_enc_sign.hex拖入 CubeProgrammer,点击 “Download”; - 下载完成后,重新连接 Tera Term,复位开发板,串口打印 “User App#B”,更新成功。
6. 芯片还原:DA 回退(恢复 Open 状态)
当芯片处于 CLOSED 状态时,需通过 DA 回退解锁,步骤如下:
- 打开 STM32CubeProgrammer,选择 ST-LINK 模式,切换至 “DA” 标签页,点击 “Discover”;
- 配置密钥与证书路径:
- Key File Path:
C:workspaceSTM32Cube_FW_H5_V1.1.0ProjectsSTM32H573I-DKROT_ProvisioningDAKeyskey_3_leaf.pem; - Certificate File Path:
C:workspaceSTM32Cube_FW_H5_V1.1.0ProjectsSTM32H573I-DKROT_ProvisioningDACertificatescert_leaf_chain.b64;
- Key File Path:
- 点击 “Continue”,选择 “Full Regression”→“Execute”,回退成功后,Product State 恢复为 Open,TrustZone 自动关闭。
7. 关键注意事项
- 密钥管理:自定义生成的密钥对(STiRoT_Encryption.pem、STiRoT_Authentication.pem)需单独备份,丢失将导致固件无法更新;
- 工程匹配:TPC 中 “Is the firmware full secure” 勾选状态需与实际工程类型一致,否则编译或运行失败;
- 路径禁忌:软件包与工程路径严禁含中文、空格,否则脚本运行或预配置失败;
- Product State:严禁设置为 “LOCKED”,否则芯片无法还原;
- TrustZone 激活:S+NS 工程需在 Option bytes 中设置 TZEN=0xB4,Full Secure 工程无需使能。
STM32H573 STiROT 的核心落地逻辑是 “配置生成→工程编译→预配置→安全启动→加密更新”,关键在于 TPC 工具的工程类型配置、密钥管理与脚本路径正确性。Full Secure 工程适合纯安全需求,部署简洁;S+NS 工程适合复杂业务,需划分安全域与非安全域。两种工程的固件更新流程通用,均通过加密签名固件保障传输与运行安全。
阅读全文
102