1. 程式人生 > 其它 >Intel SGX(4)——特性

Intel SGX(4)——特性

密封

指令集

EGETKEY:enclave 使用此指令來訪問平臺提供的各種不同金鑰。每個金鑰啟用不同的操作(密封、證明)。

說明

當一個 enclave 被例項化時,它的程式碼和資料被保護免被外部訪問。但是當它停止時,它的所有資料都將丟失。密封是一種將資料安全地儲存在 enclave 之外的方法,例如在硬碟驅動器上。enclave 必須使用 EGETKEY 指令檢索其密封金鑰,它使用此金鑰來加密並確保其資料完整性,使用的演算法由 enclave 作者選擇。

  • 使用 Enclave 識別符號

密封可以使用 enclave 標識來完成。此時基於 MRENCLAVE 的值進行金鑰派生,兩個不同的 enclave 具有不同的金鑰,同一個 enclave 的兩個版本也將有不同的金鑰,這會阻止資料的本地遷移。

  • 使用簽名者識別符號

也可以使用簽名者身份識別符號進行密封。這個金鑰派生是基於 MRSIGNER 的值,兩個不同的 enclave 仍然具有不同的金鑰,但是一個 enclave 的兩個版本共享同一個金鑰並且可以讀取密封資料。如果多個 enclave 使用相同的金鑰進行簽名,則它們都可以讀取彼此的資料。

  • 安全版本號 (SVN)

不允許舊版本的 enclave 讀取新版本的 enclave 密封的資料。為了防止它,使用了安全版本號 (SVN)。這是一個計數器,在每次更新影響 enclave 安全性後遞增。使用 SVN 派生金鑰的方式是,enclave 可以檢索與當前或較舊的安全級別相對應的金鑰,但不能檢索較新的金鑰。

證明

資料結構

  • Key Request (KEYREQUEST):KEYREQUEST 結構用作 EGETKEY 指令的輸入。它選擇要獲取哪一個金鑰,以及派生金鑰可能需要的其他引數。
  • Report Target Info (TARGETINFO):TARGETINFO 結構用作 EREPORT 指令的輸入。它用來標識哪一個 enclave(雜湊和屬性)能夠驗證 CPU 生成的 REPORT。
  • Report (REPORT):REPORT 結構是 EREPORT 指令的輸出。它包含 enclave 的屬性、度量、簽名者身份和一些在源和目標 enclave 之間共享的使用者資料。處理器使用 Report Key 對該結構執行 MAC 操作。

指令集

EREPORT:enclave 使用此指令生成包含與它有關的多個資訊的 REPORT 結構,並使用目標 enclave 的 Report Key 進行身份驗證。

說明

enclave 程式碼和資料在初始化之前是純文字的。雖然在技術上 ELF 檔案中的 sections 是可以加密的,但不能預先安裝解密金鑰(或者它不會提供任何額外的安全性)。祕密必須來自外部,可能是金鑰和敏感資料。enclave 必須能夠向第三方證明它是可信的(未被篡改)並在合法平臺上執行。

存在兩種型別的Attestation:

local attestation:同一平臺的兩個 enclave 之間的證明過程

  1. enclave A 和 enclave B 之間必須已經建立了通訊通道,enclave A 使用它來獲取 enclave B 的 MRENCLAVE
  2. enclave A 使用 B 的 MRENCLAVE 呼叫 EREPORT 為後者生成已簽名的 report 資訊
  3. enclave B 呼叫 EGETKEY 來檢索其 Report Key 並驗證 EREPORT 結構的 MAC。如果有效,則 enclave 是預期內的,並執行在合法的平臺上

remote attestation:enclave 和不在平臺上的第三方之間的證明過程

remote attestation 需要一個稱為 Quoting Enclave (QE) 的架構 enclave,該 enclave 對 REPORT(本地可驗證)進行驗證,並使用一個特殊金鑰 Provisioning Key對其簽名將其轉換為 QUOTE(遠端可驗證)。

  1. 一開始,enclave 通知應用程式它需要位於平臺外部的祕密。該應用程式與伺服器建立安全通訊。伺服器以挑戰作為響應,用來證明執行的 enclave 未被篡改,並且它執行的平臺是合法的。
  2. 應用程式給出 Quoting Enclave 識別符號,和伺服器發出的對其 enclave 的挑戰
  3. enclave 生成一個清單,其中包括挑戰應答和一個臨時公鑰,稍後將使用該公鑰來保護伺服器和 enclave 之間的通訊。它生成包含在 EREPORT 指令的使用者資料部分中的清單的雜湊。EREPORT指令為 Quoting Enclave 生成 REPORT結構,將清單與 enclave 聯絡起來。 enclave 將 REPORT 傳遞給應用程式。
  4. 應用程式將 REPORT 傳輸到 Quoting Enclave 進行驗證和簽名
  5. Quoting Enclave使用 EGETKEY 指令檢索其 Report Key 並驗證 REPORT,它建立 QUOTE 結構並在將其返回給應用程式之前使用其Provisioning Key 對其進行簽名
  6. 應用程式將 QUOTE 和關聯的清單傳送到伺服器進行驗證
  7. 伺服器使用英特爾提供的 attestation 服務來驗證 QUOTE 簽名。然後它使用來自 QUOTE 使用者資料的雜湊檢查清單完整性;最後,它確保清單包含對挑戰的預期答案。