小猫爪:i.MX RT1050学习笔记21-安全启动5-实现BEE单引擎OTPMK加密

1 前言

已经介绍了RT的HAB加密,下面我们来实现RT的BEE加密,之前已经介绍过,BEE加密是支持XIP的,还分别单引擎加密和双引擎加密。而且BEE加密可以单独使用,也可以与HAB签名一起使用。BEE加密的秘钥可以使用FUSE中的SW_GP2,也可以使用OTPMK来加密,如果使用OTPMK进行加密,则必须配合HAB签名,因为只有当HAB签名开启的时候,DCP和BEE才能取到OTPMK。

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;最后点击确定。具体示范如下图:

![在这里插入图片描述](https://img-blog.csdnimg.cn/20201118163047183.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L091c2h1d2Vu,size_16,color_FFFFFF,t_70#pic_center

3 实战操作1-OTPMK BEE加密+HAB签名

因为我的板子已经启用了HAB加密,所以现在只能使用加密+签名的方式,所以接下来将介绍采用OTPMK进行XIP加密+HAB签名的方式进行安全启动。

3.1 生成公钥和公钥摘要

具体操作见文章《小猫爪:i.MX RT1050学习笔记19-安全启动3-HAB签名》同名章节。

3.2 生成公钥sb文件

具体操作见文章《小猫爪:i.MX RT1050学习笔记19-安全启动3-HAB签名》同名章节。

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

具体操作见文章《小猫爪:i.MX RT1050学习笔记19-安全启动3-HAB签名》同名章节。

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文件夹下生成带有签名的且还有头信息的镜像文件。如下图:
在这里插入图片描述拷贝Flashloader_RT1050_1.1\Tools\bd_file\imx10xx\program_flexspinor_image_hyperflash.bd文件至\Flashloader_RT1050_1.1\Tools\elftosb\win\bd_file文件夹中(因为我使用的板子上的flash是hyperflash,所以我选择的bd文件是program_flexspinor_image_hyperflash.bd,大家需根据实际情况自己选择),打开编辑最后一句:

load fuse 0x00002000 > 0x06;
/*因为我们采取的是单引擎BEE加密,所以我们只需要修改FUSE中
的BEE_KEY0_SEL就行,修改其的加密私钥为OTPMK*/

输入以下命令生成sb文件(这一步主要是给镜像添加EKB和PRDB信息,还有为Flashloader下达脚本运行,使Flashloader完成对镜像的加密工作,并下载镜像至FLASH中,默认使用BEE引擎0作为加密引擎):

elftosb -f kinetis -V -c bd_file/program_flexspinor_image_hyperflash_encrypt.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启动,并且还需要使BOOT_CFG[1] = 1激活XIP加密启动。

使用NXP MCUBootUtility工具读取FLASH中的内容,如下:
在这里插入图片描述
可以看到在偏移0x400处出现了EKIB0,在偏移0x400出现了PRDB0。

因为FUSE的某一位只能被烧写一次,对于用户自定义key加密的方式在这里我就不一一赘述了,后面有机会再和大家分享,谢谢。

推荐大家使用NXP MCUBootUtility这个软件,可以一键实现上面所有的步骤,不要太爽哦。下载链接为https://github.com/JayHeng/NXP-MCUBootUtility

END

猜你喜欢

转载自blog.csdn.net/Oushuwen/article/details/110228313