מפתחות של 8192 סיביות תוקעים את לחיצת היד; DH של 1024 סיביות נדחה
שני כשלי גודל עם תיקונים הפוכים: מפתח גדול מדי שורף את זמן לחיצת היד עד שהצד השני מגיע לפקיעת זמן, בעוד קבוצת DH קטנה נדחית לפני שהיא מתחילה.
בשרת אחד לקוחות נתקעים לזמן מה ואז מתחברים מחדש, ואחר מסרב לחיבורים מיד עם הודעה על גודל המפתח. הם נראים כמו באגים שונים וזה אותו באג שמצביע לשני כיוונים מנוגדים. להצפנת לחיצת היד יש עלות שגדלה עם גודל הפרמטרים, ויש לה גם רצפה שממנה ספריות מודרניות לא יורדות. קביעת גודל החומר היא רשימת הבדיקה, והסעיף הראשון הוא להחליט איזה משני הכשלים יש לך באמת.
קרא את הכשל לפני שאתה מייצר מחדש משהו
התזמון אומר לך את רובו. לחיצת יד שלוקחת כמה שניות ואז מתה אומרת בדרך כלל שהחישוב עלה על סבלנות הצד השני, מה שמצביע על פרמטרים גדולים מדי עבור החומרה או עבור פקיעת הזמן. דחייה מיידית שמציינת גודל מפתח או קבוצה מצביעה לכיוון השני, אל חומר שהספרייה לא תקבל כלל.
שני אלה צריכים תיקונים הפוכים, וכאן רוב הניסיונות נכשלים. יצירה מחדש של פרמטרים של 8192 סיביות בלקוח שכבר דחה קבוצה קטנה מחמירה את המקרה האיטי ולא עושה דבר למקרה המהיר. רשום איזה תסמין ראית לפני שאתה נוגע בקובץ.
לאחר מכן בדוק מה מבקשים מהצד השני. שרת שמוגדר לקבוצה גדולה בשדה סופי כופה על כל לקוח לבזבז את אותו זמן מעבד בכל משא ומתן מחדש, לא רק בהתחברות. אם הבעיה מופיעה במרווח קבוע ולא באתחול, המרווח הזה הוא רמז חזק לאיזו הגדרה יקרה. משא ומתן מחדש חוזר על כל החישוב, ולכן עצירה שחוזרת כל שעה היא בדרך כלל אותה עלות שמשולמת שוב.
המקרה האיטי: חומר שהחומרה לא יכולה להרשות לעצמה
העבודה של Diffie-Hellman ו-RSA גדלה מהר עם גודל המפתח, וכל זה קורה לפני שזורם שום תעבורה במנהרה. בנתב קטן או בלקוח בעל הספק נמוך, קבוצה גדולה מספיק יכולה לדחוף את ההחלפה מעבר לפקיעת הזמן של הצד השני, כך שהחיבור מנסה שוב או פשוט נראה תקוע בלי שום שגיאה.
התיקון הוא לרדת לגודל שכל צד תומך בו וכל התקן יכול לחשב בנוחות. מפתח RSA של 2048 סיביות וקבוצה של 2048 סיביות נשארים קו בסיס תואם לרוחב; גדול יותר עוזר רק כשכל הצדדים מסכימים והמעבד יכול לשלם על זה בכל משא ומתן מחדש. כל מה שמעל קו הבסיס הזה הוא סחר מכוון, לא שדרוג.
גודל אינו ציון, והמספר הגדול ביותר בטבלת השוואה אינו הבחירה הנכונה אוטומטית. בחר את הערך הקטן ביותר שהמדיניות שלך מתירה ושכל הצדדים מקבלים, ואז מדוד את לחיצת היד במקום להניח שהיא השתפרה. קבוצה קטנה יותר שעדיין מגיעה לפקיעת זמן אומרת לך שהגודל מעולם לא היה כל הסיפור.
המקרה המהיר: קבוצה שהספרייה דוחה
בניינים מודרניים של OpenSSL דוחים לחלוטין את קבוצות השדה הסופי הקטנות ביותר, ורמת אבטחה מוגברת דוחפת את הרצפה עוד למעלה. קושחת נתב שנושאת קובץ פרמטרים בן עשורים היא המקור הרגיל, והתסמין הוא חיבור שנכשל מיד עם הודעה שמציינת את הקבוצה או את גודל המפתח. שום דבר בכשל הזה אינו לסירוגין, וזה מה שעושה אותו קל לזיהוי.
החלף את הקובץ במקום לערוך את התצורה כדי לדלג על הבדיקה. צור קבוצה עדכנית, אמת אותה, ואז התקן אותה במקום שבו הדמון באמת קורא אותה. שמור את הקובץ הישן עד שלקוח יתחבר בהצלחה עם החדש:
openssl dhparam -out /etc/openvpn/ffdhe2048.pem 2048
openssl dhparam -in /etc/openvpn/ffdhe2048.pem -check -noout
ls -l /etc/openvpn/ffdhe2048.pemפקודת הבדיקה מאמתת את הקובץ ולא מדפיסה שום דבר שימושי כשהיא עוברת; הרשימה מאשרת שהחלפת את הקובץ שהשירות טוען ולא עותק ישן לצידו. כוון את התצורה לנתיב הזה, הפעל מחדש את הדמון, ואשר שלקוח שנכשל בעבר משלים כעת את לחיצת היד.
אם השרת מגדיר גם רמת אבטחה או פרופיל תעודה, קרא אותם לפני שאתה מסיק שהקבוצה הייתה שגויה. פרופיל שדורש מחלקה מחמירה יותר יכול לדחות חומר שברירת המחדל הייתה מקבלת, והסרת ההגדרה הזו היא שינוי צר יותר מאשר השבתת הבדיקה באופן גלובלי.
בחר גודל עבור הצד השני והחומרה
גלה מה הצד המרוחק יכול לשאת לפני שאתה מייצר משהו אקזוטי. התקן ישן מדי לקבוצה של 2048 סיביות הוא התקן להחלפה, שכן כיוון השרת לקבוצה חלשה יותר רק הופך תלונת תאימות לתקלה. תיקונים עמידים נעים לעבר תוכנה חדשה יותר ולא לעבר פרמטרים ישנים. לכל חריגה זמנית בתחום הזה יש דרך להפוך לתצורה הקבועה.
כשהמעבד של השרת הוא הגבול, שנה את האלגוריתם במקום לרדת מתחת למדיניות. החלפת מפתחות בעקומה אליפטית כמו X25519 זולה בהרבה מקבוצה גדולה בשדה סופי ונתמכת בהיקף רחב, מה שהופך אותה לתשובה טובה יותר לתלונת ביצועים מאשר מודולוס RSA קטן יותר.
יהיה מה שתבחר, בדוק בחיבור אמיתי אחד וצפה בכמה זמן לוקחת לחיצת היד, לא רק אם בסוף היא מתחברת. לחיבור שמצליח בשתים עשרה שניות יש את אותה סיבת שורש כמו לזה שנכשל בחמש עשרה.
רשום את הבחירה כדי שבנייה מחדש לא תבטל אותה
שמור את קובץ הפרמטרים תחת ניהול תצורה וכתוב לצידו את הגודל, הסיבה והתאריך. שרת שנבנה מחדש ומייצר בשקט את ברירות המחדל שלו הוא הדרך שבה אותו כשל חוזר שישה חודשים אחר כך בלי שאיש יכול להסביר את ההחלטה המקורית.
רשום את אותו מידע לצד נקודת הקצה והפרופיל, כדי שסקירה לא תצטרך לשחזר אותו מגודל קובץ. כשהחיבור הבא ייתקע, הפתק הזה הוא ההבדל בין בדיקה של חמש דקות לחקירה חדשה. הוא גם מונע מהמהנדס הבא לפתור את המקרה האיטי בתיקון שנועד למהיר.