How messages work
The full process, step by step: how messages are generated, encrypted, stored and picked up. At no point do the servers see the content: zero-knowledge model.
1. Keys
Each user has an ECDH key pair on the P-256 curve. The public key is published in the central directory so others can encrypt messages to them. The private key NEVER leaves the device.
2. Composition
The user writes the message on their device. At that moment the plaintext only exists there, on the sender phone.
3. Encryption (ECIES = ECDH + HKDF + AES-GCM with AAD)
The device encrypts the message with the recipient PUBLIC key, producing a sealed "envelope". The AES key is derived via HKDF-SHA256 from the ECDH agreement and the ephemeral key is bound to the ciphertext (AAD). It also generates an encrypted copy for the sender themselves, so they can re-read what they sent. Only the sender and the recipient can open the envelope; no one else.
4. Sending and storage
Via central: the encrypted envelope is stored on the central server (ciphertext only) and delivered to the recipient.
Via federation (new): the device deposits the envelope directly in the mailbox of the recipient home node, without going through the central server, which is only queried as a directory.
Files always go to a node; only an encrypted link to the file travels with the message.
5. Reception
The recipient device picks up the envelope (from the central server and/or from its node), decrypts it LOCALLY with its private key and stores the plaintext ONLY on the device.
6. Retention
Messages can self-destruct (ephemeral per conversation) or be purged according to the chosen policy. The server only stores encrypted data, so a purge removes only unreadable blobs.
Zero-knowledge
At no point along the way do the servers see the content of messages or files. Central and nodes only handle end-to-end encrypted blobs; the keys to open them live exclusively on the devices.