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 .
- Ett standard-TPM-citattecken som är utdata
TPM-händelselogg
- En händelselogg som lagras i systemet och som kan användas för att återskapa PCR-värden i TPM-offerten.
- Mer information finns i TPM-specifikationen.
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
- Läs mer i Konfidentiella virtuella datorer i Azure).
- 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)
- Utfärdat av maskinvaruleverantören (AMD och Intel) för att certifiera signaturen för maskinvarurapporten.
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.
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. |
Header
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"
}