Noë Flatreaud

l'Échange de Clés Diffie-Hellman

Un peu de cryptographie ça fait pas de mal à son homme.
En français cette fois, parceque j'avais envie ;)

Jusque dans les années 70, le seul moyen d'établir un canal privé chiffré entre deux entitée était d'abord de se mettre d'accord sur un secret avec lequel vous alliez communiquer. Pendant la guerre froide par exemple, certains mots de passes et autre codes secrets étaient communiqués par espions interposés, malette menottée à la main.

Le fait est quand même que, faire transiter un secret sur un canal non-sécurisé s'expose à de gros risques d'interception (Man-In-The-Middle) et de distribution (pour n personnes, il faut n(n1)2 clés).

En clair, le meilleur moyens serait d'éviter cette partie, ou du moins, la remplacer par autre chose. C'est là qu'intervient Diffie-Hellman.

L'échange de clés Diffie-Hellman

En cryptographie, l'échange de clés Diffie-Hellman (DH), est une méthode publiée en 1976 du nom de ses auteurs Whitfield Diffie, Martin Hellman et Ralph Merkle par laquelle deux agents (Alice et Bob) peuvent se mettre d'accord sur un nombre, que l'on appel secret, sans qu'un troisième agent (Eve) puisse le découvrir, même en étant au milieu des échanges.

Comment ça marche ?

Grâce aux propriétés des logarithmes (gab=(ga)b), s est identique pour les deux parties.

s=Ab=Bb=(ga)b=(gb)a=gab

Et voilà! C'est tout.

Quelques éléments à prendre en compte

Implémenter Diffie-Hellman avec Python

Petit exemple, pas dutout exhaustif et surtout pas valable en production, d'échange de clés avec Diffie-Hellman en Python :

#!/usr/bin/python
# Version: 0.0.1

def main():
    # Paramètres publics
    P = 618970019642690137449562111
    G = 9

    # Clés privées
    a = 12345678901234567890  # Clé privée d'Alice
    b = 98765432109876543210  # Clé privée de Bob

    # Calcul des clés publiques
    A = pow(G, a, P)
    B = pow(G, b, P)

    # Échange des clés publiques
    # Alice reçoit B et Bob reçoit A

    # Calcul de la clé secrète partagée
    secret_key_alice = pow(B, a, P)
    secret_key_bob = pow(A, b, P)

    print("Clé secrète pour Alice :", secret_key_alice)
    print("Clé secrète pour Bob :", secret_key_bob)
    assert(secret_key_alice==secret_key_bob)

if __name__ == "__main__":
    main()

Manque plus qu'à le tester ;

$ python diffie-hellman.py
Clé secrète pour Alice : 460270025800298564703454138
Clé secrète pour Bob : 460270025800298564703454138

Tada!

En bref, Diffie-Hellman est une méthode pour recomposer un secret partagé entre deux parties. Il soit simple à comprendre et à implémenter, mais dépend fortement de ces paramètre et d'autres méchanismes pour être sûr.

#cryptographie #dh #infosec