Neue Implementierung von VPN WireGuard zur FreeBSD-Codebasis hinzugefügt

Der FreeBSD-Quellbaum wurde mit einer neuen Implementierung von VPN WireGuard aktualisiert, die auf Kernel-Modulcode basiert, der gemeinsam von den Kernentwicklungsteams von FreeBSD und WireGuard mit Beiträgen von Jason A. Donenfeld, Autor von VPN WireGuard, und John H. Baldwin erstellt wurde. ein bekannter Entwickler von GDB und FreeBSD, der Anfang der 2000er Jahre die Unterstützung für SMP und NUMA im FreeBSD-Kernel implementierte. Nachdem der Treiber in FreeBSD (sys/dev/wg) akzeptiert wurde, erfolgt seine Entwicklung und Wartung fortan im FreeBSD-Repository.

Vor der Annahme des Codes wurde mit Unterstützung der FreeBSD Foundation eine vollständige Überprüfung der Änderungen durchgeführt, bei der auch die Interaktion des Treibers mit den übrigen Kernel-Subsystemen und die Möglichkeit der Verwendung der vom Kernel bereitgestellten kryptografischen Grundelemente analysiert wurde wurde beurteilt.

Um die vom Treiber benötigten kryptografischen Algorithmen zu verwenden, wurde die API des FreeBSD-Kernel-Krypto-Subsystems erweitert, zu der ein Kabelbaum hinzugefügt wurde, der die Verwendung von Algorithmen, die in FreeBSD nicht unterstützt werden, über die Standard-Krypto-API ermöglicht, indem die Implementierung des verwendet wird notwendige Algorithmen aus der libsodium-Bibliothek. Von den im Treiber integrierten Algorithmen bleibt nur noch der Code zur Berechnung von Blake2-Hashes übrig, da die in FreeBSD bereitgestellte Implementierung dieses Algorithmus an eine feste Hash-Größe gebunden ist.

Darüber hinaus wurde während des Überprüfungsprozesses eine Codeoptimierung durchgeführt, die es ermöglichte, die Effizienz der Lastverteilung auf Multicore-CPUs zu steigern (eine gleichmäßige Verteilung der Aufgaben zur Paketverschlüsselung und -entschlüsselung auf die CPU-Kerne wurde sichergestellt). Dadurch entsprach der Overhead bei der Paketverarbeitung in etwa dem der Linux-Treiberimplementierung. Der Code bietet außerdem die Möglichkeit, den OSSL-Treiber zu verwenden, um Verschlüsselungsvorgänge zu beschleunigen.

Im Gegensatz zum vorherigen Versuch, WireGuard in FreeBSD zu integrieren, verwendet die neue Implementierung das Standarddienstprogramm wg und nicht eine modifizierte Version von ifconfig, was eine Vereinheitlichung der Konfiguration unter Linux und FreeBSD ermöglicht. Das WG-Dienstprogramm sowie der Treiber sind im FreeBSD-Quellcode enthalten, was durch eine Änderung der Lizenz für den WG-Code ermöglicht wurde (der Code ist jetzt unter den MIT- und GPL-Lizenzen verfügbar). Der letzte Versuch, WireGuard in FreeBSD einzubinden, erfolgte im Jahr 2020, endete jedoch in einem Skandal, in dessen Folge der bereits hinzugefügte Code aufgrund geringer Qualität, nachlässiger Arbeit mit Puffern, der Verwendung von Stubs statt Prüfungen und unvollständiger Implementierung entfernt wurde des Protokolls und Verletzung der GPL-Lizenz.

Wir möchten Sie daran erinnern, dass VPN WireGuard auf Basis moderner Verschlüsselungsmethoden implementiert ist, eine sehr hohe Leistung bietet, einfach zu bedienen und komplikationslos ist und sich in einer Reihe großer Einsätze mit großen Datenverkehrsmengen bewährt hat. Das Projekt befindet sich seit 2015 in der Entwicklung und wurde einem Audit und einer formellen Überprüfung der verwendeten Verschlüsselungsmethoden unterzogen. WireGuard nutzt das Konzept des Verschlüsselungsschlüssel-Routings, bei dem an jede Netzwerkschnittstelle ein privater Schlüssel angehängt und dieser zum Binden der öffentlichen Schlüssel verwendet wird.

Der Austausch öffentlicher Schlüssel zum Verbindungsaufbau erfolgt ähnlich wie bei SSH. Um Schlüssel auszuhandeln und eine Verbindung herzustellen, ohne einen separaten Daemon im Benutzerbereich auszuführen, wird der Noise_IK-Mechanismus des Noise Protocol Framework verwendet, ähnlich wie bei der Verwaltung autorisierter Schlüssel in SSH. Die Datenübertragung erfolgt durch Kapselung in UDP-Paketen. Es unterstützt das Ändern der IP-Adresse des VPN-Servers (Roaming), ohne die Verbindung zu trennen, mit automatischer Client-Neukonfiguration.

Die Verschlüsselung verwendet die Stream-Verschlüsselung ChaCha20 und den Nachrichtenauthentifizierungsalgorithmus (MAC) Poly1305, entwickelt von Daniel J. Bernstein, Tanja Lange und Peter Schwabe. ChaCha20 und Poly1305 gelten als schnellere und sicherere Analoga von AES-256-CTR und HMAC, deren Softwareimplementierung das Erreichen einer festen Ausführungszeit ohne den Einsatz spezieller Hardwareunterstützung ermöglicht. Um einen gemeinsamen geheimen Schlüssel zu generieren, wird das Elliptic-Curve-Diffie-Hellman-Protokoll in der Curve25519-Implementierung verwendet, die ebenfalls von Daniel Bernstein vorgeschlagen wurde. Für das Hashing wird der BLAKE2s-Algorithmus (RFC7693) verwendet.

Source: opennet.ru

Kommentar hinzufügen