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

בדקו מה הצדדים באמת מסכמים

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

אם הצופן שסוכם הוא AES-GCM או ChaCha20-Poly1305, עצרו כאן. המבנים האלה משתמשים בבלוק של 128 סיביות ומאמתים את המטען, ולכן טיעון ההתנגשות ב-64 סיביות שלהלן לא חל עליהם.

הפרידו בין אורך המפתח לרוחב הבלוק

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

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

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

הפעילו את אריתמטיקת יום ההולדת על גודל הבלוק

לבלוק של 64 סיביות יש סולם יום הולדת של בערך 2^32 בלוקים מוצפנים תחת מפתח אחד לפני שהתנגשויות הופכות סבירות. כל בלוק נושא שמונה בתים, ולכן אותו סולם הוא כ-2^35 בתים, או 32 GiB של נתונים תחת מפתח אחד.

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

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

החליטו אם שימוש חוזר ב-CBC חשוב כאן

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

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

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

החליפו את הצופן, לא את המפתח

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

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

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

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