Inhaltsverzeichnis
WireGuard ist ein VPN-Protokoll, welches mit dem Ziel entwickelt wurde die Komplexität von VPNs deutlich zu reduzieren. Diese Vereinfachung geht so weit, dass auch auf Funktionen verzichtet wird, die andere VPN-Protokolle bieten.
Ein wichtiger Teil dabei ist, dass nur ein Satz an im Protokoll festgelegten kryptographischen Algorithmen verwendet wird. Es findet daher keinerlei Aushandlung von Algorithmen beim Verbindungsaufbau statt. Dies vereinfacht den Verbindungsaufbau und verhindert Downgrade-Angriffe. Es wird X25519 ECDH für den Schlüsselaustausch, ChaCha20 für die Verschlüsselung der Nutzdaten und Poly1305 für die Authentifizierung der Nutzdaten verwendet.
Da X25519 ECDH evtl. in Zukunft durch Quantencomputer erfolgreich angegriffen werden könnte, verfügt WireGuard über eine zusätzliche Schutzebene. Hierfür wird die Schlüsselaushandlung noch mit einem auf beiden Seiten identisch hinterlegten Schlüssel (Pre-Shared Key) zusätzlich symmetrisch verschlüsselt. Quantencomputer bieten nach heutigem Wissensstand keinen Vorteil gegen die hier eingesetzte symmetrische Verschlüsselung.
Die Verschlüsselung der Nutzdaten per ChaCha20-Poly1305 ist weniger rechenintensiv als das bei anderen Protokollen oft verwendete AES-GCM. Daher erreicht WireGuard oft einen höheren Datendurchsatz als z.B. IPSec mit AES. Da allerdings viele CPUs über eine Beschleunigung für AES in Hardware verfügen, nicht aber für ChaCha20-Poly1305, gilt dies nicht in allen Fällen.
Der Aufbau einer WireGuard-Verbindung ist im Vergleich zu anderen VPN-Protokollen besonders schlank und schnell. Es muss nur jeweils ein UDP-Paket zur Gegenseite und von dieser zurück gesendet werden. Dies ist der sog. Handshake. In ihm wird die komplette Authentifizierung und das Aushandeln von Sitzungsschlüsseln für die Nutzdaten umgesetzt.
Die UDP-Pakete für den Handshake sind kleiner als 1259 Bytes und kommen daher ohne Fragmentierung durch die allermeisten Internetanbindungen. Da einige Router und NAT-Implementationen Schwierigkeiten mit fragmentierten UDP-Paketen haben, ist der Verzicht auf UDP-Fragmentierung ein wichtiger Vorteil.
Der Handshake wird nur ausgeführt, wenn tatsächlich Nutzdaten übertragen werden müssen oder wenn in der Konfiguration das sog. Keepalive aktiviert ist. Das Keepalive hält die Verbindung offen um z.B. mit NAT-Routern im Verbindungsweg umgehen zu können. Der Handshake wird, wenn ständig Nutzdaten übertragen werden, in etwa alle 2 Minuten gemacht. Das ist wesentlich häufiger als es für den Verbindungsaufbau bei anderen VPN-Protokollen wie z.B. IPSec üblich ist.
Da der Verbindungsaufbau so schnell geht, kann WireGuard auf ein komplexeres Management des Verbindungsstatus verzichten. WireGuard merkt sich nur, ob der letzte erfolgreiche Handshake innerhalb des erlaubten Zeitrahmens stattgefunden hat und startet bei anstehendem Datentransfer rechtzeitig vorher einen neuen.
Sowohl die Handshakes als auch die Nutzdaten werden als UDP-Pakete übertragen. Die UDP-Portnummern werden dabei für beides gemeinsam verwendet. Die UDP-Portnummern sind grundsätzlich frei wählbar und können auf beiden Gegenseiten unterschiedlich sein. Die Portnummer 51820 findet man oft für WireGuard verwendet. Intra2net hat hier aber Konflikte sowohl mit anderen WireGuard nutzenden Routern als auch mit Quellports für ausgehende Pakete anderer Verbindungen beobachtet und empfiehlt daher Port 800 für VPN-Router und -Firewalls sowie zufällige Portnummern oberhalb von 1024 für VPN-Clients.
WireGuard sieht keine Festlegung der Verbindung auf eine bestimmte Gegenstellen-IP vor. Es kann eine IP oder ein DNS-Hostname hinterlegt werden, zu der die Verbindung grundsätzlich neu aufgebaut wird. Wenn sich die Gegenstelle mit gültigen Schlüsseln aber von einer anderen IP aus per Handshake meldet, wird das akzeptiert und die Verbindung läuft ab diesem Moment mit dieser anderen IP. Dies ist hilfreich u.a. für mobile Clients, die z.B. zwischen WLAN und Mobilfunk wechseln, oder für das Umschalten auf eine Fallback-Internetleitung.
Der WireGuard-Handshake tauscht keine Informationen über die zu verbindenden IP-Netze aus. In der Konfiguration wird lediglich hinterlegt, welche Quelladressen von einer bestimmten Gegenstelle aus genutzt werden dürfen (AllowedIPs). Jede Seite blockiert eingehende IP-Pakete, die nicht zu dieser Konfiguration passen. Dies ist aber unabhängig von den Handshakes und man kann von erfolgreichen Handshakes nicht auf eine korrekte Konfiguration der IP-Netze schließen.
Für die Übertragung von Konfigurationsdaten und Schlüsseln hat sich bei WireGuard ein gemeinsames Dateiformat etabliert ("wg-quick"-Format) und kann herstellerübergreifend genutzt werden. Es kann auch als QR-Code dargestellt und mit der Kamera von Mobilgeräten fotografiert werden. Auf diese Weise kann die VPN-Konfiguration besonders leicht und sicher auf Mobilgeräte übertragen werden.