Eine der häufigsten Fragen, die wir hören, ist:
„Wenn Fotos Ende-zu-Ende verschlüsselt sind und nur mein Gerät sie entschlüsseln kann – wie kann ich sie dann mit anderen teilen?“
Gefolgt von:
„Wenn ich so einen Link erstellen kann, könnte zeitkapsl das dann nicht auch serverseitig tun?“
Sehr gute Fragen! Schauen wir uns an, wie das funktioniert.
Was ist E2EE?
👉 Kurz gesagt: Deine Fotos sind immer verschlüsselt, bevor sie dein Handy verlassen, und nur die Personen, die du auswählst, bekommen den Schlüssel, um sie zu öffnen.
Stell dir dein Fotoalbum wie ein Fotoalbum mit Vorhängeschloss vor:
- Wenn du ein Foto zu zeitkapsl hochlädst, legt dein Handy es in das Album und verschließt es mit einem Schlüssel.
- Dieser Schlüssel verlässt niemals deine Hand – nicht einmal zeitkapsl hat ihn.
- Auf unseren Servern sehen wir nur das geschlossene, verschlossene Album.
- Das Album reist sicher durchs Internet, immer noch verschlossen.
- Dein Gerät (oder das deines Freundes) hat den Schlüssel und kann das Album öffnen und die Fotos anzeigen.
- Ohne den Schlüssel ist das Album nur sinnloser, unlesbarer Datenmüll.
Deine Fotos bleiben verschlossen 🔒
Jedes Foto oder Video, das du hochlädst, wird verschlüsselt, bevor es dein Gerät verlässt. Jede Datei erhält ihren eigenen zufälligen Schlüssel, und nur deine Geräte können sie wieder entschlüsseln. Die Server von zeitkapsl sehen dein Passwort oder deine Schlüssel niemals im Klartext.
- zeitkapsl kann niemals hineinschauen – nicht einmal aus Versehen.
- Hacker oder Dritte sehen immer nur verschlüsselte Daten, niemals deine Fotos.
- Teilen bleibt trotzdem möglich: Wenn du einen Freigabelink erstellst, übergibst du auch eine Kopie des Schlüssels (versteckt im Link). So kann das Gerät deines Freundes das Album öffnen – zeitkapsl jedoch weiterhin nicht.
Wie funktioniert ein Freigabelink? 🔗
Wenn du einen Link erstellst:
- Dein Gerät erzeugt ein neues Teilen-Passwort.
- Dieses Passwort verschlüsselt den Album-Schlüssel, der zum Öffnen der Fotos benötigt wird.
- Der Server speichert nur die verschlüsselte Version dieses Album-Schlüssels.
Der Link sieht dann so aus:
https://app.zeitkapsl.eu/s/123456789/#abcdef
123456789→ ein Verweis auf unseren Server, z. B. mit Ablaufdatum oder Schreibrechten.#abcdef...→ das geheime Teilen-Passwort.
Der entscheidende Punkt:
Alles nach dem # (dem „Fragment“) wird nie an den Server übertragen.
Es existiert nur im Browser oder in der App deines Freundes.
Das bedeutet: Selbst wenn zeitkapsl die verschlüsselten Daten ausliefert, sehen wir niemals den Schlüssel, der sie entschlüsseln würde.
Zusammenfassung
- Jedes Foto hat seinen eigenen Schlüssel.
- Die Schlüssel sind ineinander verschachtelt: Passwort → Account-Key → Album-Key → Foto-Key.
- Teilen funktioniert, indem der Album-Key mit einem Teilen-Passwort verschlüsselt wird, das im Link steckt.
- Der geheime Teil des Links verlässt niemals deinen Browser.
Darum ist Teilen mit zeitkapsl privat, sicher und Ende-zu-Ende verschlüsselt.
Technischer Deep Dive
Dieser Abschnitt erklärt die kryptographischen Details hinter dem Ende-zu-Ende-verschlüsselten Teilen in zeitkapsl.
👉 Wenn du ASCII-Art bevorzugst: /keys.txt
Hier eine Übersicht aller verwendeten Schlüssel und Verfahren – mit etwas mehr Farben und Pixeln:
Medienverschlüsselung
Jede Mediendatei (Foto oder Video) wird mit einem eigenen mediaKey über AES-256-GCM verschlüsselt. Die verschlüsselte Version jedes Schlüssels wird auf dem Server für die Synchronisierung gespeichert. Wie man einen mediaKey entschlüsselt, wird in den folgenden Abschnitten beschrieben.
Registrierung
Bei der Registrierung:
-
Ein mainKey wird auf deinem Gerät erzeugt.
-
Er wird aus deinem Passwort mithilfe von PBKDF2 + HKDF abgeleitet und verschlüsselt auf dem Server gespeichert.
-
Verwende
sha512(email)alssaltundpasswordalskeyMaterialfürPBKDF2. -
Das Ergebnis ist der
passwordKey. -
Mit
HKDFleiten wir daraus einenencryptionKeyund einauthTokenab. -
Der
mainKeywird durch einen sicheren Zufallsgenerator erstellt.- Der
mainKeymuss auf Papier oder anderswo sicher aufbewahrt werden (siehe Passwort-Reset).
- Der
-
Mit
HKDFleiten wir einindexKeyund einpasswordResetTokenab.indexKeyentschlüsselt allecollectionKey-Elemente.collectionKeykannmediaKeyentschlüsseln.mediaKeyentschlüsselt die eigentlichen Mediendateien und Metadaten.
passwordResetTokenbeweist den Besitz desmainKeyund erlaubt einen Passwort-Reset.- Mit
HKDFaus demindexKeyerhalten wir außerdem densearchLabelsKey.
-
Der
mainKeywird dann mit demencryptionKeyüber AES-GCM zuwrappedMainKeyverpackt. -
Das
authTokenwird per bcrypt auf dem Server gespeichert und dient als API-Passwort. -
wrappedMainKey+email+passwordResetTokenwerden auf dem Server gespeichert.
Login
- Nutzer gibt
emailundpasswordein. PBKDF2erzeugt denpasswordKey.- Aus dem
passwordKeyleiten wir perHKDFab:encryptionKeyauthToken
- Mit dem
authTokenwird vom Server derwrappedMainKeyabgerufen. wrappedMainKeywird lokal mit demencryptionKey(AES-GCM) entschlüsselt → Ergebnis:mainKey.
Passwort-Reset-Mechanismus
- Bei der Registrierung bestätigt der Nutzer, dass er das Recovery Kit sicher aufbewahrt (enthält den
mainKeyin verschiedenen Repräsentationen). - Der Nutzer fordert einen Reset an, indem er aus dem wiederhergestellten
mainKeydaspasswordResetTokenerzeugt. - Der Server prüft das
passwordResetTokenund sendet einen Reset-Link an die hinterlegte E-Mail-Adresse. - Der Nutzer legt ein neues Passwort fest, das wieder zum Verschlüsseln des
mainKeyverwendet wird. - Ein neuer
wrappedMainKeyund ein neuesauthTokenwerden auf dem Server gespeichert.
Teilen eines Albums
Wenn du ein Album teilst:
- Dein Gerät generiert ein zufälliges Teilen-Passwort.
- Der
collectionKeydes Albums wird mit diesem Passwort per AES-256-GCM verschlüsselt. - Der Server speichert nur den verschlüsselten
collectionKeyund die Metadaten (ID, Ablaufdatum, Berechtigungen). - Der Link sieht dann so aus:
https://app.zeitkapsl.eu/s/123456789/#abcdef
123456789= Share-ID, um den verschlüsselten Album-Key nachzuschlagen.#abcdef...= Teilen-Passwort, nur dem Client bekannt.
Das URL-Fragment
Das Teilen-Passwort steckt im Fragment (alles nach dem #).
Laut HTTP-Standard (RFC 3986, Abschnitt 3.5):
„Der Fragment-Identifier wird nicht im scheme-spezifischen Teil einer URI verwendet; er wird vor einer Anfrage abgetrennt und niemals an den Server gesendet.“
Das garantiert, dass zeitkapsl das Teilen-Passwort niemals erfährt.
Entschlüsselungsfluss beim Empfänger
Teilen-Passwort (aus #fragment)
↓
PBKDF2
↓
Share Key
↓
HKDF
↓
authKey (BCRYPT) + indexKey (AES-GCM-256)
↓
Collection Key
↓
Media Keys
↓
Dateien werden lokal entschlüsselt
Der gesamte Prozess läuft lokal auf dem Gerät des Empfängers ab. Unsere Server liefern ausschließlich verschlüsselte Datenblobs.
Zusammenfassung
- Alle Mediendateien werden mit eigenen Schlüsseln (AES-256-GCM) verschlüsselt.
email + password → PBKDF2 → HKDF → authToken + encryptionKey → mainKey → indexKey + resetToken → collectionKey → mediaKey- Shares umhüllen den Album-Key mit einem zusätzlichen Passwort.
- Das Teilen-Passwort befindet sich ausschließlich im URL-Fragment (
#...), das nie an den Server gesendet wird (RFC 3986 §3.5). - Daher kann zeitkapsl keine Links erstellen, öffnen oder missbrauchen.
Häufige Fragen
F: Kann zeitkapsl meine Fotos sehen? Nein. Alle Medien, Alben und Metadaten werden auf deinem Gerät verschlüsselt, bevor sie hochgeladen werden. Ohne dein Passwort oder Recovery Kit können selbst wir sie nicht öffnen.
F: Was passiert, wenn ich mein Passwort verliere?
Du benötigst dein Recovery Kit (enthält den mainKey). Damit kannst du dein Passwort zurücksetzen. Ohne Recovery Kit sind deine Daten kryptographisch unwiederbringlich verloren.
F: Kann zeitkapsl Freigabelinks erstellen oder öffnen?
Nein. Das geheime Teilen-Passwort steckt im #fragment des Links. Laut Standard (RFC 3986 §3.5) wird dieser Teil niemals an den Server gesendet. Nur das Gerät des Empfängers kann ihn nutzen, um die Daten zu entschlüsseln.