本章介绍了以下是RMM体系结构的核心概念:
本节描述了一个Realm的概念。
Realm是一种执行环境,它不受非安全和安全安全状态下的代理和其他Realm的影响。
Realm的执行环境是EL0 + EL1环境,如a型文件架构[3]的《ARM架构参考手册》中所述。
在第一次进入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能够确定一个给定的IPA是受到保护还是不受保护。
通过受保护地址访问的内存内容保证机密性。非正式地说,这意味着CCA平台之外的任何代理都无法观察到该内存位置内容的更改。
这保证了通过一个受保护的地址访问的内存内容的完整性。非正式地说,这意味着该Realm不遵守要更改的位置的内容,除非该Realm本身对该位置写了不同的值,或同意RMM要求违反该位置的完整性。
从读取特性寄存器返回到一个Realm的值在架构上是有效的,它描述了在该Realm的执行环境中存在的一组特性。
如果将底层硬件平台支持的特性暴露导致安全漏洞,则RMM可能会抑制底层硬件平台支持的特性。
从实现定义的系统寄存器中读取或写入的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活性是一种属性,它意味着存在一个或多个颗粒,除了RD和起始级RTTs,它们属于Realm。
如果一个Realm是活的,它就不能被摧毁。
如果存在以下任何一项,则一个Realm是有效的:
该Realm所拥有的RECs数量不为零
该Realm的起始级别RTT是实时的
如果一个Realm拥有非零数量的数据颗粒,这意味着它有一个起始级别的RTT,它是活的,因此该领域本身是活的。
一个Realm的状态列出如下。
NEW 正在建设中。不符合执行资格。
ACTIVE 符合执行条件。
SYSTEM_OFF 系统已被关闭。不符合执行资格。
允许的Realm状态转换如下表所示。最右边的列列出了可能导致相应状态转换的事件。
从伪状态NULL进行的转换表示Realm对象的创建。向伪状态NULL的转换表示对Realm对象的破坏。
允许的Realm状态转换如下图所示。每个圆弧都标记有可能导致相应状态转换的事件
从伪状态NULL进行的转换表示RD的创建。向伪状态NULL的转换表示RD的破坏。
Realm参数是主机在Realm创建过程中提供的值。
Realm描述符(RD)是一种存储Realm属性的RMM数据结构。
一个RD的大小是一个颗粒Granule。
本节描述了颗粒体的概念。
颗粒存储器是一个大小为4KB的物理内存单位。
颗粒可用于储存以下颗粒之一:
主机使用的代码或数据
处于安全安全状态的软件使用的代码或数据
一个Realm所使用的代码或数据
RMM用于管理一个Realm的数据
颗粒的使用反映在其生命周期状态中。
如果颗粒可以由主机委托给RMM或领域使用,那么它是可委托的。
在典型的实现中,以RAM形式呈现给主机的所有内存都是可委托的。不可委托内存的示例可能包括:
为根世界、RMM或安全世界使用的内存
设备内存
本节将介绍颗粒体的属性。
颗粒属性是颗粒的一个属性,其值可以被主机或领域观察或修改
可观察到的颗粒属性的方法的示例包括RMM命令的结果,以及内存访问是否产生故障。
下表中总结了一个颗粒体的属性。
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执行上下文(REC)的概念。
Realm执行上下文(REC)是一个与领域VPE相关联的R-EL0和1执行上下文。
REC对象是一种RMM数据结构,它是用来存储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字段串联生成的无符号整数值:
index = Aff3:Aff2:Aff1:Aff0[3:0]
这一点如下表所示。
REC MPIDR值的Aff0[7:4]是RES0字段,以便与GICv3兼容。
当在一个Realm中创建第n个REC时,主机需要使用与REC索引n对应的MPIDR。
允许的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.