NXP MCU 技术论坛
直播中

刘芳

8年用户 1393经验值
私信 关注
[问答]

CUST_DEL后如何在S32K312上安全恢复应用程序?

在 AB Update 配置中,假设真实性得到确认,在连续 8 次重置后,是否可以在 CUST_DEL IVT 中给出地址的安全恢复应用程序(不是基于 Jtag的)?
如果 IVT 丢失或损坏,HSE 将如何启动安全恢复应用程序?

回帖(1)

贾飞世

2025-3-24 18:14:38

在S32K312上实现安全恢复应用程序的机制需要结合HSE(硬件安全引擎)和启动流程设计。以下是分步解决方案:




1. AB更新配置与复位计数器



  • 双分区设计:将Flash分为主应用分区(A)和备份/恢复分区(B)。HSE负责验证两个分区的签名。

  • 复位计数器:在非易失性存储(如HSE受保护的NVM)中维护复位计数器。每次启动失败(如签名验证失败)时递增。

  • 阈值触发恢复:当连续复位超过8次,HSE标记主分区为无效,强制从备份分区(B)启动。




2. CUST_DEL IVT的作用



  • 恢复程序IVT存储:在CUST_DEL区域预置恢复程序的IVT,指向备份分区(B)的入口地址。

  • 安全验证:HSE在切换前需验证备份分区IVT的完整性和真实性,防止恶意代码执行。

  • 地址重定向:当复位计数器超限时,HSE修改启动地址,从CUST_DEL IVT加载恢复程序。




3. IVT丢失/损坏时的HSE恢复机制



  • ROM Bootloader协作:若主IVT无效,ROM Bootloader触发HSE恢复流程。

  • HSE固件内置恢复逻辑

    • HSE从预定义安全地址(如CUST_DEL或独立恢复分区)加载恢复程序的IVT。

    • 验证恢复程序签名后,跳转执行恢复代码。


  • 恢复程序功能

    • 修复主分区(如通过安全通信下载新固件)。

    • 复位计数器清零,恢复正常启动流程。





4. 关键实现步骤




  1. HSE配置



    • 集成复位计数器管理,使用HSE安全NVM存储计数。

    • 为恢复程序配置独立的密钥,确保签名验证通过。




  2. 链接脚本调整



    • 将恢复程序的IVT固定在CUST_DEL区域,并确保其不被主应用覆盖。
      /* 示例链接脚本片段 */
      .cust_del_ivt 0x0000C000 : {
      KEEP(*(.cust_del_ivt))
      } > FLASH




  3. 安全启动流程


    +-----------------+     +-----------------+     +-----------------+
    | ROM Bootloader  | --> | HSE验证主IVT    | --> | 验证成功?      |
    +-----------------+     +-----------------+     +-------|---------+
                                                           |
                                      否                   | 是
       +----------------------+                            |
       | 递增复位计数器       | <--------------------------+
       | 若计数器≥8,标记主分区无效 |                            |
       +----------------------+                            |
               |                                           |
               v                                           v
    +----------------------+                     +---------------------+
    | 从CUST_DEL加载备份IVT |                     | 执行主应用程序      |
    | HSE验证备份IVT签名   |                     +---------------------+
    +----------------------+
               |
               v
    +----------------------+
    | 执行恢复应用程序      |
    +----------------------+





5. 保护措施



  • 写保护:通过Flash配置寄存器保护CUST_DEL区域,防止运行时篡改。

  • 恢复程序隔离:将恢复程序存储在独立的Flash分区,避免与主应用冲突。

  • HSE固件签名:确保HSE自身固件的完整性,防止攻击者绕过验证。




6. 验证与测试



  • 模拟IVT损坏:通过调试工具手动擦除主IVT,观察HSE是否触发恢复流程。

  • 复位计数器测试:强制使主应用启动失败,检查计数器是否递增并最终切换分区。

  • 恢复程序功能测试:验证恢复程序能否通过安全通信(如CAN/UART)修复主分区。




通过上述设计,S32K312可在不依赖JTAG的情况下,通过HSE和CUST_DEL IVT实现安全恢复,即使主IVT损坏也能保障系统可靠性。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分