מפתחות הצפנה באספקת הלקוח (CSEK)

הגדרה

בדף הזה נסביר את הנושא של מפתחות הצפנה באספקת הלקוח (CSEK). לאפשרויות הצפנה אחרות, אפשר לעיין במאמר אפשרויות להצפנת נתונים.

סקירה כללית

כשרוצים לספק שכבת הגנה נוספת מעל ההצפנה הרגילה של Cloud Storage, אפשר לספק מפתח הצפנה משלכם מסוג AES-256 בקידוד Base64 סטנדרטי. למפתח הזה קוראים מפתח הצפנה באספקת הלקוח (CSEK). אם אתם מספקים מפתח הצפנה באספקת הלקוח (CSEK), המפתח הזה לא יישמר בשרתים של Cloud Storage ולא ינוהל בכל דרך אחרת על ידי Cloud Storage.

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

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

מתי משתמשים במפתח כזה?

כשמחילים על אובייקט מפתח הצפנה באספקת הלקוח (CSEK),‏ Cloud Storage ישתמש במפתח כדי להצפין את:

  • נתוני האובייקט
  • סיכום הביקורת (checksum)‏ CRC32C של האובייקט
  • גיבוב (hash) MD5 של האובייקט

הצפנה רגילה של Cloud Storage משמשת להצפנת שאר המטא-נתונים של האובייקט, כולל שם האובייקט. כך תוכלו לקרוא ולעדכן מטא-נתונים כלליים, וגם להציג אובייקטים, להחליף אותם ולמחוק אותם – בלי צורך במפתח הצפנה מטעם הלקוח (CSEK). אבל כדי לבצע כל אחת מהפעולות האלה צריכה להיות לכם ההרשאה המתאימה.

לדוגמה, אם האובייקט מוצפן באמצעות מפתח הצפנה באספקת הלקוח (CSEK), תצטרכו להשתמש במפתח הזה כדי לבצע פעולות כמו הורדה של האובייקט או העברה שלו. אם תנסו לקרוא את המטא-נתונים של האובייקט בלי לספק את המפתח, תקבלו מטא-נתונים כמו שם האובייקט ו-Content-Type, אבל לא את סיכום הביקורת CRC32C או הגיבוב MD5 של האובייקט. אם תעבירו את המפתח עם הבקשה לקבלת המטא-נתונים של האובייקט, המטא-נתונים שתקבלו יכללו גם את סיכום הביקורת CRC32C ואת הגיבוב MD5 של האובייקט.

איך פועל השכתוב

אם לא מספקים את המפתח להצפנה כשמשכתבים אובייקט שהוצפן באמצעות מפתח הצפנה באספקת הלקוח (CSEK):

בדיקת HTTPS

כדי להגן על הנתונים בזמן שהם עוברים באינטרנט במהלך פעולות קריאה וכתיבה, משתמשים ב-Transport Layer Security, שנקרא TLS או HTTPS. חובה להשתמש ב-TLS כשמספקים מפתח הצפנה. אם מעבירים בטעות מפתח הצפנה דרך חיבור לא מוצפן (HTTP), יכול להיות שתוקפים יוכלו ליירט את המפתח שלכם. לכן ממשק ה-API של Cloud Storage יחזיר הודעת שגיאה להתריע על כך שהמפתח שלכם נחשף. במקרה כזה עליכם לבצע רוטציה למפתחות באופן מיידי.

הגבלות

כשמשתמשים במפתחות הצפנה באספקת הלקוח (CSEK) חלות ההגבלות הבאות:

  • במסוף Google Cloud אי אפשר להוריד אובייקטים שמוצפנים באמצעות מפתח הצפנה באספקת הלקוח (CSEK). באותו אופן, כשמעלים אובייקט דרךGoogle Cloud המסוף אי אפשר להצפין אותו באמצעות מפתח הצפנה באספקת הלקוח (CSEK).

  • ב-Storage Transfer Service וב-Cloud Dataflow אין תמיכה באובייקטים שהוצפנו באמצעות מפתחות הצפנה באספקת הלקוח (CSEK).

  • אפשר להגדיר מפתחות הצפנה באספקת הלקוח (CSEK) רק לאובייקטים בודדים. כברירת מחדל, אי אפשר להגדיר מפתח הצפנה באספקת הלקוח (CSEK) לקטגוריה מסוימת.

  • אם מבצעים פעולת compose באובייקטים שהוצפנו באמצעות מפתחות הצפנה באספקת הלקוח (CSEK), האובייקטים של הרכיבים צריכים להיות מוצפנים באמצעות אותו מפתח, וצריך לספק את המפתח הזה לבקשת הרכבת האובייקט. האובייקט המורכב שמתקבל מוצפן באמצעות אותו מפתח.

  • כשמציגים אובייקט שהוצפן באמצעות מפתח הצפנה באספקת הלקוח (CSEK), מערכת Cloud Storage מתעלמת מהמטא-נתונים של Cache-Control שמשויכים לאובייקט ומציגה אותו תמיד עם הערך private, max-age=0 ב-Cache-Control.

איך עובדים עם מפתחות הצפנה בממשקי API ל-REST

כשמשתמשים במפתח הצפנה באספקת הלקוח (CSEK) ועובדים ישירות עם API ל-JSON או API ל-XML, עליכם לספק גם את המפתח AES-256 וגם את הגיבוב SHA256 של המפתח. חשוב לאחסן באופן מאובטח את המפתח AES-256 וגם את הגיבוב SHA256 של המפתח. ‫Cloud Storage מאחסן את הגיבוב SHA256 של המפתח במטא-נתונים של האובייקט, ומשם תוכלו לאחזר אותו מאוחר יותר. ‫Cloud Storage (או כל גורם אחר) לא יכול להשתמש בגיבוב SHA256 כדי לפענח את הנתונים שלכם. הוא מאוחסן כדי שאפשר יהיה לזהות את המפתח AES-256 הספציפי ששימש להצפנה של אובייקט מסוים.

כותרות של בקשות

בבקשות JSON או XML צריך לכלול את כותרות ה-HTTP הבאות:

שם הכותרת ערך תיאור
x-goog-encryption-algorithm מחרוזת אלגוריתם ההצפנה שבו יש להשתמש. חובה להשתמש בערך AES256.
x-goog-encryption-key מחרוזת מפתח ההצפנה AES-256 שלכם במחרוזת בקידוד Base64 בתקן RFC 4648.
x-goog-encryption-key-sha256 מחרוזת הגיבוב SHA256 של מפתח ההצפנה שלכם במחרוזת בקידוד Base64 בתקן RFC 4648.

אם אתם מבצעים פעולת שכתוב באמצעות API ל-JSON, הכותרות שמפורטות למעלה משמשות להצפנה של אובייקט היעד, והכותרות הבאות משמשות לפענוח של אובייקט המקור:

שם הכותרת ערך תיאור
x-goog-copy-source-encryption-algorithm מחרוזת אלגוריתם ההצפנה שבו יש להשתמש. חובה להשתמש בערך AES256.
x-goog-copy-source-encryption-key מחרוזת מפתח ההצפנה AES-256 של אובייקט המקור במחרוזת בקידוד Base64 בתקן RFC 4648.
x-goog-copy-source-encryption-key-sha256 מחרוזת הגיבוב SHA256 של מפתח ההצפנה של אובייקט המקור במחרוזת בקידוד Base64 בתקן RFC 4648.

תגובה

JSON

כשמשתמשים ב-API ל-JSON, המטא-נתונים של מפתח הצפנה באספקת הלקוח (CSEK) מוחזרים בגוף התגובה, וכוללים את המאפיינים הבאים:

שם המאפיין ערך תיאור
customerEncryption אובייקט מידע על ההצפנה שבה נעשה שימוש בבקשה.
customerEncryption.encryptionAlgorithm מחרוזת אלגוריתם ההצפנה שבו נעשה שימוש. תמיד מכיל את הערך AES256.
customerEncryption.keySha256 מחרוזת הגיבוב SHA256 של מפתח ההצפנה שלכם במחרוזת בקידוד Base64 בתקן RFC 4648. ניתן להשתמש בגיבוב SHA256 הזה כדי לזהות את מפתח ההצפנה מסוג AES-256 הספציפי שנדרש כדי לפענח את האובייקט שאותו צריך לאחסן באופן מאובטח.

XML

כשמשתמשים ב-API ל-XML, התגובה כוללת את הכותרות הבאות:

שם הכותרת ערך תיאור
x-goog-encryption-algorithm מחרוזת אלגוריתם ההצפנה שבו נעשה שימוש. תמיד מכיל את הערך AES256.
x-goog-encryption-key-sha256 מחרוזת הגיבוב SHA256 של מפתח ההצפנה שלכם במחרוזת בקידוד Base64 בתקן RFC 4648. ניתן להשתמש בגיבוב SHA256 הזה כדי לזהות את מפתח ההצפנה מסוג AES-256 הספציפי שנדרש כדי לפענח את האובייקט שאותו צריך לאחסן באופן מאובטח.

במקרים הבאים תתקבל שגיאת HTTP 400:

  • אם מעלים אובייקט באמצעות מפתח הצפנה באספקת הלקוח (CSEK), ואז מנסים לבצע פעולה נוספת על האובייקט (מלבד בקשה או עדכון של רוב המטא-נתונים או מחיקת האובייקט) בלי לספק את המפתח.
  • אם מעלים אובייקט באמצעות מפתח הצפנה באספקת הלקוח (CSEK), ומנסים לבצע פעולה נוספת על האובייקט באמצעות מפתח שגוי.
  • אם מעלים אובייקט בלי לספק מפתח הצפנה באספקת הלקוח (CSEK), ואז מנסים לבצע פעולה נוספת על האובייקט באמצעות מפתח הצפנה באספקת הלקוח (CSEK).
  • אם מציינים אלגוריתם הצפנה, מפתח או גיבוב SHA256 לא חוקיים.

מפתחות הצפנה עם gcloud storage

ב-Google Cloud CLI יש תמיכה בשימוש במפתחות הצפנה באספקת הלקוח (CSEK). כשמשתמשים ב-CLI של gcloud עם מפתחות הצפנה באספקת הלקוח (CSEK), חשוב לזכור את הנקודות הבאות:

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

  • לחלופין, אפשר לציין עד 100 מפתחות פענוח שישמשו רק לפענוח אובייקטים.

  • במהלך הפענוח מחושב הגיבוב SHA256 של כל מפתחות ההצפנה והפענוח, והמפתח המתאים לאובייקט מסוים נבחר על ידי התאמה לגיבוב SHA256 במטא-נתונים של האובייקט.

  • כשמוסיפים או מחליפים בסבב מפתח הצפנה באספקת הלקוח (CSEK) לאובייקט קיים, האובייקט נכתב מחדש כחלק מהבקשה. הדבר נכון גם לגבי הפקודה gcloud storage objects update.

  • בפקודות שמחזירות רשימה עם גיבוב MD5 או CRC32C לאובייקטים שהוצפנו באמצעות מפתח באספקת הלקוח (CSEK), המערכת מבצעת בקשת GET נוספת למטא-נתונים לכל אובייקט כזה. הבקשות הנוספות האלה עשויות להאט משמעותית את הצגת רשימת האובייקטים, בהשוואה להצגת רשימה של אובייקטים שהוצפנו באמצעות הצפנה רגילה של Cloud Storage.

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

רוטציית מפתחות הצפנה

אם אובייקט מוצפן באמצעות מפתח הצפנה באספקת הלקוח (CSEK), אפשר לבצע רוטציה למפתח שלו על ידי כתיבה מחדש של האובייקט. כתיבה מחדש של אובייקטים נתמכת ב-API ל-JSON, אבל לא נתמכת ב-API ל-XML. במאמר רוטציה של מפתח הצפנה תוכלו לראות דוגמאות לרוטציית מפתחות.

המאמרים הבאים