SBSFU 编译
需要按顺序对下列工程进行编译,因为他们之间存在依赖关系。
1.SE_KeyLib
编译成功后的输出是一个库,SE_Key_CM4_IAR.a。这个库提供获取密钥的功能。这个密钥是由 SBSFU
用来解密和验证后续应用程序合法性的。密钥在这里不是以”数据“的形式出现,而是以”一段可执
行代码“的形式存储,被 STM32 安全机制(PCROP)保护。
X-CUBE-SBSFU 固件包里提供了一个专门的工具 KeysInject,来进行密钥到代码的转换,位于
STM32CubeExpansion_SBSFU_V1.0.0\Middlewares\ST\STM32_Secure_Engine\Utilities\KeysInject\B
inary\KeysInject.exe。在 windows 的命令行窗口输入以下命令:其中两个参数是用户指定的密钥字
符串(在这里使用相同的密钥)。KeysInject.exe OEM_KEY_COMPANY1 OEM_KEY_COMPANY1
生成的 key_table.txt 的内容应被复制到 SE_Key.c 的数组 SE_ReadKeyCode[44]中。并且该字符串由用
户制作一个对应的二进制文件 OEM_KEY_COMPANY1_key.bin,后面再生成加密的用户固件时需要。
2.SE_CoreBin
安全引擎的核心二进制文件。它作为安全引擎中间件,提供唯一的调用门(Calling gate,参见
STM32L4 参考手册中的“防火墙(Firewall)“一章)给 SBSFU 示例应用来调用加解密函数。
SE_KeyLib 的输出 SE_Key_CM4_IAR.a,会被该工程使用。
3.SB_SFU
安全启动与安全固件更新示例应用。它使用之前生成的 SE_CoreBin。在启动时,(安全启动程序
“SB”)验证用户固件的签名或者认证码(MAC)来决定是否跳到用户程序执行。(安全固件更新
“SFU”)如果在启动时检测到有新的固件更新,则下载加密固件,验证,以及解密安装。
4.UserAppExample
用户程序。编译输出是一个可执行程序。它也可以用来进行新版本固件(用户程序)下载,但是,它
不会进行验证与安装。验证与安装时通过重启后的安全启动程序(SecureBoot)完成的。
固件加密与包装
要创建加密的固件,需要使用 STM32 Trusted Package Creator tool。该软件,需要先从
http://www.st.com/en/development-tools/stm32cubeprog.html 下载 en.stm32cubeprog.zip,安装
时勾选 STM32 Trusted Package Creator tool 即可。
打开 STM32 Trusted Package Creator tool,选择“SFU”标签项,随后做如下设置
固件路径:
这是之前编译的用户程序输出,即之前需要编译的四个文件中的“4. UserAppExample”
例如:STM32CubeExpansion_SBSFU_V1.0.0/Projects/STM32L476RG
Nucleo/Applications/UserAppExample/EWARM/UserAppExample_A/Exe/UserAppExample_A.bin
密钥文件路径:
这是之前通过 KeysInject 工具产生的密钥二进制文件。SBSFU 软件包里已经提供了一个。
例如:STM32CubeExpansion_SBSFU_V1.0.0/Projects/STM32L476RG
Nucleo/Applications/UserAppExample/Binary/OEM_KEY_COMPANY1_key.bin
96-bits Nonce 随机数文件路径:
用户可根据需要进行定制,软件包里已经提供了一个。例如:STM32CubeExpansion_SBSFU_V1.0.0/Projects/STM32L476RG
Nucleo/Applications/UserAppExample/Binary/nonce.bin
固件版本:
我们设置成 1.0。
以下是加密的用户应用程序对应的两部分(文件头和文件体)对应的路径。
SFU 头的输出路径:
可任意设置,这里设置为工作目录 STM32CubeExpansion_SBSFU_V1.0.0。
SFU 文件的输出路径:
可任意设置,这里设置为工作目录 STM32CubeExpansion_SBSFU_V1.0.0。
然后点击生成按钮,就可以生成相应的安全固件的头信息以及数据文件。
|