CHAPITRE 2 : LE CHIFFREMENT SYMETRIQUE
INTRODUCTION
Depuis l'époque de Jules César jusqu'à la fin des années 1970, l'art de dissimuler des messages
secrets a fasciné l'humanité. On appelle cela la cryptographie classique. Imaginez un message
codé, un puzzle à déchiffrer. Le texte original, clair et lisible, est transformé en un texte
inintelligible, appelé chiffré. Seuls ceux détenant la clé du mystère peuvent le décrypter et lire
le message original. Pendant des siècles, les techniques de cryptographie classique se sont
concentrées sur les lettres et les caractères. Les algorithmes employés substituaient des
caractères par d'autres, les permutaient, ou combinaient ces deux techniques pour brouiller les
pistes. Deux grandes familles de crypto systèmes se distinguent dans cet art ancien :
Les chiffrements Chiffrement simple : chaque lettre est remplacée par un autre
symbole selon une règle prédéfinie.
Les chiffrements Chiffrement par blocs : les lettres sont réorganisées dans un ordre
différent.
Ilse question pour nous d’explorer en détail ces deux familles de chiffrements classiques. Nous
découvrirons des exemples fascinants comme le célèbre chiffrement de César, le plus simple
des chiffrements par substitution, le chiffrement de Vigenère, plus complexe et jadis
considéré comme [Link] cryptographie classique a joué un rôle crucial dans l'histoire de
la communication humaine. Des espions militaires aux diplomates, en passant par les amoureux
transmettant des messages secrets, la nécessité de protéger des informations sensibles a conduit
au développement de techniques de cryptage toujours plus sophistiquées. Même si les méthodes
de la cryptographie classique ne sont plus considérées comme inviolables à l'ère numérique,
elles constituent un héritage précieux et fascinant. Elles éclairent les origines de la sécurité
informatique et nous rappellent l'ingéniosité humaine face aux défis de la communication
confidentielle.
Préparez-nous à explorer le monde fascinant de la cryptographie classique et à percer les
secrets des messages codés du passé !
I. DEFINITION FORMELLE ET ELEMENT MATHEMATIQUE
1. Définition formelle
Un procédé (ou système ou algorithme) de chiffrement (ou cryptosystème est un quintuplet
A = (P,C,K, E, D) où
P est un ensemble fini de blocs de textes clairs possibles,
C est un ensemble fini de blocs de textes chiffrés possibles,
K est un ensemble fini de clefs possibles,
E est une fonction de chiffrement, E : P × K → C,
D est une fonction de déchiffrement D : C × K → P,
Pour chaque clef K, il existe au moins une clef K0 telle que pour tout x ∈ P,
D(E(x, K), K0) = x .
La dernière propriété est fondamentale. Elle précise que si un texte clair x est chiffré en un
cryptogramme y avec K, alors il existe une clef K0 telle que y déchiffré avec K0 redonne x.
En termes mathématiques, cela signifie que pour tout K, l’application
E(−, K): P → C est injective, et que D(−, K0): C → P est surjective.
Remarquons que les ensembles P et C sont supposés finis donc, dans le cas où |P| = |C|, les
fonctions E(−, K) et D(−, K0) sont en fait bijectives, et inverses l’une de l’autre pour toute clef
K.
Supposons qu’Alice souhaite transmettre un message à Bob, ce message étant une suite x =
x1x2 ··· xn
où chaque xi est un élément de P, en utilisant une clef K. Alors chaque xi est chiffré avec K.
Ainsi Alice calcule yi = E(xi, K), i = 1,··· , n, et transmet à Bob la suite
y = y1 ··· yn .
Si Bob connaît K0, alors il peut déchiffrer le message. Pour ce faire, il calcule pour chaque
i = 1,··· , n, D(yi, K0) = D(E(xi, K), K0) = xi et récupère donc x.
2. Elément mathématique (MODULO)
Soit n > 2 un entier fixé.
Définition :
On dit que a est congru à b modulo n, si n divise b − a. On note alors
a ≡ b (mod n).
Pour nous n = 26. Ce qui fait que 28 ≡ 2 (mod 26), car 28 − 2 est bien divisible par 26. De
même 85 = 3 × 26 + 7 donc 85 ≡ 7 (mod 26).
On note Z/26Z l’ensemble de tous les éléments de Z modulo 26. Cet ensemble peut par exemple
être représenté par les 26 éléments {0, 1, 2, . . . , 25}. En effet, puisqu’on compte modulo 26 :
0, 1, 2, . . . , 25, puis 26 ≡ 0, 27 ≡ 1, 28 ≡ 2, . . . , 52 ≡ 0, 53 ≡ 1, . . .
et de même −1 ≡ 25, −2 ≡ 24,...
Plus généralement Z/nZ contient n éléments. Pour un entier a ∈ Z quelconque, son représentant
dans {0, 1, 2, . . . , n−1} s’obtient comme le reste k de la division euclidienne de a par n : a =
bn + k. De sorte que a ≡ k (mod n) et 0 6 k < n.
De façon naturelle l’addition et la multiplication d’entiers se transposent dans Z/nZ.
Pour a, b ∈ Z/nZ, on associe a + b ∈ Z/nZ.
Par exemple dans Z/26Z, 15 + 13 égale 2. En effet 15 + 13 = 28 ≡ 2 (mod 26). Autre exemple
: que vaut 133 + 64 ?
133+64 = 197 = 7×26+15 ≡ 15 (mod 26). Mais on pourrait procéder différemment : tout
d’abord 133 = 5×26+3 ≡ 3 (mod 26) et 64 = 2 × 26 + 12 ≡ 12 (mod 26). Et maintenant sans
calculs : 133 + 64 ≡ 3 + 12 ≡ 15 (mod 26).
On fait de même pour la multiplication : pour a, b ∈ Z/nZ, on associe a × b ∈ Z/nZ.
Par exemple 3 × 12 donne 10 modulo 26, car 3 × 12 = 36 = 1 × 26 + 10 ≡ 10 (mod 26). De
même : 3 × 27 = 81 =
3 × 26 + 3 ≡ 3 (mod 26). Une autre façon de voir la même opération est d’écrire d’abord 27 =
1 (mod 26) puis 3 × 27 ≡ 3 × 1 ≡ 3 (mod 26).
II. CHIFFREMENT SIMPLE
1. Le chiffrement de César
a) César a dit...
Jules César a-t-il vraiment prononcé la célèbre phrase :
DOHD MDFWD HVW
ou bien comme le disent deux célèbres Gaulois : « Ils sont fous ces romains ! ».
En fait César, pour ses communications importantes à son armée, cryptait ses messages. Ce que
l’on appelle le chiffrement de César est un décalage des lettres : pour crypter un message, A
devient D, B devient E, C devient F,...
A↦D B↦E C↦F . . . W ↦Z X↦A Y↦B Z↦C
Voici une figure avec l’alphabet d’origine en haut et en orange, en correspondance avec
l’alphabet pour le chiffrement en-dessous et en vert.
Nous adopterons la convention suivante, en vert c’est la partie du message à laquelle tout le
monde a accès (ou qui pourrait être intercepté), c’est donc le message crypté. Alors qu’en
orange c’est la partie du message confidentiel, c’est le message en clair.
Pour prendre en compte aussi les dernières lettres de l’alphabet, il est plus judicieux de
représenté l’alphabet sur un anneau. Ce décalage est un décalage circulaire sur les lettres de
l’alphabet.
Pour déchiffrer le message de César, il suffit de décaler les lettres dans l’autre sens, D se
déchiffre en A, E en B,...
Et la célèbre phrase de César est :
ALEA JACTA EST
qui traduite du latin donne « Les dés sont jetés ».
b) Des chiffres et des lettres
Il est plus facile de manipuler des nombres que des lettres, aussi nous passons à une formulation
arithmétique. Nous associons à chacune des 26 lettres de A à Z un nombre de 0 à 25. En termes
mathématiques, nous définissons une bijection :
f :{𝐴, 𝐵, 𝐶, . . . , 𝑍} → {1, 2, 3, . . . , 25}
par
A↦0 B ↦7 C ↦2 . . . Z ↦25
Ainsi "A L E A" devient "0 11 4 0".
Le chiffrement de César est un cas particulier de substitution mono-alphabétique, c’est-à-dire
un chiffrement lettre à lettre.
c) Chiffrer et déchiffrer
Le chiffrement de César est simplement une addition dans ℤ/26 ℤ ! Fixons un entier k qui est le
décalage (par exemple k = 3 dans l’exemple de César ci-dessus) et définissons la fonction de
chiffrement de César de décalage k qui va de l’ensemble ℤ /26 ℤ dans lui-même :
ℤ/26 ℤ → ℤ/26 ℤ
Ck: {
𝑥 ↦ 𝑥+𝑘
Par exemple, pour k = 3 : C3(0) = 3, C3(1) = 4. . .
Pour déchiffrer, rien de plus simple ! Il suffit d’aller dans l’autre sens, c’est-à-dire ici de
soustraire. La fonction de déchiffrement de César de décalage k est
ℤ/26 ℤ → ℤ/26 ℤ
Ck: {
𝑥 ↦ 𝑥−𝑘
En effet, si 1 a été chiffré en 4, par la fonction C3 alors D3(4) = 4 − 3 = 1. On retrouve le nombre
original. Mathématiquement, Dk est la bijection réciproque de Ck, ce qui implique que pour tout
x ∈ Z/26Z :
Dk Ck(x)= x
En d’autres termes, si x est un nombre, on applique la fonction de chiffrement pour obtenir le
nombre crypté y = Ck(x) ; ensuite la fonction de déchiffrement fait bien ce que l’on attend d’elle
Dk(y)= x, on retrouve le nombre original x.
Ck
ℤ/26 ℤ ℤ/26 ℤ
Dk
Une autre façon de voir la fonction de déchiffrement est de remarquer que Dk(x)= C−k(x). Par
exemple C−3(x)= x +(−3) ≡ x + 23 (mod 26).
Voici le principe du chiffrement : Alice veut envoyer des messages secrets à Bruno. Ils se sont
d’abord mis d’accord sur une clé secrète k, par exemple k = 11. Alice veut envoyer le message
"COUCOU" à Bob. Elle transforme "COUCOU" en "2 14 20 2 14 20". Elle applique la
fonction de chiffrement C11(x)= x + 11 à chacun des nombres : "13 25 5 13 25 5" ce qui
correspond au mot crypté "NZFNZF". Elle transmet le mot crypté à Bruno, qui selon le même
principe applique la fonction de déchiffrement D11(x)= x − 11.
ALICE BOB
COUCOU
NZFNZF
2 14 20 2 14 20 13 25 5 13 25 5 13 25 5 13 25 5 2 14 20 2 14 20
Cryptanalyse par analyse de fréquence : Au IXème siècle, Al-Kindi écrit le premier manuscrit
traitant de cryptanalyse (retrouvé il y a seulement 30 ans à Istanbul). Il y montre notamment
qu’étant donné une langue, la fréquence d’apparition de chaque lettre n’est pas la même. Ainsi
dans la langue de Molière, le ‘e’ apparaît bien plus souvent que le ‘w’. En se basant sur la loi
des grands nombres et en analysant la fréquence d’apparition des lettres dans la Bible, écrite en
français, on obtient le tableau de fréquence d’apparition suivant :
Diagamme des fréquences d’apparition des lettres dans la Bible en langue française.
À partir de cette table, le raisonnement est le suivant. Nous connaissons la fréquence
d’apparition des lettres dans le texte chiffré. Si nous faisons l’hypothèse que telle ou telle langue
a été utilisée pour le texte clair, et sous réserve que celui-ci soit suffisamment représentatif de
la langue supposée, alors comme chaque lettre est toujours chiffrée par la même lettre, la lettre
apparaissant le plus dans le texte chiffré sera avec une bonne probabilité celle qui a la plus
grande fréquence d’apparition dans la langue utilisée pour la rédaction du texte clair. Par essais
successifs au maximum de vraisemblance, on parvient assez rapidement à retrouver la clé
secrète, et donc à déchiffrer
2. Le chiffrement de Vigenère
a) Le chiffrement de Vigenère
Blocs
L’espace des clés du chiffrement mono-alphabétique est immense, mais le fait qu’une lettre soit
toujours cryptée de la même façon représente une trop grande faiblesse. Le chiffrement de
Vigenère remédie à ce problème. On regroupe les lettres de notre texte par blocs, par exemple
ici par blocs de longueur 4 :
CETTE PHRASE NE VEUT RIEN DIRE
Devient
CETT EPHR ASEN EVEU TRIE NDIR E
(Les espaces sont purement indicatifs, dans la première phrase ils séparent les mots, dans la
seconde ils séparent les blocs).
Si k est la longueur d’un bloc, alors on choisit une clé constituée de k nombres de 0 à 25 :
(n1, n2, . . . , nk). Le chiffrement consiste à effectuer un chiffrement de César, dont le décalage
dépend du rang de la lettre dans le bloc :
• Un décalage de n1 pour la première lettre de chaque bloc,
• un décalage de n2 pour la deuxième lettre de chaque bloc,
• ...
• un décalage de nk pour la k-ème et dernière lettre de chaque bloc.
Pour notre exemple, si on choisit comme clé (3, 1, 5, 2) alors pour le premier bloc "CETT" :
• un décalage de 3 pour C donne F,
• un décalage de 1 pour E donne F,
• un décalage de 5 pour le premier T donne Y,
• un décalage de 2 pour le deuxième T donne V.
Ainsi "CETT" de vient "FFYV". Vous remarquez que les deux lettres T ne sont pas cryptées
par la même lettre et que les deux F ne cryptent pas la même lettre. On continue ensuite avec
le deuxième bloc...
Mathématiques
L’élément de base n’est plus une lettre mais un bloc, c’est-à-dire un regroupement de lettres.
La fonction de chiffrement associe à un bloc de longueur k, un autre bloc de longueur k, ce qui
donne en mathématisant les choses :
ℤ/26 ℤ x ℤ/26 ℤ x . . . x ℤ/26 ℤ → ℤ/26 ℤ
𝑐𝑛1 ,𝑛2 ,…,𝑛𝑘 : {
( 𝑥1 , 𝑥2 , … , 𝑥𝑛 ) ↦ (𝑥1 + 𝑛1 , 𝑥2 + 𝑛2 , … , 𝑥𝑘 + 𝑛𝑘 , )
Chacune des composantes de cette fonction est un chiffrement de César. La fonction de déchiffrement
est juste 𝑐−𝑛1,−𝑛2,…,−𝑛𝑘
Espace des clés et attaque
Il y a 26k choix possibles de clés, lorsque les blocs sont de longueur k. Pour des blocs de
longueur k = 4 cela en donne déjà 456 976, et même si un ordinateur teste toutes les
combinaisons possibles sans problème, il n’est pas aisé de parcourir cette liste pour trouver le
message en clair, c’est-à-dire celui qui est compréhensible !
Il persiste tout de même une faiblesse du même ordre que celle rencontrée dans le chiffrement
mono-alphabétique : la lettre A n’est pas toujours cryptée par la même lettre, mais si deux lettres
A sont situées à la même position dans deux blocs différents (comme par exemple "ALPH
ABET") alors elles seront cryptées par la même lettre.
Une attaque possible est donc la suivante : on découpe notre message en plusieurs listes, les
premières lettres de chaque bloc, les deuxièmes lettres de chaque bloc... et on fait une attaque
statistique sur chacun de ces regroupements. Ce type d’attaque n’est possible que si la taille des
blocs est petite devant la longueur du texte.
III. CHIFFREMENT PAR BLOCK
1. Le chiffrement de Hill
a) chiffrement
Le chiffrement que nous allons étudier a été publié par Lester S. Hill en 1929. C'est un chiffrement
polygraphique, c'est-à-dire qu'on ne (dé)chiffre pas les lettres les unes après les autres, mais par
paquets. On étudie ici la version biographique, c'est-à-dire que l’on groupe les lettres deux par deux,
mais on peut envisager des paquets plus grands. Pour coder un message selon ce procédé, on
commence par grouper les lettres de ce message deux par deux, puis on remplace chaque lettre par
un nombre (son rang dans l’alphabet). Les coordonne de X représente les positions de lettre de
l’alphabet en clair Les coordonne de Y représente les positions de lettre de l’alphabet crypte
Posons X = (𝑥𝑥1 ) , A=(𝑐𝑎 𝑏𝑑) et Y = (𝑦𝑦1 )
2 2
𝑦1 𝑎 𝑏 𝑥1
( )=( ) ( ) (𝑚𝑜𝑑26)
𝑦2 𝑐 𝑑 𝑥2
𝑥
Chaque digramme clair ( 1 et 𝑥2 ) sera chiffré (𝑦1 et 𝑦2 )
selon :
𝑦1 ≡ 𝑎𝑥1 + 𝑏𝑥2 (𝑚𝑜𝑑26)
{
𝑦2 ≡ 𝑐𝑥1 + 𝑑𝑥2 (𝑚𝑜𝑑26)
Remarque: Les composantes de cette matrice doivent être des entiers positifs. De plus la
matrice doit être inversible dans Z26
Exemple: On prend comme clef de cryptage la matrice: pour chiffrer le message
SUPINFO.
Le nombre de lettres étant impair, on lui adjoint arbitrairement un "x". On découpe alors ce
mot en blocs de deux lettres "SU PI NF OX". Après avoir remplacé les lettres par leur rang
dans l'alphabet (a=0, b=1, etc.), on obtiendra :
𝑦 ≡ 9 × 18 + 4 × 20 ≡ 242 (𝑚𝑜𝑑26) ≡ 8 (le rand de la lettre I)
{ 1
𝑦2 ≡ 5 × 18 + 7 × 20 ≡ 230(𝑚𝑜𝑑26) ≡ 22 (le rand de la lettre W)
On fera de même avec les autres digrammes. Le résultat est : IWLBHWKX
a) Déchiffrement
Déchiffrement : C’est le même que pour le chiffrement : on prend les lettres deux par deux, puis on
les multiplie par une matrice :
Compte tenu que notre determinant est diferent de 0 notre matrice est donc inversible
On multipli alors notre equation de depart :
𝑦1 𝑎 𝑏 𝑥1
( )=( ) ( ) (𝑚𝑜𝑑26)
𝑦2 𝑐 𝑑 𝑥2
𝟏𝑑 −𝑏
Part 𝑨−𝟏 =𝒂𝒅−𝒃𝒅 (−𝑐 𝑎
) or 𝑨𝑨−𝟏 = 𝑰 ; 𝑰 est la matrice identité .
On obtiens alors une nouvelle équation qui est
𝑥1 𝟏 𝑑 − 𝑏 𝑦1
( )= ( ) ( ) (𝑚𝑑26)
𝑥2 𝒂𝒅 − 𝒃𝒅 −𝑐 𝑎 𝑦2
Exemple précédent: Pour déchiffrer le message, on doit calculer:
9 4 −1 1 7 −4
( ) = ( ) (𝑚𝑜𝑑26)
5 7 43 −5 9
7 −4
=(43)−1 (−5 9
)(𝑚𝑜𝑑26)
Comme pgcd (43, 26) = 1 et ( (43)−1 existe dans Z26 et ((43)−1 = 23. On a la matrice de
déchiffrement :
−1
(59 47) 7 −4
= 23(−5 9
161 −92
)(𝑚𝑜𝑑26) = (−115 209
)(𝑚𝑜𝑑26)
5 12
= (15 25
)(𝑚𝑜𝑑26)
On prend donc cette matrice pour déchiffrer le message : IWLBHWKX
Après avoir découpé le mot en blocs et remplacé les lettres par leur rang dans l’alphabet (A=0, B=1,
etc.), on obtiendra :
𝑥 ≡ 5 × 14 + 12 × 8 (𝑚𝑜𝑑26) ≡ 18 (le rand de la lettre S)
{ 1
𝑥2 ≡ 15 × 14 + 25 × 8(𝑚𝑜𝑑26) ≡ 20 (le rand de la lettre u)
On fera de même avec les autres blocs. Finalement, le message en clair est : SUPINFOX
2. Le mode ECB (électronique code bloc)
Dans ce mode, le message M est découpé en blocs Mi de taille fixe. Chaque bloc est alors chiffré
séparément par un algorithme de chiffrement, paramétrée par une clé ki. Ainsi un bloc de
message donné sera toujours codé de la même manière. Ce mode de chiffrement est le plus
simple mais il est très vulnérable aux attaques.
Le déchiffrement nécessite l’inverse de la fonction de codage : Dk = Ek-1 alors : Mi=Dk(Ci)
Exemple de chiffrement ECB
Hypothèses
Message à chiffrer : "Secret" (en code ASCII, chaque lettre est représentée par un nombre)
Clé de chiffrement : 123 (arbitraire, on peut utiliser n'importe quel nombre)
Fonction de chiffrement : On utilise une fonction de chiffrement simple (disons qu'elle
ajoute la valeur de la clé à chaque octet du message)
Chiffrement en mode ECB
Découpage du message: On découpe le message en blocs de même taille que la clé (ici,
chaque lettre est un bloc d'un octet).
Bloc 1 : "S" (83 en ASCII)
Bloc 2 : "e" (101 en ASCII)
Bloc 3 : "c" (99 en ASCII)
Bloc 4 : "r" (114 en ASCII)
Bloc 5 : "e" (101 en ASCII)
Bloc 6 : "t" (116 en ASCII)
Chiffrement de chaque bloc : On applique la fonction de chiffrement à chaque bloc en
ajoutant la valeur de la clé.
Bloc chiffré 1 : 83 (S) + 123 (clé) = 206
Bloc chiffré 2 : 101 (e) + 123 (clé) = 224
Bloc chiffré 3 : 99 (c) + 123 (clé) = 222
Bloc chiffré 4 : 114 (r) + 123 (clé) = 237
Bloc chiffré 5 : 101 (e) + 123 (clé) = 224 (Même résultat que le bloc 2 !)
Bloc chiffré 6 : 116 (t) + 123 (clé) = 239
Message chiffré : On concatène les blocs chiffrés pour obtenir le message chiffré final.
Message chiffré : 206 224 222 237 224 239
Problème du mode ECB
On observe que le bloc "e" répété deux fois dans le message original a été chiffré deux fois
avec la même clé, ce qui aboutit au même résultat (224). Cela permet de deviner des motifs
répétitifs dans le message original.
Le mode ECB est donc peu sûr pour des messages confidentiels car il ne masque pas les
répétitions de données. On lui préfère des modes de chiffrement plus robustes comme le CBC
(Cipher Block Chaining) qui ne présentent pas ce problème.
3. Le chiffrement par chaînage de blocs (mode CBC)
Pour remédier aux risques de sécurité constatés dans le mode ECB, le mode CBC a été
introduit pour qu’un bloc ne soit pas codé de la même manière s’il est rencontré dans deux
messages différents. Il faut ajouter une valeur initiale aléatoire. Chaque bloc est d‘abord modifié
par XOR avec le bloc chiffré précédent avant d’être lui-même chiffré. CBC est le mode de
chiffrement le plus utilisé.
Pour chiffrer un texte en mode CBC, on effectue par conséquent les opérations suivantes:
C1 = E (M1 ⊕ VI)
Cn = E (Mn ⊕ Cn−1), pour n > 1.
Et pour le déchiffrement :
M1= D (C1) ⊕ VI
MN = D (CN) ⊕ Cn-1, pour n > 1.
Hypothèses
Message à chiffrer : "Secret" (en code ASCII, chaque lettre est représentée par un nombre)
Clé de chiffrement : 123 (arbitraire, on peut utiliser n'importe quel nombre)
Fonction de chiffrement : On utilise une fonction de chiffrement simple (disons qu'elle
ajoute la valeur de la clé à chaque octet du message)
Vecteur d'initialisation (IV) : Valeur aléatoire de même taille qu'un bloc (ici, on prend 0
pour simplifier)
Chiffrement en mode CBC
Découpage du message: On découpe le message en blocs de même taille que la clé (ici,
chaque lettre est un bloc d'un octet).
Bloc 1 : "S" (83 en ASCII)
Bloc 2 : "e" (101 en ASCII)
Bloc 3 : "c" (99 en ASCII)
Bloc 4 : "r" (114 en ASCII)
Bloc 5 : "e" (101 en ASCII)
Bloc 6 : "t" (116 en ASCII)
Opération XOR avec le vecteur d'initialisation (IV): On effectue un XOR (ou exclusif) entre
le premier bloc du message et le vecteur d'initialisation (IV).
Bloc 1 après XOR : 83 (S) XOR 0 (IV) = 83
Chiffrement avec la clé: On applique la fonction de chiffrement au résultat de l'étape
précédente en ajoutant la valeur de la clé.
Bloc chiffré 1 : 83 (Bloc 1 après XOR) + 123 (clé) = 206
Enchainement: Pour les blocs suivants, on effectue un XOR entre le bloc du message et le
bloc chiffré précédent avant d'appliquer le chiffrement.
Bloc 2 après XOR : 101 (e) XOR 206 (Bloc chiffré 1) = 307
Bloc chiffré 2 : 307 (Bloc 2 après XOR) + 123 (clé) = 430
On continue ainsi pour les blocs suivants :
Bloc 3 après XOR : 99 (c) XOR 430 (Bloc chiffré 2) = 529
Bloc chiffré 3 : 529 (Bloc 3 après XOR) + 123 (clé) = 652 ... (on répète pour les blocs
restants)
Message chiffré: On concatène les blocs chiffrés pour obtenir le message chiffré final.
Avantages du mode CBC
Masque les répétitions : Contrairement à l'ECB, les mêmes blocs du message original ne
produiront pas le même bloc chiffré grâce à l'enchainement (XOR avec le bloc chiffré
précédent).
Plus sûr pour les messages confidentiels : Le chiffrement dépend de l'ensemble du
message et pas seulement de la clé et du bloc individuel.
Note: Dans un scénario réel, on utiliserait un vecteur d'initialisation (IV) aléatoire pour
chaque chiffrement afin d'améliorer encore la sécurité.
4. Le mode CFB (Cipher FeedBack)
Chaque chiffrement de bloc dépend du résultat du bloc précédent en manipulant un registre
de décalage de la taille d’un bloc de texte en clair. Ce registre de décalage est rempli par un
vecteur d’initialisation et chiffré avec l’algorithme de chiffrement utilisé. L’intérêt de ce
mode est que le déchiffrement ne nécessite pas l’implémentation de la fonction : Dk = Ek-1.
Ce mode est donc moins sûr que le CBC.
Pour chiffrer un texte en mode CFB à k bits, on procède comme suit :
I1 = VI
In = (In-1 ≪ k) | Cn-1, pour n>1
Cn = Mn ⊕ MSBk ( E( In )), pour n ≥ 1. Tel que MSBk sont les k bits les plus significatifs
Indication : ≪ est le symbole de décalage et | et celui de la conc aténation
Et pour le déchiffrement :
I1 = VI
In = (In-1 ≪ k) | Cn-1, pour n>1 Mn = Cn ⊕ MSBk ( E( In )), pour n ≥ 1.
EXEMPLE :
Hypothèses
Message à chiffrer : "Secret" (en code ASCII, chaque lettre est représentée par un nombre)
Clé de chiffrement : 123 (arbitraire, on peut utiliser n'importe quel nombre)
Fonction de chiffrement : On utilise une fonction de chiffrement simple (disons qu'elle ajoute la
valeur de la clé à chaque octet du message)
Vecteur d'initialisation (IV) : Valeur aléatoire de même taille qu'un bloc (ici, on prend 0 pour
simplifier)
Chiffrement en mode CFB
Découpage du message: On découpe le message en blocs de même taille que la clé (ici, chaque
lettre est un bloc d'un octet).
Bloc 1 : "S" (83 en ASCII)
Bloc 2 : "e" (101 en ASCII)
Bloc 3 : "c" (99 en ASCII)
Bloc 4 : "r" (114 en ASCII)
Bloc 5 : "e" (101 en ASCII)
Bloc 6 : "t" (116 en ASCII)
Génération du premier bloc de rétroaction: On chiffre le vecteur d'initialisation (IV) avec la clé.
Bloc de rétroaction 1 : Chiffrement(IV, clé) = 206 (en utilisant notre fonction de chiffrement
simple)
Opération XOR avec le bloc de message: On effectue un XOR (ou exclusif) entre le premier bloc du
message et le premier bloc de rétroaction.
Bloc 1 après XOR : 83 (S) XOR 206 (Bloc de rétroaction 1) = 289
Chiffrement du bloc XOR : On chiffre le résultat de l'étape précédente avec la clé.
Bloc chiffré 1 : Chiffrement (289, clé) = 412
Génération du bloc de rétroaction suivant : On chiffre le bloc chiffré précédent avec la clé.
Bloc de rétroaction 2 : Chiffrement (412, clé) = 535
Répétition des étapes 3 à 5 : Pour les blocs suivants, on utilise le bloc de rétroaction généré à
l'étape précédente pour XOR avec le bloc du message avant de le chiffrer.
Bloc 2 après XOR : 101 (e) XOR 535 (Bloc de rétroaction 2) = 636
Bloc chiffré 2 : Chiffrement (636, clé) = 759 ... (on continue ainsi pour les blocs restants)
Message chiffré : On concatène les blocs chiffrés pour obtenir le message chiffré final.
Avantages du mode CFB
Bonne sécurité : Le mode CFB est plus sûr que le mode ECB car il masque les répétitions de
données.
Performance : Le mode CFB est plus performant que le mode CBC car il ne nécessite pas de calculs
inter-blocs.
Flexibilité : Le mode CFB peut être utilisé avec différents types de fonctions de chiffrement.
Note : Dans un scénario réel, on utiliserait un vecteur d'initialisation (IV) aléatoire pour chaque
chiffrement afin d'améliorer encore la sécurité.
5. Le mode OFB (Output FeedBack)
Il manipule également un registre de décalage qui est chiffré par un algorithme de chiffrement
puis modifié avec XOR avec le message en clair dont le résultat sera utilisé pour le
chiffrement du bloc suivant.
• Pour chiffrer un texte en mode OFB à k bits, on effectue les opérations suivantes :
I1= VI
In = (In-1 ≪ k) | MSBk (E (In-1)), pour n > 1 Cn = Mn ⊕ MSBk (E(In)), pour n ≥ 1.
• Pour le déchiffrement:
I1= VI
In = (In-1 ≪ k) | MSBk (E (In-1)), pour n > 1
Cn = Mn⊕ MSBk (E(In)), pour n ≥ 1.
Hypothèses
Message à chiffrer : "Secret" (en code ASCII, chaque lettre est représentée par un nombre)
Clé de chiffrement : 123 (arbitraire, on peut utiliser n'importe quel nombre)
Fonction de chiffrement : On utilise une fonction de chiffrement simple (disons qu'elle
ajoute la valeur de la clé à chaque octet du message)
Vecteur d'initialisation (IV) : Valeur aléatoire de même taille qu'un bloc (ici, on prend 0
pour simplifier)
Chiffrement en mode OFB
Initialisation du LFSR: On initialise le LFSR avec le vecteur d'initialisation (IV).
Génération du premier bloc de sortie: On fait avancer le LFSR et on récupère la sortie.
Bloc de sortie 1 : Sortie du LFSR
Opération XOR avec le bloc de message: On effectue un XOR (ou exclusif) entre le
premier bloc du message et le premier bloc de sortie.
Bloc 1 après XOR : 83 (S) XOR Bloc de sortie 1 = 289
Chiffrement du bloc XOR: On chiffre le résultat de l'étape précédente avec la clé.
Bloc chiffré 1 : Chiffrement(289, clé) = 412
Répétition des étapes 2 à 4: Pour les blocs suivants, on utilise la sortie du LFSR à la place
du bloc chiffré précédent pour XOR avec le bloc du message avant de le chiffrer.
Bloc de sortie 2 : Sortie du LFSR
Bloc 2 après XOR : 101 (e) XOR Bloc de sortie 2 = 636
Bloc chiffré 2 : Chiffrement(636, clé) = 759 ... (on continue ainsi pour les blocs restants)
Message chiffré: On concatène les blocs chiffrés pour obtenir le message chiffré final.
Avantages du mode OFB
Bonne sécurité: Le mode OFB est plus sûr que le mode ECB car il masque les répétitions
de données.
Performance: Le mode OFB est plus performant que le mode CBC car il ne nécessite pas
de calculs inter-blocs.
Parallélisation: Le mode OFB peut être facilement parallélisé, ce qui le rend plus
performant sur les architectures modernes.
Note: Dans un scénario réel, on utiliserait un vecteur d'initialisation (IV) aléatoire pour
chaque chiffrement afin d'améliorer encore la sécurité.