Що насправді каже мітка часу рукостискання WireGuard
Час рукостискання — не історія переглядів, але він пов'язує обліковий запис із подією. Порівняйте, що записують WireGuard і OpenVPN, і що приховує точність.
Один рядок «останнє рукостискання, дві хвилини тому» виглядає як доказ безперервної активності й слабший за це. Він позначає останній завершений обмін ключами для одного вузла, який відбувається за фіксованим таймером оновлення ключів, поки йде трафік, і припиняється, коли вузол замовкає. Чи пов'язує цей час людину з чимось, залежить від ідентифікаторів, збережених поруч, і від годинників обох систем. Ось як поводиться запис у двох найпоширеніших стеках і де його читання помиляється.
Два записи, два різні значення
WireGuard зберігає одну мітку часу рукостискання на вузол, яка замінюється під час кожного оновлення ключів, плюс лічильники байтів у кожному напрямку. OpenVPN зазвичай записує початок сеансу, відключення і все, що додає налаштована докладність, через що одиницею запису стає сеанс, а не обмін ключами.
Ця різниця визначає, що означає відсутність:
| Question | WireGuard handshake | OpenVPN session log |
|---|---|---|
| Did the peer send recently? | Strong hint within the rekey window | Not answered by start time alone |
| Did the peer stop? | Weak, because idle peers also stop rekeying | Only if a disconnect was written |
| What was visited? | Nothing | Nothing |
Чому рукостискання не є безперервним використанням
WireGuard оновлює ключі приблизно кожні дві хвилини, поки є дані, які треба захищати, а вузол, що став неактивним, просто зупиняється. Тому застаріле рукостискання може означати, що ноутбук спить, користувач припинив працювати або мережа відкинула пакети, які запустили б наступний обмін. Мітка часу — це нижня межа активності, а не трекер уваги.
Зворотна помилка така сама легка. Постійний трафік keepalive тримає тунель теплим на неактивному пристрої, тож недавнє рукостискання може з'явитися на машині, до якої годину ніхто не торкався. Лічильники байтів тут допомагають, бо відрізняють вузол, що надсилає справжні дані, від того, що обмінюється лише keepalive, і кажуть, який напрямок ніс обсяг. Ніщо з цього не розкриває пункт призначення, сторінку чи запит.
Ідентифікатори подорожують разом із міткою часу
Час без облікового запису, відкритого ключа або адреси джерела — сирота. Зіставте мітку часу з ідентичністю вузла, і спостереження стане пов'язуваним: відкритий ключ зберігається під час зміни адрес, тоді як адреса джерела може бути спільною для багатьох абонентів за трансляцією адрес оператора.
Ця асиметрія — те, що пропускає більшість обговорень приватності. Адреса виглядає анонімною, бо вона спільна, а ключ виглядає технічним, бо він довгий, але стабільний ідентифікатор — саме ключ. Збереження одного поля й відмова від іншого змінює ризик кореляції, не змінюючи видимої точності.
Сама кореляція — це задокументована тривога. Поєднання часу підключення з подією входу в провайдера, зверненням до підтримки або записом про платіж може пов'язати особу з активністю навіть тоді, коли пункт призначення ніколи не записувався, і тому зіставлення важливіше за форматування.
Кореляція між системами потребує уваги до годинників
Дві системи, що повідомляють про один і той самий момент, рідко збігаються до секунди. Одна може застосовувати зсув часового поясу у своєму виводі, інша може працювати на годиннику, що відстає на кілька секунд, а віртуальна машина може відхилитися після призупинення.
Перш ніж зробити висновок, що дві події відбулися разом, переведіть обидві в один пояс і перевірте зсув у сирому записі, а не у відображенні. Якщо розрив, який ви вимірюєте, менший за ймовірне відхилення, у вас взагалі немає порядку.
Практичне правило — зберігати точність, потрібну завданню пошуку несправностей, і не більше. Кількість сеансів за годину відповідає на питання доступності, не ведучи історію за кожним обліковим записом, а агрегат можна зберігати значно довше, ніж сирі рядки, з яких він походить.
Читайте запис командами, а не уявою
Надрукуйте поля, про які збираєтеся міркувати, в одиницях, які зберігає інструмент, а не в тих, що показує панель.
Ці два рядки показують вік рукостискання та лічильники байтів для кожного вузла WireGuard, а потім такий самий матеріал із файлу стану OpenVPN:
wg show all latest-handshakes
wg show wg0 transfer
cat /run/openvpn/server.statusПорівняйте вік з інтервалом оновлення ключів, перш ніж робити висновок, і читайте лічильники разом із ним. Вузол із недавнім рукостисканням і майже без передачі обмінюється keepalive, тоді як вузол із застарілим рукостисканням і великими лічильниками був зайнятий, доки не зупинився. Жоден рядок не каже, що було зроблено, і сказати це прямо точніше, ніж натякати, що мітка часу доводить візит.