Nachrichteninhalte reisen bei MindTheClub direkt zwischen zwei Geräten über einen verschlüsselten Peer-to-Peer-Kanal. Kein MindTheClub-Server und kein Dritter speichert den Inhalt deiner Nachrichten.
Um diese direkte Verbindung aufzubauen, müssen zwei Geräte eine kleine Menge an Einrichtungsinformationen austauschen – und, falls ein Gerät schläft, ein Signal zum Aufwecken. Diese zwei unterstützenden Schritte sind die einzigen Stellen, an denen ein Server beteiligt ist, und im Folgenden beschreiben wir präzise, was jeder davon sehen kann und was nicht.
Bevor all das passiert, müssen die beiden Geräte die Identität des jeweils anderen kennen. Das beschreiben wir zuerst, denn jeder spätere Schritt auf dieser Seite baut darauf auf.
Jeder verschlüsselte Schritt danach beruht auf einer Annahme: Jeder Peer verwendet den echten öffentlichen Schlüssel des anderen – nicht einen, den ein Anbieter dazwischen untergeschoben hat. Wir erreichen das mit einem einzigen Austausch außerhalb des Systems und einer versiegelten Antwort, sodass beide Seiten nach einem QR-Scan oder einem Tipp auf einen Einladungslink verifiziert sind.
Dein QR-Code enthält deine Nutzerkennung und einen Fingerabdruck deines öffentlichen Schlüssels – einen kurzen kryptografischen Hash, der ihn eindeutig identifiziert. Dein Einladungslink trägt dieselben zwei Dinge, eingebettet im Link selbst. Ob also jemand deinen Code scannt oder deinen Link antippt: Sein Gerät erhält denselben Fingerabdruck zum Abgleich. Den QR-Code persönlich zu zeigen ist der stärkste Kanal, aber in beiden Fällen gilt die Garantie unten: Der Verzeichnisanbieter kann deinen Schlüssel niemals unbemerkt austauschen.
Wenn die andere Person scannt oder tippt, holt ihr Gerät deinen öffentlichen Schlüssel aus dem Verzeichnis und berechnet dessen Fingerabdruck lokal. Stimmt er mit dem im QR-Code oder Link überein, wird der Schlüssel akzeptiert; wenn nicht, wird er abgelehnt und nicht gespeichert. Ein untergeschobener Schlüssel erzeugt eine Abweichung, und das Gerät verweigert ihn.
Ihr Gerät sendet dir dann eine Kontaktanfrage mit ihrem eigenen Fingerabdruck darin versiegelt – verschlüsselt mit deinem verifizierten Schlüssel. Nur du kannst sie entschlüsseln. Dein Gerät führt dieselbe Prüfung in umgekehrter Richtung durch und akzeptiert den Kontakt nur, wenn die Fingerabdrücke übereinstimmen.
Nach einem Scan oder Tipp haben beide Peers den Schlüssel des jeweils anderen unabhängig verifiziert, und ein Anbieter, der das Verzeichnis hält, kann keinen von beiden austauschen, ohne eine Prüfung zu brechen, die er nicht fälschen kann.
MindTheClub nutzt WebRTC-Datenkanäle, um Nachrichten zu transportieren. Ein WebRTC-Datenkanal ist eine direkte, verschlüsselte Verbindung zwischen zwei Geräten. Sobald er zwischen zwei Peers steht:
Große Dateien werden in Blöcke zerlegt und über denselben direkten Kanal gesendet, mit Wiederholungslogik auf dem sendenden Gerät, um die letztliche Zustellung zu garantieren. Die Blöcke reisen Peer-to-Peer wie alles andere.
Manchmal können zwei Geräte keinen direkten Pfad öffnen (restriktive NATs, Firewalls von Mobilfunkanbietern). In diesem Fall greift WebRTC auf ein TURN-Relay zurück, um den verschlüsselten Datenstrom durchzureichen. MindTheClub nutzt dafür den TURN-Dienst von Cloudflare. Das Relay leitet verschlüsselte Pakete weiter – es ist ein Standardbestandteil von WebRTC, wenn keine direkte Verbindung möglich ist. Dieser Rückfall betrifft nur den Netzwerkpfad des verschlüsselten Stroms; er ändert nichts daran, dass die Inhalte Ende-zu-Ende zwischen den beiden Geräten bleiben.
Bevor sich ein WebRTC-Kanal öffnen kann, müssen die beiden Geräte „Signalisierungs“-Informationen austauschen: Verbindungsbeschreibungen und mögliche Netzwerkadressen (in WebRTC-Begriffen das SDP-Offer/Answer und die ICE-Kandidaten). Das ist eine universelle Anforderung von WebRTC – jede WebRTC-Anwendung, auch Videocall-Websites, macht das. Die Informationen sind klein und werden nur gebraucht, um die Verbindung aufzubauen – sie sind nicht dein Nachrichteninhalt.
Die Frage ist: Wer transportiert diese Signalisierung, und was kann er sehen? Bei MindTheClub:
Wir haben die Signalisierung so entworfen, dass das Relay so wenig wie möglich erfährt:
Wenn Bobs Telefon schläft oder die App nicht läuft, braucht Alices Gerät einen Weg, es zu wecken, damit es der Verbindung beitreten kann. Dafür nutzt MindTheClub Firebase Cloud Messaging (FCM), Googles Push-Dienst – denn das ist der Mechanismus, den Android bereitstellt, um eine App zuverlässig aus dem Hintergrund zu wecken.
Der Inhalt der Wecknachricht wird mit dem öffentlichen Schlüssel des Empfängers verschlüsselt, bevor er den Absender verlässt. Entscheidend: Die Identität des Absenders steckt in dieser verschlüsselten Nutzlast – sie ist für die Push-Infrastruktur nicht sichtbar. Das ist ein „Sealed Sender“-Design: Die Partei, die den Push zustellt, kann nicht sehen, wer ihn gesendet hat.
Um einen Push zuzustellen, muss jedes Push-System wissen, wer ihn empfängt – so funktioniert Zustellung, und das gilt für jeden Push-basierten Messenger. Die Adresse des Empfängers ist für die Push-Ebene also zwangsläufig sichtbar. Was nicht sichtbar ist, ist die Identität des Absenders – sie bleibt in der verschlüsselten Nutzlast versiegelt.
Um die WebRTC-Verbindung aufzubauen, brauchen Geräte kurzlebige Zugangsdaten für den STUN/TURN-Dienst (die Komponenten, die zwei Geräten helfen, einen Netzwerkpfad zueinander zu finden). Diese Zugangsdaten werden mit einem geheimen Schlüssel erzeugt, der nicht auf dem Gerät liegen darf.
MindTheClub holt diese Zugangsdaten von einem Cloudflare Worker, der das Geheimnis serverseitig verwahrt. Kein Google-Dienst ist am Bezug der Verbindungszugangsdaten beteiligt. Schlägt dieser Abruf fehl, fällt die Verbindung auf öffentliche STUN-Server zurück, die einem Gerät nur helfen, die eigene öffentliche Adresse zu ermitteln – und nichts darüber erfahren, wen es kontaktiert.
Alles zusammengenommen: Peers verifizieren die Schlüssel des jeweils anderen mit einem QR-Scan oder Link, tauschen dann kleine Mengen verschlüsselter Einrichtungsinformationen über ein zustandsloses Relay und einen versiegelten Weck-Push aus. Sobald der direkte Kanal offen ist, fließen Nachrichteninhalte ausschließlich von Gerät zu Gerät.