LAT1273
Local Application Tips
LAT1273 Rev 1.0 Jun. 2023
移植 SBSFU STM32G070 的过程
关键字:SBSFU 移植
1. 前言
客户使用 STM32G070RBT6 给海外用户开发产品,由于当地新需求,产品需要增加安全启
动的功能。 但是由于 X-Cube-SBSFU 包提供的示例中,只有基于 STM32G071 的示例。客户
因此询问该怎么移植。本文将讲解这个移植过程
2. 基于 STM32G070 STM32G071 SBSFU 实现差异
在正式讲解之前,我们首先来看一 STM32G070 STM32G071 SBSFU 实现差异。
STM32G070 是一个 value line 产品,首先,我们要意识到,有一些安全特性,相比于
STM32G071,它是没有的,比如PCROPBOOT_LOCK Secure User Memory。那么,
缺少了这些安全特性的 STM32G070,是否还能实现安全启动的功能呢 ? 答案是肯定的。我们
先来看 PCROPBOOT_LOCK,以及 Secure User Memory STM32G071 上的 SBSFU
现中所扮演的角色是什?
Figure 1 STM32G0 SBSFU 安全实现
如上图,在 STM32G071 中,在安全启动的实现中,BOOT_LOCK 用来参与实现唯一启动
入口,Secure User Memory 则用来参与实现信任根。PCROP 在安全固件升级实现中用来与
LAT1273
LAT1273 - Rev 1.0 page 2/15
MPU 配合实现密钥的安全存储,同时在安全升级过程中涉及到一些密钥的加解密操作,借助于
Secure User Memory MPU 的功能, App SBSFU 本身实现完美隔离。
Figure 2 STM32G0 内存安全映射(运行 SBSFU )
回到当前问题,一旦 BOOT_LOCKPCROP,以及 Secure User Memory 缺少的情况下,
这些功能还能实现吗?
我们再来看下对于安全启动而言, 它需要实现哪些基本功能?
1> 不可更改不可绕过的一段启动代码
2> 每次复位必先执行安全启动代码
3> 验证系统配置的完整性
时钟配置
寄存器配置
存储器保护设置 ….
4> 启动信任根服务
通过密码学算法与密钥校验 App 的完整性与合法性(来源可信,未经篡改)
这里需要注意地是,上面提到的某一项安全属性也只是参与实现某一项功能,比如
BOOT_LOCK,它只是参与实现了唯一启动入口这个功能。从图 1 可知, 除了
BOOT_LOCK还有 RDP,那么在缺少 BOOT_LOCK 的情况下,RDP 是否也可以实现唯一入
口启动的功能。很明显,在 RDP2 时,MCU 的入口是唯一的。也就是说,没有 BOOT_LOCK
的参与下,RDP2 一样可以实现安全启动对唯一入口启动的需求。RDP2+WRP 就可以实现安
全启动的前两条基本要求。而第三条基本要求,完全是 SBSFU 内的纯软件实现。第四条要
求,通过 RDP2+WRP+MPU 也可以实现。其实 在缺少了 PCROPBOOT_LOCK
Secure User Memory 后,STM32G070 的安全特性其实跟 STM32F4 差不多,我们不妨来看下
STM32F4 是如何来实现 SBSFU 功能的。