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:安全启动:在生产环境中预置 OTP 密钥。

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1518026/lp-am261-secure-boot-provision-otp-keys-in-production-environment

器件型号:LP-AM261

工具/软件:

你(们)好

我尝试向  LP-AM261 上运行的应用程序添加安全启动功能。

我能够执行 Keywriter Trial Run 模式。

现在、我们正在考虑在量产环境中预置 OTP 密钥的选项/方法。

我们知道、通过将 Keywriter 固件写入 OSPI、我们可以实现该目的。

您能提出一些方法来写入 OTP 密钥而不将映像加载到闪存中吗?

谢谢

Nithin

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

    您好、Nithin、

    以下常见问题解答详细介绍了执行 OTP KW 的方法。  

    (+)【常见问题解答】AM2634-Q1:外部 VPP 电源的 TI OTP Keywriter 建议流程。 -基于 Arm 的微控制器论坛 — 基于 Arm 的微控制器 — TI E2E 支持论坛

    尽管它侧重于 AM263(需要外部 Vpp)、而 AM261 为 VPP 集成了内部 LDO、但遵循的步骤应相同。

    如果不使用闪存、建议使用 UART 通过 Xmodem 加载 Keywriter SBL。

    谢谢。此致、

    Nikhil Dasan

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

    是否可以将 OTP 写入器加载到 RAM?

    是否有方法可以在不创建包含 OTP 密钥的二进制文件的情况下写入 OTP 密钥?

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

    提供的 OTP KW 是 SBL 二进制文件。

    这意味着 ROM 会加载该 SBL、它会在内部为 Keywriter 加载 HSMRT、然后运行 Keywriter 服务、以便 HSM 内核执行电子保险丝。  

    借助上述流程、可以使用 UART 引导模式将 KW SBL 二进制文件放到 RAM 中、然后从此处执行相同的操作。

    谢谢。此致、

    Nikhil Dasan

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

    感谢您的答复。

    我了解了 UART 引导模式的行为。

    是否有方法可以在不创建包含 OTP 密钥的二进制文件的情况下写入 OTP 密钥?

    是否有方法可以在不创建二进制文件的情况下写入密钥?

    我们正在考虑为每个器件选择不同的密钥。 因此很难生成自定义的二进制文件(使用不同的密钥)。 是否有任何工具或其他东西可以写入密钥(主要适用于大量器件的生产环境)。   

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

    您好、Nithin、

    实际上、有一种方法可以使用外部接口接收证书并将其共享到 HSM 内核。  

    但是、OTP KW 二进制中并未展示这一点、但在 TIFS_SDK 的调试身份验证示例中我们提供了相同的参考。  

    在这里、我们通过 UART Xmodem 在 SBL 中接收调试证书、然后向 HSM 内核提供相同的证书、如下所示

    请参阅中的示例  C:\ti\tifs_am261x_10_02_00_00\examples\debug_authentication  略有不同。  

    TIFS SDK 可从 ti.com/secureresources/AM261X-TIFS-SDK 获取

    谢谢。此致、

    Nikhil Dasan

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

    你好、Nikhil、

    在这里、我们通过 UART Xmodem 在 SBL 中接收调试证书、然后向 HSM 内核提供相同的证书、如下所示

    我已经通过修改 OTP Keywriter 应用(在 dryrun_mode 中)来尝试过此操作、但收到以下错误:

    正在启动 KeyWriter 引导加载程序...
    设备类型:HSFS
    SR 版本 1.0

    [HSM_CLIENT]注册客户端 ID = 2 的新客户端
    [HSM 客户端] OTP-KW 64 位版本字符串= 0x0013306000a0001

    [HSM 客户端] OTP-KW 信息
    [SoC 类型]= AM261X
    【器件类型】= FS
    [ HSM 类型]= HSM_V1
    [BIN Type]= OTPKW
    [OTP-KW 版本]= 10.0.1

    #
    #正在验证证书。
    #
    [HSM 客户端] OTP Keywriter 中出现 OTP-KW 错误

    [HSM 客户端] OTP-KW debugResponse = 0x00003011
    [HSM 客户端] OTP-KW 错误相位= 0x1
    [HSM 客户端] OTP-KW 错误模块= 0x01
    [HSM 客户端] OTP-KW 错误阶段= 0x03
    [HSM 客户端] OTP-KW 错误客户密钥扩展= 0x0

    kpi_data:[bootloader_profile]引导介质:未定义
    kpi_data:[bootloader_profile]引导映像大小:0 KB
    kpi_data:[bootloader_profile]当前核心:
    kpi_data:[bootloader profile] System_init:346us
    kpi_data:[bootloader profile] Drivers_open:18us
    kpi_data:[bootloader profile] LoadHsmKeyWriterRtFw:16523us
    KPI_DATA:【引导加载程序配置文件】LoadHsmCustomerKeyCertificate:31089us
    kpi_data:[bootloader profile] KeyWriter SBL end:850713us
    kpi_data:[bootloader_profile] SBL 总用时:898690us

    KeyWriter Bootloader Execution Complete...

    为了隔离问题、我也尝试从另一个阵列复制证书(而不是通过 XMODEM 接收证书)、

    但它也导致 了相同的误差。

    下面给出了从阵列复制所做的更改

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

    您好、

    [引述 userid=“639822" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1518026/lp-am261-secure-boot-provision-otp-keys-in-production-environment/5860827 #5860827“]

    [HSM 客户端] OTP Keywriter 中出现 OTP-KW 错误

    [HSM 客户端] OTP-KW debugResponse = 0x00003011
    [HSM 客户端] OTP-KW 错误相位= 0x1
    [HSM 客户端] OTP-KW 错误模块= 0x01
    [HSM 客户端] OTP-KW 错误阶段= 0x03

    [/报价]

    该错误表明问题在于解析从 R5 发送的证书地址处的证书

    你能检查什么是 certHeader.certAddress 在好的情况下和坏的情况?

    证书地址必须为 >= 0x70027800 且<(0x70027800 +最大证书大小 (0x40000))

    这是否是 SBL Keywriter 包中可用的相同证书?

    谢谢。此致、

    Nikhil Dasan

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

    你好、Nikhil、

    感谢您的答复。

    是否在 SBL Keywriter 包中提供了相同的证书?

    我已生成自己的客户密钥

    然后、我已使用密钥生成 Keywriter 证书

    我在两种情况下都使用相同的证书(好证书和坏证书)

    证书地址必须为 >= 0x70027800 且<(0x70027800 +最大证书大小 (0x40000)) [/报价]

    certHeader.certAddress 位于 MSSRAM_HSMRT 内。

    下面给出了坏情况和坏情况的日志

    很好的情况

    [HSM 客户端] MSRAM_HSMRT 启动 0x70027800
    [HSM CLIENT] certAddress 启动 0x70045428
    [HSM CLIENT] certAddress End 0x7004702d
    [HSM 客户端] MSRAM_HSMRT END 0x70067800

    坏情况

    [HSM 客户端] MSRAM_HSMRT 启动 0x70027800
    [HSM CLIENT] certAddress 启动 0x7004702d
    [HSM CLIENT] certAddress End 0x70048c32
    [HSM 客户端] MSRAM_HSMRT END 0x70067800

    #
    #正在验证证书。
    #
    [HSM 客户端] OTP Keywriter 中出现 OTP-KW 错误

    [HSM 客户端] OTP-KW debugResponse = 0x00003011
    [HSM 客户端] OTP-KW 错误相位= 0x1
    [HSM 客户端] OTP-KW 错误模块= 0x01
    [HSM 客户端] OTP-KW 错误阶段= 0x03
    [HSM 客户端] OTP-KW 错误客户密钥扩展= 0x0

    谢谢

    Nithin

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

    您好、Nithin、

    很抱歉耽误响应。 我尝试在我这边重现问题 同时、您能否比较好情况和坏情况下的 gCustKeyCert 数组是否与地址 certHeader.certAddress 中所指向的相同?

    谢谢。此致、

    Nikhil Dasan

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

    你好、Nikhil、

    是的、 gCustKeyCert 数组 在良好和不良情况下相同

    谢谢

    Nithin

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

    您好、Nithin、

    看起来您最后的问题可能缺少 Cache 无效和写回。

    我尝试了在我的终端通过 UART 获得 Keywriter 证书并能够执行预期的模拟运行模式。  

    我遇到了您当前面临的问题、 在从 UART 收到证书后、使用 CacheP_wbInv () 解决了这个问题。

    将我的实现(容差)放在这里

    /cfs-file/__key/communityserver-discussions-components-files/908/0272.main.c

    此外、该段现在将是 syscfg 中的.data custKeyCert 而不是“.rodata.custKeyCert",“,因此、因此它不再是“const"</s>“

    谢谢。此致、

    Nikhil Dasan

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

    你好、Nikhil、

    感谢您的答复。

    我会试着去找你。

    谢谢

    Nithin

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

    你好、Nikhil、

    这是 为我工作的

    感谢您的 支持

    谢谢

    Nithin