Der VPN WireGuard wurde in den Linux-Kernel 5.6 aufgenommen

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

Der VPN WireGuard wurde in den Linux-Kernel 5.6 aufgenommen

Momentan wird der Code für den neuen Linux-Kernel 5.6 gesammelt. WireGuard ist ein schneller VPN der neuen Generation, der moderne Kryptographie implementiert. Es wurde ursprünglich als einfachere und benutzerfreundlichere Alternative zu bestehenden VPNs entwickelt. Der Autor ist der kanadische IT-Sicherheitsspezialist Jason Donenfeld. Im August 2018 wurde WireGuard von Linus Torvalds gelobt. Ungefähr zu dieser Zeit begann die Arbeit am integrierten VPN im Linux-Kernel. Der Prozess zog sich etwas.

„Ich sehe, dass Jason einen Pull-Request zur Integration von WireGuard in den Kernel gemacht hat“, schrieb Linus am 2. August 2018. „Darf ich einfach nochmals meine Liebe zu diesem VPN äußern und auf eine baldige Fusion hoffen? Der Code ist vielleicht nicht perfekt, aber ich habe ihn durchgesehen und im Vergleich zu den Schrecken von OpenVPN und IPSec ist das ein wahres Kunstwerk.“

Trotz Linus' Wunsch zog sich die Fusion über eineinhalb Jahre hin. Das Hauptproblem lag in der Bindung an die eigenen Implementierungen von Krypto-Funktionen, die zur Leistungssteigerung verwendet wurden. Nach langen Verhandlungen wurde im September 2019 eine Kompromisslösung getroffen um die Patches auf die im Kernel vorhandenen Crypto API-Funktionen zu übertragen, gegen die die WireGuard-Entwickler Bedenken hinsichtlich der Leistung und der allgemeinen Sicherheit hatten. Es wurde jedoch beschlossen, die nativen Krypto-Funktionen von WireGuard in eine separate niedrigstufige Zinc API auszulagern und sie im Laufe der Zeit in den Kernel zu portieren. Im November hielten die Kernel-Entwickler ihr Versprechen und stimmten zu einen Teil des Codes von Zinc in den Hauptkernel zu übertragen. Beispielsweise die in WireGuard vorbereiteten schnellen Implementierungen der Algorithmen ChaCha20 und Poly1305 in Crypto API. aufgenommen Schließlich am 9. Dezember 2019 übernahm David Miller, verantwortlich für das Netzwerk-Subsystem des Linux-Kernels,

mit der Implementierung der VPN-Schnittstelle des WireGuard-Projekts. hat in den net-next-Branch Patches Und heute, am 29. Januar 2020, wurden die Änderungen an Linus zur Integration in den Kernel gesendet.

Die angegebenen Vorteile von WireGuard gegenüber anderen VPN-Lösungen:

Der VPN WireGuard wurde in den Linux-Kernel 5.6 aufgenommen

Einfach zu bedienen.

  • Verwendet moderne Kryptographie: Noise-Protokoll-Framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF etc.
  • Kompetter, lesbarer Code, leichter auf Sicherheitsanfälligkeiten zu untersuchen.
  • Eine klare und durchdachte
  • Hohe Leistung.
  • Spezifikation. Spezifikation.

Die gesamte Hauptlogik von WireGuard umfasst weniger als 4000 Codezeilen, während OpenVPN und IPSec Hunderte von Tausenden Zeilen benötigen.

In WireGuard wird das Konzept der Schlüssel-basierten Routing angewendet, welches vorschreibt, jeden Netzwerk-Interface mit einem privaten Schlüssel zu verknüpfen und zur Verknüpfung der öffentlichen Schlüssel zu nutzen. Der Austausch von öffentlichen Schlüsseln zur Verbindungsherstellung erfolgt analog zu SSH. Zur Aushandlung von Schlüsseln und Verbindungen ohne den Start eines separaten Daemons im User-Space wird der Noise_IK-Mechanismus aus Noise Protocol Framework, ähnlich wie bei der Verwaltung von authorized_keys in SSH. Die Datenübertragung erfolgt durch Kapselung in UDP-Pakete. Es wird ein Wechsel der IP-Adresse des VPN-Servers (Roaming) unterstützt, ohne die Verbindung zu trennen, mit automatischer Neuauslegung des Clients, — berichtet Opennet.

Für die Verschlüsselung wird verwendet der Stream-Cipher ChaCha20 und der Nachrichtenintegritätsalgorithmus (MAC) HMAC., entwickelt von Daniel Bernstein (Daniel J. Bernstein), Tanja Lange und Peter Schwabe. ChaCha20 und Poly1305 werden als schnellere und sicherere Alternativen zu AES-256-CTR und HMAC positioniert, deren softwarebasierte Implementierung eine feste Ausführungszeit ohne die Verwendung spezieller Hardwareunterstützung ermöglicht. Zur Generierung des gemeinsamen geheimen Schlüssels wird das Diffie-Hellman-Protokoll über elliptische Kurven in der Implementierung Curve25519, ebenfalls vorgeschlagen von Daniel Bernstein. Zum Hashing wird der Algorithmus BLAKE2s (RFC7693)».

Ergebnisse Leistungstests von der offiziellen Webseite:

Durchsatz (Megabit/s)
Der VPN WireGuard wurde in den Linux-Kernel 5.6 aufgenommen

Ping (ms)
Der VPN WireGuard wurde in den Linux-Kernel 5.6 aufgenommen

Testkonfiguration:

  • Intel Core i7-3820QM und Intel Core i7-5200U
  • Gigabit-Karten 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: entsprechender 256-Bit-AES-Verschlüsselungssatz mit HMAC-SHA2-256, UDP-Modus
  • Die Leistung wurde mit Hilfe von iperf3, der durchschnittliche Wert wurde über 30 Minuten ermittelt.

Theoretisch sollte WireGuard nach der Integration in den Netzwerk-Stack noch schneller arbeiten. In der Realität könnte dies jedoch nicht der Fall sein, da es zu einem Übergang zu den im Kernel integrierten kryptographischen Funktionen Crypto API kommt. Möglicherweise sind noch nicht alle von ihnen auf das Leistungsniveau von nativem WireGuard optimiert.

Aus meiner Sicht ist WireGuard für den Nutzer absolut ideal. Alle Low-Level-Lösungen sind in der Spezifikation festgelegt, daher dauert der Prozess zur Vorbereitung einer typischen VPN-Infrastruktur nur wenige Minuten. Es ist praktisch unmöglich, bei der Konfiguration Fehler zu machen, — geschrieben auf Habré im Jahr 2018. — Der Installationsprozess ist detailliert beschrieben auf der offiziellen Website, hier möchte ich besonders die hervorragende Unterstützung von OpenWRT hervorheben. Solche Benutzerfreundlichkeit und die kompakte Codebasis konnten durch den Verzicht auf die Verteilung von Schlüsseln erreicht werden. Es gibt kein komplexes Zertifikatsystem und diesen ganzen Unternehmensschreck, die kurzen Verschlüsselungsschlüssel werden ähnlich wie SSH-Schlüssel verteilt.

Das WireGuard-Projekt entwickelt sich seit 2015, es hat eine Prüfung bestanden und eine formale Verifikation. Die Unterstützung von WireGuard ist in NetworkManager und systemd integriert, und die Patches für den Kernel sind Bestandteil der Basisdistributionen Debian Unstable, Mageia, Alpine, Arch, Gentoo, OpenWrt, NixOS, Subgraph und ALT.

Quelle: habr.com

60GB SSD 8Gb DDR4