Imagine une table en bois, trois pintes, et trois cryptographes qui refont le monde : le premier jure encore par RC4 (âil a tenu 20 ans, quand mĂȘme !â), le second parle de Salsa20 avec des Ă©toiles dans les yeux, et le dernier trinque en murmurant âChaCha20 ou rienâ.
Bienvenue dans la saga du chiffrement par flot â ce pan de la crypto qui a voulu faire vite, lĂ©ger, Ă©lĂ©gant⊠et parfois un peu trop confiant.
âïž RC4 â Lâalgorithme quâon a tous aimĂ© avant de le haĂŻr
Ah, RC4. InventĂ© par Ron Rivest en 1987 pour RSA Security, restĂ© secret jusquâĂ une fuite anonyme en 1994, et devenu la star des annĂ©es 2000 dans WEP, SSL, TLS et MS-CHAP.
Un algorithme si simple quâon pouvait lâimplĂ©menter sur un coin de nappe â et si fragile quâil a fini en miette sous les analyses statistiques.
Le principe est enfantin : on garde un état interne, un tableau de permutation S de 256 octets, et deux index i, j. On échange, on XOR, et on obtient un keystream pseudo-aléatoire.
Formellement :
Key Scheduling Algorithm (KSA)
\text{for } i = 0 \text{ to } 255
\quad S[i] = i
j = 0
\text{for } i = 0 \text{ to } 255:
\quad j = (j + S[i] + K[i \bmod |K|]) \bmod 256
\quad {swap}(S[i], S[j])
Pseudo-Random Generation Algorithm (PRGA)
i = (i + 1) \bmod 256
j = (j + S[i]) \bmod 256
\text{swap}(S[i], S[j])
K = S[(S[i] + S[j]) \bmod 256]
Chaque octet du flux clair est ensuite chiffré par un simple XOR :
C_t = P_t \oplus K_t
ProblĂšme : RC4 nâest pas un vrai gĂ©nĂ©rateur uniforme. Les biais dans les premiers octets du flux sont lĂ©gendaires, et les clĂ©s faibles pullulent. DĂšs 2001, Fluhrer, Mantin et Shamir dĂ©montrent la vulnĂ©rabilitĂ© de WEP.
Puis vint la série noire : Bar Mitzvah, RC4 NOMORE, et enfin la mise à mort officielle dans RFC 7465 (2015), interdisant RC4 dans TLS.
MoralitĂ© : quand ton keystream prĂ©fĂšre certains octets aux autres, ce nâest plus un flot, câest une fuite.
đȘïž Salsa20 â Le retour de la simplicitĂ© Ă©lĂ©gante
2005, Daniel J. Bernstein dĂ©barque. Il nâa pas aimĂ© RC4, il nâaime pas les S-box compliquĂ©es, et il veut un algo âdanse du flotâ, dâoĂč Salsa20.
LâidĂ©e ? Remplacer les tables par des additions, des rotations et des XOR (ARX : Add-Rotate-XOR). Tout tourne sur du 32 bits, sans cache ni branchement tordu.
LâĂ©tat initial est une matrice 4Ă4 de mots de 32 bits :

Chaque round applique une quarter-round function sur quatre mots (a, b, c, d) :

AprĂšs 20 rounds (10 colonnes + 10 diagonales), on additionne lâĂ©tat initial et on extrait le keystream.
La magie : pas de biais, pas de clé faible, pas de structure exploitable.
Salsa20 est dâune Ă©lĂ©gance rare â si pure que mĂȘme Bruce Schneier a saluĂ© sa simplicitĂ© (âexactement ce quâun processeur aimeâ).
Et contrairement à RC4, Salsa20 est toujours vivant : utilisé dans NaCl, libsodium, et les bibliothÚques de crypto modernes.
Daniel Bernstein livrera ensuite une version plus chaotique encore : ChaCha20.
đ ChaCha20 â Le hipster de TLS
ChaCha20, câest Salsa20 qui a dĂ©couvert le cold brew et la RFC.
Introduit en 2008 par Bernstein, puis standardisé dans RFC 7539, il ajuste les rotations (16, 12, 8, 7 au lieu de 7, 9, 13, 18) pour améliorer la diffusion et la résistance aux attaques différentielles.
Sa fonction de round est donc :

Et comme pour Salsa, aprĂšs 20 rounds, on additionne lâĂ©tat initial.
Le résultat ? Un algorithme rapide sur CPU et sur mobile, constant-time, sans table ni branche.
Quand Google a proposé ChaCha20-Poly1305 pour remplacer AES-GCM sur terminaux mobiles, tout le monde a levé son verre : moins de failles, plus de perfs.
AdoptĂ© dans TLS 1.3, WireGuard, OpenSSH, QUIC â bref, le hipster sâest embourgeoisĂ©.
Un petit extrait pseudo-code pour briller en société :
def chacha20_block(key, counter, nonce):
state = constants + key + counter + nonce
for i in range(10):
quarter_rounds(state)
return state + initial_state
Le secret du succÚs de ChaCha20 : aucune table, aucune surprise, juste de la belle arithmétique et un peu de sueur mathématique.
đ RC4 vs Salsa20 vs ChaCha20
| CritĂšre | RC4 | Salsa20 | ChaCha20 |
|---|---|---|---|
| Année | 1987 | 2005 | 2008 |
| Type | Stream cipher (tableau 256 octets) | Stream cipher ARX | Stream cipher ARX |
| Structure | permutation, biais | matrice 4Ă4, ARX | matrice 4Ă4, ARX amĂ©liorĂ© |
| Rounds | â | 20 | 20 |
| Failles connues | nombreuses | aucune pratique | aucune pratique |
| RFC | RFC 7465 (interdit) | non standardisé | RFC 7539 |
| Usage TLS | obsolĂšte | non | oui (TLS 1.3) |
| Performance | rapide, biaisé | rapide, sûr | trÚs rapide, sûr |
| Style | âlegacy vintageâ | âminimaliste acadĂ©miqueâ | âhipster industrielâ |
đ» Conclusion â Du RC4 au ChaCha20 : le flot sâest clarifiĂ©
RC4, câĂ©tait la jeunesse insouciante : un XOR, deux index, et roule ma clĂ©.
Salsa20, câĂ©tait la maturitĂ© : de la structure, de la diffusion, une vraie rĂ©flexion.
ChaCha20, câest la version barbu-tatouĂ© : performant, Ă©lĂ©gant, standardisĂ©, et surtout toujours debout aprĂšs 15 ans.
Entre temps, la crypto a appris une leçon : la simplicitĂ© nâest pas lâennemie de la sĂ©curitĂ©.
Ce qui compte, câest la rigueur mathĂ©matique, la transparence et la vĂ©rifiabilitĂ©.
âLa cryptographie nâĂ©choue jamais. Ce sont les humains qui le font.â â Bruce Schneier, probablement entre deux biĂšres.
Et si un jour vous tombez sur un serveur encore en RC4, souvenez-vous :
ce nâest pas un chiffrement, câest un hommage posthume.
Références
- RFC 7465 â Prohibiting RC4 Cipher Suites
- RFC 7539 â ChaCha20 and Poly1305 for IETF Protocols
- D.J. Bernstein â Salsa20 specification (2005)
- D.J. Bernstein â ChaCha, a variant of Salsa20 (2008)
- AlFardan, Bernstein, Paterson et al. â On the Security of RC4 in TLS
- Fluhrer, Mantin, Shamir â Weaknesses in the Key Scheduling Algorithm of RC4 (2001)
