Jason A. Donenfeld, der Autor von VPN WireGuard, hat die erste bedeutende Veröffentlichung der Client-Software WireGuard für Windows 1.0 sowie der Treiber WireGuardNT 1.0 mit Portierung vorgestellt. VPN WireGuard für den Windows-Kernel 10 und 11, das die Architekturen AMD64, x86 und ARM64 unterstützt. Der Code der Komponenten für den Windows-Kernel wird unter der GPLv2-Lizenz verteilt, die Client-Software unter der MIT-Lizenz.
Der Port basiert auf der Codebasis der Hauptimplementierung von WireGuard für den Linux-Kernel, die auf die Verwendung von Windows-Kernel-Entitäten und dem NDIS-Netzwerkstack umgestellt wurde. Im Vergleich zur Implementierung wireguard-go, die im Benutzermodus läuft und die Netzwerk-Schnittstelle Wintun verwendet, bietet WireGuardNT eine signifikante Leistungssteigerung durch den Ausschluss von Kontextwechseloperationen und das Kopieren von Paketinhalt aus dem Kernel in den Benutzermodus. Ähnlich wie bei den Implementierungen für Linux, OpenBSD und FreeBSD funktioniert in WireGuardNT gesamte Protokollverarbeitung direkt auf der Ebene des Netzwerkstacks.
Die Version 1.0 wird als ein gewisser Meilenstein angesehen, der die Lösung einer Reihe von Problemen und die Erfüllung festgelegter Ziele markiert, wie z. B.: die Verwendung der Funktion NdisWdfGetAdapterContextFromAdapterHandle() anstelle der weniger sicheren Speicherung des Treiberstatus im Feld Reserved und der Verwendung undocumented offsets; eine korrekte und zeitnahe Überwachung der MTU-Größe (Maximum Transmission Unit) durch Abfangen von Systemaufrufen; und die Verwendung des C23-Standards im Code.
Wir erinnern daran, dass VPN WireGuard auf modernen Verschlüsselungsmethoden basiert, eine sehr hohe Leistung bietet, einfach zu benutzen ist, ohne Komplikationen auskommt und sich bei mehreren größeren Implementierungen, die große Verkehrsvolumina verarbeiten, gut bewährt hat. Das Projekt entwickelt sich seit 2015, es hat eine Prüfung und formale Verifizierung der eingesetzten Verschlüsselungsmethoden durchlaufen. In WireGuard wird das Konzept der Schlüssel-basierten Routing verwendet, das die Zuordnung eines privaten Schlüssels zu jeder Netzwerkschnittstelle und die Verwendung zur Verknüpfung von öffentlichen Schlüsseln 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-Server (Roaming) ohne Verbindungsunterbrechung mit automatischer Neukonfiguration des Clients.
Für die Verschlüsselung wird der Stromchiffre ChaCha20 und der Nachrichtenauthentifizierungsalgorithmus (MAC) Poly1305 verwendet, die von Daniel Bernstein, Tanja Lange und Peter Schwabe entwickelt wurden. ChaCha20 und Poly1305 gelten als schnellere und sicherere Alternativen zu AES-256-CTR und HMAC, deren Softwareimplementierung eine fixe Ausführungsdauer ohne spezielle Hardwareunterstützung ermöglicht. Zur Generierung des gemeinsamen geheimen Schlüssels wird das Diffie-Hellman-Protokoll auf elliptischen Kurven in der Implementierung Curve25519 verwendet, das ebenfalls von Daniel Bernstein vorgeschlagen wurde. Für das Hashing wird der Algorithmus BLAKE2s (RFC7693) eingesetzt.
Quelle: opennet.ru
