Files are compressed and AES-256 encrypted in your browser before they ever leave it. The decryption key lives in the share URL — never on our servers.
Everything else is just opaque ciphertext.
Drag and drop, or click to choose. We don't auto-upload until you confirm.
A random 256-bit AES-GCM key is generated client-side. The file is gzipped, split into 8 MB chunks, encrypted, then uploaded to Wasabi in parallel.
The key lives in the URL fragment after #k=. Browsers never send fragments to servers. Only people you give the link to can decrypt.
Open primitives. Inspect the JavaScript in DevTools — it's all there.
NIST-recommended, industry standard. Tampering with a single byte of ciphertext makes decryption fail loudly. Each chunk gets a fresh random IV.
The decryption key sits in the URL fragment — the part after #. Browsers don't transmit fragments. We can't see it, log it, or hand it over.
We don't ship our own implementation. Encryption uses your browser's audited, hardware-accelerated Web Crypto API.
The filename, MIME type, and plaintext size are encrypted with the same key. Our database stores only opaque base64 ciphertext.
We presign upload URLs, but file bytes never pass through our application server. Less code in the way means fewer chances of leaking.
Files self-destruct after their TTL. We run a cleanup job hourly that deletes expired ciphertext from Wasabi and our database.
public_idstorage_key on WasabiNo payment processor. No subscription. Just two tiers.
If something here isn't clear, send us a message.
#), which browsers never send to servers. We store ciphertext we can't decrypt.crypto-*.js under /build/assets/. Nothing is obfuscated.