【第二部分:结构】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.mzph.cn/news/163845.shtml

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

相关文章

洞悉今日,把握明日:咨询公司的关键策略揭秘

在快节奏且充满不确定性的商业环境中,能够洞悉当前市场动态并预测未来趋势的企业更有可能获得成功。咨询公司在这个过程中扮演着关键角色,本文将探讨咨询公司如何帮助企业洞悉现状并把握未来趋势,以及他们运用的关键策略。 咨询公司的市场洞察…

百度地图,地市区域描边

描边首先需要各个点的经纬度数据 json数据下载 直接复制粘贴进入页面ctrls保存就可以了。 如果需要某省中的各个地市描边可以点击这个省的进行下载,这里以山东为例,我是先下载了山东的json数据,但是发现只有山东省下各个市的描边,于是又下了中…

Mac下载的软件显示文件已损坏,如何解决文件已损坏问题,让文件可以正常运行

Mac下载的软件显示文件已损坏,如何解决文件已损坏问题,让文件可以正常运行 设备/引擎:Mac(11.6)/Mac Mini 开发工具:终端 开发需求:让显示已损坏的文件顺利安装到电脑 大家肯定都遇到过下载…

ESP32 MicroPython 颜色及二维码识别⑫

ESP32 MicroPython 颜色及二维码识别⑫ 1、颜色识别2、二维码识别 1、颜色识别 使用AI颜色识别功能,可以实现颜色辨别、颜色追踪等应用。颜色识别模型内置有9种常见的颜色识别和一种颜色学习识别模式。他们分别是: ai.COLOR_RED 表示识别红色 ai.COLOR…

【Linux】关系运算符、shell判断脚本执行时是否有传参、判断文件/文件夹是否存在、判断字符串是否相等、判断上个命令执行是否正常、判断字符串是否为空

🦄 个人主页——🎐个人主页 🎐✨🍁 🪁🍁🪁🍁🪁🍁🪁🍁 感谢点赞和关注 ,每天进步一点点!加油!&…

全网最详细的安装pytorch GPU方法,一次安装成功!!包括安装失败后的处理方法!

文章目录 前提---查看是否有NVIDIV英伟达显卡【笑哭】一、查看电脑的显卡驱动版本方法一:在cmd命令窗口中输入nvidia-smi,可以发现版本为12.2方法2:点击NVIDIA控制面板→系统信息 二、安装CUDA方法1: 在pytorch官网https://pytorc…

Redis高可用之主从复制及哨兵模式

一、Redis的主从复制 1.1 Redis主从复制定义 主从复制是redis实现高可用的基础,哨兵模式和集群都是在主从复制的基础之上实现高可用; 主从复制实现数据的多级备份,以及读写分离(主服务器负责写,从服务器只能读) 1.2 主从复制流…

学习Python和深度学习基础

1. Python基础知识 学习Python的基本语法、数据类型、控制流等基础知识。掌握常用的Python库,如NumPy和Pandas,它们在深度学习中经常被使用。 2. 深度学习基础 了解深度学习的基本概念,包括神经网络、前向传播、反向传播等。学习深度学习框…

Disasm 示例程序改写和适配

Disasm 示例程序改写和适配 简介 用途 可用于反汇编x86的二进制汇编文件&#xff0c;展示出来内部的反汇编原理和流程。原由 最近在看<<C 反汇编与逆向分析技术揭秘>>这本书籍&#xff0c;在第一张的简介中我们可以看到ProViem这个反汇编开源工具的内容&#x…

无线收发器芯片Si24R1 兼容替代NRF24L01

Si24R1是一款工作在2.4-2.5GHz世界通用ISM频段的单片无线收发器芯片。无线收发器包括&#xff1a;频率发生器、集成嵌入式ARQ基带协议引擎、功率放大器、晶体振荡器调制器、解调器。输出功率频道选择和协议的设置可以通过SPI接口进行设置。是目前2.4G无线射频芯片中&#xff0c…

Java 文件处理工具类详解

在软件开发中,文件处理是一个常见的任务,我们经常需要读取、写入和管理文件。为了更便捷地处理文件相关操作,我们编写了一个 FileUtils 工具类,提供了一些有用的文件处理方法。 工具类介绍 FileUtils 工具类包含了一些常用的文件处理方法,主要功能如下: 获取统一的文件…

Git本地库操作

对本地库的操作很少&#xff0c;我们学习1~6节即可&#xff0c;其他了解下。我们可以在idea中完成对本地库还有远程库的操作&#xff0c;可视化界面用起来更加舒适而且也不会混淆。 1. Git概述 Git 是一个免费的、开源的分布式版本控制系统&#xff0c;可以快速高效地处理从小…

[个人笔记] Windows配置OpenSSH免密连接

Windows - 运维篇 第七章 Windows配置OpenSSH免密连接 Windows - 运维篇系列文章回顾Windows配置OpenSSH免密连接参考来源 系列文章回顾 第一章 迁移WinSrv系统到虚拟机 第二章 本地安全策略xcopy实现实时备份文件夹内容 第三章 利用cmd自带的icacls命令导出文件的ACL权限 第四…

JavaScript启动本地应用程序

JavaScript调起本地应用程序 以下内容&#xff0c;自定义部分我也还未经过实际验证&#xff0c;酌情查看。 文章目录 JavaScript调起本地应用程序确定协议调用协议传参自定义写入协议获取参数 在浏览器中通过 JavaScript调起本地应用程序的一个可行方法就是 通过协议调起。 …

git 文件被莫名其妙的或略且无论如何都查不到哪个.gitignore文件忽略的

先说解决办法&#xff1a;git check-ignore -v [文件路径] 这个命令会返回一个忽略规则&#xff0c;以及该规则在哪个文件中定义的&#xff0c;该规则使得指定的文件被忽略。 1.遇到的问题 同项目组&#xff0c;其他同学都可以正常的提交.meta文件&#xff0c;我的提交就出现以…

Oracle通过MyBatis执行批量插入与更新问题

最近看一个老项目&#xff0c;使用的Oracle数据库&#xff0c;发现要使用MyBatis执行批量操作还是不太一样。 下面我们来看一下&#xff0c;Oracle数据库&#xff0c;如何使用MyBatis来批量插入和更新。 批量插入 因为Oracle和MySQL的insert还不太一样&#xff0c;Oracle不能…

canal本地安装和使用

1、组件版本 canal.deployer-1.1.7 kafka_2.13-2.6.0 jdk8 apache-zookeeper-3.6.0-bin mysql5.7 2、解压canal.deployer-1.1.7 2.1、修改canal.properties配置文件 ##改为kafka canal.serverModekafka## 改为instance canal.destinations instance## 改为true&#x…

STM32——独立看门狗

文章目录 一、看门狗基础介绍&#xff08;一&#xff09;看门狗概述&#xff1a;&#xff08;二&#xff09;看门狗的作用&#xff1a;&#xff08;三&#xff09;看门狗的原理&#xff1a;&#xff08;四&#xff09;为什么需要使用看门狗来提高系统的可靠性&#xff1a;&…

Linux 中的 rm 命令及示例

Linux 中的 rm 命令及示例 rm命令是Linux中最常见、最基础的命令之一。即使您对 Linux 的使用经验有限&#xff0c;您也很可能听说过它。该命令的主要目的是删除文件和目录。使用此命令删除文件和目录无法撤消。 这意味着您应该谨慎使用此命令&#xff0c;因为如果没有备份&am…