diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index 18811b4..ddea088 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -69,18 +69,27 @@ files: # Encryption config — only present if sgard encrypt init has been run. # Travels with the manifest so a new machine can decrypt after pull. +# KEK slots are a map keyed by user-chosen label. encryption: algorithm: xchacha20-poly1305 - kek_sources: - - type: fido2 - salt: "base64-encoded-16-byte-salt" - wrapped_dek: "base64-encoded-nonce+ciphertext+tag" - - type: passphrase + kek_slots: + passphrase: + type: passphrase argon2_time: 3 argon2_memory: 65536 argon2_threads: 4 - salt: "base64-encoded-16-byte-salt" - wrapped_dek: "base64-encoded-nonce+ciphertext+tag" + salt: "base64..." + wrapped_dek: "base64..." + fido2/workstation: + type: fido2 + credential_id: "base64..." + salt: "base64..." + wrapped_dek: "base64..." + fido2/laptop: + type: fido2 + credential_id: "base64..." + salt: "base64..." + wrapped_dek: "base64..." ``` ### Blob Store @@ -333,19 +342,21 @@ requires re-wrapping the DEK, not re-encrypting every blob. ### KEK Derivation -Two methods. A repo may have either or both: +Two slot types. A repo has one `passphrase` slot and zero or more +`fido2/