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

《STM32MPU安全启动》④U-Boot启动Kernel

[复制链接]
小萝卜啦啦啦 发布时间:2024-11-30 20:38
这是安全启动的最后一步,U-Boot启动Kernel,对应第一篇的这张图
8.png
' p; C) q; O* n' T
一.启动方式说明及要求

& \% S6 `# r& N6 P( s
U-Boot启动Kernel有很多种方法,如果要实现安全启动,那就要使用“FIT image”的这个方法(FIT = Flattened uLmage Tree),来实现在加载的同时还能完成校验的功能
4 Y. Q6 L9 t! l' z" D3 l) |

. x- R! h  ^6 I! [; h$ Z, D
FIT image是用一个树状结构来描述整个image的样子,这个image其实里面包含了很多小的image和配置信息,每个image都有hash,这样就可以加载一个小image,校验他的hash,然后再加载下一个。。。。。。这样就实现了加载的同时还能完成校验的功能

8 n! |+ }: ]" l, x0 m' S' F( b( R$ ?# y7 \  E) I4 ?1 P
刚才说了,启动Kernel有很多种方法,因此要实现安全启动,还有一些很重要的事情要做,例如:
; U& m5 S, m# I! P
1.关闭U-Boot的cmd和console
/ Y! E4 h5 L. m& k9 v6 E. u' u) ^
2.关闭其他启动方式,只允许以FIT的方式启动

' H( W, n4 S" A
......
+ S* ~, M4 t$ N8 |' c" G: F8 `+ s
9 t' P/ X  E* S5 n$ F
下图是ST给出的一些建议
) X" V( y. t7 t4 ^

$ V( E$ g+ Q: D3 |: n5 k
2.png

0 X3 `; R, \% P% C# u2 _9 p% r0 r; X
二.第一步:生成秘钥

- t5 X: k4 z% \6 A8 U9 k7 B) b
和以前的一样,首先要生成秘钥对,使用U-Boot校验带签名的FIT使用的加密方法为RSA。在PC上使用软件生成秘钥及证书等等信息,可以使用openssl(很可惜,ST提供的KeyGEN只能提供ECC秘钥,没法使用)

+ u* }/ r: u/ ]5 Z- B. ^! g
3.png
% l5 e' b+ Q5 Z

+ ]1 P. e2 N2 ^) C) I) \2 j
/ p% v. N0 l, E3 [2 m* ?, w" {- E3 R" b
三.第二步:签名固件

$ m" \! |4 R1 _5 F# D  {  l0 O9 Y
使用生成的PV Key对FIT image进行签名

! C; i( V& a/ U& q: {
5.png
* {* @# P% d, P  e
签名后,FIT中会增加签名信息,后续就需要使用这个签名信息说校验
8 O  r+ r7 _' a( P  y% Z

4 s( H9 B3 \" y! z2 Z3 I3 w
在PC上对FIT image签名时使用的命令是mkimage,最终打包生成的带签名的FIT image如下图所示
+ d- n! u0 g7 t) ^& ~8 p
7.png
% ]. T' ^" a. ]5 Q, ]# \" C
同时mkimage命令还可以实现把PB Key插到U-Boot的设备树中

% \9 D7 J, R( ]  m8 s
8.png
& W( T( J$ S; X" R

3 K0 w% K$ {( k
签名也是很灵活的
( _* V6 m7 N5 h$ Q* q. Y9 ]; N
方案1:可以把所有image和hash进行一个签名,到底使用那个image由配置文件决定。(推荐用这个方案)
) n' Q, X7 `6 f! L5 O9 A
方案2:也可以每个image独立进行签名

1 x$ H" b# i& g$ z+ z3 I* [: m
四.第三步:U-Boot device tree
0 r( H8 m4 F5 i

) q  u' ]: k2 o( g生成的PB Key需要加到U-Boot的device tree中
( ^' q2 Z7 p$ ]5 F5 V
4.png
! o8 m" T! H! a, [' H1 L& d+ |
: j& B" K2 Q+ f8 t5 \

1 }) E8 B2 H2 a$ k, |: h% H- a: S

. d( X( N/ t$ k( z5 I+ g' D
四.第四步:验证7 `4 m' \3 t7 o4 k5 a: L
当我在U-Boot下要启动kernel时会有一些步骤! Y( `0 H# {6 K& T8 R. d
4.1 读取FIT中的配置文件,拿到FIT的整个结构及签名  o1 Q' o, C3 [0 _5 n

. C/ v& m2 p3 F. Y: k4.2会使用在刚才存在设备树中的PB Key对FIT中的内容做一个RSA计算(具体是打包计算还是一个一个计算,取决于你第二步中选择哪种方式),得到的结果和签名做对比,以此判定image是否被篡改。如果不一致,就不会启动kernel
; e* ~, T3 B3 U' m
& p9 n  h& `( P- Y$ S" B8 L( O2 q4.3 当上一步成功后,会计算每个要使用的image的hash和FIT image中的做对比,看看每个image的hash是否正确,任一不对,kernel也不会启动

/ p# `$ x( r  O7 E/ {0 w- f: [
6.png 9 E! {5 v) h, \3 Y
/ ~+ p( `" j' {+ t$ |% x
6 ^& {4 F9 k. V: ?! z1 G& k/ U; O
五.总结
! T, K8 Y9 k3 p; |0 L4 g  y; l
         我只是简单的学习了一些安全启动的相关内容,挑了一些重点的学习了一下,其实学习的还是比较浅的,这相关内容还可以有很多可以深入学习的,wiki、文档都没有仔细看过,只是简单的学习一些皮毛

: r& f. r- G# [! o( Y% V8 b$ ]/ C
        ST能专门录制一系列关于MPU安全启动的视频,我还是很感动的,相比我们看文档自学,通过视频讲述的方式,我们可以快速获取知识,ST的老师讲的也是非常好,PPT很简洁,结构清晰。
, ?1 |, }4 d5 p- Q
        最后我还有一些小建议,关于实操部分希望后续可以出一些更详细的指导文档或者视频教程(之前学习nano edge ai时就有这样的视频),这样我们回头可以拿着板子看视频实际动手操作一下,就不会走弯路
8 z; d7 q+ D) j' ~

/ x8 ]9 w$ N  R5 _5 P/ ~; h. y
9 x% r* {  O6 j
收藏 评论0 发布时间:2024-11-30 20:38

举报

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