אימות האישורים

במדריך הזה נסביר איך לאמת הצהרות על מפתחות Cloud HSM, שתמיד מאוחסנים במודול אבטחה לחומרה (HSM). המדריך הזה רלוונטי גם למפתחות של Cloud HSM עם דיירים מרובים וגם למפתחות של Cloud HSM עם דייר יחיד.

סקירה כללית

בקריפטוגרפיה, אימות הוא הצהרה שמתאימה לקריאה למחשבים, שאפשר להוכיח באופן פרוגרמטי, ושחלק בתוכנה מצהיר על עצמו. אישורים הם רכיב חשוב בחישוב מהימן, ויכול להיות שיידרשו מסיבות שקשורות לתאימות.

כדי להציג ולאמת את האישורים, אתם מבקשים מ-HSM הצהרת אימות חתומה קריפטוגרפית, יחד עם שרשראות האישורים ששימשו לחתימה עליה. הצהרת האימות מופקת על ידי חומרת ה-HSM ונחתמת על ידי אישורים שבבעלות Google ועל ידי יצרן ה-HSM.

אחרי שמורידים את הצהרת האימות ואת שרשראות האישורים, אפשר לבדוק את המאפיינים שלה או לאמת את התוקף של האימות באמצעות שרשראות האישורים.

סקריפט האימות הוא סקריפט Python בקוד פתוח שפותח על ידי Google. אפשר לעיין בקוד המקור של הסקריפט כדי לקבל מידע נוסף על פורמט האישור ועל אופן הפעולה של האימות, או להשתמש בו כמודל לפתרון מותאם אישית.

הדוגמאות בנושא הזה מיועדות לסביבות Linux, כולל Cloud Shell. כדי לעקוב אחרי ההוראות בלקוחות macOS או Windows, יכול להיות שתצטרכו לבצע שינויים.

לפני שמתחילים

אימות האישור

תהליך האימות של האישור יכול להתבצע באופן אוטומטי דרך מסוף Google Cloud , או באופן ידני על ידי הורדה של חבילת האישור ושל סקריפט האימות של האישור והרצה שלו באופן מקומי או ב-Cloud Shell.

אימות הצהרות דרך מסוף Google Cloud

אפשר לאמת את האישור דרך Google Cloud המסוף, שייפתח ב-Cloud Shell וימלא אותו מראש בקטעי הקוד שנדרשים לביצוע תהליך האימות המלא של האישור.

  1. נכנסים לדף Key Management במסוף Google Cloud .

    כניסה לדף Key Management

  2. בוחרים את אוסף המפתחות שמכיל את המפתח שרוצים לאמת, ואז בוחרים את המפתח.

  3. לוחצים על סמל האפשרויות הנוספות לצד גרסת המפתח שרוצים לאמת, ובוחרים באפשרות אימות האישור.

  4. בתיבת הדו-שיח Verify attestation (אימות אישור), לוחצים על Open Cloud Shell (פתיחת Cloud Shell). סביבת Cloud Shell תיפתח ותאוכלס מראש בקטע הקוד שנדרש כדי להשלים את תהליך האימות.

  5. בודקים את קטע הקוד שמולא מראש ב-Cloud Shell. קטע הקוד מוריד את סקריפט האימות של האישור ואת התלויות שלו, מריץ את פקודות gcloud כדי להוריד את האישור ואת שרשראות האישורים, ואז מריץ את הסקריפט כדי לאמת את האישור.

  6. מריצים את קטע הקוד כדי לאמת את האישור.

אימות ידני של האימות (attestation)

צריך להוריד את האישור, את שרשראות האישורים ואת סקריפט האימות של האישור לפני שמאמתים את האישור באופן ידני.

  1. מורידים את האימות ואת שרשראות האישורים.

    המסוף

    1. נכנסים לדף Key Management במסוף Google Cloud .

      כניסה לדף Key Management

    2. בוחרים את אוסף המפתחות שמכיל את המפתח שרוצים לאמת, ואז בוחרים את המפתח.

    3. לוחצים על סמל האפשרויות הנוספות לצד גרסת המפתח שרוצים לאמת, ובוחרים באפשרות אימות האישור.

    4. בתיבת הדו-שיח Verify attestation (אימות אישור), לוחצים על Download Attestation Bundle (הורדת חבילת אישורים). קובץ ZIP יורד למחשב ומכיל את שרשראות האישורים והאימות.

    5. מחולצים את שרשראות האימות והאישורים מחבילת האימות.

    gcloud

    1. לוחצים על Activate Cloud Shell (הפעלת Cloud Shell) בחלק העליון של חלון המסוף.

      הפעלת Cloud Shell בחלק התחתון של המסוף ייפתח סשן של Cloud Shell בתוך מסגרת חדשה ותופיע הודעה של שורת הפקודה. יכולות לעבור כמה שניות עד שהסשן של מעטפת הפקודות יופעל.

      סשן Cloud Shell

    2. בשורת הפקודה של Cloud Shell, משתמשים בפקודה gcloud kms keys versions describe כדי לאחזר את האישור של המפתח שרוצים לאשר. הדגל --attestation-file מציין את הנתיב ואת שם הקובץ של היעד לאימות שאוחזר.

      gcloud kms keys versions describe key-version \
       --key key-name \
       --location location \
       --keyring keyring-name \
       --attestation-file [attestation-file] \
      
    3. בשורת הפקודה של Cloud Shell, משתמשים בפקודה gcloud kms keys versions get-certificate-chain כדי לאחזר את שרשראות האישורים של המפתח שרוצים לאמת. הדגל --output-file מציין את נתיב היעד ואת שם הקובץ של האישורים שאוחזרו.

      gcloud kms keys versions get-certificate-chain key-version \
       --key key-name \
       --location location \
       --keyring keyring-name \
       --output-file [certificates-file] \
      
  2. מורידים את הסקריפט לאימות הצהרות ואת הדרישות המוקדמות שלו, ועוברים על התיעוד של הסקריפט כדי לאמת את ההצהרה בקובץ ההצהרות באמצעות האישורים בקובץ האישורים.

ניתוח הערכים של האישור

התיעוד של יצרן ה-HSM כולל הוראות מלאות לשימוש בסקריפטים שלו כדי לנתח את הערכים של אישור ולבדוק את המפתח הציבורי של זוג מפתחות אסימטרי. כדי לנתח את האישור, צריך קודם לבטל את הדחיסה שלו באמצעות הפקודה הבאה.

  • מבטלים את הדחיסה של האימות הדחוס.

    gzip -d < compressed_attestation.dat > attestation.dat
    

הקישורים האלה מובילים ישירות להוראות ספציפיות של יצרן ה-HSM:

ההוראות לניתוח הערך של האישור כוללות הפניה לשדות כלליים באישור, שלא ספציפיים למפתחות HSM ב-Cloud HSM.

בקטעים הבאים מוסבר איך לאמת מידע על המפתחות שספציפי ל-Cloud HSM.

אימות מזהה הגרסה של המפתח

אתם יכולים לבדוק אם גיבוב SHA-256 של מזהה המשאב של גרסת המפתח מופיע באישור. שם המשאב של המפתח הוא חלק מהשדה 0x0102 או מהשדה של מזהה המפתח בקובץ האישור. מזהה המפתח מורכב משני גיבובי SHA-256 שחוברו בפורמט הקסדצימלי. השני צריך להיות זהה לשם המשאב של המפתח.

  1. מקבלים את מזהה המשאב של גרסת המפתח. אפשר להשתמש במסוףGoogle Cloud כדי לקבל את מזהה המשאב של גרסת המפתח, או להריץ את הפקודה הבאה:

    gcloud kms keys versions list \
       --location location \
       --keyring key-ring-name \
       --key key-name
    
  2. בשורת הפקודה, מקצים את resource_name למזהה של מקום המפתח שאותו אחזרתם.

    RESOURCE_NAME="projects/project-id/locations/location/keyRings/key-ring-name/cryptoKeys/key-name/cryptoKeyVersions/key-version"
    
  3. מכיוון שתסריט הניתוח מעביר את כל שדות האישור בפורמט הקסדצימלי, מזהה המפתח עבר עיצוב לפורמט הקסדצימלי פעמיים. (פעם אחת בזמן יצירת מזהה המפתח, ופעם שנייה בזמן ניתוח האישור). כדי לוודא ששם המשאב תואם למזהה המפתח, צריך להמיר את שם המשאב לגיבוב הקסדצימלי SHA-256, להפוך המרה הקסדצימלית אחת של מזהה המפתח בקובץ האישור ולהשוות בין השניים.

    RESOURCE_NAME_HEX="$(echo -n ${RESOURCE_NAME} | openssl dgst -sha256 -hex | awk '{print $2}')"
    
  4. סקריפט הניתוח מעביר את כל שדות האישור בפורמט הקסדצימלי, ומזהה המפתח מקודד באופן פנימי בפורמט הקסדצימלי בפעם השנייה. מגדירים את משתנה הסביבה KEYID_HEX לערך של מזהה המפתח עם שכבה אחת של פענוח קידוד הקסדצימלי:

    KEYID_HEX=$(grep -m 1 0x0102 /path/to/parsed/attestation.dat | awk '{print $2}' | xxd -p -r)
    
  5. השוואה בין הערכים של RESOURCE_NAME_HEX ו-KEYID_HEX כמחרוזות:

    test  ${RESOURCE_NAME_HEX} == ${KEYID_HEX:(-64)} || echo "Values don't match"
    

    אם הערכים תואמים, לא מוחזר פלט והפקודה יוצאת עם קוד 0.

אימות מאפיינים אחרים של המפתח

אתם יכולים לראות מאפייני מפתח שונים, שתואמים לשדות בתקן PKCS #11. הדוגמאות הבאות יעזרו לכם לאמת מאפיינים אחרים של המפתח.

  • האם אפשר לחלץ מפתח מאוחסן בשדה 0x0102 של הפלט המנותח. כדי לבדוק אם אפשר לחלץ מפתח, בודקים את השדה 0x0162. הערך \x01 הוא true והערך \x00 הוא false.

    אי אפשר לחלץ מפתחות מ-Cloud HSM.

    grep '0x0162:' /path/to/parsed/attestation.dat
    
  • איך המפתח הגיע ל-HSM (אם הוא נוצר ישירות או יובא) מאוחסן בשדה 0x0163. אם המפתח נוצר באופן מקומי ב-HSM, השדה מוגדר ל-\x01. השדה של מפתח מיובא מוגדר ל-\x00.

    אפשר להסיק כמה פרטים מהאופן שבו המפתח הגיע ל-HSM. אם המפתח נוצר ב-Cloud HSM, המשמעות היא שהמפתח מעולם לא אוחסן לא מוצפן מחוץ ל-HSM. אם המפתח יובא, מנגנון הייבוא מבטיח שהמפתח מוגן במעבר במהלך תהליך הייבוא, ולאחר מכן בתוך Cloud HSM.

    grep '0x0163:' /path/to/parsed/attestation.dat
    
  • סוג המפתח מאוחסן בשדה 0x0100. סוגי המפתחות מתועדים בתקן PCKS#11 עם הקידומת CKK_*. לדוגמה, מפתח AES הוא מסוג \x1f.

    grep '0x0100:' /path/to/parsed/attestation.dat
    

מידע נוסף

מאמתים אישור כדי לקבוע אם גרסת מפתח נוצרה בתוך HSM.