במאמר הזה מוסבר איך לבצע את הפעולות הבאות במפתח סימטרי גולמי:
- הצפנה של תוכן טקסט או תוכן בינארי בטקסט לא מוצפן באופן מקומי או באמצעות Cloud KMS.
- פענוח של טקסטים מוצפנים באופן מקומי או באמצעות Cloud KMS.
אם אתם רוצים לבצע פעולה רגילה (לא גולמית) של מפתח סימטרי, תוכלו לעיין במאמר בנושא הצפנה ופענוח של נתונים באמצעות מפתח סימטרי.
ההצפנה הסימטרית הגולמית מאפשרת להצפין ולפענח את הנתונים באופן מקומי בשרתים מקומיים או באמצעות Cloud KMS, ולהעביר נתונים מוצפנים בין ספריות שונות וספקי שירותים שונים בלי לפענח אותם קודם. הפונקציונליות הזו תלויה ביכולת לגשת למפתח בנקודת הפעולה. אם רוצים להשתמש בטקסטים המוצפנים מחוץ ל- Google Cloud, צריך להשתמש במפתח מיובא כי אי אפשר לייצא מפתחות שנוצרו ב-Cloud KMS. אלגוריתמי ההצפנה האלה יוצרים טקסטים מוצפנים סטנדרטיים שאפשר לפענח אותם באמצעות כל שירות פענוח סטנדרטי. אנחנו תומכים באלגוריתמים הבאים של הצפנה סימטרית גולמית:
AES-128-GCMAES-256-GCMAES-128-CBCAES-256-CBCAES-128-CTRAES-256-CTR
חשוב לשים לב לנקודות הבאות לגבי אלגוריתמים גולמיים להצפנה:
AES-GCMמספק אימות על סמך נתונים מאומתים נוספים (AAD) ומייצר תג אימות. זהו אלגוריתם ההצפנה המומלץ לשימוש. אי אפשר לפענח נתונים שהוצפנו באמצעות אלגוריתמים שלAES-GCMבלי ה-AAD שסופק.ב-
AES-CBC, הגודל של הטקסט הרגיל צריך להיות כפולה של גודל הבלוק (16 בייט). אם הטקסט הרגיל לא מתחלק בגודל הבלוק, צריך להוסיף לו ריפוד לפני ההצפנה. אחרת, הפעולה תיכשל ותוצג שגיאה שמציינת את הבעיה.
AES-CBCו-AES-CTRהם לא סכימות הצפנה מאומתות, ולכן הם עלולים להוביל לסיכון גבוה יותר של שימוש לרעה בטעות. הם מוצעים כדי לתמוך בצרכים של מערכות מדור קודם ובאינטראופרביליות, וחשוב להשתמש בהם בזהירות. כדי למנוע שימוש לרעה מקרי, השימוש באלגוריתמי ההצפנה האלה מחייב את הרשאות ה-IAM הבאות:-
cloudkms.cryptoKeyVersions.manageRawAesCbcKeysלמשךAES-CBC. -
cloudkms.cryptoKeyVersions.manageRawAesCtrKeysלמשךAES-CTR.
-
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות לשימוש בהצפנה גולמית, אתם צריכים לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים במפתח:
-
להצפנה בלבד:
Cloud KMS CryptoKey Encrypter (
roles/cloudkms.cryptoKeyEncrypter) -
לפענוח בלבד:
Cloud KMS CryptoKey Decrypter (
roles/cloudkms.cryptoKeyDecrypter) -
כדי להצפין ולפענח:
Cloud KMS CryptoKey Encrypter/Decrypter (
roles/cloudkms.cryptoKeyEncrypterDecrypter)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
תפקידים נוספים לאלגוריתמים לא מאומתים של הצפנה גולמית
- כדי להשתמש במפתחות
AES-CBC: Cloud KMS Expert Raw AES-CBC Key Manager (roles/cloudkms.expertRawAesCbc) - כדי להשתמש במפתחות
AES-CTR: Cloud KMS Expert Raw AES-CTR Key Manager (AES-CTR)roles/cloudkms.expertRawAesCtr
לפני שמתחילים
- מעניקים את ההרשאות המוזכרות להצפנה סימטרית גולמית לגורמים הרלוונטיים.
- יוצרים אוסף מפתחות כמו שמתואר במאמר בנושא יצירה של אוספי מפתחות.
- יוצרים ומייבאים מפתח הצפנה סימטרי גולמי כמו שמתואר במאמרים בנושא יצירת מפתחות וייבוא מפתחות.
הצפנה
gcloud
כדי להשתמש ב-Cloud KMS בשורת הפקודה, קודם צריך להתקין את הגרסה האחרונה של Google Cloud CLI או לשדרג אליה.
gcloud kms raw-encrypt \
--location LOCATION \
--keyring KEY_RING \
--key KEY_NAME \
--version KEY_VERSION \
--plaintext-file INPUT_FILE_PATH \
--ciphertext-file OUTPUT_FILE_PATH
מחליפים את מה שכתוב בשדות הבאים:
LOCATION: המיקום ב-Cloud KMS שבו נמצא אוסף המפתחות.
KEY_RING: השם של אוסף המפתחות שמכיל את המפתח.
KEY_NAME: השם של המפתח שרוצים להשתמש בו להצפנה.
KEY_VERSION: המזהה של גרסת המפתח שבה רוצים להשתמש להצפנה.
INPUT_FILE_PATH: הנתיב לקובץ המקומי לקריאת נתוני הטקסט הפשוט.OUTPUT_FILE_PATH: הנתיב של הקובץ המקומי לשמירת הפלט המוצפן.
כדי לקבל מידע על כל הדגלים והערכים האפשריים, מריצים את הפקודה עם הדגל --help.
API
בדוגמאות האלה נעשה שימוש ב-curl כלקוח HTTP כדי להדגים את השימוש ב-API. מידע נוסף על בקרת גישה זמין במאמר גישה ל-Cloud KMS API.
כשמשתמשים ב-JSON וב-API בארכיטקטורת REST, צריך לקודד את התוכן ב-Base64 לפני שאפשר להצפין אותו באמצעות Cloud KMS.
משתמשים בשיטה rawEncrypt כדי להצפין נתונים בטקסט לא מוצפן:
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSION:rawEncrypt" \
--request "POST" \
--header "authorization: Bearer TOKEN" \
--header "content-type: application/json" \
--data '{"plaintext": "BASE64_ENCODED_INPUT", "additionalAuthenticatedData": "BASE64_ENCODED_AAD"}'
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט שמכיל את מחזיק המפתחות. -
LOCATION: המיקום ב-Cloud KMS שבו נמצא אוסף המפתחות. -
KEY_RING: השם של אוסף המפתחות שמכיל את המפתח. -
KEY_NAME: השם של המפתח שרוצים להשתמש בו להצפנה. -
KEY_VERSION: המזהה של גרסת המפתח שבה רוצים להשתמש להצפנה. -
BASE64_ENCODED_INPUT: נתוני הטקסט הלא מוצפן בקידוד base64 שרוצים להצפין. -
BASE64_ENCODED_AAD: נתונים נוספים מאומתים בקידוד base64 שמשמשים כדי לספק הבטחות לגבי שלמות ואותנטיות. השדה הזה רלוונטי רק לאלגוריתמים שלAES-GCM.
הפלט הוא אובייקט JSON שמכיל את הטקסט המוצפן ואת וקטור האתחול המשויך כמחרוזות בקידוד base64.
פענוח
gcloud
כדי להשתמש ב-Cloud KMS בשורת הפקודה, קודם צריך להתקין את הגרסה האחרונה של Google Cloud CLI או לשדרג אליה.
gcloud kms raw-decrypt \
--location LOCATION \
--keyring KEY_RING \
--key KEY_NAME \
--version KEY_VERSION \
--ciphertext-file INPUT_FILE_PATH \
--plaintext-file OUTPUT_FILE_PATH
מחליפים את מה שכתוב בשדות הבאים:
LOCATION: המיקום ב-Cloud KMS שבו נמצא אוסף המפתחות.
KEY_RING: השם של אוסף המפתחות שמכיל את המפתח.
KEY_NAME: השם של המפתח שרוצים להשתמש בו להצפנה.
KEY_VERSION: המזהה של גרסת המפתח שבה רוצים להשתמש להצפנה.
INPUT_FILE_PATH: הנתיב המקומי לקובץ המידע המוצפן שרוצים לפענח.
OUTPUT_FILE_PATH: הנתיב של הקובץ המקומי שבו רוצים לשמור את הטקסט הלא מוצפן המפוענח.
כדי לקבל מידע על כל הדגלים והערכים האפשריים, מריצים את הפקודה עם הדגל --help.
API
בדוגמאות האלה נעשה שימוש ב-curl כלקוח HTTP כדי להדגים את השימוש ב-API. מידע נוסף על בקרת גישה זמין במאמר גישה ל-Cloud KMS API.
כשמשתמשים ב-API בארכיטקטורת REST, צריך לקודד את התוכן ב-Base64 לפני ש-Cloud KMS יכול לפענח אותו.
כדי לפענח את הנתונים המוצפנים, משתמשים בשיטה rawDecrypt:
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSION:rawDecrypt" \
--request "POST" \
--header "authorization: Bearer TOKEN" \
--header "content-type: application/json" \
--data '{"ciphertext": "BASE64_ENCODED_DATA", "additionalAuthenticatedData": "BASE64_ENCODED_AAD", "initializationVector": "BASE64_ENCODED_IV"}'
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט שמכיל את מחזיק המפתחות. -
LOCATION: המיקום ב-Cloud KMS שבו נמצא אוסף המפתחות. -
KEY_RING: השם של אוסף המפתחות שמכיל את המפתח. -
KEY_NAME: השם של המפתח שמשמש לפענוח. -
KEY_VERSION: המזהה של גרסת המפתח שבה רוצים להשתמש לפענוח. -
BASE64_ENCODED_DATA: המידע המוצפן בקידוד base64 שרוצים לפענח. -
BASE64_ENCODED_AAD: נתונים נוספים מאומתים בקידוד base64 ששימשו להצפנת הנתונים. השדה הזה רלוונטי רק לאלגוריתמיםAES-GCM. -
BASE64_ENCODED_IV: וקטור האתחול בקידוד base64 ששימש להצפנת הנתונים.
הפלט הוא אובייקט JSON שמכיל את הטקסט הרגיל המפוענח כמחרוזת בקידוד base64.
המאמרים הבאים
- מידע נוסף על ייבוא גרסת מפתח
- מידע נוסף על הצפנת מעטפה
- אפשר לנסות את ה-Codelab בנושא הצפנה ופענוח של נתונים באמצעות Cloud KMS.