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.

  1. P1 und P2 sind beide unendlich: P3=infinite.
  2. P1 ist unendlich: P3=P2.
  3. P2 ist unendlich: P3=P1.
  4. P1 und P2 haben die gleiche x-Koordinate, aber verschiedenen y-Koordinaten oder beide y-Koordinaten gleich 0: P3=infinite.
  5. P1 und P2 verschiedenen x-Koordinate: Addition formula.
  6. 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.
InformationsquelleAutor Allopopo | 2011-12-05
Schreibe einen Kommentar