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

החצי הציבורי אינו החצי הפגיע, וזה המלכוד

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

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

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

מה החישוב המוקדם באמת נותן לתוקף

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

מאמר Logjam משנת 2015 הדגים הורדה בדרגה ל-Diffie-Hellman של 512 סיביות בדרגת ייצוא והעריך מה יעלה לתקוף קבוצות גדולות יותר שנעשה בהן שימוש חוזר נרחב עם משאבים משמעותיים. ההדגמה הייתה קונקרטית, ההערכות היו הערכות, ואף אחד מהם לא היה הוכחה שסשן VPN מסוים פוענח.

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

מתוקנן אינו אותו דבר כמו חלש

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

החזק את המבנים בנפרד כשאתה מהרהר בהם. מסקנה על Diffie-Hellman מעל שדה סופי לא אומרת דבר על X25519, ומסקנה על קבוצת MODP של 1024 סיביות לא אומרת דבר על קבוצה של 3072 סיביות. מדיניות חוזק היא לפי מנגנון, לפי גודל ולפי גרסת פרוטוקול, ולכן הביטוי קריפטוגרפיה חזקה אינו טענה ניתנת לבדיקה.

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

קרא את הקבוצה שנקבעה בחיבור אמיתי

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

לכוד את השורה הזו לפני ואחרי שינוי מדיניות, ושמור את שתיהן ברשומת השינוי. ההשוואה היא ההוכחה.

ipsec statusall | grep -Ei "proposal|ESP|IKE"
openssl dhparam -in /etc/vpn/dh3072.pem -check -noout

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

בדוק את הקבוצה ואת זהות העמית בנפרד

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

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

ipsec statusall | grep -Ei "peer|auth|cert"
openssl s_client -connect vpn.acme.example:443 -brief -cipher 'DHE-RSA-AES256-GCM-SHA384'

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

מאמרים קשורים