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

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

[复制链接]
小萝卜啦啦啦 发布时间:2024-11-30 23:13
本文是安全启动的第二次跳转,由TF-A BL2启动U-Boot与OP-TEE,对应第一篇文章中的这个部分。这次会加载并运行2个部分的代码,并且复杂程度较高,我只能按我理解到的程度来写
6.png
2 ~* N) x* {* b# t
一.TF-A结构体系
$ T  v" e2 U8 C( i
首先了解一下TF-A的结构体制,TF-A被分为好几个部分,如下图所示
/ ?& A' y2 u+ e. l1 v/ m
2.png
4 B; L2 U* G0 q1 r( N4 }9 Z. z* e
这个是不是很熟悉,和第一张图几乎一摸一样,只是文字内容不一样。这张图是一个通用的东西,其中的BLXX就是一些通用的名称,他们的解释如下:

/ s; Q" x& t* V( S9 B4 q6 D
BL1:Boot loader stage 1,应用程序信任的ROM

  W1 f5 Q* G+ L5 @4 O% K
BL2:Boot loader stage 2,可信的引导固件
! U8 X& a' ^0 ^
BL32:Boot loader stage 3-2,runtime software(我不知道这个应该翻译成什么比较合适)

& L$ z6 f' ~! Z# c
BL33:Boot loader stage 3-3

$ a3 D/ r( v% y# S0 M1 d" c# L8 l( m. U( T: ^1 G" W8 U0 Z. {& z# ?" Q
在MP1上,是没有BL1的,BL1被我们的ROM Code,也就是BootRom所代替
6 C# g+ I5 z) ?% u3 R2 K/ U( s
BL2在MP1上对应TF-A BL2
& I: y8 J* m- F8 ~
BL32在MP1上对应OP-TEE
( f: h# c# w) g' B. `' h
BL33在MP1上对应U-Boot

8 @: Z+ M6 Q+ c" z2 p- K* _7 K$ H2 P$ K
/ p# J% J4 p" p0 g! X& o
二.TF-A加载后续软件的方式
6 Y( }* `0 h. d" M2 J+ b- B
& Y% i* E! w7 ]4 v
TF-A加载后续软件的方式使用的是叫FIP的方法(FIP = Firmware Image Packge),顾名思义就是很多的固件打包在一起,如下图所示

. C; T, f6 {& ?5 o
3.png

0 `4 s9 m2 ]. g  n4 J5 I
可以看到里面有很多东西,总的来说就是一个cgf文件、多个U-Boot相关的文件、多个OP-TEE相关的文件

& a, L8 U+ B1 f4 t9 s% a9 |! [1 }  }9 C. E# l( R' N6 n
其中cfg文件是比较重要的,他的名字叫FCNF(Firmware Configuration Framework),他其实就是一张表,通过它就可以知道FIP中各个部分的内容是什么,相互之间怎么校验,各部分关系怎么样等等
' ~& \7 C& |' J: M- n* [
! R! U$ Z0 M! `: e& z. `. b) s
三.TF-A BL2证书信任链的结构
8 T+ u3 q* P+ G" l2 M% G! }+ N& h- K
在各个image校验之前,需要学习一下各个证书的校验链,我个人理解一下就是,固件可以通过证书校验,但是谁能知道证书是否被伪造呢?所以就有这个证书链,通过一个最基础的信息,一环套一环的对每个证书进行校验,确保所有的证书都是没有被篡改的
( \) P+ `2 b* w; k" [1 k
整体流程如下
% @, h1 M* O- K' x3 x% P. a4 {
4.png
6 o6 ~0 m6 O1 U' v1 U2 v/ u+ Q

2 y) V# P! C7 e# Z
他这个就是一环套一环,设计的非常巧妙。

4 o2 @9 |: @9 o1 ~' s
, t3 a" ~" x0 l) z$ B6 S
简单来说就是通过上一级所携带的key(是PB Key)来校验他下一级的证书所用到的PB Key
; U3 j* Q1 d1 D$ V3 W$ _

' l6 V6 ^5 l4 o* x8 \/ k
这边记录一下一些名字所实际代表的东西

9 W* g, s, H1 Q
HW Config:U-Boot的设备树
( v1 Y# u9 D' P

0 P. A8 w5 R/ Z* I4 k2 h/ ^7 J7 n* }# b3 J5 ]: d, r7 ~- R
四.MP1 TF-A BL2启动U-Boot与OP-TEE的证书与校验
# {4 r  ?- V( g
完整的流程如下

# w4 O$ u8 b# l; O
5.png
6 y: Q8 L% h$ T( P6 y( Y  s
. U4 ]! O* Y! R  i. C' ?
首先我们先看第一个根证书,content证书

0 f5 I$ O. J: [9 g; J
6.png

$ C/ [$ c6 S: u2 [
4 V: {; `2 [3 y2 A6 h0 w' g
他是没有副证书来校验自己的PB Key是否真实有效的,那么这边是使用的是OPT中保存的PB Key的HASH来做校验的。当PB Key的hash与OTP中的一致,那就认为是OK的,那他就可以自己校验这个证书自己,从而得到证书中HW和FW Config HASH的内容是OK的,就可以用于校验HW/FW config

. u* Y$ `2 r. U: \  [
8 b; O7 l5 S1 n9 N$ Z3 B8 n
第二个根证书是秘钥证书,同理,他也是用了OTP中的hash,从而得到这个证书里面2个秘钥的真实性
* D* g& _* u! n3 t( W; Z
7.png

' }" K" w1 v3 W. J1 y; O* P! `/ {* e4 T7 c: q/ W2 }9 u
这两个秘钥证书又会向后一步一步最终得到各个image的hash,用于校验image,这儿我就不再多说了,大致意思和上面的类似
7 n  g7 l5 A+ x4 ]; ^
8.png

- ^9 u" C+ N4 v" K9 \4 {6 j; j8 X3 X6 v
五.总结
7 u/ n$ V1 ?# a1 \- c) {4 Y7 H
其实TF-A BL2启动U-Boot与OP-TEE的核心思想还是通过证书验证image是否正确,只是他还多了证明证书是正确的步骤,并且它的iamge很多,所以显得流程特别复杂,步骤很多,但是核心思想和上一篇的BootRom启动FSBL(TF-A BL2)是一样的,只是需要耐心的去理解它的详细流程
! D6 e+ @2 }6 D) S/ v$ z: x& F! ~

0 n0 ~& U" J/ w# _" o6 p3 b7 M1 M" ~/ Y' g: E  O# G

9 F9 ]! ^5 y5 e: [& W
' t' V* V8 A- A3 k. W0 O
# |; `& W: N7 {5 S( C4 b( \
. e$ V) _. Y4 X. e% q
/ [, M$ R: r/ a
3 r# l  K2 M1 a' L6 w
收藏 评论0 发布时间:2024-11-30 23:13

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版