1. 總覽
機密虛擬機器 (CVM) 是一種 Compute Engine 虛擬機器,使用以硬體為基礎的記憶體加密和完整性保護機制。這有助於確保資料和應用程式在使用期間,不會在記憶體中遭到讀取或修改。在本程式碼研究室中,您將瞭解如何在 CVM 上產生 Intel TDX 驗證引文,並在本地驗證引文,以進行示範。此外,您也會驗證 CVM 的 Google Cloud 主機和執行個體來源。
本程式碼研究室包含下列步驟:
- 設定 Intel TDX 機密 VM
- 擷取 TDX 認證報價
- 驗證 TDX 認證引文和隨機數
- 驗證 GCE 韌體 (OVMF) 完整性
- 驗證 GCE TDX 主機和執行個體來源
課程內容
- 如何使用
go-tdx-guest工具,在 CVM 上擷取 TDX 認證報價 - 如何驗證報價的真實性、新鮮度 (隨機值) 和 GCE 韌體完整性 (OVMF)
- 如何驗證 Google Cloud 主機和執行個體出處 (
PPID登錄檔查詢和PZID執行個體繫結)
軟硬體需求
- Google Cloud Platform 專案
- Google Compute Engine 和機密 VM 的基本知識
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 認證引用內容。
- 前往 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> 替換為專案的專屬 ID。
- 連線至 CVM。
gcloud compute ssh --zone us-central1-c tdx-cvm-attestation-codelab
- 在 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
- 安裝
go-tdx-guest工具。
複製存放區並建構 attest 工具,產生 TDX 引用。
git clone https://github.com/google/go-tdx-guest.git cd go-tdx-guest/tools/attest go build
- 擷取 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 的 Provisioning Certification Service (PCS) 下載的擔保品進行驗證,並驗證隨機值等政策限制,以防範重送攻擊。
- 前往
check工具目錄並建構:
cd ~/go-tdx-guest/tools/check go build
- 執行這項工具,同時驗證加密簽章和隨機值。我們會使用
-get_collateral=true標記從 Intel 的 PCS 下載必要的 TEE 憑證、使用-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) bucket 中。
在這個步驟中,我們會使用 Google 的公開 gce-tcb-verifier 工具,從 GCS 自動擷取韌體認可,驗證 Google 在該認可上的簽章,並根據該認可驗證 CVM 的韌體測量值 (MRTD)。
1. 建構 GCE TCB 驗證工具
- 從 GitHub 複製公開
gce-tcb-verifier存放區:
cd ~ git clone https://github.com/google/gce-tcb-verifier.git
- 前往 CLI 工具目錄並建構:
cd gce-tcb-verifier/gcetcbendorsement/cli go build -o gcetcbendorsement
- 將建構的工具新增至 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!
實際情況為何?
- 擷取:工具會剖析
quote.bin,並從 TD Quote Body 擷取韌體測量值 (MRTD)。 - 擷取:使用
MRTD建構 GCS 網址,並從 Google 的公開 bucket (gs://gce_tcb_integrity) 下載對應的VMLaunchEndorsement。 - 簽章驗證:擷取 Google 的公開根 CA 憑證 (
https://pki.goog/cloud_integrity/GCE-cc-tcb-root_1.crt),並以密碼編譯方式驗證下載的認可聲明上 Google 的簽章。 - 測量驗證:比較報價中 TDX 硬體簽署的
MRTD與 Google 簽署認可中的黃金參考測量值。
如果所有檢查都通過,指令會以代碼 0 無聲結束 (或使用串連的 echo 列印 Validation Succeeded!),證明 VM 正在執行 Google 認證的韌體!
6. 驗證 GCE TDX 主機和執行個體來源
雖然認證和韌體驗證可確認 VM 是在搭載 Google 認可 UEFI 韌體的正版 Intel TDX 硬體上執行,但 GCE TDX Provenance Verification 會透過以下兩種重要方式,將認證引號直接連結至 Google Cloud 的基礎架構:
- 主機來源:從引號的 PCK 憑證中擷取平台專屬的 PPID (平台佈建 ID),藉此識別執行 VM 的實體 Google Cloud 主體機器。接著,系統會從 Google Cloud Storage (
confidential-host-registry) 擷取主機平台的登錄記錄,其中記錄了實體區域,以及 Google Cloud 上次佈建主機認證憑證的時間。 - 執行個體來源 (PZID 繫結):Google Cloud 會將特定 VM 的身分 (
ProjectNumber、Zone和InstanceID) 以密碼編譯方式繫結至 TDX 引用內容的MR_OWNER暫存器。驗證這項繫結可確保報價專屬於您的執行個體,並防止不同 VM 或專案發生報價重播或替換攻擊。
gceprovenance CLI 工具 (也位於 go-tdx-guest 存放區) 可自動執行完整的出處驗證,只要一個指令即可檢查引號真實性、新鮮度挑戰、主機登錄記錄和執行個體 PZID 繫結。
- 前往
gceprovenance目錄並建構工具:
cd ~/go-tdx-guest/tools/gceprovenance go build
- 使用
verify指令執行完整的來源驗證。我們會傳遞先前產生的引用檔案 (quote.bin) 和隨機數驗證 ($nonce):
./gceprovenance verify -quote ~/go-tdx-guest/tools/attest/quote.bin -challenge $nonce
- 如果所有檢查都成功通過,工具會輸出類似下列內容的驗證報告:
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 個字元的十六進位PPID,並從 GCS (https://storage.googleapis.com/confidential-host-registry/) 下載主機登錄 JSON 文件。 - 執行個體來源 (
PZID):查詢執行個體的本機 GCE 中繼資料伺服器,取得執行個體的數值專案 ID、區域和執行個體 ID,建構標準 PZID JSON 酬載 ({"instanceId":...,"numericalProjectId":...,"zone":...}),計算其 SHA-384 摘要,並驗證摘要是否與引號中的MR_OWNER相符。
- 檢查擷取的主機登錄文件:
根據預設,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. 清除
在 Cloud 控制台或本機開發環境中執行下列指令:
# Delete the CVM instance gcloud compute instances delete tdx-cvm-attestation-codelab --zone=us-central1-c
8. 後續步驟
進一步瞭解機密 VM 和 Compute Engine。