你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

《STM32MPU安全启动》学习笔记之MPU13X/15X/25X到FSBL安全启动详细原理以及如何使能

[复制链接]
星海灿烂 发布时间:2024-11-26 22:37

一、STM32MP15从bootrom到FSBL安全启动原理

1、两个概念

Product Life Cycle

主要针对于支持安全启动的devices;需要使能。productlifecycle.png

有四种状态:

1)secured_unlocked;解锁状态。所有功能都能正常运行;

2)Under_provisioning; 与安全烧录、SSP有关;使用这功能才有这个状态

3)secured_locked;上锁状态,强制安全启动,带有正确签名的image才能启动和执行;默认关闭了调试功能

4)RMA状态;主要用于芯片回厂调试、失效分析使用。使用时,需要使用unlock密码进行unlock.解锁有3次限制。与OTP配置相关。

注意:STM32MPU15X/25X Product Life Cycle 是一样的,STM32MP13X相比15X多了带boundary scan disabled和JTAG disabled的状态。

Device Life Cycle

Rom code的行为与整个产品生命周期中设备状态强相关。

devicelifecycle.png

设备状态有以下三种:

1)Open state:设备默认状态;所有功能正常运行,不强制验证,但是会进行校验,不通过image也能正常启动。

2)Closed state: 通过烧写相关的OTP进入close state;此时强制校验,校验不通过,不能正常启动;对应于secure locked状态

3)RMA state:closed state下的设备可以进入这个状态。与产品生命周期的RMA状态一样使用。

注意:STM32MPU13X/15X/25X device state是一样的

2、Secure bootrom如何对FSBL校验

1)使用ECDSA校验算法;另外secure bootrom还带有一个带有防回滚的机制

2)还Rom code使用硬件加速器进行SHA256的哈希运算

具体图示如下

图片1.png前提:正常情况下,TF-A image带有一个header,不包含签名信息;当使能secure boot功能后,就需要对TF-A image进行签名;同时将签名密钥队里面公钥部分HASH值写入OTP(这个过程称为provisioning)。

流程:设备上电复位后,执行FSBL之前,secure boot rom会使用OTP中的数据对TF-A header中的签名、公钥进行校验,校验通过就会跳转到FSBL

3、上位机产生密钥和设备校验全流程

图示如下:

图片2.png

详细描述如下:

1)用户使用签名工具产生密钥队(公钥和私钥),接下来进行两步走:

① 将产生公钥的HASH值(PKH)写入BESC中的OTP,用于后续校验FSBL镜像;注:PKH是存储在OTP WORD的24-31的位置

图片3.png

② 利用签名工具(ECDSA算法:支持P-256 NIST和Brainpool 256t T1),将产生私钥的HASH进行签名,并存储在FSBL的HEADER中。

Header bin文件信息说明

图片4.png

注:

1、签名从header中Header Vesion的位置到FSBL镜像的最后的位置进行的,

2、产生密钥的过程也是使能安全启动的过程。

2)Secure boot rom如何校验FSBL

在上电复位后,执行FSBL之前,boot rom对FSBL做以下校验

① 验证公钥

a. 计算签名文件中公钥的HASH值;

b. 与存储在OTP WORD的24-31公钥的HASH校验;

校验通过则去校验镜像。

② 验证镜像

a. 计算FSBL payload、公钥、header的HASH值;

b. 与验证通过的公钥来验证header签名中的HASH值。

校验通过才会进行正常启动流程。

③ 防回滚检查

a. ROM code检查FSBL Header中FSBL的版本是否大于等于存储在OTP WORD 4 中FSBL 最小版本。如果不是,则验证失败。如果是,则ROM code继续正常启动

4、MP15安全启动如何使能

使能MP15X安全启动功能有以下步骤:

1) 产生校验密钥

a.使用STM32 KeyGen tool或者使用STM32CubeProgrammer 内置的

STM32MP_KeyGen_CLI命令行工具

b.产生3个文件,公钥和私钥PEM文件,公钥SHA-256哈希的二进制文件

2) 将信任根的HASH值烧录到OTP中。

烧录方式

a.STM32CubeProgrammer的GUI或者CLI命令行

b.Uboot的stm32 key 命令或者fuse 命令

c.使用ssp(安全加密烧录)

3) 将要加载的固件签名

使用STM32CubeProgrammer工具进行签名。

4) 将文件烧录到设备中

5) 将设备的device state设置成close状态(强制性进行secure boot rom校验)

a.设置device state 为close状态

在最终的产品中,需要将OTP_CFG0[6] 设置为1

b.为了使能对close状态的设备进行调试,需要在设备为open状态时烧录RMA密码。

二、STM32MP13或MP25从bootrom到FSBL安全启动原理

MP13X和MP25X安全启动原理是一致的,唯一的区别就是MP25带有M33核,生成密钥时需要生成FSBL-M相关的密钥。

1、MP13X 或MP25XSecure bootrom如何对FSBL校验有如下机制

1)使用ECDSA校验算法;另外secure bootrom还带有防回滚的机制;

2)支持FSBL认证密钥撤销的机制

MP13/MP25均支持8个密钥,当其中的一个密钥泄露时,可以取消该密钥的有效性;

3)支持FSBL使用AES进行解密

在STM32MP13X系列secure boot rom 校验FSBL使用HASH、PKA、CRYP、SAES解密加速器;

HASH执行SHA256哈希运算;PKA执行ECDSA签名校验;CRYP或者AES进行FSBL的解密。

具体流程如图示

图片5.png

前提:正常情况下,TF-A image带有一个header,不包含签名信息;当使能secure boot功能后,就需要对TF-A image进行签名;同时将8个签名密钥队里面公钥部分HASH值写入OTP(这个过程称为provisioning),还需要对FSBL进行加密

流程:设备上电复位后,执行FSBL之前,secure boot rom会使用OTP中的数据对TF-A header中公钥、签名进行校验,校验后,解密后就会跳转到FSBL。

2、上位机产生密钥和设备校验全流程

图示如下:

图片6.png

详细描述如下:

1)用户使用签名工具产生密钥队(公钥和私钥)和EDMK:

① 将产生包含8组公钥HASH表的HASH(PKHTH)写入BESC中的OTP,用于后续校验FSBL镜像;注:PKHTH是存储在OTP WORD的24-31的位置

图片7.png

② 如果还想加密功能,则密钥工具还需要产生加解密主钥(EDMK),EDMK是被写入OTP WORD的92-95位置

图片8.png

2)利用签名工具(ECDSA算法:支持P-256 NIST和Brainpool 256t T1),将激活状态的私钥HASH值对FSBL进行签名,这个时候需要存储激活密钥的索引在HEADER中。

Header bin文件信息说明。相比MP15,MP13增加了一个Authentication header extension。

图片9.png

图片10.png

注:

1、签名从header中Header Vesion的位置到FSBL镜像的最后的位置进行的,

3)PC上加密FSBL

前提条件:是需要给FSBL进行加密

① PC使用签名工具计算FSBL镜像文件的HASH值,并存储在HEADER中;

② PC使用派生常数计算加密解密主密钥(EDMK)的 PRF CMAC 派生,以生成加密密钥,派生常数也是存储在Header中。

③ PC使用AES加密算法对FSBL二进制文件进行加密。

注意:上述加密相关信息存储在Decryption header extension

图片11.png

4)Secure boot rom如何校验FSBL

在上电复位后,执行FSBL之前,boot rom对FSBL做以下校验

① 验证公钥

a. rom code读到HEADER,如果带校验,就会计算FSBL HEADER中哈希表的HASH值;

b. 与存储在OTP WORD的24-31位PKHTH的HASH比对,通过则说明头里面的HASH表有效,表里HASH值可以校验公钥;

c. 计算HEADER中的公钥的HASH值;

d. 检查公钥的有效性;

  • 判断HEADER中的key index是否大于存储在OTP WORD 32位置的最小有效key index;说明key index有效,否则无效
  • 公钥有效后,则比较公钥的哈希与对应哈希表中的HASH是否一致,一致则验证通过。

注意:如果key index大于OTP中的key index则会更新OTP中的key index,说明之前的key index是失效了。

② 验证镜像

a. 使用公钥来验证FSBL的签名;

b. 与验证通过的公钥来验证header签名中的HASH值。

校验通过才会进行正常启动流程。

③ 防回滚检查

a. ROM code检查FSBL Header中FSBL的版本是否大于等于存储在OTP WORD 4 中FSBL 最小版本。如果不是,则验证失败。如果是,则ROM code继续正常启动

④ 解密

a. 使用HEADER中的派生常数与存储在OTP的EDMK进行派生解密密钥;

b. Rom code使用产生的派生KEY,对FSBL payload进行AES解密;

c. ROM code对解密后的FSBL payload进行HASH计算;

d. Rom code将上述计算的HASH值与header中的HASH值进行比对。比对通过则跳转到FSBL运行。

3、MP13X/MP25X安全启动如何使能

使能MP13X/MP25X安全启动功能有以下步骤:

1) 产生校验和解密密钥

a.使用STM32 KeyGen tool或者使用STM32CubeProgrammer 内置的

STM32MP_KeyGen_CLI命令行工具

b. 产生8组对,包含8组密钥对的哈希表,对哈希表的HASH(PKHTH),还会产生EDMK(使能加密)

2) 将PKHTH和EDMK烧录到OTP中。

烧录方式

a.STM32CubeProgrammer的GUI或者CLI命令行

b.Uboot的stm32 key 命令或者fuse 命令

c.使用ssp(安全加密烧录)

3) 将要加载的固件签名或者加密(若需要加密)

使用STM32CubeProgrammer工具进行签名。

4) 将文件烧录到设备中

启动时,secure boot rom会打印校验状态如:

Bootrom authentication succeeded or Bootrom authentication failed

5) 将设备的device state设置成close状态(强制性进行secure boot rom校验)

a.设置device state 为close状态

在最终的产品中,需要将OTP_CFG0[6] 设置为1;开发阶段这一步可以跳过。

三、MPU13X/15X/25X在secure boot rom到FSBL有什么异同

1、相同点:

-- 都使用ECDSA算法;

-- 都支持防回滚;

-- 校验流程都是根据OTP中HASH值对公钥校验,进而验证FSBL的有效性。

2、不同点

-- MPU13X/25X支持签名外还支持对FSBL的加密;

-- MPU13X/25X支持8组密钥队,保存OTP中的是哈希表的哈希,而不是MPU15X 公钥的HASH

-- MPU13X/25X FSBL 镜像的HEADER包含的信息比MPU15X多(包含8组密钥对,加解密信息等)

注意MPU13X/25X的不同在于MPU25X带Cortex-M33核,生成密钥时还包含FSBL-M的密钥

收藏 评论0 发布时间:2024-11-26 22:37

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版