Quectel展讯模组中的Secure Boot
Secure Boot
Secure Boot 是建立在受信平台上的一种安全启动序列,为用户应用提供一个安全可信的执行环境。为防止任何未经合法签名或恶意修改的软件在模块上运行,Secure Boot 在模块下载和启动过程的每个阶段均增加了签名验证环节,通过保存在模块中包含的 eFuse 上的 ROTPK,校验系统整个启动和下载过程中涉及的所有镜像,确认系统镜像完全可靠。
eFuse 是一种特殊类型的非易失性存储器,只允许编程一次,一旦被编程,数据永久有效。常用于存储可靠且可重复读取的数据。将 ROTPK 成功写入 eFuse 中,即开启 Secure Boot 功能
下载过程
Romcode(0x00000000):与PC通信,下载FDL1到IRAM。FDL1只包含DDR驱动及配置,只需要几KB的运行空间,可以被ROMCODE与下载工具通讯将之下载到IRAM中运行。
FDL1:FDL1被下载到IRAM后,PC指针跳到IRAM的起始地址开始运行FDL1。FDL1首先初始化外部DDRRAM,配置外部DDR的寄存器和时序,然后再与下载工具通讯将FDL2下载到外部DDR中运行
FDL2:FDL2被下载到DDR中之后,有充足的运行空间,FDL2带NAND/EMMCflash驱动程序,可以初始化FLASH,并把PAC包的其他各个模块都写入到FLASH中。
开机过程
Romcode:0x00000000:判断是开机,复制spl到IRAM,并运行spl(包含DDR驱动及配置)
SPL:初始化外部DDRRAM,配置外部DDR的寄存器和时序,然后再拷贝uboot到外部DDR中运行
UBOOT:带NAND/EMMCflash驱动程序,带部分设备初始化,复制其他image到DDRRAM,判断开机模式并进入相应模式
Secure Boot原理
使用三个证书,前一部分包含下一部分的公钥摘要。即每一部分检验下一部分的合法性:
下载:
- Romcode 会验证FDL1的公钥是否正确,如果公钥正确使用此公钥验证FDL1的证书,证书验证通过则继续运行FDL1
- FDL1会验证FDL2的公钥是否正确,如果公钥正确使用此公钥验证FDL2的证书,证书验证通过则继续运行FDL2
- FDL2再依次验证其余部分的公钥,并使用公钥验证证书
运行:
- Romcode 会验证SPL的公钥是否正确,如果公钥正确使用此公钥验证SPL的证书,证书验证通过则继续运行SPL
- SPL会验证uboot的公钥是否正确,如果公钥正确使用此公钥验证uboot的证书,证书验证通过则继续运行uboot
- uboot将摘要通过运行参数的方式传给Kernel,验证Kernel的公钥是否正确,如果公钥正确使用此公钥验证Kernel的证书,证书验证通过则继续运行Kernel
- Kernel再依次验证其余部分。