Elliptische Kurve und Diffie-Hellman-Schlüsseltausch

Neue Frage »

Malcang Auf diesen Beitrag antworten »
Elliptische Kurve und Diffie-Hellman-Schlüsseltausch
Hallo nochmal smile

ich habe gerade folgendes vor mir:
[attach]58218[/attach]

An sich kann ich die Aufgabe, aber ich frage mich zwei Sachen.
1) Muss ich zum Bestimmen der Elemente wirklich die Möglichkeiten durchrechnen, also Quadrate suchen und vergleichen? Oder gibt es da Tricks?

2)
zum Schlüsseltausch: Hier hätte ich jetzt gesagt, Alice berechnet .
Und Bob berechnet , da .

Kann mir das jemand bestätigen oder widerlegen?
URL Auf diesen Beitrag antworten »
RE: Elliptische Kurve und Diffie-Hellman-Schlüsseltausch
Was ist denn verwirrt
Malcang Auf diesen Beitrag antworten »
RE: Elliptische Kurve und Diffie-Hellman-Schlüsseltausch
Zitat:
Original von URL
Was ist denn verwirrt


Das ist die elliptische Kurve mit dem unendlich fernen Punkt. Also nicht affin.
IfindU Auf diesen Beitrag antworten »
RE: Elliptische Kurve und Diffie-Hellman-Schlüsseltausch
Ich schätze dabei ist , oder sehr ähnlich.
Elvis Auf diesen Beitrag antworten »

@Malcang
Außer fleißig rechnen fällt mir da auch nichts ein. Die 8 Punkte habe ich per Hand gerechnet, die Vielfachen von P zu berechnen habe ich ChatGPT überlassen. 8P=(4,9) gefällt mir besser als (4,-2). Damit kann ich deine Ergebnisse bis dahin bestätigen.
Nachtrag: Die Punkte und ihre Vielfachen konnte ChatGPT problemlos berechnen. Als er(?) dann meinte, P habe die Ordnung 8, hat er nach einer kurzen Diskussion eingesehen, dass Ordnung 9 besser ist.
HAL 9000 Auf diesen Beitrag antworten »

Hab mal ein kleines Python-Progrämmchen geschrieben, was diese "elliptische Addition" in ein wenig unterstützt:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
def addEllipticCurve(u,v,a,p):
    '''calculates sum of points u and v of elliptic curve y^2=x^3+ax+b mod p'''
    wx,wy = 0,0
    calc = False
    if u == (0,0):
        return v
    elif v == (0,0):
        return u
    elif u == v:
        s = (3*u[0]*u[0]+a) * pow(2*u[1],-1,p)
        calc = True
    elif u[0] != v[0]:
        s = (u[1]-v[1]) * pow(u[0]-v[0],-1,p)
        calc = True
    if calc:
        wx = (s*s-u[0]-v[0]) % p
        wy = (s*(u[0]-wx)-u[1]) % p
    return wx,wy

if __name__ == '__main__':
    u = (4,2)
    u_pot = (0,0)
    for i in range(1,10):
        u_pot = addEllipticCurve(u_pot,u,4,11)
        print(f"{i} : ({u_pot[0]},{u_pot[1]})")
Ergibt folgenden Output:

1 : (4,2)
2 : (7,3)
3 : (5,5)
4 : (0,10)
5 : (0,1)
6 : (5,6)
7 : (7,8)
8 : (4,9)
9 : (0,0)

In diesem Skript steht (0,0) nicht für den Nullpunkt, sondern für das neutrale Element dieser Addition.
 
 
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »