Introduction à la cryptographie symétrique
Introduction à la cryptographie symétrique
Sommaire
2.1 Cryptosystèmes symétriques ( )ﺃﻧﻈﻤﺔ ﺍﻟﺘﺸﻔﻴﺮ ﺍﻟﻤﺘﻨﺎﻇﺮﺓ. . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.2 Chiffre par substitution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2.1 Chiffre de César . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2.2 Chiffre affine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.2.2.1 Chiffrement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.2.2.2 Déchiffrement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.2.2.3 Cryptanalyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.2.3 Chiffre de Vigenère . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.2.3.1 Chiffrement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.2.3.2 Déchiffrement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.2.3.3 Cryptanalyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.2.4 Autres chiffres par substitution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.3 Chiffres par transposition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.3.1 Principe général . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.4 Chiffre par bloc et chiffre de flux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.4.1 Architecture des cryptosystèmes symétriques par bloc . . . . . . . . . . . . . . . . . . . . 26
2.4.2 Le chiffrement de flux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.5 Modes opératoires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.5.1 ECB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.5.2 CBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.5.3 PCBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.5.4 Cipher Feedback Chaining CFB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.5.4.1 Forme simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.5.4.2 Version détaillée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.5.5 Output Feedback Chaining OFB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.5.5.1 Version simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.5.5.2 OFB selon FIPS 81 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.5.5.3 OFB selon ISO 10116 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.5.6 CTR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.5.7 Authenticated encryption modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.5.8 CTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.6 Padding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.6.1 Bit padding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.6.2 TBC Padding : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.6.3 Zero padding : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.6.4 ISO 7816‑4 Padding : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.6.5 ANSI X9.23: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.6.6 ISO 10126‑1 et ISO 10126‑2 (1991) : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.6.7 PKCS#5 et PKCS#7: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
19
20 CHAPITRE ₂ : Cryptographie symétrique ﺗﺸﻔﻴﺮ ﻣﺘﻤﺎﺛﻞ
FIGURE 2.1 – La machine de Lorenz utilisée par les Allemands durant la Seconde Guerre mondiale..
L a cryptographie symétrique ()ﺗﺸﻔﻴﺮ ﻣﺘﻨﺎﻇﺮ ﺃﻭ ﻣﺘﻤﺎﺛﻞ, également dite à clé secrète (()ﺑﺎﻟﻤﻔﺘﺎﺡ ﺍﻟﺴﺮﻱpar opposition
à la cryptographie à clé publique ())ﺗﺸﻔﻴﺮ ﺑﺎﻟﻤﻔﺘﺎﺡ ﺍﻟﻌﺎﻡ, est la plus ancienne forme de chiffrement. Des
traces de son utilisation par les égyptiens remonte à 2000 av.
J.‑C. Le chiffre de Jules César est plus récent où le « ROT13 » 1 est une variante.
Plus formellement :
Tels que soit k = K, soit la connaissance d’une des deux clés permet d’en déduire facilement l’autre.
Conséquences :
— Dichotomie du monde : les bons et les mauvais
— Multiplication des clés (un secret n’est partagé que par 2 interlocuteurs), donc pourNinterlocuteurs N.(N ´
1)/2 couples
— La qualité d’un cryptosystème symétrique s’analyse par rapport à des propriétés statistiques des textes
chiffrés et la résistance aux classes d’attaques connues.
— En pratique tant qu’un cryptosystème symétrique n’a pas été cassé, il est bon, après il devient mauvais.
FIGURE 2.3 – Jules cesar 12 ou 13 juillet 100 av. J.‑C. ou 102 av. J.‑C. ‑ 15 mars 44 av. J.‑C.
Indice 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Clair A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
hiffré D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
La forme générale des chiffres par décalage sur l’alphabet à 26 lettres (Pour le chiffre de César k = 3 :
Ek (x) = x + k mod 26
Dk (y) = y ´ k mod 26
Exemple :
Nous voulons chiffrer le texte « INFORMATIQUE ». Nous pouvons nous servir du tableau suivant afin d’ob‑
tenir le texte chiffré qui est dans ce cas « LQIRUPDWLTXH » :
Texte clair I N F O R M A T I Q U E
Indice clair 8 13 5 14 17 12 0 19 8 16 20 4
Indice chiffré 11 16 8 17 20 15 3 22 11 19 23 7
(Indice clair + 3) mod 26
Texte chiffré L Q I R U P D W L T X H
2.2.2.1 Chiffrement
Au lieu de prendre une clé fixe k = 3, il est possible d’utiliser la formule : Ek (x) = (ax + b) mod 26 où
clé= (a, b), a P Z26 et b P Z26 .
Si le coefficient a vaut 1, alors le codage affine correspond au chiffre par décalage.
Exemple : prenons a = 3 et b = 5. Nous avons pour le chiffrement la formule :
Ek (x) = (3x + 5) mod 26
Le texte clair « INFORMATIQUE » aura le texte chiffré correspondant « DSUVEPFKDBNR » comme le montre
le tableau suivant :
Texte clair I N F O R M A T I Q U E
Indice clair 8 13 5 14 17 12 0 19 8 16 20 4
Indice chiffré 3 18 20 21 4 15 5 10 3 1 13 17
(3 ˆ (Indice clair) + 5) mod 26
Texte chiffré D S U V E P F K D B N R
2.2.2.2 Déchiffrement
La fonction de déchiffrement est : Dk (y) = (a´1 y ´ ba´1 ) mod 26, tel que aa´1 = 1 mod 26. D’après le
théorème de Bachet‑Bézout (voir 3.5.3), a´1 existe si a est premier avec 26. Dans notre cas a´1 = 9 dans Z26 , ce
qui donne Dk (y) = (9y ´ 45) mod 26 = (9y + 7) mod 26.
Essayons de vérifier que le déchiffrement de « DSUVEPFKDBNR » avec la clé (3,5) donne bien « INFORMA‑
TIQUE » comme le montre le tableau suivant :
Texte chiffré D S U V E P F K D B N R
Indice chiffré 3 18 20 21 4 15 5 10 3 1 13 17
Indice clair 8 13 5 14 17 12 0 19 8 16 20 4
(9 ˆ(Indice chiffré) + 7) mod 26
Texte chiffré I N F O R M A T I Q U E
2.2.2.3 Cryptanalyse
Il n’existe que 12 entiers compris entre 0 et 26 et premiers avec 26 (1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23 et 25). Il n’existe
donc que 12 ˆ 26 = 312 clés de chiffrement possible et non 26 ˆ 26 = 262 = 676. Si l’on sait qu’un code affine a
été utilisé, on peut le casser par force brute en essayant les 312 clés (recherche exhaustive).
Si le cryptogramme est suffisament long, on peut tenter d’identifier les lettres selon leur fréquence d’appa‑
rition dans les messages. En effet une lettre est, par cette méthode, toujours remplacée par la même lettre. La
lettre E, par exemple, étant en français très fréquente, si, dans le message chiffré, la lettre T est très fréquente, on
peut supposer que E est remplacé par T et ne rechercher que les codages affines permettant cette substitution.
Pour plus de détails, voir 10.2.
Texte clair t e x t e s e c r e t
indice clair 19 4 23 19 4 18 4 2 17 4 19
indice clé 2 11 4 5 2 11 4 5 2 11 4
indice chiffré 21 15 1 24 6 3 8 7 19 15 23
ECL (xn ) = (xn + CL(n mod 4)) mod 26
Texte chiffre v p b y g d i h t p x
ce qui est un avantage décisif sur les chiffrements monoalphabétiques. Il a été cassé par le major prussien
Friedrich Kasiski en 1863 et n’offre plus depuis cette époque aucune sécurité.
2.2.3.1 Chiffrement
Pour ce chiffre, une clé se présente généralement sous la forme d’un mot ou d’une phrase. Si la clé est plus
courte que le message clair, elle sera dupliquée autant de fois que nécessaire pour avoir la longueur du texte
clair 2 .
Exemple :
Nous voulons chiffrer le texte clair « texte secret » à l’aide de la clé « clef ». On peut utiliser la formule
ECL (xn ) = (xn + CL(n mod 4)) mod 26 où n est le rang de la lettre x du message clair à chiffrer. CL est
une fonction qui donne l’indice de la lettre de la clé correspondante à xn . Nous avons utilisé (mod 4) dans la
formule de CL parce que la taille de la clé = 4. Le tableau 2.1 illustre le processus de chiffrement.
De la même manière il est possible de se baser sur la fameuse table de Vigenère 2.4. Les colonnes représentent
le texte clair et les lignes le texte chiffré. Pour chiffrer par exemple la lettre claire « t » avec la lettre clé « f » on
obtient la lettre chiffrée « y » qui est la cellule obtenue par l’intersection de la colonne « t » et la ligne « f ».
. 0 1 2 3
. c l e f
CL 2 11 4 5
Texte chiffré v p b y g d i h t p x
indice chiffré 21 15 1 24 6 3 8 7 19 15 23
indice clé 2 11 4 5 2 11 4 5 2 11 4
indice clair 19 4 23 19 4 18 4 2 17 4 19
DCL (yn ) = (yn ´ CL(n mod 4)) mod 26
Texte clair t e x t e s e c r e t
2.2.3.2 Déchiffrement
On peut utiliser la formule DCL (yn ) = xn = (yn ´ CL(n mod 4)) mod 26. Le processus de déchiffrement est
illustré par le tableau 2.2.
Si nous voulons se baser sur la table de vigenère, alors pour chaque lettre chiffrée y on cherche la lettre de la
clé qui lui correspond. On fixe la ligne de la lettre de la clé et on cherche dans celle‑ci la lettre chiffré. On remonte
dans la colonne pour trouver la lettre claire correspondante. Par exemple, si on veut déchiffrer « g », la lettre
de la clé qui lui correspond est « c ». On cherche dans la ligne « c » la lettre « g » et la colonne correspondante
indique « e » qui est la lettre claire recherchée.
2.2.3.3 Cryptanalyse
Si l’on connait le nombre de symboles que comporte la clé, il devient possible de procéder par analyse de
fréquences sur chacun des sous‑textes déterminés en sélectionnant des lettres du message clair à intervalle
la longueur de la clef (autant de sous‑textes que la longueur de la clef). C’est l’attaque bien connue sur les
chiffrements monoalphabétiques.
Friedrich Wilhelm Kasiski a proposé en 1863 une méthode efficace pour déterminer la taille de la clef (test de
Kasiski) en repérant la répétition de certains motifs dans le message chiffré.
Première 01: Détermination de la longueur de la clé Elle consiste à chercher des répétitions dans le texte
chiffré. Considérons par exemple le mot‑clé « ABCD » qui sert à chiffrer « MESSAGER TRES MESQUIN ME‑
SOPOTAMIEN ».
Clé répétée A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C
Texte en clair M E S S A G E R T R E S M E S Q U I N M E S O P O T A M I E N
Texte chiffré M F U V A H G U T S G V M F U T U J P P E T Q S O U C P I F P
TABLE 2.3 – i
Dans l’exemple ci‑dessus, le trigramme « MES » est chiffré en « MFU » deux fois et « PET » une fois. Babbage et
Kasiski comprirent que des répétitions de cette sorte leur offraient la prise dont ils avaient besoin pour attaquer
Vigenère.
1. soit la même séquence de lettres du texte clair a été chiffrée avec la même partie de la clef.
2. soit deux suites de lettres différentes dans le texte clair auraient (possibilité faible) par pure coïncidence
engendré la même suite dans le texte chiffré.
Le premier cas étant le plus probable, on calcule le nombre de lettres entre deux séquences identiques. Dans
notre cas, il y a 12 lettres entre les deux « MFU », on en déduit que la longueur de la clé est un diviseur de 12 (sinon
la clé et les deux « MES » ne seraient pas alignés). La clé peut donc posséder soit 12, 6, 4, 3 ou 2 lettres (avec une
lettre, nous aurions un chiffrement monoalphabétique facilement cassé avec une analyse fréquentielle). Avec
un texte plus long, on découvrirait d’autres séquences qui permettraient d’affiner le résultat et réduire la taille
de la clé à une ou deux possibilités.
Le chiffrement par transposition demande de découper le texte clair en blocs de taille identique ; la même
permutation est alors utilisée sur chacun des blocs. Le texte doit éventuellement être complété (procédé de
bourrage) pour permettre ce découpage. La clé de chiffrement est la permutation elle‑même.
Le nombre de permutations possibles d’une longueur donnée, qui est la factorielle de cette longueur, aug‑
mente donc rapidement avec celle‑ci. Par exemple un mot de trois lettres ne peut être permuté que dans 6(= 3!)
positions différentes. Ainsi « col » ne peut se transformer qu’en « col », « clo », « ocl », « olc », « lco » ou « loc ».
Lorsque le nombre de lettres croît, le nombre d’arrangements augmente rapidement et il devient plus dif‑
ficile de retrouver le texte original sans connaître la permutation, et sans aucune connaissance sur le texte
clair. Ainsi pour un chiffre par transposition qui utilise des blocs de 20 caractères, il y a 20! possibilités, soit
2432902008176640000 combinaisons.
Exemple de transposition matricielle : Le message en clair est écrit dans une matrice. La clé une permutation
de [1..n] ou n est le nombre de colonne. La technique de transposition consiste à lire la matrice en colonne selon
un ordre donné par la clé.
3. Appelé aussi chiffre de Vernam.
Et finalement, C = Mn . Tel que F : t0, 1utd ˆ t0, 1utr Ñ t0, 1utd , où td est la taille du bloc clair et tr est celle
de la clé secondaire.
Le calcul est parfois augmenté d’une phase de post‑traitement (optionnel) après la dernière itération.
La clé de tour est obtenue à partir de la clé secrète. Ainsi pour mener à bien le calcul itératif que nous venons
de décrire, on doit donc associer à la clé secrète K, de taille tk, n sous‑clés (ou clés de tour) de taille tr. Le procédé
qui permet de calculer ces sous‑clés est appelé schéma de diversification de la clé ou schéma de production
des sous‑clés ou encore la dérivation de sous clés.
véritablement aléatoire, avec l’avantage que la séquence générée peut être beaucoup plus longue que la clé (ce
qui n’est pas possible pour une séquence purement aléatoire).
La figure 2.8 illustre le fonctionnement d’un chiffre par flux. Les bits mi du texte clair sont additionnés (mo‑
dulo 2) avec les bits si du flux de la clé pour obtenir les bits ci du texte chiffré. Le flux si est obtenu d’un géné‑
rateur de nombres pseudo‑aléatoires avec comme germe la clé secrète partagée k. Il est qualifié de synchrone
si le flux de bits si ne dépend que de la clé k et asynchrone s’il dépend également du texte chiffré précédent.
Une liste non‑exhaustive de systèmes de chiffrement par flot est :
1. A5/1, algorithme publié en 1994, utilisé dans les téléphones mobiles de type GSM pour chiffrer la commu‑
nication par radio entre le mobile et l’antenne‑relais la plus proche,
2. RC4, le plus répandu, conçu en 1987 par Ronald Rivest, utilisé notamment par le protocole WEP du WiFi.
3. Py, un algorithme récent d’Eli Biham.
4. E0 utilisé par le protocole Bluetooth.
Toutefois, le XOR n’est pas la seule opération possible. L’opération d’addition dans un groupe est également
envisageable (par exemple, addition entre deux octets, modulo 256). Un chiffrement par bloc peut être converti
en un chiffrement par flot grâce à un mode opératoire qui permet de chaîner plusieurs blocs et traiter des
données de taille quelconque.
Soit ‘ l’opération booléenne XOR :
1. Chiffrement du message M avec la clé K : M ‘ K = C
2. Déchiffrement du message C avec la clé K : C ‘ K = (M ‘ K) ‘ K = M ‘ (K ‘ K) = M
Le projet eStream 5 du réseau ECRYPT 6 a vu le jour en 2004 ayant pour but, après quatre ans, de produire
un portfolio pour promouvoir de nouveaux systèmes de chiffrement par flot. Actuellement, il recommande au
total sept 7 algorithmes dans deux catégories différentes hardware et software (par ordre alphabétique) :
Software Hardware
128‑bit key 80‑bit key
HC‑128 Grain v1
Rabbit MICKEY v2
Salsa20/12 Trivium
Sosemanuk ‑
2.5.1 ECB
D’abord le texte clair M est découpé en r blocs : M = m1 ||m2 || . . . ||mr . Ce mode dit Electronic CodeBook
ou Dictionnaire de codes permet de chiffrer (déchiffrer) chaque bloc indépendamment des autres, voir les fi‑
gures 2.9 et 2.10.
Pour le chiffrement ci = Ek (mi ) et le déchiffrement mi = Dk (ci ).
Le texte clair M est découpé en blocs mi où chacun est chiffré séparément des autres donnant lieu à un bloc
chiffré ci . Ensuite, les blocs chiffrés sont concaténés pour former le message chiffré C.
Il faut noter qu’utilisant la même clé, deux blocs de texte en clair identiques donnent deux blocs chiffrés
également identiques et vice versa.
5. http://www.ecrypt.eu.org/stream/index.html
6. http://www.ecrypt.eu.org/
7. L’algorithme F‑FCSR‑H v2 proposé en 2008 sous le profile Hardware a été éliminé suite à la publication des résultats d’attaques
cryptanalytiques.
1. Les textes clairs identiques chiffrés avec la même clé k donnent des textes chiffrés identiques.
2. Les répétitions de séquences binaires (pas forcément des blocs) dans le texte clair ne sont pas masquées
et se retrouvent sous la forme de répétitions de séquences binaires dans le texte chiffré.
3. Des portions complètes du message peuvent être modifiées, répétées ou remplacées sans difficulté (at‑
taque reply).
4. Ne respecte pas l’intégrité des données. Possibilité de remplacer certains blocs chiffrés par d’autres blocs
chiffrés, ou permuter deux blocs, sans que le destinataire s’en aperçoive.
5. Vulnérable aux attaques texte‑clair/texte‑chiffré même en ignorant totalement la clé.
6. La perte de synchronisation (perte ou ajout d’un bit) est irrécupérable.
2.5.2 CBC
(Cipher Block Chaining) inventé par IBM en 1976 où on chaîne le chiffrement (déchiffrement). On effectue un
XOR entre le bloc en clair actuel et le bloc chiffré précédent avant le chiffrement. D’abord le texte clair M est
découpé en r blocs : M = m1 ||m2 || . . . ||mr . Le premier bloc est additionné (XOR) avec un Vecteur Initial (IV)
généré souvent de façon aléatoire. Voir les figures 2.11 et 2.12.
ci = EK (mi ‘ ci´1 ), c1 = EK (m1 ‘ IV )
mi = DK (ci ) ‘ ci´1 , m1 = DK (c1 ) ‘ IV .
Le déchiffrement avec un IV incorrect donne un premier bloc de texte en clair erroné, mais les blocs de texte
en clair suivants seront valides.
2.5.3 PCBC
Propagating cipher‑block chaining ou plaintext cipher‑block chaining. Il a été conçu pour produire de petits
changements dans le texte chiffré à propager indéfiniment lors du déchiffrement, ainsi que lors du chiffrement 8 .
Voir les figures 2.13 et 2.14. Les algorithmes de chiffrement et de déchiffrement sont comme suit :
ci = EK (mi ‘ mi´1 ‘ ci´1 ), c1 = EK (IV ‘ m1 )
mi = DK (ci ) ‘ mi´1 ‘ ci´1 , m1 = IV ‘ DK (c1 )
D’abord le texte clair M est découpé en r blocs : M = m1 ||m2 || . . . ||mr . Les opérations de chiffrement et de
déchiffrement se déroulent comme suit :
ci = EK (ci´1 ) ‘ mi et c1 = EK (IV ) ‘ m1 .
mi = EK (ci´1 ) ‘ ci et m1 = EK (IV ) ‘ c1 .
De manière détaillée, le texte clair est découpé en blocs mi de taille j où 1 ď j ď n et n la taille d’un bloc 9 . En
plus du texte clair M = m1 m2 . . . mr , on a besoin d’un bloc initial IV de taille n tiré aléatoirement. On calcule
alors successivement :
I1 = IV , Z1 = EK (IV ), c1 = m1 ‘ M SBj (Z1 ),
I2 = LSBn´j (IV )||c1 , Z2 = EK (I2 ), c2 = m2 ‘ M SBj (Z2 ),
I3 = LSBn´j (I2 )||c2 , Z3 = EK (I3 ), c3 = m3 ‘ M SBj (Z3 ),
…
Ir = LSBn´j (Ir´1 )||cr´1 , Zr = EK (Ir ), cr = mr ‘ M SBj (Zr ).
Tel que B1 ||B2 représente le bloc formé par la concaténation (la juxtaposition) des deux blocs B1 et B2 . M SBu (B)
représente le bloc constitué par les u bits de B les plus à gauche (les u bits les plus significatifs). u est un entier
et 0 ď u ď n et n est la taille de B en bits. LSBu (B) représente le bloc des u bits de B les plus à droite (les u
bits les moins significatifs).
Par exemple : LSB3 (111011010) = 010, M SB4 (111011010) = 1110, et 001||10111 = 00110111.
Le déchiffrement s’effectue en calculant successivement :
I1 = IV , Z1 = EK (I1 ) = EK (IV ), m1 = c1 ‘ M SBj (Z1 )
I2 = LSBn´j (I1 )||c1 , Z2 = EK (I2 ), m2 = c2 ‘ M SBj (Z2 )
…
Ir = LSBn´j (Ir´1 )||cr´1 , Zr = EK (Ir ), mr = cr ‘ M SBj (Zr )
Si le dernier bloc mr est incomplet (sa taille t ă j), aucun remplissage n’est requis et le chiffrement (ou
déchiffrement) se fait comme suit :
cr = mr ‘ M SBt (Zr ) et mr = cr ‘ M SBt (Zr ).
1. Il est possible de chiffrer un flot de valeurs plus petites que la taille standard du bloc géré par l’algorithme.
2. Les répétitions de texte en clair sont masquées dans le texte chiffré.
3. La valeur du vecteur d’initialisation IV n’a pas besoin d’être secrète.
4. La perte de synchronisation (perte ou ajout d’un bit) est récupérable.
5. Le padding n’est pas nécessaire (facilement évitable).
9. Le mode CFB est couramment utilisé sur des blocs de 8 bits ainsi que sur des blocs entiers.
Le déchiffrement s’effectue en calculant les Oi successifs à partir de O1 comme on l’a fait pour le chiffrement
puis en écrivant mi = ci ‘ Oi.
Dans sa version détaillée, ce mode nécessite un paramètre j : (1 ď j ď n) qui est le nombre de bits du texte
clair à chiffrer pour chaque étape. (La taille du bloc clair est généralement plus petite que la taille du bloc exigée
par le système de chiffrement).
Si le dernier bloc mr est incomplet (sa taille t ă j), aucun remplissage n’est requis et le chiffrement (ou
déchiffrement) se fait comme suit :
cr = mr ‘ M SBt (Zr ) et mr = cr ‘ M SBt (Zr )
2.5.6 CTR
CounTeR ou Chiffrement basé sur un compteur et connu aussi sous le nom Integer Counter Mode (ICM)
et Segmented Integer Counter (SIC) mode. Dans ce mode, le flux de clé est obtenu en chiffrant les valeurs
successives d’un compteur comme illustré dans les figures 2.27 et 2.28. Il combine de nombreux avantages, car
il permet le chiffrement par flot, est précalculable, permet un accès aléatoire aux données, est parallélisable et
n’utilise que la fonction de chiffrement. Le compteur utilisé peut être une suite pseudo‑aléatoire qu’il sera facile
de retrouver à partir de la graine (vecteur d’initialisation).
Pour le chiffrement, le texte clair M est découpé en blocs de taille j ď n (la taille du bloc clair est inférieure
ou égale à la taille exigée par le système de chiffrement). Dans ce mode on dispose d’un compteur de taille j
et une nonce (valeur aléatoire) de n ´ j bits. On prend une valeur initiale aléatoire CT R1 pour ce compteur 10 .
On calcule alors :
Z1 = EK (CT R1 ), c1 = m1 ‘ Z1 . Puis on incrémente le compteur.
En générale, on calcule successivement :
CT Ri = CT Ri´1 + 1 mod 2n , Zi = EK (CT Ri ), ci = mi ‘ M SBj (Zi ).
Le texte chiffré transmis est constitué de la valeur CT R1 du compteur suivi des blocs c1 c2 . . . ck .
Pour le déchiffrement, Il se fait en calculant succéssivement à partir de la valeur initiale du compteur :
Zi = EK (CT Ri ), mi = ci ‘ M SBj (Zi ), CT Ri+1 = CT Ri + 1 mod 2n ,
Le mode CTR est un mode très simple à implémenter. Il est très sûr et n’utilise pas la fonction de déchiffre‑
ment. Le texte chiffré, qui doit contenir la valeur initiale du compteur, est un peu plus long que le texte clair.
On peut dans ce mode faire des accès aléatoires de manière plus commode que dans le mode OFB puisqu’il
faut seulement chiffrer la valeur du compteur pour le bloc considéré. Ce mode est particulièrement intéressant.
Si le dernier bloc mr est incomplet (sa taille t ă j), aucun remplissage n’est requis et le chiffrement (ou
déchiffrement) se fait comme suit :
cr = mr ‘ M SBt (Zr ) et mr = cr ‘ M SBt (Zr )
2.5.8 CTS
CipherText Stealing ou chiffrement avec vol de texte. Dans ce mode, applicable à un chiffrement par blocs
(ECB, CBC, etc.), les deux derniers blocs sont partiellement combinés de façon à obtenir un message de même
taille. Ici, un exemple de CTS opérant sur un chiffrement en mode CBC sur la figure 2.29. Le dernier bloc est
complété d’abord par des zeros puis combiné (ou exclusif) avec le bloc chiffré précédent avant d’être chiffré.
Les deux derniers blocs sont échangés et combinés en partie, ce qui nécessitera de les obtenir tous les deux
pour en décrypter un. CTS n’est pas un mode de chiffrement par flot, mais permet d’éviter l’utilisation de
bourrage dans les chiffrements par blocs, et donne une taille de message crypté égale à la taille du message
clair. Il est très utilisé dans les protocoles ou formats ne supportant pas une taille quelconque.
Une liste non‑exhaustive de chiffrements par bloc :
1. DES, l’ancêtre conçu dans les années 70, a été passablement étudié
2. AES, le remplaçant de DES
3. Blowfish, Serpent et Twofish, des alternatives à AES
10. Dans la recommandation NIST Recommendation SP 800‑38A, j = n. Ainsi, les blocs clairs ont la taille exigée par le système de
chiffrement.
2.6 Padding
En plus, la plupart des modes d’opération nécessitent un texte en clair divisé en une série de blocs d’une
longueur q fixe donnée. Le dernier bloc peut avoir une longueur inférieure à q. Ce phénomène nécessite un
remplissage (bourrage) pour compléter le bloc et obtenir la taille exigée.
Pour résoudre ce problème, l’expéditeur et le destinataire doivent se mettre d’accord sur une méthode de
remplissage. Une méthode de remplissage implique le rajout de bits au texte clair selon une formule convenue.
Pour le chiffrement par bloc, le remplissage permet d’avoir un bloc de la taille adéquate si celui‑ci est trop
court. Pour le chiffrement par flot, il permet d’éviter d’avoir une longueur par flot susceptible d’être attaquée,
cela évite aussi que l’attaquant ne connaisse la taille du flux.
En cryptographie asymétrique, les cryptosystèmes considèrent souvent le message en clair comme un très
grand nombre qui est injecté dans une formule. Ces nombres ont souvent des propriétés qui doivent être respec‑
tées et le remplissage permet de garantir ces caractéristiques. La plupart des fonctions de hachage découpent
les données en blocs de taille fixe et le dernier bloc doit être rempli de manière adéquate.
Le remplissage permet également d’éviter d’avoir une longueur par flot susceptible d’être attaquée, ce qui
évite aussi que l’attaquant ne connaisse la taille réelle du flux ;
Tous les mécanismes de remplissage (sauf occasionnellement le Zero Padding) ajoutent un bloc supplémen‑
taire de remplissage même lorsque le dernier bloc clair est complet. Dans ce cas, le bloc de remplissage supplé‑
mentaire sera une chaîne d’octets égale à la longueur d’octet de la taille de bloc du chiffrement (par exemple 16
pour AES, 8 pour Triple‑DES).
Seulement les deux modes d’opération ECB et CBC nécéssitent un remplissage. Les autres modes (CTR,
OFB, CFB, …) n’ont pas nesoin de remplissage.
2.7.1 Histoire
En mai 1973, le National Bureau of Standards américain demande la création d’un algorithme de chiffrement
utilisable par les entreprises. à cette époque, IBM dispose déjà d’un algorithme appelé Lucifer, conçu en 1971
par Horst Feistel.
En bonne logique, cet algorithme aurait dû être sélectionné par le NBS. En pratique, ce fut presque le cas : la
NSA demanda à ce que Lucifer soit modifié, par ses soins. Ainsi fut créé le DES, qui fut adopté comme standard
en novembre 1976.
Cela suscita des rumeurs selon lesquelles la NSA aurait volontairement affaibli l’algorithme, dans le but de
pouvoir le casser. étrangement, le DES s’est révélé résistant à plusieurs attaques ne devant apparaître dans la
communauté académique que beaucoup plus tard. Encore plus étonnant, Lucifer résistait moins bien.
Ceci permet de penser que la NSA avait connaissance dès cette époque de ces techniques de cryptanalyse et
qu’elle aurait donc, en réalité, rendu DES moins faible.
2.7.2 Fonctionnement
L’algorithme DES transforme un bloc de 64 bits en un autre bloc de 64 bits. Il manipule des clés individuelles
de 56 bits, représentées par 64 bits (avec un bit de chaque octet servant pour le contrôle de parité). Ce système
de chiffrement symétrique fait partie de la famille des chiffrements itératifs par blocs, plus particulièrement il
s’agit d’un schéma de Feistel, du nom de Horst Feistel à l’origine du chiffrement Lucifer.
Dans un schéma de Feistel, comme illustré par la figure 2.32, le clair est de longueur paire et découpé en
une moitié gauche L et une moitié droite R. Le ième tour du schéma prend en entrée un bloc (Li´1 , Ri´1 ) et
le transforme (en faisant intervenir la ième sous‑clé Ki ) en un bloc (Li , Ri ). Le premier tour prend en entrée le
bloc (L, R) et le dernier tour produit le chiffré (L1 , R1 ). La relation entre (Li´1 , Ri´1 ) et (Li , Ri ) est :
Li = Ri´1 , Ri = Li´1 ‘ f (Ri´1 , Ki ) où f est un chiffrement produit.
Un chiffrement de Feistel est inversible, que f soit une bijection ou non. En effet, on a :
12. Federal Information Processing Standard : sont des standards publics développés et annoncés par le gouvernement des états‑Unis
pour l’usage des agences gouvernementales non militaires et entrepreneurs gouvernementaux. Beaucoup de standards FIPS sont des
versions modifiées des standards ANSI, IEEE, ISO, …etc.
1. Permutation initiale : et fixe d’un bloc, sans aucune incidence sur le niveau de sécurité. La matrice IP du
tableau 2.5 est utilisée.
Par exemple, si m = 0123456789ABCDEF en hexadécimal.
m = 00000001 00100011 01000101 01100111 10001001 10101011 11001101 11101111
IP (m) = 11001100 00000000 11001100 11111111 11110000 10101010 11110000 10101010
Alors : L0 = 11001100 00000000 11001100 11111111 et R0 = 11110000 10101010 11110000 10101010
2. Réseau de Feistel : Le résultat est soumis à 16 itérations (chacune est un schéma de Feistel). Une clé
secondaire de 48 bits est requise à chaque tour. Cette clé de ronde intermédiaire est calculée à partir de
la clé initiale de l’utilisateur. A chaque round, le bloc de 64 bits en entrée est découpé en deux sous‑blocs
de 32 bits chacun. Les sous‑blocs sont échangés l’un avec l’autre selon un schéma de Feistel. Le bloc de 32
bits ayant le poids le plus fort (celui qui s’étend du bit 32 au bit 64) subira une transformation (application
de la fonction de tour). La fonction de tour illustrée par la figure 2.31 et définie comme suit :
f (Ri´1 , Ki ) = P (S(E(Ri´1 ) ‘ Ki ))
où S dénote les Si (boîtes S).
3. Permutation finale : Le dernier résultat (bloc issu de la dernière ronde) est transformé par la fonction
inverse de la permutation initiale IP‑1 du tableau 2.6.
IP IP‑1
58 50 42 34 26 18 10 2 40 8 48 16 56 24 64 32
60 52 44 36 28 20 12 4 39 7 47 15 55 23 63 31
62 54 46 38 30 22 14 6 38 6 46 14 54 22 62 30
64 56 48 40 32 24 16 8 37 5 45 13 53 21 61 29
57 49 41 33 25 17 9 1 36 4 44 12 52 20 60 28
59 51 43 35 27 19 11 3 35 3 43 11 51 19 59 27
61 53 45 37 29 21 13 5 34 2 42 10 50 18 58 26
63 55 47 39 31 23 15 7 33 1 41 9 49 17 57 25
TABLE 2.5 – Permutation initiale (IP). TABLE 2.6 – Permutation finale (IP‑1 ).
E P
32 1 2 3 4 5 16 7 20 21
4 5 6 7 8 9 29 12 28 17
8 9 10 11 12 13 1 15 23 26
12 13 14 15 16 17 5 18 31 10
16 17 18 19 20 21 2 8 24 14
20 21 22 23 24 25 32 27 3 9
24 25 26 27 28 29 19 13 30 6
28 29 30 31 32 1 22 11 4 25
TABLE 2.7 – Expansion (E) au début de chaque ronde. TABLE 2.8 – Permutation (P) au début de chaque ronde.
S1
14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7
0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8
4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0
15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13
S2
15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10
3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5
0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15
13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9
S3
10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8
13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1
13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7
1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12
S4
7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15
13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9
10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4
3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14
1. Réduction à 56 bits : T = P C1(K) ; Appliquer la matrice PC1 qui est une permutation sélective qui prend
56 bits à partir de K et élimine les 8 bits de parité.
Par exemple si K = 133457799BBCDF F 1 en hexadécimal, alors :
K = 00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001 Alors, on obtient :
T = P C1(K) = 1111000 0110011 0010101 0101111 0101010 1011001 1001111 0001111
2. Division en sous‑clés de 28 bits : représenter T comme deux parties de 28‑bit (C0 , D0 ). (Utiliser P C1 de
la Table 2.11 pour sélectionner les bits à partir de T : C0 = k57 k49 . . . k36 , D0 = k63 k55 . . . k4 .)
En considérant l’exemple précédent :
C0 = 1111000011001100101010101111 et D0 = 0101010101100110011110001111
3. Pour i allant de 1 à 16, calculer Ki comme suit :
(a) Rotation de la clé : Ci = (Ci´1 ö vi ), Di = (Di´1 ö vi ). Chaque sous‑clé de 28 bits subit une rotation
vers la gauche de vi bits. A savoir ö dénote un décalage circulaire à gauche.
(b) Réduction : Ki = P C2 (Ci , Di ). Utiliser P C2 de la Table 2.12 pour sélectionner les 48 bits à partir de la
concaténation b1 b2 . . . b56 de Ci et Di : Ki = b14 b17 . . . b29 b32 .
La table 2.14 illustre la dérivation des 16 clés de rondes à partir de la clé principale de 64 bits suivante :
K = 00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001
S5
2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9
14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6
4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14
11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3
S6
12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11
10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8
9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6
4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13
S7
4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1
13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6
1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2
6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12
S8
13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7
1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2
7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8
2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11
PC1
Ci PC2
57 49 41 33 25 17 9 14 17 11 24 1 5
1 58 50 42 34 26 18 3 28 15 6 21 10
10 2 59 51 43 35 27 23 19 12 4 26 8
19 11 3 60 52 44 36 16 7 27 20 13 2
Di 41 52 31 37 47 55
63 55 47 39 31 23 15 30 40 51 45 33 48
7 62 54 46 38 30 22 44 49 39 56 34 53
14 6 61 53 45 37 29 46 42 50 36 29 32
21 13 5 28 20 12 4
TABLE 2.12 – Permutation PC2 .
TABLE 2.11 – Permutation PC1 .
La clé qui est effectivement exploitée dans cette opération est celle obtenue après l’application de P C1 est
donnée par :
T = 1111000 0110011 0010101 0101111 0101010 1011001 1001111 0001111
2.7.4 Déchiffrement
Le déchiffrement est identique au chiffrement sauf que les sous‑clés sont prises dans l’ordre inverse. k16 puis
k15 , …et enfin k1 .
Pour engendrer les sous‑clés dans l’ordre inverse, les décalages à droite à utiliser sont 1, 1, 2, 2, 2, 2, 2, 2, 1, 2,
2, 2, 2, 2, 2, 1.
Nous pouvons observer que C0 = C16 et D0 = D16 . Ainsi, k16 peut être derivé après P C1.
k16 = P C2 (C16 , D16 ) = P C2 (C0 , D0 ) = P C2 (P C1 (k))
Pour engendrer k15 nous avons besoin de variables intermédiaires C15 and D15 , qui peuvent être déduites de
C16 et D16 utilisant les décalages à droite (right shifts (RS)) :
N° round Ci Di Ki
0 1111000011001100101010101111 0101010101100110011110001111 ‑
1 1110000110011001010101011111 1010101011001100111100011110 00011011 00000010 11101111 11111100 01110000 01110010
2 1100001100110010101010111111 0101010110011001111000111101 01111001 10101110 11011001 11011011 11001001 11100101
3 0000110011001010101011111111 0101011001100111100011110101 01010101 11111100 10001010 01000010 11001111 10011001
4 0011001100101010101111111100 0101100110011110001111010101 01110010 10101101 11010110 11011011 00110101 00011101
5 1100110010101010111111110000 0110011001111000111101010101 01111100 11101100 00000111 11101011 01010011 10101000
6 0011001010101011111111000011 1001100111100011110101010101 01100011 10100101 00111110 01010000 01111011 00101111
7 1100101010101111111100001100 0110011110001111010101010110 11101100 10000100 10110111 11110110 00011000 10111100
8 0010101010111111110000110011 1001111000111101010101011001 11110111 10001010 00111010 11000001 00111011 11111011
9 0101010101111111100001100110 0011110001111010101010110011 11100000 11011011 11101011 11101101 11100111 10000001
10 0101010111111110000110011001 1111000111101010101011001100 10110001 11110011 01000111 10111010 01000110 01001111
11 0101011111111000011001100101 1100011110101010101100110011 00100001 01011111 11010011 11011110 11010011 10000110
12 0101111111100001100110010101 0001111010101010110011001111 01110101 01110001 11110101 10010100 01100111 11101001
13 0111111110000110011001010101 0111101010101011001100111100 10010111 11000101 11010001 11111010 10111010 01000001
14 1111111000011001100101010101 1110101010101100110011110001 01011111 01000011 10110111 11110010 11100111 00111010
15 1111100001100110010101010111 1010101010110011001111000111 10111111 10010001 10001101 00111101 00111111 00001010
16 1111000011001100101010101111 0101010101100110011110001111 11001011 00111101 10001011 00001110 00010111 11110101
k15 = P C2 (C15 , D15 ) = P C2(RS2 (C16 ), RS2 (D16 )) = P C2 (RS2 (C0 ), RS2 (D0 ))
Pour tout message m et clé k nous avons DESk (m) = DESk (m). (complémentarité).
Enfin, pour tester le bon fonctionnement le texte clair « Now is the time for all » représenté par
« P = 4E6F77206973207468652074696D6520666F7220616C6C20 » en hexadécimal (7‑bit ASCII plus parité) et la
clé K = 0123456789ABCDEF donne le texte chiffré
« C = 3FA40E8A984D48156A271787AB8883F9893D51EC4B563B53 ».
éviter.
Le fonctionnement de DES est propice à la présence de clés faibles. En effet, la clé de 56 bits produit 16 sous‑
clés, chacune d’entre elles est utilisée dans le tour correspondant. Les clés faibles de DES sont celles qui pro‑
duisent 16 sous‑clés identiques. Hors clés non impaires, c’est le cas pour les clés suivantes :
0101010101010101, 1F1F1F1F0E0E0E0E, E0E0E0E0F1F1F1F1, FEFEFEFEFEFEFEFE
Comme les sous‑clés sont identiques et que DES est un réseau de Feistel, la fonction de chiffrement est éga‑
lement celle de déchiffrement. On a de facto un double chiffrement équivalent à un chiffrement suivi d’un
déchiffrement. Le message en clair n’est donc pas chiffré et apparaît inchangé à la sortie.
Les clés semi‑faibles de DES sont des clés K1 et K2 distinctes satisfaisant la propriété suivante :
EK1 (EK2 (M )) = M
Où E est l’opération de chiffrement DES. On compte 16 clés de ce type dans DES, dont les 4 clés faibles. Ces
clés sont :
01FE01FE01FE01FE, FE01FE01FE01FE01, 1FE01FE01FE01FE0, E01FE01FE01FE01F
01E001E001E001E0, E001E001E001E001, 1FFE1FFE1FFE1FFE, FE1FFE1FFE1FFE1F
011F011F011F011F, 1F011F011F011F01, E0FEE0FEE0FEE0FE, FEE0FEE0FEE0FEE0
Les clés semi‑faibles sont celles qui une fois les utilisées pour générer les 16 sous‑clés, génèrent seulement
deux sous‑clés au lieu de 16 différents.
De telles clés sont bien sûr à bannir mais leur présence ne rend pas DES moins robuste en théorie. DES a
un espace de clés qui contient 256 possibilités. La probabilité de trouver une clé faible avec un tirage aléatoire
parfait est de 2456 = 5, 55111512 ˆ 10´17 , c’est un évènement hautement improbable. On peut aussi simplement
tester la clé pour vérifier qu’elle n’est pas faible. DES est un chiffrement qui a été passablement cryptanalysé et
les clés faibles sont un problème qui a été relégué au deuxième plan puisqu’il est désormais possible de mener
une recherche exhaustive des clés de DES.
La liste est incomplète mais plusieurs chiffrements par bloc possèdent des clés faibles :
— IDEA, les clés faibles sont identifiables avec une attaque par texte clair choisi, la relation entre les bits
du texte clair et ceux du texte chiffré devient prévisible. Des publications de Joan Daemen en 1993 ont
confirmé les risques d’avoir des clés avec de longues séquences de bits nuls (plus de 14 bits nuls consécu‑
tifs). Daemen a montré que la classe de clés faibles comptait 251 clés, un nombre qui peut paraître énorme
mais insignifiant par rapport aux 2128 clés possibles. La probabilité d’obtenir une clé faible dans IDEA est
alors de 2´76 ce qui est inférieur à la probabilité d’une clé faible dans DES. Les clés faibles étant faciles à
détecter, cette découverte ne pose pas un problème majeur en pratique.
— Blowfish, les clés faibles produisent de mauvaises S‑Boxes puisque ces substitutions dépendent de la clé. Il
existe une attaque par texte clair choisi sur une version réduite de Blowfish qui est facilitée par l’utilisation
des clés faibles.
— RC4, un chiffrement par flot n’est pas à l’abri non plus des clés faibles. Les clés qui commencent par 000F D
ont 14% de chance de produire une sortie qui commence par 0000.
2.7.6 Attaques
Plusieurs attaques ont été découvertes sur DES. Elles permettent de diminuer les coûts d’une recherche ex‑
haustive des clés qui se monte à 255 opérations en moyenne. Certaines de ces méthodes ne sont plus efficaces
avec des algorithmes de chiffrement plus récents du fait de l’introduction d’un effet avalanche.
les concepteurs de DES à renforcer le contenu des tables de substitution (au lieu de l’affaiblir comme la
rumeur le laissait entendre).
4. La cryptanalyse linéaire inventée par Mitsuru Matsui en 1993.
5. Le compromis temps‑mémoire est un concept inventé par Martin Hellman au début des années 1980.
En partant du principe que le même message va être chiffré plusieurs fois avec des clés différentes, on
pourrait calculer une immense table qui contient toutes les versions chiffrées de ce message. Lorsque l’on
intercepte un message chiffré, on peut le retrouver dans la table et obtenir la clé qui avait été utilisée pour
le coder.Cette attaque n’est bien sûr pas faisable car nous avons besoin d’une table de l’ordre du milliard
de GB. Le génie d’Hellman a été de trouver un moyen pour réduire cette table à environ 1 téraoctet (soit 1
million de fois moins que la table compète), ce qui est faisable de nos jours.
6. D’autres attaques sont spécifiques à des implémentations et ne sont pas forcément spécifiques à DES.
Dans le cas d’un DES implémenté dans du matériel, on pourrait analyser la consommation électrique et
déduire certaines informations sur la clé (une consommation accrue indique des bits actifs). Le même
style d’attaque peut aussi être employé sur un ordinateur en calculant le temps mis pour chiffrer avec des
textes différents ou en analysant la mémoire utilisée.
7. Toutes les autres attaques sur DES visent à réduire le temps de calcul d’une recherche exhaustive en utili‑
sant des machines spécifiquement conçues pour la tâche (grâce à des FPGA en parallèle par exemple). Une
telle machine a été construite en 1998. Deep Crack a coûté environ 200 000 dollars et pouvait casser la clé
en moins d’une semaine. Le calcul distribué en utilisant les ordinateurs des particuliers (distributed.net)
a prouvé son efficacité en cassant une clé en moins de 24 heures.
k3 k2 k1
C= EDES DDES EDES (M )
Une autre variante de Triple DES est celle de Carl Ellison, mais elle ne fait pas partie du standard défini pour
3DES :
k3 k2 k1
C = EDES T EDES T EDES (M )
où T est une fonction de transposition destinée à augmenter la diffusion. Cette fonction prend en entrée un
bloc de 8192 octets, remplit la graine d’un générateur de nombres pseudo‑aléatoires avec l’histogramme des
octets, et mélange les octets du bloc grâce à la sortie du générateur. L’histogramme n’est pas changé par les
permutations et donc l’opération inverse est possible. David Wagner a proposé une attaque sur le schéma
d’Ellison en 1997.
Même quand 3 clés de 56 bits différentes sont utilisées, la force effective de l’algorithme n’est que de 112 bits
(si k3 = k1 et non 168 bits (cas où toutes les clés sont indépendantes), à cause d’une attaque rencontre au milieu.
Cette attaque reste cependant peu praticable, en effet elle nécessite un stockage de données de l’ordre de 256
13. ANSI X9.52
mots de 64 bits, de plus ce stockage doit être « interrogeable » en un temps très court. C’est pour éviter ce genre
d’attaque que le Double DES est simplement proscrit et que l’on passe directement à du Triple DES. Le Double
DES n’assure en effet qu’une force effective moyenne de 57 bits.
Bien que normalisé (par exemple par le NIST), bien connu, et assez simple à implémenter, il est assez lent,
et appelé à être remplacé par des algorithmes plus modernes tels qu’AES, également reconnu via le NIST aux
états‑unis comme sûr pour tout échange d’information.
Après une première sélection suite à la découverte de plusieurs failles dans un certain nombre d’entre eux,
la liste fut réduite à 5 candidats. Les concepteurs ont mutuellement « cryptanalysés » leurs chiffrements et ont
« joué le jeu » du concours. Certains chiffrements, trop lents, ont été rapidement écartés. D’autres ont nécessité
une cryptanalyse plus intensive.
Les cinq finalistes étaient :
— MARS
— RC6
— Rijndael
— Serpent
— Twofish
2.9.1 Le vainqueur
Le 2o ctobre 2000, le NIST annonce que Rijndael de Vincent Rijmen et Joan Daemen a remporté le concours
AES et entrait dans un processus de standardisation officielle. Le 26 novembre 2001, le NIST annonce que AES
a été approuvé dans le standard FIPS PUB 197.
Advanced Encryption Standard ou AES (soit « standard de chiffrement avancé » en français), aussi connu
sous le nom de Rijndael, est un algorithme de chiffrement symétrique, choisi en octobre 2000 par le NIST pour
être le nouveau standard de chiffrement pour les organisations du gouvernement des états‑Unis.
2.9.2 Fonctionnement
L’algorithme prend en entrée un bloc de 128 bits (16 octets). Les clés secrètes ont au choix suivant la version du
système 128 bits (16 octets), 192 bits (24 octets) ou 256 bits (32 octets). Les données et les clés sont découpées en
octets et placées dans des tableaux. Les données comportent td = 16 octets p0 , p1 , . . . , p15 qui sont classés dans
un tableau ayant 4 lignes et 4 colonnes. Le tableau est rempli colonne par colonne. De même la clé est découpée
en octets (tk = 16, tk = 24 ou tk = 32 octets) k0 , k1 , . . . , ktk´1 . Ces octets sont aussi classés dans un tableau de
4 lignes et Nk colonnes (Nk = 4, Nk = 6 ou Nk = 8).
Suivant la version (la taille de la clé), le nombre de tours noté nr est différent. Le nombre nr est donné dans
le tableau suivant.
Nk 4 6 8
nr 10 12 14
Le système crée nr + 1 clés de tour ayant chacune 16 octets à partir de la clé initiale K. Ces clés sont stockées
dans un tableau unidimensionnel T K et sont notées T K[0], T K[1], . . . T K[nr].
La procédure suivante de la Figure 2.37 décrit le fonctionnement global du système AES. Elle prend en entrée
un tableau de données St (texte clair) qui est modifié par la procédure et renvoyé en sortie (texte chiffré).
Les procédures appelées Round, Figure 2.38, et FinalRound, Figure 2.39, sont elles‑mêmes composées :
La procédure SubBytes, Figure 2.40, est la seule transformation qui ne soit pas linéaire. C’est donc grâce à
celle‑ci que le système est résistant. Elle utilise une opération sur le corps fini à 256 éléments.
Le corps fini à 256 éléments : Considérons le polynôme P (X) = X 8 + X 4 + X 3 + X + 1 (qui est utilisé comme
modulo).
Ce polynôme à coefficients dans le corps à 2 éléments F2 = t0, 1u est irréductible sur ce corps.
Les éléments du corps à 256 éléments seront les octets b7 b6 b5 b4 b3 b2 b1 b0 considérés comme des polynômes
b(X) = b7 X 7 + b6 X 6 + b5 X 5 + b4 X 4 + b3 X 3 + b2 X 2 + b1 X + b0 , ce qui nous permet de définir les deux
opérations suivantes :
Addition : a7 a6 a5 a4 a3 a2 a1 a0 + b7 b6 b5 b4 b3 b2 b1 b0 = c7 c6 c5 c4 c3 c2 c1 c0 , avec c(x) = a(x) + b(x), ce qui donne
aussi ci = ai ‘ bi .
Multiplication : (a7 a6 a5 a4 a3 a2 a1 a0 )‚(b7 b6 b5 b4 b3 b2 b1 b0 ) = c7 c6 c5 c4 c3 c2 c1 c0 , avec c(x) = a(x)ˆb(x) mod P (x).
Par exemple :
(X 6 + X 4 + X 2 + X + 1) ‚ (X 7 + X + 1) = X 13 + X 11 + X 9 + X 8 + X 7 + X 7 + X 5
+X 3 + X 2 + X + X 6 + X 4 + X 2 + X + 1
= X 13 + X 11 + X 9 + X 8 + X 7 + X 6 + X 5 + X 4 + X 3 + 1
= X 7 + X 6 + 1 mod X 8 + X 4 + X 3 + X + 1
On a ainsi une structure de corps et donc tout élément non nul est inversible. Nous noterons g l’application
de F256 dans F256 définie par :
#
0 si x = 0
g(x) =
x´1 sinon
b7 1 1 1 1 1 0 0 0 a7 0
b6 0 1 1 1 1 1 0 0 a6 1
b5 0 0 1 1 1 1 1 0
a5 1
b4 0 0 0 1 1 1 1 1
= a4 ‘ 0
b3 1 0 0 0 1 1 1 1
a3 0
b2 1 1 0 0 0 1 1 1
a2 0
b1 1 1 1 0 0 0 1 1 a1 1
b0 1 1 1 1 0 0 0 1 a0 1
La matrice carrée qui intervient est une matrice circulante, elle correspond donc à une multiplication de
polynômes modulo x8 ´ 1.
Ce qui correspond à b(x) = ((x4 + x3 + x2 + x + 1)a(x) mod (x8 + 1)) ‘ (x6 + x5 + x + 1). On remarque que
g = g et que f ´1 est définie par :
´1
b7 0 1 0 1 0 0 1 0 a7 0
b6 0 0 1 0 1 0 0 1 a6 0
b5 1 0 0 1 0 1 0 0
a5 0
b4 0 1 0 0 1 0 1 0
= a4 ‘ 0
b3 0 0 1 0 0 1 0 1
a3 0
b2 1 0 0 1 0 0 1 0
a2 1
b1 0 1 0 0 1 0 0 1 a1 0
b0 1 0 1 0 0 1 0 0 a0 1
La procédure SubByte :
On définit alors : s(a) = f (g(a)) qui est réalisée en appliquant la transformation affine f dans GF (2) à l’inverse
de a dans GF (28 ).
On a donc aussi : s´1 (b) = g(f ´1 (b)).
Il est donc possible de se servir de la S‑Box de la Figure 2.41 dont les valeurs sont en hexadécimal pour réaliser
cette transformation.
Par exemple, si ai = 53 en hexadécimal, alors bi = ED ce qui correspond à la ligne 5 et la colonne 3.
De même, si ai = CF en hexadécimal, alors bi = 8A ce qui correpond à la ligne c et la colonne f .
La procédure SubByte, la Figure 2.42, applique s à chaque octet de l’entrée St.
La procédure ShiftRows
Cette procédure, Figure 2.43, consiste à opérer une rotation à gauche sur chaque ligne du tableau d’entrée. Le
nombre de cases dont on décale la ligne i (0 ď i ď 3) est de i.
La transformation inverse est immédiate à calculer.
La procédure MixColumns :
La transformation MixColums, Figure 2.44, consiste à appliquer à chaque colonne du tableau des données une
même transformation que nous allons décrire.
Considérons une colonne c = (c1 , c2 , c3 , c4 )t .
Les élément ci sont des éléments de F265 . Chaque colonne c est transformée en une colonne d grâce à la
transformation linéaire suivante donnée par sa matrice dont les coefficients sont dans F265 et que nous écrivons
comme des octets en hexadécimal :
d0 02 03 01 01 c0
d1 01 02 03 01 c1
= ˆ
d2 01 01 02 03 c2
d3 03 01 01 02 c3
Là encore la matrice utilisée est circulante. La transformation correspond en fait à une multiplication par un
polynôme fixe : A(x) = 03x3 + 01x2 + 01x + 02, modulo 1 + x4 :
d(x) = d0 + d1 x + d2 x2 + d3 x3 .
Le polynôme A(x) est premier avec x4 + 1, il est donc inversible modulo x4 + 1 est son inverse est B(x) =
0Bx3 + 0Dx2 + 09x + 0E.
On retrouve donc c(x) à partir de d(x) en effectuant le produit
c(x) = B(x) ˆ d(x) mod x4 + 1,
ou en effectuant le produit matriciel
c0 0E 0B 0D 09 d0
c1 09 0E 0B 0D d1
= ˆ
c2 0D 09 0E 0B d2
c3 0B 0D 09 0E d3
Lors de cette opération, chaque colonne est multipliée par la matrice suivante (pour une clé de 128 bit) :
2 3 1 1
1 2 3 1
1 1 2 3
3 1 1 2
L’opération de multiplication est définie par : multiplication par 1 signifie aucun changement, la multiplica‑
tion par deux correspond au décalage vers la gauche d’une position, et la multiplication par trois correspond
à un décalage vers la gauche puis addition ‘ ou XOR avec la valeur initiale non décalée. Après déplacement,
un XOR conditionnel avec 0x1B doit être effectuée si la valeur décalée est plus grand que 0xFF.
La procédure AddRoundKey :
La procédure AddRoundKey est très simple. Elle consiste à faire un ou exclusif entre les 128 bits de l’état St et
les 128 bits de la clé de tour T . On obtient une nouvelle valeur de l’état. St := St ‘ T .
La procedure KeyExpansion :
La clé de chiffrement K stockée dans un tableau de 4 lignes et N k colonnes (N k = 4, 6, 8) est étendue en un
tableau W ayant 4 lignes et 4 ˆ nr + 1 colonnes. La clé de tour T K[i] (0 ď i ď nr) est donnée par les 4 colonnes
4 ˆ i, 4 ˆ i + 1, 4 ˆ i + 2, 4 ˆ i + 3 du tableau W .
Il y a deux façons de construire le tableau W suivant que Nk = 4, 6 ou Nk = 8. La procédure de construction
est nommée ExpandedKey.
1) Cas N k = 4 ou N k = 6 est illustré dans la Figure 2.45
La procédure utilise la fonction s sur les octets définie précédemment. Elle utilise aussi des constantes de
F256 ,
données par RC[i] = αi , où α est l’élément de F256 correspondant au polynôme X(α = 02). L’élévation à la
puissance i se fait dans le corps F256 .
2) Cas N k = 8 est illustré dans la Figure 2.46.
2.9.3 Déchiffrement
Le déchiffrement consiste à appliquer les opérations inverses, dans l’ordre inverse et avec des sous‑clés éga‑
lement dans l’ordre inverse.
En commençan par le dernier bloc chiffré. L’opération InvShiftRows est l’inverse de ShiftRows. Les octets des
03 dernières lignes sont décalés à droite de façon cyclique selon l’indice de la ligne.
La première ligne demeure inchangée. La dexième est décalée par 1. La troisième par 2 et la dernière par 3.
L’opération InvSubBytes est l’inverse de SubBytes, dans laquelle la S‑box inverse est appliquée (inverse de la
transformation affine suivie de la multiplication inverse dans GF (2)).
La Fgure 2.47 illustre la boite S‑Box inverse utilisée par AES.
L’opération InvMixColumns est l’inverse de MixColumns. Elle opère sur les données colonne par colonne Tel
1
que : a ��1 (x) = 0bx3 + 0dx2 + 09x + 0e.
c0 0E 0B 0D 09 d0
c1 09 0E 0B 0D d1
= ˆ
c2 0D 09 0E 0B d2
c3 0B 0D 09 0E d3
L’opération AddRoundKey, est l’inverse d’elle même puisqu’elle n’effectue qu’un XOR.
1
��1
FIGURE 2.48 – Algorithm 6 ‑ AES (St,K).
2.9.4 Attaques
Il n’existe pas de clés faibles ni semi‑faibles dans ce cryptosystème.
L’AES n’a pour l’instant pas été cassé et la recherche exhaustive (à force brute à) demeure la seule solution.
Rijndael a été conçu de telle manière à rendre des méthodes classiques comme la cryptanalyse linéaire ou
différentielle très difficiles.
Attaques sur des versions simplifiées :
Des attaques existent sur des versions simplifiées d’AES. Niels Ferguson et son équipe ont proposé en 2000
une attaque sur une version à 7 tours de l’AES 128 bits. Une attaque similaire casse un AES de 192 ou 256 bits
contenant 8 tours. Un AES de 256 bits peut être cassé s’il est réduit à 9 tours avec une contrainte supplémentaire.
En effet, cette dernière attaque repose sur le principe des à related‑keys à (clés apparentées).
Dans une telle attaque, la clé demeure secrète mais l’attaquant peut spécifier des transformations sur la clé et
chiffrer des textes à sa guise. Il peut donc légèrement modi ?er la clé et regarder comment la sortie de l’AES se
comporte.
Attaques sur la version compète :
Certains groupes ont affirmé avoir cassé AES complet mais après vérification par la communauté scientifique,
il s’avérait que toutes ces méthodes étaient erronées. Cependant, plusieurs chercheurs ont mis en évidence des
possibilités d’attaques algébriques, notamment l’attaque XL et une version améliorée, la XSL. Ces attaques ont
été le sujet de nombreuses controverses et leur efficacité n’a pas encore été pleinement démontrée, le XSL fai‑
tappel à une analyse heuristique dont la réussite n’est pas systématique. Deplus, elles sont impraticables car le
XSL demande au moins 287 opérations voire 2100 dans certains cas. Le principe est d’établir les équations (qua‑
dratiques / booléennes) qui lient les entrées aux sorties et de résoudre ce système qui ne comporte pas moins
de 8000 inconnues et 1600 équations pour 128 bits. La solution de ce système reste pour l’instant impossible
à déterminer. En l’absence d’une preuve formelle sur l’efficacité d’attaques similaires au XSL, l’AES est donc
considéré comme sûr. On peut toutefois parier que dans les années à venir, les avancées en cryptanalyse et la
relative simplicité de la structure d’AES devraient ouvrir des brèches dans l’algorithme. Si pareille découverte
venait à se produire, des méthodes similaires à AES comme Camellia pourraient rapidement devenir obsolètes.
Recommandations de la NSA :
La NSA a annoncé que tous les finalistes qui avaient participé au concours AES pouvaient être considérés
comme sûrs et qu’ils étaient suffisamment robustes pour chiffrer les données non‑classifiées du gouvernement
américain. En juin 2003, le gouvernement américain a en effet annoncé :
« L’architecture et la longueur de toutes les tailles de clés de l’algorithme AES (128, 192 et 256) sont suffisantes
pour protéger des documents classi ?és jusqu’au niveau »SECRET« . Le niveau »TOP SECRET« nécessite des
clés de 192 ou 256 bits. L’implémentation de l’AES dans des produits destinés à la protection des systèmes et/ou
documents liés à la sécurité nationale doit faire l’objet d’une analyse et d’une certification par la NSA avant leur
acquisition et leur utilisation »
Autres attaques :
Cette dernière phrase prend tout son sens lorsqu’on sait que des attaques sont possibles sur des systèmes
défaillants. On peut en effet analyser la consommation électrique (des pics de consommation indiqueraient
des calculs lourds) ou encore le temps nécessaire au chiffrement. Ce genre d’attaque vise surtout des systèmes
à boites noires à dans lesquels une clé secrète constante est codée dans le matériel et utilisée pour chiffrer
plusieurs messages, par exemple des cartes à puce.
On peut toutefois se demander pourquoi aucun concours officiel n’a été lancé pour promouvoir la recherche
d’attaques sur AES. Dans ce domaine, la méthode de chiffrement asymétrique RSA remporte la palme avec
plusieurs concours dotés de gains élevés.