
这是安全启动的最后一步,U-Boot启动Kernel,对应第一篇的这张图![]() 一.启动方式说明及要求 U-Boot启动Kernel有很多种方法,如果要实现安全启动,那就要使用“FIT image”的这个方法(FIT = Flattened uLmage Tree),来实现在加载的同时还能完成校验的功能 FIT image是用一个树状结构来描述整个image的样子,这个image其实里面包含了很多小的image和配置信息,每个image都有hash,这样就可以加载一个小image,校验他的hash,然后再加载下一个。。。。。。这样就实现了加载的同时还能完成校验的功能 $ J) m: w$ y# O 刚才说了,启动Kernel有很多种方法,因此要实现安全启动,还有一些很重要的事情要做,例如: 1.关闭U-Boot的cmd和console ( ]3 p; u4 e2 K- r- H# R5 |2.关闭其他启动方式,只允许以FIT的方式启动 ; w9 s% |( U& \/ h# ~% \ n5 ^...... 下图是ST给出的一些建议 4 Y; p) G( k: E5 |![]() 8 M0 F% n8 W& [- E- { 二.第一步:生成秘钥 ' u4 @% Y) W3 `. S! D% H和以前的一样,首先要生成秘钥对,使用U-Boot校验带签名的FIT使用的加密方法为RSA。在PC上使用软件生成秘钥及证书等等信息,可以使用openssl(很可惜,ST提供的KeyGEN只能提供ECC秘钥,没法使用) ![]() ; x9 G4 z8 T2 O+ i, [" a8 z 三.第二步:签名固件 使用生成的PV Key对FIT image进行签名 1 k8 Z N0 L! D1 r! M![]() 签名后,FIT中会增加签名信息,后续就需要使用这个签名信息说校验 在PC上对FIT image签名时使用的命令是mkimage,最终打包生成的带签名的FIT image如下图所示 ( F( _, O+ n2 B. L% a0 w: i![]() 同时mkimage命令还可以实现把PB Key插到U-Boot的设备树中 ![]() & q9 E- o! W2 e" D( ^ 签名也是很灵活的 $ T8 m1 D' f. [% Z) S, k方案1:可以把所有image和hash进行一个签名,到底使用那个image由配置文件决定。(推荐用这个方案) ]: D$ {& l$ D1 z9 |! C; @3 O/ c方案2:也可以每个image独立进行签名 : h/ [& U/ n) s9 L: ~四.第三步:U-Boot device tree . z9 x! Z& @+ g2 \# h生成的PB Key需要加到U-Boot的device tree中6 C e+ W: I$ Z0 g$ R ![]() 四.第四步:验证. x+ V* m F4 ~ n% W, _$ b; w6 K 当我在U-Boot下要启动kernel时会有一些步骤; |7 A6 M% Z8 j, Z 4.1 读取FIT中的配置文件,拿到FIT的整个结构及签名$ O- C, w0 ~& }" j& t* O : F* ^& l% z* P 4.2会使用在刚才存在设备树中的PB Key对FIT中的内容做一个RSA计算(具体是打包计算还是一个一个计算,取决于你第二步中选择哪种方式),得到的结果和签名做对比,以此判定image是否被篡改。如果不一致,就不会启动kernel 4.3 当上一步成功后,会计算每个要使用的image的hash和FIT image中的做对比,看看每个image的hash是否正确,任一不对,kernel也不会启动 ![]() 0 g. B* F' @/ Q7 o ! x' F# q$ \" d: g; [0 O 五.总结 我只是简单的学习了一些安全启动的相关内容,挑了一些重点的学习了一下,其实学习的还是比较浅的,这相关内容还可以有很多可以深入学习的,wiki、文档都没有仔细看过,只是简单的学习一些皮毛 ST能专门录制一系列关于MPU安全启动的视频,我还是很感动的,相比我们看文档自学,通过视频讲述的方式,我们可以快速获取知识,ST的老师讲的也是非常好,PPT很简洁,结构清晰。 最后我还有一些小建议,关于实操部分希望后续可以出一些更详细的指导文档或者视频教程(之前学习nano edge ai时就有这样的视频),这样我们回头可以拿着板子看视频实际动手操作一下,就不会走弯路 ; p: K6 E$ c! p7 K6 o. x" p |
《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安全启动》②MP15从BootRom启动FSBL(TF-A BL2)
《STM32MPU安全启动》①信任根、信任链及MP15启动流程