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

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

[复制链接]
小萝卜啦啦啦 发布时间:2024-11-30 20:38
这是安全启动的最后一步,U-Boot启动Kernel,对应第一篇的这张图
8.png
& I/ j. _) l4 U' t2 o$ `
一.启动方式说明及要求

& e* A  V( e2 E' P6 N0 H8 h" t
U-Boot启动Kernel有很多种方法,如果要实现安全启动,那就要使用“FIT image”的这个方法(FIT = Flattened uLmage Tree),来实现在加载的同时还能完成校验的功能

$ k: c; k2 N5 e" X/ {: v
; B/ K% X' n, i9 D
FIT image是用一个树状结构来描述整个image的样子,这个image其实里面包含了很多小的image和配置信息,每个image都有hash,这样就可以加载一个小image,校验他的hash,然后再加载下一个。。。。。。这样就实现了加载的同时还能完成校验的功能

7 `9 ]" [4 c6 C' F% m2 d/ a2 M& D% M" @$ ~; D9 `
刚才说了,启动Kernel有很多种方法,因此要实现安全启动,还有一些很重要的事情要做,例如:

6 [( P0 t$ l3 W; V" T6 d9 c) X- E
1.关闭U-Boot的cmd和console

# \6 ~/ u8 W9 R8 C8 _, N
2.关闭其他启动方式,只允许以FIT的方式启动

  ?, f1 m& K; l# H& }
......
7 P& ?' _# @: Z
0 D) V1 y/ `8 ?0 ?4 l# n( \5 h
下图是ST给出的一些建议
% h9 V5 u# n' w$ k2 o. W6 y
2 a. R( E% ^( F: o
2.png

# I$ s; U; e) h2 Z: t7 x4 J; |$ t. j: k7 I. ^% Y7 F
二.第一步:生成秘钥

# Q" `3 B0 f0 V: Z
和以前的一样,首先要生成秘钥对,使用U-Boot校验带签名的FIT使用的加密方法为RSA。在PC上使用软件生成秘钥及证书等等信息,可以使用openssl(很可惜,ST提供的KeyGEN只能提供ECC秘钥,没法使用)
# K' y! _  s4 _  I+ f
3.png

9 o4 f; T3 S/ N7 q/ ]# A. j3 D8 u4 \5 P6 y
) _/ |" I. j4 p; n/ b* x7 ?7 C
1 n. H# z! j4 ?' E2 n
三.第二步:签名固件

6 o! G" X- B* x5 r, H7 @
使用生成的PV Key对FIT image进行签名

% s4 Y( ?5 T( q+ }
5.png

: T9 P/ u5 Y# k: u( p, n& O
签名后,FIT中会增加签名信息,后续就需要使用这个签名信息说校验

5 _' w) x- I+ g( v+ c1 S8 K$ }* }, S; _' w# x5 b6 n7 }( P2 L9 \9 S
在PC上对FIT image签名时使用的命令是mkimage,最终打包生成的带签名的FIT image如下图所示

1 L0 p, S' U! b# ^' [7 d) v
7.png
/ Y1 N0 _$ S" n8 d- Z4 `
同时mkimage命令还可以实现把PB Key插到U-Boot的设备树中

' s" _; J0 @2 p1 \
8.png
# u$ x; q0 [8 A" f) [4 B* U

. A2 A6 n* Q& `) J" L6 |4 \
签名也是很灵活的

5 b" A& m, U3 Z
方案1:可以把所有image和hash进行一个签名,到底使用那个image由配置文件决定。(推荐用这个方案)

! Y; O0 I9 E; `5 V7 W0 N
方案2:也可以每个image独立进行签名
* n# @: Y. _' S1 F
四.第三步:U-Boot device tree

  ]5 n2 J, K8 f2 J+ v/ @

: z# l( s7 P) j: q4 s# ]! f生成的PB Key需要加到U-Boot的device tree中
, Y% J6 K7 q: b
4.png
6 l! F; e: V( d( I8 o% z

, N+ H8 j* G; `. s" f6 _( B4 j
6 B4 T, d& H5 ~
# c( Z, v* f' p
四.第四步:验证
4 S) X8 v. n& O当我在U-Boot下要启动kernel时会有一些步骤5 i! w4 K" Y  b) Y, S
4.1 读取FIT中的配置文件,拿到FIT的整个结构及签名. R* p& `. g- `* \% i/ m; p
0 @0 K3 y3 n* B7 k  B
4.2会使用在刚才存在设备树中的PB Key对FIT中的内容做一个RSA计算(具体是打包计算还是一个一个计算,取决于你第二步中选择哪种方式),得到的结果和签名做对比,以此判定image是否被篡改。如果不一致,就不会启动kernel" L& O8 I- r. o6 K& d
/ X; y( c7 q1 ^. @
4.3 当上一步成功后,会计算每个要使用的image的hash和FIT image中的做对比,看看每个image的hash是否正确,任一不对,kernel也不会启动

  J: V! }9 o$ C% u
6.png
  h4 P; H, D% h; `5 v8 z& }  B0 s) ]" o2 c. Q) |  |
" {; p3 S; k& q! r6 |' C& M
五.总结
# ?: R0 D& N5 I% d" b! c0 H
         我只是简单的学习了一些安全启动的相关内容,挑了一些重点的学习了一下,其实学习的还是比较浅的,这相关内容还可以有很多可以深入学习的,wiki、文档都没有仔细看过,只是简单的学习一些皮毛

  i2 [9 M4 @/ M3 I/ B
        ST能专门录制一系列关于MPU安全启动的视频,我还是很感动的,相比我们看文档自学,通过视频讲述的方式,我们可以快速获取知识,ST的老师讲的也是非常好,PPT很简洁,结构清晰。

) r: t- q% Q: f8 j
        最后我还有一些小建议,关于实操部分希望后续可以出一些更详细的指导文档或者视频教程(之前学习nano edge ai时就有这样的视频),这样我们回头可以拿着板子看视频实际动手操作一下,就不会走弯路
3 n. u8 k5 F' W: G1 h
  F& O* l$ T9 T+ X6 \* O/ W

8 ?0 v8 Y$ G  H7 [0 Y! t
收藏 评论0 发布时间:2024-11-30 20:38

举报

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