Écrire en secret à un inconnu
Le chiffrement asymétrique utilise deux clés liées : une clé publique pour chiffrer et une clé privée pour déchiffrer. Il permet d’envoyer un message secret sans avoir partagé de clé à l’avance.
C’est ce qui protège votre connexion à un site de banque. Votre navigateur ne connaît pas la banque, et pourtant il peut lui écrire en secret.
À la fin de cette leçon
Remarque
Je peux expliquer comment une clé publique et une clé privée travaillent ensemble.
Mots-clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Clé publique | la clé que tout le monde peut connaître, pour chiffrer | |
| Clé privée | la clé gardée secrète, pour déchiffrer | |
| Paire de clés | une clé publique et la clé privée qui lui correspond | |
| Modulo | le reste d’une division entière | 17 modulo 5 vaut 2 |
| Nombre premier | un nombre divisible seulement par 1 et par lui-même | 61 |
| RSA | un chiffrement asymétrique fondé sur le produit de deux grands nombres premiers |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Deux clés : l’une chiffre, l’autre déchiffre
Imaginez une boîte aux lettres. Tout le monde peut y glisser une lettre : c’est la clé publique. Seul le propriétaire possède la clé pour l’ouvrir : c’est la clé privée.
On publie la clé publique sans crainte. Ce qu’elle a chiffré ne se déchiffre qu’avec la clé privée.
Le modulo fait revenir les nombres au début
RSA calcule avec des restes de division. Sur une horloge de 12 heures, 15 heures donne 3 : on a fait un tour. C’est le modulo.
En Python, a % n donne le reste de a divisé par n. La fonction pow(a, b, n) calcule a puissance b, puis son reste modulo n, sans jamais manipuler un nombre énorme.
Huit puissance 3, modulo 55
python3 -c "print(pow(8, 3, 55))"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Exemple travaillé : un RSA avec de petits nombres
| Étape | Calcul | Résultat |
|---|---|---|
| 1 Choisir deux nombres premiers | p = 5 et q = 11 | Secrets |
| 2 Calculer n | 5 fois 11 | n = 55, public |
| 3 Calculer phi | (5 moins 1) fois (11 moins 1) | phi = 40, secret |
| 4 Choisir e | Un nombre sans diviseur commun avec 40 | e = 3, public |
| 5 Trouver d | e fois d laisse 1 modulo 40 | d = 27, privé (3 fois 27 = 81 = 2 fois 40 + 1) |
| 6 Chiffrer 8 | 8 puissance 3 modulo 55 | 17 |
| 7 Déchiffrer 17 | 17 puissance 27 modulo 55 | 8 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Déchiffrer 17 avec la clé privée 27
python3 -c "print(pow(17, 27, 55))"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Erreur fréquente
Attention
Beaucoup de gens pensent que ce RSA à petits nombres est sûr, parce que d reste secret. Il ne l’est pas. Quiconque devine que 55 vaut 5 fois 11 retrouve d en quelques secondes. La force de RSA tient à la taille de n.
RSA tient à la taille de n
Un attaquant connaît n et e. Pour trouver d, il doit retrouver p et q, donc factoriser n. Multiplier deux grands nombres premiers est facile. Retrouver les deux facteurs d’un très grand produit est hors de portée.
Une vraie clé RSA a un n d’au moins 2048 bits, soit 617 chiffres. Vous n’écrirez jamais votre propre RSA : on utilise une bibliothèque éprouvée.
Combien de chiffres pour 2 puissance 2048 ?
python3 -c "print(len(str(2 ** 2048)))"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Dans la pratique, on combine les deux familles
Le chiffrement asymétrique est lent. On l’utilise donc seulement pour envoyer une petite clé secrète, et c’est cette clé qui chiffre ensuite tout le reste avec un chiffrement symétrique.
Une connexion sécurisée fonctionne ainsi : la paire de clés sert à s’entendre, la clé partagée sert à parler.