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

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

[复制链接]
小萝卜啦啦啦 发布时间:2024-11-30 20:38
这是安全启动的最后一步,U-Boot启动Kernel,对应第一篇的这张图
8.png
. [; x) @, w9 p- D# U/ ^1 J* X' R
一.启动方式说明及要求
9 g5 Q& d; B# Q- f$ k8 [1 z0 H
U-Boot启动Kernel有很多种方法,如果要实现安全启动,那就要使用“FIT image”的这个方法(FIT = Flattened uLmage Tree),来实现在加载的同时还能完成校验的功能

% [+ m- }0 _& ]8 S
. b) N2 A& L5 v# a2 b* j: m; ]0 q
FIT image是用一个树状结构来描述整个image的样子,这个image其实里面包含了很多小的image和配置信息,每个image都有hash,这样就可以加载一个小image,校验他的hash,然后再加载下一个。。。。。。这样就实现了加载的同时还能完成校验的功能

  `6 Y; X% O2 }9 I) _/ h
2 t2 C  ~( z" i! ]
刚才说了,启动Kernel有很多种方法,因此要实现安全启动,还有一些很重要的事情要做,例如:

. l) E. _3 j& o/ H. @+ J
1.关闭U-Boot的cmd和console

/ J( K$ _$ G  V5 }2 H; {0 I  c
2.关闭其他启动方式,只允许以FIT的方式启动

" ]7 l& `; u% q: ]# \
......
9 f% A+ y' F$ l4 j: `
" @: c% `" T; J" _5 q
下图是ST给出的一些建议
5 c. v6 H- @/ \6 O7 z
4 Z& q. @! C$ _" x' u! y# f
2.png
8 x( R; I8 j2 k# B' l

( b7 M' T( o! R9 c% @
二.第一步:生成秘钥

4 d; H; @+ C7 o" G4 W
和以前的一样,首先要生成秘钥对,使用U-Boot校验带签名的FIT使用的加密方法为RSA。在PC上使用软件生成秘钥及证书等等信息,可以使用openssl(很可惜,ST提供的KeyGEN只能提供ECC秘钥,没法使用)
. V( K' h/ P1 @9 [0 {( y* `# m; e( c
3.png
7 M6 p" O3 e7 U3 X( Q. ~# j
9 R. t( i" t; G- E4 n+ U' o; T" {
- X: {: w! u4 m, c" y6 d

# k1 d: h1 ^' q1 C2 }7 @& \
三.第二步:签名固件

% r; L- Y0 f. Y- _2 a
使用生成的PV Key对FIT image进行签名
# D0 e% O" v( k$ J& |2 `
5.png

& q' t* b+ e1 r8 G  @
签名后,FIT中会增加签名信息,后续就需要使用这个签名信息说校验

- l0 b+ m4 `1 }2 Z# w' [) ~( x; I( h5 @5 w( O  i
在PC上对FIT image签名时使用的命令是mkimage,最终打包生成的带签名的FIT image如下图所示
: _% u5 y8 k% p2 R' ^3 n3 p4 c
7.png

  Q" \+ z5 u* M# B' N9 o9 z
同时mkimage命令还可以实现把PB Key插到U-Boot的设备树中
; x, W% }" l  w6 j! k
8.png
& F8 V& Q& R) S- L% `

5 A$ }2 W' a8 `4 _# ~" m& i" H7 w
签名也是很灵活的

# p5 u6 j! R, N# Q' P
方案1:可以把所有image和hash进行一个签名,到底使用那个image由配置文件决定。(推荐用这个方案)
4 w$ B% e. n% N  |- b' c) P
方案2:也可以每个image独立进行签名
, A. L8 Q0 A+ O4 ^7 T
四.第三步:U-Boot device tree
/ H$ M( ~- j. ~6 Q8 U

3 H/ y  {8 _6 ~0 Q/ H生成的PB Key需要加到U-Boot的device tree中
; L. z( g' E& y
4.png

) Z4 u7 \( h6 R" p+ H
% V' @5 p* B# X4 V  |; K: o4 d: ^6 u9 v1 ]) C+ p% h
- B+ D% b" B7 K1 P3 a! I
四.第四步:验证
. u2 e* A7 X* r, n& ^当我在U-Boot下要启动kernel时会有一些步骤9 S& d' z5 t, a/ \9 m: g, H  L
4.1 读取FIT中的配置文件,拿到FIT的整个结构及签名( C0 I" F* E8 @, d' l9 D6 @

$ F4 }4 T6 h3 C' h4.2会使用在刚才存在设备树中的PB Key对FIT中的内容做一个RSA计算(具体是打包计算还是一个一个计算,取决于你第二步中选择哪种方式),得到的结果和签名做对比,以此判定image是否被篡改。如果不一致,就不会启动kernel8 H- x7 }. C3 l: B& L3 M8 P/ ?

9 d& q0 J2 r. q0 v" t4.3 当上一步成功后,会计算每个要使用的image的hash和FIT image中的做对比,看看每个image的hash是否正确,任一不对,kernel也不会启动

- k' I! l- q- `, z8 Q- H, O
6.png : J6 x) Y9 h2 g- \7 P$ K
5 d3 v* q4 V' L) m9 g
* O- [- C1 i6 N/ b+ G/ B. Y% E
五.总结

1 c. G) D$ Z7 \; g
         我只是简单的学习了一些安全启动的相关内容,挑了一些重点的学习了一下,其实学习的还是比较浅的,这相关内容还可以有很多可以深入学习的,wiki、文档都没有仔细看过,只是简单的学习一些皮毛
0 m, K7 r0 u( k
        ST能专门录制一系列关于MPU安全启动的视频,我还是很感动的,相比我们看文档自学,通过视频讲述的方式,我们可以快速获取知识,ST的老师讲的也是非常好,PPT很简洁,结构清晰。
! a% ?6 P8 v5 C* J3 \, m
        最后我还有一些小建议,关于实操部分希望后续可以出一些更详细的指导文档或者视频教程(之前学习nano edge ai时就有这样的视频),这样我们回头可以拿着板子看视频实际动手操作一下,就不会走弯路
! n8 |$ I( g, C) s& F/ V! H4 b! u
$ D. c8 O. {3 R4 [

5 E: T+ n; ^# s  ~7 S% {
赞 收藏 评论0 发布时间:2024-11-30 20:38

举报

0个回答

所属标签

相似技术帖

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