Ludzie opisują VPN jako „ten, który używa szyfrowania kluczem publicznym“, a potem wyobrażają sobie, że każdy pakiet jest zamykany certyfikatem serwera. Ten obraz jest błędny w sposób, który ma znaczenie, gdy czytasz plik konfiguracyjny albo zrzut pakietów. Połowa publiczna VPN służy do udowodnienia, kim jest druga strona, i do uzgodnienia tajnego materiału; połowa symetryczna to ta, która naprawdę chroni ruch, pakiet po pakiecie, przez cały czas życia sesji.

Obie połowy mają inny czas życia, inne tryby awarii i inne rzeczy, które można bezpiecznie publikować. Gdy je rozdzielisz, pytania typu „czy RSA 2048 jest słabszy od AES-128“ przestają mylić, bo nigdy nie były porównywalne.

Trzy operacje, które się miesza

Kryptografia klucza publicznego to parasol nad co najmniej trzema różnymi operacjami. Podpis dowodzi, że posiadacz klucza prywatnego zatwierdził konkretną wiadomość. Uzgodnienie klucza pozwala dwóm stronom wyprowadzić wspólny sekret z wartości wymienianych jawnie. Szyfrowanie kluczem publicznym ukrywa dane pod czyimś kluczem publicznym, tak że otworzyć je może tylko klucz prywatny.

Uzgodnienia w VPN korzystają głównie z dwóch pierwszych. Certyfikat nie jest kluczem szyfrującym; to podpisane oświadczenie wiążące nazwę z kluczem publicznym i pozwalające drugiej stronie zdecydować, czy zaufać właśnie otrzymanemu kluczowi. Na przykład ustalanie kluczy w TLS 1.3 opiera się na uzgodnieniu (EC)DHE i podpisach certyfikatów, a nie na szyfrowaniu sesji kluczem publicznym serwera.

Co faktycznie wytwarza uzgadnianie

W nowoczesnym uzgodnieniu każda strona tworzy efemeryczną parę kluczy, wymienia publiczne połówki i oblicza wspólny sekret, który nigdy nie przechodzi przez przewód. Ten sekret przechodzi następnie przez funkcję wyprowadzania kluczy, dając osobne klucze dla każdego kierunku oraz nonce i materiał IV potrzebny warstwie rekordów. WireGuard robi to swoją konstrukcją opartą na Noise; TLS 1.3 robi to przez HKDF na transkrypcie uzgodnienia.

Długotrwałe poświadczenie — certyfikat i klucz prywatny albo statyczny klucz WireGuard — uwierzytelnia tę wymianę. Podpisuje transkrypt lub się w niego wmiesza, dzięki czemu obcy nie może dokończyć uzgodnienia w miejsce drugiej strony. Potem poświadczenie nie wykonuje pracy na pakiet. Gdyby wykonywało, każdy pakiet wymagałby operacji kluczem prywatnym, a zajęty tunel byłby ograniczony najwolniejszą operacją w stosie.

Wynikają z tego dwa skutki uboczne. Po pierwsze, klucze sesji są za każdym razem świeże, więc atakujący, który później ukradnie klucz długotrwały, nie odszyfruje wcześniej nagranych sesji, o ile uzgodnienie było efemeryczne. Po drugie, ujawniony klucz sesji kompromituje jedną sesję, a nie tożsamość.

Dlaczego duże ilości danych używają kluczy symetrycznych

Szyfry symetryczne dobrze radzą sobie z objętością: AES-GCM lub ChaCha20-Poly1305 przetwarzają każdy pakiet kluczem już obecnym w pamięci, uwierzytelniają nagłówek i zwiększają licznik. Odbiorca sprawdza nonce i znacznik uwierzytelnienia oraz odrzuca wszystko, co się nie zgadza lub powtarza. To wystarczająco tanie, by działać z prędkością łącza na zwykłym sprzęcie, a ta sama konstrukcja daje poufność i integralność w jednym przebiegu.

Ta konstrukcja jest też miejscem, gdzie żyje większość błędów implementacji. Powtórzony nonce w GCM łamie poufność i autentyczność naraz, dlatego protokoły wyprowadzają klucze na kierunek i utrzymują jawny licznik lub epokę. Jeśli czytasz zrzut pakietów, a długość szyfrogramu odpowiada tekstowi jawnemu plus stały narzut, to pracuje warstwa symetryczna, a nie operacja kluczem publicznym na pakiet.

Czas życia, odświeżanie kluczy i tajność w przód

Klucze sesji mają wygasać. TLS 1.3 pozwala komunikatowi KeyUpdate przetoczyć klucze ruchu; WireGuard odnawia sesję po zadanym czasie lub liczbie komunikatów i krótko trzyma stary klucz dla pakietów w drodze. OpenVPN ponownie negocjuje klucze swojego kanału danych według harmonogramu, a reneg-sec steruje odstępem.

Żadna z tych rotacji nie jest tym samym co odnowienie certyfikatu. Certyfikat może być ważny rok, podczas gdy klucze sesji zmieniają się co kilka minut, a certyfikat można wymienić bez dotykania kluczy działającego tunelu. Planując wygaśnięcie, zapytaj, który obiekt rotujesz; odpowiedź decyduje, czy klienci połączą się ponownie, czy tylko odświeżą klucze.

Czytanie konfiguracji i diagnostyki bez mieszania obiektów

W praktyce wybierasz kompletny protokół i jego obsługiwane prymitywy, a nie składasz własnego. Klucz --tls-crypt OpenVPN chroni kanał sterujący; kanał danych używa wynegocjowanych szyfrów symetrycznych. Wpisy PrivateKey i PublicKey WireGuard to materiał tożsamości, a jego klucze transportowe są wyprowadzane wewnętrznie. Czytanie tych pól jako tego samego rodzaju sekretu prowadzi do błędów, takich jak wklejenie klucza publicznego tam, gdzie powinien być prywatny.

Trzymaj materiał publiczny oddzielnie od prywatnego. Certyfikat, klucz publiczny WireGuard i odcisk palca są bezpieczne do udostępnienia w zgłoszeniu. Klucz prywatny, klucz wstępnie współdzielony i wyeksportowany klucz sesji nie. Porównując siłę, porównuj w obrębie jednego typu: identyfikator krzywej eliptycznej, rozmiar modułu RSA i rozmiar klucza AES mierzy różne rzeczy przy różnych założeniach. Specyfikacja TLS 1.3 to użyteczne źródło o tym, jak obie warstwy do siebie pasują, nawet gdy twój tunel nie jest TLS.

Powiązane artykuły