This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] LP-AM261:LP-AM261:安全启动支持

Guru**** 2838110 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1633185/lp-am261-lp-am261-secure-boot-support

器件型号: LP-AM261

您好、

我想实现安全启动功能(器件应仅使用有效已签名的应用程序固件映像进行启动)。

为此 、我生成了公钥/私钥对、如下所示:

#生成 RSA-2048 签名密钥(存储在安全位置)
openssl genrsa -out /secure/keys/prod_signing_key.pem 2048

#生成 AES-256 加密密钥(可选)
OpenSSL rand -hex 32 >/secure/keys/prod_encryption_key.pem

#从私钥中提取公钥
OpenSSL RSA -in prod_signing_key.pem -pubout publickey.pem

在 makefile_ccs_bootimage_gen 文件中添加了私钥路径和安全启动相关配置、如下所示:

#默认安全引导/签名设置(可通过命令行覆盖)
device_type ?= HS
Enc_enabled ?=否
RSASSAXS_enabled ?=否
app_signing_key?=$(abspath keys/private_key.pem)
app_signing_key_keyring_ID ?= 0
app_signing_hash_algo?= SHA256
app_encryption_key ?=$(abspath keys/private_encryption_key.pem)
app_encryption_key_keyring_ID ?= 0
KD_SALT?= 0x12345678

并使用以下命令构建固件

make -f makefile_ccs_bootimage_gen OUTNAME=GPIO_INPUT_INTERRUPT PROFILE=Release MCU_PLUS_SDK_PATH=C:/ti/mcu_plus_sdk_am261x_26_00_00_01 CG_TOOL_ROOT=C:/ti/ccs2050/ccs/tools/compiler/ti-cgt-armllvm_4.0.4.LTS CCS_INSTALL_DIR=C:\ti\ccs2050\ccs\ CCS_IDE_mode=desktop device=am261x device_type=HS

这些步骤生成了安全.mcelf.hs 映像。

上述要点对于安全的应用程序映像生成是否正确? 如果没有、请提供正确的方法。 如果是、 我要在设备上刷写该固件。 但我的问题是器件将如何知道用于验证固件的公钥?  

我是否需要在 SBL 中提供公钥? 如果是、请说明如何操作? 如果没有、请提供正确的方法。

因为我对文档的理解是、  

在 AM261x 上、 SBL 不存储公钥、不会对应用程序映像执行签名验证。
2.由 HSM ROM 进行验证。 它会验证 SBL 本身、而不是验证应用程序。 ROM 将验证:
X.509 证书
RSA‑4096 签名
SHA‑512 完整性哈希
可选 AES‑256 加密

3.公钥存储在 X.509 证书中。 但是、“如何将公钥存储在 X.509 证书中?“

4.只有在 SBL 验证后、执行才会继续

启动后、SBL 可以选择性地验证应用程序、但这不是 TI 安全启动 ROM 流程的一部分。

6.如果我想进行应用程序级身份验证,我必须这样做

1.将您自己的公钥嵌入到 SBL 中
2.对应用程序映像签名(类似于 SBL)
3.在加载应用之前让 SBL 验证签名

我的理解是否正确? 如果没有、请纠正我。 如果是、请澄清我下面列出的疑问。
1.对于应用程序级身份验证、如何将公钥嵌入到 SBL 中?
2.在加载前,我需要通过 SBL 验证安全应用程序映像,做什么更改?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    在回答上述问题之前的快速阐释以及 AM261 器件中安全启动的一些背景信息。

    1.设备的引导流程如下  

    在 r5 上 — :  r5 rom  -> sbl->应用程序
    在 HSM 上: HSM ROM -> HSMRT(运行时固件)

    2. SBL 由 HSM ROM 进行身份验证和解密、其中 R5 ROM 将 SBL(证书和映像)发送到 HSM ROM、进而对其进行验证

    3.接下来、SBL 将 HSMRT 从外部发送到 HSM ROM 进行验证。

    4.在上述用例中,使用的密钥是“仅“信任密钥的根(即在将设备转换为 HS-SE 时,您的密钥在电子保险丝中闪存)

    5.由 SBL 加载应用程序中的下一步 (mcelf.hs)。 在此处、SBL 将映像证书和映像内容发送到 HSMRT、HSMRT 进行相同的身份验证(和解密)

    6.此处使用的密钥可以是两种方式

      a.使用 HSMRT 已有权访问的信任根密钥签名和加密。

      b.使用一组辅助密钥(即信任根密钥以外的密钥,即电子保险丝中不存在的密钥)签名和加密。 在这种情况下、HSMRT 默认没有这些密钥、因此您应该执行名为 Keyring import 的过程、该过程将一组密钥从 SBL 导入到 HSM Firmware 中、您可以根据密钥索引选择为应用程序映像签名的密钥。 下面说明了整个过程

    AM26x 器件中的密钥环服务

    有了上述信息,你能重新检查是否有任何部分的澄清被遗漏.

    希望这对您有所帮助、

    谢谢。此致、

    Nikhil Dasan