E2EE im Browser

Der Betreiber einer SaaS behauptet, die in der SaaS vorhandene Chat-Funktion funktioniere so, dass der im Browser auf dem Endgerät von Teilnehmer A in das Textfeld der Chatfunktion eingegebene Text noch im Browser - also auf dem Endgerät von A - verschlüsselt wird, und dann von dort über den SaaS-Server des Betreibers verschlüsselt zum Endgerät des Chat-Teilnehmer B übertragen wird. Erst dort werde der Text dann wieder im Browser auf dem Endgerät von B entschlüsselt.

Lässt sich auf den Geräten von A oder von B überprüfen, ob diese Behauptung wahr ist?

Es besteht nämlich der Verdacht, dass die Texteingaben vom Endgerät A (abgesehen von TLS/HTTPS) unverschlüsselt zum SaaS-Server übertragen werden und erst dort verschlüsselt werden, oder umgedreht, dass die auf dem Endgerät von Teilnehmer A verschlüsselten Daten auf dem SaaS-Server entschlüsselt werden, bevor sie von dort auf das Endgerät von Teilnehmer B übertragen werden. Mit anderen Worten A und B haben den Verdacht, dass der Betreiber sich Kenntnis von den angeblich E2E-verschlüsselten Chatnachrichten verschaffen kann.

Oder kann es sein, dass der SaaS-Betreiber in dem Texteingabefeld „mitlesen“ kann?

2 „Gefällt mir“

Man könnte sich die Übertragung in Fiddler oder Burp Suite ansehen.
Wenn alles lokal im Client verschlüsselt wird, sollte man dort nichts unverschlüsseltes finden.

wie man es prüfen kann, weiß ich zwar nicht, aber es gibt einen sehr interessanten Beitrag von cane zum Theme E2EE im Browser, und zwar im Kontext der Sicherheit des Threema-Client am PC.
Threema Desktop-Client versus Webclient

Der von Gamma beschriebene Ansatz scheint mir hier auch die passende Möglichkeit zu sein.
Da die Verschlüsselung ja im Browser und clientseitig ablaufen soll, kann man evtl. auch das Javascript untersuchen. Meist ist das aber obfuscated und nicht ohne weiteres lesbar.

Das gilt aber gleichfalls auch für den vorgeschlagenen Ansatz, die übertragenen Daten zu analysieren. Der Stream kann durchaus so kodiert sein, das er verschlüsselt erscheint, aber nur maskiert ist.

Aber auch wenn man alles fein analysieren kann und der Anbieter voll transparent ist: Er kann schon morgen einen vollkommen anderen Code ausliefern oder nachladen.

Bei solcher Art Software und Sachverhalten muss man letztlich immer dem Anbieter vertrauen.

Der SaaS-Betreiber behauptet also, dass eine Ende-zu-Ende-Verschlüsselung zwischen den Teilnehmern A und B stattfindet.

Wir gehen von einer Webanwendung im Browser aus. Wir gehen auch davon aus, dass die Verschlüsselung ohne Addon realisiert wird und komplett in Javascript implementiert ist (also auch kein Webassembly).
Man könnte jetzt hergehen und sich ansehen, was das übertragene Javascript bewirkt und so nachvollziehen, ob eine Verschlüsselung stattfindet und ob der Text gegebenenfalls anderweitig abgegriffen wird.
Problematisch ist, dass das Javascript jedesmal neu vom Anbieter geladen wird und es sich bei dem ermittelten Ergebnis nur um eine Schnappschussaufnahme handelt.

Das könnte über einen Netzwerkmitschnitt einfach für einen konkreten Zeitpunkt überprüft werden.

Dazu müsste der SaaS-Betreiber den Schlüssel kennen. Es wäre denkbar, dass der Anbieter den Schlüssel kennt oder der Schlüssel anderweitig an den Anbieter übertragen wird.

Das wäre möglich.

Zusammenfassung

  • Punktuell kann man verschiedene Prüfungen durchführen: Quellcodeanalyse des übertragenen Javascript, Netzwerkmitschnitte
  • Man kann gegebenenfalls Aussagen über einen festen Zeitpunkt treffen.
  • Der SaaS-Anbieter kann das Vorgehen aber jederzeit ändern.
  • Es wäre aus meiner Sicht zu prüfen, ob man mit einem Open Source Chatprodukt, welches man nach einer vorherigen Evaluierung kontrolliert auf einer OnPremises-Umgebung aufbringen kann, nicht besser fährt.