Skip to content
Back to Blog
SecurityBy Ciphera Team9 min read10-03-2026

Zero-Knowledge Encryption Guide (2026)

Every cloud service promises it can't read your data. Very few can show you why that's true instead of asking you to take their word for it. The difference between the two is the difference between a policy — which can change, be subpoenaed, or be quietly violated — and an architecture, which can't.

This guide explains zero-knowledge encryption in plain English, using a system you can actually inspect: our own. Ciphera's authentication stack is open source, so every claim in this post links to real code, a real protocol spec, or a real database migration. No math degree required — but receipts throughout.

TL;DR:

Zero-knowledge encryption means the service storing your data structurally cannot read it — encryption and key material live on your device, and the server only ever holds ciphertext. We walk through our own production login flow (OPAQUE, RFC 9807) as the worked example: what your browser computes, what our server stores, and why a full database breach would yield nothing usable.

Update, 19-07-2026 — this guide was rewritten. The previous version misdescribed our own authentication as layered password hashing. The real system is OPAQUE, a password-authenticated key exchange: no password-derived value is ever transmitted to our servers in any form. The corrected walkthrough is below.

What "Zero-Knowledge" Actually Means (and What It Doesn't)

Think of a safety deposit box. A traditional cloud service is a bank vault: you hand over your valuables, the bank locks them up, and the bank keeps a copy of the key. They promise security — but they can open your box any time, and so can anyone who compels or compromises them. Zero-knowledge encryption is different: you bring your own padlock, you keep the only key, and the bank stores a sealed box it cannot open.

Formally: all encryption and decryption happens on your device, your keys never leave your device, and the server receives, stores, and serves only ciphertext. The provider's knowledge of your data is zero — not by promise, by construction.

Two distinctions worth making before we go further:

Zero-knowledge encryption is not zero-knowledge proofs. ZKPs are a mathematical protocol for proving you know something without revealing it (NIST); ZKE describes a service architecture. The naming overlap is mostly coincidence — though as you'll see below, modern login protocols like OPAQUE genuinely borrow from the proof-without-revealing idea.

Zero-knowledge encryption is stronger than end-to-end encryption. All ZKE is E2EE, but some E2EE systems still derive or escrow keys server-side, leaving the provider a theoretical path to plaintext. ZKE closes that path entirely.

Why Server-Side Encryption Keeps Failing

Most breached companies had encryption. The Dropbox Sign breach of April 2024 is the instructive example — and it's usually told wrong. The attacker didn't crack any cipher or steal decryption keys. They compromised an automated service account and walked in through the front door with legitimate backend access, reaching customer emails, hashed passwords, API keys, OAuth tokens, and MFA data. The encryption at rest was real. It just didn't matter, because encryption the server can undo is undone the moment someone becomes the server.

That's the general pattern: server-side encryption protects against stolen disks. It does not protect against the vendor itself, compromised employee or service accounts, government compulsion, or bugs in the key-management layer. Credential theft was the top attack vector in cloud breaches again in 2025 (Thales, 2026) — and stolen credentials grant exactly the access that server-held keys were supposed to gate.

Zero-knowledge architecture changes what a breach is. If the server never holds plaintext or keys, then full server compromise yields ciphertext and nothing else. You can't leak what you never had.

A Worked Example: Logging In Without Ever Sending a Password

Here's where most explanations go abstract. We'll do the opposite and walk through our production system. Ciphera ID uses OPAQUE, an asymmetric password-authenticated key exchange standardized in RFC 9807, via Tessera, our open-source implementation. The property that makes OPAQUE remarkable: the server verifies your password without ever seeing your password — or any hash of it, or anything derived from it.

When you sign up:

  1. Your browser computes two independent things. From your email, it derives a blind index — PBKDF2-SHA256 at 1,000,000 iterations (blind-index.ts) — which becomes the server's only way to look up your account. The server never stores your email address in readable form.
  2. From your password, the browser runs the OPAQUE registration exchange: an oblivious pseudorandom function (OPRF) over Ristretto255, with Argon2id as the key-stretching function. The ciphersuite is RFC 9807's recommended configuration; the Argon2id cost parameters (64 MiB memory, 3 passes) are our own pinned deployment choice in Tessera's client. What travels to the server is a blinded registration message — not the password, not a hash, not anything an attacker could brute-force offline.
  3. The exchange yields two outputs. The server gets a credential record to store — an opaque envelope it cannot invert. Your browser gets a 64-byte export_key that the server never sees and mathematically cannot compute.
  4. Your browser then generates a random 32-byte vault master key (VMK), encrypts your profile data (name, email, settings) under it, and wraps the VMK itself under a key derived from export_key. The wrapped key is a 61-byte envelope; the VMK inside it never exists on our servers in unwrapped form.

When you log in:

  1. Your browser recomputes the blind index from your email and starts an OPAQUE login exchange.
  2. The server looks up your credential record and responds. It learns nothing about the password you typed — for accounts that don't exist, it even responds with a timing-safe decoy record, so an attacker can't probe which emails are registered.
  3. If — and only if — you typed the right password, your browser independently re-derives the same export_key from the exchange. Wrong password, wrong key, and the login simply fails. Nothing transmitted at any step is offline-attackable.
  4. Your browser uses the export_key to unwrap your VMK — imported as a non-extractable WebCrypto key, meaning even our own frontend code can't export its bytes, only use it — and decrypts your vault locally.

Notice what never happened: no password left your device in any form, and no decryption key was ever held by, transmitted to, or reconstructable by the server. That is zero knowledge as an engineering fact rather than a slogan.

What a Full Database Breach Would Yield

The honest way to evaluate any zero-knowledge claim is to enumerate what the server actually stores and ask what each item is worth to an attacker. For a Ciphera ID account, a complete database dump contains, per user:

Stored fieldWhat it isWhat an attacker gets
opaque_recordThe OPAQUE credential envelopeNothing without a per-guess brute force, each guess paying the full Argon2id cost (64 MiB, 3 passes)
opaque_credential_id16 random bytesNothing — it's random
email_blind_indexThe PBKDF2 email digest, HMAC-peppered again server-sideNo email address; peppering means even a rainbow table of common emails doesn't apply outside our infrastructure
encrypted_vaultYour profile data, AES-256-GCM under the VMKCiphertext
opaque_wrapped_keyThe VMK, wrapped under a key derived from your export_keyA locked box whose key only your password or recovery phrase can re-derive

No password column. No password-hash column in the classical crackable sense. No plaintext email. This isn't a redacted summary — it's the actual schema, and you can trace its history in our migrations: the last legacy authentication columns (from the SRP protocol we previously ran) were dropped on 18-06-2026 when the OPAQUE migration completed. For the full accounting of everything we can and cannot see across all our products, read what we see about you, what we don't.

The Limits: What ZKE Cannot Protect Against

No encryption system protects against everything, and vendors who skip this section are selling, not explaining.

Endpoint compromise. If malware runs on your device, it sees what you see — before encryption happens. ZKE protects data in transit and at rest, not a compromised screen and keyboard.

Weak passwords. OPAQUE's Argon2id stretching makes each guess expensive, and its design means guesses can only be made online against our rate-limited servers — a major upgrade over crackable stolen hashes. But "correct horse battery staple" still beats "hunter2".

Metadata. Zero-knowledge applies to content. A server still observes that an account exists, when it authenticates, and how large its ciphertext is. We minimize this (blind indexes exist precisely to take email addresses out of that picture), but minimized is not zero.

User error. Losing both your password and your recovery phrase means losing your data — there is no backdoor for us to helpfully use. That trade-off is the entire point, and you should walk into it with open eyes.

Our take: these limitations are why we publish them. A vendor who claims zero knowledge and effortless password recovery and helpful support access to your files is describing a system that cannot exist. Honest architecture has sharp edges.

Verify, Don't Trust: The Code Is Public

Everything described above is inspectable. Tessera — the OPAQUE core, the sidecar service, and the SDKs — is open source under Apache-2.0:

  • ciphera-tessera — the Rust core and sidecar, built on the widely used opaque-ke implementation, #![forbid(unsafe_code)], with the cipher suite pinned to RFC 9807's recommended configuration (Ristretto255-SHA512, 3DH, Argon2id).
  • @ciphera-net/tessera — the browser SDK: OPAQUE flows, blind index, vault, BIP-39 recovery, WebAuthn-PRF.
  • tessera-go — the server-side SDK our backend uses to relay OPAQUE messages to the sidecar.

One disclosure we make prominently, because a receipts-driven post cuts both ways: Tessera has not yet had an independent third-party audit. We've published our threat model, security docs, and a detailed self-audit in the repositories, and an external audit is planned — but until it happens, "audited" is a claim you won't find us making. What you can do today is read the code, which is more than most zero-knowledge claims allow.

How to Spot Fake Zero-Knowledge

Four questions expose most pretenders in five minutes:

  1. Can they reset your password without you? If yes, a key exists outside your control. (We can't — a password change requires your device re-running OPAQUE registration.)
  2. Does account recovery work without a recovery secret you generated? If yes, that's a backdoor with a friendlier name. (Ours requires the 24-word phrase your device minted at signup.)
  3. Can support access your data "for troubleshooting"? Then it isn't zero-knowledge, whatever the marketing page says.
  4. Are the clients closed-source? Client-side encryption you can't inspect is client-side encryption you're taking on faith.

Ask these of any vendor — including us. The difference with a zero-knowledge architecture is that the answers are properties of the system, not promises of the company. Policies change with ownership, jurisdiction, and pressure. Architecture doesn't care who's asking.

If you want the broader philosophy behind building this way, read why privacy can't be an afterthought — and if you want to see the full inventory of what a company that can't see your data actually does see, we wrote that down too.

FAQ

Frequently Asked Questions

Often, but not always. End-to-end encryption means data is encrypted from sender to recipient with no intermediary access. Some E2EE implementations still derive or escrow keys server-side, giving the provider a theoretical access path. Zero-knowledge encryption is the stronger guarantee: the provider has zero access to keys or plaintext by architecture. All ZKE is E2EE, but not all E2EE is ZKE.

They share a name but are different things. Zero-knowledge proofs (ZKPs) are a cryptographic protocol where one party proves knowledge of something without revealing it — used in blockchain and authentication research. Zero-knowledge encryption describes a service architecture where the provider has no access to your plaintext data. OPAQUE, the protocol we use for login, borrows ideas from this family: the server verifies you know your password without ever learning it.

You recover access with your 24-word recovery phrase, which was generated on your device when you signed up. The phrase unwraps the same vault key your password did, and you can then set a new password. Without either the password or the phrase, nobody can restore access — including us. That is not a support limitation; it is the security property working as designed.

No. There is no password stored anywhere to reset, and no server-side key that can decrypt your vault. A password change is your device re-running the OPAQUE registration and re-wrapping your vault key — it requires you. Any vendor that CAN reset your password without you holds keys to your data, which is exactly what the zero-knowledge test in this guide checks for.

Per user: an OPAQUE credential record (useless without running a full Argon2id-cost brute force per password guess), a random credential identifier, a blinded email-lookup hash, an encrypted profile vault, and a wrapped vault key that only your password or recovery phrase can unwrap. No password, no password hash in the classical sense, no plaintext email, no decryption keys.

Related Articles

Get started

Put this into practice.

Ciphera builds privacy-first infrastructure — analytics, identity, bot protection, and email that don’t surveil. The tools this article describes are the ones we run.