Curve25519 și Ed25519
A curba Montgomery definite pe un câmp $K$ este definit ca; $$M_{A,B}: Bv^2 = u^3 + Au^2 + u$$
cu siguranta $A,B \în K$ si cu $B(A^2-4) \neq 0$.
Curba25519 folosește prim $q = 2^{255} â 19$ pentru a forma câmpul finit $\mathbb{F}_q$ și mai întâi definit pentru ECDH și ulterior denumit X25519. Ecuația Montgomery este $$v^2 = u^3+486662 u^2+u$$ cu $486664$ este un pătrat în $\mathbb{Z}_p$, adică este un reziduu cuadratic (QR). $u = 9$ a ales ca punct de bază. Forma Weierstrass (o nevoie pentru SageMath)
$$y^2 = x^3 + A x + B $$
Această curbă âCurve25519â este echivalent biraţional peste $\mathbb{Z}_p$ la curba Edwards Ed25519 $$x^2 + y^2 = 1 + (121665/121666)x^2y^2$$ cu;
$$x = \frac{\sqrt{486664}u}{v}, \quad y = \frac{(u â 1)}{(u + 1)}$$
Reversul este operațiunile este;
$$u = \frac{(y + 1)}{(1 - y)}, \quad v = \frac{\sqrt{486664}u}{x}$$
Forma Edward are o curbă izomorfă
$$-x^2 + y^2 = 1 - (121665/121666)x^2y^2$$ de cand $-1$ este QR într-un $\mathbb Z_p$
Întrebări
montgomeryX = (edwardsY + 1)*invers(1 - edwardsY) mod p
este posibil să transportați un punct de curbă Edwards (ed25519 cheie pubiană) la curba Montgomery.
Da, așa cum este menționat mai sus, de la Montgomery la Edwards $$u = \frac{(y + 1)}{(1 - y)}$$
Are efecte secundare dacă cheia publică ed25519 nu este validă, de exemplu, în cazul unui subgrup mic sau al unui atac de curbă invalid?
Cheia Edward25519 poate fi convertită în Curve25519 și dacă deja cheia secretă este construită cu responsabilitatea legitimă a utilizatorului
- Se presupune că utilizatorii legitimi generează chei secrete aleatorii uniforme independente. Un utilizator poate, de exemplu, genera 32 de octeți uniformi aleatori, șterge biții 0, 1, 2 ai primului octet, șterge bitul 7 al ultimului octet și setează bitul 6 al ultimului octet.
Într-o definiție setată, vrem cheile secrete ale X25519 ca
$$\{n: n \în 2^{254} +8\{0,1,2,\dots,2^{251}-1 \}\},$$ cu alte cuvinte, selectați un număr aleator uniform între $[0,2^{251}-1]$ inmultiti-l cu $8$ decât adaugă $2^{254}$.
Ordinea punctului de bază este (little-endian);
edd3f55c1a631258d69cf7a2def9de14000000000000000000000000000000010
Poiana $0,1,2$ se asigură că
Mai jos este valoarea maximă (little-endian) și putem vedea că acolo două chei private pot avea aceeași cheie publică, totuși, acesta este un eveniment neglijabil, dar de găsit.
0x8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7
atunci nu este nevoie, deoarece echivalența birațională va produce puncte care nu au o ordine mică dacă utilizatorul legitim a folosit deja regulile.
Sub echivalența birațională a Curve25519 și Edwards25519, fiecare cheie publică X25519 corespunde cu două chei publice Ed25519 posibile). X25519 utilizează numai $x$ coordonată (unde vine numele) și Ed25519 folosește coordonatele punctelor. Când avem doar $x$ coordonata unui punct, există două puncte posibile $(x,y)$ și $(x,-y)$ cu exceptia $y=0$.
Și dacă da, care ar fi cea mai bună soluție pentru a gestiona asta corect?
Nu există pericol de Validarea punctelor.
Câteva în plus
Folosind aceeași cheie
Nu pot spune direct că este nesigur, cu toate acestea, regula noastră generală este să nu folosim aceeași cheie în scopuri diferite. Până când cineva dovedește că nu există niciun pericol să te ții departe de a folosi aceeași cheie în scopuri diferite.
Ar putea fi mai bine să aveți o cheie uniformă aleatorie de 256 de biți și să obțineți două chei cu HKDF-expand atât pentru X25519, cât și pentru Ed25519.
X25519
Amintiți-vă că cheia publică este fixă și când executați un DHKE înseamnă că aveți DHKE static-static. Acest lucru nu are secret. Cu atât mai bine este ceea ce face protocolul Signal; clichet dublu și puteți semna noua cheie publică cu Ed25519.