← Security
The details

How the encryption works.

From your device to our servers, step by step, with every algorithm named so you can check it against the code.

One file’s journey

Upload, in eight steps.

What happens between “drop file” and “file is stored”. The file is encrypted before it leaves your device. Your password is never sent anywhere — not even to us.

Your device
Wire
EU server
1 You sign in Your password authenticates you via OPAQUE PAKE. The password itself never leaves your device.
2 Master key unlocked Your master key stays on your device, never on our servers. How it is stored depends on the app: wrapped by your password in the browser, in the device’s secure storage on mobile and desktop.
3 Per-file key A unique 256-bit key is derived for this file via HKDF-SHA256 from your master key.
4 Encrypt with AES-256-GCM The file is encrypted on your device with a fresh random nonce. The result is ciphertext + an authentication tag.
ciphertext
6 Server stores opaque blob We receive ciphertext we cannot decrypt. The filename is replaced with a hash. Metadata we keep: size, timestamp, owner.
7 Stored in the EU Held in European data centres, under EU law. Your data never leaves the EU.
8 Acknowledgement Server returns a content hash. Your client verifies the upload. Done.
The crypto stack

Every primitive, named.

No proprietary cryptography. No undisclosed algorithms. Standard primitives, chosen for known properties, used in standard ways.

Primitive
Role
Why this choice
Protects against
AES-256-GCM
Symmetric encryption
Authenticated encryption — protects confidentiality and integrity in one primitive. The standard choice; fastest path with hardware acceleration.
Server breach, in-transit observation
HKDF-SHA256
Key derivation (per file)
Derives a unique 256-bit per-file key from your master key, so a compromise of one file’s key reveals no others.
Cross-file leakage if a single file’s key were ever exposed
Argon2id
Recovery phrase → master key, hardened sign-in
Memory-hard KDF (256 MiB). It turns your 12-word recovery phrase into the master key and stretches your password inside OPAQUE sign-in, so every guess against a stolen password file costs real hardware. Your password never leaves your device; in the browser it only wraps the stored key (PBKDF2-SHA256, 600,000 iterations).
Offline password guessing against a stolen server-side password file
OPAQUE PAKE
Authentication
Password-Authenticated Key Exchange. You authenticate to us without ever sending the password — we receive a proof, not the secret.
Server-side password leaks, MITM attempts
X25519
Per-recipient share encryption
When you share a file with another Beebeeb user, we re-encrypt the file key to their public key. They decrypt with their private key locally.
Server-side access to shared content
12-word BIP39
Master-key seed
A 12-word phrase generated locally at signup. Your master key is deterministically derived from it. The phrase, not the key, is what you back up — lose it and the master key cannot be regenerated.
Account recovery on password loss; portability across devices
TLS 1.3
Transport
Belt-and-braces. All client-server traffic is over TLS 1.3, even though the file payload is already encrypted before it gets there.
Network observers, downgrade attacks
Keys, password, recovery

Three things on your device.
Only one of them is ours to lose.

Read this section before you sign up. The recovery phrase is not optional.

Your 12-word phrase

on paper, ideally

A 12-word BIP39 mnemonic generated on your device at signup. Your master key is deterministically derived from this phrase — it is the root of all your encryption. We never see it. Lose this phrase and your password, and your data is gone.

word1 word2 ... word12

Your master key

derived, on device

Deterministically derived from your 12-word phrase. Encrypts every file you ever store. Lives only on devices you’ve unlocked. Never transmitted in the clear.

derive_key(mnemonic) → 256-bit key

Your password

in your head

Signs you in and, in the browser, wraps your master key on that device. The browser clears the unlocked key after inactivity (30 min by default, 60 at most) and asks for the password again. Changing the password does not change the master key.

web: PBKDF2-SHA256(password, salt) → wrap-key
What happens if you lose …
Recoverable

Just the password

You use the 12-word phrase to re-derive your master key on a new device and set a new password. No data lost.

Act fast

Just the 12-word phrase

Your account remains recoverable: request a one-time email link, set a new password, and keep using your account. Your vault data lives only on devices already unlocked — it stays readable there. Generate and back up a new phrase immediately from settings; until you do, a lost password on a new device means the vault data on it is unrecoverable.

Permanent loss

Both

Your data is permanently inaccessible. We cannot help — no backdoor, by design. Your account is still recoverable via email reset: request a one-time link, set a new password, log in, delete your data or account, and stop billing. The encrypted files, though, are gone for good.

Account security

Your login, locked down.

Encryption protects your files. These protect the account that holds them — available today.

Sharing

Three ways to share. None of them break the model.

Sharing is where most encrypted-storage products quietly punt. Here’s how we keep the zero-knowledge guarantee intact across each flow.

Security changelog

What changed, when, and why.

We log every security-relevant change here: cryptographic primitive upgrades, key-rotation events, post-mortems, and resolved disclosures.

Nothing to report yet.

When entries appear here, they will list the change, the date, the affected components, and the reasoning. This page exists so that changes are public, dated, and auditable.

Subscribe via RSS at beebeeb.io/security.rss — coming soon.

Encryption you can verify.

14-day free trial. No card or iDEAL needed to start. Zero-knowledge from the first byte. Read the code, then decide.

Start a 14-day trial