HPMicro Manufacturing Tool 镜像安全启动配置及Bootloader固件同步签名流程

1. 安全启动简介

安全启动是一种仅允许受信的软件运行在设备上的机制。简单来说,安全启动就是在软件执行前,设备需要先验证数字签名是否合法。判断为合法后才会继续运行软件。

在 HPMicro 出品的 MCU 中,BootROM 默认支持安全启动,其支持如下两种证书签名和认证模式:

  • 根据 CA 生成的一级证书的直接签名认证,其中一级证书最多支持 4 个;
  • 根据一级证书签发的二级证书的签名认证,采取信任链的方式来逐级认证,其中其中一级证书最多支持4 个,二级证书最多支持 1 个。

BootROM 的安全启动流程大致如下:

  1. 为缩短整个安全启动的时间,只对固件容器头部进行验签(以一级证书验签为例):
    • BootROM 会先解析镜像固件容器,获取签名块中的根公钥(SRK)表,并计算哈希值;
    • BootROM 从 OTP 中 SRK HASH 字中获取哈希值与上一步哈希值比较,判断是否一致,一致代表根公钥有效;
    • 计算固件容器整个头部的哈希值作为被签名的数据;
    • 用固件容器头部指定的根公钥(SRK)进行验签,验签通过则代表固件容器头合法,没有被篡改;
  2. 对固件采取比对哈希值的方式,固件的哈希值包含在固件信息表中,保证了签名的唯一性;
  3. 当固件容器头检验和各固件校验都通过后,则整个启动镜像安全认证通过;

通过以上流程可以看出,想要 BootROM 执行正常的验签流程,我们需要:

  1. 生成签名密钥对,并将公钥写入镜像中同时签名;
  2. 将公钥对的哈希值写入 OTP;

这两步我们都可以通过 HPMicro Manufacturing Tool 镜像签名助手完成,下面我们一起来看看如何通过工具操作。

2. 通过工具生成签名公私钥

打开镜像编辑助手后,我们勾选上镜像签名的功能,便能显示签名配置界面,如下图所示:

签名配置界面

上图中,您可以自己填充四个根证书,也可以点击 新建超级根证书按钮来生成根证书。点击后对话框如下图所示:

生成证书

配置好证书参数后,点击生成按钮,便可以生成四个根证书,如果勾选了生成二级根证书复选框,同时也会生成二级根证书。生成完毕后,根证书会自动填充到对应的根证书输入框中。

v0.5.0 版本最终的根证书生成路径是在 /tools/signing_tool/certs/。以生成时的时间戳为文件夹名称进行保存。文件夹内有 crts 和 keys 两个文件夹分别代表公钥和私钥。公钥会写入镜像中,私钥会对当前镜像进行签名以供后续 BootROM 进行验签。

当公私钥生成后,您就可以选择根证书然后进行镜像签名了。但刚才我们说到,BootROM 验签时需要验证 OTP 中 SRK HASH 值,那么这个值如何获取呢?

3. SRK HASH 获取并自动同步到 OTP 写视图中

在生成镜像时,工具会自动把 SRK HASH 值写入到日志窗口,如下图所示:

SRK HASH值

您可以复制这些值保存下来或者直接添加到 HPMicro Manufacturing Tool 中进行写入。当然工具提供了相当快捷的方式帮您完成以上操作:

  • 首先确保镜像编辑助手是通过 HPMicro Manufacturing Tool 中的编辑按钮或菜单栏镜像编辑窗口打开的(如果直接双击 hpm_image_helper.exe 打开则无法使用该功能)。
  • 直接勾选 同步 SRK HASH OTP 到 OTP 写视图 复选框,然后点击生成按钮生成镜像,那么工具便会自动将 SRK HASH 写入到工具写视图中,如下图所示:

sync SRK HASH

这时候,您就可以直接烧写 OTP 中的 SRK HASH 值。

4. Bootloader 固件同步签名

做完第三步之后,镜像便完成了签名,但是要想让 BootRom 强制启用安全启动流程,我们还需要将 ROM 的生命周期改为 SECURE,如手册中描述:

BootROM Lifecycle

我们将 OTP 中的 lifecycle 字烧写为 secure 后,BootROM 便只能支持签名的启动镜像。

但这样对工具来说会带来一个问题。工具在连接时会默认加载 Bootloader 固件,之前我们有讲过,该固件本质上也是一个镜像,那么当固件只支持签名的启动镜像后,默认的固件便不能正确加载了,会导致设备连接异常。

正常流程的解决方案是(以 HPM6200 为例):

  • 将未签名固件 hpm6200_blfw_unsigned.bin 用镜像编辑工具进行编辑,用刚才的证书进行签名得到一个签名 Bootloader 固件;
  • 将 hpm6200_blfw_signed.bin 放置到 hpm6200_blfw_unsigned.bin 同级目录;
  • 连接设备时工具会自动查找签名的 Bootloader 固件并自动加载;

当然,这么繁琐的流程肯定是不适合给大家来使用的,因此我们也提供了便捷的操作方式,您只需要在生成镜像前勾选 同步签名 bootloader 固件复选框,那么在生成镜像时便会自动签名 Bootloader 固件,并拷贝到相应目录下,如下图所示:

sync bootloader sign

此时,Bootloader 对应的目录结构是这样的:

bootloader dir

其中,srk 目录存放的是签名所需的公私钥对,我们将其一并拷贝到该目录下作为保存。

以上,有关镜像安全启动的流程基本介绍完毕。

1
0
发表回复 0

Your email address will not be published. Required fields are marked *