armv9的RME简介
引流關鍵詞: optee、ATF、TF-A、Trustzone、optee3.14、MMU、VMSA、cache、TLB、arm、armv8、armv9、TEE、安全、內存管理、頁表…
快速鏈接:
.
👉👉👉 個人博客筆記導讀目錄(全部) 👈👈👈
Arm 機密計算架構引入了 Realm Management Extension (RME) ,它支持稱為Realm的新型可證明隔離環境。該環境建立在 TrustZone Normal 和 Secure 世界之上,另外還有兩個世界,每個世界都有自己的安全狀態和專用的物理地址空間。RME 還允許內存在運行時在世界之間移動,而新硬件會檢查每個內存訪問,阻止世界之間的隔離邊界不允許的訪問。
安全狀態
RME 建立在 Arm TrustZone 技術之上。 TrustZone 是在 Armv6 中引入的,提供以下兩種安全狀體
- Secure state
- Non-Secure state
下圖顯示了 AArch64 中的兩個安全狀態以及通常在每個安全狀態中找到的軟件組件:
該架構將在安全狀態下運行的軟件與在非安全狀態下運行的軟件隔離開來狀態。這種隔離實現了一種軟件架構,其中受信任的代碼在安全狀態下運行,并且不受非安全狀態下的代碼的影響.
RME 擴展了這個模型,并提供了以下四種安全狀態:
- Secure state
- Non-secure state
- Realm state
- Root state
下圖顯示了啟用 RME 的 PE 中的安全狀態,以及這些安全狀態如何映射到異常級別:
維持現有的安全狀態,是提供了與現有信任區用例的向后兼容性。這些還可以升級用例,以利用RME添加的新特性,如dynamic內存分配。
Realm state構造受保護的執行環境,稱為Realm 。重要的是,RME擴展了TrustZone中引入的隔離模型。
該體系結構為以下狀態提供隔離:
- Non-secure 和 realm states隔離的安全狀態
- Non-secure and Secure states隔離的Realm狀態
這種隔離模型提供了一種軟件體系結構,在該體系結構中,軟件處于安全和可靠的狀態,各個狀態間相互不信任。
使用RME,EL3將脫離安全狀態并進入其自身的安全狀態(稱為root)。RME將EL3與所有其他安全狀態隔離開來。EL3承載平臺和初始引導代碼,因此必須由軟件在非安全、安全和安全領域中信任狀態。因為這些安全狀態彼此不信任,所以EL3必須在它自定義的安全狀態中。
2.1 Controlling the current Security state
當前安全狀態由異常級別和SCR_EL3的組合控制管理。
EL3現在是它自己的根安全狀態。在EL3中,安全狀態為始終為root,并且沒有其他異常級別可以處于root狀態。
當處于較低的異常級別(如異常級別0、異常級別1和異常級別2)時,安全狀態由SCR_EL3中的NS和NSE字段控制,如下表所示:
Root態沒有編碼。在異常級別3中,當前安全狀態始終為根,不考慮SCR_EL3。{NSE,NS}值。
在異常級別3中,SCR_EL3的當前值 {NSE,NS}用于控制某些操作。例如,在EL3發出轉換查找緩沖區(TLB)無效指令時,對于較低的異常級別來收,SCR_EL3 {NSE,NS} 用于控制操作應用的安全狀態。這里其實和之前SCR_EL3的原理類似,NS是在引入RME之前處理的。
2.2 Moving between Security states
在安全狀態之間移動的原則繼承自TrustZone。更改安全性狀態,執行必須通過EL3,如下圖所示:
圖中的更改安全狀態過程遵循以下步驟:
- 在Realm狀態和SCR_EL3中開始執行。{NSE,NS}設置為0b11。軟件執行一個SMC 同步指令,該指令導致異常被帶到異常級別EL3.
- 處理器進入EL3,現在處于根狀態,因為EL3始終處于根狀態,不過異常來自Realm域,SCR_EL3 {NSE,NS}擁有同樣的安全狀態。處于EL3的軟件更改SCR_EL3{NSE,NS}到所需安全狀態的對應值,并執行異常返回(ERET)。
- ERET導致從異常級別3退出。當離開異常級別3時,SCR_EL3 {NSE,NS}控制輸入的安全狀態。在此圖中,安全狀態為非安全狀態(Hypervisor)。
在vector registers、通用寄存器和系統絕大絕大多數寄存器存在一個副本。在安全狀態之間移動,以及保存和恢復寄存器上下文,是軟件的責任,而不是硬件的責任。保存和恢復此寄存器上下文的軟件是通過Monitor下軟件來完成(和ARM V8模式相同)。
3 Physical addresses
除了兩個安全狀態外,TrustZone還提供以下兩個PA空間:
- 安全的物理地址空間
- 非安全物理地址空間
這些單獨的PA空間構成信任區隔離保證的一部分。非安全狀態不能訪問安全PA空間中的地址。這種隔離意味著存在保密性和安全性,保證屬于安全狀態的數據的完整性。
RME擴展了該保證,以支持以下PA空間:
- 安全的物理地址空間
- 非安全物理地址空間
- Realm領域物理地址空間
- Root物理地址空間
架構限制了在每個安全狀態下可以看到哪些PA空間。下表顯示了在每個安全狀態下可以訪問的PA空間:
當文檔引用一個物理地址時,前綴用于標識所使用的地址空間, 例如:
- SP:0x8000表示安全PA空間中的地址0x8000
- NSP:0x8000表示非安全PA空間中的地址0x8000
- RLP:0x8000表示Realm域PA空間中的地址0x8000
- RTP:0x8000表示根PA空間中的地址0x8000
架構上,每個示例都是一個獨立的內存位置。這意味著SP:0x8000和RTP:0x8000被視為不同的物理位置。所有四個位置都可以存在于啟用RME的系統中,盡管在實踐中,這不太可能。
3.1 Virtual address spaces
為了支持新的安全狀態,RME為Realm引入了以下頁表轉換機制
-
Realm EL1&0翻譯機制
該機制包括兩個虛擬地址(VA)區域,類似于非安全區域EL1&0頁表機制。 這一頁表受制于第二階段頁表轉換 -
Realm領域異常級別2和0轉換機制
此機制包括兩個VA區域,類似于安全異常級別2和0頁表機制。 -
Realm領域異常級別2和2轉換機制
此機制包括單個VA區域,類似于安全異常級別2頁表機制。
下圖顯示了領域狀態轉換機制:
對于所有領域轉換機制,任何轉換為非安全物理地址的地址都是被視為永遠不會執行。
3.2 Root state translation regime
根狀態中僅存在異常級別3。這意味著根有一個單一的翻譯機制狀態,這是EL3頁表機制。這種頁表機制在RME之前就存在了,但以前被認為是安全狀態的一部分。
RME包含對EL33轉換機制的以下更改:
- 虛擬地址可以在四個物理地址空間中的任意一個空間轉換為物理地址
- 任何轉換為非安全、安全或領域物理地址的地址都被視為不執行
- MMU工作臺只能訪問根PA空間
- 當MMU在EL3禁用時,所有輸出地址都在根PA空間中
注:異常級別3繼續使用異常級別3頁表,該頁表具有一一對應VA空間特性。
3.3 Controlling output PAS
當通過MMU,轉換虛擬地址時,獲取對應的PA地址,由以下條件組合控制,包含:
- 當前的安全狀態
- 當前異常層級
- 頁表
- 系統寄存器
軟件可用的控件因頁表而異。現在我們來看看,在每個安全狀態和頁表的控制下。
3.4 Non-secure state translation regimes
下圖顯示了非安全頁表轉換機制的概述
非安全狀態只能訪問非安全PA空間。
在此圖中,TTD表示轉換表描述符(頁表)。
3.5 Secure state translation regimes
安全狀態可以訪問安全和非安全PA空間,如下圖所示:
對于安全EL1和0轉換機制中,NS bits 用于頁表Stage階段1轉換過程中。
在EL2,VTCR_EL2和VSTCR_EL2上被使用,用于映射每個IPA空間到公共PA空間。
注意:在安全狀態下,RME不會更改這些控制。
3.6 Realm state translation regimes
Realm機密領域狀態可以訪問機密領域和非安全PA空間,如下圖所示:
Realm領域EL0/1轉換機制具有單一的IPA空間。因此,數據中沒有NS位,用于EL0/1第一階段翻譯表條目商。
Realm領域階段2 TTD包括一個NS位,用于映射到Realm領域或非安全PAS。這這意味著,與安全狀態不同,領域狀態在第二階段需要體現在頁表上。
Realm領域EL2翻譯機制和領域EL0/2翻譯機制具有第一階段NS位,用于控制輸出PA空間。
TrustZone引入了轉換表項中的NS位,以允許安全狀態選擇對應輸出PA空間。在安全狀態下,NS位編碼如下:
- NS=0:安全
- NS=1:不安全
對于RME,NS字段也用于領域EL0/1第二階段和領域EL2/0第一階段的翻譯
- NS=0:realm
- NS=1:不安全
3.7 Root state translation regimes
根狀態可以訪問所有PA空間,如下圖所示:
異常級別3第一階段翻譯機制在翻譯表中有兩個位,NS和NSE,用于控制輸出PA空間的條目。這些編碼與用于 SCR_EL3 {NSE,NS},除了有根的編碼外,如下表所示:
3.8 Impact on TLBs and caches
TLBs緩存最近使用的翻譯。TLB條目需要記錄條目屬于哪個的頁表。在TLB查找期間,只有當條目中的翻譯制度與請求的翻譯制度匹配時,才能返回條目。這將防止一個安全狀態使用TLB,返回其他安全狀態的條目。
下表顯示了一個簡化TLB示例,記錄了翻譯制度:
類似地, cache line需要記錄關聯的PA空間,如下圖所示:
總結
以上是生活随笔為你收集整理的armv9的RME简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MMU关闭时Cache的缓存策略是怎样的
- 下一篇: csdn自定义模块backup