Detalhes do design do atestado de convidado da VM Confidencial
Este documento traz uma visão geral detalhada do design do atestado de convidado da VM confidencial do Azure.
Design baseado no vTPM
As VMs (máquinas virtuais) confidenciais do Azure utilizam um design baseado no vTPM para o atestado de convidado. A abordagem garante uma interface consistente entre sistemas operacionais convidados (Linux e Windows) e plataformas de hardware (AMD SEV-SNP e Intel TDX).
Fluxo de atestado
O processo de atestado de convidado envolve duas etapas principais: geração de evidências e verificação de evidências. Um usuário solicita a VM confidencial do Azure para gerar evidências do vTPM e, em seguida, enviar as evidências para uma parte confiável, por exemplo, o MAA (Atestado do Microsoft Azure), para verificação.
Uma terceira parte confiável, como o Azure Key Vault Premium ou o HSM gerenciado do Azure Key Vault, pode avaliar a confiabilidade da VM confidencial do Azure com base nos resultados da verificação. Se a VM for considerada confiável, a terceira parte confiável poderá provisionar segredos com segurança na VM usando mecanismos como a Versão de Chave Segura.
Evidência do vTPM
Uma evidência do vTPM consiste em uma cota do TPM e endossos usados para verificar a cota, conforme descrito no restante da seção.
Cota do TPM
- Uma cota padrão do TPM que é a saída do comando
TPM2_Quote
definida pela especificação TPM 2.0. - Inclui uma lista de PCRs (registros de configuração de plataforma) que captura as medidas do sistema operacional convidado (por exemplo, o processo de inicialização).
- O uso de PCRs está em conformidade com os padrões do Linux e do Windows (cada um com a respectiva definição de uso).
- Assinado pela AK (chave privada de atestado) do vTPM, ou seja, a AK é especificada como a chave de assinatura no comando
TPM2_Quote
.
- Uma cota padrão do TPM que é a saída do comando
Log de eventos do TPM
- Um log de eventos armazenado no sistema que pode ser usado para reproduzir valores de PCR na cota do TPM.
- Veja Especificação do TPM para obter mais detalhes.
Certificado do AK do vTPM
- Emitido pelo Azure (assinado pela AC do Azure).
- Com suporte de hardware (a chave pública do atestado do vTPM, a AK pública, é capturada no relatório de hardware).
Relatório de hardware
- Gerado e assinado pelo hardware.
- Captura as informações a seguir
- AK pública
- A medida do paravisor convidado criado pela Microsoft em que o vTPM é executado
- Saiba mais em VMs confidenciais no Azure).
- Informações de hardware
- Veja as especificações do AMD SEV-SNP e do Intel TDX para obter mais detalhes.
Cadeia de certificados do fornecedor de hardware
- Emitida pelo fornecedor de hardware (AMD e Intel) para certificar a assinatura do relatório de hardware.
- AMD SEV-SNP: certificados VCEK (chave de endosso de chip com controle de versão)
- Intel TDX: certificados PCK (chave de certificado de provisionamento)
- Emitida pelo fornecedor de hardware (AMD e Intel) para certificar a assinatura do relatório de hardware.
O que é coberto por uma evidência do vTPM?
Componente | Coberto por |
---|---|
SO convidado | Cota do TPM (PCRs) |
UEFI | Relatório de hardware |
Paravisor convidado (incluindo o vTPM) | Relatório de hardware |
Como a evidência do vTPM é verificada?
O verificador [MAA (Atestado do Microsoft Azure)] verificou a evidência do vTPM com base na cadeia confiável, conforme mostrado na figura a seguir. A verificação bem-sucedida implica que a VM confidencial do Azure atestada é confiável e protegida pelo hardware.
Referência de desenvolvedores
Esta seção apresenta uma referência ao design do atestado de convidado baseado no vTPM usado pela VM confidencial do Azure.
Índices NV do TPM reservados para o Azure
Nome | Índice NV | Tamanho (bytes) | Descrição |
---|---|---|---|
Relatório de atestado | 0x01400001 | 2600 | Formato definido pelo Azure com o relatório de hardware inserido. |
Dados de relatório | 0x01400002 | 64 | Os dados do relatório a serem incluídos nos dados do runtime. |
Certificado da AK do vTPM | 0x01C101D0 | 4096 | O certificado usado para verificar a cota do TPM assinada pela AK do vTPM. |
AK do vTPM | 0x81000003 | Depende do tipo de chave | A chave usada para assinar a cota do TPM. |
Veja Diretrizes e perguntas frequentes sobre o atestado das VMs Confidenciais do Azure para ver exemplos de comandos do TPM.
Formato de relatório de atestado
Relatório de atestado
Nome | Deslocamento (bytes) | Tamanho (bytes) | Descrição |
---|---|---|---|
Cabeçalho | 0 | 32 | O cabeçalho do relatório (não endossado pelo relatório de hardware). |
Conteúdo do relatório | 32 | 1,184 | O relatório de hardware. |
Dados de runtime | 1216 | comprimento variável | Os dados de runtime incluem declarações endossadas pelo relatório de hardware. |
Cabeçalho
Nome | Deslocamento (bytes) | Tamanho (bytes) | Descrição |
---|---|---|---|
Signature | 0 | 4 | Assinatura inserida. Esperado: 0x414c4348 (HCLA ). |
Versão | 4 | 4 | Versão do formato. Esperado: 2. |
Tamanho do relatório | 8 | 4 | Tamanho do conteúdo do relatório. Esperado: 1184 (AMD SEV-SNP), 1024 (Intel TDX). |
Tipo de solicitação | 12 | 4 | Uso específico do Azure do relatório de atestado. Esperado: 2. |
Status | 16 | 4 | Reservado. |
Reservado | 20 | 12 | Reservado. |
Conteúdo do relatório
O relatório gerado pelo hardware (AMD SEV-SNP ou Intel TDX). O campo report_data do relatório captura o hash das Declarações do runtime nos Dados do runtime. Veja as especificações dos fornecedores de hardware para obter mais detalhes.
Dados do runtime
Nome | Deslocamento (bytes) | Tamanho (bytes) | Descrição | Medido |
---|---|---|---|---|
Tamanho dos dados | 0 | 4 | O tamanho das Declarações do runtime. | Não |
Versão | 4 | 4 | Versão do formato. Esperado: 1. | Não |
Tipo de Relatório | 8 | 4 | O tipo de relatório de hardware. Esperado: 2 (AMD SEV-SNP), 4 (Intel TDX) | Não |
Tipo de hash | 12 | 4 | O algoritmo usado para hash dos dados do runtime. O valor de hash é capturado no campo report_data do relatório de hardware. Esperado: 1 (SHA-256), 2 (SHA-384), 3 (SHA-512) | Não |
Declarações do runtime | 16 | comprimento variável | As declarações do runtime no formato JSON. | Sim |
Declarações do runtime
Campo JSON | Descrição |
---|---|
keys | Uma matriz de chaves no formato JWK. Esperado kid : HCLAkPub (AK pública do vTPM), HCLEkPub (EK pública do vTPM). |
vm_configuration | Configuração seletiva da VM confidencial do Azure. |
user_data | Dados de 64 bytes (cadeia de caracteres HEX) lidos do índice NV 0x01400002 (Dados do Relatório). |
Exemplo
{
"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"
}