本篇是安全启动的基础,介绍了一些基础概念:什么是安全启动、什么是信任根,什么是信任链。还介绍了MP15系列的安全启动流程 - A4 l3 g6 G9 ~$ t5 y2 o 一、安全启动流程简介 安全启动的目标是确保在设备上运行的代码是我们所希望运行的,而不是一些被篡改过的代码。8 q! K9 H% I" i' W2 v 下图是安全启动流程的一个示意图 从这个图就带出2个概念:信任根、信任链 4 L( U6 s g) P7 @* `9 z7 y1 n* U) Y 信任根:是每次上电都会从一个固定的地点读取运行一段固定不变且不能被跳过的代码(有点bootloader的味道,但是不一样的是这个是为了安全启动而设计,相比之下多了安全相关的功能),他会检查整个系统和我预先期待的是否一致,并且还会校验下一段代码的合法性。 # ?4 x; T6 G; L如果是在单片机上,那他上电后运行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那么校验是怎么做的呢?如下图所示 除了信任根,后续每一级的代码除了自己本身的img还会带上一段校验信息(或者叫证书)。校验的固件就可以利用密码学的计算,一般是HASH运算,算出一个结果,和被校验固件的证书作对比,看是否一致,如果一致就运行,反之就重新运行。 . G: k% u; ~ M5 |/ S& L, z简单那来说是这么一回事,但是具体如何计算,怎么对比可能会更复杂,本次只是做了一个简单的介绍,后续课程中应该会详细展开 2 \# y, @# ]1 w6 {. c' N. b/ s5 Y) c5 c. ~ 三、MP15安全启动流程 MP15安全启动流程图如下 MP15是双核的A7+M4,A7核必选,运行linux系统,M4核是可以根据实际情况选择是否使用的,可以认为是芯片中塞了一个STM32单片机,可以处理一些简单的事情。A7的代码又分为安全区(TZ = TrustZone)和非安全区。 ( U+ |1 o) p+ r* O0 G( m% {1.设备上电后首先加载ROM代码(他应该就是对应上面概念中的信任根),随后加载并运行TF-A BL2(TF-A = Trusted Firmware for Cortex-A)(BL2 = Boot loader stage 2) 2.随后可以用TF-A BL2加载U-Boot(只加载,不运行!)、加载并运行OP-TEE(OP-TEE = Open Portable Trusted Execution) 3.OP-TEE运行后才会运行U-Boot 4.之后就是linux的启动流程了U-Boot到Kernel再到linux应用程序,这些就不在TZ中了,安全启动的任务到此就算完成啦 ; X- P$ s. B) e3 i5.当然图中还有M4核的启动,这个是可选的,如果你没有使用M4核,这个就不需要了,OP-TEE、U-Boot、Kernel都可以加载并启动M4核的代码 四、哪些MP15支持安全启动 可以根据型号分辨,带C、F的支持,其他型号是不支持的(但是基础的TrustZone功能还是支持的) 9 {! c/ `* S5 `9 m+ } : h: _( B3 o% i ) H# d+ f* M) ?3 T- H2 h, _# j |
《STM32MPU安全启动》学**结
《STM32MPU安全启动》学习笔记5.2如何使能Uboot校验
《STM32MPU安全启动》学习笔记5.1 UBoot 的校验
《STM32MPU安全启动》学习笔记4.2使能M安全启动功能
《STM32MPU安全启动》学习笔记4.1 STM32MP1和STM32MP2 M核启动
《STM32MPU安全启动》学习笔记3.3使能TF-A带加密的功能 13/25系列
《STM32MPU安全启动》学习笔记使能TF-A身份验证STM32MP13/15
《STM32MPU安全启动》③TF-A BL2启动U-Boot与OP-TEE
《STM32MPU安全启动》④U-Boot启动Kernel
《STM32MPU安全启动》②MP15从BootRom启动FSBL(TF-A BL2)