华为海思芯片安全启动技术的工作原理主要包括以下几个关键步骤:
芯片内固化代码启动:
- 当芯片上电后,首先会执行固化在芯片内部 ROM 中的代码。这部分固化代码是芯片启动的基础程序,负责初始化芯片的基本硬件环境,并为后续的安全启动流程做准备。
安全启动标志位检测:
- 固化代码会读取特定的安全启动标志位。这个标志位通常存储在芯片内的一次性可编程(OTP)存储器中。如果标志位被设置,表示需要进行安全启动;如果没有设置,则可以走正常的启动流程。而且 OTP 的特性决定了其存储的数据具有不可逆性,一旦安全启动标志位被设置,就无法轻易更改。
密钥读取:
- 若进入安全启动流程,固化代码会从 OTP 的指定区域读取用于验证的密钥信息。这些密钥信息包括 RSA 算法的公钥哈希值以及可选的 AES 密钥等。RSA 公钥用于验证后续启动组件的数字签名,以确保其合法性;AES 密钥则可能用于对加密的数据进行解密(如果启动过程中涉及到加密数据的话)。
启动组件验签:
- 对引导程序验签:芯片开始加载并验证启动过程中的关键组件,比如 DDR 初始化程序(ddr_init.bin)和 U-Boot(一种引导加载程序)等。这些组件在生产过程中已经使用私钥进行了数字签名。芯片使用读取到的公钥对组件的数字签名进行验证,验证通过则表示该组件是合法且完整的,没有被篡改或损坏,可以继续启动流程;如果验证不通过,则暂停启动,防止不安全的组件被加载运行。
- 对后续分区或模块验签(可选扩展):对于一些更复杂的系统或有更高安全需求的应用场景,在 U-Boot 运行完成后,U-Boot 程序本身可以进一步对后续的内核(kernel)、根文件系统(rootfs)等其他分区或模块进行签名验证。这通常是通过在 U-Boot 中内置验证算法,使用预先存储的公钥哈希值对这些分区或模块的签名进行校验,确保其内容没有被篡改。
系统启动:
- 只有当所有的启动组件都通过了安全验证,芯片才会继续正常的系统启动流程,将控制权交给操作系统,使设备进入正常的工作状态。