介绍
内存密码引擎(MCE)是一种加密外设,它确保了对外部非易失性或易失性存储器进行实时加密和解密。MCE可以保护位于外部存储器中的代码或数据。本文档涵盖了MCE可以提供保护的三种用例。
• 原地执行(XiP):代码和数据存储位于非易失性外部存储器中,而代码是从外部闪存执行的。
• 在外部RAM中加载和运行(L&R_Ext):代码和数据存储位于外部闪存中,该闪存被复制到外部RAM中以供执行。MCE允许保护外部RAM和闪存存储器。
• 在内部RAM中加载和运行(L&R_Int):代码和数据存储位于外部闪存中,该闪存被复制到内部RAM中以供执行。在这种情况下,MCE仅启用对外部闪存存储器的保护。
这三个用例基于STM32CubeH7RS固件中的示例作为参考。它们基于ST不可变和OEM可更新的根信任引导解决方案,分别称为STiRoT和OEMuRoT。
用户可以根据定制的OEM不可变和可更新根信任路径(OEMiRoT + OEMuRoT)定义自己的根信任引导路径。本文档仅涵盖STiRoT+OEMuRoT引导路径,并不涵盖自定义定义的OEMiRoT + OEMuRoT引导路径。
本文档适用于下表中的产品,这些产品在本文档的其余部分被称为STM32H7Sx。
MCE(内存密码引擎)概述
内存密码引擎(MCE)在给定的地址空间中定义了具有特定安全设置的多个区域。这些安全设置可以涉及加密、权限或写入。所有通过加密区域的系统总线流量都由MCE实时管理,如果获得授权,将自动解密读取和加密写入。
每个MCE可以定义多达四个区域,粒度为4 K字节。MCE支持可以应用于不同区域(特权、写入)的访问过滤功能。请参阅下图。
下表列出了MCE支持的功能。当选择流密码时,重要的是在加密整个区域后立即激活写保护(只读区域)。
STM32H7Sx的实现定义了三个连接到外部内存接口的MCE实例。当MCE与XSPI一起使用时,必须将闪存控制器设置为内存映射模式。此外,使用DMA执行以16字节突发方式写入闪存也是必须的。表2详细列出了三个MCE实例之间的主要实现差异。
STM32H7Sx中的MCE实现
STM32H7Sx的实现定义了三个连接到外部内存接口的MCE实例。当MCE与XSPI一起使用时,必须将闪存控制器设置为内存映射模式。还必须使用DMA以16字节突发的方式执行对闪存的写操作。
在STM32H7Sx的实现中,MCE(Memory Cryptographic Engine)保护存储在外部内存中的代码或数据的机密性(四个区域/内存)。MCE外设实例与xSPI外设实例的连接方式如下:
• MCE1连接到xSPI1内存接口,该接口可以连接到NOR闪存或PSRAM。
• MCE2连接到xSPI2内存接口,该接口可以连接到NOR闪存或PSRAM。
• MCE3连接到FMC内存接口,该接口可以连接到PSRAM、SDRAM或FRAM。
xSPI1和xSPI2连接到XSPIM(xSPI IO管理器),它允许外部内存(NOR闪存或PSRAM)的复用连接。可以考虑以下几种使用情况:
• XSPI1映射到端口1,XSPI2映射到端口2(直接模式)。
• XSPI1映射到端口2,XSPI2映射到端口1(交换模式)。
• 两个XSPI驱动一个外部内存。
– XSPI1和XSPI2都映射到端口1,带仲裁(复用模式到端口1)。
– XSPI1和XSPI2都映射到端口2,带仲裁(复用模式到端口2)。
• 一个XSPI驱动两个外部内存。
在安装任何加密镜像之前,MCE加密/解密必须考虑相应的IO管理器使用案例/模式。STM32CubeH7RS固件根据XSPIM的前两个使用案例提供了模板。