新唐MCU技术
直播中

胡秋阳

14年用户 1664经验值
私信 关注
[问答]

M487如何使用AES和SPROM保护ISP?

M487使用 AES 和 SPROM 保护 ISP

回帖(1)

杨秀英

2025-8-21 18:25:08

M487 微控制器通过结合 AES 硬件加速引擎SPROM (Special ROM) 来提供强大的 ISP (In-System Programming) 保护机制,主要目的是防止未经授权的固件更新、读取或篡改,并保护固件的机密性。以下是其工作原理和如何提供保护的详细说明:


核心组件及其作用




  1. SPROM (Special ROM):



    • 性质: 这是一个特殊的一次性可编程 (OTP - One Time Programmable) 或受保护的区域,通常是芯片内部 ROM 的一部分或独立的物理区域。

    • 关键用途:

      • 存储安全配置位 (Security Configuration Bits): 这些位决定了芯片的整体安全状态,特别是关于ISP的行为。

      • 存储 AES 密钥 (AES Keys): SPROM 是存储用于固件加密/解密的 AES 密钥的理想位置。它有特殊的访问控制机制。


    • 安全特性:

      • 编程锁定: SPROM 区域通常可以被“锁定”。一旦锁定,其内容(密钥和配置位)无法再被修改、擦除或直接通过外部接口(如 ISP)读取,即使使用调试器(如 JTAG/SWD)。

      • 访问控制: CPU 或 AES 硬件引擎可能需要特定的权限或操作模式才能访问 SPROM 中的密钥,防止应用程序代码随意读取密钥。

      • 物理安全: SPROM 通常设计为难以通过物理攻击(如探针)读取。





  2. AES 硬件引擎:



    • 功能: 提供高速的 AES 加密和解密(支持 AES-128, AES-192, AES-256)。

    • 关键用途:

      • 验证加密固件: 在通过 ISP 更新固件时,用于解密接收到的加密固件映像。

      • 加密固件: 如果芯片需要输出当前固件(在启用读取保护的情况下通常禁止),可以用 AES 加密后输出。


    • 优势: 硬件实现速度快、功耗低,并且密钥操作在硬件内部进行,减少了密钥暴露在软件总线和内存中的风险。




如何协同工作保护 ISP


保护 ISP 的过程通常涉及以下配置和流程:




  1. 初始安全配置 (制造阶段或首次编程):



    • 开发人员将 秘密的 AES 密钥 写入 SPROM 的密钥槽位。

    • 在 SPROM 中设置 安全配置位 (Security Configuration Bits)

      • 启用安全 ISP (Secure ISP Enable): 强制要求通过 ISP 更新的固件必须是经过 AES 加密的。

      • 禁用不安全的 ISP: 禁止通过未加密的 ISP 协议进行更新。

      • (可选) 启用读取保护 (Readout Protection Level): 设置不同级别的保护,禁止通过 ISP 或调试接口读取内部 Flash 内容。最高级别通常需要同时启用安全 ISP 和读取保护。

      • (可选) 启用调试保护 (Debug Protection): 限制或禁用调试接口(JTAG/SWD)。


    • 锁定 SPROM: 这是至关重要的一步! 将 SPROM(特别是包含密钥和配置位的区域)设置为“锁定”状态。锁定后,任何试图修改、擦除或直接读取(包括通过 ISP)密钥和关键配置位的行为都会被阻止。




  2. 安全固件更新 (Secure ISP Update Process):



    • 固件准备: 开发者在 PC 端使用与 SPROM 中存储的密钥完全相同的密钥,对要更新的新固件二进制文件进行 AES 加密(通常使用特定的模式,如 CBC,并可能需要特定的初始化向量 IV 处理)。

    • 发起 ISP: 用户或系统通过指定的 ISP 接口(如 UART, USB, CAN, I2C 等)向 M487 发送更新命令。

    • 芯片验证安全配置: M487 的 BootROM 或 ISP 引导程序首先检查 SPROM 中的配置位。如果启用了安全 ISP

      • 要求接收到的固件数据必须是经过加密的。


    • 解密固件: BootROM/ISP 引导程序使用 SPROM 中存储的 AES 密钥,通过 AES 硬件引擎 对接收到的加密固件数据进行实时解密

    • 验证完整性 (可选但推荐): 解密后的固件通常会包含一个校验值(如 CRC32 或哈希值)。BootROM 会计算解密后固件的校验值并与固件中存储的值进行比较,确保解密过程正确且固件未被篡改。

    • 编程 Flash: 只有通过解密(和可选的完整性校验)的固件数据才会被写入到目标 Flash 地址空间。

    • 启动新固件: 更新完成后,芯片复位并运行新写入的(解密后的)固件。




提供的保护



  1. 防止未经授权的固件更新: 启用安全 ISP 并锁定 SPROM 后,攻击者无法通过标准的未加密 ISP 协议上传恶意固件。他们必须拥有存储在 SPROM 中的正确密钥才能生成有效的加密固件映像。由于 SPROM 被锁定且密钥物理不可读,这大大增加了攻击难度。

  2. 保护固件机密性(防读取):

    • 即使攻击者绕过了 ISP 更新保护(非常困难),或者芯片本身支持读取固件功能。

    • 如果同时启用了读取保护(通常设置为较高等级如 Level 2),ISP 和调试接口对 Flash 内容的直接读取将被禁止。

    • 即使在某些特定模式下允许读取(例如 Level 1 允许 ISP 读取但需要安全访问),配置了安全 ISP 后,芯片在响应读取请求时可能会首先用 AES 引擎加密 Flash 内容后再输出结果。这意味着攻击者即使读到数据,也是加密后的密文,没有密钥无法破解。


  3. 防止固件篡改(结合完整性校验): 在安全 ISP 更新过程中加入对解密后固件的完整性校验(如 CRC),可以确保传输过程中或攻击者对加密数据包的篡改会被检测出来,更新过程会被中止。

  4. 密钥安全: AES 密钥存储在锁定的 SPROM 中,保证了密钥本身的安全性,这是整个加密方案信任的基础。


关键要点和最佳实践



  • SPROM 锁定是核心: 整个安全机制的有效性高度依赖于 SPROM 被正确且不可逆地锁定。如果不锁定,攻击者可能通过 ISP 或其他方式读出密钥或修改安全配置位,从而完全绕过保护。

  • 密钥管理至关重要: 用于加密生产固件的密钥必须与烧录到芯片 SPROM 中的密钥严格一致。必须建立安全的密钥生成、分发和存储流程。一旦 SPROM 锁定,密钥将永久固定在该芯片中。

  • 综合使用安全特性: 为了获得最佳保护,应同时启用:

    • 安全 ISP (Secure ISP Enabled)

    • 读取保护 (Read Protection) (至少 Level 1, 推荐 Level 2)

    • 调试保护 (Debug Protection) (根据需要设置)

    • SPROM 锁定 (SPROM Lock)


  • 固件完整性校验: 强烈建议在加密固件中包含并验证校验值(CRC/SHA),以防御传输错误或主动篡改攻击。


总结: M487 通过将唯一的 AES 密钥安全地存储在锁定的、不可读的 SPROM 中,并利用硬件 AES 引擎强制要求所有通过 ISP 更新的固件必须使用该密钥正确加密,从而实现了对 ISP 通道的强大保护。这不仅防止了恶意固件的注入,也保护了合法固件的机密性和完整性。正确配置和锁定 SPROM 是这个保护机制有效实施的关键。

举报

更多回帖

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