2017-05-10 3 views
2

Ich versuche derzeit, eine Implementierung des Ephemeral Diffie-Hellman-Algorithmus unter Verwendung des Python-Kryptographiemoduls zu erstellen. Für unsere Zwecke ist es wichtig, dass die Benutzer authentifiziert werden. Sowohl Alice als auch Bob haben ein öffentlich-privates Schlüsselpaar und ein Zertifikat, das von einer Zertifizierungsstelle signiert wurde, um ihren öffentlichen Schlüssel verifizieren und mit ihrer Identität verknüpfen zu können.Kryptographie Python: Diffie-Hellman-Schlüsselaustauschimplementierung

Die Verwendung von Authenticated DH bedeutet, dass die gesendeten Nachrichten (siehe Bild) mit dem obigen privaten Schlüssel signiert werden.

Die Dokumentation über DH die Python-Kryptographie-Bibliothek verwendet, kann hier gefunden werden: https://cryptography.io/en/latest/hazmat/primitives/asymmetric/dh/

aber ich kann nicht scheinen zu verstehen, was die beschriebene Austauschfunktion tatsächlich der Fall ist. Kann mir jemand erklären, wo es im DH-Algorithmus liegt? vorzugsweise unter Verwendung der Analogie des folgenden Bildes:

DH-algorithm

Vielen Dank im Voraus!

Antwort

1

In ihrem Beispiel (aus der POV von Alice) ist die private_key die orange Farbe, und peer_public_key ist die hellblaue Farbe. shared_key ist die braune Farbe am Ende. Das bedeutet natürlich, dass du das zweimal machen musst, einmal für Bob und einmal für Alice.

Beispielcode in python2:

from cryptography.hazmat.backends import default_backend 
from cryptography.hazmat.primitives.asymmetric import dh 

parameters = dh.generate_parameters(generator=2, key_size=512, backend=default_backend()) 

a_private_key = parameters.generate_private_key() 
a_peer_public_key = a_private_key.public_key() 

b_private_key = parameters.generate_private_key() 
b_peer_public_key = b_private_key.public_key() 

a_shared_key = a_private_key.exchange(b_peer_public_key) 
b_shared_key = b_private_key.exchange(a_peer_public_key) 

print 'a_secret: '+a_shared_key 
print 'b_secret: '+b_shared_key 
Verwandte Themen