David Miller (), odpowiedzialny za zdalne systemy rdzenia Linux, włączył do gałęzi net-next z implementacją interfejsu VPN z projektu . 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 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 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 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ż 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 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:
- — 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.
- — 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.
- — 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 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 , Mageia, Alpine, Arch, Gentoo, OpenWrt, NixOS, i .
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 , 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 strumieniowy szyfr i algorytm autoryzacji wiadomości (MAC) , opracowane przez Daniela Bernsteina (), 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 , również zaproponowany przez Daniela Bernstein. Do haszowania stosowany jest algorytm .
Przy 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.
Źródło: opennet.ru
