imx rt 系列的HAB Code-Signing Tool 简介

1.简述

  CST能够让制造商为其包含NXP处理器的产品签署或加密软件。结合NXP处理器中包含的高保证引导(HAB)特性,CST可以用来确保只有验证过的可靠的软件才能在最终产品上运行。

名词解释:

  •  HABHigh Assurance Boot 高保障引导
  •  Code-Signing Tool:代码签名工具

组成:

  •  nxp处理器引导rom中的HAB
  •  HAB CST

1.2 HAB

  HAB库是nxp处理器上引导ROM的一个组件,HAB 主要负责验证产品软件的数字签名,确保未经验证的代码运行。同时也能提供程序克隆保护。

 imx rt 系列的HAB Code-Signing Tool 简介

1 使用HAB的通用引导流程

  上图为使用HAB时的引导流程,具体细节参考《HAB Code Signing tool user's guide》。

HAB库分为两个版本HAB3HAB4HAB4的功能更多一些,rt1050用的是HAB4进行签证。

   为了允许ROM外部的引导组件继续安全引导连,这些组件必须可以回调到HAB中,所以提供了HAB库的API,根据HAB3,HAB4也有两个版本详见I.MX25,i.MX35i.MX50参考手册的系统启动章节。 

1.3HAB CST

  在完成代码加密签名时涉及到以下几个部分:

  • CAA Certificate Authority 证书颁发机构?): CA负责保护*CA**并验证低级代码签名**。
  • SAA Signature Authority 签名权威?):SA负责执行代码签名的行为
  • A Manufacturer  制造商:负责跨蟾片软件请求数字签名

 

 imx rt 系列的HAB Code-Signing Tool 简介

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。下图为一个签名的示意图。

 imx rt 系列的HAB Code-Signing Tool 简介

其中一些处理器提供加密image。下图是加密的示意图:

 imx rt 系列的HAB Code-Signing Tool 简介

  CST生成一次性AES数据加***(DEK),DEK独立于用于代码签名的公钥。同时必须再每块处理器的OEM制造阶段创建DEK的加密块,然后将其附加到引导设备的image中。原因是DEK blob是使用嵌入到nxp处理器中的期间唯一**创建的,该**只能由偏上加密引擎读取。DEK对于所有使用相同加密图像的IC都很常见,但DEK blob对每个IC都是唯一的。

imx rt 系列的HAB Code-Signing Tool 简介 

5 DEK的生成

2.HAB4证书和**即PKI

  HAB4的树由文件hab4_pki_tree脚本( windows .batlinux.sh)生成。下图是PKI树的组成:

  imx rt 系列的HAB Code-Signing Tool 简介

PKI树由以下**和证书组成:

  • CA**:是最上层的**,仅用于签署生成SRK证书。
  • lSRK:是HAB代码签名**的根**。 SRK表格的加密哈希被制成一次性可编程的efuse以建立信任根。每个复位周期中只能选择表中的一个SRK(表中最多可以存放四个SRK)。选择哪个SRKInstall Key CSF 命令中的一个参数决定的。
  • lCSF:是SRK的下级**,用于验证CSF命令中的签名。
  • IMG:是SRK的下级**,用于验证产品软件中的签名。
  • 注:不会为快速身份验证PKI书生成CSF IMG**。

    hab4_pki_tree脚本生成一个基本树,最多可以生成四个SRK,对于每个SRK,还会生成一个CSF**和IMG**。其他**可能需要使用单独的add_key脚本添加到树中。(也可以用另一个**生成解决方案替换OpenSSLhab4_pki_tree脚本)