Elliptische Kurve verdoppeln und Implementierung in Python hinzufügen
Posted: 18 Jan 2025, 23:16
Ich versuche, den „Double and Add“-Algorithmus zu implementieren, um Punkte auf einer elliptischen Kurve schnell in Python zu multiplizieren (3, bitte).
Basierend auf dem Vorhergehenden Antwort (zu Addition und Verdoppelung),
Addition elliptischer Kurvenpunkte über einem endlichen Körper in Python
der Wikipedia Seite,
https://en.wikipedia.org/wiki/Elliptic_ ... iplication
und mein Lehrbuch (Informationssicherheit, von Mark Stamp) habe ich mir ausgedacht folgenden Code:
Was sicher ein falsches Ergebnis liefert.
Was mache ich falsch? Auch eine Neuimplementierung von Grund auf ist mehr als willkommen.
UPDATE
I Ich möchte den Punkt (3,6) mit Multiplikator_A und Multiplikator_B multiplizieren. Im Moment versuche ich nur multiplier_A(3,6).
, b und p sind die Parameter der elliptischen Kurve
Basierend auf dem Vorhergehenden Antwort (zu Addition und Verdoppelung),
Addition elliptischer Kurvenpunkte über einem endlichen Körper in Python
der Wikipedia Seite,
https://en.wikipedia.org/wiki/Elliptic_ ... iplication
und mein Lehrbuch (Informationssicherheit, von Mark Stamp) habe ich mir ausgedacht folgenden Code:
Code: Select all
def point_add(N_x, N_y, Q_x, Q_y, p):
m = (Q_y - N_y) * pow((Q_x-N_x), p-2, p)
ret_x = (m ** 2 - N_x - Q_x) % p
ret_y = (m*(N_x - ret_x) - N_y) % p
return ret_x, ret_y
def point_double(N_x, N_y, a, p):
m = (3*(N_x ** 2)+a) * pow(2*N_y, p-2, p)
ret_x = (m ** 2 - N_x - Q_x) % p
ret_y = (m*(N_x - ret_x) - N_y) % p
return ret_x, ret_y
multiplier_A = 44
multiplier_B = 57
a = 10
b = -21
p = 41
N_x = 3
N_y = 6
Q_x = 0
Q_y = 0
multiplier_A = list(bin(multiplier_A)[2:])
multiplier_B = list(bin(multiplier_B)[2:])
for x_a in multiplier_A:
if x_a == '1':
Q_x, Q_y = point_add(N_x, N_y, Q_x, Q_y, p)
N_x, N_y = point_double(N_x, N_y, a, p)
print(Q_x, Q_y)
Was mache ich falsch? Auch eine Neuimplementierung von Grund auf ist mehr als willkommen.
UPDATE
I Ich möchte den Punkt (3,6) mit Multiplikator_A und Multiplikator_B multiplizieren. Im Moment versuche ich nur multiplier_A(3,6).
Code: Select all
a