Dziś Linus przeniósł do siebie gałąź net-next z interfejsami VPN . O tym wydarzeniu w liście mailingowym WireGuard.

Obecnie trwa zbieranie kodu dla nowego jądra Linux 5.6. WireGuard to nowoczesny VPN nowej generacji, który wykorzystuje współczesną kryptografię. Został opracowany jako prostsza i bardziej przyjazna alternatywa dla istniejących VPN. Autor – kanadyjski specjalista ds. bezpieczeństwa informacji Jason Donenfeld. W sierpniu 2018 roku WireGuard od Linusa Torvaldsa. W tym czasie rozpoczęła się praca nad włączeniem VPN do jądra Linux. Proces nieco się wydłużył.
„Widzę, że Jason zrobił pull request w celu włączenia WireGuard do jądra – pisał Linus 2 sierpnia 2018 roku. – Mogę tylko jeszcze raz wyrazić moją miłość do tego VPN i mieć nadzieję na szybkie połączenie? Może kod nie jest idealny, ale przeglądałem go i w porównaniu z okropieństwami OpenVPN i IPSec, to prawdziwe dzieło sztuki”.
Niemniej jednak, wbrew życzeniu Linusa, połączenie zajęło półtora roku. Głównym problemem okazała się wiązanie z własnymi implementacjami funkcji kryptograficznych, które były stosowane w celu zwiększenia wydajności. Po długich negocjacjach we wrześniu 2019 roku przenieść łatki na istniejące w jądrze funkcje Crypto API, do których deweloperzy WireGuard mieli zastrzeżenia w obszarze wydajności i ogólnego bezpieczeństwa. Postanowiono też wydzielić natywne funkcje kryptograficzne WireGuard do osobnego niskopoziomowego API Zinc i z czasem przenieść je do jądra. W listopadzie deweloperzy jądra dotrzymali obietnicy i przenieść do głównego jądra część kodu z Zinc. Na przykład w Crypto API przygotowane w WireGuard szybkie implementacje algorytmów ChaCha20 i Poly1305.
Ostatecznie, 9 grudnia 2019 roku David Miller, odpowiedzialny za podsystem sieciowy jądra Linux, włączył do gałęzi net-next implementację interfejsu VPN z projektu WireGuard.
A dziś, 29 stycznia 2020 roku, zmiany zostały przesłane do Linusa w celu włączenia do jądra.

Ogłoszone zalety WireGuard w porównaniu do innych rozwiązań VPN:
- Łatwy w użyciu.
- Wykorzystuje nowoczesną kryptografię: Noise protocol framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF itd.
- Kompaktowy, czytelny kod, łatwiejszy do badania pod kątem podatności.
- Wysoka wydajność.
- Jasne i przemyślane .
Cała główna logika WireGuard zajmuje mniej niż 4000 linijek kodu, podczas gdy OpenVPN i IPSec to setki tysięcy linijek.
„WireGuard stosuje koncepcję routingu na podstawie kluczy szyfrowania, która zakłada powiązanie z każdym interfejsem sieciowym klucza prywatnego i jego użycie do powiązania kluczy publicznych. Wymiana kluczy publicznych w celu ustanowienia połączenia odbywa się analogicznie do SSH. W celu uzgodnienia kluczy i połączenia bez uruchamiania osobnego demona w przestrzeni użytkownika stosuje się mechanizm Noise_IK z , podobny do utrzymania authorized_keys w SSH. Przesył danych odbywa się przez enkapsulację w pakiety UDP. Obsługiwane jest zmienianie adresu IP serwera VPN (roaming) bez przerywania połączenia z automatyczną rekonfiguracją klienta, — Opennet.
Do szyfrowania strumieniowy szyfr i algorytm autoryzacji wiadomości (MAC) , opracowane przez Daniela Bernsteina (), Tanja Lange i Peter Schwabe. ChaCha20 i Poly1305 są pozycjonowane jako szybsze i bezpieczniejsze odpowiedniki AES-256-CTR i HMAC, których implementacja programowa pozwala osiągnąć stały czas wykonania bez zaangażowania specjalnego wsparcia sprzętowego. Do generacji wspólnego klucza tajnego stosuje się protokół Diffiego-Hellmana na krzywych eliptycznych w implementacji , także zaproponowanej przez Daniela Bernsteina. Do haszowania stosowany jest algorytm ».
Wyniki z oficjalnej strony:
Przepustowość (megabit/s)

Ping (ms)

Konfiguracja testowa:
- Intel Core i7-3820QM i Intel Core i7-5200U
- Karty Gigabit Intel 82579LM i Intel I218LM
- Linux 4.6.1
- Konfiguracja WireGuard: 256-bitowy ChaCha20 z Poly1305 dla MAC
- Pierwsza konfiguracja IPsec: 256-bitowy ChaCha20 z Poly1305 dla MAC
- Druga konfiguracja IPsec: AES-256-GCM-128 (z AES-NI)
- Konfiguracja OpenVPN: odpowiednik szyfru 256-bitowego AES z HMAC-SHA2-256, tryb UDP
- Wydajność była mierzona za pomocą
iperf3, pokazano średni wynik za 30 minut.
Teoretycznie, po integracji w stosie sieciowym WireGuard powinien działać jeszcze szybciej. Jednak w rzeczywistości niekoniecznie tak będzie z powodu przejścia na wbudowane w jądro funkcje kryptograficzne Crypto API. Możliwe, że nie wszystkie z nich są jeszcze zoptymalizowane do poziomu wydajności natywnego WireGuard.
„Moim zdaniem, WireGuard jest idealny dla użytkownika. Wszystkie low-level rozwiązania zostały uwzględnione w specyfikacji, dlatego proces przygotowania typowej infrastruktury VPN trwa zaledwie kilka minut. Pomylenie w konfiguracji jest praktycznie niemożliwe, — na Habra w 2018 roku. — Proces instalacji na oficjalnej stronie, warto szczególnie wyróżnić doskonałą . Taką prostotę użycia i kompaktowość kodu udało się osiągnąć dzięki zrezygnowaniu z dystrybucji kluczy. Nie ma tutaj skomplikowanego systemu certyfikatów i całego tego korporacyjnego koszmaru, krótkie klucze szyfrowania są rozpowszechniane mniej więcej jak klucze SSH.
Projekt WireGuard rozwija się od 2015 roku, przeszedł audyt i . Obsługa WireGuard jest zintegrowana z NetworkManager i systemd, a łatki do jądra są częścią podstawowej zawartości dystrybucji Debian Unstable, Mageia, Alpine, Arch, Gentoo, OpenWrt, NixOS, Subgraph i ALT.
Źródło: habr.com
