La Fialka M-125 utilisait 10 rotors mécaniques. Aujourd'hui, nous utilisons des mathématiques post-quantiques. Voici pourquoi — et pourquoi pas les alternatives.
The Fialka M-125 used 10 mechanical rotors. Today, we use post-quantum mathematics. Here's why — and why not the alternatives.
Fialka détecte au runtime si le processeur supporte AES-NI (accélération matérielle AES). Si oui → AES-256-GCM. Sinon → ChaCha20-Poly1305, qui est 3× plus rapide en software pur.
Fialka detects at runtime whether the CPU supports AES-NI (hardware AES acceleration). If yes → AES-256-GCM. If no → ChaCha20-Poly1305, which is 3× faster in pure software.
AES-256-GCM et ChaCha20-Poly1305 fournissent tous les deux le chiffrement authentifié (AEAD). Ils intègrent nativement un MAC (Encrypt-then-MAC) :
Both AES-256-GCM and ChaCha20-Poly1305 provide authenticated encryption (AEAD). They natively include a MAC (Encrypt-then-MAC):
En plus, Ed25519 ajoute une deuxième couche d'intégrité indépendante : signature sur ct ‖ convId ‖ ts.
Additionally, Ed25519 adds a second independent integrity layer: signature over ct ‖ convId ‖ ts.
| Critère | Criteria | X25519 | P-256 (NIST) | RSA-2048 DH | |||
|---|---|---|---|---|---|---|---|
| Taille de clé publique | Public key size | 32 bytes | 64 bytes | 256 bytes | |||
| Sécurité (bits) | Security (bits) | ~128 bits | ~128 bits | ~112 bits | |||
| Vitesse ECDH | ECDH speed | ~0.15 ms | ~0.30 ms | ~2.5 ms | |||
| Temps constant | Constant time | ✓ | ◐ | ✗ | |||
| Résistant au quantum | Quantum resistant | ✗ * | ✗ | ✗ | |||
| Backdoor risk | Backdoor risk | Aucun (djb) | None (djb) | Débattu (Dual EC) | Debated (Dual EC) | Aucun | None |
* X25519 seul n'est pas post-quantique, c'est pourquoi Fialka utilise PQXDH : X25519 + ML-KEM-1024. La sécurité classique de X25519 est complétée par la résistance quantique de ML-KEM.
* X25519 alone is not post-quantum, which is why Fialka uses PQXDH: X25519 + ML-KEM-1024. X25519's classical security is complemented by ML-KEM's quantum resistance.
Courbe de Montgomery a = 486662, champ premier p = 2255 − 19. Conçue par Daniel J. Bernstein pour être immune aux timing attacks par design. Utilisée par Signal, WireGuard, SSH, Tor.
Montgomery curve a = 486662, prime field p = 2255 − 19. Designed by Daniel J. Bernstein to be immune to timing attacks by design. Used by Signal, WireGuard, SSH, Tor.
Courbe Short Weierstrass NIST. Performante mais paramètres "inexpliqués" — des chercheurs soupçonnent un choix non aléatoire (similaire à Dual_EC_DRBG). Implémentations souvent non constant-time.
NIST Short Weierstrass curve. Performant but "unexplained" parameters — researchers suspect non-random choice (similar to Dual_EC_DRBG). Implementations often not constant-time.
Diffie-Hellman classique sur corps premier. Clés énormes (256+ bytes), lent, pas de PFS sauf avec des éphémères explicites. Vulnérable au quantum (Shor).
Classical prime-field Diffie-Hellman. Huge keys (256+ bytes), slow, no PFS unless using explicit ephemerals. Quantum vulnerable (Shor).
ML-KEM-768 offre un niveau de sécurité 3 (≈ AES-192). Nous avons choisi ML-KEM-1024 (niveau 5 ≈ AES-256) pour une marge de sécurité maximale. Le surcoût est minimal (+0.05ms, +500 bytes).
ML-KEM-768 offers security level 3 (≈ AES-192). We chose ML-KEM-1024 (level 5 ≈ AES-256) for maximum security margin. The overhead is minimal (+0.05ms, +500 bytes).
| Critère | Criteria | Ed25519 | ECDSA (P-256) | RSA-2048 | |||
|---|---|---|---|---|---|---|---|
| Signature | Signature size | 64 bytes | 64 bytes | 256 bytes | |||
| Clé publique | Public key | 32 bytes | 64 bytes | 256 bytes | |||
| Vitesse signature | Sign speed | ~0.05 ms | ~0.15 ms | ~1.5 ms | |||
| Déterministe | Deterministic | ✓ | ✗ * | ✓ | |||
| Temps constant | Constant time | ✓ | ◐ | ✗ | |||
| Risque nonce | Nonce risk | Aucun | None | Critique ! | Critical! | Aucun | None |
* ECDSA a un problème critique : si le nonce aléatoire est réutilisé ou biaisé, la clé privée est récupérable. C'est exactement ce qui a permis de pirater la PS3 en 2010. Ed25519 élimine ce risque car il est déterministe (le nonce est dérivé du message).
* ECDSA has a critical issue: if the random nonce is reused or biased, the private key becomes recoverable. This is exactly how the PS3 was hacked in 2010. Ed25519 eliminates this risk because it's deterministic (the nonce is derived from the message).
WhatsApp avant 2016, Telegram (chats non-secrets). Une seule clé partagée. Si compromise → tous les messages passés ET futurs sont lisibles.
WhatsApp pre-2016, Telegram (non-secret chats). Single shared key. If compromised → all past AND future messages are readable.
Précurseur du Double Ratchet. PFS mais pas de messages asynchrones — les deux parties doivent être en ligne simultanément.
Double Ratchet predecessor. PFS but no async messages — both parties must be online simultaneously.
Telegram. Protocole propriétaire, pas de forward secrecy par défaut, E2E uniquement en "secret chat". Des chercheurs ont trouvé des faiblesses cryptographiques.
Telegram. Proprietary protocol, no forward secrecy by default, E2E only in "secret chat". Researchers have found cryptographic weaknesses.
Le Double Ratchet classique renouvelle les clés via X25519 uniquement. ML-KEM-1024 n'est utilisé que dans le handshake initial PQXDH. Si un ordinateur quantique casse X25519 après le handshake, les ratchets DH suivants ne bénéficient plus de protection post-quantique.
The classic Double Ratchet renews keys via X25519 only. ML-KEM-1024 is only used in the initial PQXDH handshake. If a quantum computer breaks X25519 after the handshake, subsequent DH ratchets no longer benefit from post-quantum protection.
Tous les 10 messages, Fialka effectue un nouvel échange ML-KEM-1024 (encapsulation + décapsulation) et mélange le secret partagé post-quantique dans la rootKey via HKDF. C'est le PQ Ratchet — un troisième ratchet, indépendant des deux autres.
Every 10 messages, Fialka performs a new ML-KEM-1024 exchange (encapsulation + decapsulation) and mixes the post-quantum shared secret into the rootKey via HKDF. This is the PQ Ratchet — a third ratchet, independent of the other two.
Conçu pour deriver des clés à partir de mots de passe (lent volontairement). Pas adapté pour dérivation rapide type ratchet.
Designed to derive keys from passwords (intentionally slow). Not suited for fast ratchet-style derivation.
→ Fialka utilise PBKDF2 uniquement pour le PIN (600K itérations)
→ Fialka uses PBKDF2 only for PIN (600K iterations)
Memory-hard KDF, meilleur que PBKDF2 pour les mots de passe. Mais trop lent et memory-intensive pour un ratchet par message.
Memory-hard KDF, better than PBKDF2 for passwords. But too slow and memory-intensive for per-message ratcheting.
Un ordinateur quantique suffisamment puissant disposera de deux armes principales. Voici comment Fialka se défend contre chacune.
A sufficiently powerful quantum computer will have two main weapons. Here's how Fialka defends against each.
L'algorithme de Peter Shor (1994) résout la factorisation des grands nombres et le logarithme discret en temps polynomial sur un ordinateur quantique.
Peter Shor's algorithm (1994) solves large integer factorization and discrete logarithm in polynomial time on a quantum computer.
Concrètement, il détruit tous les systèmes basés sur :
Concretely, it destroys all systems based on:
PQXDH = X25519 + ML-KEM-1024. ML-KEM est basé sur le problème MLWE (Module Learning With Errors), résistant à Shor. Même si X25519 tombe, ML-KEM tient.
PQXDH = X25519 + ML-KEM-1024. ML-KEM is based on MLWE (Module Learning With Errors), resistant to Shor. Even if X25519 falls, ML-KEM holds.
SPQR ré-encapsule ML-KEM tous les 10 messages. La protection PQ ne s'arrête pas au handshake — elle est continue.
SPQR re-encapsulates ML-KEM every 10 messages. PQ protection doesn't stop at handshake — it's continuous.
Ed25519 est vulnérable à Shor, mais un attaquant devrait forger une signature en temps réel — pas rétroactif. Migration vers Ed25519 + ML-DSA-44 hybride prévue en V3.6.
Ed25519 is vulnerable to Shor, but an attacker would need to forge a signature in real-time — not retroactive. Migration to hybrid Ed25519 + ML-DSA-44 planned for V3.6.
L'algorithme de Lov Grover (1996) accélère la recherche brute-force. Il trouve une clé dans un espace de taille N en √N opérations au lieu de N.
Lov Grover's algorithm (1996) accelerates brute-force search. It finds a key in a space of size N in √N operations instead of N.
Concrètement, la sécurité de chaque clé symétrique est divisée par deux :
Concretely, every symmetric key's security is halved:
Grover n'est pas un problème pour Fialka. Toute la pile symétrique utilise des clés de 256 bits. Même divisée par 2 → 128 bits restants = astronomiquement sûr.
Grover is not a problem for Fialka. The entire symmetric stack uses 256-bit keys. Even halved → 128 bits remaining = astronomically safe.
Pour mettre en perspective 2128 :
To put 2128 in perspective:
C'est précisément pourquoi AES-256 (et non AES-128) a été choisi. La marge de sécurité post-Grover est identique à la sécurité pré-quantique d'AES-128, qui est elle-même considérée incassable.
This is precisely why AES-256 (not AES-128) was chosen. The post-Grover security margin is identical to AES-128's pre-quantum security, which is itself considered unbreakable.
Des adversaires (états, agences) interceptent et stockent le trafic chiffré aujourd'hui, en attendant qu'un ordinateur quantique puisse le déchiffrer dans 10-20 ans.
Adversaries (states, agencies) intercept and store encrypted traffic today, waiting for a quantum computer to decrypt it in 10-20 years.
Défense Fialka : PQXDH + SPQR. Le chiffrement est post-quantique dès maintenant. Même capturé, le trafic reste indéchiffrable dans le futur.
Fialka defense: PQXDH + SPQR. Encryption is post-quantum right now. Even if captured, traffic remains undecryptable in the future.
Mesurer le temps d'exécution, la consommation électrique, ou les cache-miss pour déduire la clé sans casser l'algorithme.
Measuring execution time, power consumption, or cache misses to deduce the key without breaking the algorithm.
Défense : X25519 et Ed25519 sont constant-time par design. ChaCha20 n'utilise aucune table lookup. AES-GCM bénéficie d'AES-NI (hardware, pas de cache-timing).
Defense: X25519 and Ed25519 are constant-time by design. ChaCha20 uses no table lookups. AES-GCM benefits from AES-NI (hardware, no cache-timing).
| Composant | Component | Shor | Grover | HNDL | Side-channel | Side-channel | Sécurité post-Q | Post-Q security |
|---|---|---|---|---|---|---|---|---|
| AES-256-GCM | N/A | 128 bits ✓ | ✓ | AES-NI ✓ | ✅ | |||
| ChaCha20-Poly1305 | N/A | 128 bits ✓ | ✓ | Constant-time ✓ | Constant-time ✓ | ✅ | ||
| X25519 | ❌ Cassé | ❌ Broken | N/A | +ML-KEM ✓ | +ML-KEM ✓ | CT ✓ | ✅ via PQXDH | ✅ via PQXDH |
| ML-KEM-1024 | ✓ MLWE | ~128 bits ✓ | ✓ | ✓ | ✅ | |||
| Ed25519 | ❌ Cassé | ❌ Broken | N/A | N/A | CT ✓ | 🟡 V3.6 | 🟡 V3.6 | |
| HKDF-SHA256 | N/A | 128 bits ✓ | ✓ | HMAC ✓ | ✅ | |||
| SPQR (Triple Ratchet) | ✓ Continu | ✓ Continuous | ✓ | ✓ | ✓ | ✅ |
Chiffrement PQ complet — PQXDH (X25519 + ML-KEM-1024), SPQR Triple Ratchet, ChaCha20 adaptatif. Résistant à Shor + Grover + HNDL sur le chiffrement.
Complete PQ encryption — PQXDH (X25519 + ML-KEM-1024), SPQR Triple Ratchet, adaptive ChaCha20. Resistant to Shor + Grover + HNDL on encryption.
Signatures hybrides — Ed25519 + ML-DSA-44 (Dilithium) sur le handshake PQXDH. Les signatures deviennent résistantes à Shor. Taille : +2420 bytes par signature hybride.
Hybrid signatures — Ed25519 + ML-DSA-44 (Dilithium) on PQXDH handshake. Signatures become Shor-resistant. Size: +2420 bytes per hybrid signature.
Full PQ sur tout — Signatures hybrides sur chaque message ratcheté. Migration possible vers FN-DSA (Falcon-512, 666 bytes) si les libs Android mûrissent. 100% résistant quantique de bout en bout.
Full PQ everywhere — Hybrid signatures on every ratcheted message. Possible migration to FN-DSA (Falcon-512, 666 bytes) if Android libs mature. 100% quantum-resistant end-to-end.
Fialka est 100% open source. Chaque ligne de code crypto est auditable.
Fialka is 100% open source. Every line of crypto code is auditable.