David Miller (), der für das Netzwerk-Subsystem des Linux-Kernels verantwortlich ist, in die net-next-Bereich mit der Implementierung des VPN-Interfaces aus dem Projekt . Anfang nächsten Jahres werden die Änderungen aus dem net-next-Zweig die Grundlage für die Veröffentlichung des Linux-Kernels 5.6 bilden.
In den letzten Jahren gab es mehrere Versuche, den WireGuard-Code in den Hauptkern zu integrieren, die jedoch aufgrund der Abhängigkeit von proprietären Implementierungen kryptografischer Funktionen, die zur Steigerung der Leistung verwendet wurden, erfolglos blieben. Zunächst wurden diese Funktionen für den Kernel als zusätzliches, niedrigstufiges API Zinc bereitgestellt, das im Laufe der Zeit den bestehenden Crypto API ersetzen könnte.
Nach Gesprächen auf der Konferenz Kernel Recipes haben die Entwickler von WireGuard im September ihre Patches auf die Nutzung des bestehenden Crypto API im Kernel umzustellen, gegen das die Entwickler von WireGuard Bedenken hinsichtlich Leistung und allgemeiner Sicherheit äußern. Das API Zinc soll weiterhin entwickelt werden, jedoch als separates Projekt.
Im November haben die Kernel-Entwickler Die Antwort auf den Kompromiss wurde akzeptiert, und wir haben beschlossen, Teile des Codes aus Zinc in den Hauptkern zu übertragen. Einige Komponenten von Zinc werden in den Kernel integriert, jedoch nicht als separate API, sondern als Teil des Crypto API-Subsystems. Zum Beispiel sind im Crypto API bereits schnelle Implementierungen der Algorithmen ChaCha20 und Poly1305, die in WireGuard vorbereitet wurden.
In Bezug auf die bevorstehende Integration von WireGuard in den Hauptkernel hat der Projektgründer um die Umstrukturierung des Repositories gebeten. Um die Entwicklung zu erleichtern, werden die bisherige monolithische Repository "WireGuard.git", das für ein isoliertes Dasein ausgelegt war, durch drei separate Repositories ersetzt, die besser zur Organisation der Arbeiten mit dem Code im Hauptkernel passen:
- — ein vollständiger Kernbaum mit Änderungen vom WireGuard-Projekt, dessen Patches zur Überprüfung zur Integration in den Kernel eingereicht und regelmäßig in die Net-/Net-next-Zweige übertragen werden.
- — ein Repository für im Benutzerraum ausgeführte Tools und Skripte wie wg und wg-quick. Das Repository kann zur Erstellung von Paketen für verschiedene Distributionen verwendet werden.
- — ein Repository mit einer Modulvariante, die unabhängig vom Kernel bereitgestellt wird und eine Schicht compat.h zur Gewährleistung der Kompatibilität mit älteren Kernen enthält. Die Hauptentwicklung wird im Repository wireguard-linux.git erfolgen, aber solange es eine Nachfrage und den Bedarf der Nutzer gibt, wird auch eine separate Variante der Patches in funktionierendem Zustand unterstützt.
Wir erinnern daran, dass das WireGuard-VPN auf modernen Verschlüsselungsmethoden basiert, eine sehr hohe Leistung bietet, einfach zu bedienen ist, keine Komplikationen aufweist und sich in mehreren großen Implementierungen bewährt hat, die große Datenmengen verarbeiten. Das Projekt wird seit 2015 weiterentwickelt, hat eine Prüfung und Angewandte Verschlüsselungsmethoden. Die Unterstützung von WireGuard ist bereits in NetworkManager und systemd integriert, und die Patches für den Kernel sind Teil der Basisdistributionen , Mageia, Alpine, Arch, Gentoo, OpenWrt, NixOS, und .
In WireGuard wird das Konzept der Schlüsselverschlüsselungsrouting angewendet, das eine Bindung jedes Netzwerkinterfaces an einen privaten Schlüssel und die Verwendung zur Verknüpfung von öffentlichen Schlüsseln vorsieht. Der Austausch öffentlicher Schlüssel zur Verbindung wird analog zu SSH durchgeführt. Zur Aushandlung von Schlüsseln und zur Verbindung ohne den Start eines separaten Daemons im Benutzermodus wird der Noise_IK-Mechanismus verwendet. , ähnlich wie bei der Verwaltung von authorized_keys in SSH. Der Datenaustausch erfolgt durch Kapselung in UDP-Pakete. Ein Wechsel der IP-Adresse des VPN-Servers (Roaming) wird unterstützt, ohne die Verbindung zu trennen, und die automatische Neukonfiguration des Clients.
Für die Verschlüsselung der Stream-Verschlüsselungsalgorithmus und der Nachrichten-Authentifizierungsalgorithmus (MAC) , entwickelt von Daniel Bernstein (), Tanja Lange
(Tanja Lange) und Peter Schwabe. ChaCha20 und Poly1305 werden als schnellere und sicherere Alternativen zu AES-256-CTR und HMAC positioniert, wobei die Softwareimplementierung eine konstante Ausführungszeit ohne spezielle Hardwareunterstützung ermöglicht. Zur Erzeugung eines gemeinsamen geheimen Schlüssels kommt das elliptische Diffie-Hellman-Protokoll zum Einsatz, wie es auch von Daniel Bernstein vorgeschlagen wurde. , ebenfalls von Daniel Bernstein vorgeschlagen. Zur Hash-Erzeugung wird der Algorithmus verwendet .
Mit hat WireGuard in der Leistung eine um 3,9-mal höhere Bandbreite und eine um 3,8-mal höhere Reaktionsfähigkeit im Vergleich zu OpenVPN (256-Bit AES mit HMAC-SHA2-256) gezeigt. Im Vergleich zu IPsec (256-Bit ChaCha20+Poly1305 und AES-256-GCM-128) belegt WireGuard eine leichte Überlegenheit in der Leistung (13-18 %) und eine Reduzierung der Latenz (21-23 %). Die Tests wurden unter Verwendung von schnellen Implementierungen der Verschlüsselungsalgorithmen, die im Projekt entwickelt wurden, durchgeführt – eine Übertragung auf die Standard-Crypto-API des Kernels könnte zu einer Verschlechterung der Werte führen.
Quelle: opennet.ru
