VPN WireGuard przyjęty w gałąź net-next i planowany do włączenia do jądra Linux 5.6

David Miller (David S. Miller), odpowiedzialny za zdalne systemy rdzenia Linux, przyjął włączył do gałęzi net-next łatek z implementacją interfejsu VPN z projektu WireGuard. Na początku przyszłego roku zmiany gromadzone w gałęzi net-next staną się podstawą wydania rdzenia Linux 5.6.

Próby wprowadzenia kodu WireGuard do głównego rdzenia podejmowane były przez ostatnie kilka lat, ale pozostawały bez rezultatu z powodu uzależnienia od własnych implementacji funkcji kryptograficznych, które były stosowane w celu zwiększenia wydajności. Na początku te funkcje były zaproponowano dla rdzenia jako dodatkowe, niskopoziomowe API Zinc, które z czasem mogłoby zastąpić standardowe Crypto API.

Po negocjacjach na konferencji Kernel Recipes, twórcy WireGuard we wrześniu podjęli kompromisową decyzję przenieść swoje łaty na wykorzystanie istniejącego w rdzeniu Crypto API, do którego deweloperzy WireGuard mają zastrzeżenia dotyczące wydajności i ogólnego bezpieczeństwa. API Zinc postanowiono rozwijać dalej, ale jako osobny projekt.

W listopadzie deweloperzy rdzenia poszli na odpowiedni kompromis i zgodzili się przenieść do głównego rdzenia część kodu z Zinc. W zasadzie niektóre komponenty Zinc zostaną przeniesione do rdzenia, ale nie jako osobne API, a jako część subsystemu Crypto API. Na przykład w Crypto API już włączone przygotowane w WireGuard szybkie implementacje algorytmów ChaCha20 i Poly1305.

W związku z nadchodzącym wprowadzeniem WireGuard do głównego rdzenia, założyciel projektu ogłosił o restrukturyzacji repozytorium. Aby uprościć rozwój, w miejsce monolitycznego repozytorium „WireGuard.git”, które było zaplanowane na samodzielne istnienie, powstaną trzy osobne repozytoria, lepiej odpowiednie do organizacji pracy z kodem w głównym rdzeniu:

  • wireguard-linux.git — pełne drzewo rdzenia z zmianami z projektu WireGuard, łaty, które będą recenzowane do włączenia do rdzenia i regularnie przenoszone do gałęzi net/net-next.
  • wireguard-tools.git — repozytorium dla uruchamianych w przestrzeni użytkownika narzędzi i skryptów, takich jak wg i wg-quick. Repozytorium można wykorzystać do tworzenia pakietów dla dystrybucji.
  • wireguard-linux-compat.git — repo z wersją modułu, dostarczaną oddzielnie od jądra i zawierającą warstwę compat.h dla zapewnienia zgodności ze starszymi jądrami. Główna praca będzie prowadzona w repozytorium wireguard-linux.git, ale na razie istnieje potrzeba wsparcia oddzielnej wersji poprawek, aby użytkownicy mogli korzystać z niej w pełnej funkcjonalności.

Przypominamy, że VPN WireGuard oparty jest na nowoczesnych metodach szyfrowania, zapewnia bardzo wysoką wydajność, jest prosty w użyciu, pozbawiony zbędnych komplikacji i dobrze sprawdził się w wielu zastosowaniach, przetwarzających duże ilości ruchu. Projekt rozwija się od 2015 roku, przeszedł audyt oraz formalną weryfikację zastosowanych metod szyfrowania. Wsparcie dla WireGuard zostało już zintegrowane z NetworkManager i systemd, a poprawki do jądra są częścią podstawowej struktury dystrybucji Debian Unstable, Mageia, Alpine, Arch, Gentoo, OpenWrt, NixOS, Subgraph i ALT.

W WireGuard zastosowano koncepcję trasowania opartą na kluczach szyfrowania, co oznacza przypisanie prywatnego klucza do każdego interfejsu sieciowego i wykorzystanie go do powiązania kluczy publicznych. Wymiana kluczy publicznych w celu nawiązania połączenia odbywa się na wzór SSH. Do ustalania kluczy i nawiązywania połączeń bez uruchamiania osobnego demona w przestrzeni użytkownika wykorzystuje się mechanizm Noise_IK z Noise Protocol Framework, podobnie jak w przypadku utrzymywania authorized_keys w SSH. Transfer danych odbywa się poprzez kapsułkowanie w pakietach UDP. Wspierana jest zmiana adresu IP serwera VPN (roaming) bez przerywania połączenia oraz automatyczne ponowne skonfigurowanie klienta.

Do szyfrowania jest używane strumieniowy szyfr ChaCha20 i algorytm autoryzacji wiadomości (MAC) Poly1305, opracowane przez Daniela Bernsteina (Daniel J. Bernstein), Tanję Lange
(Tanja Lange) i Petera Schwabe'a (Peter Schwabe). ChaCha20 i Poly1305 są postrzegane jako szybsze i bezpieczniejsze odpowiedniki AES-256-CTR i HMAC, a ich implementacja programowa pozwala uzyskać stały czas wykonania bez potrzeby korzystania ze specjalnego wsparcia sprzętowego. Do generowania wspólnego tajnego klucza używany jest protokół Diffiego-Hellmana na krzywych eliptycznych w implementacji Curve25519, również zaproponowany przez Daniela Bernstein. Do haszowania stosowany jest algorytm BLAKE2s (RFC7693).

Przy testach wydajność WireGuard wykazała 3,9 razy wyższą przepustowość i 3,8 razy lepszą responsywność w porównaniu do OpenVPN (256-bit AES z HMAC-SHA2-256). W porównaniu do IPsec (256-bit ChaCha20+Poly1305 i AES-256-GCM-128) WireGuard ma nieznacznie lepszą wydajność (13-18%) oraz mniejsze opóźnienia (21-23%). Testy przeprowadzono z wykorzystaniem szybkich realizacji algorytmów szyfrowania rozwijanych przez projekt — migracja do standardowego Crypto API jądra może prowadzić do pogorszenia wyników.

VPN WireGuard przyjęty w gałąź net-next i planowany do włączenia do jądra Linux 5.6

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster