E2EE v2 · Sealed sender

Metadata is the message: how sealed sender hides who you talk to

Encrypting a message hides what it says. It does not hide who sent it, who received it, or when. That record of who talks to whom is called metadata, and it can say as much as the words. Here is how DChat's sealed sender keeps it away from the relays that carry your messages.

DChat SecurityReading time 6 minThe sealed sender guide
SenderYour phoneSeals the message and who wrote it, together
RelayCarries the envelope
  • Which account it is for
  • Its size, padded to a step
  • The time, to the minute
  • Who sent it
  • What it says
  • What kind of message it is
RecipientTheir devicesEach one opens its own slot and checks the sender

Picture a sealed letter. Nobody on the way can read it, but the envelope still shows who wrote it and who it is for. Collect enough envelopes and you know who someone's doctor is, who they argue with at night, and which group they quietly joined. That is why people who study surveillance say metadata is the message.

Every messenger that encrypts end to end hides the letter. Far fewer hide the envelope. With E2EE v2, DChat hides the most telling part of it: the sender.

The short version

  • Relays cannot read your messages. They are end-to-end encrypted with the Double Ratchet and MLS.
  • Relays cannot see who sent them. Sealed sender puts your identity inside the encryption, where only the person you wrote to can see it.
  • Relays see less of everything else too. Message sizes are padded, the message type is hidden, and times are rounded to the minute.
  • It is checked to the byte. The seal matches the reference implementation byte for byte.

What a relay does

DChat has no central server. Messages travel through relays, service nodes run by independent operators who stake to take part. A relay's job is simple: take an encrypted message in, and hand it to the right person's devices, now or when they come back online. To do that job, a relay needs to know one thing: who the message is for. It does not need to know who it is from. Sealed sender makes sure it never does.

How sealed sender works

Your name goes inside the envelope

When you send a message, your app seals it to the keys of the other person's devices. Your account, your device and your identity are inside that seal, next to the encrypted message. Only the person you wrote to can open it. When they do, their app checks that the seal really comes from you before showing the message, so nobody can fake one in your name.

No login on the way in

Sealed messages go to the relay through a separate door that does not ask who you are. There is no account sign-in on that connection at all, so the relay has nothing to tie the message to.

Keeping spam out without names

A door without names could invite spam. DChat solves that with a delivery key. Each account has one, and it is shared only with the people that account talks to: its contacts and the members of its groups. Every sealed message carries a small proof made with the recipient's delivery key. The relay checks the proof and learns only that the message comes from one of the recipient's people, never which one.

Less to measure from the outside

Even a sealed message has a size and a time. DChat pads what is inside the seal to fixed steps, so a short "ok" and a long paragraph look the same size from outside. The kind of message and its disappearing-message settings are hidden inside the seal too, and the time a relay sees is rounded down to the minute.

What a relay handles, side by side

DataCan a relay see it?
What you wrote, sent or saidNo, end-to-end encrypted
Which account sent the messageNo, sealed sender
The kind of message and its expiry settingsNo, inside the seal
The exact sizeNo, padded to fixed steps
The exact timeNo, rounded to the minute
Who the message is forYes, so it can be delivered

One seal for many devices

DChat ships the multi-recipient version of sealed sender: one message is sealed once for all of the recipient's devices, with a slot for each. We wrote it in DChat's own code and checked our output byte for byte against the reference implementation, the same way we checked the rest of E2EE v2. It also fits a decentralized network well: relays never need a list of every device of every account. Each of the recipient's devices simply tries the seal and opens the slot that is meant for it.

How it fits with the rest of E2EE v2

Sealed sender hides the envelope. The rest of E2EE v2 protects the letter: PQXDH and the Double Ratchet for one-to-one chats with a new key for every message, MLS for groups, and post-quantum key exchange in both, so messages recorded today stay closed even when quantum computers arrive. Together they mean a relay carries your conversations without reading them and without knowing they are yours.

The technical details are in the E2EE v2 whitepaper and the protocol specification.

DChat SecurityWritten against the shipped protocol and its test vectors.

Private in what you say, and in who you say it to

No phone number, no email, no server holding your conversation. Free on Android, web and desktop.