Zum Hauptinhalt springen

Schlüsselhierarchie

Das kryptografische Modell von Passwork basiert auf einer Schlüsselhierarchie, bei der jede Ebene die nächste schützt.

Hierarchieübersicht

Master password
↓ (PBKDF2)
User master key
↓ (AES-256-CBC)
Private RSA key
↓ (RSA-OAEP)
Vault key
↓ (AES-256-CBC)
Record key
↓ (AES-256-CBC)
├── Record data
└── Attachment keys
↓ (AES-256-CBC)
File contents

Vollständiges Schlüsselschema

Ebene 0: Benutzeranmeldung

Der Benutzer gibt das Masterpasswort ein. Das Salt (20 Zeichen) wird vom Server abgerufen. PBKDF2 wird auf dem Client ausgeführt (300.000 Iterationen, SHA-256).

Ebene 1: Benutzer-Masterschlüssel

Das PBKDF2-Ergebnis ist der Masterschlüssel (512 Bit). Er wird für zwei Zwecke verwendet:

  1. Berechnung des SHA-256-Hashs zur Übermittlung an den Server (Passwortüberprüfung)
  2. Entschlüsselung des privaten RSA-Schlüssels des Benutzers (AES-256-CBC)

Ebene 2: RSA-Schlüssel

Der private RSA-Schlüssel (2048 Bit) wird auf dem Server in verschlüsselter Form gespeichert. Der öffentliche RSA-Schlüssel wird offen gespeichert. Der private Schlüssel wird zur Entschlüsselung von Tresorschlüsseln verwendet (RSA-OAEP).

Ebene 3: Tresorschlüssel

Der Tresorschlüssel (256 Bit) wird als separate Kopie für jeden Benutzer mit Zugang gespeichert. Jede Kopie wird mit dem öffentlichen RSA-Schlüssel des entsprechenden Benutzers verschlüsselt.

Ebene 4: Eintragschlüssel

Der Eintragschlüssel (256 Bit) wird mit dem Tresorschlüssel verschlüsselt. Er wird zur Verschlüsselung verwendet von: Passwortfeld, benutzerdefinierte Felder, TOTP-Geheimnis, Anhangsschlüssel.

Ebene 5: Anhangsschlüssel

Jede Datei hat ihren eigenen Anhangsschlüssel (256 Bit). Der Anhangsschlüssel wird mit dem Eintragschlüssel verschlüsselt. Der Dateiinhalt wird mit dem Anhangsschlüssel verschlüsselt.

Alternativer Pfad (Posteingang-Abschnitt)

Wenn ein Eintrag direkt an einen Benutzer übertragen wird (unter Umgehung des Tresors), wird der Eintragschlüssel direkt mit dem öffentlichen RSA-Schlüssel des Empfängers verschlüsselt.


Detaillierte Schlüsselbeschreibungen

Ebene 0: Masterpasswort

Das Masterpasswort ist ein Geheimnis, das nur dem Benutzer bekannt ist.

ParameterWert
Mindestlänge12 Zeichen
SpeicherungWird niemals gespeichert
ÜbertragungWird niemals an den Server übertragen
VerwendungEingabe bei jeder Anmeldung (oder Wiederherstellung aus localStorage)

Ebene 1: Benutzer-Masterschlüssel

Der Masterschlüssel wird aus dem Masterpasswort mittels PBKDF2 abgeleitet.

ParameterWert
AlgorithmusPBKDF2
HashfunktionSHA-256
Iterationen300.000
Schlüssellänge512 Bit
Salt20 Zeichen, einzigartig pro Benutzer
Salt-AlphabetA-Z, a-z, 0-9, @, ! (64 Zeichen)
Bibliothekpbkdf2 (npm)

Formel:

Master key = PBKDF2(master password, salt, 300000, 64, SHA-256)

Verwendung des Masterschlüssels:

  1. Entschlüsselung des privaten RSA-Schlüssels des Benutzers (AES-256-CBC)
  2. Berechnung des Hashs zur Serverüberprüfung (SHA-256)

Ebene 2: Benutzer-RSA-Schlüssel

Asymmetrisches Schlüsselpaar für den sicheren Austausch symmetrischer Schlüssel.

ParameterWert
AlgorithmusRSA-OAEP
Moduluslänge2048 Bit
Öffentlicher Exponent65537 (0x010001)
HashfunktionSHA-256
SpeicherformatPEM (PKCS#8 für privat, SPKI für öffentlich)
BibliothekWebCrypto API (crypto.subtle)

Öffentlicher Schlüssel:

  • Wird auf dem Server im Klartext gespeichert
  • Wird zur Verschlüsselung von Tresorschlüsseln bei der Zugangsgewährung verwendet

Privater Schlüssel:

  • Wird auf dem Server in verschlüsselter Form gespeichert
  • Verschlüsselt mit dem Masterschlüssel des Benutzers (AES-256-CBC)
  • Wird lokal nach Eingabe des Masterpassworts entschlüsselt

RSA-Schlüsselgenerierung: Die WebCrypto API generiert das Schlüsselpaar. Der öffentliche Schlüssel wird sofort an den Server gesendet. Der private Schlüssel wird mit dem Masterschlüssel über AES-256-CBC verschlüsselt und in verschlüsselter Form an den Server gesendet.


Ebene 3: Tresorschlüssel

Der Tresorschlüssel ist ein symmetrischer Schlüssel, der alle Einträge innerhalb des Tresors schützt.

ParameterWert
TypSymmetrisch (AES-256-CBC)
Länge100 Zeichen
AlphabetA-Z, a-z, 0-9, @, ! (64 Zeichen)
Eingabeentropie~596 Bit
Effektiver Schlüssel256 Bit (für AES-256)
GenerierungAuf dem Client bei Tresorerstellung
Generatorcrypto.getRandomValues() (Browser-CSPRNG)

Schlüsseltransformation: Die 100-Zeichen-Zeichenfolge wird über eine Schlüsselableitungsfunktion (KDF) in einen 256-Bit-AES-Schlüssel umgewandelt. Während der Verschlüsselung wird ein zufälliges 64-Bit-Salt generiert, das zusammen mit dem Originalschlüssel zur Ableitung des endgültigen 256-Bit-Schlüssels verwendet wird. Das Salt wird zusammen mit dem Chiffretext gespeichert.

Speicherung: Für jeden Benutzer mit Zugang wird eine separate Kopie des Tresorschlüssels erstellt. Jede Kopie wird mit dem öffentlichen RSA-Schlüssel des entsprechenden Benutzers verschlüsselt (RSA-OAEP). Alle Kopien werden auf dem Server gespeichert. Jeder Benutzer kann nur seine eigene Kopie mit seinem privaten RSA-Schlüssel entschlüsseln.


Ebene 4: Eintragschlüssel

Der Eintragschlüssel ist ein einzigartiger Schlüssel zur Verschlüsselung des Inhalts eines Eintrags. Er wird individuell für jeden Eintrag generiert.

ParameterWert
TypSymmetrisch
Länge100 Zeichen
AlphabetA-Z, a-z, 0-9, @, ! (64 Zeichen)
Eingabeentropie~596 Bit
Effektiver Schlüssel256 Bit (für AES-256)
GenerierungAuf dem Client bei Eintragserstellung
Generatorcrypto.getRandomValues() (Browser-CSPRNG)
SpeicherungVerschlüsselt mit Tresorschlüssel (AES-256-CBC)

Schlüsseltransformation: Die 100-Zeichen-Zeichenfolge wird über eine Schlüsselableitungsfunktion (KDF) in einen 256-Bit-AES-Schlüssel umgewandelt. Während der Verschlüsselung wird ein zufälliges 64-Bit-Salt generiert, das zusammen mit dem Originalschlüssel zur Ableitung des endgültigen 256-Bit-Schlüssels verwendet wird. Das Salt wird zusammen mit dem Chiffretext gespeichert.

Warum 100 Zeichen statt direkt 256 Bit?
  • Vereinheitlichung — einheitliches Format für alle symmetrischen Schlüssel (Tresor, Eintrag, Anhang)
  • Redundante Entropie — 596 Eingabe-Bits gewährleisten maximale Stärke des 256-Bit-Ausgabeschlüssels
  • Zukunftssicherheit — der Wechsel zu längeren Schlüsseln erfordert keine Änderung der Generatoren
  • Kollisionsschutz — die Wahrscheinlichkeit einer Schlüsselkollision ist praktisch null

Was mit dem Eintragschlüssel verschlüsselt wird (AES-256-CBC):

  • Passwortfeld
  • Alle benutzerdefinierten Felder (Name, Wert, Typ)
  • TOTP-Geheimnis
  • Anhangsschlüssel
  • Eintragsrevisionen (vorherige Werte)

Initialisierungsvektor (IV): Für jede Verschlüsselungsoperation wird automatisch ein einzigartiger 128-Bit-IV generiert. Der IV ist im Verschlüsselungsergebnis enthalten.

Alternativer Pfad (Posteingang-Abschnitt): Wenn ein Eintrag direkt an einen Benutzer übertragen wird (ohne Tresorzugang), wird der Eintragschlüssel mit dem öffentlichen RSA-Schlüssel des Empfängers verschlüsselt.


Ebene 5: Anhangsschlüssel

Der Anhangsschlüssel ist ein einzigartiger Schlüssel zur Verschlüsselung einer Datei.

ParameterWert
TypSymmetrisch
Länge100 Zeichen
AlphabetA-Z, a-z, 0-9, @, ! (64 Zeichen)
Eingabeentropie~596 Bit
Effektiver Schlüssel256 Bit (für AES-256)
GenerierungAuf dem Client beim Hochladen einer Datei
Generatorcrypto.getRandomValues() (Browser-CSPRNG)
SpeicherungVerschlüsselt mit Eintragschlüssel (AES-256-CBC)

Schlüsseltransformation: Wie bei Tresor- und Eintragschlüsseln wird die 100-Zeichen-Zeichenfolge über KDF mit einem 64-Bit-Salt in einen 256-Bit-AES-Schlüssel umgewandelt.

Dateiverschlüsselungsprozess:

  1. Ein zufälliger Anhangsschlüssel (256 Bit) wird generiert
  2. Die Datei wird mit diesem Schlüssel verschlüsselt (AES-256-CBC)
  3. Der Anhangsschlüssel wird mit dem Eintragschlüssel verschlüsselt
  4. Beide verschlüsselten Objekte werden an den Server gesendet

Entschlüsselungskette

Entschlüsselungssequenz beim Zugriff auf einen Eintrag:

  1. Benutzer gibt das Masterpasswort ein
  2. Client fordert Salt und PBKDF2-Parameter vom Server an
  3. Client berechnet den Masterschlüssel: PBKDF2(password, salt, 300000, 64, SHA-256)
  4. Client berechnet den Hash: SHA-256(master key)
  5. Client sendet den Hash zur Überprüfung an den Server
  6. Server überprüft den Hash und gibt den verschlüsselten privaten RSA-Schlüssel zurück
  7. Client entschlüsselt den RSA-Schlüssel mit dem Masterschlüssel (AES-256-CBC)
  8. Client fordert Tresordaten an
  9. Server gibt den verschlüsselten Tresorschlüssel und die Einträge zurück
  10. Client entschlüsselt den Tresorschlüssel mit dem privaten RSA-Schlüssel (WebCrypto RSA-OAEP)
  11. Client entschlüsselt den Eintragschlüssel mit dem Tresorschlüssel (AES-256-CBC)
  12. Client entschlüsselt die Eintragsfelder mit dem Eintragschlüssel (AES-256-CBC)
  13. (Bei Bedarf) Client entschlüsselt den Anhangsschlüssel → entschlüsselt die Datei

Schlüsseleigenschaften-Tabelle

SchlüsselAlgorithmusLängeEntropieGenerierungsortSpeicherort
Masterpasswort≥12 ZeichenAbhängig vom BenutzerBenutzerNirgends
PBKDF2-Salt20 Zeichen~120 BitServerServer (offen)
MasterschlüsselPBKDF2-SHA256512 Bit512 BitClientNirgends (im Speicher)
Öffentlicher RSA-SchlüsselRSA-OAEP2048 BitClientServer (offen)
Privater RSA-SchlüsselRSA-OAEP2048 BitClientServer (verschlüsselt)
TresorschlüsselAES-256-CBC100 Zeichen → 256 Bit~596 Bit EingabeClientServer (RSA-verschlüsselt)
EintragschlüsselAES-256-CBC100 Zeichen → 256 Bit~596 Bit EingabeClientServer (verschlüsselt)
AnhangsschlüsselAES-256-CBC100 Zeichen → 256 Bit~596 Bit EingabeClientServer (verschlüsselt)
ServerschlüsselAES-256-CFB256 Bit256 BitServerDatei auf dem Server

Sicherheitsprinzipien der Hierarchie

Ebenenisolierung

Die Kompromittierung eines Schlüssels auf einer Ebene gibt keine Schlüssel auf anderen Ebenen preis:

  • Das Bekanntwerden eines Eintragschlüssels gibt keine anderen Einträge preis
  • Das Bekanntwerden eines Tresorschlüssels gibt keine Einträge in anderen Tresoren preis
  • Das Bekanntwerden eines privaten RSA-Schlüssels erfordert die Kenntnis des Masterschlüssels

Minimierte Speicherung

  • Masterpasswort und Masterschlüssel werden nicht dauerhaft gespeichert
  • Der private RSA-Schlüssel wird nur in verschlüsselter Form gespeichert
  • Eintrags- und Anhangsschlüssel werden nur in verschlüsselter Form gespeichert

Schlüsseleinzigartigkeit

  • Jeder Benutzer hat ein einzigartiges RSA-Schlüsselpaar
  • Jeder Tresor hat einen einzigartigen Schlüssel
  • Jeder Eintrag hat einen einzigartigen Schlüssel
  • Jeder Anhang hat einen einzigartigen Schlüssel

Zero-Knowledge

Der Server speichert nur:

  • Verschlüsselte Daten
  • Verschlüsselte Schlüssel
  • Öffentliche Schlüssel
  • Hashes zur Überprüfung (die keine Wiederherstellung des Geheimnisses erlauben)

Der Server kann Benutzerdaten nicht entschlüsseln.