Arithmetique
Arithmetique
Arithmetique
Ph. Roux
2002-2009
Table des matières
1 cours magistral 3
1.1 Divisibilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.1.1 L’algorithme d’Euclide . . . . . . . . . . . . . . . . . . . . . . 4
1.1.2 Identités de Bezout . . . . . . . . . . . . . . . . . . . . . . . . 6
1.1.3 Conversion d’un entier en base p . . . . . . . . . . . . . . . . 7
1.2 Nombres premiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.1 Théorème de décomposition en facteurs premiers . . . . . . . 8
1.2.2 Recherche de grands nombres premiers . . . . . . . . . . . . . 12
1.3 Congruences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.3.1 Calcul modulo n . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.3.2 Le Théorème Chinois . . . . . . . . . . . . . . . . . . . . . . . 25
1.4 L’ensemble Z/nZ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
1.4.1 Structure d’anneau et de corps . . . . . . . . . . . . . . . . . 29
1.4.2 Polynômes et résidus quadratiques . . . . . . . . . . . . . . . 34
1.4.3 Générateurs de Z/nZ . . . . . . . . . . . . . . . . . . . . . . . 38
1.5 Cryptographie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
1.5.1 Codage d’un texte ou d’un document . . . . . . . . . . . . . . 39
1.5.2 Les principes de la cryptographie moderne . . . . . . . . . . . 41
1.5.3 Cryptosystème à clé symétrique : Le DES . . . . . . . . . . . . 44
1.5.4 Cryptosystème à clé asymétrique : le RSA . . . . . . . . . . . 45
1.5.5 Protection des cartes bancaires . . . . . . . . . . . . . . . . . 48
1.6 Autres Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
1.6.1 les fonctions de Hachage . . . . . . . . . . . . . . . . . . . . . 51
1.6.2 Codes correcteurs d’erreurs . . . . . . . . . . . . . . . . . . . 53
1.7 Aspect historiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
1.7.1 l’arithmétique dans l’antiquité . . . . . . . . . . . . . . . . . . 55
1.7.2 Pierre de Fermat . . . . . . . . . . . . . . . . . . . . . . . . . 55
1.7.3 Marin Mersenne . . . . . . . . . . . . . . . . . . . . . . . . . . 56
1.7.4 Cryptographie . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
1.7.5 RSA data-security . . . . . . . . . . . . . . . . . . . . . . . . 57
1.7.6 Le bug du P*ntium . . . . . . . . . . . . . . . . . . . . . . . . 58
1.7.7 l’histoire de GNUPG . . . . . . . . . . . . . . . . . . . . . . . 59
Bibliographie 61
2
DUT Informatique Arithmétique Mathématiques
Chapitre 1
cours magistral
où les chiffres an . . . a1 ,a0 appartiennent à {0; 1; 2; . . . 9} mais on pourrait tout aussi
bien travailler dans une base p quelconque, où la notation des entiers est définie par
n
X
x = (bn bn−1 . . . b2 b1 b0 )p = bk pk = bn × pn + bn−1 × pn−1 + . . . b2 × p2 + b1 × p + b0
k=0
où les chiffres cette fois appartiennent à {0; 1; 2; . . . p}. Cela pose un problème pour
les bases p > 10 (les chiffres de 0 à 9 ne suffisent plus). Pour résoudre ce problème
on peut utiliser soit des groupements de chiffres soit des lettres pour remplacer
les chiffres manquants. Par exemple en Hexadécimal (base 16) on peut utiliser les
chiffres :
1; 2; 3; 4; 5; 6; 7; 8; 9; A; B; C; D; E; F
ou
01; 02; 03; 04; 05; 06; 07; 08; 09; 10; 11; 12; 13; 14; 15
alors
(123456789)10 = (111010110111100110100010101)2 = (75BCD15)16 ou (07 05 11 12 13 01 05)16
La longueur de l’écriture d’un nombre x en base p est la partie entière de
ln(x)
lnp (x) =
ln(p)
3
DUT Informatique Arithmétique Mathématiques
1.1 Divisibilité
1.1.1 L’algorithme d’Euclide
Définition 1.1.1
On dit qu’un entier a divise un autre entier b si et seulement si il existe un entier
c tel que b = a × c ce qu’on note a|b. Si a ne divise pas b on le note a ∤ b.
-?
-N
0 ::: (q 1) b q b (q + 1) b (q + 2) b
Preuve :
existence: si l’on découpe l’axe [0, + ∞[ en “boı̂tes” de “taille” b le nombre a
tombe dans une de ces boites, la q ième . Cela revient à dire que le nombre a/b
est compris entre les entiers q et q + 1, il est alors facile de définir r :
a
∃q ∈ N, q ≤ < q + 1 ⇒ qb ≤ a < (q + 1)b ⇒ 0 ≤ a − qb < b ⇒ r = a − qb
b
4
DUT Informatique Arithmétique Mathématiques
unicité: elle repose sur une démonstration par l’absurde. Supposons donc qu’il
existe 2 solutions (q1 ,r1 ) et (q2 ,r2 ) alors on a :
a = b × q1 + r1 = b × q2 + r2 =⇒ b(q1 − q2 ) = r2 − r1 (1.1)
et comme les restes sont compris entre 0 et b
a = b × q1 + r1
b = r1 × q2 + r2
r1 = r2 × q3 + r3
..
.
rn−4 = rn−3 × qn−2 + rn−2
rn−3 = rn−2 × qn−1 + rn−1
rn−2 = rn−1 × qn + rn =⇒ PGCD(a,b) = rn
rn−1 = rn × qn+1 + 0
Preuve :
• en remontant la suite d’équations
donc rn = PGCD(a,b)!
Exemple 1.1.4 [détail d’un exemple avec 48 et 27]
48 = 27 × 1 + 21
27 = 21 × 1 + 6
21 = 6 × 3 + 3
6 = 3 × 2 + 0
⇒ PGCD(48,27) = 3
5
DUT Informatique Arithmétique Mathématiques
a × u + b × v = PGCD(a,b).
Il faut remarquer que le couple (u,v) dans l’identité de Bezout n’est pas unique!
En effet comme a × b + b × (−a) = 0 on peut ajouter un multiple de b à u et un
multiple de a à v. Pour obtenir tous les autres couples solution (u′ ,v ′ ) à partir de
(u,v) on utilisera les formules suivantes :
PPCM(a,b) PPCM(a,b)
u′ = u + k , v′ = v − k , k∈Z
a b
Pour calculer des identités de Bezout on peut utiliser les différentes équations
obtenues dans l’algorithme d’Euclide
=⇒ PGCD(a,b) = rn étape 0
= rn−2 − rn−1 qn étape 1
= rn−4 − rn−3 qn−2 − (rn−3 − rn−2 qn−1 )qn étape 2
..
.
= en fonction de rn−k , . . . rn−2k étape k
..
.
= au + bv étape n
48 = 27 × 1 + 21 3 = −3 × 6 + 21
27 = 21 × 1 + 6 = −3 × (27 − 21) + (48 − 27)
21 = 6×3+3 = −3 × (2 × 27 − 48) + 48 − 27
6 = 3×2+0 = −7 × 27 + 4 × 48
=⇒ 27 × (−7) + 48 × 4 = 3 = PGCD(27,48)
6
DUT Informatique Arithmétique Mathématiques
Résolution de l’équation ax + by = c
• Calculer le PGCD de a et b via l’algorithme d’Euclide.
• Si PGCD(a,b) ne divise pas c alors l’équation n’a pas de solutions.
• Si PGCD(a,b)|c on cherche une identité de Bezout
au + bv = PGCD(a,b).
alors
n
X
x = (bn bn−1 . . . b2 b1 b0 )p = bk pk
k=0
n n−1
= bn × p + bn−1 × p + . . . b2 × p2 + b1 × p + b0
= (bn × pn−1 + bn−1 × pn−2 + . . . b2 × p + b1 ) × p + b0
= (bn bn−1 . . . b2 b1 )p × p + b0
7
DUT Informatique Arithmétique Mathématiques
La première chose à savoir sur les nombres premiers est qu’il en existe un nombre
infini, on pourra donc en trouver d’aussi grands que l’on veut (à condition d’avoir
un algorithme efficace pour les générer et les tester!). Ce théorème à été démontré
par Euclide.
Théorème 1.2.2 L’ensemble P des nombres premiers contient une infinité d’éléments.
Preuve : Supposons que P = {p1 ,p2 , . . . pn } est fini et considérons q = p1 p2 . . . pn +1
alors q n’est divisible par aucun pi donc il est premier et q ∈ P
Exemple 1.2.3 Cette preuve par l’absurde (donc pas vraiment constructive) per-
met de trouver une méthode pour engendrer des (facteurs) premiers de plus en plus
gros :
2 ∈ P,2 + 1 = 3 ∈ P,2 × 3 + 1 = 7 ∈ P,2 × 3 × 7 + 1 = 43 ∈ P,
par contre 2 × 3 × 7 × 43 + 1 = 1807 = 13 × 139 ∈ / P,
mais on abien deux nouveaux facteurs premiers 13 et 139 ∈ P
ensuite 2 × 3 × 7 × 43 × 13 × 139 + 1 = 3263443 ∈ P,
et 2×3×7×43×13×139×3263443+1 = 10650056950807 = 547×607×1033×31051
on a donc bien des facteurs premiers nouveaux à chaque étape . . . mais pas forcément
des nombres premiers et pas forcément en ordre croissant.
Les nombres premiers forment donc une suite (pk )N il est de coutume de noter
p0 = 1 puis p1 = 2 (premier nombre premier) p2 = 3,p4 = 5,p5 = 7,p6 = 11 . . . . Le
théorème suivant est souvent très utile et sa démonstration est caractéristique des
raisonnements faisant intervenir les nombres premiers et les relations de divisibilité.
8
DUT Informatique Arithmétique Mathématiques
Le théorème fondamental de ce chapitre est le théorème de décomposition en fac-
teurs premier, simple à énoncer il n’est pas facile à traduire en équation. Euclide à son
époque ne disposait pas des notations algébriques suffisantes (puissances, suites,. . . )
pour énoncer clairement ce théorème bien qu’il ait certainement compris le théorème
de décomposition, puisqu’il en a énoncé toutes les conséquences!
Il est possible
√ d’améliorer cet algorithme en stoppant la recherche du facteur p
dès que p > n en effet à une étape donné de l’algorithme n n’est pas divisible par
9
DUT Informatique Arithmétique Mathématiques
alors
min(α1 ,β1 ) min(α2 ,β2 ) min(αk ,βk )
PGCD(a,b) = p1 p2 . . . pk ,
max(α1 ,β1 ) max(α2 ,β2 ) max(αk ,βk )
PPCM(a,b) = p1 p2 . . . pk
en particulier PGCD(a,b) × PPCM(a,b) = a × b.
PGCD(48,27)×PPCM(48,27) = (20 ×31 )×(24 ×33 ) = (24 ×31 )×(20 ×33 ) = 48×27
La fonction suivante sera utilisé pour le crypto-système RSA. Elle joue un grand
rôle en arithmétique et son calcul repose entièrement sur la décomposition en facteurs
premiers.
Définition 1.2.10 (la fonction d’Euler) on définit la fonction Φ telle que Φ(1) =
1 et Φ(n) = le nombre d’entiers premiers avec n et compris entre 1 et n − 1
Φ : N∗ −→ N∗
n 7−→ Φ(n)
10
DUT Informatique Arithmétique Mathématiques
Exemple 1.2.11 Pour comprendre on peut calculer les premières valeurs de Φ(n) :
• Φ(7) = 6 car 7 est premier, donc premier avec 1,2,3,4,5,6
• Φ(10) = 4 car 10 est premier avec 1,3,7,9
• Φ(12) = 4 car 12 est premier avec 1,5,7,11
par contre si n devient grand il devient très lourd de vérifier pour tout p < n si p
est premier avec n.
On a donc besoin d’une formule de calcul efficace pour Φ.
Proposition 1.2.12 (calcul de Φ)
11
DUT Informatique Arithmétique Mathématiques
Exemple 1.2.13 on peut reprendre les exemples précédents pour voir l’efficacité
de la formule :
• Φ(7) = Φ(71 ) = 7 − 1 = 6
• Φ(10) = Φ(2 × 5) = 10 1 − 21 1 − 51 = 10 12 45 = 4
• Φ(12) = Φ(22 × 3) = 12 1 − 21 1 − 13 = 10 12 23 = 4
• Φ(60) = Φ(22 × 3 × 5) = 60 1 − 21 1 − 31 1 − 15 = 60 12 23 45 = 16
attention, dans la formule finale, la puissance d’un facteur p dans la décomposition
du nombre n n’intervient pas dans le calcul de Φ(n)!
Preuve : La répartition des nombres premiers est l’un des phénomènes les
plus complexe. Il est très difficile d’obtenir des informations sur la répartition des
nombres premiers, l’approche la plus efficace repose sur l’étude de séries. En effet
un bon moyen de savoirP 1 s’il y a “beaucoup” d’entiers d’une certaine forme un est
de regarder la série un
. Par exemple on peut dire qu’il y a peu de carrés parfaits
2
P∞ 1 π2
(u n
P∞ 1 = n ) par rapport aux entiers (u n = n) car k=1 n2 = 6 converge alors que
k=1 n = ∞ diverge. C’est avec ce type d’idées qu’on peut démontrer le théorème
de raréfaction des nombres premiers, on va donner une idée des éléments qui peuvent
conduire à une preuve (longue et complexe) de ce théorème.
12
DUT Informatique Arithmétique Mathématiques
• Ensuite la série harmonique peut être encadrée par comparaison avec des
intégrales (voir le cours d’analyse de première année) ce qui donne :
n Z n Y −1
X 1 1 1
≥ dx = ln(n) ⇒ 1− ≥ ln(n)
q=1
q 1 x p ∈P
pi
i n
P π2
• En se rappelant que la série ∞ 1
q=1 q 2 = 6 en sommant seulement sur les q = pi
premiers et plus petits que n (donc sur moins de nombres) on obtient que :
X 1 π2 X 1 X 1 π2
0≤ ≤ ⇒ ≥ ln(ln(n)) − ≥ ln(ln(n)) −
p ∈P
2p2i 12 p ∈P
pi p ∈P
2p2i 12
i n i n i n
P
on peut donc en conclure que la série p∈P 1p diverge ce qui signifie qu’il y a
“beaucoup” de nombres premiers. Si on pousse l’analyse plus loin on peut extraire
plus d’informations sur la répartition des nombres
P premiers. D’une manière similaire
(mais plus compliquée!) on peut obtenir que pi ∈Pn p1i ≤ ln(ln(n)) + C ste ce qui
conduit à dire que :
X 1
≈ ln(ln(n)) quand n → ∞
p ∈P
p i
i n
13
DUT Informatique Arithmétique Mathématiques
y 1
donc × > f −1 (y). Au final on a bien
ln(y) 1− ln(ln(y))
ln(y)
y 1 y y
× ln(ln(y))
> f −1 (y) > =⇒ f −1 (y) ≈
ln(y) 1 − ln(y) ln(y)
ln(y)
14
DUT Informatique Arithmétique Mathématiques
n pn n ln(n) p′n
500 3571 3107.304 3520.7554
1000 7919 6907.7553 7840.4
1500 12553 10969.831 12454.356
2000 17389 15201.805 17258.339
2500 22307 19560.115 22203.12
3000 27449 24019.103 27259.814
3500 32609 28561.814 32409.391
4000 37813 33176.199 37638.352
4500 43051 37853.247 42936.624
5000 48611 42585.966 48296.4
Théorème 1.2.15 Le calcul de la liste des nombres premiers plus petits que n par
l’algorithme d’Ératosthène nécessite un temps de l’ordre de n ln(ln(n)).
15
DUT Informatique Arithmétique Mathématiques
une analyse plus fine montre qu’il n’y a d’élimination que si k est premier, donc en
utilisant le théorème de raréfaction des nombres premiers on a :
√
n
√
ln( n) √
X n X n n
≈ n ln ln √ ≈ n ln(ln(n))
k ln(k) k ln(k) ln( n)
1≤k k=1
√
k ln(k)≤ n
Pour bien comprendre la démonstration précédente il est utile de tester l’algo-
rithme d’Ératosthène pour de petites valeurs de n.√Par exemple pour n = 40 on verra
qu’il suffit d’appliquer l’algorithme jusqu’à k > 40 = 6.324 · · · > 6 pour avoir la
liste des nombres premiers et qu’on a des éliminations seulement pour k = 2,3 et 5.
initialisation
2 3 4 5 6 7 8 9 10 11 12 13 14
15 16 17 18 19 20 21 22 23 24 25 26 27
28 29 30 31 32 33 34 35 36 37 38 39 40
étape 1, k=2
2 3 6 4 5 6 6 7 6 8 9 6 10 11 6 12 13 6 14
15 6 16 17 6 18 19 6 20 21 6 22 23 6 24 25 6 26 27
6 28 29 6 30 31 6 32 33 6 34 35 6 36 37 6 38 39 6 40
étape 2, k=3
2 3 6 4 5 6 6 7 6 8 6 9 6 10 11 6 12 13 6 14
6 15 6 16 17 6 18 19 6 20 6 21 6 22 23 6 24 25 6 26 6 27
6 28 29 6 30 31 6 32 6 33 6 34 35 6 36 37 6 38 6 39 6 40
étape 3, k=5
2 3 6 4 5 6 6 7 6 8 6 9 6 10 11 6 12 13 6 14
6 15 6 16 17 6 18 19 6 20 6 21 6 22 23 6 24 6 25 6 26 6 27
6 28 29 6 30 31 6 32 6 33 6 34 6 35 6 36 37 6 38 6 39 6 40
fin, k=7
2 3 6 4 5 6 6 7 6 8 6 9 6 10 11 6 12 13 6 14
6 15 6 16 17 6 18 19 6 20 6 21 6 22 23 6 24 6 25 6 26 6 27
6 28 29 6 30 31 6 32 6 33 6 34 6 35 6 36 37 6 38 6 39 6 40
la liste des nombres premiers plus petits que 40 est donc :
2,3,5,7,11,13,17,19,23,29,31,37
à défaut de pouvoir trouver tous les nombres premiers on verra qu’il existe cer-
tains nombres d’une forme particulière dont la primalité est plus facile à tester.
16
DUT Informatique Arithmétique Mathématiques
p1 + p2 + · · · + pn + · · · = 1
P∞ 1 π2 6
quand n → ∞, et comme n=1 n2 = 6
on a bien que p1 ≈ P(PGCD(a,b) = 1) =
π2
1. ce qui est faux!!! En fait la démonstration ci-dessus n’est pas correcte, mais les “vraies”
démonstrations de ce résultat sont très difficiles.
17
DUT Informatique Arithmétique Mathématiques
le dernier en date a été découvert le 6 septembre 2008 par Edson Smith (ou plutôt
les machines du département de mathématique de UCLA!) il s’agit du 45ième nombre
de Mersenne premier connu : 243 112 609 − 1! Il possède 12 978 189 décimales.
Vous pouvez aussi visiter le site de l’EFF (Electronic Frontier Foundation voir
[4]), qui offre des récompenses pour la découverte des plus gros nombres premiers.
C’est ainsi que 100 000 dollars ont été offerts aux découvreurs du premier nombre
premier à plus de 10 millions de chiffres . . .
18
DUT Informatique Arithmétique Mathématiques
1.3 Congruences
1.3.1 Calcul modulo n
Définition 1.3.1 Soient trois entiers a,b,n, on dit que a et b sont congrus modulo
n (que l’on note a ≡ b mod n) si et seulement si a et b ont le même reste dans la
division Euclidienne par n :
a ≡ b mod n ⇐⇒ n|a − b ⇐⇒ ∃k ∈ Z, a = b + kn
Exemple 1.3.2 pour un a et un n fixés on est pas obligé de prendre b égal au reste
de a dans la division par n, par exemple :
29 ≡ 3 ≡ 16 ≡ −10 mod 13
suivant le cas il sera plus pratique de prendre −10 que 3. Notez aussi qu’il est très
pratique de pouvoir écrire plusieurs “congruences” (≡) sur une même ligne avec un
seul “modulo” ( mod ) en fin de ligne. Pour simplifier il faut bien retenir que le mod
ne fait pas partie des nombres qui apparaissent dans les congruences. En particulier
pour désigner le carré du reste de a2 modulo n ne jamais écrire (a mod n)2 !!!
Les règles de calculs avec les principales opérations arithmétiques dans des congruences
sont les mêmes que pour les calculs dans Z.
Proposition 1.3.3
Soient cinq entiers a,b,c,d,n ∈ Z et e ∈ N, on a les règles de calcul suivantes :
• a ≡ b mod n et c ≡ d mod n =⇒ a + c ≡ b + d mod n
• a ≡ b mod n et c ≡ d mod n =⇒ a × c ≡ b × d mod n
• a ≡ b mod n =⇒ ae ≡ be mod n
Preuve : Les bases du calcul modulo n reposent sur les 3 règles de la proposition
précédente que l’on peut très facilement démontrer. Commençons par l’addition et
la multiplication :
a = b + kn a = b + kn
′
c = d+kn c = d + k′ n
a + b = b + d + (k + k )n ac = bd + (bk ′ + dk + kk ′ )n
′
19
DUT Informatique Arithmétique Mathématiques
15x + 24 ≡ 17 mod 29
Comme on peut utiliser les nombres négatifs dans des congruences il est très
facile de se débarrasser du 24 dans le membre de gauche :
15x ≡ 17 − 24 ≡ −7 ≡ 22 mod 29
pour éliminer le 15 qui se trouve devant le x on ne peut pas diviser par 15! Il
faut donc chercher un u tel que 15 × u ≡ 1 mod 29, c’est possible en cherchant une
identité de Bezout :
29 = 15 × 1 + 14
15 = 14 × 1 + 1
14 = 1 × 14 + 0
donc
15 × 2 + 29 × (−1) = 1 =⇒ 15 × 2 ≡ 1 mod 29
Donc en multipliant par 2 l’équation on obtient
15x ≡ 22 mod 29
2 × 15x ≡ 2 × 22 mod 29
1×x ≡ 44 mod 29
x ≡ 15 mod 29
Il faudra bien retenir cette technique très importante pour le calcul de l’inverse
modulo n
Preuve : si a et n sont premiers entre eux alors on peut trouver une identité
de Bezout
∃u,v ∈ Z, au + vn = 1 =⇒ au = 1 − vn =⇒ au ≡ 1 mod n
Le fait que a ≡ b mod n =⇒ ae ≡ be mod n est très important, ce type de
calcul apparaı̂t partout dans le crypto-système RSA, et pour des nombres a,b,e
20
DUT Informatique Arithmétique Mathématiques
de très grande taille. Nous avons donc besoin d’étudier comment calculer de telles
puissances pour des nombres assez grands.
Lemme 1.3.6 pour tout a,b,c,n ∈ Z on a :
na+b = na × nb , na×b = (na )b , na×b+c = (na )b × nc
Exemple 1.3.7 ce lemme est très utile pour le calcul de puissances modulo n.
Calculons par exemple 153100 mod 29. D’abord, plutôt que de calculer les puissances
de 153, il vaut mieux calculer les puissances de son reste mod 29 qui sera un nombre
plus petit :
153 = 5 × 29 + 8 =⇒ 153100 ≡ 8100 ≡ (23 )100 ≡ 2300 mod 29
maintenant calculons les premières puissances de 2 modulo 29 :
23 = 8, 24 = 16, 25 = 32 ≡ 3 mod 29
donc on peut réduire l’exposant en le divisant par 5 et chaque 25 sera remplacé par
3 (modulo 29) :
300 = 5 × 60 =⇒ 153100 ≡ 25×60 ≡ (25 )60 ≡ 360 mod 29
on recommence ensuite avec 3 :
33 = 27 ≡ −2 mod 29 =⇒ 153100 ≡ 33×20 ≡ (33 )20 ≡ (−2)20 ≡ 220 mod 29
ainsi de suite on va réduire l’exposant jusqu’à arriver à quelquechose de calculable
de tête :
153100 ≡ 25×4 ≡ (25 )4 ≡ 34 ≡ 33 × 3 ≡ −2 × 3 ≡ −6 ≡ 23 mod 29
ceci permet de calculer de tête le reste de 153100 mais cette méthode est aussi très
importante du point de vue algorithmique. En effet pour calculer le reste de 153100
modulo 29 cette méthode est beaucoup plus efficace que celle qui consisterait à
calculer d’abord le développement de 153100 (218 chiffres!) puis d’en faire la division
par 29. Nous verrons que c’est d’une manière très similaire que sont calculés les restes
de puissances modulo n dans le crypto-système RSA (algorithme d’exponentiation
modulaire rapide).
Pour simplifier des puissances élevées nous avons dû chercher (au hasard) une
relation donnant une simplification de base (25 ≡ 3 mod 29 et 33 ≡ −2 mod 29). Le
théorème suivant, dû à Fermat, permet de trouver de telles relations pour simplifier
ae mod n dans le cas où a et n sont premiers entre eux.
Théorème 1.3.8 (petit théorème de Fermat)
Soient a et n deux entiers premiers entre eux alors
aΦ(n) ≡ 1 mod n
où Φ est la fonction d’Euler. En particulier si n est premier alors
an−1 ≡ 1 mod n, ∀a ∈ [1,n − 1].
ou encore
an ≡ a mod n, ∀a ∈ Z.
21
DUT Informatique Arithmétique Mathématiques
22
DUT Informatique Arithmétique Mathématiques
on doit trouver un a tel que le petit théorème de Fermat soit mis en défaut :
n−1 ∗
n ≥ 3 premier =⇒ a ≡ 1 mod n, ∀a ∈ N , 2 ≤ a < n.
' ⇓ $
Test de Fermat
procédure fermat(n)
choisir un entier a compris entre 2 et n − 1
calculer x = an−1 mod n
si x 6= 1 alors n est composé
sinon n est probablement premier
& %
fin si
Un nombre n qui passe (victorieusement) le test de Fermat pour un a donné est dit
a-pseudo-premier. Le test de Fermat est un test de non-primalité c’est à dire que si
le test renvoie faux on est sûr que n est composé alors que s’il renvoie vrai n peut
être composé . . . mais un nombre qui passe le test de Fermat plusieurs a différents
aura de moins en moins de chances d’être composé comme le montre le résultat
suivant.
Lemme 1.3.11 Soient les événements : Fn,k =“le nombre n passe k fois le test de
Fermat” et Pn =“le nombre n est premier” alors la probabilité que n soit premier
s’il passe k fois le test de Fermat vérifie :
k
6
P(Pn |Fk,n ) ≥ 1 − ln(n) 1 − 2
π
23
DUT Informatique Arithmétique Mathématiques
donc si n n’est pas premier il ne peut passer le test de Fermat que si le a choisit
est au moins premier avec lui. Si l’on admet que les choix des différents a sont
indépendants entre eux, on obtient que
k
k 6
P(Fk,n |Pn ) ≤ P(Aa,n ) ≤ 1 − 2
π
la probabilité qu’un nombre composé passe k fois le test de Fermat vérifie donc :
k
6
P(Pn ∩ Fn,k ) = P(Fn,k |Pn )P(Pn ) ≤ 1 − 2 P(Pn )
π
d’un autre coté si n est premier il passe forcément le test de Fermat donc :
on en déduit la probabilité qu’un nombre n qui passe k fois le test de Fermat soit
premier est :
1
comme pour u ≥ 0 on a 1+u
≥ 1 − u et P(Pn ) ≈ 1/ ln(n) on peut dire que :
k
6
P(Pn |Fk,n ) ≥ f (n) ≈ 1 − ln(n) 1 − 2
π
Comme f (n) → 0 quand k tends vers ∞ plus un nombre passe de tests de Fermat
plus la probabilité qu’il soit premier sera grande.
24
DUT Informatique Arithmétique Mathématiques
• si (E) possède une solution x0 alors il en possède une infinité données par la
formule :
k
X k
X
uiMi = 1 =⇒ x0 = ai ui Mi
i=1 i=1
Preuve : La première assertion est très simple. Dès qu’on a une solution par-
ticulière x0 on trouve facilement toutes les autres puisque
x − x0 ≡ 0 mod m1
x − x0 ≡ 0 mod m2
.. .
. ≡ ..
x − x ≡ 0 mod m
0 k
25
DUT Informatique Arithmétique Mathématiques
Regardons ce que donne concrètement le théorème Chinois dans le cas d’un
système de 2 équations :
x ≡ 5 mod 17
x ≡ 8 mod 29
il faut résoudre
17 × k1 − 29 × k2 = 3
17 × 12 + 29 × (−7) = 1
17 × 36 + 29 × (−21) = 3
donc x0 = 36 × 17 + 5 = 21 × 29 + 8 = 617 et
La méthode de résolution repose donc sur celle vue au premier chapitre. On peut
la résumer ainsi :
26
DUT Informatique Arithmétique Mathématiques
' $
résolution du système de deux congruences
x ≡ a1 mod m1
(E) ⇔
x ≡ a2 mod m2
• Trouver toutes les solutions : On peut déduire TOUTES les solutions à partir
d’une solution particulière x0 en remarquant que
x = x0 mod m1 x − x0 = 0 mod m1
(E) ⇐⇒ ⇐⇒
x = x0 mod m2 x − x0 = 0 mod m2
a1 + m1 × k1 = x = a2 + m2 × k2 ⇒ m1 × k1 + m2 × (−k2 ) = a2 − a1
m1 x1 + m2 x2 = a2 − a1
m1 × u1 + m2 × u2 = PGCD(m1 ,m2 )
x1 × m1 + x2 × m2 = a2 − a1
k1 = x1 = u1 × (a2 − a1 )/PGCD(m1 ,m2 ),
k2 = −x2 = −u2 × (a2 − a1 )/PGCD(m1 ,m2 )
– on obtient la solution particulière en écrivant :
& %
x0 = a1 + m1 × k1 = a2 + m2 × k2
On peut étendre cette méthode pour résoudre des systèmes de plus de deux
équations mais cela devient vite très compliqué. Dans le cas général où les mi ne
sont pas premiers entre eux l’existence d’une solution particulière n’est pas assurée,
27
DUT Informatique Arithmétique Mathématiques
il faut résoudre
493 × k1 − 9 × k2 = −113
on en déduit une identité de Bezout :
493 × 4 + 9 × (−219) = 1
comme 1| − 113 il y a des solutions en multipliant par −113 on obtient une solution
493 × (−452) + 9 × 24747 = −113
donc x0 = −452 × 493 + 124 = −24747 × 9 + 11 = −222712 et
x ≡ −222712 ≡ 3575 mod 4437
28
DUT Informatique Arithmétique Mathématiques
+ 0 1 2 × 0 1 2
0 0 1 2 0 0 0 0
1 1 2 0 1 0 1 2
2 2 0 1 2 0 2 1
+ 0 1 2 3 × 0 1 2 3
0 0 1 2 3 0 0 0 0 0
1 1 2 3 0 1 0 1 2 3
2 2 3 0 1 2 0 2 0 2
3 3 0 1 2 3 0 3 2 1
3 × 52 + 2 × 5 − 3 = 3 × 4 + 3 + 4
= 5+0
= 5
29
DUT Informatique Arithmétique Mathématiques
−a ≡ (n − a) mod n
Théorème 1.4.4 Soit a ∈ Z/nZ alors a possède un inverse (symétrique pour ×),
noté a−1 , si et seulement si PGCD(a,n) = 1. En particulier si n est premier tout
a ∈ Z/nZ a 6= 0 possède un inverse et donc Z/nZ est un corps si et seulement si n
est premier.
Preuve : Ce problème de l’inversion a déjà été traité dans la partie sur les
congruences. Il faut commencer par chercher une identité de Bezout dans Z, ce qui
n’est possible que si a et n sont premiers entre eux :
PGCD(a,n) = 1 =⇒ ∃u,v ∈ Z, a × u + n × v = 1 =⇒ au = 1 − nv
30
DUT Informatique Arithmétique Mathématiques
ensuite on voit que les coefficients de cette identité de Bezout fournissent un inverse
pour a :
∃u,v ∈ Z, au ≡ 1 mod n =⇒ a × u = 1 dans Z/nZ
inversement si a à un inverse u alors
donc P GCD(a,n) = 1.
On se rappellera que trouver l’opposé d’un élément de Z/nZ est simple par contre
trouver l’inverse nécessite plus de travail car repose sur le calcul d’une identité de
Bezout
trouver un inverse dans Z/nZ revient
à chercher une identité de Bezout :
Exemple 1.4.5 On peut faire des calculs dans Z/nZ comme dans n’importe quel
autre corps, par exemple pour résoudre une équation ou un système d’équations
dans Z/7Z :
3x + 2 = 0 ⇐⇒ 3x = −2
⇐⇒ 3x = 5
⇐⇒ 5 × 3x = 5 × 5
⇐⇒ 1×x=4
⇐⇒ x=4
car l’inverse de 3 est 5 puisqu’une identité de Bezout entre 3 et 7 est donnée par :
3×5−2×7 =1
si on tombe sur une autre identité de Bezout on doit savoir retrouver le résultat :
3 × 12 − 5 × 7 = 1 ⇐⇒ 3 × 12 ≡ 3 × 5 ≡ 1 mod 7
Mis à part la difficulté du calcul de l’inverse les règles de calculs dans Z/nZ sont
les mêmes que dans R.
31
DUT Informatique Arithmétique Mathématiques
on ne peut pas passer par Z car x−1 ∈/ Z!!! Sans compter que en fait x−1 diffère
de x1 (l’inverse de x au sens des R ou Q).
• même type de démonstration que ci-dessus pour montrer que (x−1 )a est l’in-
verse de xa :
La non-inversibilité de certains élément de Z/nZ, quand n n’est pas premier, fait
apparaı̂tre des phénomènes qui peuvent sembler étrange dans certains calculs et qui
sont liés à l’existence de diviseurs de 0 :
32
DUT Informatique Arithmétique Mathématiques
Preuve :
• si n est premier alors soit a = 0 et la conclusion est vraie, soit a 6= 0 et dans ce
cas on peut trouver un inverse à a, en multipliant par cet inverse on obtient :
a−1 × a × b = 0 =⇒ 1 × b = b = 0
et la conclusion de la proposition est aussi vraie.
• si n est composé alors ∃1 < a,b < n, n = a × b donc a × b = 0 avec
a,b ∈ Z/nZ \ {0}.
Exemple 1.4.9 En faisant les tables de multiplications on peut vérifier que dans
un Z/11Z il n’y a pas de diviseurs de 0 :
× 0 1 2 3 4 5 6 7 8 9 10
0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9 10
2 0 2 4 6 8 10 1 3 5 7 9
3 0 3 6 9 1 4 7 10 2 5 8
4 0 4 8 1 5 9 2 6 10 3 7
5 0 5 10 4 9 3 8 2 7 1 6
6 0 6 1 7 2 8 3 9 4 10 5
7 0 7 3 10 6 2 9 5 1 8 4
8 0 8 5 2 10 7 4 1 9 6 3
9 0 9 7 5 3 1 10 8 6 4 2
10 0 10 9 8 7 6 5 4 3 2 1
alors que dans Z/15Z il y en a plusieurs :
× 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
2 0 2 4 6 8 10 12 14 1 3 5 7 9 11 13
3 0 3 6 9 12 0 3 6 9 12 0 3 6 9 12
4 0 4 8 12 1 5 9 13 2 6 10 14 3 7 11
5 0 5 10 0 5 10 0 5 10 0 5 10 0 5 10
6 0 6 12 3 9 0 6 12 3 9 0 6 12 3 9
7 0 7 14 6 13 5 12 4 11 3 10 2 9 1 8
8 0 8 1 9 2 10 3 11 4 12 5 13 6 14 7
9 0 9 3 12 6 0 9 3 12 6 0 9 3 12 6
10 0 10 5 0 10 5 0 10 5 0 10 5 0 10 5
11 0 11 7 3 14 10 6 2 13 9 5 1 12 8 4
12 0 12 9 6 3 0 12 9 6 3 0 12 9 6 3
13 0 13 11 9 7 5 3 1 14 12 10 8 6 4 2
14 0 14 13 12 11 10 9 8 7 6 5 4 3 2 1
par exemple :
3 × 5 = 6 × 5 = 9 × 10 = 12 × 5 = 0
On retiendra qu’il est beaucoup plus facile de travailler dans Z/nZ avec n premier
que’avec n composé.
33
DUT Informatique Arithmétique Mathématiques
Comme dans R on aimerait pouvoir trouver les racines d’un trinôme du second
degré. Mais on va voir que c’est plus difficile que dans R.
Théorème 1.4.12
Si n est premier l’équation x2 = 1 a deux solution Dans Z/nZ : x = 1 ou x = −1.
x2 = 1 ⇐⇒ x2 − 1 = 0 ⇐⇒ (x − 1)(x + 1) = 0
[x + 1 = 0 ou x − 1 = 0] ⇔ [x = 1 ou x = −1]
34
DUT Informatique Arithmétique Mathématiques
Exemple 1.4.13 En ne gardant que la diagonale des tables de Pythagore de Z/11Z
on voit bien qu’il n’y a que les deux solutions annoncées 1 et −1 = 10 :
x 0 1 2 3 4 5 6 7 8 9 10
x2 0 1 4 9 5 3 3 5 9 4 1
Par contre dans Z/15Z d’autres solutions, comme 4 et 11, peuvent apparaı̂tre,
en plus de 1 et −1 = 14, car 15 est composé :
x 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
x2 0 1 4 9 1 10 6 4 4 6 10 1 9 4 1
On peut voir dans ces exemples que tous les nombres ne sont pas des carrés dans
Z/nZ. Savoir si un nombre est un carré ou pas est une question cruciale en arithmétique,
résolue par le théorème suivant :
n+1
Proposition 1.4.14 Si n est premier il y a 2
carrés dans Z/nZ (dont 0).
Preuve : si x2 = y 2 alors x2 − y 2 = (x − y)(x + y) = 0 donc x = y ou x = −y.
On peut donc regrouper les valeurs de Z/nZ par 2 {x; −x} qui donnent le même
carré plus 0 qui est un carré. Conclusion le nombre de carrés différents est la moitié
de n − 1 plus le 0 donc n−12
+ 1 = n+1
2
Théorème 1.4.16
n−1
Si n > 2 est premier alors x ∈ (Z/nZ)∗ est un carré si et seulement si x 2 = 1 .
Preuve : on peut d’abord remarquer que comme n est impair n−1 2
est bien
2
un entier. si ∃y ∈ Z/nZ, y = x alors en utilisant le petit théorème de Fermat
n−1 n−1
(∀0 < y < n, y n−1 ≡ 1 mod n) on a (y 2) 2 = y n−1 = 1 = x 2 dans Z/nZ.
n−1 n−1
Inversement si x 2 = 1 alors x est racine de P (X) = X 2 − 1 qui a au plus n−1 2
racines dans Z/nZ or on sait déjà qu’il n’y a que n−12
carrés non nuls qui sont déjà
racines de P . Conclusion il n’y en a pas d’autres.
n−1
En général (pour n grand) il est difficile de calculer x 2 pour vérifier si n est
un carré (avec l’algorithme d’exponentiation modulaire rapide et un ordinateur ça
devient plus facile) sauf dans la cas où x = −1 :
Théorème 1.4.17
Si n > 2 est premier alors −1 ∈ (Z/nZ)∗ est un carré si et seulement si n ≡ 1 mod 4
n−1
Preuve : (−1) 2 = 1 si et seulement si n−1 2
= 2k, k ∈ Z (i.e. est pair!) donc
n = 1 + 4k ⇐⇒ n ≡ 1 mod 4.
Pour aller plus loin il faut introduire le symbole de Legendre :
35
DUT Informatique Arithmétique Mathématiques
où les si ,rj > 0 sont (au signe près) les résidus minimaux. Le résultat essentiel est
que les ri et sj prennent n−1 2
valeurs différentes :
n−1
{s1 ; s2 ; . . . ; sµ ; r1 ; r2 ; . . . r n−1 −µ } = 1; 2; 3; . . .
2 2
en effet si
si = sj =⇒ mi x = mj x =⇒ mi = mj
de même pour ri = rj mais aussi pour si = rj car
si = rj =⇒ −mi x = mj x =⇒ −mi = mj =⇒ mi + mj ≡ 0 mod n
or 0 < mi ,mj < n/2 =⇒ 0 < mi + mj < n. Maintenant on note P le produit des
éléments de {x; 2x; 3x; . . . n−1
2
x} on a alors :
n−1 n−1 n−1 n−1
P = x×2x×· · · × x = |x × x × {z· · · × x} ×1×2×· · ·× 2 = x
2 × !
2 2
n−1
2
fois
d’un autre coté en notant ri les résidus positifs et −sj ceux qui sont négatifs :
n−1 µ µ n−1
P = x×2x×· · · × x = (−1) s1 ×· · ·×sµ ×r1 ×· · ·×r n−1 −µ = (−1) !
2 2 2
il ne reste plus qu’à multiplier par l’inverse de n−12
! (qui n’est pas divisible par p
n−1
donc inversible dans Z/pZ) pour obtenir x 2 = (−1)µ .
Maintenant on peut calculer le symbole de Legendre pour d’autres valeurs :
n2 −1
Théorème 1.4.20 Pour n premier > 2 on a : n2 = (−1) 8
36
DUT Informatique Arithmétique Mathématiques
le théorème suivant du à Gauss est très pratique pour savoir si un nombre est
un carré ou pas.
Théorème 1.4.21 (loi de réciprocité quadratique)
si p et q sont premiers et impairs alors
p p−1
× q−1 q
q = (−1)
2 2
p
Exemple 1.4.22 Voici quelques exemples d’utilisation des règles précédentes pour
savoir si des entiers sont ou pas des carrées modulo 86477 :
• Pour 2 on utilise la formule du théorème 1.4.20 :
864772 −1
2
86477
= (−1) 8 = (−1)934783941 = −1
donc 2 n’est pas un carré dans Z/86477Z.
• pour 5 on utilise la loi de réciprocité quadratique pour réduire les calculs au
minimum. Il faut donc calculer :
5
2×43238 86477
2
86477
= (−1) 5
= 5
37
DUT Informatique Arithmétique Mathématiques
Théorème 1.4.24
n−1
Soit n > 2 est premier, si a ∈ (Z/nZ)∗ est générateur de (Z/nZ)∗ alors x 2 = −1.
Exemple 1.4.25 Hélas cette condition n’est pas suffisante! Prenons l’exemple de
Z/nZ avec n = 11 si on fait la table des puissances on trouve que :
x 1 2 3 4 5 6 7 8 9 10 11 12
n−1
x 2 1 12 1 1 12 12 12 12 1 1 12 1
Conclusion : comme les problèmes précédents (factorisation, calcul de résidu,. . . )
trouver a un générateur de Z/nZ ou pour un b trouver x tel que ax = b (problème
du logarithme discret) sont des problèmes difficiles . . . qui vont servir de base pour
la construction de cryptosystèmes efficaces.
38
DUT Informatique Arithmétique Mathématiques
1.5 Cryptographie
1.5.1 Codage d’un texte ou d’un document
Pour comprendre les notions de bases de la cryptographie il faut commencer
par définir ce à quoi elle s’applique. Les données que nous avons besoin déchiffrer
peuvent être assimilés à des textes c’est à dire une suite de caractères sont choisis
dans un ensemble fini (qu’on appelle couramment un alphabet) de longueur finie
qui n’est limitée que par la capacité de stockage du support utilisé pour conserver
ou transmettre le texte. La transmission d’un texte (clair ou crypté) repose sur son
découpage en paquets qui peuvent être transmis les uns à la suite des autres, par
exemple nous pouvons découper un texte en syllabes, en mots, en phrases, en cha-
pitres . . .
Cette définition d’un texte s’applique sans problème au fichiers informatiques que
nous pouvons avoir besoin de chiffrer. Examinons le cas particulier d’un fichier texte.
Ils sont écrit dans à partir d’un alphabet de 256 caractères le code ASCII, chaque
caractère peut être représenté par un code, un nombre entre 0 et 255 (un entier
sur 8 bits) donc en binaire par une suite de 8 nombres valant 0 ou 1. En mettant
bout à bout les codes des différents caractères on obtient une suite de 0 et de 1
représentant le texte (un nombre binaire en fait) quel’on peut découper en tranches
de taille arbitraire (128 bits, 512 bits . . . ) et que l’on peut ensuite transmettre.
| {z }
nombre de 4 bits
Ces groupes peuvent donc être considérés comme représentant des nombres bi-
naires à k chiffres ou, ce qui revient au même, des éléments de Z/nZ (avec n = 2k ).
Si on utilise une autre base p pour représenter les codes des différents caractères et
que l’on fait des blocs de k chiffres on obtiendra une représentation du texte par
une suite d’éléments de Z/pk Z. Pendant ce cours (et en particulier en TP) pour
continuer à travailler avec les nombres écrit en base 10 (qui nous sont plus familiers)
nous allons utiliser la table de 100 caractères suivante :
code 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
chaine a b c d e f g h i j k l m n o p q r s t
code 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
chaine u v w x y z A B C D E F G H I J K L M N
code 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
chaine O P Q R S T U V W X Y Z à ç é e
^ è ı
^ ı̈ o
^
code 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
chaine ù ( ) [ ] { } < > / \ = + - * . , ; :
code 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
chaine ! ? & | $ % @ ∧ ∼ ’ 0 1 2 3 4 5 6 7 8 9
39
DUT Informatique Arithmétique Mathématiques
46 13 75 4 23 4 12 15 11 4 80
46 13 75 4 23 4 12 15 11 4 80 75
puis on regroupe les termes par 4 (notez bien le caractère e de code 4 devient 04):
Dans la réalité c’est de cette manière que sont découpés les textes mais en uti-
lisant le codage ASCII et en regroupant les chiffres de leur représentation binaire.
Pour information voici la table des caractères ASCII de code 0 à 127 (qui fut ensuite
étendue à 256 caractères).
40
DUT Informatique Arithmétique Mathématiques
clair a b c d e f g h i j k l m ...
codé d e f g h i j k l m n o p ...
Dans le cas du code de César l’équation f (x) = x + a est très simple à inverser :
Un cas particulier du code de César est celui ou la clé a = 13 qui est connu
sous le nom de ROT13. Dans ce cas on a : f (x) = x + 13 = g(x) car 13 = −13
dans Z/26Z! Ce système est utilisé dans certains forums ou sur certains newsgroups
pour éviter que l’on ne lise une information involontairement (pour la lire il faut
la décoder). On l’appelle ROT13 car il consiste en une permutation circulaire des
lettres de l’alphabet qu’on peut représenter par la table suivante :
clair a b c d e f g h i j k l m codé
codé n o p q r s t u v w x y z clair
41
DUT Informatique Arithmétique Mathématiques
On sait que César utilisait ce code car Suétone (écrivain Romain, 70-127) en fait
une description dans “La vie des 12 Césars”, une biographie des 12 premiers em-
pereurs de Rome. César employait également une autre méthode de stéganographie
très originale. Pour transmettre un message, il rasait la tête d’un esclave et ins-
crivait le message sur son crâne! Ensuite il attendait la repousse des cheveux et
envoyait l’esclave. Malgré (ou à cause de) sa simplicité, ce chiffre fut encore employé
par des officiers sudistes pendant la guerre de Sécession et par l’armée russe en 1915.
Ce sont les mêmes principes qui ont été utilisés par les ingénieurs allemands pour
définir le cryptosystème ENIGMA (en 1919) qui fut largement utilisé par les armées
allemandes pour protéger leur communications à partir de 1926 puis par les nazis
pendant toute la seconde guerre mondiale. La machine ENIGMA est basé sur une
technologie électromécanique (sans rapport avec celle utilisée maintenant) mais se-
lon les même principes que nous avons énoncés. Elle se présente comme une machine
à écrire où l’on saisit le texte à chiffrer.
42
DUT Informatique Arithmétique Mathématiques
...
Fig. 1.4 – Fonctionnement d’ENIGMA : la clé (privée) est déterminée par la position
initiale des rotors
43
DUT Informatique Arithmétique Mathématiques
Chiffrement=“tour” Déchiffrement=“anti-tour”
A B C D
R R
B A + f (B)
D − f (C) C
44
DUT Informatique Arithmétique Mathématiques
/ ?U w / ?U w
création des groupes A1 A2 . . . A2p−1 A2p création des groupes L1 L2 . . . L2p−1 L2p
= ~ = ~ = ~ = ~
1er tour B1 B2 . . . B2p−1 B2p 1er anti-tour K1 K2 . . . K2p−1 K2p
avec la cl f1 avec la clé fk
.. .. .. .. .. .. .. ..
. . . . . . . .
= ~ = ~ = ~ = ~
k ième tour L1 L2 . . . L2p−1 L2p k ième anti-tour A1 A2 . . . A2p−1 A2p
avec la clé fk avec la clé f1
U?
w/ U?
w/
message chiffré = 0100010110101001 . . . message clair = 1011011010000111 . . .
(n,e) (n,d)
clé publique clé secrète
↓ ↓
e −1
f (A) = A mod n f (B) = B d mod n
fonction de chiffrement fonction de déchiffrement
/ ?U w / ?U w
création des groupes A1 A2 . . . A2p−1 A2p création des groupes B1 B2 . . . B2p−1 B2p
? ? ? ? ? ? ? ?
chiffrer avec la clé B1 B2 . . . B2p−1 B2p déchiffrer avec la clé A1 A2 . . . A2p−1 A2p
publique f privée f −1
U?
w/ U?
w/
message chiffré = 0100010110101001 . . . message clair = 1011011010000111 . . .
45
DUT Informatique Arithmétique Mathématiques
La mise en œuvre du cryptosystème à clé publique RSA est plus simple que celle
du DES (cf. figure 1.7), par contre la preuve du bon fonctionnement du RSA est
plus complexe. Pour montrer que les fonction f et f −1 sont bien inverses l’une de
l’autre on a besoin du petit théorème de Fermat et du théorème chinois :
car
x 7−→ xe mod n 7−→ (xe )d = xe×d mod n
chiffrement déchiffrement
Remarquons d’abord que quelque soit x ∈ [0,n−1] (avec n = pq) alors PGCD(x,p) =
1 ou PGCD(x,q) = 1. Les rôles de p et q étant totalement symétriques il suffit de
considérer le cas PGCD(x,p) = 1. On a alors l’alternative suivante :
• PGCD(x,q) = 1 d’après le théorème de Fermat on a
et
xΦ(n) = (xq−1 )p−1 ≡ 1p−1 ≡ 1 mod q
le théorème Chinois permet alors de conclure que
ce qui donne
x = α × q ≡ 0 mod q, 0 ≤ α < p.
On a alors
xed = 0ed ≡ 0 ≡ x mod q
et aussi
xed = x((xp−1 )q−1 )k ≡ x mod p
donc xed ≡ x mod pq.
Il reste à montrer la sûreté du cryptosystème RSA. Pour comprendre cherchons
à trouver la clé secrète d à partir de la clé publique (n,e). Pour cela il faut :
46
DUT Informatique Arithmétique Mathématiques
Toutes ces opérations peuvent être programmées sur machine (cf. les TP) et l’on
pourrait croire que le cryptosystème est facilement “cassable”. En fait la sécurité
du cryptosystème RSA repose sur un choix des entiers p et q qui rende très difficile
la factorisation de n. Il est possible de générer rapidement des entiers p, q et e
premiers qui soient très grands (plusieurs centaines de chiffres décimaux) qui rendent
impossible la factorisation de n en un temps raisonnable! En effet si on compare les
temps de calcul des différents algorithmes à mettre en oeuvre en fonction de la taille
des données en entrée on obtient le tableau qui suit. Si a,b,e ≈ n sont des entiers de
taille maximale n et
alors
opération temps de calcul nécessaire ≤
a+b c1 × L
a×b c2 × L2
PGCD(a,b) c2 × L3
Bezout(a,b) c4 × L3
powermod(a,e,n) c5 × L3
prime(k) c7 × L5
eratosthene(n) c8 × log(L) × 10L
decomp(n) c9 × 10L/2
Φ(n) c10 × 10L/2
Les algorithmes à utiliser pour générer des clés ont un temps de calcul (on parle
de complexité) proportionnel à Lk (i.e. polynômial) alors que les algorithmes pour
factoriser des entiers ont une complexité en 10k×L donc exponentielle. Bref pour
des entrées suffisamment grandes le temps de calcul pour générer des entiers pre-
miers reste raisonnable alors que le temps de calcul pour factoriser un entier devient
irréaliste (plusieurs fois l’age supposé de l’univers . . . cf figure 1.8).
qq milliers d'annees 6
algorithme
exponentiel
(10L 10L
;L ;::: )
qq jours
algorithme
polynomial
2 3
L;L ;L
qq secondes
-
10 50 100 L
47
DUT Informatique Arithmétique Mathématiques
La taille des clés de chiffrement est d’ailleurs clairement indiquée dans les textes
de loi en France. Ces textes concernant la cryptographie ont été révisés par les
décrets 99-199 et 99-200 du 17 mars 1999 :
• la création et l’utilisation de logiciels dont l’algorithme utilise une la clé inférieure
à 40bits est totalement libre
• l’utilisation de logiciels dont l’algorithme utilise une clé inférieure à 128 bits
est libre à condition que:
– l’éditeur du logiciel ait fait une déclaration
– logiciels utilisés dans un cadre privé exclusivement
• les logiciels de cryptographie utilisant une clé à plus de 128 bits doivent faire
l’objet d’une déclaration pour pouvoir être utilisés, par exemple :
– Pour les cartes bancaires les clés RSA (à 700 bits) doivent être commu-
niqué à un organisme public (un tiert de confiance)
– L’utilisation de GNUPG (version libre de RSA) pour l’échange de mails
et la signature électronique à été autorisée
Dans les autres pays, Japon ou Etats-Unis par exemple, les cartes de paiement
sont toujours dépourvues de puces. Examinons maintenant ce qui se passe lors d’un
paiement (en France) :
V S = RSA(hash(inf os),S,N)
de telle sorte que si (P,N) est la partie publique de la clé RSA associée à la
carte on a :
hash(inf os) = RSA(V S,P,N)
2. inventé par deux français (Roland Moreno et Michel Ugon) vers la fin des années 1970!
48
DUT Informatique Arithmétique Mathématiques
Il faut savoir que pour les CB le modulo N est un entier possédant entre 768
et 1024 bits (produit de 2 facteurs premiers) et P = 3. L’authentification de
' $
la carte se fait donc simplement par :
inf os = informations personnelles (nom, numéro de carte, date de validité . . . )
y1 = hash(inf os) (calcul d’une empreinte de taille fixée)
V S = valeur de signature de la carte
(P,N) = clé RSA (partie Publique) associé à la carte
y2 = RSA(V S,P,N)
V S = valeur de signature
si y1 = y2 alors OK
sinon F AILED
& %
fin si
La sécurité de la carte repose sur le fait que V S est écrit sur la
partie non-lisible de sa mémoire morte. Il n’est donc pas possible
de cloner la carte
Il est très important de remarquer aussi que cette partie est donc faite hors-
ligne !
• Ensuite on procède à l’identification du porteur de la carte : c’est là que
l’on saisit son code confidentiel à 4 chiffres. Ce code étant stocké 3 sur la partie
lisible de la mémoire “morte” le processeur de la carte peut le comparer à
la valeur saisie et transmet sa réponse au terminal (si tout se passe bien le
terminal affiche “code bon”).
• Au delà d’un certain montant une troisième protection est ajoutée il s’agit
d’une Authentification en ligne 4 : un serveur distant envoie à la carte une
valeur aléatoire x. La carte calcule y = DES(x,K) avec une clé secrète K,
inscrite dans la partie cachée de la mémoire “morte” de la carte, et renvoie le
résultat au serveur distant qui donne ou pas l’autorisation 5 .
• à partir d’un lecteur de carte à puce il a extrait les informations publique d’une
véritable carte à puce : informations personnelles (inf os), la partie publique
N (et P = 3) de la clé RSA.
• en 1998, le clés publiques N utilisé par le Groupement Inter-Bancaire (GIE)
avait pour taille 320 bits (valeur fixée depuis 1990). A cette époque, factoriser
un tel entier n’était plus impossible (le record se situait à 512 bits), et Hum-
pich, en utilisant simplement un logiciel japonais de factorisation, a réussi à
3. ce code est aussi stocké sur la piste magnétique et les terminaux de paiement étrangers qui
n’utilisent pas la puce de nos cartes authentifient le porteur de carte à partir de la piste magnétique
4. le terminal de paiement indique alors qu’il demande une “autorisation” au serveur de la
banque
5. la clé secrète K est donc un secret partagé entre le possesseur de la carte et le serveur distant.
49
DUT Informatique Arithmétique Mathématiques
La dernière sécurité, elle, est toujours restée valide, mais comme cette vérification
DES n’est faites qui si l’achat dépasse un certain montant la carte pouvait fonction
dans beaucoup de cas. Le GIE aurait du relever bien plus tôt la taille des clés, les
320 bits étaient déjà suffisants en 1990. l est désormais de 768 bits). Il existe bien
d’autres moyens de falsifier une carte bleu, le plus simple étant de calculer un faux
numéro à 16 chiffres 6 (et le cryptogramme qui va avec) et d’effectuer des paiement
sur internet avec ce seul numéro.
6. Avant 2001, ce numéro était indiqué sur les tickets de carte bancaire! Depuis qu’il en a été
supprimé il faut en généré un qui soit valide car tous les nombres à 16 chiffres ne donnent pas un
numéro de carte bancaire valide . . . il existe des sites Internet où on explique comment calculer un
numéro de carte bancaire valable!
50
DUT Informatique Arithmétique Mathématiques
Par exemple les fonctions qui associent à un texte la valeur du premier bit (ou des
n premiers bits) ou du dernier bit (ou des n dernier bits) ne sont pas des fonctions
de hachage car il est facile de trouver un texte qui redonne une empreinte donnée.
Proposition 1.6.2 une fonction de hachage à valeur dans Z/nZ est une fonction
f de N dans Z/nZ, cette fonction est donc forcément non-injective, c’est à dire que :
Étant donné une fonction de hachage, trouver deux textes ayant la même empreinte
s’appelle trouver une collision.
philippe@pc1 ~
$ echo ’Calcul d’une empreinte avec l’algorithme md5.’ > testmd5
philippe@pc1 ~
$ md5sum testmd5
af23f039a3770dfbf43c311b5208f892 *testmd5
philippe@pc1 ~
$ echo ’calcul d’une empreinte avec l’algorithme md5.’ > testmd5
philippe@pc1 ~
$ md5sum testmd5
a0096eb83b1422e146f3701c7036b616 *testmd5
On voit que le simple fait de changer le ’c’ en ’C’ change totalement l’empreinte
du message. L’une des applications principales des fonctions de hachage concerne la
transmission sécurisée des mots de passe. En effet les mots de passe ne doivent pas
être conservés dans une une base de donnée (sinon quelqu’un peut éventuellement
y accéder) mais il faut absolument pouvoir vérifier si quelqu’un connaı̂t ou pas
un mot de passe donné. Pour cela il suffit de conserver seulement l’empreinte du
mot de passe (celle-ci ne permet pas de retrouver le mot de passe) et de demander
51
DUT Informatique Arithmétique Mathématiques
à un utilisateur d’envoyer seulement l’empreinte de son mot de passe (si elle est
interceptée ce n’est pas grave elle ne permet pas de retrouver le mot de passe) et de
comparer que les deux empreintes correspondent. Cependant il faut être sûr qu’on
ne peut pas à partir de l’empreinte trouver un mot de passe donnant cette empreinte
(une collision). Hélas pour le md5, en 2005 une méthode a été trouvé pour produire
à partir de l’empreinte (et en un temps raisonnable) un mot de passe donnant la
même empreinte.
/* gentil.c */
#include <stdlib.h>
#include <stdio.h>
int main(){
printf("Je suis gentil !\n");
}
/* mechant.c */
#include <stdlib.h>
#include <stdio.h>
int main(){
printf("Je suis mechant !\n");
}
après les avoir compilés on obtient deux fichiers qui ont des signatures différents :
philippe@pc1 ~
$ gcc -o gentil ./gentil.c
philippe@pc1 ~
$ ./gentil
Je suis gentil !
philippe@pc1 ~
$ gcc -o mechant ./mechant.c
philippe@pc1 ~
$./mechant
Je suis mechant !
philippe@pc1 ~
$ md5sum gentil.exe
c4ff40f0ec801b9b0d41832396bbcfe8 *gentil.exe
philippe@pc1 ~
$ md5sum mechant.exe
52
DUT Informatique Arithmétique Mathématiques
c92f90479e7f1f247108b3cfc4895874 *mechant.exe
mais en utilisant le crack disponible à l’adresse [7] on peut créer 2 archives *.bin
qui ont la même empreinte et la même taille, seul un diff permet de voir que les
deux fichiers sont différents :
philippe@pc1 ~
$ md5sum gentil.bin
41916ea01aaf54d222a6d538d5bb65a8 *gentil.bin
philippe@pc1 ~
$ md5sum mechant.bin
41916ea01aaf54d222a6d538d5bb65a8 *mechant.bin
philippe@pc1 ~
$ ls -l *.bin
-rw-r--r-- 1 philippe Aucun 17882 Feb 14 18:23 gentil.bin
-rw-r--r-- 1 philippe Aucun 17882 Feb 14 18:23 mechant.bin
philippe@pc1 ~
$ diff gentil.bin mechant.bin
Files gentil.bin and mechant.bin differ
on peut donc distribuer une archive vérolée à la place de l’archive saine car affichant
le md5 certifié! Il en est de même pour d’autre algorithmes de hachage comme le
SHA, SHA1. Il en existe d’autres sûr (SHA256 et SHA512) mais plus lourds à utiliser.
Des méthodes comme celle du grain de sel permettent cependant de contrer ce genre
de faille du MD5. Pour information on trouvera la description du fonctionnement
du MD5 en fin de cours.
53
DUT Informatique Arithmétique Mathématiques
' $
La fonction de hashage MD5
Soit un message W qui va être le message à chiffrer composé de l bits,
MD5(W ) va produire une empreinte à 128 bits (dans Z/2128 Z) :
• Complétion du message :
– On complète le message par un 1 et autant de 0 que nécessaires
pour obtenir une longueur l′ congrue à 448 modulo 512 (même si
la longueur du message d’origine est congrue a 448 modulo 512)
.
– On ajoute à ce message la valeur de l codée sur 64 bits, ce qui
donne un message de longueur l′′ = l′ + 64 ≡ 448 + 64 ≡ 512 ≡
0 mod 512.
• On découpe le message en N blocs de 16 mots de 32 bits ( car 16×32 =
512 et l′′ est un multiple de 512) puis on calcule l’empreinte :
avec l’annotation : “J’ai découvert une démonstration merveilleuse mais je n’ai pas
la place de la mettre dans la marge” 7 . . . on mettra plus de trois siècles avant de
trouver une démonstration valable (A. Wiles 1993).
L’idée du crible quadratique est aussi due à Fermat qui l’utilise conjointement
au test basé sur le petit théorème de Fermat pour trouver des facteurs premiers de
grands entiers. C’est au début des années 80 que le crible quadratique à pu être
amélioré grace à une méthode qui “accélère” la recherche des “bons” x à tester. À
partir de 1980 ce type de crible a permi de fatoriser des clés jusqu’à une taille de
10140 .
7. méthode à déconseiller pour le DS!
55
DUT Informatique Arithmétique Mathématiques
1.7.4 Cryptographie
Le DES fût utilisé par l’administration des États Unis pour le chiffrement de
toutes les données non liées à la défense nationale à partir de 1977. L’intérêt du
DES était qu’à condition de répéter un nombre de fois suffisant la méthode Feis-
tel on pouvait se permettre d’utiliser des clés relativement petites (56 bits dans les
années 80!) assurant à la fois une grande rapidité et un bon degré de sûreté. Tech-
niquement on peut préciser que le texte était découpé en blocs de 32 bits, chacun
de ces bloc était transformé en blocs de 48 bits (par une méthode de duplication
de bits) auquel on appliquait la méthode de Feistel avant de retransformer les blocs
de 48 bits obtenus en blocs de 32 bits. Le tout était répété 16 fois de suite avec
16 clés différentes! Dans les années 90 la puissance des ordinateurs progressant, les
autorités Américaines ont du relever la norme de sécurité du DES (qui devint le
TDES avec des clés de taille 112 bits), mais avec cette nouvelle norme l’algorithme
était devenu trop lent. Il dut être remplacé, il y a quelques années, par un nouveau
cryptosystème le AES.
56
DUT Informatique Arithmétique Mathématiques
57
DUT Informatique Arithmétique Mathématiques
Pour éviter toute erreur de calcul tous les programmes étaient exécutés en
“double” sur 2 machines différentes . . . et le 13 juin 1994 : un décompte incorrect
des nombres premiers inférieurs à 20 1012 est identifié par comparaison avec des
tables!
58
DUT Informatique Arithmétique Mathématiques
4 octobre 1994 : T. Nicely note une nouvelle erreur. Comme le programme est
sûr, il localise rapidement l’erreur (en qq jours!). Il établit que c’est le calcul
de 1/824 633 702 441 qui est faux en langage C++ avec le Pentium. L’erreur
provient donc soit du compilateur C++, soit du Pentium.
18 octobre 1994 : L’erreur est reproduite avec le langage Power Basic et le logiciel
Quatro-Pro sur un ordinateur équipé d’un Pentium (ce qui met le compilateur
C++ hors de cause), mais disparaı̂t quand le processeur mathématique du
Pentium est désactivé : c’est donc lui le coupable.
21-22 octobre 1994 : Des tests complémentaires confirment le défaut du Pentium.
59
DUT Informatique Arithmétique Mathématiques
10 août 1997 Ståle Schumacher publie en Norvège une version internationale freeware
(PGP 5.0i) pour Unix, basée pour la première fois sur une exportation légale des
USA du code-source sous la forme . . . d’un livre imprimé! Ce livre a ensuite été
scanné, puis passé à la reconnaissance de caractères pour reconstituer le code-source
en dehors des USA et compiler légalement cette version de GNUPG. Voir le cite [8]
pour plus de détails. Vous pouvez télécharger et installer GNUPG sur votre machine
depuis le site [9].
60
DUT Informatique Arithmétique Mathématiques
Bibliographie
61