This commit is contained in:
Jan Philipp Timme 2018-10-12 12:37:49 +02:00
parent c6b00888aa
commit 4ddc2b3431

View File

@ -211,28 +211,35 @@ Alle kryptografische Operationen zur Verarbeitung des VPN-Datenverkehrs, sowie z
\subsection{Wireguard} \subsection{Wireguard}
Zur Zeit noch als Beta zu betrachten, könnte aber in Zukunft eine super Basis für VPN werden. Wireguard ist ein Softwareprojekt, mit dem ein geschützter Netzwerktunnel zwischen zwei Netzwerkteilnehmern aufgebaut werden kann.
Für Linux gibt es ein Kernel-Modul, für MacOS, *BSD, (Linux) und co gibt es auch wireguard-go. Zum aktuellen Zeitpunkt (12.10.2018) befindet sich Wireguard noch in Entwicklung, der Quellcode wird noch als experimentell eingestuft\footnote{Vergleich \url{https://www.wireguard.com/install/}}.
Windows-Unterstützung fehlt zur Zeit noch. Wireguard wurde als Kernel-Modul für Linux entwickelt, welches einen Umfang von weniger als 4000 Zeilen Code hat \cite[][Abschnitt VII]{wireguard:intro}, wodurch Audits und Reviews erleichtert werden \cite[][Abschnitt VII]{wireguard:intro}.
Im Vergleich zu OpenVPN und IPsec arbeitet Wireguard als Kernel-Modul schneller und effizienter \cite[][Abschnitt VIII]{wireguard:intro}.
Für MacOS, FreeBSD und Windows (Unterstützung für Windows ist noch nicht fertiggestellt) wird mit \texttt{wireguard-go} eine in Go geschriebene Wireguard-Implementation entwickelt.
Eine auf Rust aufbauende Implementation wird unter der Bezeichnung \texttt{wireguard-rs} entwickelt\footnote{Siehe \url{https://www.wireguard.com/xplatform/}}.
Kommunikation erfolgt über UDP Wireguard arbeitet nur auf OSI-Layer~3 und unterstützt IPv4 und IPv6 sowohl zur Kommunikation zwischen zwei Netzwerkteilnehmern, als auch für den Transport durch den Netzwerktunnel \cite[][Abschnitt I]{wireguard:intro}.
NAT kann durch zusätzliche Keepalive-Nachrichten besiegt werden (UDP Hole Punching). Die durch Wireguard geschützten IP-Pakete werden in UDP-Paketen gekapselt zwischen den Netzwerkteilnehmern übertragen \cite[][Abschnitt III]{wireguard:intro}.
Durch das periodische Senden von \enquote{Keepalive}-Nachrichten \cite[][Abschnitt VI, Absatz E]{wireguard:intro} durch den Netzwerktunnel können Wireguard-Sitzungen, auch hinter \textit{Network Address Translation} (NAT) \cite[][Abschnitt II]{wireguard:intro}, aufrecht gehalten werden.
Der Tunnel ist Layer3 only und somit leichter in der Handhabung Während OpenVPN und IPsec die Konfiguration der zu verwendenden kryptografischen Algorithmen und Parameter erlauben, gibt Wireguard diese fest vor.
Sollten Schwachstellen in der verwendeten Kryptografie vorliegen, so müssen alle Wireguard-Endpunkte mit Sicherheitsaktualisierungen versorgt werden \cite[][Abschnitt I]{wireguard:intro}.
Durch diesen Schritt kann Wireguard weniger komplex gestaltet werden und Verwundbarkeiten vermeiden, wie sie bei SSL/TLS häufig aufgetreten sind \cite[][Abschnitt I]{wireguard:intro}.
Architektur: Point-to-Point Ein Netzwerkteilnehmer wird durch seinen öffentlichen Schlüssel, ein 32~Byte-Punkt auf der elliptischen Kurve \texttt{Curve25519}, eindeutig identifiziert \cite[][Abschnitt I]{wireguard:intro}.
Beide Teilnehmer tauschen auf nicht spezifizierte Weise ihre öffentlichen Schlüssel aus. (Wie bei OpenSSH) Die Transportverschlüsselung verwendet \texttt{ChaCha20Poly1205}
Dieser öffentliche Schlüssel ist ein 32 Byte Curve25519 Punkt (II Cryptokey Routing) und identifiziert einen WireGuard-Peer.
Zwei Netzwerkteilnehmer tauschen auf nicht spezifizierte Weise (wie bei OpenSSH) ihre öffentlichen Schlüssel aus.
Dieser öffentliche Schlüssel, der sind zufällig gewählte Punkte auf Curve25519 32 Byte)
(II Cryptokey Routing) und identifiziert einen WireGuard-Peer.
Curve25519 für ECDH -> von Bernstein als SaveCurve geführt Curve25519 für ECDH -> von Bernstein als SaveCurve geführt
ChaCha20Poly1305 ChaCha20Poly1305
Laut einer Analyse ist das Wireguard-Protokoll für \textit{key-compromise impersonation} (KCI)-Angriffe verwundbar \cite{wireguard:analysis}.
\cite{wireguard:intro} Was das bedeutet, muss ich noch herausfinden. Aber dazu später.
\cite{wireguard:analysis}
\begin{comment} \begin{comment}