🌊 Chiffrement par flot : de RC4 (RIP) à ChaCha20 (le hipster de TLS)

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 WEPSSLTLS 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 ij. 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 MitzvahRC4 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 :

matrice de mot 32bits de salsa20

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

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 NaCllibsodium, 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 :

fonction round chacha20

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.3WireGuardOpenSSHQUIC â€” 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ĂšreRC4Salsa20ChaCha20
Année198720052008
TypeStream cipher (tableau 256 octets)Stream cipher ARXStream cipher ARX
Structurepermutation, biaismatrice 4×4, ARXmatrice 4×4, ARX amĂ©liorĂ©
Rounds–2020
Failles connuesnombreusesaucune pratiqueaucune pratique
RFCRFC 7465 (interdit)non standardiséRFC 7539
Usage TLSobsolĂštenonoui (TLS 1.3)
Performancerapide, biaisérapide, sûrtrÚ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)
🌊 Chiffrement par flot : de RC4 (RIP) à ChaCha20 (le hipster de TLS)
Partager cet article : Twitter LinkedIn WhatsApp

đŸ–‹ïž PubliĂ© sur SecuSlice.com

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Retour en haut