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

《STM32MPU安全启动》③TF-A BL2启动U-Boot与OP-TEE

[复制链接]
小萝卜啦啦啦 发布时间:2024-11-30 23:13
本文是安全启动的第二次跳转,由TF-A BL2启动U-Boot与OP-TEE,对应第一篇文章中的这个部分。这次会加载并运行2个部分的代码,并且复杂程度较高,我只能按我理解到的程度来写
6.png

0 }* X+ `% r, m; k& A9 O; [. z7 Q
一.TF-A结构体系

+ J+ a# D* Y; c9 W. Q. A) ]& t6 P
首先了解一下TF-A的结构体制,TF-A被分为好几个部分,如下图所示
- b# e' ]' v- `" L" g0 H
2.png
2 }: Y  T4 e2 P
这个是不是很熟悉,和第一张图几乎一摸一样,只是文字内容不一样。这张图是一个通用的东西,其中的BLXX就是一些通用的名称,他们的解释如下:

' p+ f" d1 q! u$ R
BL1:Boot loader stage 1,应用程序信任的ROM
- m5 F* z3 M% h* R0 O3 J6 q
BL2:Boot loader stage 2,可信的引导固件

7 D& p1 G& U  T. {, q
BL32:Boot loader stage 3-2,runtime software(我不知道这个应该翻译成什么比较合适)

) @1 E; O4 S7 l. d  \% F7 H
BL33:Boot loader stage 3-3

9 o( N) M+ C- m1 b% A. }/ Y6 n) [2 {: U6 H- G, @# h* T
在MP1上,是没有BL1的,BL1被我们的ROM Code,也就是BootRom所代替

/ ~* j- c1 i4 `' ^  h$ j6 Z) T
BL2在MP1上对应TF-A BL2

; o& l) ]: a( K4 `( A0 [7 H4 E
BL32在MP1上对应OP-TEE
: P1 G, J% |8 t8 S+ [, t* N4 L1 d" @
BL33在MP1上对应U-Boot

! j8 b( `) W1 c$ Q3 m; E
' `. S( _4 M; d2 {6 T. {% W
二.TF-A加载后续软件的方式
4 h" R. v5 k0 [* L/ _! R8 C
+ A' g9 w% p7 w9 q( v: ~0 n5 x
TF-A加载后续软件的方式使用的是叫FIP的方法(FIP = Firmware Image Packge),顾名思义就是很多的固件打包在一起,如下图所示
  w8 [9 f" t# w) p, A4 _
3.png

# V/ `1 U2 ~# C: y8 K
可以看到里面有很多东西,总的来说就是一个cgf文件、多个U-Boot相关的文件、多个OP-TEE相关的文件

/ W, K. M% I% `  C9 k2 [8 r( j/ z: V4 |, t) }' A  \
其中cfg文件是比较重要的,他的名字叫FCNF(Firmware Configuration Framework),他其实就是一张表,通过它就可以知道FIP中各个部分的内容是什么,相互之间怎么校验,各部分关系怎么样等等

- A, r: z4 j0 v5 c8 E
. [: e  o! K- j4 `3 y  \, E* b* n
三.TF-A BL2证书信任链的结构

  X0 x9 E$ B0 f- u& ~
在各个image校验之前,需要学习一下各个证书的校验链,我个人理解一下就是,固件可以通过证书校验,但是谁能知道证书是否被伪造呢?所以就有这个证书链,通过一个最基础的信息,一环套一环的对每个证书进行校验,确保所有的证书都是没有被篡改的
5 B4 q4 B9 Z4 l) A$ y0 M4 D
整体流程如下
0 @3 H9 L" Y4 M" Y- T$ O2 P  l8 @. F; Q
4.png

7 i, Y1 v+ Q: P6 O
1 A5 t' w4 Q0 `+ |$ b8 G& Y
他这个就是一环套一环,设计的非常巧妙。

- E: J* q7 i( Y' P6 v* \% Z8 O6 D& a1 G+ y
简单来说就是通过上一级所携带的key(是PB Key)来校验他下一级的证书所用到的PB Key
/ _/ T4 Y& ?7 r5 K' _/ n5 x" V
- `$ w2 o% m; c6 R/ f0 r
这边记录一下一些名字所实际代表的东西

# T8 e; T' G8 r, l5 f) l& }7 a4 X
HW Config:U-Boot的设备树
  B: B8 `- H0 e

2 r+ V3 j3 F3 N' i% J: Y9 z& r" a7 Y
四.MP1 TF-A BL2启动U-Boot与OP-TEE的证书与校验
2 X) M; @1 c5 T0 ^" e" E0 E
完整的流程如下
9 o: y1 a7 X  r8 I- H
5.png
- C  D! q8 g+ ^+ x% s4 D
, d4 y4 K0 \9 k
首先我们先看第一个根证书,content证书

  w# ]7 u6 f# O6 h& [) V3 p3 _
6.png
1 K& z9 \3 g7 ?' r0 C9 ^
* Z& n( |, v3 G% w8 U: G. G
他是没有副证书来校验自己的PB Key是否真实有效的,那么这边是使用的是OPT中保存的PB Key的HASH来做校验的。当PB Key的hash与OTP中的一致,那就认为是OK的,那他就可以自己校验这个证书自己,从而得到证书中HW和FW Config HASH的内容是OK的,就可以用于校验HW/FW config

5 Z8 u, ]3 P, f6 e
/ `5 N; b2 A! j7 p
第二个根证书是秘钥证书,同理,他也是用了OTP中的hash,从而得到这个证书里面2个秘钥的真实性
$ H/ \# X$ L! o" C- h
7.png

, G' ~; O. {0 a. ]( Z
8 L; l3 ]) g3 x; e
这两个秘钥证书又会向后一步一步最终得到各个image的hash,用于校验image,这儿我就不再多说了,大致意思和上面的类似

/ M  J4 C/ Q, U
8.png
( \; Z" J4 {0 I9 ^4 z0 a# N- n

* `- C! D2 J) S2 h
五.总结
- O% `9 Y. {3 D2 @
其实TF-A BL2启动U-Boot与OP-TEE的核心思想还是通过证书验证image是否正确,只是他还多了证明证书是正确的步骤,并且它的iamge很多,所以显得流程特别复杂,步骤很多,但是核心思想和上一篇的BootRom启动FSBL(TF-A BL2)是一样的,只是需要耐心的去理解它的详细流程

$ F! q8 Z, {8 T6 h% H7 O4 c7 U: t" Z8 U* u* m& U
3 v, ]6 `! R; ^1 Q% ?

5 A" y- j3 j2 r  u4 H
1 {3 U$ \* ?0 ^6 B# Y2 p1 y$ `( u0 I

0 p6 R- q8 ^; [* l, p" [) b% n. F7 f, V' R) c4 o, q. U2 N# h

0 u1 n3 J$ ]" ~0 P1 Q
收藏 评论0 发布时间:2024-11-30 23:13

举报

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