Die Verschlüsselung

  • Identität: ein Ed25519-Schlüsselpaar auf dem Gerät, ohne E-Mail oder Telefonnummer. Jede Nachricht wird damit signiert.
  • Bubble: ein zufälliger 32-Byte-Root-Key. Per HKDF entstehen daraus die Mailbox-ID, die der Relay sieht (zufällig aussehend, ohne Bezug zum Namen), und der Inhaltsschlüssel für ChaCha20-Poly1305.
  • Nachricht: JSON → signieren → verschlüsseln. Mailbox und Nachrichten-ID sind als Associated Data gebunden. Der Server kann Nachrichten also weder verändern noch unter neuer ID wieder einspielen.
  • Herzen und Kommentare: eigene signierte, verschlüsselte Nachrichten mit der ID des Posts. Sie laufen mit dem Post ab und werden mit ihm gelöscht.
  • Profil: Name, Profilbild (512 × 512, ohne Metadaten) und Bio gehen nur verschlüsselt an die Bubbles, in denen du bist.
  • Lebensdauer: 24h-Posts bekommen ein expiresAt. Der Relay löscht sie endgültig, und die App blendet sie zusätzlich selbst aus.
  • Fotos: werden auf dem Gerät gedreht, auf höchstens 1600 px verkleinert und neu als JPEG gespeichert. EXIF- und GPS-Daten fallen dabei weg.
  • Auf dem Gerät: Schlüssel liegen im sicheren Speicher der Plattform (Keystore, Keychain, DPAPI). Android-Cloud-Backups sind deaktiviert.

Einladungen

Eine Einladung ist ein Link wie bubble://join#…. Der Schlüssel steht im Fragment hinter dem # und erreicht deshalb nie einen Server. Die App zeigt ihn als QR-Code, der lokal erzeugt und mit der Kamera gescannt wird.

Alternativ gibt es einen kurzen Code wie 7KQ2M-9XH4T, 24 Stunden gültig. Aus dem Code leitet die App per Argon2id eine Mailbox-ID und einen Schlüssel ab. Unter dieser ID liegt die Einladung verschlüsselt auf dem Relay. Der Relay sieht weder den Code noch die Bubble.

QR-Code, Link und Code enthalten den Schlüssel der Bubble. Teile sie nur mit Menschen, die dazugehören sollen.

Backup und neues Gerät

  1. Beim Einrichten erzeugt die App einen Backup-Code mit 25 Zeichen (125 Bit). Speichere ihn am besten in deinem Passwortmanager.
  2. Per Argon2id werden aus dem Code ein Schlüssel, eine Backup-ID und ein Schreib-Token abgeleitet.
  3. Deine Identität und alle Bubble-Schlüssel werden verschlüsselt auf dem Server gesichert. Das Backup aktualisiert sich automatisch, zum Beispiel wenn du einer Bubble beitrittst.
  4. Auf einem neuen Gerät genügt der Code, um alles wiederherzustellen.

Das Datenformat lässt Platz für einen Passkey als zweiten Weg. In der App gibt es ihn noch nicht.

Was der Relay weiß

weißweiß nicht
Mailbox-IDs, Anzahl und Größe der NachrichtenNamen von Bubbles oder Personen, Inhalte, Fotos
Ablaufzeitpunkt von 24h-Postswer in welcher Bubble ist (es gibt keine Accounts)
IP-Adressen während der Anfrage (werden nicht geloggt oder gespeichert)den Inhalt der Backups

Bewusste Lücken im MVP

Bubble ist noch in Entwicklung. Diese Punkte sind bekannt und offen:

  • Kein Mitglieder-Management: Wer den Einladungslink hat, ist drin. Jemanden zu entfernen würde eine Schlüsselrotation erfordern, die es noch nicht gibt.
  • Kein Rate-Limiting und keine Speicherquoten auf dem Relay.
  • Kein lokaler Cache: Der Feed wird bei jedem Öffnen komplett geladen.
  • Kurze Einladungscodes sind erratbar: 50 Bit, aber nur 24 h gültig und per Argon2id gebremst. Im Zweifel lieber QR-Code oder Link nutzen.
  • Nicht enthalten: Push-Benachrichtigungen, Story-Editor, Passkey, Emoji-Reaktionen.