Algorithme de Diffie - Hellman

L. Sierra Messages postés 11 Statut Membre -  
georges897 Messages postés 4 Statut Membre -
Salut à tous,

Je reviens avec mes problèmes d'encryption à clef publique :-(

Comme le RSA est très gourmand en ressources je viens d'essayer l'algorithme de Diffie-Hellman, beaucoup plus facile à mettre en oeuvre. Seul problème: les résultats ne coincident pas !

Sur base de la doc suivante:
http://www.apocalypse.org/pub/u/seven/diffie.html

J'ai fait les calculs suivants:

p=418
//Arbitraire
g=7
//Arbitraire

Host1 exécute:

X=5
//Arbitraire

y = g^x % p

y = 16807 % 418

y = 87

-> envoie ce y à host 2

Host2 exécute:

X=6
//Arbitraire

y = g^x % p

Y = 117649 & 418

Y = 384

-> envoie ce y à host 1

Host1 exécute (sur base du Y envoyé par host 2):

z = y^x % p

z = 384^5 % 418

z = 8349416423424 % 418

Z = 340

Host 2 exécute (sur base du y envoyé par host 1):

z = y^x % p

z = 87^6 % 418

z = 433626201009 % 418

z = 1

Ici les deux valeurs Z obtenues par host1 et host 2 devraient être identiques... Alors comment se fait-il que j'obtienne respectivement 340 et 1 ?

Je crois que mes calculs sont justes, comme je les ai faits à l'ordi. Il doit donc s'agir des valeurs de base (les 2 X arbitraires , P et G tirés au hasard) qui ne respectent pas les restrictions ? J'ai pourtant bien suivi les instructions du site, ainsi que celles de

http://mantis.free.fr/articles/diffie.htm

S'il y a parmis vous des connaisseurs en sécurité (ou des experts en Math) ce serait sympa de m'aider...

a+

Lionel

4 réponses

sebsauvage Messages postés 33415 Statut Modérateur 15 667
 
Je l'ai fait en Python, ça marche !
p = 419  # Nombre premier arbitraire (public)
g = 7    # entier inférieur à p (public)

hostA_x = 178  # nombre arbitraire inférieur à p-1
hostB_x = 344  # nombre arbitraire inférieur à p-1

hostA_y = g ^ hostA_x % p  # Clé publique de A
hostB_y = g ^ hostB_x % p  # Clé publique de B

hostA_z = hostB_y ^ hostA_x % p  # calcul de la clé commune z
hostB_z = hostA_y ^ hostB_x % p  # calcul de la clé commune z

print hostA_z
print hostB_z


Et on obtient:
493
493
1
georges897 Messages postés 4 Statut Membre
 
slt
stp peux tu m'envoiyés le code source de diffie hellman en python ou en java j travaille sur le reseau et j aimerai voire un peu l architecture et à quoi ressemble le code source car j n sui pas calé en programmation...mon mail est ndongojulia@yahoo.fr
0
sebsauvage Messages postés 33415 Statut Modérateur 15 667
 
Ceci dit, Diffie-Hellman peut être utilisé pour créer un secret commun (et donc chiffrer des communications), mais ne peut en aucun cas être utilisé pour signer cryptogrphiquement des messages (contrairement à RSA qui peut faire les 2).

C'est pour cela que Diffie-Hellman est souvent associé à DSS (Digital Signature Standard).
On voit donc souvent 'DH/DSS'.
1
sebsauvage Messages postés 33415 Statut Modérateur 15 667
 
p est censé être un nombre premier.
418 n'est pas un nombre premier ! :-)
0
L. Sierra Messages postés 11 Statut Membre
 
Oui, je savais que Diffie Hellman n'était conçu que pour générer des clefs à utiliser en cryptage symétrique ensuite, mais c'est bien l'utilisation que je pensais en faire, donc pas de pb...

Merci encore et a+
0