RSA est sûrement l'algorithme de chiffrement asymétrique le plus connu, il est utilisé chaque jour par des millions d'appareils, même le certificat TLS du site que vous visitez en ce moment est basé sur RSA ! Cet article détaillera le fonctionnement mathématique de RSA, aucun prérequis n'est nécessaire (à part peut-être une tasse de café ☕).
La cryptographie asymétrique, qu'est-ce que c'est ?
Il existe deux types d'algorithmes de chiffrement
- Les algorithmes de chiffrement symétriques : ils impliquent d'avoir un secret (un "mot de passe") partagé entre les différents appareils. Ce genre d'algorithme a pour avantage d'être plutôt rapide mais a pour inconvénient, et pas des moindres, de devoir avoir un canal sécurisé pour transmettre le secret.
- Les algorithmes de chiffrement asymétriques : ces algorithmes, dont RSA fait partie, ne nécessitent pas de partager un secret à l'avance. Ils se basent sur une paire de clés (une publique et une privée) liées mathématiquement. Cet algorithme a donc pour avantage de ne pas nécessiter un canal sécurisé pour initier la connexion, mais pour inconvénient d'être nettement moins rapide que les algorithmes de chiffrement symétriques.
Alors, comment fonctionne RSA ?
Cette partie sera un peu plus mathématique mais devrait être accessible pour tout le monde. Si vous avez des questions, n'hésitez pas à les poser dans les commentaires en bas de cet article !
Génération des clés
-
On choisit deux nombres premier distincts et (pour rappel, un nombre premier est un nombre qui n'a que deux diviseurs, 1 et lui-même.)
-
On calcule le produit de et .
-
On calcule la valeur indicatrice d'Euler en . L'indicaquoi ? 🤨 La valeur indicatrice d'Euler c'est une fonction notée qui, à tout entier naturel associe le nombre d'entiers naturels compris entre 1 et et premiers avec . Premier avec ? 🤔 Quand deux nombres sont premiers entre eux, ça veut simplement dire qu'ils n'ont aucun facteur premier en commun.
Par exemple, 12 est premier avec 5 car dans la décomposition en facteurs premiers de 12 ($2\times2\times3$) on ne retrouve pas 5
Voici un petit exemple de la valeur indicatrice d'Euler qui devrait vous permettre de bien comprendre :
Les nombres 1, 5, 7 et 11 sont bien premiers avec 12.
Nous allons donc calculer la valeur indicatrice d'Euler en . Pour calculer cette dernière, il faut connaitre les propriétés suivantes :
Pour n'importe quel nombre premier c,
Avec ces deux propriétés en tête et sachant que p et q sont deux nombres premiers, on peut affirmer que
On remplace par nos valeurs d'exemple
-
On choisit un entier naturel premier avec (qui est donc ici 48).
-
On calcule , l'inverse modulaire de modulo . L'inverse modulaire ? Modulo ? Qu'est-ce que c'est ces trucs ? 🧐 Pour comprendre le concept d'inverse modulaire, il est nécessaire de comprendre ce qu'est la congruence sur les entiers. Deux entiers et sont dits congrus modulo si le reste de la division euclidienne de par et de par est identique. Par exemple 33 et 9 sont dits congrus modulo 12 car le reste de la division euclidienneHee de 33 par 12 est 9, et que le reste de la division euclidienne de 9 par 12 est 9. On note cela de la façon suivante :
Une autre façon de se représenter la chose serait d'imaginer une horloge (avec donc 12 heures), si on fait tourner l'aiguille des heures de 9 heures ou de 33, elle se retrouvera au même endroit à la fin.
Donc, calculer l'inverse modulaire d'un entier modulo c'est trouver un entier résolvant l'équation :
Ce qui revient donc à chercher un nombre tel que le reste de la division euclidienne de par n soit égal au reste de la division euclidienne de 1 par .
Comment déterminer ? Et bien pas de formule magique, il suffit de bruteforcer tous les nombres entiers entre 0 et . On note cela :
Dans notre exemple, on veut calculer l'inverse modulaire de modulo . On fait donc
Et c'est fini ! On a nos clés publiques et privées. Le couple (n,e) est notre clé publique et le nombre d notre clé privée.
Chiffrement d'un message
Maintenant que l'on a notre paire de clés, on peut chiffrer notre premier message.
Soit M, le message que l'on souhaite chiffrer strictement inférieur à n, on calcule C le message chiffré de la façon suivante.
Exemple avec M = 42
Le message chiffré pour notre clé publique est donc 22
Déchiffrement d'un message
Une fois notre message chiffré, on peut le déchiffrer en appliquant la formule suivante :
Décryptage d'un message
Petit rappel, décrypter un message consiste à déterminer le contenu du dit message sans connaitre la clé utilisée pour le chiffrer.
Pour décrypter un message, il faut trouver l'inverse modulaire de modulo ce qui n'est pas possible sans connaître et . Le seul moyen est donc bruteforcer en vérifiant pour chaque nombre qu'il est premier, mais aussi que le produit de ces deux nombres n'est pas factorisable.
Conclusion
La robustesse de RSA se base donc sur la complexité calculatoire des algorithmes de vérification de primauté de très grands nombres. Le problème est que pour créer des clés toujours plus robustes, il faut augmenter la taille de la clé ce qui peut devenir contraignant. Afin de répondre à cette problématique, et à d'autres que nous aborderons plus tard, ont été introduites des fonctions de chiffrement asymétrique basées sur les courbes elliptiques.