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

目录

  • 概念
    • Realm
      • 概述
      • Realm执行环境
        • Realm寄存器
        • Realm内存
        • Realm处理器功能
        • IMPDEF系统寄存器
      • Realm属性
      • Realm活性
      • Realm生命周期
        • 状态
        • 状态转换
      • Realm参数
      • Realm描述符
    • 颗粒Granule
      • 颗粒属性
      • 颗粒所有权
      • 颗粒生命周期
        • 状态
        • 状态转换
        • 颗粒抹除
    • Realm执行上下文
      • 概述
      • REC属性
      • REC指数和MPIDR值
      • REC生命周期
        • 状态
        • 状态转换
  • 参考文献

概念

本章介绍了以下是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:Aff0[3:0]

这一点如下表所示。

在这里插入图片描述
在这里插入图片描述
REC MPIDR值的Aff0[7: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.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/202236.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringMVC 基础知识

学习目标 掌握基于 SpringMVC 获取请求参数与响应 json 数据操作熟练应用基于 REST 风格的请求路径设置与参数传递能够根据实际业务建立前后端开发通信协议并进行实现基于 SSM 整合技术开发任意业务模块功能 1 SpringMVC 简介 1.1 概述 1.1.1 web程序开发流程 【执行过程】…

服务器中了elbie勒索病毒解决办法,elbie勒索病毒解密数据恢复

科技技术的不断发展,为企业的生产运营提供了极大便利,但网络安全威胁也不断增加,近期云天数据恢复中心陆续接到很多企业的求助,企业的服务器中了elbie勒索病毒,导致系统瘫痪,所有业务无法正常开展&#xff…

关于用css设置input输入框hover的时候的样式以及当input为disabled的时候,不要让hover样式生效

效果如果&#xff1a; 编辑状态下的时候&#xff1a; 只读状态下的时候&#xff1a; 代码如图&#xff1a; <input type"text" name"dataForm.exportCode" id"exportCodeItem" required :disabled"editDisabled" />input:not(…

20230511 Windows Ubuntu vscode remote-ssh 连接配置

参考 &#xff1a; VSCode SSH 连接远程ubuntu Linux 主机 VSCode通过Remote SSH扩展连接到内网Ubuntu主机 Ubuntu 安装 sudo apt-get install openssh-server vscode: 安装remote-ssh 插件 连接到服务器IP 免密登录的公钥密钥传递用filezillaUbuntu 和 Windows 文件互传 …

PostgreSQL (Hologres) 日期生成

PostgreSQL 生成指定日期下一个月的日期 &#xff08;在Hologres中&#xff0c;不支持递归查询&#xff09; SELECTto_char(T, YYYYMMDD)::int4 AS date_int,date(T) AS date_str,date_part(year, T)::int4 AS year_int,date_part(month, T)::int4 AS month_int,date_part(da…

【DevOps】Git 图文详解(八):后悔药 - 撤销变更

Git 图文详解&#xff08;八&#xff09;&#xff1a;后悔药 - 撤销变更 1.后悔指令 &#x1f525;2.回退版本 reset3.撤销提交 revert4.checkout / reset / revert 总结 发现写错了要回退怎么办&#xff1f;看看下面几种后悔指令吧&#xff01; ❓ 还没提交的怎么撤销&#x…

uniapp 打包后各静态资源加载失败的问题(背景图,字体等)

原因: 1.部署地址不在域名根目录下 解决办法(推荐办法2): 办法1.如果部署在域名的文件夹下(例如h5), 则运行的基础路径修改为/h5/ 且注意路由模式 办法2.不修改运行的基础路径(还是./), 将代码中涉及背景图(background-image)和字体资源的路径前统一加,如图:

2014年10月6日 Go生态洞察:Go在Google I/O和Gopher SummerFest的应用

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

【产品安全平台】上海道宁与Cybellum将整个产品安全工作流程整合到一个专用平台中,保持构建的互联产品的网络安全和网络合规性

Cybellum将 整个产品安全工作流程 整合到一个专用平台中 使设备制造商能够 保持他们构建的互联产品的 网络安全和网络合规性 产品安全性对 每个人来说都不一样 每个行业的系统、工作流程和 法规都存在根本差异 因此&#xff0c;Cybellum量身定制了 Cybellum的平台和技…

【开源】基于Vue和SpringBoot的创意工坊双创管理系统

项目编号&#xff1a; S 049 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S049&#xff0c;文末获取源码。} 项目编号&#xff1a;S049&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 管理员端2.2 Web 端2.3 移动端 三、…

一张图,了解美格智能高算力AI模组

美格智能高算力A模组&#xff0c;澎湃算力让AI触手可及&#xff01;

ElementPlusError: [ElOnlyChild] no valid child node found

突然发现页面报了一堆黄色的错误提示 查了下原来是这里导致的&#xff0c;只需要把v-if 挪到popover那层即可 解决

用好语言模型:temperature、top-p等核心参数解析

编者按&#xff1a;我们如何才能更好地控制大模型的输出? 本文将介绍几个关键参数&#xff0c;帮助读者更好地理解和运用 temperature、top-p、top-k、frequency penalty 和 presence penalty 等常见参数&#xff0c;以优化语言模型的生成效果。 文章详细解释了这些参数的作用…

java代码调用twitter-api用例实战

一、申请twitter开发者账号 首先先申请twitter开发者免费的API&#xff0c;要填写申请的内容&#xff0c;放心大胆地写&#xff0c;申请完&#xff0c;会提供免费的API接口。 以下是我申请到的三个免费API 申请完开始进行测试调用。 读官方文档账户认证那块&#xff1a;https…

.skip() 和 .only() 的使用

.skip() 和 .only() 的使用 说明 在做自动化测试中&#xff0c;跳过执行某些测试用例&#xff0c;或只运行某些指定的测试用例&#xff0c;这种情况是很常见的Cypress中也提供了这种功能 如何跳过测试用例 通过describe.skip() 或者 context.skip() 来跳过不需要执行的测试…

spark数据倾斜的解决思路

数据倾斜是&#xff1a;多个分区中&#xff0c;某个分区的数据比其他分区的数据多的多 数据倾斜导致的问题&#xff1a; 导致某个spark任务耗时较长&#xff0c;导致整个任务耗时增加&#xff0c;甚至出现OOM运行速度慢&#xff1a;主要发生在shuffle阶段&#xff0c;同样的k…

ajax请求方式处理

1、前置准备 1.1、SpringBoot项目下&#xff1a;写一个controller RestController public class TestController {RequestMapping("/yyy")public void test(HttpServletRequest request, HttpServletResponse response){String yang request.getParameter("y…

中职组网络安全B模块-渗透提权2

任务五&#xff1a;渗透提权2 任务环境说明&#xff1a; 仅能获取xxx的IP地址 用户名&#xff1a;test&#xff0c;密码&#xff1a;123456 访问服务器主机&#xff0c;找到主机中管理员名称&#xff0c;将管理员名称作为Flag值提交&#xff1b; Flag:doyoudoyoudo 访问服…

数组对象判重最佳实践

数组对象判重最佳实践 赶紧挣钱&#xff0c;回家过年… 1.问题回顾 deviceSelectedRow(row) {this.ElectricalPartList.push(row)}&#xff0c;在此方法中&#xff0c;ElectricalPartList需要多次push进去数据&#xff0c;但是row可能存在重复&#xff0c;如何判重呢&#xff…

从裸机启动开始运行一个C++程序(十三)

前序文章请看&#xff1a; 从裸机启动开始运行一个C程序&#xff08;十二&#xff09; 从裸机启动开始运行一个C程序&#xff08;十一&#xff09; 从裸机启动开始运行一个C程序&#xff08;十&#xff09; 从裸机启动开始运行一个C程序&#xff08;九&#xff09; 从裸机启动开…