Rivest Cipher 4 (RC4)

To the non-french speaker, note that you can translate the articles using the Google Trad widget situated at the bottom of all pages.


RC4 est un algorithme de chiffrement qui a été crée par Ronald Rivest en 1987 (un des inventeurs du RSA). Pendant quelques années le code algorithmique a été gardé secret mais comme tout bon secret il a leaké.

Cet algorithme était très largement utilisé par le protocole sécuritaire wifi WEP ainsi que WPA1 et c’est d’ailleurs grâce aux faiblesses de RC4 qu’on a pu cracker WEP. On le retrouvait aussi parfois dans le protocole TLS mais très rapidement il a été prouvé qu’il était obsolète.

Dans cet article nous verrons donc comment RC4 fonctionne et quelles sont les failles de cet algorithme.

I/Fonctionnement de l’algorithme

Première précision, RC4 est un algorithme de chiffrement par flux. Cet algorithme va nous permettre de générer une suite de bits aléatoires que l’on va xorer avec le message en clair afin d’obtenir le message chiffré.

Pour générer notre suite de bits aléatoires nous allons avoir besoin d’une clé de taille comprise entre 1 et 256 octets. La plupart de temps on utilise des tailles de clés de 40 bits (5 octets) ou encore 128 bits (16 octets). Quoiqu’il en soit, avec cette clé nous allons pouvoir initialiser un tableau de 256 octets en la répétant x fois.

A partir de ce tableau nous allons effectuer des permutations afin de le mélanger en suivant l’algorithme du key shedule dont voici le pseudo code :

pour i de 0 à 255
    S[i] := i
finpour
j := 0
pour i de 0 à 255
    j := (j + S[i] + clé[i mod longueur_clé]) mod 256
    échanger(S[i], S[j])
finpour

Nous obtenons donc un deuxième tableau qui sera notre suite de bits aléatoires. C’est dans ce tableau que nous allons piocher nos octets pseudo aléatoires que l’on xorera avec notre message en clair :

pour i de 0 à 255
    S[i] := i
finpour
j := 0
pour i de 0 à 255
    j := (j + S[i] + clé[i mod longueur_clé]) mod 256
    échanger(S[i], S[j])
finpour

Pour rappel l’opérateur XOR (ou « Ou Exclusif ») est défini comme ceci :

xor

Si deux bits sont identiques alors le XOR de ces deux valeurs vaut 0. A l’inverse si les deux bits sont différents alors le XOR de ces deux bits vaut 1.

Dans le tableau généré pseudo aléatoirement on va piocher des bits que l’on va XORÉ avec notre message. Concrètement voici ce que nous allons faire :

xoré.png

Et à l’inverse si on veut retrouver notre message en clair nous ferons l’opération inverse. On va XORÉ le message chiffré avec les bits piochés dans le tableau.

unxoré

Voila donc comment fonctionne le chiffrement RC4.

II/ Problème de sécurité

Il y a trois règles d’or à respecter lorsque l’on utilise l’algorithme RC4 et les algorithmes de chiffrement par flux en général :

  • Ne jamais utiliser deux fois la même clé

La raison est simple, si je chiffre deux messages différents avec une même clé alors en xorant ces deux message chiffrés je vais obtenir le xor du message clair. En bruteforcant un peu le résultat on pourra donc déchiffrer les deux messages et du coup récupérer la clé de chiffrement.

  • Jeter les 512 premiers octets de la sortie RC4

On jette les 512 premiers octets afin d’éviter de tomber sur une clé dites faible c’est à dire facilement crackable. Par exemple, les clés qui commencent par « 00 00 FD » ont 14 % de chance de produire une sortie qui commence par « 00 00 ». On peut donc procéder à une attaque statistique afin de casser RC4.

De nombreuses attaques ont été mené par des cryptologues et cryptanalystes notamment l’attaque FMS (Fluhrer, Mantin et Shamir) qui se serve justement des clés faibles et donc des premiers octets du flux afin de déterminer la suite

  • Ne pas chiffrer plus de 2^36 octets de données avec la même clé

Encore une fois pour éviter des problèmes de crackage de clés. Plus le nombre de données chiffrées augmentent plus il est simple de cracker la clé.

III/Conclusion

La conclusion est simple, RC4 est obsolète. Il ne faut plus l’utiliser. Comme je vous l’ai dit plus tôt, le protocole WEP a été cracké en parti à cause des failles du RC4. En parlant de WEP, je suis entrain de faire une refonte de l’article que je trouvais trop léger. L’article sera donc indisponible quelques jours le temps que je le réécrive. ! 😉

 

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l'aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s