Document title can span over two lines

Save this PDF as:
 WORD  PNG  TXT  JPG

Size: px
Start display at page:

Download "Document title can span over two lines"

Transcription

1 用户手册 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 的更多信息, 请参阅 上的 X-CUBE-SBSFU 软件包以获取更多信息 本用户手册详细介绍了软件环境先决条件以及 STM32 Trusted Package Creator 工具软件的可用功能 2018 年 8 月 DocID Rev 1 [English Rev 1] 1/33 1

2 目录 UM2238 目录 1 系统要求 准备过程 SFI 准备过程 SMI 准备过程 SFU 准备过程 STM32 Trusted Package Creator 工具命令 命令行界面 (CLI) SFI 生成指令 SMI 生成指令 SFU 生成指令 STM32 Trusted Package Creator 工具图形用户界面 (GUI) SFI 生成 SMI 生成 SFU 生成 选项字节文件 日志对话框 设置 SFI/SMI 检查 版本历史 /35 DocID Rev 1 [English Rev 1]

3 表格索引 表格索引 表 1. 文档版本历史 表 2. 中文文档版本历史 DocID Rev 1 [English Rev 1] 3/35 3

4 图片索引 UM2238 图片索引 图 1. SFI 准备过程 图 2. SFI 文件结构 图 3. SMI 准备过程 图 4. SMI 文件结构 图 5. SFU 准备过程 图 6. SFU 文件结构 图 7. STM32 Trusted Package Creator 工具的可用命令 图 8. 使用 ELF 文件生成 SFI 图 9. 使用二进制文件生成 SFI 图 10. SFI-SMI 组合生成 图 11. SMI 生成 图 12. SFU 生成 图 13. STM32 Trusted Package Creator 工具 GUI SFI 选项卡 图 14. STM32 Trusted Package Creator 工具 GUI SMI 选项卡 图 15. STM32 Trusted Package Creator 工具 GUI SFU 选项卡 图 16. 附加固件文件 图 17. 成功生成 SFI 图 18. ELF 文件选择 图 19. 成功生成 SMI 图 20. 固件文件选择 图 21. 成功生成 SFU 图 22. 选项字节文件示例 图 23. 日志对话框示例 图 24. 设置对话框 图 25. SFI 检查 /35 DocID Rev 1 [English Rev 1]

5 系统要求 1 系统要求 支持的操作系统和架构为 : Linux 32 位和 64 位 ( 已在 Ubuntu 上测试 ) Windows 位和 64 位 macos ( 最小版本 OS X Yosemite) STM32CubeProgrammer 和 STM32 Trusted Package Creator 可支持基于 Arm Cortex -M 处理器的 STM32 32 位器件 DocID Rev 1 [English Rev 1] 5/33 32

6 准备过程 UM 准备过程 2.1 SFI 准备过程 SFI( 安全固件安装 ) 映像是由意法半导体创建的格式, 包含已使用 AES-GCM 算法加密和验证的固件 图 1 中描述了 SFI 准备过程 图 1. SFI 准备过程 SMI SMI AES-GCM SFI SFI SFI 6/33 DocID Rev 1 [English Rev 1]

7 准备过程 在执行 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 DocID Rev 1 [English Rev 1] 7/33 32

8 准备过程 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 DocID Rev 1 [English Rev 1]

9 准备过程 SMI 准备之前, 执行以下检查 : 专有代码读出保护 (PCROP) 区必须与闪存字 (256 位 ) 对齐, 否则会显示警告 该区大小必须至少为 2 个闪存字 (512 位 ), 否则会显示警告 该区必须以 Flash 字边界 (256 位的字 ) 结束, 否则会显示警告 如果该区紧接着 PCROP 区域并在 PCROP 区的最后一个 Flash 字处开始, 则生成失败并显示错误消息 在 SMI 准备之后, 还会生成一个明文 ( 即未加密的 )ELF 文件, 其中包含程序数据并且只包含明文代码段 图 4 中显示了 SMI 文件的结构 图 4. SMI 文件结构 SMI Magic + SMI SMI MS48674V1 DocID Rev 1 [English Rev 1] 9/33 32

10 准备过程 UM SFU 准备过程 SFU 映像 ( 安全固件升级 ) 允许以安全方式升级 STM32 微控制器内置程序, 以防止未经授权的更新 图 5 中显示了 SFU 准备过程 图 5. SFU 准备过程 1 AES-GCM SFU SFU SFU MS48675V1 10/33 DocID Rev 1 [English Rev 1]

11 准备过程 生成 2 个文件,SFU 映像头文件和 SFU 加密的固件映像 要生成头文件, 使用以下输入来执行 AES-GCM 加密 : 作为初始化向量 (IV) 的 Nonce 无附加已验证数据 (AAD) 对于加密固件映像生成 : 作为初始化向量 (IV) 的 Nonce 作为附加认证数据 (AAD) 的头文件内容图 6 中显示了 SFU 文件的结构 图 6. SFU 文件结构 SFU Magic 26 MAC MS48676V1 DocID Rev 1 [English Rev 1] 11/33 32

12 STM32 Trusted Package Creator 工具命令 UM STM32 Trusted Package Creator 工具命令 3.1 命令行界面 (CLI) 以下各节介绍如何由命令行界面来使用 STM32 Trusted Package Creator 工具 可用命令如图 7 中所示 图 7. STM32 Trusted Package Creator 工具的可用命令 12/33 DocID Rev 1 [English Rev 1]

13 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> DocID Rev 1 [English Rev 1] 13/33 32

14 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 0x 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 0x 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 DocID Rev 1 [English Rev 1]

15 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 文件 DocID Rev 1 [English Rev 1] 15/33 32

16 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 DocID Rev 1 [English Rev 1]

17 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 生成 DocID Rev 1 [English Rev 1] 17/33 32

18 STM32 Trusted Package Creator 工具图形用户界面 (GUI) UM 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 DocID Rev 1 [English Rev 1]

19 STM32 Trusted Package Creator 工具图形用户界面 (GUI) 图 14. STM32 Trusted Package Creator 工具 GUI SMI 选项卡 DocID Rev 1 [English Rev 1] 19/33 32

20 STM32 Trusted Package Creator 工具图形用户界面 (GUI) UM2238 图 15. STM32 Trusted Package Creator 工具 GUI SFU 选项卡 4.1 SFI 生成 要验证 SFI 生成请求, 用户必须使用有效值来填充输入字段 : 固件文件 : 注 : 用户必须使用 add 按钮来添加输入固件文件 如果该文件有效, 则将其添加到固件文件列表中 选择它, 会在固件信息部分 ( 图 16) 中出现几条相关信息, 否则会显示一条错误消息框, 指出文件无法打开或文件无效 如果文件是二进制格式, 则会出现一个对话框, 要求提供一个地址 使用 remove 按钮可以删除一个文件 20/33 DocID Rev 1 [English Rev 1]

21 STM32 Trusted Package Creator 工具图形用户界面 (GUI) 图 16. 附加固件文件 密钥和随机数文件 : 密钥和随机数文件可以通过输入其路径 ( 绝对或相对 ) 或通过选择 open 按钮来选择 请注意, 其大小必须符合规定 ( 密钥为 16 个字节, 随机数为 12 个字节 ) 选项字节文件 : 选项字节文件可以同样的方式来选择 仅支持 csv 文件 SMI 文件 : SMI 文件可以采用跟固件文件同样的方式来添加 选择文件后会在固件信息部分显示几条相关信息 映像版本 : 映像版本值为 [ ] DocID Rev 1 [English Rev 1] 21/33 32

22 STM32 Trusted Package Creator 工具图形用户界面 (GUI) UM2238 输出文件 : 输出文件可以通过输入其路径 ( 绝对或相对 ) 或使用 select folder 按钮来选择, 请注意, 使用后一种方式时, 建议使用名称 out.sfi, 您可以将其保留或对其进行更改 所有字段都正确填入时,Generate SFI 按钮激活 用户可以通过点击它来生成 SFI 文件 如果一切顺利, 将出现一个指示成功生成的消息框 ( 图 17), 并在 SFI 信息区显示有关生成的 SFI 文件信息 图 17. 成功生成 SFI 22/33 DocID Rev 1 [English Rev 1]

23 STM32 Trusted Package Creator 工具图形用户界面 (GUI) 4.2 SMI 生成 对于 SFI 生成, 用户必须提供输入信息 Elf 文件 : 这种情况下, 输入文件只能是 elf 文件 如果该文件有效, 会在 ELF information 选项卡 ( 图 18) 中显示信息, 否则会显示一条错误消息框, 指出文件无法打开或文件无效 图 18. ELF 文件选择 DocID Rev 1 [English Rev 1] 23/33 32

24 STM32 Trusted Package Creator 工具图形用户界面 (GUI) UM2238 密钥和随机数文件 : 类似 SFI, 可以按照与固件文件相同的方式选择密钥和随机数文件 请注意, 其大小必须符合规定 ( 密钥为 16 个字节, 随机数为 12 个字节 ) 安全版本文件 : 安全版本文件大小必须为 16 字节 安全版本文件位于 Security_Version 文件夹下 加密段 : 这是一个段列表, 可以选择哪个段被加密 输出文件 : 输出文件可以通过输入其路径 ( 绝对或相对 ) 或使用 Select folder 按钮来选择, 请注意, 使用后一种方式时, 文中建议了一个名称, 您可以将其保留或对其进行更改 当所有字段都正确填入后, 用户可以通过点击 Generate SMI( 该按钮变为激活状态 ) 按钮来生成 SMI 文件 除了有关所生成 SMI 文件的信息外, 还会出现一个消息框, 通知用户文件成功生成 ( 图 19), 否则会显示错误 24/33 DocID Rev 1 [English Rev 1]

25 STM32 Trusted Package Creator 工具图形用户界面 (GUI) 图 19. 成功生成 SMI 4.3 SFU 生成 这种情况下的输入字段与 SFI 生成用例的输入字段类似 固件文件 : 用户需要导入固件文件 如果该文件有效, 则在固件信息区 ( 图 20) 中会显示几条相关信息, 否则会显示错误消息框 注意, 该固件文件只能包含一个段 DocID Rev 1 [English Rev 1] 25/33 32

26 STM32 Trusted Package Creator 工具图形用户界面 (GUI) UM2238 图 20. 固件文件选择 密钥和随机数文件 : 与 SFI 和 SMI 用例类似 映像版本 : 映像版本值为 [ ] 输出文件 : 输出文件可以通过输入其路径 ( 绝对或相对 ) 或使用 select folder 按钮来选择, 请注意, 使用后一种方式时, 文中建议了一个名称, 您可以将其保留或对其进行更改 所有字段都正确填入时,Generate SFU 按钮激活 用户可以通过点击它来生成 SFU 文件 如果一切顺利, 将出现一个通知成功生成的消息框 ( 图 21), 并在 SFU 信息区显示有关生成的 SFU 文件信息 26/33 DocID Rev 1 [English Rev 1]

27 STM32 Trusted Package Creator 工具图形用户界面 (GUI) 图 21. 成功生成 SFU DocID Rev 1 [English Rev 1] 27/33 32

28 选项字节文件 UM 选项字节文件 选项字节文件字段仅对 SFI 应用程序是必需的, 它允许在安全固件安装期间对选项字节进行编程 这类文件只支持 CSV( 逗号分隔值 ) 格式, 该格式由两个向量组成 : 寄存器名和其值 所有 9 个选项字节寄存器都必须进行配置 ( 在 csv 文件中共有 9 行 ) 图 22. 选项字节文件示例 28/33 DocID Rev 1 [English Rev 1]

29 日志对话框 6 日志对话框 可以通过单击工具栏或菜单栏中的 log 按钮来查看日志 : 选项 - > 日志 图 23. 日志对话框示例 DocID Rev 1 [English Rev 1] 29/33 32

30 设置 UM 设置 可以通过单击工具栏或菜单栏中的 settings 按钮来访问设置对话框 : 选项 - > 设置 图 24. 设置对话框 填充字节 : 在解析文件时, 可以添加填充字节来填补由 16 个或更少字节所分隔的各段之间的空隙, 以将其合并并减少段数 用户可以选择 0xFF( 默认值 ) 或 0x00 设置文件 : 选中后, 将在可执行文件夹中生成 settings.ini 文件 它保存了应用程序状态 : 窗口大小和字段内容 日志文件 : 选中后, 将在所选路径下生成一个日志文件 30/33 DocID Rev 1 [English Rev 1]

31 SFI/SMI 检查 8 SFI/SMI 检查 可以通过单击工具栏或菜单栏中的 Check SFI/SMI 按钮来访问 SFI/SMI 检查 : 文件 - > 检查 SFI/SMI 这样可以检查 SFI 或 SMI 文件的有效性, 并显示其相关信息 图 25. SFI 检查 DocID Rev 1 [English Rev 1] 31/33 32

32 版本历史 UM 版本历史 表 1. 文档版本历史 日期版本变更 2017 年 12 月 20 日 1 初始版本 表 2. 中文文档版本历史 日期版本变更 2018 年 8 月 10 日 1 中文初始版本 32/33 DocID Rev 1 [English Rev 1]

33 重要通知 - 请仔细阅读 意法半导体公司及其子公司 ( ST ) 保留随时对 ST 产品和 / 或本文档进行变更 更正 增强 修改和改进的权利, 恕不另行通知 买方在订货之前应获取关于 ST 产品的最新信息 ST 产品的销售依照订单确认时的相关 ST 销售条款 买方自行负责对 ST 产品的选择和使用, ST 概不承担与应用协助或买方产品设计相关的任何责任 ST 不对任何知识产权进行任何明示或默示的授权或许可 转售的 ST 产品如有不同于此处提供的信息的规定, 将导致 ST 针对该产品授予的任何保证失效 ST 和 ST 徽标是 ST 的商标 所有其他产品或服务名称均为其各自所有者的财产 本文档中的信息取代本文档所有早期版本中提供的信息 本文档的中文版本为英文版本的翻译件, 仅供参考之用 ; 若中文版本与英文版本有任何冲突或不一致, 则以英文版本为准 2018 STMicroelectronics - 保留所有权利 DocID Rev 1 [English Rev 1] 33/33 33