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

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

[复制链接]
小萝卜啦啦啦 发布时间:2024-11-30 20:38
这是安全启动的最后一步,U-Boot启动Kernel,对应第一篇的这张图
8.png
1 O# k1 `! f2 X! e
一.启动方式说明及要求
" W5 \9 w+ V0 l: @6 _- D- |1 Q7 v
U-Boot启动Kernel有很多种方法,如果要实现安全启动,那就要使用“FIT image”的这个方法(FIT = Flattened uLmage Tree),来实现在加载的同时还能完成校验的功能

) h# k7 m# l( `) O
, d0 T2 ~! g  ^; M; Z  ~8 _/ I
FIT image是用一个树状结构来描述整个image的样子,这个image其实里面包含了很多小的image和配置信息,每个image都有hash,这样就可以加载一个小image,校验他的hash,然后再加载下一个。。。。。。这样就实现了加载的同时还能完成校验的功能

8 O- F0 [0 _1 U3 O5 l9 C' c; p; f. P8 p" o" \/ \
刚才说了,启动Kernel有很多种方法,因此要实现安全启动,还有一些很重要的事情要做,例如:

7 o, y' V* Q1 h& L" {
1.关闭U-Boot的cmd和console

* D0 I" ?- U; q* A; Y
2.关闭其他启动方式,只允许以FIT的方式启动
1 ^( |; @( ]* d0 j! _  t
......

5 `) q( X. e" ^
+ y% G, J! X7 W3 E" M
下图是ST给出的一些建议

+ l* v5 e6 |2 z0 O. @
* Z9 e% h' @$ q) l$ J7 |
2.png

# N& x2 q- p. l( m: z- O+ X* i0 ]8 c) x' D' D: C1 @; w
二.第一步:生成秘钥
1 n, x% m) d# E7 c3 M' f" b
和以前的一样,首先要生成秘钥对,使用U-Boot校验带签名的FIT使用的加密方法为RSA。在PC上使用软件生成秘钥及证书等等信息,可以使用openssl(很可惜,ST提供的KeyGEN只能提供ECC秘钥,没法使用)

; f4 A) e6 x- |. a0 h9 v2 `
3.png

4 S; |6 U+ U6 `8 X6 c. j( R
. n9 y+ U# N' ~4 t& s! a4 _$ n9 Q: c1 z- c( @& M0 d; Y+ R
# a/ Q7 d# `; F2 M$ B' Q2 K
三.第二步:签名固件
4 w( Z7 ]. }  E
使用生成的PV Key对FIT image进行签名

* N$ v9 ^1 \0 E+ _! x, `8 W
5.png

+ m3 {5 V# @* q. B# ^/ o
签名后,FIT中会增加签名信息,后续就需要使用这个签名信息说校验
4 t8 ]0 T# A/ Z' ^  N2 @
4 D. K' @. ?( ^7 b: ^+ S
在PC上对FIT image签名时使用的命令是mkimage,最终打包生成的带签名的FIT image如下图所示
4 I  w$ N1 X  t6 _; q$ ^
7.png

+ e' C. s! ?0 G, ]3 l; J2 D! L, c
同时mkimage命令还可以实现把PB Key插到U-Boot的设备树中
8 Y$ a3 L& s$ F) T/ Q
8.png

$ R  [7 U5 S5 Q4 h$ v: o% s
; e: D# |7 I. q; m" c
签名也是很灵活的
( N5 n! O" s) O0 w/ P
方案1:可以把所有image和hash进行一个签名,到底使用那个image由配置文件决定。(推荐用这个方案)

8 m4 P" A2 g  R- i; a2 e
方案2:也可以每个image独立进行签名
3 s9 C/ x( d/ d0 \$ _1 \, M
四.第三步:U-Boot device tree
# `9 V8 e9 X9 x) }  l4 R" Q9 p

( Z0 }4 s7 c. L+ J  [6 X生成的PB Key需要加到U-Boot的device tree中4 d/ l- P+ F4 c
4.png
1 B, V& ?1 Z; X. e

: @7 E. z, ?' j/ B1 C5 @! o+ U0 C8 t6 q, ^

- ?2 s! |7 c; q5 f( d& E, Q
四.第四步:验证  V+ w- I9 ~+ W6 L0 U7 F
当我在U-Boot下要启动kernel时会有一些步骤
% y5 L; Q7 {2 U3 {; B/ J4.1 读取FIT中的配置文件,拿到FIT的整个结构及签名
0 y( }0 M9 g4 n; u5 Q
0 i+ z0 k" V0 H# W$ K4 c4.2会使用在刚才存在设备树中的PB Key对FIT中的内容做一个RSA计算(具体是打包计算还是一个一个计算,取决于你第二步中选择哪种方式),得到的结果和签名做对比,以此判定image是否被篡改。如果不一致,就不会启动kernel
4 ^! S$ v% x) }) m5 \! V9 F3 \5 U; w
4.3 当上一步成功后,会计算每个要使用的image的hash和FIT image中的做对比,看看每个image的hash是否正确,任一不对,kernel也不会启动

  W! a0 Y# a9 W3 d2 ?. W
6.png ( u( B9 b) ?$ f$ y! Y  q) e. m( k$ S
- Q( `/ W8 ~# @% t

# j* A7 V2 s' U% a1 |8 G% c, k
五.总结

$ {" m2 v6 \6 `2 d# r, `
         我只是简单的学习了一些安全启动的相关内容,挑了一些重点的学习了一下,其实学习的还是比较浅的,这相关内容还可以有很多可以深入学习的,wiki、文档都没有仔细看过,只是简单的学习一些皮毛
9 H0 M+ y1 R8 l0 H" R( R( T! W6 s8 S
        ST能专门录制一系列关于MPU安全启动的视频,我还是很感动的,相比我们看文档自学,通过视频讲述的方式,我们可以快速获取知识,ST的老师讲的也是非常好,PPT很简洁,结构清晰。

+ [$ S3 A/ A1 K" ]2 [- D
        最后我还有一些小建议,关于实操部分希望后续可以出一些更详细的指导文档或者视频教程(之前学习nano edge ai时就有这样的视频),这样我们回头可以拿着板子看视频实际动手操作一下,就不会走弯路

, r/ _) M+ i. e2 d5 W: W5 g

+ H  v! R( D4 h. ?0 V7 n' s
# u# d/ x( M( f- F& k
收藏 评论0 发布时间:2024-11-30 20:38

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版