web-dev-qa-db-fra.com

"Diffie-Hellman Key Exchange" en anglais simple

Quelqu'un peut-il m'expliquer ce que Diffie-Hellman Key Exchange est en anglais ordinaire? J'ai lu dans une page d'actualités non technique que Twitter vient de mettre en œuvre cette technologie qui permet à deux personnes d'échanger des messages cryptés au-dessus d'un canal non sécurisé. Comment est-ce (si c'est vrai)?

262
user15119

Diffie-Hellman est un moyen de générer un secret partagé entre deux personnes de telle manière que le secret ne peut pas être vu en observant la communication. C'est une distinction importante: Vous n'êtes pas partage d'informations lors de l'échange de clés, vous créez une clé ensemble .

Ceci est particulièrement utile car vous pouvez utiliser cette technique pour créer une clé de chiffrement avec quelqu'un, puis commencer à chiffrer votre trafic avec cette clé. Et même si le trafic est enregistré puis analysé, il n'y a absolument aucun moyen de comprendre quelle était la clé, même si les échanges qui l'ont créé peuvent être visibles. C'est de là que vient perfect forward secret . Personne analysant le trafic à une date ultérieure ne peut s'introduire car la clé n'a jamais été enregistrée, jamais transmise et n'a jamais été rendue visible.

La façon dont cela fonctionne est assez simple. Une grande partie du calcul est la même que celle que vous voyez dans la cryptographie à clé publique en ce que fonction Trapdoor est utilisée. Et tandis que le problème du logarithme discret est traditionnellement utilisé (le xy mod p business), le processus général peut être modifié en tiliser également la cryptographie à courbe elliptique .

Mais même s'il utilise les mêmes principes sous-jacents que la cryptographie à clé publique, il s'agit de pas cryptographie asymétrique car rien n'est jamais chiffré ou déchiffré pendant l'échange. C'est, cependant, un élément essentiel, et était en fait la base sur laquelle la cryptographie asymétrique a été construite plus tard.

L'idée de base fonctionne comme ceci:

  1. Je viens avec un nombre premier p et un nombre g qui est coprime à p-1 et dites ce que c'est.
  2. Vous choisissez ensuite un numéro secret ( a ), mais vous ne le dites à personne. Au lieu de cela, vous calculez gune mod p et renvoyez-moi ce résultat. (Nous appellerons cela [~ # ~] a [~ # ~] car il provient de a ).
  3. Je fais la même chose, mais nous appellerons mon numéro secret b et le nombre calculé [~ # ~ ] b [~ # ~] . Je calcule donc gb mod p et vous envoie le résultat (appelé " [~ # ~] b [~ # ~] ")
  4. Maintenant, vous prenez le numéro que je vous ai envoyé et faites exactement la même opération avec it. C'est donc Bune mod p .
  5. Je fais la même opération avec le résultat que vous m'avez envoyé, donc: Ab mod p .

La "magie" ici est que la réponse que j'obtiens à l'étape 5 est le même nombre vous avez obtenu à l'étape 4. Maintenant, ce n'est pas vraiment de la magie, c'est juste des mathématiques, et cela se résume à une fantaisie propriété des exposants modulo. Plus précisément:

(gune mod p)b mod p = gun B mod p
(gb mod p)une mod p = gba mod p

Ce qui, si vous examinez de plus près, signifie que vous obtiendrez la même réponse quel que soit l'ordre dans lequel vous faites l'exponentiation. Je le fais donc dans un ordre et vous le faites dans l'autre. Je ne sais jamais quel numéro secret vous avez utilisé pour arriver au résultat et vous ne savez jamais quel numéro j'ai utilisé, mais nous arrivons toujours au même résultat.

Ce résultat, ce nombre sur lequel nous sommes tombés tous les deux aux étapes 4 et 5, est notre clé secrète partagée. Nous pouvons l'utiliser comme mot de passe pour AES ou Blowfish, ou tout autre algorithme qui utilise des secrets partagés. Et nous pouvons être certains que personne d'autre, personne d'autre que nous, ne connaît la clé que nous avons créée ensemble.

372
tylerl

Les autres réponses font un excellent travail expliquant les mathématiques derrière l'échange de clés. Si vous souhaitez une représentation plus picturale, rien ne vaut l'excellente analogie de Paint présentée sur échange de clés Diffie – Hellman entrée Wikipedia:


DH key exchange image

L'image est dans le domaine public

147
Duncan Jones

Diffie-Hellman est un algorithme utilisé pour établir un secret partagé entre deux parties. Il est principalement utilisé comme méthode d'échange de clés de cryptographie pour une utilisation dans des algorithmes de chiffrement symétriques comme AES.

L'algorithme en lui-même est très simple. Supposons qu'Alice veuille établir un secret partagé avec Bob.

  1. Alice et Bob se mettent d'accord sur un nombre premier, p, et une base, g, à l'avance. Pour notre exemple, supposons que p=23 et g=5.
  2. Alice choisit un entier secret a dont la valeur est 6 et calcule A = g^a mod p. Dans cet exemple, A a la valeur 8.
  3. Bob choisit un entier secret b dont la valeur est 15 et calcule B = g^b mod p. Dans cet exemple, B a la valeur 19.
  4. Alice envoie A à Bob et Bob envoie B à Alice.
  5. Pour obtenir le secret partagé, Alice calcule s = B^a mod p. Dans cet exemple, Alice obtient la valeur de s=2
  6. Pour obtenir le secret partagé, Bob calcule s = A^b mod p. Dans cet exemple, Bob obtient la valeur de s=2.

L'algorithme est sécurisé car les valeurs de a et b, qui sont nécessaires pour dériver s ne sont pas du tout transmises sur le câble.

38
user10211

Si vous voulez une explication en anglais simple et plus simple de DH qui peut être facilement comprise par même des personnes non techniques, il y a l'analogie de la boîte à double verrouillage.

  1. Alice met un secret dans une boîte et la verrouille avec un cadenas qu'elle a la seule clé à ouvrir. Elle expédie ensuite la boîte à Bob.

  2. Bob reçoit la boîte, place un deuxième cadenas dont lui seul a la clé et la renvoie à Alice.

  3. Alice retire son verrou et expédie la boîte à Bob une deuxième fois.

  4. Bob retire son verrou, ouvre la boîte et a accès au secret qu'Alice lui a envoyé.

Étant donné que la boîte a toujours eu au moins un verrou pendant le transport, Eve n'a jamais la possibilité de voir ce qui se trouve à l'intérieur et de voler le secret: une clé cryptographique qui sera utilisée pour crypter le reste des communications d'Alice et Bob.

Le problème des échanges clés

Une connexion sécurisée nécessite l'échange de clés. Mais les clés elles-mêmes devraient être transférées sur une connexion sécurisée.

Il existe deux solutions possibles:

  1. échanger la clé en rencontrant physiquement et en partageant les clés.
  2. D'une manière ou d'une autre, il a établi un secret partagé sur un canal public non sécurisé. C'est plus facile à dire qu'à faire, et la première implémentation de ce type est le schéma Diffie-Hellman.

Propriétés

Diffie-Hellman utilise une fonction mathématique avec les propriétés suivantes:

  1. Il est FACILE de calculer f[x] (à partir de x)
  2. Il est DIFFICILE d'inverser f[x] pour obtenir x
  3. Il est FACILE de calculer S à partir de A et f[B]
  4. Il est FACILE de calculer S à partir de B et f[A]
  5. Il est DIFFICILE de calculer S sans A ou B (même avec f[A] et f[B])

Fonctionnement du schéma DH

  1. Alice sort avec un nombre aléatoire A. Elle calcule f[A], et envoie f[A] À bob. Alice ne révèle jamais son A, même pas à Bob.
  2. Bob sort avec un autre nombre aléatoire B. Il calcule f[B], et envoie f[B] à Alice. Bob ne révèle jamais son B, pas même à Alice.
  3. Alice calcule S en utilisant A et f[B]. Bob calcule S en utilisant B et f[A]
  4. Mallory, qui écoute, n'a que f[A] et f[B], et il lui est donc difficile de calculer S.
  5. Alice et Bob partagent maintenant un secret commun qui peut être utilisé comme (ou pour trouver) une clé pour établir une connexion sécurisée.

Note latérale:

Le schéma Diffie-Hellman ne fournit aucune authentification d'aucune sorte. Il permet uniquement à 2 parties anonymes de partager un secret commun. Mais pour tout ce qu'Alice sait, elle pourrait serrer la main du diable (au lieu de Bob). C'est pourquoi nous avons besoin qu'au moins une partie soit authentifiée.

Par exemple: SSL (https), le serveur Web est authentifié à l'aide de PKI (Public Key Infrastructure), puis une connexion sécurisée est établie (D-H) entre le site Web et le client. Depuis que le site Web a été authentifié, le client peut faire confiance au site Web, mais le site Web ne peut pas faire confiance au client. Le client peut désormais fournir en toute sécurité ses propres informations d'authentification sur la page Web.

26
aiao

La sécurisation des données lors de leur passage sur Internet nécessite généralement de les protéger de deux manières:

  • Confidentialité - assurer que personne sauf les destinataires prévus ne peut lire les données
  • intégrité - assurant que personne ne peut modifier ou falsifier les données en transit

La confidentialité est fournie en utilisant Chiffrement symétrique et l'intégrité est fournie en utilisant Code d'authentification de message (MAC) .

Le chiffrement symétrique et le MAC nécessitent que les deux parties disposent de clés secrètes et secrètes identiques (une "clé" dans ce sens étant simplement un nombre, converti en binaire).

Le problème est alors Comment les deux parties établissent-elles les clés identiques et secrètes sur Internet? (ou tout autre support non sécurisé). Ceci est connu comme " le problème d'échange de clés".

L'une des solutions à ce problème est l'algorithme Diffie-Hellman.


Diffie-Hellman permet à deux parties d'établir un secret partagé sur un support non sécurisé . Ou, pour le dire plus simplement ...

Imaginez que vous et votre ami vous teniez 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 numéro identique, mais ne voulez pas que quiconque dans la salle sache de quel numéro il s'agit. Diffie-Hellman vous permettrait, à vous et à votre ami, d'échanger intelligemment certains nombres, et à partir de ceux-là les nombres calculent un autre nombre 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é.

Diffie-Hellman Key Exchange -- pracnet.net/crypto

Quiconque "écoutait" la conversation "n'entendait" que les numéros échangés au milieu: 13, 6, 2, 9. Il n'existe aucun moyen cohérent de combiner ces quatre nombres pour atteindre le dernier secret partagé: 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.

Ça est la beauté de Diffie-Hellman.

Les nombres utilisés dans l'exemple ci-dessus sont petits pour simplifier les calculs. En réalité, les nombres utilisés dans les échanges Diffie-Hellman modernes sont (ou devraient être) au minimum 2048 bits de long - ce qui nécessiterait environ 617 chiffres pour écrire !!


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 chiffrement symétrique et d'authentification des messages 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 une direction, MAC + Cryptage dans l'autre sens). Les quatre clés sont générées à partir de la même valeur de départ initiale, dérivée de Diffie-Hellman.

10
Eddie

Diffie-Hellman est un algorithme mathématique pour échanger un secret partagé entre deux parties. Ce secret partagé peut être utilisé pour crypter des messages entre ces deux parties. Notez que l'algorithme Diffie-Hellman ne fournit pas d'authentification entre ces deux parties.

5
Lucas Kauffman

Les vidéos Diffie-Hellman de Computerphile sont absolument spectaculaires en ce qui concerne les explications de cet échange de clés. Leur vidéo " Secret Key Exchange (Diffie-Hellman) " est assez complète, mais leur explication des mathématiques derrière DH est la meilleure que j'ai rencontrée jusqu'à présent sur n'importe quel support (et certainement mieux que ce que je pourrais personnellement écrire ici). Prenez une montre ici .

2
securityOrange

En anglais simple sans utiliser aucune expression mathématique comme dans les réponses ci-dessus, le Diffie-Hellman Key Exchange Est une invention de Diffie et Hellman.

L'invention concerne un moyen pour deux personnes de s'entendre sur le même numéro. Ce numéro commun convenu sera ensuite utilisé aux fins souhaitées par les deux personnes. Par exemple, après avoir suivi les étapes DH Key Exchange, Le résultat final est que les deux personnes arrivent maintenant sur le même numéro. Aucune des deux personnes n'a le contrôle de ce que sera ce numéro commun. L'invention DH Key Exchange Garantit uniquement que les deux personnes arriveront à un numéro commun. Un exemple d'utilisation une fois que ce nombre commun est atteint est de transmettre les lettres de l'alphabet en utilisant ce numéro. Par exemple, si le nombre commun est 5, la lettre A devient F, la lettre B devient G et ainsi de suite lors de l'envoi d'un message. L'autre personne qui reçoit le message recule ensuite chaque lettre du message pour le lire.

Person-A Et person-B Ne pouvaient pas simplement parler fort pour se mettre d'accord sur un numéro commun car un troisième person-C L'entendrait. Si person-C Connaît le numéro convenu, il peut également lire le message secret. Le DH Key Exchange Nécessite toujours qu'il y ait toujours un troisième person-C Qui puisse écouter les messages entre person-A Et person-B Et ce Le scénario à trois personnes est tout le but de l'invention sur la façon de rendre person-C incapable de lire les messages codés secrets entre person-A Et person-B.

Dans les premières étapes de DH Key Exchange, person-A Et person-B Enverront des nombres dans les deux sens et à cette première phase person-C Pourra lire ces premiers messages. Dans la deuxième phase, person-A Et person-B Enverront des messages chiffrés que person-C Ne pourra plus lire. Malgré le fait que person-C Puisse entendre les messages initiaux pendant les premières étapes, person-C Ne peut pas arriver au numéro convenu que person-A Et person-B Ont maintenant.

Diffie et Hellman ont reçu le Turing Award En 2015 pour cette invention.

0
typelogic

J'ai écrit cela une fois comme concept d'un discours que je n'ai jamais prononcé. Cela démontre une vraie cryptographie en utilisant un niveau de mathématiques que tout le monde peut faire après le lycée.

Comme c'est écrit comme un discours, c'est Diffie-Hellman en anglais simple!

Hé toi! Configurons un canal crypté. Je t'enverrai ma clé et tu m'enverras la tienne, et ensuite nous pourrons parler en privé.

Qu'est-ce que vous avez dit? Tout le monde peut nous entendre? Oui, ce n'est pas un problème!

Nous pouvons utiliser Diffie-Hellman. Pensez simplement à un nombre aléatoire et augmentez 5 à la puissance de ce nombre aléatoire. Divisez le résultat par 23 et prenez le reste. Donne moi ça. Le nombre aléatoire d'origine, vous devez garder le secret, les autres nombres sont tous de notoriété publique.

Votre reste est de 8? D'accord. Mon reste est de 10. Maintenant, élevez à nouveau mon reste au pouvoir de votre nombre aléatoire secret, et divisez par 23 à nouveau, et prenez le reste. Même chose, petit pois facile. Je ferai la même chose avec ton numéro et mon numéro aléatoire secret.

Tu as le résultat? Bien moi aussi! Je sais que vous en avez eu 6, tout comme moi, et pourtant personne d'autre dans cette pièce n'aurait pu calculer cela. Ils auraient pu essayer toutes les combinaisons possibles jusqu'à trouver les nombres aléatoires qui correspondent à ce qu'ils ont entendu (8 de votre côté et 10 du mien), mais il n'y a aucun moyen de calculer cela plus efficacement qu'en essayant toutes les possibilités. Nous aurions pu utiliser le résultat, 6, comme mot de passe. Personne n'aurait su le mot de passe que nous utilisons, malgré les échanges. Mais c'est un mot de passe très faible. La prochaine fois, nous devrions choisir de plus grands nombres et utiliser une calculatrice pour créer un mot de passe plus long et plus fort.

Notez que cela a fonctionné parce que nous pouvons nous voir. Je sais que ce n'est pas quelqu'un d'autre qui parle quand tu me dis que ton numéro est 8 parce que je peux voir tes lèvres bouger. Sur Internet, quelqu'un pourrait lancer des attaques contre cela en faisant semblant d'être de l'autre côté et en nous donnant de faux numéros. Comment empêcher ces attaques est un sujet pour un autre jour.

0
Luc

Objectif de Diffie – Hellman: partager secrètement un numéro entre deux parties sur un canal ouvert.

Rappelons d'abord de l'école ces règles d'exponentiation: (xᵃ)ᵇ=xᵃᵇ=xᵇᵃ par exemple. (2³)⁴=(2⁴)³=4096. L'idée est que si Alice envoie x et xᵃ à Bob alors ni Bob ni personne d'autre ne peut calculer a. Il est facile de dire ce qu'est 2³, mais étant donné 8, il est difficile de dire quelle puissance 2 doit être amenée pour obtenir 8. Donc, cela se résume à:

  1. Alice et Bob s'entendent sur un nombre x qui peut être connu de n'importe qui, disons 2
  2. Alice génère a=3 et envoie 2³=8 À bob
  3. Bob génère un nombre b=4 et envoie 2⁴=16 à Alice
  4. Alice calcule 16³=4096 et Bob calcule 8⁴=4096

Donc, Alice et Bob connaissent tous les deux 4096, mais personne d'autre ne connaît a et b donc ne peut pas calculer xᵃᵇ.

En réalité, le calcul des logarithmes n'est pas si compliqué. Mais cela devient compliqué une fois arithmétique modulaire inclus.

0