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

מאיפה ה-nonce באמת מגיע

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

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

DesignWhere uniqueness comes fromExhaustion is handled by
AES-GCM recordsAn IV, typically a counterRekey before the counter wraps
ChaCha20-Poly1305A 96-bit nonce from a counter or generatorA message limit per key
WireGuardA per-key 64-bit counterRekey at a message cap
OpenVPN AEADPacket identifier plus implicit key materialRekey on the packet-id limit
IKEv2Fresh nonces per exchangeA new security association

מה באמת עולה שימוש חוזר

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

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

למה עריכה ביד היא התיקון הלא נכון

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

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

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

לקרוא אזהרה בלי לנחש

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

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

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

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