Udostępnij za pośrednictwem


Zestawy oświadczeń

Oświadczenia wygenerowane w procesie zaświadczania enklaw przy użyciu usługi Microsoft Azure Attestation można podzielić na następujące kategorie:

  • Oświadczenia przychodzące: oświadczenia generowane przez firmę Microsoft Azure Attestation po przeanalizowaniu dowodów zaświadczania i mogą być używane przez autorów zasad do definiowania reguł autoryzacji w zasadach niestandardowych

  • Oświadczenia wychodzące: oświadczenia generowane przez Azure Attestation i uwzględnione w tokenie zaświadczania

  • Oświadczenia właściwości: oświadczenia utworzone jako dane wyjściowe przez Azure Attestation. Zawiera wszystkie oświadczenia reprezentujące właściwości tokenu zaświadczania, takie jak kodowanie raportu, czas trwania ważności raportu itd.

Oświadczenia przychodzące

Zaświadczenie SGX

Oświadczenia używane przez autorów zasad do definiowania reguł autoryzacji w zasadach zaświadczania SGX:

  • x-ms-sgx-is-debuggable: wartość logiczna wskazująca, czy debugowanie enklawy jest włączone, czy nie.

    Enklawy SGX można załadować z wyłączonym debugowaniem lub włączonym. Gdy flaga ma wartość true w enklawie, włącza funkcje debugowania dla kodu enklawy. Obejmuje to możliwość uzyskiwania dostępu do pamięci enklawy. Dlatego zaleca się ustawienie flagi na wartość true tylko w celach programistycznych. W przypadku włączenia w środowisku produkcyjnym gwarancje zabezpieczeń SGX nie zostaną zachowane.

    Azure Attestation użytkownicy mogą używać zasad zaświadczania, aby sprawdzić, czy debugowanie jest wyłączone dla enklawy SGX. Po dodaniu reguły zasad zaświadczanie zakończy się niepowodzeniem, gdy złośliwy użytkownik włączy obsługę debugowania w celu uzyskania dostępu do zawartości enklawy.

  • x-ms-sgx-product-id: wartość całkowita wskazująca identyfikator produktu enklawy SGX.

    Autor enklawy przypisuje identyfikator produktu do każdej enklawy. Identyfikator produktu umożliwia autorowi enklawy segmentowanie enklaw podpisanych przy użyciu tego samego elementu MRSIGNER. Dodając regułę weryfikacji w zasadach zaświadczania, klienci mogą sprawdzić, czy używają zamierzonych enklaw. Zaświadczenie zakończy się niepowodzeniem, jeśli identyfikator produktu enklawy nie jest zgodny z wartością opublikowaną przez autora enklawy.

  • x-ms-sgx-mrsigner: wartość ciągu, która identyfikuje autora enklawy SGX.

    MRSIGNER to skrót klucza publicznego autora enklawy, który jest skojarzony z kluczem prywatnym używanym do podpisywania pliku binarnego enklawy. Weryfikując mrSIGNER za pomocą zasad zaświadczania, klienci mogą sprawdzić, czy zaufane pliki binarne działają wewnątrz enklawy. Gdy oświadczenie zasad nie pasuje do mrSIGNER autora enklawy, oznacza to, że enklawa binarna nie jest podpisana przez zaufane źródło, a zaświadczenie kończy się niepowodzeniem.

    Gdy autor enklawy woli obracać element MRSIGNER ze względów bezpieczeństwa, należy zaktualizować zasady Azure Attestation w celu obsługi nowych i starych wartości MRSIGNER przed zaktualizowaniem plików binarnych. W przeciwnym razie sprawdzanie autoryzacji zakończy się niepowodzeniem, co spowoduje niepowodzenia zaświadczania.

    Zasady zaświadczania należy zaktualizować przy użyciu poniższego formatu.

    Przed rotacją kluczy

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

    Podczas rotacji kluczy

      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(); 
      };
    

    Po rotacji kluczy

      version= 1.0;
      authorizationrules 
      { 
      [ type=="x-ms-sgx-is-debuggable", value==false]&& 
      [ type=="x-ms-sgx-mrsigner", value=="mrsigner2"] => permit(); 
      };
    
  • x-ms-sgx-mrenclave: wartość ciągu, która identyfikuje kod i dane załadowane w pamięci enklawy.

    MRENCLAVE jest jednym z pomiarów enklawy, które mogą służyć do weryfikowania plików binarnych enklawy. Jest to skrót kodu uruchomionego wewnątrz enklawy. Pomiar zmienia się wraz ze każdą zmianą w kodzie binarnym enklawy. Weryfikując mrENCLAVE za pośrednictwem zasad zaświadczania, klienci mogą sprawdzić, czy zamierzone pliki binarne działają wewnątrz enklawy. Jednak ponieważ oczekuje się, że funkcja MRENCLAVE będzie często zmieniana przy użyciu wszelkich trywialnych modyfikacji istniejącego kodu, zaleca się zweryfikowanie plików binarnych enklawy przy użyciu walidacji MRSIGNER w zasadach zaświadczania.

  • x-ms-sgx-svn: wartość całkowita wskazująca numer wersji zabezpieczeń enklawy SGX

    Autor enklawy przypisuje numer wersji zabezpieczeń (SVN) do każdej wersji enklawy SGX. Po wykryciu problemu z zabezpieczeniami w kodzie enklawy autor enklawy zwiększa wartość SVN po rozwiązaniu luki w zabezpieczeniach. Aby zapobiec interakcji z niezabezpieczonym kodem enklawy, klienci mogą dodać regułę weryfikacji w zasadach zaświadczania. Jeśli SVN kodu enklawy nie jest zgodna z wersją zalecaną przez autora enklawy, zaświadczenie zakończy się niepowodzeniem.

Te oświadczenia są uznawane za przestarzałe, ale są w pełni obsługiwane i będą nadal uwzględniane w przyszłości. Zaleca się używanie nazw oświadczeń, które nie są przestarzałe:

Przestarzałe oświadczenie Zalecane oświadczenie
$is debugowalne x-ms-sgx-is-debuggable
identyfikator $product x-ms-sgx-product-id
$sgx-mrsigner x-ms-sgx-mrsigner
$sgx-mrenclave x-ms-sgx-mrenclave
$svn x-ms-sgx-svn

Poświadczanie za pomocą modułu TPM

Oświadczenia, które mają być używane przez autorów zasad do definiowania reguł autoryzacji w zasadach zaświadczania modułu TPM:

  • aikValidated: wartość logiczna zawierająca informacje, jeśli certyfikat klucza tożsamości zaświadczania (AIK) został zweryfikowany lub nie
  • aikPubHash: ciąg zawierający klucz publiczny base64(SHA256(AIK w formacie DER))
  • tpmVersion: wartość całkowita zawierająca wersję główną modułu TPM (Trusted Platform Module)
  • secureBootEnabled: wartość logiczna określająca, czy bezpieczny rozruch jest włączony
  • iommuEnabled: wartość logiczna wskazująca, czy jest włączona jednostka zarządzania pamięcią wejściowo-wyjściową (Iommu)
  • bootDebuggingDisabled: wartość logiczna określająca, czy debugowanie rozruchu jest wyłączone
  • notSafeMode: wartość logiczna wskazująca, czy system Windows nie działa w trybie awaryjnym
  • notWinPE: wartość logiczna wskazująca, czy system Windows nie jest uruchomiony w trybie WinPE
  • vbsEnabled: wartość logiczna wskazująca, czy język VBS jest włączony
  • vbsReportPresent: wartość logiczna wskazująca, czy raport enklawy VBS jest dostępny

Zaświadczenie VBS

Oprócz oświadczeń zasad zaświadczania modułu TPM te oświadczenia mogą być używane przez autorów zasad do definiowania reguł autoryzacji w zasadach zaświadczania VBS:

  • enlaveAuthorId: wartość ciągu zawierająca zakodowaną wartość Base64Url dla enklawy author id-The author identyfikatora modułu podstawowego enklawy
  • enlaveImageId: wartość ciągu zawierająca zakodowaną wartość Base64Url enklawy Image id-Identyfikator obrazu identyfikatora obrazu podstawowego modułu enklawy
  • enlaveOwnerId: wartość ciągu zawierająca zakodowaną wartość Base64Url enklawy Owner id-Identyfikator właściciela enklawy dla enklawy
  • enlaveFamilyId: wartość ciągu zawierająca zakodowaną wartość Base64Url identyfikatora rodziny enklawy. Identyfikator rodziny modułu podstawowego enklawy
  • enlaveSvn: wartość całkowita zawierająca numer wersji zabezpieczeń modułu podstawowego dla enklawy
  • enlavePlatformSvn: wartość całkowita zawierająca numer wersji zabezpieczeń platformy, która hostuje enklawę
  • enlaveFlags: oświadczenie enklawyFlags jest wartością całkowitą zawierającą flagi opisujące zasady środowiska uruchomieniowego enklawy

Oświadczenia wychodzące

Wspólne dla wszystkich typów zaświadczania

Azure Attestation zawiera te oświadczenia w tokenie zaświadczania dla wszystkich typów zaświadczania:

  • x-ms-ver: wersja schematu JWT (oczekiwana wartość to "1.0")
  • x-ms-attestation-type: wartość ciągu reprezentująca typ zaświadczania
  • x-ms-policy-hash: skrót zasad oceny Azure Attestation obliczony jako BASE64URL(SHA256(UTF8(BASE64URL(UTF8(tekst zasad)))))
  • x-ms-policy-signer: obiekt JSON z elementem członkowskim "jwk" reprezentującym klucz używany przez klienta do podpisywania zasad. Ma to zastosowanie w przypadku przekazywania podpisanych zasad przez klienta
  • x-ms-runtime: obiekt JSON zawierający "oświadczenia", które są zdefiniowane i generowane w środowisku zaświadczanym. Jest to specjalizacja koncepcji "enklawy przechowywane dane", gdzie "enklawa przechowywanych danych" jest specjalnie sformatowana jako kodowanie UTF-8 dobrze sformułowanego kodu JSON
  • x-ms-inittime: obiekt JSON zawierający "oświadczenia", które są definiowane i weryfikowane w czasie inicjowania środowiska testowego

Poniższe nazwy oświadczeń są używane ze specyfikacji JWT IETF

  • Oświadczenie "jti" (identyfikator JWT) — unikatowy identyfikator dla zestawu JWT
  • Oświadczenie "iss" (Wystawca) — podmiot zabezpieczeń, który wystawił JWT
  • "iat" (wystawione na) oświadczenie — czas, w którym JWT został wydany w
  • "exp" (Expiration Time) Claim — czas wygaśnięcia, po którym nie można zaakceptować JWT do przetwarzania
  • "nbf" (Nie przed) Oświadczenie — nie przed upływem czasu, przed którym nie można zaakceptować JWT do przetwarzania

Te nazwy oświadczeń są używane ze specyfikacji wersji roboczej IETF EAT:

  • "Nonce claim" (nonce) — nieprzetłumaczona bezpośrednia kopia opcjonalnej wartości innej niż podana przez klienta

Poniższe oświadczenia są uznawane za przestarzałe, ale są w pełni obsługiwane i będą nadal uwzględniane w przyszłości. Zaleca się używanie nazw oświadczeń, które nie są przestarzałe.

Przestarzałe oświadczenie Zalecane oświadczenie
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

Zaświadczenie SGX

Te caims są generowane i uwzględniane w tokenie zaświadczania przez usługę zaświadczania SGX:

  • x-ms-sgx-is-debuggable: wartość logiczna wskazująca, czy enklawa ma włączone debugowanie, czy nie
  • x-ms-sgx-product-id: wartość identyfikatora produktu enklawy SGX
  • x-ms-sgx-mrsigner: wartość zakodowana w szesnastku pola "mrsigner" cudzysłowu
  • x-ms-sgx-mrenclave: wartość zakodowana w szesnastkowym polu "mrenclave" cudzysłowu
  • x-ms-sgx-svn: numer wersji zabezpieczeń zakodowany w cudzysłowie
  • x-ms-sgx-ehd: enklawa przechowywane dane sformatowane jako BASE64URL(enklawa przechowywane dane)
  • x-ms-sgx-collateral: obiekt JSON opisujący zabezpieczenie używane do zaświadczania. Wartość oświadczenia x-ms-sgx-collateral jest zagnieżdżonym obiektem JSON z następującymi parami klucz/wartość:
    • qeidcertshash: wartość SHA256 cytowania enklawy (QE) Tożsamości wystawiających certyfikaty
    • qeidcrlhash: wartość SHA256 listy CRL certyfikatów wystawiających certyfikaty tożsamości
    • qeidhash: wartość SHA256 zabezpieczenia tożsamości QE
    • quotehash: wartość SHA256 obliczonego cudzysłowu
    • tcbinfocertshash: wartość SHA256 certyfikatów wystawiających informacje TCB
    • tcbinfocrlhash: wartość SHA256 listy listy CRL certyfikatów wystawiających certyfikaty TCB
    • tcbinfohash: wartość SHA256 zabezpieczenia TCB Info
  • x-ms-sgx-report-data: pole danych raportu enklawy SGX (zwykle skrót SHA256 x-ms-sgx-ehd)

Te oświadczenia będą wyświetlane tylko w tokenie zaświadczania wygenerowanym dla platform serwerów opartych na procesorach Intel® Xeon® Scalable. Oświadczenia nie będą wyświetlane, jeśli enklawa SGX nie jest skonfigurowana z obsługą separacji kluczy i udostępniania. Definicje oświadczeń można znaleźć tutaj:

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

Oświadczenia te są uznawane za przestarzałe, ale są w pełni obsługiwane i będą nadal uwzględniane w przyszłości. Zaleca się używanie nazw oświadczeń, które nie są przestarzałe:

Przestarzałe oświadczenie Zalecane oświadczenie
$is debugowanie x-ms-sgx-is-debuggable
identyfikator $product 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 zaświadczaniacollateral x-ms-sgx-collateral

Zaświadczenie SEV-SNP

Następujące oświadczenia są dodatkowo obsługiwane przez typ zaświadczania SevSnpVm:

  • x-ms-sevsnpvm-authorkeydigest: skrót SHA384 klucza podpisywania autora
  • x-ms-sevsnpvm-bootloader-svn :AMD boot loader numer wersji zabezpieczeń (SVN)
  • x-ms-sevsnpvm-familyId: ciąg identyfikacji rodziny warstwy zgodności hosta (HCL)
  • x-ms-sevsnpvm-guestsvn: numer wersji zabezpieczeń listy HCL (SVN)
  • x-ms-sevsnpvm-hostdata: dowolne dane zdefiniowane przez hosta w czasie uruchamiania maszyny wirtualnej
  • x-ms-sevsnpvm-idkeydigest: skrót SHA384 klucza podpisywania identyfikacji
  • x-ms-sevsnpvm-imageId: identyfikacja obrazu HCL
  • x-ms-sevsnpvm-is-debuggable: wartość logiczna wskazująca, czy debugowanie AMD SEV-SNP jest włączone
  • x-ms-sevsnpvm-launchmeasurement: Pomiar uruchomionego obrazu gościa
  • x-ms-sevsnpvm-microcode-svn: numer wersji zabezpieczeń mikrokodu AMD (SVN)
  • x-ms-sevsnpvm-migration-allowed: wartość logiczna wskazująca, czy obsługa migracji AMD SEV-SNP jest włączona
  • x-ms-sevsnpvm-reportdata: Dane przekazane przez listę HCL do dołączenia do raportu, aby sprawdzić, czy klucz transferu i konfiguracja maszyny wirtualnej są poprawne
  • x-ms-sevsnpvm-reportid: identyfikator raportu gościa
  • x-ms-sevsnpvm-smt-allowed: wartość logiczna wskazująca, czy protokół SMT jest włączony na hoście
  • x-ms-sevsnpvm-snpfw-svn: numer wersji zabezpieczeń oprogramowania układowego AMD (SVN)
  • x-ms-sevsnpvm-tee-svn: zaufany numer wersji środowiska wykonawczego AMD (TEE) (SVN)
  • x-ms-sevsnpvm-vmpl: VMPL, która wygenerowała ten raport (0 dla listy HCL)

Zaświadczania TPM i VBS

  • cnf (potwierdzenie): oświadczenie "cnf" służy do identyfikowania klucza dowodu posiadania. Oświadczenie potwierdzenia zdefiniowane w dokumencie RFC 7800 zawiera publiczną część testowanego klucza enklawy reprezentowanego jako obiekt JSON Web Key (JWK) (RFC 7517)
  • rp_data (dane jednostki uzależnionej): dane jednostki uzależnionej, jeśli istnieją określone w żądaniu, używane przez jednostkę uzależnioną jako nonce w celu zagwarantowania aktualności raportu. rp_data jest dodawany tylko w przypadku rp_data

Oświadczenia dotyczące właściwości

Zaświadczania TPM i VBS

  • report_validity_in_minutes: oświadczenie liczby całkowitej, aby określić, jak długo token jest prawidłowy.
    • Wartość domyślna(czas): jeden dzień w minutach.
    • Maksymalna wartość(czas): rok w minutach.
  • omit_x5c: oświadczenie logiczne wskazujące, czy Azure Attestation pominąć certyfikat używany do potwierdzenia autentyczności usługi. Jeśli wartość true, x5t zostanie dodany do tokenu zaświadczania. Jeśli wartość false(domyślna), x5c zostanie dodany do tokenu zaświadczania.

Następne kroki