So berechnen Sie den Punkt neben der Verwendung von Jacobi-Koordinaten-system über elliptischen Kurven
Schreibe ich ein kleines Projekt von elliptic curve cryptography, und das Programm funktioniert gut, wenn ich affinen Koordinatensystem, was bedeutet, dass jeder Punkt repräsentiert wird durch 2 Koordinaten (x',y').
Nun bin ich versucht zu ersetzen affinen Koordinatensystems durch die Jacobi-Koordinaten-system, in dem jeder Punkt ist vertreten durch 3 Koordinaten (x,y,z), x' = x/z2 und y' = y/z3.
Ich würde gerne wissen, wie Transformation affine Koordinaten Jacobi-Koordinaten**. In einigen tutorials, die Menschen verwendet die Formel: (x,y) = (x,y,1)
was bedeutet die z-Koordinate ist immer auf eins gesetzt. Aber ich bin mir nicht sicher, ob es richtig ist.
Dann für die Punkte, die Ergänzungen über elliptischen Kurven zu berechnen P ((x1,y1,z1) + F(x2,y2,z2) = R(x3,y3,z3). Ich habe die folgenden Formeln in meinem Programm:
u1 = x1.z2²
u2 = x2.z1²
s1 = y1.z2³
s2 = y2.z1³
h = u2 - u1
r = s2 - s1
x3 = r² - h³ - 2.u1.h²
Y3 = r. (U1.h² - x3) - s1.h³
z3 = z1.z2.h
Aber wenn ich Teste mein Programm bekomme ich einige negative Koordinaten, z.B. (-2854978200,-5344897546224,578). Und wenn ich versuche zu konvertieren das Ergebnis zurück an affine Koordinatensystem mit der Formel (x'=x/z2,y'=y/z3), ich (-8545, -27679), eigentlich die x-Koordinate ist -8545.689.... Die Jacobi-x-Koordinate ist nicht teilbar durch z2.
Was soll ich tun, wenn die Koordinaten sind nicht Integer? Und wenn Sie negativ ist? Ich habe versucht, den MOD mit der Größe des Feldes in meine Kurve, aber das Ergebnis ist nicht korrekt.
So dass die Verwendung von Jacobi-Koordinaten (x,y,1)
ist richtig, aber nicht einzigartig. Alle Punkte befriedigend (a^2.x,a^3.y,a)
gleichwertig sind. Und in meinem Programm die Kurve, die definiert ist in einem erstklassigen Feld, also wenn ich berechnen u1, u2, s1, s2 ...
sollte ich anwenden MOD p für jede variable?
Und für die Umwandlung der finalen Ergebnis zurück, um affine Koordinaten, z.B. Die x-Koordinate, in der Tat ist es nicht eine division, es ist eine modulare inverse? Zum Beispiel, meine Kurve definiert ist, in einer endlichen prime Feld p=11
, und ich habe einen Punkt mit Jacobi-Koordinaten (15,3,2)
zu verwandeln Jacobi-x-Koordinate zu affine x-Koordinate, habe ich zu berechnen 2^2 = 4 => x = 4^-1 mod p => x = 3
, und 15.3 mod p = 1
, also die affine x-Koordinate 1 ist, ist das richtig?
Dem Ziel der Jacobi-Koordinaten zu vermeiden, die division während der Zugabe. Aber wie Thomas Pornin sagte, wenn wir berechnen P1 + P2 = P3
gibt es einige spezielle Fälle zu behandeln.
- P1 und P2 sind beide unendlich:
P3=infinite
. - P1 ist unendlich:
P3=P2
. - P2 ist unendlich:
P3=P1
. - P1 und P2 haben die gleiche x-Koordinate, aber verschiedenen y-Koordinaten oder beide y-Koordinaten gleich 0:
P3=infinite
. - P1 und P2 verschiedenen x-Koordinate:
Addition formula
. - P1 und P2 haben den gleichen Koordinaten:
Doubling formula
.
Und hier die Prototypen meiner C-Funktionen:
jac_addition(jacobian *, point *, jacobian *);
jac_doubling(jacobian *, jacobian *);
point
ist eine Struktur für einen definierten Punkt im affinen Koordinatensystem, und jacobian
für die Jacobi-system.
Das problem ist, wenn ich mit jenen speziellen Fällen, vor allem die 4. ich habe noch konvertieren beide Punkte zurück, um affine Koordinaten, oder kann ich nicht vergleichen, deren Koordinaten, was bedeutet, dass ich immer noch zur Berechnung der division.
- Nur ein Hinweis: Wenn Sie Fragen haben, ein bisschen mehr kryptografischer Natur als diese, Sie sind herzlich willkommen auf unserer Schwester-site Kryptographie-Stack Exchange.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die jacobische form der projektiven Koordinaten (wie jeder anderen form) ist jedoch nicht einzigartig für jeden Wert von
Z
(andere als 0), Sie bekommen andereX
undY
ohne den eigentlichen Punkt zu ändern.Also, wenn Sie einen Punkt in affine Koordinaten
(X', Y')
, das paar(X', Y', 1)
ist eine projektiv-Vertreter dieser Punkt, sowie(4·X', 8·Y', 2)
,(9·X', 27·Y', 3)
usw. Der mit 1 ist die am einfachsten zu erstellen, also in der Regel würden Sie diese benutzen.Zwar kann man definieren (und zu studieren) elliptischer Kurven über einem Feld, und viele Mathematiker, die Studie Kurven über den komplexen zahlen, die für kryptografische Anwendungen, die Koordinaten sind Elemente einer endlichen Feld. Im einfachsten Fall, wir haben eine prime-Bereich (D. H. ganze zahlen modulo einer Primzahl), und Sie haben zu tun, addition, Subtraktion, Multiplikation und division (und wahrscheinlich Potenzierung) in diesem Bereich.
Solange
Z
ist nicht null, Sie sollten in der Lage sein zu teilen, indemZ²
- dies entspricht der Multiplikation mit der inversen von Z2, und ein solches element existiert, und berechnet werden kann effizient mit Hilfe des erweiterten euklidischen Algorithmus.Dies ist am einfachsten, wenn Sie Ihre Programmiersprache kommt mit einigen großen Zahl Bibliothek, die die notwendigen Operationen vordefiniert, wie Java
BigInteger
Klasse (mit seinenmod
,modPow
undmodInverse
Methoden).Bereich in Frage (D. H. der E-Modul) ist Teil der definition der elliptischen Kurve, und die Operationen über ein Feld geben völlig unterschiedliche Ergebnisse als Operationen anderen. So stellen Sie sicher, dass Sie mit dem rechten Feld.
a/b mod p
statt1/b mod p
, die dann nicht brauchen die zusätzliche Multiplikation.)Beim Umgang mit elliptischen Kurven, die Koordinaten sind in einem Feld. Für die Kryptografie, das ist ein finite Feld; in Ihrem Fall, die "ganzen zahlen modulo einer Primzahl p". Alle Operationen gemeint sind, in das Feld, das heißt, Sie sollten tun, jede einzelne addition, Multiplikation oder inversion modulo p.
Wenn dabei neben der Punkte, es gibt ein paar spezielle Fälle, die Sie behandeln müssen, speziell:
Gibt es einen speziellen "Punkt bei unendlich", die nicht über Koordinaten x und y. Es ist die "null" der Kurve hinaus. In einem generischen Punkt neben der routine, müssen Sie eine Möglichkeit zum codieren eines "point at infinity" und lassen es speziell.
Beim hinzufügen (x,y) zu (x',y'), kann es passieren, dass x = x'. In diesem Fall, entweder y =y', und dann ist es eine Punkt Verdoppelung hat seine spezifische Formel (wenn Sie das anwenden der generischen Formel, die Sie bis Ende der Division durch null, was nicht funktionieren wird); oder, y = -y', in welchem Fall die Summe der "Punkt im unendlichen".
Damit die generische Formel angewendet werden Sie nur, wenn Sie behandelt den speziellen Fall. In aller Allgemeinheit, in einer Kurve y2 = x3+a·x+b, die Summe von (x1,y1) und (x2,y2) ist (x3,y3), so dass x3 = f2-x1-x2 und y3 = f·(x1-x3)-y1, wo f = (y2-y1)/(x2-x1). Dies impliziert computing-eine division und zwei Multiplikationen, und einige Subtraktionen (alle Operationen geschieht auf ganze zahlen modulo p, wie oben erklärt).
Division und inversion modulo p sind relativ teuer (eine modulare division hat in der Regel die gleichen Kosten wie über 80 Multiplikationen), so dass in einigen Situationen, die wir verwenden projektiven oder Jacobi-Koordinaten-Systeme. Die Jacobi-Koordinaten sind über die Vertretung von einem Punkt drei Werte (X,Y,Z) (alle im endlichen Feld, d.h. die ganzen zahlen modulo p), so dass x = X/Z2 und y = Y/Z3.
Jeder Punkt (x,y) hat viele mögliche Darstellungen als (X,Y,Z). Konvertierung zu Jacobi-Koordinaten ist einfach durch die Einstellung X = x, Y = y und Z = 1: (x,y,1) ist ein perfekt gültiges Jacobi-Darstellung der (x,y) Punkt. Konvertierung von Jacobi-Koordinaten rechnerisch schwieriger: Sie brauchen, um eine modulare inversion, und ein paar Multiplikationen (Sie berechnen U = 1/Z, dann x = X·U2 und y = Y·U3).
Mit Jacobi-Koordinaten der beiden Punkte erfolgt in einem Dutzend Feld-Multiplikationen, und keine Teilung. Sie erhalten nur eine Jacobi-Darstellung der Ergebnisse, so dass Sie noch zu tun haben, eine modulare inversion oder division irgendwann; jedoch (und das ist der Grund, warum Sie sich die Mühe machen Verwendung von Jacobi-Koordinaten), dass die Unterteilung mutualized. Wenn Sie das tun hundert oder so aufeinander folgenden Punkt Ergänzungen (wie es typisch in einem kryptographischen Kontext, wenn die "Multiplikation" eines Punktes mit einer ganzen Zahl), dann können Sie die Jacobi-Darstellungen im gesamten, und eine einzelne Konvertierung zurück zu kartesischen Koordinaten (x,y) am Ende. Also anstatt 200 Multiplikationen und 100 Divisionen, die Sie tun, die 1000 Multiplikationen und 1 Invertierung; da eine Umkehrung Kosten das gleiche wie 80 Multiplikationen, der Gewinn ist bemerkenswert.
Versuchen zu nützen, sich selbst zu dieses Buch; jeden guten college-Bibliothek haben sollte. Sie erklärt alles sehr deutlich.
Hier ist ein Beispiel in python:
So können Sie die Summe mit: