What Does "Zero-Knowledge" Actually Mean in a Password Manager?

Almost every password manager's landing page says some version of "military-grade encryption" and "we can't see your data." Very few explain what that actually requires, technically — or make it possible for you to check.

"Zero-knowledge" gets used loosely enough in marketing that it's worth being precise about what it actually means, what it takes to build correctly, and — just as importantly — what it doesn't protect you from.

The technical bar, stated plainly

A password manager is genuinely zero-knowledge only if all three of these are true at the same time:

  1. The key never leaves your device. The encryption key used to protect your vault is derived locally, on your device, from your master password — using a slow, memory-hard function like Argon2id or PBKDF2, not a fast general-purpose hash. That derivation never touches the server, in any form.
  2. Encryption and decryption happen locally. Every time an item is saved or read, the actual AES encryption/decryption runs in your browser or app — not on a server, even briefly, even "just this once for search indexing" (a surprisingly common shortcut).
  3. The server only ever stores or receives ciphertext. Not "encrypted at rest" (which usually means the provider holds the key and encrypts their disks — they can still read your data on request). Ciphertext the provider cannot decrypt, plus the minimum non-reversible data needed to authenticate you.

Drop any one of these and you get something else: "encrypted," "encrypted at rest," or "we promise not to look" — all meaningfully weaker than zero-knowledge, and all frequently described using the same reassuring adjectives.

A concrete failure mode: the login step

The part people miss most often is authentication. If your password manager's server can compare your master password (or something directly derived from it) against a stored value to log you in, the server had to see that value at some point during login — which means it could have kept it. A correctly designed system never sends the encryption key or anything that trivially reconstructs it to the server, even during login.

The standard pattern: your master password is split, locally, into two independent keys via a KDF like HKDF — an encryption key that only ever touches your vault's ciphertext, and a separate auth key that only ever proves you know the master password. The server stores a one-way verifier derived from the auth key — not the auth key itself, and never the encryption key. You can flip the verifier around all day and never recover either key.

How to actually check a vendor's claim (instead of trusting the landing page)

What zero-knowledge doesn't protect you from

This is the part vendors, understandably, spend less time on. Being honest about it matters more than the marketing copy:

  • Malware or a keylogger already running on your device — zero-knowledge protects data in transit and at rest on the server, not a compromised endpoint.
  • A weak or reused master password. The strongest KDF in the world doesn't help if your master password is password123.
  • Phishing that tricks you into typing your master password into a fake login page.
  • Losing your master password with no backup. There is no "reset" that doesn't break the model — treat your master password like the one physical key to a safe, because that's what it is.

How Spassword implements this

We built Spassword's encryption specifically to satisfy all three requirements above, not just the marketing version of them:

We're also upfront about where we're not finished: Spassword hasn't been through a formal third-party security audit yet (we're a small, independent project — we'll pursue one as we grow), and our authentication currently uses a simplified verifier scheme rather than full SRP-6a. We'd rather say that plainly on our security page than let a confident tagline imply otherwise.

See exactly what we store — and don't

Full architecture writeup, honestly listing what's finished and what isn't.

Read the security page
← Back to all posts Next: Passkeys vs. Passwords →