SimpleX Protocol
Created on 2023-08-22T16:44:04-05:00
An SMP server is basically an infinitely large collection of holes. Users claim some of these "slots" to receive messages at, and contacts receive a key to store a message in to the same slot.
Servers must be trusted to store and forward messages between parties. Servers also know who is connected to them and which slots they are presently listening to events from.
Decorrelating sockets from slots must be done out of band such as with Tor/I2P.
All blocks are padded to 16kb to frustrate network correlation attacks.
Connection capabilities consist of: server IP, port, hash of server's offline certificate, queue ID, and public key for other party's receiving queue.
Parties also perform Diffie-Hellman key exchanges with the server so they can protect future messages against breaches in transport layer security.
Queues can be made public so anyone can drop messages in them. This is for creating public mail slots for people to make contact requests with.
Software Roles
Server stores and forwards the data via queues.
Clients connect to drop messages in queues, subscribes to its own queues.
Agents are clients which provide the application on top of the network. They deal with contact requests, key rotations, sending decoy traffic, presenting a chat interface to users.
Crypto stack
- Ed448/Ed25519
- NaCl crypto_box encryption scheme (curve25519xsalsa20poly1305)
- SHA256
- double ratchet protocol for end-to-end message encryption between the agents:
- Curve448 keys, X3DH key agreement with 2 ephemeral keys for each side),
- AES-GCM AEAD cipher,
- SHA512-based HKDF