חתימה ואימות של נתונים באמצעות Cloud KMS (אסימטרי)

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

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

תלמדו

  • איך מפעילים את Cloud KMS API
  • איך יוצרים אוסף מפתחות
  • איך יוצרים מפתח הצפנה לחתימה/אימות אסימטריים

2. הגדרה ודרישות

הגדרת סביבה בקצב אישי

  1. נכנסים למסוף Cloud ויוצרים פרויקט חדש או משתמשים מחדש בפרויקט קיים. (אם עדיין אין לכם חשבון Gmail או G Suite, עליכם ליצור חשבון).

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

חשוב לזכור את מזהה הפרויקט, שהוא שם ייחודי לכל הפרויקטים ב-Google Cloud (השם שלמעלה כבר נלקח ולא יתאים לכם, סליחה!). בהמשך נתייחס אליו כ-PROJECT_ID.

  1. בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים של Google Cloud.

השלמת הקודלאב הזה לא אמורה לעלות הרבה, אם בכלל. חשוב לפעול לפי ההוראות בקטע 'ניקוי', שבו מוסבר איך להשבית את המשאבים כדי שלא תחויבו אחרי סיום המדריך. משתמשים חדשים ב-Google Cloud זכאים להשתתף בתוכנית תקופת ניסיון בחינם בסך 300$.

הפעלת Cloud Shell

ב-codelab הזה נשתמש ב-Cloud Shell, סביבת וירטואליזציה בחינם שפועלת ב-Google Cloud. במסוף GCP, לוחצים על סמל Cloud Shell בסרגל הכלים שבפינה הימנית העליונה:

vezHz_9nBUSt_0pD8eMHkzgHehRa83ILgMpcztEJtGZspECiZTk47O02PYk6Zp7jyStful3AIDEZU8qcCNbiXF4WcpkUdJi2LoUbxTWg4cZ4skDnvGKNywBZlDBzzWha111IZ1KqXQ

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

wQQCzLZ7_omk2cuoBaKVPnniKDFG6MsP8h2OA0j3Iw9LRSFQ9TkD6Ccq4dcUASPoD5UKe1Ur7bIgYn5gAh2r6BlQDnpFmgyAtv9x2D6ppXS0pfjfxViuEfoetgLvgVeduekc2hgU2Q

המכונה הווירטואלית הזו כוללת את כל הכלים הדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, משפרת מאוד את הביצועים והאימות של הרשת. אלא אם צוין אחרת, מריצים את כל הפקודות מהמעטפת הזו.

3. הפעלת שירות Cloud KMS

כדי להשתמש ב-Cloud KMS, קודם צריך להפעיל את השירות בפרויקט. צריך לעשות זאת רק פעם אחת לכל פרויקט. כדי להפעיל את שירות Cloud KMS, מריצים את הפקודה הבאה:

$ gcloud services enable cloudkms.googleapis.com \
    --project "${GOOGLE_CLOUD_PROJECT}"

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

4. יצירת מפתח KMS

יוצרים אוסף מפתחות של Cloud KMS. ב-Cloud KMS, אוסף מפתחות הוא אוסף לוגי של מפתחות קריפטוגרפיים. אוסף המפתחות מכיל מטא-נתונים על המפתחות, כמו המיקום שלהם. יוצרים אוסף מפתחות בשם my-keyring באזור global:

$ gcloud kms keyrings create "my-keyring" \
    --location "global"

עכשיו יוצרים מפתח קריפטו בשם my-asymmetric-signing-key למטרה asymmetric-signing בתוך אוסף המפתחות שיצרתם.

$ gcloud kms keys create "my-asymmetric-signing-key" \
    --location "global" \
    --keyring "my-keyring" \
    --purpose "asymmetric-signing" \
    --default-algorithm "rsa-sign-pkcs1-4096-sha512"

5. נתוני חתימה

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

יוצרים קובץ עם נתונים לחתימה ומשתמשים בכלי שורת הפקודה gcloud כדי לחתום על הנתונים באמצעות מפתח Cloud KMS:

$ echo "my-contents" > ./data.txt
$ gcloud kms asymmetric-sign \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-asymmetric-signing-key" \
    --version "1" \
    --digest-algorithm "sha512" \
    --input-file ./data.txt \
    --signature-file ./data.txt.sig

החתימה נשמרת ב-data.txt.sig בדיסק. אם פותחים את הקובץ data.txt.sig, רואים שהוא מכיל תווים מוזרים שלא ניתן להדפיס אותם. הסיבה לכך היא שהנתונים המתקבלים הם בפורמט בינארי.

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

6. אימות הנתונים

במפתחות אסימטריים, Cloud KMS לא מבצע את האימות באופן ישיר. במקום זאת, הוא מספק גישה למפתח ציבורי, ואתם מאמתים את הנתונים באמצעות המפתח הציבורי הזה באמצעות קריפטוגרפיה של מפתח ציבורי. באמצעות מפתחות אסימטריים, אפשר לבצע אימות באופן אופליין לחלוטין בלי צורך בגישה ל-Cloud KMS או לממשקי API אחרים של Google Cloud. האימות מתבצע באמצעות כלי קריפטוגרפיה כמו openssl, או באמצעות שפת תכנות או ספרייה שתומכות בהצפנת מפתח ציבורי.

מורידים את המפתח הציבורי מ-Cloud KMS:

$ gcloud kms keys versions get-public-key "1" \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-asymmetric-signing-key" \
    --output-file ./key.pub

מאמתים את החתימה באמצעות המפתח הציבורי באמצעות הכלי בשורת הפקודה openssl:

$ openssl dgst -sha256 \
    -verify ./key.pub \
    -signature ./data.txt.sig ./data.txt

במסוף תופיע הודעה על הצלחה, שמציינת שהחתימה הדיגיטלית תקינה.

Verified OK

7. מעולה!

הפעלתם את Cloud KMS API, יצרתם מפתח חתימה אסימטרי וחתמתם על נתונים ואימתתם אותם. Cloud KMS הוא מוצר חזק, והחתימה/אימות הם רק קצה הקרחון של היכולות שלו.

ניקוי

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

  • נכנסים למסוף Cloud Platform.
  • בוחרים את הפרויקט שרוצים להשבית ולוחצים על 'Delete' בחלק העליון. הפעולה הזו תזמן את המחיקה של הפרויקט.

מידע נוסף

רישיון

העבודה הזו בשימוש במסגרת רישיון Creative Commons Attribution 2.0 Generic.