۱. مرور کلی
ماشینهای مجازی محرمانه (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 را از سختافزار دریافت میکنید.
- به کنسول گوگل کلود یا محیط توسعه محلی خود بروید. یک 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> ، شناسه منحصر به فرد پروژه خود را قرار دهید.
- به CVM متصل شوید.
gcloud compute ssh --zone us-central1-c tdx-cvm-attestation-codelab
- یک محیط 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
- ابزارهای
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 برای تولید یک نقل قول استفاده کنید. ما یک 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 را برای جلوگیری از حملات بازپخش اعتبارسنجی میکند.
- به دایرکتوری ابزار
checkبروید و آن را بسازید:
cd ~/go-tdx-guest/tools/check go build
- ابزار را برای تأیید امضاهای رمزنگاری و 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 را بسازید
- مخزن عمومی
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)
۲. اعتبارسنجی قیمت پیشنهادی با تاییدیه نرمافزاری GCE
اکنون، ابزار gcetcbendorsement را برای اعتبارسنجی نقل قول گواهی خود اجرا کنید. از آنجا که این ابزار پس از تأیید موفقیتآمیز، بیصدا عمل میکند، میتوانیم دستور را با && echo "Validation Succeeded!" زنجیره کنیم تا یک تأیید دوستانه و صریح از موفقیت دریافت کنیم:
gcetcbendorsement tdx validate ~/go-tdx-guest/tools/attest/quote.bin && echo "Validation Succeeded!"
خروجی:
Validation Succeeded!
زیر کاپوت چه اتفاقی میافتد؟
- استخراج : این ابزار،
quote.binرا تجزیه کرده و اطلاعات مربوط به سفتافزار (MRTD) را از فایل TD Quote Body استخراج میکند. - واکشی : با استفاده از
MRTDیک URL GCS میسازد وVMLaunchEndorsementمربوطه را از مخزن عمومی گوگل (gs://gce_tcb_integrity) دانلود میکند. - تأیید امضا : گواهی عمومی مرکز صدور گواهی ریشه گوگل (
https://pki.goog/cloud_integrity/GCE-cc-tcb-root_1.crt) را دریافت میکند و امضای گوگل را روی تأییدیه دانلود شده به صورت رمزنگاریشده تأیید میکند. - اعتبارسنجی اندازهگیری : این مرحله
MRTDامضا شده توسط سختافزار TDX در پیشفاکتور شما را با اندازهگیریهای مرجع طلایی در تاییدیه امضا شده گوگل مقایسه میکند.
اگر همه بررسیها با موفقیت انجام شود، دستور با کد 0 بیصدا خارج میشود (یا Validation Succeeded! را با echo زنجیروار چاپ میکند)، که ثابت میکند ماشین مجازی شما از میانافزار اصلی مورد تأیید گوگل استفاده میکند!
۶. تأیید منشأ میزبان و نمونه GCE TDX
در حالی که گواهی و تأیید میانافزار تأیید میکند که ماشین مجازی شما روی سختافزار اصلی Intel TDX با میانافزار UEFI مورد تأیید گوگل اجرا میشود، تأییدیه GCE TDX Provenance، استعلام گواهی شما را مستقیماً از دو طریق مهم به زیرساخت Google Cloud متصل میکند:
- منشأ میزبان : با استخراج PPID منحصر به فرد پلتفرم (شناسه تأمین پلتفرم) از گواهی PCK مربوط به نقل قول، دستگاه میزبان فیزیکی Google Cloud که ماشین مجازی شما را اجرا میکند، شناسایی میکند. سپس رکورد رجیستری پلتفرم میزبان را از Google Cloud Storage (
confidential-host-registry) بازیابی میکند که منطقه فیزیکی و آخرین زمان تأمین گواهیهای تأیید میزبان توسط Google Cloud را ثبت میکند. - منشأ نمونه (اتصال PZID) : گوگل کلود به صورت رمزنگاری هویت خاص ماشین مجازی شما (
ProjectNumber،ZoneوInstanceID) را به رجیسترMR_OWNERمربوط به نقل قول TDX متصل میکند. تأیید این اتصال تضمین میکند که نقل قول منحصراً متعلق به نمونه شماست و از حملات تکرار یا جایگزینی نقل قول در ماشینهای مجازی یا پروژههای مختلف جلوگیری میکند.
ابزار رابط خط فرمان gceprovenance (که در مخزن go-tdx-guest نیز قرار دارد) تأیید منشأ را بهطور کامل خودکار میکند - بررسی اصالت نقلقول، چالش تازگی، رکورد رجیستری میزبان و اتصال PZID نمونه در یک فرمان.
- به دایرکتوری
gceprovenanceبروید و ابزار را بسازید:
cd ~/go-tdx-guest/tools/gceprovenance go build
- با استفاده از دستور
verify، تأیید اصالت کامل را اجرا کنید. ما فایل نقل قول (quote.bin) و چالش nonce ($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
زیر کاپوت چه اتفاقی میافتد؟
- نقل قول و چالش : این ابزار زنجیره امضای نقل قول را با گواهی ریشه اینتل تأیید میکند و تأیید میکند که
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در گیومه مطابقت دارد.
- سند رجیستری میزبان بازیابی شده را بررسی کنید:
به طور پیشفرض، دستور 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
۸. قدم بعدی چیست؟
درباره ماشینهای مجازی محرمانه و موتور محاسباتی بیشتر بدانید.