Skip to main content

Command Palette

Search for a command to run...

Zero-knowledge password managers: how client-side encryption works

Learn how zero knowledge password managers protect your data with client-side encryption, key derivation, and why even the service provider

Updated
•5 min read•View as Markdown
Zero-knowledge password managers: how client-side encryption works

The Problem with Traditional Cloud Security

A zero-knowledge password manager encrypts vault contents on the user's device before storing them elsewhere. The service is not meant to receive the plaintext or the vault decryption key. LastPass describes this client-side model; it is not exclusive to VaultKeepR.

A stolen encrypted vault still matters. An attacker can try guesses offline, where account rate limits and login MFA no longer protect the stolen ciphertext. The strength of the unlocking secret and the key-derivation settings affect that risk. This guide explains the general model; the VaultKeepR architecture article covers the product-specific choices.

What Zero Knowledge Actually Means

Zero knowledge doesn't mean "we promise not to look." It means "we literally cannot look, even if we wanted to." This is achieved through client-side encryption where all cryptographic operations happen on your device, not on remote servers.

Here's how it works in practice:

Client-Side Key Derivation

When you create an account, your master password undergoes key derivation on your device:

// Simplified example of PBKDF2 key derivation
const masterKey = await crypto.subtle.deriveKey(
  {
    name: 'PBKDF2',
    salt: userSalt,
    iterations: 100000,
    hash: 'SHA-256'
  },
  passwordKey,
  { name: 'AES-GCM', length: 256 },
  false,
  ['encrypt', 'decrypt']
);

The derived key is used locally. Some designs derive a separate verifier for account authentication; that verifier must not grant the server access to the vault encryption key. The PBKDF2 example above illustrates a mechanism, not current VaultKeepR parameters or a recommended deployment configuration.

Encryption Before Transit

Every piece of sensitive data gets encrypted locally:

const encryptedPassword = await crypto.subtle.encrypt(
  {
    name: 'AES-GCM',
    iv: crypto.getRandomValues(new Uint8Array(12))
  },
  masterKey,
  new TextEncoder().encode(plainTextPassword)
);

Only the encrypted payload should travel to storage. Ciphertext still needs protection and backups: an attacker can copy it for offline guessing, while a storage operator can make it unavailable.

What the cryptography protects

Authenticated encryption protects confidentiality and detects modifications. A password-based KDF makes guessing more expensive; it does not give a weak password the entropy of a randomly generated key. Random salts and correctly managed nonces are part of the design.

These controls do not protect an unlocked device from malware or a malicious client update. Consult the threat model for those boundaries.

Real-World Implementation Challenges

Key Management Complexity

The biggest challenge isn't encryption—it's key management. Lose your master password, and your data is gone forever. Traditional solutions use:

  • Security questions (weak and often guessable)
  • Recovery codes (easily lost or stolen)
  • Account recovery emails (single point of failure)

Cross-Device Synchronization

Syncing encrypted data across devices while maintaining zero knowledge requires careful coordination. Each device needs the decryption key, but transmitting it securely presents a bootstrapping problem.

VaultKeepR's Decentralized Approach

VaultKeepR is one example, rather than the definition of zero-knowledge. Its snapshots are encrypted locally with XChaCha20-Poly1305, and password-based paths use Argon2id.

The client encrypts vault snapshots before upload. Storage can involve IPFS gateways, pinning services, hosted APIs and S3-compatible backends. These services handle ciphertext, while timing, size, CIDs and on-chain activity may remain observable. IPFS content addressing does not guarantee persistence: retain an independent encrypted backup and test retrieval. The sync documentation and threat model describe those dependencies.

VaultKeepR Premium uses Shamir 3-of-5 recovery for the vault encryption key. The five configured channels are the device, remote storage, a trusted contact or QR handoff, a smart contract, and the API. Any three valid fragments can reconstruct the key; losing too many fragments or the recovery identifier can prevent recovery. See the current SDK defaults, channel distribution, and recovery guide. This recovers a vault key, not a hardware passkey or each seed phrase stored in the vault.

Digital inheritance is separate from personal recovery. VaultKeepR's legacy flow uses a heartbeat, an inactivity delay and a grace period before a designated beneficiary can claim access. The vault key and location are carried in beneficiary-specific envelopes encrypted with ECDH, HKDF and XChaCha20-Poly1305, as shown in the public implementation and recovery and legacy guide. A missed heartbeat is not proof of death. Test the configuration and coordinate it with legal estate instructions.

Implementing Zero Knowledge Today

If you're building or evaluating zero knowledge systems:

  1. Verify client-side encryption: Check that encryption happens in your browser before data transmission
  2. Audit the key derivation: Ensure passwords undergo proper stretching (PBKDF2, scrypt, or Argon2)
  3. Test recovery scenarios: Confirm that service providers cannot assist with password recovery
  4. Review the source code: Open source implementations allow independent security audits

Encryption is not a zero-knowledge proof

Client-side encryption and zero-knowledge proofs solve different problems. Encrypting a vault does not mean its provider uses zkSNARKs or can prove every implementation claim. Assess the actual client, recovery design and accepted risks rather than a future prediction.

Taking Control of Your Digital Security

When comparing managers, look for documented key derivation, client-side encryption and a recovery process you can test. Ask what metadata is visible and how you will recover an encrypted backup. A label alone does not answer those questions.

More from this blog

V

VaultKeepR - Password Manager Zero Knowledge - No Account - No Email

86 posts

Building a password manager with no email signup, no account, and zero-knowledge encryption. The engineering behind VaultKeepR, open source: Argon2id and XChaCha20-Poly1305 in TypeScript, Solidity contracts on Base, wallet-based identity, CRDT sync, IPFS storage, fragmented recovery, digital legacy. Working code, threat models, Foundry tests, and the trade-offs we argue about. MIT, reuse it.