TDX CVM の証明書と来歴

1. 概要

Confidential Virtual Machine(CVM)は、ハードウェアベースのメモリ暗号化と整合性保護を使用する Compute Engine 仮想マシンの一種です。これにより、使用中のデータやアプリケーションがメモリ内で読み取りまたは変更されるのを防ぐことができます。この Codelab では、CVM で Intel TDX 証明書引用を生成し、デモンストレーション目的でローカルで検証する方法について説明します。また、CVM の Google Cloud ホストとインスタンスの来歴も確認します。

この Codelab では、次の手順について説明します。

  • Intel TDX Confidential VM を設定する
  • TDX 証明書引用を取得する
  • TDX 証明書引用とノンスを検証する
  • GCE ファームウェア(OVMF)の整合性を検証する
  • GCE TDX ホストとインスタンスの来歴を検証する

学習内容

  • go-tdx-guest ツールを使用して CVM で TDX 証明書引用を取得する方法
  • 引用の信頼性、鮮度(ノンス)、GCE ファームウェアの整合性(OVMF)を検証する方法
  • Google Cloud ホストとインスタンスの来歴(PPID レジストリ ルックアップと PZID インスタンス バインディング)を検証する方法

必要なもの

2. 設定と要件

必要な API を有効にするには、Google Cloud コンソールまたはローカル開発環境で次のコマンドを実行します。

gcloud auth login

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

3. CVM を設定して TDX 引用を取得する

このステップでは、TDX CVM を作成し、ハードウェアから TDX 証明書引用を取得します。

  1. Google Cloud コンソールまたはローカル開発環境に移動します。次のように CVM を作成します。
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

<project-id> は、プロジェクトの一意の識別子に置き換えます。

  1. CVM に接続します。
gcloud compute ssh --zone us-central1-c tdx-cvm-attestation-codelab
  1. CVM に Go 環境を設定します。
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. go-tdx-guest ツールをインストールします。

リポジトリのクローンを作成し、TDX 引用を生成する attest ツールをビルドします。

git clone https://github.com/google/go-tdx-guest.git
cd go-tdx-guest/tools/attest
go build
  1. TDX 証明書引用を取得します。

attest ツールを使用して引用を生成します。ノンス(64 バイトの REPORT_DATA)を渡し、出力を 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

TDX 引用が quote.bin に保存されました。

4. TDX 証明書引用を検証する

Intel TDX 引用(quote.bin)を生成したので、go-tdx-guest リポジトリで提供されている check ツールを使用して検証できます。このツールは、Intel の仕様に照らして引用をチェックし、Intel のプロビジョニング証明書サービス(PCS)からダウンロードした関連資料に対して検証し、ノンスなどのポリシー制約を検証してリプレイ攻撃を防ぎます。

  1. check ツール ディレクトリに移動してビルドします。
cd ~/go-tdx-guest/tools/check
go build
  1. ツールを実行して、暗号署名とノンスの両方 を検証します。-get_collateral=true フラグを使用して、必要な TEE 証明書を Intel の PCS からダウンロードします。-check_crl=true フラグを使用して証明書の取り消しを確認し、-report_data フラグを使用してノンスの鮮度を検証します。
./check -in ~/go-tdx-guest/tools/attest/quote.bin -inform bin \
    -get_collateral=true -check_crl=true \
    -report_data $nonce

引用が暗号的に有効で、ノンスが一致する場合、ツールは次のような成功メッセージをログに記録し、コード 0 で終了します。

INFO : TDX Quote verified successfully

5. GCE ファームウェア(OVMF)の整合性を検証する

Intel のコラテラルはハードウェアを検証しますが、仮想マシンが正規の変更されていない Google Compute Engine(GCE)ファームウェアを実行していることは検証しません。

Google は、すべての公式 GCE UEFI(OVMF)ファームウェア リリースに対して、署名付きの起動保証 (ゴールデン リファレンス整合性測定(RIM)を含む)を公開 Google Cloud Storage(GCS)バケットに公開しています。

このステップでは、Google の公開 gce-tcb-verifier ツールを使用して、GCS からファームウェア保証を自動的に取得し、Google の署名を検証して、CVM のファームウェア測定(MRTD)を検証します。

1. GCE TCB 検証ツールをビルドする

  1. GitHub から公開 gce-tcb-verifier リポジトリのクローンを作成します。
cd ~
git clone https://github.com/google/gce-tcb-verifier.git
  1. CLI ツール ディレクトリに移動してビルドします。
cd gce-tcb-verifier/gcetcbendorsement/cli
go build -o gcetcbendorsement
  1. ビルドしたツールを PATH に追加すると便利です。
export PATH=$PATH:$(pwd)

2. GCE ファームウェア保証に対して引用を検証する

gcetcbendorsement ツールを実行して、証明書引用を検証します。検証に成功するとツールはサイレントに成功するため、コマンドを && echo "Validation Succeeded!" と連結して、成功をわかりやすく明示的に確認できます。

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

出力:

Validation Succeeded!

バックグラウンドで行われていること

  1. 抽出: ツールは quote.bin を解析し、TD 引用本文からファームウェア測定(MRTD)を抽出します。
  2. 取得: MRTD を使用して GCS URL を作成し、Google の公開バケット(gs://gce_tcb_integrity)から対応する VMLaunchEndorsement をダウンロードします。
  3. 署名の検証: Google の公開ルート CA 証明書(https://pki.goog/cloud_integrity/GCE-cc-tcb-root_1.crt)を取得し、ダウンロードした保証に対する Google の署名を暗号的に検証します。
  4. 測定の検証: 引用内の TDX ハードウェアによって署名された MRTD を、Google の署名付き保証のゴールデン リファレンス測定と比較します。

すべてのチェックに合格すると、コマンドはコード 0 でサイレントに終了します(または、連結されたエコーで Validation Succeeded! と出力します)。これにより、VM が Google 推奨の正規のファームウェアを実行していることが証明されます。

6. GCE TDX ホストとインスタンスの来歴を検証する

証明書とファームウェアの検証により、VM が Google 推奨の UEFI ファームウェアを搭載した正規の Intel TDX ハードウェアで実行されていることが確認されますが、GCE TDX 来歴検証 では、証明書引用を次の 2 つの重要な方法で Google Cloud インフラストラクチャに直接接続します。

  1. ホストの来歴: 引用の PCK 証明書からプラットフォームの一意のPPID(Platform Provisioning ID)を抽出して、VM を実行している物理 Google Cloud ホストマシンを識別します。次に、ホスト プラットフォームのレジストリ レコードを Google Cloud Storage(confidential-host-registry)から取得します。このレコードには、物理ゾーンと、Google Cloud がホストの証明書を最後にプロビジョニングした日時が記録されます。
  2. インスタンスの来歴(PZID バインディング): Google Cloud は、特定の VM の ID(ProjectNumberZoneInstanceID)を TDX 引用の MR_OWNER レジスタに暗号的にバインドします。このバインディングを検証することで、引用が インスタンスに排他的に属していることを確認し、異なる VM またはプロジェクト間での引用のリプレイ攻撃や置換攻撃を防ぐことができます。

gceprovenance CLI ツール(go-tdx-guest リポジトリにもあります)は、引用の信頼性、鮮度チャレンジ、ホスト レジストリ レコード、インスタンス PZID バインディングを 1 つのコマンドでチェックする、完全な来歴検証を自動化します。

  1. gceprovenance ディレクトリに移動してツールをビルドします。
cd ~/go-tdx-guest/tools/gceprovenance
go build
  1. verify コマンドを使用して、完全な来歴検証を実行します。引用ファイル(quote.bin)と、先ほど生成したノンスチャレンジ($nonce)を渡します。
./gceprovenance verify -quote ~/go-tdx-guest/tools/attest/quote.bin -challenge $nonce
  1. すべてのチェックが成功すると、ツールは次のような検証レポートを出力します。
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

バックグラウンドで行われていること

  • 引用とチャレンジ: ツールは、引用の署名チェーンを Intel のルート証明書に対して検証し、引用の REPORT_DATA$nonce チャレンジと一致することを確認します。
  • ホストの来歴(PPID: リーフ PCK 証明書から 32 文字の 16 進数 PPID を抽出し、GCS(https://storage.googleapis.com/confidential-host-registry/)からホスト レジストリ JSON ドキュメントをダウンロードします。
  • インスタンスの来歴(PZID): ローカル GCE メタデータ サーバーにインスタンスの数値プロジェクト ID、ゾーン、インスタンス ID をクエリし、正規の PZID JSON ペイロード({"instanceId":...,"numericalProjectId":...,"zone":...})を作成して、その SHA-384 ダイジェストを計算し、引用の MR_OWNER と一致することを確認します。
  1. 取得したホスト レジストリ ドキュメントを調べます。

デフォルトでは、verify コマンドは取得したホスト レジストリ JSON ドキュメントを host_registry.json に保存します。これを調べて、ホスト プラットフォームのメタデータを表示できます。

cat host_registry.json

出力例:

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

このメタデータは、ホストマシンのプロパティを表しています。

  • zone: ホストマシンが存在する物理的な Google Cloud リージョン/ゾーン。
  • timestamp: このホストマシンのハードウェア証明書が Google Cloud によって最後にプロビジョニングおよび検証された UTC の日時。

7. クリーンアップ

クラウド コンソールまたはローカル開発環境で次のコマンドを実行します。

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

8. 次のステップ

詳しくは、Confidential VMs と Compute Engine をご覧ください。