Arithmétique et cryptographie
Ce que ce chapitre apporte
- 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 et déterminer un inverse modulaire.
- 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.
- Distinguer coder, chiffrer et hacher ; symétrique et asymétrique.
- Casser un chiffrement mono-alphabétique par analyse de fréquence.
- Dérouler RSA de bout en bout et expliquer pourquoi il fonctionne.
Un message chiffré n'est qu'une suite de nombres. Derrière cette évidence se cache la question qui fonde toute la sécurité informatique : comment fabriquer une opération facile dans un sens et pratiquement impossible dans l'autre ? La réponse ne vient ni de l'analyse ni de la géométrie, mais de l'arithmétique des entiers, celle qu'on croit avoir laissée au collège. Ce chapitre la reprend depuis la divisibilité et va jusqu'à casser, pour de vrai, deux messages chiffrés.
Il retourne 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.
Pourquoi de l'arithmétique au XXIe siècle
L'objection est naturelle : on dispose des réels, des complexes, des vecteurs, pourquoi revenir aux entiers ?
-
Une machine ne manipule que des entiers. Un « nombre à virgule » est un entier accompagné d'un exposant, sur un nombre fini de bits. En Python,
0.1 + 0.2 == 0.3est faux, et n'a pas d'écriture exacte. Le chapitre Les nombres à virgule le montre bit par bit. -
L'arithmétique est plus difficile que le calcul réel, pas plus simple. Dans , toute équation avec a une solution ; dans , n'en a aucune. Cette contrainte supplémentaire rend l'existence des solutions imprévisible.
-
Cette imprévisibilité est exactement ce qu'on cherche. Elle permet de construire des opérations faciles dans un sens et hors d'atteinte dans l'autre. Cela reste vrai quand l'adversaire connaît la méthode, et même quand il possède une partie de la clé.
Divisibilité et division euclidienne
divise , noté , s'il existe un entier tel que .
Division euclidienne : pour entier et entier non nul, il existe un unique couple tel que avec .
L'unicité du couple est ce qui rend tout le reste possible. En Python, a // b donne et a % b donne : ce sont les opérateurs de division entière et de reste du parcours Python.
-17 // 5 vaut -4 et -17 % 5 vaut 3, ce qui respecte avec . En C ou en Java, -17 % 5 vaut -2 : le langage tronque vers zéro au lieu d'arrondir vers le bas.
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.
PGCD et algorithme d'Euclide
Le pgcd est le plus grand entier divisant et ; le ppcm le plus petit multiple commun positif. Ils sont liés par .
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.
Il repose sur une seule observation : . 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 , récrite .
Soit un diviseur commun à et à . Il divise alors , c'est-à-dire : tout diviseur commun de et est aussi un diviseur commun de et .
Réciproquement, soit un diviseur commun à et à . Il divise , c'est-à-dire : tout diviseur commun de et est aussi un diviseur commun de et .
Les deux couples ont donc exactement les mêmes diviseurs communs, et en particulier le même plus grand. Remplacer par 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 , c'est-à-dire proportionnel au nombre de chiffres. La notation est celle de l'analyse d'algorithmes, abordée dans le parcours Algorithmique. Sur des nombres de 600 chiffres, l'algorithme pose un peu plus d'un millier de divisions et termine en une fraction de milliseconde.
Euclide étendu et Bézout
Pour tous entiers et non nuls, il existe des entiers et tels que :
En clair : le pgcd de deux entiers se fabrique toujours en les combinant, chacun multiplié par un entier bien choisi. et sont ces deux multiplicateurs, appelés coefficients de Bézout, et rien n'oblige qu'ils soient positifs.
En particulier, et sont premiers entre eux si et seulement si il existe et avec .
L'algorithme d'Euclide étendu calcule ce couple 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.
Le code ci-dessous le fait en trois lignes, mais il faut savoir le dérouler à la main. C'est le seul moyen de comprendre d'où sortent et , et ce calcul revient dans tout le chapitre.
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 et , et leurs coefficients sont et .
Ce couple n'est pas choisi au hasard : sera l'exposant public et la valeur de dans l'exemple RSA de la fin du chapitre.
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. Il y en a exactement une par ligne, ce qui ne saute pas aux yeux quand les deux moitiés sont recopiées l'une sous l'autre.
La descentediviser jusqu'à un reste nul
| 3120 | = | 17 × 183 | + | 9 |
| 17 | = | 9 × 1 | + | 8 |
| 9 | = | 8 × 1 | + | 1 |
| 8 | = | 1 × 8 | + | 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 = 183. Toute la remontée tient dans cette règle.
Bézout. 3120 × 2 + 17 × -367 = 1contrôle : 1 = 1 ✓
Inverse modulaire. Le coefficient de 17 vaut -367, ramené dans [0 ; 3119] il donne 17⁻¹ ≡ 2753 [3120]contrôle : 17 × 2753 = 46801 ≡ 1
La descente pose quatre divisions et s'arrête sur un reste nul. Le dernier reste non nul vaut : les deux nombres sont premiers entre eux, et Bézout garantit donc l'existence de et .
La remontée repart de la ligne qui isole ce , puis substitue à chaque étape le reste de la ligne du dessus :
, d'où
, d'où
Le résultat. . Donc et .
Et comme , l'inverse de modulo vaut . Ce nombre réapparaîtra tel quel comme clé privée.
Sur la ligne courante, le pgcd s'écrit . Remonter d'une ligne revient alors à une seule substitution, dont le résultat tient en une récurrence :
où est le quotient de la ligne du dessus. Sur l'exemple, la ligne donne , soit , puis , puis . C'est cette règle qu'affiche la figure à chaque étape, et c'est elle qui rend la remontée refaisable de tête.
La remontée produit presque toujours un ou un négatif. L'un des deux au moins doit l'être dès que et sont positifs : deux termes positifs ne peuvent pas totaliser 1 quand chacun dépasse déjà 1.
Le réflexe est donc de ramener le coefficient utile dans l'intervalle par un final, comme ci-dessus avec . En Python, % le fait déjà : -367 % 3120 vaut bien 2753, là où le % du C rendrait -367.
Reprendre la figure ci-dessus et y saisir et : le pgcd vaut , la ligne d'inverse disparaît, et le bloc explique pourquoi. Puis et : le pgcd vaut alors qu'aucun des deux n'est premier.
C'est la distinction qui coûte le plus cher dans ce chapitre. Premier est une propriété d'un nombre seul ; premiers entre eux est une propriété d'un couple. RSA exige la seconde de son exposant public, pas la première.
Une fois et trouvés, recalculer et vérifier que le résultat est le pgcd. Une erreur de signe ou de quotient se voit immédiatement, alors qu'elle se propagerait sans bruit jusqu'à une clé privée fausse.
Congruences : calculer modulo
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.
(« congru à modulo ») signifie que divise , autrement dit que et ont le même reste dans la division par .
La notation se lit à voix haute en deux morceaux : le symbole se dit « est congru à », et le se dit « modulo ». Ce porte sur toute l'égalité, jamais sur le seul membre de droite. D'autres ouvrages écrivent : c'est la même chose.
Ce que la définition écarte : 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 .
Travailler modulo , c'est compter sur une horloge : passé , on revient à zéro. Toute l'étrangeté de l'arithmétique modulaire vient de là, et elle cesse d'être étrange dès qu'on voit le cercle.
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 : et , 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 et , alors et . On peut donc réduire à chaque étape d'un calcul, ce qui évite de manipuler des nombres gigantesques.
Modulo 6 : . Ni 2 ni 3 n'est nul, et pourtant leur produit l'est. On ne peut donc pas « simplifier par 2 » comme on le ferait dans .
Ce phénomène disparaît quand est premier : modulo un nombre premier, tout élément non nul est inversible et le produit de deux non-nuls n'est jamais nul. C'est la raison profonde pour laquelle la cryptographie travaille modulo des nombres premiers, ou modulo un produit de deux premiers dont elle contrôle la structure.
L'inverse modulaire
L'inverse de modulo est l'entier tel que . Il existe si et seulement si , et on l'obtient par Euclide étendu : de on tire , donc .
La ligne du milieu, celle qu'on saute souvent : dans , le terme est un multiple de , donc il vaut 0 modulo . Il ne reste que , ce qui est la définition de l'inverse. Le coefficient de Bézout est l'inverse, à un modulo près pour le ramener dans .
Cette condition sur le pgcd n'est pas une clause technique : elle se voit. Avancer de en sur le cadran revient à parcourir les multiples de , et deux cas seulement se présentent.
Ce qu'il faut suivre du regard, c'est le tracé : tant qu'il n'est pas refermé, il reste des cases à visiter. Le second cas est l'exact opposé, avec un pas qui partage un diviseur avec 26.
Le tracé se referme immédiatement, et la case 1 n'a jamais été touchée : c'est cela, ne pas être inversible. Une case jamais atteinte, c'est une information définitivement perdue.
Le pas de visite exactement 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.
Vérification
1.Deux nombres premiers entre eux sont…
2.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 ?
3.La remontée d'Euclide produit presque toujours un coefficient négatif. Est-ce une erreur ?
4.Calculer a mod n quand a est négatif, en Python et en C, donne…
Nombres premiers
Un entier est premier s'il admet exactement deux diviseurs positifs distincts : 1 et lui-même.
Il n'a qu'un seul diviseur, pas deux. Surtout, l'admettre détruirait le théorème fondamental de l'arithmétique : tout entier se décompose de façon unique en produit de facteurs premiers. Si 1 était premier, donnerait une infinité de décompositions. C'est l'unicité qui compte, et c'est elle qu'on protège.
Le crible d'Ératosthène
Pour lister tous les premiers jusqu'à : on écrit les entiers de 2 à , 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 .
Familles remarquables
Mersenne : . Pour que soit premier, il faut que le soit, mais cela ne suffit pas : . 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 : . Fermat conjecturait qu'ils étaient tous premiers ; c'est vrai pour à (3, 5, 17, 257, 65537), et Euler a réfuté la conjecture en factorisant .
Sophie Germain : est un premier de Sophie Germain si 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.
Presque jamais. Si est premier, alors est nécessairement une puissance de 2, c'est-à-dire qu'on est dans la famille de Fermat. Et même là, on ne connaît que cinq nombres de Fermat premiers, ceux que Fermat connaissait déjà : à .
La raison est algébrique : si a un facteur impair , alors divise . Exemple : , avec .
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.
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é, c'est le sens de la question « un nouveau théorème pourrait-il ruiner l'économie mondiale ? ».
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.
Euler et Fermat
La section sur l'inverse modulaire a laissé une question ouverte. Un élément est inversible modulo quand son pgcd avec vaut 1 : combien y en a-t-il ? La réponse détermine le nombre d'exposants publics utilisables dans RSA, et elle porte un nom.
est le nombre d'entiers de 1 à premiers avec .
- si est premier ;
- si et sont deux premiers distincts.
La lettre se lit « phi », et se dit « phi de ». Elle compte donc les entiers de l'intervalle dont le pgcd avec vaut 1, c'est-à-dire exactement les éléments inversibles modulo . Sur : les candidats sont 1, 5, 7 et 11, et aucun autre, car tous les autres partagent un 2 ou un 3 avec 12. Donc .
La première égalité est immédiate : si est premier, tous les entiers de 1 à lui sont premiers, et seul 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 fixe la taille de l'espace des clés RSA.
Parmi les entiers de 1 à , un entier n'est pas premier avec exactement lorsqu'il est multiple de ou multiple de . Il y a multiples de (à savoir ) et multiples de . Le seul entier compté deux fois est lui-même, qui est multiple des deux.
Le nombre d'entiers à retirer vaut donc , et il reste
C'est toute la sécurité de RSA en une phrase. Calculer demande la factorisation de ; sans elle, il n'existe aucun raccourci connu. Un attaquant qui obtiendrait par un autre moyen calculerait la clé privée en une ligne, par Euclide étendu.
Petit théorème de Fermat : si est premier et ne divise pas , alors .
Théorème d'Euler, qui le généralise : si , alors .
En clair : élever un nombre à la puissance ramène toujours à 1, à la seule condition que ce nombre n'ait aucun facteur commun avec . C'est une remise à zéro garantie. Dépasser cet exposant ne fait que recommencer le même tour, ce qui revient à dire que seul le reste de l'exposant modulo compte.
C'est ce second théorème, et lui seul, qui fait fonctionner RSA : c'est lui qui fera disparaître le facteur parasite au moment du déchiffrement.
On rencontre cette formule dans des corrigés de RSA, et elle y est fausse par construction. Si était premier, serait calculable par tout le monde ; la clé privée s'en déduirait immédiatement, et le chiffrement n'aurait aucun intérêt.
Toute la sécurité de RSA tient à ce que exige de connaître et , donc de savoir factoriser .
L'exponentiation modulaire rapide
Calculer avec de 600 chiffres semble impossible. Ça ne l'est pas, grâce à une idée simple : élever au carré plutôt que multiplier une fois de plus.
Pour , l'écriture binaire de l'exposant, , donne . Trois élévations au carré successives fournissent , et , puis deux multiplications les assemblent : cinq multiplications au lieu de douze. L'écart devient vertigineux sur un grand exposant, dont le coût ne croît plus qu'avec le nombre de chiffres.
Le même calcul en entier, avec les nombres du RSA de la fin du chapitre : . L'exposant s'écrit , donc . Quatre élévations au carré suffisent, chacune réduite modulo 3233 avant la suivante :
, puis , puis , puis . Donc .
Il ne reste qu'une multiplication : , d'où . Cinq opérations au total, et aucun nombre intermédiaire de plus de sept chiffres, alors que écrit en entier en compterait trente et un. Réduire à chaque étape est ce qui rend le calcul possible.
Coder, chiffrer, hacher
L'outillage arithmétique est complet : il peut maintenant servir. Avant d'en faire un système de chiffrement, il faut lever une confusion de vocabulaire qui fausse ensuite tous les raisonnements de sécurité. Trois mots qu'on confond, trois opérations différentes.
Coder (ou encoder) : représenter une information dans un autre alphabet. ASCII, UTF-8, base64. Réversible, sans secret, ce n'est pas de la sécurité.
Chiffrer : rendre une information incompréhensible sans la clé. Réversible avec la clé. (« Crypter » n'existe pas en français ; « décrypter » si, c'est lire sans la clé, donc casser.)
Hacher : produire une empreinte de taille fixe. Irréversible, et sans clé. Sert à l'intégrité et au stockage des mots de passe.
Chiffrement mono-alphabétique
Chaque symbole est remplacé par un autre, toujours le même. Le chiffre de César est le cas le plus simple : un décalage constant.
Le message chiffré est 9153787770964, décalé de . On applique le décalage inverse, chiffre par chiffre :
, (car ), , , , …
On obtient 5719343336520, treize chiffres qu'on regroupe au format de coordonnées : 57°19'34.3"N, 3°36'52.0"W, quelque part dans les Highlands.
Le format visé consomme chiffres pour la latitude (degrés, minutes, secondes, dixième) et pour la longitude, soit treize exactement. Si le message chiffré n'en a que douze, c'est qu'un chiffre s'est perdu à la recopie, et aucun découpage ne tombera juste. Vérifier la longueur attendue avant de déchiffrer évite de chercher l'erreur dans le mauvais endroit.
L'espace des clés compte dix possibilités. Les essayer toutes prend une microseconde. Et sur du texte, même un alphabet de substitution quelconque, fort de clés, soit plus de , tombe en quelques secondes : il préserve les fréquences.
L'analyse de fréquence
En français, le représente environ 15 % des lettres, loin devant tous les autres. Un chiffrement mono-alphabétique déplace cette signature sans la détruire : la lettre la plus fréquente du texte chiffré est presque sûrement un chiffré.
Le chiffre de Vigenère répond à cette attaque en utilisant plusieurs alphabets, pilotés par un mot-clé : une même lettre claire devient des lettres chiffrées différentes selon sa position. Les fréquences sont lissées, mais l'attaque de Kasiski retrouve la longueur de la clé en repérant les motifs répétés, et ramène le problème à autant de chiffres de César.
Symétrique et asymétrique
Symétrique : la même clé chiffre et déchiffre. Rapide, adapté aux gros volumes. Standard actuel : AES. Problème : il faut avoir transmis la clé au préalable, par un canal sûr.
Asymétrique : deux clés liées mathématiquement. La clé publique chiffre et se diffuse à tous ; la clé privée déchiffre et ne quitte jamais son propriétaire. Standard historique : RSA. Lent, mais résout le problème de l'échange de clé.
Une connexion HTTPS commence par de l'asymétrique pour convenir d'une clé de session, puis bascule en symétrique pour toute la suite. On paie le coût du chiffrement lent une seule fois, au début, et l'on obtient la rapidité d'AES avec la souplesse de RSA. C'est la réponse à « comment envoyer un message confidentiel sans avoir échangé de code secret au préalable ».
La sécurité d'un système ne doit reposer que sur le secret de la clé, jamais sur celui de l'algorithme. AES et RSA sont entièrement publics, spécifiés, et attaqués par la communauté depuis des décennies, c'est ce qui fonde la confiance qu'on leur accorde. Un algorithme secret est un algorithme que personne n'a pu casser publiquement, ce qui n'est pas la même chose.
RSA, pas à pas
Génération des clés
- Choisir deux grands premiers et , et poser .
- Calculer .
- Choisir premier avec .
- Calculer par Euclide étendu.
Clé publique : . Clé privée : . On détruit , et .
Chiffrement : Déchiffrement :
Les deux dernières lignes se lisent à voix haute : le chiffré est le message élevé à la puissance , modulo ; le message est le chiffré élevé à la puissance , modulo . C'est la même opération dans les deux sens, avec deux exposants différents, et c'est l'exponentiation modulaire rapide de la section précédente qui l'exécute.
1. Deux premiers. et , d'où . C'est ce seul nombre, , qui sera publié : et ne doivent plus jamais apparaître nulle part.
2. L'indicatrice. . Le calcul est immédiat parce qu'on connaît la factorisation ; sans elle il faudrait la retrouver, et c'est précisément ce qui est hors de portée sur de vrais nombres.
3. L'exposant public. . Il faut le vérifier premier avec , et la descente d'Euclide de tout à l'heure l'a déjà fait : le pgcd valait 1.
4. L'exposant privé. , soit exactement l'inverse calculé plus haut à la main : . Contrôle : , donc bien .
Clé publique , clé privée . On détruit , et .
Un tour complet sur un message. Avec : le chiffré vaut , et le déchiffré . Les deux exposants sont énormes, mais l'exponentiation modulaire rapide les traite en une poignée d'opérations.
La figure ci-dessous déroule ces quatre étapes. Cliquer sur chacune montre à quoi elle sert et, surtout, ce que devient sa valeur : publiée, gardée, ou détruite. C'est cette répartition qui fait toute la sécurité, et elle disparaît dans une liste à puces.
Les deux exposants sont énormes et pourtant instantanés : l'exponentiation rapide remplace 17 multiplications par 4 mises au carré.
Ce qui circule : N = 3233 et E = 17. Pour en tirer D, il faut φ(N) ; pour φ(N), il faut P et Q ; pour P et Q, il faut factoriser N.
Ici, 56 divisions suffisent, un ordinateur les fait en une fraction de seconde. Sur une clé réelle, N compte 600 chiffres et c'est cette seule étape qui devient impossible : toutes les autres restent aussi rapides qu'ici.
Trois choses se lisent sur cette figure, et chacune se retient mieux qu'une phrase de conclusion.
- est détruit. C'est la seule des cinq valeurs à ne finir ni dans la clé publique ni dans la privée. Elle est pourtant celle qui les relie : qui la connaît calcule en une ligne.
- doit être premier avec , sinon il n'a pas d'inverse et la quatrième étape n'a rien à calculer. Ce n'est pas une précaution, c'est une condition d'existence.
- L'aller-retour referme la boucle parce que , et pour aucune autre raison. Changer d'une unité suffit à ne plus rien retrouver.
Un de quatre chiffres se factorise de tête, ou presque : il suffit de tester les premiers jusqu'à , soit seize divisions. La clé jouet sert à voir le mécanisme, jamais à protéger quoi que ce soit.
Une clé réelle emploie et d'environ 300 chiffres chacun, pour un de 600 chiffres. Toutes les étapes ci-dessus restent les mêmes, et s'exécutent encore en une fraction de seconde : c'est la seule étape absente, la factorisation, qui devient hors de portée.
Pourquoi ça marche
Par construction , donc pour un entier . Alors :
Et le théorème d'Euler donne , d'où . ∎
Le théorème d'Euler suppose premier avec , c'est-à-dire non multiple de ni de . C'est le cas de presque tous les messages, et le cas restant fonctionne aussi, par un raisonnement séparé modulo puis modulo .
Trois lignes, et tout le chapitre y passe : la division euclidienne pour obtenir , les congruences pour réduire, l'indicatrice d'Euler pour faire disparaître le facteur parasite. Rien n'y est superflu, et retirer une seule des quatre étapes de la génération casse la démonstration.
Tout le monde connaît et . Pour trouver , il faut ; pour , il faut et ; pour et , il faut factoriser . Toute la sécurité de RSA tient à ce dernier maillon, et à rien d'autre.
Le second parchemin
Un message a été intercepté : une liste de blocs chiffrés avec la clé publique jouet , . Le programme ci-dessous mène l'attaque de bout en bout : factoriser , en déduire , déchiffrer.
Chiffrer caractère par caractère avec la même clé donne toujours le même bloc pour le même caractère. Dans la liste ci-dessus, 1992 apparaît sept fois : c'est l'espace, et le message clair compte exactement sept espaces. On vient donc de reconstruire, sans le vouloir, un chiffrement mono-alphabétique, cassable par analyse de fréquence sans jamais factoriser .
Le vrai RSA chiffre des blocs de la taille de (2048 bits) et ajoute un remplissage aléatoire (OAEP) : deux chiffrements du même message donnent alors deux résultats différents. Sans remplissage, RSA est déterministe, donc faible : un algorithme correct mal employé ne protège rien.
1.Sur quoi repose la sécurité de RSA ?
2.Chiffrer avec la clé publique du destinataire assure…
3.Pourquoi calcule-t-on les puissances par exponentiation rapide ?
4.Que devient φ(N) une fois la clé générée ?
5.Hacher un message assure…
Confidentialité, authentification, intégrité
Chiffrer ne répond qu'à une question sur trois.
Confidentialité : personne d'autre ne peut lire. Chiffrer avec la clé publique du destinataire : lui seul possède la privée qui déchiffre.
Authentification : le destinataire sait qui a écrit. C'est la signature : l'expéditeur applique sa clé privée à l'empreinte du message ; n'importe qui vérifie avec sa clé publique. Les deux usages sont symétriques, et c'est la même mécanique employée dans l'autre sens.
Intégrité : le message n'a pas été modifié. C'est le rôle du hachage : on transmet l'empreinte, le destinataire la recalcule et compare.
Les deux premières se confondent tant qu'on n'a pas vu quelle clé sert à quoi, et dans quel sens. Les deux schémas ci-dessous se lisent en trois secondes et règlent la question.
Pour la confidentialité, Alice chiffre avec la clé publique de Bob. Elle est publique : n'importe qui peut donc écrire à Bob, ce qui est voulu. Seul Bob possède la privée correspondante, donc lui seul peut lire.
Ce qu'il faut regarder sur ce schéma : à qui appartiennent les deux clés citées. Les deux sont à Bob. Alice ne détient aucun secret, et pourtant elle chiffre : c'est là toute la nouveauté de l'asymétrique. Seule la flèche du milieu traverse le réseau, et ce qu'elle transporte ne se lit pas sans la clé privée, qui n'a jamais circulé.
Pour l'authentification, tout s'inverse. Alice signe avec sa propre clé privée, que personne d'autre ne possède. N'importe qui vérifie avec sa clé publique, et cette vérification prouve que le message vient bien d'elle.
Même lecture, et la comparaison des deux schémas donne la règle : ici, les deux clés citées appartiennent à Alice, l'expéditrice. Le message lui-même circule en clair ; ce qui est chiffré, c'est son empreinte. Personne d'autre qu'Alice ne peut produire cette signature, mais tout le monde peut la vérifier, puisque la clé publique est publique.
Clé publique du destinataire : confidentialité. Beaucoup peuvent écrire, un seul peut lire.
Clé privée de l'expéditeur : authentification. Un seul peut écrire, beaucoup peuvent vérifier.
En pratique on fait les deux à la fois, en signant puis en chiffrant. Et l'on ne signe jamais le message entier, seulement son empreinte : c'est plus court, et cela apporte l'intégrité par la même opération.
Quatre exemples reposent tous sur une opération modulaire : la clé de contrôle du numéro de sécurité sociale, la dernière lettre d'un IBAN, le bit de parité d'une trame, les codes correcteurs d'erreurs. Tous servent à détecter une altération. Aucun ne protège contre un adversaire, seulement contre l'erreur de saisie ou de transmission. C'est de l'intégrité accidentelle, pas de l'intégrité cryptographique.
La sécurité se mesure en bits : une clé de bits offre possibilités, et chaque bit ajouté double le travail de l'attaquant. Une clé de 56 bits (l'ancien DES) est tombée par recherche exhaustive en moins d'une journée dès 1999 ; AES-256 est hors d'atteinte de toute attaque exhaustive concevable.
Pour RSA, ce n'est pas l'attaque exhaustive qui compte mais la factorisation : les progrès des algorithmes et du matériel ont fait passer la recommandation de 1024 à 2048, puis 3072 bits.
Exercices type
Calculer par l'algorithme d'Euclide, puis en déduire une relation de Bézout
Le dernier reste non nul est 21, donc .
En remontant : et , d'où
Vérification : ✓
Résoudre
On cherche l'inverse de 7 modulo 26. Comme , il existe.
Euclide : , , .
En remontant : .
Donc , soit .
Contrôle : ✓
Une clé secrète est-elle plus sûre qu'une clé publique ?
La question repose sur une confusion : ce ne sont pas deux options concurrentes, mais deux rôles différents dans le même système.
En asymétrique, la clé publique est faite pour être diffusée : la connaître ne permet pas de déchiffrer. La clé privée est l'unique secret. Il n'y a donc pas de comparaison de sûreté à établir.
La vraie différence est ailleurs : le chiffrement symétrique exige d'avoir transmis la clé au préalable par un canal sûr, problème insoluble à l'échelle d'internet. L'asymétrique le résout, au prix d'une lenteur qui le rend impraticable sur de gros volumes. D'où l'emploi conjoint des deux.
Avec , , : calculer , puis chiffrer et déchiffrer
et .
. Euclide : , donc , d'où .
Chiffrement : . Par carrés successifs, , , donc . Puis . On réduit : , donc , puis , soit .
Déchiffrement : ✓ (à vérifier par pow(48, 103, 143)).
Est-ce que coder, c'est chiffrer ?
Non, et la confusion est dangereuse.
Coder change la représentation : ASCII, UTF-8, base64. L'opération est publique et sans clé, n'importe qui décode. Une chaîne en base64 n'est pas protégée, elle est simplement illisible à l'œil nu.
Chiffrer rend l'information inaccessible sans la clé. C'est le secret de la clé qui protège, pas l'obscurité du format.
Le message du second parchemin illustre les deux étapes : les caractères sont d'abord codés en ASCII (opération publique), puis les codes sont chiffrés par RSA (opération à clé). Seule la seconde apporte de la sécurité.
Un nouveau théorème mathématique pourrait-il ruiner l'économie mondiale du jour au lendemain ?
En théorie, oui. Un algorithme de factorisation en temps polynomial rendrait RSA lisible instantanément : signatures, certificats, transactions bancaires, mises à jour logicielles authentifiées.
Trois nuances, qui comptent. La difficulté de la factorisation n'est pas démontrée : personne n'a prouvé qu'un tel algorithme n'existe pas. Le déploiement ne serait pas instantané : la cryptographie symétrique (AES) n'est pas concernée, et la migration serait rapide mais pas immédiate. Et la menace la plus concrète n'est pas mathématique mais technologique, l'algorithme de Shor existe déjà, il attend un ordinateur quantique de taille suffisante.
C'est pourquoi la cryptographie post-quantique, fondée sur d'autres problèmes difficiles, est en cours de normalisation. Se préparer avant l'événement, plutôt qu'après.
La méthode
- Écrire la division euclidienne sous la forme avec . Toutes les erreurs de signe viennent de son oubli.
- Poser Euclide en colonnes, une division par ligne. Le dernier reste non nul est le pgcd.
- Pour Bézout, remonter les égalités une à une, en substituant les restes sans développer les produits : c'est ce qui rend le calcul faisable à la main.
- Réduire à chaque étape dans un calcul modulaire. Ne jamais développer une grande puissance.
- Pour une puissance modulaire, procéder par carrés successifs en suivant l'écriture binaire de l'exposant.
- Pour RSA, dérouler les quatre étapes dans l'ordre : , puis , puis , puis le déchiffrement. Contrôler avant de continuer.
- Vérifier par l'aller-retour : rechiffrer le message obtenu et comparer au chiffré de départ.
- Nommer la propriété visée : confidentialité, authentification ou intégrité. Chacune appelle un outil différent.
Synthèse
- Division euclidienne : , , couple unique. Attention au signe du reste selon le langage.
- Euclide : , en . Euclide étendu donne et tels que .
- Bézout : et premiers entre eux ⟺ il existe et avec .
- Congruences : compatibles avec et , donc on réduit à chaque étape.
- Modulo un composé, un produit de non-nuls peut être nul. Modulo un premier, jamais.
- Inverse modulaire : existe ⟺ , se calcule par Euclide étendu.
- 1 n'est pas premier : l'unicité de la décomposition en dépend.
- Crible d'Ératosthène : barrer les multiples à partir de , s'arrêter à .
- Mersenne , Fermat , Sophie Germain et .
- Factoriser est difficile : constaté, pas démontré. Shor le fait en quantique.
- , . Jamais pour un composé.
- Euler : si . C'est ce qui fait fonctionner RSA.
- Exponentiation rapide : carrés successifs, multiplications.
- Coder ≠ chiffrer ≠ hacher. Réversible sans clé, réversible avec la clé, irréversible et sans clé.
- Mono-alphabétique : cassé par les fréquences, quelle que soit la taille de l'espace des clés.
- Kerckhoffs : la sécurité repose sur la clé, jamais sur le secret de l'algorithme.
- RSA : , , avec . Déterministe sans remplissage, donc à ne jamais employer nu.
- Confidentialité (clé publique du destinataire), authentification (clé privée de l'expéditeur), intégrité (hachage).
Et ensuite
RSA tient sur un problème que personne ne sait résoudre vite. Le dernier chapitre prend le mouvement inverse : un problème réputé difficile en général, colorer un graphe, devient linéaire dès que les données ont la bonne structure. Graphes et coloration referme le parcours là-dessus : la difficulté n'est pas dans le problème seul, mais dans le couple problème-structure.
Mettre en pratique
Euclide, inverse modulaire, nombres premiers, César et RSA.
- Le pgcd par l'algorithme d'EuclideNiveau 1
- L'inverse modulaireNiveau 3
- Le crible d'ÉratosthèneNiveau 2
- Le premier parcheminNiveau 1
- Le second parchemin : casser RSANiveau 5
- Débogage : le crible garde 0 et 1Niveau 2
- L'exponentiation modulaire rapideNiveau 3
- Casser César sans la cléNiveau 4
- Masquer les étiquettes d'un parc d'équipementsNiveau 1
- Démasquer un octet de micrologicielNiveau 2
- La clé RSA d'un compteur connectéNiveau 3