Zum Hauptinhalt springen

Einträge teilen

Passwork bietet drei Möglichkeiten, Einträge zu teilen: Tresorzugang, direkte Eintragsübertragung und externe Links.

Übersicht der Freigabemethoden

MethodeEmpfängerKonto erforderlichSchutzschlüssel
TresorzugangPasswork-BenutzerRSA-Schlüssel des Empfängers
Direkte EintragsübertragungPasswork-BenutzerRSA-Schlüssel des Empfängers
Externer LinkJederLink-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:

  1. Tresorbesitzer initiiert das Hinzufügen von Benutzer B
  2. Server gibt den öffentlichen RSA-Schlüssel von Benutzer B zurück
  3. Besitzer entschlüsselt den Tresorschlüssel mit seinem privaten RSA-Schlüssel (WebCrypto)
  4. Besitzer verschlüsselt den Tresorschlüssel mit dem öffentlichen RSA-Schlüssel von Benutzer B (WebCrypto)
  5. Verschlüsselte Schlüsselkopie wird an den Server gesendet
  6. Server speichert die Kopie, verknüpft mit Benutzer B
  7. 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

  1. Benutzer auswählen, dem Zugang gewährt werden soll
  2. Öffentlichen RSA-Schlüssel dieses Benutzers abrufen
  3. Tresorschlüssel mit dem öffentlichen Schlüssel des Empfängers verschlüsseln (RSA-OAEP)
  4. Verschlüsselte Kopie an den Server senden

Prozess des Empfängers

  1. Bei der Anmeldung sieht der Empfänger einen neuen Tresor in der Liste
  2. Lädt die verschlüsselte Tresorschlüssel-Kopie herunter
  3. Entschlüsselt sie mit seinem privaten RSA-Schlüssel (WebCrypto)
  4. 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
Zero-Knowledge

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:

  1. Absender entschlüsselt den Eintragschlüssel (über Tresorschlüssel, AES-256-CBC)
  2. Absender fordert den öffentlichen RSA-Schlüssel des Empfängers an
  3. Absender verschlüsselt den Eintragschlüssel mit dem öffentlichen RSA-Schlüssel des Empfängers (WebCrypto)
  4. Verschlüsselte Schlüsselkopie wird an den Server gesendet
  5. Der Eintrag erscheint im „Posteingang"-Abschnitt des Empfängers
  6. 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:

  1. Server löscht die verschlüsselte Schlüsselkopie für den Benutzer
  2. Benutzer kann den Schlüssel nicht mehr vom Server erhalten
  3. Daten werden über die Oberfläche unzugänglich
Kryptografische Einschränkung

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 ermöglichen das Teilen eines Eintrags mit jemandem, der kein Passwork-Konto hat.

Funktionsweise

Link erstellen (Besitzer):

  1. Besitzer wählt den zu teilenden Eintrag aus
  2. Ein zufälliger Link-Schlüssel (256 Bit) wird auf dem Client generiert
  3. Eine Kopie der ausgewählten Eintragsfelder wird erstellt
  4. Die Kopie wird mit dem Link-Schlüssel verschlüsselt (AES-256-CBC)
  5. An den Server gesendet: verschlüsselte Kopie + Schlüssel-Hash + Einstellungen
  6. Server generiert ein Link-Token (43 Zeichen)
  7. Besitzer erhält eine URL wie https://passwork.example/g/p/{token}

Link öffnen (Empfänger):

  1. Besitzer sendet die URL an den Empfänger (E-Mail, Messenger)
  2. Empfänger öffnet die URL
  3. Browser sendet Anfrage an den Server (nur Token, ohne Schlüssel)
  4. Server überprüft das Token (existiert, nicht abgelaufen, nicht einmalig)
  5. Server gibt verschlüsselte Daten zurück
  6. JavaScript extrahiert den Schlüssel aus dem URL-Hash-Teil (#code=...)
  7. Daten werden im Browser mit dem Link-Schlüssel entschlüsselt (AES-256-CBC)
  8. Empfänger sieht den Eintrag

Der externe Link enthält zwei Komponenten:

ParameterLink-TokenLink-Schlüssel
ZweckLink-IdentifikatorDatenverschlüsselung
PositionURL-Pfad (/g/p/{token})URL-Hash (#code={key})
GenerierungAuf dem ServerAuf dem Client
Länge43 Zeichen100 Zeichen → 256 Bit
AlphabetA-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.

Nur bei aktivierter CSE

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}
Fragment wird nicht an den Server gesendet

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

Auf dem Server gespeichert:

DatenVerschlüsselung
Link-Identifikator (Token)
Eintragsdaten-KopieMit Link-Schlüssel + Serverschlüssel
SHA-256-Schlüssel-HashMit Serverschlüssel
Einstellungen (TTL, einmalig)Mit Serverschlüssel

Kopierte Eintragsfelder

Beim Erstellen eines Links werden folgende Felder kopiert:

FeldEnthalten
Name
LoginJa (optional)
Passwort (verschlüsselt)
URLJa (optional)
BeschreibungJa (optional)
Benutzerdefinierte FelderJa (optional)
AnhängeJa (optional, Metadaten + Schlüssel)
EinstellungBeschreibung
Gültigkeitsdauer (TTL)Link wird nach der angegebenen Zeit automatisch gelöscht
Einmalige NutzungLink wird nach dem ersten Aufruf ungültig
PasswortschutzZusätzliches Passwort für den Zugang
FeldauswahlWelche Eintragsfelder im Link enthalten sein sollen

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

BedrohungSchutz
Abfangen der ServeranfrageSchlüssel im Hash-Teil wird nicht an den Server gesendet
Abfangen der vollständigen URLErfordert Client-seitiges Abfangen
ServerkompromittierungDaten verschlüsselt, Schlüssel nicht auf dem Server
Token-Brute-Force256 Bit Entropie macht Brute-Force unmöglich
WiederverwendungEinmalige Links
Server-URL-ProtokollierungProtokolle enthalten nur Token, ohne Schlüssel

Empfehlungen

  1. Für kritische Daten — einmalige Links verwenden
  2. Für temporären Zugang — kurze TTL festlegen
  3. Für zusätzlichen Schutz — Schlüssel über separaten Kanal übermitteln
  4. Für Audit — Linknutzung in Protokollen verfolgen

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

KriteriumTresorzugangDirekte ÜbertragungExterner Link
Konto erforderlich
Zugang zu allen Einträgen— (nur einer)— (nur einer)
Zugangsaudit⚠️ Eingeschränkt
Widerrufbar
Zero-Knowledge
Änderungssynchronisierung⚠️— (Datenkopie)