Chapitre 1 · 5 h
RSA
Construction et factorisation, chiffrement OAEP, signature PSS, attaques par module commun, exposant faible, Coppersmith et canaux auxiliaires.
Jusqu'ici, chiffrer supposait une clé déjà partagée. Comment deux personnes qui ne se sont jamais rencontrées en établissent-elles une sur un canal public ? La réponse — la cryptographie à clé publique — est l'une des grandes ruptures du XXe siècle, et RSA en est le premier exemple complet, publié en 1977 par Rivest, Shamir et Adleman.
L'idée est asymétrique : une clé publique pour chiffrer ou vérifier, que le monde entier peut connaître, et une clé privée pour déchiffrer ou signer, gardée secrète. Ce chapitre construit RSA, puis — fidèle au fil du cours — le casse partout où il est mal employé.
La construction
Elle repose entièrement sur l'arithmétique du chapitre 2.
- Choisir deux grands premiers et , et poser . Le module est public, mais et restent secrets.
- Calculer .
- Choisir un exposant public premier avec — en pratique .
- Calculer l'exposant privé , par Euclide étendu.
La clé publique est , la clé privée est . Chiffrement et déchiffrement :
Le déchiffrement redonne le message parce que , donc par le théorème d'Euler. La signature inverse simplement les rôles : on signe avec , on vérifie avec .
Sur quoi repose vraiment la sécurité
L'attaquant connaît et . S'il savait factoriser , il obtiendrait et , donc , donc : RSA serait mort. Sa sécurité repose donc sur la difficulté de la factorisation, un problème sous-exponentiel (chapitre 2) mais sans algorithme efficace connu sur machine classique.
Une nuance que les étudiants confondent souvent. Casser RSA — retrouver à partir de — n'est pas prouvé équivalent à factoriser : il pourrait exister un raccourci qui contourne la factorisation. On n'en connaît pas, mais l'équivalence n'est pas démontrée. C'est une hypothèse de plus, distincte de la difficulté de factoriser, et le chapitre 12 y reviendra en parlant de l'hypothèse RSA.
Les tailles se déduisent des records de factorisation : RSA-1024 est déconseillé, RSA-2048 est le minimum courant, RSA-3072 vise 128 bits de sécurité. À comparer aux 256 bits des courbes elliptiques du chapitre 11 pour la même sécurité — l'écart qui explique leur adoption.
Quiz · 1 question
Sur quelle hypothèse repose la sécurité de RSA, et qu'est-ce qui n'est PAS prouvé ?
- Sur la difficulté du logarithme discret ; l'équivalence avec RSA est prouvée — logarithme discret
- Sur la difficulté de factoriser n ; l'équivalence entre « casser RSA » et « factoriser » n'est PAS prouvée — factorisation
- Sur la difficulté des collisions de hachage ; tout est prouvé équivalent — collisions
Réponse : Factoriser n donne p, q, φ(n), puis d : la sécurité de RSA exige donc que factoriser soit dur. Mais l'inverse n'est pas établi — casser RSA pourrait, en théorie, être plus facile que factoriser, par un raccourci inconnu. C'est l'hypothèse RSA, distincte de l'hypothèse de factorisation. Le logarithme discret est le fondement d'AUTRES schémas (chapitre 10), pas de RSA.
RSA « textbook » est cassé, et vous allez le casser
Le RSA nu — , sans rembourrage — est un désastre pratique, pour deux raisons qui reprennent tout le chapitre 1. Il est déterministe : le même clair donne le même chiffré, donc un adversaire distingue et devine par dictionnaire. Et il est malléable : , l'attaquant transforme le chiffré d'un message en celui d'un multiple sans le déchiffrer.
Le cas le plus spectaculaire combine un petit exposant et un message court. Si et si , la réduction modulo ne s'applique pas : le chiffré est le cube exact du message, et une simple racine cubique entière le rend — sans clé privée, sans factorisation. Montez-la.
Exercice de code
Cassez un chiffrement RSA à exposant 3 sans rembourrage, quand le message est court, par une simple racine cubique entière — sans clé privée ni factorisation.
Point de départ
// RSA jouet en BigInt. Le module est grand (RSA-ish), mais le message est
// COURT et le chiffrement n'a AUCUN rembourrage. C'est l'erreur.
// Deux premiers (petits pour l'exemple, la faille est indépendante de la taille).
const p = 32416190071n;
const q = 32416187671n;
const n = p * q;
const e = 3n; // exposant public minimal, très répandu
// Chiffrement TEXTBOOK : c = m^e mod n, sans OAEP, sans rien.
function puissanceMod(base, exp, mod) {
let r = 1n; base %= mod;
while (exp > 0n) {
if (exp & 1n) r = (r * base) % mod;
base = (base * base) % mod;
exp >>= 1n;
}
return r;
}
const m = 1234567n; // message court : un code PIN, un identifiant...
const c = puissanceMod(m, e, n);
console.log("chiffré c =", c.toString());
// ── L'observation qui tue ─────────────────────────────────────────────────
// Si m^e < n, la réduction « mod n » ne fait RIEN : c = m^e comme entier.
// Retrouver m ne demande alors ni la clé privée, ni de factoriser n —
// seulement une racine e-ième ENTIÈRE.
console.log("m^3 < n ?", m ** 3n < n);
// ── À COMPLÉTER : racine cubique entière par dichotomie ───────────────────
function racineCubiqueEntiere(x) {
if (x < 2n) return x;
let lo = 0n, hi = 1n;
while (hi ** 3n <= x) hi <<= 1n; // borne haute
// à compléter : resserrer [lo, hi] jusqu'à la racine cubique entière
return lo;
}
const retrouve = racineCubiqueEntiere(c);
console.log("m retrouvé :", retrouve.toString());
console.log("correct ?", retrouve === m, "| sans clé privée, sans factoriser n");
Solution
function racineCubiqueEntiere(x) {
if (x < 2n) return x;
let lo = 0n, hi = 1n;
while (hi ** 3n <= x) hi <<= 1n;
while (lo < hi) {
const mid = (lo + hi + 1n) >> 1n;
if (mid ** 3n <= x) lo = mid;
else hi = mid - 1n;
}
return lo; // plus grand entier dont le cube est <= x
}
// m est retrouvé exactement. La clé privée n'a jamais servi, n n'a pas été
// factorisé : on a simplement pris la racine cubique d'un cube parfait.
//
// La faille tient à DEUX fautes cumulées :
// 1. e = 3, si petit que m^3 peut ne pas déborder n ;
// 2. aucun rembourrage, donc le clair est utilisé tel quel.
//
// La parade est OAEP, qui remplit le message d'un bourrage aléatoire
// structuré : m devient toujours du même ordre de grandeur que n (donc m^e
// déborde et « mod n » redevient une vraie barrière), et deux chiffrements du
// même clair diffèrent. C'est aussi ce qui rend RSA-OAEP sûr contre CCA au
// sens du chapitre 1, là où le RSA textbook est malléable et déterministe.
//
// Variante à connaître : même avec rembourrage, si le MÊME message est envoyé
// à trois destinataires ayant chacun e = 3 (modules différents), le théorème
// des restes chinois reconstitue m^3 modulo le produit des trois modules, puis
// la racine cubique le livre — c'est l'attaque de Håstad.
Quiz · 1 question
Dans l'attaque à exposant 3, pourquoi la racine cubique suffit-elle à retrouver le clair ?
- Parce que e = 3 rend la clé privée d égale à 3 — clé privée
- Parce que si m^3 < n, alors c = m^3 exactement : la réduction mod n n'a rien changé — pas de réduction
- Parce que la racine cubique factorise n — factorisation
Réponse : Quand m^3 est plus petit que n, « mod n » ne retire rien : c EST le cube de m comme entier. Prendre la racine cubique entière d'un cube parfait rend m directement, sans toucher à d ni à la factorisation. C'est la conjonction de deux fautes : un exposant minuscule et l'absence de rembourrage qui laisse m trop petit.
Les bons schémas : OAEP et PSS
La leçon n'est pas « RSA est mauvais » mais « RSA ne s'emploie jamais nu ». Deux rembourrages normalisés le rendent sûr.
OAEP (Optimal Asymmetric Encryption Padding) enrobe le message avant chiffrement d'une structure aléatoire construite sur des fonctions de hachage. Trois effets : le chiffrement devient probabiliste (deux chiffrements du même clair diffèrent), le message occupe toujours tout l'espace modulo (l'attaque à exposant faible s'effondre), et le résultat est sûr contre les attaques à chiffrés choisis — IND-CCA2, la cible du chapitre 12.
PSS (Probabilistic Signature Scheme) fait l'équivalent pour la signature. On ne signe jamais le message brut : on le hache, on lui adjoint un aléa, et l'on signe cette valeur. La signature devient inforgeable au sens EUF-CMA, avec une preuve dans le modèle de l'oracle aléatoire.
Le fil rouge du chapitre 7 se referme ici : puisqu'on signe le haché du message, une collision sur la fonction de hachage est une signature forgée. C'est concret — un faux certificat X.509 a été fabriqué en 2008 en exploitant une collision MD5, exactement de cette manière. La sécurité d'une signature n'excède jamais la résistance aux collisions du haché qu'elle emploie.
Les attaques qui restent, même bien rembourré
OAEP et PSS ferment les failles mathématiques, mais l'implémentation en ouvre d'autres.
Module commun, exposant faible. Un même message envoyé à trois destinataires d'exposant (modules distincts) se reconstitue par les restes chinois puis racine cubique — l'attaque de Håstad. Deux clés partageant un facteur premier se factorisent par un simple pgcd de leurs modules ; un balayage de clés publiques réelles en 2012 a ainsi cassé des milliers de clés RSA dont les premiers avaient été mal tirés.
Coppersmith. Sa méthode, fondée sur la réduction de réseaux (le monde du bloc V), trouve les petites racines d'un polynôme modulaire. Elle casse RSA quand une partie du message est connue, ou quand une fraction des bits d'un facteur premier fuit. C'est un pont inattendu entre RSA et les réseaux euclidiens du post-quantique.
Canaux auxiliaires. L'exponentiation modulaire naïve du chapitre 2 n'est pas à temps constant : sa durée, sa consommation électrique, ses accès au cache dépendent des bits de . Une mesure fine les révèle. La parade a un nom, le blinding : on randomise l'entrée avant l'exponentiation pour décorréler la fuite du secret. Et l'attaque par faute du chapitre 2 rôde toujours — d'où la vérification de signature avant publication.
Ce que la suite en fait
RSA a montré qu'une seule fonction à sens unique — la multiplication facile, la factorisation dure — suffit à bâtir chiffrement et signature. Le chapitre 10 rebâtit tout sur un autre problème difficile, le logarithme discret, avec un avantage décisif : il rend naturel l'échange de clés, là où RSA ne fait que transporter un secret choisi par l'un des deux. Le chapitre 11 y ajoutera les courbes elliptiques et leurs clés courtes, et le chapitre 14 rappellera que Shor, sur un ordinateur quantique, factorise et calcule les logarithmes discrets en temps polynomial — abattant RSA et le chapitre 10 d'un même coup.
À retenir
Flashcards · 3 cartes
- Quel problème fonde RSA, et par quel enchaînement le casserait-on en factorisant ?
- La difficulté de factoriser n = pq. Factoriser donne p et q, donc φ(n) = (p−1)(q−1), donc l'exposant privé d = e^(−1) mod φ(n). L'inverse — que casser RSA soit AUSSI dur que factoriser — n'est pas prouvé : c'est une hypothèse distincte.
- Pourquoi le RSA « textbook » est-il inutilisable, et que corrige OAEP ?
- Nu, RSA est déterministe (donc distinguable) et malléable ((m1·m2)^e = m1^e·m2^e), et un petit exposant sur message court se casse par racine cubique. OAEP enrobe le message d'un rembourrage aléatoire structuré : chiffrement probabiliste, message toujours de l'ordre de n, et sécurité IND-CCA2.
- Pourquoi la sécurité d'une signature RSA-PSS dépend-elle de la fonction de hachage ?
- Parce qu'on signe le HACHÉ du message, pas le message : deux messages de même haché ont la même signature. Une collision sur le haché est donc une signature forgée — c'est ainsi qu'un faux certificat X.509 a été fabriqué en 2008 via une collision MD5. La sécurité de la signature n'excède pas la résistance aux collisions du haché.