In den Quellcode von FreeBSD wurden Änderungen mit einer neuen Umsetzung von VPN WireGuard aufgenommen, die auf dem Code des Kernel-Moduls basiert. Dieses wurde gemeinsam von den Hauptentwicklerteams von FreeBSD und WireGuard unter Beteiligung von Jason Donenfeld, dem Autor von VPN WireGuard, und John Baldwin, einem bekannten Entwickler von GDB und FreeBSD, der Anfang der 2000er Jahre die Unterstützung für SMP und NUMA im FreeBSD-Kernel implementierte, vorbereitet. Nach der Annahme des Treibers in FreeBSD (sys/dev/wg) wird seine Entwicklung und Wartung nun im FreeBSD-Repository erfolgen.
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 anderen Kernelsubsystemen analysiert und die Möglichkeit zur Nutzung der vom Kernel bereitgestellten kryptographischen Primitiven bewertet wurde.
Um die für den Treiber erforderlichen kryptographischen Algorithmen nutzen zu können, wurde die API der FreBSD-Kryptosubsysteme erweitert. Dabei wurde eine Wrapper hinzugefügt, die die Nutzung nicht unterstützter Algorithmen in FreeBSD über die standardmäßige Krypto-API ermöglicht, indem die benötigten Algorithmen aus der Bibliothek libsodium implementiert werden. Von den im Treiber eingebauten Algorithmen blieb nur der Code zur Berechnung von Hashes mit Blake2 erhalten, da die in FreeBSD bereitgestellte Implementierung dieses Algorithmus an eine feste Hashgröße gebunden ist.
Darüber hinaus wurde im Rahmen der Überprüfung der Code optimiert, was die Effizienz der Lastverteilung auf mehrkernige CPUs verbesserte (eine gleichmäßige Balance der Aufgabenbindung für die Verschlüsselung und Entschlüsselung von Paketen an die CPU-Kerne wurde sichergestellt). Dadurch wurden die Overheads bei der Verarbeitung von Paketen näher an die Implementierung des Treibers für Linux gebracht. Im Code wurde zudem die Möglichkeit zur Nutzung des Treibers ossl zur Beschleunigung der Verschlüsselungsoperationen sichergestellt.
Im Gegensatz zu dem früheren Versuch, WireGuard in FreeBSD zu integrieren, verwendet die neue Implementierung das Standardtool wg und nicht die modifizierte Version von ifconfig. Dies hat eine Vereinheitlichung der Konfiguration in Linux und FreeBSD ermöglicht. Das Tool wg sowie der Treiber sind in den Quelltexten von FreeBSD enthalten, was durch die Änderung der Lizenz für den wg-Code (dieser ist nun unter den Lizenzen MIT und GPL verfügbar) möglich wurde. Der frühere Versuch, WireGuard in FreeBSD zu integrieren, wurde 2020 unternommen, endete jedoch in einem Skandal, der dazu führte, dass der bereits hinzugefügte Code aufgrund geringer Qualität, unsachgemäßer Handhabung von Puffer, Verwendung von Platzhaltern anstelle von Überprüfungen, unvollständiger Implementierung des Protokolls und Verstoß gegen die GPL-Lizenz entfernt wurde.
Wir erinnern daran, dass VPN WireGuard basiert auf modernen Verschlüsselungsmethoden, bietet sehr hohe Leistung, ist einfach zu bedienen, frei von Komplikationen und hat sich in einer Reihe von großen Implementierungen bewährt, die große Datenmengen verarbeiten. Das Projekt wird seit 2015 entwickelt, hat eine Prüfung und formale Verifikation der verwendeten Verschlüsselungsmethoden durchlaufen. In WireGuard wird das Konzept des Routings basierend auf Verschlüsselungsschlüsseln verwendet, das die Bindung eines privaten Schlüssels an jede Netzwerkschnittstelle und die Anwendung zur Verbindung öffentlicher Schlüssel beinhaltet.
Der Austausch öffentlicher Schlüssel zur Establishierung einer Verbindung erfolgt analog zu SSH. Zur Aushandlung von Schlüsseln und zur Verbindung ohne das Starten eines separaten Daemons im Benutzerspace wird der Noise_IK-Mechanismus aus dem Noise Protocol Framework verwendet, ähnlich der Verwaltung von authorized_keys in SSH. Die Datenübertragung erfolgt durch Kapselung in UDP-Pakete. Der Wechsel von IP-Adressen VPN-Servern (Roaming) ohne Verbindungsabbruch mit automatischer Neukonfiguration des Clients.
Für die Verschlüsselung wird der Stream-Chiffrieralgorithmus ChaCha20 und der Algorithmus für die Nachrichtenauthentifizierung (MAC) Poly1305 verwendet, die von Daniel J. Bernstein, Tanja Lange und Peter Schwabe entwickelt wurden. ChaCha20 und Poly1305 werden als schnellere und sicherere Alternativen zu AES-256-CTR und HMAC positioniert, deren Software-Implementierung eine konstante Ausführungszeit ohne spezielle Hardwareunterstützung ermöglicht. Für die Generierung des gemeinsamen geheimen Schlüssels wird das Diffie-Hellman-Protokoll auf elliptischen Kurven in der Implementierung Curve25519 verwendet, das ebenfalls von Daniel J. Bernstein vorgeschlagen wurde. Zum Hashen wird der Algorithmus BLAKE2s (RFC7693) verwendet.
Quelle: opennet.ru
