Cours 1 · SocleLeçon 2 sur 2
Rappels mathématiques et algorithmiques
5 h de lecture10 sections Version PDF
Arithmétique modulaire, groupes cycliques et corps finis, restes chinois, exponentiation rapide, Miller-Rabin, algorithmes probabilistes polynomiaux.
La cryptographie moderne n'emprunte aux mathématiques qu'un outillage restreint. Ce chapitre le rassemble une fois pour toutes, avec un critère de sélection strict : chaque notion présentée ici sert dans un chapitre ultérieur, et aucune n'est là pour la culture.
Un conseil de méthode avant de commencer. Ne cherchez pas à retenir les démonstrations, mais les énoncés et leurs conséquences opératoires : ce que le théorème des restes chinois autorise à calculer, ce que l'ordre d'un élément interdit de faire, pourquoi un test de primalité probabiliste est acceptable pour engendrer une clé RSA.
Arithmétique modulaire
Travailler modulo , c'est travailler dans , l'ensemble des restes muni de l'addition et de la multiplication. Addition, soustraction et multiplication s'y comportent normalement. La division, non — et c'est le seul point délicat.
L'élément est inversible modulo s'il existe tel que . Cela se produit exactement quand , et l'algorithme d'Euclide étendu fournit l'inverse en calculant les coefficients de Bézout .
Cherchons l'inverse de 17 modulo 43. La descente d'Euclide donne , puis , puis . En remontant :
Donc , et l'inverse est . Vérification : .
Cet algorithme est la brique qui produit l'exposant privé de RSA : est précisément l'inverse de modulo .
Groupes, ordre, générateurs
Les éléments inversibles modulo forment un groupe multiplicatif noté , de cardinal — l'indicatrice d'Euler. Pour produit de deux premiers distincts, , l'égalité sur laquelle RSA est bâti tout entier.
L'ordre d'un élément est le plus petit tel que . Le théorème de Lagrange affirme qu'il divise l'ordre du groupe, d'où le théorème d'Euler :
et son cas particulier, le petit théorème de Fermat : pour premier et .
Un groupe est cyclique s'il possède un générateur, c'est-à-dire un élément dont les puissances parcourent tout le groupe. Le résultat utile : est cyclique d'ordre pour tout premier. Prenons et :
| 1 | 2 | 3 | 4 | 5 | 6 | |
|---|---|---|---|---|---|---|
| 3 | 2 | 6 | 4 | 5 | 1 |
Les six valeurs non nulles apparaissent : 3 est bien un générateur. Ce n'est pas le cas de tout élément — a pour puissances et engendre un sous-groupe d'ordre 3 seulement. Le nombre de générateurs est , soit ici .
Cette distinction n'est pas décorative. Au chapitre 10, un Diffie-Hellman dont le générateur engendre un petit sous-groupe est cassé immédiatement : l'attaquant n'a qu'un petit nombre de valeurs à énumérer. Vérifier l'ordre du générateur fait partie de la mise en œuvre correcte, et son oubli a produit des vulnérabilités réelles.
Corps finis
Un corps fini existe pour , premier, et il est unique à isomorphisme près. Deux cas nous concernent.
Pour , : tout élément non nul y est inversible, puisque est premier. C'est le terrain du logarithme discret et des courbes elliptiques.
Pour , se construit comme les polynômes à coefficients dans modulo un polynôme irréductible de degré . Un octet devient un polynôme de degré au plus 7, l'addition devient le XOR, et la multiplication devient un produit de polynômes réduit modulo l'irréductible. AES travaille dans avec
Ce n'est pas un détail d'implémentation : la boîte de substitution de l'AES est l'inversion dans ce corps, suivie d'une application affine. Le chapitre 4 montrera pourquoi ce choix donne à l'AES sa résistance différentielle.
Le théorème des restes chinois
Si et sont premiers entre eux, l'application
est un isomorphisme d'anneaux. Autrement dit : connaître modulo et modulo équivaut à le connaître modulo , et les opérations se font indifféremment d'un côté ou de l'autre.
L'exemple de Sun Tzu, vieux de dix-sept siècles : trouver tel que , , . La solution est modulo 105.
L'usage cryptographique est immédiat. Le déchiffrement RSA calcule avec ; en travaillant séparément modulo et modulo , les exposants sont deux fois plus courts et les modules deux fois plus petits, ce qui donne un facteur d'accélération d'environ 4. Toutes les implémentations sérieuses le font.
Et immédiatement, le revers : si une erreur matérielle survient pendant l'un des deux calculs — un rayonnement, une injection de faute volontaire — la signature produite est correcte modulo et fausse modulo . Alors livre . Une seule signature fautive suffit à factoriser le module. C'est l'attaque de Boneh, DeMillo et Lipton (1997), et c'est la raison pour laquelle une implémentation correcte revérifie sa propre signature avant de la publier.
Dans (Z/pZ)* avec p = 11, l'élément 3 a pour puissances 3, 9, 5, 4, 1. Que peut-on en conclure ?
Exponentiation rapide
Tous les schémas asymétriques calculent des avec des exposants de plusieurs centaines de bits. Multiplier fois est hors de question ; on lit l'exposant en binaire.
Pour , avec :
| bit lu | carré | multiplication | valeur |
|---|---|---|---|
| 1 | — | 3 | |
| 1 | 6 | ||
| 0 | — | 1 | |
| 1 | 3 |
Résultat 3, en quatre carrés et trois multiplications au lieu de treize. Le coût passe de à , et c'est ce qui rend l'asymétrique praticable.
Une mise en garde qui portera ses fruits au chapitre 9 : cet algorithme, écrit naïvement, n'est pas à temps constant. La multiplication n'a lieu que pour les bits à 1 de l'exposant ; la durée du calcul dépend donc du secret quand cet exposant est la clé privée. Mesurée assez finement, elle le révèle bit par bit. La parade usuelle est l'échelle de Montgomery, qui effectue les deux opérations à chaque tour et jette l'une des deux.
Écrivez l'exponentiation modulaire par carrés, puis comparez son coût à celui de la version naïve pour l'exposant RSA 65537.
// Calculer a^e mod n sans jamais former a^e. // // BigInt est indispensable : en RSA, a et n font 2048 bits. L'écriture 3n // désigne le BigInt 3. // ── Version naïve, fournie pour la comparaison ──────────────────────────── function puissanceNaive(a, e, n) { let r = 1n, mults = 0n; for (let i = 0n; i < e; i++) { r = (r * a) % n; mults++; } return { valeur: r, mults }; } // ── À COMPLÉTER : exponentiation par carrés ─────────────────────────────── // Principe : lire l'exposant en binaire. À chaque bit, on élève au carré ; // quand le bit vaut 1, on multiplie en plus par la base. // // a^13 = a^(1101 en binaire) = ((a^2 · a)^2)^2 · a // // Renvoyez aussi le nombre de multiplications effectuées. function puissanceRapide(a, e, n) { let resultat = 1n; let base = a % n; let exposant = e; let mults = 0n; while (exposant > 0n) { // à compléter : traiter le bit de poids faible, puis passer au suivant exposant = exposant >> 1n; } return { valeur: resultat, mults }; } // ── Vérification ────────────────────────────────────────────────────────── const p = 1000003n; // premier const a = 123456n; const e = 65537n; // l'exposant public usuel de RSA const lent = puissanceNaive(a, e, p); const vif = puissanceRapide(a, e, p); console.log("naïve :", lent.valeur, "en", lent.mults, "multiplications"); console.log("rapide :", vif.valeur, "en", vif.mults, "multiplications"); console.log(vif.valeur === lent.valeur ? "✓ même résultat" : "✗ résultats différents"); // Le rapport que vous devez observer : 65537 contre une vingtaine. // Avec l'exposant privé d de RSA-2048, la version naïve demanderait 2^2048 // multiplications — c'est-à-dire jamais.
Tester la primalité
Engendrer une clé RSA demande deux grands premiers. On les obtient en tirant des entiers impairs au hasard et en les testant — la densité des premiers autour de étant d'environ , un candidat impair sur 355 environ est premier.
Le test de Fermat, qui vérifie , ne suffit pas : les nombres de Carmichael le passent pour toute base première avec eux. Le plus petit est .
Miller-Rabin corrige ce défaut. On écrit avec impair, et l'on teste si la suite se comporte comme elle le devrait dans un corps, où n'a que deux racines carrées. Pour composé, au moins trois quarts des bases sont des témoins de composition ; tirages indépendants laissent donc une probabilité d'erreur inférieure à .
Deux précisions honnêtes. La borne est le pire cas ; pour un entier tiré au hasard, l'erreur réelle est très inférieure, et les standards de génération de clés s'en servent pour justifier une poignée de tours seulement. Et un test déterministe polynomial existe depuis 2002 — l'algorithme AKS — mais il est trop lent pour un usage pratique : la cryptographie déployée utilise Miller-Rabin.
Ce qu'on appelle « efficace »
Un dernier point de vocabulaire, sans lequel les énoncés de difficulté n'ont pas de sens. La complexité se mesure en la taille de l'entrée en bits, pas en la valeur de l'entrée. Factoriser par divisions successives coûte opérations, soit pour bits : c'est exponentiel en la taille.
| Problème | Meilleur algorithme connu | Coût en fonction de bits |
|---|---|---|
| Multiplication, exponentiation modulaire | scolaire, carrés | polynomial |
| Test de primalité | Miller-Rabin | polynomial |
| Factorisation | crible algébrique (GNFS) | sous-exponentiel, |
| Logarithme discret dans | calcul d'indices | sous-exponentiel, même forme |
| Logarithme discret sur courbe elliptique | rho de Pollard | , exponentiel |
La dernière ligne explique à elle seule le chapitre 11 : aucun algorithme sous-exponentiel n'étant connu sur les courbes, une clé de 256 bits y offre le niveau de sécurité qu'un module RSA de 3072 bits atteint péniblement.
Pourquoi une implémentation RSA sérieuse revérifie-t-elle sa propre signature avant de la publier ?
Ce que la suite en fait
Chaque outil de ce chapitre a son échéance. L'inverse modulaire produit l'exposant privé de RSA au chapitre 9 ; les corps portent la boîte S de l'AES au chapitre 4 ; les groupes cycliques et l'ordre des éléments fondent Diffie-Hellman au chapitre 10 ; les restes chinois accélèrent RSA et le fragilisent dans le même mouvement.
Le chapitre 3 marque une rupture de ton : il s'agira d'un seul théorème, celui de Shannon, et de ce qu'il interdit.
À retenir
QCM de synthèse — Bloc 0 — Socle
Le QCM ci-dessous porte sur l'ensemble du bloc : plusieurs questions relient les leçons entre elles. En cas d'erreur, le bilan indique le chapitre à revoir.
Un fournisseur refuse de publier son algorithme « pour plus de sécurité ». Quel principe cela viole-t-il, et quel est le risque concret ?
Vous avez parcouru les 10 sections.
Marquez-la terminée pour faire avancer votre parcours, ou revenez sur un point avant de passer à la suite.