1. סקירה כללית
Cloud KMS הוא שירות לניהול מפתחות שמתארח בענן ומאפשר לכם לנהל מפתחות קריפטוגרפיים לשירותי הענן שלכם באותו אופן שבו אתם מנהלים אותם בשרתים מקומיים. הוא כולל תמיכה בהצפנה, בפענוח, בחתימה ובאימות באמצעות מגוון סוגים ומקורות של מפתחות, כולל Cloud HSM למפתחות שמגובים בחומרה. במדריך הזה נלמד איך להצפין ולפענח נתונים באמצעות מפתחות אסימטריים של Cloud KMS.
מה תלמדו
- איך מפעילים את Cloud KMS API
- איך יוצרים אוסף מפתחות
- איך יוצרים מפתח הצפנה להצפנה/פענוח אסימטריים
2. הגדרה ודרישות
הגדרת סביבה בקצב אישי
- נכנסים אל Cloud Console ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. (אם עדיין אין לכם חשבון Gmail או G Suite, אתם צריכים ליצור חשבון).
חשוב לזכור את מזהה הפרויקט, שהוא שם ייחודי בכל הפרויקטים ב-Google Cloud (השם שלמעלה כבר תפוס ולא יתאים לכם, מצטערים!). בהמשך ה-codelab הזה נתייחס אליו כאל PROJECT_ID.
- לאחר מכן, תצטרכו להפעיל את החיוב ב-Cloud Console כדי להשתמש במשאבים של Google Cloud.
העלות של התרגול הזה לא אמורה להיות גבוהה, ואולי אפילו לא תצטרכו לשלם בכלל. חשוב לפעול לפי ההוראות בקטע 'ניקוי' כדי להשבית את המשאבים, וכך לא תחויבו אחרי שתסיימו את המדריך הזה. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.
מפעילים את Cloud Shell
ב-codelab הזה תשתמשו ב-Cloud Shell, סביבה וירטואלית חינמית שפועלת ב-Google Cloud. ב-GCP Console, לוחצים על סמל Cloud Shell בסרגל הכלים שבפינה הימנית העליונה:
יחלפו כמה רגעים עד שההקצאה והחיבור לסביבת העבודה יושלמו. בסיום התהליך, אמור להופיע משהו כזה:
המכונה הווירטואלית הזו כוללת את כל הכלים שדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 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 כללי.