Diskussion:Diffie-Hellman-Schlüsselaustausch
Zum Archiv |
Wie wird ein Archiv angelegt? |
Implementierung mit der Programmierspreche Python
Von der @84.118.82.226: wurde der untenstehende Python-Code als Ergänzung zum Abschnitt "Elliptic Curve Diffie-Hellman (ECDH)" hinzugefügt. Ich habe ihn (vorerst) wieder entfernt und hierhin kopiert. Ich glaube nicht, dass es sinnvoll ist, hier reinen Code zu posten. Dafür gibt es z.B. GitHub. Zumindest müsste man m.E. den Code etwas besser kommentieren, damit er hier einen Mehrwert bietet. Ausserdem müsste er mit "syntaxhighlight" versehen werden. --Didia (Diskussion) 07:57, 7. Mär. 2018 (CET)
import math
# must be of the form 4k + 3 = 4(k+1) - 1
prime = 2**607 - 1
def inv(b,m):
s = 0 t = 1 a = m while b != 1: q = a/b aa = b b = a % b a = aa ss = t t = s - q*t s = ss if t < 0: t = t + m return t
def genP(x,a,b):
if (4*a*a*a + 27*b*b) % prime == 0: b = b + 1 while pow(x**3 + a*x + b, (prime - 1)/2, prime) != 1: x = x + 1 return [x % prime, pow(x**3 + a*x + b, (prime + 1)/4, prime)]
def ts(x,y,a):
return ((3*(x**2) + a) * inv(2*y, prime)) % prime
def dpoint(P,a):
x = P[0] y = P[1] s = ts(x,y,a) xr = (s**2 - 2*x) % prime yr = (-y + s * (x-xr)) % prime return [xr , yr]
def addP(P,Q,a):
if P == Q: return dpoint(P,a) x1 = P[0] x2 = Q[0] y1 = P[1] y2 = Q[1] while x1 < x2: x1 = x1 + prime while y1 < y2: y1 = y1 + prime s = ((y1-y2) * inv(x1-x2, prime)) % prime xr = s**2 - x1 - x2 yr = s * (x1-xr) - y1 return [xr % prime,yr % prime]
def mulP(P,n,a):
isFirst = True resP = P bsize = 20 while 2**bsize < n: bsize = bsize + 1 PP = resP for b in range(bsize + 1): if (n & (1 << b) != 0): if isFirst: resP = PP isFirst = False else: resP = addP(resP,PP,a) PP = dpoint(PP,a) return resP
# The parameters of the Elliptic Curve.
a=4834892389 b=34858911111111
# x-value of the starting point
x=123234354388937
# The starting point which is added many times to itself
P = genP(x,a,b)
# The public keys
privAlice = 85743857348573489891704994859049170499485904 privBob = 455457456346534563457893499994859049170499485904
# We calulate the public keys
pubkAlice = mulP(P, privAlice, a) print "Public Key from Alice \n", pubkAlice pubkBob = mulP(P, privBob, a) print "Public Key from Bob \n", pubkBob
shareBob = mulP(pubkAlice, privBob, a) shareAlice = mulP(pubkBob, privAlice, a)
print "\n\nThe shared key as calculated from Alice\n", shareAlice
print "\n\n" print "Verification: Are the shared keys equal? ", shareAlice == shareBob
DH mit vorgegebenem K?
Wenn ich das richtig verstehe, weiss man nicht, was für ein K am Ende herauskommt. Könnte man DH so verwenden, dass z.B. Alice K vorgibt und die Parameter so wählt, dass Bob ebendieses K errechnet?
Nein, dann müsste Alice ja diskrete Logarithmen berechnen können, was ja eben nicht effizient möglich ist (sein soll). --Didia (Diskussion) 12:13, 25. Aug. 2019 (CEST)
Computational-Diffie-Hellman-Problem (CDH)
Im Text steht „mit mehreren hundert Dezimalstellen“. Sind die verwendeten Zahlen nicht ausschließlich ganze Zahlen, also Zahlen gerade ohne Dezimalstellen? - Chris (Diskussion) 10:01, 22. Mär. 2019 (CET)
Das stimmt. Habs mal korrigiert. --Didia (Diskussion) 12:25, 25. Aug. 2019 (CEST)
Genearator g
Im Artikel steht: „Da die Hälfte aller Zahlen kleiner p solche Generatoren sind, gibt es genug Auswahl.“ openssl dhparam erlaubt nur die Generatoren 2, 3, und 5, was nicht nach „genug Auswahl“ klingt. (nicht signierter Beitrag von 92.211.103.145 (Diskussion) 22:01, 24. Aug. 2019 (CEST))
Gemäss dieser Seite ist bei openssl der DH Parameter g immer 2, was aber nicht heisst, dass auch andere Möglich sind. Im Gegensatz zur Primzahl p muss die Wahl ja nicht unbedingt zufällig und gross sein. --Didia (Diskussion) 12:10, 25. Aug. 2019 (CEST)
Die Anzahl Primitivwurzeln ist nicht die Hälfte, sondern genau φ ( p − 1 ) , wie beim Kapitel Mathematische Grundlagen erwähnt. (nicht signierter Beitrag von 62.202.180.91 (Diskussion) 23:11, 17. Aug. 2022 (CEST))
Das Artikelbild
... ist mehr als irreführend und gibt den Schlüsselaustausch zudem falsch wieder. Das vermischen zweier unterschiedlicher Schlüssel wie in dem Bild wird alleine nie zu einem gemeinsamen Geheimnis führen. Das Bild sollte daher entfernt werden --2003:CE:6726:7700:C8A7:931F:C9A1:A02C 11:48, 4. Apr. 2020 (CEST)
- Ich sehe das Problem nicht. Wie umseitig in Diffie-Hellman-Schlüsselaustausch#Mathematische_Funktionsweise genauer beschrieben, wählen Alice und Bob je einen geheimen Schlüssel, generieren daraus je einen öffentlichen Schlüssel und übermitteln diesen an den anderen. Sie kombinieren dann ihren eigenen geheimen Schüssel mit dem öffentlichen Schlüssel, den sie von dem anderen erhalten haben und bestimmen so das gemeinsame Geheimnis. --Count Count (Diskussion) 11:57, 4. Apr. 2020 (CEST)
Public-Key-Kryptoverfahren
Laut Artikel handelt es sich bei dem DH um ein Public-Key-Kryptoverfahren. Von mir aus können wir es als "asymmetrisches Kryptoverfahren" stehen lassen, doch laut dem (sogar verlinkten) Artikel zu asymm. Krypto. ist "Ein Public-Key-Verschlüsselungsverfahren [...] ein Verfahren, um mit einem öffentlichen Schlüssel einen Klartext in einen Geheimtext umzuwandeln, aus dem der Klartext mit einem privaten Schlüssel wiedergewonnen werden kann." Dies trifft nicht auf DH zu, da
1. weder irgendein Klartext in einen Geheimtext umgewandelt wird, geschweige denn aus einem Geheimtext in den ursprünglichen Klartext.
2. Die Privaten Schlüssel (x, y) die öffentlichen Schlüssel (g^x, g^y) nicht einmal invertieren können.
Die Bezeichnung ist daher irreführend. (nicht signierter Beitrag von 95.90.202.31 (Diskussion) 09:39, 2. Jun. 2020 (CEST))