Attestazione e provenienza della CVM TDX

1. Panoramica

Le macchine virtuali private riservate (CVM) sono un tipo di macchine virtuali di Compute Engine che utilizzano la crittografia della memoria basata su hardware e la protezione dell'integrità. In questo modo, i dati e le applicazioni non possono essere letti o modificati in memoria durante l'utilizzo. In questo codelab, imparerai a generare una citazione di attestazione Intel TDX sulla CVM e a verificarla localmente a scopo dimostrativo. Inoltre, verificherai la provenienza dell'host e dell'istanza Google Cloud della CVM.

Questo codelab include i seguenti passaggi:

  • Configurazione di una VM privata riservata Intel TDX
  • Recupero di una citazione di attestazione TDX
  • Verifica della citazione di attestazione TDX e del nonce
  • Verifica dell'integrità del firmware GCE (OVMF)
  • Verifica della provenienza dell'host e dell'istanza TDX di GCE

Obiettivi didattici

  • Come recuperare una citazione di attestazione TDX su una CVM utilizzando gli strumenti go-tdx-guest
  • Come verificare l'autenticità, la freschezza (nonce) e l'integrità del firmware GCE (OVMF) della citazione
  • Come verificare la provenienza dell'host e dell'istanza Google Cloud (ricerca nel registro PPID e binding dell'istanza PZID)

Che cosa ti serve

2. Configurazione e requisiti

Per abilitare le API necessarie, esegui il comando seguente nella console Google Cloud o nel tuo ambiente di sviluppo locale:

gcloud auth login

gcloud services enable \
    cloudapis.googleapis.com \
    cloudshell.googleapis.com \
    confidentialcomputing.googleapis.com \
    compute.googleapis.com

3. Configurazione della CVM e recupero della citazione TDX

In questo passaggio creerai una CVM TDX e recupererai una citazione di attestazione TDX dall'hardware.

  1. Vai alla console Google Cloud o al tuo ambiente di sviluppo locale. Crea una CVM come segue:
gcloud config set project <project-id>

gcloud compute instances create tdx-cvm-attestation-codelab \
    --machine-type=c3-standard-4 \
    --zone=us-central1-c \
    --confidential-compute-type=TDX \
    --maintenance-policy=TERMINATE \
    --image-family=ubuntu-2204-lts \
    --image-project=ubuntu-os-cloud \
    --scopes https://www.googleapis.com/auth/cloud-platform

Sostituisci <project-id> con l'identificatore univoco del tuo progetto.

  1. Connettiti alla CVM.
gcloud compute ssh --zone us-central1-c tdx-cvm-attestation-codelab
  1. Configura un ambiente Go sulla CVM:
wget https://go.dev/dl/go1.24.0.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.24.0.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
  1. Installa gli strumenti go-tdx-guest.

Clona il repository e crea lo strumento attest, che genera una citazione TDX.

git clone https://github.com/google/go-tdx-guest.git
cd go-tdx-guest/tools/attest
go build
  1. Recupera la citazione di attestazione TDX:

Utilizza lo strumento attest per generare una citazione. Passeremo un nonce (64 byte di REPORT_DATA) e salveremo l'output in quote.bin.

nonce=$(head -c 64 /dev/urandom | xxd -p | tr -d '\n' | head -c 128)
sudo ./attest -in $nonce -inform hex -outform bin -out quote.bin

La citazione TDX è ora salvata in quote.bin.

4. Verifica della citazione di attestazione TDX

Ora che abbiamo generato una citazione Intel TDX (quote.bin), possiamo verificarla utilizzando lo strumento check fornito nel repository go-tdx-guest. Questo strumento confronta la citazione con le specifiche di Intel, la verifica rispetto ai dati collaterali scaricati dal servizio di certificazione del provisioning (PCS) di Intel e convalida i vincoli dei criteri, come il nonce, per impedire attacchi di riproduzione.

  1. Vai alla directory dello strumento check e creala:
cd ~/go-tdx-guest/tools/check
go build
  1. Esegui lo strumento per verificare sia le firme crittografiche sia il nonce. Utilizzeremo il flag -get_collateral=true per scaricare i certificati TEE necessari dal PCS di Intel, il flag -check_crl=true per verificare le revoche dei certificati e il flag -report_data per convalidare la freschezza del nonce:
./check -in ~/go-tdx-guest/tools/attest/quote.bin -inform bin \
    -get_collateral=true -check_crl=true \
    -report_data $nonce

Se la citazione è crittograficamente valida e il nonce corrisponde, lo strumento registrerà un messaggio di esito positivo simile all'esempio seguente e uscirà con il codice 0:

INFO : TDX Quote verified successfully

5. Verifica dell'integrità del firmware GCE (OVMF)

Sebbene i dati collaterali di Intel verifichino l'hardware, non verificano che la macchina virtuale stia eseguendo un firmware Google Compute Engine (GCE) originale e non modificato.

Google pubblica Launch Endorsements firmati (contenenti le misurazioni di integrità di riferimento, o RIM) per tutte le release ufficiali del firmware UEFI (OVMF) di GCE in un bucket Google Cloud Storage (GCS) pubblico.

In questo passaggio, utilizzeremo lo strumento pubblico gce-tcb-verifier di Google per recuperare automaticamente l'approvazione del firmware da GCS, verificare la firma di Google e convalidare la misurazione del firmware della nostra CVM (MRTD).

1. Crea lo strumento di verifica TCB di GCE

  1. Clona il repository pubblico gce-tcb-verifier da GitHub:
cd ~
git clone https://github.com/google/gce-tcb-verifier.git
  1. Vai alla directory dello strumento CLI e creala:
cd gce-tcb-verifier/gcetcbendorsement/cli
go build -o gcetcbendorsement
  1. Aggiungi lo strumento creato al tuo PATH per comodità:
export PATH=$PATH:$(pwd)

2. Convalida la citazione rispetto all'approvazione del firmware GCE

Ora esegui lo strumento gcetcbendorsement per convalidare la citazione di attestazione. Poiché lo strumento ha esito positivo senza generare output in caso di verifica riuscita, possiamo concatenare il comando con && echo "Validation Succeeded!" per ottenere una conferma di successo semplice ed esplicita:

gcetcbendorsement tdx validate ~/go-tdx-guest/tools/attest/quote.bin && echo "Validation Succeeded!"

Output:

Validation Succeeded!

Che cosa accade dietro le quinte?

  1. Estrazione: lo strumento analizza quote.bin ed estrae la misurazione del firmware (MRTD) dal corpo della citazione TD.
  2. Recupero: costruisce un URL GCS utilizzando MRTD e scarica il VMLaunchEndorsement corrispondente dal bucket pubblico di Google (gs://gce_tcb_integrity).
  3. Verifica della firma: recupera il certificato CA radice pubblico di Google (https://pki.goog/cloud_integrity/GCE-cc-tcb-root_1.crt) e verifica crittograficamente la firma di Google sull'approvazione scaricata.
  4. Convalida della misurazione: confronta MRTD firmato dall'hardware TDX nella citazione con le misurazioni di riferimento dorate nell'approvazione firmata di Google.

Se tutti i controlli vengono superati, il comando uscirà con il codice 0 senza generare output (o stamperà Validation Succeeded! con l'echo concatenato), dimostrando che la VM esegue un firmware approvato da Google.

6. Verifica della provenienza dell'host e dell'istanza TDX di GCE

Sebbene l'attestazione e la verifica del firmware confermino che la VM è in esecuzione su hardware Intel TDX originale con firmware UEFI approvato da Google, la verifica della provenienza TDX di GCE collega la citazione di attestazione direttamente all'infrastruttura di Google Cloud in due modi fondamentali:

  1. Provenienza dell'host: identifica la macchina host fisica Google Cloud che esegue la VM estraendo l'PPID (Platform Provisioning ID) univoco della piattaforma dal certificato PCK della citazione. Recupera quindi il record del registro della piattaforma host da Google Cloud Storage (confidential-host-registry), che registra la zona fisica e quando Google Cloud ha eseguito il provisioning dei certificati di attestazione dell'host per l'ultima volta.
  2. Provenienza dell'istanza (binding PZID): Google Cloud associa crittograficamente l'identità specifica della VM (ProjectNumber, Zone, e InstanceID) al registro MR_OWNER della citazione TDX. La verifica di questo binding garantisce che la citazione appartenga esclusivamente alla tua istanza e impedisce attacchi di riproduzione o sostituzione di citazioni su VM o progetti diversi.

Lo strumento CLI gceprovenance (che si trova anche nel repository go-tdx-guest) automatizza la verifica completa della provenienza, controllando l'autenticità della citazione, la sfida di freschezza, il record del registro host e il binding PZID dell'istanza in un unico comando.

  1. Vai alla directory gceprovenance e crea lo strumento:
cd ~/go-tdx-guest/tools/gceprovenance
go build
  1. Esegui la verifica completa della provenienza utilizzando il comando verify. Passeremo il file della citazione (quote.bin) e la sfida nonce ($nonce) che abbiamo generato in precedenza:
./gceprovenance verify -quote ~/go-tdx-guest/tools/attest/quote.bin -challenge $nonce
  1. Quando tutti i controlli vengono superati, lo strumento restituisce un report di verifica simile al seguente:
GCE TDX provenance verification: OK

Instance: projects/123456789012/zones/us-central1-c/instances/987654321098765

Checks
  Quote verification: OK
  REPORT_DATA challenge: OK
  Host registry document: found
  PZID binding: OK

PPID: 0123456789abcdef0123456789abcdef
Quote: tdx_quote.bin
Host registry: host_registry.json

Che cosa accade dietro le quinte?

  • Citazione e sfida: lo strumento verifica la catena di firme della citazione rispetto al certificato radice di Intel e conferma che REPORT_DATA della citazione corrisponde alla sfida $nonce.
  • Provenienza dell'host (PPID): estrae l'PPID esadecimale di 32 caratteri PPID dal certificato PCK foglia e scarica il documento JSON del registro host da GCS (https://storage.googleapis.com/confidential-host-registry/).
  • Provenienza dell'istanza (PZID): esegue una query sul server di metadati GCE locale per l'ID progetto numerico, la zona e l'ID istanza dell'istanza, costruisce il payload JSON PZID canonico ({"instanceId":...,"numericalProjectId":...,"zone":...}), calcola il digest SHA-384 e verifica che corrisponda a MR_OWNER nella citazione.
  1. Ispeziona il documento del registro host recuperato:

Per impostazione predefinita, il comando verify salva il documento JSON del registro host recuperato in host_registry.json. Puoi ispezionarlo per visualizzare i metadati della piattaforma host:

cat host_registry.json

Output di esempio:

{
  "zone": "us-central1",
  "timestamp": "2026-02-17T11:25:12Z"
}

Questi metadati descrivono le proprietà della macchina host:

  • zone: la regione/zona fisica di Google Cloud in cui si trova la macchina host.
  • timestamp: la data e l'ora UTC in cui i certificati di attestazione hardware di questa macchina host sono stati sottoposti a provisioning e verificati da Google Cloud per l'ultima volta.

7. Esegui la pulizia

Esegui questi comandi nella console Cloud o nel tuo ambiente di sviluppo locale:

# Delete the CVM instance
gcloud compute instances delete tdx-cvm-attestation-codelab --zone=us-central1-c

8. Passaggi successivi

Scopri di più sulle VM private riservate e su Compute Engine.