W jądro systemu operacyjnego DragonFly BSD wprowadzono około 100 zmian związanych z implementacją wsparcia dla VPN WireGuard. Sterownik „wg” z obsługą protokołu WireGuard został przeniesiony z FreeBSD, a kod funkcji kryptograficznych, interfejsu sieciowego i API ioctl (do zarządzania z przestrzeni użytkownika) został zaadoptowany z OpenBSD. Zmiany w narzędziu ifconfig, niezbędne do konfiguracji VPN, przeniesiono z OpenBSD. Implementacja jest zgodna ze wszystkimi oficjalnymi klientami WireGuard dla Linux, Windows, macOS, *BSD, iOS i Android. DragonFly BSD stał się piątą otwartą OS-em po Linux, OpenBSD, NetBSD i FreeBSD z zintegrowanym wsparciem dla WireGuard.
WireGuard stosuje koncepcję trasowania na podstawie kluczy szyfrowania, co oznacza powiązanie z każdym interfejsem sieciowym klucza prywatnego i użycie kluczy publicznych do nawiązywania połączeń. Do uzgadniania kluczy i połączeń bez uruchamiania osobnego demona w przestrzeni użytkownika wykorzystano mechanizm Noise_IK z Noise Protocol Framework, który przypomina utrzymywanie authorized_keys w SSH. Przesyłanie danych odbywa się poprzez enkapsulację w pakietach UDP. Obsługiwana jest zmiana adresu IP - serwera (roaming) bez zerwania połączenia z automatycznym przestrojeniem klienta. VPN-serwera (roaming) bez zerwania połączenia z automatycznym przestrojeniem 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
