imx rt 系列的HAB Code-Signing Tool 简介
1.简述
CST能够让制造商为其包含NXP处理器的产品签署或加密软件。结合NXP处理器中包含的高保证引导(HAB)特性,CST可以用来确保只有验证过的可靠的软件才能在最终产品上运行。
名词解释:
- HAB:High Assurance Boot 高保障引导
- Code-Signing Tool:代码签名工具
组成:
- nxp处理器引导rom中的HAB库
- HAB CST
1.2 HAB 库
HAB库是nxp处理器上引导ROM的一个组件,HAB 主要负责验证产品软件的数字签名,确保未经验证的代码运行。同时也能提供程序克隆保护。
图1 使用HAB的通用引导流程
上图为使用HAB时的引导流程,具体细节参考《HAB Code Signing tool user's guide》。
HAB库分为两个版本HAB3及HAB4,HAB4的功能更多一些,rt1050用的是HAB4进行签证。
为了允许ROM外部的引导组件继续安全引导连,这些组件必须可以回调到HAB中,所以提供了HAB库的API,根据HAB3,HAB4也有两个版本详见I.MX25,i.MX35和i.MX50参考手册的系统启动章节。
1.3HAB CST
在完成代码加密签名时涉及到以下几个部分:
- CA(A Certificate Authority 证书颁发机构?): CA负责保护*CA**并验证低级代码签名**。
- SA(A Signature Authority 签名权威?):SA负责执行代码签名的行为
- A Manufacturer 制造商:负责跨蟾片软件请求数字签名
图2 一般代码签名涉及的对象
CST则是位于上位机的命令行工具,提供CA,SA让制造商控制HAB代码签名的过程。
CST可以在用户提供的数据(SA)生成数字签名,同时也能简历代码签名所需要的**和证书的PKI树。CST生成的签名可作为最终产品软件映像的一部分,然后由HAB进行验证签名。
CST主要有两个输入项:
1.待签名的二进制image或者产品软件的image
2.CSF文件:CSF文件向cst提供关于对二进制哪些区域需要签名,用哪个**对image进行签名的信息。(flashloader中即bdfile)
CST接收输入并生成二进制HAB数据,其中包括签名,证书和CSF命令,然后将其附加到产品软件用以创建签名image。下图为一个签名的示意图。
其中一些处理器提供加密image。下图是加密的示意图:
CST生成一次性AES数据加***(DEK),DEK独立于用于代码签名的公钥。同时必须再每块处理器的OEM制造阶段创建DEK的加密块,然后将其附加到引导设备的image中。原因是DEK blob是使用嵌入到nxp处理器中的期间唯一**创建的,该**只能由偏上加密引擎读取。DEK对于所有使用相同加密图像的IC都很常见,但DEK blob对每个IC都是唯一的。
图5 DEK的生成
2.HAB4证书和**即PKI树
HAB4的树由文件hab4_pki_tree脚本( windows 为.bat,linux是.sh)生成。下图是PKI树的组成:
PKI树由以下**和证书组成:
- CA**:是最上层的**,仅用于签署生成SRK证书。
- lSRK:是HAB代码签名**的根**。 SRK表格的加密哈希被制成一次性可编程的efuse以建立信任根。每个复位周期中只能选择表中的一个SRK(表中最多可以存放四个SRK)。选择哪个SRK是Install Key CSF 命令中的一个参数决定的。
- lCSF:是SRK的下级**,用于验证CSF命令中的签名。
- IMG:是SRK的下级**,用于验证产品软件中的签名。
- 注:不会为快速身份验证PKI书生成CSF 和IMG**。
hab4_pki_tree脚本生成一个基本树,最多可以生成四个SRK,对于每个SRK,还会生成一个CSF**和IMG**。其他**可能需要使用单独的add_key脚本添加到树中。(也可以用另一个**生成解决方案替换OpenSSL和hab4_pki_tree脚本)