De meeste mensen komen het woord nonce tegen in een VPN-profiel en nemen aan dat het weer een gedeeld geheim is om tussen peers te kopiëren. Dat is het niet. Een nonce is een waarde die nooit onder dezelfde sleutel mag terugkomen, en in de meeste op nonce gebaseerde versleuteling reist hij onversleuteld. De verwarring blijft onschadelijk tot iemand hem met de hand bewerkt, en daar begint de echte schade.

Waar de nonce echt vandaan komt

Geauthenticeerde versleuteling heeft voor elk bericht dat onder een sleutel wordt versleuteld een andere nonce nodig. Protocollen voldoen op verschillende manieren aan die eis: een monotoon stijgende teller, een salt gecombineerd met een pakketidentificatie, of een voldoende lange willekeurige waarde. IKEv2 wisselt nonces uit tijdens de eerste uitwisseling, en ze zijn openbare invoer voor sleutelafleiding, geen geheimen.

Uniciteit kan structureel of probabilistisch zijn. Een teller kan niet terugkomen tot hij rondt, daarom definieert het protocol ruim daarvoor een sleutelvernieuwingspunt. Een willekeurige waarde vertrouwt op genoeg bits dat een botsing binnen de berichtlimiet onwaarschijnlijk is, wat een ander argument met een andere faalmodus is. De protocoldocumentatie noemt welke methode geldt, en beide zijn alleen veilig zolang de gestelde limiet wordt gerespecteerd.

DesignWhere uniqueness comes fromExhaustion is handled by
AES-GCM recordsAn IV, typically a counterRekey before the counter wraps
ChaCha20-Poly1305A 96-bit nonce from a counter or generatorA message limit per key
WireGuardA per-key 64-bit counterRekey at a message cap
OpenVPN AEADPacket identifier plus implicit key materialRekey on the packet-id limit
IKEv2Fresh nonces per exchangeA new security association

Wat hergebruik werkelijk kost

Een nonce onder één sleutel hergebruiken is geen klein efficiëntievraagstuk. Met GCM kunnen twee berichten die een IV delen een waarnemer de authenticatiesleutel laten herstellen en de exclusieve of van de twee leesbare teksten berekenen. Stroomgebaseerde constructies hergebruiken de sleutelstroom op dezelfde manier, wat de ciphertext in een puzzel verandert in plaats van een geheim.

Daarom vernieuwen implementaties de sleutel voordat een teller rondt, en daarom stoppen ze in plaats van door te gaan wanneer hun toestand onzeker is. Een herstart die een teller reset terwijl de peer nog de oude sleutel heeft, of een virtuele machine die wordt hersteld uit een snapshot die midden in een sessie is gemaakt, is precies de situatie die de limieten bestaan om te voorkomen. Er is geen aanvaller nodig; gewone handelingen volstaan.

Waarom handmatig bewerken de verkeerde oplossing is

Tellers, salts en pakketidentificaties zijn toestandsmachines die beide kanten delen. Het ene uiteinde wijzigen desynchroniseert het andere, en de tunnel faalt op manieren die op een routeringsprobleem lijken. De ondersteunde hefboom is een nieuwe sleuteluitwisseling, die de toestand aan beide uiteinden tegelijk reset.

Wachtwoorden en nonces spelen ook verschillende rollen. Een wachtwoord is geheime invoer voor sleutelafleiding; een nonce is openbare invoer per bericht. Een profielveld met het label nonce dat om een lang geheim vraagt, is meestal een statische sleutel of een vooraf gedeeld geheim onder een andere naam, dus lees de documentatie voor dat veld in plaats van aan te nemen.

Wanneer een advies over de omgang met nonces gaat, is de reparatie de gecorrigeerde versie van de beheerder, niet een andere cipher of een kortere sleutel. De cipher wijzigen om het woord nonce te vermijden verplaatst het probleem in plaats van het op te lossen.

Een waarschuwing lezen zonder te gissen

Een logregel over tellers of nonces beschrijft meestal verloren toestand, geen aanval. Controleer of een peer opnieuw is gestart, of een gekloonde virtuele machine dezelfde identiteit heeft hergebruikt, en of beide uiteinden het eens zijn over de sleutelvernieuwingsinstellingen. Stel daarna een nieuwe sessie in en kijk of het bericht terugkomt.

Houd de diagnose gescheiden van ongerelateerde storingen. Een pagina die niet laadt, of een inlogverzoek dat in een lus blijft hangen, is geen bewijs van nonce-hergebruik, en het als zodanig behandelen stuurt je naar de cryptografische laag terwijl het probleem daarboven ligt.

Voor gewoon gebruik is de veilige regel kort: laat de implementatie de nonce beheren, houd beide uiteinden op ondersteunde versies, en behandel elke toestandsreset als een reden om de sleutel te vernieuwen in plaats van een waarde te bewerken. Staat een profielveld niet in de documentatie van de leverancier, verzin er dan geen waarde voor. Het repareren van de tunnel begint met weten naar welke laag je kijkt.

Gerelateerde artikelen