ST Microelectronics STM32 签名工具软件

介绍

STM32 签名工具软件(本文档中称为 STM32-SignTool)集成在 STM32CubeProgrammer(STM32CubeProg)中。STM32-SignTool 是一款密钥工具,可确保平台安全,并使用 STM32-KeyGen 软件生成的 ECC 密钥对二进制映像进行签名(更多详情,请参阅用户手册《STM32 密钥生成器软件说明》(UM2542)。签名后的二进制映像将在支持可信启动链的 STM32 安全启动序列中使用。此操作可确保对加载的映像进行身份验证和完整性检查。STM32-SignTool 生成一个二进制映像 file,公钥 file以及私钥 file. 二值图像 file 包含要为设备编程的二进制数据。公钥 file 包含使用 STM32-KeyGen 生成的 PEM 格式的 ECC 公钥。私钥 file 包含使用 STM32-KeyGen 生成的 PEM 格式的加密 ECC 私钥。签名的二进制文件 file 也可以从已经签名的 file 与批次 file 模式。此时,以下参数可不填:镜像入口点、镜像加载地址、镜像版本参数。本文档适用于下表列出的产品。

表 1. 适用产品

产品类型 零件编号或产品系列
微控制器 STM32N6 系列
微处理器 STM32MP1和STM32MP2系列

以下章节中,除非另有说明,STM32 均指上表所列的产品。

安装 STM32-SignTool

此工具随 STM32CubeProgrammer 软件包 (STM32CubeProg) 一起安装。有关设置过程的更多信息,请参阅用户手册 STM1.2CubeProgrammer 软件说明 (UM32) 的 2237 节。该软件支持基于 Arm® Cortex® 处理器的 STM32 产品。

注意:Arm 是 Arm Limited(或其子公司)在美国和/或其他地方的注册商标。

STM32-SignTool命令行界面

以下部分介绍如何从命令行使用 STM32-SignTool。

命令

可用的命令如下所列:

  • –二进制图像(-bin),–输入(-in)
    • 描述:二值图像 file 路径(.bin 扩展名)
    • 语法:1 -bin /home/User/binaryFile。垃圾桶
    • 语法:2 -in /home/User/binaryFile。垃圾桶
  • –图像版本 (-iv)
    • 描述:输入签名镜像的镜像版本 file
    • 语法:-iv
  • –私钥(-prvk)
    • 描述:私钥 file 路径(.pem 扩展名)
    • 语法:-prvkfile_路径>
    • Example: -prvk ../privateKey.pem
  • –公钥-pubk
    • 描述:公钥 file 路径
    • 语法:-pubkFile_路径{1..8}>
      • 对于 header v1:STM32MP15xx 产品仅使用一个关键路径
      • 对于标题 v2 及更高版本:对其他标题使用八个关键路径
  • –密码(-pwd)
    • 描述:私钥的密码(此密码必须至少包含四个字符)
    • Example: -pwd azerty
    • • –加载地址(-la)
    • 描述:图像加载地址
    • Examp乐:-la
  • –入口点(-ep)
    • 描述:图像入口点
    • Examp乐:-ep
  • –选项标志(-of)
    • 描述:图像选项标志(默认值 = 0)
    • Example:-of
  • –算法(-a)
    • 描述:指定 prime256v1(值 1,默认值)或 brainpoolP256t1(值 2)之一
    • Examp乐:-a <2>
  • –输出(-o)
    • 描述:输出 file 路径。此参数是可选的。如果没有指定,则输出 file 产生于同一来源 file 路径(例如ample,二值图像 file 是 C:\BinaryFile.bin)。签名的二进制文件 file 是 C:\BinaryFile_已签名.bin。
    • 语法:-oFile路径>
  • –类型(-t)
    • 描述:二进制类型。可能的值包括 ssbl、fsbl、teeh、teed、teex 和 copro。
    • 语法:-t
  • –silent (-s)
    • 描述:没有显示替换现有输出的消息 file
  • –help(-h 和 -?)
    • 描述:显示帮助
  • –版本(-v)
    • 描述:显示工具版本
  • –enc-dc (-encdc)
    • 描述:FSBL 加密的加密派生常量 [header v2]
    • 语法:-encdc
  • –enc-key (-enck)
    • 描述:OEM秘密 file 用于 FSBL 加密 [header v2]
    • 语法:-enck
  • –dump-header (–dump)
    • 描述:解析并转储图像头
    • 语法:-dumpFile路径>
  • –header 版本 (-hv)
    • 描述:签名头版本,可能的值:1、2、2.1、2.2 和 2.3
    • ExampSTM32MP15xx 的 le:-hv 2
    • ExampSTM32MP25xx 的 le:-hv 2.2
    • ExampSTM32N6xxx 的 le: -hv 2.3
  • –无键(-nk)
    • 描述:添加没有关键选项的空标题
    • 注意:需要使用 option flags 命令禁用身份验证选项

ExampSTM32-SignTool 的文件

以下示例amp以下文件展示了如何使用 STM32-SignTool:

Examp乐 1

-bin /home/用户/二进制File.bin –pubk /home/user/publicKey.pem –prvk /home/user/privateKey.pem –iv 5 –pwd azerty –la 0x20000000 –ep 0x08000000 选择默认算法(prime256v1),选项标志值为0(默认值)。签名后的输出二进制文件 file (二进制File在 /home/user/ 文件夹中创建 _Signed.bin

Examp乐 2

-bin /home/用户/文件夹1/二进制File.bin –pubk /home/user/publicKey.pem –prvk /home/user/privateKey.pem –iv 5 –pwd azerty –s –la 0x20000000 –ep 0x08000000 –a 2 –o /home/user/Folder2/Folder3/signedFile.bin 本例中选择的是 BrainpoolP256t1 算法。即使 Folder2 和 Folder3 不存在,也会创建它们。使用 –s 命令,即使 file 存在具有相同指定名称的条目,则将自动替换,且不显示任何消息。

Examp乐 3

对二进制文件进行签名 file 使用包含八个公钥的标头版本 2 用于身份验证流程。

./STM32_SigningTool_CLI.exe -bin /home/user/input.bin -pubk publicKey00.pem publicKey01.pem publicKey02.pem publicKey03.pem publicKey04.pem publicKey05.pem publicKey06.pem publicKey07.pem -prvk privateKey00.pem -pwd azerty -t fsbl -iv 0x00000000 -la 0x20000000 -ep 0x08000000 -of 0x80000001 -o /home/user/output.stm32

Examp乐 4

对二进制文件进行签名 file 使用包含八个公钥的标头版本 2 进行身份验证和加密流。

./STM32_SigningTool_CLI.exe -bin /home/user/input.bin -pubk publicKey00.pem publicKey01.pem publicKey02.pem publicKey03.pem publicKey04.pem publicKey05.pem publicKey06.pem publicKey07.pem -prvk privateKey00.pem -iv 0x00000000 -pwd azerty -la 0x20000000 -ep 0x08000000 -t fsbl -of 0x00000003 -encdc 0x25205f0e -enck /home/user/OEM_SECRET.bin -o /home/user/output.stm32

Examp乐 5

通过解析输出来验证结果图像 file 并检查每个头字段。./STM32_SigningTool_CLI.exe -dump /home/user/output.stm32

Examp乐 6

添加一个不带签名且不部署密钥的标头。STM32_SigningTool_CLI.exe -in input.bin -nk -of 0x0 -iv 1 -hv 2.2 -o output.stm32

独立模式

在独立模式下执行 STM32-SignTool 时,需要先输入绝对路径,然后会请求两次密码确认,如下图所示。

图 1. 独立模式下的 STM32-SignTool

接下来的步骤如下:

  • 选择两种算法之一。
  • 输入镜像版本、镜像入口点、镜像加载地址。
  • 输入选项标志值。

另一个输出 file 如果需要,可以指定路径,或者按回车键继续使用现有路径。

PKCS#11 解决方案
签名的二进制图像在支持可信启动链的 STM32 安全启动序列中使用。
此操作可确保对加载的图像进行身份验证和完整性检查。
经典签名命令要求提供所有公钥和私钥作为输入 file这些是
任何被允许执行签名服务的人都可以直接访问。最终,这可以被认为是
存在安全漏洞。有几种解决方案可以保护密钥免遭任何窃取密钥数据的企图。在这种情况下
目前,已采用PKCS#11解决方案。
PKCS#11 API 可用于处理和存储加密密钥。此接口指定如何
与硬件安全模块 (HSM) 和智能卡等加密设备进行通信。
这些设备的目的是生成加密密钥并签署信息而不泄露私钥
物质向外界传播。
软件应用程序可以调用 API 来使用这些对象来:
• 生成对称/非对称密钥
• 加密和解密
• 计算和验证数字签名
PKCS #11 为应用程序提供了一种通用的、合乎逻辑的 view 被称为加密令牌的设备,它
为每个令牌分配一个槽位 ID。应用程序可以通过指定
适当的插槽 ID。
STM32SigningTool 用于管理存储在智能卡和类似 PKCS#11 安全上的密钥对象
敏感私钥永远不会离开设备的令牌。
STM32SigningTool 使用 PKCS#11 接口基于 ECDSA 操作和签名输入二进制文件
公钥/私钥。这些密钥存储在安全令牌(硬件或软件)中。

附加 PKCS#11 命令

  • –模块(-m)
    • 描述:指定要加载的 PKCS#11 模块/库路径(dll、so)
    • 语法:-m
    • • –key 索引 (-ki)
  • –键索引(-ki)
    • 描述:十六进制格式的已用键索引列表
      • 对标题 v1 使用一个索引,对标题 v2 使用八个索引(以空格分隔)
    • 语法:-ki
  • –插槽索引 (-si)
    • 描述:指定要使用的插槽的索引(默认 0x0)
    • 语法:-si
  • –slot–标识符(-sid)
    • 描述:指定要使用的插槽的标识符(可选,十进制或十六进制格式)
    • 语法:-sid
      • 如果选项 –slot-identifier 与 –slot-index 同时使用,该工具会检查此配置是否与同一插槽匹配。标识符会反映所提及的索引;否则,将发生错误。
      • 可以使用 –slot-identifier 而不指定 –slot-index。该工具会系统地搜索插槽索引。
  • –active-keyIndex(-aki)
    • 描述:指定实际活动密钥索引(默认0)
    • 语法:-aki <hexValue>

PKH/PKTH file 一代

签名操作处理完成后,该工具系统地生成PKH file用于 OTP 保险丝之后。

  • 丙型肝炎病毒 file 将标头 v0 命名为 pkcsHashPublicKey1x{active_key_index}.bin
  • 丙酸环丙沙星 file 标题 v2 名为 pkcsPublicKeysHashHashes.bin

Examp莱斯

该工具可以签署输入 files 适用于标题 v1 和标题 v2,命令行中的差别很小。

  • 标题 v1
    -bin 输入.bin -iv -密码-la -ep -t -的–
    键索引-aki 0 –模块–插槽索引-o 输出.stm32
  • 标题 v2
    -bin 输入.bin -iv -密码-la -ep -t -的–键索引-aki -模块–插槽索引-o 输出.stm0

如果命令行出现错误,或者工具无法识别匹配的密钥对象,则会出现一条错误消息。此消息指出了问题的根源。SigningTool 只能使用预配置的 HSM,并且无法管理或创建新的安全对象。因此,需要安装免费软件来设置合适的环境。之后,系统才能生成密钥并获取对象的相关信息。

插槽标识符选项:

  • -bin 输入.bin –类型 fsbl -hv 1 –密钥索引 0x40 -aki 0 –模块 softhsm2.dll –密码 prg-dev -ep 0x2ffe4000 -s -si 0 -sid 0x51a53ad8 -la 0x2ffc2500 -iv 0 -of 0x80000000 -o 输出.stm32

错误前amp莱斯:

  • 无效的槽位索引

图 2. HSM TOKEN_NOT_RECOGNIZED
–key-index 命令中提到的未知密钥对象

图3. HSM OBJECT_HANDLE_INVALID

该工具按顺序处理对象。如果第一次尝试时无法识别匹配的关键对象,则签名操作将停止该过程。然后会显示一条错误消息以指示问题的根源。

修订历史

表 2. 文档修订历史

日期 版本 更改
14 年 2019 月 XNUMX 日 1 初始版本。
 

 

26 年 2021 月 XNUMX 日

 

 

2

更新:

• 第 2.1 节:命令

• 第 2.2 节:示例ampSTM32-SignTool 的文件

• 增加了第 2.4 节:PKCS#11 解决方案

27 年 2022 月 XNUMX 日 3 更新了第 2.1 节:命令
 

 

 

26 年 2024 月 XNUMX 日

 

 

 

4

在整个文档中替换:

• STM32MP1 系列由 STM32MPx 系列

• STM32MP1-SignTool 由 STM32MP-SignTool 提供

• STM32MP1-KeyGen 由 STM32MP-KeyGen 提供

在第 2.1 节:命令中更新了 –public-key -pubk 并添加了 –header-version (-hv) 和 –no-keys (-nk)。

添加了“Examp6 节中的“le 2.2”:例ampSTM32-SignTool 的文件。

 

 

 

14 年 2024 月 XNUMX 日

 

 

 

5

额外:

• STM32N6系列适用产品 整个文档中替换的内容:

• STM32 的 STM32MP

更新:

• 第 2.1 节:命令

 

06 年 2025 月 XNUMX 日

 

6

更新:

• 第 2.4.1 节:附加 PKCS#11 命令

• 第 2.4.3 节:示例amp莱斯

重要通知——请仔细阅读

意法半导体公司 (STMicroelectronics NV) 及其子公司(“ST”)保留随时对意法半导体产品和/或本文档进行变更、更正、增强、修改和改进的权利,恕不另行通知。购买者应在下单前获取意法半导体产品的最新相关信息。意法半导体产品根据订单确认时有效的意法半导体销售条款和条件出售。购买者自行负责选择、挑选和使用意法半导体产品,意法半导体对购买者产品的应用协助或设计不承担任何责任。意法半导体在此并未授予任何知识产权许可,无论明示或暗示。以与本文所述信息不同的条款转售意法半导体产品,将使意法半导体对该产品授予的任何保证失效。ST 和 ST 徽标是意法半导体的商标。有关意法半导体商标的更多信息,请访问 www.st.com/trademarks。所有其他产品或服务名称均为其各自所有者的财产。本文档中的信息取代并替换之前任何版本中提供的信息。

© 2025 STMicroelectronics – 保留所有权利

常问问题

  • 问:使用STM32-SignTool时遇到错误怎么办?
    • 答:检查命令语法,确保正确提供所有必需的参数,并参考用户手册获取故障排除提示。
  • 问:我可以在不同操作系统上使用 STM32-SignTool 吗?
    • 答:STM32-SignTool 设计用于特定操作系统。有关兼容性详情,请参阅软件规格。

文件/资源

ST Microelectronics STM32 签名工具软件 [pdf] 用户手册
STM32N6系列、STM32MP1、STM32MP2系列、STM32签名工具软件、STM32、签名工具软件、工具软件、软件

参考

发表评论

您的电子邮件地址不会被公开。 必填字段已标记 *