【第二部分:结构】ARM Realm Management Monitor specification

目录

概念

本章介绍了以下是RMM体系结构的核心概念:

Realm

本节描述了一个Realm的概念。

概述

Realm是一种执行环境,它不受非安全和安全安全状态下的代理和其他Realm的影响。

Realm执行环境

Realm的执行环境是EL0 + EL1环境,如a型文件架构3的《ARM架构参考手册》中所述。

Realm寄存器

在第一次进入Realm VPE时,PE状态根据A形架构参考手册3中的"重置为AArch64状态"初始化,但主机在Realm创建过程中指定的GPR和PC值除外。

保证了一个Realm VPE的通用用途和SIMD /浮点寄存器的保密性。

保证了其他Realm VPE寄存器状态(包括堆栈指针、程序计数器和EL0 / EL1系统寄存器)的保密性。

这保证了一个Realm VPE的通用用途和SIMD /浮点寄存器的完整性。

保证了其他Realm VPE寄存器状态(包括堆栈指针、程序计数器和EL0 / EL1系统寄存器)的完整性。

Realm可以使用主机调用向主机传递参数,并接收来自主机的结果。

Realm内存

一个Realm能够确定一个给定的IPA是受到保护还是不受保护。

通过受保护地址访问的内存内容保证机密性。非正式地说,这意味着CCA平台之外的任何代理都无法观察到该内存位置内容的更改。

这保证了通过一个受保护的地址访问的内存内容的完整性。非正式地说,这意味着该Realm不遵守要更改的位置的内容,除非该Realm本身对该位置写了不同的值,或同意RMM要求违反该位置的完整性。

Realm处理器功能

从读取特性寄存器返回到一个Realm的值在架构上是有效的,它描述了在该Realm的执行环境中存在的一组特性。

如果将底层硬件平台支持的特性暴露导致安全漏洞,则RMM可能会抑制底层硬件平台支持的特性。

IMPDEF系统寄存器

从实现定义的系统寄存器中读取或写入的Realm会导致该Realm发生未知异常。

Realm属性

本节描述了一个Realm的属性。

Realm属性是一个Realm的一个属性,它可以通过主机或Realm来观察或修改其值。

Realm属性的一个示例是RMM命令的结果。

在下表中总结了一个Realm的属性。

Realm初始测量(RIM)是在激活时对Realm的配置和内容的测量。

Realm可扩展测量(REM)是一个在Realm的生命周期内可以扩展的测量值。

一个Realm的属性包括一个测量值的数组。这个数组中的第一个条目是一个RIM。这个数组中的其余条目是REMs。

在领域创建过程中,主机提供ipa_width、rtt_level_start和rtt_num_start值作为Realm参数。根据VMSA,rtt_num_start值在架构上被定义为ipa_width值和rtt_level_start值的函数。因此,可以设计领域创建界面,使主机只提供了ipa_width值和rtt_level_start值。但是,这可能会允许成功地创建一个Realm,但其配置与主机的意图不匹配。因此,我们决定,主机应该显式地指定所有三个值,如果值不一致,Realm创建将失败。详情请参见A-配置文件体系结构3的ARM体系结构参考手册。

一个Realm的VMID值由主机选择。VMID必须在硬件平台支持的范围内。RMM确保系统上的每个Realm都有一个唯一的VMID。

Realm个性化值(RPV)是由主机提供的,用于区分具有相同Realm初始度量,但行为不同的Realm。

RPV的可能用途包括:

A GUID

Realm所有者的哈希值为公钥

"个性化文件"的散列,通过侧带(例如,通过NS内存)提供给Realm,并包含Realm软件使用的配置信息。

RMM将RPV视为一个不透明的值。

RPV作为一个单独的声明被包括在该Realm的认证报告中。

Realm活性

Realm活性是一种属性,它意味着存在一个或多个颗粒,除了RD和起始级RTTs,它们属于Realm。

如果一个Realm是活的,它就不能被摧毁。

如果存在以下任何一项,则一个Realm是有效的:

该Realm所拥有的RECs数量不为零

该Realm的起始级别RTT是实时的

如果一个Realm拥有非零数量的数据颗粒,这意味着它有一个起始级别的RTT,它是活的,因此该领域本身是活的。

Realm生命周期

状态

一个Realm的状态列出如下。

NEW 正在建设中。不符合执行资格。

ACTIVE 符合执行条件。

SYSTEM_OFF 系统已被关闭。不符合执行资格。

状态转换

允许的Realm状态转换如下表所示。最右边的列列出了可能导致相应状态转换的事件。

从伪状态NULL进行的转换表示Realm对象的创建。向伪状态NULL的转换表示对Realm对象的破坏。

允许的Realm状态转换如下图所示。每个圆弧都标记有可能导致相应状态转换的事件

从伪状态NULL进行的转换表示RD的创建。向伪状态NULL的转换表示RD的破坏。

Realm参数

Realm参数是主机在Realm创建过程中提供的值。

Realm描述符

Realm描述符(RD)是一种存储Realm属性的RMM数据结构。

一个RD的大小是一个颗粒Granule。

颗粒Granule

本节描述了颗粒体的概念。

颗粒存储器是一个大小为4KB的物理内存单位。

颗粒可用于储存以下颗粒之一:

主机使用的代码或数据

处于安全安全状态的软件使用的代码或数据

一个Realm所使用的代码或数据

RMM用于管理一个Realm的数据

颗粒的使用反映在其生命周期状态中。

如果颗粒可以由主机委托给RMM或领域使用,那么它是可委托的。

在典型的实现中,以RAM形式呈现给主机的所有内存都是可委托的。不可委托内存的示例可能包括:

为根世界、RMM或安全世界使用的内存

设备内存

颗粒属性

本节将介绍颗粒体的属性。

颗粒属性是颗粒的一个属性,其值可以被主机或领域观察或修改

可观察到的颗粒属性的方法的示例包括RMM命令的结果,以及内存访问是否产生故障。

下表中总结了一个颗粒体的属性。

物理地址空间集为:NS, REALM, OTHER

RMM不能区分一个颗粒是在安全PAS中还是在根PAS中,所以这两个值被合并为OTHER。

如果颗粒的状态不是未授权UNDELEGATED的,那么颗粒的PAS就是REALM

如果颗粒的状态未被授权UNDELEGATED,那么颗粒的PAS就不是REALM

如果一个颗粒的状态未被委托UNDELEGATED,那么RMM并不会阻止该颗粒的PAS被另一个代理更改为除REALM以外的任何值。

NS颗粒是一种PAS为NS的颗粒。

颗粒所有权

既不未授权也不授权的颗粒属于Realm所有。

颗粒的所有者由Realm描述符(RD)的地址标识。

对于状态为RD的颗粒,所有权关系是递归的:拥有Realm由RD本身的地址标识。

状态为RTT的颗粒是以下情况之一:

一个起始水平的RTT。此RTT的地址存储在所拥有Realm的RD中。

一个非启动水平的RTT。此RTT的地址存储在其父RTT中,并存储在一个状态为表的RTT条目中。递归地遵循父关系,导致了拥有Realm的RD。

一个状态为DATA的颗粒被映射到一个受保护的IPA上,在一个状态被分配的RTT条目中。拥有RTT的Realm是数据颗粒的所有者。

REC具有一个"所有者"属性,该属性指向拥有Realm的RD。

REC没有映射到受保护的IPA上。因此,需要明确地记录它的所有权

颗粒生命周期

状态

一个颗粒的状态列出如下。

状态转换

允许的颗粒状态转换如下表所示。最右边的列列出了可能导致相应状态转换的事件。

允许的颗粒状态转变如下图所示。每个圆弧都标记有可能导致相应状态转换的事件。

颗粒抹除

当颗粒的状态从P过渡到委托状态DELEGATED,然后过渡到任何其他状态时,任何与P相关的内容都已被删除。

通过委托状态DELEGATED的任何颗粒状态转换序列都会导致颗粒内容被删除。这是必要的,以确保信息不会从一个Realm泄漏到另一个Realm,或从一个Realm泄漏到主机。请注意,在委托颗粒的状态DELEGATED时,任何代理都不能观察颗粒的内容。

擦除是一种将内存位置的可观测值从X改变为Y的操作,使得不能从值Y确定值X的操作。

擦除内存位置并不会直接或间接地显示任何机密的领域数据。

不保证擦拭可以被实现为零填充。

Realm软件不应该假设未初始化的内存(即,由使用RMI_DATA_CREATE_UNKNOWN创建的数据颗粒支持的Realm IPA空间)的初始内容为零。

Realm执行上下文

本节介绍了Realm执行上下文(REC)的概念。

概述

Realm执行上下文(REC)是一个与领域VPE相关联的R-EL0和1执行上下文。

REC对象是一种RMM数据结构,它是用来存储REC的寄存器状态的

REC属性

本节将介绍REC的属性。

REC属性是REC的一个属性,其值可以由主机或拥有REC的Realm域来观察或修改。

可以观察到REC属性的方法的示例包括RMM命令的结果和Realm条目之后的PE状态

下表中总结了REC的属性。

REC的aux属性是一个辅助颗粒的列表。

REC所需的辅助颗粒数由RMI_REC_AUX_COUNT命令返回。

根据CCA平台和Realm的配置,REC所需的存储空间量可能超过单个颗粒。

REC所需的辅助颗粒数量在CCA平台上的Realm之间有所不同。

REC所需的辅助颗粒的数量是一个给定Realm的生命周期内的一个常数

REC的gprs属性是一组通用寄存器值,在退出REC时由RMM保存,在进入REC时由RMM恢复。

REC的mpidr属性是一个可用于识别与REC关联的VPE的值。

REC的pc属性是程序计数器,它在退出REC时由RMM保存,在进入REC时由RMM恢复。

REC的可运行标志决定了REC是否适合执行。只有当标志的值可运行时RUNNABLE,RMI_REC_ENTER命令才会导致REC条目。

REC的可运行标志由该Realm控制。它的初始值反映在Realm的初始测量中,在Realm执行期间,它的值可以通过执行PSCI_CPU_ON和PSCI_CPU_OFF命令来改变

REC的状态属性由主机通过执行RMI_REC_ENTER命令来控制。

REC的sysregs属性是一组系统寄存器值,这些值在从REC退出时由RMM保存,在进入REC时由RMM恢复。

REC指数和MPIDR值

REC索引是由MPIDR字段串联生成的无符号整数值:

index = Aff3:Aff2:Aff1:Aff03:0

这一点如下表所示。


REC MPIDR值的Aff07:4是RES0字段,以便与GICv3兼容。

当在一个Realm中创建第n个REC时,主机需要使用与REC索引n对应的MPIDR。

REC生命周期

状态
状态转换

允许的REC状态转换如下表所示。最右边的列列出了可能导致相应状态转换的事件。

从伪状态NULL进行的转换表示REC对象的创建。向伪状态NULL的转换表示对REC对象的破坏。

允许的REC状态转换如下图所示。每个圆弧都标记有可能导致相应状态转换的事件。

从伪状态NULL进行的转换表示REC的创建。向伪状态NULL的转换表示REC的破坏。

参考文献

1 Introducing Arm CCA. (ARM DEN 0125) Arm Limited.

2 Arm Architecture Reference Manual Supplement, The Realm Management Extension (RME), for Armv9-A.

(ARM DDI 0615 A.d) Arm Ltd.

3 Arm Architecture Reference Manual for A-Profile architecture. (ARM DDI 0487 I.a) Arm Ltd.

4 Arm CCA Security model. (ARM DEN 0096) Arm Limited.

5 Arm Generic Interrupt Controller (GIC) Architecture Specification version 3 and version 4. (ARM IHI 0069

G) Arm Ltd.

6 Concise Binary Object Representation (CBOR).

7 CBOR Object Signing and Encryption (COSE).

8 Entity Attestation Token (EAT).

9 Concise Data Definition Language (CDDL).

10 IANA Hash Function Textual Names.

11 SEC 1: Elliptic Curve Cryptography, version 2.0.

12 RME system architecture spec. (ARM DEN 0129) Arm Ltd.

13 Arm SMC Calling Convention. (ARM DEN 0028 D) Arm Ltd.

14 Arm Specification Language Reference Manual. (ARM DDI 0612) Arm Ltd.

15 Secure Hash Standard (SHS).

16 Arm Power State Coordination Interface (PSCI). (ARM DEN 0022 D.b) Arm Ltd.

相关推荐
天下·第二20 小时前
如何在【x86】服务器上打包构建【arm】镜像
服务器·arm开发·eureka
止观止1 天前
在 WSL2 上从零搭建 ARM 混合编程环境
汇编·arm开发·嵌入式开发·混合编程
陌上花开缓缓归以1 天前
nand flash bbt和bmt管理
arm开发
小熊officer2 天前
AMD架构与ARM架构
arm开发·架构
_kerneler3 天前
arm虚拟机实时性优化总结
arm开发
口袋里のInit3 天前
基础知识——ARM M核入栈出栈流程
开发语言·arm开发
2035去旅行3 天前
WIFI传输带宽
arm开发·嵌入式硬件
陌上花开缓缓归以4 天前
nand flash 驱动适配
arm开发
振南的单片机世界4 天前
影子寄存器:改ARR下个周期才生效,波形不突变
arm开发·stm32·单片机·嵌入式硬件
陌上花开缓缓归以4 天前
基于 W25N01KV 的 MTD/BBT/BMT/UBI 框架与坏块导致系统挂死问题剖析
arm开发