Do bazy kodowej FreeBSD dodano nową implementację VPN WireGuard.

W drzewie źródeł kodu FreeBSD przyjęto zmiany zawierające nową implementację VPN WireGuard, opartą na kodzie modułu jądra, wspólnie przygotowanego przez główne zespoły deweloperskie FreeBSD i WireGuard przy udziale Jasona Donenfelda, twórcy VPN WireGuard, oraz Johna Baldwina, znanego dewelopera GDB i FreeBSD, który na początku lat 2000 wprowadził wsparcie dla SMP i NUMA w jądrze FreeBSD. Po przyjęciu sterownika do FreeBSD (sys/dev/wg) jego rozwój oraz wsparcie będą odbywać się w repozytorium FreeBSD.

Przed przyjęciem kodu, przy wsparciu organizacji FreeBSD Foundation, przeprowadzono pełny przegląd zmian, w trakcie którego zbadano także interakcję sterownika z innymi podsystemami jądra oraz oceniono możliwość wykorzystania oferowanych przez jądro prymitywów kryptograficznych.

Aby wykorzystać niezbędne sterownikowi algorytmy kryptograficzne, rozszerzono API kryptosubsystemu jądra FreeBSD, do którego dodano opakowanie umożliwiające korzystanie z nieobsługiwanych w FreeBSD algorytmów poprzez standardowe API kryptograficzne, wykorzystując implementację niezbędnych algorytmów z biblioteki libsodium. Z algorytmów wbudowanych w sterownik pozostawiono jedynie kod do obliczania haszy Blake2, ponieważ dostarczana w FreeBSD implementacja tego algorytmu jest związana z ustalonym rozmiarem hasha.

Ponadto w trakcie przeglądu przeprowadzono optymalizację kodu, która zwiększyła wydajność rozdzielania obciążenia na wielordzeniowych CPU (zapewniono równomierne balansowanie przydziału zadań szyfrowania i deszyfrowania pakietów do rdzeni CPU). Ostatecznie koszty obsługi pakietów zostały zbliżone do implementacji sterownika dla systemu Linux. W kodzie wprowadzono również możliwość korzystania ze sterownika ossl w celu przyspieszenia operacji szyfrowania.

W przeciwieństwie do wcześniejszej próby integracji WireGuard z FreeBSD, w nowej realizacji wykorzystano standardowe narzędzie wg, a nie zmodyfikowaną wersję ifconfig, co umożliwiło ujednolicenie konfiguracji w Linuxie i FreeBSD. Narzędzie wg, podobnie jak sterownik, jest częścią źródeł FreeBSD, co stało się możliwe dzięki zmianie licencji kodu wg (kod jest teraz dostępny na licencjach MIT i GPL). Wcześniejsza próba włączenia WireGuard do FreeBSD miała miejsce w 2020 roku, ale zakończyła się skandalem, który doprowadził do usunięcia już dodanego kodu z powodu niskiej jakości, nieostrożnego zarządzania buforami, używania atrap zamiast kontroli, niepełnej realizacji protokołu i naruszenia licencji GPL.

Przypomnijmy, że VPN WireGuard jest wdrażany na podstawie nowoczesnych metod szyfrowania, zapewnia bardzo wysoką wydajność, jest prosty w użyciu, pozbawiony komplikacji i dobrze sprawdził się w wielu dużych wdrożeniach obsługujących duże wolumeny ruchu. Projekt rozwija się od 2015 roku, przeszedł audyt i formalną weryfikację stosowanych metod szyfrowania. W WireGuard zastosowano koncepcję routingu na podstawie kluczy szyfrujących, która polega na przypisaniu do każdego interfejsu sieciowego klucza prywatnego oraz zastosowaniu go do powiązania kluczy publicznych.

Wymiana otwartych kluczy do nawiązywania połączenia odbywa się analogicznie jak w SSH. Do negocjacji kluczy i połączenia bez uruchamiania osobnego demona w przestrzeni użytkownika zastosowano mechanizm Noise_IK z Noise Protocol Framework, podobny do utrzymywania pliku authorized_keys w SSH. Przesył danych odbywa się poprzez enkapsulację w pakietach UDP. Obsługiwana jest zmiana adresy IP serwera VPN (roaming) bez przerywania połączenia z automatycznym przestawieniem klienta.

Do szyfrowania używany jest strumieniowy szyfr ChaCha20 oraz algorytm uwierzytelniania wiadomości (MAC) Poly1305, opracowane przez D annotations F a niczęty Bernsteina (Daniel J. Bernstein), Tanję Lange (Tanja Lange) oraz Petera Schwabe (Peter Schwabe). ChaCha20 i Poly1305 są przedstawiane jako szybsze i bezpieczniejsze odpowiedniki AES-256-CTR i HMAC, a ich implementacja programowa pozwala osiągnąć stały czas wykonania bez angażowania specjalnego wsparcia sprzętowego. Do generowania wspólnego sekretnego klucza stosowany jest protokół Diffiego-Hellmana oparty na krzywych eliptycznych w implementacji Curve25519, również zaproponowanej przez Daniela Bernsteina. Do haszowania używany jest algorytm BLAKE2s (RFC7693).

Ź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