La sécurisation des données lors de leur transit sur Internet nécessite généralement de les protéger de deux manières:
- Confidentialité - ne garantir personne sauf les destinataires prévus peuvent lire les données
- Intégrité - garantissant que personne ne peut modifier ou falsifier les données en transit
La confidentialité est assurée à l'aide du cryptage symétrique et l'intégrité est assurée à l'aide d'un code d'authentification de message (MAC).
Le cryptage symétrique et les MAC exigent que les deux parties aient des clés identiques et secrètes (une "clé" dans ce sens étant simplement un nombre, converti en binaire).
Le problème est alors de Comment les deux parties établissent-elles des clés identiques et secrètes sur Internet? (ou tout autre support non sécurisé). C'est ce qu'on appelle " le problème d'échange de clés ".
Une des solutions à ce problème est l'algorithme Diffie-Hellman.
Diffie-Hellman permet à deux parties de établir un secret partagé sur un support non sécurisé . Ou, pour le dire plus simplement ...
Imaginez que vous et votre ami vous trouviez dans une pièce bondée, entourés de personnes à l'air douteux. Supposons que vous et votre ami deviez vous mettre d'accord sur un nombre identique, mais que personne d'autre dans la pièce ne sache de quel numéro il s'agit. Diffie-Hellman vous permettrait, à vous et à votre ami, d'échanger intelligemment certains numéros, et à partir de ces numéros, calculez un autre numéro qui est identique. Et même si tout le monde dans la salle a entendu les numéros échangés, ils n'ont aucun moyen de déterminer le numéro final auquel vous et votre ami êtes arrivés.
Nous pouvons voir un exemple de cela se produire dans l'image ci-dessous. Alice et Bob utiliseront l'échange de clés Diffie-Hellman pour établir un secret partagé.
Quiconque "écoutant" la conversation "entend" uniquement les numéros échangés au milieu: 13
, 6
, 2
, 9
. Il n'y a pas de moyen cohérent de combiner ces quatre nombres pour atteindre le secret partagé final: 3
sans connaître l'une des valeurs privées d'Alice ou de Bob ( 5
ou 4
) qui n'ont jamais été partagés.
C'est la beauté de Diffie-Hellman.
Les nombres utilisés dans l'exemple ci-dessus sont petits pour garder les mathématiques simples. En réalité, les nombres utilisés dans les échanges Diffie-Hellman modernes ont (ou devraient être) au minimum 2048 bits de long - ce qui nécessiterait environ 617 chiffres pour l'écriture !!
Après avoir terminé l'échange de clés Diffie-Hellman, les deux parties possèdent désormais une valeur identique, connue uniquement de chaque partie.
Cette valeur devient le "point de départ" à partir duquel des clés supplémentaires peuvent être générées.
Plus tôt, nous avons mentionné que les codes de cryptage symétrique et d'authentification de message nécessitent chacun une clé secrète. Eh bien, prenez votre DH Shared Secret et combinez-le avec quelques autres valeurs et maintenant vous avez les clés de cryptage et MAC dont vous avez besoin.
L'avantage supplémentaire est de combiner des valeurs pour créer des clés est facile ... Cela peut être fait autant de fois que nécessaire.
En fait, de nombreux protocoles de sécurité (SSL / TLS, IPsec, etc.) génèrent un jeu de clés pour sécuriser le trafic dans chaque direction - un total de quatre clés (MAC + cryptage dans un sens, MAC + cryptage dans l'autre sens). Les quatre clés générées à partir de la même valeur de départ initiale, dérivée de Diffie-Hellman.