רוטציה של מפתחות הצפנה של דיסקים

מכשיר Google Distributed Cloud (GDC) air-gapped משתמש ב-Linux Unified Key Setup (LUKS) כדי להצפין נתונים בדיסקים כשלא מסופק HSM חיצוני. מערך RAID5 נוצר מעל 4 כונני הנתונים, ומכשיר LUKS יחיד נוצר מעל מערך RAID5. מפתח ה-KEK של LUKS נוצר באופן אקראי ואפשר להחליף אותו.

במסמך הזה מתוארים השלבים להחלפת מפתח ה-KEK של LUKS, שצריך לבצע במקרים הבאים:

  • רוטציה של מפתח הצפנה (KEK) שמתוזמנת באופן קבוע.
  • חשיפת KEK.

לפני שמתחילים

כך עושים את זה:

  1. מוודאים שאתם עומדים בדרישות המוקדמות לשימוש במחשב נייד.
  2. מוודאים שאפשר להיכנס לשלושת הצמתים כמשתמש Root.

ביצוע רוטציה למפתח KEK

מערכת מכשירי Google Distributed Cloud ‏ (GDC) עם בידוד פיזי משתמשת באשכול NetApp ONTAP Select ‏ (OTS) עם שני צמתים שנפרס בצמתים bm01 ו-bm02 (בדרך כלל ללא יחידות GPU). לכל צומת יש 4 כונני נתונים ייעודיים שמוגדרים כמערך RAID5 לשיפור יתירות. מכשיר מוצפן יחיד של LUKS מונח על כל מערך RAID5 כדי להבטיח את אבטחת מידע.

מפתח ה-KEK של הצפנת LUKS מאוחסן בדיסק האתחול שנמצא ב-/etc/luks. כדי לשמור על האבטחה בכל האשכול, כשמבצעים רוטציה של מפתח הצפנה של LUKS, צריך לבצע רוטציה של הצפנת LUKS בשני הצמתים. כדי לבצע רוטציה רגילה של KEK או אם ה-KEK נחשף, חוזרים על השלבים הבאים ב-bm01 וב-bm02:

  1. נכנסים לצומת כמשתמש root.

  2. מוודאים שמכשיר ה-RAID קיים ומקבלים את RAID_DEVICE הנתיב המלא.

    ll /dev/md
    
  3. מוודאים שקובץ מפתח ה-LUKS הישן קיים ומקבלים את OLD_KEY הנתיב המלא.

    ll /etc/luks
    
  4. מוסיפים את ה-KEK הישן למשבצת מפתח 1, כך שגם משבצת מפתח 0 וגם משבצת מפתח 1 יכילו את אותו KEK.

    cryptsetup luksAddKey RAID_DEVICE OLD_KEY --key-slot 1 --key-file OLD_KEY
    

    מחליפים את RAID_DEVICE ואת OLD_KEY בנתיבים מהשלבים הקודמים.

  5. מסירים את ה-KEK הישן מחריץ המפתח 0.

    cryptsetup luksKillSlot RAID_DEVICE 0 --key-file OLD_KEY
    
  6. יוצרים KEK חדש ושומרים אותו בקובץ המפתח החדש NEW_KEY.

    dd if=/dev/urandom of=NEW_KEY bs=512 count=1
    chmod u=r,go-rwx NEW_KEY
    

    מחליפים את NEW_KEY בנתיב המלא לקובץ המפתח החדש.

  7. מוסיפים את ה-KEK החדש למשבצת המפתח 0.

    cryptsetup luksAddKey RAID_DEVICE NEW_KEY --key-slot 0 --key-file OLD_KEY
    
  8. הגדרה של תצורה קבועה לפתיחה או לסגירה של מכשיר LUKS בזמן הפעלה או כיבוי של המחשב.

    DEVICE_UUID=$(cryptsetup luksUUID RAID_DEVICE)
    echo "luksrd5 UUID=${DEVICE_UUID} NEW_KEY luks,discard" > /etc/crypttab
    
  9. מסירים את מפתח ההצפנה הישן מחריץ המפתח 1.

    cryptsetup luksKillSlot RAID_DEVICE 1 --key-file NEW_KEY
    
  10. מוודאים שמפתח ה-KEK החדש פועל.

    cryptsetup luksDump --dump-master-key RAID_DEVICE --key-file NEW_KEY
    
  11. מוודאים שמפתח ה-KEK הישן לא עובד יותר.

    cryptsetup luksDump --dump-master-key RAID_DEVICE --key-file OLD_KEY
    
  12. מסירים את ה-KEK הישן.

    rm OLD_KEY
    

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