随着RISC-V处理器逐步进入物联网、工业控制、汽车电子和边缘计算等场景,处理器的安全隔离能力也越来越受到关注。
对于开发者来说,RISC-V安全并不是某一个单独的功能,而是由特权级、物理内存保护、访问控制、安全启动以及软件安全机制共同构成。其中,PMP(Physical Memory Protection)是RISC-V特权架构中重要的基础安全机制,Smepmp则进一步增强了机器模式下的访问控制能力。
在这些硬件能力基础上,开发者还可以结合Enclave、Secure Monitor等机制构建可信执行环境(Trusted Execution Environment,TEE)。
本文从开发者视角出发,介绍RISC-V中的PMP和Smepmp,并进一步讨论这些硬件机制如何支撑TEE的工程实践。
一、PMP:RISC-V物理内存保护的基础
PMP,全称Physical Memory Protection,是RISC-V特权架构提供的物理内存访问控制机制。
它的基本思路是通过一组PMP配置寄存器定义不同的物理地址区域,并为这些区域设置读取(R)、写入(W)和执行(X)权限。
例如,一个系统可以将内存划分为:
●
操作系统使用区域
●
应用程序区域
●
安全固件区域
●
外设映射区域
●
其他需要限制访问的物理地址空间
当S-mode或U-mode发生内存访问时,处理器会根据PMP规则判断这次访问是否允许。RISC-V官方特权架构规范对PMP的地址匹配、权限控制和锁定机制进行了定义。
PMP主要通过pmpaddr和pmpcfg相关CSR进行配置。其中:
●
pmpaddr用于描述物理地址范围;
●
pmpcfg用于配置对应区域的权限和地址匹配方式。
PMP支持TOR、NAPOT等地址匹配方式(NA4仅适用于RV32,RV64上该编码保留)。
TOR
TOR(Top of Range)通过相邻的PMP地址寄存器定义一个地址范围,适合描述具有明确起止地址的内存区域。
xxxxxxxxxx0x80000000 ─────────────── 0x81000000 ↑ ↑ 起始 结束NAPOT
NAPOT(Naturally Aligned Power-of-Two)用于描述自然对齐的2的幂次大小区域,对于按照固定边界划分的SRAM、DDR等内存区域比较方便。
需要注意的是,NAPOT使用专门的地址编码方式,实际软件配置时需要根据PMP规范计算pmpaddr值,而不能简单地直接写入物理基地址。
一段典型的PMP配置示例。假设需要将0x80000000起始的256MB DDR区域配置为仅M-mode可读写执行:
xxxxxxxxxx# entry 0: NAPOT模式锁定DDR区域# pmpaddr0 = (base | (size - 1)) >> 1li t0, (0x80000000 | 0x0FFFFFFF) >> 1csrw pmpaddr0, t0# pmpcfg0 entry 0: L=1, A=NAPOT(11), R=1, W=1, X=1li t1, 0x9Fcsrw pmpcfg0, t1注意pmpaddr0与pmpcfg0的entry 0编号必须对应,否则权限会作用到错误的地址区域。
Lock机制
PMP还提供Lock(L)机制。
当相关PMP规则被锁定后,软件不能在正常运行过程中随意修改对应配置,直到发生复位。
在实际系统中,可以在安全启动阶段完成关键PMP区域的配置,再锁定相关规则,从而避免后续软件修改安全边界。
二、Smepmp:进一步强化M-mode访问控制
传统PMP主要用于限制较低特权级的软件访问物理内存,但Machine Mode(M-mode)拥有非常高的系统权限。
对于需要建立严格安全边界的系统,仅依靠传统PMP可能无法满足全部需求。
Smepmp是RISC-V针对PMP设计的增强扩展,重点解决Machine Mode下的内存访问和执行控制问题。RISC-V官方规范目前已经将Smepmp 1.0列为Ratified扩展。
Smepmp通过mseccfg寄存器中的MML(Machine Mode Lockdown)位改变PMP规则在M-mode下的行为。MML置位后,M-mode的访问不再自动放行,而是根据pmpcfg中为M-mode专门编码的规则进行权限检查,使系统能够建立更加严格的机器模式访问边界。
这里需要注意:Smepmp并不是RISC-V版本的TrustZone,也不是一个完整的Secure World切换机制。
它解决的是PMP在M-mode访问控制方面的问题,而完整的TEE还需要可信软件、内存管理、外设隔离以及密钥管理等机制共同参与。
因此,可以简单理解为:
PMP负责建立基础的物理内存访问边界,Smepmp进一步强化高特权级下的访问控制,而TEE则是在这些硬件能力之上构建系统级可信执行环境。
三、PMP与TEE是什么关系?
PMP和TEE经常被放在一起讨论,但两者并不是同一个概念。
PMP是一项硬件访问控制机制,而TEE是一套系统级安全架构。
一个典型的TEE可以简单理解为:
xxxxxxxxxx┌──────────────────────────┐│ 普通世界 ││ Rich OS / Application │└────────────┬─────────────┘ │ 受控调用 ▼┌──────────────────────────┐│ 可信环境 ││ Secure Monitor / Enclave ││ Trusted Application │└────────────┬─────────────┘ │ ▼┌──────────────────────────┐│ RISC-V硬件隔离机制 ││ PMP / Smepmp │└──────────────────────────┘在这种架构中,PMP可以负责建立物理内存隔离边界,但TEE还需要可信软件组件来管理安全区域、上下文、调用接口以及生命周期。
所以支持PMP并不等于处理器天然支持完整TEE。更准确地说,PMP可以成为RISC-V TEE实现的重要硬件基础之一。
四、RISC-V上构建TEE需要考虑什么?
TEE的工程实现通常需要从多个方面建立安全边界。
1. 内存隔离
首先需要划分普通世界和可信环境的物理内存区域。
例如:
xxxxxxxxxxDDR├── 普通OS区域├── 普通应用区域├── Secure Monitor区域└── TEE / Enclave区域普通世界不能直接读取或修改TEE区域。
PMP可以用于建立这一基础隔离,但实际设计还需要考虑内存粒度、PMP entry数量以及不同特权级下的访问规则。
2. 外设隔离
内存隔离只是第一步。如果普通世界可以直接访问加密引擎、密钥存储或者DMA控制器,那么TEE的安全边界仍然可能被绕过。
因此,还需要考虑:
●
加密引擎
●
安全存储
●
eFuse / OTP
●
DMA控制器
●
调试接口
●
中断控制器
●
UART、SPI等共享外设
对于共享设备,可以通过受控接口限制普通世界的访问范围。对于DMA等总线主设备,还需要结合SoC级的访问控制机制进行设计,不能默认CPU侧的PMP隔离能够覆盖所有外设访问。
3. 密钥管理
如果TEE承担加密、签名或者身份认证任务,密钥管理也是重要组成部分。
一个基本原则是:
普通世界不应该直接获得TEE内部的敏感密钥材料。
例如,普通应用需要进行签名时,可以向可信环境提交数据,由Trusted Application使用安全密钥完成签名,最后只返回签名结果。这样可以减少敏感密钥暴露给普通软件的风险。
五、TEE设计中的安全边界
TEE并不是把代码“放进一块安全内存”这么简单。
实际设计需要明确哪些组件属于可信计算基(TCB),以及哪些软件属于不可信环境。
典型情况下,可信部分可能包括:
●
Secure Monitor
●
Enclave Runtime
●
Trusted Application
●
安全启动代码
●
密钥管理组件
可信代码越多,TCB越大,后续安全审计和维护的成本也越高。
因此,TEE设计通常需要尽可能缩小可信计算基,同时减少普通世界与可信环境之间的接口数量。
例如:
xxxxxxxxxx普通世界 │ │ 受控API ▼Trusted Application │ ├── 密钥操作 ├── 加密计算 └── 敏感数据处理接口设计同样需要考虑输入校验、权限检查以及潜在的侧信道问题。
六、RISC-V安全处理器如何选型?
如果正在评估一款RISC-V处理器是否适合安全相关应用,可以重点关注以下几个方面。
PMP能力
需要确认:
●
PMP entry数量
●
PMP粒度
●
TOR、NAPOT等地址匹配方式
●
Lock机制
●
不同特权级下的访问规则
Smepmp支持情况
如果系统需要建立更加严格的M-mode安全边界,还需要确认处理器是否支持Smepmp,以及具体实现的功能范围。
支持PMP并不代表一定支持Smepmp。
系统级安全能力
除了CPU本身,还应该关注:
●
Secure Boot
●
Root of Trust
●
密钥存储
●
JTAG调试控制
●
随机数发生器
●
加密硬件
●
DMA和外设访问控制
因此,最终需要从CPU、总线、外设、固件和软件多个层面评估完整的安全架构。
七、总结
RISC-V安全机制可以从基础的硬件访问控制逐步扩展到完整的可信执行环境。
PMP提供物理内存访问控制能力,可以帮助系统划分不同安全区域;Smepmp进一步增强了PMP在Machine Mode下的访问和执行控制能力。
在此基础上,开发者还需要结合Secure Monitor、Enclave、Trusted Application、安全启动、外设隔离和密钥管理等机制,构建完整的可信链路。
因此在评估RISC-V安全方案时,不应该只关注:“这颗处理器有没有PMP?”
还需要进一步考虑:
PMP能够保护什么?
是否支持Smepmp?
M-mode是否处于可信边界?
DMA和外设是否受到隔离?
Secure Boot和密钥管理是否完整?
TEE最终由哪些软硬件组件共同实现?
理解这些机制之间的边界,比单纯记住几个安全扩展名称更加重要。




