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

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

[复制链接]
小萝卜啦啦啦 发布时间:2024-11-30 20:38
这是安全启动的最后一步,U-Boot启动Kernel,对应第一篇的这张图
8.png 2 d( b4 q4 w) b4 o
一.启动方式说明及要求
8 L/ j1 n# O& s
U-Boot启动Kernel有很多种方法,如果要实现安全启动,那就要使用“FIT image”的这个方法(FIT = Flattened uLmage Tree),来实现在加载的同时还能完成校验的功能
6 y% i* A7 M& A* P. M+ m

/ f) O: D: N+ G7 C) j
FIT image是用一个树状结构来描述整个image的样子,这个image其实里面包含了很多小的image和配置信息,每个image都有hash,这样就可以加载一个小image,校验他的hash,然后再加载下一个。。。。。。这样就实现了加载的同时还能完成校验的功能
; i! c6 P- @: L  ]4 L
! i5 ]$ d0 U# m& M/ {/ N
刚才说了,启动Kernel有很多种方法,因此要实现安全启动,还有一些很重要的事情要做,例如:

) x* ^% i7 S5 E8 G& y: J
1.关闭U-Boot的cmd和console
& L" a5 p- z0 }' K) _
2.关闭其他启动方式,只允许以FIT的方式启动
9 |8 S6 ~5 r) c8 f$ u# B
......

' F; C8 K  y+ ]; R
' Y+ @0 M3 p+ s0 t! `0 t
下图是ST给出的一些建议
8 N* {& G& j( I) W) R( {

" s2 Q7 L( ^% i8 H4 N
2.png
* `( }1 W6 D/ w( V
( I/ B" j  ?/ m2 ?* `- z
二.第一步:生成秘钥
) l6 }5 h% R. J( b( u
和以前的一样,首先要生成秘钥对,使用U-Boot校验带签名的FIT使用的加密方法为RSA。在PC上使用软件生成秘钥及证书等等信息,可以使用openssl(很可惜,ST提供的KeyGEN只能提供ECC秘钥,没法使用)

5 Q3 L' g7 ]5 E
3.png
# s3 r5 T. A6 a9 V

: X4 L" K- R  ~6 C
( U- T' N) P5 b3 i( X: Q- C. R. ^- V0 p' G6 R3 m6 q
三.第二步:签名固件

/ _' _5 _% C! m. G5 H7 I: _( D& Y
使用生成的PV Key对FIT image进行签名

: `/ |  O" j8 Y! y. ^* a
5.png

1 i1 Z, I  U5 Z( {
签名后,FIT中会增加签名信息,后续就需要使用这个签名信息说校验

5 C+ A5 U0 ^- S* W. u7 m% O% I5 J3 i! t4 Q
在PC上对FIT image签名时使用的命令是mkimage,最终打包生成的带签名的FIT image如下图所示
$ L6 W* S) U# t0 N9 o
7.png

2 Q, Z# b6 i3 F( d) A
同时mkimage命令还可以实现把PB Key插到U-Boot的设备树中
- o  g* w* m6 d
8.png

. X0 H4 ?% f! _% U. Y5 e$ `6 _5 L' v& j1 X" |* g% U$ d+ m
签名也是很灵活的

5 e2 T, r8 d$ L- r8 o
方案1:可以把所有image和hash进行一个签名,到底使用那个image由配置文件决定。(推荐用这个方案)
% b" }2 l6 X) V. b5 y
方案2:也可以每个image独立进行签名
) S7 M# \/ x1 q7 r
四.第三步:U-Boot device tree

' ^2 ~4 t9 c3 c
9 Z4 D8 I* f: @' A$ V
生成的PB Key需要加到U-Boot的device tree中% A) a1 U: n. ]3 w# O
4.png
5 |! U% N" u" T
- b9 I* z9 a( u7 M( A( V
: Y% t6 K  n# e0 Y/ q

* [& W3 M  m- r8 ~. v& ?- @1 ?* A
四.第四步:验证
, E5 R) C% U) L" x" k) j$ i2 N- i# X当我在U-Boot下要启动kernel时会有一些步骤
2 B" K7 X/ L' n( w. S+ g4.1 读取FIT中的配置文件,拿到FIT的整个结构及签名, w) ~+ ~  S1 p! W

% `& s/ {3 t: U5 p* d7 H$ G4.2会使用在刚才存在设备树中的PB Key对FIT中的内容做一个RSA计算(具体是打包计算还是一个一个计算,取决于你第二步中选择哪种方式),得到的结果和签名做对比,以此判定image是否被篡改。如果不一致,就不会启动kernel
6 B1 B$ f! [; _4 @0 _  p8 X! O. L- l: ~# Q
4.3 当上一步成功后,会计算每个要使用的image的hash和FIT image中的做对比,看看每个image的hash是否正确,任一不对,kernel也不会启动
# b/ c/ H3 w& H  X
6.png
+ q6 l. T0 `: d: Z" W) I) X6 {2 e
! I4 V7 B: D% W6 U3 I% C5 r, C% v" Q* t
五.总结

0 i/ g4 U5 N! @! s3 P/ Y
         我只是简单的学习了一些安全启动的相关内容,挑了一些重点的学习了一下,其实学习的还是比较浅的,这相关内容还可以有很多可以深入学习的,wiki、文档都没有仔细看过,只是简单的学习一些皮毛
' R, {. u" z0 L  R
        ST能专门录制一系列关于MPU安全启动的视频,我还是很感动的,相比我们看文档自学,通过视频讲述的方式,我们可以快速获取知识,ST的老师讲的也是非常好,PPT很简洁,结构清晰。
0 ~2 B& j* x% r5 L4 R- o$ h& i( f( O/ ?
        最后我还有一些小建议,关于实操部分希望后续可以出一些更详细的指导文档或者视频教程(之前学习nano edge ai时就有这样的视频),这样我们回头可以拿着板子看视频实际动手操作一下,就不会走弯路
9 W+ t1 i+ I# k4 X

  r9 {% q$ a" ]) N5 e7 c# f; F7 f& e9 V3 C5 G! C7 ?6 K
收藏 评论0 发布时间:2024-11-30 20:38

举报

0个回答

所属标签

相似技术帖

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