Vous connaissez probablement la fameuse réponse de Jésus de Nazareth aux pharisiens qui souhaitaient le piéger au sujet du paiement des impôts :

Rendez à César ce qui appartient à César, et à Dieu ce qui appartient à Dieu.

Justement, l’histoire attribue à César l’un des premiers codes de chiffrement d’informations : le chiffre de César aussi appelé chiffrement par substitution.

Lorsque César souhaitait correspondre sur des sujets sensibles notamment à destination de son armée, pour éviter toute interception par l’ennemi, il chiffrait ses messages en décalant les lettres de l’alphabet de quelques rangs.

Ainsi le message « Frugal prototype » avec un décalage de 5 rangs vers la droite devient « Kwzlfq Uwtytyduj ».

Le destinataire du message doit connaître le nombre utilisé pour le décalage pour pouvoir déchiffrer le message. Ce nombre est le secret que partagent l’émetteur et le destinataire. C’est la clé qui permet le chiffrement et le déchiffrement du message.

Cela nécessite donc que l’émetteur et le destinataire se soient rencontrés au préalable pour échanger ce secret.

Mais comment faire pour échanger un secret avec quelqu’un à l’autre bout de la planète et que nous n’avons jamais rencontré sans risquer son interception par un tiers ?

Cette problématique est devenue critique avec l’avènement et le développement des réseaux de télécommunications.

Les fonctions à sens unique

C’est là que Whitfield Diffie et Martin E.Hellman, deux cryptologues américains, arrivent dans les années 70 avec un concept frugal qui va grandement inspirer la cryptographie telle que nous la connaissons aujourd’hui.

Diffie et Hellmann ont imaginé un système dans lequel deux interlocuteurs peuvent convenir d’un secret (d’une clé de chiffrement) sans qu’un tiers qui les écoute en permanence ne le découvre. Cela est possible grâce à l’utilisation des fonctions à sens unique.

Les fonctions à sens unique sont des fonctions pour lesquelles il est très facile de calculer f(x) en connaissant x, mais extrêmement compliqué de calculer x en connaissant f(x). En d’autres termes, il est aisé de calculer le résultat d’une fonction à sens unique ; mais extrêmement difficile, voire impossible, de connaître la donnée d’entrée de la fonction en ne connaissant que son résultat.

Quand Alice ne rencontra jamais Bob

Comme le veut la coutume, prenons deux interlocuteurs nommés Alice et Bob.

Alice et Bob souhaitent convenir d’un secret pour chiffrer les messages qu’ils échangent sans que Eve (probablement l’ex de Bob) qui les espionne, ne puisse intercepter et déchiffrer les messages.

Pour ce faire, Alice choisit, de manière totalement arbitraire, un grand nombre premier p, et le communique à Bob accompagné d’un nombre aléatoire g inférieur à p (dans l’exemple ci-dessous, nous choisirons des petits nombres pour faciliter les calculs).

Soit p = 37 et g = 4.

Bob et Alice, chacun de leur côté, choisissent un nombre aléatoire qu’ils vont garder secret et ne pas transmettre.

Ax = 15 (nombre aléatoire d’Alice) et Bx= 23 (nombre aléatoire de Bob)

Alice et Bob calculent alors respectivement Ay =  gAx modulo p et  By = gBx modulo p.

(Le modulo est l’opération de calcul du reste de la division euclidienne. j’utiliserai pour la suite le signe % pour l’opération modulo).

Soit Ay = 415 % 37 = 11 et By = 423 % 37 = 25.

Alice envoie le résultat de son calcul Ay à Bob qui lui répond le résultat de son calcul By.

Alice et BoB vont, pour finir, par calculer leur secret commun à partir des nombres By et Ay reçus.

Ainsi Alice va calculer s = ByAx % p et Bob va calculer s = AyBx % p

Ce qui nous donne s = 2515  % 37 = 1123  % 37 = 27

Voilà ! Alice et Bob ont un secret commun : s = 27.

Eve a pu intercepter p, g, Ay et By mais elle est incapable de calculer s sans connaître Ax ni Bx (les nombres aléatoires secrets de Alice et de Bob).

Si vous n’avez pas tout compris ce n’est pas grave, un petit schéma récapitulatif vous est proposé ci-dessous :

 

Principe d’un échange de clés Diffie-Hellman

 

Sinon, si ce n’est toujours pas clair, ci-dessous une petite vidéo très bien faite :

 

 

Je souhaitais vous présenter ce concept de fonctions à sens unique en guise d’introduction aux articles en préparation sur la technologie Blockchain.

Si des erreurs se sont glissées dans l’article, n’hésitez pas à nous en faire part.

Merci, et à très bientôt sur Frugal Prototype