Heute hat Linus den net-next Branch mit VPN-Schnittstellen zu sich übertragen. . Über dieses Ereignis in der WireGuard-Mailingliste.

Momentan wird der Code für den neuen Linux-Kernel 5.6 gesammelt. WireGuard ist ein schneller VPN der nächsten Generation, der moderne Kryptographie implementiert. Er wurde ursprünglich als einfachere und benutzerfreundlichere Alternative zu bestehenden VPNs entwickelt. Der Autor ist der kanadische IT-Sicherheitsexperte Jason Donenfeld. Im August 2018 erhielt WireGuard von Linus Torvalds. Etwa zu dieser Zeit begann die Arbeit an der Integration von VPN in den Linux-Kernel. Der Prozess hat sich ein wenig hingezogen.
„Ich sehe, dass Jason einen Pull-Request zur Integration von WireGuard in den Kernel erstellt hat - schrieb Linus am 2. August 2018. - Darf ich nur noch einmal meine Liebe zu diesem VPN bekunden und auf eine baldige Fusion hoffen? Vielleicht ist der Code nicht perfekt, aber ich habe ihn durchgesehen und im Vergleich zu den Grauen von OpenVPN und IPSec ist das ein echtes Kunstwerk.“
Trotz der Wünsche von Linus hat sich die Fusion über anderthalb Jahre hingezogen. Das Hauptproblem war die Bindung an eigene Implementierungen kryptografischer Funktionen, die zur Leistungssteigerung verwendet wurden. Nach längeren Verhandlungen wurde im September 2019 die Patches auf die bereits im Kernel vorhandenen Crypto API-Funktionen zu übertragen, zu denen die Entwickler von WireGuard Bedenken hinsichtlich der Leistung und allgemeinen Sicherheit hatten. Es wurde jedoch beschlossen, die nativen Krypto-Funktionen von WireGuard in die separaten, niedrigeren Zinc API auszugliedern und diese im Laufe der Zeit in den Kernel zu portieren. Im November hielten die Kernel-Entwickler ihr Versprechen und einen Teil des Codes von Zinc in den Kern zu übertragen. So wurden beispielsweise im Crypto API die in WireGuard vorbereiteten schnellen Implementierungen der Algorithmen ChaCha20 und Poly1305.
Schließlich hat am 9. Dezember 2019 David Miller (David S. Miller), der für das Netzwerk-Subsystem des Linux-Kernels verantwortlich ist, in die net-next-Bereich die Implementierung des VPN-Interfaces aus dem WireGuard-Projekt integriert.
Und heute, am 29. Januar 2020, wurden die Änderungen an Linus zur Aufnahme in den Kernel geschickt.

Die angegebenen Vorteile von WireGuard gegenüber anderen VPN-Lösungen:
- Einfach zu bedienen.
- Verwendet moderne Krypto-Technologien: Noise-Protokoll-Framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF usw.
- Kompakter, lesbarer Code, einfacher auf Schwachstellen zu untersuchen.
- Hohe Performance.
- Klar und durchdacht .
Die gesamte Hauptlogik von WireGuard umfasst weniger als 4000 Codezeilen, während OpenVPN und IPSec Hunderttausende von Zeilen benötigen.
In WireGuard wird das Konzept der Schlüssel-Routing verwendet, das mit jedem Netzwerkinterface einen privaten Schlüssel verknüpft und öffentliche Schlüssel für Verbindungen verwendet. Der Austausch öffentlicher Schlüssel zur Herstellung einer Verbindung erfolgt ähnlich wie bei SSH. Zur Aushandlung von Schlüsseln und zur Verbindung ohne Start eines separaten Daemons im Nutzerraum wird der Noise_IK-Mechanismus genutzt, , ähnlich wie die Verwaltung von authorized_keys in SSH. Daten werden durch Einkapselung in UDP-Pakete übertragen. Es wird unterstützt, die IP-Adresse des VPN-Servers (Roaming) ohne Unterbrechung der Verbindung zu ändern, mit automatischer Neukonfiguration des Clients, — Opennet.
Für die Verschlüsselung der Stream-Verschlüsselungsalgorithmus und der Nachrichten-Authentifizierungsalgorithmus (MAC) , entwickelt von Daniel Bernstein (), Tanja Lange und Peter Schwabe. ChaCha20 und Poly1305 gelten als schnellere und sicherere Alternativen zu AES-256-CTR und HMAC, deren softwarebasierte Implementierung eine konstante Ausführungszeit ohne spezielle Hardwareunterstützung ermöglicht. Zur Generierung des gemeinsamen geheimen Schlüssels wird das Diffie-Hellman-Verfahren auf elliptischen Kurven verwendet. Für die Hash-Berechnung wird der Algorithmus ».
Ergebnisse von der offiziellen Webseite:
Durchsatz (Mbit/s)

Ping (ms)

Testkonfiguration:
- Intel Core i7-3820QM und Intel Core i7-5200U
- Gigabit-Netzwerkkarten Intel 82579LM und Intel I218LM
- Linux 4.6.1
- WireGuard-Konfiguration: 256-Bit ChaCha20 mit Poly1305 für MAC
- Erste IPsec-Konfiguration: 256-Bit ChaCha20 mit Poly1305 für MAC
- Zweite IPsec-Konfiguration: AES-256-GCM-128 (mit AES-NI)
- OpenVPN-Konfiguration: äquivalente Verschlüsselung von 256-Bit AES mit HMAC-SHA2-256, UDP-Modus
- Die Leistung wurde gemessen mit
iperf3, der durchschnittliche Wert über 30 Minuten ist dargestellt.
Theoretisch sollte WireGuard nach der Integration in den Netzwerk-Stack noch schneller arbeiten. In der Praxis könnte das jedoch nicht unbedingt der Fall sein, da auf die im Kernel integrierten kryptografischen Funktionen des Crypto API umgestellt wird. Möglicherweise sind noch nicht alle davon auf das Leistungsniveau von nativem WireGuard optimiert.
„Meiner Meinung nach ist WireGuard für den Benutzer einfach perfekt. Alle low-level Lösungen sind in der Spezifikation festgelegt, weshalb der Aufbau einer typischen VPN-Infrastruktur nur wenige Minuten dauert. Es ist nahezu unmöglich, bei der Konfiguration Fehler zu machen, — auf Habré im Jahr 2018. — Der Installationsprozess auf der offiziellen Website, besonders hervorzuheben ist die hervorragende . Diese Benutzerfreundlichkeit und die Kompaktheit des Codes wurden durch den Verzicht auf die Verteilung von Schlüsseln erreicht. Es gibt kein kompliziertes Zertifikatsystem oder diesen gesamten Unternehmensaufwand; die kurzen Verschlüsselungsschlüssel werden ungefähr wie SSH-Schlüssel verbreitet.“
Das WireGuard-Projekt entwickelt sich seit 2015 und hat ein Audit durchlaufen und . Die WireGuard-Unterstützung ist in NetworkManager und systemd integriert, und die Patches für den Kernel sind Teil der Basisausstellung der Distributionen Debian Unstable, Mageia, Alpine, Arch, Gentoo, OpenWrt, NixOS, Subgraph und ALT.
Quelle: habr.com
