Dela via


Designinformation om konfidentiell vm-gästattestering

Det här dokumentet innehåller en detaljerad översikt över den konfidentiella designen för gästattestering av virtuella datorer i Azure.

vTPM-baserad design

Virtuella Azure-datorer använder en vTPM-baserad design för gästattestering. Metoden säkerställer ett konsekvent gränssnitt mellan gästoperativsystem (Linux och Windows) och maskinvaruplattformar (AMD SEV-SNP och Intel TDX).

Attesteringsflöde

Gästattesteringsprocessen omfattar två huvudsakliga steg: bevisgenerering och bevisverifiering. En användare begär att den konfidentiella virtuella Azure-datorn ska generera vTPM-bevis och sedan skicka bevisen till en betrodd part (till exempel Microsoft Azure Attestation (MAA)) för verifiering.

En förlitande part, till exempel Azure Key Vault Premium eller Azure Key Vault Managed HSM, kan utvärdera tillförlitligheten hos den konfidentiella virtuella Azure-datorn baserat på verifieringsresultaten. Om den virtuella datorn anses vara tillförlitlig kan den förlitande parten på ett säkert sätt etablera hemligheter till den virtuella datorn med hjälp av mekanismer som Säker nyckelversion.

vTPM-bevis

Ett vTPM-bevis består av ett TPM-citat och bekräftelser som används för att verifiera offerten, enligt beskrivningen i resten av avsnittet.

  • TPM-citat

    • Ett standard-TPM-citattecken som är utdata TPM2_Quote från kommandot som definieras av TPM 2.0-specifikationen.
    • Innehåller en lista över plattformskonfigurationsregister (PCR) som samlar in måtten för gästoperativsystemet (till exempel startprocess).
    • Användningen av PCR överensstämmer med Linux- och Windows-standarder (var och en har sin användningsdefinition).
    • Signerad av den privata nyckeln för vTPM-attestering (AK); DET VILL: AK anges som signeringsnyckeln i TPM2_Quote kommandot .
  • TPM-händelselogg

  • vTPM AK-certifikat

    • Utfärdat av Azure (signerat av Azure CA).
    • Backas upp av maskinvara (den offentliga nyckeln för vTPM-attestering, AK Public, hämtas i maskinvarurapporten).
  • Maskinvarurapport

    • Genereras och signeras av maskinvaran.
    • Samla in följande information
      • OFFENTLIG AK
      • Mätning av Microsoft-byggt gästparavisor där vTPM körs
      • Maskinvaruinformation
        • Mer information finns i AMD SEV-SNP- och Intel TDX-specifikationerna.
  • Certifikatkedja för maskinvaruleverantör

    • Utfärdat av maskinvaruleverantören (AMD och Intel) för att certifiera signaturen för maskinvarurapporten.
      • AMD SEV-SNP: VCEK-certifikat (Versioned Chip Endorsement Key)
      • Intel TDX: PcK-certifikat (Provisioning Certificate Key)

Vad omfattas av ett vTPM-bevis?

Komponent Omfattas av
Gäst-OS TPM-citat (PCR)
UEFI Maskinvarurapport
Gästparvisor (inklusive vTPM) Maskinvarurapport

Hur verifieras vTPM-bevis?

Verifieraren (Microsoft Azure Attestation (MAA)) verifierade vTPM-bevisen baserat på den betrodda kedjan, enligt följande bild. Lyckad verifiering innebär att den intygade konfidentiella virtuella Azure-datorn är tillförlitlig och skyddad av maskinvaran.

Bild av vTPM-baserad bevisförtroendekedja

Utvecklarreferens

Det här avsnittet innehåller en referens till den vTPM-baserade gästattesteringsdesignen som används av en konfidentiell virtuell Azure-dator.

Azure-reserverade TPM NV-index

Name NV-index Storlek (byte) beskrivning
Attesteringsrapport 0x01400001 2600 Azure-definierat format med maskinvarurapporten inbäddad.
Rapportdata 0x01400002 64 Rapportdata som ska ingå i Körningsdata.
vTPM AK Cert 0x01C101D0 4096 Certifikatet som används för att verifiera TPM-offerten som signerats av vTPM AK.
vTPM AK 0x81000003 Beroende på nyckeltyp Nyckeln som används för att signera TPM-offerten.

Mer information om exempel på TPM-kommandon finns i vägledningen om attestering av konfidentiella virtuella datorer i Azure.

Attesteringsrapportformat

Attesteringsrapport

Name Förskjutning (byte) Storlek (byte) beskrivning
Header 0 32 Rapporthuvudet (stöds inte av maskinvarurapporten).
Rapportnyttolast 32 1184 Maskinvarurapporten.
Körningsdata 1216 variabel längd Körningsdata innehåller anspråk som godkänts av maskinvarurapporten.
Name Förskjutning (byte) Storlek (byte) beskrivning
Signatur 0 4 Inbäddad signatur. Förväntat: 0x414c4348 (HCLA).
Version 4 4 Formatera version. Förväntat: 2.
Rapportstorlek 8 4 Rapportnyttolastens storlek. Förväntat: 1184 (AMD SEV-SNP), 1024 (Intel TDX).
Typ av begäran 12 4 Azure-specifik användning av attesteringsrapporten. Förväntat: 2.
Status 16 4 Reserverat.
Reserverad 20 12 Reserverat.

Rapportnyttolast

Rapporten som genereras av maskinvaran (AMD SEV-SNP eller Intel TDX). Fältet report_data i rapporten samlar in hashen för Runtime-anspråken i Körningsdata. Mer information finns i specifikationer från maskinvaruleverantörer.

Körningsdata

Name Förskjutning (byte) Storlek (byte) beskrivning Uppmätt
Datavolym 0 4 Storleken på Runtime-anspråk. Nej
Version 4 4 Formatera version. Förväntat: 1. Nej
Rapporttyp 8 4 Typ av maskinvarurapport. Förväntade: 2 (AMD SEV-SNP), 4 (Intel TDX) Nej
Hashtyp 12 4 Algoritmen som används för att hasha körningsdata. Hash-värdet samlas in i fältet report_data i maskinvarurapporten. Förväntade: 1 (SHA-256), 2 (SHA-384), 3 (SHA-512) Nej
Körningsanspråk 16 variabel längd Körningsanspråken i JSON-format. Ja

Körningsanspråk

JSON-fält beskrivning
keys En matris med nycklar i JWK-format. Förväntade kid: HCLAkPub (vTPM AK public), HCLEkPub (vTPM EK public).
vm_configuration Selektiv konfiguration av konfidentiell virtuell Azure-dator.
user_data 64-bytesdata (HEX-sträng) lästa från 0x01400002 NV-index (rapportdata).

Exempel

{
  "keys": [
    {
      "kid": "HCLAkPub",
      "key_ops": [
        "sign"
      ],
      "kty": "RSA",
      "e": "AQAB",
      "n": "rAipdAAArL6V1FNnSQ-39i3VH-a8PuOeVRo2VpecspDWbJNmgHJ4-VGGFEx4sdVbvDC6fyo_VM2ebE-_AKxTmrNVEr-KIZveJMD_vlOqvMvjtllsWwA-vsRfpqiduvQdFcdCvyHzfxBRHYqdmxgKq-3QI-XBbZv9cCMMMPHkNp4mWkyahjQxXVJVwB1egCrJGKSk1bRXlP1dXNG_Pe4-W5O-YEGRKdLIA31G0Yh8VBnrEUCAMjDAuh6fncMkwdMVskI5Ta-kJgGw4GepIj6_smIyYhxg3o8Ik4qPntxj1TrV0bVW2IiNMLHoM67y1ErOir7bv00xqgqouFodI-vM3Q"
    },
    {
      "kid": "HCLEkPub",
      "key_ops": [
        "encrypt"
      ],
      "kty": "RSA",
      "e": "AQAB",
      "n": "m3AfPAAA-_HY3M_-x4bQbr0p2nkvAgig1mENl-BColvqq0aKKAqIHr-DFQ9-iB2z7EzhYVon5R7Nc1jzqBsmxahE8uaQfD-sp8bWOtbvy4V9nAqLY4HOwfxlJ99cEOOpxNXfCNesYOk8T0ntG05w7oBRjFw0LMVKS-1S3j5-oMnNnpJoo7rX5hNM8JVpxEuVa1IOf1NmvRey6wjwSHbjUay_IMUTAq1wzpx8wo_hjeY4JMd0Ka1ewLjJDaTQSpSxZI36ujyR6EGho0FBXSKN-9W9DAXkO8-RKuLUrmTXA6ETJRYApMuYGiUDCk1Y5zQTQsyWS6pLjnf2mg2tEntZZw"
    }
  ],
  "vm-configuration": {
    "root-cert-thumbprint": "",
    "console-enabled": true,
    "secure-boot": true,
    "tpm-enabled": true,
    "tpm-persisted": true,
    "vmUniqueId": "68dc0ac0-2ed9-4b2a-a03e-4953e416d939"
  },
  "user-data": "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
}

Nästa steg