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

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

[复制链接]
小萝卜啦啦啦 发布时间:2024-11-30 20:38
这是安全启动的最后一步,U-Boot启动Kernel,对应第一篇的这张图
8.png ) Z; D3 T+ i- C. Z
一.启动方式说明及要求
% @: U* n; @9 O
U-Boot启动Kernel有很多种方法,如果要实现安全启动,那就要使用“FIT image”的这个方法(FIT = Flattened uLmage Tree),来实现在加载的同时还能完成校验的功能

" `6 v& {" U4 }, G& T4 c
1 p. |3 ?! d+ s* O! b7 g" v
FIT image是用一个树状结构来描述整个image的样子,这个image其实里面包含了很多小的image和配置信息,每个image都有hash,这样就可以加载一个小image,校验他的hash,然后再加载下一个。。。。。。这样就实现了加载的同时还能完成校验的功能

0 e- ]  k- ^. d' h
. B- Y: W) |# L+ ?- \3 i" x9 y
刚才说了,启动Kernel有很多种方法,因此要实现安全启动,还有一些很重要的事情要做,例如:
* c8 t  j6 [- A. e6 }# r+ J1 r
1.关闭U-Boot的cmd和console
' W% ]$ M4 u2 J7 y" g: h+ R6 z2 N
2.关闭其他启动方式,只允许以FIT的方式启动
; x1 ?# w1 ~% `  K' Q# D
......
& U4 N4 ~( ~2 \/ C& C
. ^5 \2 ]9 v9 x
下图是ST给出的一些建议
# \9 l1 R# H; @  Q$ b

% Z9 o# {* X( B9 r
2.png
" M  F! {# Y/ c6 b! g+ H+ W8 Z
* g& |9 g/ _% h6 L
二.第一步:生成秘钥
/ |9 z2 N% R) q. y: E! P( H
和以前的一样,首先要生成秘钥对,使用U-Boot校验带签名的FIT使用的加密方法为RSA。在PC上使用软件生成秘钥及证书等等信息,可以使用openssl(很可惜,ST提供的KeyGEN只能提供ECC秘钥,没法使用)

" u& S5 l3 y' |; T) f2 F: \
3.png

1 s' q( L1 |/ l4 K' [! w2 o" {0 F) [8 O$ O; i

: d7 O( @- H  ]2 R% c4 a# a6 \  [
三.第二步:签名固件
0 t0 J: L* v- n* T' G
使用生成的PV Key对FIT image进行签名

; g2 Q5 I2 J3 D# z( o& o5 K1 R
5.png

3 ~) ^  D6 Q3 i5 U& o. A
签名后,FIT中会增加签名信息,后续就需要使用这个签名信息说校验

' N. D% |* a% r; s, O9 ~0 G0 a5 Y/ o% E$ y- V0 @
在PC上对FIT image签名时使用的命令是mkimage,最终打包生成的带签名的FIT image如下图所示

/ }/ X$ `% c* _
7.png
9 D2 q' D/ q8 D3 p. _& l
同时mkimage命令还可以实现把PB Key插到U-Boot的设备树中

6 B9 x6 u3 j1 m0 G
8.png

( w0 s  r  y: `- C7 K- F# Q
( p8 a7 a5 E+ }" q0 {, c
签名也是很灵活的

/ h$ d- ]# l9 V! U/ t2 Z
方案1:可以把所有image和hash进行一个签名,到底使用那个image由配置文件决定。(推荐用这个方案)

. z/ G4 o. f. u
方案2:也可以每个image独立进行签名

3 E0 _! C6 C7 I: F
四.第三步:U-Boot device tree

  A9 v) u4 f1 g5 t

; l2 y$ U& v1 y生成的PB Key需要加到U-Boot的device tree中
1 M$ s. {" T( Z- d/ ~
4.png
# ?) a" }/ P4 r5 @  E

3 u3 b, E0 s- ^4 E6 {9 p% _* h0 }  `' G% [' a3 c$ E, _

/ {$ r7 x1 {/ e  [5 Z& L, m
四.第四步:验证
" ^; t/ v% A$ \, j3 ?当我在U-Boot下要启动kernel时会有一些步骤
4 q3 o5 }' U+ ]5 q4.1 读取FIT中的配置文件,拿到FIT的整个结构及签名. Q2 {+ g# V7 ~0 }( R6 q! q

" f) S7 w. ]6 t* t, D4.2会使用在刚才存在设备树中的PB Key对FIT中的内容做一个RSA计算(具体是打包计算还是一个一个计算,取决于你第二步中选择哪种方式),得到的结果和签名做对比,以此判定image是否被篡改。如果不一致,就不会启动kernel1 \3 h+ F1 s+ z8 V. N3 q; j0 m' k

6 e6 x6 l& L6 o4.3 当上一步成功后,会计算每个要使用的image的hash和FIT image中的做对比,看看每个image的hash是否正确,任一不对,kernel也不会启动
! C( C6 M+ U# C
6.png : Y, D9 f# f$ ]1 ~8 P

9 b; H7 l* T. ?7 ?5 Z/ b' A3 {5 Q" y; G+ S, T+ t
五.总结

. M% a8 _) w4 T2 l5 L
         我只是简单的学习了一些安全启动的相关内容,挑了一些重点的学习了一下,其实学习的还是比较浅的,这相关内容还可以有很多可以深入学习的,wiki、文档都没有仔细看过,只是简单的学习一些皮毛

$ N1 d7 S$ O% k3 S4 X* p
        ST能专门录制一系列关于MPU安全启动的视频,我还是很感动的,相比我们看文档自学,通过视频讲述的方式,我们可以快速获取知识,ST的老师讲的也是非常好,PPT很简洁,结构清晰。

) k" l1 v) W" ^5 a" \
        最后我还有一些小建议,关于实操部分希望后续可以出一些更详细的指导文档或者视频教程(之前学习nano edge ai时就有这样的视频),这样我们回头可以拿着板子看视频实际动手操作一下,就不会走弯路

& \% Y9 s' Y. s% s3 ?

- D& n' R% p/ I6 |* t: q0 M
2 Q$ d1 g7 g2 M% P; f
收藏 评论0 发布时间:2024-11-30 20:38

举报

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