End to End und dazwischen
Das Internet basiert auf mehreren Schichten verschiedener Protokolle. Die Benutzer interagieren mit der obersten Schicht, die die Daten an die nächste Schicht weitergibt. Am Ende des Stapels befindet sich ein physisches Medium wie Kabel oder Funk im Besitz von ISPs und Behörden.
Auf der Empfängerseite verarbeitet ein ähnlicher Protokollstapel die Daten von unten nach oben, bis sie den Benutzer am anderen Ende erreichen. Die Schichten haben keine Kenntnis von den Daten, die von oben weitergegeben werden, und verändern sie in keiner Weise. Jede Schicht adressiert direkt die passende Schicht am anderen Ende. Die Verarbeitung erfolgt an den Enden der kommunizierenden Parteien, nicht innerhalb der Übertragung, daher der Name.
Leider wissen beide Enden nicht was in den Nodes dazwischen passiert.
e2e – Das Prinzip
Eine e2e-Übertragung dezentralisiert die Intelligenz im Netzwerk. Telekommunikationsunternehmen mit klassischem Telefonie-Hintergrund sind daran gewöhnt, die Intelligenz des Netzwerks unter ihrer Kontrolle zu haben, im „Zentrum“.
Im Internet jedoch liegt die Intelligenz an den Rändern – bei den Clients – während das Netzwerk größtenteils dumm ist. ISPs sind nur eine der unteren Schichten in diesem Stapel. Daher sollte sensibler Inhalt, der über das Internet gesendet wird an den Endknoten verschlüsselt werden.
Die Lösung
Ähnlich wie im WebRTC Protokoll kommt hier ein TURN Server als Relay-Station zum Einsatz. Dieser dient den Endknoten als Remote-Gateway und liefert bei erfolgreicher Überprüfung einen verschlüsseten bidirektionalen Datenkanal zurück. Dadurch wird im Falle einer Kompromittierung des Servers verhindert, dass dieser:
- Nachrichten zwischen App und Gerät abhören, manipulieren, verwerfen, wiederholen (Replay) oder in der Reihenfolge vertauschen kann.
- Ganze Sitzungen zwischen App und Gerät wiederholen kann.
- Sich selbst als App oder Gerät ausgeben kann.
- Apps absichtlich falschen Geräten zuordnen kann.
Zum Einsatz kommen hierfür Bibliotheken und Protokolle wie:
- libsodium
- XChaCha20-Poly1305
- Session-Keys
- Elliptic-Curve25519
- Diffie-Hellman
- X.509 Zertifikate
Hardware:
- Raspberry Pi als Local TURN Server
- Esp32 als Local TURN Server
- dedizierter Unix WebServer als Remote-Gateway
- Android, iOs, Windows Clients