Encryptage à clé secrète RC4

Caspar Fall, IPA-DP-EPFL, Lausanne, Printemps 1998
L'encryptage parfaitement sûr et incassable existe. Il suffit pour cela de chiffrer le texte en clair en effectuant un OU-EXCLUSIF avec une suite aléatoire de bits. Cette technique de codage est difficile à mettre en oeuvre pratiquement, car le destinataire doit connaître par avance la même suite de bits, qui constitue la clé.

Les algorithmes modernes à clé secrète, tel que RC4, génèrent donc une suite de bits pseudo-aléatoire. On combine par OU-EXCLUSIF le texte à coder avec cette suite de bits. On procède par codage en continu: chaque octet est codé directement, sans partager le message en blocs. Le décryptage, symétrique, se fait en répétant la même opération.

RC4 a été inventé par Rivest en 1987, il fonctionne avec une clé de longueur variable. Il est très simple à implémenter. On dispose d'une table de substitution de 256 octets. Après avoir été initialisée grâce à la clé, elle est utilisée pour générer une suite de nombres pseudo-aléatoires entre 0 et 255. Au fur et à mesure que le codage se poursuit, la table de substitution évolue lentement, indépendamment du texte codé. Ainsi, s'il y a une erreur de transmission, toute la suite du message restera déchiffrable. Il n'y a pas de rétroaction de sortie (Output-Feedback).

Cet algorithme a été conçu pour des machines 8 bits. L'interface Mathematica étant indépendant de la précision, on ne peut pas exploiter cette caractéristique dans l'implementation. Il en résulte donc un exercice plutôt académique, présenté ici à titre éducatif, dont l'efficacité finale est très médiocre.

Initialisations

Définition de RC4

Initialisation de la table de substitution de RC4, basée sur la clé

[Graphics:secretdemogr2.gif][Graphics:secretdemogr1.gif]

Routine principale de codage/décodage RC4

[Graphics:secretdemogr2.gif][Graphics:secretdemogr3.gif]

Utilisation de RC4

On peut maintenant faire un test de codage

On définit la clé, qui peut être d'une longueur maximale de 256 caractères, ainsi que le message à transmettre, de longueur quelconque:
[Graphics:secretdemogr2.gif][Graphics:secretdemogr4.gif]
On code le texte à l'aide de l'algorithme RC4:
[Graphics:secretdemogr2.gif][Graphics:secretdemogr5.gif]
[Graphics:secretdemogr2.gif][Graphics:secretdemogr6.gif]
Connaissant la clé secrète, le décodage s'effectue par la même opération:
[Graphics:secretdemogr2.gif][Graphics:secretdemogr7.gif]
[Graphics:secretdemogr2.gif][Graphics:secretdemogr8.gif]

Introduction d'une erreur de transmission

Si on introduit une erreur dans le message codé, toute la suite reste lisible:
[Graphics:secretdemogr2.gif][Graphics:secretdemogr9.gif]
[Graphics:secretdemogr2.gif][Graphics:secretdemogr10.gif]
[Graphics:secretdemogr2.gif][Graphics:secretdemogr11.gif]