目錄
- 概念
- 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.