אימות ומקור של מכונות וירטואליות סודיות (CVM) של TDX

1. סקירה כללית

מכונות וירטואליות סודיות (CVM) הן סוג של מכונות וירטואליות ב-Compute Engine שמשתמשות בהצפנת זיכרון מבוססת-חומרה ובהגנה על השלמות. כך מובטח שלא תהיה אפשרות לקרוא או לשנות את הנתונים והאפליקציות בזיכרון בזמן השימוש. בשיעור Codelab הזה נסביר איך ליצור הצעת מחיר לאימות Intel TDX במכונה וירטואלית סודית (CVM) ולאמת אותה באופן מקומי למטרות הדגמה. בנוסף, תאמתו את המקור של המארח והמופע של CVM ב-Google Cloud.

ה-codelab הזה כולל את השלבים הבאים:

  • הגדרת מכונה וירטואלית חסויה של Intel TDX
  • אחזור הצעת מחיר לאימות TDX
  • אימות הצעת המחיר והערך החד-פעמי של אישור TDX
  • אימות התקינות של קושחת GCE‏ (OVMF)
  • אימות המקור של מארח ומופע GCE TDX

מה תלמדו

  • איך מאחזרים הצעת מחיר לאימות TDX במכונה וירטואלית סודית באמצעות כלי go-tdx-guest
  • איך מאמתים את האותנטיות של הצעת המחיר, את התוקף שלה (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 Quote

בשלב הזה, תיצרו מכונה וירטואלית של TDX ותקבלו הצעת מחיר לאימות 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. מגדירים סביבת 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.

4. אימות של הצעת המחיר של TDX Attestation

אחרי שיצרנו הצעת מחיר של Intel TDX ‏ (quote.bin), אנחנו יכולים לאמת אותה באמצעות הכלי check שזמין במאגר go-tdx-guest. הכלי בודק את הציטוט בהשוואה למפרטים של Intel, מאמת אותו בהשוואה לנתונים שהורדו משירות אימות ההקצאה (PCS) של Intel ומאמת את מגבלות המדיניות, כמו ה-nonce, כדי למנוע מתקפות שידור חוזר.

  1. מנווטים לספריית הכלים check ויוצרים אותה:
cd ~/go-tdx-guest/tools/check
go build
  1. מריצים את הכלי כדי לאמת גם את החתימות הקריפטוגרפיות וגם את ה-nonce. נשתמש בדגל -get_collateral=true כדי להוריד את האישורים הדרושים של TEE מ-PCS של Intel, בדגל -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

אם הצעת המחיר תקפה מבחינה קריפטוגרפית והערך החד-פעמי תואם, הכלי ירשום הודעת הצלחה שדומה לדוגמה הבאה ויצא עם קוד 0:

INFO : TDX Quote verified successfully

5. אימות התקינות של קושחת GCE‏ (OVMF)

המסמכים של Intel מאמתים את החומרה, אבל לא מאמתים שהמכונה הווירטואלית מריצה קושחה מקורית של Google Compute Engine ‏ (GCE) שלא בוצעו בה שינויים.

‫Google מפרסמת אישורים להשקה חתומים (שכוללים מדידות שלמות של הפניה מוזהבת, או RIM) לכל הגרסאות הרשמיות של קושחת GCE UEFI ‏ (OVMF) בקטגוריה ציבורית של Google Cloud Storage ‏ (GCS).

בשלב הזה, נשתמש בכלי הציבורי של Google‏ gce-tcb-verifier כדי לאחזר באופן אוטומטי את אישור הקושחה מ-GCS, לאמת את החתימה של Google עליו ולאמת את מדידת הקושחה של CVM‏ (MRTD) מולו.

1. פיתוח הכלי לאימות TCB ב-GCE

  1. משכפלים את המאגר הציבורי gce-tcb-verifier מ-GitHub:
cd ~
git clone https://github.com/google/gce-tcb-verifier.git
  1. עוברים לספרייה של כלי ה-CLI ובוחרים באפשרות לבנייה:
cd gce-tcb-verifier/gcetcbendorsement/cli
go build -o gcetcbendorsement
  1. כדי שיהיה לכם נוח, מוסיפים את כלי הבנייה לנתיב:
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 ומחלץ את מדידת הקושחה (MRTD) מהגוף של הצעת המחיר של TD.
  2. אחזור: המערכת יוצרת כתובת URL של GCS באמצעות MRTD ומורידה את VMLaunchEndorsement המתאים מהמאגר הציבורי של Google‏ (gs://gce_tcb_integrity).
  3. אימות החתימה: המערכת מאחזרת את אישור ה-CA הבסיסי הציבורי של Google‏ (https://pki.goog/cloud_integrity/GCE-cc-tcb-root_1.crt) ומאמתת באופן קריפטוגרפי את החתימה של Google על האישור שהורד.
  4. אימות המדידה: המערכת משווה את MRTD שנחתם על ידי חומרת ה-TDX בהצעת המחיר שלכם למדידות הייחוס המוזהבות באישור החתום של Google.

אם כל הבדיקות עוברות בהצלחה, הפקודה תצא עם קוד 0 באופן שקט (או תדפיס Validation Succeeded! עם השרשור של הפקודה echo), וכך תוכיח שה-VM שלכם מריץ קושחה מקורית שאושרה על ידי Google.

6. אימות המקור של מארח ומופע GCE TDX

בעוד שאימות של אישור וקושחה מאשרים שהמכונה הווירטואלית פועלת על חומרת Intel TDX מקורית עם קושחת UEFI שאושרה על ידי Google, אימות המקור של GCE TDX מקשר את הצעת המחיר של האישור ישירות לתשתית של Google Cloud בשתי דרכים קריטיות:

  1. מקור המארח: מזהה את המחשב המארח הפיזי ב-Google Cloud שבו פועלת המכונה הווירטואלית, על ידי חילוץ מזהה PPID (מזהה הקצאת משאבים בפלטפורמה) הייחודי של הפלטפורמה מאישור ה-PCK של הצעת המחיר. לאחר מכן, הוא מאחזר את רשומת הרישום של פלטפורמת המארח מ-Google Cloud Storage ‏ (confidential-host-registry), שבה מתועד האזור הפיזי ומתי Google Cloud הקצתה לאחרונה את אישורי האימות של המארח.
  2. מקור המופע (קישור PZID): Google Cloud מקשר באופן מוצפן את הזהות הספציפית של מכונת ה-VM (ProjectNumber,‏ Zone ו-InstanceID) לרישום MR_OWNER של הצעת המחיר של TDX. אימות הקישור הזה מבטיח שהצעת המחיר שייכת באופן בלעדי למופע שלכם ומונע התקפות חוזרות או התקפות החלפה של הצעות מחיר במכונות וירטואליות או בפרויקטים שונים.

כלי ה-CLI‏ (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

מה קורה מאחורי הקלעים?

  • הצעת מחיר ואתגר: הכלי מאמת את שרשרת החתימה של הצעת המחיר מול אישור הבסיס של Intel, ומוודא שערך ה-REPORT_DATA של הצעת המחיר תואם לאתגר $nonce שלכם.
  • אימות מקור (PPID): הוא מחלץ את הערך ההקסדצימלי PPID באורך 32 תווים מאישור ה-PCK של עלה ומוריד את מסמך ה-JSON של רישום המארח מ-GCS‏ (https://storage.googleapis.com/confidential-host-registry/).
  • מקור המידע של המופע (PZID): הוא שולח שאילתה לשרת המטא-נתונים המקומי של GCE כדי לקבל את מזהה הפרויקט המספרי, האזור ומזהה המופע, בונה את מטען ה-JSON הקנוני של PZID ‏ ({"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: התאריך והשעה ב-UTC שבהם הוקצו ואומתו לאחרונה אישורי אימות החומרה של המכונה המארחת הזו על ידי Google Cloud.

7. הסרת המשאבים

מריצים את הפקודות הבאות במסוף הענן או בסביבת הפיתוח המקומית:

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

8. המאמרים הבאים

מידע נוסף על Confidential VMs ועל Compute Engine