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.

[参考译文] TMS320F28386D:仅对超过16KB 的闪存代码进行身份验证

Guru**** 2448780 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1388997/tms320f28386d-only-authenticating-flash-code-beyond-16kb

器件型号:TMS320F28386D

工具与软件:

通常、我们 对与 BOOTPINCONFIG 和 BOOTDEF 相对应的 CPU1 USER OTP 位置进行编程以启用安全启动、然后确保16KB 的安全。

问题:是否 可能不 对与 BOOTPINCONFIG 和 BOOTDEF 对应的 CPU1 USER OTP 位置进行编程以启用安全启动、而且我们也可以使用 CPU1BROM_calculateCMAC 仅对超过16KB 的闪存代码进行身份验证?

ApplicationCMACStatus = CPU1BROM_calculateCMAC (CMAC_AUTH_START_ADDRESS、
CMAC_AUTH_END_ADDRESS、
CMAC_AUTH_TAG_ADDRESS);

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

    Wang、

    我认为这有可能、即使距离安全入口点16KB 以外的存储器带有 CMAC 标签、然后进行验证。  但是、如果器件无法启动以实现安全启动来验证16KB、那么我认为仅验证另一个闪存会存在安全差距、因为不能保证导致闪存的代码没有被篡改。

    我不认为有任何东西会阻止您在正常的闪存启动中运行、但从安全 POV 来看、这可能不是最佳实践、因为启动时执行的代码不在信任域的根中。

    此致!
    Matthew  

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

    好的、谢谢 Matthew。 由于我手中的所有板都已启用安全启动、我将找到一个新的电路板来测试此用例。

    是的、我同意这不是安全启动的最佳实践。

    我将反馈测试结果。

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

    我发现一个新电路板、该电路板未启用 OTP 配置的安全启动。 它可以引导并将 GPIO 设置为高电平、但在调用时  

    ApplicationCMACStatus = CPU1BROM_calculateCMAC (CMAC_AUTH_START_ADDRESS、
    CMAC_AUTH_END_ADDRESS、
    CMAC_AUTH_TAG_ADDRESS);

    它返回失败、并进入无限循环。

    我挑选了一个 启用了 OTP 配置安全启动的电路板。 刷写同一软件十六进制文件。

    它运行良好。 GPIO 将切换。

    因此、如果不启用 OTP 配置的安全启动、则无法 对超过16KB 的闪存代码进行身份验证

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

    Wang、

    我正在进行类似的调试、您可以确认以下内容吗:

    在新的仅为用户的 CMAC 中、您需要删除/注释掉设置 SB1 CMAC 标签阵列的以下行(因为我们不想使用该标签)


    #pragma RETAIN(cmac_sb_1)
    #pragma LOCATION(cmac_sb_1, 0x080002)
    const char cmac_sb_1[8] = { 0 };
    

    在示例工程中、有一个额外的.cmd 文件专门用于十六进制实用程序、以便知道用于计算标签的地址范围。  在我们的示例中、它名为 boot_ex1_flash_hex_lnk_cpu1.cmd

    内容是这样的

    /* CPU1 Flash sectors */
    
    /* HEX directive required by HEX utility to generate the golden CMAC tag */
    /* with one entry that represents all the allocated flash memory */
    ROMS
    {
      FLASH_SECTOR0_13: o=0x00080000 l=0x00040000, fill = 0xFFFF /* If fill not specified, then default is all 0s */
    }
    

    让我们确保将其更改为您要计算标签的新 USER 区域的范围、这应该会与所示 main.c 中用户 CMAC 结构的起始/结束地址相匹配。  对于用户 CMAC、我们可以自由地将标签地址放置在任何所需的位置、我建议根据我们正在调试的其他安全启动问题将其对齐到128位边界。

    uint32_t CPU1BROM_calculateCMAC(uint32_t startAddress, 
                                    uint32_t endAddress, 
                                    uint32_t tagAddress);

    由于我们不使用安全启动、因此我认为如果需要、可以在该区域中包含前16KB。

    请告诉我、这是否可以解决问题。  BTW、DCSM 目前是否已解锁?  这将使调试更简单、但如果您是锁定的器件、我们需要确保将 CMAC 计算结果和标签放置在与上面的闪存地址相同的安全区域中。

    此致!
    Matthew