Dodatek do krzywych eliptycznych
Zastrzeżenie: To nie oddaje sprawiedliwości w bogatym temacie krzywych eliptycznych. Jest bardzo uproszczone. Ponieważ krzywe eliptyczne zyskały ostatnio dużą uwagę mediów w kontekście szyfrowania, chciałem dać trochę wglądu, jak faktycznie działa „obliczanie” krzywej eliptycznej.
Wprowadzenie
Krzywe eliptyczne to zbiory punktów (x,y)
w płaszczyźnie formy y^2 = x^3+Ax+B
. (Dodatkowo, 4A^3+27B^2 ≠ 0
aby uniknąć nieprzyjemnych osobliwości.) Możesz rozważyć te krzywe w dowolnym polu. Jeśli użyjesz pola liczb rzeczywistych, krzywe mogą być wizualizowane i wyglądają tak:
Cechą szczególną tych krzywych jest to, że mają one wbudowaną operację arytmetyczną, która jest analogiem dodawania. Możesz dodawać i odejmować punkty, a ta operacja jest zarówno asocjacyjna, jak i przemienna (grupa abelowa).
Jak działa dodawanie?
Uwaga: dodawanie punktów na krzywych eliptycznych nie jest intuicyjne. Ten rodzaj dodatku jest zdefiniowany tak, jak jest, ponieważ ma pewne miłe właściwości. To dziwne, ale działa.
Ponieważ krzywe eliptyczne tworzą grupę, istnieje addytywna tożsamość, która jest równoważna 0. Oznacza to, że dodanie 0
do dowolnego punktu nie zmieni wyniku. Ta addytywna tożsamość jest „punktem” w nieskończoności. Wszystkie linie na płaszczyźnie zawierają ten punkt w nieskończoności, więc dodanie go nie ma znaczenia.
Powiedzmy, że każda linia przecina krzywą w trzech punktach, które mogą być 0
, i że suma tych trzech punktów wynosi 0
. Mając to na uwadze, spójrz na ten obraz.
Naturalne pytanie brzmi: co to jest P+Q
? Cóż, jeśli P+Q+R = 0
, to P+Q = -R
(alternatywnie napisane jako R'
). Gdzie jest -R
? Jest gdzie R + (-R) = 0
, co jest po drugiej stronie od osi x R
tak, że linia przez nich jest pionowa, przecinających się tylko R
, -R
i 0
. Możesz to zobaczyć w pierwszej części tego obrazu:
Inną rzeczą, którą można zobaczyć na tych obrazach, jest to, że suma samego punktu oznacza, że linia jest styczna do krzywej.
Jak znaleźć przecięcia linii i krzywych eliptycznych
W przypadku dwóch różnych punktów
Zasadniczo istnieje dokładnie jedna linia przechodząca przez dwa punkty P=(x0,y0), Q=(x1,y1)
. Zakładając, że nie jest on pionowy, a dwa punkty są różne, możemy to zapisać jako y = m*x+q
. Kiedy chcemy znaleźć punkty przecięcia z krzywą eliptyczną, możemy po prostu napisać
0 = x^3+Ax+B-y^2 = x^3+Ax+B-(m*x+q)^2
który jest wielomianem trzeciego stopnia. Zasadniczo nie są one tak łatwe do rozwiązania, ale znamy już dwa zera tego wielomianu: Dwie x
współrzędne x0, x1
dwóch punktów, które chcemy dodać!
W ten sposób możemy się czynnikiem czynników liniowych (x-x0)
i (x-x1)
i pozostają z trzecim współczynnikiem liniowym, którego korzeniem jest x
-coordinate punktu R
. ( -R
również z powodu symetrii. Zauważ, że jeśli R = (x2,y2)
tak -R = (x2,-y2)
. Pochodzi -
z grupy; nie jest to minus wektorowy).
W przypadku dodania jednego punktu P
do siebie
W tym przypadku musimy obliczyć styczną krzywej na P=(x0,y0)
. Możemy pisać bezpośrednio m
i q
pod względem A,B,x0,y0
:
3*x0^2 + A
m = ------------
2*y0
-x0^3 + A*x0 + 2*B
q = --------------------
2*y0
Otrzymujemy równanie y = m*x+q
i możemy postępować tak samo, jak w powyższym akapicie.
Kompletne drzewo spraw
Oto pełna lista sposobów obsługi wszystkich tych przypadków:
Niech P,Q
będą punkty na krzywej eliptycznej (w tym punkt „nieskończoności” 0
)
- Jeśli
P = 0
lubQ = 0
, toP+Q = Q
lubP+Q = P
, odpowiednio - Inny
P ≠ 0
iQ ≠ 0
tak niechP = (x0,y0)
iQ = (x1,y1)
:- Jeśli
P = -Q
(to znaczyx0 = x1
iy0 = -y1
) toP+Q = 0
- Jeszcze
P ≠ -Q
- Jeśli
x0 = x1
tak, mamyP=Q
i obliczamy styczną (patrz sekcja powyżej), aby uzyskaćR
. NastępnieP+Q = P+P = 2P = -R
- W przeciwnym razie możemy skonstruować linię formularza
y = m*x+y
przez te dwa punkty (patrz sekcja powyżej) w celu obliczeniaR
. NastępnieP+Q=-R
- Jeśli
- Jeśli
Pola skończone
W przypadku tego wyzwania weźmiemy pod uwagę tylko te pola wielkości, w p
których p
jest liczba pierwsza (i ze względu na pewne szczegóły p ≠ 2, p ≠ 3
). Ma to tę zaletę, że można po prostu obliczyć mod p
. Arytmetyka w innych dziedzinach jest znacznie bardziej skomplikowana.
To w tym przykładzie ustaliliśmy p = 5
i wszystkie równości tutaj są przystające mod 5
.
2+4 ≡ 6 ≡ 1
2-4 ≡ -2 ≡ 3
2*4 ≡ 8 ≡ 3
2/4 ≡ 2*4 ≡ 3 because 4*4 ≡ 16 ≡ 1, therefore 1/4 ≡ 4
Wyzwanie
Biorąc pod uwagę parametry A,B
krzywej eliptycznej, charakterystykę pola głównego p
i dwa punkty P,Q
na krzywej eliptycznej, zwracają swoją sumę.
- Możesz założyć, że parametry
A,B
faktycznie opisują krzywą eliptyczną, co oznacza, że4A^3+27B^2 ≠ 0
. - Możesz założyć, że w
P,Q
rzeczywistości są to punkty na krzywej eliptycznej lub0
punkt - point. - Możesz założyć, że
p ≠ 2,3
jest to liczba pierwsza.
Przypadki testowe
Zrobiłem (niezbyt elegancką) implementację w MATLAB / Octave, którą możesz wykorzystać do własnych przypadków testowych: ideone.com Mam nadzieję, że jest poprawna. Przynajmniej odtworzyło kilka obliczeń, które wykonałem ręcznie.
Zwróć uwagę na trywialne przypadki testowe, które działają dla wszystkich krzywych, które rozważamy tutaj:
Dodawanie zera: P+0 = P
Dodawanie odwrotności:(x,y) + (x,-y) = 0
Dla p = 7, A = 0, B = 5
dwóch punktów P = (3,2)
i Q = (6,2)
są na krzywej eliptycznej. Następnie następujące blokady:
2*Q = Q+Q = P
2*P = P+P = (5,2)
3*P = P+P+P = (5,2)+P = (6,5)
4*P = P+P+P+P = (5,2)+(5,2) = (6,5)+(5,2) = Q
Wszystkie punkty na krzywej eliptycznej są (3,2),(5,2),(6,2),(3,5),(5,5),(6,5),0
Bo p = 13, A = 3, B = 8
dostaniemy
(1,8)+(9,7) = (2,10)
(2,3)+(12,11) = (9,7)
2*(9,6) = (9,7)
3*(9,6) = 0
Za p = 17, A = 2, B = 2
i P=(5,1)
dostajemy
2*P = (6,3)
3*P = (10,6)
4*P = (3,1)
5*P = (9,16)
6*P = (16,13)
7*P = (0,6)
8*P = (13,7)
9*P = (7,6)
10*P = (7,11)
Jeśli jesteś naprawdę ambitny, weź
p = 1550031797834347859248576414813139942411
A = 1009296542191532464076260367525816293976
x0 = 1317953763239595888465524145589872695690
y0 = 434829348619031278460656303481105428081
x1 = 1247392211317907151303247721489640699240
y1 = 207534858442090452193999571026315995117
i spróbuj znaleźć liczbę naturalną n
taką, że n*(x0,y0) = (x1,y1)
. Więcej informacji tutaj.
dodatek
Przede wszystkim wielkie DZIĘKUJEMY @ @ El'endiaStarman za przejrzenie i edycję mojego szkicu!
Dlaczego krzywe eliptyczne?
Cóż, może się to wydawać jakimś arbitralnym równaniem, ale tak nie jest, jest dość ogólne: Ogólnie rzecz biorąc, rozważamy te geometryczne „kształty” w płaszczyźnie rzutowej (stąd pochodzi „nieskończoność”. Tam uważamy wszystkie za jednorodne wielomiany trzeciego stopnia (te o niższym lub wyższym stopniu byłyby zbyt trudne lub po prostu trywialne do zbadania). Po zastosowaniu pewnych ograniczeń w celu uzyskania pożądanych dobrych właściwości i po dehomogenizacji tych wielomianów (rzutowanie na jedną z trzech płaszczyzn afinicznych ) otrzymujemy równania takie jaky^2+a*x*y+b*y = x^3+c*x^2+d*x+e
Jest to krzywa eliptyczna w długiej formie Weierstrass. Są to zasadniczo te same krzywe, które rozważaliśmy, ale tylko nieco wypaczone. Za pomocą liniowej transformacji współrzędnych można łatwo wykonać z tego krótkie równanie Weierstrasa. przykład , który wciąż posiada wszystkie interesujące właściwości.
Dlaczego wykluczyliśmy p=2,3
?
Ma to związek z faktem, że w przypadku krótkiej formy Weierstrass potrzebujemy ograniczenia 4A^3+27B^2 ≠ 0
, aby uniknąć osobliwości (więcej na ten temat poniżej). Na polu charakterystycznym 2 mamy, 4 = 0
a na polu charakterystycznym 3 mamy 27 = 0
, co uniemożliwia uzyskanie krzywych w postaci krótkiej Weierstrass dla tego rodzaju pól.
Jakie są osobliwości?
Jeśli równanie się 4A^3+27B^2=0
zachowuje, mamy osobliwości, takie jak: Jak widać w tych punktach, nie można znaleźć pochodnej, a zatem nie ma stycznej, która „zabija” operację. Możesz spojrzeć na równania y^2 = x^3
luby^2 = x^3-3*x+2
Dlaczego w ogóle nazywane są krzywymi eliptycznymi ?
Powodem jest to, że równania tego kształtu wyskakują w całkach eliptycznych, np. Które otrzymujesz, gdy chcesz obliczyć np. Długość łuku elipsy. Krótki pokaz slajdów na temat pochodzenia nazwy.
Co mają wspólnego z kryptografią?
Istnieją sposoby na nP = P+P+...+P
bardzo wydajne obliczenia . Można to wykorzystać na przykład przy wymianie kluczy Diffie Hellman . Modułową arytmetykę można zastąpić dodatkiem do podgrup skrętnych, są to tylko punkty na krzywej, które mają skończony porządek. (Oznacza to, że mP = 0
dla niektórych m
jest to po prostu obliczenie mod m
).
y^2 = x^3 + x
jest to ważna krzywa eliptyczna i(0,0) ≠ 0
punkt na krzywej!)B = 0
i zastanawiałem się, jak0
by to działało ... a potem zapomniałem o tym. Myślę, że założyłem, że nieB
może być 0 w pewnym momencie późnej nocy. Czy masz jakieś sugestie na temat tego, co powinien w to wnieść wkład? Może jeśliB = 0
, to zdefiniuj0 = (-1, -1)
? Z przyjemnością dostosowuję mój kod, aby go obsługiwać, po prostu myślę, że byłoby miło, gdyby został ustandaryzowany również dla innych zgłoszeń ...[0]
(tylko jedna współrzędna) jest punktem nieskończoności lub czymkolwiek podobnym!nP
? Czy mógłbyś wskazać mi jakieś zasoby na ten temat, aby wzbudzić myśli? Trudno mi znaleźć cokolwiek w Google. Dzięki!Python 3,
193191 bajtówRozwiązanie oparte na odpowiedzi Pyth firmy Rhyzomatic i ich logice w języku Python. W szczególności. Podobało mi się jak znaleźli trzeci korzeń Monic sześcienny wielomianu
x^3 + bx^2 + cx + d
gdy masz dwa korzeniex_1
ix_2
zauważając, żeb == x_1 + x_2 + x_3
i odpowiednio odjęcie. Planuję dodać wyjaśnienie, pograć w golfa i być może przełożyć je na Ruby, jeśli Ruby okaże się krótsza.Ungolfing:
źródło