imx rt 系列的HAB Code-Signing Tool 简介
2019-07-12 11:35发布
生成海报
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脚本)
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮