VPN WireGuard został przyjęty do gałęzi net-next i ma zostać włączony do jądra Linuksa 5.6

David Miller (Davida S. Millera), odpowiedzialny za podsystem sieciowy jądra Linuksa, przyjęty do następnej gałęzi sieci łatki z wdrożeniem interfejsu VPN z projektu WireGuard. Na początku przyszłego roku zmiany zgromadzone w gałęzi net-next staną się podstawą do wydania jądra Linuksa 5.6.

Próby wepchnięcia kodu WireGuard do głównego jądra podejmowano w ciągu ostatnich kilku lat, ale zakończyły się niepowodzeniem ze względu na powiązanie z zastrzeżonymi implementacjami funkcji kryptograficznych, które miały poprawić wydajność. Początkowo były to funkcje proponowane dla jądra jako dodatkowy niskopoziomowy interfejs Zinc API, który może ostatecznie zastąpić standardowy interfejs Crypto API.

Po dyskusjach na konferencji Kernel Recipes twórcy WireGuard we wrześniu podjął decyzję kompromisową przenieś swoje poprawki, aby korzystać z dostępnego w rdzeniu Crypto API, do którego programiści WireGuard mają skargi w zakresie wydajności i ogólnego bezpieczeństwa. Zdecydowano się kontynuować rozwój Zinc API, ale jako odrębny projekt.

W listopadzie programiści jądra wszedł w odpowiedzi na kompromis i zgodził się przenieść część kodu z Zinca do głównego jądra. Zasadniczo niektóre komponenty Zinc zostaną przeniesione do rdzenia, ale nie jako osobne API, ale jako część podsystemu Crypto API. Na przykład już Crypto API w zestawie szybkie implementacje algorytmów ChaCha20 i Poly1305 przygotowane w WireGuard.

W związku ze zbliżającą się dostawą WireGuarda w rdzeniu głównym, założyciel projektu ogłosił o restrukturyzacji repozytorium. Aby uprościć rozwój, monolityczne repozytorium „WireGuard.git”, które zostało zaprojektowane tak, aby istniało w izolacji, zostanie zastąpione trzema oddzielnymi repozytoriami, lepiej przystosowanymi do organizacji pracy z kodem w głównym jądrze:

  • wireguard-linux.git - kompletne drzewo jądra ze zmianami z projektu Wireguard, poprawki z których będą sprawdzane pod kątem włączenia do jądra i regularnie przesyłane do gałęzi net/net-next.
  • wireguard-tools.git - repozytorium narzędzi i skryptów uruchamianych w przestrzeni użytkownika, takich jak wg i wg-quick. Repozytorium można wykorzystać do tworzenia pakietów do dystrybucji.
  • wireguard-linux-Compatible.git - repozytorium z wariantem modułu, dostarczane oddzielnie od jądra i zawierające warstwę compat.h zapewniającą kompatybilność ze starszymi jądrami. Główny rozwój będzie prowadzony w repozytorium wireguard-linux.git, ale o ile wśród użytkowników będzie taka możliwość i potrzeba, obsługiwana będzie także osobna wersja łatek w działającej formie.

Przypomnijmy, że VPN WireGuard realizowany jest w oparciu o nowoczesne metody szyfrowania, zapewnia bardzo wysoką wydajność, jest łatwy w obsłudze, pozbawiony komplikacji i sprawdził się w wielu dużych wdrożeniach przetwarzających duże wolumeny ruchu. Projekt rozwija się od 2015 roku, przeszedł audyty i weryfikacja formalna stosowane metody szyfrowania. Obsługa WireGuard jest już zintegrowana z NetworkManagerem i systemd, a poprawki jądra są zawarte w podstawowych dystrybucjach Debian niestabilny, Mageia, Alpine, Arch, Gentoo, OpenWrt, NixOS, Subgraph и ALT.

WireGuard wykorzystuje koncepcję routingu klucza szyfrowania, która polega na dołączeniu klucza prywatnego do każdego interfejsu sieciowego i użyciu go do powiązania kluczy publicznych. 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 i automatycznej rekonfiguracji klienta.

Do szyfrowania używany szyfr strumieniowy ChaCha20 i algorytm uwierzytelniania wiadomości (MAC) Poly1305, zaprojektowany przez Daniela Bernsteina (Daniela J. Bernsteina), Tanyi Lange
(Tanja 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).

w testowanie Wydajność WireGuard wykazała 3.9 razy wyższą przepustowość i 3.8 razy wyższą responsywność w porównaniu do OpenVPN (256-bitowy AES z HMAC-SHA2-256). W porównaniu z IPsec (256-bitowy ChaCha20+Poly1305 i AES-256-GCM-128), WireGuard wykazuje niewielką poprawę wydajności (13-18%) i mniejsze opóźnienia (21-23%). Testy przeprowadzono z wykorzystaniem szybkich implementacji algorytmów szyfrowania opracowanych w ramach projektu – przejście na standardowy Crypto API jądra może skutkować gorszą wydajnością.

VPN WireGuard został przyjęty do gałęzi net-next i ma zostać włączony do jądra Linuksa 5.6

Źródło: opennet.ru

Dodaj komentarz