小猫爪:i.MX RT1050学习笔记19-安全启动3-实现HAB签名

1 前言

前面对RT1050的安全启动做了一个简单的介绍,接下来就尝试一下最基础的安全启动机制-HAB签名,该种方式是最初级的安全模式,即仅对image进行签名认证,一般用于对产品安全性要求较高的场合。签名认证主要是对image合法性进行校验,检测image是否被异常破坏或篡改,如果检测发现image不合法,那么MCU便不会启动执行该image。

2 准备工作

2.1 下载Flashloader

下载网址:<<Flashloader_i.MX RT1050>>

下载下来解压后,如下图:
在这里插入图片描述
并在Tools文件夹下新建一个文件夹cst备用,如下图:
在这里插入图片描述

2.2 下载CST

下载网址:<<i.MX High Assurance Boot Reference Code Signing Tool>>

下载后,将其解压后,然后将解压的文件全部放入之前的新建文件夹cst中,如下图:
在这里插入图片描述

2.3 安装OpenSSL

在网站https://slproweb.com/products/Win32OpenSSL.html下载openssl的windows安装包,这里我选择是Win64 OpenSSL v1.1.1h Light,如下图:
在这里插入图片描述
下载后,点击安装,然后记住安装路径,接下来将OpenSSL的路径添加至windows环境变量路径,首先右击我的电脑,选择属性,选择改变设置,选择高级,选择环境变量,选择Path,选择编辑,选择新建,添加OpenSSL的安装路径下的bin,比如我添加的路径就是:C:\Program Files\OpenSSL-Win64\bin;最后点击确定。具体示范如下图:

在这里插入图片描述

3 实战操作

准备工作准备完毕,接下来,进行实战操作。

3.1 生成公钥和公钥摘要

进入文件夹*****\Flashloader_i.MXRT1050_GA\Flashloader_RT1050_1.1\Tools\cst\keys中,新建一个serial.txt,并且内容为8位数字,如下图:
在这里插入图片描述
再新建一个key_pass.txt,内容为2行,每行至少4个字符,如下图:
在这里插入图片描述
之后keys文件内容如下:
在这里插入图片描述
双击hab4_pki_tree.bat,出现命令提示行,然后根据相关提示进行操作,如下图:
在这里插入图片描述
完成最后操作后,你会发现在keys文件夹和crts文件中生成可很多文件,那就是证书相关数据。之后再启动一个cmd窗口,使用cd命令进入到****\Flashloader_i.MXRT1050_GA\Flashloader_RT1050_1.1\Tools\cst\mingw32\bin文件夹中(每个人的文件夹都不同,我这里就不贴具体命令了),进入该文件夹后再输入以下命令:

srktool -h 4 -t ../../keys/SRK_1_2_3_4_table.bin -e ../../keys/SRK_1_2_3_4_fuse.bin -d sha256 -c ../../crts/SRK1_sha256_2048_65537_v3_ca_crt.pem, ../../crts/SRK2_sha256_2048_65537_v3_ca_crt.pem, ../../crts/SRK3_sha256_2048_65537_v3_ca_crt.pem, ../../crts/SRK4_sha256_2048_65537_v3_ca_crt.pem -f 1

我的命令效果如下:
在这里插入图片描述
经过以上操作后,就会在cst/keys文件夹下生成两个文件,如下图:
在这里插入图片描述

SRK_1_2_3_4_table.bin里的数据就是原始公钥,SRK_1_2_3_4_fuse.bin里的数据就是公钥的HASH摘要值,之后我们需要将摘要值烧写进eFUSE。我们先打开看一下内容:
在这里插入图片描述
在这里插入图片描述注意:crts文件中生成的数据包含私钥数据,不要轻易删除,那么新的image将无法被正确签名从而导致HAB认证失败无法被启动执行,因为公钥摘要已经烧写至eFUSE不容更改了。)

至此第一步生成公钥和公钥摘要已经完成了。

然后再进行以下操作:
①将\Flashloader_i.MXRT1050_GA\Flashloader_RT1050_1.1\Tools\cst文件夹下的crts和keys两个文件夹拷贝至\Flashloader_i.MXRT1050_GA\Flashloader_RT1050_1.1\Tools\elftosb\win下。

②再将\Flashloader_i.MXRT1050_GA\Flashloader_RT1050_1.1\Tools\cst\mingw32\bin文件夹下的cst.exe拷贝至\Flashloader_i.MXRT1050_GA\Flashloader_RT1050_1.1\Tools\elftosb\win下。

③在\Flashloader_i.MXRT1050_GA\Flashloader_RT1050_1.1\Tools\elftosb\win下新建文件夹flashloader,app,fuse,bd_file。

以上步骤完成后如下:
在这里插入图片描述

3.2 生成公钥sb文件

这一步的作用就是生成烧写文件,将该文件烧写进eFUSE,用来改变eFUSE值,内容有两个:①烧写公钥摘要值②使能安全启动。

在文件夹\Flashloader_i.MXRT1050_GA\Flashloader_RT1050_1.1\Tools\bd_file\imx10xx中找到文件enable_hab.bd,然后将其复制到在前面创建的fuse文件夹中,打开编辑它,将在上一步生成的SRK_1_2_3_4_fuse.bin中的公钥摘要值填入保存,具体操作如下图:

在这里插入图片描述

接下来开启cmd命令窗口,使用cd命令切换路径至***\Flashloader_i.MXRT1050_GA\Flashloader_RT1050_1.1\Tools\elftosb\win中,然后输入以下命令:

elftosb -f kinetis -V -c fuse/enable_hab.bd -o fuse/enable_hab.sb

我的操作结果如下:
在这里插入图片描述

之后就会在\Flashloader_i.MXRT1050_GA\Flashloader_RT1050_1.1\Tools\elftosb\win\fuse文件夹中生成enable_hab.sb文件,该文件就是将要被烧写到eFUSE中的文件,先保存后面待用。

3.3 生成具有HAB签名的Flashloader镜像

这一步的作用就是生成带有HAB签名的Flashloader镜像,让Flashloader可以在eFUSE烧写后也就是安全启动使能后也可以正常运行。

找到Flashloader_i.MXRT1050_GA\Flashloader_RT1050_1.2\Tools\bd_file\imx10xx\imx-dtcm-signed.bd文件,将其复制至之前创建的bd_file文件夹,并修改其中entryPointAddress的参数,大家可以打开Flashloader的镜像文件(Flashloader_i.MXRT1050_GA\Flashloader_RT1050_1.1\Flashloader)看一下:
在这里插入图片描述根据图中的信息修改entryPointAddress = 20014B91:

options {
    flags = 0x08;
    startAddress = 0x20000000;
    ivtOffset = 0x400;
    initialLoadSize = 0x2000;
	entryPointAddress = 0x20014B91;
    //DCDFilePath = "dcd.bin";
    # Note: This is required if the cst and elftsb are not in the same folder 
    // cstFolderPath = "/Users/nxf38031/Desktop/CSTFolder";
    # Note: This is required if the default entrypoint is not the Reset_Handler 
    #       Please set the entryPointAddress to Reset_Handler address 
    // entryPointAddress = 0x60002411;
}

接下来开启cmd命令窗口,使用cd命令切换路径至***\Flashloader_i.MXRT1050_GA\Flashloader_RT1050_1.1\Tools\elftosb\win中,然后输入以下命令:

elftosb -f imx -V -c bd_file/imx-dtcm-signed.bd -o flashloader/ivt_flashloader_signed.bin ../../../Flashloader/flashloader.srec

我的操作结果如下:
在这里插入图片描述
之后就会在\Flashloader_i.MXRT1050_GA\Flashloader_RT1050_1.1\Tools\elftosb\win\flashloader文件夹中生成以下文件:
在这里插入图片描述
至此带有HAB签名的Flashloader镜像文件就生成好了,留着备用。

3.4 生成具有HAB签名的镜像sb文件

这一步则是给APP镜像增加CSF部分,也就是增加签名。

在\Flashloader_i.MXRT1050_GA\Flashloader_RT1050_1.1\Tools\elftosb\win下新建文件夹app。并将待签名的APP镜像拷贝至app文件夹中(该镜像未加头信息),如下图:
在这里插入图片描述找到Flashloader_i.MXRT1050_GA\Flashloader_RT1050_1.2\Tools\bd_file\imx10xx\imx-flexspinor-normal-signed.bd文件,将其复制至之前创建的bd_file文件夹,并修改其中entryPointAddress的参数(因为我的APP链接地址在nor中,所以我使用的是imx-flexspinor-normal-signed.bd文件,大家因根据实际情况修改bd文件,具体操作可参考文章:《小猫爪:i.MX RT1050学习笔记18-安全启动2-elftosb和MfgTool的使用》);

elftosb -f imx -V -c bd_file/imx-flexspinor-normal-signed.bd -o app/ivt_signed_boot_app.bin app/iled_blinky.s19

这样就会在app文件夹下生成带有签名的且还有头信息的镜像文件。如下图:
在这里插入图片描述
输入以下命令生成sb文件(因为我使用的板子上的flash是hyperflash,所以我选择的bd文件是program_flexspinor_image_hyperflash.bd,大家需根据实际情况自己选择):

elftosb -f kinetis -V -c ../../bd_file/imx10xx/program_flexspinor_image_hyperflash.bd -o app/boot_image.sb app/ivt_signed_boot_app_nopadding.bin

操作结果如下图:

在app文件夹下生成的boot_image.sb就是我们需要烧写的启动文件,里面包含了启动配置以及镜像,留着备用。

3.5 烧写文件

注意:FUSE一旦烧写,将无法改变,烧写一定要慎重,烧写完私钥文件一定要保存好。)

①将之前生成的具有签名的flashloader镜像,公钥摘要的sb文件以及具有签名的镜像sb文件拷贝至文件夹***\Flashloader_i.MXRT1050_GA\Flashloader_RT1050_1.1\Tools\mfgtools-rel\Profiles\MXRT105X\OS Firmware中,如下图:
在这里插入图片描述
②编辑文件Flashloader_i.MXRT1050_GA\Flashloader_RT1050_1.1\Tools\mfgtools-rel\cfg.ini,修改其中的name值,如下:

.........
.........

[LIST]

name = MXRT105X-SecureBoot

③使BOOT_CFG=0x01,进入Serial Download模式,然后连接PC与芯片。

④进入文件夹***\Flashloader_i.MXRT1050_GA\Flashloader_RT1050_1.1\Tools\mfgtools-rel下,双击打开MfgTool2.exe。
在这里插入图片描述
点击Start下载。
在这里插入图片描述
点击Stop按钮,这样程序就下载完成了,切换RT1050使其从FLASH启动。

番外

在这里,我们使用MCUBootUtility工具查 看 RT芯片的加密,映像文件和熔丝数据。
(1) 将配置好的cst文件夹复制到以下文件夹:NXP MCUBootUtility\tools,删除原始的cst文件夹。
(2) 将 SRK_1_2_3_4_fuse.bin和 SRK_1_2_3_4_table.bin复制到以下文件夹:NXP MCUBootUtility\gen\hab_cert,现在,就可以使用新的MCUBootutility连接已经完成 HAB签名的RT1050了。

使用MCUBootUtility连接开发板,再读取FUSE的数据和之前的做比较,可以发现用来存储公钥摘要的SRK0~SRK7已经变成了SRK_1_2_3_4_fuse.bin里的数据,cfg1[1]也从0表成了1。

没有加密前的FUSE:
在这里插入图片描述加密后的FUSE:
在这里插入图片描述
推荐大家使用NXP MCUBootUtility这个软件,可以一键实现上面所有的步骤,不要太爽哦。下载链接为https://github.com/JayHeng/NXP-MCUBootUtility

END

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小猫爪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值