במדריך הזה נסביר איך לאמת הצהרות על מפתחות 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. קטע הקוד מוריד את הסקריפט לאימות האישור ואת התלות שלו, מריץ את הפקודות ב-CLI של gcloud כדי להוריד את האישור ואת שרשראות האישורים, ואז מריץ את הסקריפט כדי לאמת את האישור.
מריצים את קטע הקוד כדי לאמת את האישור.
אימות ידני של האימות (attestation)
צריך להוריד את האישור, את שרשראות האישורים ואת סקריפט האימות של האישור לפני שמאמתים את האישור באופן ידני.
מורידים את האימות ואת שרשראות האישורים.
המסוף
נכנסים לדף Key Management במסוף Google Cloud .
בוחרים את אוסף המפתחות שמכיל את המפתח שרוצים לאמת, ואז בוחרים את המפתח.
לוחצים על עוד more_vert לצד גרסת המפתח שרוצים לאמת, ובוחרים באפשרות אימות האישור.
בתיבת הדו-שיח Verify attestation (אימות אישור), לוחצים על Download Attestation Bundle (הורדת חבילת אישורים). קובץ ZIP יורד למחשב ומכיל את שרשרת האישורים ואת האישור.
מחולצים את שרשראות האימות והאישורים מחבילת האימות.
gcloud
לוחצים על Activate Cloud Shell (הפעלת Cloud Shell) בחלק העליון של חלון המסוף.
בחלק התחתון של המסוף ייפתח סשן של Cloud Shell בתוך מסגרת חדשה ותופיע הודעה של שורת הפקודה. הפעלת סשן ה-Shell יכולה להימשך כמה שניות.
בשורת הפקודה של Cloud Shell, משתמשים בפקודה
gcloud kms keys versions describeכדי לאחזר את האישור של המפתח שרוצים לאשר. הדגל--attestation-fileמציין את הנתיב ואת שם קובץ היעד של האישור שאוחזר.gcloud kms keys versions describe KEY_VERSION \ --key KEY_NAME \ --location LOCATION \ --keyring KEY_RING \ --attestation-file ATTESTATION_FILE_PATH \
בשורת הפקודה של 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 KEY_RING \ --output-file CERTIFICATE_FILE_PATH \
מורידים את הסקריפט לאימות הצהרות ואת הדרישות המוקדמות שלו, וקוראים את התיעוד של הסקריפט כדי לאמת את ההצהרה בקובץ ההצהרה באמצעות האישורים בקובץ האישורים.
ניתוח הערכים של האישור
במסמכי היצרן של ה-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 \ --key KEY_NAME
בשורת הפקודה, מקצים את
resource_nameלמזהה של מקום גרסת המפתח שאחזרתם.RESOURCE_NAME="projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/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.