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

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

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

7 ~% A$ F, _  Y$ u$ d; u
U-Boot启动Kernel有很多种方法,如果要实现安全启动,那就要使用“FIT image”的这个方法(FIT = Flattened uLmage Tree),来实现在加载的同时还能完成校验的功能

6 Y+ n8 p* i0 j, R* G: n, d6 r7 l
$ O& t( }) `0 T2 P: m: [. G
FIT image是用一个树状结构来描述整个image的样子,这个image其实里面包含了很多小的image和配置信息,每个image都有hash,这样就可以加载一个小image,校验他的hash,然后再加载下一个。。。。。。这样就实现了加载的同时还能完成校验的功能

' N/ |% i3 B  b8 v1 D2 |$ J) m: w$ y# O
刚才说了,启动Kernel有很多种方法,因此要实现安全启动,还有一些很重要的事情要做,例如:

7 ?# Y( C, S' O! l1 N9 I( [4 d
1.关闭U-Boot的cmd和console
( ]3 p; u4 e2 K- r- H# R5 |
2.关闭其他启动方式,只允许以FIT的方式启动
; w9 s% |( U& \/ h# ~% \  n5 ^
......

6 K' y5 i6 O# d4 ~" d$ A
. Z$ a$ m, h6 ]5 ~  c* Y. @6 k0 Y5 t
下图是ST给出的一些建议
4 Y; p) G( k: E5 |

8 F6 r/ X3 z; `$ j
2.png

8 H' ^) u# Q! ?) U: X  ^8 M0 F% n8 W& [- E- {
二.第一步:生成秘钥
' u4 @% Y) W3 `. S! D% H
和以前的一样,首先要生成秘钥对,使用U-Boot校验带签名的FIT使用的加密方法为RSA。在PC上使用软件生成秘钥及证书等等信息,可以使用openssl(很可惜,ST提供的KeyGEN只能提供ECC秘钥,没法使用)

- a0 U# u1 Q. Y( g
3.png
, P3 _  D- J8 A

% ]9 {( J3 q- ?6 v& h. k+ b
% |* d0 r* Q# }+ f& _; x9 G4 z8 T2 O+ i, [" a8 z
三.第二步:签名固件

$ h6 @1 f0 C8 F$ U
使用生成的PV Key对FIT image进行签名
1 k8 Z  N0 L! D1 r! M
5.png

! f% J# B6 {7 X3 K
签名后,FIT中会增加签名信息,后续就需要使用这个签名信息说校验

# b8 G1 j. G* M6 I
9 L+ W3 H, y; l. P8 u; }
在PC上对FIT image签名时使用的命令是mkimage,最终打包生成的带签名的FIT image如下图所示
( F( _, O+ n2 B. L% a0 w: i
7.png

0 E' s6 j; q) {3 l8 ]
同时mkimage命令还可以实现把PB Key插到U-Boot的设备树中

) ]: k: r5 y6 E5 l
8.png
$ q- T& k) _; C1 S
& q9 E- o! W2 e" D( ^
签名也是很灵活的
$ T8 m1 D' f. [% Z) S, k
方案1:可以把所有image和hash进行一个签名,到底使用那个image由配置文件决定。(推荐用这个方案)
  ]: D$ {& l$ D1 z9 |! C; @3 O/ c
方案2:也可以每个image独立进行签名
: h/ [& U/ n) s9 L: ~
四.第三步:U-Boot device tree
. z9 x! Z& @+ g2 \# h

$ U! G3 l+ E- w- C5 e生成的PB Key需要加到U-Boot的device tree中6 C  e+ W: I$ Z0 g$ R
4.png

1 g8 G! P& \4 x6 F/ M
5 U  A( E% b* l4 i3 b' k' J
2 U* L9 H. o- P- P3 {! v% _
' H( N4 _, `+ P; H2 e/ d! X
四.第四步:验证. x+ V* m  F4 ~  n% W, _$ b; w6 K
当我在U-Boot下要启动kernel时会有一些步骤; |7 A6 M% Z8 j, Z
4.1 读取FIT中的配置文件,拿到FIT的整个结构及签名$ O- C, w0 ~& }" j& t* O
: F* ^& l% z* P
4.2会使用在刚才存在设备树中的PB Key对FIT中的内容做一个RSA计算(具体是打包计算还是一个一个计算,取决于你第二步中选择哪种方式),得到的结果和签名做对比,以此判定image是否被篡改。如果不一致,就不会启动kernel
' i! Y: r% k" u- @) \* Z
  r1 M& U0 d- y2 Z! |7 i* R* E# t4.3 当上一步成功后,会计算每个要使用的image的hash和FIT image中的做对比,看看每个image的hash是否正确,任一不对,kernel也不会启动

8 F# b; n" U& E& x4 S' k
6.png
: b3 Z, P+ m% V5 Z# A6 N' N) k: `0 g. B* F' @/ Q7 o
! x' F# q$ \" d: g; [0 O
五.总结

$ d2 q/ I( B! q- @( ^% {% B
         我只是简单的学习了一些安全启动的相关内容,挑了一些重点的学习了一下,其实学习的还是比较浅的,这相关内容还可以有很多可以深入学习的,wiki、文档都没有仔细看过,只是简单的学习一些皮毛

- |: v- b3 y6 w& o% _% @& L' w
        ST能专门录制一系列关于MPU安全启动的视频,我还是很感动的,相比我们看文档自学,通过视频讲述的方式,我们可以快速获取知识,ST的老师讲的也是非常好,PPT很简洁,结构清晰。

/ j( N1 X% W1 J8 ]
        最后我还有一些小建议,关于实操部分希望后续可以出一些更详细的指导文档或者视频教程(之前学习nano edge ai时就有这样的视频),这样我们回头可以拿着板子看视频实际动手操作一下,就不会走弯路

. ?9 H  z5 L; b- N" K
, C" i8 `( D/ M* W* _
; p: K6 E$ c! p7 K6 o. x" p
收藏 评论0 发布时间:2024-11-30 20:38

举报

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