Chapitre 02 : La cryptographie asymétrique

Le problème avec la cryptographie symétrique

Dans le chapitre précédent sur la cryptographie symétrique, nous avons vu que les deux protagonistes doivent se mettre d’accord sur une clé privée commune. Ce n’est pas toujours pratique. Imaginez que vous deviez rencontrer en personne tous les gens avec qui vous discutez sur Internet pour échanger vos clés… Vous voulez pouvoir, par exemple discuter immédiatement et de manière sécurisée avec tout le monde.

Ce problème est résolu par la cryptographie asymétrique, aussi appelé cryptographie à clé publique.

Diffie-Hellman (DH)

La première chose à faire en cryptographie asymétrique, c’est l’échange de clé ! Le premier algorithme à faire cela est appelé Diffie-Hellman (DH) et il a pour but d’établir un secret commun entre deux parties. Ce secret commun peut par exemple être une clé privée pour réaliser par la suite une communication via la cryptographie symétrique.

Concrètement, Alice & Bob vont tous les deux générer une clé privée chacun de leur côté ainsi que la clé publique correspondante puis ils vont ensuite s’échanger par internet leurs clés publiques.

Note

Les clés publiques, comme leur nom l’indique sont publiques et il n’y a donc aucun risque à ce que tout le monde les connaisse.

RSA & signature électronique

Peu de temps après l’invention de l’échange de clé via Diffie-Hellman, l’algorithme RSA est sorti avec deux primitives: un algorithme de cryptage à clé publique (cryptographie asymétrique) et une signature électronique.

Dans le chiffrement asymétrique, on utilise la clé publique du destinataire pour chiffrer et la clé privée du destinataire pour déchiffrer un message. Si Alice veut envoyer un message chiffré à Bob, elle chiffre le message avec la clé publique de Bob puis envoie à Bob le texte chiffré. Bob peut ensuite déchiffrer le texte avec sa propre clé privée.

Les signatures électroniques sont un peu comme votre signature manuscrite que vous utilisez pour les contrats classiques, mais elles sont beaucoup plus sûres, n’importe qui peut vérifier avec exactitude votre signature électronique et personne ne peut l’imiter sans votre clé privée.

Voici comment cela marche :

  • Vous souhaitiez envoyer un message indiquant votre position “Je suis à Angoulême”.
  • En utilisant votre clé privée, vous allez générer une signature (ressemblant à une suite de caractères aléatoires).
  • Vous envoyez ensuite le message ainsi que la signature.
  • N’importe qui peut alors vérifier la signature en combinant votre clé publique, le message et la signature.

Si le message est altéré (Remplacé par exemple “Je suis à Bordeaux”) ou que la signature n’a pas été réalisée avec votre clé privée, alors l’algorithme de vérification indiquera que la signature n’est pas valide.

Explications du fonctionnement de Diffie-Hellman

Si vous voulez aller un peu plus loin, voici donc le principe de fonctionnement de Diffie-Hellman :

  • Alice crée sa clé privée “a” et choisit un entier aléatoire “g”.
  • Alice va calculer sa clé publique “A” qui est égal à g^a (“g” à la puissance “a”).
  • Alice transmet à Bob la valeur de “g” et de “A”, sa clé publique.
  • Bob fait la même chose, il crée sa clé privée “b” et calcule sa clé publique “B” avec g^b (“g” à la puissance “b”). “g” lui ayant été donné par Alice.
  • Bob transmet à Alice sa clé publique “B”.

À partir de là :

  • Alice va calculer B^a (Clé publique de Bob à la puissance clé privée d’Alice).
  • Bob va calculer A^b (Clé publique d’Alice à la puissance clé privée de Bob).

Or, on sait que “A” est égal à g^a et que “B” est égal à g^b donc :

  • Dans son calcul, Alice fait B^a soit g^b^a soit g^(b*a).
  • Dans son calcul, Bob fait A^b soit g^a^b soit g^(b*a).

Alice et Bob ont donc calculé la même valeur : g^(a*b), c’est la clé secrète qu’ils se sont partagés!

Si une personne a écouté les échanges entre Alice et Bob, elle dispose des valeurs “A”, “B” et “g” mais pour calculer la clé partagée (g^(a*b)), il faut calculer “a” à partir de “A” et “b” à partir de “B”.

Pour calculer A à partir de a, on a utilisé la fonction exponentielle : A = exp(a) = g^a, c’est très rapide à calculer. La réciproque ou l’inverse de la fonction exponentielle est le logarithme (pour faire simple : log(g^x) = x) et cette fonction est très longue à calculer ! C’est ce qui fait la sécurité de ce système.