TDX CVM 증명 및 출처

1. 개요

컨피덴셜 가상 머신 (CVM)은 하드웨어 기반 메모리 암호화 및 무결성 보호를 사용하는 Compute Engine 가상 머신 유형입니다. 이를 통해 사용 중인 데이터와 애플리케이션을 메모리에서 읽거나 수정할 수 없습니다. 이 Codelab에서는 CVM에서 Intel TDX 증명 견적을 생성하고 데모 목적으로 로컬에서 확인하는 방법을 알아봅니다. 또한 CVM의 Google Cloud 호스트 및 인스턴스 출처를 확인합니다.

이 Codelab에는 다음 단계가 포함됩니다.

  • Intel TDX 컨피덴셜 VM 설정
  • TDX 증명 견적 가져오기
  • TDX 증명 견적 및 Nonce 확인
  • GCE 펌웨어 (OVMF) 무결성 확인
  • GCE TDX 호스트 및 인스턴스 출처 확인

학습할 내용

  • go-tdx-guest 도구를 사용하여 CVM에서 TDX 증명 견적을 가져오는 방법
  • 견적의 진위성, 최신성 (Nonce), 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 도구를 사용하여 견적을 생성합니다. Nonce (REPORT_DATA 64바이트)를 전달하고 출력을 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)에서 다운로드한 담보를 기준으로 견적을 확인하며, 재생 공격을 방지하기 위해 Nonce와 같은 정책 제약조건을 검증합니다.

  1. check 도구 디렉터리로 이동하여 빌드합니다.
cd ~/go-tdx-guest/tools/check
go build
  1. 도구를 실행하여 암호화 서명 Nonce를 모두 확인합니다. -get_collateral=true 플래그를 사용하여 Intel의 PCS에서 필요한 TEE 인증서를 다운로드하고, -check_crl=true 플래그를 사용하여 인증서 해지를 확인하고, -report_data 플래그를 사용하여 Nonce의 최신성을 검증합니다.
./check -in ~/go-tdx-guest/tools/attest/quote.bin -inform bin \
    -get_collateral=true -check_crl=true \
    -report_data $nonce

견적이 암호화 방식으로 유효하고 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 출처 검증 은 두 가지 중요한 방법으로 증명 견적을 Google Cloud의 인프라에 직접 연결합니다.

  1. 호스트 출처: 견적의 PCK 인증서에서 플랫폼의 고유 PPID (플랫폼 프로비저닝 ID)를 추출하여 VM을 실행하는 실제 Google Cloud 호스트 머신을 식별합니다. 그런 다음 Google Cloud Storage (confidential-host-registry)에서 호스트 플랫폼의 레지스트리 레코드를 가져옵니다. 이 레코드는 실제 영역과 Google Cloud에서 호스트의 증명 인증서를 마지막으로 프로비저닝한 시점을 기록합니다.
  2. 인스턴스 출처 (PZID 결합): Google Cloud는 특정 VM의 ID (ProjectNumber, Zone, InstanceID)를 TDX 견적의 MR_OWNER 레지스터에 암호화 방식으로 결합합니다. 이 결합을 검증하면 견적이 인스턴스 에만 속하고 서로 다른 VM 또는 프로젝트에서 견적 재생 또는 대체 공격을 방지할 수 있습니다.

gceprovenance CLI 도구 (go-tdx-guest 저장소에도 있음)는 하나의 명령어에서 견적 진위성, 최신성 요청, 호스트 레지스트리 레코드, 인스턴스 PZID 결합을 확인하는 전체 출처 검증을 자동화합니다.

  1. gceprovenance 디렉터리로 이동하여 도구를 빌드합니다.
cd ~/go-tdx-guest/tools/gceprovenance
go build
  1. verify 명령어를 사용하여 전체 출처 검증을 실행합니다. 견적 파일 (quote.bin)과 앞에서 생성한 Nonce 요청 ($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): 인스턴스의 숫자 프로젝트 ID, 영역, 인스턴스 ID에 대해 로컬 GCE 메타데이터 서버를 쿼리하고, 정식 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. 정리

Cloud 콘솔 또는 로컬 개발 환경에서 다음 명령어를 실행합니다.

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

8. 다음 단계

컨피덴셜 VM 및 Compute Engine에 대해 자세히 알아보세요.