Dzisiaj Linus przeniósł do siebie oddział net-next z interfejsami VPN WireGuard. O tym wydarzeniu сообщили na liście mailingowej WireGuard.
Obecnie trwa zbieranie kodu dla nowego jądra Linuksa 5.6. WireGuard to szybka sieć VPN nowej generacji, która implementuje nowoczesną kryptografię. Pierwotnie został opracowany jako prostsza i wygodniejsza alternatywa dla istniejących sieci VPN. Autorem jest kanadyjski specjalista ds. bezpieczeństwa informacji Jason A. Donenfeld. W sierpniu 2018 r. WireGuard był chwalony przez Linusa Torvaldsa. Mniej więcej w tym czasie rozpoczęto prace nad włączeniem VPN do jądra Linuksa. Proces trwał trochę dłużej.
„Widzę, że Jason wysłał żądanie ściągnięcia, aby włączyć WireGuard do jądra” – napisał Linus 2 sierpnia 2018 r. — Czy mogę jeszcze raz zadeklarować moją miłość do tej sieci VPN i mieć nadzieję na wkrótce fuzję? Kod może nie jest doskonały, ale przyjrzałem się mu i w porównaniu z okropnościami OpenVPN i IPSec jest to prawdziwe dzieło sztuki.”
Wbrew woli Linusa fuzja przeciągnęła się o półtora roku. Główny problem okazał się związany z autorskimi implementacjami funkcji kryptograficznych, które miały na celu poprawę wydajności. Po długich negocjacjach we wrześniu 2019 r. tak się stało podjęto decyzję kompromisową przetłumaczyć poprawki na funkcje Crypto API dostępne w jądrze, do których programiści WireGuard mają zastrzeżenia w zakresie wydajności i ogólnego bezpieczeństwa. Postanowili jednak oddzielić natywne funkcje kryptograficzne WireGuard do osobnego niskopoziomowego API Zinc i ostatecznie przenieść je do jądra. W listopadzie twórcy jądra dotrzymali obietnicy i Zgoda przenieść część kodu z Zinca do głównego jądra. Na przykład w Crypto API w zestawie szybkie implementacje algorytmów ChaCha20 i Poly1305 przygotowane w WireGuard.
Wreszcie 9 grudnia 2019 roku David S. Miller, odpowiedzialny za podsystem sieciowy jądra Linux, przyjęty do następnej gałęzi sieci łatki z wdrożeniem interfejsu VPN z projektu WireGuard.
A dzisiaj, 29 stycznia 2020 r., zmiany trafiły do Linusa w celu włączenia ich do jądra.
Deklarowane zalety WireGuard w porównaniu z innymi rozwiązaniami VPN:
Łatwy w użyciu.
Wykorzystuje nowoczesną kryptografię: framework protokołu Noise, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF itp.
Kompaktowy, czytelny kod, łatwiejszy do zbadania pod kątem luk.
Cała podstawowa logika WireGuarda zajmuje mniej niż 4000 linii kodu, podczas gdy OpenVPN i IPSec wymagają setek tysięcy linii.
„WireGuard wykorzystuje koncepcję routingu kluczy szyfrowania, która polega na dołączeniu klucza prywatnego do każdego interfejsu sieciowego i użyciu kluczy publicznych do jego powiązania. Klucze publiczne są wymieniane w celu nawiązania połączenia w sposób podobny do SSH. Aby negocjować klucze i łączyć się bez uruchamiania osobnego demona w przestrzeni użytkownika, mechanizm Noise_IK z Ramy protokołu hałasupodobne do utrzymywania autoryzowanych kluczy w SSH. Transmisja danych odbywa się poprzez enkapsulację w pakietach UDP. Obsługuje zmianę adresu IP serwera VPN (roaming) bez rozłączania połączenia z automatyczną rekonfiguracją klienta, - пишет Otwarta sieć.
Do szyfrowania używany szyfr strumieniowy ChaCha20 i algorytm uwierzytelniania wiadomości (MAC) Poly1305, zaprojektowany przez Daniela Bernsteina (Daniela J. Bernsteina), Tanji Lange i Petera Schwabe. ChaCha20 i Poly1305 są pozycjonowane jako szybsze i bezpieczniejsze analogi AES-256-CTR i HMAC, których implementacja programowa pozwala na osiągnięcie stałego czasu wykonania bez użycia specjalnego wsparcia sprzętowego. Aby wygenerować wspólny tajny klucz, w implementacji wykorzystano protokół krzywej eliptycznej Diffiego-Hellmana Curve25519, zaproponowany również przez Daniela Bernsteina. Algorytm używany do mieszania to BLAKE2 (RFC7693)".
Konfiguracja WireGuard: 256-bitowy ChaCha20 z Poly1305 dla komputerów MAC
Pierwsza konfiguracja IPsec: 256-bitowy ChaCha20 z Poly1305 dla MAC
Druga konfiguracja IPsec: AES-256-GCM-128 (z AES-NI)
Konfiguracja OpenVPN: 256-bitowy odpowiednik zestawu szyfrów AES z HMAC-SHA2-256, tryb UDP
Wydajność mierzono za pomocą iperf3, pokazuje średni wynik w ciągu 30 minut.
Teoretycznie po zintegrowaniu ze stosem sieciowym WireGuard powinien działać jeszcze szybciej. Ale w rzeczywistości niekoniecznie tak będzie ze względu na przejście na funkcje kryptograficzne Crypto API wbudowane w jądro. Być może nie wszystkie z nich są jeszcze zoptymalizowane pod kątem wydajności natywnego WireGuarda.
„Z mojego punktu widzenia WireGuard jest ogólnie idealnym rozwiązaniem dla użytkownika. Wszystkie decyzje niskiego poziomu podejmowane są w specyfikacji, dlatego proces przygotowania typowej infrastruktury VPN zajmuje tylko kilka minut. Prawie niemożliwe jest zepsucie konfiguracji - napisał na Habré w 2018 r. - Proces instalacji szczegółowo opisane na oficjalnej stronie internetowej chciałbym osobno odnotować doskonałe Obsługa OpenWRT. Tę łatwość użycia i zwartość bazy kodu uzyskano poprzez wyeliminowanie dystrybucji kluczy. Nie ma skomplikowanego systemu certyfikatów i całego tego korporacyjnego horroru; krótkie klucze szyfrujące są dystrybuowane podobnie jak klucze SSH.
Projekt WireGuard rozwija się od 2015 roku, przeszedł audyt i weryfikacja formalna. Obsługa WireGuard jest zintegrowana z NetworkManager i systemd, a poprawki jądra są zawarte w podstawowych dystrybucjach Debian Unstable, Mageia, Alpine, Arch, Gentoo, OpenWrt, NixOS, Subgraph i ALT.