WireGuard אומר שהאורך של המפתח הפרטי שגוי: מה עושים עכשיו?
מפתח של 32 בתים ב־base64 הוא 44 תווים. החליטו אם הטקסט פגום או שהזהות שגויה לפני שמחדשים משהו.
ההודעה אומרת שלמפתח הפרטי יש אורך שגוי, והניסוח הזה מצביע קודם על הקידוד ורק אחר כך על ההצפנה. מפתחות WireGuard מקודדים 32 בתים ב־base64, מה שנותן 44 תווים כולל ריפוד סופי, ולכן ערך בגודל אחר אינו מפתח, עד כמה שהוא נראה אקראי. השלמת המחרוזת עד שהמנתח מקבל אותה יוצרת ערך תקין שאף עמית לא יזהה לעולם.
מאחורי השגיאה הזו מסתתרות שתי משימות שונות: תיקון הטקסט של מפתח תקף, והחלפת זהות שאין לכם יותר. יש להן השלכות שונות, ואחת מהן מבטלת את הצד השני.
מה המנתח מצפה לראות
מפתח WireGuard הוא 32 בתים של חומר מפתח ב־base64 עם ריפוד תקני, מה שנותן מחרוזת קבועה של 44 תווים. הכלים דוחים כל דבר שאינו מפוענח בדיוק ל־32 בתים, כי העקומה הבסיסית לוקחת סקלר של 32 בתים ולא דבר אחר. ערכים ציבוריים ופרטיים משתמשים באותו קידוד, ולכן המנתח לא יכול לדעת מהפורמט בלבד איזה מהם הדבקתם. העמימות הזו גורמת למחצית מהבלבול סביב השגיאה הזו.
wg genkey | tee private.key | wg pubkey > public.key
base64 -d private.key | wc -c
wc -c private.key
wg show wg0 public-key
אם הערך שלכם מפוענח ל־32 בתים, האורך תקין והתלונה מגיעה ממקום אחר בקובץ. אם הוא מפוענח למשהו קצר יותר, יש לכם חומר קטוע ולא בעיית תבנית.
נזק בתבנית או חומר שגוי?
נזקי תבנית מצטברים בשוליים: מירכאות שהוסיף מעטפת, תווית כמו private_key שהועתקה יחד עם הערך, שבירת שורה שהוסיף לקוח צ'אט, או רווח סופי ששרד את ההדבקה. כל אחד מאלה משנה את המחרוזת בלי לשנות את הבתים, ולכן הסרתו מחזירה את הזהות המקורית. השוו את הקובץ לרשומת ההקצאה תו אחר תו במקום להסיר פיסוק עד שהמנתח משתתק.
חומר שגוי הוא מצב אחר. סיסמה, מפתח תעודה או ערך ציבורי יכולים כולם להיראות סבירים ולהתפענח לגודל שגוי. שום ניקוי לא הופך אף אחד מהם לסקלר שהעמית מצפה לו. המקרה הזה דורש זהות חדשה ולא עריכה.
מפתח ציבורי בשדה הפרטי
הבלבול הנפוץ ביותר הוא ערך ציבורי שהודבק בשדה הפרטי, או ההפך. שניהם base64 תקפים של 32 בתים, ולכן בדיקת האורך עוברת והלחיצה נכשלת אחר כך בלי הודעה מועילה. מפתח פרטי הוא הסקלר שמייצר את הציבורי, ולכן אפשר להכריע על ידי גזירת הערך הציבורי והשוואתו למה שהעמית מאשר. כשלא נגזר הערך התואם לרשומה, הזהות שבידכם שגויה ולא שגיאת הקלדה.
החלפת המפתח הפרטי של הלקוח בלי לעדכן את המפתח הציבורי המאושר בקצה השני יוצרת מחדש את אותה אי־התאמה, עם הבלבול הנוסף שקובץ הלקוח עצמו נראה עכשיו עקבי. החליפו את שני הקצוות בפעולה אחת, אחרת האדם הבא ינפה את החצי הלא נכון.
תקנו את הפרופיל ואז הוכיחו את הלחיצה
לאחר שהמפתח מפוענח לגודל הנכון ומתאים לזוג המאושר, העבודה שנותרה היא הפרופיל והמסלול. הפקודות שלמטה מייצרות זוג חדש כשצריך, מאמתות את הגודל המפוענח של מפתח קיים וקוראות את הערך הציבורי שהממשק באמת משתמש בו. לעולם אל תדביקו ערך פרטי בכרטיס או באתר פענוח.
wg genkey | tee new.key | wg pubkey > new.pub
base64 -d private.key | wc -c
ip route get 10.60.9.5
wg show wg0 latest-handshakes
בדיקת הגודל עונה אם לחומר יש צורת מפתח, ושאילתת המסלול עונה אם חבילה תגיע אי פעם לממשק. שורת לחיצה שנשארת ריקה אחרי ששתי הבדיקות עוברות מעבירה את האבחון לקצה של העמית ולכתובות המותרות. קראו את המפתח הציבורי של הממשק מול רשומת ההקצאה פעם אחרונה, כי פרופיל שמור מיושן יכול להיראות נכון בעוד שהפעיל שונה].
רשמו איזה ערך החלפתם והיכן נמצאת העתקה המאושרת. מי שיגע בעמית הזה להבא צריך לדעת איזה קצה השתנה.