מהו nonce ב-VPN ולמה שימוש חוזר שובר את המנהרה
nonce הוא ערך לכל הודעה שאסור לו לחזור על עצמו תחת מפתח אחד, והוא בדרך כלל נע בגלוי. עריכה שלו ביד היא הטעות שכדאי להימנע ממנה.
רוב האנשים פוגשים את המילה nonce בפרופיל VPN ומניחים שזהו עוד סוד משותף שיש להעתיק בין העמיתים. זה לא. nonce הוא ערך שאסור לו לחזור על עצמו תחת אותו מפתח, וברבות מהצפנות המבוססות על nonce הוא נע בגלוי. הבלבול נשאר בלתי מזיק עד שמישהו עורך אותו ביד, ושם מתחילה השבירה האמיתית.
מאיפה ה-nonce באמת מגיע
הצפנה מאומתת זקוקה ל-nonce שונה לכל הודעה המוצפנת תחת מפתח. פרוטוקולים ממלאים את הדרישה הזו בדרכים שונות: מונה שעולה באופן מונוטוני, מלח המחובר למזהה חבילה, או ערך אקראי ארוך מספיק. IKEv2 מחליף nonces במהלך ההחלפה הראשונית, והם קלט ציבורי לגזירת מפתח ולא סודות.
הייחודיות יכולה להיות מבנית או הסתברותית. מונה אינו יכול לחזור עד שהוא מתגלגל, ולכן הפרוטוקול מגדיר נקודת חידוש מפתח הרבה לפני כן. ערך אקראי נשען על מספיק סיביות כדי שהתנגשות תהיה בלתי סבירה במגבלת ההודעות, וזהו טיעון אחר עם מצב כשל אחר. תיעוד הפרוטוקול מציין איזו שיטה חלה, ושתיהן בטוחות רק כל עוד מכבדים את המגבלה המוצהרת.
| Design | Where uniqueness comes from | Exhaustion is handled by |
|---|---|---|
| AES-GCM records | An IV, typically a counter | Rekey before the counter wraps |
| ChaCha20-Poly1305 | A 96-bit nonce from a counter or generator | A message limit per key |
| WireGuard | A per-key 64-bit counter | Rekey at a message cap |
| OpenVPN AEAD | Packet identifier plus implicit key material | Rekey on the packet-id limit |
| IKEv2 | Fresh nonces per exchange | A new security association |
מה באמת עולה שימוש חוזר
שימוש חוזר ב-nonce תחת מפתח אחד אינו שאלת יעילות קטנה. עם GCM, שתי הודעות החולקות IV מאפשרות לצופה לשחזר את מפתח האימות ולחשב את הבלעדי-או של שני הטקסטים הגלויים. מבנים מבוססי זרם משתמשים מחדש בזרם המפתח באותו אופן, מה שהופך את הטקסט המוצפן לחידה במקום לסוד.
לכן מימושים מחדשים את המפתח לפני שהמונה מתגלגל, ולכן הם עוצרים במקום להמשיך כשמצבם אינו ודאי. אתחול שמאפס מונה כשהעמית עדיין מחזיק במפתח הישן, או מכונה וירטואלית שמשוחזרת מצילום שנעשה באמצע הפעלה, הם בדיוק המצב שהמגבלות קיימות כדי למנוע. אין צורך בתוקף; פעולות רגילות מספיקות.
למה עריכה ביד היא התיקון הלא נכון
מונים, מלחים ומזהי חבילות הם מכונות מצב שמשותפות לשני הקצוות. שינוי צד אחד מוציא את השני מסנכרון, והמנהרה נכשלת בדרכים שנראות כמו בעיית ניתוב. המנוף הנתמך הוא החלפת מפתח חדשה, שמאפסת את המצב בשני הקצוות בבת אחת.
גם לסיסמאות ול-nonces יש תפקידים שונים. סיסמה היא קלט סודי לגזירת מפתח; nonce הוא קלט ציבורי לכל הודעה. שדה פרופיל שכותרתו nonce ומבקש סוד ארוך הוא בדרך כלל מפתח סטטי או סוד משותף מראש תחת שם אחר, אז קראו את התיעוד של אותו שדה במקום להניח.
כשהתראה עוסקת בטיפול ב-nonce, התיקון הוא הגרסה המתוקנת של המתחזק, לא צופן אחר או מפתח קצר יותר. החלפת הצופן כדי להימנע מהמילה nonce מזיזה את הבעיה במקום לפתור אותה.
לקרוא אזהרה בלי לנחש
שורת יומן על מונים או nonces מתארת בדרך כלל מצב שאבד ולא התקפה. בדקו אם עמית אתחל, אם מכונה וירטואלית משוכפלת השתמשה מחדש באותה זהות, ואם שני הקצוות מסכימים על הגדרות חידוש המפתח. לאחר מכן הקימו הפעלה חדשה וצפו אם ההודעה חוזרת.
הפרידו את האבחון מכשלים לא קשורים. דף שלא נטען, או בקשה לאישורים שמסתובבת בלולאה, אינה ראיה לשימוש חוזר ב-nonce, והתייחסות אליה ככזו שולחת אתכם לשכבת ההצפנה כשהבעיה נמצאת מעליה.
לשימוש רגיל, הכלל הבטוח קצר: הניחו למימוש לנהל את ה-nonce, החזיקו את שני הקצוות בגרסאות נתמכות, והתייחסו לכל איפוס מצב כסיבה לחדש את המפתח ולא לערוך ערך. אם שדה פרופיל אינו בתיעוד של הספק, אל תמציאו לו ערך. תיקון המנהרה מתחיל בלדעת באיזו שכבה אתם מסתכלים.