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

《STM32MPU安全启动》①信任根、信任链及MP15启动流程

[复制链接]
小萝卜啦啦啦 发布时间:2024-11-30 16:16
本篇是安全启动的基础,介绍了一些基础概念:什么是安全启动、什么是信任根,什么是信任链。还介绍了MP15系列的安全启动流程
* V# ^1 G" h/ r, t- p4 D4 n& `) y- A4 l3 g6 G9 ~$ t5 y2 o
一、安全启动流程简介
3 y1 [8 J. \  y6 D安全启动的目标是确保在设备上运行的代码是我们所希望运行的,而不是一些被篡改过的代码。8 q! K9 H% I" i' W2 v
下图是安全启动流程的一个示意图
2 a( u8 w% _. a4 m
2.png ! U4 q) Y' N" J

7 j4 }8 S6 [& R3 u
从这个图就带出2个概念:信任根、信任链
4 L( U6 s  g) P7 @* `
9 z7 y1 n* U) Y
信任根:是每次上电都会从一个固定的地点读取运行一段固定不变且不能被跳过的代码(有点bootloader的味道,但是不一样的是这个是为了安全启动而设计,相比之下多了安全相关的功能),他会检查整个系统和我预先期待的是否一致,并且还会校验下一段代码的合法性。
# ?4 x; T6 G; L

! n0 Z3 S( B1 [5 j0 ^' y
如果是在单片机上,那他上电后运行bootloader后就会跳转运行APP代码。但是MPx系列的linux平台会存在多级跳转,那么就引出了信任链
0 e) S4 N* r# w/ ~7 d) S; X
$ z- h% _! o+ o0 W3 U# ^2 N
信任链:他就像是多个信任根串起来的样子,每一级都会校验下一级的代码,只有校验通过才会运行下一级的代码,因此叫信任链
3 l) i% V  ^: ^  x' @9 t0 }2 i& i/ |
1 W) b% n* s; F4 T* u. e
二、如何校验
( l7 B; @; ]: D! J
那么校验是怎么做的呢?如下图所示

& G% C7 [4 t; d/ m
4 C/ W4 b" l" L# b
3.png 8 ]& d0 K9 Y" {' V

* N; ?6 q" L! N8 t. ~" }
除了信任根,后续每一级的代码除了自己本身的img还会带上一段校验信息(或者叫证书)。校验的固件就可以利用密码学的计算,一般是HASH运算,算出一个结果,和被校验固件的证书作对比,看是否一致,如果一致就运行,反之就重新运行。
. G: k% u; ~  M5 |/ S& L, z
简单那来说是这么一回事,但是具体如何计算,怎么对比可能会更复杂,本次只是做了一个简单的介绍,后续课程中应该会详细展开
2 \# y, @# ]1 w6 {. c
' N. b/ s5 Y) c5 c. ~
三、MP15安全启动流程

3 w5 N' t* F- d3 r" w
MP15安全启动流程图如下

  V+ \' K3 D3 v  v5 v

4 d! a8 y# V- U2 n3 n% s* I' S" i! i4 K
4.png : @, T8 k9 p) e, H  b! R; X

: z  Y+ {, d8 R% b
MP15是双核的A7+M4,A7核必选,运行linux系统,M4核是可以根据实际情况选择是否使用的,可以认为是芯片中塞了一个STM32单片机,可以处理一些简单的事情。A7的代码又分为安全区(TZ = TrustZone)和非安全区。
( U+ |1 o) p+ r* O0 G( m% {

$ d% p1 Q) m- p7 m6 z! t
4 x" I5 B- c* h6 D
1.设备上电后首先加载ROM代码(他应该就是对应上面概念中的信任根),随后加载并运行TF-A BL2(TF-A = Trusted Firmware for Cortex-A)(BL2 = Boot loader stage 2)

$ M4 Q) C- ~4 B9 L" W+ ~

: l9 l6 f' O! }. X2 j0 H
5.png
$ m! u4 M2 V& A4 S8 @
2.随后可以用TF-A BL2加载U-Boot(只加载,不运行!)、加载并运行OP-TEE(OP-TEE = Open Portable Trusted Execution)

' k# ?: K, B$ g/ |

; E3 j6 n8 x. m( g$ u
6.png
, D, l) k! Z) @
3.OP-TEE运行后才会运行U-Boot

8 q" C- D5 O4 g0 `5 {, I* a$ O

$ f% N# Q! J; B1 Y
7.png $ r! f, R) T# O
4.之后就是linux的启动流程了U-Boot到Kernel再到linux应用程序,这些就不在TZ中了,安全启动的任务到此就算完成啦
; X- P$ s. B) e3 i

: k  _$ w; ?6 `& p( B' [0 \
8.png 1 f. n3 \0 D3 g6 x% M

; \7 y4 S/ X* z4 |- g* }3 ^
5.当然图中还有M4核的启动,这个是可选的,如果你没有使用M4核,这个就不需要了,OP-TEE、U-Boot、Kernel都可以加载并启动M4核的代码

# d% R4 n1 a9 u6 B6 w
" Q0 z) m: _2 T  ]- z7 F
10.png
9 D! D% ~: b+ _' {3 }, ^4 W5 H
1 t5 T$ i3 v/ W; z' G0 {5 P1 @) O, o
四、哪些MP15支持安全启动

( m  [; {( I9 V; F, `6 W2 T* ^3 A
可以根据型号分辨,带C、F的支持,其他型号是不支持的(但是基础的TrustZone功能还是支持的)

" n9 r. Q' p6 {2 M& c

% C; t+ m, J1 a) G
9.png

) [! }# ]( ?! ?
5 z! Z. x- c! J5 [3 S
- p$ @3 M9 S, u8 x- W* R, e; d6 ^9 {! c/ `* S5 `9 m+ }
: h: _( B3 o% i
) H# d+ f* M) ?3 T- H2 h, _# j
1.png
收藏 评论0 发布时间:2024-11-30 16:16

举报

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