Przemysław Dąbrowski Rafał Gliwa Janusz Szmidt Robert Wicik Wojskowy Instytut Łączności Warszawska 22A 05-150 Zegrze Południowe p.dabrowski, r.gliwa, j.szmidt, r.wicik@wil.waw.pl 26-28 września 2016 r. GENERACJA I IMPLEMENTACJA KRYPTOGRAFICZNIE SILNYCH KRZYWYCH ELIPTYCZNYCH GENERATION AND IMPLEMENTATION OF CRYPTOGRAPHICALLY STRONG ELLIPTIC CURVES Streszczenie: Krzywe eliptyczne nad ciałami skończonymi stanowia istotna część kryptografii klucza publicznego. Bezpieczeństwo kryptosytemów z krzywymi eliptycznymi oparte jest na trudności obliczeniowej problemu logarytmu dyskretnego w grupie punktów na krzywej eliptycznej. W pracy przedstawione sa wymagania nakładane na kryptograficznie silne krzywe eliptyczne, uzasadnienie tych wymagań oraz przykłady wygenerowanych takich krzywych. Zaimplementowano arytmetykę modularna w ciałach skończonych, operacje na krzywych oraz podstawowe protokoły kryptograficzne wykorzystujace krzywe eliptyczne. Abstract: The elliptic curves over finite fields are an essential part of the public key cryptography. The security of cryptosytems with elliptic curves is based on the computational intractability of the Elliptic Curve Discrete Logaritm Problem (ECDLP). The paper presents requirements which cryptographically secure elliptic curves have to satisfy, together with their justification and some examples of elliptic curves which have been generated. The modular arithmetic in finite fields, the operations on elliptic curves and the basic cryptographic protocols have been implemented. Słowa kluczowe: kryptografia krzywych eliptycznych, arytmetyka modularna, protokół Diffie-Hellmana uzgadniania kluczy, podpis elektroniczny ECDSA. Keywords: elliptic curve cryptography, modular arithmetic, Diffie-Hellman key agreement, digital signature ECDSA. 1. WSTEP Krzywe eliptyczne (EC Elliptic Curves) są szeroko stosowane w kryptografii klucza publicznego, w szczególności w protokołach uzgadniania klucza, w podpisach cyfrowych i w generatorach pseudolosowych. Krzywa eliptyczna nad ciałem skończonym stanowi grupę skończoną z odpowiednio określonym działaniem dodawania elementów tej grupy (punktów na krzywej eliptycznej) i elementem neutralnym grupy. Kryptografia krzywych eliptycznych (ECC) ma przewagę nad kryptosystemem klucza publicznego RSA, ponieważ ma porównywalny poziom bezpieczeństwa osiągany przy znacznie krótszym kluczu (ośmiokrotnie) w porównaniu do długości kluczy wymaganych dla RSA. Związane jest to z trudnością obliczeniową problemu logarytmu dyskretnego w grupie punktów na krzywej eliptycznej w porównaniu do trudności obliczeniowej problemu faktoryzacji, na którym opiera się bezpieczeństwo kryptosytemu RSA. Na przykład, dla zapewnienia bezpieczeństwa na poziomie 128 długości klucza w kryptografii symetrycznej, w kryptosystemie RSA należy stosować klucze o długości 3072, a krzywe eliptyczne wymagają wtedy kluczy o długości 256. Tabela 1 [11] podaje odpowiadające długości kluczy kryptograficznych w bitach przy zachowaniu porównywalnego poziomu bezpieczeństwa. Tab. 1. Długość kluczy kryptograficznych Algorytmy symetryczne RSA Krzywe eliptyczne 80 1024 160 128 3072 256 256 15360 512 Istnieje wiele standardów rekomendowanych krzywych eliptycznych [1, 2, 3, 11]. W naszych badaniach zastosowaliśmy standard europejski Brainpool [3], ponieważ zaleca on największą liczbę warunków, które powinny spełniać krzywe eliptyczne nad ciałami F p, gdzie p jest odpowiednio wybraną liczbą pierwszą oraz standard ten podaje pewne wytyczne jak generować własne krzywe eliptyczne. Celem tej pracy jest przedstawienie metod jakie zastosowaliśmy w celu wygenerowania własnych bezpiecznych kryptograficznie krzywych eliptycznych nad ciałami prostymi wraz z podaniem przykładowych krzywych spełniających przyjęte warunki odporności na ataki kryptoanalityczne. Własne krzywe eliptyczne są wymagane do ochrony informacji niejawnej o klauzuli wyższej od zastrzeżone. Przedstawiony jest także opis implementacji arytmetyki modularnej w ciałach prostych F p, gdzie p to duża liczba pierwsza oraz opis wykonanej implementacji arytmetyki w grupie punktów krzywej eliptycznej E(F p ). Własna implementacja pozwala na certyfikację systemów ochrony informacji niejawnej o wysokich klauzulach tajności. Efektywna implementacja arytmetyki modularnej wymaga zastosowania specjalnych algorytmów dla redukcji modularnej. W pracy zaimplementowano trzy algorytmy mnożenia z redukcją modularną: algorytm klasyczny oraz algorytmy Barrett a i Mongomery ego. Następnie arytmetyka modularna w ciele F p zastosowana jest do implementacji operacji arytmetycznych w grupie punktów na wybranej krzywej eliptycznej. Działania na punktach krzywej wykonane są w reprezentacji afinicznej i w reprezentacji rzutowej tych punktów oraz porównana 1
jest efektywność implementacji w zależności od wybranej reprezentacji punktów. Praca zorganizowana jest w następujący sposób. Paragraf 2 przedstawia opis ciał skończonych i krzywych eliptycznych nad tymi ciałami. W Paragrafie 3 opisane są metody generacji kryptograficznie silnych krzywych eliptycznych wraz z uzasadnieniem warunków nakładanych na te krzywe. Paragraf 4 zawiera opis implementacji arytmetyki krzywych eliptycznych oraz wyniki pomiaru efektywności wykonanych implementacji. Podane są także w Dodatkach przykłady wygenerowanych krzywych eliptycznych. 2. KRZYWE ELIPTYCZNE NAD CIAŁAMI SKOŃCZONYMI Niech p > 3 będzie liczbą pierwszą oraz F p = {0,1,..., p 1} p-elementowym ciałem skończonym z dodawaniem i mnożeniem modulo p. Krzywą eliptyczną nad ciałem F p nazywamy zbiór rozwiązań (x,y) F p F p równania E : y 2 = x 3 + Ax + B mod p (1) wraz z punktem w nieskończoności O, gdzie współczynniki krzywej A,B F p spełniają warunek = 4A 3 + 27B 2 0 mod p. (2) Równanie (1) nazywane jest skróconą wersją równania Weierstrassa. W zbiorze rozwiązań równania (1) wprowadzamy operację dodawania punktów na krzywej, opisaną na przykład w [4]. Wtedy dołączając O jako element neutralny, otrzymujemy strukturę grupy abelowej o skończonej liczbie elementów. Operacja dodawania punktu do siebie nazywana jest podwojeniem punktu. Pozwala ona z kolei zdefiniować operację mnożenia punktu P E(F p ) przez liczbę naturalną n, która jest wielokrotnym zastosowaniem operacji podwojenia punktu i dodawania punktów w grupie E(F p ). Grupa E(F p ) punktów na krzywej eliptycznej (1) określonej nad ciałem skończonym F p ma rząd (liczbę elementów) #E(F p ), która spełnia nierówność Hassego: p + 1 2 p < #E(F p ) < p + 1 + 2 p. Dokładna wartość #E(F p ) może być obliczona na podstawie Algorytmu SEA, którego zoptymalizowana implementacja dostępna jest w systemie obliczeniowym Magma [7]. Krzywe eliptyczne nad ciałami skończonymi znalazły zastosowanie w kryptografii klucza publicznego ze względu na trudność obliczeniową problemu logarytmu dyskretnego w grupie punktów na krzywej (ECDLP Elliptic Curve Discrete Logarithm Problem). Niech P E(F p ) będzie ustalonym punktem krzywej eliptycznej, zaś Q E(F p ) losowo wybranym punktem na tej krzywej. Szukamy liczby naturalnej d takiej, że Q = dp. d nazywana jest logarytmem dyskretnym punktu Q względem punktu bazowego P w grupie E(F p ). W ogólnym przypadku nie są znane efektywne algorytmy obliczania logarytmów dyskretnych na krzywych eliptycznych. Przy spełnieniu określonych warunków przez krzywe eliptyczne, znane algorytmy mają złożoność wykładniczą względem wielkości liczby p. 3. GENERACJA KRZYWYCH ELIPTYCZNYCH Będziemy rozpatrywać krzywe eliptyczne nad ciałami skończonymi F p, gdzie p jest liczbą pierwszą o odpowiedniej długości n. Standardy [3, 8, 11] dostarczają listy rekomendowanych krzywych eliptycznych dla poszczególnych wielkości liczb p. Definicja krzywej eliptycznej zawiera zbiór, zwanych parametrami dziedziny, które muszą być w posiadaniu stron stosujących algorytmy ECC. Tymi parametrami są (p,a,b,,n,h), gdzie: p jest liczbą pierwszą, która określa ciało F p, A, B są współczynnikami krzywej eliptycznej, które określają równanie krzywej (1) w postaci Weierstrassa, E(F p ) jest punktem bazowym na krzywej E, który zwany jest także generatorem grupy cyklicznej punktów na krzywej, n = #E(F p ) jest rzędem grupy cyklicznej generowanej przez punkt (w naszych zastosowaniach będzie to cała grupa punktów krzywej eliptyczej), h = #E(F p )/n jest tzw. ko-czynnikiem. Zalecane jest aby h było małe (h 4), w przypadku gdy grupa cykliczna generowana przez jest podgrupą grupy punktów na krzywej. W naszych przykładach h = 1. Celem naszych eksperymentów było znalezienie krzywych eliptycznych nad ciałami F p, dla długości liczby pierwszej p odpowiednio 160, 258, 384 i 512, które są generowane zgodnie ze standardem Brainpool [3] na podstawie ziarna pobieranego ze sprzętowego generatora losowego. Po losowym wybraniu współczynników A, B spełniających nierówność (2) sprawdzane są kryteria bezpieczeństwa krzywej eliptycznej (1). Jeśli nie spełniony jest któryś z wymaganych warunków, to generowane są nowe współczynniki A, B i proces weryfikacji zaczyna się od nowa. Na silne kryptograficznie krzywe eliptyczne nakładane są następujące warunki, które zapobiegają atakom na problem logarytmu dyskretnego na krzywych (ECDLP). Warunki te są wzmocnieniem kryteriów ze standardu [3]. 1. Rząd krzywej eliptycznej n = #E(F p ) jest liczbą pierwszą (różną od liczby p), ma to zapobiec atakom na ECDLP typu atak metodą małych podgrup [3, 4] i atak Pohliga-Hellmana [9]. Ponieważ rząd krzywej jest liczbą pierwszą, to każdy punkt na krzywej różny od elementu neutralnego jest generatorem cyklicznej grupy punktów krzywej. Krzywe eliptyczne, których rząd jest liczbą pierwszą nie mają punktów rzędu dwa (P + P = O), a stąd punktów o współrzędnej y = 0. 2. Rząd krzywej n jest mniejszy niż liczba pierwsza p określająca ciało F p (n < p). Warunek ten ma w części techniczny charakter, ponieważ zapobiega on przepełnieniu rejestrów w implementacjach. W pewnych przypadkach przy niespełnieniu tego warunku, długość w bitach liczby n może być większa niż długość w bitach liczby p. Krzywe eliptyczne dla których n = p nazywane są krzywymi o śladzie jeden (trace one curves) lub krzywymi anomalnymi (anomalous curves). Zgodnie z pracą Satoh i Araki [10] istnieje efektywny algorytm o złożoności wielomianowej obliczania logarytmów dyskretnych na krzywych anomalnych. Należy
zatem eliminować takie krzywe w procesie generowania. 3. W atakach z wykorzystaniem iloczynu Weila i iloczynu Tate (ang. Weil-pairing, Tate-pairing) można zanurzyć grupę punktów na krzywej E(F p ) w grupę jedności ciała GF(p l ), które jest rozszerzeniem stopnia l ciała F p. W ciele GF(p l ) mamy do dyspozycji algorytm obliczania logarytmów dyskretnych, który ma złożoność podwykładniczą. Z tego względu stopień rozszerzenia l powinien być możliwie duży, aby złożoność ataków z wykorzystaniem algorytmów do rozwiązywania problemu DLP (Discrete Logarithm Problem) w ciele GF(p l ) była porównywalna ze złożonością dla ECDLP w ciele F p. Wartość stopnia zanurzenia l dla danej krzywej eliptycznej obliczmy ze wzoru l = min(t:n p t 1), tzn. l jest rzędem p modulo n. Na podstawie małego Twierdzenia Fermata wiemy, że liczba l dzieli n 1. Dokładną wartość l obliczamy wykonując faktoryzację liczby n 1. Według standardu [3] wybieramy krzywe eliptyczne, dla których (n 1)/l 100, wtedy l jest bliskie maksymalnie dużej możliwie wartości. W celu weryfikacji tego warunku dla krzywej k-bitowej (wielkość ciała F p ) należy mieć możliwość efektywnej faktoryzacji liczb k-bitowych. 4. Ostatni z warunków ze standardu [3] ma dość skomplikowany charakter. Zalecane jest aby liczba klas ciała kwadratowego k = d była większa niż 10 000 000, gdzie d = (4p u 2 )/v 2, u jest określone z równości n = p + 1 + u, zaś v = max{a:a 2 4p u 2 }; zatem d jest częścią bezkwadratową liczby 4p u 2. Warunek na wielkość liczby klas ma zapobiegać atakom na problem ECDLP, które wykorzystują małą wartość liczby klas. 5. Ostatni z warunków nie jest zawarty w standardzie [3], ale podany jest na stronie [1] dotyczącej bezpieczeństwa krzywych eliptycznych. Z każdą krzywą eliptyczną E stowarzyszona jest tzw. krzywa skręcona (twisted curve) E tw. Jeśli krzywa E nad ciałem skończonym ma p + 1 +t punktów, to krzywa E tw ma p + 1 t punktów. Wynika stąd, że rząd (liczba punktów) krzywej skręconej wyraża się wzorem #E tw (F p ) = 2p + 2 #E(F p ). Kryterium twist security podane na stronie [1] zaleca, aby największy czynnik pierwszy liczby #E tw był dłuższy niż 100. Kryterium to związane jest z odpornością na pewne aktywne ataki na kryptosystemy z krzywymi eliptycznymi, w których pojawia się problem logarytmu dyskretnego na krzywej skręconej. Kryterium twist security nie zostało jeszcze umieszczone w publikowanych standardach. W paragrafie Dodatki tabele przedstawiają znalezione eksperymentalnie dziedziny dla krzywych eliptycznych o długościac60, 256, 384 i 512. Tabele zawierają w szczególności faktoryzację rzędu krzywej skręconej. Tabele 6-9 przedstawiają krzywe eliptyczne, które spełniają kryteria 1-4 (kryteria ze standardu Brainpool [3], oraz dla których długość len czynnika pierwszego liczb #E tw (F p ) jest większa niż 100 ). 4. IMPLEMENTACJA ARYTMETYKI NA KRZYWYCH ELIPTYCZNYCH W protokołach kryptograficznych opartych na krzywych eliptycznych, takich jak ECDH (protokół Diffie-Hellmana ustalenia wspólnego tajnego klucza) czy też ECDSA (algorytm podpisu cyfrowego) wymagana jest efektywna implementacja arytmetyki na zastosowanych krzywych eliptycznych tak, aby czas realizacji poszczególnych operacji był możliwie krótki. W pierwszej kolejności należy zaimplementować arytmetykę modularną w ciele F p, a następnie operacje arytmetyczne na punktach krzywej eliptycznej. Poniżej przedstawiamy wykonaną implementację softwarową dedykowaną na procesory 32-bitowe. 4.1. Arytmetyka modularna Niech (1) będzie krzywą eliptyczną nad ciałem F p charakterystyki p > 3. p oraz liczby reprezentujące elementy ciała F p mogą być reprezentowane w pamięci komputera jako ciągi lub ciągi słów. Zatem dla 0 x < p możemy zapisać w notacji binarnej lub x = (b i 1,b i 2,...,b 1,b 0 ) 2 x = (w j 1,w j 2,...,w 1,w 0 ) w, gdzie b 0,b 1,...,b i 1 reprezentują bity {0,1}, zaś w 0,w 1,...,w j 1 liczby ze zbioru {0,1,...,w 1}. W celu osiągnięcia efektywnej implementacji, wielkości bazy w powinna być bliska rozmiaru słowa procesora, np. w = 2 32. Wtedy 512-bitowe liczby całkowite reprezentowane są przez 16 32-bitowych słów. Wyniki pośrednie, przed redukcją modulo p, mogą być większe: wynik dodania dwóch liczb 512-bitowych ma 17 słów 32-bitowych, natomiast wynik mnożenia ma 32 słowa 32-bitowe. Z tego względu w implementacji dedykowanej dla krzywych 512-bitowych zastosowano 35 słów 32-bitowych. Podstawowymi operacjami arytmetycznymi w ciele F p są: dodawanie modulo p, mnożenie modulo p. Zaimplementowano również operacje: odejmowania modulo p, potęgowania modulo p, odwrotności modularnej modulo p, dzielenia modulo p, pierwiastka kwadratowego w ciele F p oraz inne typy operacji: bitowe operacje logiczne: OR, XOR, AND, NOT, przesunięcia i rotacje, porównywanie i operacje warunkowe, przypisywanie i kopiowanie wartości, testy pierwszości. Realizacja arytmetyki modularnej wymaga zastosowania specjalnych algorytmów mnożenia z redukcją modularną. W pracy wykorzystano następujące algorytmy: algorytm klasyczny [14], algorytm Montgomery ego [13], algorytm Barrett a [12].
Algorytmy Montgomery ego i Barrett a wymagają wykonania pewnych obliczeń wstępnych. W przypadku algorytmu Montgomery ego należy obliczyć wielkość γ = p 1 mod w, gdzie w jest podstawą reprezentacji liczb całkowitych, która jest względnie pierwsza z p. W algorytmie Barrett a należy wstępnie obliczyć µ = 22i p, gdzie i jest liczbą w reprezentacji binarnej liczby pierwszej p. Podstawową operacją arytmetyczną, która ma zastosowanie gdy implementujemy algorytmy kryptograficzne typu RSA, DH i DSA jest potęgowanie modularne. Wykonaliśmy pomiary czasu realizacji potęgowania modularnego z użyciem podanych wyżej trzech metod modularnego mnożenia dla liczb 1024 i 2048-bitowych. Algorytmy zostały zaimplementowane w języku C, natomiast eksperymenty zostały przeprowadzone na komputerze z procesorem 3,6 GHz. Tab. 2. Czasy potęgowania modularnego na PC Metoda mnożenia modularnego klasyczna Barrett a Montgomery ego 1024 38 ms 30 ms 13 ms 2048 288 ms 225 ms 100 ms Wykonaliśmy również pomiary czasu realizacji potęgowania modularnego dla implementacji w języku C, kompilowanych w systemie Linux, na procesorze ARM 400 MHz: Tabele 2 i 3. Tab. 3. Czasy potęgowania modularnego na ARM Metoda mnożenia modularnego klasyczna Barrett a Montgomery ego 1024 250 ms 166 ms 103 ms 2048 1 762 ms 1 243 ms 787 ms Z podanych wyników wnioskujemy, że potęgowanie modularne jest realizowane najszybciej za pomocą metody Montgomery ego. 4.2. Operacje arytmetyczne na krzywych eliptycznych Podstawową operacją w grupie E(F p ) punktów na krzywej eliptycznej E : y 2 = x 3 + Ax + B mod p jest dodawanie punktów. We współrzędnych afinicznych (x,y) F p F p wynikiem dodawania punktów P = (x 0,y 0 ) i Q = (x 1,y 1 ) jest punkt R = (x 2,y 2 ), którego współrzędne wyrażają się wzorami: gdzie: x 2 = λ 2 x 0 x 1 y 2 = λ(x 0 x 2 ) y 0 λ = y 0 y 1 x 0 x 1 dla (x 0,y 0 ) (x 1,y 1 ) λ = 3x2 0 + A 2y 0 dla (x 0,y 0 ) = (x 1,y 1 ) Dodanie punktu P do siebie (P + P) nazywane jest operacją podwajania punktu, zaś wynik oznaczany jest symbolem 2P. W podobny sposób definiujemy wielokrotność punktu P przez liczbę naturalną P +... + P = dp (d razy). Obliczenie wielokrotności punktu wymaga średnio wykonania k podwojeń punktu i k/2 dodawań punktów, gdzie k jest liczbą w rozwinięciu binarnym liczby d. Ponadto w implementacji algorytmów ECDSA i ECDH wymagana jest generacja punktów na krzywej eliptycznej oraz procedury sprawdzania, czy punkt otrzymany w trakcie obliczeń leży na danej krzywej eliptycznej. Wszystkie operacje na krzywych eliptycznych zostały zaimplementowane we współrzędnych afinicznych, jak i we współrzędnych rzutowych. Punkt o współrzędnych afinicznych (x, y) na krzywej eliptycznej (1) przekształcany jest na punkt (x, y, z) we współrzędnych rzutowych, w których równanie krzywej ma postać E : zy 2 = x 3 + Axz 2 + Bz 3. Wzory na dodawanie i podwojenie punktu na krzywej we współrzędnych rzutowych [4] nie używają operacji dzielenia w ciałach skończonych, która jest kosztowana czasowo. Tabela 4 przedstawia uzyskane czasy realizacji obliczania wielokrotności punktu na krzywych eliptycznych o poszczególnych długościach k przy wykorzystaniu obu rodzajów współrzędnych oraz wybranych metod implementacji arytmetyki w ciałach skończonych. Tab. 4. Czasy obliczania wielokrotności punktu na PC Metoda reprezentacji i mnożenia modularnego afiniczna Montgomery ego klasyczna Barrett a 256 84 ms 8 ms 7 ms 384 378 ms 27 ms 24 ms 512 1270 ms 64 ms 55 ms Zauważmy, że najszybszą metodę daje zastosowanie współrzędnych rzutowych i metody Barrett a redukcji modularnej. Tabela 5 przedstawia czasy realizacji obliczania wielokrotności punktów w implementacji wykonanej na procesorze ARM o częstotliwości taktowania 400 MHz. Tab. 5. Czasy obliczania wielokrotności punktu na ARM Metoda reprezentacji i mnożenia modularnego afiniczna Montgomery ego klasyczna Barrett a 256 2 798 ms 242 ms 181 ms 384 12 881 ms 718 ms 557 ms 512 41 647 ms 1 623 ms 1 261 ms Biorąc pod uwagę powyższe rezultaty mamy, że czas generacji klucza i podpisu dla 384-bitowej krzywej eliptycznej zajmuje około 24 ms na komputerze PC z procesorem 3,6 GHz i około 557 ms na platformie z procesorem ARM o częstotliwości taktowania 400 MHz. Czasy we-
ryfikacji podpisu wynoszą odpowiednio 48 ms i 1,1 s na podanych wyżej platformach. Powyższe czasy mogą być zredukowane przy doborze odpowiednich krzywych eliptycznych. Następnym zadaniem jest optymalizacja wykonanych implementacji. Planowane jest także wykonanie tych implementacji w układach FPGA. 5. PODSUMOWANIE Zastosowanie krzywych eliptycznych jest aktualnie najlepszym sposobem uzyskania bezpiecznych protokołów uzgadniania kluczy kryptograficznych i podpisu cyfrowego. W tym celu należy wygenerować bezpieczne krzywe eliptyczne i wykonać efektywną implementację arytmetyki modularnej w ciałach skończonych i arytmetyki na krzywych eliptycznych. Zalecanych jest wiele standardów krzywych eliptycznych i w zastosowaniach komercyjnych należy stosować takie krzywe. Natomiast w zastosowaniach specjalnych (dla wojska, administracji rządowej) zalecane jest stosowanie własnych krzywych. Wybraliśmy standard Brainpool, ponieważ zawiera on większą liczbę uzasadnionych warunków bezpieczeństwa nakładanych na krzywe eliptyczne. W pracy przedstawiono wyniki eksperymentów generacji bezpiecznych krzywych eliptycznych oraz czasy realizacji operacji arytmetycznych na krzywych eliptycznych wraz z odpowiadającymi czasami realizacji protokołu poufnej wymiany kluczy kryptograficznych oraz podpisu cyfrowego na wybranych procesorach Intel i ARM. SPIS LITERATURY [1] D.J. Bernstein, T. Lange, SafeCurves: choosing safe curves for elliptic-curve cryptography, http://safecurves.cr.yp.to [2] D.J. Bernstein, Tung Chou, Ch. Chuengsatiansup, A. Huelsing, T. Lange, R. Niederhagen, Ch. Van Vredendaal How to manipulate curve standards: a white paper for the black hat, Cryptology eprint Archive, 2014/571, www.iacr.org [3] ECC Brainpool, ECC Brainpool Standard Curves and Curve generation, 2005. www.ecc-brainpool.org/download/domain-parameters.pdf [4] D. Hankerson, A. Menezes, S. Vanstone, Guide to Elliptic Curve Cryptography, Springer 2004, ISBN 0-387-95273-X [5] Ming-Deh Huang, W. Raskind, Global methods for discrete logarithm problems, Elliptic Curve Cryptography Conference, 2004 [6] D. Jao, S.D. Miller, R. Venkatesen, Ramanujan graphs and the random reducibility of discrete log on isogenous elliptic curves, 2004, www.iacr.org [7] Magma Computational Algebra System, www.magma.math.usyd.edu.au [8] NIST, Recommended Elliptic Curves for Federal Government Use, 1999 [9] S. Pohlig, M. Hellman, An improved algorithm for computing logarithms over GF(p) and its cryptographic significance, IEEE Transactions on Information Theory, 1978 [10] T. Satoh, K. Araki, Fermat quotients and the polynomial time discrete log algorithm for anomalous elliptic curves, Comm. Math. Univ. Sancti Pauli, 47, pp. 81-92, 1998 [11] SEC2: Recommended Elliptic Curve Domain Parameters, Certicom Research. January27, 2010. Version 2.0 [12] P. Barrett, Implementing the Rivest, Shamir and Adleman public key encryption algorithm on a standard digital signal processor, Advances in Cryptology CRYPTO 86, LNCS 263, Springer-Verlag Berlin Heidelberg 1987, pp. 311-323 [13] P. Montgomery, Modular multiplication without trial division, Mathemetics of Computation vol. 44 (1985), pp. 519-521 [14] A. Menezes, P. van Oorschot, S. Vanstone, Handbook of Applied Cryptography, CRC Press, 1996 DODATKI: PRZYKŁADY KRZYWYCH ELIPTYCZNYCH Tab. 6. Parametry 160 bitowej krzywej eliptycznej Dziedzina 160 bitowa liczba 0xE75F077B3804BAB2C122344DFD0 p 4FCE951DA7027 0xE06C22F8F36E2468E2B5F27CCBD A 57D9DC6B23400 0x68F4C31B7CE82460D372864AB2C B 8C1CCE5F29283 0x37A8D5420536D5F3071C706D66A 5CE4C07C700D9 0x6BEF365071D253DEA39FC3088E3 C0CCC6FF47F09 0xE75F077B3804BAB2C121924451C n FCFFBABE5FBB3 0xE75F077B3804BAB2C122D657A83 n twist A29D6F7CEE49D [<3,1>,<90281,1>,<426611,1>,< czynniki 11431915082479720108730664390 pierwsze 719752669,1>] len 124
Dziedzina Tab. 7. Parametry 256 bitowej krzywej eliptycznej 256 bitowa liczba p 0xA4701F69D1D96BCEE3719029B6C8F3F1C0318B00FBC76A4FBAE54A2D84BA90C3 A 0x1C417D163830A291B2F769BE7737E29112C4D400ECC3A22726E589289084DC67 B 0x9D3B1FE4E68A23711EC1D7D92251D14C0CE040CB21EF11DA66012DDD79402E72 0x7EE932CFAA5B1EFE0297815BF0036DFFB4C9B70708B344481504C36D4C24BEB9 0x5195AC4DA0186C7B3FBDF20AF09F64276EE25C689ACDF8174E2D4BD8BFC50D25 n 0xA4701F69D1D96BCEE3719029B6C8F3F0485F90CF0AC53F6344F9D95622C730AD n twist 0xA4701F69D1D96BCEE3719029B6C8F3F338038532ECC9953C30D0BB04E6ADF0DB czynniki [<137,1>,<77127527346223,1>,<7039001868391305024827233109584083029781968094 pierwsze 947827782607661,1>] len 203 Dziedzina Tab. 8. Parametry 384 bitowej krzywej eliptycznej 384 bitowa liczba 0x950FD23F7FCDB5D647C6087B67A238B8C94A33898021E71451B5F922A277D40F89C561387 p B978CC057749BE485C3621F 0x2704ED36195B700E6DA4A3B98DEF52342094C6AA34A71A36F64D0F3E2A38432D1E7C85004 A 583CC3246254258B392508D 0x7C1CA2774E5FABC0EB668323DC507E2BF0FD936BFBAFAEABED0E1F5740D196276C5A9EE60 B D40957F67E6333320359295 0x1C56954F12FC79768A87CAC920323115E50B1DA42542A380E1265779A32A2D23F9BEE6FCA 61BCB057AFB26ECA927E51C 0x8A28CF52E6B00BF935667D90092EA01504133AA556C23C9462AF727DF244464D6B575F1B6 1C3FBA27E242ABBCE28121B 0x950FD23F7FCDB5D647C6087B67A238B8C94A33898021E713C6FEECAB3B86DB8D79D79B916 n E3E2F199A1C8098D2C8035D 0x950FD23F7FCDB5D647C6087B67A238B8C94A33898021E714DC6D059A0968CC9199B326DF8 n twist 8F0EA6714CCB73038BEC0E3 czynniki [<5,1>,<4588542219799413391900517767130438062170403601256391422007358414020 pierwsze 609723036030758374529156592774903913259915106759,1>] len 381
Dziedzina Tab. 9. Parametry 512 bitowej krzywej eliptycznej 512 bitowa liczba 0xE121B140806D878B50656F5A5AEF0FBE3A912FD8526A10EB6177EC6C4FF5808C2F6812C52 p 9097FCA07F5F7D57B1F1E7FEB41CA7FEDF8C647CD5FD40DB53EC107 0x8A3DFCDF063ABB966D72DB6C328346B937D6BE075049D765474730D8A13415D550ABB77C0 A 0343AD0C0B03D784F4F4EC5158BC43DC5C2AC33C6620031510FD69 0x8B3423FE32644E29860D667CDFA9CB62376F32A9404D470EAF9BE87E35144F120B5E92384 B 02DA3105D09B096C52081ECBAD2D687EC3D42C07274812E10414827 0xAE3D9F24D26B6B5E944EA30DA95AF78FC922E00BA6052B0FD8C1605B540A33C7BFA7EC610 6A13A52661ABE77E4C6C02154AD7FC97FD68E352E67A38DAF1DFE9E 0xBF95072569330E0088BC5C82DEE33543AED1EB3090618B15873A1617F4F4D0FD9D22394AD 380EA96AE478FAEC4D9A8693B60EBEA58983676277AC5ECF1C6B085 0xE121B140806D878B50656F5A5AEF0FBE3A912FD8526A10EB6177EC6C4FF5808A7A65BC602 n CD79AA4EF4B9B598746662B67160EC7634F74B183CB8409B8F2856F 0xE121B140806D878B50656F5A5AEF0FBE3A912FD8526A10EB6177EC6C4FF5808DE46A692A2 n twist 53B64EF20A054516EF7D6D46F6D863878A217DE16F42411B18AFCA1 [<17,1>,<263,1>,<73777333199494915133765584973,1>,<357459357789270259701927 czynniki 865005508273200178922782463933590968061769902912284333661225611113881927282 pierwsze 99916229683860346449603,1>] len 404