Eén regel met «laatste handshake, twee minuten geleden» lijkt bewijs van voortdurende activiteit en is zwakker dan dat. Hij markeert de laatste voltooide sleuteluitwisseling voor één peer, die volgens een vaste sleutelrotatie-timer plaatsvindt zolang er verkeer stroomt en stopt wanneer de peer stil wordt. Of die tijd een persoon ergens aan koppelt, hangt af van de identificatoren ernaast en van de klokken van beide systemen. Hier is hoe het record zich in de twee meest voorkomende stacks gedraagt, en waar het lezen ervan misgaat.

Twee records, twee verschillende betekenissen

WireGuard houdt één handshake-tijdstempel per peer bij, vervangen bij elke sleutelrotatie, plus bytetellers in elke richting. OpenVPN registreert doorgaans een sessiestart, een verbreking en alles wat de geconfigureerde uitgebreidheid toevoegt, waardoor de eenheid van het record een sessie is en geen sleuteluitwisseling.

Dat verschil bepaalt wat een afwezigheid betekent:

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

Waarom een handshake geen continu gebruik is

WireGuard roteert sleutels ongeveer elke twee minuten zolang er gegevens te beschermen zijn, en een peer die inactief wordt, stopt eenvoudigweg. Een verouderde handshake kan dus betekenen dat de laptop slaapt, dat de gebruiker stopte met werken of dat het netwerk de pakketten liet vallen die de volgende uitwisseling hadden moeten starten. De tijdstempel is een ondergrens van activiteit, geen volger van aandacht.

De omgekeerde fout is net zo gemakkelijk. Voortdurend keepalive-verkeer houdt de tunnel warm op een inactief apparaat, zodat een recente handshake kan verschijnen op een machine die niemand een uur heeft aangeraakt. Bytetellers helpen hier, omdat ze een peer die echte gegevens stuurt onderscheiden van een die alleen keepalives uitwisselt, en ze vertellen ook welke richting het volume droeg. Niets daarvan onthult een bestemming, een pagina of een query.

Identificatoren reizen mee met de tijdstempel

Een tijd zonder account, publieke sleutel of bronadres is een wees. Koppel de tijdstempel aan de identiteit van de peer en de observatie wordt koppelbaar: een publieke sleutel blijft bestaan bij adreswijzigingen, terwijl een bronadres door veel abonnees kan worden gedeeld achter de adresvertaling van de provider.

Die asymmetrie is wat de meeste privacydiscussies missen. Het adres lijkt anoniem omdat het gedeeld wordt, en de sleutel lijkt technisch omdat hij lang is, maar de sleutel is de stabiele identificator. Eén veld bewaren en het andere laten vallen verandert het correlatierisico zonder de schijnbare precisie te veranderen.

De correlatie zelf is de gedocumenteerde zorg. Een verbindingstijd koppelen aan een login-gebeurtenis van een provider, een supportticket of een betalingsrecord kan een identiteit aan activiteit verbinden, zelfs wanneer nooit een bestemming is opgeschreven, en daarom is het paren belangrijker dan de opmaak.

Correlatie tussen systemen vereist klokzorg

Twee systemen die hetzelfde moment melden, zijn zelden tot op de seconde eens. Het ene kan een tijdzone-offset in zijn uitvoer toepassen, het andere kan op een klok lopen die enkele seconden verkeerd staat, en een virtuele machine kan na een suspensie afdrijven.

Voordat je concludeert dat twee gebeurtenissen samen plaatsvonden, converteer je beide naar dezelfde zone en controleer je de offset in het ruwe record in plaats van in de weergave. Als het gat dat je meet kleiner is dan de waarschijnlijke afwijking, heb je helemaal geen ordening.

De praktische regel is de precisie te bewaren die de probleemoplossingstaak nodig heeft en niet meer. Een telling van sessies per uur beantwoordt een beschikbaarheidsvraag zonder een geschiedenis per account te bewaren, en een aggregatie kan veel langer worden bewaard dan de ruwe rijen waaruit ze komt.

Lees het record met commando's, niet met verbeelding

Druk de velden af waarover je gaat redeneren, in de eenheden die het gereedschap opslaat en niet in die een dashboard weergeeft.

Deze twee regels tonen de leeftijd van de handshake en de bytetellers voor elke WireGuard-peer, en daarna hetzelfde soort materiaal uit een OpenVPN-statusbestand:

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

Vergelijk de leeftijd met het sleutelrotatie-interval voordat je een conclusie trekt, en lees de tellers ermee samen. Een peer met een recente handshake en bijna geen overdracht wisselt keepalives uit, terwijl een peer met een verouderde handshake en grote tellers bezig was tot hij stopte. Geen van beide regels zegt wat er is gedaan, en dat ronduit zeggen is nauwkeuriger dan te suggereren dat de tijdstempel een bezoek bewijst.

Gerelateerde artikelen