Что на самом деле говорит метка времени рукопожатия 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, тогда как узел с устаревшим рукопожатием и большими счётчиками был занят, пока не остановился. Ни одна из строк не говорит, что было сделано, и сказать это прямо точнее, чем подразумевать, что метка времени доказывает визит.