2399558_zh-CN

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2399558_zh-CN

2399558_zh-CN

i.MX93 AHAB 安全启动、RSA-PSS 签名和 HSM 模式

你好,

我想报告我在 i.MX93-evk 平台上使用 CST 进行 RSA-PSS 签名验证时遇到的问题,我认为这是一个 bug。下面我将描述我得出这一发现的步骤。

我目前正在 i.MX93-EVK 平台上实施安全启动程序,并已使用 CST v4.0.1 按照标准、有记录的程序成功使其工作。

然后,我想在 CST 之外对各种二进制文件进行签名,直接使用 OpenSSL(注意:这不是 PKCS#11 设置,我只是使用我自己的 RSA 密钥和 OpenSSL CLI/API)。我找到了以下步骤,它恰好描述了我想要实现的目标:在 AHAB 设备中使用 HSM 模式进行代码签名.pdf

这对于使用代码签名工具 (CST) 提供的ahab_pki_tree工具生成的密钥效果很好,参数如下:

  • 使用现有 CA 密钥:否
  • 密钥类型:rsa-pss
  • 密钥长度:4096 位
  • 摘要算法:sha384

但是,我想要在 CST 之外对二进制文件进行签名的原因是,我已经有一个 RSA 密钥,该密钥用于对各种其他工件进行签名。当我使用此密钥对各种 bin 文件进行签名,然后尝试按照链接中的步骤重新集成签名哈希值时,出现以下错误(CST v4.0.1):

[ERROR] CST: The signature file spl_data.sig is not valid

在仔细检查确认一切无误后,我还使用 OpenSSL 测试了签名验证,步骤如下:

$ openssl dgst -sha384 -verify pubkey.pem -signature spl_data.sig -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:digest spl_data.bin
Verified OK

预期与实际情况:由于 OpenSSL 确认该签名是有效的 PSS 签名,我预期 CST 在重新集成期间也会接受它。CST 却将其判定为无效并拒绝接受。

我开始深入研究 CST 源代码,并发现了它错误地将签名报告为无效的原因,即使 OpenSSL 已成功验证了该签名。

CST 检查签名时,会执行以下操作:

  1. 它使用 OpenSSL API 调用,从公钥中检索“公钥算法”字段。
  2. 根据该字段,它使用另一个 OpenSSL API 调用来询问:“给定的签名文件是否与所使用的公钥算法相符?”

当生成/使用 NXP 文档中称为“RSA-PSS”的密钥时,“公钥算法”字段等于rsassaPss ,并且上述检查工作正常。

然而,当使用通用 RSA 密钥时,“公钥算法”字段等于rsaEncryption ,CST 错误地认为这意味着签名格式为 PKCS#1 v1.5,即使完全可以使用 PKCS#1 v2.1 (PSS) 格式进行签名。

我通过在 CST 源代码中硬编码我的签名是 PSS 签名来证实了这个错误的假设,然后我成功地让 CST 验证了我的签名并将其重新插入到最终的二进制文件中。然后它在我的封闭设备上运行正常。

如有需要,我很乐意提供更多细节,特别是关于所涉及的各种 OpenSSL 函数调用。

能否确认这是否是 CST 的已知限制,或者我在使用通用 RSA 密钥生成/使用签名时是否遗漏了某些内容?

另外,我还尝试使用 SPSDK,这似乎是 NXP 为基于 AHAB 的平台推广的新工具,但我找不到导出要签名的二进制文件、手动签名,然后再重新插入的方法,类似于 CST 过程。你知道这是否可行吗?

先行致谢。


Re: i.MX93 AHAB Secure boot, RSA-PSS signature and HSM mode

你好,

实际上,您正在使用的文档是正确的,这是我们建议仍然使用 CST 的客户采用的方法。对于 AHAB,特别是新的 i.MX9 系列,我们建议客户迁移到 SPSDK,因为这是我们用于启用网络安全的工具。

即便如此,您仍然可以分享您遵循的步骤以及您对工具所做的更改,以便我进行审核,并在需要时与内部团队分享。

另外,关于SPSDK,您可以参考以下内容:
https://docs.nxp.com/bundle/AN14785/page/topics/signing_with_offline_hsm.html

希望这能帮到你。
此致敬礼/Saludos,
阿尔多。

Tags (1)
No ratings
Version history
Last update:
3 weeks ago
Updated by: