ROZPROSZONY SYSTEM DO KRYPTOANALIZY SZYFRÓW OPARTYCH NA KRZYWYCH ELIPTYCZNYCH Krzysztof Skowron, Mariusz Rawski, Paweł Tomaszewicz 1/23
CEL wykorzystanie środowiska Altera OpenCL do celów akceleracji obliczeń rozproszonych na przykładzie systemu do kryptoanalizy szyfrów opartych na krzywych eliptycznych 2/23
KRYPTOGRAFIA KRZYWYCH ELIPTYCZNYCH kryptosystem klucza publicznego najpoważniejszy rywal RSA A abc def klucz publiczny B!@ #$ krótsze klucze niż RSA przy tym samym bezpieczeństwie bezpieczeństwo oparte na problemie ECDLP!@ #$ abc def B klucz prywatny B 3/23
KRYPTOGRAFIA KRZYWYCH ELIPTYCZNYCH y 2 = x 3 + ax + b równanie Weierstrassa 4/23
BUDOWA KRYPTOSYSTEMU ECC ustalenie parametrów krzywej E wybór punktu P rzędu n na krzywej E wybór losowej wartości k [1,, n 1] wyznaczenie punktu Q y 2 = x 3 + ax + b 4a 3 + 27b 2 + 6 0 mod p y P(x, y) x Q i P są jawne można na ich podstawie wyznaczyć k: problem ECDLP (Elliptic Curve Discrete Logarithm Problem) klucz publiczny (jawny) Q = k P klucz prywatny (tajny) parametr kryptosystemu (jawny) 5/23
KRYPTOANALIZA ECC X t+1 algorytm rho Pollarda X t X t+s X t+2 operacje na punktach dodawanie, mnożenie przez skalar X t 1 X t+3 operacje na skalarach mnożenie, dodawanie, inwersja X 2 X 1 X t+s 1 X 0 6/23
PARAMETRY ŁAMANEGO KRYPTOSYSTEMU Kryptosystem CERTICOM ECCp-89 y 2 = x 3 + ax + b Parametr Wartość dziesiętna Wartość szesnastkowa p 416363315556156604917983573 0158685C903F1643908BA955 a 3881733152902215205506458208 0C8AE4F7DE8918AA9FAB2260 b 121489936031066440060440631 00647E7EA1062AE69A7D1037 Px 907613852785330174552411 00C031D875DBF8E60BE95B0A P y 8425515734129553132973322 0006F82C1F879745BF676D0A 7/23
SCHEMAT SYSTEMU OBLICZENIOWEGO sterowanie procesem obliczeniowym wysyłanie zadań do klientów odbieranie wyników obliczeń generowanie wektorów startowych zdalne programowanie klientów SV SERWER SIEĆ KLIENT FPGA CV KLIENT PC SV wykonywanie obliczeń wysyłanie wyników do serwera 8/23
ZALETY ZASTOSOWANIA FPGA większa efektywność obliczeniowa w porównaniu do rozwiązań programowych możliwość dopasowania struktury układu do parametrów danej krzywej eliptycznej (np. długość klucza) możliwość zastosowania specyficznych algorytmów obliczeniowych Cyclone V SoC 41910 ALM ARM Cortex -A9 MPCore 2 rdzenie 925 MHz Stratix V 262400 ALM złącze PCIe źródło: altera.com 9/23
OPENCL opracowany przez Apple, oddany pod opiekę Khronos Group stworzony na potrzebę projektowania heterogenicznych aplikacji nastawiony na wielowątkowość dotychczas stosowany głównie na GPU i CPU w maju 2013 r. do projektu dołączyła Altera Corporation 10/23
OPENCL A HDL HDL wymaga specjalistycznej wiedzy skomplikowany przy dużych systemach złożone i czasochłonne testowanie OpenCL proste projektowanie skrócenie time to market OpenCL dla HDL tym, czym C dla asemblera bardzo duża wydajność przy dobrym opisie ograniczona wydajność spowodowana trudnością przejścia do logiki kombinacyjnej 11/23
łatwość wdrożenia OPENCL CPU GPU OpenCL FPGA ASIC wydajność 12/23
SPECYFIKA PROGRAMOWANIA HOST KERNEL 13/23
SPECYFIKA PROGRAMOWANIA HOST sterowanie kernelem przekazywanie do niego danych odbieranie od niego danych wszystko co może zrobić aplikacja w C++ KERNEL 14/23
SPECYFIKA PROGRAMOWANIA wykonywanie obliczeń korzystanie ze specjalizowanych elementów FPGA HOST KERNEL sterowanie kernelem przekazywanie do niego danych odbieranie od niego danych wszystko co może zrobić aplikacja w C++ 15/23
OPENCL NA GPU I FPGA GPU kernele uruchamiane na rdzeniach o określonej budowie projekty ograniczone przez liczbę rdzeni karty graficznej szybka kompilacja użycie standardu OpenCL Khronos Group mnogość platform sprzętowych FPGA kernele transformowane do dedykowanych układów sprzętowych projekty ograniczone przez liczbę zasobów logicznych układu FPGA długi czas kompilacji (nawet godziny) dedykowane funkcje firmy Altera przystosowane do FPGA tylko kilka układów wspiera OpenCL 16/23
PRZYKŁAD LINUX FPGA cl_mem buff = clcreatebuffer(...,, sizeof(cl_uint4)*8,... ); cl_uint4 *vector = (cl_uint4*) clenqueuemapbuffer(..., buff,... ); clsetkernelarg(..., kernel[add], 0,..., sizeof(cl_mem), &buff ); clenqueuetask( queues[0], kernels[add], 0, NULL, NULL ); uint4 kernel Add(uint4 void add( a, uint4 global b){ const uint4 *a, ulong4 c; global const uint4 *b, global uint4 *sum) { c.s0 = (ulong) a.s0 + (ulong) b.s0; c.s1 int id = = (ulong) get_global_id(0); a.s1 + (ulong) b.s1 + (ulong) (c.s0 >> 32); c.s2 sum[id] = (ulong) = Add(a[id], a.s2 + b[id]); (ulong) b.s2 + (ulong) (c.s1 >> 32); } return (uint4)(c.s0, c.s1, c.s2, 0); } 17/23
ŚCIEŻKA PROJEKTOWA OPENCL HDL KOD OPENCL WERYFIKACJA FUNKCJONALNA EMULACJA KOMPILACJA URUCHOMIENIE PLIK BINARNY TESTY WYDAJNOŚCI 18 18/23
SCHEMAT JEDNOSTKI KLIENTA komunikacja z serwerem sterowanie płaszczyzną obliczeniową wykonywanie algorytmu rho PŁASZCZYZNA STEROWANIA KOMUNIKACJA Z SERWEREM HOST OPENCL X = X + R i c = c + a i d = d + a i KERNEL OPENCL PLATFORMA OPENCL PŁASZCZYZNA OBLICZENIOWA 19/23
POPRAWNOŚĆ WYKONYWANIA OPERACJI Dodawanie A + B = R (mod p) A: 0158685c 903f1643 908ba954 B: 00000000 00000000 00000001 R: 00000000 00000000 00000000 Mnożenie AB = R (mod p) A: 0158685c 903f1643 908ba954 B: 0158685c 903f1643 908ba954 R: 00000000 00000000 00000001 Inwersja I = A -1 (mod p) A : 00000000 00000000 0000007b I : 000b3343 87d019b3 1b98506f A : 00000000 00000000 0000007b Dodawanie punktów R = P + Q P.x: 00c031d8 75dbf8e6 0be95b0a P.y: 0006f82c 1f879745 bf676d0a Q.x: 00de1aa9 4ff94db6 4e763e2d Q.y: 002a44c4 c2d4ee27 fa0a4ba9 R.x: 009b95e0 1a8427d4 5f27a466 R.y: 0096c8db 49420c0e 98faaead 20/23
ZAJĘTOŚĆ UKŁADU CYCLONE V wersja kompilatora 14.1.0 Build 186 03/12/2014 rodzina układów Cyclone V model 5CSXFC6D6F31C8ES komórki logiczne 23 392 / 41 910 (56%) pamięć [b] 828 528 / 5 662 720 (15%) bloki DSP 60 / 112 (54%) 21/23
WYDAJNOŚĆ Operacja Czas [µs] dodawanie 124 odejmowanie 124 mnożenie 128 inwersja 170 ~450 punktów/s (zbyt długi potencjalny czas łamania) pusta 120 dodawanie punktów 2250 operacja zapisu i odczytu (przyczyna niskiej wydajności) 22/23
PODSUMOWANIE Altera OpenCL to nowa platforma wymaga dalszego doskonalenia obecna wersja (14.1) kompilatora nieefektywnie zagospodarowuje zasoby logiczne układu, dlatego też nie było możliwym stworzenie wydajnej jednostki wykonującej algorytm rho konfiguracja i poznanie środowiska były czasochłonne (brak know-how) umożliwia szybkie projektowanie i testowanie obiecująca technika dobra dla programistów, gorsza dla projektantów FPGA wysokopoziomowe projektowanie dobre dla złożonych projektów wsparcie dotychczasowych technik projektowania językiem OpenCL pozwoli na wydajne i łatwe w implementacji rozwiązania 23/23