Aller au contenu principal

Arithmétique modulaire

Ce que ce chapitre apporte 7 points
  • Maîtriser divisibilité, division euclidienne, pgcd et ppcm.
  • Appliquer l'algorithme d'Euclide et sa version étendue, et énoncer le théorème de Bézout.
  • Calculer dans les congruences, déterminer un inverse modulaire et résoudre une équation ax equiv b \ [n].
  • Reconnaître les nombres premiers, appliquer le crible d'Ératosthène, citer les familles remarquables.
  • Utiliser l'indicatrice d'Euler et le petit théorème de Fermat pour réduire un exposant.
  • Simplifier une congruence quand c'est permis, et reconnaître quand cela ne l'est pas.
  • Faire chaque calcul à la main, puis le vérifier en une ligne de Python.

Un compteur d'eau envoie chaque nuit son relevé par radio. N'importe qui peut capter la trame, et le constructeur publie sa méthode de chiffrement : pour que le relevé reste illisible, il faut une opération que tout le monde sait faire et que seul le distributeur sait défaire. De quelles pièces de calcul une telle opération est-elle faite, et laquelle résiste à qui ne détient pas le secret ?

Ce chapitre construit ces pièces avec des entiers : le calcul sur les restes, qui garde tous les nombres dans un intervalle fixe, trois algorithmes rapides (Euclide, l'inverse modulaire, l'exponentiation par carrés), et l'opération qu'aucun algorithme connu ne fait vite, la factorisation. Il retourne au passage l'outil du chapitre sur la complexité : le coût de calcul y était un ennemi à faire baisser ; il devient ici le rempart sur lequel tout repose.

Travailler seul, section par section

Chaque section suit le même chemin.

  1. Le cours, avec ses figures à manipuler.
  2. Le rappel de cours : la notion, sa formule et un petit exemple résolu, juste avant de calculer.
  3. Le cadre de calcul, à faire à la main, sur papier : chaque réponse est jugée dès qu'elle est validée, et un indice s'ouvre à la demande.
  4. Le quiz, quand il y en a un, pour vérifier qu'une idée est en place.

Python ne sert qu'à vérifier un calcul déjà fait, dans la section « Vérifier à la machine ».

Un relevé chiffré se calcule sur des entiers

Le distributeur doit retrouver le relevé exact, au litre près : un déchiffrement qui rendrait 1 233,999 litres au lieu de 1 234 ne servirait à rien. Les nombres à virgule de la machine ne garantissent pas cette exactitude : en Python, 0.1 + 0.2 == 0.3 est faux, et le chapitre Les nombres à virgule flottante montre pourquoi, bit par bit. Un chiffrement calcule donc sur des entiers, que la machine range sans aucune erreur.

Sur les entiers, une opération familière perd sa garantie : la division. Dans les réels, 3x=53x = 5 a pour solution 5/35/3 ; dans les entiers, elle n'en a aucune, puisque 3 ne divise pas 5. Le calcul sur les restes, que ce chapitre construit, rebat encore les cartes : on y verra qu'il existe un entier xx tel que 7x7x laisse le reste 3 dans la division par 26, à savoir x=19x = 19, et qu'aucun ne convient pour 13x13x. Savoir quand une division est permise, et par quoi la remplacer, occupe une bonne part du chapitre.

Une horloge montre de quoi ce calcul est fait. Partir de midi, la case 0 en haut du cadran, et avancer d'une heure, de treize heures ou de vingt-cinq heures amène l'aiguille au même endroit : sur le 1. Ce qui se conserve d'un tour à l'autre n'est pas le nombre d'heures parcourues, c'est le reste, et lui seul. En regardant l'aiguille, impossible de dire combien de tours elle a faits : cette information est perdue, et aucun calcul ne la retrouve. La cryptographie ne s'appuie pas sur une telle perte, puisque le destinataire doit retrouver le message entier : elle emploie des opérations sur les restes qui ne perdent rien, et que seul le détenteur d'un secret sait défaire vite.

011 h, 13 h, 25 h234567891011modulo 12
n = 12
Le cadran modulo 12. Les trois étiquettes tombent sur la même case : 1, 13 et 25 ne diffèrent que d'un nombre entier de tours, c'est ce que la section sur les congruences appellera être congrus.
À manipuler
Les trois valeurs marquées restent 1, 13 et 25 quoi qu'on fasse : c'est le modulo qui bouge, et lui seul décide de ce qui tombe ensemble.
La figure s'ouvre sur le modulo 12, où les trois valeurs occupent la même case. Amener le curseur à 24 : elles se répartissent sur deux cases, 1 et 25 d'un côté, 13 de l'autre. Essayer ensuite 6, puis 4 : les trois se rejoignent de nouveau. La règle se lit sans calcul : deux nombres tombent sur la même case exactement quand leur différence est un multiple du modulo. Les écarts entre les trois valeurs valent 12 et 24, tous deux multiples de 12, de 6 et de 4, mais seul 24 est un multiple de 24.

Divisibilité et division euclidienne

Définitions

aa divise bb, noté a∣ba \mid b, s'il existe un entier kk tel que b=kab = ka.

Division euclidienne : pour aa entier et bb entier non nul, il existe un unique couple (q,r)(q, r) tel que a=bq+ra = bq + r avec 0≤r<∣b∣0 \leq r < |b|.

L'unicité du couple (q,r)(q, r) est ce qui rend tout le reste possible. Par exemple, 250=13×19+3250 = 13 \times 19 + 3 : 13×19=24713 \times 19 = 247, et le reste 3 est bien entre 0 et 12. En Python, a // b donne qq et a % b donne rr : ce sont les opérateurs de quotient entier et de reste du chapitre Les bases de Python.

Le reste a le signe du diviseur, en Python

-17 // 5 vaut -4 et -17 % 5 vaut 3, ce qui respecte −17=5×(−4)+3-17 = 5 \times (-4) + 3 avec 0≤3<50 \leq 3 < 5. En C ou en Java, -17 % 5 vaut -2 : ces langages arrondissent le quotient −3,4-3{,}4 vers zéro, soit −3-3, au lieu de l'arrondir vers le bas, soit −4-4, et le reste devient −17−5×(−3)=−2-17 - 5 \times (-3) = -2. Avec un diviseur positif nn, a % n est donc toujours entre 0 et n−1n - 1 en Python, même quand a est négatif.

En cryptographie, où tout est modulaire, cette différence transforme un chiffrement correct en chiffrement faux. C'est un piège classique du portage d'un algorithme d'un langage à l'autre.

Des restes, à la main

  • 1.

    1 000 vis se conditionnent en sachets de 24. Combien de sachets pleins remplit-on ?

  • 2.

    Combien de vis restent hors sachet ?

  • 3.

    Une maintenance commence à 7 h. Quelle heure était-il 30 heures plus tôt, sur un cadran de 0 à 23 ?

  • 4.

    Les jours sont numérotés de 0, le lundi, à 6, le dimanche. Une inspection a eu lieu un lundi et revient tous les 45 jours. Quel est le numéro du jour de la prochaine ?

Vérification rapideon peut se reprendre

Calculer a % n quand a est négatif, en Python et en C, donne…

PGCD et algorithme d'Euclide

Le pgcd est le plus grand entier divisant aa et bb ; le ppcm le plus petit multiple commun positif. Ils sont liés par pgcd⁡(a,b)×ppcm⁡(a,b)=∣ab∣\operatorname{pgcd}(a, b) \times \operatorname{ppcm}(a, b) = |ab|.

Deux entiers sont premiers entre eux si leur pgcd vaut 1. Ce n'est pas la même chose qu'être premiers : 8 et 9 sont premiers entre eux, et aucun des deux n'est premier.

Algorithme d'Euclide

Il repose sur une seule observation : pgcd⁡(a,b)=pgcd⁡(b,amod⁡b)\operatorname{pgcd}(a, b) = \operatorname{pgcd}(b, a \operatorname{mod} b), où amod⁡ba \operatorname{mod} b désigne le reste rr de la division euclidienne de aa par bb, celui que Python écrit a % b. On remplace le couple par un couple plus petit jusqu'à obtenir un reste nul ; le dernier reste non nul est le pgcd.

Cette observation se démontre en trois lignes, et il vaut la peine de les suivre : sans elle, l'algorithme n'est qu'une recette.

Le point de départ est la division euclidienne a=bq+ra = bq + r, récrite r=a−bqr = a - bq.

Soit dd un diviseur commun à aa et à bb. Il divise alors a−bqa - bq, c'est-à-dire rr : tout diviseur commun de aa et bb est aussi un diviseur commun de bb et rr.

Réciproquement, soit dd un diviseur commun à bb et à rr. Il divise bq+rbq + r, c'est-à-dire aa : tout diviseur commun de bb et rr est aussi un diviseur commun de aa et bb.

Les deux couples ont donc exactement les mêmes diviseurs communs, et en particulier le même plus grand. Remplacer (a,b)(a, b) par (b,r)(b, r) ne perd rien, et fait strictement décroître le second terme : c'est ce qui garantit à la fois la justesse et la terminaison.

C'est un des plus vieux algorithmes connus, et il reste remarquablement rapide : le nombre de divisions est en O(log⁡(min⁡(a,b)))O(\log(\min(a, b))), c'est-à-dire proportionnel au nombre de chiffres. La notation OO est celle du chapitre sur la complexité. Sur des nombres de 600 chiffres, l'algorithme pose en moyenne un peu plus d'un millier de divisions, jamais plus de trois mille, et termine en une fraction de milliseconde.

Euclide étendu et Bézout

Théorème de Bézout

Pour tous entiers aa et bb non nuls, il existe des entiers uu et vv tels que :

au+bv=pgcd⁡(a,b)au + bv = \operatorname{pgcd}(a, b)

En clair : le pgcd de deux entiers se fabrique toujours en les combinant, chacun multiplié par un entier bien choisi. uu et vv sont ces deux multiplicateurs, appelés coefficients de Bézout, et rien n'oblige qu'ils soient positifs.

En particulier, aa et bb sont premiers entre eux si et seulement s'il existe uu et vv avec au+bv=1au + bv = 1.

L'algorithme d'Euclide étendu calcule ce couple (u,v)(u, v) en même temps que le pgcd. Ce n'est pas une curiosité théorique : c'est exactement ce qui permettra de calculer une clé privée RSA. Une ligne de Python en donne le résultat, et la section « Vérifier à la machine » s'en sert ; mais il faut savoir dérouler le calcul à la main. C'est le seul moyen de comprendre d'où sortent uu et vv, et ce calcul revient dans tout le chapitre.

La descente, puis la remontée. Descendre. Poser les divisions euclidiennes successives, chacune sous la forme dividende = diviseur × quotient + reste, jusqu'à un reste nul. Le dernier reste non nul est le pgcd.

Remonter. Partir de la ligne qui donne ce pgcd, isolé à gauche. Puis, ligne après ligne en remontant, remplacer chaque reste par son expression tirée de la ligne du dessus. À la fin il ne reste que aa et bb, et leurs coefficients sont uu et vv.

Euclide étendu sur 3828 et 13, à la main

Ce couple n'est pas choisi au hasard : dans l'exemple RSA du chapitre suivant, 1313 sera l'exposant public et 38283828 le module dans lequel se calcule la clé privée, un nombre que la section « Euler et Fermat » saura construire.

La figure ci-dessous pose les deux moitiés côte à côte. Cliquer sur une ligne de la descente montre l'étape de remontée qui la consomme. Chaque ligne en a une, sauf la dernière, celle du reste nul, qui ne sert qu'à arrêter la descente : ce lien ne saute pas aux yeux quand les deux moitiés sont recopiées l'une sous l'autre.

pgcd deet

La descentediviser jusqu'à un reste nul

3828=13 × 294+6
13=6 × 2+1
6=1 × 6+0

Dernier reste non nul : 1. Les deux nombres sont premiers entre eux.

La remontéeune étape par ligne, du bas vers le haut

Substituer le reste de la ligne du dessus revient à (α, β) ← (β, α − β × q) avec q = 294. Toute la remontée tient dans cette règle.

Bézout. 3828 × (−2) + 13 × 589 = 1contrôle : 1 = 1 ✓

Inverse modulaire. Le coefficient de 13 vaut 589, ramené dans [0 ; 3827] il donne 13⁻¹ ≡ 589 [3828]contrôle : 13 × 589 = 7657 ≡ 1

Euclide étendu sur 3828 et 13. La descente donne le pgcd, la remontée donne les coefficients de Bézout, et le coefficient de 13, ramené au besoin entre 0 et 3827, est l'inverse de 13 modulo 3828.
À manipuler
Cliquer sur chaque ligne de la descente, de haut en bas : à chaque ligne, le diviseur de la précédente devient le dividende, et son reste devient le diviseur. La remontée surligne en face l'étape qui consomme cette ligne.
Changer ensuite les deux nombres. Avec 48 et 18, le pgcd vaut 6 et l'inverse n'existe pas : la figure le dit au lieu de rendre un nombre faux. Avec 64 et 35, le pgcd vaut 1 alors qu'aucun des deux n'est premier : premier est une propriété d'un nombre seul, premiers entre eux une propriété d'un couple, et c'est la seconde que RSA exige de son exposant public.

La descente pose trois divisions : 3828=13×294+63828 = 13 \times 294 + 6, puis 13=6×2+113 = 6 \times 2 + 1, puis 6=1×6+06 = 1 \times 6 + 0. Elle s'arrête sur ce reste nul. Le dernier reste non nul vaut 11 : les deux nombres sont premiers entre eux, et Bézout garantit donc l'existence de uu et vv.

La remontée repart de la ligne qui isole ce 11, puis y remplace le reste de la ligne du dessus. La descente est courte, et une seule substitution suffit :

1=13−6×21 = 13 - 6 \times 2

6=3828−13×2946 = 3828 - 13 \times 294, d'où 1=13−2×(3828−294×13)=589×13−2×38281 = 13 - 2 \times (3828 - 294 \times 13) = 589 \times 13 - 2 \times 3828

Le résultat. 3828×(−2)+13×589=−7656+7657=13828 \times (-2) + 13 \times 589 = -7656 + 7657 = 1. Donc u=−2u = -2 et v=589v = 589.

Ce résultat resservira. Le coefficient de 13, 589589, est déjà compris entre 0 et 3827, et 13×589=7 657=2×3828+113 \times 589 = 7\,657 = 2 \times 3828 + 1 : multiplié par 13, ce nombre laisse un reste de 1 dans la division par 3828. La section sur l'inverse modulaire donnera son nom à cette propriété, et 589\mathbf{589} réapparaîtra tel quel comme clé privée au chapitre suivant.

Une seule règle pour remonter

Sur chaque ligne, le pgcd s'écrit α×dividende+β×diviseur\alpha \times \text{dividende} + \beta \times \text{diviseur}. Remonter d'une ligne, c'est récrire cette égalité avec les nombres de la ligne du dessus : le dividende courant y est le diviseur, et le diviseur courant y est le reste, égal à dividende moins quotient fois diviseur. Le calcul se résume en une règle :

(α,β)←(β,α−βq)(\alpha , \beta ) \leftarrow (\beta , \alpha - \beta q)

où qq est le quotient de la ligne du dessus. Sur l'exemple, la ligne 13=6×2+113 = 6 \times 2 + 1 donne 1=1×13+(−2)×61 = 1 \times 13 + (-2) \times 6, soit (1,−2)(1, -2), puis, avec le quotient 294 de la ligne du dessus, (−2,1−(−2)×294)=(−2,589)(-2, 1 - (-2) \times 294) = (-2, 589). La figure affiche cette règle à chaque étape.

Un coefficient négatif n'est pas une erreur de calcul

La remontée produit presque toujours un uu ou un vv négatif, et l'un des deux au moins doit l'être dès que aa et bb sont premiers entre eux et dépassent 1 : avec uu et vv positifs ou nuls, au+bvau + bv vaut 0 ou atteint déjà au moins 2, jamais 1.

Sur l'exemple, le signe moins tombe sur u=−2u = -2, et le coefficient de 13, v=589v = 589, est déjà entre 0 et 3827. Ce n'est qu'une chance : sur 38283828 et 55, la remontée donne 3828×2+5×(−1531)=13828 \times 2 + 5 \times (-1531) = 1, et c'est cette fois le coefficient de 5 qui est négatif. Le réflexe est de le ramener entre 0 et 3827 en lui ajoutant 3828 autant de fois qu'il le faut, ici une fois : −1531+3828=2297-1531 + 3828 = 2297. En Python, % le fait déjà : -1531 % 3828 vaut bien 2297, là où le % du C rendrait -1531.

Le contrôle prend cinq secondes : recalculer au+bvau + bv et vérifier que le résultat est le pgcd, ici 7656−7655=17656 - 7655 = 1. Une erreur de signe ou de quotient se voit immédiatement, alors qu'elle se propagerait sans bruit jusqu'à une clé privée fausse.

Rappel de cours : pgcd, ppcm et algorithme d'Euclide

Le pgcd de aa et bb est le plus grand entier qui divise les deux ; le ppcm, le plus petit multiple commun positif, et pgcd⁡(a,b)×ppcm⁡(a,b)=ab\operatorname{pgcd}(a, b) \times \operatorname{ppcm}(a, b) = ab pour aa et bb positifs. Euclide remplace le couple (a,b)(a, b) par (b,r)(b, r), où rr est le reste de aa par bb, jusqu'à un reste nul : le dernier reste non nul est le pgcd.

Exemple résolu, sur 84 et 60. 84=60×1+2484 = 60 \times 1 + 24, puis 60=24×2+1260 = 24 \times 2 + 12, puis 24=12×2+024 = 12 \times 2 + 0 : trois divisions, et pgcd⁡(84,60)=12\operatorname{pgcd}(84, 60) = 12. Le ppcm vaut 84×60/12=42084 \times 60 / 12 = 420.

Le pgcd et le ppcm, à la main

  • 1.

    Des tôles de 1 365 mm sur 1 155 mm se découpent en carrés identiques, sans chute, les plus grands possible. Quel est le côté d'un carré ?

    mm
  • 2.

    Combien de divisions la descente d'Euclide a-t-elle posées, jusqu'au reste nul ?

  • 3.

    Combien de carrés tire-t-on d'une tôle ?

  • 4.

    Deux opérations de maintenance reviennent, l'une toutes les 1 365 heures de marche, l'autre toutes les 1 155, et viennent d'avoir lieu ensemble. Dans combien d'heures auront-elles de nouveau lieu ensemble ?

    h
Vérification rapideon peut se reprendre

Deux nombres premiers entre eux sont…

Congruences : calculer modulo nn

Beaucoup de questions ne demandent pas un résultat, seulement un reste. L'heure qu'il sera dans 50 heures, le jour de la semaine dans 100 jours, la case d'une table de hachage, la lettre obtenue après un décalage de l'alphabet. Dans tous ces cas, le quotient ne sert à rien. Calculer le résultat exact puis prendre son reste est un détour coûteux. Les congruences sont le langage qui permet de travailler directement sur les restes, sans jamais quitter les petits nombres.

Définition

a≡b [n]a \equiv b \ [n] (« aa congru à bb modulo nn ») signifie que nn divise a−ba - b, autrement dit que aa et bb ont le même reste dans la division par nn.

La notation se lit à voix haute en deux morceaux : le symbole ≡\equiv se dit « est congru à », et le [n][n] se dit « modulo nn ». Ce [n][n] porte sur toute l'égalité, jamais sur le seul membre de droite. D'autres ouvrages écrivent a≡b(modn)a \equiv b \pmod n : c'est la même chose, et ce chapitre s'en tient aux crochets.

Ce que la définition écarte : ≡\equiv n'est pas ==. Deux nombres congrus restent deux nombres différents, et rien n'autorise à remplacer l'un par l'autre hors d'un calcul modulo nn.

012345678910111213141515, −11, 4116171819202122232425modulo 26
n = 26
Le cadran modulo 26. Les trois étiquettes désignent la même case : −11, 15 et 41 sont congrus, parce qu'ils ne diffèrent que d'un nombre entier de tours.

Ce qu'il faut y voir : une case du cadran ne porte pas un nombre, elle porte une infinité de nombres, ceux qui laissent le même reste. La vérification tient en deux soustractions : 41−15=2641 - 15 = 26 et 15−(−11)=2615 - (-11) = 26, tous deux multiples de 26. Une congruence se contrôle toujours ainsi, en soustrayant.

La congruence est compatible avec l'addition et la multiplication : si a≡b [n]a \equiv b \ [n] et c≡d [n]c \equiv d \ [n], alors a+c≡b+d [n]a + c \equiv b + d \ [n] et ac≡bd [n]ac \equiv bd \ [n]. Remplacer un nombre par un autre de la même case ne change donc pas la case du résultat, et on peut réduire à chaque étape d'un calcul, ce qui évite de manipuler des nombres gigantesques. Exemple : 41×1541 \times 15 modulo 26. Comme 41≡1541 \equiv 15, le produit tombe dans la même case que 15×15=225=8×26+1715 \times 15 = 225 = 8 \times 26 + 17, donc 41×15≡17 [26]41 \times 15 \equiv 17 \ [26], sans avoir calculé 615615. De même, puisque 100=14×7+2100 = 14 \times 7 + 2, on sera dans 100 jours le même jour de la semaine que dans 2 jours.

Réduire chaque terme ne dispense pas de réduire le résultat : modulo 11, 20+30≡9+8=1720 + 30 \equiv 9 + 8 = 17, qui se réduit encore en 6. Un résultat qui sort de [0;n−1][0 ; n - 1] n'est pas faux, mais il n'est pas fini, et la comparaison avec un reste attendu échouera.

Modulo 6, simplifier par 2 est interdit

Modulo 6 : 2×3=6≡02 \times 3 = 6 \equiv 0. Ni 2 ni 3 n'est nul, et pourtant leur produit l'est. Autrement dit, 2×3≡2×0 [6]2 \times 3 \equiv 2 \times 0 \ [6] alors que 3≢0 [6]3 \not\equiv 0 \ [6] : « simplifier par 2 » de part et d'autre, comme on le ferait dans R\mathbb{R}, conduirait à la conclusion fausse 3≡03 \equiv 0.

Ce phénomène disparaît quand nn est premier : modulo un nombre premier, tout élément non nul est inversible, et un produit d'éléments non nuls n'est jamais nul. C'est pourquoi une bonne part de la cryptographie calcule modulo un nombre premier. Le module de RSA, produit de deux premiers PP et QQ, n'en est pas un : les multiples de PP ou de QQ y jouent le rôle du 2 et du 3 de l'exemple. Ils sont si rares qu'en tomber sur un par hasard reviendrait à avoir trouvé un facteur du module.

Rappel de cours : la preuve par neuf

Comme 10=9+110 = 9 + 1, on a 10≡1 [9]10 \equiv 1 \ [9], donc toute puissance de 10 est congrue à 1 modulo 9 : un nombre est congru modulo 9 à la somme de ses chiffres. C'est le principe de la preuve par neuf.

Exemple résolu. 1 234≡1+2+3+4=10≡1+0=1 [9]1\,234 \equiv 1 + 2 + 3 + 4 = 10 \equiv 1 + 0 = 1 \ [9], et 56≡5+6=11≡2 [9]56 \equiv 5 + 6 = 11 \equiv 2 \ [9]. Le produit 1 234×56=69 1041\,234 \times 56 = 69\,104 doit donc laisser le reste 1×2=21 \times 2 = 2 : 6+9+1+0+4=20≡26 + 9 + 1 + 0 + 4 = 20 \equiv 2, la preuve passe.

La preuve par neuf d'un bon de commande

  • 1.

    Un bon de commande porte 4 573 pièces à 2 819 centimes l'unité. Quel reste laisse 4 573 dans la division par 9 ?

  • 2.

    Quel reste laisse 2 819 dans la division par 9 ?

  • 3.

    Quel reste doit donc laisser le total, 4 573 × 2 819 centimes, dans la division par 9 ?

  • 4.

    Le total a été recopié 12 819 287 au lieu de 12 891 287. Quel reste ce nombre recopié laisse-t-il dans la division par 9 ?

Comparer les deux dernières réponses, et dire ce que la preuve par neuf laisse passer : deux chiffres échangés gardent la même somme. La clé d'un IBAN, calculée modulo 97, attrape cette erreur-là.

L'inverse modulaire

Définition

L'inverse de aa modulo nn est l'entier xx de [0;n−1][0 ; n-1] tel que ax≡1 [n]ax \equiv 1 \ [n]. Il existe si et seulement si pgcd⁡(a,n)=1\operatorname{pgcd}(a, n) = 1, et on l'obtient par Euclide étendu : de au+nv=1au + nv = 1 on tire au≡1 [n]au \equiv 1 \ [n].

La ligne du milieu, celle qu'on saute souvent : dans au+nv=1au + nv = 1, le terme nvnv est un multiple de nn, donc il vaut 0 modulo nn. Il ne reste que au≡1au \equiv 1, ce qui est la définition de l'inverse. L'inverse est donc le coefficient du nombre à inverser, quelle que soit la lettre qui le porte, ramené dans [0;n−1][0 ; n-1] : dans l'exemple de 3828 et 13, c'est le coefficient de 13, noté vv, soit 589.

Cette condition sur le pgcd n'est pas une clause technique : elle se voit. Avancer de aa en aa sur le cadran revient à parcourir les multiples de aa, et deux cas seulement se présentent.

012345678910111213141516171819202122232425modulo 26pas de 7
n = 26
26 cases sur 26 (pgcd 1)
Un pas de 7 modulo 26. Le tracé passe par les vingt-six cases avant de revenir au départ : 7 est premier avec 26, donc il existe un nombre de pas qui tombe exactement sur 1. C'est cela, être inversible.
À manipuler
Suivre du doigt le tracé du pas de 7 depuis la case 0 : il passe par toutes les cases avant de revenir au départ, et le compteur sous la figure annonce 26 cases sur 26.
Amener ensuite le pas à 13. Le tracé se referme aussitôt sur deux cases, le pgcd affiché passe à 13, et la case 1 n'est jamais touchée : c'est cela, ne pas être inversible. Numéroter les lettres de 0 à 25 et chiffrer en multipliant par 13, cas particulier du chiffrement affine du chapitre suivant, enverrait toutes les lettres de rang pair sur 0 et toutes celles de rang impair sur 13 : deux lettres chiffrées seulement, et plus aucun moyen de relire le message, même en connaissant la clé.
Balayer enfin tout l'intervalle et noter quels pas font le tour complet : 1, 3, 5, 7, 9, 11, 15… tous les impairs sauf 13. Ce sont exactement les nombres premiers avec 26, et le compteur de cases le dit avant tout calcul.

Une case jamais atteinte a un revers : les cases atteintes le sont par plusieurs nombres de pas différents (1, 3, 5… pas de 13 mènent tous à la case 13), si bien qu'en voyant la case d'arrivée on ne peut plus dire combien de pas ont été faits, comme les tours sur l'horloge du début. Avec un pas de 7, rien ne se perd : chaque case est atteinte par un seul nombre de pas entre 0 et 25, et l'inverse permet de revenir en arrière. Le curseur du modulo, placé au-dessus de celui du pas, montre d'ailleurs que le phénomène ne tient pas au 26 : un pas de 13 modulo 27 fait, lui, le tour complet.

La règle, en une phrase

Le pas de aa visite exactement n/pgcd⁡(a,n)n / \operatorname{pgcd}(a, n) cases. Il fait donc le tour complet, et n'atteint le 1, que si ce pgcd vaut 1. C'est la même condition que celle du théorème, vue depuis le cercle plutôt que depuis Bézout.

Le lien avec l'inverse tient en une ligne : après kk pas de 7 depuis 0, le tracé est sur la case 7k mod 267k \bmod 26. Tomber sur 1, c'est donc trouver kk tel que 7k≡1 [26]7k \equiv 1 \ [26], c'est-à-dire l'inverse de 7. Ici k=15k = 15, puisque 7×15=105=4×26+17 \times 15 = 105 = 4 \times 26 + 1.

Cet inverse sert à simplifier quand c'est permis. Pour résoudre 7x≡3 [26]7x \equiv 3 \ [26], multiplier les deux membres par 15 donne 105x≡45105x \equiv 45, c'est-à-dire x≡19 [26]x \equiv 19 \ [26], puisque 105≡1105 \equiv 1 et 45=26+1945 = 26 + 19. Contrôle : 7×19=133=5×26+37 \times 19 = 133 = 5 \times 26 + 3. Multiplier par l'inverse de 7, c'est exactement « diviser par 7 » ; quand l'inverse n'existe pas, cette division n'a pas de sens.

Rappel de cours : l'inverse modulaire, et l'équation ax≡b [n]ax \equiv b \ [n]

L'inverse a−1a^{-1} de aa modulo nn : descendre Euclide sur nn et aa, remonter jusqu'à 1=nu+av1 = nu + av, et ramener le coefficient de aa dans [0;n−1][0 ; n - 1]. L'équation ax≡b [n]ax \equiv b \ [n] se résout alors en x≡a−1×b [n]x \equiv a^{-1} \times b \ [n].

Exemple résolu, l'inverse de 3 modulo 10. La descente tient en deux lignes : 10=3×3+110 = 3 \times 3 + 1, puis 3=1×3+03 = 1 \times 3 + 0. La première donne 1=10×1+3×(−3)1 = 10 \times 1 + 3 \times (-3) : le coefficient de 3 vaut −3-3, soit −3+10=7-3 + 10 = 7. Contrôle : 3×7=21=2×10+13 \times 7 = 21 = 2 \times 10 + 1. Pour résoudre 3x≡4 [10]3x \equiv 4 \ [10] : x≡7×4=28≡8x \equiv 7 \times 4 = 28 \equiv 8, et en effet 3×8=24≡43 \times 8 = 24 \equiv 4.

Le saut de fréquence, à la main

  • 1.

    Un émetteur saute de 7 canaux sur 60 à chaque trame, à partir du canal 0. Combien de divisions la descente d'Euclide sur 60 et 7 pose-t-elle, jusqu'au reste nul ?

  • 2.

    Quel est l'inverse de 7 modulo 60, entre 0 et 59 ?

  • 3.

    Après combien de trames l'émetteur est-il sur le canal 25 ?

Vérification rapideon peut se reprendre

1.Le théorème de Bézout garantit l'existence de u et v tels que au + bv = pgcd(a, b). À quoi cela sert-il concrètement ?

2.La remontée d'Euclide produit presque toujours un coefficient négatif. Est-ce une erreur ?

Nombres premiers

Définition

Un entier p≥2p \geq 2 est premier s'il admet exactement deux diviseurs positifs distincts : 1 et lui-même. La condition p≥2p \geq 2 écarte 1, qui n'en a qu'un, et protège le théorème fondamental de l'arithmétique : tout entier n≥2n \geq 2 se décompose de façon unique en produit de facteurs premiers, ce que 6=2×3=1×2×36 = 2 \times 3 = 1 \times 2 \times 3 ruinerait.

Le crible d'Ératosthène

Pour lister tous les premiers jusqu'à NN : on écrit les entiers de 2 à NN, on garde le plus petit non barré, on barre tous ses multiples, on recommence. On peut s'arrêter dès que le carré du candidat dépasse NN.

Le crible jusqu'à 30, à la main

Garder 2 et barrer ses multiples à partir de 4 ; garder 3 et barrer à partir de 9 ; garder 5 et barrer 25 (30 l'est déjà) ; le candidat suivant, 7, a pour carré 49, plus que 30 : le crible est fini. Restent 2, 3, 5, 7, 11, 13, 17, 19, 23 et 29.

12342562
7829310211122
1314215316217182
1920221322223242
25526227328229302

Le tableau range les entiers de 1 à 30 par lignes de six. Les premiers sont en gras ; un nombre barré porte en indice le premier qui l'a barré, au passage de 2, de 3 ou de 5. 1 n'est ni premier ni barré. Les rangées de six font voir le travail du crible : les deuxième, quatrième et sixième colonnes tombent entières au passage de 2, la troisième au passage de 3, et au-delà de 3 les premiers ne se trouvent plus que dans la première et la cinquième colonne, de part et d'autre d'un multiple de 6. Le passage de 5 n'y barre que 25.

Pourquoi commencer à p2p^2 : un multiple de pp plus petit que p2p^2 s'écrit p×kp \times k avec k<pk < p, donc il a un facteur plus petit que pp, et il est déjà barré.

À la main, le crible s'arrête vite. La machine le pousse jusqu'à 100 000 et montre ce que la main ne voit pas : les premiers se raréfient, sans jamais s'arrêter.

main.py
Sortie
>_ Prêt à exécuter…

Familles remarquables

Trois familles remarquables

Mersenne : Mp=2p−1M_p = 2^p - 1. Pour que MpM_p soit premier, il faut que pp le soit, mais cela ne suffit pas : M11=2047=23×89M_{11} = 2047 = 23 \times 89. Les plus grands premiers connus sont des nombres de Mersenne, parce qu'il existe un test de primalité spécifique et très rapide pour cette forme.

Fermat : Fn=22n+1F_n = 2^{2^n} + 1. Fermat conjecturait qu'ils étaient tous premiers ; c'est vrai pour F0F_0 à F4F_4 (3, 5, 17, 257, 65537), et Euler a réfuté la conjecture en factorisant F5=4 294 967 297=641×6 700 417F_5 = 4\,294\,967\,297 = 641 \times 6\,700\,417. Seul un exposant puissance de 2 peut donner un premier de la forme 2m+12^m + 1 : si mm a un facteur impair k>1k > 1, 2m/k+12^{m/k} + 1 divise 2m+12^m + 1, comme 5 divise 26+1=652^6 + 1 = 65. C'est le pendant de la règle de Mersenne.

Sophie Germain : pp est un premier de Sophie Germain si 2p+12p + 1 est aussi premier. Les premiers sont 2, 3, 5, 11, 23, 29, 41… Ils sont recherchés en cryptographie parce qu'ils produisent des groupes à la structure bien maîtrisée.

Factoriser est difficile, et tout repose là-dessus

Multiplier deux nombres premiers de 300 chiffres prend une fraction de microseconde. Retrouver ces deux facteurs à partir du produit est, à ce jour, hors de portée de toute machine existante.

C'est l'asymétrie fondamentale sur laquelle RSA est bâti : une opération immédiate dans un sens, sans méthode praticable dans l'autre.

La méthode la plus simple, la division d'essai, essaie les diviseurs 2, 3, 4… tant que leur carré ne dépasse pas le nombre : un diviseur plus grand que la racine en apparie un plus petit, déjà essayé. Le bloc suivant la chronomètre sur trois produits de deux premiers.

main.py
Sortie
>_ Prêt à exécuter…

La division d'essai n'est pas la meilleure attaque connue : des méthodes bien plus fines ont factorisé en 2020 un nombre de 250 chiffres, au prix de milliers d'années de calcul cumulées. Leur coût croît encore trop vite pour 600 chiffres, et c'est lui, non la division d'essai, qui fixe la taille des clés.

Ce que « difficile » veut dire, et ne veut pas dire. Il n'est pas démontré que factoriser est intrinsèquement difficile : c'est une difficulté constatée, pas prouvée. Un algorithme efficace pourrait exister et n'avoir pas été trouvé ; ce chapitre et le suivant s'appuient sur un constat, pas sur un théorème.

On sait en revanche que l'algorithme de Shor factorise en temps polynomial sur un ordinateur quantique. La menace n'est pas théorique, elle est technologique, et elle motive la cryptographie post-quantique, qui repose sur d'autres problèmes difficiles, pas sur la factorisation.

Rappel de cours : la division d'essai et la forme 2m+12^m + 1

Division d'essai : pour trouver le plus petit facteur de nn, essayer d=2,3,4…d = 2, 3, 4\dots tant que d2≤nd^2 \leq n. Si aucun ne divise nn, il est premier. Pour un nombre de cc chiffres, cela fait jusqu'à environ 10c/210^{c/2} essais, autant que sa racine.

Forme 2m+12^m + 1 : si mm a un facteur impair k>1k > 1, alors 2m/k+12^{m/k} + 1 divise 2m+12^m + 1.

Exemple résolu. Pour 91 : 92=81≤91<100=1029^2 = 81 \leq 91 < 100 = 10^2, il suffit d'essayer jusqu'à 9. Ni 2, ni 3, ni 4, ni 5, ni 6 ne divisent 91, et 91=7×1391 = 7 \times 13 : le plus petit facteur est 7, trouvé à la sixième division. Et puisque 6=2×36 = 2 \times 3 a le facteur impair 3, 26/3+1=52^{6/3} + 1 = 5 divise 26+1=652^6 + 1 = 65.

Des premiers et des facteurs, à la main

  • 1.

    Pour cribler jusqu'à 60, quel est le dernier nombre dont on barre les multiples ?

  • 2.

    Combien de nombres premiers compte-t-on jusqu'à 60 ?

  • 3.

    Un lot de 2 021 bagues doit se répartir en caisses identiques, de plus d'une bague chacune et en plus d'une caisse. Combien de bagues par caisse, au minimum ?

  • 4.

    Combien de divisions la division d'essai a-t-elle posées pour le trouver, en essayant 2, 3, 4… dans l'ordre ?

  • 5.

    Le nombre 212+1=4 0972^{12} + 1 = 4\,097 n'est pas premier. Quel diviseur de la forme 2j+12^{j} + 1, avec j<12j < 12, la règle des facteurs impairs garantit-elle ?

Vérification rapideon peut se reprendre

1.Pour savoir si 221 est premier par division d'essai, jusqu'où faut-il essayer les diviseurs ?

2.Par division d'essai, un nombre de 22 chiffres demande, par rapport à un nombre de 20 chiffres…

Euler et Fermat

La section sur l'inverse modulaire a laissé une question ouverte. Un élément est inversible modulo nn quand son pgcd avec nn vaut 1 : combien y en a-t-il ? Ce nombre porte un nom, et c'est lui qui servira de module pour calculer la clé privée RSA, comme 38283828 dans l'exemple d'Euclide étendu.

Indicatrice d'Euler

φ(n)\varphi (n) est le nombre d'entiers de 1 à nn premiers avec nn.

  • φ(p)=p−1\varphi (p) = p - 1 si pp est premier ;
  • φ(pq)=(p−1)(q−1)\varphi (pq) = (p - 1)(q - 1) si pp et qq sont deux premiers distincts.

La lettre φ\varphi se lit « phi », et φ(n)\varphi(n) se dit « phi de nn ». Elle compte donc les entiers de l'intervalle [1;n][1 ; n] dont le pgcd avec nn vaut 1, c'est-à-dire exactement les éléments inversibles modulo nn. Sur n=12n = 12 : les candidats sont 1, 5, 7 et 11, et aucun autre, car tous les autres partagent un 2 ou un 3 avec 12. Donc φ(12)=4\varphi(12) = 4.

La première égalité est immédiate : si pp est premier, tous les entiers de 1 à p−1p - 1 lui sont premiers, et seul pp ne l'est pas.

La seconde se compte, et ce décompte mérite d'être fait une fois, parce que c'est lui qui donne le module de la clé privée RSA.

Parmi les pqpq entiers de 1 à pqpq, un entier n'est pas premier avec pqpq exactement lorsqu'il est multiple de pp ou multiple de qq. Il y a qq multiples de pp (à savoir p,2p,…,qpp, 2p, \dots, qp) et pp multiples de qq. Le seul entier compté deux fois est pqpq lui-même, qui est multiple des deux.

Le nombre d'entiers à retirer vaut donc p+q−1p + q - 1, et il reste

φ(pq)=pq−p−q+1=(p−1)(q−1)\varphi (pq) = pq - p - q + 1 = (p - 1)(q - 1)

Un entier multiple à la fois de pp et de qq est multiple de pqpq, et entre 1 et pqpq il n'y en a qu'un. Sur un petit cas, p=3p = 3 et q=5q = 5 : parmi les entiers de 1 à 15, les multiples de 3 sont 3, 6, 9, 12, 15 (cinq, soit qq) et ceux de 5 sont 5, 10, 15 (trois, soit pp). Seul 15 est compté deux fois, il faut donc en retirer 5+3−1=75 + 3 - 1 = 7, et il reste φ(15)=8=2×4\varphi(15) = 8 = 2 \times 4. Sur le module RSA du chapitre suivant, N=3953=59×67N = 3953 = 59 \times 67, la formule donne φ(3953)=58×66=3828\varphi(3953) = 58 \times 66 = 3828 : c'est le 3828 de l'exemple d'Euclide étendu.

Ce décompte n'est possible que si l'on connaît pp et qq

C'est toute la sécurité de RSA en une phrase. Calculer φ(N)\varphi (N) demande la factorisation de NN ; sans elle, il n'existe aucun raccourci connu. Un attaquant qui obtiendrait φ(N)\varphi (N) par un autre moyen calculerait la clé privée en une ligne, par Euclide étendu.

D'où l'erreur à ne pas commettre : φ(N)=N−1\varphi(N) = N - 1 est faux dès que NN n'est pas premier. Si c'était vrai, tout le monde pourrait calculer φ(N)\varphi(N), et la clé privée avec.

Deux théorèmes

Petit théorème de Fermat : si pp est premier et ne divise pas aa, alors ap−1≡1 [p]a^{p-1} \equiv 1 \ [p].

Théorème d'Euler, qui le généralise : si pgcd⁡(a,n)=1\operatorname{pgcd}(a, n) = 1, alors aφ(n)≡1 [n]a^{\varphi(n)} \equiv 1 \ [n].

En clair : élever un nombre à la puissance φ(n)\varphi(n) ramène toujours à 1, à la seule condition que ce nombre n'ait aucun facteur commun avec nn. C'est un retour garanti au point de départ. Dépasser cet exposant ne fait que recommencer le même tour : en écrivant l'exposant k=qφ(n)+rk = q\varphi(n) + r, on obtient ak=(aφ(n))q×ar≡1q×ar=ara^k = \left(a^{\varphi(n)}\right)^q \times a^r \equiv 1^q \times a^r = a^r, donc seul le reste de l'exposant modulo φ(n)\varphi(n) compte. Par exemple, modulo 11, qui est premier, φ(11)=10\varphi(11) = 10, et 323≡33=27≡5 [11]3^{23} \equiv 3^{3} = 27 \equiv 5 \ [11].

L'exposant se réduit modulo φ(n), jamais modulo n

Réduire 23 modulo 11 donnerait 31=33^{1} = 3 au lieu de 5 : le module de l'exposant n'est pas celui du calcul. Et la réduction suppose la base première avec nn : modulo 12, 24=16≡42^{4} = 16 \equiv 4, alors que φ(12)=4\varphi(12) = 4. Une base qui partage un facteur avec le module ne revient jamais à 1.

C'est ce second théorème qui fait fonctionner RSA : c'est lui qui fera disparaître le facteur parasite au moment du déchiffrement.

Rappel de cours : la réduction de l'exposant

Si pgcd⁡(a,n)=1\operatorname{pgcd}(a, n) = 1, alors ak≡ar [n]a^{k} \equiv a^{r} \ [n], où rr est le reste de kk dans la division par φ(n)\varphi(n) : l'exposant se réduit modulo φ(n)\varphi(n), jamais modulo nn.

Exemple résolu, 2352^{35} modulo 7. 7 est premier, donc φ(7)=6\varphi(7) = 6, et 2 est premier avec 7. 35=6×5+535 = 6 \times 5 + 5, d'où 235≡25=32=4×7+42^{35} \equiv 2^{5} = 32 = 4 \times 7 + 4, soit 235≡4 [7]2^{35} \equiv 4 \ [7].

Le code d'un lot, sans calculer la puissance

  • 1.

    Une étiqueteuse imprime sur le lot numéro kk le code 5k5^{k} modulo 13. Combien vaut φ(13)\varphi(13) ?

  • 2.

    Quel reste laisse 2 026, le numéro du lot, dans la division par φ(13)\varphi(13) ?

  • 3.

    Quel code porte le lot 2 026, c'est-à-dire 520265^{2026} modulo 13 ?

  • 4.

    Un technicien réduit l'exposant modulo 13 au lieu de 12. Quel code croit-il trouver ?

Vérification rapideon peut se reprendre

1.Combien vaut φ(35)\varphi(35), sachant que 35=5×735 = 5 \times 7 ?

2.Pour calculer 3233^{23} modulo 11, par quel nombre réduit-on l'exposant 23 ?

L'exponentiation modulaire rapide

Calculer admod⁡na^d \operatorname{mod} n avec dd de 600 chiffres semble impossible. Il ne l'est pas, grâce à une idée simple : élever au carré plutôt que multiplier une fois de plus. Le coût ne croît alors plus qu'avec le nombre de chiffres de l'exposant.

Un exemple, avec les nombres de l'exemple RSA du chapitre suivant : 6513 mod 395365^{13} \bmod 3953, où 3953=59×673953 = 59 \times 67 et où 1313 est l'exposant public déjà rencontré avec Euclide étendu. L'écriture binaire de l'exposant, 13=11012=8+4+113 = 1101_2 = 8 + 4 + 1, donne 6513=658×654×6565^{13} = 65^{8} \times 65^{4} \times 65. Trois élévations au carré fournissent 65265^2, 65465^4 et 65865^8, chacune réduite modulo 3953 avant la suivante :

652=4 225≡27265^2 = 4\,225 \equiv 272, puis 2722=73 984≡2 830272^2 = 73\,984 \equiv 2\,830, puis 2 8302=8 008 900≡1222\,830^2 = 8\,008\,900 \equiv 122. Donc 654≡2 83065^{4} \equiv 2\,830 et 658≡122 [3953]65^{8} \equiv 122 \ [3953].

Il reste deux multiplications : 122×2 830=345 260=87×3953+1 349122 \times 2\,830 = 345\,260 = 87 \times 3953 + 1\,349, puis 1 349×65=87 685=22×3953+7191\,349 \times 65 = 87\,685 = 22 \times 3953 + 719, d'où 6513≡719 [3953]65^{13} \equiv \mathbf{719} \ [3953]. Cinq opérations au total, et aucun nombre intermédiaire de plus de sept chiffres, alors que 651365^{13} écrit en entier en compterait vingt-quatre. Réduire à chaque étape est ce qui rend le calcul possible.

Rappel de cours : l'exponentiation par carrés successifs

Pour calculer aka^{k} modulo nn, écrire kk en binaire, comme une somme de puissances de 2. Des élévations au carré successives donnent a2,a4,a8…a^{2}, a^{4}, a^{8}\dots, une par chiffre binaire après le premier ; des multiplications assemblent ensuite les puissances retenues, une de moins que le nombre de chiffres 1. On réduit modulo nn après chaque opération.

Exemple résolu, a10a^{10}. 10=10102=8+210 = 1010_2 = 8 + 2 : trois carrés donnent a2a^{2}, a4a^{4} et a8a^{8}, puis une multiplication assemble a8×a2a^{8} \times a^{2}. Quatre opérations au lieu des neuf du calcul naïf, qui multiplie par aa neuf fois de suite.

Le coût d'une puissance, à la main

  • 1.

    Le micrologiciel d'un compteur élève un nombre à la puissance 45 modulo un grand module, et 45 s'écrit 101101 en binaire. Combien d'élévations au carré la méthode demande-t-elle ?

  • 2.

    Combien de multiplications assemblent ensuite les puissances retenues ?

  • 3.

    Combien de multiplications le calcul naïf demanderait-il ?

  • 4.

    Combien vaut 3133^{13} modulo 7, calculé par carrés successifs ?

Huit opérations contre quarante-quatre, sur un exposant de deux chiffres. Sur un exposant de six cents chiffres, comme ceux de la cryptographie, le calcul naïf demanderait plus d'opérations qu'il n'y a d'atomes dans l'univers, et la méthode par carrés en demande quelques milliers.

Vérifier à la machine

Chaque calcul de ce chapitre se fait à la main, et c'est ainsi qu'il se comprend. Une fois fait, il se vérifie en une ligne, comme on vérifie une formule de tableur :

  • math.gcd(a, b) donne le pgcd ;
  • pow(a, -1, n) donne l'inverse de a modulo n, et refuse avec une erreur quand il n'existe pas ;
  • pow(a, k, n) donne aka^k modulo nn, par carrés successifs ;
  • a % n donne le reste, toujours entre 0 et n−1n - 1 pour un n positif.

Programmer soi-même ces algorithmes, Euclide étendu ou l'exponentiation rapide, est l'objet des exercices du thème. La version la plus courte d'Euclide étendu est récursive : une fonction qui s'appelle elle-même, comme la factorielle du chapitre Bien écrire une fonction.

main.py
Sortie
>_ Prêt à exécuter…

La méthode

  1. Écrire la division euclidienne sous la forme a=bq+ra = bq + r avec 0≤r<b0 \leq r < b. Toutes les erreurs de signe viennent de son oubli.
  2. Poser Euclide en colonnes, une division par ligne. Le dernier reste non nul est le pgcd.
  3. Pour Bézout, remonter les égalités une à une, en substituant les restes sans développer les produits, ou en appliquant la règle (α,β)←(β,α−βq)(\alpha, \beta) \leftarrow (\beta, \alpha - \beta q).
  4. Réduire à chaque étape dans un calcul modulaire, résultat compris. Ne jamais développer une grande puissance.
  5. Vérifier qu'un facteur est inversible avant de le simplifier dans une congruence. Il ne l'est que s'il est premier avec le module.
  6. Pour une puissance modulaire, réduire l'exposant modulo φ(n)\varphi(n) quand la base est première avec nn, puis procéder par carrés successifs en suivant l'écriture binaire.
  7. Contrôler un inverse en multipliant (a×x mod na \times x \bmod n vaut 1), un couple de Bézout en recalculant au+bvau + bv, puis vérifier avec pow ou math.gcd.

Mettre en pratique

Trois calculs pour finir, qui traversent le chapitre et ne reprennent aucun nombre du cours.

Rappel de cours : trois outils du chapitre

Le ppcm : ppcm⁡(a,b)=ab/pgcd⁡(a,b)\operatorname{ppcm}(a, b) = ab / \operatorname{pgcd}(a, b). Pour 12 et 18, le pgcd vaut 6 et le ppcm 216/6=36216 / 6 = 36.

L'inverse : le coefficient de aa dans la remontée d'Euclide sur nn et aa, ramené dans [0;n−1][0 ; n - 1]. Modulo 12, 12=5×2+212 = 5 \times 2 + 2 et 5=2×2+15 = 2 \times 2 + 1 donnent 1=5×5−2×121 = 5 \times 5 - 2 \times 12 : l'inverse de 5 modulo 12 est 5.

Fermat : pour pp premier ne divisant pas aa, ap−1≡1 [p]a^{p-1} \equiv 1 \ [p], et l'exposant se réduit modulo p−1p - 1. Ainsi 225≡21=2 [13]2^{25} \equiv 2^{1} = 2 \ [13], puisque 25=2×12+125 = 2 \times 12 + 1.

Trois calculs qui traversent le chapitre

  • 1.

    Deux roues dentées de 252 et 198 dents engrènent, et deux dents repérées sont en contact au départ. Au bout de combien de tours de la grande roue le sont-elles de nouveau ?

  • 2.

    Un chiffrement des 26 lettres multiplie le rang de chaque lettre par 11, modulo 26. Par quel nombre, entre 0 et 25, multiplier pour déchiffrer ?

  • 3.

    Combien vaut 71007^{100} modulo 11 ?

Les trois réponses se contrôlent avec math.gcd et pow, comme dans la section précédente.

Jusqu'où faut-il aller pour vérifier qu'un nombre NN est premier ?

Jusqu'à N\sqrt{N}, et pas plus loin. Si NN admet un diviseur dd supérieur à N\sqrt{N}, alors N/dN/d est un diviseur inférieur à N\sqrt{N}, et il aurait déjà été trouvé.

Le gain est considérable : vérifier un nombre de six chiffres demande mille essais au lieu d'un million.

Un inverse modulaire existe-t-il toujours ?

Non. L'inverse de aa modulo nn existe si et seulement si pgcd⁡(a,n)=1\operatorname{pgcd}(a, n) = 1.

La raison se lit sur Bézout : cette condition équivaut à l'existence de uu et vv tels que au+nv=1au + nv = 1, ce qui donne exactement au≡1 [n]au \equiv 1 \ [n]. L'algorithme d'Euclide étendu ne fait donc pas que répondre oui ou non : il construit l'inverse.

Pourquoi réduire à chaque étape plutôt qu'à la fin ?

Parce que les congruences sont compatibles avec l'addition et la multiplication : réduire en cours de route donne le même résultat que réduire à la fin.

La différence est de taille des nombres manipulés. Calculer 71007^{100} en entier produit un nombre de quatre-vingt-cinq chiffres ; le calculer modulo 11 en réduisant à chaque étape ne fait jamais dépasser 100, le produit de deux restes inférieurs à 11.

Pourquoi un exposant public pair ne convient-il jamais ?

Parce que φ(N)=(P−1)(Q−1)\varphi(N) = (P - 1)(Q - 1) est pair dès que PP et QQ sont des premiers impairs : un exposant pair partage le facteur 2 avec φ(N)\varphi(N), n'a pas d'inverse modulo φ(N)\varphi(N), et la clé privée n'existe pas.

La figure d'Euclide le montre : avec 3828 et 14, le pgcd vaut 2, et la ligne de l'inverse disparaît.

Chapitre révisé en octobre 2026 · Une erreur dans ce chapitre ?

Dans la bibliothèque d'exercices