Les modes de chiffrement

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


Un mode de chiffrement est utilisé dans la cryptologie à chiffrement par bloc afin de déterminer la manière dont un message sera découpé en bloc, comment ces blocs seront traités entre eux et comment ils seront rassemblés afin de former le message chiffré final.

Prenons un exemple : je dispose d’un message de 256 bits que je veux chiffrer via l’algorithme DES. Il va falloir que je découpe mon message initial en quatre bloc de 64 bits et que j’y applique l’algorithme DES. J’obtiendrai au final 4 blocs de 64 bits chiffrés.

Mais comment est-ce que je vais rassembler ces blocs ? En les concaténant tout simplement ? C’est une possibilité mais c’est loin d’être la plus sûre (comme on le verra d’ici peu).

A la place je pourrais xorer ces blocs entre eux et les concaténer quatre fois ou encore xoré chacun des blocs avec une autre donnée (une chaîne de caractère, un nombre…)

Cette façon de procéder, c’est le mode de chiffrement qui va nous l’indiquer. D’ailleurs si vous regardez bien les standards de chiffrement vous verrez que ce n’est jamais juste « AES » mais toujours « AES-XXX-YYY » avec XXX la taille de la clé de chiffrement et YYY le fameux mode de chiffrement :

Capture d’écran du 2019-04-26 23-20-20.png

Il faut donc toujours faire attention lorsque l’on lit ce genre de standard car une implémentation d’un protocole tel qu’AES avec une clé faible et un mauvais mode de chiffrement rend l’algorithme beaucoup moins sécurisé.

Dans cet article nous verrons comment fonctionne quatre mode de chiffrement : ECB, CBC, OFB et CTR.

I/ Mode de chiffrement ECB

ECB (pour Electronic Cooking Book) est le mode de chiffrement le plus simple a utilisé mais aussi le moins sécurisé. Pour commencer on prend un message à chiffrer que l’on va découper en plusieurs blocs de taille égale (pour DES on les découpera en bloc de 64 bits, pour AES ce sera des blocs de 128 bits) :

Capture d’écran du 2019-04-26 18-18-32.png

Chacun de ces blocs va être chiffré indépendamment (en parallèle) puis concaténer afin d’obtenir le message chiffré final :

Capture d’écran du 2019-04-26 18-28-21.png

Comme je vous le disais dans l’introduction de cet article, ce mode de chiffrement n’est pas recommandé. En effet deux blocs de texte clair sont chiffrés de la même manière or cela va permettre à un attaquant de faire plusieurs corrélations afin de potentiellement, si ce n’est déchiffrer le texte chiffré au complet, au moins d’en deviner quelques parties et donc de les manipuler.

Un exemple qui revient souvent lorsque l’on parle d’ECB c’est Tux le pingouin mascotte de Linux. Voyez plutôt l’image ci-dessous :

Capture d’écran du 2019-04-26 23-49-29.png

On remarque de suite que l’image chiffrée via le mode de chiffrement ECB, même si elle a été chiffré, est reconnaissable ! Alors bien évidemment cela ne veut pas dire vous pourrez déchiffrer tout contenu chiffré via ECB. Mais cela implique quand même que vous pourrez y trouver certaines informations qui vous permettront d’en déchiffrer une partie.

Il est donc préférable de ne pas utiliser ce mode opératoire.

II/ Mode opératoire CBC

CBC (pour Cipher Block Chaining) est actuellement le mode de chiffrement le plus utilisé. Voici comment il fonctionne :

Capture d’écran du 2019-04-26 23-50-31.png

Rien de bien compliquer non plus ici. Chaque bloc de données est chiffré à l’aide du précédent bloc sauf le premier bloc qui lui est initialisée avec un vecteur d’initialisation.

Ce mode de chiffrement  est actuellement l’un des plus utilisés puisqu’il offre un niveau de chiffrement assez fort. Pour autant il présente quand même quelques désavantages à commencer par sa lenteur. En effet ici il est impossible de paralléliser le chiffrement des blocs puisque chaque bloc est xoré avec le bloc précédemment chiffré.

De plus si le moindre bloc de données chiffré est perdu et bien il sera impossible de déchiffrer le message. Il ne faudra donc pas utiliser le mode CBC au cours d’une communication UDP.

III/ Mode de chiffrement OFB

OFB (pour Output Feedback) est un mode un peu particulier car c’est un mode de chiffrement par flux et non plus par bloc. Ce mode de chiffrement fonctionne quasiment de la même manière que CBC dans le sens ou, le bloc n+1 est chiffré à l’aide du bloc n. Le premier bloc étant, quant à lui, initialisé à l’aide d’un vecteur d’initialisation :

Capture d’écran du 2019-04-27 10-54-14.png

On notera tout de même qu’il est possible de déchiffrer un texte chiffré de manière parallèle ce qui le rend un peu plus rapide.

IV/ Mode de chiffrement CTR

CTR (pour CounTeR) est le dernier mode dont on parlera dans cet article et fonctionne comme OFB à la seule différence que CTR prend un paramètre en plus : un compteur

Capture d’écran du 2019-04-27 11-12-58.png

Ce qui a pour effet de rendre le chiffrement un peu plus fort.


Voilà pour les modes de chiffrement. Ce qu’il faut retenir globalement c’est que suivant le mode de chiffrement utilisé, un algorithme peut devenir très peu fiable. Il est donc impératif lorsque l’on choisit une solution de chiffrement de faire attention à l’algorithme de chiffrement utilisé, à la taille de la clé de chiffrement ainsi qu’au mode de chiffrement employé.

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