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

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

[复制链接]
小萝卜啦啦啦 发布时间:2024-11-30 20:38
这是安全启动的最后一步,U-Boot启动Kernel,对应第一篇的这张图
8.png
/ q# w6 \; }/ q( G7 l  V
一.启动方式说明及要求

. m- C6 p! V2 T/ s( U
U-Boot启动Kernel有很多种方法,如果要实现安全启动,那就要使用“FIT image”的这个方法(FIT = Flattened uLmage Tree),来实现在加载的同时还能完成校验的功能

0 e1 h& f  X( q$ w% [
0 ]5 g- `) Y7 a  s' _+ p
FIT image是用一个树状结构来描述整个image的样子,这个image其实里面包含了很多小的image和配置信息,每个image都有hash,这样就可以加载一个小image,校验他的hash,然后再加载下一个。。。。。。这样就实现了加载的同时还能完成校验的功能

% o8 ]1 B8 f  Z8 c( ^5 n1 W% g
3 p: S3 Y; g  [' Y& N3 }# L
刚才说了,启动Kernel有很多种方法,因此要实现安全启动,还有一些很重要的事情要做,例如:

, P4 _; h2 f2 K4 r6 u  m
1.关闭U-Boot的cmd和console

' o4 a( Y) q( v% ~" _
2.关闭其他启动方式,只允许以FIT的方式启动
' l- v  m9 r5 y% B6 V
......

( G/ q6 P: O; i& p% ]7 p/ ~" \4 R
6 v0 Q- e9 `) F/ Q" E
下图是ST给出的一些建议
! D6 L4 p2 g% i) n# r4 F% [
' I8 W) G/ ?5 b; p
2.png

' W2 T9 _- S4 j5 \3 M+ Y& M" z/ F  ~
二.第一步:生成秘钥

. L% @* v. O. o' C1 P+ u
和以前的一样,首先要生成秘钥对,使用U-Boot校验带签名的FIT使用的加密方法为RSA。在PC上使用软件生成秘钥及证书等等信息,可以使用openssl(很可惜,ST提供的KeyGEN只能提供ECC秘钥,没法使用)
( y. ?+ U) y" A9 D7 v6 W
3.png
4 D& y" x  j, i! {1 C. G9 D8 k
; a% o* u" Q- `3 w

  M# m) k1 }) F# l! B- o, _
$ J/ ?( z" R% V$ r2 \  l- J% h( V
三.第二步:签名固件
1 {' J8 h  q' B5 }" F8 Z5 S! d& T, m
使用生成的PV Key对FIT image进行签名
+ ~% d- H1 x- {7 x3 z2 \
5.png
; X9 B& }' J9 z$ y
签名后,FIT中会增加签名信息,后续就需要使用这个签名信息说校验

* y+ }9 a" j- X! v4 V; m9 M6 b) |& z" j
在PC上对FIT image签名时使用的命令是mkimage,最终打包生成的带签名的FIT image如下图所示

% O0 F' F' ?! m0 S" X' W
7.png

9 J7 w3 N' g* \- Z9 N! N
同时mkimage命令还可以实现把PB Key插到U-Boot的设备树中

% K' R/ u" D. p1 s- M
8.png

1 m& V8 L# _( n& S# I1 V1 h
8 k/ c# P3 b* t& L
签名也是很灵活的
- O& o( P4 X, q" B3 G* ]
方案1:可以把所有image和hash进行一个签名,到底使用那个image由配置文件决定。(推荐用这个方案)

2 G: Z+ w4 G# ~# |& N9 [) ]
方案2:也可以每个image独立进行签名
+ L, t- S5 W# l
四.第三步:U-Boot device tree
  l0 Y8 X! j2 i: a1 G" T9 T

1 @# i* g/ w+ P1 Z# q$ O5 \生成的PB Key需要加到U-Boot的device tree中( Y. [9 b' Q1 `- U6 }. e& [
4.png
: o. u6 `1 \, R
8 k, _2 Z0 X% S: V

* o: }# ~  x( u. W- S) v+ g
$ p! f+ z7 m3 U1 |
四.第四步:验证
! K  Q. X8 B+ u, i9 t, A0 Y9 Y当我在U-Boot下要启动kernel时会有一些步骤
2 B0 G( M8 p- K8 p3 H! b  R: G4.1 读取FIT中的配置文件,拿到FIT的整个结构及签名( g& N9 P* }# u- F: W$ V: r! S# A. A$ s
0 m" y0 O9 v- r+ c
4.2会使用在刚才存在设备树中的PB Key对FIT中的内容做一个RSA计算(具体是打包计算还是一个一个计算,取决于你第二步中选择哪种方式),得到的结果和签名做对比,以此判定image是否被篡改。如果不一致,就不会启动kernel7 ?( D7 P, q$ g- }4 s; i9 Q- H

# \. b, R; f3 S0 b4.3 当上一步成功后,会计算每个要使用的image的hash和FIT image中的做对比,看看每个image的hash是否正确,任一不对,kernel也不会启动

) L1 u/ @& V+ q) ^
6.png
- T" D  s$ u& G  f7 @1 B+ J. V7 r2 e' w: n8 f9 F

& N- f% D" l2 ^6 o
五.总结

2 b: j& g# F! e# [5 s
         我只是简单的学习了一些安全启动的相关内容,挑了一些重点的学习了一下,其实学习的还是比较浅的,这相关内容还可以有很多可以深入学习的,wiki、文档都没有仔细看过,只是简单的学习一些皮毛
+ `9 I3 C% U- B7 W" d
        ST能专门录制一系列关于MPU安全启动的视频,我还是很感动的,相比我们看文档自学,通过视频讲述的方式,我们可以快速获取知识,ST的老师讲的也是非常好,PPT很简洁,结构清晰。
% R# F8 B- n% ~8 V2 V/ d* f% u7 `; S
        最后我还有一些小建议,关于实操部分希望后续可以出一些更详细的指导文档或者视频教程(之前学习nano edge ai时就有这样的视频),这样我们回头可以拿着板子看视频实际动手操作一下,就不会走弯路

  Z' a3 ]1 x" k% P( U$ a8 \
7 L0 L7 s+ T7 K: O& W: o

& ~! j" D! y% M+ `3 t( y, W
收藏 评论0 发布时间:2024-11-30 20:38

举报

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