mChat Français Open mChat

mChat · document

How it works, in detail

The home page says the essentials in six sentences. This one gives the exact names, for anyone who would rather verify than believe.

01

The handshake

Every conversation opens a classic Noise XX channel over X25519 and, in parallel, an ML-KEM-768 exchange. The final transport key derives from both at once, bound to the handshake hash. The full suite is called Noise_XX_25519+MLKEM768_ChaChaPoly_BLAKE2s.

02

Why two and not one

X25519 is proven but will fall to a working quantum computer. ML-KEM is designed to resist one but it is young. Composing them means both must break, so neither the future weakness of one nor an unknown flaw in the other is enough.

03

Groups

Rooms use MLS, the IETF group messaging standard published as RFC 9420. The group key changes on every join and every leave: whoever leaves stops reading what follows, whoever joins cannot read the past.

04

The server

Three roles, all blind to content: a public key directory, an opaque block relay, and hosting for the web client. It holds no private key, so there is nothing it could hand over under pressure.

05

Calls

Audio and video go through a LiveKit server we host ourselves. The token that opens a room is signed by your account key, and the room name derives from the two names of the pair: a room you are not part of cannot be named.

06

Still to build

Self serve account deletion. It is written here because a stated flaw gets fixed, while a hidden one is learned about at the worst moment.