分享方式:


宣告集

在使用 Microsoft Azure 證明來證明記憶體保護區的程序中,所產生的宣告可分為這些類別:

  • 傳入宣告:剖析證明證據之後,Microsoft Azure 證明產生的宣告。 原則作者可以使用這些宣告在自訂原則中定義授權規則。
  • 傳出宣告:由 Azure 證明產生且包括在證明權杖中的宣告。
  • 屬性宣告:由 Azure 證明以輸出形式建立的宣告。 其中包含所有代表證明權杖屬性的宣告,例如報表的編碼方式、報表的有效期間等等。

連入宣告

SGX 證明

原則作者用來在 SGX 證明原則中定義授權規則的宣告:

  • x-ms-sgx-is-debuggable:布林值,指出記憶體保護區是否已啟用偵錯。

    在啟用或停用偵錯的情況下都可以載入 SGX 記憶體保護區。 當旗標在記憶體保護區中設定為 true 時,其會啟用記憶體保護區程式碼的偵錯功能,其中包括存取記憶體保護區記憶體的能力。 因此,建議只針對開發目的將旗標設定為 true。 如果在實際執行環境中啟用,則不會保留 SGX 安全性保證。

    Azure 證明使用者可以使用證明原則來驗證是否已停用 SGX 記憶體保護區的偵錯。 新增原則規則之後,當惡意使用者開啟偵錯支援以取得記憶體保護區內容的存取權時,證明就會失敗。

  • x-ms-sgx-product-id:整數值,指出 SGX 記憶體保護區的產品識別碼。

    記憶體保護區作者會將產品識別碼指派給每一個記憶體保護區。 產品識別碼可讓記憶體保護區作者區分出使用相同 MRSIGNER 簽署的記憶體保護區。 客戶可以將驗證規則新增至證明原則,以檢查其是否使用預期的記憶體保護區。 如果記憶體保護區的產品識別碼不符合記憶體保護區作者所發行的值,證明就會失敗。

  • x-ms-sgx-mrsigner:字串值,其能識別 SGX 記憶體保護區的作者。

    MRSIGNER 是記憶體保護區作者公開金鑰的雜湊,其與用來簽署記憶體保護區二進位檔案的私密金鑰相關聯。 透過證明原則驗證 MRSIGNER,客戶可以驗證受信任的二進位檔案是否在記憶體保護區內執行。 當原則宣告不符合記憶體保護區作者的 MRSIGNER 時,表示記憶體保護區二進位檔案未由受信任的來源簽署,且證明會失敗。

    當記憶體保護區作者基於安全性因素想要輪替 MRSIGNER 時,必須先更新 Azure 證明原則,以支援新的和舊的 MRSIGNER 值,才能更新二進位檔案。 否則,授權檢查會失敗,導致證明失敗。

    證明原則必須使用下列格式來更新。

    金鑰輪替之前

      version= 1.0;
      authorizationrules 
      {
      [ type=="x-ms-sgx-is-debuggable", value==false]&&
      [ type=="x-ms-sgx-mrsigner", value=="mrsigner1"] => permit(); 
      };
    

    金鑰輪替期間

      version= 1.0;
      authorizationrules 
      {
      [ type=="x-ms-sgx-is-debuggable", value==false]&&
      [ type=="x-ms-sgx-mrsigner", value=="mrsigner1"] => permit(); 
      [ type=="x-ms-sgx-is-debuggable", value==false ]&& 
      [ type=="x-ms-sgx-mrsigner", value=="mrsigner2"] => permit(); 
      };
    

    金鑰輪替之後

      version= 1.0;
      authorizationrules 
      { 
      [ type=="x-ms-sgx-is-debuggable", value==false]&& 
      [ type=="x-ms-sgx-mrsigner", value=="mrsigner2"] => permit(); 
      };
    
  • x-ms-sgx-mrenclave:字串值,其能識別載入記憶體保護區記憶體中的程式碼和資料。

    MRENCLAVE 是可用來驗證記憶體保護區二進位檔案的其中一個記憶體保護區測量。 其為在記憶體保護區內執行之程式碼的雜湊。 測量會隨著記憶體保護區二進位程式碼的每個變更而變更。 透過證明原則驗證 MRENCLAVE,客戶可以驗證預定的二進位檔案是否在記憶體保護區內執行。 不過,由於 MRENCLAVE 預期會隨著對現有程式碼進行任何簡單修改而經常變更,因此建議在證明原則中使用 MRSIGNER 驗證來驗證記憶體保護區二進位檔案。

  • x-ms-sgx-svn:整數值,指出 SGX 記憶體保護區的安全性版本號碼

    記憶體保護區作者會將安全性版本號碼 (SVN) 指派給 SGX 記憶體保護區的每個版本。 在記憶體保護區程式碼中發現安全性問題時,記憶體保護區作者會在弱點修正後將 SVN 值遞增。 若要避免與不安全的記憶體保護區程式碼互動,客戶可以將驗證規則新增至證明原則。 如果記憶體保護區程式碼的 SVN 不符合記憶體保護區作者所建議的版本,證明就會失敗。

這些宣告會被視為已淘汰,但受到完全支援,且未來將繼續包括。 建議使用未淘汰的宣告名稱:

已取代的宣告 建議的宣告
$is-debuggable x-ms-sgx-is-debuggable
$product-id x-ms-sgx-product-id
$sgx-mrsigner x-ms-sgx-mrsigner
$sgx-mrenclave x-ms-sgx-mrenclave
$svn x-ms-sgx-svn

TPM 證明

原則作者用來在 TPM 證明原則中定義授權規則的宣告:

  • aikValidated:布林值,包含證明識別金鑰 (AIK) 憑證是否已驗證的資訊。
  • aikPubHash:包含 base64 的字串 (SHA256(DER 格式的 AIK 公開金鑰))。
  • tpmVersion:包含信賴平台模組 (TPM) 主要版本的整數值。
  • secureBootEnabled:布林值,指出是否已啟用安全開機。
  • iommuEnabled:布林值,指出是否已啟用輸入輸出記憶體管理單位 (Iommu)。
  • bootDebuggingDisabled:布林值,指出是否已停用開機偵錯。
  • notSafeMode:布林值,指出 Windows 是否在安全模式下執行。
  • notWinPE:布林值,指出 Windows 是否在 WinPE 模式下執行。
  • vbsEnabled:布林值,指出是否已啟用 VBS。
  • vbsReportPresent:布林值,指出是否可以使用 VBS 記憶體保護區報表。

VBS 證明

除了 TPM 證明原則宣告之外,原則作者可以使用這些宣告在 VBS 證明原則中定義授權規則:

  • enclaveAuthorId:字串值,包含記憶體保護區作者識別碼 (記憶體保護區主要模組的作者識別碼) 的 Base64Url 編碼值。
  • enclaveImageId:字串值,包含記憶體保護區映像識別碼 (記憶體保護區主要模組的映像識別碼) 的 Base64Url 編碼值。
  • enclaveOwnerId:字串值,包含記憶體保護區擁有者識別碼 (記憶體保護區擁有者的識別碼) 的 Base64Url 編碼值。
  • enclaveFamilyId:字串值,包含記憶體保護區系列識別碼的 Base64Url 編碼值。 記憶體保護區主要模組的系列識別碼。
  • enclaveSvn:整數值,包含記憶體保護區主要模組的安全性版本號碼。
  • enclavePlatformSvn:整數值,包含記憶體保護區裝載所在平台的安全性版本號碼。
  • enclaveFlags:enclaveFlags 宣告是一個整數值,其中包含描述記憶體保護區執行階段原則的旗標。

傳出宣告

適用於所有證明類型

Azure 證明會在所有證明類型的證明權杖中包括這些宣告:

  • x-ms-ver:JWT 結構描述版本 (預期是 "1.0")。
  • x-ms-attestation-type:代表證明類型的字串值。
  • x-ms-policy-hash:Azure 證明評估原則的雜湊,計算為 BASE64URL(SHA256(UTF8(BASE64URL(UTF8(policy text)))))。
  • x-ms-policy-signer:JSON 物件,其中包含代表客戶用來簽署其原則之金鑰的 "jwk" 成員,適用於客戶上傳已簽署的原則時。
  • x-ms-runtime:包含在證明環境內定義及產生之「宣告」的 JSON 物件,這是「記憶體保護區保留資料」概念的特製化,其中「記憶體保護區保留資料」會格式化為格式正確 JSON 的 UTF-8 編碼。
  • x-ms-inittime:包含在證明環境的初始化期間定義及驗證之「宣告」的 JSON 物件。

這些宣告名稱會從 IETF JWT 規格 (英文) 使用。

  • "jti" (JWT 識別碼) 宣告:JWT 的唯一識別碼。
  • "Iss" (簽發者) 宣告:簽發 JWT 的主體。
  • "iat" (簽發時間) 宣告:簽發 JWT 的時間。
  • "exp" (到期時間) 宣告:到期時間,晚於此時間後便不得接受 JWT 以進行處理。
  • "nbf" (生效時間) 宣告:生效時間,在此時間之前不得接受 JWT 以進行處理。

這些宣告名稱會從 IETF EAT 草稿規格 (英文) 使用:

  • "Nonce 宣告" (nonce):用戶端所提供之選擇性 nonce 值的未轉換直接複本。

下列宣告會被視為已淘汰,但受到完全支援,且未來將繼續包括。 建議使用未淘汰的宣告名稱。

已取代的宣告 建議的宣告
ver x-ms-ver
tee x-ms-attestation-type
policy_hash x-ms-policy-hash
maa-policyHash x-ms-policy-hash
policy_signer x-ms-policy-signer
rp_data nonce

SGX 證明

這些宣告是由服務針對 SGX 產生且包括在證明權杖中:

  • x-ms-sgx-is-debuggable:布林值,指出記憶體保護區是否已啟用偵錯。
  • x-ms-sgx-product-id:SGX 記憶體保護區的產品識別碼值。
  • x-ms-sgx-mrsigner:引用中 MRSIGNER 欄位的十六進位編碼值。
  • x-ms-sgx-mrenclave:引用中 MRSIGNER 欄位的十六進位編碼值。
  • x-ms-sgx-svn:引用中已編碼的安全性版本號碼。
  • x-ms-sgx-ehd:記憶體保護區保留的資料,格式化為 BASE64URL (記憶體保護區保留資料)。
  • x-ms-sgx-collateral:描述用來執行證明之附隨品的 JSON 物件。 x-ms-sgx-collateral 宣告的值是具有下列索引鍵/值組的巢狀 JSON 物件:
    • qeidcertshash:簽發憑證的引用記憶體保護區 (QE) 身分識別的 SHA256 值。
    • qeidcrlhash:簽發憑證 CRL 清單的 QE 身分識別的 SHA256 值。
    • qeidhash:QE 身分識別附隨品的 SHA256 值。
    • quotehash:評估引用的 SHA256 值。
    • tcbinfocertshash:TCB 資訊簽發憑證的 SHA256 值。
    • tcbinfocrlhash:TCB 資訊簽發憑證 CRL 清單的 SHA256 值。
    • tcbinfohash:TCB 資訊附隨品的 SHA256 值。
  • x-ms-sgx-report-data:SGX 記憶體保護區報告資料欄位 (通常是 x-ms-sgx-ehd 的 SHA256 雜湊)。

這些宣告只會出現在針對 Intel® Xeon® 可調整處理器型伺服器平台所產生的證明權杖中。 如果 SGX 記憶體保護區未設定金鑰分離和共用支援 (英文),則不會顯示宣告。 您可以在這裡 (英文) 找到宣告定義:

  • x-ms-sgx-config-id
  • x-ms-sgx-config-svn
  • x-ms-sgx-isv-extended-product-id
  • x-ms-sgx-isv-family-id

這些宣告會被視為已淘汰,但受到完全支援,且未來將繼續包括。 建議使用未淘汰的宣告名稱:

已取代的宣告 建議的宣告
$is-debuggable x-ms-sgx-is-debuggable
$product-id x-ms-sgx-product-id
$sgx-mrsigner x-ms-sgx-mrsigner
$sgx-mrenclave x-ms-sgx-mrenclave
$svn x-ms-sgx-svn
$maa-ehd x-ms-sgx-ehd
$aas-ehd x-ms-sgx-ehd
$maa-attestationcollateral x-ms-sgx-collateral

SEV-SNP 證明

SevSnpVm 證明類型也支援下列宣告:

  • x-ms-sevsnpvm-authorkeydigest:作者簽署金鑰的 SHA384 雜湊。
  • x-ms-sevsnpvm-bootloader-svn:AMD 開機載入器安全性版本號碼 (SVN)。
  • x-ms-sevsnpvm-familyId:主機相容性層 (HCL) 系列識別字串。
  • x-ms-sevsnpvm-guestsvn:HCL 安全性版本號碼 (SVN)。
  • x-ms-sevsnpvm-hostdata:在 VM 啟動時由主機定義的任意資料。
  • x-ms-sevsnpvm-idkeydigest:身分識別簽署金鑰的 SHA384 雜湊。
  • x-ms-sevsnpvm-imageId:HCL 映像識別。
  • x-ms-sevsnpvm-is-debuggable:布林值,指出是否已啟用 AMD SEV-SNP 偵錯。
  • x-ms-sevsnpvm-launchmeasurement:已啟動之客體映像的測量。
  • x-ms-sevsnpvm-microcode-svn:AMD 微碼安全性版本號碼 (SVN)。
  • x-ms-sevsnpvm-migration-allowed:布林值,表示是否已啟用 AMD SEV-SNP 移轉支援。
  • x-ms-sevsnpvm-reportdata:由 HCL 傳遞以包括在報表中的資料,以確認傳輸金鑰和 VM 設定正確無誤。
  • x-ms-sevsnpvm-reportid:客體的報表識別碼。
  • x-ms-sevsnpvm-smt-allowed:布林值,指出主機上是否已啟用 SMT。
  • x-ms-sevsnpvm-snpfw-svn:AMD 韌體安全性版本號碼 (SVN)。
  • x-ms-sevsnpvm-tee-svn:AMD 受信任執行環境 (TEE) 安全性版本號碼 (SVN)。
  • x-ms-sevsnpvm-vmpl:產生此報告的 VMPL (針對 HCL 為 0)。

TPM 和 VBS 證明

  • cnf (確認):"cnf" 宣告會用來識別擁有權證明金鑰。 如 RFC 7800 中所定義,確認宣告包含已證明之記憶體保護區金鑰的公開部分,並以 JSON Web 金鑰 (JWK) 物件 (RFC 7517) 表示。
  • rp_data (信賴憑證者資料):在要求中指定的信賴憑證者資料 (如果有的話),由信賴憑證者當做 nonce 使用,以保證報告的有效期限。 只有在有 rp_data 時,才會新增 rp_data。

屬性宣告

TPM 和 VBS 證明

  • report_validity_in_minutes:表示權杖有效時間長度的整數宣告。
    • 預設值 (時間):一天 (以分鐘表示)。
    • 最大值 (時間):一年 (以分鐘表示)。
  • omit_x5c:布林值宣告,指出 Azure 證明是否應省略用來提供服務真確性證明的憑證。 若為 true,則會將 x5t 新增至證明權杖。 如果為 false (預設值),則會將 x5c 新增至證明權杖。

下一步