Diffie-Hellman
Le système est basé sur l’idée que deux interlocuteurs peuvent générer conjointement une clé partagée sans qu’un intrus, qui écoute les communications, puisse l’obtenir.
Deux numéros publics sont choisis pour cela et, chaque interlocuteur, un numéro secret. En utilisant une formule mathématique, qui inclut l’exponentiation, chaque interlocuteur effectue une série d’opérations avec les deux nombres publics et leur nombre secret. Ensuite, les interlocuteurs échangent les résultats publiquement. En théorie, inverser cette fonction est aussi difficile que de calculer un logarithme discret (un sextillion fois plus cher que l’exponentiation utilisée pour transformer les nombres). C’est pourquoi on dit que ce nombre est le résultat de l’application d’une fonction unidirectionnelle au nombre secret.
Ensuite, les deux interlocuteurs utilisent séparément une formule mathématique qui combine les deux nombres transformés avec leur nombre secret et à la fin, les deux arrivent au même numéro de résultat, qui sera la clé partagée.
Description détailléemodifier
Pour les deux parties Alice et Bob, qui tentent d’établir une clé secrète, et un adversaire Mallory, la version de base est la suivante:
- définir un cousin p {\displaystyle p}
et un générateur g ∈ Z p ∗ {\displaystyle g\in\mathbf {Z}_{p}^{*}}
(). Ceux-ci sont publics, connus non seulement des parties Alice et Bob mais aussi de l’adversaire Mallory.
- Alice choisit a ∈ Z p-1 {\displaystyle a\in\mathbf {Z}_{p-1}}
au hasard, calcule A = g un mod p {\displaystyle A = g^{a}\; {\bmod{\;}} p}
, et envoie Un {\displaystyle A}
Bob
- Bob choisit b ∈ Z p-1 {\displaystyle b\in\mathbf{Z}_{p-1}}
random calcule B = g b mod p {\displaystyle B = g ^ {b} \; {\bmod{\;}} p}
, et envoie B {\displaystyle B}
Alice
Notez que A et B peuvent être calculés par la valeur K = g ⋅ b mod p {\displaystyle K = g^ {a\cdot b}\; {\bmod {\;}}p}
. En efecto, lo podemos demostrar usando las propiedades del grupo Z p ∗ {\displaystyle \mathbf {Z} _{p}^{*}}
: Para Alice: B a mod p = ( g b mod p ) a mod p = ( ( g b mod p ) ( g b mod p ) ⋯ ( g b mod p ) ⏞ a ) mod p = g b ⋅ a mod p = g a ⋅ b mod p = K {\displaystyle B^{a}\;\;{\bmod {\;}}\;p=(g^{b}\;{\bmod {\;}}p)^{a}\;{\bmod {\;}}p=(\overbrace {(g^{b}\;{\bmod {\;}}p)(g^{b}\;{\bmod {\;}}p)\cdots (g^{b}\;{\bmod {\;}}p)} ^{a})\;{\bmod {\;}}p=g^{b\cdot a}\;{\bmod {\;}}p=g^{a\cdot b}\;{\bmod {\;}}p=K}
Para Bob: A b mod p = ( g a mod p ) b mod p = ( ( g a mod p ) ( g a mod p ) ⋯ ( g a mod p ) ⏞ b ) mod p = g a ⋅ b mod p = K {\displaystyle A^{b}\;{\bmod {\;}}p=(g^{a}\;{\bmod {\;}}p)^{b}\;{\bmod {\;}}p=(\overbrace {(g^{a}\;{\bmod {\;}}p)(g^{a}\;{\bmod {\;}}p)\cdots (g^{a}\;{\bmod {\;}}p)} ^{b})\;{\bmod {\;}}p=g^{a\cdot b}\;{\bmod {\;}}p=K}
Comme les deux parties peuvent calculer un K {\displaystyle K}
, alors nous pouvons l’utiliser comme clé partagée.
attacksEdit
Attaques passivesedit
Un adversaire Mallory, possédant p, g, A et B, pourrait calculer le secret partagé s’il avait également l’une des valeurs privées (a ou b). Obtenir un a ou b à partir d’une fonction d’inversion A ou B (a = l o g d i s c p (A) {\displaystyle a = \nom de l’opérateur {log\; disc}_ {p}(A)}
et b = l o g d i s c p (B) {\displaystyle b = \nom de l’opérateur {log\; disc}_{p}(B)}
) est le problème du logarithme discret dans Z p ∗{\displaystyle\mathbf{Z}_{p}^{*}}
, un problème que l’on croit insoluble sur le plan informatique lorsque p est un nombre premier supérieur à 200 chiffres ou plus, et qui ne répond pas à certaines caractéristiques débilitantes.
Attaques activesEdit
Le protocole est sensible aux attaques actives de l’homme du milieu. Si la communication est interceptée par un tiers, celle-ci peut être transmise en tant qu’expéditeur face au destinataire et inversement, car aucun mécanisme n’est disponible pour valider l’identité des participants à la communication. Ainsi, “l’homme du milieu” pourrait s’entendre sur une clé avec chaque participant et relayer les données entre eux, en écoutant la conversation dans les deux sens. Une fois la communication symétrique établie, l’attaquant doit continuer à intercepter et à modifier le trafic au milieu afin qu’il ne le remarque pas. Notez que pour que l’attaque soit opérationnelle, l’attaquant doit connaître la méthode de chiffrement symétrique qui sera utilisée. S’appuyer sur la dissimulation de l’algorithme de chiffrement symétrique n’est pas conforme aux principes de Kerckhoffs (l’efficacité du système ne doit pas dépendre de sa conception restant secrète).
Pour éviter ce type d’attaque, une ou plusieurs des techniques suivantes sont généralement utilisées:
- Contrôle du temps.
- Pré-authentification des parties. Par exemple, utilisez l’authentification par protocole de couche sous-jacente. Nous pourrions d’abord établir une connexion TLS et appliquer l’algorithme Diffie-Hellman sur cette couche.
- Authentification du contenu. Par exemple, nous pourrions utiliser MAC sur le contenu des messages.
- Chiffrer les clés publiques avec un algorithme de clé publique (asymétrique), en évitant le problème de l’homme du milieu, et en vérifiant à son tour que la clé publique est autre que 0 et 1.
- En utilisant un tiers (Carol) avec qui Alice ou Bob entretiennent un canal sécurisé. Ce tiers peut détecter l’homme du milieu
si Alice ou Bob sont écoutés/modifiés, simplement en défiant les deux à un test impliquant dans ledit test la clé publique du otro.Si Mallory dénature la communication Alice-Bob, ainsi que l’Alice-Carol, il ne peut pas dénaturer le canal sécurisé Bob-Carol et sera détecté.Et s’il dénature l’Alice-Bob et le Bob-Carol, il ne peut pas dénaturer l’Alice-Carol (par définition, il doit y avoir un canal sûr entre deux des trois, même si les deux autres canaux sont dénaturés par Mallory). Cela signifie que la méthode Diffie-Hellman peut créer des réseaux multi-nœuds 100% sécurisés, à partir d’aussi peu que deux nœuds précédemment sécurisés. Cette méthode est également utilisée pour tester des canaux soupçonnés d’être dangereux.
Ejemploéditeur
|
|
|
Exemple avec encryptionedit
La nécessité de cet exemple est la suivante : Bob doit envoyer un texte chiffré à Alice mais sans partager la clé de chiffrement. Comment fait-il?
- Alice choisit un nombre secret a= 6, le nombre premier p = 23 et la base g = 5. Ensuite, il envoie la clé publique de Bob Alice (ga mod p), p et g :
- 56 mod 23 =8.
- 23
- 5
- Bob choisit un nombre secret b = 15, puis Bob calcule la clé de chiffrement commune (ga mod p) b mod p
- 815 mod 23 = 2.
- Bob chiffre, avec un chiffrement symétrique tel que AES, le texte en clair à l’aide de la clé de chiffrement générée.
- Texte chiffré = Chiffrement symétrique (Texte en clair, 2)
- Bob envoie à Alice le texte chiffré et la clé publique de Bob (gb mod p)
- 515 mod 23 = 19.
- Texte chiffré
- Alice calcule (gb mod p) en mod p
- 196 mod 23 = 2.
- Alice utilise cette clé de chiffrement générée pour déchiffrer les données envoyées par Bob
- Cleartext=Symmetric Decryptor (texte chiffré, 2 )
Des valeurs beaucoup plus grandes de a, b et p seraient nécessaires pour rendre cet exemple sûr. Puisqu’il est très simple de tester toutes les valeurs possibles de gab mod 23 (il y aura, au maximum, 22 valeurs, même si a et b sont de grands nombres).
Évidemment, le besoin d’Alice d’envoyer à Bob les informations cryptées est également couvert par l’implémentation.
Leave a Reply