Arithmétique modulaire, nombres rationnels et cryptographie

  • Commentary
  • Downloaded from https://perso.math.u-pem.fr/printems.jacques/L2/2008-09/notes_cours.pdf
Citation preview

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  si n = 0  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 ? √ 2 L’équation √ du second degré x = x+1 possède deux racines ϕ = (1+ 5)/2 = 1.618 . . . 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

(2)

  u0 = 1, u1 = 0, v0 = 0, v1 = 1, 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’Euclide 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 2.1

Congruences 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

Pourquoi ?

4

mod m2, . . . ).

– 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  0    1 Ck n=  n(n − 1) · · · (n − k + 1)   k(k − 1) · · · 2 · 1

Pascal. si k > n, si k = 0 ou k = n, si 1 ≤ k ≤ n − 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 0 1 2 3 4 5

1 1 2 3 4 5 0

2 2 3 4 5 0 1

3 3 4 5 0 1 2

4 4 5 0 1 2 3

5 5 0 1 2 3 4

· 0 1 2 3 4 5

0 0 0 0 0 0 0

1 0 1 2 3 4 5

2 0 2 4 0 2 4

3 0 3 0 3 0 3

4 0 4 2 0 4 2

5 0 5 4 2 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

1 1 2 3 4 5 6 7 8 9 10

2 2 4 6 8 10 1 3 5 7 9

3 3 6 9 1 4 7 10 2 5 8

4 4 8 1 5 9 2 6 10 3 7

5 5 10 4 9 3 8 2 7 1 6

6 6 1 7 2 8 3 9 4 10 5

7 7 3 10 6 2 9 5 1 8 4

8 8 5 2 10 7 4 1 9 6 3

9 9 7 5 3 1 10 8 6 4 2

10 10 9 8 7 6 5 4 3 2 1

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

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

2 2 4 6 8 10 0 2 4 6 8 10

3 3 6 9 0 3 6 9 0 3 6 9

4 4 8 0 4 8 0 4 8 0 4 8

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

6 6 0 6 0 6 0 6 0 6 0 6

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

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

Tab. 3 – 1 2 12 24 16 17 6 18

Calcul de 3 4 5 17 18 19 30 11

12 × k modulo 31 pour k = 1, . . . , 30. 5 6 7 8 9 10 11 12 29 10 22 3 15 27 8 20 20 21 22 23 24 25 26 27 23 4 16 28 9 21 2 14

13 1 28 26

14 13 29 7

15 25 30 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

8 8 4 0 8 4 0 8 4 0 8 4

9 9 6 3 0 9 6 3 0 9 6 3

10 10 8 6 4 2 0 10 8 6 4 2

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

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

9

mod m.

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

m 2m 3m .. .

(n − 1)m + 1 (n − 1)m + 2 (n − 1)m + 3 · · ·

mn

1 m+1 2m + 1 .. .

2 m+2 2m + 2 .. .

3 m+3 2m + 3 .. .

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 3.1

Résolution d’équations de congruence, théorème chinois et partage du secret. É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 solution 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’équations 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 partage (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.

soit très grand. Cela rendra Il reste à construire de telles suites de sorte que M−N N 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 : insérer

m + m" m m" 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 : Si

m n