שיטות מומלצות לשימוש ב-SSH פוסט-קוונטי

במאמר הזה מתוארות שיטות מומלצות להגדרת תחנת העבודה ומכונות וירטואליות (VM) של Compute Engine לשימוש באלגוריתמים פוסט-קוונטיים להחלפת מפתחות לחיבורי SSH.

מידע נוסף על חיבורי SSH ב-Compute Engine זמין במאמר בנושא חיבורי SSH למכונות וירטואליות של Linux. מידע על ניהול גישת SSH באמצעות IAM זמין במאמר מידע על OS Login.

בקטעים הבאים מתוארת הצפנה פוסט-קוונטית בהקשר של SSH:

בקטעים הבאים מפורטות שיטות מומלצות שיכולות לעזור לכם להגן על חיבורי SSH מפני איומים עתידיים של מחשוב קוונטי:

הסבר על האיום של התקפות מסוג 'איסוף מיידי ופענוח בהמשך'

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

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

האלגוריתמים ההיברידיים הבאים של החלפת מפתחות פוסט-קוונטית נתמכים בהטמעות מודרניות של SSH:

  • ‫sntrup761x25519-sha512@openssh.com: שילוב של Streamlined NTRU Prime 761 ו-X25519. האפשרות נתמכת ב-OpenSSH 9.0 ומעלה, וב-PuTTY 0.78 ומעלה.
  • ‫mlkem768x25519-sha256: שילוב של ML-KEM-768 (לשעבר CRYSTALS-Kyber) שעבר סטנדרטיזציה על ידי NIST ושל X25519. האפשרות נתמכת ב-OpenSSH מגרסה 10.0 ואילך, וב-PuTTY מגרסה 0.83 ואילך. ‫mlkem768x25519-sha256 הוא האלגוריתם הנוכחי המועדף לחילופי מפתחות ב-SSH אחרי עיבוד קוונטי.

הסבר על היקף ההגנה הפוסט-קוונטית ב-SSH

חיבור SSH כולל שלושה שלבים קריפטוגרפיים:

  1. החלפת מפתחות (KexAlgorithms): הלקוח והשרת יוצרים סוד סימטרי משותף. כשמשתמשים באלגוריתם להחלפת מפתחות פוסט-קוונטיים, הסוד המשותף הזה מוגן מפני פענוח על ידי מחשבים קוונטיים.
  2. אימות משתמש ומארח: הלקוח מאמת את מפתח המארח של השרת, והשרת מאמת את מפתח ה-SSH או האישור של המשתמש. ב-OpenSSH רגיל עדיין לא נעשה שימוש באלגוריתמים של חתימות פוסט-קוונטיות לאימות משתמשים, אבל מכיוון שהאימות מתבצע בתוך הערוץ המוצפן שנוצר על ידי החלפת המפתחות, פרטי הכניסה והמפתחות של המארח מוגנים מפני פענוח רטרואקטיבי.
  3. הצפנת נתוני סשן (Ciphers): אחרי החלפת המפתחות, הסשן מוצפן באמצעות צופן סימטרי (כמו aes256-gcm@openssh.com או chacha20-poly1305@openssh.com). צפנים סימטריים לא פגיעים להתקפות של מחשוב קוונטי כמו צפנים אסימטריים (חילופי מפתחות).

איך מתבצע משא ומתן על אלגוריתמים

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

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

הגדרת לקוח SSH

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

המסוף

‫SSH-in-browser (שמובנה במסוף Google Cloud ) תומך באלגוריתמים פוסט-קוונטיים של החלפת מפתחות ומעדיף אותם באופן אוטומטי.

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

כדי להתחבר באמצעות SSH בדפדפן:

  1. נכנסים לדף VM instances במסוף Google Cloud .

    כניסה לדף VM instances

  2. ברשימת המכונות הווירטואליות, לוחצים על SSH בשורה של המכונה שרוצים להתחבר אליה.

gcloud

ה-CLI של gcloud ‏ (gcloud compute ssh) משתמש בלקוח OpenSSH שמותקן בתחנת העבודה המקומית.

  1. בודקים אם מותקנת בתחנת העבודה גרסה OpenSSH 9.0 ואילך:

    ssh -V
    

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

  2. כשבתחנת העבודה שלכם פועלת גרסה OpenSSH 9.0 ואילך, OpenSSH כולל חילופי מפתחות פוסט-קוונטיים ברשימת האלגוריתמים שמוגדרת כברירת מחדל. כשמתחברים ל-VM תואם, החיבור מנהל משא ומתן על החלפת מפתחות עמידה למחשוב קוונטי בלי דגלים נוספים:

    gcloud compute ssh <var>VM_NAME</var> --zone=<var>ZONE</var>
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫<var>VM_NAME</var>: השם של המכונה הווירטואלית שאליה רוצים להתחבר.
    • ‫<var>ZONE</var>: האזור שבו נמצאת המכונה הווירטואלית.

לקוח OpenSSH

אם אתם משתמשים בלקוח OpenSSH הרגיל (ssh) ב-Linux, ב-macOS או ב-Windows:

  1. בודקים שהגרסה של לקוח OpenSSH המקומי היא 9.0 ואילך:

    ssh -V
    
  2. פותחים או יוצרים את קובץ ההגדרות של משתמש ה-SSH (~/.ssh/config ב-Linux וב-macOS, או %USERPROFILE%\.ssh\config ב-Windows).

  3. מוסיפים או מעדכנים את ההנחיה KexAlgorithms.

    • כדי לתת עדיפות לאלגוריתמים פוסט-קוונטיים ולאפשר חזרה לאלגוריתמים קלאסיים (מומלץ), מוסיפים את ההגדרה הבאה:

      KexAlgorithms ^mlkem768x25519-sha256,sntrup761x25519-sha512@openssh.com,diffie-hellman-group-exchange-sha256
      
    • כדי לאכוף באופן מחמיר אלגוריתמים פוסט-קוונטיים ולדחות חיבורים קלאסיים, מציינים רק אלגוריתמים פוסט-קוונטיים:

      KexAlgorithms mlkem768x25519-sha256,sntrup761x25519-sha512@openssh.com
      
  4. מתחברים למכונה הווירטואלית באמצעות SSH:

    ssh -i <var>PATH_TO_PRIVATE_KEY</var> <var>USERNAME</var>@<var>EXTERNAL_IP</var>
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫<var>PATH_TO_PRIVATE_KEY</var>: הנתיב למפתח ה-SSH הפרטי.
    • ‫<var>USERNAME</var>: שם המשתמש (למשל, שם המשתמש שלכם ב-OS Login).
    • ‫<var>EXTERNAL_IP</var>: כתובת ה-IP החיצונית של המכונה הווירטואלית.

אפליקציית PuTTY

אם אתם מתחברים למכונות וירטואליות באמצעות PuTTY ב-Windows:

  1. צריך לוודא שאתם מריצים את PuTTY בגרסה 0.78 ואילך (או בגרסה 0.83 ואילך לתמיכה ב-ML-KEM). כדי לבדוק את הגרסה, פותחים את PuTTY ולוחצים על About (מידע). אם צריך, מורידים את הגרסה העדכנית מדף ההורדה של PuTTY.

  2. פותחים את PuTTY.

  3. בחלונית Category, עוברים אל Connection > SSH > Kex.

  4. ברשימה Algorithm selection policy, מאתרים את האלגוריתם post-quantum:

    • NTRU Prime / Curve25519 hybrid kex (זמין ב-PuTTY 0.78 ואילך)
    • ML-KEM / Curve25519 hybrid kex (זמין ב-PuTTY 0.83 ואילך)
  5. בוחרים את האלגוריתם פוסט-קוונטי ולוחצים על Up עד שהוא מגיע לחלק העליון של הרשימה, מעל האלגוריתמים הקלאסיים של Diffie-Hellman ו-ECDH.

  6. (אופציונלי) כדי לאכוף באופן מחמיר אלגוריתמים פוסט-קוונטיים, בוחרים כל אלגוריתם קלאסי ולוחצים על החץ למטה עד שהוא מופיע מתחת לקו המפריד ‎-- Warn below here --‎ או ‎-- Don't use below here --‎.

  7. בחלונית קטגוריה, לוחצים על סשן.

  8. בקטע Saved Sessions (סשנים שמורים), בוחרים את שם הסשן ולוחצים על Save (שמירה) כדי לשמור את העדפת האלגוריתם.

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

הגדרת ה-VM

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

מערכות הפעלה תואמות

כדי לתמוך בהחלפת מפתחות פוסט-קוונטית, במכונה הווירטואלית צריך להריץ מערכת הפעלה שכוללת OpenSSH בגרסה 9.0 ומעלה. קובצי האימג' הציבוריים הבאים של Linux שזמינים ב-Compute Engine כוללים OpenSSH בגרסה 9.0 ואילך:

  • ‫Debian: ‏ Debian 12‏ (Bookworm) ואילך
  • ‫Ubuntu: ‏ Ubuntu 24.04 LTS ‏ (Noble Numbat) ואילך
  • ‫Fedora: ‏ Fedora 39 ואילך
  • ‫מערכת הפעלה שמותאמת לקונטיינרים: גרסה 109 ואילך
  • ‫Rocky Linux / AlmaLinux: גרסה 10 ואילך

גרסאות ישנות יותר של מערכות הפעלה (כמו Ubuntu 22.04 LTS,‏ Debian 11 או RHEL 9) כוללות כברירת מחדל גרסאות OpenSSH ישנות יותר מ-9.0 ולא תומכות בהחלפת מפתחות פוסט-קוונטית.

התנהגות ברירת מחדל

אם מכונת ה-VM שלכם מריצה מערכת הפעלה עם OpenSSH בגרסה 9.0 ואילך, שרת OpenSSH ‏ (sshd) תומך ב-sntrup761x25519-sha512@openssh.com כברירת מחדל. מכונות וירטואליות (VM) שמופעלת בהן OpenSSH בגרסה 10.0 ואילך תומכות גם ב-mlkem768x25519-sha256 כברירת מחדל.

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

נדרשים אלגוריתמים פוסט-קוונטיים בלבד

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

כדי לדרוש באופן מוחלט אלגוריתמים פוסט-קוונטיים במכונה הווירטואלית:

  1. מתחברים למכונה הווירטואלית באמצעות SSH.

  2. יוצרים קובץ תצורה להחלפה ב-/etc/ssh/sshd_config.d/:

    sudo bash -c 'cat << 'EOF' > /etc/ssh/sshd_config.d/99-post-quantum-kex.conf
    # Require post-quantum key exchange algorithms only
    KexAlgorithms mlkem768x25519-sha256,sntrup761x25519-sha512@openssh.com
    EOF'
    
  3. בודקים את ההגדרות של שד ה-SSH כדי לוודא שאין שגיאות תחביר:

    sudo sshd -t
    

    אם הפקודה יוצרת שגיאות, צריך לבדוק את קובץ התצורה לפני שממשיכים.

  4. טוענים מחדש את דימון ה-SSH כדי להחיל את השינוי בלי להפסיק סשנים פעילים:

    sudo systemctl reload sshd
    

    אם בהפצת Linux שלכם משתמשים ב-ssh כשם השירות, מריצים את הפקודה sudo systemctl reload ssh במקום.

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

שחזור אחרי נעילת SSH

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

  1. שימוש ב-SSH בדפדפן: פותחים את מסוף Google Cloud ומתחברים באמצעות SSH בדפדפן. ‫SSH בדפדפן תומך בהחלפת מפתחות פוסט-קוונטית ויכול להתחבר גם כשנדרשים אלגוריתמים פוסט-קוונטיים במכונה הווירטואלית. אחרי ההתחברות, מסירים או משנים את /etc/ssh/sshd_config.d/99-post-quantum-kex.conf וטוענים מחדש את sshd.
  2. שימוש בקונסולה הטורית הווירטואלית: מתחברים ל-VM באמצעות הקונסולה הטורית או עמדת השליטה המיוחדת לניהול (SAC). מתחברים באמצעות פרטי הכניסה, מסירים את קובץ ההגדרות וטוענים מחדש את sshd.
  3. שימוש בסקריפט לטעינה בזמן ההפעלה: אם אין גישה אינטראקטיבית:
    1. במסוף Google Cloud , מפסיקים את ה-VM.
    2. עורכים את המטא-נתונים של ה-VM כדי להוסיף סקריפט לטעינה בזמן ההפעלה שמוחק את קובץ התצורה /etc/ssh/sshd_config.d/99-post-quantum-kex.conf שיצרתם קודם, ואז מפעיל מחדש את דמון שרת ה-SSH: startup-script: rm -f /etc/ssh/sshd_config.d/99-post-quantum-kex.conf && (systemctl reload ssh || systemctl reload sshd)
    3. מפעילים את ה-VM. סקריפט לטעינה בזמן ההפעלה פועל כ-root ומשחזר את התאימות הקלאסית.
    4. אחרי שתקבלו שוב גישה, תצטרכו להסיר את סקריפט לטעינה בזמן ההפעלה מהמטא-נתונים.

אימות האלגוריתם של חילופי המפתחות שנקבע

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

אימות באמצעות OpenSSH או ה-CLI של gcloud

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

  • באמצעות OpenSSH:

    ssh -v -i <var>PATH_TO_PRIVATE_KEY</var> <var>USERNAME</var>@<var>EXTERNAL_IP</var>
    
  • באמצעות ה-CLI של gcloud:

    gcloud compute ssh <var>VM_NAME</var> --zone=<var>ZONE</var> -- -v
    

בודקים את פלט הטרמינל במהלך יצירת החיבור. מחפשים את השורה kex: algorithm:

debug1: kex: algorithm: sntrup761x25519-sha512@openssh.com

או:

debug1: kex: algorithm: mlkem768x25519-sha256

אם הפלט מציג sntrup761x25519-sha512 או mlkem768x25519-sha256, החיבור מוגן על ידי החלפת מפתחות פוסט-קוונטית. אם מופיע אלגוריתם כמו curve25519-sha256 או ecdh-sha2-nistp256, החיבור משתמש בחילופי מפתחות קלאסיים ועדיין פגיע למתקפות מסוג 'לכידה עכשיו, פענוח אחר כך'.

אימות באמצעות PuTTY

  1. ב-PuTTY, מתחברים ל-VM.
  2. לוחצים לחיצה ימנית על שורת הכותרת של חלון PuTTY ובוחרים באפשרות יומן אירועים.
  3. בחלון PuTTY Event Log (יומן האירועים של PuTTY), מחפשים את השורה שמציינת את האלגוריתם של החלפת המפתחות:
    • Using NTRU Prime / Curve25519 hybrid key exchange
    • Using ML-KEM / Curve25519 hybrid key exchange

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