Im Kern des Betriebssystems DragonFly BSD wurden etwa 100 Änderungen vorgenommen, um die Unterstützung für das VPN WireGuard zu implementieren. Der „wg“-Treiber mit WireGuard-Protokollunterstützung wurde von FreeBSD übertragen, während der Code für kryptografische Funktionen, Netzwerkinterfaces und das ioctl-API (zur Verwaltung aus dem Benutzermodus) aus OpenBSD übernommen wurde. Veränderungen an dem Tool ifconfig, die für die VPN-Konfiguration erforderlich sind, wurden ebenfalls aus OpenBSD übertragen. Die Implementierung ist mit allen offiziellen WireGuard-Clients für Linux, Windows, macOS, *BSD, iOS und Android kompatibel. DragonFly BSD ist das fünfte Open-Source-Betriebssystem nach Linux, OpenBSD, NetBSD und FreeBSD mit integrierter Unterstützung für WireGuard.
In WireGuard wird das Konzept der Schlüssel-basierten Routing verwendet, das jedem Netzwerkinterface einen privaten Schlüssel zuordnet und öffentliche Schlüssel zur Verbindung nutzt. Zur Aushandlung von Schlüsseln und Verbindungen, ohne einen separaten Daemon im Benutzermodus zu starten, wird der Noise_IK-Mechanismus aus dem Noise Protocol Framework verwendet, ähnlich wie bei der Verwaltung von authorized_keys in SSH. Der Datenaustausch erfolgt durch Kapselung in UDP-Paketen. Ein IP-Adressenwechsel wird unterstützt. VPN-Server (Roaming) ohne Unterbrechung der Verbindung mit automatischer Neukonfiguration des Clients.
Zur Verschlüsselung kommen der Stream-Cipher ChaCha20 und der Nachrichten-Authentifizierungsalgorithmus (MAC) Poly1305 zum Einsatz. Diese wurden von Daniel J. Bernstein, Tanja Lange und Peter Schwabe entwickelt. ChaCha20 und Poly1305 bieten eine schnellere und sicherere Alternative zu AES-256-CTR und HMAC, wobei die Software-Implementierung eine konstante Ausführungszeit ohne spezielle Hardwareunterstützung ermöglicht. Zur Generierung des gemeinsamen geheimen Schlüssels verwendet man das elliptische Diffie-Hellman-Protokoll in der Implementierung Curve25519, das ebenfalls von Daniel Bernstein vorgeschlagen wurde. Für das Hashing wird der Algorithmus BLAKE2s (RFC7693) eingesetzt.
Quelle: opennet.ru
