Ich habe Punktaddition in ein C++-Programm implementiert, das ich geschrieben habe, aber ich sehe nicht, wie das richtig gemacht werden kann. Wenn ich das tue slope = (y1 - y2)/(x1 - x2)
, bekomme ich eine verdammte Dezimalzahl, die nicht die richtigen Punkte erzeugt, wenn sie auf die anderen Teile der Gleichung angewendet wird, da sie ihre Bruchqualitäten nicht beibehält. Hat jemand eine Idee, wie man das überwindet?
Point Addition wird durch die folgende Gleichung definiert:
slope = (y1 - y2) / (x1 - x2)
xsum = slope ^ 2 - (x1 + x2)
ysum = slope * (x1 - xsum) - y1
Wobei Privatadresse x02 jeweils mit x,y Koordinaten:
89565891926547004231252920425935692360644145829622209833684329913297188986597
12158399299693830322967808612713398636155367887041628176798871954788371653930
mit dem Punkt Zusatz der Privatadresse x01 mit x,y-Koordinaten jeweils:
55066263022277343669578718895168534326250603453777594175500187360389116729240
32670510020758816978083085130507043184471273380659243275938904335757337482424
Angewandt auf die obige Gleichung ergibt sich das Ergebnis der Privatadresse x03 mit den entsprechenden x-, y-Koordinaten:
112711660439710606056748659173929673102114977341539408544630613555209775888121
25583027980570883691656905877401976406448868254816295069919888960541586679410
http://en.wikipedia.org/wiki/Elliptic_curve_point_multiplication
BEARBEITEN:
Ich habe dieses C++-Programm zusammengestellt und auf jede erdenkliche Weise modifiziert (%p herumbewegen, zu oft wiederholen, Gleichungen auflösen und dergleichen). Ich kann es nicht dazu bringen, die richtigen Ergebnisse zu erzielen. Hat jemand Lust, es auszuprobieren und zu sehen, was Sie finden können, bitte?
Die magische Phrase auf dieser Seite befindet sich in einem endlichen Feld . Hier ist der endliche Körper die ganzen Zahlen mod p, wobei p die Zahl 2 256 - 2 32 - 2 9 - 2 8 - 2 7 - 2 6 - 2 4 - 1 ist (siehe hier ). Die gesamte Arithmetik in Ihren Gleichungen ist also keine gewöhnliche Arithmetik mit ganzen Zahlen oder reellen Zahlen; es muss mod p getan werden. Siehe http://en.wikipedia.org/wiki/Modular_arithmetic . Für Addition, Subtraktion und Multiplikation können Sie ganz normale Ganzzahlarithmetik verwenden und am Ende den Rest mod p berechnen. Für die Division benötigen Sie so etwas wie den erweiterten euklidischen Algorithmus. Natürlich müssen Sie auch Arithmetik mit beliebiger Genauigkeit verwenden , wenn Sie dies nicht bereits tun, da Zahlen dieser Größe viel zu groß für Standard-C++-Typen wie long int
und sind double
.
Nate Eldredge
Mine
Nate Eldredge
Willem Hengeveld
Willem Hengeveld
Willem Hengeveld
Willem Hengeveld
Mine
Willem Hengeveld
Mine
Mine
Mine
Willem Hengeveld
Mine
Mine