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

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

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

2 T. z$ O: c1 L3 P( Q8 U' {1 y, h
首先了解一下TF-A的结构体制,TF-A被分为好几个部分,如下图所示
6 P, X1 V" ]6 ]% ]; X2 X
2.png
8 h+ i3 O  V% _! ~' t5 G. G
这个是不是很熟悉,和第一张图几乎一摸一样,只是文字内容不一样。这张图是一个通用的东西,其中的BLXX就是一些通用的名称,他们的解释如下:
- B+ y' m+ ?# o$ p
BL1:Boot loader stage 1,应用程序信任的ROM

3 d- |0 Q! z# a5 w9 l6 [
BL2:Boot loader stage 2,可信的引导固件
& C7 T  I5 u% T1 [4 A3 G  J
BL32:Boot loader stage 3-2,runtime software(我不知道这个应该翻译成什么比较合适)
  ^* {3 {3 }/ Q+ X6 @4 H$ R
BL33:Boot loader stage 3-3
; A5 v: }) ?' f; t( y

: C# E# n0 Q2 Y. o6 i- V' m/ |
在MP1上,是没有BL1的,BL1被我们的ROM Code,也就是BootRom所代替
- C" ]* L2 G+ P2 F; @& M
BL2在MP1上对应TF-A BL2
4 Z" A& d2 O* q/ j) C
BL32在MP1上对应OP-TEE

$ T- r7 m1 U; x4 r2 U
BL33在MP1上对应U-Boot
& v! T6 P% w9 ]& p8 g' H
5 J, Y0 _, v) {2 G
二.TF-A加载后续软件的方式

" j, f6 `+ H! h  f4 o6 T( v3 ]4 g. Z; X, X% z5 K- n- p
TF-A加载后续软件的方式使用的是叫FIP的方法(FIP = Firmware Image Packge),顾名思义就是很多的固件打包在一起,如下图所示

6 J+ P" U0 F3 n8 @" |' ]
3.png

4 V. M) [$ C* Z/ ^4 r8 _
可以看到里面有很多东西,总的来说就是一个cgf文件、多个U-Boot相关的文件、多个OP-TEE相关的文件

9 D9 }) j$ I' {( H2 V% m. h" ~5 q* J- l* Y4 b& o6 v5 B- f# \8 L0 o
其中cfg文件是比较重要的,他的名字叫FCNF(Firmware Configuration Framework),他其实就是一张表,通过它就可以知道FIP中各个部分的内容是什么,相互之间怎么校验,各部分关系怎么样等等

( i& h- r3 i2 }+ ?  b+ X! D. }( h
三.TF-A BL2证书信任链的结构
1 G+ {0 M  p* q! n7 x7 K
在各个image校验之前,需要学习一下各个证书的校验链,我个人理解一下就是,固件可以通过证书校验,但是谁能知道证书是否被伪造呢?所以就有这个证书链,通过一个最基础的信息,一环套一环的对每个证书进行校验,确保所有的证书都是没有被篡改的

6 S$ m- p* x: s( F% z
整体流程如下
9 q& \# S/ _5 k
4.png
3 _; C; g$ |# F8 Z  F' R) Z
6 Z$ O' O0 k$ s2 [. q
他这个就是一环套一环,设计的非常巧妙。

, h: f5 Q1 U/ u: m0 J: ^
3 `1 @) f  ]9 q" S
简单来说就是通过上一级所携带的key(是PB Key)来校验他下一级的证书所用到的PB Key
' a" c1 _# w' v. A) h/ d

3 b% T+ a3 C9 s2 `
这边记录一下一些名字所实际代表的东西
& v, G+ `, a" q) B, f4 x
HW Config:U-Boot的设备树

* c" k  R/ y$ q% x
1 f% ]- O. h  d2 c* C3 l1 x/ O
- U; c5 R$ |# F% R; d: w
四.MP1 TF-A BL2启动U-Boot与OP-TEE的证书与校验

* d. M# O- e% ?; J" i- N7 E
完整的流程如下
' D& e- B# ^! P: j2 s8 ^$ B* B
5.png
5 D( h) U+ Y" F9 I9 W, C
+ W* b; _+ D1 F$ w0 i8 g  [" l' J/ f
首先我们先看第一个根证书,content证书

8 j5 p1 `8 V5 a, p; }
6.png
9 ~0 e7 d9 E# M

3 \2 L! Z% @* O: x1 G$ y. ?
他是没有副证书来校验自己的PB Key是否真实有效的,那么这边是使用的是OPT中保存的PB Key的HASH来做校验的。当PB Key的hash与OTP中的一致,那就认为是OK的,那他就可以自己校验这个证书自己,从而得到证书中HW和FW Config HASH的内容是OK的,就可以用于校验HW/FW config
8 D( e( b& b0 F  j( Y- R8 t6 g
8 \8 ]0 @5 |! N; m4 f6 G0 s6 C5 e
第二个根证书是秘钥证书,同理,他也是用了OTP中的hash,从而得到这个证书里面2个秘钥的真实性
# t/ l9 p; E3 @, M: B, x' ]
7.png
; \! s) K0 g: W9 ^- d" _0 ?3 C
. Q. f: x. Z" }  J/ Z0 _
这两个秘钥证书又会向后一步一步最终得到各个image的hash,用于校验image,这儿我就不再多说了,大致意思和上面的类似

: A  q  y$ J( q) l/ r
8.png
' ?# u5 @5 ^6 q3 K4 l
& D: ^+ s6 w! n+ W2 z. j/ J4 K
五.总结

  Y* m8 @8 t6 p0 _; Q4 N% b% {+ A
其实TF-A BL2启动U-Boot与OP-TEE的核心思想还是通过证书验证image是否正确,只是他还多了证明证书是正确的步骤,并且它的iamge很多,所以显得流程特别复杂,步骤很多,但是核心思想和上一篇的BootRom启动FSBL(TF-A BL2)是一样的,只是需要耐心的去理解它的详细流程

6 ^, k5 U- h1 Q! L$ i- N) E+ ~, d, ?" z- G) r

1 h; [! ?8 D1 Z) l7 d& {5 J! U( \
) e# Y0 g9 C* e/ Z- |
5 y+ N* I' T# T$ d/ {  V2 F5 j1 E

4 T, m" o0 ^- ]) c6 q$ H  r1 r* o
3 J$ N/ z& f& N5 \1 J. S+ P6 h
收藏 评论0 发布时间:2024-11-30 23:13

举报

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