Introduction à la Cryptographie et Arithmétique
Introduction à la Cryptographie et Arithmétique
M AT H É M AT I Q U E S & I N F O R M AT I Q U E
PREMIÈRE ANNÉE
Sommaire
1 Arithmétique 1
1 Division euclidienne et pgcd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2 Théorème de Bézout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3 Nombres premiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
4 Congruences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2 Cryptographie 17
1 Le chiffrement de César . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2 Le chiffrement de Vigenère . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3 La machine Enigma et les clés secrètes . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4 La cryptographie à clé publique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5 L’arithmétique pour RSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
6 Le chiffrement RSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Chapitre
Arithmétique 1
Préambule
Une motivation : l’arithmétique est au cœur des procédés mis en place pour assurer la confidentialité
et l’authenticité des communications électroniques. Ces procédés nécessitent entre autres : des
calculs modulaires, des calculs de pgcd et de coefficients de Bézout, de grands nombres premiers.
Pour crypter un message on commence par le transformer en un –ou plusieurs– nombres. Le
processus de codage et décodage fait appel à plusieurs notions de ce chapitre :
• On choisit deux nombres premiers p et q que l’on garde secrets et on pose n = p × q. Le
principe étant que même connaissant n il est très difficile de retrouver p et q (qui sont des
nombres ayant des centaines de chiffres).
• La clé secrète et la clé publique se calculent à l’aide de l’algorithme d’Euclide et des coefficients
de Bézout.
• Les calculs de cryptage se feront modulo n.
• Le décodage fonctionne grâce à une variante du petit théorème de Fermat.
Définition 1.
Soient a, b ∈ Z. On dit que b divise a et on note b|a s’il existe q ∈ Z tel que
a = bq.
Exemple 1.
• 7|21 ; 6|48 ; a est pair si et seulement si 2|a.
• Pour tout a ∈ Z on a a|0 et aussi 1|a.
ARITHMÉTIQUE 1. DIVISION EUCLIDIENNE ET PGCD 2
a = bq + r et 06r < b
6789 34
34 dividende diviseur
338
306 199
329 quotient
306 reste
23
Démonstration.
Existence. On peut supposer a > 0 pour simplifier. Soit N = n ∈ N | bn 6 a . C’est un ensemble
non vide car n = 0 ∈ N . De plus pour n ∈ N , on a n 6 a. Il y a donc un nombre fini d’éléments
dans N , notons q = max N le plus grand élément.
Alors q b 6 a car q ∈ N , et (q + 1)b > a car q + 1 ∈
/ N , donc
qb 6 a < (q + 1)b = qb + b.
On définit alors r = a − qb, r vérifie alors 0 6 r = a − qb < b.
Unicité. Supposons que q0 , r 0 soient deux entiers qui vérifient les conditions du théorème. Tout
d’abord a = bq + r = bq0 + r 0 et donc b(q − q0 ) = r 0 − r. D’autre part 0 6 r 0 < b et 0 6 r < b donc
−b < r 0 − r < b (notez au passage la manipulation des inégalités). Mais r 0 − r = b(q − q0 ) donc on
obtient −b < b(q − q0 ) < b. On peut diviser par b > 0 pour avoir −1 < q − q0 < 1. Comme q − q0
est un entier, la seule possibilité est q − q0 = 0 et donc q = q0 . Repartant de r 0 − r = b(q − q0 ) on
obtient maintenant r = r 0 .
ARITHMÉTIQUE 1. DIVISION EUCLIDIENNE ET PGCD 3
Définition 2.
Soient a, b ∈ Z deux entiers, non tous les deux nuls. Le plus grand entier qui divise à la fois a et b
s’appelle le plus grand diviseur commun de a, b et se note pgcd(a, b). On pose pgcd(0, 0) = 0.
Exemple 3.
• pgcd(21, 14) = 7, pgcd(12, 32) = 4, pgcd(21, 26) = 1.
• pgcd(a, ka) = a, pour tout k ∈ Z et a > 0.
• Cas particuliers. Pour tout a > 0 : pgcd(a, 0) = a et pgcd(a, 1) = 1.
Remarque.
• Le pgcd est toujours positif ou nul, et n’est nul que si a et b sont tous les deux nuls.
• Si a < 0 alors pgcd(a, 0) est −a. Donc pgcd(a, 0) est toujours égal à la valeur absolue de a.
• pgcd(a, b) = pgcd(−a, b) = pgcd(a, −b) = pgcd(−a, −b)
• Si a divise b alors pgcd(a, b) = |a|, et si pgcd(a, b) = |a| alors a divise b.
pgcd(a, b) = pgcd(b, r)
En fait on a même pgcd(a, b) = pgcd(b, a − qb) pour tout q ∈ Z. Mais pour optimiser l’algorithme
d’Euclide on applique le lemme avec q le quotient.
Démonstration. Nous allons montrer que les diviseurs de a et de b sont exactement les mêmes
que les diviseurs de b et r. Cela impliquera le résultat car les plus grands diviseurs seront bien sûr
les mêmes.
• Soit d un diviseur de a et de b. Alors d divise b donc aussi bq, en plus d divise a donc d divise
a − bq = r.
• Soit d un diviseur de b et de r. Alors d divise aussi bq + r = a.
Algorithme d’Euclide.
On souhaite calculer le pgcd de a, b ∈ N∗ . On peut supposer a > b. On calcule des divisions
euclidiennes successives. Le pgcd sera le dernier reste non nul.
• division de a par b, a = bq1 + r1 . Par le lemme 1, pgcd(a, b) = pgcd(b, r1 ) et si r1 = 0 alors
pgcd(a, b) = b sinon on continue :
• b = r1 q2 + r2 , pgcd(a, b) = pgcd(b, r1 ) = pgcd(r1 , r2 ),
• r1 = r2 q3 + r3 , pgcd(a, b) = pgcd(r2 , r3 ),
• ...
• rk−2 = rk−1 qk + rk , pgcd(a, b) = pgcd(rk−1 , rk ),
• rk−1 = rk qk + 0. pgcd(a, b) = pgcd(rk , 0) = rk .
ARITHMÉTIQUE 1. DIVISION EUCLIDIENNE ET PGCD 4
Comme à chaque étape le reste est plus petit que le quotient on sait que 0 6 ri+1 < ri . Ainsi
l’algorithme se termine car nous sommes sûrs d’obtenir un reste nul, les restes formant une suite
décroissante d’entiers positifs ou nuls : b > r1 > r2 > · · · > 0.
Exemple 4.
Calculons le pgcd de a = 600 et b = 124.
Définition 3.
Deux entiers a, b sont premiers entre eux si pgcd(a, b) = 1.
Exemple 6.
Pour tout a ∈ Z, a et a + 1 sont premiers entre eux. En effet soit d un diviseur commun à a et à
a + 1. Alors d divise aussi a + 1 − a. Donc d divise 1 mais alors d = −1 ou d = +1. Le plus grand
diviseur de a et a + 1 est donc 1. Et donc pgcd(a, a + 1) = 1.
Si deux entiers ne sont pas premiers entre eux, on peut s’y ramener en divisant par leur pgcd :
Exemple 7.
Pour deux entiers quelconques a, b ∈ Z, notons d = pgcd(a, b). La décomposition suivante est
souvent utile :
a = a0 d
avec a0 , b0 ∈ Z et pgcd(a0 , b0 ) = 1
b = b0 d
Remarque.
• L’entier 1 est premier avec tous les autres entiers (y-compris avec lui-même), c’est vrai aussi
pour −1.
• Les seuls entiers a premiers avec eux-mêmes sont a = 1 et a = −1.
• L’entier 0 n’est premier qu’avec 1 et −1.
• Les entiers premiers avec 2 sont les entiers impairs.
ARITHMÉTIQUE 2. THÉORÈME DE BÉZOUT 5
• Un entier est premier avec 10 si et seulement si le dernier chiffre de son écriture décimale est
1, 3, 7 ou 9.
•
Mini-exercices.
1. Écrire la division euclidienne de 111 111 par 20x x, où 20x x est l’année en cours.
2. Montrer qu’un diviseur positif de 10 008 et de 10 014 appartient nécessairement à {1, 2, 3, 6}.
3. Calculer pgcd(560, 133), pgcd(12 121, 789), pgcd(99 999, 1110).
4. Trouver tous les entiers 1 6 a 6 50 tels que a et 50 soient premiers entre eux. Même question
avec 52.
2. Théorème de Bézout
au + bv = pgcd(a, b)
La preuve découle de l’algorithme d’Euclide. Les entiers u, v ne sont pas uniques. Les entiers u, v
sont des coefficients de Bézout. Ils s’obtiennent en « remontant » l’algorithme d’Euclide.
Exemple 8.
Calculons les coefficients de Bézout pour a = 600 et b = 124. Nous reprenons les calculs effectués
pour trouver pgcd(600, 124) = 4. La partie gauche est l’algorithme d’Euclide. La partie droite
s’obtient de bas en haut. On exprime le pgcd à l’aide de la dernière ligne où le reste est non nul.
Puis on remplace le reste de la ligne précédente, et ainsi de suite jusqu’à arriver à la première
ligne.
Remarque.
• Soignez vos calculs et leur présentation. C’est un algorithme : vous devez aboutir au bon
résultat ! Dans la partie droite, il faut à chaque ligne bien la reformater. Par exemple 104 −
(124 − 104 × 1) × 5 se réécrit en 124 × (−5) + 104 × 6 afin de pouvoir remplacer ensuite 104.
ARITHMÉTIQUE 2. THÉORÈME DE BÉZOUT 6
• N’oubliez pas de vérifier vos calculs ! C’est rapide et vous serez certains que vos calculs sont
exacts. Ici on vérifie à la fin que 600 × 6 + 124 × (−29) = 4.
Exemple 9.
Calculons les coefficients de Bézout correspondant à pgcd(9945, 3003) = 39.
9945 = 3003 × 3 + 936 39 = 9945 × (−16) + 3003 × 53
3003 = 936 × 3 + 195 39 = ···
936 = 195 × 4 + 156 39 = ···
195 = 156 × 1 + 39 39 = 195 − 156 × 1
156 = 39 × 4 + 0
Corollaire 1.
Si d|a et d|b alors d| pgcd(a, b).
Exemple : 4|16 et 4|24 donc 4 doit diviser pgcd(16, 24) qui effectivement vaut 8.
Démonstration. Comme d|au et d|bv donc d|au + bv. Par le théorème de Bézout d| pgcd(a, b).
Corollaire 2.
Soient a, b deux entiers. a et b sont premiers entre eux si et seulement si il existe u, v ∈ Z tels que
au + bv = 1
Remarque.
Si on trouve deux entiers u0 , v 0 tels que au0 + bv 0 = d, cela n’implique pas que d = pgcd(a, b).
On sait seulement alors que pgcd(a, b)|d. Par exemple a = 12, b = 8 ; 12 × 1 + 8 × 3 = 36 et
pgcd(a, b) = 4.
2.3. Équations a x + b y = c
Proposition 1.
Considérons l’équation
ax + b y = c (E)
où a, b, c ∈ Z.
1. L’équation (E) possède des solutions (x, y) ∈ Z2 si et seulement si pgcd(a, b)|c.
2. Si pgcd(a, b)|c alors il existe même une infinité de solutions entières et elles sont exactement
les (x, y) = (x 0 + αk, y0 + β k) avec x 0 , y0 , α, β ∈ Z fixés et k parcourant Z.
Le premier point est une conséquence du théorème de Bézout. Nous allons voir sur un exemple
comment prouver le second point et calculer explicitement les solutions. Il est bon de refaire toutes
les étapes de la démonstration à chaque fois.
Exemple 10.
Trouver les solutions entières de
161x + 368 y = 115 (E)
• Première étape. Y a-t-il des solutions ? L’algorithme d’Euclide. On effectue l’algorithme
d’Euclide pour calculer le pgcd de a = 161 et b = 368.
368 = 161 × 2 + 46
161 = 46 × 3 + 23
46 = 23 × 2 + 0
Donc pgcd(368, 161) = 23. Comme 115 = 5 × 23 alors pgcd(368, 161)|115. Par le théorème
de Bézout, l’équation (E) admet des solutions entières.
• Deuxième étape. Trouver une solution particulière : la remontée de l’algorithme d’Eu-
clide. On effectue la remontée de l’algorithme d’Euclide pour calculer les coefficients de Bézout.
161 × 7 + 368 × (−3)
23 =
368 = 161 × 2 + 46 161 + (368 − 2 × 161) × (−3)
161 = 46 × 3 + 23 23 = 161 − 3 × 46
46 = 23 × 2 + 0
On trouve donc 161 × 7 + 368 × (−3) = 23. Comme 115 = 5 × 23 en multipliant par 5 on
obtient :
161 × 35 + 368 × (−15) = 115
Ainsi (x 0 , y0 ) = (35, −15) est une solution particulière de (E).
• Troisième étape. Recherche de toutes les solutions. Soit (x, y) ∈ Z2 une solution de (E).
Nous savons que (x 0 , y0 ) est aussi solution. Ainsi :
161x + 368 y = 115 et 161x 0 + 368 y0 = 115
(on n’a aucun intérêt à remplacer x 0 et y0 par leurs valeurs). La différence de ces deux égalités
conduit à
161 × (x − x 0 ) + 368 × ( y − y0 ) = 0
=⇒ 23 × 7 × (x − x 0 ) + 23 × 16 × ( y − y0 ) = 0
=⇒ 7(x − x 0 ) = −16( y − y0 ) (∗)
ARITHMÉTIQUE 2. THÉORÈME DE BÉZOUT 8
Nous avons simplifié par 23 qui est le pgcd de 161 et 368. (Attention, n’oubliez surtout pas
cette simplification, sinon la suite du raisonnement serait fausse.)
Ainsi 7|16( y − y0 ), or pgcd(7, 16) = 1 donc par le lemme de Gauss 7| y − y0 . Il existe donc
k ∈ Z tel que y − y0 = 7 × k. Repartant de l’équation (∗) : 7(x − x 0 ) = −16( y − y0 ). On obtient
maintenant 7(x − x 0 ) = −16 × 7 × k. D’où x − x 0 = −16k. (C’est le même k pour x et pour y.)
Nous avons donc (x, y) = (x 0 − 16k, y0 + 7k). Il n’est pas dur de voir que tout couple de cette
forme est solution de l’équation (E). Il reste donc juste à substituer (x 0 , y0 ) par sa valeur et
nous obtenons :
Les solutions entières de 161x + 368 y = 115 sont les (x, y) = (35 − 16k, −15 + 7k), k
parcourant Z.
Pour se rassurer, prenez une valeur de k au hasard et vérifiez que vous obtenez bien une solution
de l’équation.
2.4. ppcm
Définition 4.
Le ppcm(a, b) (plus petit multiple commun) est le plus petit entier > 0 divisible par a et par
b.
|ab|
Démonstration. Posons d = pgcd(a, b) et m = pgcd(a,b) . Pour simplifier on suppose a > 0 et b > 0.
On écrit a = da0 et b = d b0 . Alors ab = d 2 a0 b0 et donc m = da0 b0 . Ainsi m = ab0 = a0 b est un
multiple de a et de b.
Il reste à montrer que c’est le plus petit multiple. Si n est un autre multiple de a et de b alors
n = ka = `b donc kda0 = `d b0 et ka0 = `b0 . Or pgcd(a0 , b0 ) = 1 et a0 |`b0 donc a0 |`. Donc a0 b|`b et
ainsi m = a0 b|`b = n.
Il serait faux de penser que ab|c. Par exemple 6|36, 9|36 mais 6 × 9 ne divise pas 36. Par contre
ppcm(6, 9) = 18 divise bien 36.
Remarque.
• Pour tout entier b on a ppcm(0, b) = 0. En effet le seul multiple de zéro est zéro. Donc le plus
petit des positifs ou nuls parmi eux, c’est encore zéro !
• Pour tout entier b on a ppcm(1, b) = |b|.
• pour tout entier a on a ppcm(a, a) = |a|.
ARITHMÉTIQUE 3. NOMBRES PREMIERS 9
Mini-exercices.
1. Calculer les coefficients de Bézout correspondant à pgcd(560, 133), pgcd(12 121, 789).
2. Montrer à l’aide d’un corollaire du théorème de Bézout que pgcd(a, a + 1) = 1.
3. Résoudre les équations : 407x + 129 y = 1 ; 720x + 54 y = 6 ; 216x + 92 y = 8.
4. Trouver les couples (a, b) vérifiant pgcd(a, b) = 12 et ppcm(a, b) = 360.
3. Nombres premiers
Les nombres premiers sont –en quelque sorte– les briques élémentaires des entiers : tout entier
s’écrit comme produit de nombres premiers.
Définition 5.
Un nombre premier p est un entier > 2 dont les seuls diviseurs positifs sont 1 et p.
Proposition 4.
Il existe une infinité de nombres premiers.
Démonstration. Par l’absurde, supposons qu’il n’y ait qu’un nombre fini de nombres premiers que
l’on note p1 = 2, p2 = 3, p3 ,. . . , pn . Considérons l’entier N = p1 × p2 × · · · × pn + 1. Soit p un
diviseur premier de N (un tel p existe par le lemme précédent), alors d’une part p est l’un des
entiers pi donc p|p1 × · · · × pn , d’autre part p|N donc p divise la différence N − p1 × · · · × pn = 1.
Cela implique que p = 1, ce qui contredit que p soit un nombre premier.
Cette contradiction nous permet de conclure qu’il existe une infinité de nombres premiers.
ARITHMÉTIQUE 3. NOMBRES PREMIERS 10
Démonstration. Si p ne divise pas a alors p et a sont premiers entre eux (en effet les diviseurs de p
sont 1 et p, mais seul 1 divise aussi a, donc pgcd(a, p) = 1). Ainsi par le lemme de Gauss p|b.
Exemple 11.
p
Si p est un nombre premier, p n’est pas un nombre rationnel.
p 2
La preuve se fait par l’absurde : écrivons p = ab avec a ∈ Z, b ∈ N∗ et pgcd(a, b) = 1. Alors p = ab2
donc p b2 = a2 . Ainsi p|a2 donc par le lemme d’Euclide p|a. On peut alors écrire a = pa0 avec a0
un entier. De l’équation pb2 = a2 on tire alors b2 = pa02 . Ainsi p|b2 et donc p|b. Maintenant p|a et
p
p|b donc a et b ne sont pas premiers entre eux. Ce qui contredit pgcd(a, b) = 1. Conclusion p
n’est pas rationnel.
ARITHMÉTIQUE 3. NOMBRES PREMIERS 11
Théorème 3.
Soit n > 2 un entier. Il existe des nombres premiers p1 < p2 < · · · < p r et des exposants entiers
α1 , α2 , . . . , α r > 1 tels que :
α α
n = p1 1 × p2 2 × · · · × pαr r .
De plus les pi et les αi (i = 1, . . . , r) sont uniques.
Démonstration.
Existence. Nous allons démontrer l’existence de la décomposition par une récurrence sur n.
L’entier n = 2 est déjà décomposé. Soit n > 3, supposons que tout entier < n admette une
décomposition en facteurs premiers. Notons p1 le plus petit nombre premier divisant n (voir le
lemme 2). Si n est un nombre premier alors n = p1 et c’est fini. Sinon on définit l’entier n0 = pn1 < n
et on applique notre hypothèse de récurrence à n0 qui admet une décomposition en facteurs
premiers. Alors n = p1 × n0 admet aussi une décomposition.
Unicité. Nous allons démontrer qu’une telle décomposition est unique en effectuant cette fois une
Pr
récurrence sur la somme des exposants σ = i=1 αi .
Si σ = 1 cela signifie n = p1 qui est bien l’unique écriture possible.
Soit σ > 2. On suppose que les entiers dont la somme des exposants est < σ ont une unique
décomposition. Soit n un entier dont la somme des exposants vaut σ. Écrivons le avec deux
décompositions :
α α β β
n = p1 1 × p2 2 × · · · × pαr r = q1 1 × q2 2 × · · · × qsβs .
(On a p1 < p2 < · · · et q1 < q2 < · · · .)
α α
Si p1 < q1 alors p1 < q j pour tous les j = 1, . . . , s. Ainsi p1 divise p1 1 × p2 2 × · · · × pαr r = n mais ne
β β
divise pas q1 1 × q2 2 × · · · × qsβs = n. Ce qui est absurde. Donc p1 > q1 .
Si p1 > q1 un même raisonnement conduit aussi à une contradiction. On conclut que p1 = q1 . On
pose alors
n α −1 α β −1 β
n0 = = p1 1 × p2 2 × · · · × pαr r = q1 1 × q2 2 × · · · × qsβs
p1
L’hypothèse de récurrence qui s’applique à n0 implique que ces deux décompositions sont les
mêmes. Ainsi r = s et pi = qi , αi = βi , i = 1, . . . , r.
Exemple 12.
504 = 23 × 32 × 7, 300 = 22 × 3 × 52 .
Pour calculer le pgcd on réécrit ces décompositions :
504 = 23 × 32 × 50 × 71 , 300 = 22 × 31 × 52 × 70 .
Le pgcd est le nombre obtenu en prenant le plus petit exposant de chaque facteur premier :
pgcd(504, 300) = 22 × 31 × 50 × 70 = 12.
ARITHMÉTIQUE 4. CONGRUENCES 12
Mini-exercices.
1. Montrer que n! + 1 n’est divisible par aucun des entiers 2, 3, . . . , n. Est-ce toujours un nombre
premier ?
2. Trouver tous les nombres premiers 6 103.
3. Décomposer a = 2 340 et b = 15 288 en facteurs premiers. Calculer leur pgcd et leur ppcm.
4. Décomposer 48 400 en produit de facteurs premiers. Combien 48 400 admet-il de diviseurs ?
5. Soient a, b > 0. À l’aide de la décomposition en facteurs premiers, reprouver la formule
pgcd(a, b) × ppcm(a, b) = a × b.
4. Congruences
4.1. Définition
Définition 6.
Soit n > 2 un entier. On dit que a est congru à b modulo n, si n divise b − a. On note alors
a ≡ b (mod n).
a ≡ b (mod n) ⇐⇒ ∃k ∈ Z a = b + kn.
Exemple 13.
• 15 ≡ 1 (mod 7), 72 ≡ 2 (mod 7), 3 ≡ −11 (mod 7),
• 5x + 8 ≡ 3 (mod 5) pour tout x ∈ Z,
• 1120x x ≡ 120x x ≡ 1 (mod 10), où 20x x est l’année en cours.
Démonstration.
1. Utiliser la définition.
2. Idem.
ARITHMÉTIQUE 4. CONGRUENCES 13
Exemple 14.
Critère de divisibilité par 9.
Pour prouver cela nous utilisons les congruences. Remarquons d’abord que 9|N équivaut à N ≡ 0
(mod 9) et notons aussi que 10 ≡ 1 (mod 9), 102 ≡ 1 (mod 9), 103 ≡ 1 (mod 9),...
Nous allons donc calculer N modulo 9. Écrivons N en base 10 : N = ak · · · a2 a1 a0 (a0 est le chiffre
des unités, a1 celui des dizaines,...) alors N = 10k ak + · · · + 102 a2 + 101 a1 + a0 . Donc
N = 10k ak + · · · + 102 a2 + 101 a1 + a0
≡ ak + · · · + a2 + a1 + a0 (mod 9)
Donc N est congru à la somme de ses chiffres modulo 9. Ainsi N ≡ 0 (mod 9) si et seulement si la
somme des chiffres vaut 0 modulo 9.
Voyons cela sur un exemple : N = 488 889. Ici a0 = 9 est le chiffre des unités, a1 = 8 celui des
dizaines,... Cette écriture décimale signifie N = 4 · 105 + 8 · 104 + 8 · 103 + 8 · 102 + 8 · 10 + 9.
N = 4 · 105 + 8 · 104 + 8 · 103 + 8 · 102 + 8 · 10 + 9
≡ 4 + 8 + 8 + 8 + 8 + 9 (mod 9)
≡ 45 (mod 9) et on refait la somme des chiffres de 45
≡ 9 (mod 9)
≡ 0 (mod 9)
Ainsi nous savons que 488 889 est divisible par 9 sans avoir effectué de division euclidienne.
Remarque.
Pour trouver un « bon » représentant de a (mod n) on peut aussi faire la division euclidienne de a
par n : a = bn + r alors a ≡ r (mod n) et 0 6 r < n.
Exemple 15.
Les calculs bien menés avec les congruences sont souvent très rapides. Par exemple on souhaite
calculer 221 (mod 37) (plus exactement on souhaite trouver 0 6 r < 37 tel que 221 ≡ r (mod 37)).
Plusieurs méthodes :
1. On calcule 221 , puis on fait la division euclidienne de 221 par 37, le reste est notre résultat.
C’est laborieux !
2. On calcule successivement les 2k modulo 37 : 21 ≡ 2 (mod 37), 22 ≡ 4 (mod 37), 23 ≡
8 (mod 37), 24 ≡ 16 (mod 37), 25 ≡ 32 (mod 37). Ensuite on n’oublie pas d’utiliser les
ARITHMÉTIQUE 4. CONGRUENCES 14
Proposition 7.
Soit a ∈ Z∗ , b ∈ Z fixés et n > 2. Considérons l’équation ax ≡ b (mod n) d’inconnue x ∈ Z :
1. Il existe des solutions si et seulement si pgcd(a, n)|b.
2. Les solutions sont de la forme x = x 0 + ` pgcd(a,n)
n
, ` ∈ Z où x 0 est une solution particulière. Il
existe donc pgcd(a, n) classes de solutions.
Exemple 16.
Résolvons l’équation 9x ≡ 6 (mod 24). Comme pgcd(9, 24) = 3 divise 6 la proposition ci-dessus
nous affirme qu’il existe des solutions. Nous allons les calculer. (Il est toujours préférable de
refaire rapidement les calculs que d’apprendre la formule). Trouver x tel que 9x ≡ 6 (mod 24) est
équivalent à trouver x et k tels que 9x = 6 + 24k. Mis sous la forme 9x − 24k = 6 il s’agit alors
d’une équation que nous avons étudiée en détails (voir section 2.3). Il y a bien des solutions car
pgcd(9, 24) = 3 divise 6. En divisant par le pgcd on obtient l’équation équivalente :
3x − 8k = 2.
Pour le calcul du pgcd et d’une solution particulière nous utilisons normalement l’algorithme
d’Euclide et sa remontée. Ici il est facile de trouver une solution particulière (x 0 = 6, k0 = 2) à la
main.
On termine comme pour les équations de la section 2.3. Si (x, k) est une solution de 3x − 8k = 2
alors par soustraction on obtient 3(x − x 0 ) − 8(k − k0 ) = 0 et on trouve x = x 0 + 8`, avec ` ∈ Z (le
terme k ne nous intéresse pas). Nous avons donc trouvé les x qui sont solutions de 3x − 8k = 2,
ce qui équivaut à 9x − 24k = 6, ce qui équivaut encore à 9x ≡ 6 (mod 24). Les solutions sont de
la forme x = 6 + 8`. On préfère les regrouper en 3 classes modulo 24 :
x 1 = 6 + 24m, x 2 = 14 + 24m, x 3 = 22 + 24m avec m ∈ Z.
Remarque.
Expliquons le terme de « classe » utilisé ici. Nous avons considérer ici que l’équation 9x ≡ 6
(mod 24) est une équation d’entiers. On peut aussi considérer que 9, x, 6 sont des classes d’équi-
valence modulo 24, et l’on noterait alors 9x = 6. On trouverait comme solutions trois classes
d’équivalence :
x 1 = 6, x 2 = 14, x 3 = 22.
Démonstration.
ARITHMÉTIQUE 4. CONGRUENCES 15
1.
x ∈ Z est un solution de l’équation ax ≡ b (mod n)
⇐⇒ ∃k ∈ Z ax = b + kn
⇐⇒ ∃k ∈ Z ax − kn = b
⇐⇒ pgcd(a, n)|b par la proposition 1
a p ≡ a (mod p)
Corollaire 4.
Si p ne divise pas a alors
a p−1 ≡ 1 (mod p)
Lemme 3.
p p
p divise k pour 1 6 k 6 p − 1, c’est-à-dire k ≡ 0 (mod p).
p p! p p
Démonstration. k = k!(p−k)! donc p! = k!(p−k)! k . Ainsi p|k!(p−k)! k . Or comme 1 6 k 6 p−1
alors p ne divise pas k! (sinon p divise l’un des facteurs de k! mais il sont tous < p). De même p
p
ne divise pas (p − k)!, donc par le lemme d’Euclide p divise k .
• Par le principe de récurrence nous avons démontré le petit théorème de Fermat pour tout a > 0.
Il n’est pas dur d’en déduire le cas des a 6 0.
Exemple 17.
Calculons 143141 (mod 17). Le nombre 17 étant premier on sait par le petit théorème de Fermat
que 1416 ≡ 1 (mod 17). Écrivons la division euclidienne de 3141 par 16 :
3141 = 16 × 196 + 5.
Alors
143141 ≡ 1416×196+5 ≡ 1416×196 × 145
196
≡ 1416 × 145 ≡ 1196 × 145
≡ 145 (mod 17)
Il ne reste plus qu’à calculer 145 modulo 17. Cela peut se faire rapidement : 14 ≡ −3 (mod 17) donc
142 ≡ (−3)2 ≡ 9 (mod 17), 143 ≡ 142 × 14 ≡ 9 × (−3) ≡ −27 ≡ 7 (mod 17), 145 ≡ 142 × 143 ≡
9 × 7 ≡ 63 ≡ 12 (mod 17). Conclusion : 143141 ≡ 145 ≡ 12 (mod 17).
Mini-exercices.
1. Calculer les restes modulo 10 de 122 + 455, 122 × 455, 122455 . Mêmes calculs modulo 11,
puis modulo 12.
2. Prouver qu’un entier est divisible par 3 si et seulement si la somme de ses chiffres est divisible
par 3.
3. Calculer 310 (mod 23).
4. Calculer 3100 (mod 23).
5. Résoudre les équations 3x ≡ 4 (mod 7), 4x ≡ 14 (mod 30).
Cryptographie 2
1. Le chiffrement de César
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 rouge c’est la
partie du message confidentiel, c’est le message en clair.
CRYPTOGRAPHIE 1. LE CHIFFREMENT DE CÉSAR 18
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 ».
1.3. Modulo
Soit n > 2 un entier fixé.
Définition 1.
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, . . .
CRYPTOGRAPHIE 1. LE CHIFFREMENT DE CÉSAR 19
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.
Z/26Z Z/26Z
Dk
CRYPTOGRAPHIE 1. LE CHIFFREMENT DE CÉSAR 20
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" à Bruno. 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 BRUNO
Ck Dk
2 14 20 2 14 20 13 25 5 13 25 5 13 25 5 13 25 5 2 14 20 2 14 20
Exemple 1.
Un exemple classique est le "rot13" (pour rotation par un décalage de 13) :
C13 (x) = x + 13
et comme −13 ≡ 13 (mod 26) alors D13 (x) = x + 13. La fonction de déchiffrement est la même
que la fonction de chiffrement !
Exemple : déchiffrez le mot "PRFNE".
Notons ici deux points importants pour la suite : tout d’abord nous avons naturellement considéré
un mot comme une succession de lettres, et chaque opération de chiffrement et déchiffrement
s’effectue sur un bloc d’une seule lettre. Ensuite nous avons vu que chiffrer un message est une
opération mathématique (certes sur un ensemble un peu spécial).
Il est clair que ce chiffrement de César est d’une sécurité très faible. Si Alice envoie un message
secret à Bruno et que Chloé intercepte ce message, il sera facile pour Chloé de le décrypter même
si elle ne connaît pas la clé secrète k. L’attaque la plus simple pour Chloé est de tester ce que donne
chacune des 26 combinaisons possibles et de reconnaître parmi ces combinaisons laquelle donne
un message compréhensible.
CRYPTOGRAPHIE 1. LE CHIFFREMENT DE CÉSAR 21
1.6. Algorithmes
Les ordinateurs ont révolutionné la cryptographie et surtout le décryptage d’un message intercepté.
Nous montrons ici, à l’aide du langage Python comment programmer et attaquer le chiffrement
de César. Tout d’abord la fonction de chiffrement se programme en une seule ligne :
Ici x est un nombre de {0, 1, . . . , 25} et k est le décalage. (x+k)%26 a pour valeur le reste modulo
26 de la somme (x+k). Pour le décryptage, c’est aussi simple :
Pour chiffrer un mot ou une phrase, il n’y a pas de problèmes théoriques, mais seulement des
difficultés techniques :
• Un mot ou une phrase est une chaîne de caractères, qui en fait se comporte comme une liste.
Si mot est une chaîne alors mot[0] est la première lettre, mot[1] la deuxième lettre... et la
boucle for␣lettre␣in␣mot: permet de parcourir chacune des lettres.
• Pour transformer une lettre en un nombre, on utilise le code Ascii qui à chaque caractère associe
un nombre, ord(A) vaut 65, ord(B) vaut 66... Ainsi (ord(lettre)␣-␣65) renvoie le rang
de la lettre entre 0 et 25 comme nous l’avons fixé dès le départ.
• La transformation inverse se fait par la fonction chr : chr(65) renvoie le caractère A, chr(66)
renvoie B...
• Pour ajouter une lettre à une liste, faites maliste.append(lettre). Enfin pour transformer
une liste de caractères en une chaîne, faites "".join(maliste).
Ce qui donne :
Pour l’attaque on parcourt l’intégralité de l’espace des clés : k varie de 0 à 25. Noter que pour
décrypter les messages on utilise ici simplement la fonction de César avec la clé −k.
CRYPTOGRAPHIE 2. LE CHIFFREMENT DE VIGENÈRE 22
2. Le chiffrement de Vigenère
Nous avons vu que le chiffrement de César présente une sécurité très faible, la principale raison
est que l’espace des clés est trop petit : il y a seulement 26 clés possibles, et on peut attaquer un
message chiffré en testant toutes les clés à la main.
Au lieu de faire correspondre circulairement les lettres, on associe maintenant à chaque lettre une
autre lettre (sans ordre fixe ou règle générale).
Par exemple :
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
F Q B M X I T E P A L W H S D O Z K V G R C N Y J U
Avantage : nous allons voir que l’espace des clés est gigantesque et qu’il n’est plus question
d’énumérer toutes les possibilités.
Inconvénients : la clé à retenir est beaucoup plus longue, puisqu’il faut partager la clé constituée
des 26 lettres "FQBMX...". Mais surtout, nous allons voir que finalement ce protocole de chiffrement
est assez simple à « craquer ».
Attaque statistique
La principale faiblesse du chiffrement mono-alphabétique est qu’une même lettre est toujours chif-
frée de la même façon. Par exemple, ici E devient X. Dans les textes longs, les lettres n’apparaissent
pas avec la même fréquence. Ces fréquences varient suivant la langue utilisée. En français, les
lettres les plus rencontrées sont dans l’ordre :
ESAINTRULODCPMVQGFHBXJYZKW
avec les fréquences (souvent proches et dépendant de l’échantillon utilisé) :
E S A I N T R U L O D
14.69% 8.01% 7.54% 7.18% 6.89% 6.88% 6.49% 6.12% 5.63% 5.29% 3.66%
Voici la méthode d’attaque : dans le texte crypté, on cherche la lettre qui apparaît le plus, et si le
texte est assez long cela devrait être le chiffrement du E, la lettre qui apparaît ensuite dans l’étude
des fréquences devrait être le chiffrement du S, puis le chiffrement du A... On obtient des morceaux
de texte clair sous la forme d’une texte à trous et il faut ensuite deviner les lettres manquantes.
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,
CRYPTOGRAPHIE 2. LE CHIFFREMENT DE VIGENÈRE 24
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 :
Z/26Z × Z/26Z × · · · × Z/26Z −→ Z/26Z × Z/26Z × · · · × Z/26Z
Cn1 ,n2 ,...,nk :
(x 1 , x 2 , . . . , x k ) 7−→ (x 1 + n1 , x 2 + n2 , . . . , x k + nk )
Chacune des composantes de cette fonction est un chiffrement de César. La fonction de déchiffre-
ment est juste C−n1 ,−n2 ,...,−nk .
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.
2.3. Algorithmes
Voici un petit algorithme qui calcule la fréquence de chaque lettre d’une phrase.
Code 5 (statistiques.py).
def␣statistiques(phrase):
␣␣␣␣liste_stat␣=␣[0␣for␣x␣in␣range(26)]␣␣␣␣␣#␣Une␣liste␣avec␣des␣0
␣␣␣␣for␣lettre␣in␣phrase:␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣#␣On␣parcourt␣la␣phrase
CRYPTOGRAPHIE 3. LA MACHINE ENIGMA ET LES CLÉS SECRÈTES 25
␣␣␣␣␣␣␣␣i␣=␣ord(lettre)-65
␣␣␣␣␣␣␣␣if␣0␣<=␣i␣<␣26:␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣#␣Si␣c'est␣une␣vraie␣lettre
␣␣␣␣␣␣␣␣␣␣liste_stat[i]␣=␣liste_stat[i]␣+␣1
␣␣␣␣return(liste_stat)
Code 6 (vigenere.py).
def␣vigenere(mot,cle):␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣#␣Clé␣est␣du␣type␣[n_1,...,n_k]
␣␣␣␣message_code␣=␣[]
␣␣␣␣k␣=␣len(cle)␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣#␣Longueur␣de␣la␣clé
␣␣␣␣i␣=␣0␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣#␣Rang␣dans␣le␣bloc
␣␣␣␣for␣lettre␣in␣mot:␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣#␣Pour␣chaque␣lettre
␣␣␣␣␣␣␣␣nomb␣=␣ord(lettre)-65␣␣␣␣␣␣␣␣␣␣␣␣#␣Lettre␣devient␣nb␣de␣0␣à␣25
␣␣␣␣␣␣␣␣nomb_code␣=␣(nomb+cle[i])␣%␣26␣␣␣#␣Vigenère␣:␣on␣ajoute␣n_i
␣␣␣␣␣␣␣␣lettre_code␣=␣chr(nomb_code+65)␣␣#␣On␣repasse␣aux␣lettres
␣␣␣␣␣␣␣␣i=(i+1)␣%␣k␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣#␣On␣passe␣au␣rang␣suivant
␣␣␣␣␣␣␣␣message_code.append(lettre_code)␣#␣Ajoute␣lettre␣au␣message
␣␣␣␣message_code␣=␣"".join(message_code)␣#␣Revient␣à␣chaine␣caractères
␣␣␣␣return(message_code)
Voici le principe du chiffrement : Alice veut envoyer à Bruno le message secret M suivant :
ATTAQUE LE CHATEAU
Alice a d’abord choisi une clé secrète C qu’elle a transmise à Bruno. Cette clé secrète est de la
même longueur que le message (les espaces ne comptent pas) et composée d’entiers de 0 à 25,
tirés au hasard. Par exemple C :
[4, 18, 2, 0, 21, 12, 18, 13, 7, 11, 23, 22, 19, 2, 16, 9]
Elle crypte la première lettre par un décalage de César donné par le premier entier : A est décalé
de 4 lettres et devient donc E. La seconde lettre est décalée du second entier : le premier T devient
L. Le second T est lui décalé de 2 lettres, il devient V. Le A suivant est décalé de 0 lettre, il reste
A... Alice obtient un message chiffré X qu’elle transmet à Bruno :
CRYPTOGRAPHIE 3. LA MACHINE ENIGMA ET LES CLÉS SECRÈTES 26
ELVALGW YL NEWMGQD
Pour le décrypter, Bruno, qui connaît la clé, n’a qu’à faire le décalage dans l’autre sens.
Notez que deux lettres identiques (par exemples les T) n’ont aucune raison d’être cryptées de la
même façon. Par exemple, les T du message initial sont cryptés dans l’ordre par un L, un V et un
M.
Formalisons un peu cette opération. On identifie A avec 0, B avec 1, ..., Z avec 25. Alors le message
crypté X est juste la "somme" du message M avec la clé secrète C, la somme s’effectuant lettre à
lettre, terme à terme, modulo 26.
Notons cette opération M ⊕ C = X .
A T T A Q U E L E C H A T E A U
0 19 19 0 16 20 4 11 4 2 7 0 19 4 0 20
⊕
4 18 2 0 21 12 18 13 7 11 23 22 19 2 16 9
= 4 11 21 0 11 6 22 24 11 13 4 22 12 6 16 3
E L V A L G W Y L N E W M G Q D
Voici, dans ce cas, le processus de chiffrement du mot "BAC", avec la clé de chiffrement "G" :
1. Position initiale. L’opérateur tourne l’anneau intérieur de sorte que le A extérieur et fixe soit
en face du G intérieur (et donc B en face de W).
S’il y a trois anneaux, lorsque l’anneau intérieur 2 a fait une rotation complète, l’anneau intérieur
3 tourne de 1/26ème de tour. Il y a alors 263 clés différentes facilement identifiables par les trois
lettres des positions initiales des anneaux.
Il fallait donc pour utiliser cette machine, d’abord choisir les disques (nos anneaux intérieurs) les
placer dans un certain ordre, fixer la position initiale de chaque disque. Ce système était rendu
largement plus complexe avec l’ajout de correspondances par fichage entre les lettres du clavier
(voir photo). Le nombre de clés possibles dépassait plusieurs milliards de milliards !
Commençons par rappeler que l’objectif est de générer une clé aléatoire de grande longueur. Pour
ne pas avoir à retenir l’intégralité de cette longue clé, on va la générer de façon pseudo-aléatoire à
CRYPTOGRAPHIE 3. LA MACHINE ENIGMA ET LES CLÉS SECRÈTES 30
Passons maintenant au système DES : à partir d’une clé courte et d’opérations élémentaires on
crypte un message. Comme lors de l’étude de la machine Enigma, nous allons présenter une version
très simplifiée de ce protocole afin d’en expliquer les étapes élémentaires.
Pour changer, nous allons travailler modulo 10. Lorsque l’on travaille par blocs, les additions se
font bit par bit. Par exemple : [1 2 3 4] ⊕ [7 8 9 0] = [8 0 2 4] car (1 + 7 ≡ 8 (mod 10), 2 + 8 ≡ 0
(mod 10),...)
Notre message est coupé en blocs, pour nos explications ce seront des blocs de longueur 8. La clé
est de longueur 4.
Voici le message (un seul bloc) : M = [1 2 3 4 5 6 7 8] et voici la clé : C = [3 1 3 2].
Voici le texte original d’Auguste Kerckhoffs de 1883 «La cryptographie militaire» paru dans le
Journal des sciences militaires.
Il traite notamment des enjeux de sécurité lors des correspondances :
«Il faut distinguer entre un système d’écriture chiffré, imaginé pour un échange
momentané de lettres entre quelques personnes isolées, et une méthode de cryptogra-
phie destinée à régler pour un temps illimité la correspondance des différents chefs
d’armée entre eux.»
Le principe fondamental est le suivant :
«Dans le second cas, [. . . ] il faut que le système n’exige pas le secret, et qu’il
puisse sans inconvénient tomber entre les mains de l’ennemi.»
Ce principe est novateur dans la mesure où intuitivement il semble opportun de dissimuler le maxi-
mum de choses possibles : clé et système de chiffrement utilisés. Mais l’objectif visé par Kerckhoffs
est plus académique, il pense qu’un système dépendant d’un secret mais dont le mécanisme est
connu de tous sera testé, attaqué, étudié, et finalement utilisé s’il s’avère intéressant et robuste.
CRYPTOGRAPHIE 4. LA CRYPTOGRAPHIE À CLÉ PUBLIQUE 32
Formalisons ceci avec la notion de complexité. La complexité est le temps de calculs (ou le nombre
d’opérations élémentaires) nécessaire pour effectuer une opération.
Commençons par la complexité de l’addition : disons que calculer la somme de deux chiffres (par
exemple 6 + 8) soit de complexité 1 (par exemple 1 seconde pour un humain, 1 milliseconde pour
un ordinateur). Pour calculer la somme de deux entiers à n chiffres, la complexité est d’ordre n
(exemple : 1234 + 2323, il faut faire 4 additions de chiffres, donc environ 4 secondes pour un
humain).
La multiplication de deux entiers à n chiffres est de complexité d’ordre n2 . Par exemple pour
multiplier 1234 par 2323 il faut faire 16 multiplications de chiffres (chaque chiffre de 1234 est à
multiplier par chaque chiffre de 2323).
1
Par contre la meilleure méthode de factorisation connue est de complexité d’ordre exp(4n 3 ) (c’est
moins que exp(n), mais plus que nd pour tout d, lorsque n tend vers +∞).
Voici un tableau pour avoir une idée de la difficulté croissante pour multiplier et factoriser des
nombres à n chiffres :
n multiplication factorisation
3 9 320
4 16 572
5 25 934
10 100 5 528
50 2 500 2 510 835
100 10 000 115 681 968
200 40 000 14 423 748 780
afin de pouvoir déchiffrer les messages chiffrés. On parle alors de fonction à sens unique avec
trappe secrète.
BRUNO
ALICE
En effet, jusqu’ici, les deux interlocuteurs se partageaient une même clé qui servait à chiffrer (et
déchiffrer) les messages. Cela pose bien sûr un problème majeur : Alice et Bruno doivent d’abord
se communiquer la clé.
BRUNO ALICE
Message crypté X
Chiffrement C Déchiffrement D
CRYPTOGRAPHIE 4. LA CRYPTOGRAPHIE À CLÉ PUBLIQUE 34
BRUNO
ALICE
De façon imagée, si Bruno veut envoyer un message à Alice, il dépose son message dans la boîte
aux lettres d’Alice, seule Alice pourra ouvrir sa boîte et consulter le message. Ici la clé publique est
symbolisée par la boîte aux lettre, tout le monde peut y déposer un message, la clé qui ouvre la
boîte aux lettres est la clé privée d’Alice, que Alice doit conserver à l’abri.
BRUNO ALICE
Clé publique
Message M Clé privée Message M
Message crypté X
Chiffrement C Déchiffrement D
En prenant appui sur l’exemple précédent, si le message initial est 71 et que la fonction f de
chiffrement est connue de tous, le message transmis est 11 et le déchiffrement sera rapide si la
trappe secrète 7 est connue du destinataire.
Les paramètres d’un protocole de chiffrement à clé publique sont donc :
• les fonctions de chiffrement et de déchiffrement : C et D,
• la clé publique du destinataire qui va permettre de paramétrer la fonction C ,
• la clé privée du destinataire qui va permettre de paramétrer la fonction D.
Dans le cadre de notre exemple Bruno souhaite envoyer un message à Alice, ces éléments sont :
• C : x 7−→ x ? (mod 100) et D : x 7−→ x ? (mod 100),
• 3 : la clé publique d’Alice qui permet de définir complètement la fonction de chiffrement :
C : x 7−→ x 3 (mod 100),
• 7 : la clé privée d’Alice qui permet de définir complètement la fonction de déchiffrement :
D : x 7−→ x 7 (mod 100).
Dans la pratique, un chiffrement à clé publique nécessite plus de calculs et est donc assez lent,
plus lent qu’un chiffrement à clé privée. Afin de gagner en rapidité, un protocole hybride peut être
mis en place de la façon suivante :
• à l’aide d’un protocole de chiffrement à clé publique, Alice et Bruno échangent une clé,
• Alice et Bruno utilise cette clé dans un protocole de chiffrement à clé secrète.
CRYPTOGRAPHIE 5. L’ARITHMÉTIQUE POUR RSA 35
a p ≡ a (mod p)
et sa variante :
Corollaire 1.
Si p ne divise pas a alors
a p−1 ≡ 1 (mod p)
Nous allons voir une version améliorée de ce théorème dans le cas qui nous intéresse :
Théorème 2 (Petit théorème de Fermat amélioré).
Soient p et q deux nombres premiers distincts et soit n = pq. Pour tout a ∈ Z tel que pgcd(a, n) = 1
alors :
a(p−1)(q−1) ≡ 1 (mod n)
On note ϕ(n) = (p − 1)(q − 1), la fonction d’Euler. L’hypothèse pgcd(a, n) = 1 équivaut ici à ce
que a ne soit divisible ni par p, ni par q. Par exemple pour p = 5, q = 7, n = 35 et ϕ(n) = 4 · 6 = 24.
Alors pour a = 1, 2, 3, 4, 6, 8, 9, 11, 12, 13, 16, 17, 18, ... on a bien a24 ≡ 1 (mod 35).
Comme p et q sont premiers entre eux (car ce sont des nombres premiers distincts) alors par le
lemme de Gauss on en déduit que p|β. Il existe donc β 0 ∈ Z tel que β = β 0 p.
Ainsi c = 1 + βq = 1 + β 0 pq. Ce qui fait que c ≡ 1 (mod pq), c’est exactement dire a(p−1)(q−1) ≡ 1
(mod n).
On profite que Python assure les affectations simultanées, ce qui pour nous correspond aux suites
ai+1 = bi
bi+1 ≡ ai (mod bi )
initialisée par a0 = a, b0 = b.
Nous avons vu aussi comment « remonter » l’algorithme d’Euclide à la main pour obtenir les
coefficients de Bézout u, v tels que au + bv = pgcd(a, b). Cependant il nous faut une méthode plus
automatique pour obtenir ces coefficients, c’est l’algorithme d’Euclide étendu.
On définit deux suites (x i ), ( yi ) qui vont aboutir aux coefficients de Bézout.
L’initialisation est :
x0 = 1 x1 = 0 y0 = 0 y1 = 1
et la formule de récurrence pour i > 1 :
x i+1 = x i−1 − qi x i yi+1 = yi−1 − qi yi
où qi est le quotient de la division euclidienne de ai par bi .
Cet algorithme renvoie d’abord le pgcd, puis les coefficients u, v tels que au + bv = pgcd(a, b).
CRYPTOGRAPHIE 5. L’ARITHMÉTIQUE POUR RSA 37
En d’autres termes, trouver un inverse de a modulo n revient à calculer les coefficients de Bézout
associés à la paire (a, n).
Voici le code :
Code 10 (puissance.py).
def␣puissance(x,k,n):
␣␣␣␣puiss␣=␣1␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣#␣Résultat
␣␣␣␣while␣(k>0):
␣␣␣␣␣␣␣␣if␣k␣%␣2␣!=␣0␣:␣␣␣␣␣␣␣␣␣␣␣␣#␣Si␣k␣est␣impair␣(i.e.␣k_i=1)
␣␣␣␣␣␣␣␣␣␣␣␣puiss␣=␣(puiss*x)␣%␣n
␣␣␣␣␣␣␣␣x␣=␣x*x␣%␣n␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣␣#␣Vaut␣x,␣x^2,␣x^4,...
␣␣␣␣␣␣␣␣k␣=␣k␣//␣2
␣␣␣␣return(puiss)
En fait Python sait faire l’exponentiation rapide : pow(x,k,n) pour le calcul de a k modulo n, il
faut donc éviter (x␣**␣k)␣%␣n qui n’est pas adapté.
CRYPTOGRAPHIE 6. LE CHIFFREMENT RSA 39
6. Le chiffrement RSA
Voici le but ultime de ce cours : la chiffrement RSA. Il est temps de relire l’introduction du chapitre
« Arithmétique » pour s’apercevoir que nous sommes prêts !
Dans cette section, c’est Bruno qui veut envoyer un message secret à Alice. La processus se
décompose ainsi :
1. Alice prépare une clé publique et une clé privée,
2. Bruno utilise la clé publique d’Alice pour crypter son message,
3. Alice reçoit le message crypté et le déchiffre grâce à sa clé privée.
Alice effectue, une fois pour toute, les opérations suivantes (en secret) :
• elle choisit deux nombres premiers distincts p et q (dans la pratique ce sont de très grand
nombres, jusqu’à des centaines de chiffres),
• Elle calcule n = p × q,
• Elle calcule ϕ(n) = (p − 1) × (q − 1).
Exemple 1.
• p = 5 et q = 17
• n = p × q = 85
• ϕ(n) = (p − 1) × (q − 1) = 64
Vous noterez que le calcul de ϕ(n) n’est possible que si la décomposition de n sous la forme p × q
est connue. D’où le caractère secret de ϕ(n) même si n est connu de tous.
Exemple 2.
• p = 101 et q = 103
• n = p × q = 10 403
• ϕ(n) = (p − 1) × (q − 1) = 10 200
CRYPTOGRAPHIE 6. LE CHIFFREMENT RSA 40
Alice continue :
• elle choisit un exposant e tel que pgcd(e, ϕ(n)) = 1,
• elle calcule l’inverse d de e module ϕ(n) : d×e ≡ 1 (mod ϕ(n)). Ce calcul se fait par l’algorithme
d’Euclide étendu.
Exemple 1.
• Alice choisit par exemple e = 5 et on a bien pgcd(e, ϕ(n)) = pgcd(5, 64) = 1,
• Alice applique l’algorithme d’Euclide étendu pour calculer les coefficients de Bézout correspon-
dant à pgcd(e, ϕ(n)) = 1. Elle trouve 5 × 13 + 64 × (−1) = 1. Donc 5 × 13 ≡ 1 (mod 64) et
l’inverse de e modulo ϕ(n) est d = 13.
Exemple 2.
• Alice choisit par exemple e = 7 et on a bien pgcd(e, ϕ(n)) = pgcd(7, 10 200) = 1,
• L’algorithme d’Euclide étendu pour pgcd(e, ϕ(n)) = 1 donne 7 × (−1457) + 10 200 × 1 = 1.
Mais −1457 ≡ 8743 (mod ϕ(n)), donc pour d = 8743 on a d × e ≡ 1 (mod ϕ(n)).
Clé publique
n et e
Et comme son nom l’indique Alice communique sa clé publique au monde entier.
Exemple 1. n = 85 et e = 5
Exemple 2. n = 10 403 et e = 7
Clé privée
Alice détruit en secret p, q et ϕ(n) qui ne sont plus utiles. Elle conserve secrètement sa clé privée.
Exemple 1. d = 13
Exemple 2. d = 8743
Message
Message chiffré
Bruno récupère la clé publique d’Alice : n et e avec laquelle il calcule, à l’aide de l’algorithme
d’exponentiation rapide, le message chiffré :
x ≡ me (mod n)
m ≡ x d (mod n)
Donc
x d ≡ 4013 ≡ 408 × 404 × 40 ≡ 50 × 55 × 40 ≡ 10 (mod 85)
qui est bien le message m de Bruno.
6.4. Schéma
n, e d
? x ≡ me (mod n) ?
m - C - D - m ≡ x d (mod n)
Bruno Alice
Clés d’Alice :
• publique : n, e
• privée : d
Ce lemme prouve bien que le message original m de Bruno, chiffré par clé publique d’Alice (e, n)
en le message x, peut-être retrouvé par Alice à l’aide de sa clé secrète d.
Démonstration. • Que d soit l’inverse de e modulo ϕ(n) signifie d · e ≡ 1 (mod ϕ(n)). Autrement
dit, il existe k ∈ Z tel que d · e = 1 + k · ϕ(n).
• On rappelle que par le petit théorème de Fermat généralisé : lorsque m et n sont premiers entre
eux
mϕ(n) ≡ m(p−1)(q−1) ≡ 1 (mod n)
• Premier cas pgcd(m, n) = 1.
Notons c ≡ me (mod n) et calculons x d :
m (mais pas les deux en même temps). Faisons l’hypothèse pgcd(m, n) = p et pgcd(m, q) = 1,
le cas pgcd(m, n) = q et pgcd(m, p) = 1 se traiterait de la même manière.
Étudions (me )d à la fois modulo p et modulo q à l’image de ce que nous avons fait dans la
preuve du théorème de Fermat amélioré.
— modulo p : m ≡ 0 (mod p) et (me )d ≡ 0 (mod p) donc (me )d ≡ m (mod p),
— modulo q : (me )d ≡ m×(mϕ(n) )k ≡ m×(mq−1 )(p−1)k ≡ m (mod q).
Comme p et q sont deux nombres premiers distincts, ils sont premiers entre eux et on peut
écrire comme dans la preuve du petit théorème de Fermat amélioré que
(me )d ≡ m (mod n)
6.6. Algorithmes
La mise en œuvre est maintenant très simple. Alice choisit deux nombres premiers p et q et un
exposant e.
Voici le calcul de la clé secrète :
Le chiffrement d’un message m est possible par tout le monde, connaissant la clé publique (n, e).
Pour continuer...
Bibliographie commentée :
1. Histoire des codes secrets de Simon Singh, Le livre de Poche.
Les codes secrets racontés comme un roman policier. Passionnant. Idéal pour les plus littéraires.
2. Comprendre les codes secrets de Pierre Vigoureux, édition Ellipses.
Un petit livre très clair et très bien écrit, qui présente un panorama complet de la cryptographie
sans rentrer dans les détails mathématiques. Idéal pour les esprits logiques.
3. Codage et cryptographie de Joan Gómez, édition Le Monde – Images des mathématiques. Un
autre petit livre très clair et très bien, un peu de maths, des explications claires et des encarts
historiques intéressants.
4. Introduction à la cryptographie de Johannes Buchmann, édition Dunod.
Un livre d’un niveau avancé (troisième année de licence) pour comprendre les méthodes mathé-
matiques de la cryptographie moderne. Idéal pour unifier les points de vue des mathématiques
avec l’informatique.
5. Algèbre - Première année de Liret et Martinais, édition Dunod.
Livre qui recouvre tout le programme d’algèbre de la première année, très bien adapté aux
étudiants des l’université. Pas de cryptographie.
Et des ressources en ligne :
• Ars Cryptographica http://www.apprendre-en-ligne.net/crypto/menu/index.html
• Handbook of Applied Cryptography http://cacr.uwaterloo.ca/hac/