Chiffrement AES 1

Publié le 5 février 2020
Proposé par Louis Viratelleamendé par Noé Barrême 

Un chiffrage mit en place pour répondre à un besoin de plus en plus pressant

L’acronyme AES désigne Advanced Encryption Standard, autrement dit un standard de chiffrement avancé. Ce système de chiffrement est développé depuis maintenant 1997. C’est l’institut national des standards et des technologies qui a incité à créer ce système de chiffrement. La motivation première de l’AES était de remplacer à terme le DES (Data Encryption Standard), un système de chiffrement devenu faillible et vieillissant au vu des avancées technologiques et de l’ampleur que prenait le numérique. L’AES est de nos jours un standard, tant pour les particuliers qui souhaitent protéger leurs données que pour le domaine des professionnels. Comme dit précédemment, il s’agit d’une certaine institution nationale qui a voulu ce nouveau chiffrement. Un concours fut mit en place entre plusieurs compétiteurs pour pousser les équipes expertes en cryptographie à se surpasser dans la conception de ce standard informatique libre. Deux finalistes se sont démarqués des autres et sont alors à l’origine du chiffrement AES. Il s’agit de Joan Daemen et Vincent Rijmen, deux cryptographes belges ayant déjà conçu des algorithmes à la vocation similaire.

L’AES est un standard libre d’utilisation, sans restriction d’usage ni brevet. Cette particularité le rend très fiable quand il est revendiqué, car son fonctionnement peut être vu des yeux de n’importe qui, il n’y a aucun secret dans son fonctionnement. Et du fait de cette particularité, nous allons pouvoir aborder le fonctionnement de l’AES dans ce LexTech.

Un chiffrage polyvalent et très sécurisé 

Ce chiffrement est symétrique de bout en bout, cela signifie qu’il repose sur une unique clé de chiffrage, qui doit être possédée par qui que ce soit pour rendre les données exploitables. C’est la complexité de la clé qui définit la complexité du chiffrement et donc sa résistance aux attaques. D’autres spécificités de ce chiffrement comme son fonctionnement par blocs et la possibilité de le rendre plus ou moins fort lui sont propres. En effet, son principe repose sur un système 128-bit, 192-bit ou 256- bit. En d’autre terme, il s’agit de 3.4 x 1038 clés possibles pour le chiffrement 128-bit, 6.2 x 1057 clés pour le 192-bit et enfin 1.1 x 1077 clés pour le 256-bit.

Comparé au DES, c’est donc un chiffrement bien plus fiable et fort de par le nombre de combinaison possible. Essayer d’accéder aux données nécessiterait pour un ordinateur à la logique binaire (qui doit essayer une à une chacune des possibilités) une durée immense pour arriver à un résultat. Cette durée se compte en centaine d’années, ce qui à l’échelle de la vie humaine est bien trop élevé pour être intéressant, voire faisable.

Le chiffrage AES a permis de se démarquer en proposant une grande sécurité tout en consommant peu de ressource calculatoire. Entre d’autres termes, utiliser ce chiffrement sur des supports numériques qui chiffrent en temps réel les données est possible et n’impactera que très peu les performances du serveur. Il est possible de revendiquer le chiffrage d’un serveur sans que ce dernier soit paralysé par les ressources que demandent le chiffrement. C’est également un chiffrage qui est flexible d’usage, il peut s’adapter à beaucoup de supports numériques et s’appliquer autant à des services web qu’à des logiciels qui s’exécutent en local. Enfin notons qu’en ce jour, le chiffrement AES n’a jamais était attaqué de manière concluante. A l’heure actuelle, c’est un chiffrement d’une fiabilité très grande car aucun moyen n’est connu (ou rendu public) pour casser le chiffrement en exploitant une faille ou une limite de ce dernier. La seule vraie solution pour déchiffrer les données est directement de tester une à une chacune des clés possibles, or au vu de leur complexité et comme dit précédemment, c’est un processus beaucoup trop long pour être viable. Du moins avec nos appareils actuels qui fonctionnent suivant une logique binaire (oui, cette précision n’est pas anodine).

Le fonctionnement concret du chiffrement AES

Le chiffrement AES repose sur plusieurs combinaisons mathématiques exécutées dans un ordre bien spécifique. Notons qu’il s’agit d’un chiffrement par blocs, qui consiste à décomposer les données binaires en des “segments” de longueurs régulières. La clé de chiffrement agit indépendamment sur chacun des blocs, avant de combiner l’entièreté des données chiffrées. Le chiffrement par bloc s’oppose au chiffrement par flux, qui lui repose sur le chiffrage entier de l’ensemble des données, bit par bit. Chaque nouveau bit traité utilise une clé de chiffrement dérivée de celle de base. Chaque bloc de l’AES est composé de 128-bit. Quand aux clés, elles peuvent détenir une complexité montant jusqu’à 256-bit, comme présenté plus tôt. L’intérêt des blocs est de pouvoir ajuster leur grandeur en fonction de la clé de chiffrement. De ce fait il est possible d’appliquer la technique de chiffrement de Vernam qui est considérée comme parfaite. Une seule limite vient gâcher la fête, la clé de chiffrement n’est pas la même pour chaque bloc, alors que la loi est dite parfaite uniquement quand la donnée à chiffrer est aussi longue que la clé de chiffrement. Or ce n’est pas le cas ici-même et pour compenser cela, il sera question d’utiliser un assemblage bien particulier.

Le chiffrement de chaque bloc repose sur le code binaire de la donnée à chiffrer, que nous allons noter A. Le code binaire noté B sera la clé de chiffrement (le “mot de passe”, en quelque sorte).

Mettons en parallèle le code de la donnée A :

01010100 01100101 01100011 01101000 01001101 01101001 01101100 01101001 01110011 01101101 01100101 00001101 00001010

Avec la clé de chiffrement B de code : 

00110000 00110111 10100100 10111011 10000111 01100111 11101100 11110011 10101010 10101100 00010001 01111110 11111001

En respectant la transformation dictée par l’image ci-dessous, nous allons chiffrer la donnée. Si le chiffre de la donnée A est 0 et le chiffre de la donnée B est 0, A+B= 0, même logique pour les autres lignes du tableau, et ce pour chaque chiffre de chaque donnée binaire. Le premier chiffre A est mit en parallèle avec le premier chiffre B, le second chiffre A est mit en parallèle avec le second chiffre B, etc…

Chiffrement AES 2

Nous obtenons ainsi le résultat :

A+= 01100100 01010010 11000111 11010011 11001010 00001110 10010011 10011010 11011001 11000001 01110100 01110011 11110101

Récapitulons les résultats dans l’image ci-dessous. Nous voyons que le chiffrement par la méthode de Vernam fonctionne correctement et qu’il permet d’obtenir un code binaire chiffré illisible quand nous essayons à nouveau de le convertir en caractère alphanumérique. Une fois le même processus réalisé entre le résultat A + B et la clé de chiffrement B, nous obtenons de nouveau la donnée A, nous venons donc de réaliser un déchiffrage. Notons qu’en cryptographie, la donnée A + B porte un nom spécifique, XOR.

Chiffrement AES 3

Maintenant que chaque bloc est chiffré, il faut les rassembler pour produire un seul code binaire, qui pourra être considéré comme étant du type AES. Pour se faire, la technique la plus simple et logique est problématique. La juxtaposition des blocs, c’est à dire leur alignement les uns à la suite des autres se nomme Electronic Code Book (ECB), or, elle met en évidence les données chiffrées similaires. En effet, si deux blocs possèdent des données similaires, une fois ces derniers chiffrés, les caractères seront similaires entre chacun de ces blocs. Il est alors possible de posséder beaucoup d’indices sur les informations chiffrées. Dans le cas d’une image et d’un assemblage par bloc avec cette première technique, le résultat serait similaire à l’image ci-dessous (Image with AES using ECB). Comme vous le voyez, les formes et les contours de l’image sont discernables car l’image est structurée binairement, de manière récurrente en fonction des “secteurs” (grosso-modo, chaque aplat de couleurs correspond à un unique modèle de bloc, l’image chiffré laisse alors apparent le dessin, les contours de l’image de base).

Pour contrer cette faille, une autre technique est mise au point, et est dans la plupart des cas celle qui est utilisée pour chiffrer en AES. Il s’agit de l’assemblage nommé Cipher Block Chaining (CBC).

Dans un premier temps un vecteur d’initialisation est généré. Il s’agit d’une clé aléatoire, abrégé “IV”. Cette clé est la donnée B, la clé de chiffrement. Le chiffrement qui suit la logique de Vernam est donc réalisé entre la donnée A qui doit être protégée et la donnée B, la clé de chiffrement générée. Autrement dit on réalise le XOR entre

A et B. Le code binaire A + B qui résulte du XOR est quand à lui chiffré à nouveau à l’aide de la clé de chiffrement de l’utilisateur, que nous noterons C. Le résultat C est par la suite utilisé pour devenir la clé de chiffrement entre le A et le B du bloc suivant. Ces étapes se répètent en boucle et permettent d’obtenir l’image ci-dessous notée Image with AES using CBC.

Chiffrement AES 4

De gauche à droite, l’image originale, l’image chiffrée AES avec le modèle d’assemblage ECB et l’image chiffrée AES avec le modèle d’assemblage CBC.

En conclusion, le chiffrement se déroule suivant le calcul suivant (le symbole “⊕” représente le procédé mathématique XOR) :

premier tour, on note Dx le code binaire chiffré en fonction de B la clé de chiffrement générée, A1 la donnée à protéger du bloc 1 et C la clé de chiffrement de l’utilisateur : 

D= (A1 ⊕ B) ⊕ C

second tour, soit D0 le résultat du chiffrement précédent, A2 la donnée à protéger du bloc 2 et C la clé de chiffrement de l’utilisateur :

D1 = (A2 ⊕ D0) ⊕ C

Avec ce système, nous sommes en mesure de chiffrer de manière sécurisée les données, en alignant les blocs les uns à la suite des autres sans qu’aucune structure pouvant donner un indice sur les données chiffrées soit visible et existante. Enfin, pour déchiffrer les données, l’opération inverse est effectuée, en se basant bien entendu sur la même et l’unique clé de chiffrement de l’utilisateur.

Partage

Nous retrouver.