OpenVPN / Wireguard - ein Vergleich

27 Januar 2019

Status: initial draft

Vorwort

Ein kleiner Vergleich zwischen openVPN und Wireguard: Diese beinhalten meine ersten Gehversuche mit Wireguard und spieglen nur meinen ersten Eindruck wieder. Kein Anspruch auf Richtigkeit/Vollständigkeit.

Gegenüberstellung

OpenVPN

Wireguard

Homepage

Protokoll

udp/tcp

udp

Tun-Device

tun/tap

wireguard

Implementation

User-Space

Kernel-Space (Ausnahme: unrooted Smartdevices)

Layer

2 oder 3

3

Kompression

lzo

-

Authentifizierung

Static key / Certificates, Smart Cards und/oder Username/Password

Static key

Cipher-Suites

openSSL: DES-CBC, RC2-CBC, DES-EDE-CBC, DES-EDE3-CBC, DESX-CBC, BF-CBC, RC2-40-CBC, CAST5-CBC, RC2-64-CBC, AES-128-CBC, AES-192-CBC, AES-256-CBC / MD5, SHA, DSA…​ endlose Liste

Noise protocol framework: Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF

Support für Crypto-Hardware

AES-NI

keine/nicht nötig (verwendet djbsort Library)

Lines of Code (ca.)

>115000+openssl

<5000

Vorteile

  • Für nahezu allen Plattformen verfügbar

  • sehr ausgereift

  • hervorragende Dokumentation

  • dynamisch:

    • RR Setups mit multiplen Remote-Hosts rel. einfach realisierbar

    • Push/Pull-Routen und DHCP Options

    • SSL Unterbau mit Zertifikatsmanagment (Revokationlists, …​)

  • Kompression möglich

  • zahlreiche Anonymisierungsdienste

  • (Bridge-Config)

  • Für viele Plattformen verfügbar

  • einfach(st)e Konfiguration

  • hervorragende Konzeption

  • skaliert auf Multicores

  • hoher Datendurchsatz

  • minimale Latenz

  • neuste&stärkste Cipher sind vorgegeben

  • schlanke Architektur

    • niedrige System-Anforderungen

    • niedrige/statische Speicher-Anforderungen

    • ChaCha20 extrem schnell: Crypto-Hardware nicht nötig

  • Integration in Kernel (angekündigt)

Nachteile

  • komplexe Konfiguration

  • Sicherheit u.A. abhängig von openSSL

  • schwache Cipher wählbar

  • hohe Systemanforderungen (AES-NI empfehlenswert)

  • merkbar höhere Latenzen

  • skaliert nicht auf Multicores

  • noch im frühen Entwicklungsstadium

  • (noch) nicht für Windows

  • sehr statische Konfiguration:

    • zentrales Managment(?)

    • keine Push/Pull-Routen(?)

    • keine DHCP-Options(?)

    • kein Bridging(?)

    • vorraussichtlich umständlich bei vielen Clients(?)

    • RoudRobin/Mutli-Endpoint Setups(?)

  • (keine Bridge-Config)

  • "stateless"

  • (noch) keine Anonymisierungsdienste

  • laaange To-Do Liste

  • (noch) etwas buggy:

    • Android Client zeigt immer Verbindung, auch wenn keine besteht (v0.0.2018…​)

    • kein Roaming mit dynamischer Server-IP (aka "Always on") (habs nicht hinbekommen)

Todo:

  • aktueller Geschwindigkeitsvergleich?

  • Fazit