De la machine M-125 à votre poche — le parcours d'un message, du premier contact à la destruction automatique.
From the M-125 machine to your pocket — a message's journey, from first contact to automatic destruction.
Quand Alice et Bob se connectent pour la première fois, ils scannent leurs QR codes v2 contenant leurs clés publiques X25519 et ML-KEM-1024.
When Alice and Bob connect for the first time, they scan each other's v2 QR codes containing their X25519 and ML-KEM-1024 public keys.
Un PQXDH handshake (Post-Quantum Extended Diffie-Hellman) crée le secret partagé initial en combinant X25519 et ML-KEM-1024 (NIST FIPS 203). À partir de là, le Double Ratchet démarre.
A PQXDH handshake (Post-Quantum Extended Diffie-Hellman) creates the initial shared secret by combining X25519 and ML-KEM-1024 (NIST FIPS 203). From there, the Double Ratchet begins.
À chaque tour de conversation (Alice parle, puis Bob répond), un nouvel échange X25519 est effectué — c'est le DH Ratchet. L'échange initial PQXDH garantit une résistance post-quantique.
Each conversation turn (Alice speaks, Bob replies) triggers a new X25519 exchange — the DH Ratchet. The initial PQXDH exchange ensures post-quantum resistance.
Pour chaque message individuel, une KDF Chain dérive une clé unique via HKDF. Résultat : même si un attaquant capture une clé, il ne peut lire ni les messages passés ni futurs.
For each individual message, a KDF Chain derives a unique key via HKDF. Result: even if an attacker captures one key, they can't read past or future messages.
🏛️ SPQR Triple Ratchet V3.5 — Tous les 10 messages, une ré-encapsulation ML-KEM-1024 injecte un nouveau secret post-quantique dans la rootKey via HKDF. La protection PQ est continue, pas seulement au handshake initial.
🏛️ SPQR Triple Ratchet V3.5 — Every 10 messages, an ML-KEM-1024 re-encapsulation injects a fresh post-quantum secret into rootKey via HKDF. PQ protection is continuous, not just at the initial handshake.
Le message est d'abord paddé à une taille fixe (256B/1KB/4KB/16KB) pour cacher sa longueur réelle.
The message is first padded to a fixed size (256B/1KB/4KB/16KB) to hide its actual length.
Ensuite : chiffrement AES-256-GCM (ou ChaCha20-Poly1305 sur les appareils sans accélération AES-NI) avec la clé du ratchet. Le tag 128-bit authentifie le message. Puis Ed25519 signe ct ‖ convId ‖ timestamp.
Then: AES-256-GCM (or ChaCha20-Poly1305 on devices without AES-NI hardware acceleration) encryption with the ratchet key. The 128-bit tag authenticates it. Then Ed25519 signs ct ‖ convId ‖ timestamp.
⚡ Sélection adaptative V3.5 — Le cipher est auto-détecté au démarrage via ARMv8 Crypto Extension probe. Les deux sont AEAD (authentification intégrée). Le champ cipherSuite dans le wire format garantit l'interopérabilité.
⚡ Adaptive selection V3.5 — Cipher is auto-detected at startup via ARMv8 Crypto Extension probe. Both are AEAD (built-in authentication). The cipherSuite field in the wire format ensures interoperability.
Le blob chiffré est transmis par TorTransport — un protocole de trames binaires (magic 0xF1 0xA1, 13 types de trames) qui établit une connexion directe vers l'adresse .onion du destinataire.
The encrypted blob is transmitted by TorTransport — a binary frame protocol (magic 0xF1 0xA1, 13 frame types) that establishes a direct connection to the recipient's .onion address.
Le message traverse 3 relais Tor (Guard, Middle, Exit) et arrive au Hidden Service .onion du destinataire — P2P direct, zéro Firebase, zéro serveur central. Votre IP réelle n'est jamais exposée.
The message traverses 3 Tor relays (Guard, Middle, Exit) and arrives at the recipient's .onion Hidden Service — direct P2P, zero Firebase, zero central server. Your real IP is never exposed.
📬 Si hors-ligne — Fialka Mailbox : l'OutboxManager bascule automatiquement vers le Mailbox configuré. Le blob chiffré est déposé et récupéré par le destinataire à sa prochaine connexion (polling 60s, TTL 7 jours max). Le serveur Mailbox ne déchiffre jamais rien.
📬 If offline — Fialka Mailbox: OutboxManager automatically falls back to the configured Mailbox. The encrypted blob is deposited and retrieved by the recipient at next connection (60s polling, 7-day max TTL). The Mailbox server never decrypts anything.
Store-and-forward chiffré · Fallback si destinataire hors-ligne
Encrypted store-and-forward · Fallback if recipient offline
Connexion .onion directe entre les deux appareils via TorTransport. Zéro intermédiaire, zéro stockage externe. Uniquement possible si les deux parties sont en ligne simultanément.
Direct .onion connection between both devices via TorTransport. Zero intermediary, zero external storage. Only possible when both parties are online simultaneously.
Votre propre appareil expose son .onion comme Mailbox. Les expéditeurs y déposent leurs blobs chiffrés. Vous les récupérez à votre prochaine connexion.
Your own device exposes its .onion as a Mailbox. Senders deposit their encrypted blobs there. You retrieve them at your next connection.
Un MailboxServer dédié (auto-hébergé, .onion) n'accepte que les membres autorisés. Contrôle OWNER, blobs opaque, TTL 7 jours. Le serveur ne déchiffre jamais.
A dedicated MailboxServer (self-hosted, .onion) only accepts authorized members. OWNER control, opaque blobs, 7-day TTL. The server never decrypts anything.
Un MailboxServer ouvert acceptant n'importe quel dépôt. Utile pour les cas où l'expéditeur n'est pas connu à l'avance. Tous les blobs restent opaques pour le serveur.
An open MailboxServer accepting any deposit. Useful when the sender is not known in advance. All blobs remain opaque to the server.
Bob reçoit le blob. Il vérifie la signature Ed25519 (badge ✅ ou ⚠️), puis déchiffre avec sa clé AES-256-GCM ou ChaCha20-Poly1305 du ratchet (selon le champ cipherSuite).
Bob receives the blob. He verifies the Ed25519 signature (badge ✅ or ⚠️), then decrypts with his AES-256-GCM or ChaCha20-Poly1305 ratchet key (based on the cipherSuite field).
Le message déchiffré est stocké dans SQLCipher (base Room chiffrée AES-256). Si un timer éphémère est actif, le message s'autodétruit. Si livré via Mailbox, le blob est supprimé du store après récupération (TTL 7 jours max).
The decrypted message is stored in SQLCipher (AES-256 encrypted Room DB). If an ephemeral timer is active, the message self-destructs. If delivered via Mailbox, the blob is removed from the store after retrieval (7-day maximum TTL).