Implementacja algorytmu DES
Transkrypt
Implementacja algorytmu DES
Implementacja algorytmu DES I T P W Mariusz Rawski [email protected] www.zpt.tele.pw.edu.pl/~rawski/ ZPT Mariusz Rawski 1 Algorytm DES DES (Data Encryption Standard) - jest szyfrem blokowym, o I T P W algorytmie ogólnie znanym. Dane są szyfrowane blokami o długości 64 bitów (odpowiada to 8 literom ASCII, każda zaopatrzona w bit parzystości). Blok 64 bitów tekstu jawnego podawany jest jako dane wejściowe algorytmu, wynikiem działania algorytmu jest blok 64 bitów szyfrogramu. Zarówno podczas szyfrowania, jak i deszyfrowania wykorzystuje się ten sam algorytm (za wyjątkiem różnic w operowaniu kluczem). Klucz ma długość 56 bitów. Zwykle klucz jest liczbą zapisaną za pomocą 64 bitów, przy czym każdy co ósmy bit jest bitem parzystości, który jest pomijany (tak jest, gdy klucz jest ciągiem ośmiu znaków alfabetu ASCII). Kluczem może być dowolna liczba o długości 56 bitów, która może być zmieniona w dowolnej chwili. ZPT Mariusz Rawski 2 Algorytm DES Działanie algorytmu opiera się na kombinacji dwóch I T P W podstawowych technik szyfrowania: mieszania i rozpraszania. Podstawowy blok, z którego jest zbudowany DES stanowi pojedynczą kombinację tych technik (podstawienie, za którym następuje permutacja) działającą z udziałem klucza. Ciąg tych działań nazywany jest rundą. Szyfrowanie i deszyfrowanie za wykorzystaniem algorytmu DES składa się z 16 rund. W trakcie każdej rundy dokonywane są te same obliczenia na wynikach z poprzedniej rundy i specjalnym podkluczu Ki generowanym z 64-bitowego klucza. Dodatkowo przed pierwszą i po ostatniej rundzie bity są permutowane w ustalony sposób. Algorytm wykorzystuje tylko standardową arytmetykę i operacje logiczne na liczbach o długości co najwyżej 64 bitów. ZPT Mariusz Rawski 3 Algorytm DES Po permutacji początkowej IP I T P W blok wejściowy (64-bitowy blok tekstu jawnego) jest dzielony na lewą i prawą połowę, o długości 32 bitów każda. Następnie wykonywanych jest 16 rund jednakowych operacji, nazywanych funkcjami f, w czasie których dane są łączone z kluczem. Po szesnastym cyklu lewa i prawa połowa są łączone i końcowa permutacja IP-1 będąca odwrotnością permutacji początkowej kończy przebieg algorytmu. ZPT Mariusz Rawski 4 Algorytm DES W każdym cyklu bity klucza są przesuwane, a następnie jest wybieranych 48 bitów z 56 bitów klucza. Prawa połowa bloku danych jest rozszerzana do 48 bitów za I T P W pomocą permutacji z rozszerzeniem, łączona za pomocą bitowej sumy modulo 2 z 48 bitami przesuniętego i poddanego permutacji klucza. ZPT Mariusz Rawski 5 Algorytm DES Następnie jest dokonywane podstawienie bloku 32 nowych bitów za pomocą algorytmu podstawiania, a potem jeszcze raz jest dokonywana permutacja. Te cztery operacje tworzą funkcję f. Ciąg wyjściowy funkcji f jest I T P W dalej łączony z lewą połową za pomocą bitowej sumy modulo 2. Wynikiem tych operacji jest nowa prawa połowa bloku; stara prawa połowa staje się nową lewą połową. Operacje te są powtarzane 16 razy, tworząc 16 rund algorytmu DES. ZPT Mariusz Rawski 6 Funkcja f Permutacja z rozszerzeniem Suma modulo 2 z podkluczem Skrzynki podstawieniowe z 48 bitów na 32 bity Permutacja wyjść skrzynek podstwieniowych I T P W ZPT Mariusz Rawski 7 Schemat blokowy algorytmu Sterowanie IP Runda I T P W R IP-1 Generacja podkluczy ZPT Mariusz Rawski 8 Schemat blokowy rundy algorytmu Runda S1 R K E S2 S3 S4 S5 P S6 S7 S8 L I T P W ZPT Mariusz Rawski 9 Schemat blokowy algorytmu Sterowanie IP Runda I T P W R IP-1 Generacja podkluczy ZPT Mariusz Rawski 10 Permutacja początkowa IP Dokonuje permutacji początkowej danych wejściowych składających się z 64 bitów wg podanej tabeli: 58 50 42 34 26 18 10 60 52 44 36 28 20 12 62 54 46 38 30 22 14 64 56 48 40 32 24 16 57 49 41 33 25 17 9 59 51 43 35 27 19 11 61 53 45 37 29 21 13 63 55 47 39 31 23 15 2 4 6 8 1 3 5 7 Oznacza to przestawienie kolejnych bitów danych wejściowych np. na pozycji pierwszej umieszczamy bit 58, na drugiej bit 50, a na ostatniej bit 7. Odczytanie tabeli wierszami utworzy 64 bitowy ciąg poddany operacji transpozycji. I T P W ZPT Mariusz Rawski 11 Permutacja początkowa IP Zmiana domyślnej kolejności bitów Wykorzystanie struktur języka AHDL do warunkowej generacji kodu ułatwia opis modułu 58 50 42 34 26 18 10 60 52 44 36 28 20 12 62 54 46 38 30 22 14 64 56 48 40 32 24 16 57 49 41 33 25 17 9 59 51 43 35 27 19 11 61 53 45 37 29 21 13 63 55 47 39 31 23 15 I T P W ZPT Mariusz Rawski 2 4 6 8 1 3 5 7 12 Permutacja początkowa IP Permutacja inicjujaca ** DEVICE SUMMARY ** Chip/ Input Output Bidir POF Device Pins Pins Pins iniperm EPF10K10QC208-3 64 64 0 User Pins: 64 64 0 Memory Memory Bits % Utilized 0 0 % LCs 64 LCs % Utilized 11 % Sporo, ale to tylko zamiana bitów. W końcowym układzie zostanie zrealizowana przez odpowiednie przestawianie połączeń między wejściem a następnym blokiem bez angażowania komórek I T P W ZPT Mariusz Rawski 13 Schemat blokowy algorytmu Sterowanie IP Runda I T P W R IP-1 Generacja podkluczy ZPT Mariusz Rawski 14 Multiplekser wejściowy Wybiera czy do dalszego przetwarzania pobierane są dane wejściowe, czy dane z poprzedniej rundy I T P W ZPT Mariusz Rawski 15 Multiplekser wejściowy Multiplekser wejsciowy rundy ** DEVICE SUMMARY ** Chip/ Input Output Bidir POF Device Pins Pins Pins inmux EPF10K30BC356-3 129 64 0 User Pins: 129 64 0 Memory Memory Bits % Utilized 0 0 % LCs 64 LCs % Utilized 3 % Takiego multipleksera nie da się zrobić lepiej, być może ta logika zostanie zintegrowana z inna nie wiążąc dodatkowych komórek. I T P W ZPT Mariusz Rawski 16 Schemat blokowy algorytmu Sterowanie IP Runda I T P W R IP-1 Generacja podkluczy ZPT Mariusz Rawski 17 Rejestr Zatrzaskuje dane obliczone w kolejnej rundzie I T P W ZPT Mariusz Rawski 18 Rejestr Rejestr 64-bitowy ** DEVICE SUMMARY ** Chip/ POF Device register64 EPF10K10QC208-3 User Pins: Input Output Bidir Pins Pins Pins 65 65 64 64 0 0 Memory Memory Bits % Utilized 0 0 % LCs LCs % Utilized 64 11 % Takiego rejestru także nie da się zrobić lepiej, ale z tego względu, że są to jedynie przerzutniki jest nadzieja, że zostaną one połączone z pozostałą logika bez angażowania dodatkowych zasobów I T P W ZPT Mariusz Rawski 19 Schemat blokowy algorytmu Sterowanie IP Runda I T P W R IP-1 Generacja podkluczy ZPT Mariusz Rawski 20 Permutacja odwrotna IP-1 Na wejście tego bloku podane są dane otrzymane po zakończeniu 16 rundy kodowania. 40 8 48 16 56 24 64 32 39 38 37 36 35 34 33 7 6 5 4 3 2 1 47 46 45 44 43 42 41 15 14 13 12 11 10 9 55 54 53 52 51 50 49 23 22 21 20 19 18 17 63 62 61 60 59 58 57 31 30 29 28 27 26 25 Otrzymane w ten dane stanowią zaszyfrowany ciągiem danych wejściowych. I T P W ZPT Mariusz Rawski 21 Permutacja odwrotna Wykorzystanie struktur języka AHDL do warunkowej generacji kodu ułatwia opis modułu 40 8 48 16 56 24 64 32 39 7 47 15 55 23 63 31 38 6 46 14 54 22 62 30 37 5 45 13 53 21 61 29 36 4 44 12 52 20 60 28 35 3 43 11 51 19 59 27 34 2 42 10 50 18 58 26 33 1 41 9 49 17 57 25 I T P W ZPT Mariusz Rawski 22 Permutacja odwrotna Permutacja odwrotna ** DEVICE SUMMARY ** Chip/ Input Output Bidir POF Device Pins Pins Pins invperm EPF10K10QC208-3 64 64 0 User Pins: 64 64 0 Memory Memory Bits % Utilized 0 0 % LCs 64 LCs % Utilized 11 % Sporo, ale podobnie jak w przypadku permutacji początkowej to tylko zamiana bitów. W końcowym układzie zostanie zrealizowana przez odpowiednie przestawianie połączeń między poprzednim blokiem a wyjściem bez angażowania komórek I T P W ZPT Mariusz Rawski 23 Schemat blokowy rundy algorytmu Runda S1 R K E S2 S3 S4 S5 P S6 S7 S8 L I T P W ZPT Mariusz Rawski 24 Permutacja rozszerzająca Dokonuje permutacji rozszerzonej 32 bitowej prawej połowy, aby można było wykonać operację xor z 48 bitowym podkluczem. Polega to na powieleniu niektórych bitów wejściowych na dwa wyjścia wg następującej zasady: 32 1 2 3 4 5 4 5 6 7 8 9 8 9 10 11 12 13 12 13 14 15 16 17 16 17 18 19 20 21 20 21 22 23 24 25 24 25 26 27 28 29 28 29 30 31 32 1 I T P W 48 bitowe wyjście jest dzielone na 8 ciągów o długości 6 bitów, które posłużą do adresowania 8 S-boksów. ZPT Mariusz Rawski 25 Permutacja rozszerzająca Permutacja rozszerzająca Operacja XOR z podkluczem I T P W ZPT Mariusz Rawski 26 Permutacja rozszerzająca Dane wejściowe do S-boksów ** DEVICE SUMMARY ** Chip/ Input Output Bidir POF Device Pins Pins Pins sboxin_m EPF10K10QC208-3 80 48 0 User Pins: 80 48 0 Memory Memory Bits % Utilized 0 0 % LCs 48 LCs % Utilized 8 % Tu najprawdopodobniej zostanie zużyte 48 komórek, gdyż permutacja to zwykłe przestawienie bitów, ale operacja xor będzie musiała być zrealizowana z wykorzystaniem komórek logicznych I T P W ZPT Mariusz Rawski 27 Schemat blokowy rundy algorytmu Runda S1 R K E S2 S3 S4 S5 P S6 S7 S8 L I T P W ZPT Mariusz Rawski 28 Skrzynki podstawieniowe Każda ze skrzynek S-boks przypisuje jednej z 64 6 bitowych wartości wejściowych liczbę z zakresu 0..15, a więc 4 bitową. Dla każdego S-boksu 6 bitów wejściowych określa jednoznacznie 4 bitową wartość. Z ośmiu takich wartości kolejno jest tworzony 32 bitowy ciąg, który jest przesyłany do bloku ‘p’ gdzie odbywa się jego permutacja. Z 6 bitowego ciągu, bity 1 i 6 określają numer wiersza, natomiast bity od 2 do 5 wyznaczają numer kolumny. Binarna reprezentacja liczby pod wskazanym miejscem jest przekazywana na wyjście danego S-boksu. S1 I T P W 14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 15 7 4 14 2 13 1 10 6 12 11 9 5 4 1 14 8 13 6 2 11 15 12 9 7 3 10 15 12 8 2 4 9 1 7 5 11 3 14 10 0 ZPT Mariusz Rawski 0 7 3 8 5 0 6 13 29 Skrzynki podstawieniowe Bit 1 i 6 określają wiersz pozostałe kolumny S1 14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 15 7 4 14 2 13 1 10 6 12 11 9 5 4 1 14 8 13 6 2 11 15 12 9 7 3 10 15 12 8 2 4 9 1 7 5 11 3 14 10 0 0 7 3 8 5 0 6 13 I T P W ZPT Mariusz Rawski 30 Skrzynki podstawieniowe S-box S1 ** DEVICE SUMMARY ** Chip/ POF Device s1 EPF10K10LC84-3 User Pins: Input Output Bidir Pins Pins Pins 6 4 0 6 4 0 Memory Memory Bits % Utilized 0 0 % Jeden S-box komórek… LCs 55 LCs % Utilized 9 % zajmuje wprowadza aż też tyle duże opóźnienie. I T P W ZPT Mariusz Rawski 31 Skrzynki podstawieniowe Liczba komórek Max. opóźnienie S1 S2 S3 S4 S5 S6 S7 S8 55 74 77 80 68 73 77 81 28,1 31,6 33,5 34,0 28,4 30,4 34,3 31,4 Razem 585 komórek opóźnieniem 34,3 ns. I T P W z maksymalnym To wszystko w jednej rundzie algorytmu… a rund jest 16. Wybór dotyczący budowy sekwencyjnego algorytmu DES był słuszny. Przy realizacji kombinacyjnej same skrzynki zajęły by 16 x 585 = 9360 komórek logicznych ZPT Mariusz Rawski 32 Permutacja P Runda S1 R K E S2 S3 S4 S5 P S6 S7 S8 L I T P W ZPT Mariusz Rawski 33 Permutacja P Dokonuje permutacji na kolejno zestawionych wyjściach z S-boksów wg następującego schematu: 16 29 1 5 2 32 19 22 7 12 15 18 8 27 13 11 20 28 23 31 24 3 30 4 21 17 26 10 14 9 6 25 Wynik permutacji P jest sumowany bitowo modulo 2 z lewą połową I T P W ZPT początkowego bloku 64-bitowego. Następnie lewa i prawa połowa są zamieniane miejscami i zaczyna się kolejny cykl. Po ostatniej iteracji prawa i lewa połowa słowa wynikowego nie są zamieniane miejscami, lecz zamiast tego na bloku bitów powstałych z połączenia R16L16 jest wykonywana permutacja końcowa IP-1 (stąd do deszyfrowania stosuje się też ten algorytm). Mariusz Rawski 34 Permutacja P 16 29 1 5 2 32 19 22 I T P W ZPT Mariusz Rawski 7 12 15 18 8 27 13 11 20 28 23 31 24 3 30 4 21 17 26 10 14 9 6 25 35 Permutacja P Permutacja P ** DEVICE SUMMARY ** Chip/ Input Output Bidir POF Device Pins Pins Pins pperm EPF10K10TC144-3 32 32 0 User Pins: 32 32 0 Memory Memory Bits % Utilized 0 0 % LCs 32 LCs % Utilezed 5 % Podobna sytuacja jak z innymi blokami permutującymi… I T P W ZPT Mariusz Rawski 36 Funkcja f ** DEVICE SUMMARY ** I Chip/ T POF Device P W ffunction EPF10K20RC208-3 User Pins: ZPT Input Output Bidir Pins Pins Pins 80 80 32 32 0 0 Memory Memory Bits % Utilized 0 Mariusz Rawski 0 % LCs 668 LCs % Utilized 57 % 37 Runda I T P W ** DEVICE SUMMARY ** Chip/ Input Output Bidir POF Device Pins Pins Pins desround EPF10K20RC240-3 112 64 0 User Pins: 112 64 0 Memory Memory Bits % Utilized 0 0 % ZPT Mariusz Rawski LCs LCs % Utilized 710 61 % 38 Ścieżka przepływu danych I T P W ZPT Mariusz Rawski 39 Ścieżka przepływu danych ** DEVICE SUMMARY ** Chip/ Input Output Bidir POF Device Pins Pins Pins datapath EPF10K20RC240-3 114 64 0 User Pins: 114 64 0 Memory Memory Bits % Utilized 0 0 % LCs LCs % Utilized 709 61 % Runda wymagała 710 komórek… dodanie permutacji wejściowej, wyjściowej, multipleksera i rejestru nie zwiększyło tej liczby. Jest to zgodne z naszymi przypuszczeniami. I T P W Oszacowanie szybkości działania jednej rundy jest obiecujące. ZPT Mariusz Rawski 40 Algorytm DES I T P W ZPT Mariusz Rawski 41 Algorytm DES ** DEVICE SUMMARY ** Chip/ Input Output Bidir POF Device Pins Pins Pins des EPF10K20RC240-3 123 65 0 User Pins: 123 65 0 Memory Memory Bits % Utilized 0 0 % LCs LCs % Utilized 1050 91 % Runda wymagała 710 komórek. Wraz z generacją klucza i sterowaniem dało to w sumie 1050 komórek – jest to 91 % zasobów układu FLEX10K20… nie ma co nawet myśleć o realizacji kombinacyjnej bez zmiany układu programowalnego na znacznie większy I T P W Oszacowanie maksymalnej szybkości taktowania układu dało w rezultacie 15 MHz. Jeden blok 64 bitowy przetwarzany jest w 17 taktach zegara, wiec przepustowość układu wynosi: 15 * 10 6 /17 * 64 ≅ 56 Mbitów/s i jest dość imponująca. ZPT Mariusz Rawski 42 Sterowanie I T P W ZPT Mariusz Rawski 43 Algorytm DES – jak przyspieszyć Co zrobić by układ działał szybciej Wykorzystać opcje syntezy logicznej systemu CAD do optymalizacji szybkości działania I T P W ZPT Mariusz Rawski 44 Algorytm DES – trochę szybszy ** DEVICE SUMMARY ** Chip/ Input Output Bidir POF Device Pins Pins Pins des EPF10K30RC240-3 123 65 0 User Pins: 123 65 0 Memory Memory Bits % Utilized 0 0 % LCs LCs % Utilized 1456 84 % Wymaga to wykorzystania 1456 komórek – co stanowi 84 % zasobów układu FLEX10K30… oznacza to zmianę struktury programowalnej na większą I T P W Wykorzystanie opcji syntezy logicznej pozwoliło zwiększyć maksymalną szybkości taktowania układu do 16,5 MHz. Wiec przepustowość układu wynosi: 16,5 * 10 6 /17 * 64 ≅ 62 Mbitów/s ZPT Mariusz Rawski 45 Algorytm DES – jak przyspieszyć Czy to jedyny sposób? Można wykorzystać inne narzędzia do syntezy logicznej, albo mechanizmy potokowości I T P W ZPT Mariusz Rawski 46 Dekompozycja S-boxów Każda ze skrzynek S-boks jest funkcją kombinacyjną Można ją więc zdekomponować i wykorzystać sieć bloków po dekompozycji do realizacji tych funkcji I T P W ZPT Mariusz Rawski 47 Skrzynki podstawieniowe Decomposed project: S1 ** DEVICE SUMMARY ** Chip/ Input Output Bidir POF Device Pins Pins Pins s1dek EPF10K10LC84-3 6 4 0 User Pins: 6 4 0 Memory Memory Bits % Utilized 0 0 % LCs 25 LCs % Utilized 4 % Pierwszy S-box zajmuje teraz 25 zamiast 55 ( dwukrotnie mniej !!!) wprowadza też mniejsze opóźnienie Zapowiada się ciekawie… I T P W ZPT Mariusz Rawski 48 Skrzynki podstawieniowe Liczba komórek Max. opóźnienie S1 S2 S3 S4 S5 S6 S7 S8 55 74 77 80 68 73 77 81 28,1 31,6 33,5 34,0 28,4 30,4 34,3 31,4 Po dekompozycji Liczba komórek Max. opóźnienie I T P W ZPT 25 20 22 24 25 22 23 23 19,5 17,2 16,7 19,0 19,0 19,4 17,7 17,6 Razem 184 komórki w porównaniu do 585 komórek w realizacji wcześniejszej (ponad trzykrotnie mniej) z maksymalnym opóźnieniem 19,5 ns w porównaniu do 34,3 ns. Przy realizacji kombinacyjnej skrzynki zajęłyby teraz 16 x 184 = 2944 komórki logiczne… teraz można o tym pomyśleć Mariusz Rawski 49 Funkcja f ** DEVICE SUMMARY ** I Chip/ T POF Device P W ffunction EPF10K10QC208-3 User Pins: ZPT Input Output Bidir Pins Pins Pins 80 80 32 32 0 0 Memory Memory Bits % Utilized 0 Mariusz Rawski 0 % LCs 234 LCs % Utilized 40 % 50 Algorytm DES – na nowo ** DEVICE SUMMARY ** Chip/ Input Output Bidir POF Device Pins Pins Pins des EPF10K20RC240-3 123 65 0 User Pins: 123 65 0 Memory Memory Bits % Utilized 0 0 % LCs LCs % Utilized 579 50 % Układ prawie dwukrotnie mniejszy – w sumie 579 komórek – jest to zaledwie 50 % zasobów układu FLEX10K20… można więc myśleć o stosowaniu dodatkowych metod przyspieszających działanie układu np.. potokowość Oszacowanie maksymalnej szybkości taktowania układu dało w rezultacie 25,6 MHz. I T P W Wiec przepustowość układu wynosi: 25,6 * 10 6 /17 * 64 ≅ 94 Mbitów/s i jest o wiele większa niż wcześniej ZPT Mariusz Rawski 51 Koniec projektu … I T P W ZPT Mariusz Rawski 52