Czym jest nonce w VPN i dlaczego ponowne użycie psuje tunel
Nonce to wartość dla każdej wiadomości, która nigdy nie może się powtórzyć pod jednym kluczem, i zwykle podróżuje jawnie. Ręczne edytowanie jej to błąd, którego należy unikać.
Większość ludzi spotyka słowo nonce w profilu VPN i zakłada, że to kolejny współdzielony sekret do skopiowania między stronami. Nie jest. Nonce to wartość, która nigdy nie może się powtórzyć pod tym samym kluczem, a w większości szyfrowania opartego na nonce podróżuje jawnie. Zamieszanie pozostaje nieszkodliwe, dopóki ktoś nie edytuje jej ręcznie, i tam zaczyna się prawdziwe uszkodzenie.
Skąd naprawdę bierze się nonce
Uwierzytelnione szyfrowanie wymaga innego nonce dla każdej wiadomości szyfrowanej pod kluczem. Protokoły spełniają ten wymóg na różne sposoby: monotonicznie rosnący licznik, sól połączona z identyfikatorem pakietu lub wystarczająco długa wartość losowa. IKEv2 wymienia nonce podczas wymiany początkowej, a są to publiczne dane wejściowe do wyprowadzania klucza, nie sekrety.
Unikalność może być strukturalna lub probabilistyczna. Licznik nie może się powtórzyć, dopóki się nie zawinie, dlatego protokół definiuje punkt odnowienia klucza znacznie wcześniej. Wartość losowa opiera się na wystarczającej liczbie bitów, aby kolizja była nieprawdopodobna w granicach limitu wiadomości, co jest innym argumentem z innym trybem awarii. Dokumentacja protokołu wskazuje, która metoda obowiązuje, i obie są bezpieczne tylko dopóki przestrzegany jest podany limit.
| 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 |
Ile naprawdę kosztuje ponowne użycie
Ponowne użycie nonce pod jednym kluczem nie jest drobną kwestią wydajności. W GCM dwie wiadomości współdzielące IV pozwalają obserwatorowi odzyskać klucz uwierzytelniania i obliczyć różnicę symetryczną dwóch tekstów jawnych. Konstrukcje strumieniowe wykorzystują strumień klucza w ten sam sposób, co zamienia szyfrogram w zagadkę zamiast w sekret.
Dlatego implementacje odnawiają klucz, zanim licznik się zawinie, i dlatego zatrzymują się zamiast kontynuować, gdy ich stan jest niepewny. Restart, który zeruje licznik, podczas gdy partner nadal ma stary klucz, albo maszyna wirtualna przywrócona z migawki wykonanej w połowie sesji, to dokładnie ta sytuacja, której limity mają zapobiegać. Napastnik nie jest potrzebny; zwykłe operacje wystarczą.
Dlaczego ręczna edycja to złe rozwiązanie
Liczniki, sole i identyfikatory pakietów to maszyny stanu współdzielone przez oba końce. Zmiana jednej strony desynchronizuje drugą, a tunel zawodzi w sposób, który wygląda jak problem z routingiem. Wspieraną dźwignią jest świeża wymiana kluczy, która resetuje stan po obu stronach naraz.
Hasła i nonce odgrywają też różne role. Hasło to tajne dane wejściowe do wyprowadzania klucza; nonce to publiczne dane wejściowe dla każdej wiadomości. Pole profilu oznaczone nonce, które prosi o długi sekret, to zwykle klucz statyczny lub wcześniej współdzielony sekret pod inną nazwą, więc przeczytaj dokumentację tego pola, zamiast zakładać.
Gdy komunikat bezpieczeństwa dotyczy obsługi nonce, naprawą jest poprawiona wersja od opiekuna, a nie inny szyfr ani krótszy klucz. Zmiana szyfru, aby uniknąć słowa nonce, przenosi problem, zamiast go rozwiązywać.
Czytanie ostrzeżenia bez zgadywania
Linia dziennika o licznikach lub nonce zwykle opisuje utracony stan, a nie atak. Sprawdź, czy jeden partner nie został zrestartowany, czy sklonowana maszyna wirtualna nie użyła ponownie tej samej tożsamości i czy oba końce zgadzają się co do ustawień odnowienia klucza. Następnie ustanów nową sesję i obserwuj, czy komunikat wraca.
Trzymaj diagnozę oddzielnie od niepowiązanych awarii. Strona, która się nie ładuje, albo monit o poświadczenia, który zapętla się, nie jest dowodem ponownego użycia nonce, a traktowanie go jak dowodu wysyła cię do warstwy kryptograficznej, gdy problem jest powyżej.
W zwykłym użyciu bezpieczna zasada jest krótka: pozwól implementacji zarządzać nonce, utrzymuj oba końce na obsługiwanych wersjach i traktuj każde zresetowanie stanu jako powód do odnowienia klucza, a nie do edycji wartości. Jeśli pole profilu nie występuje w dokumentacji dostawcy, nie wymyślaj dla niego wartości. Naprawa tunelu zaczyna się od wiedzy, na którą warstwę patrzysz.