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

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

[复制链接]
小萝卜啦啦啦 发布时间:2024-11-30 20:38
这是安全启动的最后一步,U-Boot启动Kernel,对应第一篇的这张图
8.png 7 k7 p" `( d0 `4 X; G4 g. f2 Z
一.启动方式说明及要求

# Q0 z  g$ Z2 s" S) F8 A  i! B
U-Boot启动Kernel有很多种方法,如果要实现安全启动,那就要使用“FIT image”的这个方法(FIT = Flattened uLmage Tree),来实现在加载的同时还能完成校验的功能
& q+ |: x$ H5 C6 I9 N1 A0 F$ H6 `
6 f0 X' D8 C! C% I
FIT image是用一个树状结构来描述整个image的样子,这个image其实里面包含了很多小的image和配置信息,每个image都有hash,这样就可以加载一个小image,校验他的hash,然后再加载下一个。。。。。。这样就实现了加载的同时还能完成校验的功能

* ]% x1 p3 X4 w, [2 [; d- _0 ^; O' e
刚才说了,启动Kernel有很多种方法,因此要实现安全启动,还有一些很重要的事情要做,例如:

. e) g" W! x' r* u* A2 K+ R+ q
1.关闭U-Boot的cmd和console
, ^2 _$ z2 n- a# s
2.关闭其他启动方式,只允许以FIT的方式启动
2 X) {( b. k  A6 [8 ^- u
......

, n( Y! S. L8 I; u/ d, j' C! V- Z! g" P+ F  v- p+ n
下图是ST给出的一些建议

* f5 c. q) R2 E3 y, M$ Y

* B) G2 y$ Q0 Z4 C! _
2.png
1 ], K! {( a: J  [! A8 m; U
0 I" s' i: F2 Z+ w
二.第一步:生成秘钥

: q7 W7 L; E% A0 \0 [2 u" O# G- S
和以前的一样,首先要生成秘钥对,使用U-Boot校验带签名的FIT使用的加密方法为RSA。在PC上使用软件生成秘钥及证书等等信息,可以使用openssl(很可惜,ST提供的KeyGEN只能提供ECC秘钥,没法使用)
& R4 x  w8 ^! f6 {2 t
3.png
8 j. k" A' c/ l( Y. y

+ e' ]% k, \4 Q% f- A; q9 ^" }: C3 C5 Q
, u+ p7 H+ _3 I+ R- ~; V( X/ T5 r
三.第二步:签名固件
3 T) Q4 l7 G  B( s* i$ }5 q4 W
使用生成的PV Key对FIT image进行签名
7 }5 ~' D& j! o6 j; E
5.png

. t9 v' ^2 _: ^1 a9 j5 _2 t
签名后,FIT中会增加签名信息,后续就需要使用这个签名信息说校验
9 q0 s% l: Q; s) R
# y8 r  f9 j( g* Q  \' D
在PC上对FIT image签名时使用的命令是mkimage,最终打包生成的带签名的FIT image如下图所示

1 |3 `" h$ Y2 G& z/ {, r
7.png

5 g' r/ k& b/ M, Z
同时mkimage命令还可以实现把PB Key插到U-Boot的设备树中
3 N' W' m/ i" y. u
8.png

4 w# q& q, n1 y$ W6 w: s9 p2 {& |0 \  W/ u- a' J3 C4 W7 ~
签名也是很灵活的

) ?. J5 o8 ^* h" w
方案1:可以把所有image和hash进行一个签名,到底使用那个image由配置文件决定。(推荐用这个方案)

" Z( @$ J) `: D' B
方案2:也可以每个image独立进行签名
' F& Z0 G9 x' P! L% T
四.第三步:U-Boot device tree

# p4 b% b, \; f8 a# V, u- ~

# L: P2 Z5 I& L. ~生成的PB Key需要加到U-Boot的device tree中; ^2 ^4 `% U! D- d7 m% X7 ?
4.png

+ T* Y. c" {) O( [" k9 |9 w) Y5 R

+ B4 b! x- I, ?; J
; ~" Z6 [4 f# ^  g! _4 f. B8 H, L
四.第四步:验证
9 D# h2 s) a9 g6 b: \当我在U-Boot下要启动kernel时会有一些步骤
/ r! J* {0 v5 y' `: ^  R; p4.1 读取FIT中的配置文件,拿到FIT的整个结构及签名: O# p" Z* _1 H) d& j5 Q

; o1 w  }) N2 r, `: J, D7 f4.2会使用在刚才存在设备树中的PB Key对FIT中的内容做一个RSA计算(具体是打包计算还是一个一个计算,取决于你第二步中选择哪种方式),得到的结果和签名做对比,以此判定image是否被篡改。如果不一致,就不会启动kernel
( Z. ?( O- \# M# ]* M' P  U+ N
+ ^7 h! L% l1 e9 F4.3 当上一步成功后,会计算每个要使用的image的hash和FIT image中的做对比,看看每个image的hash是否正确,任一不对,kernel也不会启动

) Z* V4 q  W$ k! K
6.png
8 q/ H# {0 n" A! S
. S0 }1 E" [+ ~' p
! c: W: G1 X" W) Z
五.总结

0 e  q; x& R+ h3 y" g- ^$ Y
         我只是简单的学习了一些安全启动的相关内容,挑了一些重点的学习了一下,其实学习的还是比较浅的,这相关内容还可以有很多可以深入学习的,wiki、文档都没有仔细看过,只是简单的学习一些皮毛
" `) _/ v3 ?. W/ M
        ST能专门录制一系列关于MPU安全启动的视频,我还是很感动的,相比我们看文档自学,通过视频讲述的方式,我们可以快速获取知识,ST的老师讲的也是非常好,PPT很简洁,结构清晰。
) O3 r* b1 v- G# _$ o, y0 [5 u& b$ D
        最后我还有一些小建议,关于实操部分希望后续可以出一些更详细的指导文档或者视频教程(之前学习nano edge ai时就有这样的视频),这样我们回头可以拿着板子看视频实际动手操作一下,就不会走弯路

3 x/ v+ ^' ?. t4 x

3 H$ w8 x) ^. j
' {1 Y1 T/ n' T! U# F% p9 v  c3 w
赞 收藏 评论0 发布时间:2024-11-30 20:38

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版