3. Implementacja algorytmów kryptograficznych w układach FPGA na przykładzie algo-
3.3. Sprz˛etowa implementacja algorytmu CLEFIA w układzie FPGA
rundzie szyfru. Generator podkluczy składa si˛e z dwóch modułów. W pierwszym, na podstawie klucza K, za pomoc ˛a GF N , wyliczany jest klucz po´sredni L. W przypadku klucza 128-bitowego wykorzystuje si˛e sie´c GF N4,12, dla kluczy 192 i 256-bitowych GF N8, 10. W drugim etapie na podstawie K i L wyznaczane s ˛a warto´sci WK i RK. Schemat blokowy algorytmu generatora dla klucza 128-bitowego przedstawiono na rysunku 3.3. Symbolem | oznaczono konkatenacj˛e. Operacja Σ to funkcja podwójnej zamiany (ang. Double Swap — DS) okre´slona jako:
Y = X[7 − 63] | X[121 − 127] | X[0 − 6] | X[64 − 120] (3.1) gdzie: X[a − b] — oznacza wyci˛ecie fragmentu z ci ˛agu bitowego X od a-tego bitu do b-tego bitu. 0 oznacza najbardziej znacz ˛acy bit.
Rysunek 3.3: Generacja podkluczy dla klucza 128-bitowego [163]
W algorytmie wykorzystywane s ˛a 32-bitowe warto´sci stałe CONi(k). Ich liczba, w zale˙zno´sci od rozmiaru klucza, wynosi 60, 84 lub 92. Schemat blokowy algorytmu generowania warto´sci CON dla 128-bitowego klucza przedstawiono na rysunku 3.4. Symbolem <<< oznaczono bitowy obrót w lewo, a ¯Ti oznacza logiczn ˛a negacj˛e Ti.
Szerszy opis algorytmu dost˛epny jest w dokumencie [163], a referencyjna implementacja w j˛ezyku C na stronie internetowej producenta [162].
3.3. Sprz˛etowa implementacja algorytmu CLEFIA w układzie FPGA
Prezentowana sprz˛etowa implementacja algorytmu CLEFIA w układzie FPGA została opublikowana na konferencji Field Programable Logic and Applications w 2009 roku [89]. Była to pierwsza realiza-cja tego algorytmu na platformie rekonfigurowalnej. W roku 2011 na kolejnej edycji konferencji FPL zaprezentowano inn ˛a implementacj ˛a algorytmu CLEFIA [140]. Porównanie obu podej´s´c zamieszczono w rozdziale 3.3.8.
3.3. Sprz˛etowa implementacja algorytmu CLEFIA w układzie FPGA 29
Rysunek 3.4: Generacja warto´sci CON dla klucza 128-bitowego [163]
Opisany w rozdziale 3.2 szyfr CLEFIA zaimplementowano w wersji w pełni potokowej, wykorzy-stuj ˛ac j˛ezyk opisu sprz˛etu VHDL. W tym podej´sciu, wprost odwzorowuje si˛e struktur˛e zaprezentowan ˛a na rysunku 3.2, co wymaga wykonania instancji wszystkich rund szyfrowania. Alternatywn ˛a mo˙zliwo-´sci ˛a jest implementacja iteracyjna (przykład [140]), gdzie wykorzystuje si˛e tylko jedn ˛a instancj˛e rundy. W pierwszym przypadku podstawow ˛a zalet ˛a jest bardzo du˙za przepustowo´s´c modułu, ograniczona tylko maksymaln ˛a cz˛estotliwo´sci pracy logiki i sposobem dostarczania i odbierania danych. Wada tego roz-wi ˛azania to du˙ze zapotrzebowanie na zasoby logiczne oraz mo˙zliwo´s´c pracy tylko w podstawowym try-bie szyfrowania ECB. W drugim przypadku uzyskuje si˛e mniejsze u˙zycie zasobów, kosztem K-krotnego spadku pr˛edko´sci (gdzie K oznacza liczb˛e rund szyfrowania). Implementacja iteracyjna umo˙zliwia prac˛e szyfru tak˙ze w innych trybach: CBC, OFB, CFB.
W omawianej implementacji zdecydowano si˛e na synchronizacj˛e logiki na poziomie pojedynczej rundy. Schematycznie zostało to zaprezentowane na rysunku 3.5. Symbolem REG 128 oznaczono 128-bitowy rejestr, a CLK sygnał zegarowy.
REG
128
REG
128
RUNDA
CLK
Rysunek 3.5: Wykorzystany schemat synchronizacji
Najbardziej zło˙zonym elementem pojedynczej rundy s ˛a bloki S-Box S0 i S1 — sposób ich imple-mentacji w znacznym stopniu decyduje o całkowitym opó´znieniu i maksymalnej cz˛estotliwo´sci pracy szyfru. Pozostałe operacje stanowi ˛a funkcj˛e XOR, która mo˙zna efektywnie zaimplementowa´c w ukła-dzie FPGA. Zaprezentowane w rozdziałach 3.3.1 — 3.3.6 wyniki dotycz ˛a układu FPGA serii Virtex II Pro firmy Xilinx.
T. Kryjak Implementacja zaawansowanych algorytmów przetwarzania, analizy i szyfrowania obrazów w układach reprogramowalnych
3.3. Sprz˛etowa implementacja algorytmu CLEFIA w układzie FPGA 30
3.3.1. Implementacja S-Box S0
Najprostsza implementacja bloku S-Box S0 polega na wykorzystaniu operacji LUT (ang. look-up table). Warto´sci podstawienia zapisane s ˛a w pami˛eci ROM opartej o zasoby Distributed RAM lub Block RAMukładu FPGA. Takie rozwi ˛azanie wymaga stosunkowo du˙zej ilo´sci pami˛eci: 16 × 16 × 8 bitów = 2048 bitów. Pojedynczy blok S0 zaimplementowany jako pami˛e´c rozproszona wykorzystuje 128 ele-mentów LUT układu FPGA i wprowadza opó´znienie ok. 1,75 ns.
Alternatywnym rozwi ˛azaniem mo˙ze by´c implementacja bloku S-Box wprost na podstawie definicji (rozwi ˛azanie zaproponowane w pracy [164]). W tym przypadku 4-bitowe bloki podstawieniowe SS0 — SS3 wykonane s ˛a jako LUT, a mno˙zenie przez GF (24) zrealizowane jest za pomoc ˛a operacji XOR. Opisany w ten sposób moduł S0 wykorzystuje 24 elementy LUT i wprowadza opó´znienie ok. 2,3 ns.
3.3.2. Implementacja S-Box S1
Podobnie jak w przypadku bloku S-Box S0 podstawowa implementacja za pomoc ˛a operacji LUT wykorzystuje 128 elementów LUT układu FPGA oraz wprowadza opó´znienie ok. 1,75 ns. Implementa-cja wprost, na podstawie definicji, byłaby nieefektywna z uwagi na skomplikowany sposób obliczania odwrotno´sci w ciele GF (28). W dokumencie [164] zaproponowana została modyfikacja polegaj ˛aca na transformacji ciała GF (28) w ciało zło˙zone GF ((24)2). Wyniki zaprezentowane w pracy [150] (dla szyfru AES) pokazuj ˛a, ˙ze takie post˛epowanie pozwala zmniejszy´c zapotrzebowanie na zasoby logiczne. Moduł S-Box, wykorzystuj ˛acy opisany schemat, składa si˛e z operacji afinicznej f , poł ˛aczonej z izo-morfizmem Φ, operacji odwracania w ciele zło˙zonym GF ((24)2) oraz operacji afinicznej g, poł ˛aczonej z izomorfizmem Φ−1. Podczas implementacji wykorzystano ogólny schemat zaproponowany w pracy [150] oraz opis operacji mno˙zenia dwóch liczb 4-bitowych w ciele GF (24) i odwracania w GF (24) z pracy [131]. Implementacja S-Box S1 na podstawie definicji wykorzystuje 56 elementów LUT oraz wprowadza opó´znienie ok. 5,7 ns.
3.3.3. Implementacja macierzy rozpraszaj ˛acych M 0 i M 1
Moduły M 0 i M 1 zaimplementowano wykorzystuj ˛ac schemat zaproponowany w pracy [164]. Po-zwala on zrealizowa´c obie operacje za pomoc ˛a mno˙zenia przez 01, 02, 04, 08 w ciele GF (28) z wielo-mianem nierozkładalnym z8+ z4+ z3+ z2+ 1 i XOR. Implementacja M 0 wykorzystuje 54 elementy LUT i wprowadza opó´znienie ok. 2,2 ns, a M 1 57 elementów LUT daj ˛ac opó´znienie ok. 2,5 ns.
3.3.4. Implementacja F-funkcji F 0 i F 1
F-funkcje F 0 i F 1 składaj ˛a si˛e z operacji XOR, S-Box S0 i S1 oraz mno˙zenia przez macierze M 0 i M 1. Podstaw ˛a ka˙zdej F-funkcji i jednocze´snie najbardziej zło˙zonym elementem s ˛a bloki podstawie-niowe. Na podstawie wst˛epnych wyników (rozdziały 3.3.1 i 3.3.2) zebranych w tabeli 3.1 zdecydowano si˛e wykona´c trzy implementacje F-funkcji: z modułem S-Box jako tablica podstawieniowa (ang. look-up table), z modułem S-Box zrealizowanym na podstawie definicji (ka˙zdorazowe wyliczanie warto´sci
pod-3.3. Sprz˛etowa implementacja algorytmu CLEFIA w układzie FPGA 31
Tabela 3.1: Implementacja S-Box S0 i S1
S0 S1
look-up table definicja look-up table definicja
LUT 128 24 128 56
Opó´znienie 1,75 ns 2,3 ns 1,75 ns 5,7 ns
Tabela 3.2: Rezultaty implementacji pojedynczej rundy szyfrowania look-up table definicja mieszany T-Box
Slice 949 462 648 669
LUT 1675 748 1099 1133
FF 282 256 267 269
Maks. cz˛estotliwo´s´c [MHz] 142 119 144 142
stawienia zgodnie z definicj ˛a) oraz konfiguracj˛e mieszan ˛a w której S0 implementowane jest na podstawie definicji, a S1 jako tablica podstawieniowa.
Implementacja S-Box S0 na podstawie definicji wykorzystuje o 104 elementy LUT mniej i wpro-wadza opó´znienie wi˛eksze o 0,55 ns ni˙z wersja look-up table. Mo˙zna zatem stwierdzi´c, ˙ze opłaca si˛e j ˛a wykorzystywa´c. W przypadku S-Box S1, implementuj ˛ac na podstawie definicji, zyskuje si˛e 72 elementy LUT, ale kosztem a˙z 3,95 ns opó´znienia. W aplikacjach zorientowanych na szybko´s´c taka implementa-cja S1 mo˙ze spowodowa´c spadek wydajno´sci całego modułu. Na podstawie powy˙zszej analizy mo˙zna stwierdzi´c, ˙ze zaproponowana konfiguracja mieszana jest kompromisem pomi˛edzy du˙z ˛a szybko´sci ˛a dzia-łania implementacji typu look-up table (S-Box S1), a małym u˙zyciem zasobów dla wersji bloku S-Box zrealizowanego na podstawie definicji (S0).
Dodatkowo zaimplementowano obie F-funkcje z wykorzystaniem techniki tzw. T-Box. Polega ona na poł ˛aczeniu S-Box’ów z nast˛epuj ˛ac ˛a po nich operacj ˛a liniow ˛a, celem skrócenia ´scie˙zki krytycznej. Oryginalnie cztery typy T-Box’ów zostały zaproponowane w [164] dla implementacji programowych (dla procesorów ogólnego przeznaczenia). Schemat ten mo˙zna równie˙z wykorzysta´c do implementacji sprz˛etowej szyfru CLEFIA i sprowadza si˛e on do poł ˛aczenia operacji S0 i S1 z M 0 i M 1.
3.3.5. Implementacja pojedynczej rundy szyfrowania
W celu uzyskania w pełni funkcjonalnej rundy umo˙zliwiaj ˛acej szyfrowanie i deszyfrowanie nale˙zy doda´c dodatkow ˛a logik˛e, która, zapewni odpowiedni ˛a realizacj˛e ko´ncowej permutacji w zale˙zno´sci od sygnału steruj ˛acego. W tabeli 3.2 przedstawiono wyniki implementacji pojedynczej rundy szyfrowania algorytmu CLEFIA wraz z dwoma 128-bitowymi rejestrami synchronizuj ˛acymi.
Z analizy rezultatów implementacji wynika, ˙ze runda z wykorzystaniem bloku S-Box jako look-up tablewykorzystuje najwi˛ecej zasobów logicznych przy przewidywanej cz˛estotliwo´sci pracy ok. 140
T. Kryjak Implementacja zaawansowanych algorytmów przetwarzania, analizy i szyfrowania obrazów w układach reprogramowalnych
3.3. Sprz˛etowa implementacja algorytmu CLEFIA w układzie FPGA 32
MHz (Post Place & Route Static Timing, implementacja dla układu Virtex II Pro 100). Wersja, w której bloki S-Box s ˛a zaimplementowane na podstawie definicji, wykorzystuje zdecydowanie mniej zasobów, przy cz˛estotliwo´sci pracy o ok. 20 MHz ni˙zszej. Wersje mieszana i T-Box u˙zywaj ˛a podobnej ilo´sci zaso-bów logicznych oraz osi ˛agaj ˛a cz˛estotliwo´s´c pracy ok. 140 MHz.
3.3.6. Implementacja generatora podkluczy
Generator podkluczy mo˙ze zosta´c zaimplementowany jako: potokowy działaj ˛acy “w locie” (ang. on-the-fly) lub iteracyjny. Pierwsze rozwi ˛azanie, w przypadku algorytmu CLEFIA, wymaga znacznych zasobów logicznych, poniewa˙z konieczne jest stworzenie drugiego potoku GF N . Jedyn ˛a zalet ˛a tej wersji byłaby mo˙zliwo´s´c płynnej zmiany klucza w trakcie szyfrowania (bez cykli potrzebnych na wyznaczenie kompletu podkluczy).
Po wst˛epnej analizie generator iteracyjny okazał si˛e najlepszym rozwi ˛azaniem w przypadku poto-kowej implementacji modułu szyfrowania. Schemat blokowy zaproponowanego rozwi ˛azania przedsta-wiono na rysunku 3.6. Moduł GF N , na podstawie klucza K oraz stałych CON , generuje klucz po´sredni L. Składa si˛e on z pojedynczej rundy szyfrowania oraz kontrolera, który dostarcza odpowiednie stałe w zale˙zno´sci od numeru iteracji. Implementacja wprowadza opó´znienie 10 lub 12 cykli zegara w zale˙z-no´sci od długo´sci klucza.
Rysunek 3.6: Schemat modułu generacji podkluczy
Moduł Key Expand generuje klucze W K i RK na podstawie klucza po´sredniego L i stałych CON . Sprawdzono dwie mo˙zliwe implementacje: iteracyjn ˛a oraz zrównoleglon ˛a. Pierwsza wykorzystuje jeden element wyliczaj ˛acy kolejne podklucze. Ogranicza to u˙zycie elementów LUT, ale wymusza zastosowa-nie du˙zej liczby zasobów pami˛eciowych (przerzutników), pozastosowa-niewa˙z wynik ka˙zdej iteracji musi zosta´c zapami˛etany i by´c dost˛epny dla modułu szyfruj ˛acego. Druga wersja wykorzystuje schemat przedsta-wiony na rysunku 3.7. Symbolem DS oznaczono funkcj˛e podwójnej zamiany (por. rozdział 3.2). Moduł wymaga u˙zycia 638 elementów LUT, jednak˙ze pozwala wyeliminowa´c wykorzystanie przerzutników. Wyniki implementacji generatora podkluczy dla ró˙znych długo´sci klucza przedstawiono w tabeli 3.3.
3.3.7. Implementacja 18 rund szyfrowania
W dalszych badaniach skupiono si˛e na module szyfruj ˛acym zbudowanym z 18 rund (wersja algo-rytmu CLEFIA dla klucza 128-bitowego). Dokonano porównania wyników implementacji czterech za-proponowanych wersji (look-up table, definicja, mieszana, T-Box) dla ró˙znych układów FPGA: Vitrex II Pro 100, Virtex 4 LX 200 oraz Virtex 5LX 30. Do syntezy oraz implementacji wykorzystano narz˛edzie ISE Foundation firmy Xilinx. Maksymalna cz˛estotliwo´s´c pracy podana została na podstawie analizy Post Place & Route Static Timing. Wyniki zaprezentowano w tabelach 3.4, 3.5, 3.6.
3.3. Sprz˛etowa implementacja algorytmu CLEFIA w układzie FPGA 33
Tabela 3.3: Rezultaty implementacji generatora podkluczy 128 192 256 Slice 823 1400 1462 LUT 1491 2411 2545 FF 299 569 569 Maks. cz˛estotliwo´s´c [MHz] 118 103 74
Tabela 3.4: Moduł przetwarzania danych — Virtex II Pro 100
look-up table definicja mieszany T-Box Slice 11924 5822 8334 8527 LUT 23654 11271 16568 16761
FF 2345 2319 2342 2308
Maks. cz˛estotliwo´s´c [MHz] 80 84 115 124
Tabela 3.5: Moduł przetwarzania danych — Virtex 4 LX 200
look-up table definicja mieszany T-Box Slice 14069 6018 9566 9896 LUT 23659 11502 16304 16713
FF 4779 2396 3755 3836
Maks. cz˛estotliwo´s´c [MHz] 146 152 167 167
Tabela 3.6: Moduł przetwarzania danych — Virtex 5 LX 30
look-up table definicja mieszany T-Box Slice 2845 3161 2479 2612 LUT 9304 9172 8470 9040
FF 2304 2304 2304 2304
Maks. cz˛estotliwo´s´c [MHz] 167 166 167 167
T. Kryjak Implementacja zaawansowanych algorytmów przetwarzania, analizy i szyfrowania obrazów w układach reprogramowalnych
3.3. Sprz˛etowa implementacja algorytmu CLEFIA w układzie FPGA 34
DS
XOR
L CON
RK 0..4
RK 5..8
RK n-3..n
DS
DS
CON
XOR
XOR
XOR
K
CON
Rysunek 3.7: Schemat modułu Key Expand
3.3.8. Wnioski z implementacji sprz˛etowej algorytmu CLEFIA
Analiza wyników symulacyjnych zaprezentowanych w tabelach 3.4 i 3.5 pokazuje znaczn ˛a ró˙znic˛e w maksymalnej cz˛estotliwo´sci pracy pomi˛edzy implementacj ˛a na platform˛e Virtex II Pro 100, a Virtex 4 LX 200. Przeprowadzono badania maj ˛ace na celu wyja´snienie tego zjawiska. Przeanalizowano rezultaty pracy narz˛edzia Place & Route dla obu platform docelowych. Przykładowy wynik pokazano na rysunku 3.8. Okazało si˛e, ˙ze najdłu˙zsza ´scie˙zka krytyczna (ang. critical path) w układzie Virtex II Pro wynika naj-prawdopodobniej z mniejszej liczby lokalnie dost˛epnych zasobów poł ˛aczeniowych, które, w przypadku algorytmu wymagaj ˛acego magistrali 128-bitowej, wydaj ˛a si˛e by´c kluczowe. Wyniki testów dla układu Virtex 5 pokazuj ˛a (tabela 3.6), ˙ze opracowana pod k ˛atem aplikacji w układzie FPGA wersja “mieszana” zu˙zywa najmniej zasobów, a wszystkie wersje osi ˛agaj ˛a niemal identyczn ˛a szybko´s´c.
Virtex II Pro ścieżka krytyczna
Virtex 4
ścieżka krytyczna
Rysunek 3.8: Porównanie najdłu˙zszej ´scie˙zki krytycznej
W opublikowanej w 2011 roku pracy [140] przedstawiono alternatywn ˛a implementacj˛e algorytmów CLEFIA w układzie FPGA. Autorzy wykorzystali podej´scie iteracyjne tj. zaimplementowali jedn ˛a pełn ˛a rund˛e szyfru w dwóch wersjach. Pierwsza z nich opierała si˛e na pracy [169], w drugiej zaproponowane zostały ulepszenia w przetwarzaniu polegaj ˛ace na integracji F-Funkcji F 0 i F 1 i podzieleniu oblicze´n