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 personnes, il faut 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 ?
- Paramètres Publics : Alice et Bob s'accordent sur deux nombres publics : un grand nombre premier et un générateur .
- Clés Privées : Chaque partie choisit un nombre privé (Alice choisit et Bob choisit ).
- Calcul des Clés Publiques : Alice calcule et Bob calcule .
- Échange des Clés Publiques : Alice envoie à Bob et Bob envoie à Alice.
- Calcul de la Clé Secrète : Alice calcule et Bob calcule .
Grâce aux propriétés des logarithmes (), est identique pour les deux parties.
Et voilà! C'est tout.
Quelques éléments à prendre en compte
- La sécurité du système repose sur la difficulté du problème du logarithme discret. Un attaquant ne peut pas facilement déduire ou à partir des informations publiques.
- Le protocole de base ne fournit pas d'authentification. Il est vulnérable aux attaques de l'homme du milieu (MITM) si des mesures supplémentaires ne sont pas prises.
- Utilisez des nombres premiers suffisamment grands (au moins 2048 bits) pour garantir un niveau de sécurité convenable en 2025
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.