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

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

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

) q. i  q* o/ N0 n
一.TF-A结构体系

) G; c% G. R* g$ A; t$ D8 L7 @
首先了解一下TF-A的结构体制,TF-A被分为好几个部分,如下图所示

; M) j/ {2 Q. Q# w; K$ j) `
2.png

0 j; |' a% j: R9 \7 W  k5 Z
这个是不是很熟悉,和第一张图几乎一摸一样,只是文字内容不一样。这张图是一个通用的东西,其中的BLXX就是一些通用的名称,他们的解释如下:
3 u" B, ^( P, W; i! w9 N
BL1:Boot loader stage 1,应用程序信任的ROM

3 s: E+ h+ n2 ^, [
BL2:Boot loader stage 2,可信的引导固件
, }! s* q' Z3 @6 `) ]
BL32:Boot loader stage 3-2,runtime software(我不知道这个应该翻译成什么比较合适)

( q/ E  I, L. g) d3 ]9 a" d
BL33:Boot loader stage 3-3

% g  c' U2 E/ @) O+ F2 `; B: M7 l# [9 [
在MP1上,是没有BL1的,BL1被我们的ROM Code,也就是BootRom所代替

% w" I% D  j5 T; E8 z: N
BL2在MP1上对应TF-A BL2
/ o0 h% A8 |# o
BL32在MP1上对应OP-TEE
0 ~- s6 c! l! q
BL33在MP1上对应U-Boot

* n2 d: n  i" A
: `1 N# M: F$ @: K7 S
二.TF-A加载后续软件的方式
1 Z5 {/ ^/ ^  [

$ D! b# ?6 X+ v1 a& g
TF-A加载后续软件的方式使用的是叫FIP的方法(FIP = Firmware Image Packge),顾名思义就是很多的固件打包在一起,如下图所示

, Z. ^& b  e; f+ M9 V5 F
3.png
, t) z5 s7 X# T8 l( {
可以看到里面有很多东西,总的来说就是一个cgf文件、多个U-Boot相关的文件、多个OP-TEE相关的文件
8 D! }- }1 j) k
$ i0 y4 z# z1 X! Z
其中cfg文件是比较重要的,他的名字叫FCNF(Firmware Configuration Framework),他其实就是一张表,通过它就可以知道FIP中各个部分的内容是什么,相互之间怎么校验,各部分关系怎么样等等

* W7 `8 Y9 B9 s# e( M
3 @) c( ?) v. B+ `" k: C! [  U
三.TF-A BL2证书信任链的结构

+ b% d! F, M0 h. o# D6 s$ p
在各个image校验之前,需要学习一下各个证书的校验链,我个人理解一下就是,固件可以通过证书校验,但是谁能知道证书是否被伪造呢?所以就有这个证书链,通过一个最基础的信息,一环套一环的对每个证书进行校验,确保所有的证书都是没有被篡改的
3 I$ u; v& I/ Y9 k) x* _
整体流程如下

! [0 |+ x& F" h) O# j
4.png
, D. r6 x8 a3 e6 Q* Q0 e2 ~1 L% C
  e: J' q' C( h, b! a4 k$ H! }; W
他这个就是一环套一环,设计的非常巧妙。

# r; T2 }, h2 g* q& H' p& H3 z1 a9 U6 n& m) [+ l1 s
简单来说就是通过上一级所携带的key(是PB Key)来校验他下一级的证书所用到的PB Key
  d/ F, m) |1 v0 ~* \) U) l
+ L' ?5 O. T4 s  u; @) h( p1 _2 E
这边记录一下一些名字所实际代表的东西
4 H, D' z9 s8 C: T
HW Config:U-Boot的设备树

+ h  x6 C; d; N  W2 o/ g$ C2 P+ P* ?7 b1 t$ a6 s1 k

5 c) u# ?  n' j+ }
四.MP1 TF-A BL2启动U-Boot与OP-TEE的证书与校验
/ h- W' [( t. b7 i7 f
完整的流程如下

% G2 S8 Y& p8 P/ Z0 [3 e) _! `
5.png
& y7 H) {/ [; k/ [* i" c/ i

4 e, M" K% B% t5 P% z, p& f
首先我们先看第一个根证书,content证书

% s1 T, C$ v$ G3 u9 X1 p, q
6.png

( }5 D  u: N! d3 e3 R  T
- o% O0 J- s$ m4 F( F
他是没有副证书来校验自己的PB Key是否真实有效的,那么这边是使用的是OPT中保存的PB Key的HASH来做校验的。当PB Key的hash与OTP中的一致,那就认为是OK的,那他就可以自己校验这个证书自己,从而得到证书中HW和FW Config HASH的内容是OK的,就可以用于校验HW/FW config
/ h' Q; e( Z" q* E2 w
. l3 D, |& G( n3 }8 m
第二个根证书是秘钥证书,同理,他也是用了OTP中的hash,从而得到这个证书里面2个秘钥的真实性

' x; S" S$ y+ h! r: e1 Y7 k
7.png

: Q. ^; a+ O# e1 E+ a; F$ [
7 m  W9 ]" j  M( o5 x/ P' k* m6 A
这两个秘钥证书又会向后一步一步最终得到各个image的hash,用于校验image,这儿我就不再多说了,大致意思和上面的类似
) o! c7 S# C  b+ }$ i: X9 {- ~4 R6 S
8.png
5 P6 H4 q0 Q! Q: S
; z8 q; \$ q0 Z& B2 s3 A7 b
五.总结
$ a5 u3 P4 I+ o9 d7 C
其实TF-A BL2启动U-Boot与OP-TEE的核心思想还是通过证书验证image是否正确,只是他还多了证明证书是正确的步骤,并且它的iamge很多,所以显得流程特别复杂,步骤很多,但是核心思想和上一篇的BootRom启动FSBL(TF-A BL2)是一样的,只是需要耐心的去理解它的详细流程
% ~+ t7 a/ x! \4 R5 d: E- `& w4 N
4 D% h- C" k8 x0 o& e  A
4 m6 v0 q! J/ T% R$ q
. X4 w' j5 J4 L; p0 d3 Q" |1 a

; r  H0 g4 ~. A" r. Z" Y+ H! W0 U/ e: z0 Z6 r! b) z" R5 r4 _% ?
4 i+ z' e  V7 l: |+ k

, [, v! w0 s& ~6 x8 A* P0 M
- |- u7 M0 x7 f2 F- V0 U
赞 收藏 评论0 发布时间:2024-11-30 23:13

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版