Einträge teilen
Passwork bietet drei Möglichkeiten, Einträge zu teilen: Tresorzugang, direkte Eintragsübertragung und externe Links.
Übersicht der Freigabemethoden
| Methode | Empfänger | Konto erforderlich | Schutzschlüssel |
|---|---|---|---|
| Tresorzugang | Passwork-Benutzer | ✓ | RSA-Schlüssel des Empfängers |
| Direkte Eintragsübertragung | Passwork-Benutzer | ✓ | RSA-Schlüssel des Empfängers |
| Externer Link | Jeder | — | Link-Schlüssel in URL |
Internes Teilen (zwischen Benutzern)
Tresorzugang gewähren
Beim Hinzufügen eines Benutzers zu einem Tresor findet ein kryptografischer Schlüsselaustausch statt.
Prozess der Zugangsgewährung:
- Tresorbesitzer initiiert das Hinzufügen von Benutzer B
- Server gibt den öffentlichen RSA-Schlüssel von Benutzer B zurück
- Besitzer entschlüsselt den Tresorschlüssel mit seinem privaten RSA-Schlüssel (WebCrypto)
- Besitzer verschlüsselt den Tresorschlüssel mit dem öffentlichen RSA-Schlüssel von Benutzer B (WebCrypto)
- Verschlüsselte Schlüsselkopie wird an den Server gesendet
- Server speichert die Kopie, verknüpft mit Benutzer B
- Benutzer B erhält bei der nächsten Anmeldung Tresorzugang
Wichtig: Der Server sieht nur verschlüsselte Schlüssel. Nur der Besitzer des entsprechenden privaten RSA-Schlüssels kann sie entschlüsseln.
Prozess des Besitzers
- Benutzer auswählen, dem Zugang gewährt werden soll
- Öffentlichen RSA-Schlüssel dieses Benutzers abrufen
- Tresorschlüssel mit dem öffentlichen Schlüssel des Empfängers verschlüsseln (RSA-OAEP)
- Verschlüsselte Kopie an den Server senden
Prozess des Empfängers
- Bei der Anmeldung sieht der Empfänger einen neuen Tresor in der Liste
- Lädt die verschlüsselte Tresorschlüssel-Kopie herunter
- Entschlüsselt sie mit seinem privaten RSA-Schlüssel (WebCrypto)
- Erhält Zugang zu allen Einträgen im Tresor
Zugangsebenen
Bei der Zugangsgewährung können Sie die Berechtigungsstufe festlegen:
- Anzeigen — Nur-Lese-Zugriff auf Einträge
- Bearbeiten — Bestehende Einträge ändern
- Vollständiger Zugang — Einträge erstellen, bearbeiten, löschen
- Administrator — Berechtigungen anderer Benutzer verwalten
Die Zugangsebene wird auf Anwendungsebene gesteuert. Kryptografisch haben alle Benutzer mit Tresorzugang denselben Schlüssel. Die Berechtigungsdifferenzierung wird durch die Serverlogik durchgesetzt.
Direkte Eintragsübertragung (Posteingang-Abschnitt)
Ein Eintrag kann an einen bestimmten Benutzer übertragen werden, ohne ihn zum Tresor hinzuzufügen.
Prozess der direkten Übertragung:
- Absender entschlüsselt den Eintragschlüssel (über Tresorschlüssel, AES-256-CBC)
- Absender fordert den öffentlichen RSA-Schlüssel des Empfängers an
- Absender verschlüsselt den Eintragschlüssel mit dem öffentlichen RSA-Schlüssel des Empfängers (WebCrypto)
- Verschlüsselte Schlüsselkopie wird an den Server gesendet
- Der Eintrag erscheint im „Posteingang"-Abschnitt des Empfängers
- Empfänger entschlüsselt den Eintragschlüssel mit seinem privaten RSA-Schlüssel
Unterschied zum Tresorzugang: Der Schlüssel des spezifischen Eintrags wird übertragen, nicht der Tresorschlüssel. Der Empfänger sieht keine anderen Einträge im Tresor.
Zugang widerrufen
Beim Widerrufen des Tresor- oder Eintragszugangs:
- Server löscht die verschlüsselte Schlüsselkopie für den Benutzer
- Benutzer kann den Schlüssel nicht mehr vom Server erhalten
- Daten werden über die Oberfläche unzugänglich
Wichtig zu verstehen: Wenn ein Benutzer zuvor den Tresor-/Eintragschlüssel erhalten und lokal gespeichert hat, könnte er die Daten theoretisch entschlüsseln, wenn er über den verschlüsselten Inhalt verfügt (z. B. aus einem Datenbank-Backup).
Dies ist eine grundlegende Einschränkung der Kryptografie mit gemeinsamen Schlüsseln. Für vollständigen Schutz nach Zugangswiderruf wird empfohlen:
- Passwörter in kritischen Einträgen zu ändern
- Falls erforderlich — Tresor mit neuem Schlüssel neu erstellen
Externe Links
Externe Links ermöglichen das Teilen eines Eintrags mit jemandem, der kein Passwork-Konto hat.
Funktionsweise
Link erstellen (Besitzer):
- Besitzer wählt den zu teilenden Eintrag aus
- Ein zufälliger Link-Schlüssel (256 Bit) wird auf dem Client generiert
- Eine Kopie der ausgewählten Eintragsfelder wird erstellt
- Die Kopie wird mit dem Link-Schlüssel verschlüsselt (AES-256-CBC)
- An den Server gesendet: verschlüsselte Kopie + Schlüssel-Hash + Einstellungen
- Server generiert ein Link-Token (43 Zeichen)
- Besitzer erhält eine URL wie
https://passwork.example/g/p/{token}
Link öffnen (Empfänger):
- Besitzer sendet die URL an den Empfänger (E-Mail, Messenger)
- Empfänger öffnet die URL
- Browser sendet Anfrage an den Server (nur Token, ohne Schlüssel)
- Server überprüft das Token (existiert, nicht abgelaufen, nicht einmalig)
- Server gibt verschlüsselte Daten zurück
- JavaScript extrahiert den Schlüssel aus dem URL-Hash-Teil (
#code=...) - Daten werden im Browser mit dem Link-Schlüssel entschlüsselt (AES-256-CBC)
- Empfänger sieht den Eintrag
Link-Token und Schlüssel
Der externe Link enthält zwei Komponenten:
| Parameter | Link-Token | Link-Schlüssel |
|---|---|---|
| Zweck | Link-Identifikator | Datenverschlüsselung |
| Position | URL-Pfad (/g/p/{token}) | URL-Hash (#code={key}) |
| Generierung | Auf dem Server | Auf dem Client |
| Länge | 43 Zeichen | 100 Zeichen → 256 Bit |
| Alphabet | A-Z, a-z, 0-9 (62) | A-Z, a-z, 0-9, @, ! (64) |
| Eingabeentropie | ~256 Bit | ~596 Bit |
| Server sieht | ✓ | — (nur Hash) |
Schlüsseltransformation: Die 100-Zeichen-Zeichenfolge wird über eine Schlüsselableitungsfunktion (KDF) in einen 256-Bit-AES-Schlüssel umgewandelt — ähnlich wie bei Tresor-, Eintrags- und Anhangsschlüsseln.
Der Client-seitige Link-Schlüssel wird nur bei aktivierter Client-seitiger Verschlüsselung (CSE) generiert. Wenn CSE deaktiviert ist, werden Link-Daten nicht auf dem Client verschlüsselt — es gilt nur die Server-seitige Verschlüsselung.
URL-Format:
https://passwork.example.com/g/p/{token}#code={link_key}
Der Link-Schlüssel wird im Hash-Teil der URL (nach #) übergeben. Gemäß dem HTTP-Standard wird das Fragment (URL-Teil nach #) niemals an den Server gesendet — es wird nur vom Browser auf der Client-Seite verarbeitet.
Das bedeutet:
- Beim Aufrufen des Links sieht der Server nur
{token}, aber nicht den Schlüssel - Der Schlüssel ist nur dem JavaScript-Code im Browser des Empfängers zugänglich
- Selbst wenn die Anfrage auf der Serverseite abgefangen wird, bleibt der Schlüssel geschützt
- Das Zero-Knowledge-Prinzip wird auf HTTP-Protokollebene eingehalten
Schlüsselspeicherung auf dem Server
Der Link-Schlüssel wird nicht im Klartext auf dem Server gespeichert:
- Der Server speichert nur den SHA-256-Hash des Schlüssels zur Korrektheitsüberprüfung beim Öffnen
- Beim Öffnen des Links berechnet der Client den Hash des eingegebenen Schlüssels und sendet ihn an den Server
- Der Server vergleicht die Hashes und gibt die verschlüsselten Daten zurück
Link-Datenstruktur
Auf dem Server gespeichert:
| Daten | Verschlüsselung |
|---|---|
| Link-Identifikator (Token) | — |
| Eintragsdaten-Kopie | Mit Link-Schlüssel + Serverschlüssel |
| SHA-256-Schlüssel-Hash | Mit Serverschlüssel |
| Einstellungen (TTL, einmalig) | Mit Serverschlüssel |
Kopierte Eintragsfelder
Beim Erstellen eines Links werden folgende Felder kopiert:
| Feld | Enthalten |
|---|---|
| Name | ✓ |
| Login | Ja (optional) |
| Passwort (verschlüsselt) | ✓ |
| URL | Ja (optional) |
| Beschreibung | Ja (optional) |
| Benutzerdefinierte Felder | Ja (optional) |
| Anhänge | Ja (optional, Metadaten + Schlüssel) |
Link-Einstellungen
| Einstellung | Beschreibung |
|---|---|
| Gültigkeitsdauer (TTL) | Link wird nach der angegebenen Zeit automatisch gelöscht |
| Einmalige Nutzung | Link wird nach dem ersten Aufruf ungültig |
| Passwortschutz | Zusätzliches Passwort für den Zugang |
| Feldauswahl | Welche Eintragsfelder im Link enthalten sein sollen |
Sicherheit externer Links
Zero-Knowledge-Prinzip
- Der Link-Schlüssel wird im URL-Hash-Teil übergeben (
#code=...) — der Browser sendet ihn nicht an den Server - Beim Aufrufen des Links sieht der Server nur das Token, der Schlüssel bleibt nur im Browser
- Der Server speichert nur den Schlüssel-Hash zur Korrektheitsüberprüfung
- Daten auf dem Server sind verschlüsselt und können ohne Schlüssel nicht gelesen werden
Bedrohungsmodell
| Bedrohung | Schutz |
|---|---|
| Abfangen der Serveranfrage | Schlüssel im Hash-Teil wird nicht an den Server gesendet |
| Abfangen der vollständigen URL | Erfordert Client-seitiges Abfangen |
| Serverkompromittierung | Daten verschlüsselt, Schlüssel nicht auf dem Server |
| Token-Brute-Force | 256 Bit Entropie macht Brute-Force unmöglich |
| Wiederverwendung | Einmalige Links |
| Server-URL-Protokollierung | Protokolle enthalten nur Token, ohne Schlüssel |
Empfehlungen
- Für kritische Daten — einmalige Links verwenden
- Für temporären Zugang — kurze TTL festlegen
- Für zusätzlichen Schutz — Schlüssel über separaten Kanal übermitteln
- Für Audit — Linknutzung in Protokollen verfolgen
Anhänge in Links einbinden
Beim Erstellen eines Links mit Anhängen:
Originale Eintragsstruktur: Eintragschlüssel, Datei (verschlüsselt mit Anhangsschlüssel), Anhangsschlüssel (verschlüsselt mit Eintragschlüssel).
Beim Erstellen des Links: Link-Schlüssel wird generiert, Anhangsschlüssel wird mit Link-Schlüssel neu verschlüsselt, Dateidaten bleiben auf dem Server unverändert, Link enthält: Datei-ID + Name + neu verschlüsselter Schlüssel.
Beim Öffnen des Links: Empfänger entschlüsselt Anhangsschlüssel mit Link-Schlüssel, fordert Datei per ID vom Server an, entschlüsselt Datei mit Anhangsschlüssel.
Vergleich der Freigabemethoden
| Kriterium | Tresorzugang | Direkte Übertragung | Externer Link |
|---|---|---|---|
| Konto erforderlich | ✓ | ✓ | — |
| Zugang zu allen Einträgen | ✓ | — (nur einer) | — (nur einer) |
| Zugangsaudit | ✓ | ✓ | ⚠️ Eingeschränkt |
| Widerrufbar | ✓ | ✓ | ✓ |
| Zero-Knowledge | ✓ | ✓ | ✓ |
| Änderungssynchronisierung | ✓ | ⚠️ | — (Datenkopie) |