¤¤¤¤¤¤¤¤¤¤
MINISTERE DE L’ENSEIGNEMENT SUPERIEUR ET DE LA RECHERCHE SCIENTIFIQUE
¤¤¤¤¤¤¤¤¤¤¤¤
UNIVERSITE D’ABOMEY-CALAVI (UAC)
¤¤¤¤¤¤¤¤¤¤¤¤¤
ECOLE POLYTECHNIQUE D’ABOMEY-CALAVI (EPAC)
¤¤¤¤¤¤¤¤¤¤¤¤¤¤
DEPARTEMENT DE GENIE INFORMATIQUE ET TELECOMMUNICATIONS (GIT)
Option : Réseaux Informatiques et Internet (RII)
MEMOIRE DE FIN DE FORMATION POUR L’OBTENTION DU
DIPLOME D’INGENIEUR DE CONCEPTION
THEME :
Présenté par : Sous la direction du :
Comlan Edmond KOUDJINAN Cne Orphée HOUNKANRIN, Ir.
Ltn Bidossessi ALAHASSA, Ir.
Année académique : 2013-2014
𝟕
è𝒎𝒆Promotion
Implémentation du standard AES-128 et application au chiffrement des codes QR
Réalisé par Comlan Edmond KOUDJINAN Page 2
Sommaire
DEDICACES ... 3
REMERCIEMENTS ... 4
LISTES DES SIGLES ET ABREVIATIONS ... 5
LISTE DES TABLEAUX ... 6
LISTE DES FIGURES ... 7
RESUME : ... 8
ABSTRACT: ... 9
INTRODUCTION GENERALE ... 10
PREMIERE PARTIE : AES-128 ... 13
CHAPITRE 1 :ETAT DE L’ART DE LA CRYPTOGRAPHIE ... 14
CHAPITRE 2 :ETUDE DES DIFFERENTES APPROCHES POSSIBLES POUR L’IMPLEMENTATION DE L’AES-128 .. 27
CHAPITRE 3 :IMPLEMENTATION D’UNE APPROCHE DE L’AES-128 SOUS MATLAB ... 35
CHAPITRE 4 :IMPLEMENTATION D’UN MODE OPERATOIRE POUR L’AES-128 ... 42
DEUXIEME PARTIE : CODE QR ET APPLICATION DE L’AES-128 ... 55
CHAPITRE 5 :GENERALITES SUR LES CODES QR ... 56
CHAPITRE 6 :PRESENTATION DES ALGORITHMES DE GENERATION ET DE DECODAGE DES CODES QR ... 59
CHAPITRE 7 :APPLICATION DE L’AES-128 AU CHIFFREMENT DES CODES QR ... 65
TROISIEME PARTIE : TESTS, RESULTATS ET DISCUSSIONS ... 68
CHAPITRE 8 :PRESENTATION DU PROTOTYPE ... 69
CHAPITRE 9 :TESTS EFFECTUES, RESULTATS OBTENUS ET DISCUSSIONS ... 71
CONCLUSION ET PERSPECTIVES ... 76
BIBLIOGRAPHIE ... 77
WEBOGRAPHIE ... 79
ANNEXES ... 80
ENGLISH VERSION ... 83
Table des matières
Réalisé par Comlan Edmond KOUDJINAN Page 3
Dédicaces
A
Ma mère Cécile ADANDJESSO Mon feu père Sossou Pierre KOUDJINAN
Réalisé par Comlan Edmond KOUDJINAN Page 4
Remerciements
Nous manifestons toute notre gratitude envers Dieu pour toutes les merveilles qu’il ne cesse d’accomplir dans notre vie.
Nous remercions aussi :
– le Pr. Félicien AVLESSI, Directeur de L’Ecole Polytechnique d’Abomey- Calavi (EPAC) et tout le personnel administratif ;
– le Pr. Marc Kokou ASSOGBA, Chef de Département du Génie Informa- tique et Télécommunications ;
– Le Capitaine Orphée HOUNKANRIN, maître de ce mémoire, pour toute sa patience et son suivi;
– Le Lieutenant Bidossessi ALAHASSA, co-maître de ce mémoire, pour tou- tes ses contributions;
– Tous les enseignants de l’EPAC, pour la richesse de leurs enseignements ; – Mr Théophile OLORY, pour son soutien ;
– Mr Romaric LAVAGNON, Mr Norbert GBETOHO, pour leurs contribu- tions;
– Notre chère Cica Clarisse OLYMPIO ;
– Nos camarades en général et en particulier Mr Eric DEGBOE pour tous ses conseils;
– Nos parents et amis ;
– Tous ceux dont nous n’avons pas pu citer le nom et qui, d’une façon ou d’une autre nous ont aidés dans la réalisation de ce travail ;
Réalisé par Comlan Edmond KOUDJINAN Page 5
Listes des sigles et abréviations
QR : Quick Response
AES : Advanced Encryption Standard
ECB : Electronic Code Book
CBC : Cipher Block Chaining
CFB : Cipher FeedBack
OFB : Output FeedBack
CTR : CounTeR
PCBC : Propagating Cipher Block Chaining
JIS : Japanese Industrial Standard
ISO : International Organization for Standardization
UTF : Unicode Transformation Format
IV: Initialization Vector
Réalisé par Comlan Edmond KOUDJINAN Page 6
Liste des tableaux
Tableau 1 : Table de comparaison des codes-barres ... 58
Tableau 2 : Caractères alphanumériques et leurs valeurs ... 61
Tableau 3 : Niveaux du correcteur et leurs capacités respectives ... 62
Tableau 4 : Mode d’encodage et indicateur ... 62
Réalisé par Comlan Edmond KOUDJINAN Page 7
Liste des figures
Figure 1 : Représentation matricielle d’une séquence de 128 bits ... 18
Figure 2 : Transformation SubBytes ... 22
Figure 3 : Transformation ShiftRows... 24
Figure 4: Organigramme de l’algorithme de chiffrement de l’AES-128 ... 38
Figure 6 : Mode CBC (chiffrement et déchiffrement) ... 45
Figure 7 : Mode CFB (chiffrement et déchiffrement) ... 47
Figure 8 : Mode OFB (chiffrement et déchiffrement) ... 49
Figure 9 : Mode CTR (chiffrement et déchiffrement) ... 50
Figure 10 : Mode PCBC (chiffrement et déchiffrement) ... 52
Figure 11 : Organigramme de l’algorithme de décodage ... 64
Figure 12 : Organigramme de l’interaction entre l’AES-128 et le code QR ... 67
Figure 13 : Fenêtre principale de l’interface graphique ... 69
Réalisé par Comlan Edmond KOUDJINAN Page 8
Résumé :
Dans ce mémoire, nous avons implémenté l’AES-128 puis nous l’avons appli- qué au chiffrement des codes QR en vue d’assurer, entre autres, la confidentialité des codes QR. Nous étudions dans un premier temps, les différentes approches pour l’implémentation de l’AES-128. Ensuite, nous réalisons l’implémentation de l’une de ces approches sous MATLAB. Enfin, nous étudions l’algorithme de gé- nération et de décodage des codes QR puis nous y ajoutons le bloc de chiffrement pour produire un générateur de codes QR chiffrés ainsi que le décodeur corres- pondant.
Mots clés :
AES-128, codes QR, cryptographie.Réalisé par Comlan Edmond KOUDJINAN Page 9
Abstract:
This thesis implement the standard AES-128 and apply it to encrypt QR codes.
We study first the different approaches for implementing of the AES-128. Then we implement one of these approaches with MATLAB in modular fashion. Fi- nally, we examine the generation and decoding algorithms of the QR code for adding the cipher code to obtain the generator of encrypt QR code and the corre- sponding decoder.
Keywords :
AES-128, QR codes, cryptography.Réalisé par Comlan Edmond KOUDJINAN Page 10
Introduction générale
Le besoin de protéger certaines informations à caractère sensible au regard de critères variés, a toujours existé depuis que l’Homme communique. Les premières réponses à cette nécessité ont pris des formes diverses, allant des premiers codes secrets aux cryptogrammes embryonnaires plus élaborés les uns que les autres au fil du temps. Depuis l’avènement des problématiques de sécurité induites par l’in- formatique dans l’acheminement de l’information, il est apparu la nécessité d’as- surer la confidentialité et l’intégrité des données échangées entre entités d’extré- mité. Cette époque a coïncidé avec la genèse de l’âge paradoxal de la cryptogra- phie, avec le concours des mathématiques (J. Stern, 1998). Depuis lors, la crypto- graphie a parcouru un chemin remarquable et dans un monde où chaque jour, le numérique gagne du terrain, elle affirme sa place centrale dans l’univers de la sécurité informatique. Avec Internet notamment et l’accélération du développe- ment de l’informatique, la science a pris une nouvelle dimension avec la concep- tion de techniques de plus en plus sophistiquées telles que le Data Encryption Standard (DES). Celui-ci, déclaré « incassable » dès sa conception en 1975, a été choisi comme norme aux Etats-Unis en 1975 et est devenu le système cryptogra- phique le plus utilisé dans le monde. Au fil des années, la taille des clés (56 bits) du DES devenait trop petite pour les performances sans cesse croissantes des or- dinateurs modernes. En 1998, le défi a été résolu en quelques jours par une ma- chine spécialement construite pour retrouver la clé par une attaque exhaustive.
Il fallait alors trouver un successeur au DES « vieillissant ». Ce problème a suscité une compétition organisée par le National Institute of Standard and Tech- nology (NIST). Parmi les 15 candidats, c’est RIJNDAEL, proposé par les cher- cheurs belges Vincent Rijmen et Joan Daemen, qui fut vainqueur pour être l’AES (Advanced Encryption Standard)1. L’algorithme proposait une longueur de blocs de 128 bits ou de 256 bits et plusieurs choix pour la longueur de la clé: 128, 192 ou 256 bits. Aujourd’hui, il est largement répandu. Son exploitation demande une implémentation, que ce mémoire se propose de réaliser. Dans un premier temps, l’objectif poursuivi a une vocation didactique, dans la mesure où un didacticiel axé sur l’algorithme qui permettra entre autres d’illustrer l’AES-128 dans un cours de cryptographie est mis à la disposition du département de Génie Informatique et Télécommunications (GIT/EPAC). La seconde étape du travail vise une appli-
1 http://csrc.nist.gov/CryptoToolkit/aes/aesfact.html
Réalisé par Comlan Edmond KOUDJINAN Page 11
cation de l’algorithme aux codes QR qui aujourd’hui, sont susceptibles d’être in- terprétés à partir de terminaux mobiles, sur lesquels sont installés des applications conçues à cet effet.
1. Contexte, justification et problématique
Le développement fulgurant dont fait preuve la cryptanalyse ainsi que la solli- citation accrue de la cryptographie dans de multiples applications pour assurer la sécurité de l’information exigent de la part des cryptographes, de nouvelles inno- vations qui répondent aux contraintes sécuritaires actuelles. Au nombre de ces innovations, nous pouvons citer le crypto-système symétrique (à clé secrète) AES (Advanced Encryption Standard), l’un des plus utilisés au monde actuellement.
C’est un chiffrement par substitution-permutation. En effet, à chaque tour, le mes- sage chiffré produit par le tour précédent subit une substitution non-linéaire qui assure la confusion. Ensuite, le résultat obtenu subit une permutation linéaire qui assure la diffusion. Enfin, la clé du tour est ajoutée bit à bit au résultat de l’étape précédente pour donner le message chiffré. Le nombre de tours est dix (10) pour une clé de 128 bits et de quatorze (14) pour une clé de 256 bits (Joan Daemen et Vincent Rijmen, 1999).
Son implémentation lance de nombreux défis. Au cœur de ceux-ci, se trouve la compréhension des mathématiques associées à l’algorithme lui-même. Par ail- leurs, la cryptanalyse songe depuis longtemps à craquer cet algorithme. Pour y parvenir sa compréhension est fondamentale et une implémentation qui marche est indispensable pour toute étude de l’algorithme et toute application en l’occur- rence, l’application au chiffrement des codes QR.
Les codes-barres sont nés de l’idée de mettre au point un moyen de saisie auto- matique des données et des produits passant à la caisse dans le but d’une gestion plus efficace des magasins. Le brevet initial a été déposé par les Américains Nor- man Joseph Woodland et Bernard Silver le 20 octobre 19492. On les retrouve dans plusieurs configurations industrielles. Ils apparaissent notamment sur les pièces de camion, des dossiers, les cartons d’expédition, les coureurs de marathon et en- trent même dans les chantiers forestiers. De nos jours, les interpréteurs de codes- barres sont très répandus et des terminaux mobiles en sont équipés. N’importe qui peut alors avoir accès au message encodé par le code-barres. Un chiffrement de ces codes-barres permettrait donc d’en assurer entre autres, la confidentialité.
2 http://www.gomaro.ch/
Réalisé par Comlan Edmond KOUDJINAN Page 12
Ce projet vise alors une implémentation du standard AES-128 sous forme d’un didacticiel écrit de façon modulaire, qui permettra, lors d’un exposé du standard, d’illustrer avec forces détails le comportement de l’algorithme au fil de ses rondes.
Le volet pratique du projet consiste à appliquer l’implémentation ainsi faite au chiffrement des codes QR.
2. Objectifs
Les principaux objectifs qui s’inscrivent dans l'exploration de notre sujet sont :
l’analyse des différentes approches possibles pour l’implémentation, leurs avantages et inconvénients ;
l’implémentation de l’AES-128 sous Matlab ;
l’application de l’implémentation au chiffrement des codes QR.
Plus précisément, il s’agit de faire l’état de l’art et d’analyser les différentes approches possibles pour l’implémentation de l’algorithme. Dans la suite logique à ces étapes, il est question de procéder à une implémentation de l’AES-128 avant d’appliquer celle-ci au chiffrement des codes QR.
Réalisé par Comlan Edmond KOUDJINAN Page 13
Première partie : AES-128
Réalisé par Comlan Edmond KOUDJINAN Page 14
Chapitre 1 : Etat de l’art de la cryptographie
Il s’agira dans ce chapitre d’exposer dans un premier temps les généralités sur la cryptographie. Puis nous décrirons de façon complète l’AES-128.
1.1 Généralités sur la cryptographie
L’histoire de la cryptographie est très ancienne. Elle est née en Egypte il y a environ 4000 ans. Cependant, durant des siècles, les méthodes utilisées étaient restées souvent très primitives. Par ailleurs, sa mise en œuvre était limitée aux besoins de l’armée et de la diplomatie (D. Stinson, 1996).
Les méthodes de chiffrement et de cryptanalyse ont connues un développement très important au cours de la seconde guerre mondiale et ont eu une profonde influence sur le cours de celle-ci.
Mais c’est la prolifération actuelle des systèmes de communication qui a fait sortir la cryptographie du cadre militaire. De plus, elle a diversifié la demande et provoqué le développement de nouvelles techniques cryptographiques et donc cryptologiques de plus-en-plus sophistiquées ces dernières décennies.
La cryptologie est la science mathématique qui regroupe la cryptographie et la cryptanalyse.Elle est la science qui étudie les principes et techniques utilisés pour assurer (la cryptographie) ou compromettre (la cryptanalyse) les principales fonc- tions de sécurité.
La cryptanalyse est la science de la découverte (ou reconstitution) des informa- tions cachées par un processus cryptographique.
La cryptographie est la science de la dissimulation de messages : c’est l’art de définir des cryptogrammes. Selon le dictionnaire Larousse, c’estl’ensemble des principes, méthodes et techniques dont l’application assure le chiffrement et le déchiffrement des données, afin d’en préserver la confidentialité et l’authenticité.
Les principaux services offerts par la cryptographie moderne sont (D. Stinson, 1996) :
la confidentialité : assurer que les données concernées ne pourront être dé- voilées qu’aux personnes autorisées ;
l’intégrité : assurer que les données ne seront pas altérées (intentionnelle- ment ou non) pendant leur transmission ou leur stockage ;
Réalisé par Comlan Edmond KOUDJINAN Page 15
l’authentification : prouver l’origine d’une donnée ou la validité d’un objet cryptographique (clé, moyen de paiement, etc) ;
l’identification : prouver qu’un objet cryptographique ou une personne est exactement celui/celle qu’il/elle prétend être ;
la signature proprement dite : permettre à une personne de prendre part à un contrat avec impossibilité de renier ensuite son engagement.
Pour assurer ces services, il a été mis au point les crypto-systèmes. Un crypto- système est un ensemble 𝑆 = {𝒫, 𝒞, 𝒦, ℰ, 𝒟} où :
𝒫 est l’espace des messages clairs ;
𝒞 est l’espace des messages chiffrés ;
𝒦 est l’espace des clés ;
ℰ = {𝐸𝑘, 𝑘 ∈ 𝒦} avec 𝐸𝑘: 𝒫 → 𝒞 (l’ensemble des fonctions de chiffre- ment) ;
𝒟 = {𝐷𝑘, 𝑘 ∈ 𝒦} avec 𝐷𝑘: 𝒞 → 𝒫 (l’ensemble des fonctions de déchiffre- ment).
à chaque clé de chiffrement 𝑒 ∈ 𝒦 est associée une clé 𝑑 ∈ 𝒦 telle que : 𝐷𝑑(𝐸𝑒(𝑝)) = 𝑝 pour tout 𝑝 ∈ 𝒫 et 𝐸𝑒(𝐷𝑑(𝑐)) = 𝑐 pour tout 𝑐 ∈ 𝒞.
On parle de cryptographie à clé secrète ou symétrique (dont un exemple est l’AES) si d = e et de cryptographie à clé publique ou asymétrique si d ≠ e.
L’AES est un algorithme de chiffrement symétrique par bloc.
1.2 Généralités sur l’AES-128
1.2.1 Préliminaires mathématiques
1.2.1.1 Quelques rappels sur les corps finis
Définition
: Un corps fini est un triplet (𝐹, +,∗) où 𝐹 est un ensemble fini de cardinal au moins égal à 2 et +, * deux lois de composition interne tel que (𝐹, +) et (𝐹 − {0},∗) soient des groupes commutatifs.On appelle caractéristique de F, l’entier naturel non nul
𝑝 = min {𝑘 ∈ ℕ ∶ 𝑘. 𝟙𝐹 = 𝟘𝐹}. On rappelle que p est un nombre premier.
Nous énonçons les résultats fondamentaux (R. Lidl et H. Niederreiter, 1986):
Réalisé par Comlan Edmond KOUDJINAN Page 16
i. pour tout nombre premier 𝑝 et tout entier 𝑚 ≥ 1, il existe un corps 𝔽𝑝𝑚 tel que #𝔽𝑝𝑚 = 𝑝𝑚. Par contre, il n’existe pas de corps d’ordre 𝑞 si 𝑞 n’est pas une puissance d’un nombre premier. De plus, deux corps finis de même ordre sont isomorphes.
ii. soit 𝑝 un nombre premier.
Alors, l’ensemble des classes de congruence modulo 𝑝 muni de l’addition et de la multiplication modulo 𝑝 est un corps. De même, l’ensemble des classes de congruence dans 𝔽𝑝[𝑋] modulo un polynôme irréductible 𝑔 ∈ 𝔽𝑝[𝑋] de de- gré 𝑚 ≥ 1 muni de l’addition et de la multiplication modulo 𝑔 est un corps d’ordre 𝑝𝑚 . Tout corps fini peut être construit de cette manière. En effet, pour tout 𝑝 ≥ 1 , il existe toujours au moins un polynôme dans 𝔽𝑝[𝑋], irréductible et de degré 𝑚.
iii. sous l’addition, le corps 𝔽𝑝𝑚 est isomorphe à l’espace vectoriel (𝔽𝑝)𝑚 (𝑝 étant premier et 𝑚 ≥ 1). Sous la multiplication, les éléments non nuls de 𝔽𝑝𝑚 forme un groupe cyclique généré par un élément primitif 𝛼 ∈ 𝔽𝑝𝑚 et alors :
𝔽𝑝𝑚 = {0,1, 𝛼, ⋯ , 𝛼𝑝𝑚−2}.
En convenant que 𝛼−∞ = 0, cette représentation des éléments du corps 𝔽𝑝𝑚 sous la forme de puissances de 𝛼 est dite ‘logarithmique’ et permet d’effectuer de façon efficiente, la multiplication sur 𝔽𝑝𝑚.
iv. pour tout nombre premier 𝑝 et tout entier 𝑚 ≥ 1, 𝑜𝑛 𝑎 : 𝔽𝑝𝑚 = {𝑥 ∶ 𝑥 𝑎𝑛𝑛𝑢𝑙𝑒 𝑋𝑝𝑚 − 𝑋 ∈ 𝔽𝑝[𝑋]}.
v. pour tout nombre premier 𝑝 et tout entier 𝑚 ≥ 1, 𝑜𝑛 𝑎 ∶ 𝔽𝑝𝑚 ≅ (𝑔(𝑋))𝔽𝑝[𝑋] = {𝑎0+ 𝑎1𝑋 + ⋯ + 𝑎𝑚−1𝑋𝑚−1, 𝑎0, ⋯ , 𝑎𝑚−1 ∈ 𝔽𝑝} où 𝑔(𝑥) ∈ 𝔽𝑝[𝑋] est un polynôme irréductible de degré m. On peut alors représenter chaque élément de 𝔽𝑝𝑚 sous la forme d’un polynôme en 𝛼 de degré ≤ 𝑚 − 1 avec 𝛼, un générateur de 𝔽𝑝𝑚 .
Réalisé par Comlan Edmond KOUDJINAN Page 17
1.2.1.2 Spécificités de l’AES-128
Dans AES-128 (Joan Daemen et Vincent Rijmen, 1999) :
𝑝 = 2 et 𝑚 = 8 ;
le polynôme irréductible utilisé est 𝑔(𝑥) = 𝑥8+ 𝑥4+ 𝑥3+ 𝑥 + 1 (0𝑥11𝐵 en hexadécimale) ;
un générateur du groupe multiplicatif (𝑔(𝑋))𝔽2[𝑋] − {0} ≅ 𝔽28 − {0} est 𝑤 = 𝑋 + 1 ou 0𝑥03 (en hexadécimal, comme élément de 𝔽28) : 𝔽2[𝑋]
(𝑔(𝑋)) = {0} ∪ {𝑤𝑛 𝑚𝑜𝑑 𝑔(𝑥) ∶ 0 ≤ 𝑛 < 255}={𝑎0+ 𝑎1𝑋 + ⋯ + 𝑎7𝑋7, 𝑎0, ⋯ , 𝑎7 ∈ 𝔽2} ≅ {𝑎̅̅̅̅̅̅̅̅̅̅, 𝑎0⋯ 𝑎7 0, ⋯ , 𝑎7 ∈ 𝔽2} = 𝔽28. Pour 𝑎0, ⋯ , 𝑎7 ∈ 𝔽2 = {0,1}, l’octet 𝑎̅̅̅̅̅̅̅̅̅̅ de 𝔽0⋯ 𝑎7 28 est en pratique représenté sous forme hexadécimale.
l’addition dans 𝔽28 correspond au ou-exclusif ⊕ : Pour tous 𝑎0, ⋯ , 𝑎7, 𝑏, ⋯ , 𝑏7 ∈ 𝔽2, on a :
𝑎̅̅̅̅̅̅̅̅̅̅ + 𝑏0⋯ 𝑎7 ̅̅̅̅̅̅̅̅̅̅ ≝ (𝑎0⋯ 𝑏7 ̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅̅0⊕ 𝑏0) ⋯ (𝑎7⊕ 𝑏7)
la multiplication se fait en se basant sur la représentation ‘logarithmique’ des éléments de 𝔽28 et en utilisant les tables Logs (qui fait correspondre chaque octet de 𝔽28 à la puissance de 𝑤 correspondante) et AntiLogs (qui fait cor- respondre à chaque puissance 0 ≤ 𝑛 < 255, l’octet de 𝔽28 correspondant à 𝑤𝑛 de (𝑔(𝑋))𝔽2[𝑋] ):
Pour tout 0 ≤ 𝑖, 𝑗 < 255, on a : 𝑤𝑖 ∗ 𝑤𝑗 = 𝑤𝑖+𝑗 𝑚𝑜𝑑 255.
Les tables Logs et AntiLogs se retrouvent respectivement en annexe A et B.
1.2.2 Description de l’AES-128 1.2.2.1 Chiffrement
L’AES-128 (Advanced Encryption Standard) est un chiffrement itératif, par bloc et symétrique. En effet, le message est découpé en blocs de même longueur 𝑙 = 128 bits et chiffré bloc par bloc. Chaque bloc subit les mêmes transformations (ShiftRows, MixColumns, AddRoundKey et SubBytes ) durant les 10 tours (ou rondes) qui constituent l’AES-128. L’entrée, la sortie et la clé de chiffrement sont des séquences de 128 bits.
Réalisé par Comlan Edmond KOUDJINAN Page 18
1.2.2.1.1 Représentation des états
Chaque séquence de 128 bits est découpée en 16 octets puis organisée sous forme matricielle (4 lignes et 4 colonnes) appelé état (State) et illustré dans la figure 1 ci-après (Joan Daemen et Vincent Rijmen, 1999).
Figure 1 : Représentation matricielle d’une séquence de 128 bits
Avec :
∀ 𝑖 ∈ {0, … ,15}, 𝑎𝑖 = 𝑎7(𝑖)𝑎6(𝑖)𝑎5(𝑖)𝑎4(𝑖)𝑎3(𝑖)𝑎2(𝑖)𝑎1(𝑖)𝑎0(𝑖) et ∀ 𝑗 ∈ {0, … ,7}, 𝑎𝑗(𝑖) ∈ 𝔽2 . Ainsi, avec l’entrée :
𝑥0 𝑥1 𝑥2 𝑥3 𝑥4 𝑥5 𝑥6 𝑥7 𝑥8 𝑥9 𝑥9 𝑥10 𝑥11 𝑥13 𝑥14 𝑥15 l’état initial sera noté 𝑆0 avec :
𝑆0 = (
𝑥0 ⋯ 𝑥12
⋮ ⋱ ⋮
𝑥3 ⋯ 𝑥15) = (
𝑆0,00 ⋯ 𝑆0,30
⋮ ⋱ ⋮
𝑆3,00 ⋯ 𝑆3,30 )
Réalisé par Comlan Edmond KOUDJINAN Page 19
De façon générale, l’état interne de l’algorithme au tour 𝑟 ∈ {1, … ,10} sera noté 𝑆𝑟 avec :
𝑆𝑟 = (
𝑆0,0𝑟 ⋯ 𝑆0,3𝑟
⋮ ⋱ ⋮
𝑆3,0𝑟 ⋯ 𝑆3,3𝑟 ) L’état final est donné par :
𝑆10 = (
𝑆0,010 ⋯ 𝑆0,310
⋮ ⋱ ⋮
𝑆3,010 ⋯ 𝑆3,310
) = (
𝑦0 ⋯ 𝑦12
⋮ ⋱ ⋮
𝑦3 ⋯ 𝑦15) La sortie de l’algorithme est alors la séquence:
𝑦0 𝑦1 𝑦2 𝑦3 𝑦4 𝑦5 𝑦6 𝑦7 𝑦8 𝑦9 𝑦9 𝑦10 𝑦11 𝑦13 𝑦14 𝑦15 Le chiffrement AES consiste en une addition initiale de 𝑆0 avec la clé de chif- frement suivie de 9 rondes constituées chacune des quatre transformations sui- vantes :
1. SubBytes : il s’agit d’une substitution non linéaire au cours de laquelle chaque octet est remplacé par un autre octet choisi dans une table parti- culière appelée SBox. Cette transformation permet d’assurer la ‘confu- sion’ i.e. cacher toute structure algébrique dans le système afin de mas- quer les statistiques entre le texte en clair et le texte chiffré;
2. ShiftRows : il s’agit d’une étape de transposition où chaque octet de l’état (matrice) est déplacé cycliquement à gauche d’un certain nombre de colonne ; elle permet d’assurer la ‘diffusion’ dans le système i.e. per- mettre à chaque bit du texte en clair d’avoir une influence sur un grand nombre de bits du texte chiffré afin de masquer la structure statistique du texte en clair;
3. MixColumns : effectue la multiplication (dans 𝔽24×48 ) de la matrice par une matrice constante ;
4. AddRoundKey : on additionne dans (𝔽28)4×4 la matrice et la clé de ronde déduite de la clé originale par expansion de celle-ci ;
Enfin, une ronde finale appelée FinalRound (correspondant à une ronde dans laquelle l’étape MixColumns est omise) est appliquée pour avoir le texte chiffré.
Réalisé par Comlan Edmond KOUDJINAN Page 20
L’AES-128 peut alors être décrit en pseudocode C de la façon suivante (Joan Daemen et Vincent Rijmen, 1999):
(1) 𝐴𝐸𝑆_𝐶ℎ𝑖𝑓𝑓𝑟𝑒𝑚𝑒𝑛𝑡(𝑆𝑡𝑎𝑡𝑒, 𝑘){
𝐶𝑙é_𝐸𝑥𝑝𝑎𝑛𝑠𝑖𝑜𝑛(𝑘, 𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠[]) /*Addition initiale*/
𝐴𝑑𝑑𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦(𝑆𝑡𝑎𝑡𝑒, 𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠[0]) /*Les 9 rondes*/
𝑓𝑜𝑟(𝑟 = 1; 𝑟 < 10; 𝑟 + +){
𝑆𝑢𝑏𝐵𝑦𝑡𝑒𝑠(𝑆𝑡𝑎𝑡𝑒) 𝑆ℎ𝑖𝑓𝑡𝑅𝑜𝑤𝑠(𝑆𝑡𝑎𝑡𝑒) 𝑀𝑖𝑥𝐶𝑜𝑙𝑢𝑚𝑛𝑠(𝑆𝑡𝑎𝑡𝑒)
𝐴𝑑𝑑𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠(𝑆𝑡𝑎𝑡𝑒, 𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠[𝑟]) }
/*Ronde finale*/
𝑆𝑢𝑏𝐵𝑦𝑡𝑒𝑠(𝑆𝑡𝑎𝑡𝑒) 𝑆ℎ𝑖𝑓𝑡𝑅𝑜𝑤𝑠(𝑆𝑡𝑎𝑡𝑒)
𝐴𝑑𝑑𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠(𝑆𝑡𝑎𝑡𝑒, 𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠[10]) }
Où 𝐶𝑙é_𝐸𝑥𝑝𝑎𝑛𝑠𝑖𝑜𝑛 est la fonction réalisant l’expansion de clé, 𝑘 est la clé de chiffrement et RoundKeys[] est le tableau stockant les onze (11) clés nécessaires au chiffrement obtenu par expansion de clé.
1.2.2.1.2 Description complète des transformations mises en œuvre
Transformations sur la clé
i. La clé de chiffrement 𝑘 est décomposée en 16 octets :
Réalisé par Comlan Edmond KOUDJINAN Page 21
𝑘0 𝑘1 𝑘2 𝑘3 𝑘4 𝑘5 𝑘6 𝑘7 𝑘8 𝑘9 𝑘9 𝑘10 𝑘11 𝑘13 𝑘14 𝑘15 Ensuite, la clé est organisée sous forme matricielle, que nous noterons 𝐾 (comme décrite dans la section 1.2.2.1.1) comme suit :
𝐾 = (
𝑘0 ⋯ 𝑘12
⋮ ⋱ ⋮
𝑘3 ⋯ 𝑘15) = (
𝑘0,0 ⋯ 𝑘0,3
⋮ ⋱ ⋮
𝑘3,0 ⋯ 𝑘3,3)
A partir de la clé k, par expansion, on construit une nouvelle matrice 𝑊 = [𝑤𝑖,𝑗] ∈ 𝔽24×448
Nous noterons 𝑊[𝑗] ( 𝑗 ∈ {0, … , 43}) la 𝑗-è𝑚𝑒 colonne de 𝑊.
ii. Expansion de la clé
Dans tout ce qui suit, nous définissons :
∀ 𝐴 = ( 𝑎0 𝑎1 𝑎2 𝑎3
) , 𝐵 = ( 𝑏0 𝑏1 𝑏2 𝑏3
) ∈ 𝔽248, 𝐴 ⊕ 𝐵 ≝ (
𝑎0 ⊕ 𝑏0 𝑎1 ⊕ 𝑏1 𝑎2 ⊕ 𝑏2 𝑎3 ⊕ 𝑏3
) ∈ 𝔽248
Les colonnes de 𝑊 sont déterminées comme suit (Joan Daemen et Vincent Rij- men, 1999):
(1) ∀ 𝑗 ∈ {0,1,2,3}, 𝑊[𝑗] = 𝐾[𝑗];
(2) Si pour 𝑖 > 3, les colonnes 𝑊[0], … , 𝑊[𝑖 − 1] sont déjà déterminées, alors :
(a) Si 𝑖 = 4𝑘, alors on a :
𝑊[𝑖] = 𝑊[𝑖 − 4] ⊕ 𝑇(𝑊[𝑖 − 1]) Où 𝑇(𝑊[𝑖 − 1]) est obtenue de la façon suivante:
Posons 𝑊[𝑖 − 1] = ( 𝑎 𝑏𝑐 𝑑
).
Calculons dans 𝔽28 la constante :
Réalisé par Comlan Edmond KOUDJINAN Page 22
𝑟(𝑖) = 𝑟(4𝑘) = (0𝑥02)𝑘−1 Alors, on a :
𝑇(𝑊[𝑖 − 1]) = (
𝑆𝐵𝑜𝑥(𝑎) + 𝑟(𝑖) 𝑆𝐵𝑜𝑥(𝑏) 𝑆𝐵𝑜𝑥(𝑐) 𝑆𝑏𝑜𝑥(𝑑)
)
Où SBox est la table particulière utilisée dans la transformation SubBytes ; elle se trouve en annexe C. Nous en reparlerons dans la suite.
(b) Sinon, on a :
𝑊[𝑖] = 𝑊[𝑖 − 4] ⊕ 𝑊[𝑖 − 1]
La fonction SubBytes
L’entrée et la sortie sont des éléments de 𝔽24×48 . Si l’entrée est : 𝐴 = (
𝑎0,0 ⋯ 𝑎0,3
⋮ ⋱ ⋮
𝑎3,0 ⋯ 𝑎3,3) et si la sortie est 𝐵 = (
𝑏0,0 ⋯ 𝑏0,3
⋮ ⋱ ⋮
𝑏3,0 ⋯ 𝑏3,3) alors, on a :
∀ 𝑖, 𝑗 ∈ {0,1,2,3}, 𝑏𝑖,𝑗 = 𝑆𝐵𝑜𝑥(𝑎𝑖,𝑗) (qui se lit dans la table SBox en annexe C) comme illustré ci-dessous.
Figure 2 : Transformation SubBytes
Pour tout 𝑎 ∈ 𝔽28, SBox (a) s’obtient comme suit : i. On définit l’application :
Réalisé par Comlan Edmond KOUDJINAN Page 23
𝑡 ∶ 𝔽28 → 𝔽28
𝑎 ↦ {𝑎−1 𝑠𝑖 𝑎 ≠ 0 0 𝑠𝑖 𝑎 = 0
ii. Pour empêcher les attaques basées sur de simples propriétés algé- briques, l’application t est combinée avec l’application affine inver- sible :
𝑓 ∶ 𝔽28 → 𝔽28
𝑎 ↦ 𝑏 = 𝑓(𝑎) telle que si, en binaire, 𝑎 = 𝑎7𝑎6𝑎5𝑎4𝑎3𝑎2𝑎1𝑎0 et 𝑏 = 𝑏7𝑏6𝑏5𝑏4𝑏3𝑏2𝑏1𝑏0, alors :
( 𝑏7 𝑏6 𝑏5 𝑏4 𝑏3 𝑏2 𝑏1 𝑏0)
=
(
1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1)(
𝑎7 𝑎6 𝑎5 𝑎4 𝑎3 𝑎2 𝑎1 𝑎0)
⊕
( 0 1 10 00 1 1) Et on a : SBox(a) ≝ f(t(a)) .
iii. On a 𝑡−1 = 𝑡 donc ∀ 𝑎 ∈ 𝔽28, 𝑆𝐵𝑜𝑥−1(𝑎) = 𝑡(𝑓−1(𝑎)) avec : 𝑓−1 ∶ 𝔽28 → 𝔽28
𝑎 ↦ 𝑏 𝑡𝑒𝑙 𝑞𝑢𝑒 𝑎 = 𝑓(𝑏) telle que :
( 𝑏7 𝑏6 𝑏5 𝑏4 𝑏3 𝑏2 𝑏1 𝑏0)
=
(
0 1 0 1 0 0 1 0 0 0 1 0 1 0 0 1 1 0 0 1 0 1 0 0 0 1 0 0 1 0 1 0 0 0 1 0 0 1 0 1 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 1 0 1 0 0 1 0 0)(
𝑎7 𝑎6 𝑎5 𝑎4 𝑎3 𝑎2 𝑎1 𝑎0)
⊕
( 0 0 00 0 10 1)
L’inverse de la fonction SubBytes est notée InvSubBytes.
Réalisé par Comlan Edmond KOUDJINAN Page 24
La fonction ShiftRows
L’entrée et la sortie sont des éléments de 𝔽24×48 . Etant donnée une matrice d’entrée, pour tout 𝑖 ∈ {1,2,3,4}, la i-ème ligne de cette matrice subit un décalage cyclique de 𝑖 − 1 vers la gauche comme illustrée ci-dessous.
Figure 3 : Transformation ShiftRows
L’inverse de ShiftRows est InvShiftRows et consiste en le décalage cyclique de la i-ème ligne de 𝑖 − 1 éléments vers la droite avec 𝑖 ∈ {1,2,3,4}.
La fonction MixColumns
L’entrée et la sortie sont des éléments de 𝔽24×48 . Si 𝐴 est la matrice d’entrée, 𝐵 est la sortie et 𝑀 = (
02 03 01 01 01 02 03 01 01 01 02 03 03 01 01 02
) (notation hexadécimale) alors :
𝐵 = 𝑀𝑖𝑥𝐶𝑜𝑙𝑢𝑚𝑛𝑠(𝐴) = 𝑀𝐴 (les calculs se faisant dans 𝔽28).
Par ailleurs, 𝑀 est inversible et on a, en hexadécimale :
𝑀−1 = (
0𝐸 0𝐵 0𝐷 09 09 0𝐸 0𝐵 0𝐷 0𝐷 09 0𝐸 0𝐵 0𝐵 0𝐷 09 0𝐸
)
L’inverse de la fonction MixColumns, notée InvMixColumns est alors définie par :
∀ 𝐴 ∈ 𝔽24×48 , 𝑖𝑛𝑣𝑀𝑖𝑥𝐶𝑜𝑙𝑢𝑚𝑛𝑠(𝐴) = 𝑀−1𝐴.
Réalisé par Comlan Edmond KOUDJINAN Page 25
La fonction AddRoundKey
L’entrée et la sortie sont des éléments de 𝔽24×48 . Si l’entrée 𝐴 = (
𝑎0,0 ⋯ 𝑎0,3
⋮ ⋱ ⋮
𝑎3,0 ⋯ 𝑎3,3) et la clé 𝐾 = (
𝑘0,0 ⋯ 𝑘0,3
⋮ ⋱ ⋮
𝑘3,0 ⋯ 𝑘3,3) alors :
𝐴𝑑𝑑𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦(𝐴, 𝐾) = (
𝑎0,0⊕ 𝑘0,0 ⋯ 𝑎0,3⊕ 𝑘0,3
⋮ ⋱ ⋮
𝑎3,0⊕ 𝑘3,0 ⋯ 𝑎3,3⊕ 𝑘3,3) (on rappelle que ⊕ correspond au ou-exclusif entre éléments de 𝔽28).
De toute évidence, 𝐴𝑑𝑑𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦−1 = 𝐴𝑑𝑑𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦.
1.2.2.2 Déchiffrement
Pour obtenir le texte en clair à partir du chiffré, il suffit d’inverser dans les transformations dans le protocole de chiffrement. Toutefois, on peut réordonner l’algorithme obtenu pour aboutir à l’algorithme de déchiffrement en pseudocode C que voici :
𝐴𝐸𝑆_𝐷𝑒𝑐ℎ𝑖𝑓𝑓𝑟𝑒𝑚𝑒𝑛𝑡(𝑆𝑡𝑎𝑡𝑒, 𝑘){
𝐶𝑙é_𝐸𝑥𝑝𝑎𝑛𝑠𝑖𝑜𝑛(𝑘, 𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠[]) /*Addition initiale*/
𝐴𝑑𝑑𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦(𝑆𝑡𝑎𝑡𝑒, 𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠[10]) /*Les 9 rondes*/
𝑓𝑜𝑟(𝑟 = 9; 𝑟 > 0; 𝑟 − −){
𝐼𝑛𝑣𝑆ℎ𝑖𝑓𝑡𝑅𝑜𝑤𝑠(𝑆𝑡𝑎𝑡𝑒) 𝐼𝑛𝑣𝑆𝑢𝑏𝐵𝑦𝑡𝑒𝑠(𝑆𝑡𝑎𝑡𝑒)
𝐴𝑑𝑑𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦(𝑆𝑡𝑎𝑡𝑒, 𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠[𝑟]) 𝐼𝑛𝑣𝑀𝑖𝑥𝐶𝑜𝑙𝑢𝑚𝑛𝑠(𝑆𝑡𝑎𝑡𝑒)
}
Réalisé par Comlan Edmond KOUDJINAN Page 26
/*Ronde finale*/
𝐼𝑛𝑣𝑆ℎ𝑖𝑓𝑡𝑅𝑜𝑤𝑠(𝑆𝑡𝑎𝑡𝑒) 𝐼𝑛𝑣𝑆𝑢𝑏𝐵𝑦𝑡𝑒𝑠(𝑆𝑡𝑎𝑡𝑒)
𝐴𝑑𝑑𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦(𝑆𝑡𝑎𝑡𝑒, 𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠[0]) }
Réalisé par Comlan Edmond KOUDJINAN Page 27
Chapitre 2 : Etude des différentes approches possibles pour l’implémentation de l’AES-
128
Selon l’ordre de succession des différentes transformations dans l’algorithme, on obtient diverses approches pour l’implémentation de l’AES-128.
2.1 Première approche
La première approche est basée sur l’algorithme conventionnel (1) décrit au
§1.2.2.1.1.
2.2 Deuxième approche
En reconstituant la boucle 𝑓𝑜𝑟, on obtient l’algorithme équivalent (plus préci- sément identique) suivant (James A. Muir, 2012):
(2) 𝐴𝐸𝑆_𝐶ℎ𝑖𝑓𝑓𝑟𝑒𝑚𝑒𝑛𝑡(𝑆𝑡𝑎𝑡𝑒, 𝑘){
𝐶𝑙é_𝐸𝑥𝑝𝑎𝑛𝑠𝑖𝑜𝑛(𝑘, 𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠[]) /*---*/
𝑓𝑜𝑟(𝑟 = 0; 𝑟 < 9; 𝑟 + +){
𝐴𝑑𝑑𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦(𝑆𝑡𝑎𝑡𝑒, 𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠[𝑟]) 𝑆𝑢𝑏𝐵𝑦𝑡𝑒𝑠(𝑆𝑡𝑎𝑡𝑒)
𝑆ℎ𝑖𝑓𝑡𝑅𝑜𝑤𝑠(𝑆𝑡𝑎𝑡𝑒) 𝑀𝑖𝑥𝐶𝑜𝑙𝑢𝑚𝑛𝑠(𝑆𝑡𝑎𝑡𝑒) }
/*---*/
𝐴𝑑𝑑𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦(𝑆𝑡𝑎𝑡𝑒, 𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠[9]) 𝑆𝑢𝑏𝐵𝑦𝑡𝑒𝑠(𝑆𝑡𝑎𝑡𝑒)
Réalisé par Comlan Edmond KOUDJINAN Page 28
𝑆ℎ𝑖𝑓𝑡𝑅𝑜𝑤𝑠(𝑆𝑡𝑎𝑡𝑒)
𝐴𝑑𝑑𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠(𝑆𝑡𝑎𝑡𝑒, 𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠[10]) }
2.3 Troisième approche
Puisque la transformation 𝑆𝑢𝑏𝐵𝑦𝑡𝑒𝑠 agit octet par octet et que la transforma- tion 𝑆ℎ𝑖𝑓𝑡𝑅𝑜𝑤𝑠 est une permutation, alors on obtient encore un algorithme équi- valent en permutant 𝑆𝑢𝑏𝐵𝑦𝑡𝑒𝑠 et 𝑆ℎ𝑖𝑓𝑡𝑅𝑜𝑤𝑠 entre elles. On obtient alors (James A. Muir, 2012):
(3) 𝐴𝐸𝑆_𝐶ℎ𝑖𝑓𝑓𝑟𝑒𝑚𝑒𝑛𝑡(𝑆𝑡𝑎𝑡𝑒, 𝑘){
𝐶𝑙é_𝐸𝑥𝑝𝑎𝑛𝑠𝑖𝑜𝑛(𝑘, 𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠[]) /*---*/
𝑓𝑜𝑟(𝑟 = 0; 𝑟 < 9; 𝑟 + +){
𝐴𝑑𝑑𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦(𝑆𝑡𝑎𝑡𝑒, 𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠[𝑟]) 𝑆ℎ𝑖𝑓𝑡𝑅𝑜𝑤𝑠(𝑆𝑡𝑎𝑡𝑒)
𝑆𝑢𝑏𝐵𝑦𝑡𝑒𝑠(𝑆𝑡𝑎𝑡𝑒) 𝑀𝑖𝑥𝐶𝑜𝑙𝑢𝑚𝑛𝑠(𝑆𝑡𝑎𝑡𝑒) }
/*---*/
𝐴𝑑𝑑𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦(𝑆𝑡𝑎𝑡𝑒, 𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠[9]) 𝑆ℎ𝑖𝑓𝑡𝑅𝑜𝑤𝑠(𝑆𝑡𝑎𝑡𝑒)
𝑆𝑢𝑏𝐵𝑦𝑡𝑒𝑠(𝑆𝑡𝑎𝑡𝑒)
𝐴𝑑𝑑𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠(𝑆𝑡𝑎𝑡𝑒, 𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠[10]) }
Réalisé par Comlan Edmond KOUDJINAN Page 29
2.4 Quatrième approche
Par ailleurs, il est aisé de remarquer que : ∀ 𝑟 ∈ {0, … ,10}, ∀ 𝑠𝑡𝑎𝑡𝑒 ∈ 𝔽24×48 , 𝑆ℎ𝑖𝑓𝑡𝑅𝑜𝑤𝑠(𝐴𝑑𝑑𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦(𝑆𝑡𝑎𝑡𝑒, 𝑅𝑜𝑢𝑑𝐾𝑒𝑦𝑠 [𝑟])) =
𝐴𝑑𝑑𝑟𝑜𝑢𝑛𝑑𝐾𝑒𝑦(𝑆ℎ𝑖𝑓𝑡𝑅𝑜𝑤(𝑆𝑡𝑎𝑡𝑒), 𝑆ℎ𝑖𝑓𝑡𝑅𝑜𝑤(𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠[𝑟])).
Par conséquent, l’algorithme suivant en est encore un équivalent (James A.
Muir, 2012):
(4) 𝐴𝐸𝑆_𝐶ℎ𝑖𝑓𝑓𝑟𝑒𝑚𝑒𝑛𝑡(𝑆𝑡𝑎𝑡𝑒, 𝑘){
𝐶𝑙é_𝐸𝑥𝑝𝑎𝑛𝑠𝑖𝑜𝑛(𝑘, 𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠[]) /*---*/
𝑓𝑜𝑟(𝑟 = 0; 𝑟 < 9; 𝑟 + +){
𝑆ℎ𝑖𝑓𝑡𝑅𝑜𝑤𝑠(𝑆𝑡𝑎𝑡𝑒)
𝑆ℎ𝑖𝑓𝑡𝑅𝑜𝑤𝑠(𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠[𝑟])
𝐴𝑑𝑑𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦(𝑆𝑡𝑎𝑡𝑒, 𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠[𝑟]) 𝑆𝑢𝑏𝐵𝑦𝑡𝑒𝑠(𝑆𝑡𝑎𝑡𝑒)
𝑀𝑖𝑥𝐶𝑜𝑙𝑢𝑚𝑛𝑠(𝑆𝑡𝑎𝑡𝑒) }
/*---*/
𝑆ℎ𝑖𝑓𝑡𝑅𝑜𝑤𝑠(𝑆𝑡𝑎𝑡𝑒)
𝑆ℎ𝑖𝑓𝑡𝑅𝑜𝑤𝑠(𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠[9])
𝐴𝑑𝑑𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦(𝑆𝑡𝑎𝑡𝑒, 𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠[9]) 𝑆𝑢𝑏𝐵𝑦𝑡𝑒𝑠(𝑆𝑡𝑎𝑡𝑒)
𝐴𝑑𝑑𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠(𝑆𝑡𝑎𝑡𝑒, 𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠[10]) }
Réalisé par Comlan Edmond KOUDJINAN Page 30
2.5 Cinquième approche
Il existe aussi des implémentations efficaces utilisant des tables (Joan Daemen et Vincent Rijmen, 1999). La première est celle proposée par Joan Daemen et Vincent Rijmen. Elle est efficace sur les processeurs et se base sur l’algorithme (1). Elle prend en compte les colonnes de l’entrée une à une.
Soit 𝑐 ∈ {0,1,2,3}. La 𝑐-𝑖è𝑚𝑒 colonne de 𝑙′𝑒𝑛𝑡𝑟é𝑒 𝐴 = (
𝑎0,0 ⋯ 𝑎0,3
⋮ ⋱ ⋮
𝑎3,0 ⋯ 𝑎3,3), que nous noterons 𝐴[𝑐], est : 𝐴[𝑐] = ( 𝑎0,𝑐 𝑎1,𝑐 𝑎2,𝑐 𝑎3,𝑐
).
Après la transformation 𝑆𝑢𝑏𝐵𝑦𝑡𝑒𝑠, 𝐴[𝑐] devient :
𝐴′[𝑐] = (
𝑆𝐵𝑜𝑥(𝑎0,𝑐) 𝑆𝑏𝑜𝑥(𝑎1,𝑐) 𝑆𝐵𝑜𝑥(𝑎2,𝑐) 𝑆𝐵𝑂𝑥(𝑎3,𝑐))
.
Après la transformation 𝑆ℎ𝑖𝑓𝑡𝑅𝑜𝑤𝑠, 𝐴′[𝑐] devient :
𝐴′′[𝑐] = (
𝑆𝐵𝑜𝑥(𝑎0,𝑐) 𝑆𝑏𝑜𝑥(𝑎1,(𝑐+1 𝑚𝑜𝑑 4)) 𝑆𝐵𝑜𝑥(𝑎2,(𝑐+2 𝑚𝑜𝑑 4)) 𝑆𝐵𝑂𝑥(𝑎3,(𝑐+3 𝑚𝑜𝑑 4)))
.
Après la transformation 𝑀𝑖𝑥𝐶𝑜𝑙𝑢𝑚𝑛𝑠, 𝐴′′[𝑐] devient : 𝐴′′′[𝑐] = (
02 03 01 01 01 02 03 01 01 01 02 03 03 01 01 02
) (
𝑆𝐵𝑜𝑥(𝑎0,𝑐) 𝑆𝑏𝑜𝑥(𝑎1,(𝑐+1 𝑚𝑜𝑑 4)) 𝑆𝐵𝑜𝑥(𝑎2,(𝑐+2 𝑚𝑜𝑑 4)) 𝑆𝐵𝑜𝑥(𝑎3,(𝑐+3 𝑚𝑜𝑑 4)))
.
Cette égalité peut encore s’écrire : 𝐴′′′[𝑐] = 𝑆𝐵𝑜𝑥(𝑎0,𝑐) ∙ (
02 01 0103
) ⊕ 𝑆𝐵𝑜𝑥(𝑎1,(𝑐+1 𝑚𝑜𝑑 4)) ∙ ( 03 02 0101
)
𝐴′′′[𝑐] = 𝐴′′′[𝑐] ⊕ 𝑆𝐵𝑜𝑥(𝑎2,(𝑐+2 𝑚𝑜𝑑 4)) ∙ ( 01 03 0201
) ⊕ 𝑆𝐵𝑜𝑥(𝑎3,(𝑐+3 𝑚𝑜𝑑 4)) ∙ ( 01 01 0302
).
Réalisé par Comlan Edmond KOUDJINAN Page 31
On peut alors définir les quatre tables 𝑇0, 𝑇1, 𝑇2, 𝑇3 telles que:
∀ 𝑥 ∈ 𝔽28 , 𝑇0[𝑥] = (
02 ∙ 𝑆𝐵𝑜𝑥(𝑥) 𝑥𝑥
03 ∙ 𝑆𝐵𝑜𝑥(𝑥)
) , 𝑇1[𝑥] = (
03 ∙ 𝑆𝐵𝑜𝑥(𝑥) 02 ∙ 𝑆𝐵𝑜𝑥(𝑥)
𝑥𝑥
)
𝑇2[𝑥] = (
𝑥
03 ∙ 𝑆𝐵𝑜𝑥(𝑥) 02 ∙ 𝑆𝐵𝑜𝑥(𝑥)
𝑥
) 𝑒𝑡 𝑇3[𝑥] = (
𝑥
03 ∙ 𝑆𝐵𝑜𝑥(𝑥)𝑥 02 ∙ 𝑆𝐵𝑜𝑥(𝑥)
).
Alors, on a :
𝐴′′′[𝑐] = 𝑇0[𝑎0,𝑐] ⊕ 𝑇1[𝑎1,(𝑐+1 𝑚𝑜𝑑 4)] ⊕ 𝑇2[𝑎2,(𝑐+2 𝑚𝑜𝑑 4)] ⊕ 𝑇3[𝑎2,(𝑐+3 𝑚𝑜𝑑 4)]
Après la transformation 𝐴𝑑𝑑𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦, 𝐴′′′[𝑐] devient :
𝐴′′′′[𝑐] = 𝐴′′′[𝑐] ⊕ (
𝑘0,𝑐 𝑘1,𝑐 𝑘2,𝑐 𝑘3,𝑐)
Où (
𝑘0,𝑐 𝑘1,𝑐 𝑘2,𝑐 𝑘3,𝑐)
désigne la 𝑐 − è𝑚𝑒 colonne de la clé de ronde.
La description précédente est valable pour toutes les rondes sauf la dernière où la transformation 𝑀𝑖𝑥𝐶𝑜𝑙𝑢𝑚𝑛𝑠 est omise.
Le stockage en mémoire de ces 4 tables nécessiterait 4 ∙ 28∙ 4 𝑜𝑐𝑡𝑒𝑡𝑠 = 4 𝑘𝑜 de mémoire. Mieux, considérons l’application :
𝑅𝑜𝑡𝑊𝑜𝑟𝑑 ∶ 𝔽248 → 𝔽248
(𝑎; 𝑏; 𝑐; 𝑑) ↦ (𝑑; 𝑎; 𝑏; 𝑐) Alors, on a :∀ 𝑖 ∈ {1,2,3}, 𝑇𝑖 = 𝑅𝑜𝑡𝑊𝑜𝑟𝑑 ∘ 𝑇𝑖−1.
On a alors juste besoin de 1 𝑘𝑜 d’espace mémoire (qui permettra de stocker 𝑇0) puis on pourra déduire les autres tables par une simple rotation (Joan Daemen et Vincent Rijmen, 1999).
Réalisé par Comlan Edmond KOUDJINAN Page 32
2.6 Sixième approche
A présent, nous allons décrire la seconde implémentation de l’AES-128 uti- lisant les tables (James A. Muir, 2012).
Première étape : Partant de l’algorithme (4), on peut alors fusionner les trans- formations ShiftRows (opérée sur la clé de ronde), 𝑺𝒖𝒃𝑩𝒚𝒕𝒆𝒔 et AddRoundKey sous forme de tables représentant des applications de 𝔽28 dans 𝔽28, appelées T- Box et définies comme suit :
∀ (𝑖, 𝑟) ∈ {0, ⋯ ,15} × {1, ⋯ ,9},
𝑇𝑖𝑟[𝑥] = 𝑆𝐵𝑜𝑥(𝑥 ⊕ 𝑆ℎ𝑖𝑓𝑡𝑅𝑜𝑤𝑠(𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠[𝑟 − 1][𝑖])) Et ∀ 𝑖 ∈ {0, ⋯ ,15},
𝑇𝑖10[𝑥] = 𝑆𝐵𝑜𝑥(𝑥 ⊕ 𝑆ℎ𝑖𝑓𝑡𝑅𝑜𝑤𝑠(𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠[9][𝑖])) ⊕ 𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠[10][𝑖].
Où pour tout (𝑖, 𝑟) ∈ {0, ⋯ ,15} × {1, ⋯ ,10}, 𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠[𝑟][𝑖] désigne le (𝑖 + 1) − è𝑚𝑒 octet de la 𝑟 − è𝑚𝑒 clé de ronde (voir §1.2.2.1.1).
Il y a au total 16 ∙ 10 = 160 T-Box.
Deuxième étape : Au cours des rondes 1 à 9, après l’application des tables T- Box, les octets subissent la transformation 𝑴𝒊𝒙𝑪𝒐𝒍𝒖𝒎𝒏𝒔.
Considérons l’état 𝐴 = (
𝑎0,0 ⋯ 𝑎0,3
⋮ ⋱ ⋮
𝑎3,0 ⋯ 𝑎3,3) et soit 𝐵 = (
𝑏0,0 ⋯ 𝑏0,3
⋮ ⋱ ⋮
𝑏3,0 ⋯ 𝑏3,3), l’état obtenu à la sortie des tables T-Box au 𝑟 − è𝑚𝑒 ronde avec 𝑟 ∈ {1, ⋯ , 9}.
Alors, on a : ∀ 𝑖, 𝑗 ∈ {0, ⋯ ,3}, 𝑏𝑖,𝑗 = 𝑇𝑖+4𝑗𝑟 [𝑎𝑖,𝑗]. A la sortie des T-Box, il faut multiplier 𝐵 par 𝑀 = (
02 03 01 01 01 02 03 01 01 01 02 03 03 01 01 02
). Soit ( 𝑥0 𝑥1 𝑥2 𝑥3
) une colonne de 𝐵. On a donc :
(
02 03 01 01 01 02 03 01 01 01 02 03 03 01 01 02
) ( 𝑥0 𝑥1 𝑥2 𝑥3
) = 𝑥0∙ ( 02 01 0103
) ⊕ 𝑥1∙ ( 03 02 0101
) ⊕ 𝑥2∙ ( 01 03 0201
) ⊕ 𝑥3∙ ( 01 01 0302
).
Réalisé par Comlan Edmond KOUDJINAN Page 33
On définit alors les tables 𝑇𝑦0, 𝑇𝑦1, 𝑇𝑦2 et 𝑇𝑦3 correspondantes à des applica- tions de 𝔽28 dans 𝔽248 comme suit :
∀ 𝑥 ∈ 𝔽28, 𝑇𝑦0[𝑥] = 𝑥 ∙ ( 02 0101 03
) , 𝑇𝑦1[𝑥] = 𝑥 ∙ ( 03 0201 01
) , 𝑇𝑦2[𝑥] = 𝑥 ∙ ( 01 0302 01
) et
𝑇𝑦3[𝑥] = 𝑥 ∙ ( 0101 03 02
).
Il s’en suit donc que :
(
02 03 01 01 01 02 03 01 01 01 02 03 03 01 01 02
) ( 𝑥0 𝑥1 𝑥2 𝑥3
) = 𝑇𝑦0[𝑥0] ⊕ 𝑇𝑦1[𝑥1] ⊕ 𝑇𝑦2[𝑥2] ⊕ 𝑇𝑦3[𝑥3].
Qu’on pourrait aussi écrire, mais qui ne nous intéresse guère ici, sous la forme :
(
02 03 01 01 01 02 03 01 01 01 02 03 03 01 01 02
) ( 𝑥0 𝑥1 𝑥2 𝑥3
) = ∑ 𝑅𝑜𝑡𝑊𝑜𝑟𝑑𝑖(𝑇𝑦0[𝑥𝑖])
3
𝑖=0
Avec : 𝑅𝑜𝑡𝑊𝑜𝑟𝑑𝑖 = 𝑅𝑜𝑡𝑊𝑜𝑟𝑑 ∘ ⋯ ∘ 𝑅𝑜𝑡𝑊𝑜𝑟𝑑⏟
𝑖 𝑓𝑜𝑖𝑠
. Troisième étape : Composer les tables T-Box et 𝑇𝑦𝑖 On aboutit alors à l’algorithme :
(5) 𝐴𝐸𝑆_𝐶ℎ𝑖𝑓𝑓𝑟𝑒𝑚𝑒𝑛𝑡(𝑆𝑡𝑎𝑡𝑒, 𝑘){
𝑓𝑜𝑟(𝑟 = 0; 𝑟 < 9; 𝑟 + +){
𝑆ℎ𝑖𝑓𝑡𝑅𝑜𝑤𝑠(𝑆𝑡𝑎𝑡𝑒)
𝑇𝐵𝑜𝑥𝑒𝑠𝑇𝑦𝑖𝑇𝑎𝑏𝑙𝑒𝑠(𝑠𝑡𝑎𝑡𝑒, 𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠) }
/*---*/
Réalisé par Comlan Edmond KOUDJINAN Page 34
𝑆ℎ𝑖𝑓𝑡𝑅𝑜𝑤𝑠(𝑆𝑡𝑎𝑡𝑒);
𝑇𝐵𝑜𝑥𝑒𝑠(𝑠𝑡𝑎𝑡𝑒, 𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠) }
Avec :
𝑇𝐵𝑜𝑥𝑒𝑠𝑇𝑦𝑖𝑇𝑎𝑏𝑙𝑒𝑠(𝑠𝑡𝑎𝑡𝑒, 𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠){
𝑓𝑜𝑟(𝑗 = 0; 𝑗 < 4; 𝑗 + +){
𝑠𝑡𝑎𝑡𝑒[𝑗] = 𝑇𝑦0[𝑇4𝑗𝑟[𝑎0,𝑗]] ⊕ 𝑇𝑦1[𝑇1+4𝑗𝑟 [𝑎1,𝑗]] ⊕ 𝑇𝑦2[𝑇2+4𝑗𝑟 [𝑎2,𝑗]]
𝑠𝑡𝑎𝑡𝑒[𝑗] = 𝑠𝑡𝑎𝑡𝑒[𝑗] ⊕ 𝑇𝑦3[𝑇3+4𝑗𝑟 [𝑎3,𝑗]]
} }
Et :
𝑇𝐵𝑜𝑥𝑒𝑠(𝑠𝑡𝑎𝑡𝑒, 𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦𝑠){
𝑓𝑜𝑟(𝑗 = 0; 𝑗 < 4; 𝑗 + +){
𝑓𝑜𝑟(𝑖 = 0; 𝑖 < 4; 𝑖 + +){
𝑠𝑡𝑎𝑡𝑒[𝑖][𝑗] = 𝑇𝑖+4𝑗10 [𝑎𝑖,𝑗] }
}
Réalisé par Comlan Edmond KOUDJINAN Page 35
Chapitre 3 : Implémentation d’une approche de l’AES-128
Dans ce chapitre, nous présenterons d’abord l’approche choisie. Ensuite, nous parlerons de la méthodologie adoptée pour l’implémentation. Et nous finirons par la présentation des différentes fonctions implémentées.
3.1 L’approche choisie
Pour notre implémentation, nous avons choisi l’algorithme (4). En effet, cet algorithme est le plus élaboré du point de vue d’une implémentation software.
Nous allons à présent décrire les différentes fonctions de l’algorithme en pseudo code C (Joan Daemen et Vincent Rijmen, 1999).
𝐶𝑙é_𝐸𝑥𝑝𝑎𝑛𝑠𝑖𝑜𝑛 : 𝐶𝑙é_𝐸𝑥𝑝𝑎𝑛𝑠𝑖𝑜𝑛(𝑘, 𝑐[]) {
𝑏𝑦𝑡𝑒 𝑡𝑚𝑝[4]
/∗ 𝑅𝑒𝑐𝑜𝑝𝑖𝑒 𝑑𝑖𝑟𝑒𝑐𝑡𝑒 𝑑𝑒𝑠 4 𝑝𝑟𝑒𝑚𝑖è𝑟𝑒𝑠 𝑐𝑜𝑙𝑜𝑛𝑛𝑒𝑠 ∗/
𝑓𝑜𝑟(𝑖 = 0; 𝑖 < 4; 𝑖 + +) 𝑐[𝑖] = 𝑘[𝑖]
𝑓𝑜𝑟(𝑖 = 4; 𝑖 < 44; 𝑖 + +) { 𝑡𝑚𝑝 = 𝑐[𝑖 − 1]
𝑡𝑚𝑝 = 𝑆𝑢𝑏𝑊𝑜𝑟𝑑(𝑅𝑜𝑡𝑊𝑜𝑟𝑑(𝑡𝑚𝑝)) + 𝑅𝑐𝑜𝑛[𝑖/4]
𝑡𝑚𝑝 = 𝑆𝑢𝑏𝑊𝑜𝑟𝑑(𝑡𝑚𝑝) 𝑐[𝑖] = 𝑐[𝑖 − 4] + 𝑡𝑚𝑝 }
}
Avec :
– 𝑆𝑢𝑏𝑊𝑜𝑟𝑑 une fonction prenant en entrée un mot de 4 octets et appliquant SBox à chacun de ses octets.
– RotWord une fonction prenant en entrée un mot de 4 octets 𝑎 = [𝑎, 𝑏, 𝑐, 𝑑] et retournant 𝑎′ = [𝑏, 𝑐, 𝑑, 𝑎].
Réalisé par Comlan Edmond KOUDJINAN Page 36
– 𝑅𝑐𝑜𝑛[𝑖] = [𝑥𝑖−1, 00, 00, 00], ∀𝑖 ≥ 1
𝑆ℎ𝑖𝑓𝑡𝑅𝑜𝑤𝑠 : 𝑆ℎ𝑖𝑓𝑡𝑅𝑜𝑤𝑠(𝑆𝑡𝑎𝑡𝑒){
𝑏𝑦𝑡𝑒 𝑡[4]
𝑓𝑜𝑟(𝑟 = 1; 𝑟 < 3; 𝑟 + +){
𝑓𝑜𝑟(𝑐 = 0; 𝑐 < 3; 𝑐 + +){
𝑡[𝑐] = 𝑆𝑡𝑎𝑡𝑒[𝑟][(𝑐 + 𝑟) 𝑚𝑜𝑑 4]
}
𝑓𝑜𝑟(𝑐 = 0; 𝑐 < 3; 𝑐 + +){
𝑆𝑡𝑎𝑡𝑒[𝑟][𝑐] = 𝑡[𝑐]
} }
}
𝐴𝑑𝑑𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦 : 𝐴𝑑𝑑𝑅𝑜𝑢𝑛𝑑𝐾𝑒𝑦(𝑠𝑡𝑎𝑡𝑒, 𝑘){
𝑓𝑜𝑟(𝑐 = 0; 𝑐 < 3; 𝑐 + +){
𝑓𝑜𝑟(𝑟 = 0; 𝑟 < 3; 𝑟 + +){
𝑠𝑡𝑎𝑡𝑒[𝑟][𝑐] = 𝑠𝑡𝑎𝑡𝑒[𝑟][𝑐] 𝑥𝑜𝑟 𝑘[𝑟][𝑐]) }
} }
Réalisé par Comlan Edmond KOUDJINAN Page 37
𝑆𝑢𝑏𝐵𝑦𝑡𝑒𝑠 : 𝑆𝑢𝑏𝐵𝑦𝑡𝑒𝑠(𝑠𝑡𝑎𝑡𝑒){
𝑓𝑜𝑟(𝑐 = 0; 𝑐 < 3; 𝑐 + +){
𝑓𝑜𝑟(𝑟 = 0; 𝑟 < 3; 𝑟 + +){
𝑠𝑡𝑎𝑡𝑒[𝑟][𝑐] = 𝑆𝐵𝑜𝑥[𝑠𝑡𝑎𝑡𝑒[𝑟][𝑐]]
} }
}
𝑀𝑖𝑥𝐶𝑜𝑙𝑢𝑚𝑛𝑠 : 𝑀𝑖𝑥𝐶𝑜𝑙𝑢𝑚𝑛𝑠(𝑠𝑡𝑎𝑡𝑒){
𝑏𝑦𝑡𝑒 𝑡[4]
𝑓𝑜𝑟(𝑐 = 0; 𝑐 < 3; 𝑐 + +){
𝑓𝑜𝑟(𝑟 = 0; 𝑟 < 3; 𝑟 + +){
𝑡[𝑟] = 𝑠𝑡𝑎𝑡𝑒[𝑟][𝑐]
}
𝑓𝑜𝑟(𝑟 = 0; 𝑟 < 3; 𝑟 + +){
𝑠𝑡𝑎𝑡𝑒[𝑟, 𝑐] = 𝐹𝐹𝑚𝑢𝑙(0𝑥02, 𝑡[𝑟]) 𝑥𝑜𝑟 𝐹𝐹𝑚𝑢𝑙(0𝑥03, 𝑡[(𝑟 + 1) 𝑚𝑜𝑑 4]) 𝑥𝑜𝑟 𝑡[(𝑟 + 2) 𝑚𝑜𝑑 4] 𝑥𝑜𝑟 𝑡[(𝑟 + 3) 𝑚𝑜𝑑 4]
} }
}
Réalisé par Comlan Edmond KOUDJINAN Page 38
Où 𝐹𝐹𝑚𝑢𝑙 est définie comme suit : 𝑏𝑦𝑡𝑒 𝐹𝐹𝑚𝑢𝑙(𝑐𝑜𝑛𝑠𝑡 𝑏𝑦𝑡𝑒 𝑎, 𝑐𝑜𝑛𝑠𝑡 𝑏𝑦𝑡𝑒 𝑏){
𝑖𝑓 ((𝑎 ! = 0) 𝑎𝑛𝑑 (𝑏 ! = 0)){
𝑟𝑒𝑡𝑢𝑟𝑛 𝐴𝑛𝑡𝑖𝐿𝑜𝑔𝑠[(𝐿𝑜𝑔𝑠[𝑎] + 𝐿𝑜𝑔𝑠[𝑏]) 𝑚𝑜𝑑 255]
𝑒𝑙𝑠𝑒 𝑟𝑒𝑡𝑢𝑟𝑛 0 }
}
L’organigramme de l’algorithme de chiffrement est le suivant :
Figure 4: Organigramme de l’algorithme de chiffrement de l’AES-128
3.2 Méthodologie d’implémentation et choix technique
Pour réaliser l’implémentation, nous avons choisi Matlab.En effet, Matlab, avec les nombreuses fonctions mathématiques qui y sont im- plémentées, est bien adapté pour l’implémentation de l’AES-128, moyennant quelques sur-définitions.
La multiplication entre nombres hexadécimaux est moins efficace que la mul- tiplication entre leurs représentations polynômiales au moyen du générateur du groupe multiplicatif (§1.2.1.1). Cela nous a amené à implémenter une classe po- lynom dont le constructeur est la méthode polynom à un argument. Ce dernier