How this actually works

Last updated 2026-09-07 · written for anyone who wants more than "trust us"

The app and its privacy page keep things simple on purpose — most people just want to know it's safe, not how. This page is for the rest: the real mechanics, in plain terms, plus the honest limits of what any of this can actually promise.

The pairing handshake Why one stolen key doesn't matter Padding & hiding message type Why neither of you can "prove" a message What this can't hide What the server actually does Known limitations, stated plainly Verifying this yourself

The pairing handshake

When you pair with someone — in person via QR code, or remotely via a link — both devices generate a fresh key pair (ECDH on curve P-256, if you want the exact primitive) and exchange the public halves. Neither of you ever sends a private key anywhere; each side combines its own private key with the other's public key to arrive at the same shared secret independently. That shared secret never touches our servers, even in encrypted form — it's computed locally on each device and never transmitted at all.

In-person pairing (scanning each other's code) never sends this handshake over the internet at all, so there's nothing for a relay to intercept or tamper with. Remote pairing (sending a link) does relay the handshake through our servers, which is why the app offers a safety number afterward — a short code both devices generate from the shared secret. Read it out loud to each other (or scan it): if it matches, no one swapped keys in the middle. If someone had intercepted and substituted their own key mid-handshake, the safety numbers would not match.

Why one stolen key doesn't matter

The shared secret from pairing isn't used to encrypt messages directly. Instead, it seeds a ratchet: every single message derives its own one-time encryption key (AES-GCM) from a constantly-advancing chain (via HKDF, if you want the exact construction), and each step immediately discards the material used to derive the previous key. This is the same family of technique used in Signal's protocol.

Practically, this means: if a single message's key were ever somehow recovered, it would decrypt exactly that one message — not the conversation before it, and not the conversation after it. There's no master key sitting anywhere that unlocks everything at once.

Padding & hiding message type

Before sealing, message content is padded up to one of several fixed size buckets, so the exact length of what you wrote isn't visible from the outside — only a rough size range. Even what kind of message it is (text vs. photo vs. voice note) is sealed along with the content itself, not left visible as metadata.

Why neither of you can "prove" a message

Messages are authenticated with a symmetric key both of you hold — not signed with either person's private identity key. That's a deliberate choice: it means neither of you can later prove to a third party which of you actually wrote a specific message, even by handing over your keys and the plaintext. Either side could technically have forged it after the fact. The intent is real conversations without an accidental permanent, provable record either of you could be held to later.

What this can't hide

Being specific about the limits matters as much as being specific about the protections:

What the server actually does

The backend (a small Cloudflare Worker + KV store) only ever holds encrypted blobs it cannot read — the decryption key never leaves your device. A few other things worth knowing:

Known limitations, stated plainly

Verifying this yourself

The source isn't publicly browsable, but it's genuinely available — email [email protected] and you'll get real access to the actual repository, not a brush-off. If you want to check any claim on this page against the real implementation rather than take it on faith, that's what it's for.

← Back to Only Us Two