华为海思芯片安全启动的验证方式主要包括以下步骤:
读取安全启动标志位和密钥信息:
- 读取标志位:芯片上电后,首先执行固化在芯片内部 ROM 中的代码,该固化代码会读取特定的安全启动标志位。此标志位通常存储在芯片内的一次性可编程(OTP)存储器中。如果标志位被设置,表示需要进行安全启动;如果没有设置,则走正常的启动流程。
- 获取密钥:若进入安全启动流程,固化代码会从 OTP 的指定区域读取用于验证的密钥信息。这些密钥包括 RSA 算法的公钥哈希值以及可选的 AES 密钥等。
逐级验签:
- 对引导程序验签:利用读取到的密钥信息对引导程序进行签名验证。例如,先对初始化 DDR 的程序
ddr_init.bin
进行验证。芯片使用公钥对ddr_init.bin
的数字签名进行验证,验证通过则表示该程序是合法且完整的,可以继续启动流程;如果验证不通过,则暂停启动。之后,由已通过验证的引导程序(如ddr_init.bin
验证通过后)引导对下一级引导程序(如uboot.bin
)进行 RSA 校验。 - 对后续固件验签:在前面的引导程序验证通过后,继续对后续的固件(如操作系统内核等)进行验证。对于海思芯片的某些产品,后续固件的签名验证信息可能会包含在镜像文件中,通过读取并校验这些信息来确保固件的合法性和完整性。
版本号校验(可选):除了对签名的验证,还会对加载的软件的版本号进行校验。从下一阶段软件中获取版本号,并与预设的版本号进行对比,如果获取的版本号和预设版本号不一致,则该软件不被运行,从而防止使用错误或不匹配版本的软件启动。
通过以上这些验证方式,华为海思芯片可以建立起一个从芯片启动开始,逐级验证软件合法性和完整性的安全启动流程,确保系统的安全可信。