Le réseau de Feistel

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


Le réseau de Feistel est un schéma d’algorithme créé par le cryptographe américain Horst Feistel dans les années 80.

C’est un algorithme de chiffrement par bloc qui se déroule en plusieurs tours ou étages. Visuellement voilà comment il fonctionne :

800px-schc3a9ma_de_feistel.svg_.png

Pour commencer nous allons prendre un message en clair. Ce message, on va le découper en deux blocs de taille égale que l’on notera L et L0. Comme vous pouvez le voir à chaque étage nous allons appliquer une fonction F à un bloc et xorer le résultat avec le second bloc puis nous allons effectuer l’opération inverse.

A savoir qu’ici nous appliquons toujours la même fonction. Rien ne nous empêche d’en appliquer quatre différentes ou même plus.

Une fois tous les étages descendus nous n’aurons plus qu’à concaténer nos blocs finaux L et L0 afin d’obtenir notre message chiffré.

Dans la pratique voilà ce que ça donne.

Je vais définir une fonction F tel que pour tout bit entrant « xx » on retourne les bits « yy » :

Entrée F Sortie
00 ———————> 01
01 ———————> 11
10 ———————> 10
11 ———————> 00

et voici le réseau de Feistel que l’on utilisera :

Capture d’écran du 2019-04-25 17-12-35.png

Prenons le message « 1101 », comme je vous l’ai dis plus haut on va commencer par casser ce bloc de données en deux sous blocs :

Capture d’écran du 2019-04-25 17-13-16.png

En descendant d’un étage nous voyons que le contenu de L0 passe par la fonction F or si l’entrée de F est 01 alors sa sortie est 11. Puis on remarque que ce résultat est xoré avec L ce qui nous donne 11 xor 11 = 00. Par conséquent L0′ = 00 et L’ = 01 :

Capture d’écran du 2019-04-25 17-14-04.png

Redescendons encore d’un étage, on voit que le contenu de L0′ passe par la fonction F or si l’entrée de F est 00 alors sa sortie est 01 et 01 xoré avec 01 ça donne 00. Par conséquent L » vaut 00 et L0″ vaut 00. Il ne nous reste plus qu’à concaténer L » et L0″ pour obtenir notre message chiffré :

Capture d’écran du 2019-04-25 17-21-18.png

Pour le déchiffrement on suivra les mêmes opérations dans le sens inverse ! Voilà pour le réseau de Feistel. Cette structure est toujours implémentée dans les gros algorithmes tels que DES ou encore blowfish. La seule différence c’est que la fonction F sera plus complexe et qu’en plus de ça une donnée pseudo aléatoire sera ajouté à chaque étage afin de renforcer le chiffrement.

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