
Die Entwicklung einer sicheren Snapchat-Alternative
von Tobias Müller
am 25. März 2025
Motivation
Es begann alles mit einer Fernbeziehung. Um in Kontakt zu bleiben, beschlossen meine Freundin und ich, Snapchat zu nutzen. Doch als Sicherheitsenthusiast sank mein Herz jedes Mal ein wenig mehr, wenn ich ein Bild oder eine Nachricht gesendet habe. Ich wusste, dass Privatsphäre und Snapchat keine Freunde sind und dass es Tools wie SnapLion gibt. Da ich kein aktives Nebenprojekt hatte, entschied ich mich, eine europäische Alternative zu schaffen, bei der das Signal-Protokoll sicherstellt, dass nur zwei Personen (= English: "two only" = twonly) die kommunizierten Daten sehen können, während der Geist von verschwindenden Bildern und Nachrichten gewahrt bleibt.
Die ursprüngliche Motivation für die App war es, einen sicheren Weg zu schaffen, um kurzlebige Bilder mit meiner Freundin zu teilen. Doch während der Entwicklung begann ich, die Idee von twonly jeden Tag ein wenig mehr zu lieben. Auch die zunehmende Radikalisierung Amerikas macht es meiner Meinung nach immer schwieriger, sich auf amerikanische Unternehmen wie Snapchat oder AWS, auf die der Messenger Signal angewiesen ist, zu verlassen. Das zeigt, dass wir in Europa eine echte Alternative brauchen. twonly ist mein Versuch, einen Schritt in diese Richtung zu machen.
Oder mit den Worten des ehemaligen Bundesministers für Wirtschaft (Deutschland):
„Europa braucht digitale Souveränität. Anstatt uns von autoritären Staaten und Tech-Oligarchen abhängig zu machen, müssen wir unsere eigenen europäischen Kommunikationsplattformen aufbauen.“- Robert Habeck
Der nächste Abschnitt wird etwas technisch, aber ich versuche, so allgemein wie möglich zu bleiben.
End-To-End-Verschlüsselung
Die komplette Kommunikation zwischen den Nutzern ist mit dem Signal-Protokoll geschützt. Um sicherzustellen, dass niemand mithört, können die Nutzer die Fingerabdrücke der öffentlichen Schlüssel vergleichen, genau wie in Signal. Um Bandbreite und Speicherplatz zu sparen, werden Mediendateien mit einem symmetrischen Schlüssel verschlüsselt, der nur für diesen Anwendungsfall generiert wird. Die ChaCha20-Poly1305 geschützte Datei wird dann einmal hochgeladen. Für jeden Empfänger wird ein einzigartiger Download-Token generiert, der verwendet werden kann, um die Datei herunterzuladen. Der symmetrische Schlüssel wird dann über eine durch das Signal-Protokoll geschützte Nachricht an die Empfänger gesendet, sodass der Empfänger die Mediendatei entschlüsseln kann. Nachdem alle Download-Token verwendet wurden, wird die verschlüsselte Mediendatei vom Server gelöscht.
Tech-Stack
Als Rustacean war das Backend eine einfache Wahl. Rust macht nicht nur Spaß, sondern bietet auch die Leistung und Speichersicherheit, die man für eine Serverapplikation benötigt. Das Frontend war anfangs eine größere Herausforderung. Ich hatte noch nie eine Android- oder iOS-App entwickelt. Am Ende entschied ich mich für Flutter, weil es plattformübergreifend ist und ein Plugin-Ökosystem hat.
Das Backend
Die Kommunikation zwischen der App und dem Backend wird über WebSockets abgewickelt, was ein Echtzeit-Erlebnis ermöglicht. Nachrichten werden über Protocol Buffers (Protobuf) ausgetauscht, ein Protokoll, das sich mit Hilfe des prost crate nahtlos in Rust integrieren lässt. Horizontale Skalierung ist zwar derzeit nicht möglich, aber das Hinzufügen einer Redis-ähnlichen Datenbank zur Synchronisierung offener WebSocket-Verbindungen ist einfach, da das Backend für eine einfache horizontale Skalierung konzipiert wurde. Für die Datenbank habe ich mich für MariaDB entschieden, da ich damit am besten vertraut bin. Da das Backend nicht viele Daten speichern muss, ist diese Wahl für meine Bedürfnisse gut geeignet.
Das Frontend
Wie bereits erwähnt, wird das Frontend mit Flutter erstellt. Das Plugin-Ökosystem macht es einfach, eine vollwertige App zu erstellen. Mein derzeitiger Fokus liegt auf der Entwicklung eines schnellen, brauchbaren Proof of Concept. Während die Plugins wirklich cool sind, um einen schnellen Proof of Concept zu erstellen, bringt jedes Plugin Sicherheitsrisiken mit sich, so dass ich versuchen werde, die Verwendung dieser Plugins auf einen Punkt zu reduzieren, an dem diese Risiken überschaubarer werden.