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.

[参考译文] AM2434:固件更新映像身份验证

Guru**** 2925550 points

Other Parts Discussed in Thread: AM2434

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1648514/am2434-fw-update-image-authentication

器件型号: AM2434

您好、  

我们希望对由 appimage_x509_cert_gen.py 工具创建的已签名 FW 映像执行数字签名验证、该映像已处于阶段、此时器件通过 REST-API 接口接收映像时、该器件可以轻松地通知用户所提供映像的正确性。  

我们已经使用 TISCI_MSG_PROC_AUTH_BOOT 进行了一些试用、但我们实际上并不知道此服务是否只能对映像进行身份验证、或者它始终连接到以下引导过程。 由于此 sciclient 服务不会揭示它没有设置 ACK 的原因,因此很难调试:) 我们总是使用 ti-Sitara-support-package\utils\development_keys\rom_degenerateKey.pem 作为我们的 HS-ACK FS 器件。

我们也尝试了 TISCI_MSG_MCELF_PROC_AUTH_BOOT_INIT 服务、该服务可能未连接到引导、但同样地、未设置 ACK。 AM2434 FS 是否支持该功能? 请注意、am275x 当前支持 TISCI_MSG_MCELF_PROC_AUTH_BOOT_INIT API。 独占? 这些服务是否需要在处理器请求和控制之前进行?

文档建议在系统 FW 中启用日志记录(跟踪)以获取有关拒绝的更多信息。 您能帮助我们如何实现这一目标吗?

使用 AM2434 HS-Key FS、是否可以根据 ROM_degenerateKey(或对于 HS-SE 器件,在电子保险丝中保存的公钥哈希值)对任何二进制文件(不仅是安全启动应用映像)进行身份验证?

谢谢。

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

    您好:

    可以使用 TISCI_MSG_PROC_AUTH_BOOT 消息对由 ROT 密钥签名的任何通用映像进行身份验证。 实际上、SBL 使用此 API 仅对应用程序映像进行身份验证。 身份验证成功后、SBL 本身会解析并加载应用程序映像。

    如果出现故障、请共享相关的代码快照和日志。

    谢谢!

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

    您好、

    感谢您的反馈。 为了验证映像、我使用运行的固件应用(非 SBL)中的以下代码:

    void 验证 (uint8_t* appImageBuffer)
      struct tisci_msg_proc_auth_boot_req req {};
      结构 tisci_msg_proc_auth_boot_resp 响应{};

      REQ.certificate_address_hi = 0u
      REQ.certificate_address_lo =(uint32_t) appImageBuffer;

      const Sciclient_Req、Prm_t reqPrm =
      {
        TISCI_MSG_PROC_AUTH_BOOT、
        TISCI_MSG_FLAG_AOP、
        (const uint8_t*)&req、
        sizeof(req)、
        SystemP_WAIT_FOREVER
      };

      Sciclient_Resp =
      {
        0、
        (uint8_t*) 响应 (&E)、
        sizeof(响应)
      };

      int32_t RetVal = Sciclient_service (&reqPrm、&respPrm);

      platformLog(“[WRN] SciClient 状态:%d %d\r\n“、RetVal、respPrm.flags);
    }
    它可能与  bootloader_soc.c 中的 int32_t Bootloader_socAuthImage (uint32_t certLoadAddr) 相同、只是压缩的版本。

    调用函数 RetVal 等于 0 后、这表示成功、但 respPrm.flags 也为 0、但应该为 ACK (2)。

    appImageBuffer 首先包含签名、然后是通过调用 appimage_x509_cert_gen.py \创建的映像文件
    -- bin test.appimage \
    -- authtype 1 \
    --键${key}\
    --输出 test.signed.appimage

    其中 key 为 ti-Sitara-support-packages/utils/development_keys /rom_degenerateKey.pem、但也尝试了 ti-Sitara-support-packages/ti-sdk/ind_comms_sdk_am243x/mcu_plus_sdk/source/security_common/tools/boot/signing/rom_degenerateKey.pem 。

    感谢你的帮助。


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

    您好:

    若要从应用程序调用 PROC_AUTH_BOOT、您需要应用以下补丁

    diff --git a/source/drivers/bootloader/soc/am64x_am243x/bootloader_soc.c b/source/drivers/bootloader/soc/am64x_am243x/bootloader_soc.c
    index eca61e919dc..78d13db2455 100644
    --- a/source/drivers/bootloader/soc/am64x_am243x/bootloader_soc.c
    +++ b/source/drivers/bootloader/soc/am64x_am243x/bootloader_soc.c
    @@ -979,7 +979,7 @@ int32_t Bootloader_socCpuResetReleaseSelf(void)
             }
             if(status==SystemP_SUCCESS)
             {
    -            status = Bootloader_socSecHandover();
    +            // status = Bootloader_socSecHandover();
             }
             if(status==SystemP_SUCCESS)
             {

     、其中 key 为 ti-Sitara-support-packages/utils/development_kees/rom_degenerateKey.pem、但也尝试了 ti-Sitara-support-packages/ti-sdk/ind_comms_sdk_am243x/mcu_plus_sdk/source/security/security_common/tools/demonet/key/exign/key/pem/key/pem/key_generatekey.pem[.pem] 。

    您需要使用的密钥是针对 HSFS 设备的“app_degenerateKey.pem“(或任何随机有效的 RSA 4K 密钥)、而对于 HSSE 设备、该密钥必须是活动的 RoT 密钥。

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

    您好、Prashant、

    感谢有关在 HS-RSA 的情况下使用 app_degenerateKey 或任何其他 FS 4K 密钥的说明。 我尝试使用此密钥(也是新生成的密钥)来验证二进制文件、并应用了推荐的补丁、但遗憾的是、没有成功。 在我们的应用中、当我们想要验证所提供的二进制文件的完整性(接收到文件后立即验证)时、我们不使用 Bootloader_soccpuResetReleaseSelf (void) 方法或任何其他与引导加载程序相关的方法、因此可能注释掉 Bootloader_socSecHandover () 的调用根本没有效果。
    我们使用的是使用 TISCI_MSG_PROC_AUTH_BOOT 消息类型直接调用 scliclient_service 。 您的建议是什么、我们如何才能知道拒绝背后的原因是什么? THX。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    所以可能注释掉 Bootloader_socSecHandover () 的调用根本没有效果。

    请保留先前的补丁、因为使用来自 SYSFW 的安全服务(例如 PROC_AUTH_BOOT)是必需的。

    您能否尝试验证以下已签名的二进制文件

    e2e.ti.com/.../tmp_5F00_signed.bin

    它由以下命令创建

    ❯ dd if=/dev/urandom of=tmp.bin count=64 bs=1K
    64+0 records in
    64+0 records out
    65536 bytes (66 kB, 64 KiB) copied, 0.000256765 s, 255 MB/s
    ❯ python3 source/security/security_common/tools/boot/signing/appimage_x509_cert_gen.py --bin tmp.bin --authtype 1 --key source/security/security_common/tools/boot/signing/app_degenerateKey.pem --output tmp_signed.bin
    Generating certificate for tmp.bin ...

    这将有助于确认问题出在您已签名的二进制文件还是您必须对映像进行身份验证的代码中。

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

    感谢您提供签名的二进制文件。 我遵循了我常用的路径 — 通过 ind_comms_sdk_am243x/mcu_plus_sdk/tools/bin2c/bin2c.py 将其转换为 c 样式数组、然后再次执行验证但没有成功。 但现在、当您提到需要补丁时、是否应将其集成到我们的引导加载程序中?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果需要该补丁、是否应将其合并到我们的引导加载程序中?

    是的、补丁是必需的、并且需要整合到引导加载程序驱动程序中。

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

    您好、Prashant、

    是的、 从引导加载程序代码中注释 Bootloader_socSecHandover () 似乎可以解决问题。

    我还注意到、当映像处于通过堆使用新的从堆分配的 DDR 存储器中时、此 TISCI 身份验证检查不起作用。 此指针是否有任何限制? THX。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我还注意到、当图像位于从堆中使用新内容分配的 DDR 存储器中时、此 TISCI 身份验证检查不起作用。 此指针是否有任何限制? Thx.

    没有限制。 问题可能是缓存造成的。 您可能必须进行高速缓存写回和无效验证、以确保 DDR 物理存储器具有完整的映像、供 SYSFW 对其进行身份验证。

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

    谢谢,所有问题都解决了:)