Technical Deep Dive

What End-to-End Encryption Actually Protects (And What It Doesn't)

April 25, 2026 10 min read Haven Team

End-to-end encryption is simultaneously the most important concept in secure communication and one of the most misunderstood. It is not a synonym for "private." It solves one specific problem exceptionally well — and leaves several adjacent problems completely untouched.


Let's build a precise model. End-to-end encryption means that a message is encrypted on the sender's device, travels encrypted through all intermediaries, and is only decrypted on the recipient's device. No server in the middle — not the service provider's infrastructure, not your ISP's routers — can read the content.

This is genuinely powerful. It means that even if Signal's servers are compromised, even if a government serves Signal with a lawful demand for your messages, even if someone intercepts your traffic at a coffee shop, the message content is unreadable to anyone except the intended recipient.

What it does not mean is that using an E2EE app makes you private. These are different claims, and the gap between them is significant.

How E2EE Actually Works

The mechanics differ between systems, but the core structure is consistent. We'll use the Signal Protocol as a concrete example since it's the most widely deployed and publicly documented.

Key Exchange

Before two parties can exchange encrypted messages, they need to establish a shared secret without transmitting it — because transmitting a secret over an untrusted network defeats the purpose. The Signal Protocol uses a construction called X3DH (Extended Triple Diffie-Hellman).

Each user generates several key pairs when they register:

# Each user generates at registration: IK = Identity Key (long-term, never changes) SPK = Signed PreKey (rotated periodically, signed by IK) OPK = One-Time PreKey (consumed once per session, then discarded) # The public halves of SPK and OPK are uploaded to the server. # The server holds public keys only — it cannot derive the private keys.

When Alice wants to send Bob his first message, Alice fetches Bob's public keys from the server. Alice then performs a series of Diffie-Hellman operations combining her private keys with Bob's public keys, producing a shared secret that Bob can derive independently on his end — but that no third party who observed the key exchange can compute. This is the "ratchet" that makes Signal's encryption forward-secret.

Forward Secrecy and the Double Ratchet

Forward secrecy means that compromising today's keys does not decrypt past messages. Signal achieves this through the Double Ratchet Algorithm, which generates a new encryption key for every message.

# Simplified: each message advances the ratchet message_key_1 = KDF(chain_key_0) message_key_2 = KDF(chain_key_1) message_key_3 = KDF(chain_key_2) # Each message_key is used once, then deleted. # Compromise of message_key_3 gives the attacker nothing # about message_key_1 or message_key_2.

The practical implication: an attacker who intercepts and stores your encrypted Signal messages today cannot decrypt them even if they obtain your device's private key in the future — because the keys that decrypted those messages have already been deleted.

Group Messaging and MLS

The Double Ratchet scales to two-party conversations. Group messaging is harder. Traditional approaches (like iMessage groups) encrypt to each member individually, which means the sender's work scales linearly with group size, and adding or removing members is complicated.

RFC 9420 — the Messaging Layer Security (MLS) protocol — solves this with a tree-based key structure. The group shares a key derived from a binary tree where each leaf is a member's identity key. Adding or removing a member requires only a logarithmic number of key updates rather than a full re-key of every pair.

# MLS tree structure (4-member group) root_secret / \ left_secret right_secret / \ / \ Alice Bob Carol Dave # Adding Eve: only the path from Eve's leaf to root is updated. # Everyone else derives the new root from their existing subtree secret. # O(log n) operations instead of O(n).

MLS also provides stronger security guarantees than ad-hoc group encryption: post-compromise security (PCS), meaning that if a member's device is compromised, they can be healed back to security through key rotation without the attacker being able to read future messages.

What E2EE Protects Against

Protected
Server compromise — An attacker who breaches the service provider's infrastructure obtains ciphertext they cannot decrypt.
Protected
Network interception — Traffic captured in transit is encrypted and unreadable without the recipient's private key.
Protected
Service provider access — The provider cannot read message content even under legal compulsion — there is nothing readable to hand over.
Protected
Historical messages — With forward secrecy, past messages remain encrypted even after future key compromise.

What E2EE Does Not Protect Against

Not Protected
Metadata — Who you communicate with, when, how often, and from where are visible to the service provider and the network. E2EE encrypts payload, not envelope.
Not Protected
Endpoint compromise — If an attacker controls either device — via malware, physical access, or a compromised OS — they read the plaintext before encryption or after decryption. E2EE only protects data in transit.
Not Protected
Key distribution attacks — A service provider who controls the key directory can substitute an attacker's key for your contact's key. You would encrypt to the attacker, thinking you're encrypting to your contact. This is the MITM problem that key verification (safety numbers in Signal, key fingerprints in PGP) exists to address.
Not Protected
Identity linkage — If your account requires a phone number, your encrypted communications are linked to your carrier identity. E2EE says nothing about who you are, only that what you said is private.
Partial
Stored messages — If encrypted messages are backed up to cloud storage without E2EE (iCloud backups of iMessage, pre-2022), the backup is the vulnerability. E2EE only applies to transmission unless explicitly extended to storage.

The Key Distribution Problem

The most underappreciated weakness in practical E2EE deployments is key distribution. The security of an E2EE system depends on you actually encrypting to the right key. How do you know the key your app fetched for "alice@example.com" actually belongs to Alice?

In practice, most users trust the key server. Signal publishes your public key; when Bob wants to message you, Signal's server tells Bob's client what your key is. If Signal's server were compromised or malicious, it could substitute a different key — an attacker's key — and Bob's client would silently encrypt to the attacker.

The cryptographic solution is key verification: comparing key fingerprints out-of-band (in person, via phone call) to confirm you're both using the same keys. Signal calls these "safety numbers." PGP calls them key fingerprints. In practice, almost no users do this.

This is not a theoretical problem. Law enforcement and intelligence agencies have legal mechanisms to compel service providers to serve modified key material to specific targets. A well-designed E2EE system makes this detectable — safety number changes trigger alerts — but only if the user pays attention.

Zero-Knowledge Architecture Goes Further

E2EE protects messages in transit. Zero-knowledge architecture extends the protection to stored data: your messages, email, and files are encrypted before they leave your device, using keys derived from your passphrase that the server never sees.

The difference matters for stored data. An E2EE messaging app that stores encrypted message history on its servers has protected your messages in transit, but the server holds ciphertext that it can hand to a third party. A zero-knowledge system means the server has ciphertext and no ability to derive the keys — even a lawful demand for the encrypted data produces data that cannot be decrypted without the user's passphrase.

Haven implements zero-knowledge architecture for email: your email is encrypted client-side using PGP keys derived from your passphrase. The server never sees the plaintext. Combined with E2EE chat via MLS, the system applies end-to-end encryption to transit and zero-knowledge encryption to storage — two different security properties that together close the gap between "encrypted in transit" and "actually private."

The Practical Takeaway

E2EE is necessary but not sufficient for private communication. Metadata protection, zero-knowledge storage, identity without a phone number, and key verification are the remaining layers. Any one of them missing represents a gap that content encryption does not fill.

The question to ask about any "encrypted" app is not "does it use encryption?" but "what threat model does it actually address, and what does it leave to other mitigations?" The answer should come from the technical architecture, not the marketing copy.

E2EE + zero-knowledge storage, combined

Haven applies end-to-end encryption to messages in transit and zero-knowledge encryption to stored email. No phone number. No plaintext on our servers.

Try Haven Free →