Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Arithmetique

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 61

Arithmétique

2ième année de DUT Informatique


Version 2.1
3 février 2009

Ph. Roux

2002-2009
Table des matières

Table des matières 2

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

L’arithmétique est la partie des mathématiques qui étudie les ensembles


N = {0; 1; 2; . . . }, N∗ = {1; 2; . . . }, Z = {. . . ; −2; −1; 0; 1; 2; . . . }
munis des opérations naturelles qui leur sont associées :
• l’addition +
• la multiplication ×
• et la divisibilité |
Ces opérations sont bien sûr indépendantes de la manière dont on représente les
nombres entiers. Par défaut on représente les nombres entier en base 10 :
n
X
x = (an an−1 . . . a2 a1 a0 )10 = ak 10k = an ×10n +an−1 ×10n−1 +. . . a2 ×102 +a1 ×10+a0
k=0

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.

Les règles élémentaires de divisibilité :


• ∀a ∈ Z 1|a, a|a, a|0, et 0 ∤ a
• si a|b alors ∀c ∈ Z, a|bc
• si a|b et a|c alors∀x,y ∈ Z a|bx + cy
• si a|b et b|c alors a|c
• si a|b et b|a alors a = ±b
• si a > 0, b > 0 et a|b alors a ≤ b

Définition 1.1.2 Étant donné deux entiers a et b on note


• PGCD(a,b) le plus grand entier naturel qui divise a et b,
• PPCM(a,b) le plus petit multiple commun à a et b.

Théorème 1.1.3 (Division Euclidienne)

∀a ∈ Z, b ∈ N∗ , ∃!(q,r) ∈ Z × N∗ tel que a = b × q + r avec 0≤r<b

q est appelé le quotient de a par b et r le reste de la division de a par b.

Exemple Pour a = 17, b = 9, on a 17 = 9 × 1 + 8 =⇒ q = 1, r = 8. Les autres


égalités 17 = 9 × 2 − 1 = 9 × 0 + 17 = 9 × (−1) + 26 ne donnent pas les bonnes
valeurs de (q,r) car dans chacun des cas qui précèdent le reste r ∈
/ [0,9[.
a

 -?
-N
0 ::: (q 1)  b q  b (q + 1)  b (q + 2)  b

Fig. 1.1 – Preuve de l’existence d’une division Euclidienne.

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

0 ≤ r1 < b et 0 ≤ r2 < b =⇒ − b < r2 − r1 < b =⇒ 0 < |r2 − r1 | < |b|


(1.2)
Maintenant on a l’alternative suivante:
• soit q1 = q2 et dans ce cas r1 = r2 d’après l’équation (1.1)
• soit q1 6= q2 et dans ce cas on trouve une contradiction entre les équations
(1.1) et (1.2)

q1 − q2 6= 0 =⇒ |q1 − q2 | ≥ 1 =⇒ |r2 − r1 | = |b||q1 − q2 | ≥ |b|.

seul le premier cas est donc réalisé.



Le calcul du PGCD s’effectue facilement à partir de l’algorithme d’Euclide. Si on
suppose que a et b ≥ 0 alors on peut calculer le PGCD(a,b) par divisions Euclidiennes
successives :

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

rn |rn−1 ⇒ rn−1 |rn−2 · · · ⇒ rn |a et b ⇒ rn |PGCD(a,b)

• en descendant la suite d’équations

PGCD(a,b)|a et b ⇒ PGCD(a,b)|b et r1 · · · ⇒ PGCD(a,b)|rn

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

1.1.2 Identités de Bezout


Théorème 1.1.5 (Identité de Bezout)
Si a,b ∈ Z alors il existe u,v ∈ Z tels que

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

on peut exprimer ces formules avec des PGCD car

PPCM(a,b) PPCM(a,b) × PGCD(a,b) ab b


= = =
a a × PGCD(a,b) a × PGCD(a,b) PGCD(a,b)

Exemple 1.1.6 Pour a = 17, b = 9, on a

PGCD(17,9) = 1 = 9 × 2 + 17 × (−1) = 9 × 19 + 17 × (−10) = . . . .

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

Exemple 1.1.7 [détail d’un exemple avec 48 et 27]

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).

• En multipliant l’identité de Bezout par c/PGCD(a,b) (qui est bien un


entier!) on obtient une solution :
u×c v×c
x0 = , y0 = .
PGCD(a,b) PGCD(a,b)

• À partir de cette solution on obtient toutes les autres solutions (x,y)


avec la même méthode que pour les identités de Bezout :
b×l a×l
x = x0 + , y = y0 − , l ∈ Z.
PGCD(a,b) PGCD(a,b)

1.1.3 Conversion d’un entier en base p


La méthode la plus efficace pour convertir un entier en base p est la méthode du
bit de poids faible. Elle consiste à calculer le dernier chiffre de la représentation du
nombre en base p par une division Euclidienne. en effet si

x = (bn bn−1 . . . b2 b1 b0 )p = bn × pn + bn−1 × pn−1 + . . . b2 × p2 + b1 × p + b0

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

donc le reste de la division de x par p est b0 et on peut réappliquer la méthode au


quotient de x par p qui est (bn bn−1 . . . b2 b1 )p . On peut récapituler la méthode comme
ci-dessous :
écrire x en base p : la méthode du bit de poids faible
• initialisation x0 = x
• à chaque étape on fait la division entière de xi par p : xi = xi+1 p + bi
– bi est donc le reste de la division de xi par p
– xi+1 est donc le quotient de la division de xi par p
• il n’est plus nécessaire de continuer dès que xi = 0.

7
DUT Informatique Arithmétique Mathématiques

1.2 Nombres premiers


1.2.1 Théorème de décomposition en facteurs premiers
Définition 1.2.1

• On dit que a,b ∈ Z sont premiers entre eux si et seulement si PGCD(a,b) = 1.


• On dit que p ∈ N∗ est un nombre premier si et seulement si il n’est divisible
par aucun entier 1 < k < p.
• On appelle P l’ensemble des nombres premiers.

Il faut signaler un cas particulier de cette définition : p = 1 est considéré comme


premier avec n’importe quel nombre n > 1 car PGCD(1,n) = 1 comme le montre
l’identité de Bezout n × 1 + 1 × (1 − n) = 1.

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é.

Théorème 1.2.4 (Théorème de Gauss)


si a|b × c et a est premier avec b alors a|c .

Preuve : Traduisons les données du problème en équations :


• a|b × c ⇐⇒ ∃k ∈ Z, bc = ak
• a est premier avec b ⇐⇒ ∃u,v ∈ Z, au + bv = 1
multiplions l’identité de Bezout par c puis utilisons la première égalité :

c = acu + bcv = acu + akv = a(cu + kv) =⇒ ∃k ′ = cu + kv ∈ Z, c = ak ′ ⇐⇒ a|c

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!

Théorème 1.2.5 (théorème de décomposition en facteurs premier)


Tout entier n ∈ N, n ≥ 2 admet une unique décomposition en facteurs premiers :

n = pη11 pη22 . . . pηkk


où les entiers p1 ,p2 . . . pk sont premiers et η1 ,η2 , . . . ,ηk ≥ 0

Preuve : le théorème de décomposition nécessite une démonstration par récurrence :


• Pn ⇔ tous les nombres ≤ n admettent une décomposition unique
• P2 est vraie.
• Pn ⇒ Pn+1
– soit n + 1 est premier et sa décomposition est unique
– soit n + 1 est divisible par p, comme (n + 1)/p ≤ n on a (n + 1)/p =
pη11 pη22 . . . pηkk admet une décomposition unique et n + 1 = ppη11 pη22 . . . pηkk
aussi

cette preuve nous permet de trouver un algorithme pour calculer la décomposition
en facteurs premiers d’un entier quelconque :
' $
Décomposition en nombres premiers
p := 2;
tant que n > 1 faire
si p|n alors on cherche l’exposant α de p dans la décomposition de n
α := 0;
tant que p|n faire
n := n/p;
α := α + 1;
fin faire
stocker p et α;
fin si
p := nombre premier suivant p;
& %
fin faire

Remarque 1.2.6 On ne sait pas facilement trouver le nombre premier suivant p,


alors on fait p := p + 1. Cependant on est sûr qu’un facteur p trouvé par l’algorithme
est à chaque fois un nombre premier. En effet si p = p1 × p2 alors p1 et p2 auront
déjà été testé par l’algorithme (car p1 ,p2 < p) et n ne pourra plus être divisible par p.

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

les facteurs premiers q < p donc il n’a que


√ des facteurs q ≥ p. En conséquence si n
2
à au moins 2 facteurs on a que n ≥ p2 > n = n ce qui est impossible! Donc n est
forcément un nombre premier.

Exemple 1.2.7 En testant si p < n on peut réduire un peut le temps de calcul,
surtout s’il reste un dernier facteur premier de grande taille :

n p conclusion : 80360 = 23 × 5 × 72 × 41.


80360 2
40180 2 un autre exemple simple :
20090 2
10045 5 n p
2009 7 84 2
287 7 42 2
41 arrêt recherche
√ 21 3
à p =8> 41 7 7
41 (premier) 1 fin
1 conclusion : 84 = 22 × 3 × 7.

On peut signaler que la décomposition en facteurs premiers permet de retrouver


les résultats sur les PGCD et PPCM.

Théorème 1.2.8 Soient a et b deux entiers positifs, on note leurs décompositions


en facteurs premiers

a = pα1 1 pα2 2 . . . pαk k b = pβ1 1 pβ2 2 . . . pβk k

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.

Exemple 1.2.9 Par exemple 48 = 24 ×3 et 27 = 33 = 20 ×33 donc PGCD(48,27) =


20 × 31 = 3 et PPCM(48,27) = 24 × 33 = 432 et on a bien

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 Φ)

• si p est premier alors Φ(p) = p − 1


• si p est premier et α ≥ 1 alors Φ(pα ) = pα − pα−1 = pα (1 − p1 )
• si PGCD(a,b) = 1 alors Φ(ab) = Φ(a)Φ(b).
• si n = pη11 pη22 . . . pηkk alors
    
1 1 1
Φ(n) = n 1 − 1− ... 1 −
p1 p2 pk
Preuve :
• tous les nombres inférieurs à p sont premier avec lui donc il y en a p−1 = Φ(p),
• seuls les nombres p,2p,3p, . . . pα−1 p ne sont pas premiers avec pα et compris
entre 1 et pα . Il y en a donc pα−1 et le nombre d’entiers premiers avec pα est
Φ(pα ) = pα − pα−1 .
• On considère un nombre q premier avec ab et q ∈ [1,ab[, et les ensembles :
{r1 , . . . ,rΦ(a) } = nombres premiers avec a et < a
{s1 , . . . ,sΦ(b) } = nombres premiers avec b et < b
l’idée de base est que si un nombre q est premier avec ab son reste modulo a
est premier avec a (idem avec b). En effet sinon on aurait un diviseur commun
à a et r, le reste de q/a (soit q = ak + r avec k ∈ N), ce qui donnerai :
∃d > 1, d|a et d|r ⇒ d|ka + r = q
ce qui est impossible car d diviserai q et ab! Donc r est un des restes numérotés
ri (et de même pour le reste modulo b qui doit être un des sj ). Donc on a un
système de 2 équations dont il faut compter les solutions :

q = ri + ka
⇒ ka + (−k ′ )b = sj − ri
q = sj + k ′ b
comme PGCD(a,b) = 1 il existe des solutions à cette équation diophantienne,
solutions qui s’écrivent pour chaque couple (ri ,sj ):

 k = ki + b × l
l ∈ Z =⇒ q = ri + ki a + ab × l
 ′ ′
−k = −kj + a × l
on trouve donc une seule solution q dans l’intervalle [1,ab], associée au couple
(ri ,sj ), donc il y a autant de solutions que de couple −→ Φ(a)Φ(b).
• application des 2 résultats précédents.


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)!

1.2.2 Recherche de grands nombres premiers


Théorème 1.2.14 (théorème de raréfaction) Soit π(x) le nombre de nombres
premiers inférieurs à x alors on a que
x π(x)
π(x) ∼ ⇐⇒ lim = 1.
x→∞ ln(x) x→∞ x/ ln(x)

Si on note pn le nième nombre premier alors le résultat précédent est équivalent au


fait que
pn ∼ n ln(n).
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.

Dans la suite on note Pn l’ensemble des n premiers nombres premier


P (rappel pn >
1
n). La question fondamentale est donc : “comment estimer la série pn
associée à
la suite des nombres premier (pn )N ?”. Tout repose sur les arguments suivants :
• En utilisant la formule de la série géométrique avec p est un facteur premier
puis en faisant le produit sur tous les facteurs premiers pi plus petit que n on
obtient :
 −1 X ∞ ∞
! ∞ n
1 1 Y 1
−1 Y X 1 X 1 X 1
1− = ⇒ 1 − = k
= ≥
p pk pi p Y q
k=0 pi ∈P pi ∈Pn k=0 i k=0 pki q=1
pi ≤n
Q k
où pi représente tous les produits possibles de facteurs premiers pi ∈ Pn à
des exposants k (différents). On a donc dans l’avant dernière somme au moins
tous les entiers q ≤ n (car le nième nombre premier est > n) ce qui justifie
la dernière inégalité.
PnOn1 a donc relié un produit de nombres premiers avec la
série harmonique q=1 q .

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

• Les produits peuvent être transformés en somme par passage au logarithme,


en tenant compte de la croissance de la fonction ln on obtient :
Y  −1 !  
1 X 1
ln 1− = − ln 1 − ≥ ln(ln(n))
p ∈P
p i
p ∈P
p i
i n i n

• Enfin on dispose d’encadrements simples du logarithme népérien


x2
∀x ∈ [0, + ∞[, x ≤ − ln(1 − x) ≤ x +
2
en les appliquant à l’inégalité précédente on obtient :
X 1   Y  −1 !
1 X 1 1
+ 2 ≥ − ln 1 − = ln 1− ≥ ln(ln(n))
p ∈P
p i 2p i p ∈P
p i p ∈P
p i
i n i n 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

de là on peut déduire heuristiquement que :


1
!
1 X 1 X 1 ln(n − 1) − ln 1 − n
= − ≈ ln(ln(n)) − ln(ln(n − 1)) = ln
pn p ∈P pi p ∈P pi ln(n − 1)
i n i n−1

et en utilisant que ln(1 + x) ≈ x quand x → 0 on peut estimer que :


 
1 1 1 1
≈ ln 1 + ≈ ≈
pn n ln(n − 1) n ln(n − 1) n ln(n)
ce dernier résultat suggère que le nième nombre premier pn vérifie

pn ≈ n ln(n) quand n→∞

13
DUT Informatique Arithmétique Mathématiques

le théorème de raréfaction en découle par de simples comparaisons : on pose f (x) =


x ln(x) alors une brève étude de f montre que f est bijective de [1,+∞[ dans [0,+∞[
car f ′ (x) = ln(x) + 1 > 0 si x ≥ 1 et f (1) = 0. En particulier f −1 sera croissante.
y
Pour montrer que f −1 (y) ≈ ln(y) quand y → ∞ il suffit d’encadrer convenablement
−1
f (x) puis d’appliquer f à cette inégalité. La première est assez simple à obtenir :
   
y y ln(ln(y))
f = × (ln(y) − ln(ln(y))) = y 1 − <y
ln(y) ln(y) ln(y)
y
donc ln(y)
< f −1 (y). Pour l’autre sens il faut un peut plus de travail :
!
y 1 y 1
f × ln(ln(y))
= × ln(ln(y))
ln(y) 1 − ln(y) 1 −
ln(y) ln(y)
  
ln(ln(y))
× ln(y) − ln(ln(y)) − ln 1 −
ln(y)
  
ln(ln(y))
ln 1 − ln(y)
= y × 1 − >y
ln(y) − ln(ln(y))

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)

donc si on sait que pn ≈ n ln(n) = f (n) alors f −1 (pn ) ≈ n = le nombre de nombres


n
premier plus petits que pn donc f −1 (n) ≈ ln(n) ≈le nombre de nombres premier plus
petits que n.

Le théorème de raréfaction a été conjecturé par Gauss au début du XIX ième
siècle mais sa démonstration rigoureuse n’a été obtenue qu’à la fin du XIX ième
siècle (par De La Vallée-Poussin et Hadamard en 1896). Il n’est pas possible d’en
donner ici une démonstration simple cependant il est nécessaire de bien comprendre
toutes les implications de ce théorème en vu des applications que nous en ferons.
Le théorème 1.2.14 exprime qu’il est difficile de trouver (en cherchant au hasard) de
grand nombres premiers. Le tableau ci-dessous donne la probabilité P(an ∈ P) = de
trouver un nombre premier en tirant au hasard un nombre an ≈ n :

n 100 1000 10000 ... 108 1012


π(n) 25 168 1229 . . . 5 761 455 3.76 1010
n
ln(n)
21.714724 144.76483 1085.7362 . . . 5 428 681 3.619 1010
1
P(an ∈ P) ≈ ln(n)
25% 16.8% 12.3% ... 5.7% 3.7%

Ce fait est d’autant plus contraignant, quand on cherche à générer de grands


nombres premiers, qu’il n’existe pas de formule permettant de générer le nième
nombre premier ou même seulement un nombre premier d’une taille donnée. Pour

14
DUT Informatique Arithmétique Mathématiques

se faire une idée de la faiblesse de l’approximation du nième nombre premier donnée


par le théorème 1.2.14 on peut se référer au tableau suivant dans lequel pn = nième
nombre premier et p′n = n ln(n) + n(ln(ln(n)) − 1) qui est une approximation un peu
plus fine que celle du théorème 1.2.14 (mais aussi peu utile dans la recherche exacte
de nombres premiers) :

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

Il n’existe donc aucune formule permettant de calculer directement le nième


nombre premier ou même seulement un nombre premier aussi grand que l’on veut
. . . pour établir la liste de tous les nombres premiers (inférieur à un certain seuil) on
ne peut utiliser que l’algorithme d’Ératosthène :
' $
Le crible d’Ératosthène
•L = (2,3, . . . ,n)
•k = 2 √
tant que k ≤ n faire
éliminer tous les multiples de k de L;
k := le premier chiffre supérieur a k restant dans L;
fin faire

remarque: si k est le premier chiffre non souligné


√ et non barré son premier
multiple non déjà barré est k 2 , donc si k > n tous les chiffres restant non
barrés doivent être souligné et l’algorithme est terminé.
& %
Le théorème suivant explique pour quoi l’algorithme d’Ératosthène est inutili-
sable pour rechercher des nombres premiers de grande taille (plusieurs milliers de
chiffres).

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)).

Preuve : Il faut calculer le nombre d’opérations engendré par l’appel de l’al-


gorithme d’Ératosthène avec le paramètre n. L’ordre de grandeur de ce nombre est
P√n
donné par la série k=1 f (k) où f (k) est le nombre d’opérations effectuées lors d’une
étape de la boucle tant que . Lors de cette étape il y a n/k multiples de k inférieurs

15
DUT Informatique Arithmétique Mathématiques

à n à éliminer donc le nombre d’opérations est



n
X n √ 1
≈ n ln( n) = n ln(n)
k=1
k 2

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

Un autre résultat surprenant sur les nombres premiers est le suivant :


Théorème 1.2.16 La probabilité que deux nombres a et b choisis au hasard soient
premiers entre eux est π62 ≈ 60.8%.
Là encore il n’est pas possible de donner une démonstration rigoureuse de ce résultat
dans ce cours mais on peut en donner une euristique convaincante
Preuve : Il faut d’abord définir ce qu’est cette probabilité. Choisir au hasard
des nombres entiers signifie qu’on les tire au hasard avec une loi uniforme, mais cela
n’a de sens que dans un ensemble fini comme l’intervalle [1,n]. On va donc poser que
la probabilité que l’on cherche est la limite quand n → ∞ des probabilités de tirer
au hasard dans [1,n] deux nombres premiers entre eux :

lim P (PGCD(a,b) = 1|a,b ≤ n)


n→∞

Plus généralement on va considérer pk = P(PGCD(a,b) = k) pour k ∈ [1,n] alors on


a que la somme de ces probabilités est 1 :

p1 + p2 + · · · + pn + · · · = 1

Maintenant si PGCD(a,b) = d alors a et b sont des multiples de d donc a = kd


et b = ld. Si on admet que les 3 événements PGCD(a,b) = d a = kd et
1
b = ld sont indépendants alors on obtient que

P(PGCD(a,b) = d) = P([a = kd]et[b = ld]et[PGCD(k,l) = 1])


= P(a = kd) × P(b = ld) × PGCD(k,l) = 1)

or dans la division Euclidienne par d le nombre de multiples de d plus petit que n


est la partie entière de n/d et donc

E nd 1
P(a = kd) = P(b = ld) = ≈
n d
p1
et donc P(PGCD(a,b) = d) = P([a = kd]et[b = ld]et[PGCD(k,l) = 1]) ≈ d2
donc en
utilisant que la somme des pk vaut 1 on obtient :
 
1 1 1 1
p1 2
+ 2 + · · · + 2 ≈ 1 =⇒ p1 ≈ P∞ 1
1 1 n n=1 n2

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

Les nombres de Mersenne et la recherche de grands nombres premiers


sur ordinateurs Marin Mersenne(1588-1648) étudia les nombres premiers en par-
ticuliers ceux de la forme
Mp = 2p − 1, p ∈ N∗
Certains de ces nombres sont premiers

M2 = 3,M3 = 7,M5 = 31, . . . M127 = 1.701.1038

mais pas tous


M11 = 2047 = 23 × 89.
Mersenne trouva “presque” tous les Mp premiers jusqu’à p = 257 en ne faisant que
des calculs à la main! En fait il existe des méthodes pour tester la primalité des
nombres de la forme Mp sans tester tous les diviseurs inférieurs à Mp . Ces méthodes
peuvent être facilement programmées mais demandent beaucoup de temps pour être
exécutées. C’est pour cette raison que George Woltman (informaticien américain à la
retraite) à imaginé de distribuer (via internet) les calculs à des volontaires acceptant
de donner du temps de calcul de leur(s) machine(s) personnelle(s) (lorsqu’elles sont
inutilisées) : c’est le projet GIMPS (Great Internet Mersenne Prime Search)[5]. C’est
de cette manière qu’en 1998 un étudiant de 19 ans Roland Clarkson a découvert le
plus grand nombre premier connu à cette date :

M6 972 593 ≈ 4 102098959

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

pour les puissances prenons l’exemple e = 2 :


a2 = (b + kn)2 = b2 + 2bkn + k 2 n2 = b2 + (2bk + k 2 n)n
le cas général se démontre en utilisant la formule du binôme de Newton :
ae = (b + kn)e
Xe
= Cep be−p (kn)p
p=0
e
X
= be + Cep be−p (kn)p
p=1
e
X
= be + nk Cep be−p (kn)p−1
p=1
e ′
= b + nk

19
DUT Informatique Arithmétique Mathématiques

Exemple 1.3.4 Pour comprendre comment s’utilisent les règles de calculs de la


proposition précédente essayons de résoudre une équation toute simple :

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

Et les solutions sont de la forme x = 15 + 29k avec un paramètre k ∈ Z.

Il faudra bien retenir cette technique très importante pour le calcul de l’inverse
modulo n

Lemme 1.3.5 (inverse modulo n)


si a et n sont premiers entre eux alors il existe u ∈ Z tel que a × u ≡ 1 mod 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

Preuve : On peut immédiatement remarquer que si P GCD(a,n) = 1 et


PGCD(x,n) = 1 alors PGCD(a × x,n) = 1. Ceci signifie que la fonction
f : E −→ E = {a1 , . . . aΦ(n) }
x 7−→ ax
ne prend ses valeurs que parmi les Φ(n) entiers premiers plus petits que n (cet
ensemble est noté E et a1 = a ∈ E). Chacun de ces entiers ai étant premier avec n
on peut leur trouver un inverse modulo n, comme dit dans le lemme 1.3.5, à partir
d’identités de Bezout
PGCD(ai ,n) = 1 ⇐⇒ ∃ui ∈ Z, ai ui + kn = 1 =⇒ ai ui ≡ 1 mod n
d’où on obtient que
a × ai ≡ a × aj mod n =⇒ u1 a × ai ≡ u1a × aj mod n =⇒ ai ≡ aj mod n
c’est à dire que f permute les valeurs de l’ensemble E. Maintenant le résultat s’ob-
tient en faisant le produit des valeurs f (ai ) :
Φ(n) Φ(n) Φ(n) Φ(n) Φ(n)
Y Y Y Y Y
Φ(n)
ai = f (ai ) =⇒ a × ai = a ai ≡ ai mod n
i=1 i=1 i=1 i=1 i=1
QΦ(n) QΦ(n)
il reste à multiplier les deux membres par i=1 ui pour éliminer les facteurs i=1 ai
ensuite il reste aΦ(n) ≡ 1 mod n 
Exemple 1.3.9 On peut facilement vérifier le théorème de Fermat pour de petites
valeurs de n, par exemple dans le cas n = 7 :
a a2 a3 a4 a5 a6
1 1 1 1 1 1
2 4 1 2 4 1
3 2 6 4 5 1
4 2 1 4 2 1
5 4 6 2 3 1
6 1 6 1 6 1
Mais l’intérêt du théorème est justement de l’utiliser pour de grandes valeurs de
n, pour simplifier des calculs de puissances. Reprenons le calcul de 153100 mod 29
comme 153 et 29 sont premier entre eux et que Φ(29) = 28 on peut dire que 15328 ≡
1 mod n ce qui permet de réduire déjà pas mal le calcul :
153100 ≡ 15328×3+16 ≡ (15328 )3 × 15316 ≡ (1)3 × 15316 ≡ (23 )16 ≡ 248 mod 29
On peut alors recommencer avec 2, comme 2 et 29 sont premiers entre eux :
248 ≡ 228 × 220 ≡ 1 × 220 ≡ 220 mod 29
Calculer 220 de tête est envisageable et, se faisant, on tombera rapidement sur les
simplifications déjà vues :
220 = (210 )2 = 10242 ≡ (9)2 ≡ 81 ≡ 23 mod 29

22
DUT Informatique Arithmétique Mathématiques

Autre exemple le calcul de 171717 mod 10 se ramène à :

• Φ(10) = 10 × (1 − 1/2) × (1 − 1/5) = 4


• 174 ≡ 1 mod 10 (vérifier)
• 1717 = 4 × 429 + 1 =⇒ 171717 = (174 )429 × 17 ≡ 17 ≡ 7 mod 10
La réciproque du théorème de Fermat n’est pas vraie, mais le théorème suivant
permet de résoudre partiellement le problème.
Théorème 1.3.10 (de l’ordre) Soient a et n deux entiers premiers entre eux. On
appelle ka ∈ N∗ le plus petit entier tel que
aka ≡ 1 mod n
alors
ka |Φ(n)
et
ak ≡ 1 mod n =⇒ ka |k
Preuve : si ak ≡ 1 mod n et que ka ∤ k alors soit r le reste de la division
Euclidienne de k par ka :
k = ka × q + r avec 0 ≤ r < ka =⇒ 1 ≡ ak = (aka )q × ar ≡ ar mod n
donc r est une solution plus petite que ka . 
Le petit théorème de Fermat est la source d’un test de non-primalité très efficace :
le test de Fermat. L’idée de Pierre de Fermat est que pour un nombre n ≥ 3 composé

 
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

Preuve : On rappelle que le choix de a peut être considéré comme le tirage


d’un nombre au hasard entre 1 et n, donc la probabilité que a et n soit premiers
entre eux est
6
P(Aa,n ) = ≈ 60,8% avec Aa,n = “ a et n sont premiers entre eux”
π2

si n passe le test de Fermat pour un certain a alors a et n doivent être premiers


entre eux car :

an−1 ≡ 1 mod n ⇐⇒ ∃k ∈ Z, a × an−2 − n × k = 1 =⇒ PGCD(a,n) = 1

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 :

P(Fn,k |Pn ) = 1 et P(Pn ∩ Fn,k ) = P(Fn,k |Pn )P(Pn ) = P(Pn )

ce qui permet d’évaluer la probabilité qu’un nombre n quelconque (premier ou pas)


passe k fois le test de Fermat :
 k
6
P(Fn,k ) = P(Pn ∩ Fn,k ) + P(Pn ∩ Fn,k ) ≤ P(Pn ) + P(Pn ) 1 − 2
π

on en déduit la probabilité qu’un nombre n qui passe k fois le test de Fermat soit
premier est :

P(Pn ∩ Fn,k ) P(Pn ) 1


P(Pn |Fn,k ) = ≥ k = 
P(Fn,k ) 6 P(Pn ) 6 k
P(Pn ) + P(Pn ) 1 − π2 1+ P(Pn )
1− π2

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

1.3.2 Le Théorème Chinois


Pour comprendre le fonctionnement de plusieurs crypto-systèmes nous aurons
besoin de résoudre des systèmes d’équations aux congruence. Dans le cas général,
ce type de problème est très compliqué à résoudre. Nous allons seulement nous
intéresser aux cas les plus simples. La théorie de ces systèmes d’équations repose sur
le Théorème Chinois :

Théorème 1.3.12 (Théorème Chinois) Soient m1 ,m2 , . . . mk ∈ N∗ et a1 ,a2 , . . . ak ∈


Z et le système d’équations :


 x ≡ a1 mod m1

 x ≡ a2 mod m2
(E) ⇐⇒ .. ..


 . ≡ .
 x ≡ ak mod mk

• si (E) possède une solution x0 alors il en possède une infinité données par la
formule :

x = x0 + k × PPCM(m1 ,m2 , . . . mk ) ⇐⇒ x ≡ x0 mod PPCM(m1 ,m2 , . . . ,mk )

• si m1 ,m2 , . . . mk sont premiers entre eux (PGCD(m1 ,m2 , . . . ,mk ) = 1) alors il


existe une solutionQ x0 , cette solution s’obtient à partir d’une identité de Bezout
entre les Mi = i6=j mj par

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

donc x − x0 est un multiple du PPCM(m1 , . . . ,mk ) = m1 × · · · × mk . Ensuite il faut


trouver la solution particulière dans le cas où les mi sont premiers entre eux. Dans
ce cas les Mi sont aussi premiers entre eux donc on doit avoir une identité de Bezout
u1 M1 + u2 M2 + . . . uk Mk = 1 en particulier

1 ≡ u1 M1 mod m1 car seul M1 n’est pas divisible par m1


≡ u2 M2 mod m2 car seul M2 n’est pas divisible par m2
...
≡ uk Mk mod mk car seul Mk n’est pas divisible par mk

25
DUT Informatique Arithmétique Mathématiques

donc x0 = a1 u1M1 + a2 u2 M2 + . . . ak uk Mk est bien une solution particulière car

x0 ≡ a1 u1 M1 ≡ a1 mod m1 car seul M1 n’est pas divisible par m1


≡ a2 u2 M2 ≡ a2 mod m2 car seul M2 n’est pas divisible par m2
...
≡ ak uk Mk ≡ ak mod mk car seul Mk n’est pas divisible par mk


Regardons ce que donne concrètement le théorème Chinois dans le cas d’un
système de 2 équations :

Exemple 1.3.13 Résoudre

x ≡ 5 mod 17
x ≡ 8 mod 29

il faut résoudre

17 × k1 − 29 × k2 = 3

on en déduit une identité de Bezout :

17 × 12 + 29 × (−7) = 1

comme 1|3 il y a des solutions en multipliant par 3 on obtient une solution

17 × 36 + 29 × (−21) = 3

donc x0 = 36 × 17 + 5 = 21 × 29 + 8 = 617 et

x0 ≡ 617 ≡ 124 mod 493

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

donc x − x0 est divisible par PPCM(m1 ,m2 ) et

x = x0 + kPPCM(m1 ,m2 ), k∈Z

• Trouver une solution particulière :


traduire les congruences en égalités dans Z :

x = a1 + m1 × k1 k1 ∈ Z
(E) ⇐⇒
x = a2 + m2 × k2 k2 ∈ Z

en éliminant x entre les deux équations on obtient une équation Diophantienne

a1 + m1 × k1 = x = a2 + m2 × k2 ⇒ m1 × k1 + m2 × (−k2 ) = a2 − a1

on est ramené à chercher les solutions (x1 ,x2 ) ∈ Z2 de

m1 x1 + m2 x2 = a2 − a1

• si PGCD(m1 ,m2 ) ∤ a1 − a2 alors le système n’a pas de solution :


• sinon le système à des solutions pour les trouver :
– on cherche une identité de Bezout pour m1 et m2 :

m1 × u1 + m2 × u2 = PGCD(m1 ,m2 )

– en multipliant par (a2 − a1 )/PGCD(m1 ,m2 ) on obtient une égalité:

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

si on prend deux équations du système


 
x ≡ ai mod mi x = ai + mi × ki ki ∈ Z
⇐⇒
x ≡ aj mod mj x = aj + mj × kj kj ∈ Z
on doit avoir que mj × kj − mi × ki = ai − aj et on obtient une condition nécessaire :
∀i,j = 1,2 . . . k, PGCD(mi ,mj )|ai − aj
mais cette condition ne dit pas comment trouver une solution particulière. La seule
manière générale d’y arriver est de résoudre les 2 premières équations

x ≡ a1 mod m1
x ≡ a2 mod m2
ce qui donne une nouvelle équation x ≡ x1 mod PPCM(m1 ,m2 ) puis recommencer
avec la troisième équation :

x ≡ x1 mod PPCM(m1 ,m2 )
x ≡ a3 mod m3
et ainsi de suite . . . un exemple pour comprendre :
Exemple 1.3.14 Résoudre
x ≡ 5 mod 17
x ≡ 8 mod 29
x ≡ 11 mod 9

on a déjà obtenu pour les deux premières équations que


x ≡ 617 ≡ 124 mod 493
ensuite il faut donc résoudre
x ≡ 124 mod 493
x ≡ 11 mod 9

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

1.4 L’ensemble Z/nZ


1.4.1 Structure d’anneau et de corps
Dans le chapitre sur l’algèbre linéaire nous avons vu un certain nombres de
méthodes générales de calculs (pivot de Gauss) permettant de résoudre de nom-
breux problèmes d’apparence différents. Ces méthodes sont les mêmes quelque soit
le corps de nombres que l’on utilise : généralement les réels (R) parfois les com-
plexes (C). Dans cette partie nous allons découvrir que l’arithmétique nous permet
de construire des corps de nombres finis, c’est à dire contenant un nombre fini
d’éléments contrairement à R ou C.
Définition 1.4.1 On appelle Z/nZ l’ensemble {0,1,2, . . . ,n − 1} que l’on munit des
deux opérations internes suivantes :
• l’addition définie par :

∀a,b ∈ Z/nZ, a + b = (a + b mod n)

• la multiplication définie par :

∀a,b ∈ Z/nZ, a × b = (a × b mod n)

dans la pratique on retiendra que :

faire des calculs dans Z/nZ ⇔ calculer des congruences


en enlevant mod n et en remplaçant ≡ par =
Exemple 1.4.2 quelques exemples de calculs simples :
• Pour Z/3Z = {0; 1; 2} on a

+ 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

• par contre pour Z/4Z = {0; 1; 2; 3} on a

+ 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

• exemple de calcul dans Z/7Z :

3 × 52 + 2 × 5 − 3 = 3 × 4 + 3 + 4
= 5+0
= 5

29
DUT Informatique Arithmétique Mathématiques

Étant donné la définition de Z/nZ les opérations + et × possèdent au minimum


les propriétés des opérations + et × dans Z.

Proposition 1.4.3 On a les propriétés suivantes :


• L’opération + est commutative, associative et possède un élément neutre 0.
• l’opération × est commutative, associative et possède un élément neutre 1.
• × est distributive par rapport à + dans Z/nZ
• tout a ∈ Z/nZ possède un opposé (symétrique pour +), noté −a, vérifiant :

−a ≡ (n − a) mod n

Z/nZ a une structure d’anneau commutatif.

Preuve : on peut repasser par les définitions de + et × en termes de congruences


pour vérifier chacune des affirmations de la proposition :
• par exemple pour l’addition on a :
– a + b = b + a dans Z donc a + b ≡ b + a mod n et donc a + b = b + a dans
Z/nZ
– (a + b) + c = a + (b + c) dans Z donc (a + b) + c ≡ a + (b + c) mod n et
donc (a + b) + c = a + (b + c) dans Z/nZ
– a + 0 = 0 + a = a dans Z donc a ≡ a + 0 ≡ 0 + a mod n et donc
a + 0 = 0 + a = a dans Z/nZ
• par exemple pour la multiplication on a :
– a × b = b × a dans Z donc a × b ≡ b × a mod n et donc a × b = b × a dans
Z/nZ
– (a × b) × c = a × (b × c) dans Z donc (a × b) × c ≡ a × (b × c) mod n et
donc (a × b) × c = a × (b × c) dans Z/nZ
– a × 1 = 1 × a = a dans Z donc a ≡ a × 1 ≡ 1 × a mod n et donc
a × 1 = 1 × a = a dans Z/nZ
• pour l’opposé : (n−a)+a = n+(−a+a) = n+0 ≡ 0 mod n donc n−a ∈ Z/nZ
est l’opposé de a

Comme toujours le problème vient de l’existence d’un symétrique pour la mul-
tiplication.

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

a×u = 1 dans Z/nZ alors a×u ≡ 1 mod n =⇒ ∃k ∈ Z, au = 1+kn =⇒ au+n(−k) = 1

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 :

au + nv = 1 ⇐⇒ au ≡ 1 mod n ⇐⇒ u = a−1 dans Z/nZ

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

Les éléments inversibles forment un sous ensemble important de Z/nZ :

Définition 1.4.6 (éléments inversibles de Z/nZ )


On notera (Z/nZ)∗ l’ensemble des éléments inversibles dans Z/nZ :

(Z/nZ)∗ = a ∈ Z/nZ | ∃a−1 ∈ Z/nZ, a × a−1 = 1

on a Card ((Z/nZ)∗ ) = Φ(n).

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

Proposition 1.4.7 soit x ∈ (Z/nZ)∗ et a,b ∈ N alors :


• x0 = 1 l’élément neutre de ×,
• (−x)a = (−1)a × (xa ),
• (−x)−1 = −(x−1 ),
• (xa )−1 = (x−1 )a qu’on pourra noter x−a ,
• xa−b = xa × x−b

Preuve : Par abus de notation on confond x ∈ Z/nZ et sont “représentant”


dans x ∈ Z :
• pour a > 0 dans Z on a x0 × xa = x0+a = xa = xa+0 = xa × x0 ce qui reste
vrai mod n et donc aussi dans Z/nZ, x0 est donc bien l’élément neutre de ×
d’où x0 = 1.
• la relation (−x)a = (−1)a × (xa ) étant vraie dans Z et reste vraie en mod n
et donc dans Z/nZ,
• si x est premier avec n alors −x(= n − x mod n) est aussi premier avec n et
on peut chercher l’inverse de −x. ensuite on joue sur la commutativité de ×
pour montrer que −(x−1 ) est l’inverse de −x :

−(x−1 ) × (−x) = (−1) × (x−1 ) × (−x) = (x−1 ) × (−1) × (−x) = (x−1 ) × x = 1

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 :

(x−1 )a × xa = (x−1 × x) × . . . (x−1 × x) = 1 × · · · × 1 = 1

• plus difficile à comprendre, on le fait par récurrence sur b : pour n = 1 on a


l’implication évidente (multiplier l’équation de gauche par x−1 :

x × xa−1 = xa =⇒ xa−1 = xa × x−1

pour passer de b à b + 1 on fait de même en utilisant en plus l’hypothèse de


récurrence

x × xa−b−1 = xa−b =⇒ xa−b−1 = xa−b × x−1 = xa × x−b × x−1 = xa × x−b−1


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 :

Proposition 1.4.8 On considère l’équation a × b = 0 dans Z/nZ alors :


• si n est premier alors a × b = 0 =⇒ a = 0 ou b = 0
• si n est composé alors ∃a,b ∈ Z/nZ \ {0}, a × b = 0, a et b sont appelés des
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

1.4.2 Polynômes et résidus quadratiques


Nous aurons besoin du théorème suivant valable dans n’importe quel corps de
nombre K.

Théorème 1.4.10 Soit un polynôme P (x) = ak X k + · · · + a0 ∈ K[X] de degré k


alors P possède au plus k racines dans K

Pour le démontrer on a besoin du lemme suivant :


Lemme 1.4.11 pour tout a,b

an − bn = (a − b)(an−1 + an−2 b + · · · + abn−2 + bn−1 )

Preuve : le lemme est très simple à démontrer :

(a − b)(an−1 + an−2 b + · · · + abn−2 + bn−1 )


= an + an−1 b + · · · + a2 bn−2 + abn−1
− an−1 b − an−2 b2 − · · · − abn−1 − bn
= an − bn

ensuite le théorème se démontre par récurrence sur le degré k du polynôme :

• on pose Pk : { un polynôme de degré k à au plus k racines }


• rang initial k = 1 : P (X) = a1 X + a0 = 0 =⇒ X = −a−1 1 a0 si a1 est inversible
sinon il n’y a pas forcément de solution. Donc il y a bien au plus une solution.
• passage de Pk ⇒ Pk+1 :
soit P n’a aucune racine sinon on en a une r et en utilisant que P (r) = 0 et
que xi − r i se factorise par x − r et un polynôme de degré i − 1 on a alors
k
X
P (X) = P (X) − P (r) = ai (X i − r i ) = (X − r)Q(X)
i=0

avec Q un polynôme de degré k − 1 qui a donc au plus k − 1 racine. Au total


P a au plus k racine.


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.

Preuve : on travaille comme avec les nombres réels :

x2 = 1 ⇐⇒ x2 − 1 = 0 ⇐⇒ (x − 1)(x + 1) = 0

comme il n’y a pas de diviseurs de 0 on a

[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


Exemple 1.4.15 Il y a bien 6 carrés dans Z/11Z qui sont 0; 1; 4; 9; 5; 3. La


formule ne marche pas dans Z/15Z où il n’y a que 6 carrés 0; 1; 4; 6; 9; 10.

Le théorème suivant permet de tester si un x donné est un carré ou pas (sans


calculer les carrés de tous les éléments de Z/nZ).

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

Théorème 1.4.18 (Symbole de Legendre)


Soient n > 2 premier et x ∈ Z alors on définit le symbole de Legendre par :

 n−1
 0 si n|x
x
n
= x 2 = 1 si x est un carré mod n

−1 si x n’est pas un carré mod n
  y
le symbole de Legendre est multiplicatif : ∀x,y ∈ Z, xyn = x
n n .

Preuve : On commence par se ramener à x ∈ Z/nZ, en particulier si n|x on


n−1 n−1
est ramené à calculer x 2 = 0 2 = 0. Ensuite comme xn−1 = 1 (petit théorème de
n−1
Fermat on a que x 2 est une racine carrée de1 donc vaut ±1 selon que x est uncarré

n−1 n−1 n−1
ou pas. La dernière égalité vient juste de xy
n
= (xy) 2 = (x) 2 (y) 2 = nx ny .

Lemme 1.4.19 (résidus minimaux)
Si on appelle résidu minimal de x modulo n le plus petit entier congru à x dans
l’intervalle ] − n−1
2
; n−1
2
] alors nx = (−1)µ où

µ = nombre de résidu minimaux< 0 dans {x; 2x; 3x; . . . n−1


2
x}
Preuve : On commence par écrire que
 
n−1
x; 2x; 3x; . . . x = {−s1 ; −s2 ; . . . ; −sµ ; r1 ; r2 ; . . . r n−1 −µ }
2 2

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

Preuve : il faut donc compter le nombre de résidus minimaux < 0 dans


{2; 4; 6; . . . n − 1} = {2; 4; 6; · · · − 3; −1}

il sont donc positifs si 2x ≤ n−1
2
donc il y a au plus
 n−1 E n−1
4
résidus positifs (partie
n−1
entière de 4 ). Si n ≡ 1 mod 4 alors E  4 = 4 et µ = 2 − n−1
n−1 n−1
4
= n−1
4
.
n−1 n−3 n−1 n−3 n+1
Par contre si n ≡ 3 ≡ −1 mod 4 E 4 = 4 et µ = 2 − 4 = 4 .

Il ne reste plus à remarquer que :


 n−1 n+1
n2 − 1 n+1n−1 2 4
si n ≡ −1 mod 4
=2 = n+1 n−1
8 4 4 2 4
si n ≡ 1 mod 4

à donc la même parité que E n−1 4
ce qui permet d’écrire que :
( n−1 n+1
µ n2 −1 (−1) 2 4 si n ≡ −1 mod 4
(−1) = (−1) 8 = n+1 n−1
(−1) 2 4 si n ≡ 1 mod 4


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

ensuite on peut calculer si 2 est un carré modulo 5 en utilisant la définition :


 5−1
2
5 = 2
2 = 22 = 4 = −1
ou le théorème 1.4.20 :
 52 −1
2
5
= (−1) 8 = (−1)24 = 1
dans tous les cas 5 n’est pas un carré dans Z/86477Z!
• Par contre 10 est un carré dans Z/86477Z car en utilisant le fait que le symbole
de Legendre est multiplicatif on obtient :
10
  
n
= n2 n5 = (−1) × (−1) = 1

37
DUT Informatique Arithmétique Mathématiques

1.4.3 Générateurs de Z/nZ


Les puissances successives d’un élément de Z/nZ jouent un rôle très important
(comme dans le chapitre précédent).

Définition 1.4.23 Un a ∈ (Z/nZ)∗ est générateur de (Z/nZ)∗ si et seulement si


les puissances successives de a permettent de générer tous les éléments de (Z/nZ)∗ :

(Z/nZ)∗ = ak |k = 1, . . . ,Φ(n)

Pour qu’un élément soit générateur de Z/nZ on a une condition nécessaire :

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.

Preuve : Les puissances successives de a se répètent forcément au bout de la


ième
n au maximum puisqu’il n’y a que n − 1 valeurs différentes dans (Z/nZ)∗ . Si
n−1 n+1
a 2 = 1 alors a 2 = a donc les valeurs se repètent au bout de seulement n+1 2
n−1

valeurs et a ne peut générer (Z/nZ) donc a 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 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12


1 1 1 1 1 1 1 1 1 1 1 1
2 4 8 3 6 12 11 9 5 10 7 1
3 9 1 3 9 1 3 9 1 3 9 1
4 3 12 9 10 1 4 3 12 9 10 1
5 12 8 1 5 12 8 1 5 12 8 1
6 10 8 9 2 12 7 3 5 4 11 1
7 10 5 9 11 12 6 3 8 4 2 1
8 12 5 1 8 12 5 1 8 12 5 1
9 3 1 9 3 1 9 3 1 9 3 1
10 9 12 3 4 1 10 9 12 3 4 1
11 4 5 3 7 12 2 9 8 10 6 1
12 1 12 1 12 1 12 1 12 1 12 1
les générateurs de (Z/nZ)∗ sont donc a = 2; 6; 7; 11 alors que a = 2; 5; 6; 7; 8; 11
vérifient le critère (−1 = 12 dans Z/13Z) :

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.

message original = 1011011010000111 . . .



texte prêt à coder = 1011 0110 1000 0111 . . .

| {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

Pour comprendre prenons un exemple. Si l’on a la texte Un exemple !

46 13 75 4 23 4 12 15 11 4 80

Pour découper ce texte en groupe de 4 caractères il faut qu’il ait un nombre de


caractères multiple de 4, quitte à ajouter des espaces (caractère 75) à la fin. Ici le
texte n’ayant que 11 caractères on ajoute un espace pour obtenir :

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):

20137504 23041215 11048075

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).

Fig. 1.2 – Table des caractères ASCII

40
DUT Informatique Arithmétique Mathématiques

1.5.2 Les principes de la cryptographie moderne


Maintenant nous pouvons expliquer en quoi consiste le chiffrement d’un tel texte.
Le chiffrement repose sur plusieurs règles
• La modification de l’alphabet utilisée (par exemple : le a est systématiquement
remplacé par la lettre u, le b par m etc. . . )
• un mélange des caractères ( par exemple : écrire chaque bloc de texte codé de
droite à gauche au lieu du sens habituel)
• le tout doit dépendre d’une information simple la clé permettant le chiffrement
ou le déchiffrement.
Un exemple pour illustrer qu’il est nécessaire de combiner ces 3 règles pour
obtenir un chiffrement le code de César. Ce code consister à décaler les lettres de
l’alphabet d’un certain rang a. Par exemple pour a = 3 on a la table de conversion
suivante :

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 ...

on crypte donc un texte en décalant les lettres de 3 rangs :


un exemple simple ---> xq hahpsoh vlpsoh
Du point de vue mathématique on travaille avec un alphabet de 26 lettres, on
peut donc se ramener à manipuler des éléments de Z/26Z ( a->0, b->1, . . . ) et
dans ce cas la fonction de chiffrement qui à x (le code d’une lettre) associe f (x) (sont
équivalent chiffré) est très simple à écrire : f (x) = x + a. Elle est donc entièrement
définie par la donnée a qui est la clé du cryptosystème. Déchiffrer un texte nécessite
de pouvoir inverser la fonction f c’est à dire calculer la fonction g telle que :

f (x) = y ⇐⇒ x = g(y) = f −1 (y)

Dans le cas du code de César l’équation f (x) = x + a est très simple à inverser :

f (x) = x + a = y ⇐⇒ x = y − a = g(y) = f −1 (y)

Ce crytosystème n’assure pas de grande sécurité. En effet si on code un texte assez


long on pourra chercher la lettre apparaissant le plus fréquemment et identifier par
quelle lettre est remplacé le e ce qui permet de déterminer la valeur de a et de
décoder tout le texte. Il s’agit d’une attaque “statistique” du cryptosystème.

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.

Fig. 1.3 – la machine ENIGMA

42
DUT Informatique Arithmétique Mathématiques

Un système complexes de rotors permet d’associer à une lettre frappée sur le


clavier à une autre lettre. C’est la position des rotors au début de la frappe du
texte qui détermine les règle de conversions : c’est donc la clé du cryptosystème.
S’il l’on veut déchiffrer un message intercepté sans aucune autre information alors
il faut essayer chacune des clés possibles! La sécurité du système reposait donc sur
le nombre de clés différentes à tester (contrairement au code de César) car sur les
machines Enigma on pouvait chiffrer un texte selon 1016 combinaisons différentes !

...

Fig. 1.4 – Fonctionnement d’ENIGMA : la clé (privée) est déterminée par la position
initiale des rotors

C’est un mathématicien polonais de 27 ans, Marian Rejewski, qui trouvera dès


les années 30 une première manière de trouver rapidement la clé, idées qui seront
ensuite développées sous la direction d’Alan Turing à Bletchley Park, un manoir
proche de Londres où se sont retranchés tous les cryptologues et mathématiciens
alliés, et qui permettrons de casser tout le système cryptographique de l’armée nazi.

Pour appliquer ces règles (en particulier le changement d’alphabet), à un texte


codé sous forme d’une suite de chiffres, il est très pratique d’utiliser des fonctions
arithmétiques telles que l’élévation à la puissance modulo n. En effet le comporte-
ment irrégulier (mais totalement déterministe) de ces fonctions semble totalement
aléatoire!Dans la suite nous allons voir qu’il existe 2 grands types de cryptosystèmes :
cryptosystème à clé privée : le chiffrement et le déchiffrement reposent sur la
connaissance d’une même clé qui doit rester secrète pour conserver la sûreté
du cryptosystème,
cryptosystème à clé publique : le chiffrement repose sur une méthode publique
(accessible à tous) mais le déchiffrement repose sur la connaissance d’une clé
secrète.

43
DUT Informatique Arithmétique Mathématiques

1.5.3 Cryptosystème à clé symétrique : Le DES


Le DES (data encryption system) est l’exemple type des cryptosystèmes à clé
privée. Dans une version très simplifiée le principe de l’algorithme DES consiste à
répéter un grand nombre de fois une opération très simple (que l’on peut inverser)
qui “mélange” peu à peu les bits d’un document. L’opération de base s’appelle La
méthode de Feistel (cf. figure 1.5) et consiste à échanger/combiner deux groupes
de bits adjacents. Étant donné une fonction f : Z/nZ −→ Z/nZ, (pas forcément
bijective) la fonction de chiffrement sera définie par :

(A,B) 7−→ (B,A + f (B))


chiffrement

Il est alors très facile de décoder en utilisant les formules suivantes

(A′ ,B ′ ) 7−→ (B ′ − f (A′ ),A′ )


déchiffrement

en effet on peut vérifier que

(A,B) 7−→ (B,A + f (B)) 7−→ (A + f (B) − f (B),B) = (A,B)


chiffrement déchiffrement

Chiffrement=“tour” Déchiffrement=“anti-tour”

A B C D

R R

B A + f (B)
D − f (C) C

Fig. 1.5 – La méthode de Fiestel


Le DES consiste à répéter de nombreuses fois de suite la méthode de Fiestel avec
différentes fonctions à chaque fois (cf. figure 1.6), ce qui complique la recherche de
clés pour quelqu’un qui voudrait déchiffrer le message sans y être autorisé. La clé
secrète est donc la suite de fonctions fj : Z/nZ −→ Z/nZ, j = 1, . . . k. Dans la
pratique, chacune de ces clés peut se ramener à un entier dans Z/nZ (de grande
taille). On peut facilement implémenter cet algorithme en prenant des fonctions du
type :
fj (x) = xaj mod n =⇒ (a1 , . . . ,ak ) = clé secrète
dont le comportement “aléatoire” permettra d’obtenir un chiffrement de bonne qua-
lité.

44
DUT Informatique Arithmétique Mathématiques

chiffrement privé déchiffrement privé

message clair = 1011011010000111 . . . message chiffré = 0100010110101001 . . .

/ ?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 . . .

Fig. 1.6 – Le cryptosystème DES

1.5.4 Cryptosystème à clé asymétrique : le RSA


Au contraire du DES, le RSA est un cryptosystème à clé publique. La clé d’un
tel cryptosystème est un triplet d’entiers (n,e,d) qui doit être généré de la manière
suivante :
• générer aléatoirement deux nombres premiers (distincts) p et q
– calculer n = p × q
– calculer Φ(n) = (p − 1) × (q − 1)
• générer aléatoirement un nombre e premier avec Φ(n)
– calculer d tel que e × d ≡ 1 mod Φ(n)
Au final les parties publiques et privées de la clé et les fonctions de chiffre-
ment/déchiffrement s’obtiennent de la manière suivante :

(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

chiffrement publique déchiffrement privé

message clair = 1011011010000111 . . . message chiffré = 0100010110101001 . . .

/ ?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 . . .

Fig. 1.7 – Le cryptosystème RSA

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 :

Preuve : Il faut montrer que

∀ x ∈ [0,n − 1], f (f −1 (x)) = f −1 (f (x)) = xed ≡ x mod n.

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

xΦ(n) = (xp−1 )q−1 ≡ 1q−1 ≡ 1 mod p

et
xΦ(n) = (xq−1 )p−1 ≡ 1p−1 ≡ 1 mod q
le théorème Chinois permet alors de conclure que

xΦ(n) ≡ 1 mod pq.

ce qui donne

xe×d = x1+k×Φ(n) = x × (xΦ(n) )k ≡ x mod n

• PGCD(x,q) 6= 1 dans ce cas on a toujours

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 :

• décomposer n en 2 facteurs premiers p × q


• Calculer Φ(n) = (p − 1) × (q − 1)
• Calculer une identité de Bezout e × d + k × Φ(n) = 1 pour obtenir d

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

L = log(n) ≈ nombre de chiffres en écriture décimale

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

Fig. 1.8 – Comparaison des complexités des différents algorithmes

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

1.5.5 Protection des cartes bancaires


Que se passe-t-il lorsqu’on introduit sa carte bleue dans un distributeur auto-
matique ou un terminal de paiement chez un commerçant? Ce système 2 repose sur
plusieurs protocoles cryptographiques bien plus complexes que ne le laisse imaginer
la simple saisie de votre code personnel à 4 chiffres . . .
La carte à puce française est une sorte de petit ordinateur, elle possède :

• un processeur (assez peu puissant) qui permet d’effectuer des calculs


• une mémoire “vive” pour enregistrer l’historique des transactions
• une mémoire “morte” où sont stockées les informations nécessaires à l’authen-
tification et au chiffrement des données (dont une partie est en lecture seule
et l’autre en lecture caché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) :

• Tout commence par l’authentification de la carte qui repose sur le système


RSA : une valeur de signature V S a été calculée lors de la fabrication de la
carte à partir d’informations relatives au propriétaire (nom, numéro de carte,
date de validité . . . ) d’un fonction de hachage (voir chapitre suivant) et de
(S,N) la partie secrète de la clé RSA associée à la carte à partir de la formule :

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 .

L’affaire Humpich En 1998, Serge Humpich a fabriqué (à partir de pièces en


vente libre) une fausse carte bancaire capable de passer les contrôles d’un terminal
de paiement. C’est ce qu’on a appelé “l’affaire Serge Humpich” qui a fait la une des
journaux pendant quelques semaines. En fait Serge Humpich n’avait contourné que
deux des trois systèmes de sécurité :

• à 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

factoriser le N, à calculer la clé secrète S et à en déduire la valeur de signature


V S de la carte!
• Il ne lui restait plus qu’à fabriquer une ”yes card” c’est à dire une carte à puce
qui répond OK au premier protocole d’identification du porteur de la carte
quelque soit le code à 4 chiffre saisit au terminal (c’est possible puisque cette
vérification est faite sur le processeur de la carte, il suffit donc de modifier
l’opération de contrôle qui est codée sur cette puce) et à partir de là il pouvait
cloner la carte bancaire en utilisant la valeur de signature V S calculée (pour
un coût faible car un graveur de carte à puce vaut 50 Euros et une carte vierge
s’achète dans les 15 Euros).

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

1.6 Autres Applications


1.6.1 les fonctions de Hachage
Définition 1.6.1 Une fonction de Hachage est une fonction qui prend en entrée un
texte (de longueur quelconque) et renvoie un nombre dans Z/nZ, appelé empreinte,
de telle sorte qu’étant donné une empreinte il soit très difficile de trouver un texte
ayant cette empreinte.

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 :

∃x,y ∈ N, x 6= y et f (x) = f (y)

Étant donné une fonction de hachage, trouver deux textes ayant la même empreinte
s’appelle trouver une collision.

Puisqu’il y a plus de n textes différents dans l’ensemble de départ la fonction ne


peut être injective. L’intérêt d’une fonction de hachage est que lorsque l’on change
ne serait ce qu’un seul caractère du texte son empreinte est complètement modifiée.
Prenons l’exemple de la fonction md5 (nommée ici md5sum), l’empreinte d’un texte
simple est donnée ci-dessous sous forme hexadécimale (128 bits → 32 chiffres en base
16 car 24 = 16 et 128 = 32 × 16) :

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.

1.6.2 Codes correcteurs d’erreurs


Voir exercice de TD.

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 :

remarque : on commence par initialiser certaines valeurs (sur 64 bits) :


r[0..15] := 7,12,17,22,7,12,17,22,7,12,17,22,7,12,17,22
r[16..31] := 5,9,14,20,5,9,14,20,5,9,14,20,5,9,14,20
r[32..47] := 4,11,16,23,4,11,16,23,4,11,16,23,4,11,16,23
r[48..63] := 6,10,15,21,6,10,15,21,6,10,15,21,6,10,15,21
h0 := 0x67452301; h1 := 0xEF CDAB89; h2 := 0x98BADCF E; h3 := 0x10325476
a := h0; b := h1; c := h2; d := h3
remarque : MD5 utilise des sinus d’entiers pour ses constantes
pour i = 0 jusqu’à 63 faire
k[i] := f loor(abs(sin(i + 1)) × 232 )
fin faire
pour chaque bloc w de 512 bits du message W faire
pour i = 0 jusqu’à 63 faire
si 0 ≤ i ≤ 15
alors f := (b ∧ c) ∨ ((¬b) ∧ d); g := i
sinon si 16 ≤ i ≤ 31
alors f := (d ∧ b) ∨ ((¬d) ∧ c); g := (5 × i + 1) mod 16
sinon si 32 ≤ i ≤ 47
alors f := b ⊕ c ⊕ d; g := (3 × i + 5) mod 16
sinon si 48 ≤ i ≤ 63
alors f := c ⊕ (b ∨ (¬d)); g := (7 × i) mod 16
fin si
fin si
fin si
fin si
temp := d; d := c; c := b;
b := ((a + f + k[i] + w[g]) lef trotate r[i]) + b
remarque : leftrotate fait un décalage de r[i] bits vers la gauche
a := temp
fin faire
h0 := h0 + a; h1 := h1 + b; h2 := h2 + c; h3 := h3 + d
fin faire
& %
empreinte := (h0; h1; h2; h3)
54
DUT Informatique Arithmétique Mathématiques

1.7 Aspect historiques


Les éléments historiques cités ci-après proviennent essentiellement de [2] du très
bon livre [1].

1.7.1 l’arithmétique dans l’antiquité


Euclide : il vécu de -330 à -275 (environ) à Alexandrie. Il est considéré comme
le père des mathématiques moderne. Il rédigea Les éléments, synthèse exhaustive
des connaissances des mathématiques de son époque ou apparaissent clairement les
notions d’axiomes, définitions, démonstrations . . . . Les volumes VII, VIII et IX des
éléments sont consacrés à l’arithmétique et aux nombres premiers et il faudra près
de 20 siècles pour voir apparaı̂tre des progrès par rapport au travail d’Euclide!
Ératosthène : il naquit en -276 à Cyrène (Libye) et fit ses études de mathématiques
à Alexandrie et Athènes avant de devenir directeur de la grande bibliothèque d’Alexan-
drie et précepteur du fil du roi Ptolémé III. Outre le crible qui porte son nom il est
connu pour avoir calculé la circonférence de la Terre (≈ 40000 km) avec une extrême
précision pour les moyens de l’époque (mesure de la longueur de l’ombre d’un mat!!).
Devenu aveugle il se suicide vers -194.

1.7.2 Pierre de Fermat


Pierre de Fermat (1601-1665) est issu d’une famille bourgeoise aisée, il travaille
comme conseiller au parlement de Toulouse. Fermat semble contredire tous les clichés
sur les génies : il n’est pas précoce (il commence à s’intéresser aux mathématiques
après 30 ans), il travaille en amateur et ne s’intéresse pas à la publication de ses
résultats. C’est dans ses loisirs qu’il aime lire la traduction en latin des œuvres de
Diophante (III ième siècle après J-C) qu’il annote de démonstrations ou de générali-
sations. Ses communications avec les mathématiciens de son époque se limitent à
des échanges épistolaires avec Mersenne, Pascal, Huygens. C’est son fils qui publira
les annotations laissées par son père dans un livre, arithmetica, publié après sa mort.
On y trouve en particulier l’énoncé du grand théorème de Fermat:

l’équation an + bn = cn n’a pas de solution entières (a,b,c) 6= (0,0,0) si n ≥ 3

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.3 Marin Mersenne


Marin Mersenne (1588-1648) moine de l’ordre Minimes enseigne la philosophie
au couvent de l’Annonciade à Paris. Opposant à l’alchimie, l’astrologie et autres
sciences mystiques il défend les théories des grands scientifiques de l’époque (Des-
cartes, Galilée,. . . ) dont il traduit et diffuse les œuvres. Il fait une recherche exhaus-
tive des entiers p , compris entre 2 et 257, tels 2p − 1 soit premier et dont la liste
est : p = 2; 3; 5; 7; 13; 17; 19; 31; 61; 89; 107; 127. Il se trompa seulement pour
p = 67,257 (qui ne conduisent pas à des nombres premiers) et ne trouva pas ceux
correspondant à p = 61,89 et 107 8. Sans autre moyen que le calcul manuel il réussit
la factorisation 237 − 1 = 223 × 616318177. La popularité des nombres de Mersenne
vient de leur lien avec les nombres parfaits 9 cités dans la bible. Euclide à montré à
leur sujet que si 2p − 1 est premier alors 2p−1(2p − 1) est nombre parfait.

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.

On entend par cryptosystème à clé publique un système de chiffrement/déchiffre-


ment où le chiffrement reposerai sur une clé publique pouvant être divulguée (par
exemple dans un annuaire ouvert à tout le monde) le déchiffrement reposant quant
à lui sur une clé privée connue seulement de celui qui décode! Le risque de voir la
sécurité du cryptosystème mise à mal par un “transfuge” devient alors nulle. L’idée
d’un cryptosystème à clé publique est apparue dans les années 60. les agences de
renseignement Britannique focalisèrent leur efforts sur cette question vers 1969 (sous
l’impulsion de Ellis) et la solution, trouvée en 1973 (par un certain Cocks), resta
classée “secret défense”. C’est en 1977 que trois Américains (Rivest, Shamir et Adi)
ont proposés la première mise en œuvre d’un cryptosystème à clé publique : Le RSA.
Les Américains déposèrent un brevet et créèrent la société RSA security pour l’ex-
ploiter. Les Britannique ayant conservé tout le secret de leur découverte perdirent
donc leur avantage dans l’exploitation commerciale de cette découverte . . .

8. Quoique certains prétendent que la confusion entre p = 61 et p = 67 proviennent d’une


coquille dans le texte de Mersenne!
9. égaux à la somme de leurs diviseurs comme 6 = 1 + 2 + 3 ou 28 = 1 + 2 + 4 + 7 + 14.

56
DUT Informatique Arithmétique Mathématiques

1.7.5 RSA data-security


Comme nous l’avons vu dans ce cours, bien que la multiplication a.b de deux
nombres a et b constitue une opération simple, la factorisation, qui consiste à re-
trouver les nombres a et b à partir du produit a.b, peut se révéler très délicate, en
particulier lorsque a et b sont des nombres premiers de plusieurs dizaines de chiffres.
La sécurité du système de chiffrement RSA (du nom de ses concepteurs R. Rivest,
A. Shamir, L. Adleman) repose précisément sur cette difficulté puisqu’un message
codé selon ce principe ne peut être lu que si l’on connaı̂t une des clés, c’est-à-dire
l’un des nombres a ou b.

Afin de s’assurer que la longueur des clefs de chiffrement demeure suffisamment


grande pour garantir une sécurité optimale, les laboratoires RSA Security lancèrent
en 1991 des défis RSA en soumettant de grands nombres à factoriser. Ceux-ci ont
été baptisés RSA suivi du nombres de décimales correspondant. RSA-100, et RSA-
110, de 100 et 110 chiffres respectivement, furent par exemple les premiers nombres
RSA à être factorisés en 1991 et 1992. On pensait à la fin des années 70 qu’il faudrait
des millions d’années pour y parvenir. Mais de nouvelles méthodes (comme le crible
quadratique ou les cribles sur des corps de nombres généralisés) alliées à la puissance
de calcul accrue des ordinateurs ont changé la donne.
Pour encourager la recherche, une récompense était offerte à la première équipe
qui trouverait la factorisation d’un nombre RSA :
• 10 000 dollars pour une clé inférieure à 768 bits (n ≈ 1.553 10231 )
• ...
• 200 000 dollars pour des clés de 2048 bits (n ≈ 3.232 10616 ) .
Pour plus d’informations voir :http://www.rsa.com/rsalabs/node.asp?id=2094.
L’opération s’est arrêtée fin 2007, mais il reste encore de nombreux défis ouverts
. . . citons le nombre RSA-193 ou le monstre RSA-2048 pour lequel 200 000 dollars
étaient promis. Pour comprendre la complexité du problème examinons les moyens
mis en œuvre pour factoriser le RSA-155. Le 22 août 1999, une équipe du CWI
(Institut national de recherche en mathématiques et en science informatique d’Am-
sterdam) annonça qu’elle avait cassé une clé numérique de 512 bits (155 chiffres
décimaux) du système cryptographique RSA. Il s’agit de la factorisation d’un nombre
de 155 chiffres en deux nombres premiers de 78 chiffres :
10941 7386415705 2742180970 7322040357
6120037329 4544920599 0913842131 4763499842
8893478471 7997257891 2673324976 2575289978
1833797076 5372440271 4674353159 3354333897
=
10263959 2829741105 7720541965 7399167590
0716567808 0380668033 4193352179 0711307779
x
10660348 8380168454 8209272203 6001287867
9207958575 9892915222 7060823719 3062808643

57
DUT Informatique Arithmétique Mathématiques

Quelques détails technique sur le RSA-155 :


• Initialisation du calcul 9 semaines (sur une seule machine!)
• Calcul du système d’équations à résoudre (répartit sur 300 machines)
• Tri des équations pendant 1 mois (sur une seule machine encore) jusqu’à ob-
tenir le système d’équations à 6 699 191 lignes et 6 711 336 colonnes.
• Résolution du système d’équations sur un ordinateur CrayC916 durée 224heures,
espace disque: 2 gigaoctets .
• Simplification du résultat 39 heures.
La dernière factorisation en date est celle du RSA-200. Une équipe de la ”Bun-
desamt für Sicherheit in der Informationstechnik” (BSI, agence fédérale pour la
sécurité des techniques de l’information) a annoncé le 9 mai 2005 la factorisation
d’un nombre à 200 chiffres, connu sous le nom de RSA-200. Cette équipe s’était déjà
illustrée en décembre 2003 pour la factorisation d’un nombre à 174 chiffres (RSA-
174). La factorisation de RSA-200 trouvée par l’équipe allemande est la suivante:

2799783391 1221327870 8294676387 2260162107 0446786955


4285375600 0992932612 8400107609 3456710529 5536085606
1822351910 9513657886 3710595448 2006576775 0985805576
1357909873 4950144178 8631789462 9518723786 9221823983
=
3532461934 4027701212 7260497819 8464368671 1974001976
2502364930 3468776121 2536794232 0005854795 6528088349
x
7925869954 4783330333 4708584148 0059687737 9758573642
1996073433 0341455767 8728181521 3538140930 4740185467

1.7.6 Le bug du P*ntium


T. Nicely est professeur au Lynchburg College, en Virginie. Il travaille sur les
nombres premiers et cherche à obtenir des tables précises des nombres premiers
inférieurs à 1015 pour évaluer la validité de certaines conjectures (sur les écarts entre
2 nombres premiers consécutifs).

Pour faire ce travail il utilisa le réseau informatique de son université lorsque


celui-ci est peu ou pas utilisé (nuit, vacances . . . ) en distribuant les calculs sur une
centaine de machines : des PC équipés de “vieux” processeurs 486 ou du “flambant
neuf” Pentium.

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!

Juin-septembre 1994 : T. Nicely réécrit l’ensemble de ses programmes et les teste


un à un. Il est alors sûr de son programme et identifie le compilateur C de
Borland comme responsable de l’erreur de décompte.

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.

Le 24 octobre 1994 : Intel est prévenu. L’affaire commence. . .


. . . durant les mois qui suivirent le problème du Pentium a été décortiqué, et des
cas d’erreurs très simples ont été repérés. Si vous souhaitez tester votre machine le
pire cas d’erreur a été découvert par Tim Coe, de la Société Vitesses Semiconductors,
faite la division suivante :

1.333820449136... OK
4195835.0/3145727.0 =
1.333739068902... Pentium défectueux

L’erreur du Pentium est 10000 fois supérieure à celle d’une calculette


valant 50 francs : il ne s’agit pas d’une erreur normale d’arrondi.
Une analyse détaillée montre que c’est avec des nombres proches de l’unité que le
Pentium se trompe or ce sont ce type de divisions qui ont la plus grande probabilité
d’apparaı̂tre dans les calculs. Au total le Pentium se trompe avec une probabilité de
1/3000!

1.7.7 l’histoire de GNUPG


GNUPG est le premier logiciel libre publié donnant accès au moyens moderne
de cryptographie. Il est le fruit du travail d’un ingénieur informaticien et militant
pacifiste à ses heures : Philip R. Zimmermann (surnommé sur Internet “PRZ”).
C’est le 5 Juin 1991 que la version PGP 1.0 est diffusée en urgence sur des BBS
téléphoniques (l’ancêtre du réseau Internet) répartis dans tous les USA alors qu’un
projet de loi US menace d’interdire la cryptographie libre. Peu après, la société
RSA Data Security Inc. somme Phil Zimmermann de stopper la diffusion de PGP
1.0 (qui utilise l’algorithme breveté RSA sans avoir acheté de licence). Malgré tout P.
Zimmerman continue le développement et publie PGP2.0 en septembre 1992. Mais
le 14 Septembre 1993 le bureau des Douanes américaines de San Jose, Californie
(USA) délivre une assignation contre “PGP, Philip Zimmermann, and anyone or
any entity acting on behalf of Philip Zimmermann for the time period June 1, 1991
to the present” au sujet d’une violation de la réglementation sur les ventes d’armes
et l’exportation de matériel technologique! En effet la réglementation US assimile
les logiciels de cryptographie à une “arme” non-exportable. L’affaire durera 2 ans et
demi, jusqu’au 11 Janvier 1996 où les Douanes US annonce que les poursuites contre
Phil Zimmermann sont arrêtées. Aucune explication n’est fournie (le communiqué
fait 7 lignes!). Le créateur de PGP n’est plus menacé, mais comme tous les logiciels de
cryptographie, son programme reste interdit d’exportation des USA. Malgré tout le

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

[1] Jean-Paul Delahaye, Merveilleux nombres premiers, Belin-pour la science.


[2] Bertrand Hauchecorne, Daniel Surrateau Des mathématiciens de A à Z
[3] http://www.rsa-security.org
[4] http://w2.eff.org/awards/coop-prime-rules.php
[5] http://www.mersenne.org
[6] http://www.utm.edu/research/primes/index.html
[7] http://www.ghostsinthestack.org/article-22-exploitation-des-collisions-
md5.html
[8] http://openpgp.vie-privee.org/histoire.htm
[9] http://gnupg.org/

61

Vous aimerez peut-être aussi