במסמך הזה מתוארות שיטות מומלצות להגדרת תחנת העבודה ומכונות וירטואליות (VM) של Compute Engine לשימוש באלגוריתמים פוסט-קוונטיים להחלפת מפתחות לחיבורי SSH.
למידע נוסף על האופן שבו חיבורי SSH פועלים ב-Compute Engine, קראו את המאמר חיבורי SSH למכונות וירטואליות של Linux. מידע על ניהול גישת SSH באמצעות IAM זמין במאמר מידע על OS Login.
בקטעים הבאים מתוארת הצפנה פוסט-קוונטית בהקשר של SSH:
בקטעים הבאים מפורטות שיטות מומלצות שיכולות לעזור לכם להגן על חיבורי SSH מפני איומים עתידיים של מחשוב קוונטי:
- הגדרת לקוח SSH להעדפה או לדרישה של אלגוריתמים פוסט-קוונטיים
- הגדרת המכונה הווירטואלית להחלפת מפתחות פוסט-קוונטית
- אימות האלגוריתם של חילופי המפתחות שנקבעו
הסבר על האיום של התקפות מסוג 'איסוף מיידי ופענוח בהמשך'
קריפטוגרפיה קלאסית של מפתח ציבורי (כמו RSA והצפנת עקום אליפטי (ECC)) פגיעה באופן תיאורטי למתקפות של מחשבים קוונטיים. מחשבים קוונטיים בקנה מידה גדול עדיין לא קיימים, אבל גורמים עוינים יכולים ללכוד ולאחסן תנועה מוצפנת ברשת כבר היום, במטרה לפענח אותה בהמשך כשהמחשב הקוונטי עם היכולות המתאימות יהיה זמין. המתקפה הזו נקראת איסוף מיידי ופענוח בהמשך.
כדי להגן מפני האיום הזה, 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 כולל שלושה שלבים קריפטוגרפיים:
- החלפת מפתחות (
KexAlgorithms): הלקוח והשרת יוצרים סוד סימטרי משותף. כשמשתמשים באלגוריתם להחלפת מפתחות פוסט-קוונטיים, הסוד המשותף הזה מוגן מפני פענוח על ידי מחשבים קוונטיים. - אימות משתמש ומארח: הלקוח מאמת את מפתח המארח של השרת, והשרת מאמת את מפתח ה-SSH או האישור של המשתמש. ב-OpenSSH הרגיל עדיין לא משתמשים באלגוריתמים של חתימה פוסט-קוונטית לאימות משתמשים, אבל בגלל שהאימות מתרחש בתוך הערוץ המוצפן שנוצר על ידי החלפת המפתחות, פרטי הכניסה ומפתחות המארח מוגנים מפני פענוח רטרואקטיבי.
- הצפנת נתוני סשן (
Ciphers): אחרי החלפת המפתחות, הסשן מוצפן באמצעות צופן סימטרי (כמוaes256-gcm@openssh.comאוchacha20-poly1305@openssh.com). צפנים סימטריים לא פגיעים להתקפות של מחשוב קוונטי כמו צפנים אסימטריים (חילופי מפתחות).
איך מתבצע משא ומתן על אלגוריתמים
במהלך לחיצת היד של חיבור ה-SSH, הלקוח שולח רשימה מסודרת של אלגוריתמים להחלפת מפתחות שבהם הוא תומך. השרת משווה בין רשימת האלגוריתמים של הלקוח לבין האלגוריתמים שהוא תומך בהם, ובוחר את האלגוריתם הראשון ברשימה של הלקוח שגם השרת תומך בו.
מכיוון שהלקוח קובע את סדר העדיפויות, הגדרת הלקוח של תחנת העבודה כך שיעדיף אלגוריתמים פוסט-קוונטיים מבטיחה שייעשה שימוש בהחלפת מפתחות פוסט-קוונטית בכל פעם שה-VM המטורגט תומך בכך.
הגדרת לקוח ה-SSH
מגדירים את לקוח ה-SSH בתחנת העבודה כך שיתעדף או יאכוף אלגוריתמים של חילופי מפתחות פוסט-קוונטיים. משלימים את השלבים בכלי הלקוח המועדף.
המסוף
SSH בדפדפן (מובנה במסוף Cloud de Confiance ) תומך באלגוריתמים פוסט-קוונטיים של החלפת מפתחות ומעדיף אותם באופן אוטומטי.
אם אתם מתחברים למכונה הווירטואלית באמצעות SSH בדפדפן, אתם לא צריכים לקבוע הגדרות בתחנת העבודה. כשהמכונה הווירטואלית תומכת באלגוריתמים פוסט-קוונטיים, SSH-in-browser מנהל משא ומתן אוטומטי על החלפת מפתחות פוסט-קוונטיים.
כדי להתחבר באמצעות SSH בדפדפן:
נכנסים לדף VM instances במסוף Cloud de Confiance .
ברשימת המכונות הווירטואליות, לוחצים על SSH בשורה של המכונה שרוצים להתחבר אליה.
gcloud
ה-CLI של gcloud (gcloud compute ssh) משתמש בלקוח OpenSSH שמותקן בתחנת העבודה המקומית.
בודקים אם מותקנת בתחנת העבודה גרסה OpenSSH 9.0 ואילך:
ssh -Vאם גרסת OpenSSH שלכם היא לפני 9.0, שדרגו את OpenSSH באמצעות מנהל החבילות של מערכת ההפעלה.
כשבתחנת העבודה שלכם פועלת גרסה 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:
בודקים שהגרסה של לקוח OpenSSH המקומי היא 9.0 ואילך:
ssh -Vפותחים או יוצרים את קובץ התצורה של SSH של המשתמש (
~/.ssh/configב-Linux וב-macOS, או%USERPROFILE%\.ssh\configב-Windows).מוסיפים או מעדכנים את ההנחיה
KexAlgorithms.כדי לתת עדיפות לאלגוריתמים פוסט-קוונטיים ולאפשר חזרה לאלגוריתמים קלאסיים (מומלץ), מוסיפים את ההגדרה הבאה:
KexAlgorithms ^mlkem768x25519-sha256,sntrup761x25519-sha512@openssh.com,diffie-hellman-group-exchange-sha256כדי לאכוף באופן מחמיר אלגוריתמים פוסט-קוונטיים ולדחות חיבורים קלאסיים, מציינים רק אלגוריתמים פוסט-קוונטיים:
KexAlgorithms mlkem768x25519-sha256,sntrup761x25519-sha512@openssh.com
מתחברים למכונה הווירטואלית באמצעות 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:
חשוב לוודא שאתם מריצים את PuTTY בגרסה 0.78 ואילך (או בגרסה 0.83 ואילך לתמיכה ב-ML-KEM). כדי לבדוק את הגרסה, פותחים את PuTTY ולוחצים על About (מידע). אם צריך, מורידים את הגרסה העדכנית מדף ההורדה של PuTTY.
פותחים את PuTTY.
בחלונית Category, עוברים אל Connection > SSH > Kex.
ברשימה Algorithm selection policy, מאתרים את האלגוריתם post-quantum:
- NTRU Prime / Curve25519 hybrid kex (זמין ב-PuTTY 0.78 ואילך)
- ML-KEM / Curve25519 hybrid kex (זמין ב-PuTTY 0.83 ואילך)
בוחרים את האלגוריתם פוסט-קוונטי ולוחצים על Up עד שהוא מגיע לחלק העליון של הרשימה, מעל האלגוריתמים הקלאסיים של Diffie-Hellman ו-ECDH.
(אופציונלי) כדי לאכוף באופן מחמיר אלגוריתמים פוסט-קוונטיים, בוחרים כל אלגוריתם קלאסי ולוחצים על החץ למטה עד שהוא מופיע מתחת לקו המפריד -- Warn below here -- או -- Don't use below here --.
בחלונית קטגוריה, לוחצים על סשן.
בקטע Saved Sessions, בוחרים את שם הסשן ולוחצים על Save כדי לשמור את העדפת האלגוריתם.
לוחצים על פתיחה כדי להתחבר למכונה הווירטואלית.
הגדרת ה-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 של המכונה הווירטואלית כך שיקבל רק אלגוריתמים של חילופי מפתחות פוסט-קוונטיים.
כדי לדרוש באופן מוחלט אלגוריתמים פוסט-קוונטיים במכונה הווירטואלית:
מתחברים למכונה הווירטואלית באמצעות SSH.
יוצרים קובץ תצורה להחלפה ב-
/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'בודקים אם יש שגיאות תחביר בהגדרות של ה-daemon של SSH:
sudo sshd -tאם הפקודה יוצרת שגיאות, צריך לבדוק את קובץ התצורה לפני שממשיכים.
טוענים מחדש את הדימון (daemon) של SSH כדי להחיל את השינוי בלי להפסיק סשנים פעילים:
sudo systemctl reload sshdאם בהפצת Linux שלכם משתמשים ב-
sshכשם השירות, מריצים את הפקודהsudo systemctl reload sshבמקום.משאירים את חלון הטרמינל הנוכחי פתוח, ופותחים חלון טרמינל חדש כדי לבדוק את החיבור למכונה הווירטואלית. אם החיבור החדש מצליח, ה-VM מוגדר בהצלחה לדרוש אלגוריתמים פוסט-קוונטיים.
שחזור מנעילת SSH
אם הגדרתם במכונה הווירטואלית דרישה מחמירה לאלגוריתמים פוסט-קוונטיים וננעלתם כי הלקוח שלכם לא תומך באלגוריתמים הנדרשים, תוכלו להשתמש באחת מאפשרויות השחזור הבאות:
- שימוש ב-SSH בדפדפן: פותחים את מסוף Cloud de Confiance ומתחברים באמצעות SSH בדפדפן. SSH בדפדפן תומך בהחלפת מפתחות פוסט-קוונטית ויכול להתחבר גם כשנדרשים אלגוריתמים פוסט-קוונטיים במכונה הווירטואלית.
אחרי שמתחברים, מסירים או משנים את
/etc/ssh/sshd_config.d/99-post-quantum-kex.confוטוענים מחדש אתsshd. - שימוש במסוף הטורי הווירטואלי: מתחברים ל-VM באמצעות המסוף הטורי או עמדת השליטה המיוחדת לניהול (SAC).
מתחברים באמצעות פרטי הכניסה, מסירים את קובץ התצורה וטוענים מחדש את
sshd. - שימוש בסקריפט לטעינה בזמן ההפעלה: אם הגישה האינטראקטיבית לא זמינה:
- במסוף Cloud de Confiance , מפסיקים את ה-VM.
- עורכים את המטא-נתונים של ה-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) - מפעילים את ה-VM. סקריפט לטעינה בזמן ההפעלה פועל כ-root ומשחזר את התאימות הקלאסית.
- אחרי שתקבלו שוב גישה, הסירו את סקריפט לטעינה בזמן ההפעלה מהמטא-נתונים.
אימות האלגוריתם המוסכם של חילופי מפתחות
כדי לוודא שחיבור 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
- ב-PuTTY, מתחברים ל-VM.
- לוחצים לחיצה ימנית על שורת הכותרת של חלון PuTTY ובוחרים באפשרות Event Log (יומן אירועים).
- בחלון PuTTY Event Log (יומן האירועים של PuTTY), מחפשים את השורה שמציינת את האלגוריתם של החלפת המפתחות:
Using NTRU Prime / Curve25519 hybrid key exchangeUsing ML-KEM / Curve25519 hybrid key exchange