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

《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中文论坛活动

即日起开启活动话题入口,之后的活动统一都放在此处,欢迎大家的加入!


最新内容

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版