במדריך הזה נסביר איך לאמת הצהרות על מפתחות Cloud HSM, שתמיד מאוחסנים במודול אבטחה לחומרה (HSM). המדריך הזה רלוונטי גם למפתחות של Cloud HSM עם דיירים מרובים וגם למפתחות של Cloud HSM עם דייר יחיד.
סקירה כללית
בקריפטוגרפיה, אימות הוא הצהרה שמתאימה לקריאה למחשבים, שאפשר להוכיח באופן פרוגרמטי, ושחלק בתוכנה מצהיר על עצמו. אישורים הם רכיב חשוב בחישוב מהימן, ויכול להיות שיידרשו מסיבות שקשורות לתאימות.
כדי להציג ולאמת את האישורים, אתם מבקשים מ-HSM הצהרת אימות חתומה קריפטוגרפית, יחד עם שרשראות האישורים ששימשו לחתימה עליה. הצהרת האימות מופקת על ידי חומרת ה-HSM ונחתמת על ידי אישורים שבבעלות Google ועל ידי יצרן ה-HSM.
אחרי שמורידים את הצהרת האימות ואת שרשראות האישורים, אפשר לבדוק את המאפיינים שלה או לאמת את התוקף של האימות באמצעות שרשראות האישורים.
סקריפט האימות הוא סקריפט Python בקוד פתוח שפותח על ידי Google. אפשר לעיין בקוד המקור של הסקריפט כדי לקבל מידע נוסף על פורמט האישור ועל אופן הפעולה של האימות, או להשתמש בו כמודל לפתרון מותאם אישית.
הדוגמאות בנושא הזה מיועדות לסביבות Linux, כולל Cloud Shell. כדי לעקוב אחרי ההוראות בלקוחות macOS או Windows, יכול להיות שתצטרכו לבצע שינויים.
לפני שמתחילים
- אם צריך, יוצרים מפתח Cloud HSM באוסף מפתחות באזור שנתמך על ידי Cloud HSM.
מורידים ומתקינים את הסקריפטים לניתוח הערכים של האישור מיצרן ה-HSM. מורידים כל אחד מהסקריפטים האלה:
verify_pubkey.pyparse_v1.pyparse_v2.py
מעיינים במסמכי התיעוד לשימוש בסקריפטים, שזמינים באותו המיקום.
מורידים ומתקינים את הסקריפט לאימות הצהרות ואת הדרישות המוקדמות שלו, ומעיינים במסמכי התיעוד של הסקריפט.
אימות האישור
תהליך האימות של האישור יכול להתבצע באופן אוטומטי דרך מסוף Google Cloud , או באופן ידני על ידי הורדה של חבילת האישור ושל סקריפט האימות של האישור והרצה שלו באופן מקומי או ב-Cloud Shell.
אימות הצהרות דרך מסוף Google Cloud
אפשר לאמת את האישור דרך Google Cloud המסוף, שייפתח ב-Cloud Shell וימלא אותו מראש בקטעי הקוד שנדרשים לביצוע תהליך האימות המלא של האישור.
נכנסים לדף Key Management במסוף Google Cloud .
בוחרים את אוסף המפתחות שמכיל את המפתח שרוצים לאמת, ואז בוחרים את המפתח.
לוחצים על סמל האפשרויות הנוספות more_vert לצד גרסת המפתח שרוצים לאמת, ובוחרים באפשרות אימות האישור.
בתיבת הדו-שיח Verify attestation (אימות אישור), לוחצים על Open Cloud Shell (פתיחת Cloud Shell). סביבת Cloud Shell תיפתח ותאוכלס מראש בקטע הקוד שנדרש כדי להשלים את תהליך האימות.
בודקים את קטע הקוד שמולא מראש ב-Cloud Shell. קטע הקוד מוריד את סקריפט האימות של האישור ואת התלויות שלו, מריץ את פקודות gcloud כדי להוריד את האישור ואת שרשראות האישורים, ואז מריץ את הסקריפט כדי לאמת את האישור.
מריצים את קטע הקוד כדי לאמת את האישור.
אימות ידני של האימות (attestation)
צריך להוריד את האישור, את שרשראות האישורים ואת סקריפט האימות של האישור לפני שמאמתים את האישור באופן ידני.
מורידים את האימות ואת שרשראות האישורים.
המסוף
נכנסים לדף Key Management במסוף Google Cloud .
בוחרים את אוסף המפתחות שמכיל את המפתח שרוצים לאמת, ואז בוחרים את המפתח.
לוחצים על סמל האפשרויות הנוספות more_vert לצד גרסת המפתח שרוצים לאמת, ובוחרים באפשרות אימות האישור.
בתיבת הדו-שיח Verify attestation (אימות אישור), לוחצים על Download Attestation Bundle (הורדת חבילת אישורים). קובץ ZIP יורד למחשב ומכיל את שרשראות האישורים והאימות.
מחולצים את שרשראות האימות והאישורים מחבילת האימות.
gcloud
לוחצים על Activate Cloud Shell (הפעלת Cloud Shell) בחלק העליון של חלון המסוף.
בחלק התחתון של המסוף ייפתח סשן של Cloud Shell בתוך מסגרת חדשה ותופיע הודעה של שורת הפקודה. יכולות לעבור כמה שניות עד שהסשן של מעטפת הפקודות יופעל.
בשורת הפקודה של 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] \
בשורת הפקודה של 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] \
מורידים את הסקריפט לאימות הצהרות ואת הדרישות המוקדמות שלו, ועוברים על התיעוד של הסקריפט כדי לאמת את ההצהרה בקובץ ההצהרות באמצעות האישורים בקובץ האישורים.
ניתוח הערכים של האישור
התיעוד של יצרן ה-HSM כולל הוראות מלאות לשימוש בסקריפטים שלו כדי לנתח את הערכים של אישור ולבדוק את המפתח הציבורי של זוג מפתחות אסימטרי. כדי לנתח את האישור, צריך קודם לבטל את הדחיסה שלו באמצעות הפקודה הבאה.
מבטלים את הדחיסה של האימות הדחוס.
gzip -d < compressed_attestation.dat > attestation.dat
הקישורים האלה מובילים ישירות להוראות ספציפיות של יצרן ה-HSM:
ההוראות לניתוח הערך של האישור כוללות הפניה לשדות כלליים באישור, שלא ספציפיים למפתחות HSM ב-Cloud HSM.
בקטעים הבאים מוסבר איך לאמת מידע על המפתחות שספציפי ל-Cloud HSM.
אימות מזהה הגרסה של המפתח
אתם יכולים לבדוק אם גיבוב SHA-256 של מזהה המשאב של גרסת המפתח מופיע באישור. שם המשאב של המפתח הוא חלק מהשדה 0x0102 או מהשדה של מזהה המפתח בקובץ האישור. מזהה המפתח מורכב משני גיבובי SHA-256 שחוברו בפורמט הקסדצימלי. השני צריך להיות זהה לשם המשאב של המפתח.
מקבלים את מזהה המשאב של גרסת המפתח. אפשר להשתמש במסוףGoogle Cloud כדי לקבל את מזהה המשאב של גרסת המפתח, או להריץ את הפקודה הבאה:
gcloud kms keys versions list \ --location location \ --keyring key-ring-name \ --key key-name
בשורת הפקודה, מקצים את
resource_nameלמזהה של מקום המפתח שאותו אחזרתם.RESOURCE_NAME="projects/project-id/locations/location/keyRings/key-ring-name/cryptoKeys/key-name/cryptoKeyVersions/key-version"
מכיוון שתסריט הניתוח מעביר את כל שדות האישור בפורמט הקסדצימלי, מזהה המפתח עבר עיצוב לפורמט הקסדצימלי פעמיים. (פעם אחת בזמן יצירת מזהה המפתח, ופעם שנייה בזמן ניתוח האישור). כדי לוודא ששם המשאב תואם למזהה המפתח, צריך להמיר את שם המשאב לגיבוב הקסדצימלי SHA-256, להפוך המרה הקסדצימלית אחת של מזהה המפתח בקובץ האישור ולהשוות בין השניים.
RESOURCE_NAME_HEX="$(echo -n ${RESOURCE_NAME} | openssl dgst -sha256 -hex | awk '{print $2}')"סקריפט הניתוח מעביר את כל שדות האישור בפורמט הקסדצימלי, ומזהה המפתח מקודד באופן פנימי בפורמט הקסדצימלי בפעם השנייה. מגדירים את משתנה הסביבה
KEYID_HEXלערך של מזהה המפתח עם שכבה אחת של פענוח קידוד הקסדצימלי:KEYID_HEX=$(grep -m 1 0x0102 /path/to/parsed/attestation.dat | awk '{print $2}' | xxd -p -r)השוואה בין הערכים של
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.