Cryptomator-Tresorformat 8 (moderner Modus von Krywerk)¶
Zusammengefasst am 2026-10-12 aus der offiziellen Dokumentation und dem MIT-lizenzierten Quellcode
(cryptolib/cryptofs). Grundlage für kw-format. Quellen am Ende.
Dateien im Tresor-Stammordner¶
vault.cryptomator– JWT, signiert mit HMAC (HS256; HS384/HS512 werden akzeptiert), Schlüssel = Verschlüsselungs-Masterkey ‖ MAC-Masterkey (64 Byte). Header:kid = "masterkeyfile:masterkey.cryptomator",typ = "JWT",alg = "HS256". Payload:format = 8,shorteningThreshold = 220,jti= zufällige UUID,cipherCombo = "SIV_GCM".masterkey.cryptomator– JSON:version(999, veraltet),scryptSalt(Base64),scryptCostParam(32768),scryptBlockSize(8),primaryMasterKeyundhmacMasterKey(je 32 Byte, mit AES Key Wrap RFC 3394 unter dem KEK verpackt),versionMac= HMAC-SHA256(MAC-Masterkey,versionals uint32 Big-Endian). KEK = scrypt(Passwort UTF-8, Salt, N, r, p = 1, 32 Byte).d/– Datenordner.
Ordner¶
- Ordner-ID: Stamm =
"", sonst zufälliger ASCII-String ≤ 36 Zeichen (UUID). dirIdHash = Base32(SHA-1(AES-SIV(encKey, macKey, UTF-8(dirId))))(RFC 4648, 32 Zeichen).- Physischer Ordner:
d/+ erste 2 Zeichen +/+ restliche 30 Zeichen. Alle Ordner liegen flach. - Ein Ordner-Eintrag ist ein Ordner
<name>.c9rmit der Dateidir.c9r, die die Ordner-ID im Klartext (UTF-8) enthält. - Optional
dirid.c9rim physischen Ordner: die eigene Ordner-ID, verschlüsselt wie eine Datei (Wiederherstellungshilfe, keine Sicherheitsfunktion).
Namen¶
- Klartextname → Unicode NFC → UTF-8 → AES-SIV (RFC 5297; Aufruf
encrypt(encKey, macKey, …)= S2V/CMAC mit MAC-Key, CTR mit Enc-Key) mit Associated Data = UTF-8 der Eltern-Ordner-ID → Base64url mit Padding → Endung.c9r. - Ist der Name inkl.
.c9rlänger als 220 Zeichen: OrdnerBase64url(SHA-1(UTF-8(langer Name))) + ".c9s"mitname.c9s(langer Name als UTF-8) und – bei Dateien –contents.c9r, bei Ordnerndir.c9r, bei Symlinkssymlink.c9r.
Dateiinhalt¶
- Header (68 Byte): Nonce (12) ‖ AES-256-GCM(Masterkey-Enc, Nonce, ohne AAD)(Payload 40 Byte) ‖ Tag (16).
Payload = 8 Byte
0xFF(reserviert, früher Dateigröße) ‖ Inhaltsschlüssel (32 Byte, zufällig). - Inhalt in Blöcken zu 32 KiB Klartext; Block = Nonce (12, zufällig) ‖ AES-256-GCM(Inhaltsschlüssel) (Klartext) ‖ Tag (16), also bis 32 768 + 28 Byte. AAD = Blocknummer (uint64 Big-Endian) ‖ Header-Nonce. Nur der letzte Block darf kürzer sein. Leere Datei = nur Header.
Quellen¶
- https://docs.cryptomator.org/en/latest/security/architecture/ (Vault-Konfiguration, Masterkey-Datei)
- https://docs.cryptomator.org/security/vault/ (Header, Inhalt, Ordner, Namen, Kürzung, dirid.c9r)
- cryptolib
v2/FileNameCryptorImpl.java,FileContentCryptorImpl.java,FileHeaderCryptorImpl.java - cryptofs
common/Constants.java,LongFileNameProvider.java,CryptoPathMapper.java,DirectoryIdLoader.java,DirectoryIdBackup.java