Dublarea punctelor (link Wiki) necesită Z^4
și atunci când este utilizat cu algoritmul de dublare și adăugare (necesar pentru calcularea punctelor publice, ECDH și semnături bazate pe EC) folosind $Z=1$ simplifică calculul Z^4
altfel poate fi nevoie de 3 dublari. Metoda de dublare și adăugare în care res
nu este fix pentru a economisi timp. Dublați și adăugați Wikipedia versiune;
let bits = bit_representation(s) # vectorul de biți (de la MSB la LSB) reprezentând s
fie res = O # punct la infinit
pentru bit in bit:
res = res + res # dublu
dacă bit == 1:
res = res + P # adaugă
i = i - 1
returnare res
Acesta este începutul lungii povești. The „M-fold dublu” (dublare repetată) calculează $[2^m]P$ si doar calculeaza Z^4
o singura data. Când ai nevoie $[k]P$, poate fi necesar să reprezentați $k$ în formă binară, apoi utilizați dublarea m-fold atunci când este necesar. Pentru a beneficia de acest lucru, trebuie să calculați costul înainte de a decide să utilizați m-fold double sau nu.
Răspunsul nu este ușor și complet, din moment ce Aceasta cere Z1=Z2
cu 5M + 2S
pentru plus versiunea Wiki are 12M + 4S
cost. The 5M + 2S
are încă Z1
înmulţire şi dacă Z1=1
care are cost zero.
Într-o propoziție scurtă, în general, Z1=1
simplifică ecuațiile.
De cand $(X_1:Y_1:Z_1)$ reprezintă $(Z/Z^2,Y/Z^3)$ și $(X_1:Y_1:Z_1)$ este o relaţie de echivalare care este $$(X_1:Y_1:Z_1) \sim (\lambda X_1:\lambda Y_1:\lambda Z_1)$$ se poate converti simplu $Z_1 =1$ cu $$(X_1/Z_1:Y_1/Z_1:1)$$
Ține minte că 1/Z1
nu este diviziune, ci invers Z1
pe domeniul definitoriu.
The Z1
pe de altă parte, nu rămâne acolo cu Z1=1
sub operațiuni. Pentru a beneficia de aceasta, trebuie să găsiți inversul și să executați două înmulțiri. Găsirea inversă, pe de altă parte, este ceea ce nu ne dorim, deoarece este costisitoare.
Deci, cel puțin există un beneficiu la începutul înmulțirii scalare.