VPN WireGuard zawarty w jądrze Linuksa 5.6

Dzisiaj Linus przeniósł do siebie oddział net-next z interfejsami VPN WireGuard. O tym wydarzeniu сообщили na liście mailingowej WireGuard.

VPN WireGuard zawarty w jądrze Linuksa 5.6

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.

VPN WireGuard zawarty w jądrze Linuksa 5.6

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.
  • Wysoka wydajność
  • Jasne i szczegółowe specyfikacja.

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)".

wyniki Testy wydajności z oficjalnej strony:

Przepustowość (megabit/s)
VPN WireGuard zawarty w jądrze Linuksa 5.6

Ping (ms)
VPN WireGuard zawarty w jądrze Linuksa 5.6

Konfiguracja testowa:

  • Intel Core i7-3820QM i Intel Core i7-5200U
  • Karty gigabitowe Intel 82579LM i Intel I218LM
  • Linux 4.6.1
  • 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.

Źródło: www.habr.com

Dodaj komentarz