用户手册 STM32 Trusted Package Creator 工具软件说明 引言 STM32 Trusted Package Creator 是 STM32CubeProgrammer 工具集 (STM32CUBEPROG) 的一部分, 能够生成安全固件和模块, 用于 STM32 安全编程解决方案, 它们是 : 安全固件安装 (SFI):SFI 是一种安全机制, 通过使用 AES-GCM 密钥对整个固件进行加密, 可以在不受信任的产品环境中安全地安装 OEM 固件 安全模块安装 (SMI):SMI 旨在通过使用 AES-GCM 密钥加密此部分来保护该部分固件 (ELF 文件的一部分 ) SFI-SMI 组合映像是包含一个或多个模块区域的 SFI 映像 安全固件升级 (SFU):SFU 是一种允许以安全方式升级 STM32 微控制器内置程序的解决方案 有关 SFU 的更多信息, 请参阅 http://www.st.com 上的 X-CUBE-SBSFU 软件包以获取更多信息 本用户手册详细介绍了软件环境先决条件以及 STM32 Trusted Package Creator 工具软件的可用功能 2018 年 8 月 DocID030724 Rev 1 [English Rev 1] 1/33 www.st.com 1
目录 UM2238 目录 1 系统要求................................................... 5 2 准备过程................................................... 6 2.1 SFI 准备过程................................................ 6 2.2 SMI 准备过程................................................ 8 2.3 SFU 准备过程.............................................. 10 3 STM32 Trusted Package Creator 工具命令....................... 12 3.1 命令行界面 (CLI).......................................... 12 3.2 SFI 生成指令............................................... 13 3.3 SMI 生成指令............................................... 15 3.4 SFU 生成指令.............................................. 16 4 STM32 Trusted Package Creator 工具图形用户界面 (GUI)......... 18 4.1 SFI 生成................................................... 20 4.2 SMI 生成.................................................. 23 4.3 SFU 生成.................................................. 25 5 选项字节文件............................................... 28 6 日志对话框................................................ 29 7 设置...................................................... 30 8 SFI/SMI 检查............................................... 31 9 版本历史.................................................. 32 2/35 DocID030724 Rev 1 [English Rev 1]
表格索引 表格索引 表 1. 文档版本历史........................................................... 32 表 2. 中文文档版本历史........................................................ 32 DocID030724 Rev 1 [English Rev 1] 3/35 3
图片索引 UM2238 图片索引 图 1. SFI 准备过程............................................................. 6 图 2. SFI 文件结构............................................................. 7 图 3. SMI 准备过程............................................................. 8 图 4. SMI 文件结构............................................................. 9 图 5. SFU 准备过程........................................................... 10 图 6. SFU 文件结构........................................................... 11 图 7. STM32 Trusted Package Creator 工具的可用命令............................... 12 图 8. 使用 ELF 文件生成 SFI..................................................... 14 图 9. 使用二进制文件生成 SFI................................................... 14 图 10. SFI-SMI 组合生成........................................................ 14 图 11. SMI 生成............................................................... 16 图 12. SFU 生成............................................................... 17 图 13. STM32 Trusted Package Creator 工具 GUI SFI 选项卡............................ 18 图 14. STM32 Trusted Package Creator 工具 GUI SMI 选项卡............................ 19 图 15. STM32 Trusted Package Creator 工具 GUI SFU 选项卡............................ 20 图 16. 附加固件文件........................................................... 21 图 17. 成功生成 SFI............................................................ 22 图 18. ELF 文件选择............................................................ 23 图 19. 成功生成 SMI............................................................ 25 图 20. 固件文件选择........................................................... 26 图 21. 成功生成 SFU........................................................... 27 图 22. 选项字节文件示例........................................................ 28 图 23. 日志对话框示例.......................................................... 29 图 24. 设置对话框............................................................. 30 图 25. SFI 检查................................................................ 31 4/35 DocID030724 Rev 1 [English Rev 1]
系统要求 1 系统要求 支持的操作系统和架构为 : Linux 32 位和 64 位 ( 已在 Ubuntu 14.04 上测试 ) Windows 10-7-8 32 位和 64 位 macos ( 最小版本 OS X Yosemite) STM32CubeProgrammer 和 STM32 Trusted Package Creator 可支持基于 Arm Cortex -M 处理器的 STM32 32 位器件 DocID030724 Rev 1 [English Rev 1] 5/33 32
准备过程 UM2238 2 准备过程 2.1 SFI 准备过程 SFI( 安全固件安装 ) 映像是由意法半导体创建的格式, 包含已使用 AES-GCM 算法加密和验证的固件 图 1 中描述了 SFI 准备过程 图 1. SFI 准备过程 SMI SMI AES-GCM SFI SFI SFI 6/33 DocID030724 Rev 1 [English Rev 1]
准备过程 在执行 AES-GCM 加密一个区域之前, 该工具将初始化向量 (IV) 计算为 : IV = nonce + Area Index 其中 nonce 是一个数字, 在 AES-GCM 算法中作为迭代过程的起始值只使用一次, 以将不同的密文发送给相同的数据块 然后, 它将区域描述符 ( 从 magic 开始到区域总数 ) 作为附加认证数据 (AAD) 来传递 输入固件中的每个段都会构成 SFI 文件中的一个固件 (F) 区域 每个 SMI 文件 ( 组合情况 ) 共同构成一个模块 (M) 区域 选项字节配置构成配置 (C) 区域 为了生成头文件标签, 该工具使用 SFI 头文件作为 AAD 以及 nonce 作为 IV, 执行仅经过验证的 AES-GCM 加密 ( 不含纯文本或密文 ) 图 2 中描述了 SFI 文件的结构 图 2. SFI 文件结构 SFI Magic SFI F magic blob M magic blob C magic TotalN 0 MS48672V1 DocID030724 Rev 1 [English Rev 1] 7/33 32
准备过程 UM2238 要从多个固件文件准备 SFI 映像, 您必须确保其各段之间没有重叠, 否则会收到错误消息 : 段之间重叠, 无法合并固件文件 而且, 在 SFI-SMI 组合映像的情况下, 还会在各区域之间进行重叠检查 ( 如果固件和模块区域之间存在重叠 ) 如果检查失败, 将显示一条错误消息 : SFI 区域之间重叠 此外, 所有 SFI 区域都必须位于 flash 中, 否则生成将失败, 并给出错误消息 : 一个或多个 SFI 区域不在 flash 中 2.2 SMI 准备过程 一个 SMI 映像 ( 安全模块安装 ) 仅保护固件内的一个模块 图 3 中描述了 SMI 准备过程 图 3. SMI 准备过程 ELF ELF ELF PCROP AES-GCM SMI SMI SMI 使用以下输入来执行 AES-GCM 加密 : 作为初始化向量 (IV) 的 Nonce 作为附加认证数据 (AAD) 的安全版本 8/33 DocID030724 Rev 1 [English Rev 1]
准备过程 SMI 准备之前, 执行以下检查 : 专有代码读出保护 (PCROP) 区必须与闪存字 (256 位 ) 对齐, 否则会显示警告 该区大小必须至少为 2 个闪存字 (512 位 ), 否则会显示警告 该区必须以 Flash 字边界 (256 位的字 ) 结束, 否则会显示警告 如果该区紧接着 PCROP 区域并在 PCROP 区的最后一个 Flash 字处开始, 则生成失败并显示错误消息 在 SMI 准备之后, 还会生成一个明文 ( 即未加密的 )ELF 文件, 其中包含程序数据并且只包含明文代码段 图 4 中显示了 SMI 文件的结构 图 4. SMI 文件结构 SMI Magic + SMI SMI MS48674V1 DocID030724 Rev 1 [English Rev 1] 9/33 32
准备过程 UM2238 2.3 SFU 准备过程 SFU 映像 ( 安全固件升级 ) 允许以安全方式升级 STM32 微控制器内置程序, 以防止未经授权的更新 图 5 中显示了 SFU 准备过程 图 5. SFU 准备过程 1 AES-GCM SFU SFU SFU MS48675V1 10/33 DocID030724 Rev 1 [English Rev 1]
准备过程 生成 2 个文件,SFU 映像头文件和 SFU 加密的固件映像 要生成头文件, 使用以下输入来执行 AES-GCM 加密 : 作为初始化向量 (IV) 的 Nonce 无附加已验证数据 (AAD) 对于加密固件映像生成 : 作为初始化向量 (IV) 的 Nonce 作为附加认证数据 (AAD) 的头文件内容图 6 中显示了 SFU 文件的结构 图 6. SFU 文件结构 SFU Magic 26 MAC MS48676V1 DocID030724 Rev 1 [English Rev 1] 11/33 32
STM32 Trusted Package Creator 工具命令 UM2238 3 STM32 Trusted Package Creator 工具命令 3.1 命令行界面 (CLI) 以下各节介绍如何由命令行界面来使用 STM32 Trusted Package Creator 工具 可用命令如图 7 中所示 图 7. STM32 Trusted Package Creator 工具的可用命令 12/33 DocID030724 Rev 1 [English Rev 1]
STM32 Trusted Package Creator 工具命令 3.2 SFI 生成指令 -sfi, --sfi 说明 : 此指令生成一个 SFI 映像文件 为了生成 SFI 映像, 用户必须使用下面列出的选项提供强制输入 -fir, --firmware 说明 : 添加一个输入固件文件 支持的格式是 Bin Hex Srec 和 ELF 此选项可以多次使用以添加多个固件文件 语法 :-fir <Firmware_file> [<Address>] <Firmware_file> : 固件文件 [<Address>] : 地址 ( 仅用于 Bin 文件 ) -k, --key 说明 : 设置 AES-GCM 密钥 语法 : -k <Key_file> < Key _file> :16 字节的二进制文件 -n, --nonce 说明 : 设置 AES-GCM 随机数 语法 : -n <Nonce_file> <Nonce _file> -v, --ver 说明 : 设置映像版本 语法 : -v <Image_version> <Image_version> -ob, --obfile 说明 : 提供选项字节文件 语法 : -ob <CSV_file> <CSV_file>: -m, --module :12 字节的二进制文件 : 任何基数下在 0 到 255 之间的值 有 9 个值的 csv 文件 说明 : 添加一个输入 SMI 文件 此选项可以多次使用以添加多个 SMI 文件 这是可选的 ( 用于 SFI-SMI 组合 ) 语法 : -m <SMI_file> <SMI_file> :SMI 文件 [<Address>] : 仅适用于可重定位的 SMI -o, --outfile 说明 : 设置要创建的 SFI 文件 语法 : -o <out_file> DocID030724 Rev 1 [English Rev 1] 13/33 32
STM32 Trusted Package Creator 工具命令 UM2238 <out_file>: 示例 : 利用 ELF 文件 : 要生成的 SFI 文件, 必须有.sfi 扩展名 STM32TrustedPackageCreator_CLI sfi -fir ELF_firmware.axf -k test_firmware_key.bin -n nonce.bin -ob FIR_ob.csv -v 23 -o test.sfi 图 8. 使用 ELF 文件生成 SFI 利用二进制文件 : STM32TrustedPackageCreator_CLI sfi -fir bin_firmware.bin 0x8000000 -k test_firmware_key.bin -n nonce.bin -ob FIR_ob.csv -v 23 -o test.sfi 图 9. 使用二进制文件生成 SFI SFI-SMI 组合 : STM32TrustedPackageCreator_CLI sfi -fir ELF_firmwrae.axf -fir bin_firmware.bin 0x8000000 -m FIR_pcrop.smi -k test_firmware_key.bin -n nonce.bin -ob FIR_ob.csv -v 23 -o test.sfi 图 10. SFI-SMI 组合生成 14/33 DocID030724 Rev 1 [English Rev 1]
STM32 Trusted Package Creator 工具命令 3.3 SMI 生成指令 -smi, --smi 说明 : 此指令生成一个 SMI 映像文件 为了生成 SMI 映像, 用户必须使用下面列出的选项提供强制输入 -elf, --elfile 说明 : 添加一个输入 ELF 文件 语法 : -elf <ELF_file> <ELF_file> :ELF 文件 ELF 文件可以有任意扩展名 :.elf, axf,.o,so,.out -s, --sec 说明 : 设置要加密区的名称 语法 : -s <section_name> <section_name>: -k, --key 区名 说明 : 设置 AES-GCM 密钥 语法 : -k <Key_file> <Key _file> -n, --nonce 说明 : 设置 AES-GCM 随机数 语法 : -n <Nonce_file> <Nonce _file>: -sv, --sver 说明 : 设置安全版本文件 语法 : -sv <SV_file> <SV_file>: -o, --outfile :16 字节的二进制文件 12 字节的二进制文件 16 字节文件 说明 : 设置要创建的 SMI 文件 语法 : -o <out_file> <out_file>: -c, --clear 说明 : 设置要创建的明文 ELF 文件 语法 : -c <ELF_file> <ELF_file>: 要生成的 SFI 文件, 必须有.smi 扩展名 要生成的明文 ELF 文件 DocID030724 Rev 1 [English Rev 1] 15/33 32
STM32 Trusted Package Creator 工具命令 UM2238 示例 STM32TrustedPackageCreator_CLI smi -elf FIR_module.axf -s ER_PCROP -k test_firmware_key.bin -n nonce.bin -sv svfile -o test.smi -c clear.smi 图 11. SMI 生成 3.4 SFU 生成指令 -sfu, --sfu 说明 : 此指令生成一个 SFU 映像文件 为了生成 SFU 映像, 用户必须使用下面列出的选项提供强制输入 -fir, --firmware 说明 : 设置输入固件文件 支持的格式是 Bin Hex Srec 和 ELF 该固件文件只能包含一个段 语法 : -fir <Firmware_file> [<Address>] < Firmware _file>: 固件文件 [<Address>]: 地址 ( 仅用于 Bin 文件格式 ) -k, --key 说明 : 设置 AES-GCM 密钥 语法 : -k <Key_file> <Key _file>: -n, --nonce 说明 : 设置 AES-GCM 随机数 语法 : -n <Nonce_file> <Nonce _file>: -v, --ver 说明 : 设置映像版本 语法 : -v <Image_version> <Image_version>: -oh, --outheader 说明 : 设置要创建的 SFU 头文件 语法 : -oh <out_file> 16 字节的二进制文件 12 字节的二进制文件 任何基数下在 0 到 255 之间的值 16/33 DocID030724 Rev 1 [English Rev 1]
STM32 Trusted Package Creator 工具命令 <out_file>: -os, --outsfu 要生成的 SFU 头文件, 必须有.sfuh 扩展名 说明 : 设置要创建的 SFU 文件 语法 : -os <out_file> <out_file>: 示例 : 要生成的 SFU 文件, 必须有.sfu 扩展名 SFMIPreparationTool_CLI sfu -fir bin_firmware.bin -k test_firmware_key.bin -n nonce.bin -v 23 -oh out.sfuh -os out.sfu 图 12. SFU 生成 DocID030724 Rev 1 [English Rev 1] 17/33 32
STM32 Trusted Package Creator 工具图形用户界面 (GUI) UM2238 4 STM32 Trusted Package Creator 工具图形用户界面 (GUI) 本节介绍如何通过其图形用户界面来使用 STM32 Trusted Package Creator 工具 STM32 Trusted Package Creator 工具 GUI 提供三个选项卡 : 一个用于 SFI 生成 ( 图 13), 一个用于 SMI 生成 ( 图 14), 另一个用于 SFU 生成 ( 图 15) 图 13. STM32 Trusted Package Creator 工具 GUI SFI 选项卡 18/33 DocID030724 Rev 1 [English Rev 1]
STM32 Trusted Package Creator 工具图形用户界面 (GUI) 图 14. STM32 Trusted Package Creator 工具 GUI SMI 选项卡 DocID030724 Rev 1 [English Rev 1] 19/33 32
STM32 Trusted Package Creator 工具图形用户界面 (GUI) UM2238 图 15. STM32 Trusted Package Creator 工具 GUI SFU 选项卡 4.1 SFI 生成 要验证 SFI 生成请求, 用户必须使用有效值来填充输入字段 : 固件文件 : 注 : 用户必须使用 add 按钮来添加输入固件文件 如果该文件有效, 则将其添加到固件文件列表中 选择它, 会在固件信息部分 ( 图 16) 中出现几条相关信息, 否则会显示一条错误消息框, 指出文件无法打开或文件无效 如果文件是二进制格式, 则会出现一个对话框, 要求提供一个地址 使用 remove 按钮可以删除一个文件 20/33 DocID030724 Rev 1 [English Rev 1]
STM32 Trusted Package Creator 工具图形用户界面 (GUI) 图 16. 附加固件文件 密钥和随机数文件 : 密钥和随机数文件可以通过输入其路径 ( 绝对或相对 ) 或通过选择 open 按钮来选择 请注意, 其大小必须符合规定 ( 密钥为 16 个字节, 随机数为 12 个字节 ) 选项字节文件 : 选项字节文件可以同样的方式来选择 仅支持 csv 文件 SMI 文件 : SMI 文件可以采用跟固件文件同样的方式来添加 选择文件后会在固件信息部分显示几条相关信息 映像版本 : 映像版本值为 [0...255] DocID030724 Rev 1 [English Rev 1] 21/33 32
STM32 Trusted Package Creator 工具图形用户界面 (GUI) UM2238 输出文件 : 输出文件可以通过输入其路径 ( 绝对或相对 ) 或使用 select folder 按钮来选择, 请注意, 使用后一种方式时, 建议使用名称 out.sfi, 您可以将其保留或对其进行更改 所有字段都正确填入时,Generate SFI 按钮激活 用户可以通过点击它来生成 SFI 文件 如果一切顺利, 将出现一个指示成功生成的消息框 ( 图 17), 并在 SFI 信息区显示有关生成的 SFI 文件信息 图 17. 成功生成 SFI 22/33 DocID030724 Rev 1 [English Rev 1]
STM32 Trusted Package Creator 工具图形用户界面 (GUI) 4.2 SMI 生成 对于 SFI 生成, 用户必须提供输入信息 Elf 文件 : 这种情况下, 输入文件只能是 elf 文件 如果该文件有效, 会在 ELF information 选项卡 ( 图 18) 中显示信息, 否则会显示一条错误消息框, 指出文件无法打开或文件无效 图 18. ELF 文件选择 DocID030724 Rev 1 [English Rev 1] 23/33 32
STM32 Trusted Package Creator 工具图形用户界面 (GUI) UM2238 密钥和随机数文件 : 类似 SFI, 可以按照与固件文件相同的方式选择密钥和随机数文件 请注意, 其大小必须符合规定 ( 密钥为 16 个字节, 随机数为 12 个字节 ) 安全版本文件 : 安全版本文件大小必须为 16 字节 安全版本文件位于 Security_Version 文件夹下 加密段 : 这是一个段列表, 可以选择哪个段被加密 输出文件 : 输出文件可以通过输入其路径 ( 绝对或相对 ) 或使用 Select folder 按钮来选择, 请注意, 使用后一种方式时, 文中建议了一个名称, 您可以将其保留或对其进行更改 当所有字段都正确填入后, 用户可以通过点击 Generate SMI( 该按钮变为激活状态 ) 按钮来生成 SMI 文件 除了有关所生成 SMI 文件的信息外, 还会出现一个消息框, 通知用户文件成功生成 ( 图 19), 否则会显示错误 24/33 DocID030724 Rev 1 [English Rev 1]
STM32 Trusted Package Creator 工具图形用户界面 (GUI) 图 19. 成功生成 SMI 4.3 SFU 生成 这种情况下的输入字段与 SFI 生成用例的输入字段类似 固件文件 : 用户需要导入固件文件 如果该文件有效, 则在固件信息区 ( 图 20) 中会显示几条相关信息, 否则会显示错误消息框 注意, 该固件文件只能包含一个段 DocID030724 Rev 1 [English Rev 1] 25/33 32
STM32 Trusted Package Creator 工具图形用户界面 (GUI) UM2238 图 20. 固件文件选择 密钥和随机数文件 : 与 SFI 和 SMI 用例类似 映像版本 : 映像版本值为 [0...255] 输出文件 : 输出文件可以通过输入其路径 ( 绝对或相对 ) 或使用 select folder 按钮来选择, 请注意, 使用后一种方式时, 文中建议了一个名称, 您可以将其保留或对其进行更改 所有字段都正确填入时,Generate SFU 按钮激活 用户可以通过点击它来生成 SFU 文件 如果一切顺利, 将出现一个通知成功生成的消息框 ( 图 21), 并在 SFU 信息区显示有关生成的 SFU 文件信息 26/33 DocID030724 Rev 1 [English Rev 1]
STM32 Trusted Package Creator 工具图形用户界面 (GUI) 图 21. 成功生成 SFU DocID030724 Rev 1 [English Rev 1] 27/33 32
选项字节文件 UM2238 5 选项字节文件 选项字节文件字段仅对 SFI 应用程序是必需的, 它允许在安全固件安装期间对选项字节进行编程 这类文件只支持 CSV( 逗号分隔值 ) 格式, 该格式由两个向量组成 : 寄存器名和其值 所有 9 个选项字节寄存器都必须进行配置 ( 在 csv 文件中共有 9 行 ) 图 22. 选项字节文件示例 28/33 DocID030724 Rev 1 [English Rev 1]
日志对话框 6 日志对话框 可以通过单击工具栏或菜单栏中的 log 按钮来查看日志 : 选项 - > 日志 图 23. 日志对话框示例 DocID030724 Rev 1 [English Rev 1] 29/33 32
设置 UM2238 7 设置 可以通过单击工具栏或菜单栏中的 settings 按钮来访问设置对话框 : 选项 - > 设置 图 24. 设置对话框 填充字节 : 在解析文件时, 可以添加填充字节来填补由 16 个或更少字节所分隔的各段之间的空隙, 以将其合并并减少段数 用户可以选择 0xFF( 默认值 ) 或 0x00 设置文件 : 选中后, 将在可执行文件夹中生成 settings.ini 文件 它保存了应用程序状态 : 窗口大小和字段内容 日志文件 : 选中后, 将在所选路径下生成一个日志文件 30/33 DocID030724 Rev 1 [English Rev 1]
SFI/SMI 检查 8 SFI/SMI 检查 可以通过单击工具栏或菜单栏中的 Check SFI/SMI 按钮来访问 SFI/SMI 检查 : 文件 - > 检查 SFI/SMI 这样可以检查 SFI 或 SMI 文件的有效性, 并显示其相关信息 图 25. SFI 检查 DocID030724 Rev 1 [English Rev 1] 31/33 32
版本历史 UM2238 9 版本历史 表 1. 文档版本历史 日期版本变更 2017 年 12 月 20 日 1 初始版本 表 2. 中文文档版本历史 日期版本变更 2018 年 8 月 10 日 1 中文初始版本 32/33 DocID030724 Rev 1 [English Rev 1]
重要通知 - 请仔细阅读 意法半导体公司及其子公司 ( ST ) 保留随时对 ST 产品和 / 或本文档进行变更 更正 增强 修改和改进的权利, 恕不另行通知 买方在订货之前应获取关于 ST 产品的最新信息 ST 产品的销售依照订单确认时的相关 ST 销售条款 买方自行负责对 ST 产品的选择和使用, ST 概不承担与应用协助或买方产品设计相关的任何责任 ST 不对任何知识产权进行任何明示或默示的授权或许可 转售的 ST 产品如有不同于此处提供的信息的规定, 将导致 ST 针对该产品授予的任何保证失效 ST 和 ST 徽标是 ST 的商标 所有其他产品或服务名称均为其各自所有者的财产 本文档中的信息取代本文档所有早期版本中提供的信息 本文档的中文版本为英文版本的翻译件, 仅供参考之用 ; 若中文版本与英文版本有任何冲突或不一致, 则以英文版本为准 2018 STMicroelectronics - 保留所有权利 DocID030724 Rev 1 [English Rev 1] 33/33 33