Le RSA « scolaire » est dangereux

Pourquoi le RSA brut (textbook) ne suffit pas

On suppose ici RSA connu : n = p × q, un exposant public e, un exposant privé d, et le chiffrement c = m^e mod n. Ce cours part d'un constat gênant : appliqué tel quel, RSA est dangereux.

Le RSA « scolaire »

On appelle RSA textbook (ou RSA brut) le schéma présenté dans les manuels : on prend le message, on le voit comme un nombre m, et on calcule directement c = m^e mod n. Rien d'autre. Aucun traitement du message avant chiffrement.

C'est parfait pour comprendre le principe. C'est catastrophique en pratique, pour trois raisons.

Défaut n°1 : c'est déterministe

Le même message donne toujours le même chiffré. La fonction m -> m^e mod n n'a aucune part de hasard.

message "OUI"  --chiffrer-->  c = 8F2A...   (toujours identique)
message "NON"  --chiffrer-->  c = 51CD...   (toujours identique)

Conséquence : un espion qui observe le canal peut reconnaître un message déjà vu. Si les messages possibles sont peu nombreux (« oui » / « non », un vote, un code PIN à 4 chiffres), il chiffre lui-même chaque possibilité avec la clé publique et compare. C'est une attaque par dictionnaire : la clé privée n'est jamais touchée.

Défaut n°2 : c'est malléable

RSA est homomorphe pour la multiplication. En multipliant deux chiffrés, on multiplie les clairs correspondants :

c1 = m1^e mod n
c2 = m2^e mod n
c1 × c2 = (m1^e)(m2^e) = (m1 × m2)^e mod n

Le produit c1 × c2 est donc le chiffré valide de m1 × m2. Un attaquant peut fabriquer le chiffré d'un message qu'il n'a jamais pu chiffrer lui-même, ou transformer un message intercepté sans le lire. Il « bricole » le texte clair à distance.

Défaut n°3 : les petits messages

Si le message est petit et l'exposant petit, m^e peut ne pas dépasser n. Il n'y a alors aucune réduction modulo n, et retrouver m revient à une simple racine. C'est le sujet de la leçon suivante.

La parade : le remplissage aléatoire

La solution commune est d'ajouter du hasard et de la structure au message avant de le chiffrer : c'est le remplissage (padding). Le standard sûr pour le chiffrement RSA s'appelle OAEP.

  • On brasse le message avec des octets aléatoires, de sorte que chiffrer deux fois « OUI » donne deux chiffrés différents : fini le déterminisme et le dictionnaire.
  • La structure imposée fait qu'un chiffré « bricolé » (produit de deux chiffrés) donne, une fois déchiffré, un remplissage invalide que l'on rejette : fini la malléabilité.

En résumé

Le RSA textbook est déterministe (donc attaquable par dictionnaire), malléable (c1 × c2 chiffre m1 × m2) et fragile sur les petits messages. Le remplissage aléatoire OAEP corrige ces défauts en rendant le chiffrement imprévisible et vérifiable. On ne chiffre jamais avec du RSA brut.