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

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

[复制链接]
小萝卜啦啦啦 发布时间:2024-11-30 20:38
这是安全启动的最后一步,U-Boot启动Kernel,对应第一篇的这张图
8.png + N3 Y% I7 k- b" k: t
一.启动方式说明及要求

& G: ]4 n! J; L6 x9 e( ^: F
U-Boot启动Kernel有很多种方法,如果要实现安全启动,那就要使用“FIT image”的这个方法(FIT = Flattened uLmage Tree),来实现在加载的同时还能完成校验的功能
$ k: S2 v4 T5 G4 n( W7 _; p8 s

& D" O$ @, _# s$ c' _
FIT image是用一个树状结构来描述整个image的样子,这个image其实里面包含了很多小的image和配置信息,每个image都有hash,这样就可以加载一个小image,校验他的hash,然后再加载下一个。。。。。。这样就实现了加载的同时还能完成校验的功能

' V* K- c- T, Y
" V* i; k7 a5 \: n% C0 \3 o
刚才说了,启动Kernel有很多种方法,因此要实现安全启动,还有一些很重要的事情要做,例如:
, k# A, {9 x3 ~* T/ j9 M; W. a( o
1.关闭U-Boot的cmd和console
3 p7 d# p# k, H, `+ x
2.关闭其他启动方式,只允许以FIT的方式启动

5 i1 G; @! Z" C) b  U( L$ M& l
......
0 ?; d1 L! Q  A

7 N2 a) E' u6 ^( [
下图是ST给出的一些建议

, g( E  J) P) l0 B" }* ^
, ~$ j, ^1 Q. z) A+ B' \% n
2.png
4 Y" k: `+ _2 a+ n0 y8 E

7 L+ @  w( S' |; P8 n( G/ j
二.第一步:生成秘钥

+ @* t( d8 x  u8 a$ X
和以前的一样,首先要生成秘钥对,使用U-Boot校验带签名的FIT使用的加密方法为RSA。在PC上使用软件生成秘钥及证书等等信息,可以使用openssl(很可惜,ST提供的KeyGEN只能提供ECC秘钥,没法使用)

& k. K; ^0 F% o, p# Z8 I/ x" |( }
3.png

6 A% g5 k3 u$ p! u7 ^1 z8 \4 h1 b: v# C0 a8 M5 u
; y. x9 n* P* j& g  Q  V. j7 ~
  L. E' Z* ~1 T1 w2 w7 A' e1 i6 ?$ `
三.第二步:签名固件
7 s) ^# `  J' N! S. r3 [
使用生成的PV Key对FIT image进行签名

8 N% n( A5 A2 u. b
5.png
3 n8 N( X* @) U1 }0 q/ W
签名后,FIT中会增加签名信息,后续就需要使用这个签名信息说校验
, F4 E) w# p( d5 W# R9 L
2 }: H# h" V, m! A6 ^4 h
在PC上对FIT image签名时使用的命令是mkimage,最终打包生成的带签名的FIT image如下图所示

, D( E' D" i! d8 i
7.png

4 M7 t" o8 p" k- F0 t: e# q
同时mkimage命令还可以实现把PB Key插到U-Boot的设备树中
) Y. Z  B* f  B& D# T: Z6 Z$ ?
8.png
) {# d  w1 {; K

# T+ V2 e& p) X
签名也是很灵活的
. L% B; H) f/ J  }
方案1:可以把所有image和hash进行一个签名,到底使用那个image由配置文件决定。(推荐用这个方案)
4 o$ `  J2 g0 @* ?
方案2:也可以每个image独立进行签名

# m" g  s- k) N) `, y5 J* L
四.第三步:U-Boot device tree
% U$ m1 F( _; S# v# Z
; P5 X, u( V6 k+ V- ^# g
生成的PB Key需要加到U-Boot的device tree中
6 h+ R6 c, c0 x, A) E' b
4.png

( C: Q, G) Y  n7 K3 t% U+ K/ m5 B- q( T' d7 O+ o

7 W: {+ u& W, e

% H0 @" p% {0 z/ A1 |- o5 g
四.第四步:验证% M3 U1 a+ ?2 E/ t1 T
当我在U-Boot下要启动kernel时会有一些步骤
+ b% b- X# V- y! r3 O4.1 读取FIT中的配置文件,拿到FIT的整个结构及签名, [9 f' S$ E3 o0 i* V6 m4 ~6 N( ~
/ A5 J1 g1 v* \* |  I% ^- I8 s1 z
4.2会使用在刚才存在设备树中的PB Key对FIT中的内容做一个RSA计算(具体是打包计算还是一个一个计算,取决于你第二步中选择哪种方式),得到的结果和签名做对比,以此判定image是否被篡改。如果不一致,就不会启动kernel9 m1 k0 X8 h' a5 x+ z6 r7 A; b

& @) n( p! B" ]4 d3 W- e2 J* g4.3 当上一步成功后,会计算每个要使用的image的hash和FIT image中的做对比,看看每个image的hash是否正确,任一不对,kernel也不会启动

9 R7 J; X! e0 S5 s7 A( m$ E, T
6.png ( p- R' |& N: h

* V, N9 ]) {: L, P8 u  |: D4 z* Z+ s. S: q
五.总结
, _( z( k, B; g3 t
         我只是简单的学习了一些安全启动的相关内容,挑了一些重点的学习了一下,其实学习的还是比较浅的,这相关内容还可以有很多可以深入学习的,wiki、文档都没有仔细看过,只是简单的学习一些皮毛

4 N% `; n- M& r% Y' m8 k% E
        ST能专门录制一系列关于MPU安全启动的视频,我还是很感动的,相比我们看文档自学,通过视频讲述的方式,我们可以快速获取知识,ST的老师讲的也是非常好,PPT很简洁,结构清晰。

. b; N2 I& ?9 v4 z. d( Y6 J
        最后我还有一些小建议,关于实操部分希望后续可以出一些更详细的指导文档或者视频教程(之前学习nano edge ai时就有这样的视频),这样我们回头可以拿着板子看视频实际动手操作一下,就不会走弯路

: v! o5 g+ `9 M. o: h! G

/ v5 Q( l/ Q; f  v$ e7 [4 [1 {9 @- h# ^1 q
收藏 评论0 发布时间:2024-11-30 20:38

举报

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