case file 06 · an end-to-end encrypted pastebin

Hushbin.

A pastebin for secrets. Share sensitive text between your own devices without ever trusting the server with a single readable byte.

live · hushbin.naveed.io Open a pad ↗
§ what it is

A clipboard that spans your devices, and trusts no one.

You know the moment: you need to move an API key, a config blob, or a wall of text from your laptop to your phone, and every easy option means pasting a secret into something you don't control. Hushbin is a named pad you open on both devices — type once, it appears on the other — but the server only ever holds ciphertext.

Every save is encrypted in the browser with AES-256-GCM before it goes anywhere. The pad's name is just its address; a separate passphrase is the key, and that passphrase never leaves your device. The server literally cannot read your pads — it's a dumb, encrypted mailbox.

The key is derived with PBKDF2 (100k iterations) via the native Web Crypto API, with a fresh random IV per save. Nice touches on top: version history (every save is immutable — browse, restore, or delete), syntax highlighting for JSON and XML, a privacy mode that blurs content while you screen-share, and light polling so a change on one device shows up on the other within seconds.

No accounts. The whole thing is a small Next.js app over raw SQL — deliberately boring where it counts, because the interesting part is the part I made sure I can't see.

01

Client-side AES-256

Encrypt/decrypt happen in your browser via Web Crypto. The server stores ciphertext and an IV — nothing else.

02

Immutable versions

Every save is a new version. Scroll the history, restore an old one, or delete what you no longer want around.

03

Built for screens

JSON/XML syntax highlighting, a privacy blur for screen-sharing, and 3-second polling so both devices stay in sync.

§ my musings

The feature is what it can't do.

The best thing I can say about Hushbin's backend is that if it were breached, the attacker would get a pile of noise.

I spend my day job on systems that must degrade gracefully and never lose data. Hushbin is the opposite discipline: a system designed so that the operator — me — is deliberately blind. Zero-knowledge isn't a marketing word here; it's an architecture where the trust boundary sits at the edge of your browser, and everything past it assumes the server is hostile.

It started as a genuine itch — I kept needing to shuttle secrets between machines and hated every option. It turned into a tidy exercise in doing real cryptography with the platform's own primitives: no dependencies, no key ever on the wire, and a threat model I could explain in one sentence.

§ take it for a spin

Move a secret between two devices.

▤ live app hushbin.naveed.io

No sign-up. A pad exists the moment you name it; keep the name obscure (or let it generate one) and treat the passphrase like the password it is.

  1. Open hushbin.naveed.io and pick or generate a pad name.
  2. Set a passphrase — this is the encryption key, and it never leaves your browser.
  3. Paste your text; it's encrypted and saved as an immutable version.
  4. On your other device, open the same pad name and enter the same passphrase — it decrypts locally.
§ under the hood
Next.js 16 · App Router React 19 + TypeScript Web Crypto · AES-256-GCM PBKDF2 · 100k iterations Tailwind v4 PostgreSQL · raw SQL Fly.io + Docker
← prev case fileMiscolored next case file →OurWorkshop