cours1 min de lecture

Chiffrement asymétrique

Une paire clé publique / clé privée pour chiffrer sans avoir à partager de secret au préalable — l'idée de RSA, fondée sur le modulo et l'exponentiation, et ce que cela rend possible.
programme

Introduction

Au cours précédent, vous avez vu le chiffrement symétrique et son talon d'Achille : pour qu'Alice et Bob échangent des messages chiffrés, ils doivent d'abord se mettre d'accord sur une clé secrète commune. S'ils ne se sont jamais rencontrés, comment faire ? La cryptographie a trouvé la réponse en 1976 avec une idée révolutionnaire : utiliser deux clés différentes par personne, l'une publiable et l'autre gardée secrète, mathématiquement liées de telle façon que l'une chiffre et l'autre seule sait déchiffrer. C'est le chiffrement asymétrique, et c'est ce que demande .

Le principe — deux clés par personne

Chaque utilisateur dispose d'une paire de clés :

  • une clé publique KpubK_{pub} qu'il publie librement (sur sa page web, dans un annuaire, à la fin d'un mail) ;
  • une clé privée KprivK_{priv} qu'il garde sur sa machine, jamais transmise à personne.

Les deux fonctions sont :

C=EKpub(M)M=DKpriv(C)C = E_{K_{pub}}(M) \qquad M = D_{K_{priv}}(C)
  • N'importe qui peut chiffrer un message avec KpubK_{pub} de Bob.
  • Seul Bob peut le déchiffrer avec KprivK_{priv}.

L'asymétrie est dans le nom : la clé qui chiffre n'est pas celle qui déchiffre. Et il est calculatoirement impossible de retrouver KprivK_{priv} à partir de KpubK_{pub} — c'est ce qui rend le système sûr.

Analogie du cadenas ouvert. Imaginez que Bob distribue partout des cadenas ouverts dont lui seul possède la clé. Alice prend un cadenas, referme une boîte avec, et expédie. Seul Bob, avec sa clé, peut rouvrir. Le cadenas (clé publique) est public, la clé (clé privée) est privée.

L'idée de RSA — modulo et exponentiation

Le représentant le plus connu de chiffrement asymétrique est RSA (Rivest, Shamir, Adleman, 1977). Vous n'avez pas à connaître la démonstration complète au niveau Terminale, mais vous devez en reconnaître les ingrédients : le modulo et l'exponentiation modulaire.

L'idée tient en trois étapes (très simplifiées) :

  1. Bob choisit deux grands nombres premiers pp et qq. Il calcule leur produit n=p×qn = p \times q. Ce nn devient public — il fait partie de KpubK_{pub}.
  2. Bob calcule un couple d'exposants (e,d)(e, d) liés par une relation modulaire. ee est public (avec nn), dd est privé.
  3. Pour chiffrer un message MM représenté comme un entier, on calcule : C=MemodnC = M^{e} \bmod n Et pour déchiffrer : M=CdmodnM = C^{d} \bmod n
La sécurité de RSA repose sur le fait que factoriser nn en p×qp \times q est extrêmement coûteux quand pp et qq sont très grands (typiquement 1024 ou 2048 bits chacun). Sans pp et qq, on ne peut pas retrouver dd. Avec les ordinateurs actuels, factoriser un nn de 2048 bits prendrait des siècles.

Pour comprendre l'opération centrale, regardez ce qu'est l'exponentiation modulaire :

def exp_modulaire(base: int, exposant: int, modulo: int) -> int:
    """Calcule (base ** exposant) % modulo, efficacement."""
    return pow(base, exposant, modulo)

# Exemple jouet avec p=11, q=13 → n=143, e=7, d=103
n, e, d = 143, 7, 103
M = 42
C = exp_modulaire(M, e, n)
print(C)                              # 81
M_restitue = exp_modulaire(C, d, n)
print(M_restitue)                     # 42

L'instruction pow(base, exposant, modulo) de Python calcule baseexposantmodmodulobase^{exposant} \bmod modulo efficacement, sans construire l'entier géant intermédiaire. C'est l'opération de base de RSA.

Dans RSA, la sécurité repose sur la difficulté de…

Que peut-on faire avec une paire de clés ?

L'asymétrie autorise deux usages complémentaires :

OpérationClé utilisée pour chiffrerClé utilisée pour déchiffrerBut
ConfidentialitéKpubK_{pub} du destinataireKprivK_{priv} du destinataireSeul le destinataire lit
SignatureKprivK_{priv} de l'expéditeurKpubK_{pub} de l'expéditeurN'importe qui peut vérifier que c'est bien l'expéditeur

Dans le cas de la signature, on inverse les rôles : seul Bob, qui détient KprivK_{priv} de Bob, peut produire CC tel que DKpubBob(C)=MD_{K_{pub-Bob}}(C) = M. C'est une preuve d'identité vérifiable par tous. La signature est essentielle pour les certificats que vous croiserez avec HTTPS.

Le chiffrement asymétrique est lent. RSA met typiquement 1000 à 10 000 fois plus de temps qu'AES pour chiffrer la même quantité de données. On ne l'utilise donc pas pour chiffrer le gros d'une communication — on s'en sert pour échanger une clé symétrique, plus courte, qui prend ensuite le relais. C'est le mécanisme central d'HTTPS, vu au cours suivant.

Si Alice veut envoyer un message confidentiel à Bob, elle chiffre avec…

Activité débranchée

Activité débranchée — la boîte aux lettres. Bob fabrique une boîte verrouillable avec une serrure dont lui seul a la clé. Il distribue à toute la classe des cadenas ouverts qui ferment cette boîte. Alice écrit un message, le glisse dans la boîte, referme avec un cadenas. Elle remet la boîte à Bob (par main, par fil, par drone). Seul Bob peut ouvrir — même si la boîte transite par dix intermédiaires curieux. Le cadenas est la clé publique, la clé de la serrure est la clé privée.

Pour aller plus loin

D'autres systèmes asymétriques existent : Diffie-Hellman (échange de clé), ECC (cryptographie sur courbes elliptiques, plus compacte que RSA à sécurité équivalente). RSA reste le plus enseigné parce qu'il illustre directement le rôle du modulo et de l'exponentiation — deux opérations que vous savez écrire en Python avec pow(a, b, n).