Одна строка «последнее рукопожатие, две минуты назад» выглядит как доказательство непрерывной активности и слабее этого. Она отмечает последний завершённый обмен ключами для одного узла, который происходит по фиксированному таймеру обновления ключей, пока идёт трафик, и прекращается, когда узел замолкает. Связывает ли это время человека с чем-либо, зависит от идентификаторов, сохранённых рядом, и от часов обеих систем. Вот как ведёт себя запись в двух самых распространённых стеках и где её чтение ошибается.

Две записи, два разных значения

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

Идентификаторы путешествуют вместе с меткой времени

Время без учётной записи, открытого ключа или адреса источника — сирота. Сопоставьте метку времени с идентичностью узла, и наблюдение станет связываемым: открытый ключ сохраняется при смене адресов, тогда как адрес источника может быть общим для многих абонентов за трансляцией адресов оператора.

Эта асимметрия — то, что упускает большинство обсуждений приватности. Адрес выглядит анонимным, потому что он общий, а ключ выглядит техническим, потому что он длинный, но стабильный идентификатор — именно ключ. Сохранение одного поля и отказ от другого меняет риск корреляции, не меняя видимой точности.

Сама корреляция — это задокументированная тревога. Соединение времени подключения с событием входа у провайдера, обращением в поддержку или записью о платеже может связать личность с активностью даже тогда, когда пункт назначения никогда не записывался, и поэтому сопоставление важнее форматирования.

Корреляция между системами требует внимания к часам

Две системы, сообщающие об одном и том же моменте, редко совпадают до секунды. Одна может применять смещение часового пояса в своём выводе, другая может работать на часах, отстающих на несколько секунд, а виртуальная машина может уйти после приостановки.

Прежде чем заключить, что два события произошли вместе, переведите оба в один пояс и проверьте смещение в сырой записи, а не в отображении. Если измеряемый разрыв меньше вероятного отклонения, у вас вообще нет порядка.

Практическое правило — сохранять точность, которая нужна задаче поиска неисправностей, и не более. Количество сеансов в час отвечает на вопрос доступности, не ведя историю по каждой учётной записи, а агрегат можно хранить гораздо дольше, чем сырые строки, из которых он получен.

Читайте запись командами, а не воображением

Напечатайте поля, о которых собираетесь рассуждать, в единицах, которые хранит инструмент, а не в тех, что отображает панель.

Эти две строки показывают возраст рукопожатия и счётчики байтов для каждого узла WireGuard, а затем такой же материал из файла состояния OpenVPN:

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

Сравните возраст с интервалом обновления ключей, прежде чем делать вывод, и читайте счётчики вместе с ним. Узел с недавним рукопожатием и почти без передачи обменивается keepalive, тогда как узел с устаревшим рукопожатием и большими счётчиками был занят, пока не остановился. Ни одна из строк не говорит, что было сделано, и сказать это прямо точнее, чем подразумевать, что метка времени доказывает визит.

Похожие статьи