NXP

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

2019-07-12 11:35发布

1.简述

  CST能够让制造商为其包含NXP处理器的产品签署或加密软件。结合NXP处理器中包含的高保证引导(HAB)特性,CST可以用来确保只有验证过的可靠的软件才能在最终产品上运行。名词解释:
  •  HABHigh 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库分为两个版本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  制造商:负责跨蟾片软件请求数字签名
  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 .batlinux.sh)生成。下图是PKI树的组成:  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脚本)