Zero-knowledge encrypted secret sharing - the server never sees your data
Plaintext lives only in your browser's memory. It is never transmitted.
A 256-bit AES key is generated using
Web Crypto API. This key never leaves the
browser.
Your secret is encrypted with the random key + a unique 12-byte IV. If you set a password, a second encryption layer is added using PBKDF2-derived key (600k iterations).
Only the encrypted blob, IV, salt, TTL, and burn flag are sent. The encryption key stays in the browser.
Server generates a unique ID, stores the ciphertext in SQLite, and returns the ID. It cannot decrypt anything.
The key is placed in the URL fragment (after
#), which browsers never send to servers.
# in
a URL is called the "fragment." By HTTP specification, browsers never
include fragments in network requests. The server literally cannot see
it - not in logs, not in headers, nowhere.
Browser extracts the secret ID from the path and the
decryption key from the # fragment.
Server returns the ciphertext, IV, and salt. If burn-after-reading is enabled, the secret is marked as viewed (and deleted on next access).
If password-protected, you enter the password → PBKDF2 derives the outer key → decrypt outer layer. Then the URL key decrypts the inner layer. All in your browser.
The decrypted secret is shown. It was never sent unencrypted over the network.
The server is a blind courier. It stores what it cannot read, and delivers what it cannot understand.