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

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

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

מה תלמדו

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

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

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

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

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

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

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

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

מפעילים את Cloud Shell

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

vezHz_9nBUSt_0pD8eMHkzgHehRa83ILgMpcztEJtGZspECiZTk47O02PYk6Zp7jyStful3AIDEZU8qcCNbiXF4WcpkUdJi2LoUbxTWg4cZ4skDnvGKNywBZlDBzzWha111IZ1KqXQ

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

wQQCzLZ7_omk2cuoBaKVPnniKDFG6MsP8h2OA0j3Iw9LRSFQ9TkD6Ccq4dcUASPoD5UKe1Ur7bIgYn5gAh2r6BlQDnpFmgyAtv9x2D6ppXS0pfjfxViuEfoetgLvgVeduekc2hgU2Q

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

‫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-encryption-key עם המטרה asymmetric-encryption בתוך אוסף המפתחות שיצרתם.

$ gcloud kms keys create "my-asymmetric-encryption-key" \
    --location "global" \
    --keyring "my-keyring" \
    --purpose "asymmetric-encryption" \
    --default-algorithm "rsa-decrypt-oaep-4096-sha512"

5. הצפנת נתונים

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

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

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

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

$ echo "my-contents" > ./data.txt
$ openssl pkeyutl -encrypt -pubin \
    -in ./data.txt \
    -inkey ./key.pub \
    -pkeyopt "rsa_padding_mode:oaep" \
    -pkeyopt "rsa_oaep_md:sha512" \
    -pkeyopt "rsa_mgf1_md:sha512" > ./data.txt.enc

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

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

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

6. פענוח נתונים

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

$ gcloud kms asymmetric-decrypt \


    --location "global" \
    --keyring "my-keyring" \
    --key "my-asymmetric-encryption-key" \
    --version "1" \
    --plaintext-file - \
    --ciphertext-file ./data.txt.enc

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

הערך my-contents יודפס במסוף, והוא זהה לערך הטקסט הפשוט מהקובץ שלמעלה.

7. מעולה!

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

פינוי נפח

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

  • נכנסים אל Cloud Platform Console.
  • בוחרים את הפרויקט שרוצים לסגור ולוחצים על Delete (מחיקה) בחלק העליון. הפעולה הזו תגרום לכך שהפרויקט יתוזמן למחיקה.

מידע נוסף

רישיון

עבודה זו מורשית תחת רישיון Creative Commons שמותנה בייחוס 2.0 כללי.