گواهی TDX CVM و منشأ

۱. مرور کلی

ماشین‌های مجازی محرمانه (CVM) نوعی از ماشین‌های مجازی موتور محاسباتی هستند که از رمزگذاری حافظه مبتنی بر سخت‌افزار و محافظت از یکپارچگی استفاده می‌کنند. این امر به شما اطمینان می‌دهد که داده‌ها و برنامه‌های شما در حین استفاده در حافظه قابل خواندن یا تغییر نیستند. در این آزمایشگاه کد، یاد خواهید گرفت که چگونه یک گواهی Intel TDX را روی CVM ایجاد کنید و آن را به صورت محلی برای اهداف نمایشی تأیید کنید. علاوه بر این، میزبان Google Cloud و منشأ نمونه CVM را تأیید خواهید کرد.

این codelab شامل مراحل زیر است:

  • راه‌اندازی یک ماشین مجازی محرمانه Intel TDX
  • دریافت پیش فاکتور گواهی TDX
  • تأیید نقل قول و نانس گواهی TDX
  • تأیید صحت میان‌افزار GCE (OVMF)
  • تأیید منشأ میزبان و نمونه GCE TDX

آنچه یاد خواهید گرفت

  • نحوه دریافت استعلام گواهی TDX از طریق CVM با استفاده از ابزارهای go-tdx-guest
  • چگونه اصالت، تازگی (nonce) و یکپارچگی سیستم عامل GCE (OVMF) در نقل قول را تأیید کنیم؟
  • نحوه تأیید میزبان ابری گوگل و منشأ نمونه (جستجوی رجیستری PPID و اتصال نمونه PZID )

آنچه نیاز دارید

۲. تنظیمات و الزامات

برای فعال کردن API های لازم، دستور زیر را در کنسول Google Cloud یا محیط توسعه محلی خود اجرا کنید:

gcloud auth login

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

۳. راه‌اندازی CVM و دریافت پیش‌فاکتور TDX

در این مرحله، شما یک TDX CVM ایجاد می‌کنید و یک پیش‌فاکتور گواهی TDX را از سخت‌افزار دریافت می‌کنید.

  1. به کنسول گوگل کلود یا محیط توسعه محلی خود بروید. یک 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. یک محیط Go روی 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. ابزارهای go-tdx-guest را نصب کنید.

مخزن را کلون کنید و ابزار attest را بسازید که یک پیش‌فاکتور TDX تولید می‌کند.

git clone https://github.com/google/go-tdx-guest.git
cd go-tdx-guest/tools/attest
go build
  1. استعلام گواهینامه TDX را دریافت کنید:

از ابزار attest برای تولید یک نقل قول استفاده کنید. ما یک nonce (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 ذخیره شده است!

۴. تأیید استعلام گواهی TDX

اکنون که یک نقل قول Intel TDX ( quote.bin ) ایجاد کرده‌ایم، می‌توانیم آن را با استفاده از ابزار check ارائه شده در مخزن go-tdx-guest تأیید کنیم. این ابزار، نقل قول را با مشخصات اینتل مقایسه می‌کند، آن را با وثیقه‌های دانلود شده از سرویس صدور گواهینامه تأمین (PCS) اینتل مطابقت می‌دهد و محدودیت‌های سیاستی مانند nonce را برای جلوگیری از حملات بازپخش اعتبارسنجی می‌کند.

  1. به دایرکتوری ابزار check بروید و آن را بسازید:
cd ~/go-tdx-guest/tools/check
go build
  1. ابزار را برای تأیید امضاهای رمزنگاری و nonce اجرا کنید. ما از پرچم -get_collateral=true برای دانلود گواهی‌های TEE لازم از Intel's PCS، پرچم -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

۵. تأیید صحت میان‌افزار GCE (OVMF)

اگرچه وثیقه اینتل سخت‌افزار را تأیید می‌کند، اما تأیید نمی‌کند که ماشین مجازی در حال اجرای یک میان‌افزار اصلی و اصلاح‌نشده‌ی موتور محاسباتی گوگل (GCE) است.

گوگل تاییدیه‌های راه‌اندازی امضا شده (حاوی معیارهای طلایی یکپارچگی مرجع یا RIM) را برای همه نسخه‌های رسمی میان‌افزار GCE UEFI (OVMF) در یک مخزن عمومی ذخیره‌سازی ابری گوگل (GCS) منتشر می‌کند.

در این مرحله، ما از ابزار عمومی gce-tcb-verifier گوگل برای دریافت خودکار تاییدیه میان‌افزار از GCS، تأیید امضای گوگل روی آن و اعتبارسنجی معیار میان‌افزار CVM ( MRTD ) خود در برابر آن استفاده خواهیم کرد.

۱. ابزار تأییدکننده GCE TCB را بسازید

  1. مخزن عمومی 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)

۲. اعتبارسنجی قیمت پیشنهادی با تاییدیه نرم‌افزاری GCE

اکنون، ابزار gcetcbendorsement را برای اعتبارسنجی نقل قول گواهی خود اجرا کنید. از آنجا که این ابزار پس از تأیید موفقیت‌آمیز، بی‌صدا عمل می‌کند، می‌توانیم دستور را با && echo "Validation Succeeded!" زنجیره کنیم تا یک تأیید دوستانه و صریح از موفقیت دریافت کنیم:

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

خروجی:

Validation Succeeded!

زیر کاپوت چه اتفاقی می‌افتد؟

  1. استخراج : این ابزار، quote.bin را تجزیه کرده و اطلاعات مربوط به سفت‌افزار ( MRTD ) را از فایل TD Quote Body استخراج می‌کند.
  2. واکشی : با استفاده از MRTD یک URL GCS می‌سازد و VMLaunchEndorsement مربوطه را از مخزن عمومی گوگل ( gs://gce_tcb_integrity ) دانلود می‌کند.
  3. تأیید امضا : گواهی عمومی مرکز صدور گواهی ریشه گوگل ( https://pki.goog/cloud_integrity/GCE-cc-tcb-root_1.crt ) را دریافت می‌کند و امضای گوگل را روی تأییدیه دانلود شده به صورت رمزنگاری‌شده تأیید می‌کند.
  4. اعتبارسنجی اندازه‌گیری : این مرحله MRTD امضا شده توسط سخت‌افزار TDX در پیش‌فاکتور شما را با اندازه‌گیری‌های مرجع طلایی در تاییدیه امضا شده گوگل مقایسه می‌کند.

اگر همه بررسی‌ها با موفقیت انجام شود، دستور با کد 0 بی‌صدا خارج می‌شود (یا Validation Succeeded! را با echo زنجیروار چاپ می‌کند)، که ثابت می‌کند ماشین مجازی شما از میان‌افزار اصلی مورد تأیید گوگل استفاده می‌کند!

۶. تأیید منشأ میزبان و نمونه GCE TDX

در حالی که گواهی و تأیید میان‌افزار تأیید می‌کند که ماشین مجازی شما روی سخت‌افزار اصلی Intel TDX با میان‌افزار UEFI مورد تأیید گوگل اجرا می‌شود، تأییدیه GCE TDX Provenance، استعلام گواهی شما را مستقیماً از دو طریق مهم به زیرساخت Google Cloud متصل می‌کند:

  1. منشأ میزبان : با استخراج PPID منحصر به فرد پلتفرم (شناسه تأمین پلتفرم) از گواهی PCK مربوط به نقل قول، دستگاه میزبان فیزیکی Google Cloud که ماشین مجازی شما را اجرا می‌کند، شناسایی می‌کند. سپس رکورد رجیستری پلتفرم میزبان را از Google Cloud Storage ( confidential-host-registry ) بازیابی می‌کند که منطقه فیزیکی و آخرین زمان تأمین گواهی‌های تأیید میزبان توسط Google Cloud را ثبت می‌کند.
  2. منشأ نمونه (اتصال PZID) : گوگل کلود به صورت رمزنگاری هویت خاص ماشین مجازی شما ( ProjectNumber ، Zone و InstanceID ) را به رجیستر MR_OWNER مربوط به نقل قول TDX متصل می‌کند. تأیید این اتصال تضمین می‌کند که نقل قول منحصراً متعلق به نمونه شماست و از حملات تکرار یا جایگزینی نقل قول در ماشین‌های مجازی یا پروژه‌های مختلف جلوگیری می‌کند.

ابزار رابط خط فرمان gceprovenance (که در مخزن 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

زیر کاپوت چه اتفاقی می‌افتد؟

  • نقل قول و چالش : این ابزار زنجیره امضای نقل قول را با گواهی ریشه اینتل تأیید می‌کند و تأیید می‌کند که REPORT_DATA نقل قول با چالش $nonce شما مطابقت دارد.
  • منشأ میزبان ( PPID ) : این PPID هگز ۳۲ کاراکتری را از گواهی PCK برگ استخراج می‌کند و سند JSON رجیستری میزبان را از GCS دانلود می‌کند ( https://storage.googleapis.com/confidential-host-registry/ ) https://storage.googleapis.com/confidential-host-registry/ ).
  • منشأ نمونه ( PZID ) : این دستور از سرور محلی GCE Metadata برای شناسه عددی پروژه، منطقه و شناسه نمونه شما پرس‌وجو می‌کند، payload استاندارد 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 : منطقه/منطقه فیزیکی گوگل کلود که دستگاه میزبان در آن قرار دارد.
  • timestamp : تاریخ و زمان UTC که در آن گواهی‌های تأیید سخت‌افزار این دستگاه میزبان آخرین بار توسط Google Cloud تهیه و تأیید شده‌اند.

۷. پاکسازی

دستورات زیر را در کنسول ابری یا محیط توسعه محلی خود اجرا کنید:

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

۸. قدم بعدی چیست؟

درباره ماشین‌های مجازی محرمانه و موتور محاسباتی بیشتر بدانید.