הצפנת מעטפות

מבוא

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

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

כברירת מחדל, בשכבת האחסון, Google Cloud תוכן הלקוחות שמאוחסן במצב מנוחה מוצפן באמצעות הצפנת מעטפה, כאשר שירות ניהול המפתחות (KMS) הפנימי של Google משמש כמאגר המרכזי של מפתחות הצפנה. אם אתם מאחסנים ומצפינים נתונים בעצמכם, אתם יכולים להשתמש ב-Cloud Key Management Service כמאגר מרכזי של מפתחות בשכבת האפליקציה, וזה מה שנסביר במאמר הזה.

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

משאבים

מידע נוסף על ההיררכיה העיקרית זמין במאמר היררכיית אובייקטים.

מפתחות להצפנת נתונים

המפתח שמשמש להצפנת הנתונים עצמם נקרא מפתח להצפנת נתונים (DEK).

ריכזנו כאן שיטות מומלצות לניהול מפתחות DEK:

  • יצירת מפתחות DEK באופן מקומי.
  • כשמאחסנים את מפתחות ההצפנה, חשוב לוודא שהם מוצפנים במצב מנוחה.
  • כדי שתוכלו לגשת בקלות למפתח ה-DEK, כדאי לאחסן אותו קרוב לנתונים שהוא מצפין.
  • ליצור מפתח DEK חדש בכל פעם שכותבים את הנתונים. המשמעות היא שלא צריך להחליף את מפתחות ההצפנה של הנתונים.
  • אל תשתמשו באותו מפתח DEK להצפנת נתונים משני משתמשים שונים.
  • מומלץ להשתמש באלגוריתם חזק כמו תקן הצפנה מתקדם (AES) של 256 ביט ב-Galois Counter Mode (GCM).

מפתחות להצפנת מפתחות הצפנה (KEK)

מפתח ה-DEK מוצפן (נקרא גם אריזה) על ידי מפתח להצפנת מפתחות הצפנה (KEK). תהליך ההצפנה של מפתח באמצעות מפתח אחר נקרא הצפנת מעטפה.

ריכזנו כאן שיטות מומלצות לניהול מפתחות KEK:

  • אחסון מפתחות ה-KEK באופן מרכזי.

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

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

איזון בין מפתחות DEK ומפתחות KEK

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

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

שירות Cloud Key Management Service נועד לניהול מפתחות KEK, ולכן גודל קלט הנתונים המקסימלי לפונקציות Encrypt ו-Decrypt הוא 64KiB. עם זאת, לגבי נתונים שאתם יודעים שלא יתקרבו למגבלה הזו, תוכלו להשתמש ב-Cloud KMS כדי להצפין ולפענח נתונים ישירות.

איך מצפינים נתונים באמצעות הצפנת מעטפות

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

תהליך ההצפנה

כדי להצפין נתונים באמצעות הצפנת מעטפה:

  1. יצירת מפתח DEK באופן מקומי. אפשר לעשות את זה באמצעות ספריית קוד פתוח כמו OpenSSL, ולציין סוג הצפנה וסיסמה שמהם ייגזר המפתח. אם רוצים, אפשר גם לציין salt ו-digest לשימוש.

  2. משתמשים במפתח הזה להצפנת נתונים (DEK) באופן מקומי כדי להצפין את הנתונים.

    לדוגמה, אפשר להשתמש ב-OpenSSL כמו שמוצג בדוגמה של הצפנת ההודעה. מומלץ להשתמש בהצפנה של 256 ביט בתקן ההצפנה המתקדם (AES-256) במצב Galois Counter Mode ‏ (GCM).

  3. יוצרים מפתח חדש ב-Cloud KMS או משתמשים במפתח קיים, שישמש כמפתח להצפנת מפתחות הצפנה (KEK). משתמשים במפתח הזה כדי להצפין (לעטוף) את ה-DEK.

  4. אחסון הנתונים המוצפנים וה-DEK הארוז.

איך מפענחים נתונים באמצעות הצפנת מעטפות

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

תהליך הפענוח

כדי לפענח נתונים באמצעות הצפנת מעטפה:

  1. אחזור של הנתונים המוצפנים וה-DEK הארוז.

  2. משתמשים במפתח שמאוחסן ב-Cloud KMS כדי לפתוח את האריזה של ה-DEK המוצפן.

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

קוד לדוגמה שמראה איך להצפין ולפענח באמצעות הצפנת מעטפה מופיע במאמר הצפנה מצד הלקוח באמצעות Tink ו-Cloud KMS.

שילוב עם Google Cloud שירותים

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

אפשרויות אחרות ל Google Cloud שירותים

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

בנוסף לתמיכה ב-CMEK, המוצרים הבאים תומכים בפונקציונליות של מפתחות הצפנה באספקת הלקוח (CSEK).

מוצר נושא CSEK
Cloud Storage מפתחות הצפנה באספקת הלקוח (CSEK)
Compute Engine הצפנת דיסקים באמצעות מפתחות הצפנה באספקת הלקוח (CSEK)

ב-CSEK, אתם מספקים מפתח AES-256 משלכם שמשמש כמפתח KEK, והמפתח שלכם מגן על מפתחות ה-DEK שמגנים על הנתונים שלכם. מפתח ה-CSEK שלכם מוגן באמצעות שכבת הגנה נוספת, באמצעות מפתח Cloud KMS.

עכשיו, כשאתם יכולים לייבא מפתחות ל-Cloud KMS, אתם יכולים לייבא את המפתחות שלכם ולהשתמש בהם בשירותים עם הפעלת CMEK במקום להסתמך על CSEK.