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.

[参考译文] AM263P4:AM263P4 的 SBL 和 HSM 程序的安全启动流程问题

Guru**** 2891150 points

Other Parts Discussed in Thread: AM263P4, SYSCONFIG, AM2634

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1634396/am263p4-secure-boot-flow-issues-with-the-sbl-and-hsm-programs-of-am263p4

器件型号: AM263P4
主题中讨论的其他器件: SysConfigAM2634

image.png

我已经使用上面的流程图大致介绍了 AM263P4 的完整安全启动流程:

  1. 上电

  2. R5 RBL 和 HSM RBL 将运行

  3. R5 SBL 通过引导模式将 SBL 从外部闪存加载到 L2 (0x70002000) 中

  4. HSM RBL 使用 Keywriter 注入的 SMPK 和 SMEK 来验证签名并解密加载到 L2 中的 SBL。 如果验证通过、它首先将 SBL 的 IVT 和初始化代码复制到 TCMA (0x20000)、然后在 ROM 地址 0x0 处翻转(掩码)R5 RBL、并将 SBL 的 IVT 和初始化代码重新映射到地址 0x0(该地址实际上成为 RAM 地址)。 其余的 SBL 程序继续在 0x70002000 处运行。image.png

  5. SBL 成功运行后、SBL 从闪存中的指定位置读取 HSM 固件、并将其加载到 L2 RAM 中的指定位置(可在 SysConfig 中配置)。 SBL 会调用 Hsmclient_loadHSMRtFirmware 函数来加载 HSM 固件。 此时、HSM RBL 使用 Keywriter 注入的 SMPK 和 SMEK 来验证和解密加载到 L2 中的 HSM 固件。 如果验证通过、HSM RBL 会将 HSM 程序移动到 HSM 内核的 RAM 区域(存储器视图/虚拟地址 0x20000-0x60000)。 然后、它优先于(屏蔽)ROM 中的 HSM RBL (0x0-0x40000)、并将 HSM 程序重新映射到虚拟地址区域 0x0-0x40000(该区域现在实际上成为 RAM)、然后运行该区域、确保 HSM 程序开始从 RAM 地址 0x0 执行。image.png

问题:

  1. 上述流程是否正确? 如果有任何问题、请指定。在此流程中、SBL 和 HSM 固件是否先加载到 L2 RAM 中、然后进行验证、最后重新映射到指定的位置? 还是先将它们加载到 L2 RAM 中、然后重新映射到指定的位置、然后进行验证?

  2. 无论 SBL 和 HSM 是否分开、上述流程是否相同?

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

    您好、

    以上流程是否正确? 如果有任何问题、请指定。在此流程中、SBL 和 HSM 固件是否先加载到 L2 RAM 中、然后进行验证、最后重新映射到指定的位置? 还是先将它们加载到 L2 RAM 中、然后重新映射到指定的位置、然后进行验证?

    是的、该流程是正确的、但只是进行了少量更新。

    有 2 种方法。

    1.如您所述、RBL 会加载 SBL、然后 SBL 会将 HSMRT 从闪存加载到 RAM

    RBL 将组合的 (SBL + HSMRT) 加载到 RAM。 这里、 SBL 二进制文件包含 HSMRT 固件、 因此 RBL 加载一个二进制文件。

    ROM 首先将证书复制到 RAM、然后 HSM 进行身份验证。

    无论 SBL 和 HSM 是否分开、上述流程是否相同?

    SBL 和 HSM 始终是分开的、即 RBL 加载 SBL(或 SBL 和 HSM)、然后 SBL 遵循上述整个过程、然后 SBL 让 HSM ROM 知道 HSM(如果尚未在 RAM 中、则会向 RAM 提供相同的信息)、HSM ROM 遵循上述过程进行 HSMRT。

    只有一个进程。

    谢谢。此致、

    Nikhil Dasan

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

    非常感谢您的答复。 我还有几个问题:

    问题 1:
    那么、您认为 RBL 始终会将 SBL(独立的 SBL 或 SBL+HSMRT)从闪存加载到 RAM 中吗? 验证通过后:
    ① Ω 对于独立 SBL、SBL 从指定的位置将 HSMRT 加载到 RAM 中并进行验证;
    ② μ s 对于 SBL+HSMRT、SBL 将 HSMRT(已包含在 SBL 二进制文件中)加载到 RAM 并验证它(实际上 SBL 和 HSMRT 都已在上一步中加载到 RAM 中)。
    本质上、流量没有差异—一个是单独的负载、另一个是组合负载。 是这样吗?

    问题 2:
    与分离的 SBL 和 HSMRT (fastboot) 相比、组合的 SBL+HSMRT +组合的安全启动速度是否更慢、原因是组合映像的大小更大(约 300KB)、而分离映像的总大小更大 (60KB + 80KB)?

    问题 3:
    在验证通过并将 HSMRT 写入 HSM 内核的专用 RAM 后、HSMRT 在早期验证阶段占用的 L2 RAM 空间是否会自动释放?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    那么、您是否意味着 RBL 始终将 SBL(独立的 SBL 或 SBL+HSMRT)从闪存加载到 RAM 中? [/报价]

    是的

    [quote userid=“655954“ url=“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1634396/am263p4-secure-boot-flow-issues-with-the-sbl-and-hsm-programs-of-am263p4/6303252① 对于独立 SBL、SBL 将 HSMRT 从指定位置加载到 RAM 中并进行验证;
    ② μ s 对于 SBL+HSMRT、SBL 将 HSMRT(已包含在 SBL 二进制文件中)加载到 RAM 并验证它(实际上 SBL 和 HSMRT 都已在上一步中加载到 RAM 中)。
    本质上、流量没有差异—一个是单独的负载、另一个是组合负载。 正确吗?

    没错

    与分离的 SBL 和 HSMRT (fastboot) 相比、SBL+HSMRT 组合的安全启动速度较低、原因在于组合映像的大小更大(约 300KB)而不是分离映像的总大小 (60KB + 80KB)?

    这取决于安全启动的端点在哪里。 如果您测量的安全启动仅加载 SBL、则由于尺寸较小、第一个(独立 SBL)会更快。  

    如果加载了来自应用程序的测量值、则在这两种情况下、测量值几乎相同、因为 SBL 和 HSMRT 会进行相同的操作

    在验证通过并将 HSMRT 写入 HSM 内核的专用 RAM 后、HSMRT 在早期验证阶段占用的 L2 RAM 空间是否会自动释放?

    加载 HSMRT 后它会被覆盖、因为 HSMRT 将在验证时复制到 HSM RAM 中。 然后 OCRAM 区域保持 HSMRT 可自由使用  

    谢谢。此致、

    Nikhil Dasan

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

    关于启动时间比较:
    “我们的时间基准从通电开始、并在跳转到应用程序(引导)时结束。 在 AM2634 上、非分离 SBL (260KB) 的启动时间约为 75ms、而分离的 SBL+HSM (60KB+80KB) 的启动时间约为 50ms。 我知道、额外的时间可能是由于映像大小较大导致的、这会导致用于签名验证的哈希计算更长或解密时间更长。 “那有什么用?“

    关于非分离和分离图像之间的尺寸差异:
    “我们还有一个问题:为什么非分隔和分离的图像之间存在如此大的尺寸差异? 我们比较了 fastboot sbl(分离)和普通 sbl(非分离),发现调用的函数是相同的。 我认为唯一的区别是是否包含 HSM 固件。 在非隔离的 SBL 中、HSM 固件以头文件的形式包含在其中。 我希望这些数据与独立 HSM 固件的大小大致相同、但实际上看起来更大。 “那又怎么样?

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

    是的、正确。 在后续情况下、与小型 SBL 相比、在更大的 SBL 上执行哈希。

    预计此数据与独立 HSM 固件的大小大致相同、但实际上看起来更大。 为什么会这样?“

    除了 hsmrt,快速靴也有以下,导致更大的尺寸减小。

    • 无性能分析基础结构 AddProfilePoint()
    • 较少的 UART 日志记录 (+ printf 机械)DebugP_log 
    • 无 RPRC 映像加载器 (Bootloader_rprcImageLoad) 与仅 ELF 加载器Bootloader_parseAndLoadMultiCoreELF()

    谢谢。此致、

    Nikhil Dasan

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

    关于上述内容:

    1. SBL 和 HSMRT 的默认签名验证算法是什么? 它是否仅支持 RSA4096_PSS + SHA512?
    SBL 和 HSMRT 的默认解密算法是否仅限制为 AES256_CBC?

    此外、下面提到的密钥环与上面介绍的签名验证(安全启动)之间有什么区别? Keyring 有哪些具体使用案例?

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

    您好、

    此外、下面提到的密钥环与上面描述的签名验证(安全启动)之间有什么区别? Keyring 的具体用例是什么?

    密钥环是在应用程序阶段(即在 TIFS HSMRT 中)获取辅助密钥进行身份验证或检查完整性的过程。

    因此、如果用户不想将信任根密钥用于其应用程序、他们可以使用密钥环中的辅助密钥。

    谢谢。此致、

    Nikhil Dasan