• 正文
  • 相关推荐
申请入驻 产业图谱

STM32H7Sx MCE 加密解密:外部存储安全防护全解析

17小时前
202
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

STM32H7Sx 系列的 MCE(内存加密引擎)是专为外部存储安全设计的硬件加速模块,支持对 xSPI/FMC 连接的 Flash、PSRAM 等外部存储进行实时加解密,适配 “原地执行(XiP)”“加载后运行(Load&Run)” 等核心场景,可平衡安全等级与性能需求。本文基于 AN6088 应用笔记,拆解 MCE 的硬件实现、配置逻辑、使用场景与密钥管理,助力快速落地外部存储防护。

资料获取:如何在STM32 MCU上使用MCE进行加密/解密

1. MCE 核心概述

1.1 基本功能与价值

  • 实时加解密:对外部存储的总线数据自动加密(写)/ 解密(读),无需 CPU 干预,不影响访问延迟;
  • 区域隔离:每个 MCE 支持 4 个独立加密区域,最小粒度 4KB,可分别配置加密、特权、写保护属性;
  • 安全防护:支持侧信道攻击(SCA)防护、防位翻转攻击,配合密钥隔离机制,保障外部存储数据机密性。

1.2 硬件实现与实例差异

STM32H7Sx 集成 3 个 MCE 实例,分别绑定不同外部存储接口,核心差异如下:

  • MCE1:连接 xSPI1(NOR Flash/PSRAM),支持 AES-128(块模式 ECB / 流模式 CTR),支持普通 / 快速密钥派生;
  • MCE2/3:MCE2 连 xSPI2,MCE3 连 FMC(SDRAM/FRAM),仅支持 Noekeon 块模式(~96 位安全等级),支持普通 / 快速密钥派生;
  • 关键限制:xSPI 搭配 MCE 时需启用内存映射模式,写操作需通过 DMA 以 16 字节突发传输。

2. 核心配置:加密模式与密钥选择

2.1 加密模式选择(安全 vs 性能平衡)

MCE 的加密模式决定安全等级与访问延迟,需根据场景选型:

  • 块模式(推荐优先):
    • 适用场景:需要 SCA 防护、支持部分区域更新(如数据存储、可更新固件);
    • 关键特性:MCE1 用 AES-128(128 位安全),MCE2/3 用 Noekeon(~96 位安全);
    • 密钥派生:普通模式(SCA 防护,延迟高)、快速模式(无 SCA 防护,延迟低);
    • 延迟参考(16 字节数据):MCE1 AES 块(普通 25 周期、快速 15 周期),MCE2/3 Noekeon 块(普通 21 周期、快速 11 周期)。
  • 流模式(仅 MCE1 支持):
    • 适用场景:追求极致性能、无需部分更新(如只读代码);
    • 关键特性:AES-128 CTR 模式,无 SCA / 位翻转防护,需启用写保护避免重复加密;
    • 延迟参考:11 周期(低延迟优势明显)。

2.2 密钥管理:同密钥 vs 不同密钥

外部存储加密支持两种密钥方案,各有优劣:

  • 相同密钥(所有设备共用):
    • 优势:量产效率高(可批量预加密固件)、首次启动无延迟;
    • 风险:密钥泄露则所有设备受影响,外部存储可跨设备复用;
    • 适用场景:非核心代码 / 数据,对安全要求不高。
  • 不同密钥(每设备唯一):
    • 优势:密钥基于 AHK(应用硬件密钥)生成,泄露仅影响单设备,外部存储不可跨设备复用;
    • 实现:通过 RSSLib->DataProvisioning () API 生成,存储在 OBKeys(选项字节密钥),受 HDPL(硬件域隔离)保护;
    • 适用场景:核心固件、敏感数据,需高安全等级。

3. 三大核心使用场景

3.1 原地执行(XiP):直接从外部 Flash 运行

  • 适用场景:代码体积大、无需复制到 RAM,追求存储效率;
  • 保护逻辑:外部 Flash 的加密区域(如用户应用区、OEMuRoT 区)由 MCE 实时解密,CPU 无感知;
  • 关键配置:
    • 区域 2(用户应用区):可选同密钥(预加密)或不同密钥(首次启动安装加密);
    • 区域 4(OEMuRoT 区):强制用不同密钥,由 STiRoT(ST immutable 根信任)管理;
    • 非加密区域(如下载区):用传输密钥加密,无需 MCE 参与。

3.2 Load&Run(外部 RAM):复制到外部 RAM 运行

  • 适用场景:代码需高速运行,外部 RAM 容量大;
  • 保护逻辑:MCE 加密外部 Flash 中的固件,复制到外部 RAM 时实时解密,同时支持外部 RAM 的动态加密(用 AHK 派生密钥);
  • 关键要求:外部 RAM 需用动态密钥(每次初始化生成),避免静态密钥风险。

3.3 Load&Run(内部 RAM):复制到内部 RAM 运行

  • 适用场景:代码体积小、追求最高运行速度,敏感代码隔离;
  • 保护逻辑:MCE 仅加密外部 Flash,复制到内部 RAM 时解密,内部 RAM 无需额外加密;
  • 资源限制:内部 RAM 最大 456KB(需预留~70KB 给 OEMuRoT 执行)。

4. 关键实施要点

4.1 密钥 provisioning 流程

  • 生成:通过 RSSLib 的 DataProvisioning () API 生成 AHK(OBKey、MCE1、MCE2 密钥);
  • 隔离:密钥存储在对应 HDPL 域(STiRoT 用 HDPL1,OEMuRoT 用 HDPL2),高域密钥自动对低域隐藏;
  • 擦除:触发 TAMP(防篡改)事件时,所有 MCE 密钥自动擦除。

4.2 调试与量产考量

  • 调试:开发阶段用开发密钥配置 MCE;量产阶段(闭合状态)需通过调试认证(DA)打开 HDPL3 调试,不泄露高域密钥;
  • 制造:可信环境可直接预加密固件;非可信环境需启用 SFI(安全固件安装),避免固件泄露。

4.3 避坑指南

  • 禁止流模式部分更新:流模式下修改加密区域需全量重新加密,否则数据损坏;
  • xSPI 配置约束:搭配 MCE 时必须启用内存映射模式,写操作强制 DMA 16 字节突发;
  • 区域规划:提前划分加密 / 非加密区域,敏感数据优先用 MCE1 AES 块模式 + 不同密钥。

STM32H7Sx 的 MCE 通过硬件加速实现外部存储的实时安全防护,核心是 “模式选型适配场景 + 密钥隔离保障安全”:安全优先选 MCE1 AES 块模式 + 不同密钥,性能优先选 MCE1 流模式,XiP 场景直接用外部 Flash,高速场景选 Load&Run 到 RAM。配合 STiRoT/OEMuRoT 的根信任机制,可构建从启动到运行的全链路安全。

相关推荐