[k] P = P + P + ... + P (k pribrojnika).
Iz formula za zbrajanje točaka vidimo da u slučaju kada je P
Inverz u konačnom polju se računa pomoću Euklidovog algoritma.
Iako je njegova kompleksnost teoretski usporediva s
kompleksnošću množenja, u praksi je množenje ipak dosta
brže od računanja inverza.
Računanje inverza u polju može se izbjeći uvođenjem
težinskih projektivnih koordinata, gdje
(X, Y, Z) odgovara
(X / Z2, Y / Z3).
Tada jednadžba eliptičke krivulje (za char
2, 3) postaje
Y2 = X3 + aXZ4 + bZ6.
Sada se kod računanja zbroja dvaju točaka uopće ne pojavljuje djeljenje. Na taj način, trošak za računanje P + Q postaje 16M, a za računanje [2]P trošak je 10M. Na primjer, koordinate točke (X2, Y2, Z2) = [2] (X, Y, Z) se mogu izračunati na sljedeći način:
m1 = 3X2 + aZ4,
m2 = 4XY2,
m3 = Y4,
X2 = (m1)2
- 2m2,
Y2 = m1(m2
- X2) - m3,
Z2 = 2YZ.
Računanje višekratnika točke na eliptičkoj krivulji, specijalni
je slučaj općeg problema potenciranja u abelovoj grupi.
Stoga se mogu primijeniti razni algoritmi koji su poznati za
taj opći problem.
Najjednostavnija (i najstarija) efikasna metoda za računanje višekratnika točaka koristi binarni zapis broja k. Zove se binarna metoda ili metoda uzastopnog kvadriranja. Na primjer, binarni zapis broja 100 je (1100100)2. Sada točku [100] P možemo izračunati kao [2]([2](P + [2]([2]([2](P + [2]P))))).
ALGORITAM: INPUT: točka P i g-bitni prirodni broj k = ![]() ![]() OUTPUT: točka Q = [k] P
|
Broj "bitnih" operacija za računanje [k] P pomoću ovog algoritma je O(log k log3 q).
Poznato je više općih poboljšanja binarne metode. Međutim,
postoji je jedno poboljšanje koje je prilično specifično za
eliptičke krivulje. Naime, za razliku od nekih drugih grupa,
kod eliptičkih krivulja inverzna operacija (oduzimanje)
ima doslovno isti trošak kao i originalna grupovna operacija
(zbrajanje). To je zbog toga što vrijedi
-(x, y) = (x, -y) za char
2, dok je
-(x, y) = (x, x + y) za char = 2.
Ova činjenica nas motivira za umjesto binarnog prikaza
broja k, koristimo tzv. SD (signed digit) prikaz
oblika
k =
sj 2j,
kj
{-1,0,1}.
Jasno je da ovakav prikaz nije jedinstven. Npr. 3 = (0 1 1) =
(1 0 -1). Stoga možemo pokušati izabrati prikaz koji će voditi
do što efikasnijeg algoritma. Reći ćemo da je SD prikaz
rijedak ili nesusjedni (non-adjacent form, NAF)
ako nema susjednih znamenaka različitih od 0, tj. ako je
sj sj+1 = 0,
za svaki j. Poznato je da svaki prirodan broj k ima
jedinstveni NAF, te da NAF ima najmanju težinu (broj
sj-tova različitih od 0), među svim
SD prikazima od k. Očekivana težina NAF-a je g/3,
za razliku od binarnog prikaza kod kojeg je očekivana težina
g/2.
c0 = 0
For j = 0 to g do
cj + 1 =(kj + kj + 1 + cj) / 2
![]()
sj = kj + cj - 2cj + 1.
Web stranica seminara | Andrej Dujella - osobna stranica |