本帖最后由 小恩GG 于 2022-12-29 17:10 编辑
通常对MCU进行安全配置,需要使用多个工具分别操作,通过OpenSSL申请证书和密钥,通过elftosb完成镜像加密、CMPA、CFPA文件配置,最后通过blhost工具进行烧写,实际操作复杂,基于命令行的工具对新手不够友好,容易配置失误,造成器件锁死。本文介绍的 MCUXpresso Secure Provisioning(SEC)是一个具有图形化用户界面的一站式MCU安全配置工具。它旨在简化恩智浦MCU平台上可启动可执行程序的生成与配置,集成了许多恩智浦久经验证的安全支持工具集,可以轻松地一站式完成安全配置、生成镜像文件、烧写镜像,目前支持i.MX RT和LPC55系列MCU。用户还可以利用工具脚本文件,自定义安全配置流程,便于二次开发。 本文将主要介绍SEC的常用功能,演示通过SEC工具完成Plain、CRC和Signed镜像的配置、制作和烧写。下图是LPC55S69对于Plain、CRC和Signed镜像的启动流程。
1 准备工作· 本文档用到的软件、硬件环境如下所示 软件: MCUXpresso IDEv11 SDK_2_12_0_LPCXpresso55S69 MCUXpresso Secure Provisioning v5 硬件: LPCXpresso55S69EVK
· 生成原始镜像 在MCUXpresso IDE中打开项目,我们这里选择了最基础的点灯demo作为示例。编译项目文件,在项目debug文件夹中找到项目编译得到的axf文件。axf文件可以直接作为SEC工具的可执行镜像源,此外SEC工具还支持其他镜像文件格式,如bin、hex等。
· 连接开发板 先打开SEC工具,创建新工作区,选择LPC55Sxx系列,LPC55S69芯片。
按住EVK上的ISP按钮,用USB线连接LPCXpresso55S69 EVK的High-Speed USB口,进入ISP模式。点击如图所示位置可以打开连接测试页面。设置VID和PID,点击测试连接,确认连接正常。可以看到,除了USB连接方式之外,SEC工具还支持UART、SPI和I2C的连接方式。
2 工作流程 *在开发调试时,注意设置SEC工具生命周期为Development模式,此时CMPA不会被锁定,开发者可以更改CMPA寄存器。
· Plain和Plain with CRC工作流程 Plain不进行任何加密或者签名,和使用IDE直接烧写类似;CRC为烧写镜像增加循环验证,LPC芯片在启动镜像时,验证镜像内容,如果通过验证则能正常进入程序。这两种镜像启动模式不涉及安全配置问题,不用设置证书和密钥,操作流程类似。 ① Boot模式选择Plain/CRC; ② 选择需要烧写的可执行镜像源; ③ 点击Build image,镜像构建完成会提示SUCCESS; ④ 切换至Write image选项卡,点击Write image,烧写成功提示SUCCESS。
下图为Plain和CRC镜像烧写的流程图,用户需要准备可执行镜像源,根据需求设置TrustZone(上文示例中没有演示设置TrustZone),之后SEC工具生成镜像的bin文件,用户的PFR设置通过SEC工具生成对应的CMPA和CFPA的文件,最后一同烧写。
· Signed工作流程 在镜像文件中加入签名,终端可以通过镜像验证确定代码没有被第三方篡改和破坏,保证了程序的安全性和完整性。SEC工具内置OpenSSL,可以生成X.509规范的证书和密钥文件,用户通过PKI management选项卡管理证书和密钥。 ① Boot模式选择Signed; ② 在PKI management选项卡,点击Generate keys,根据需求完成对话框内设置,生成证书和密钥; ③ 切换至Build image选项卡,选择可执行镜像源 ④ 选择②中生成的证书密钥; ⑤ 点击Random随机生成一个SBKEK密钥(key store在LPC55Sxx设备生命周期只初始化一次,之后SBKEK的任何更改都会导致无法正常加载SB文件,建议烧写成功后妥善保留SBKEK); ⑥ 点击Build image,镜像构建完成会提示SUCCESS; ⑦ 切换至Write image选项卡,点击Write image,烧写成功提示SUCCESS。
下图为Signed镜像烧写的示意图,可执行镜像源和PFR设置部分和Plain/CRC类似,不同之处在于,Signed镜像烧写需要预先准备证书密钥文件,这可以通过SEC工具的PKI管理页完成。此外通过SBKEK对Signed镜像加密,最终生成加密的sb文件,而SBKEK也将写入key store中。
· 操作日志 对话框和log界面会显示当前操作所实际使用的命令和运行的结果,并保存在工作区目录下的log文件中。如下图框出的命令,参考这些信息将有助于更好地理解SEC工具的底层逻辑,便于进行二次开发。
3 小结 本文介绍了通过SEC工具烧写程序,配置安全设置常用功能的基本操作流程。SEC是一个功能强大的安全配置工具,除了本文介绍的基本功能之外,还能够实现如身份验证调试(Debug Authentication)、代码加密(PRINCE)等高级功能,结合Smart Card和SEC工具,还可以使得OEM能够配置管理生产制造的信任根,以实现软件知识产权保护。SEC工具的高级功能以及详细内容可以参考手册 MCUXpressoSecure Provisioning Tool User Guide v.5,以后有机会将向大家介绍。
|