Vous êtes sur la page 1sur 26

Arithmétique modulaire, nombres rationnels et

cryptographie

Jacques Printems

Module libre sciences « Mathématiques Expérimentales »


Licence 2, Université de Paris 12, 2008–09

Fig. 1 – Ils [les rationnels] sont parmi les nombres réels comme des étoiles dans le
ciel pour illuminer le mystère du continu. (Émile Borel)

1
1 Nombres de Fibonnacci et l’algorithme d’Euclide

Une histoire de lapins . . .


C’est à l’occasion de recherches sur la prolifération des lapins que Fibonacci (mathé-
maticien italien, connu aussi sous le nom de Léonard de Pise, né vers 1180 et mort en
1250) fit l’hypothèse que chaque couple de lapins donne naissance d’abord à un unique
couple de lapins à la première génération puis à un unique couple de lapins à la deuxième
génération. On note Fn le nombre de couples de lapins à la ne génération. On a donc

 0 si n = 0
Fn = 1 si n = 1

Fn−1 + Fn−2 si n ≥ 2.

Comment se comporte Fn lorsque n tend vers l’infini ? A priori, Fn est de plus en


plus grand et semble tendre vers l’infini. À quelle vitesse ? Lorsque n est grand, y-a-t-il
un moyen d’estimer Fn ?

√ du second degré x = x+1 possède deux racines ϕ = (1+ 5)/2 = 1.618 . . .
L’équation 2

et ϕ̄ = (1 − 5)/2. La racine positive ϕ est le nombre d’or.


On montre par récurrence que Fn ≥ ϕn−2. En effet, on a pour n ≥ 2,

Fn+1 = Fn + Fn−1 ≥ ϕn−2 + ϕn−3 = ϕn−3(ϕ + 1) = ϕn−3ϕ2 = ϕn−1.

Le nombre de couple de lapins croît donc au moins exponentiellement . . .

Algorithme d’Euclide
La suite précédente a un lien avec l’algorithme d’Euclide. Qu’est-ce que l’algorithme
d’Euclide ? Soit a > b > 0 deux entiers. l’algorithme d’Euclide définit les deux suites

0 = rn+1 < rn < · · · < r1 = b < r0 = a, q2, q3, q4, · · · qn+1,

telles que

(1) ri−1 = qi+1ri + ri+1, i = 1, . . . , n,

où on effectue les divisions euclidiennes successives de ri−1 par ri.


Concrètement, on commence par faire la division euclidienne de a par b, puis de b
par le reste obtenu, ainsi de suite :

a = b q2 + r2
b = r2 q3 + r3,
r2 = r3 q4 + r4,
···

La suite des restes {ri} est strictement décroissante et donc s’annulle à un rang n + 1
fini. Le dernier reste non nul obtenu rn = pgcd(a, b).

2
Pourquoi ? En fait, la quantité pgcd(ri, ri−1) est conservée au cours de l’algorithme.
Ainsi

pgcd(a, b) = pgcd(b, r2) = pgcd(r2, r3) = · · · = pgcd(rn, rn+1 = 0) = rn.

L’algorithme d’Euclide sert donc à déterminer le pgcd de deux nombres. Mais il fait
mieux . . .
Relation de Bezout
L’algorithme d’Euclide fournit également des entiers α et β tels que αa + βb = rn.
En effet, on construit des suites {ui} et {vi} telles que uir0 + vir1 = ri pour i = 0, . . . , n.
On initialise les deux suites comme :
• i = 0 : 1 × r0 + 0 × r1 = r0 = a
• i = 1 : 0 × r0 + 1 × r1 = r1 = b
On pose donc u0 = v1 = 1 et u1 = v0 = 0. On suppose ensuite connues les valeurs de
ui−1, ui, vi−1, vi et on utilise la relation (1) pour déterminer ui+1 et vi+1

ri+1 = ri−1 − qi+1ri


= (ui−1r0 + vi−1r1) − qi+1(uir0 + vir1)
= (ui−1 − qi−1ui) r0 + (vi−1 − qi−1vi) r1.

On pose ui+1 = ui−1 − qi−1ui et vi+1 = vi−1 − qi−1vi.


On récapitule l’algorithme ci-dessous


 u0 = 1, u1 = 0, v0 = 0, v1 = 1,
(2) u = ui−1 − qi−1ui, ∀i ≥ 1,
 i+1
vi+1 = vi−1 − qi−1vi, ∀i ≥ 1.

Ainsi pour i = n, on a un r0 + vn r1 = rn = pgcd(a, b), soit en posant α = un et


β = vn :

(3) αa + βb = pgcd(a, b).

Exemple 1.1 Effectuons l’algorithme d’Euclide pour déterminer pgcd(12, 7) :

12 = 7 × 1 + 5
7 = 5×1+2
5 = 2×2+1
2 = 1 × 2 + 0.

On a donc pgcd(12, 7) = 1 et

1 = 5 − 2 × 2 = 12 − 7 − 2 × (7 − 5) = 12 − 7 − 2 × (7 − (12 − 7)),

soit 1 = 12 × 3 + 7 × (−5).

3
Lien avec la suite de Fibonacci
La suite de Fibonacci permet d’évaluer la complexité de l’algorithme d’Euclide. On
va voir qu’il a une complexité logarithmique en fonction de la taille des données : a et b.
On montre d’abord que ri ≥ Fn+1−i par une récurrence descendante sur i = n + 1, . . . , 0
qui utilise (1) :

ri−1 = qi+1ri + ri+1 ≥ qi+1Fn+i−1 + Fn−i ≥ Fn+i−1 + Fn−i = Fn−i+1,

et rn+1 = 0 ≥ F0 = 0, rn = pgcd(a, b) ≤ F1 = 1.
Donc en particulier, a = r0 ≥ Fn+1 ≥ ϕn−1 où on rappelle que n est la nombre
d’étapes dans l’algorithme. Ainsi, on a démontré le

Théorème 1.2 Soit N ≥ 1 un entier. Alors pour toute paire d’entiers a et b infé-
rieurs ou égales à N, le nombre d’étapes dans l’algorithme d’Euclide est au plus
1 + E(ln(N)/ ln(ϕ)) où E désigne la partie entière.

Remarque 1.3 On remarque que le nombre d’étapes pour calculer pgcd(Fn+1, Fn)
est exactement n. En fait, la relation Fn+1 = Fn + Fn−1 est la division euclidienne
de Fn+1 par Fn ! (quotient 1 et reste Fn−1). On en déduit en particulier que deux
nombres de Fibonacci consécutifs sont premiers entre eux.
La suite de Fibonacci est celle pour laquelle la complexité de l’algorithme d’Eu-
clide utilisé pour calculer le pgcd de deux nombres consécutifs de cette suite (à
savoir 1) est maximale. On retrouvera ce comportement plus tard au §4 dans un
tout autre contexte.

Montrer que
Fpgcd(m,n) = pgcd(Fm, Fn)

2 Congruences

2.1 Congruence

Soit a et b deux entiers. On note a | b pour signifier que a divise b, c.-à-d. il existe
un entier k tel que b = ka. On dit que les entiers a et b sont congrus modulo un entier
m, et l’on note a ≡ b mod m, si on a m|(a − b).
Un nombre x est souvent caractérisé par ses résidus modulo un entier ou plusieurs
entiers :
x mod m
ou bien
(x mod m1, x mod m2, . . . ).
Pourquoi ?

4
– dans certains cas, la valeur d’un nombre x modulo m nous importe plus que la
valeur de x elle-même. Par exemple, il nous importe souvent plus de savoir quel
jour de la semaine nous sommes que de connaître exactement le nombre de jours
écoulés depuis le premier janvier.

– Connaître un grand nombre x modulo un entier m plus petit permet de travailler


avec des nombres plus petit. Cela permet d’organiser la vie à l’échelle humaine par
exemple (problème de calendrier).

– Cela permet aussi de retenir un nombre avec un jeu de nombres tous plus petits
(problème de compression ou de partage de secret (cf. §3)).

Un exemple de calcul modulo 3 : le triangle de Pascal.




 0 si k > n,

1 si k = 0 ou k = n,
Ckn=

 n(n − 1) · · · (n − k + 1)
 si 1 ≤ k ≤ n − 1
k(k − 1) · · · 2 · 1

On représente dans la figure 2, le coefficient binomial modulo 2.


Règles de calcul
On considère les m premiers entiers 0, 1, 2, . . ., m − 1 que l’on munit des opérations
+ et · définies modulo m. On appelle Zm cet ensemble. On montre dans les tables 1 et
2 des exemples pour m = 6 et m = 11.

Techniquement, l’ensemble Zm est une réunion de classes d’équivalence. En effet, la relation


≡ mod m est clairement réflexive, symétrique et transitive : c’est donc une relation
d’équivalence sur Z. Pour chaque entier a, on note a la classe d’équivalence de a modulo
m.
a = {a + km, k ∈ Z}.
Pour chaque m, il y a exactement m classes d’équivalence modulo m, c.-à-d. 0, 1, . . . , m − 1.
on note Zm = {0, 1, . . . , m − 1} l’ensemble de toutes les classes d’équivalence modulo m.
On munit Zm des opérations + (addition) et · (multiplication) comme ceci : a + b est la
classe d’équivalence de a + b et a · b, la classe d’équivalence de ab.
En pratique, afin d’éviter des notations compliquées, on a pris l’habitude de désigner une
classe d’équivalence par un de ses représentants quelconque. On fera de même ici. Ainsi, le
même symbole sera utiliser pour désigner un entier a et a sa classe d’équivalence modulo
m.
On note Z∗m l’ensemble des éléments de Zm inversible pour la multiplication. Notons pour
finir que (Zm , +) et (Z∗m , ·) sont des groupes commutatifs.

Nous allons nous intéresser surtout aux propriétés de la multiplication modulo m. La


proriété fondamentale de celle-ci peut se résumer par

(x mod m) × (y mod m) ≡ (x × y) mod m,

pour toutes valeurs entières de x et y. On dit que la multiplication est compatible avec
la relation modulo. La démonstration est immédiate et utilise seulement la définition de
la congruence.

5
300

250

200

150

100

50

0
0 50 100 150 200 250 300

Fig. 2 – n ∈ {0, . . . , 256} en abscisse et k ∈ {0, . . . , 256} en ordonnée. Ici un carré noir en
(n, k) si Ck
n est un multiple de 3 et un carré blance sinon.

6
C’est bien sûr aussi vrai pour l’addition. En fait, cela permet de définir une opération
(toujours notée ×) sur les classes d’équivalences.

Exemples d’applications : la « preuve par 9 ».


Repose sur 10 ≡ 1 mod 9. On remplace donc 10 par 1 dans les puissances de 10,
puisque 10n ≡ (10 mod 9)n ≡ 1 mod 9. Pour connaître un nombre modulo 9, il suffit
donc d’additionner ses chiffres.
Ex : 123 × 32 = 3936.
123 mod 9 vaut 1+2+3 = 6 et 32 mod 9 vaut 3+2 = 5. Donc nécessairement, le résultat
de l’opération doit valoir 5 × 6 mod 9, soit 3. Effectivement, 3 + 9 + 3 + 6 = 21 ≡ 3
mod 9.

2.2 Éléments inversibles

On s’intéresse maintenant aux éléments de Zm qui sont « inversibles » modulo m.


On remarque dans la table 1 que 2, 3 et 4 ne sont pas inversibles modulo 6 : quelque soit
leur produit modulo m avec un autre élément, le résultat est toujours différent de 1. Par
contre, dans la table 2, on remarque que tout élément différent de 0 admet un (unique)
inverse modulo 11. Ex : 8 × 7 ≡ 1 mod 11.

Tab. 1 – Tables d’addition et de multiplication modulo 6.

+ 0 1 2 3 4 5 · 0 1 2 3 4 5
0 0 1 2 3 4 5 0 0 0 0 0 0 0
1 1 2 3 4 5 0 1 0 1 2 3 4 5
2 2 3 4 5 0 1 2 0 2 4 0 2 4
3 3 4 5 0 1 2 3 0 3 0 3 0 2
4 4 5 0 1 2 3 4 0 4 2 0 4 2
5 5 0 1 2 3 4 5 0 5 4 3 2 1

Pour m quelconque, on notera Z∗m l’ensemble des éléments de Zm qui sont inversibles
pour la multiplication modulo m. Ainsi, dans les exemples précédents, on a Z∗6 = {1, 5}
qui n’a que deux éléments et Z∗11 = Z11\{0} qui contient tous les éléments sauf 0.
Pourquoi donc s’intéresse-t-on aux éléments inversibles ? On va voir dans l’exemple
suivant qu’ils permettent de dévoiler une information cachée.

Exemple 2.1 Une personne est née le jour j du mois m. On suppose j ∈ {1, . . . , 31}
et m ∈ {1, . . . , 12}. Elle effectue l’opération 12j + 31m et communique le résultat :
318. Comment retrouver j et m ? Il s’agit de résoudre l’équation à deux inconnues
12j + 31m = 318. Modulo 31, cela donne : 12j ≡ 318 ≡ 8 mod 31. Il s’agit donc
de résoudre une équation congruentielle linéaire à une inconnue (j). On remarque
dans le tableau 3 que 12 × 13 ≡ 1 mod 31. On multiplie donc notre relation par 13,
on obtient :
13 × 12j ≡ 13 × 8 = 104 ≡ 11 mod 31.

7
Tab. 2 – Table de multiplication modulo 11 et modulo 12.

· 1 2 3 4 5 6 7 8 9 10 11
· 1 2 3 4 5 6 7 8 9 10
1 1 2 3 4 5 6 7 8 9 10 11
1 1 2 3 4 5 6 7 8 9 10
2 2 4 6 8 10 0 2 4 6 8 10
2 2 4 6 8 10 1 3 5 7 9
3 3 6 9 0 3 6 9 0 3 6 9
3 3 6 9 1 4 7 10 2 5 8
4 4 8 0 4 8 0 4 8 0 4 8
4 4 8 1 5 9 2 6 10 3 7
5 5 10 3 8 1 6 11 4 9 2 7
5 5 10 4 9 3 8 2 7 1 6
6 6 0 6 0 6 0 6 0 6 0 6
6 6 1 7 2 8 3 9 4 10 5
7 7 2 9 4 11 6 1 8 3 10 5
7 7 3 10 6 2 9 5 1 8 4
8 8 4 0 8 4 0 8 4 0 8 4
8 8 5 2 10 7 4 1 9 6 3
9 9 6 3 0 9 6 3 0 9 6 3
9 9 7 5 3 1 10 8 6 4 2
10 10 8 6 4 2 0 10 8 6 4 2
10 10 9 8 7 6 5 4 3 2 1
11 11 10 9 8 7 6 5 4 3 2 1

Ainsi, j ≡ 11 mod 31 mais comme il s’agit de jour j = 11.

Tab. 3 – Calcul de 12 × k modulo 31 pour k = 1, . . . , 30.


k 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
12k mod 31 12 24 5 17 29 10 22 3 15 27 8 20 1 13 25
k 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
12k mod 31 6 18 30 11 23 4 16 28 9 21 2 14 26 7 19

Revenons à Z∗m. Combien y-a-t-il d’éléments dans Z∗m en général et comment les
caractériser ? On voit dans les tables 2 que Z∗12 = {1, 5, 7, 11}. Or ces nombres n’ont pas
de facteurs communs avec 12 : il s’agit des nombres entre 1 et 11 qui sont premiers avec
12. Est-ce vrai dans le cas général et peut-on le démontrer ?
La réponse nous est donnée par l’algorithme d’Euclide vu au paragraphe précédent.
En effet, soit a un entier compris entre 1 et m − 1 et premier avec m. Par définition,
pgcd(a, m) = 1 et donc, on sait qu’il existe des entiers α et β tels que αa + βm = 1.
Prenons, cette relation modulo m. On obtient αa ≡ 1 mod m. Ainsi a est inversible
et son inverse est α. Réciproquement, si a est inversible modulo m, alors il existe un
entier b tel que ab ≡ 1 mod m. Donc par définition, m|(ab − 1). Il existe donc k tel que
ab − 1 = mk. Soit alors d le pgcd de a et m, par définition du pgcd, d divise m, a donc
également ab − mk, c.-à-d. 1. Donc d = 1. On vient de démontrer le

Théorème 2.2 Soit m ≥ 1. Un entier a est inversible modulo m si et seulement si


pgcd(a, m) = 1.

Ainsi le nombre d’entiers compris entre 1 et m−1 inversibles modulo m est le nombre
d’entiers parmi {1, . . . , m − 1} qui sont premiers avec m. On note cette valeur ϕ(m). La
fonction ϕ est appelée fonction d’Euler. Calculons sa valeur pour quelques valeurs de

8
1000

900

800

700

600

500

400

300

200

100

0
0 100 200 300 400 500 600 700 800 900 1000

Fig. 3 – On représente m en abscisses et ϕ(m) en ordonnée.

m:

ϕ(2) = 1, ϕ(3) = 2, ϕ(4) = 2, ϕ(5) = 4, ϕ(6) = 2, . . . , ϕ(12) = 4, . . .

On remarque que si m est un nombre premier alors tout les entiers positifs qui le précèdent
sont premiers avec lui. Donc dans ce cas, ϕ(m) = m − 1. Mais de façon générale, il n’y
a pas de formules « explicite » pour ϕ(m).
On représente dans la figure 3 les 1000 premières valeurs de ϕ. On distingue des
droites passant par 0 (en particulier la droite y = x − 1 qui correspond au cas où x est
premier).
Le théorème qui suit est très important (au cœur du système RSA par exemple, voir
section 5) et est une conséquence de tout ce qui précède :

Théorème 2.3 (Euler) Pour tout a élément de Z∗m (c.-à-d. premier avec m), on a
la relation aϕ(m) ≡ 1 mod m.

Soit a un entier premier avec m et soit x1 , x2 , . . ., xϕ(m) une énumération des éléments de
Z∗m (on sait qu’il y en a ϕ(m)). Alors a · x1 , a · x2 , . . ., a · xϕ(m) est aussi une énumération
de tous les éléments de Z∗m (car comme a est inversible, les éléments de la forme a · xi sont
tous distincts entre eux et il y en a le bon nombre ϕ(m)). On fait le produit P (modulo
m) de tous les éléments. Il y a donc deux façons de l’écrire, soit P = x1 · · · xϕ(m) , soit
P = ax1 · · · axϕ(m) , c.-à-d.

P ≡ x1 · · · xϕ(m) ≡ aϕ(m) x1 · · · xϕ(m) ≡ aϕ(m) P mod m.

9
On conclut en multipliant par l’inverse de P (qui est inversible puisque produit d’éléments
inversibles).

En particulier, ce théorème fournit un inverse de a modulo m, à savoir, aϕ(m)−1.


D’autres propriétés de ϕ seront nécessaires par la suite :

Proposition 2.4 Si m et n sont premiers entre eux alors

ϕ(mn) = ϕ(m)ϕ(n)

Démonstration
On considère le tableau suivant :
1 2 3 ··· m
m+1 m+2 m+3 ··· 2m
2m + 1 2m + 2 2m + 3 ··· 3m
.. .. .. ..
. . . .
(n − 1)m + 1 (n − 1)m + 2 (n − 1)m + 3 · · · mn

On effectue les opérations suivantes :


(a) On élimine les colonnes commençant par un nombre non premier avec m. Il en
reste par définition ϕ(m).
(b) Maintenant, les colonnes i et i + k se correspondent par la bijection x (→ x + k
mod n. Chaque colonne non rayée contient donc le même nombre ϕ(n) de termes
premiers avec n. On raye les autres.
Au total, les ϕ(m)ϕ(n) éléments non rayés sont premiers avec m (phase (a)) et avec n
(phase (b)), donc avec mn (puisque pgcd(m, n) = 1).

3 Résolution d’équations de congruence, théorème chinois


et partage du secret.

3.1 Équation de congruence linéaire

On appelle équation de congruence (modulo m), toute relation f(x) ≡ 0 mod m.


On dit que l’équation est résoluble s’il existe un entier x qui satisfait l’équation. On ne
sait pas en général résoudre ces équations (pour f quelconque) et la possibilité de les
résoudre ou non fait parti des questions les plus importantes en théorie des nombres.
On a vu dans l’exemple 2.1 que la résolution de certaines de ces équations (12x − 8 ≡ 0
mod 31) pouvait être très simple quand a et m sont premiers entre eux (12 et 31) car il
suffit alors de trouver un inverse de a modulo m. Dans le cas général, où f(x) = ax − b
pour a et b entiers, a non nécessairement premier avec m, on sait répondre complètement
(Théorème 3.2). Auparavant, on a besoin du lemme suivant.

Lemme 3.1 (Lemme de Gauss) Soit a, b, c trois entiers tels que a divise le produit
bc et a premier avec b, alors a divise c.

10
Démonstration
Par Bezout, on sait qu’il existe α et β entiers tels que aα + bβ = 1. En multipliant
cette relation par c, on obtient que aαc + bβc = c. Donc si a divise bc alors a divise
aussi bcβ et donc a divise aαc + bβc, à savoir c.
On peut maintenant énoncer le

Théorème 3.2 L’équation de congruence linéaire ax ≡ b mod m admet une solu-


tion si et seulement si le pgcd(a, m) divise b. Plus précisément, si x0 désigne une
solution de ax ≡ b mod m alors toutes les solutions s’écrivent sous la forme :
m
xk = x0 + k , k = 0, . . . , pgcd(a, m) − 1.
pgcd(a, m)
Il y en a exactement (modulo m) pgcd(a, m).

Démonstration
On note g = pgcd(a, m). Comme g divise a et m, on a m = gm " et a = ga " avec a "
et m " premiers entre eux.
On peut voir ce dernier point en utilisant la relation de Bezout entre a et m : il existe α
et β tels que αa + β = g, soit αga " + βgm " = g. En simplifiant par g ≥ 1, on obtient
αa " + βm " = 1. Soit a " et m " premiers entre eux.
Supposons qu’il existe un x0 tel que ax0 ≡ b mod m. Alors m|ax0 − b. On a g|m, g|a,
donc g|b puisque b = ax0 − km pour un certain entier k. Réciproquement, si g|b alors il
existe k tel que b = gk. Or il existe α et β tel que αa + βm = g. En multipliant par k,
on obtient αak + βmk = gk = b. Alors x = kα est solution. On vient de montrer qu’il
existait des solutions si et seulement si g|b.
De plus, soit c solution alors c est de la forme proposée dans l’énoncé. En effet,
ac = ax mod m donc m|a(c − x). Il existe donc k tel que a(c − x) = mk ou encore en
simplifiant par g, a " (c − x) = m " k. Donc m " |(c − x) car m " est premier avec a " (lemme
de Gauss). Donc c est de la forme proposée dans l’énoncé.
Enfin, il y a exactement g solutions. En effet, supposons qu’il existe 0 ≤ k )= k " ≤ g−1
tels que xk ≡ xk" mod m. Alors, on aurait km " ≡ k " m " mod m, soit km " = k " m " + $m.
En simplifiant par m " , on obtient |k − k " | = |$|g ≥ g puisque k )= k " . Impossible puisque
k et k " sont compris entre 0 et g − 1.

3.2 Système d’équations de congruence linéaire

Lorsque l’on réunit plusieurs équations de congruences linéaires, le système d’équa-


tions obtenu peut ne pas avoir de solutions même si chacune des équations en ont. Par
exemple, le système x ≡ 0 mod 3 et x ≡ 1 mod 6 n’a pas de solutions.
Cependant, lorsque les modules sont premiers deux à deux, le système a toujours une
solution. Exemple : 23 est solution du système suivant :
x ≡ 2 mod 3, x≡3 mod 5, x ≡ 2 mod 7.

Le th́éorème suivant se place dans un cadre plus général :

11
Théorème 3.3 (Théorème chinois) Le système aix ≡ bi mod mi pour i = 1, . . . , k
a exactement une solution modulo m = m1m2 · · · mk pourvu que m1, m2, . . .,mk
soient premiers entre deux à deux et que

pgcd(a1, m1) = · · · = pgcd(ak, mk) = 1.

Remarquons que l’on s’est placé dans un cas où les ai sont premiers avec les modules
mi (contrairement au cas précédent). Sachons que l’on peut relaxer l’hypothèse selon
laquelle les mi sont premiers entre eux deux à deux. La démonstration qui suit de ce
théorème est importante parce qu’elle nous donne un moyen de construire la solution.
Démonstration
On montre d’abord l’unicité de la solution modulo le produit m. Soit x et x " deux
solutions du système d’équations de congruences aix ≡ bi mod mi. On sait donc que
aix ≡ bi ≡ aix " mod mi, donc mi divise ai(x − x " ). Comme pgcd(ai, mi) = 1, mi divise
donc x − x " (lemme de Gauss 3.1). Maintenant, comme les mi sont premiers entre eux
deux à deux et que chacun divise x − x " , leur produit m aussi. Ainsi m|x − x " et donc
x ≡ x " mod m.
On montre maintenant l’existence de solutions. On trouve d’abord k entiers ci tels
que aici ≡ 1 mod mi, 1 ≤ i ≤ k (il s’agit des inverses de ai modulo mi, on sait qu’ils
existent par le théorème 2.2). On note ni les quotients respectifs de m par mi. Il est
facile de voir que ni et mi sont premiers entre eux.
En effet, comme mi et mj sont premiers entre eux si j %= i alors mi est premier avec le
produit des mj pour j %= i. Il suffit de faire le produit des relations de Bezout par exemple
pour le voir.

Il existe donc ui et vi entiers tels que uimi + vini = 1. On pose alors ei = vini. On a
&
1 mod mi,
ei ≡
0 mod mj, si j )= i.

Une solution du système d’équations est par conséquent

c = e1c1b1 + · · · + ekckbk.

En effet, on a pour tout i :

aic = aic1e1b1 + · · · aickekbk ≡ aicibi ≡ bi mod mi.

3.3 Partage du secret

Une application intéressante du théorème chinois 3.3 est la construction de schéma


de partage (k, n). C’est un concept lié à la sécurité de la transmission des messages.

Définition 3.4 (Schéma de partage) Un schéma de partage (k, n) consiste en n


personnes P1, . . ., Pn partageant un secret S de telle façon que :
– chaque Pi possède une information Ii ;

12
– la connaissance de k informations parmi les {I1, . . . , In} permet de trouver S
facilement ;
– connaître strictement moins que k d’entre elles ne permet pas de trouver —
du moins facilement — S.

Nous allons construire un tel schéma dans le contexte des entiers (le secret S et les
informations Ii sont des nombres). Soit m1 < m2 < · · · mn une suite finie croissante
d’entiers premiers entre eux deux à deux telle que

(4) m1 · m2 · · · mk > mn · mn−1 · · · mn−k+2,

cad que le produit des k premiers est strictement plus grand que le produit des k − 1
derniers. On pose M = mn · · · · mn−k+2 et N = m1 · · · mk. Soit S le secret tel que
N ≤ S ≤ M et soit l’information Ii définie comme

Ii ≡ S mod mi, i = 1, . . . , n.

Nous allons montrer que S et les informations {I1, . . . , In} forment un schéma de par-
tage (k, n). Soit donc {Ii1 , . . . , Iik } un sous-ensemble quelconque de k informations parmi
l’ensemble des n informations. D’après le théorème chinois, le système d’équations de
congruences linéaires
x ≡ Ii mod mi, i ∈ {i1, . . . , ik},
possède exactement une solution S donnée par (voir la démonstration du théorème)

S ≡ ei1 Ii1 + · · · + eik Iik mod (mi1 · · · mik ),

où ei ≡ 1 mod mi et 0 sinon. Comme S ≤ M = m1 · · · mk et que la suite des mi est


croissante alors S ≤ mi1 · · · mik ) et donc

S = ei1 Ii1 + · · · + eik Iik .

Supposons maintenant que l’on ne connaisse que k − 1 informations, soit {Ii1 , . . . , Iik−1 }.
De même que précédemment, la théorème chinois nous donne une unique solution modulo
mi1 · · · mik−1 :

S ≡ ei1 Ii1 + · · · + eik−1 Iik−1 mod (mi1 · · · mik−1 ).

Par ailleurs, on sait que mi1 · · · mik−1 ≤ mn−k+2 · · · mn = N ≤ S. Donc connaître S


modulo le produit mi1 · · · mik−1 ne suffit clairement pas. Combien y-a-t-il encore de
valeurs possibles pour S sachant que N ≤ S ≤ M ? Au moins (M − N)/N.
Il reste à construire de telles suites de sorte que M−N
N soit très grand. Cela rendra
difficile le calcul de S ne connaissant que k − 1 informations. Nous ne donnons ici qu’un
exemple (voir TPs).

Exemple 3.5 Soit S un numéro de téléphone que l’on désire faire partager à n = 5
personnes de sorte que trois d’entre elles mettant en commun leurs informations
pourront le retrouver. On utilise les nombres (premiers)

m1 = 2153, m2 = 2161, m3 = 2179, m4 = 2203, m5 = 2207.

13
L’information donnée à chacun en cachette des autres est

I1 = 1324, I2 = 2158, I3 = 138, I4 = 564, I5 = 1816.

Les personnes P1, P2 et P3 mettent leurs informations en communs. Quel numéro


obtiennent elles ? Et si P3 n’avait pas collaboré, quels numéros possibles aurait il
fallu tester ?

14
4 L’arbre de Stern–Brocot

4.1 Une construction amusante de Q+

Il existe une manière astucieuse de construire l’ensemble de tous les rationnels positifs.
Découverte indépendemment par Moritz A. Stern1 , un mathématicien allemand et Achille
Brocot2 , un horloger français il y a 150 ans.
Comment ? Partir de { 01 , 10 } et de répéter l’opération :

m + m" m m"
insérer entre et .
n + n" n n"

Deux questions se posent :


1. Pourquoi les fractions apparaissent elles toujours sous forme irréductible ?
2. Est-on sûr d’obtenir toutes les fractions ?
Réponse au premier point :
m m"
Si n < n" sont deux fractions consécutives à une étape alors

m " n − mn " = 1.

On le voit par récurrence. En effet, cela est vrai initialement puisque 1 × 1 − 0 × 0 = 1. On


m"
insère maintenant (m + m " )/(n + n " ) entre les deux fractions m n et n" . Il faut vérifier :

(n + m " )n − m(n + n " ) = m " n − mn " = 1,

et
m " (n + n " ) − (m + m " )n " = m " n − mn " = 1.
1
Über eine zahlentheoretische Funktion, Journal für die reine und angewandte Mathematik 55, 193–
200 (1858).
2
Calcul des rouages par approximation, nouvelle méthode, Revue chronométrique, 3, 186–194 (1861).

15
Donc la propriété est vraie tout au long de la construction de l’arbre. En particulier, on
voit que m et n sont premiers entre eux (Bezout) et donc que toute fraction qui apparaît
est sous forme irréductible.
Réponse au deuxième point :
a
Soit b une fraction telle que pgcd(a, b) = 1. Supposons que l’on ait à une étape

m a m"
(5) < < ".
n b n
" "
Alors à l’étape d’après, on a soit a m+m a m+m
b = n+n" et c’est terminé, soit b )= n+n" et alors on
itère. Combien de fois ? En fait, qu’un nombre fini de fois comme le montre le raisonne-
ment qui suit. Les inégalités (5) entraînent

(6) an − bm ≥ 1, bm " − an " ≥ 1,

soit, en multipliant par m " + n " la première, (m + n) la deuxième et en additionnant :

(an − bm)(m " + n " ) + (bm " − an " )(m + n) ≥ m " + n " + m + n.

En développant, on obtient

a + b ≥ m + n + m " + n ",

et comme m, n, m " et n " croissent à chaque étape, on doit atteindre a + b en un nombre


fini d’étapes.

4.2 Suites de Farey

On note maintenant
& '
p
FN = 0 ≤ ≤ 1, 1≤q≤N ,
q

c.-à-d. l’ensemble des fractions rationnelles de l’intervalle [0, 1] mises sous forme irréduc-
tibles et dont le dénominateur vaut au plus N. Un tel ensemble est appelé suite de Farey
d’ordre N.
Les considérations précédentes sur l’arbre de Stern–Brocot nous permettent de conclure
que

Théorème 4.1 Soit N ≥ 1. Alors les trois assertions suivantes sont vraies.
p r
(i) Si et sont consécutives dans FN alors
q s
p r 1
− = ou encore ps − qr = 1
q s qs

16
p r
(ii) Si et sont consécutives dans FN alors elles le restent dans FM tant que
q s
N ≤ M < q + s mais sont séparées dans Fq+s par leur médiane dite de Farey
p+r
q+s

(iii) FN est un sous-arbre3 de l’arbre de Stern–Brocot.

m+m" m m"
On obtient FN de FN−1 en insérant une fraction N entre deux fractions n et n"
de FN−1 telles que n + n " = N.
On retrouve le fait que si pgcd(m, n) = 1 alors il existe a et b entiers tels que
ma − nb = 1. Il suffit pour cela de prendre la fraction qui précède m
n dans Fn.

Procédure récursive pour afficher FN


m+n
Algorithme récursif pour afficher le sous arbre de racine m" +n" donnée contenant
toutes les fractions de la suite de Farey d’ordre N :

faray=procedure(m,n,mp,np,N)
• si max(m+mp,n+np)<=N alors
farey(m,n,m+mp,n+np,N) ;
afficher (m+mp)/(n+np) ;
farey(m+mp,n+np,mp,np,N) ;
• fin procedure

0 1 1 1 2 1 3 2 3 4 1
5 4 3 5 2 5 3 4 5

4.3 Codage binaire de Q+

On peut associer de façon unique à chaque fraction m n un chemin dans l’arbre depuis
1
la « racine » 1 en utilisant les lettres G (pour un mouvement à gauche en descendant) et
D (pour un mouvement à droite en descendant). Ex : GDDG représente la fraction 57 .
3
c.-à-d. un sous-ensemble connexe par arc contenant la racine (ici 1).

17
Questions :
1. Quel chemin pour une fraction donnée.
2. Quelle fraction pour un chemin donné.

4.3.1 Du chemin vers la fraction

On répond d’abord à la dernière question. On veut construire la fonction f : C → f(C)


où C désigne un chemin et f(C) la fraction associée. Les matrices 2 × 2 vont nous être
d’une aide précieuse. Rappelons au préalable les règles de calculs dans l’ensemble des
matrices 2 × 2 : ! " ! " ! "
a b x z ax + by az + bt
· =
c d y t cx + dy cz + dt
"
Soit C un chemin représentant la fraction m+m
n+n" . On représente cette fraction par la
matrice ! "
n n"
M(C) = .
m m"
Remarquons que lorsque l’on se déplace à droite dans l’arbre, n ← m + m " et n ← n + n "
tandis que n et n " restent inchangés. On doit donc avoir
! " ! " ! "
n + n" n" n n" 1 0
M(CD) = = · .
m + m" m" m m" 1 1

Lorsque l’on se déplace à gauche n " ← n + n " et m " ← m + m " . On doit donc avoir aussi
! " ! " ! "
n n + n" n n" 1 1
M(CG) = = · .
m m + m" m m" 0 1

Ainsi, on pose ! " ! " ! "


1 0 1 0 1 1
I= , D= , et G =
0 1 1 1 0 1
et si on identifie C à M(C), les produits matriciels précédents nous permettent de re-
trouver mn à l’aide de ces deux fractions adjacentes dans Fn en itérant à partir de I (qui
correspond à . . . 11 ), les multiplications. Ex :
! " ! " ! " ! " ! "
1 1 1 0 1 0 1 1 3 4
GDDG ∼ M(GDDG) = · · · = .
0 1 1 1 1 1 0 1 2 3

2+3 5 5 2
Ainsi, f(GDDG) = = et les fractions adjacentes à 7 dans F7 sont 3 et 34 .
3+4 7

4.3.2 Coder une fraction par une suite de lettres

Examinons maintenant la première question posée au début de cette section. Regar-


dons d’abord l’effet d’une multiplication à gauche par D. On a

f(DC) = 1 + f(C).

18
En effet, ! " ! " ! "
1 0 n n" n n"
· =
1 1 m m" m + n m" + n"
et
m + n + m" + n" m + m"
= + 1.
n + n" n + n"
Ainsi, l’effet d’un mouvement à droite dans l’arbre est neutralisé par la soustraction d’une
unité : f(C) = f(DC) − 1.
Soit donc une fraction m n , mise sous forme irréductible, et telle que m > n. La
fraction se situe donc dans la partie droite de l’arbre. La première lettre de son chemin
est donc D. Gardant en mémoire cette lettre, on est alors ramené à la situation initiale en
remplaçant m par m−n et en gardant inchangé n. Ainsi la nouvelle fraction m−n m
n = n −1
est l’ancienne retranché de 1.
De même, si m < n, la fraction se situe dans la partie gauche de l’arbre. Donc
n
son inverse m est dans la partie droite de l’arbre. Donc neutraliser un mouvement à
gauche dans l’arbre revient à neutraliser un mouvement à droite du chemin inverse (ou
D est remplacé par G et vice-versa). On garde donc en mémoire la lettre G et le même
raisonnement que plus haut nous ramène à la situation initiale en remplaçant n par n−m
et en gardant inchangé m.
Enfin, si m = n, le chemin est vide.
L’algorithme se lit donc comme

• Initialiser C à la chaîne vide "" ;


• Faire tant que m )= n,
si m > n alors
– concaténer C ← CD ;
– m ← m − n;
sinon
– concaténer C ← CG ;
– n ← n − m;

4.4 Lien avec l’algorithme d’Euclide

Observons le chemin associé à 12 1 1 2 1


7 : DGDDG = D G D G . On peut y lire les quotients
q = {1, 1, 2, 1} successifs dans l’algorithme d’Euclide utilisé pour déterminer le pgcd(12, 7)
p. 3.
En effet, une succession de direction vers la droite correspond à de multiples sous-
traction m ← m " = m − n d’après l’algorithme précédent, jusqu’à ce que m " < n ou
m " = n. Ce dernier cas correspond à celui où m aurait été initialement un multiple de n
et donc un nombre entier de soustractions plus tard m = n. Le premier cas correspond
à celui où m n’est pas initialement un mutiple de n et alors les soustractions succes-
sives correspondent à une division euclidienne où l’on obtient finalement après E(m/n)
étapes, m " = m − E(m/n)n. Alors E(m/n) désigne le quotient et m " le reste dans la
division euclidienne de l’entier initial m par n. Ensuite les rôles s’échangent entre n et

19
m. Les mouvements à gauche vont correspondre à n " = n − E(n/m)m et ainsi de suite
...
On voit se dessiner successivement les différentes étapes de l’algorithme d’Euclide
appliqué à m et n. Les longueurs des chemins successivement à droite, à gauche donnent
les quotients dans les étapes de l’algorithme d’Euclide.
Par exemple, le chemin correspondant à la fraction Fn+1/Fn où Fn désigne le ne
nombre de Fibonacci est donc une chaîne de longueur n − 1 qui vaut

DGDG · · · DG si n est impair


DGDG · · · DGD si n est pair.

4.5 Approximation des réels par des rationnels – fractions continues

Si on remplace mn par un irrationnel x dans l’algorithme précédent, celui ne converge


pas (en un nombre fini d’étapes). Il peut fournir nénamoins des approximations ration-
nelles par défaut et par excès de x pour une tolérance ε > 0 donnée. La mise à jour de
(m ← m − n, n ← n) est remplacé par x ← x − 1 et (m ← m, n ← n − m) est remplacé
par x ← x/(1 − x). Ainsi, on a

• Initialiser C à la chaîne vide "" ;


• Faire tant que |x − 1| > ε,
si x > 1 alors
– concaténer C ← CD ;
– x ← x − 1;
sinon
– concaténer C ← CG ;
– x ← x/(1 − x) ;

On peut rapprocher le développement d’un irrationnel par un chemin infini dans


l’arbre de Stern–Brocot à son approximation par réduites dans le contexte des fractions
continues. En effet, reprenons l’exemple des nombres de Fibonacci. Le quotient de deux
nombres successifs de la suite font
Fn+1 Fn−1 1
(7) =1+ =1+ Fn
.
Fn Fn Fn−1

Ce processus peut s’itérer et on obtient


Fn+1 1
=1+ 1
Fn 1+ 1
1+ 1
1+
···+1

On sait que le rapport Fn+1/Fn converge vers le nombre d’or ϕ comme on peut s’en
convaincre en passant à la limite dans (7). Ainsi, le nombre d’or admet formellement un
développement infini sous forme de fractions continues :
1
ϕ=1+ 1
.
1+ 1+ 1
1+ 1
1+···

20
On appelle ne réduite de ϕ la fraction rationnelle Fn+1/Fn. Elle correspond à une tron-
cature dans l’écriture pr´’ecédente de ϕ.
Plus généralement, l’algorithme d’Euclide tel que décrit p. 2 construit une suite de
restes {ri} et de quotient {qi} où i = 2, . . . , n + 1 à partir de a = r0 et b = r1 tel que

a 1 1 1
= q2 + = q2 + = q2 + 1
b b/r2 q3 + r3/r2 q3 + q4 + ···+q1
n+1

Grâce à la remarque fait au paragraphe précédent, on peut lire dans le développement


d’un rationnel par son chemin dans l’arbre de Stern–Brocot, les quotients obtenus suc-
cessivement dans l’algorithme d’Euclide comme les « exposants » des lettres D et G. On
en déduit formellement4 le développement en fractions continues des irrationnels en
considérant leur chemin infini dans l’arbre. Une fraction réduite ou plus simplement une
réduite correspondra à un changement √ de direction dans l’arbre. Exemple (voir le tableau
2 2 2 2
4) : DG D G n’est pas une réduite de 2 mais DG D en est une.
À titre d’exemple, on a calculé dans le tableau 4 quelques début de chemin pour
quelques irrationnels et leurs développement en fractions continues correspondant (quand
c’est possible). On remarque que √ si √
les nombres algébriques (ceux racines de polynômes
à coefficients dans Q) comme 2, 3, ϕ (le nombre d’or) ont un codage périodique,
les nombres irrationnels transcendants (c.-à-d. tous les autres) n’ont pas de structures
régulières dans leur développement à l’exception de e dont le développement est quasi-
périodique.
Enfin quelques approximations rationnels :

m
x n Chemin Précision Réduite
e 19/7 D2 GD2 G 4 10−3 oui
193/71 D2 GD2 GDG4 D 3 10−5 oui
878/323 D GD2 GDG4 DGD3
2 1.6 10−5 non
2721/1001 D2 GD2 GDG4 DGD6 G 10−7 oui
49171/18089 D2 GD2 GDG4 DGD6 GDG8 D 2.7 10−10 oui
π 22/7 D3 G7 1.2 10−3 oui
355/113 D3 G7 D15 G 3 10−7 oui

4
Il reste à passer à la limite . . .

21
Tab. 4 – Codage de quelques irrationnels

2 DG2 D2 G2 D2 G2 D2 . . . 1+ 2+
1
1
2+ 1
√ 2+···
3 DGD2 GD2 GD2 GD2 . . . 1+ 1+
1
1
2+ 1
1+ 1
√ 2+···
1+ 5 1
ϕ= 2 DGDGDGDGDGDGDG . . . 1+ 1+ 1
1+ 1
1+···
e D2 GD2 GDG4 DGD6 GDG8 DGD10 GDG12 DG . . . 2+ 1+
1
1
2+ 1
1+ 1
1+ 1
4+···
π D3 G7 D15 GD292 GDGD12 GD3 . . . 3+ 7+
1
1
15+ 1
1+···

-0 -0

-2

-2
-4

-6

-4
-8

-10
-6
-12

-14
-8

-16

-18 -10

-20
5 10 15 20 25 30 35 40 5 10 15 20 25 30 35 40

(a) ϕ (le nombre d’or) (b) e

-0

-1

-2

-3

-4

-5

-6

-7
5 10 15 20 25 30 35 40

(c) π

Fig. 4 – Logarithmes en base 10 des erreurs par excès (en noir) et par défaut (en bleu) des
encadrements de différents irrationnels obtenus en parcourant l’arbre de Stern–Brocot
en fonction de la longueur du chemin.

22
5 Cryptage RSA

RSA : acronyme pour Rivest, Shamir, Adleman, les auteurs de l’article fondateur5 .
Cryptage : transformation d’un message en clair en un message codé compréhensible
seulement par le destinataire.
Forme générale d’un système cryptographique : soit M un ensemble fini de messages
en clair et M " un ensemble de cryptogrammes. Un algorithme de chiffrement correspond
à une fonction f : M → M " : au message en clair m ∈ M est associé le cryptogramme
f(m). Pour pouvoir déchiffrer, c.-à-d. déterminer m connaissant f(m), il est nécessaire
que f soit injective, ce que l’on suppose par la suite et quitte à remplacer M " par l’image
de f, on peut considérer que f est bijective. L’algorithme de déchiffrement correspond
donc à la fonction réciproque f−1 : M " → M de f.

5.1 Exemples de procédés conventionnels

5.1.1 Le chiffre de César (-50 av. J.C.)

Ici A = {0, 1, 2, . . . , 25} représente l’alphabet en utilisant la correspondance (par


exemple)
1 ↔ A, 2 ↔ B, . . . , 0 ↔ Z
On prend M = M " = A : l’unité de chiffrement est la lettre
& &
A→A A→A
Exemple : f : et f−1 : .
x (→ x + 3 mod 26 x (→ x − 3 mod 26
Ici f doit rester secrète (connue seulement de l’expéditeur et du destinataire).
Généralisation : f(x) = (αx + β) mod 26 où α, β ∈ Z et pgcd(α, 26) = 1
Exercice : Montrer que f est bijective et expliciter f−1 (voir Théorème 3.2, p. 11).

5.1.2 Méthode de Vigenère (diplomate français (1525–1596))

On prend M = M " = Ab où b ∈ N∗ : l’unité de chiffrement est le bloc de b lettres.


Exemple :
&
Ab → Ab
f:
(a1, . . . ab) (→ (a1 + 1 mod 26, . . . , ab + b mod 26)
et &
−1 Ab → Ab
f :
(a1, . . . ab) (→ (a1 − 1 mod 26, . . . , ab − b mod 26)

Généralisation : on utilise une clef K = (k1, . . . , kb) ∈ Ab et on choisit


& b
A → Ab
fK :
(a1, . . . ab) (→ (a1 + k1 mod 26, . . . , ab + kb mod 26)
5
R. Rivest, A. Shamir, L. Adleman, A Method for Obtaining Digital Signatures and Public-Key
Cryptosystems, Communications of the ACM 21 (2), 120–126 (1978).

23
Exemple : on veut crypter le texte ON A GAGNE avec la clef K =MATH, c.-à-d. b = 4
et K = (13, 1, 20, 8). On regroupe les lettres par 4 : ONAG AGNE, puis on applique fK.
On obtient BOUO NHHM.
Ici encore f, c.-à-d. K doit rester secrète.

5.2 Un système à clef publique : le système RSA

Dans la méthode RSA, la fonction f : M → M " est connue de tous et s’évalue


« facilement » mais par contre le calcul de f−1(m " ) pour m " ∈ M " est « très difficile »
même connaissant f (fonction « one way »).
De plus, la connaissance d’une information supplémentaire (qui elle est gardée secrète)
permet d’évaluer facilement f−1.
Description du procédé

1. Alice souhaite pouvoir recevoir des messages confidentiels. Elle choisit deux nombres
premiers p et q distincts et « grands » et calcule leur produit n = pq. Puis elle
choisit un entier e ∈ {1, 2, . . . , (p − 1)(q− 1)} tel que pgcd(e, (p − 1)(q− 1)) = 1. Elle
peut alors déterminer d ∈ {1, 2, . . . , (p−1)(q−1)} tel que de ≡ 1 mod (p−1)(q−1)
(voir Théorème 2.2, p. 8).
Finalement, Alice rend public le couple (n, e) (dans un annuaire) et garde secret d
(ainsi que p et q).
2. Bob souhaite transmettre un message à Alice. Pour ce faire, le protocole est le
suivant :
– Bob consulte l’annuaire et trouve le couple (n, e) correspondant à Alice ;
– Bob fait en sorte que son message corresponde à un entier m ∈ Z∗n selon une
procédure connue de tous ;
– Bob envoie à Alice
m " = me mod n.
– Alice déchiffre en calculant (m " )d mod n = m.

Pourquoi cela fonctionne-t-il ? La justification est donnée par le théorème suivant

Théorème 5.1 Si (n, e, d) sont tels que décrits plus haut, alors la fonction

Z∗n → Z∗n
f:
m → me mod n

est bien définie et bijective, de bijection réciproque

Z∗n → Z∗n
f−1 :
m " → (m " )d mod n.

Quelques remarques :
– Pour un usage commercial, l’entier n est choisi à 300 chiffres décimaux environ
(128 bytes = 1024 bits en base 2)

24
– Comment calculer d à partir de p, q et e ? Réponse : algorithme d’Euclide.
– e et d ont typiquement plusieurs dizaines de chiffres dans leur développement
décimal. Comment calculer rapidement me mod n et (m " )d mod n ? Voir le pa-
ragraphe 5.4.
– Pourquoi est-ce que f−1 est difficile à évaluer connaissant n et e seulement ?
Car d’un point de vue pratique, on est ramené à déterminer p et q c.-à-d. à factoriser
n ce qui est (toujours d’un point de vue pratique) un problème difficile.
Record actuel : un entier n de 512 bits (155 chiffres décimales) factorisé en août
19996 .

5.3 Démonstration du théorème 5.1

Soient p et q deux nombres premiers distincts. On pose n = pq et on choisit e ∈


{1, . . . , (p − 1)(q − 1)} premier avec (p − 1)(q − 1). Soit m ∈ Z∗n donné et m " ≡ me
mod n. Soit alors d un inverse de e modulo (p − 1)(q − 1). Il existe donc k entier tel que
de = 1 + k(p − 1)(q − 1). Mais alors
# $k
(m " )d ≡ med ≡ m1+k(p−1)(q−1) ≡ m m(p−1)(q−1) mod n.

Or ϕ(n) = ϕ(p)ϕ(q) = (p − 1)(q − 1) (Voir propriétés de ϕ dans la proposition 2.4).


On obtient donc d’après le théorème 2.3 (théorème d’Euler) m(p−1)(q−1) ≡ 1 mod n et
donc (m " )d ≡ m mod n.

5.4 Calcul rapide de puissance

On a besoin de calculer f(m) = me mod n.


Méthode naïve : me = m × m × · · · m (m fois) modulo n. Ce qui n’est pas utilisable
lorsque e est très grand.
Idée
Si e = 2p, on peut écrire
me = (((m2)2)...)2,
où on a effectué p mises au carré successives (en prenant modulo n à chaque fois). Dans ce
cas, me mod n se calcule en effectuant p multiplications dans Zn où p = ln(e)/ ln(2) + e
si e est grand.
Généralisation :
On effectue la division euclidienne de e par 2 : e = 2e1 + '1 où '1 = 0 ou 1 et
0 ≤ e1 ≤ e/2 (e1 entier). On a

me = m"1 × (m2)e1 .

Or m"1 est très simple à calculer puisque m"1 = m si '1 = 1 ou 1 si '1 = 0.


6
à actualiser . . .

25
On est donc ramené à évaluer la puissance (m2)e1 où l’exposant est au moins deux
fois plus petit que e.
Si e1 = 0, on a terminé car me = m"1 .
Si e1 = 1, me = m"1 × m2.
Si e1 ≥ 2, on effectue la division euclidienne de e1 par 2 : e1 = 2e2 + '2 avec '2 = 0
ou 1 et 0 ≤ e2 ≤ e1/2.
Alors (m2)e1 = (m2)"2 × ((m2)2)e2 .
Si e2 ∈ {0, 1}, c’est terminé. Sinon, on effectue la division euclidienne de e2 par 2 . . .
Plus précisement, on démontre le résultat suivant : la suite {ei}i≥0 définie par e0 = e
et pour i ≥ 0,
ei = 2ei+1 + 'i+1
avec 'i+1 ∈ {0, 1}, est décroissante et nulle à partir d’un certain rang. Soit alors p =
min{i ≥ 0, ei = 0} − 1 (de sorte que e0 > e1 > · · · ep > 0 et ep+1 = 0).
De plus, on définit une suite {xi} comme x1 ≡ m mod n et xi+1 = x2i, 1 ≤ i ≤ p − 1.
On a
"p+1
me ≡ x"11 × x"22 × · · · × xp+1 mod n
me mod n se calcule donc avec p + 1 + p multiplications et en outre,

e = '1 + 2'2 + 22'3 + · · · 2p'p+1 ≥ 2p,

car 'p+1 = 1. Donc p ≤ ln(e)/ ln(2).


Finalement, l’algorithme de calcul rapide de puissance s’écrit

• Initialiser q ← 1 ;
• Faire tant que e )= 0,
– si e mod 2 = 1 alors q ← mq mod n ;
– e ← E(e/2) ;
– m ← m2 mod n.
• Retourner q.

Références
[1] Ronald L. Graham, Donald E. Knuth, Oren Patashnik, Concrete Mathematics,
Addison–Wesley publishing company, 1995.
[2] Evangelos Kranakis, Primality and Cryptography, Wiley–Teubner Series in
Computer Science, John Wiley & Sons, 1986.
[3] Gilles Dubertret, Initiation à la cryptographie, Vuibert, 2002.
[4] Bruno Schneier, Cryptographie appliquée, Vuibert, 2001.

26

Vous aimerez peut-être aussi