Hex-Viewer
🔬Aufbau einer KDBX-Datei – Byte für Byte
Jede farbige Fläche ist ein Feld aus der Spezifikation. Der äußere Header ist ohne Passwort lesbar; mit Passwort kommen die entschlüsselten und entpackten Bytes (innerer Header + XML) als weitere Ansichten dazu.
Demo-Datenbank|
Schlüsseldatei (optional)
🧅Die Schichten im Überblick
KDBX 4.x (Datei) Offset
┌──────────────────────────────────────────────────────┐
│ 03 D9 A2 9A Signatur 1 0x9AA2D903 │ 0
│ 67 FB 4B B5 Signatur 2 0xB54BFB67 │ 4
│ 01 00 04 00 Version 4.1 (Minor, Major) │ 8
├──────────────────────────────────────────────────────┤
│ [ID][Int32 Länge][Daten] CipherID · Compression · │ 12
│ MasterSeed · EncryptionIV · KdfParameters (VD) · │
│ PublicCustomData · EndOfHeader (ID 0) │
├──────────────────────────────────────────────────────┤
│ SHA-256(Header) 32 Byte │
│ HMAC-SHA-256(Header) 32 Byte <- Passwort-Test│
├──────────────────────────────────────────────────────┤
│ Block 0: [HMAC 32][Int32 n][n Byte Chiffretext] │
│ Block 1: … │
│ Endblock: [HMAC 32][00 00 00 00] │
└──────────────────────────────────────────────────────┘
│ entschlüsseln (AES-256-CBC / ChaCha20)
▼ entpacken (gzip)
┌──────────────────────────────────────────────────────┐
│ innerer Header: StreamID 3 · StreamKey 64 B · Binary │
│ XML: <KeePassFile><Meta/><Root><Group><Entry>… │
└──────────────────────────────────────────────────────┘KDBX 3.1 (Datei)
┌──────────────────────────────────────────────────────┐
│ Signaturen · Version 3.1 (01 00 03 00) │
│ [ID][UInt16 Länge][Daten] … zusätzlich: │
│ TransformSeed · TransformRounds · ProtectedStreamKey│
│ StreamStartBytes · InnerRandomStreamID │
├──────────────────────────────────────────────────────┤
│ AES-256-CBC-Chiffretext (ohne äußere Blöcke) │
└──────────────────────────────────────────────────────┘
│ entschlüsseln
▼
┌──────────────────────────────────────────────────────┐
│ StreamStartBytes (32 B) <- Passwort-Test │
│ Hash-Block: [UInt32 i][SHA-256][Int32 n][Daten] … │
└──────────────────────────────────────────────────────┘
▼ gzip → XML (Anhänge Base64 in Meta/Binaries)Little Endian überall
Zahlen stehen mit dem niederwertigsten Byte zuerst. Die Länge 32 steht als
20 00 00 00 da, die Version 4.1 als 01 00 04 00.TLV = Typ · Länge · Wert
Unbekannte Feld-IDs kann ein Leser überspringen, weil die Länge vorne steht. So bleibt das Format erweiterbar.
Jedes Speichern ändert alles
MasterSeed, EncryptionIV, KDF-Salt und Innenstrom-Schlüssel werden bei jedem Speichern neu gewürfelt. Zwei Speicherstände derselben Datenbank sind Byte für Byte verschieden.