Jason A. Donenfeld, autor VPN WireGuard, zaprezentował projekt WireGuardNT, rozwijający wysokowydajny port VPN WireGuard dla jądra Windows, kompatybilny z Windows 7, 8, 8.1 i 10, wspierający architektury AMD64, x86, ARM64 i ARM. Kod implementacji jest rozpowszechniany na licencji GPLv2. Nowy sterownik jest już zawarty w kliencie WireGuard dla Windows, ale obecnie jest oznaczony jako eksperymentalny i nie jest domyślnie aktywowany.
Port oparty jest na zweryfikowanej bazie kodu głównej implementacji WireGuard dla jądra Linux, która została przetłumaczona na użycie bytów jądra Windows i stosu sieciowego NDIS. W porównaniu do wcześniej dostępnej implementacji wireguard-go dla Windows, działającej w przestrzeni użytkownika i używającej interfejsu sieciowego Wintun, WireGuardNT oferuje znaczny wzrost wydajności dzięki wyeliminowaniu operacji przełączania kontekstu oraz kopiowania zawartości pakietów z jądra do przestrzeni użytkownika. Podobnie jak w implementacjach dla Linuxa, OpenBSD i FreeBSD, w WireGuardNT cała logika przetwarzania protokołu działa bezpośrednio na poziomie stosu sieciowego.
Mimo że specyficzne optymalizacje jeszcze nie zostały przeprowadzone, WireGuardNT już pozwolił na osiągnięcie szczytowej wydajności przesyłania danych na poziomie 7,5 Gbps w istniejącym środowisku testowym z Ethernetem. Na rzeczywistych systemach użytkowników z Wi-Fi wydajność jest znacznie niższa, ale w niewielkim stopniu różni się od bezpośredniego przesyłania danych. Na przykład w systemie z bezprzewodową kartą Intel AC9560 przepustowość bez WireGuard wyniosła 600 Mbps i z WireGuardNT również pozostała na poziomie 600 Mbps, podczas gdy przy użyciu wireguard-go/Wintun wynosiła 95 Mbps.
Przypomnijmy, że VPN WireGuard jest wdrażany na podstawie nowoczesnych metod szyfrowania, zapewnia bardzo wysoką wydajność, jest prosty w użyciu, pozbawiony komplikacji i dobrze sprawdził się w wielu dużych wdrożeniach obsługujących duże wolumeny ruchu. Projekt rozwija się od 2015 roku, przeszedł audyt i formalną weryfikację stosowanych metod szyfrowania. W WireGuard zastosowano koncepcję routingu na podstawie kluczy szyfrujących, która polega na przypisaniu do każdego interfejsu sieciowego klucza prywatnego oraz zastosowaniu go do powiązania kluczy publicznych.
Wymiana otwartych kluczy do nawiązywania połączenia odbywa się analogicznie jak w SSH. Do negocjacji kluczy i połączenia bez uruchamiania osobnego demona w przestrzeni użytkownika zastosowano mechanizm Noise_IK z Noise Protocol Framework, podobny do utrzymywania pliku authorized_keys w SSH. Przesył danych odbywa się poprzez enkapsulację w pakietach UDP. Obsługiwana jest zmiana adresy IP serwera VPN (roaming) bez przerywania połączenia z automatycznym przestawieniem klienta.
Do szyfrowania używany jest strumieniowy szyfr ChaCha20 oraz algorytm uwierzytelniania wiadomości (MAC) Poly1305, opracowane przez D annotations F a niczęty Bernsteina (Daniel J. Bernstein), Tanję Lange (Tanja Lange) oraz Petera Schwabe (Peter Schwabe). ChaCha20 i Poly1305 są przedstawiane jako szybsze i bezpieczniejsze odpowiedniki AES-256-CTR i HMAC, a ich implementacja programowa pozwala osiągnąć stały czas wykonania bez angażowania specjalnego wsparcia sprzętowego. Do generowania wspólnego sekretnego klucza stosowany jest protokół Diffiego-Hellmana oparty na krzywych eliptycznych w implementacji Curve25519, również zaproponowanej przez Daniela Bernsteina. Do haszowania używany jest algorytm BLAKE2s (RFC7693).
Źródło: opennet.ru
