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

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

[复制链接]
小萝卜啦啦啦 发布时间:2024-11-30 20:38
这是安全启动的最后一步,U-Boot启动Kernel,对应第一篇的这张图
8.png * [2 e3 f; y4 B1 b0 D7 K1 X
一.启动方式说明及要求
6 k: v: u7 N( w. F
U-Boot启动Kernel有很多种方法,如果要实现安全启动,那就要使用“FIT image”的这个方法(FIT = Flattened uLmage Tree),来实现在加载的同时还能完成校验的功能

+ U" l3 [% a. M& X4 I9 v& r3 A
" I7 Z5 D% D% B* |9 {
FIT image是用一个树状结构来描述整个image的样子,这个image其实里面包含了很多小的image和配置信息,每个image都有hash,这样就可以加载一个小image,校验他的hash,然后再加载下一个。。。。。。这样就实现了加载的同时还能完成校验的功能

, A* `8 c+ ~8 q1 N
% c* X  m8 z( s$ |1 J
刚才说了,启动Kernel有很多种方法,因此要实现安全启动,还有一些很重要的事情要做,例如:
8 K- s) H* ^3 \
1.关闭U-Boot的cmd和console

4 O/ {) e- t" t$ f, |
2.关闭其他启动方式,只允许以FIT的方式启动

& \% K' n6 i8 b6 b0 O$ U& c
......

  o6 U5 d: |  \4 d# C3 ?
* u4 F; w" }6 P) D
下图是ST给出的一些建议

  c3 v4 P+ r8 A0 d6 G, j

& j# b4 M! D) C$ J* u; J
2.png
2 @( _9 ]6 m  w& x- U/ {* W

2 i" P/ z) P2 l* L" X
二.第一步:生成秘钥
0 Q3 G. T! X  F+ G0 w
和以前的一样,首先要生成秘钥对,使用U-Boot校验带签名的FIT使用的加密方法为RSA。在PC上使用软件生成秘钥及证书等等信息,可以使用openssl(很可惜,ST提供的KeyGEN只能提供ECC秘钥,没法使用)

1 Q. T; @5 }0 ?. j, F) |8 d: A
3.png
  d6 t! F  |0 T
& I* E/ K8 `  o) Z2 o& V( `8 d6 K

/ e- W/ `2 ~; h9 k: g3 S. o
9 f* r6 d4 H- Y# w- \+ T& z, t! B
三.第二步:签名固件
8 D" J: V, I3 c& {' O
使用生成的PV Key对FIT image进行签名
/ Q4 R5 s- j' R) e. o0 V3 L
5.png

9 n7 d5 b+ m2 W! p( \1 R& N
签名后,FIT中会增加签名信息,后续就需要使用这个签名信息说校验

1 N0 D& P4 S- y: _6 K( f; {. j
6 K7 e6 A) J4 u% o; z  m( _/ j
在PC上对FIT image签名时使用的命令是mkimage,最终打包生成的带签名的FIT image如下图所示
; m0 N% s0 k8 t& ^& I3 Y1 i
7.png

0 U: o' |1 r. ]" Z* w# k2 y4 X
同时mkimage命令还可以实现把PB Key插到U-Boot的设备树中
" E- }9 L" z5 g5 g6 k1 \
8.png

* V; S4 D6 D7 Q2 T1 B' l
& _+ I6 s% [' H7 u3 O
签名也是很灵活的

2 O! ^# G7 e. P: I4 G8 |. w! O! `* Y. M
方案1:可以把所有image和hash进行一个签名,到底使用那个image由配置文件决定。(推荐用这个方案)
& n: x; I% e! j& I6 d0 A0 e
方案2:也可以每个image独立进行签名

) q; L! |1 L5 k+ s' L
四.第三步:U-Boot device tree
7 l* @0 J& N. A4 [' Y4 q% a. w" _
5 b; B; h+ y! L( C4 m! m$ I
生成的PB Key需要加到U-Boot的device tree中
  P$ a2 B% h; U- L
4.png

5 H+ N- W9 Z' s# \3 i# g7 Z  Y
7 w9 f! u4 Q* X) M& Q8 R7 x) c0 _
$ M* g; S: A9 S2 s& R

- M* Z$ A) N" h7 P& H
四.第四步:验证+ X, k4 y  Q) g" `1 p" B5 a
当我在U-Boot下要启动kernel时会有一些步骤
& R+ z8 m5 d  _/ l& J4.1 读取FIT中的配置文件,拿到FIT的整个结构及签名5 [3 t+ d  X' z: n
: I  \; F3 q& p& Y( M: E+ y
4.2会使用在刚才存在设备树中的PB Key对FIT中的内容做一个RSA计算(具体是打包计算还是一个一个计算,取决于你第二步中选择哪种方式),得到的结果和签名做对比,以此判定image是否被篡改。如果不一致,就不会启动kernel
; K- Y$ g* V  s! s3 n2 c3 i7 g! ~' k# b2 S) v
4.3 当上一步成功后,会计算每个要使用的image的hash和FIT image中的做对比,看看每个image的hash是否正确,任一不对,kernel也不会启动
- \8 C  Y* p2 b" s
6.png " x- F4 {8 J- U, T
) P5 G& }6 y1 `/ V; x$ T. d

/ y' a& P% y/ W" V
五.总结
2 _' k* I9 m5 b; q2 H
         我只是简单的学习了一些安全启动的相关内容,挑了一些重点的学习了一下,其实学习的还是比较浅的,这相关内容还可以有很多可以深入学习的,wiki、文档都没有仔细看过,只是简单的学习一些皮毛
! i) ]! z0 w, o' i5 C. f
        ST能专门录制一系列关于MPU安全启动的视频,我还是很感动的,相比我们看文档自学,通过视频讲述的方式,我们可以快速获取知识,ST的老师讲的也是非常好,PPT很简洁,结构清晰。
4 u7 t/ v* ?% W
        最后我还有一些小建议,关于实操部分希望后续可以出一些更详细的指导文档或者视频教程(之前学习nano edge ai时就有这样的视频),这样我们回头可以拿着板子看视频实际动手操作一下,就不会走弯路

5 }* W: o1 o# F# H+ t. O" ~" V
& [, d+ K" e+ G

' ^0 P4 h; G8 s% a5 e
收藏 评论0 发布时间:2024-11-30 20:38

举报

0个回答

所属标签

相似技术帖

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