Vad en VPN-nonce är och varför återanvändning bryter tunneln
En nonce är ett värde per meddelande som aldrig får upprepas under en nyckel, och den färdas vanligtvis i klartext. Att redigera den för hand är felet att undvika.
De flesta möter ordet nonce i en VPN-profil och antar att det är ännu en delad hemlighet att kopiera mellan parter. Det är det inte. En nonce är ett värde som aldrig får upprepas under samma nyckel, och i de flesta nonce-baserade krypteringar färdas den i klartext. Förvirringen är ofarlig tills någon redigerar den för hand, och det är där den verkliga skadan börjar.
Varifrån noncen faktiskt kommer
Autentiserad kryptering behöver en annan nonce för varje meddelande som krypteras under en nyckel. Protokoll uppfyller kravet på olika sätt: en monotont ökande räknare, ett salt kombinerat med en paketidentifierare eller ett tillräckligt långt slumpvärde. IKEv2 utbyter nonces under det inledande utbytet, och de är offentliga indata för nyckelhärledning, inte hemligheter.
Unikhet kan vara strukturell eller sannolikhetsbaserad. En räknare kan inte upprepas förrän den rullar över, och därför definierar protokollet en nyckelbytespunkt långt innan. Ett slumpvärde förlitar sig på tillräckligt många bitar för att en kollision ska vara osannolik inom meddelandegränsen, vilket är ett annat argument med ett annat felmode. Protokolldokumentationen anger vilken metod som gäller, och båda är säkra bara så länge den angivna gränsen respekteras.
| Design | Where uniqueness comes from | Exhaustion is handled by |
|---|---|---|
| AES-GCM records | An IV, typically a counter | Rekey before the counter wraps |
| ChaCha20-Poly1305 | A 96-bit nonce from a counter or generator | A message limit per key |
| WireGuard | A per-key 64-bit counter | Rekey at a message cap |
| OpenVPN AEAD | Packet identifier plus implicit key material | Rekey on the packet-id limit |
| IKEv2 | Fresh nonces per exchange | A new security association |
Vad återanvändning faktiskt kostar
Att återanvända en nonce under en nyckel är inte en liten effektivitetsfråga. Med GCM låter två meddelanden som delar en IV en observatör återställa autentiseringsnyckeln och beräkna det exklusiva eller av de två klartexterna. Strömbaserade konstruktioner återanvänder nyckelströmmen på samma sätt, vilket gör chiffertexten till ett pussel i stället för en hemlighet.
Därför byter implementeringar nyckel innan en räknare rullar över, och därför stannar de i stället för att fortsätta när deras tillstånd är osäkert. En omstart som nollställer en räknare medan motparten fortfarande har den gamla nyckeln, eller en virtuell maskin som återställs från en ögonblicksbild tagen mitt i en session, är precis den situation som gränserna finns för att förhindra. Ingen angripare behövs; vanliga operationer räcker.
Varför manuell redigering är fel lösning
Räknare, salter och paketidentifierare är tillståndsmaskiner som delas av båda ändarna. Att ändra ena sidan desynkroniserar den andra, och tunneln misslyckas på sätt som ser ut som ett routningsproblem. Den stödda hävstången är ett nytt nyckelutbyte, som nollställer tillståndet på båda ändarna samtidigt.
Lösenord och nonces spelar också olika roller. Ett lösenord är hemlig indata för nyckelhärledning; en nonce är offentlig indata per meddelande. Ett profilfält märkt nonce som begär en lång hemlighet är vanligtvis en statisk nyckel eller en fördelad hemlighet under ett annat namn, så läs dokumentationen för det fältet i stället för att anta.
När ett säkerhetsråd gäller hantering av nonce är åtgärden underhållarens rättade version, inte en annan chiffer eller en kortare nyckel. Att byta chiffer för att undvika ordet nonce flyttar problemet i stället för att lösa det.
Att läsa en varning utan att gissa
En loggrada om räknare eller nonces beskriver vanligtvis förlorat tillstånd, inte en attack. Kontrollera om en motpart har startats om, om en klonad virtuell maskin har återanvänt samma identitet och om båda ändarna är överens om nyckelbytesinställningarna. Etablera sedan en ny session och se om meddelandet återkommer.
Håll diagnosen åtskild från orelaterade fel. En sida som inte laddas, eller en inloggningsbegäran som går i loop, är inte bevis på nonce-återanvändning, och att behandla det som det skickar dig ned i krypteringslagret när problemet ligger ovanför.
För vanlig användning är den säkra regeln kort: låt implementeringen hantera noncen, håll båda ändarna på stödda versioner och behandla varje tillståndsnollställning som en anledning att byta nyckel i stället för att redigera ett värde. Om ett profilfält inte finns i leverantörens dokumentation ska du inte hitta på ett värde för det. Reparation av tunneln börjar med att veta vilket lager du tittar på.