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

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

[复制链接]
小萝卜啦啦啦 发布时间:2024-11-30 20:38
这是安全启动的最后一步,U-Boot启动Kernel,对应第一篇的这张图
8.png 1 v* y/ M( ~: n0 F, o$ [' r( S" O1 U
一.启动方式说明及要求

6 g* v( ~0 k( S& {2 r. P& }& S; I$ y
U-Boot启动Kernel有很多种方法,如果要实现安全启动,那就要使用“FIT image”的这个方法(FIT = Flattened uLmage Tree),来实现在加载的同时还能完成校验的功能
% a- `& J- M3 z3 V* V

$ s- q: T1 D( ~" z2 O1 f9 `
FIT image是用一个树状结构来描述整个image的样子,这个image其实里面包含了很多小的image和配置信息,每个image都有hash,这样就可以加载一个小image,校验他的hash,然后再加载下一个。。。。。。这样就实现了加载的同时还能完成校验的功能

& w3 D+ y) j+ s# i2 ^) Z8 ?0 j  {6 _3 O, b( L; @1 p6 Y
刚才说了,启动Kernel有很多种方法,因此要实现安全启动,还有一些很重要的事情要做,例如:
; `% ~1 D6 |: H7 x! J6 O) y- @
1.关闭U-Boot的cmd和console

& T4 H0 U/ |# p! V) A' S" R
2.关闭其他启动方式,只允许以FIT的方式启动

9 L% \+ S/ }9 l1 D$ I0 }
......
  i2 E* Z. ~9 X4 f4 h" s/ B4 q

* i+ N4 q) L, z% {
下图是ST给出的一些建议

( p2 q. S% T) _( g( g) p+ J/ h

% v# r  E4 a, D. o  P3 e
2.png

4 g9 R$ p; E/ A" i% }' O' c# X6 x, R6 U
二.第一步:生成秘钥
, m5 a0 D. g, U1 f* {( Q" V
和以前的一样,首先要生成秘钥对,使用U-Boot校验带签名的FIT使用的加密方法为RSA。在PC上使用软件生成秘钥及证书等等信息,可以使用openssl(很可惜,ST提供的KeyGEN只能提供ECC秘钥,没法使用)

; b: x7 j( }/ ^# b- `6 w$ C
3.png

2 o7 v, N$ E* ~2 C0 `* @/ t8 |7 v/ |! h: y, @/ d8 `& O" J' i

1 ]- z/ m# n: a8 v4 V5 `7 P% ?" d9 H/ ]
三.第二步:签名固件

% K: N3 y4 Z( }# B9 e$ J- f- t
使用生成的PV Key对FIT image进行签名
' ~; _( g% q* ~& e! M3 w$ o+ x0 K
5.png
& P+ k1 ~5 L9 k$ v
签名后,FIT中会增加签名信息,后续就需要使用这个签名信息说校验

6 ?: b* v* f) }# h( G6 g, C$ O# ^6 l! R* Q" W$ W5 a
在PC上对FIT image签名时使用的命令是mkimage,最终打包生成的带签名的FIT image如下图所示
( x0 `- u/ e( R6 q/ e
7.png
9 s, x1 R) `7 Q( X
同时mkimage命令还可以实现把PB Key插到U-Boot的设备树中
- C- H8 q" {* ~( a# R6 n
8.png

* {' x& y3 z  n, @. K9 G
, D# _% x; U  l  H1 H
签名也是很灵活的
& j( z5 V& n0 s  T' T& r- W1 y! p
方案1:可以把所有image和hash进行一个签名,到底使用那个image由配置文件决定。(推荐用这个方案)
0 M9 z3 l% v6 p9 j- c1 H
方案2:也可以每个image独立进行签名
; J5 }& |% k% K! P0 p+ }
四.第三步:U-Boot device tree
( n$ p% O4 X# n2 V1 |% Y1 z

- X# |) h2 s/ d& i- d  |' J生成的PB Key需要加到U-Boot的device tree中6 w# |3 s4 F  x; r* H7 M
4.png
! K" M- q1 J+ l+ R2 y, z! y" K
$ ^) U9 k( U* Y0 K
! g* N. m7 s, E) w- C
" r0 Z( r5 H: w7 |" {9 \6 ?; W# q) ?
四.第四步:验证' ~% w# T5 K. A( t# D" ]
当我在U-Boot下要启动kernel时会有一些步骤
- q$ T/ n8 N% a; `2 k4.1 读取FIT中的配置文件,拿到FIT的整个结构及签名
+ m2 V6 z2 C2 j5 q' J. D
& f& k$ g; r- T' n4.2会使用在刚才存在设备树中的PB Key对FIT中的内容做一个RSA计算(具体是打包计算还是一个一个计算,取决于你第二步中选择哪种方式),得到的结果和签名做对比,以此判定image是否被篡改。如果不一致,就不会启动kernel4 d# V4 s( i% R, p  ~( W

3 a1 A% v/ t4 g% R& u1 A; ^4.3 当上一步成功后,会计算每个要使用的image的hash和FIT image中的做对比,看看每个image的hash是否正确,任一不对,kernel也不会启动

7 Y2 W8 H3 W; E
6.png
' ~1 P. b! A6 T" O4 E6 R5 u# T3 j/ \. S* E# {, R  K' r
* y) K3 s  y3 ]& \
五.总结

# `8 w! ^6 _3 a- I
         我只是简单的学习了一些安全启动的相关内容,挑了一些重点的学习了一下,其实学习的还是比较浅的,这相关内容还可以有很多可以深入学习的,wiki、文档都没有仔细看过,只是简单的学习一些皮毛

  Y9 S4 }: Z4 A7 o) X) ^
        ST能专门录制一系列关于MPU安全启动的视频,我还是很感动的,相比我们看文档自学,通过视频讲述的方式,我们可以快速获取知识,ST的老师讲的也是非常好,PPT很简洁,结构清晰。
* L9 n2 l) E$ O7 o" r
        最后我还有一些小建议,关于实操部分希望后续可以出一些更详细的指导文档或者视频教程(之前学习nano edge ai时就有这样的视频),这样我们回头可以拿着板子看视频实际动手操作一下,就不会走弯路

/ R0 r5 s; R- ~3 c& F

1 E  b: p. Q: g3 I' U0 M
% s: W& p  D  A9 {4 k0 Q, u
赞 收藏 评论0 发布时间:2024-11-30 20:38

举报

0个回答

所属标签

相似技术帖

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