Intel SGX(3)——處理器


enclave 創建

度量

  • enclave 度量:每個 enclave 都由其屬性及其頁面的位置、內容和保護信息的散列表示。具有相同散列的兩個 enclave 是相同的。該度量稱為 MRENCLAVE,用於檢查 enclave 的完整性。
  • 簽名度量:每個 enclave 由其作者進行簽名。 MRSIGNER 包含作者公鑰的哈希值。 MRENCLAVE 和 MRSIGNER 是使用 SHA-256 哈希函數生成的。

數據結構

  • EINIT Token Structure (EINITTOKEN):EINIT 指令使用 EINITTOKEN 數據結構來確認是否允許運行 enclave。它包含 enclave 的屬性、哈希值和簽名者身份,使用通過 Launch Key 執行的 HMAC 進行身份驗證。
  • Enclave Signature Structure (SIGSTRUCT):每個 enclave 都關聯一個 SIGSTRUCT 結構,該結構由其作者簽名並包含 enclave 度量、簽名者公鑰、版本號(ISV,反映安全級別)和產品標識符(ISVPRODID,以區分來自同一作者的 enclave)。它允許確保 enclave 未被修改,然后使用不同的密鑰重新簽名。

指令集

  • ECREATE:該指令實例化一個新的 enclave,定義其地址空間和信任根,這些信息存儲在新分配的SECS 中。
  • EADD:該指令允許向 enclave 添加一個新的頁面。操作系統全權負責選擇頁面及其內容,EPCM 條目的初始化信息表示頁面類型及其保護。
  • EEXTEND:該指令允許以 256 字節的塊將頁面內容添加到 enclave 度量中,必須調用 16 次才能將完整的頁面添加到度量中。
  • EINIT:該指令在初始化 enclave 之前檢查其是否對應於它的 EINITTOKEN(相同的度量和屬性)。它還檢查 token 是否使用 launch key 簽名。
  • EREMOVE:該指令從 enclave 中永久刪除一個頁面。

 

 說明

  1. 應用程序請求將其 enclave 加載到內存中
  2. ECREATE 指令創建並填充 SECS 結構
  3. 使用 EADD 指令將每個頁面加載到受保護的內存中
  4. 使用 EEXTEND 指令將每個頁面添加到 enclave 度量中
  5. EINIT 指令完成 enclave 創建

 

enclave 進入和退出

指令集

  • EENTER:該指令將控制權從應用程序轉移到 enclave 內的預定位置。它檢查 TCS 是否空閑並清除 TLB 條目,然后將處理器置於 enclave 模式並保存 RSP/RBP 和 XCR0 寄存器。最后,它禁用 Precise Event Based Sampling (PEBS) 以使 enclave 執行看起來像一個巨大的指令。
  • EEXIT:該指令將進程放回其原始模式並清除位於 enclave 內的地址的 TLB 條目。處理器控制權被轉移到位於應用程序內 RBX 寄存器指定的地址,並且釋放 TCS 結構。enclave 需要在退出之前清除其寄存器以防止數據泄漏。

說明

  1. EENTRY 指令被執行
  2. 保存應用程序上下文
  3. 將處理器切換到 enclave 模式
  4. EEXIT 指令被執行
  5. 將處理器切換到 normal 模式

 

中斷處理


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM