When a client asks for a « secure vault », the tempting shortcut is to encrypt files at the DB layer and call it zero-knowledge. It isn't. Credible zero-knowledge requires the key to never leave the client device.
What LockVault does
- The user enters a password in the browser.
- Argon2id derives an account key (64 MB memory, 3 iterations, 4 parallelism).
- Each file is encrypted with AES-256-GCM using a random IV; the file key is wrapped by the account key.
- Only the encrypted blob + anodyne metadata (size, date, encrypted name) reaches the server.
Why not « we encrypt at rest »
If the key travels to the API, a DB dump or an error log exposes it. The moment the server can read the cleartext, it stops being zero-knowledge and becomes encryption-at-rest. Both have their place, but name them honestly.
Assumed limits
- Strength depends on password quality (hence Argon2id).
- Revoking a recipient implies rotating the vault key — supported, but costly.
The outcome: an admin can manage accounts without ever reading a document. Verifiable by design, not by promise.