1. 程式人生 > 其它 >Intel SGX(2)——記憶體

Intel SGX(2)——記憶體

enclave page cache(EPC)

enclave 程式碼和資料放置在稱為 enclave 頁面快取 (EPC) 的特殊儲存區域中。該記憶體區域使用記憶體加密引擎 (MEE) 進行加密,這是一種新的專用晶片。記憶體總線上的外部讀取只能觀察到加密資料。頁面僅在物理處理器核心內時才被解密。金鑰在啟動時生成並存儲在 CPU 中。

EPC 機制擴充套件了傳統的頁面檢查,以防止外部訪問 EPC 頁面。

Enclave Page Cache Map(EPCM)

Enclave Page Cache Map (EPCM) 資料結構用於儲存頁面狀態。它位於受保護的記憶體中,其大小限制了 EPC 的大小(由 BIOS 設定,最大 128MB)。EPCM 包含了每個頁面的配置、許可權和型別。

記憶體管理

資料結構

  • Page Information (PAGEINFO):用作 EPC 管理指令的引數以引用頁面。其包含線性地址、虛擬地址和指向 SECINFO 及 SECS 資料結構的指標。
  • Security Information (SECINFO):用於儲存頁面元資料,如訪問許可權(讀、寫、執行)和型別(SECS、TCS、REG 或 VA)。
  • Paging Crypto MetaData (PCMD):用來跟蹤與被放逐頁面關聯的元資料,它包含頁面所屬 enclave 的標識,一個指向 SECINFO 結構的指標和一個 MAC 值。
  • Version Array (VA):用於儲存從 EPC 放逐出的頁面的版本號。它是一種特殊型別的頁面,包含 512 個 8 位元組的插槽來儲存版本號。

指令

  • EPA:此指令分配一個 4KB 記憶體頁面,其中將包含頁面版本號陣列 (VA) 以防止重放攻擊。每個元素的長度為 64 位。
  • EBLOCK:該指令阻塞所有對準備放逐的頁面的訪問。以後對該頁面的所有訪問都將導致頁面錯誤(“頁面阻塞”)。
  • ETRACK:該指令從 EPC 中放逐一個頁面。該頁面必須已被正確準備:它必須被阻塞並且不能被 TLB 引用。在將其寫入外部儲存器之前,對頁面進行加密,並生成版本號和元資料,並執行最終的 MAC。
  • ELDB、ELDU:該指令將先前被放逐的頁面載入到記憶體中,無論是否處於阻塞狀態。它檢查元資料的 MAC、版本號(來自相應的 VA 條目)和頁面加密內容。如果驗證成功,則對頁面內容進行解密並放置在所選的 EPC 頁面中,並刪除相應的VA 條目。

解釋

EPC 記憶體由 BIOS 定義並且限制大小。SGX 有一種方法可以從 EPC 中刪除頁面,將其放置在未受保護的記憶體中,然後再將其恢復。由於 EPC 頁面管理指令可以加密頁面並生成額外的元資料,這樣頁面就保持了相同的安全屬性。直到所有引用該頁面的快取條目都從所有處理器邏輯核心中刪除後,才能刪除該頁面。內容以頁面粒度(4KB)匯出或匯入。

記憶體內容

  • SGX Enclave Control Structure (SECS):每個 enclave 都與一個 SECS 結構相關聯,該結構將包含其元資料(例如其雜湊和大小)。任何安全或非安全程式碼都無法訪問它,只能由處理器本身訪問。一旦例項化,它也是不可變的。
  • Thread Control Structure (TCS):每個 enclave 都與至少一個 TCS 結構相關聯,該結構指示進入 enclave 的執行點。由於 SGX 支援多執行緒,一個 enclave 可以有與 TCS 一樣多的活動執行緒。與 SECS 結構一樣,它只能由處理器訪問,並且也是不可變的。
  • Save State Area (SSA):每個 TCS 至少與一個 SSA 結構相關聯,該結構用於在異常和中斷處理期間儲存處理器的狀態。該資料結構在退出時被寫入,在恢復時被讀取。
  • Stack and Heap:每個 enclave 都可以使用其棧和堆。 RBP 和 RSP 暫存器在進入和退出時被儲存,但它們的值不會改變。堆不在內部處理,encalve 需要自己的分配器。