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

שתי רשומות, שני משמעים שונים

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

ההבדל הזה קובע מה משמעות ההיעדרות:

QuestionWireGuard handshakeOpenVPN session log
Did the peer send recently?Strong hint within the rekey windowNot answered by start time alone
Did the peer stop?Weak, because idle peers also stop rekeyingOnly if a disconnect was written
What was visited?NothingNothing

מדוע לחיצת יד אינה שימוש רציף

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

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

מזהים נוסעים עם חותם הזמן

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

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

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

מתאם בין מערכות דורש זהירות עם שעונים

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

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

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

קראו את הרשומה בפקודות, לא בדמיון

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

שתי השורות האלה מציגות את גיל לחיצת היד ואת מוני הבתים לכל עמית WireGuard, ואחר כך חומר מאותו סוג מקובץ מצב של OpenVPN:

wg show all latest-handshakes
wg show wg0 transfer
cat /run/openvpn/server.status

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

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