10.07.2015 Views

SYMETRYCZNE SZYFRY BLOKOWE

SYMETRYCZNE SZYFRY BLOKOWE

SYMETRYCZNE SZYFRY BLOKOWE

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

OCHRONA INFORMACJIW SYSTEMACH I SIECIACHKOMPUTEROWYCH<strong>SYMETRYCZNE</strong><strong>SZYFRY</strong> <strong>BLOKOWE</strong>1


Tryby pracy szyfrów blokowychRzadko zdarza się, by tekst jawny zawierał tylko 64 bity, czyli 8znaków kodu ASCII. Zwykle więc tekst jawny dzieli się na bloki64-bitowe i stosuje się wielokrotnie ten sam algorytm dla każdegobloku z tym samym kluczem.❏ Tryb elektronicznej książki kodowej — każdy blok tekstu jawnegoM i szyfruje się tym samym kluczem K.2


Tryby pracy szyfrów blokowych❏ Tryb wiązania bloków zaszyfrowanych — gwrantuje generowanieinnych bloków kryptogramu przy tych samych tekstachjawnych. Danymi wejściowymi dla algorytmu szyfrowania jesttu XOR bloku textu jawnego i poprzedniego bloku kryptogramu.W celu wytworzenia pierwszego bloku kryptogramunależy wygenerować losowo sekwencję wp, zwaną wektorempoczątkowym, który można bez obawy przesłać za pomocąogólnie dostępnego kanału transmisyjnego.3


Tryby pracy szyfrów blokowych❏ Tryb szyfrowania ze sprzężeniem zwrotnym — w tym trybienie szyfruje się całych bloków, lecz fragmenty bloku, złożonez j bitów. W praktyce j = 1 lub j = 8. Jeśli j = 1, to szyfrujesię jednorazowo pojedyncze bity, a gdy j = 8 — pojedynczeznaki kodu ASCII.4


Algorytm DESData Encryption Standard (norma szyfrowania danych) —1977 r.❏ Symetryczny algorytm szyfrowania❏ 64-bitowy blok danych wejściowych oraz wyjściowych❏ 56-bitowy blok klucza.❏ Brak teoretycznych prac, które uzasadniałyby jego moc❏ Ponad 20 lat badań potwierdziło jego skuteczność❏ Standard dla zastosowań komercyjnych na całym świecie5


Schemat blokowy algorytmu DESWiadomośćjawna❜M64❄PermutacjapoczątkowaIP❄ 643232 K 1L 0 R 0✐+ ✛32❄f ✛ 48Permutowany ✛❤❤❤❤❤❤❤❤❤✭✭✭✭✭✭✭✭✭K 2wybór P C − 2 ✛L 1 ❄ R 1✐+ ✛ f ✛ 48❤❤❤❤❤❤❤❤❤✭✭✭✭✭✭✭✭✭L 2 R 2Permutowany ✛wybór P C − 2 ✛Klucz K❜64❄PermutowanywybórP C − 12856❄ 28❄C 0❄D 0Przesunięcie Przesunięciew lewow lewoC 1❄❄D 1Przesunięcie Przesunięciew lewow lewoC 2D 228 28K 16❄ ❄✐+ ✛ f ✛ ❄48L 16 32 32 R 16Permutowany ✛❄ 64wybór P C − 2 ✛PermutacjakońcowaIP −1Wiadomość❄64zaszyfrowana C❄C 15 ❄D 15Przesunięcie Przesunięciew lewow lewoC 16 D 166


Schemat blokowy wyznaczania wartości funkcji fR i−1❝32❄Rozszerzenie Ek❝ iR 48 48i−1∗ ✎☞✲ + ✛✍✌B 48 ❄B 1 6 B 6 6❄ 2 B❄8❄S 1 S 2 · · · S 8y 1 4 y 2 4 y 8 4❄ ❄ ❄32❄Permutacja P❄f(R i−1 , k i )7


Generowanie kluczy❏ Pobrać od użytkownika klucz 64 bitowy. Ważny klucz powinienposiadać nieparzystą liczbę jedynek w każdym bajcie, akażdy ósmy bit klucza jest traktowany jako bit kontroli parzystości.❏ Przetwarzanie klucza◗ Dokonać permutacji 64 bitów klucza zgodnie z Permutowanymwyborem PC – 1Permutowany wybór PC – 157 49 41 33 25 17 91 58 50 42 34 26 1810 2 59 51 43 35 2719 11 3 60 52 44 3663 55 47 39 31 23 157 62 54 46 38 30 2214 6 61 53 45 37 2921 13 5 28 20 12 48


Generowanie kluczy❏ Podzielić uzyskane powyżej 58 bitów klucza na dwie połowy.Pierwsza połowa, składająca się z 28 bitów nazywa się C 0 ,druga D 0 .❏ Obliczanie podkluczy K i , i = 1, 2, . . . , 16.◗ Cykliczne przesunięcie w lewo bloków podkluczyLiczba cyklicznych przesunięć w lewobloków podkluczyw zależności od numeru iteracjii 1 2 3 4 5 6 7 8lpc 1 1 2 2 2 2 2 2i 9 10 11 12 13 14 15 16lpc 1 2 2 2 2 2 2 19


Generowanie kluczy❏ Połączenie bloków C i i D i w 56 bitowy blok C i D i❏ Otrzymany, 56 bitowy blok C i D i przetwarzać zgodnie z tabeląPermutowany wybór PC – 2,Permutowany wybór PC – 214 17 11 24 1 5 3 2815 6 21 10 23 19 12 426 8 16 7 27 20 13 241 52 31 37 47 55 30 4051 45 33 48 44 49 39 5634 53 46 42 50 36 29 32❏ Po wykonaniu tej czynności otrzyma się klucz dla i-tej iteracjiK i .❏ Zwiększyć i o 1.10


Przetwarzanie 64-bitowego bloku tekstu jawnego❏ Pobrać od użytkownika 64-bitowy blok tekstu jawnego. Jeśliblok jest krótszy, należy go odpowiednio uzupełnić do 64 bitów.❏ Bity bloku tekstu jawnego poddać permutacji początkowej IPPermutacja początkowa IP58 50 42 34 26 18 10 260 52 44 36 28 20 12 462 54 46 38 30 22 14 664 56 48 40 32 24 16 857 49 41 33 25 17 9 159 51 43 35 27 19 11 361 53 45 37 29 21 13 563 55 47 39 31 23 15 7❏ Podzielić blok tekstu jawnego na dwie połowy i oznaczyć połowę,zawierającą pierwsze 32 bity tekstu jawnego symbolemL 0 , zaś drugą połowę symbolem R 0 .11


Przetwarzanie 64-bitowego bloku tekstu jawnego❏ Przetwarzać blok tekstu jawnego stosując 16 podkluczy.◗ Rozszerzyć 32-bitowy blok R i−1z funkcją wyboru E.Funkcja wyboru E32 1 2 3 4 54 5 6 7 8 98 9 10 11 12 1312 13 14 15 16 1716 17 18 19 20 2120 21 22 23 24 2524 25 26 27 28 2928 29 30 31 32 1do 48 bitów zgodnie◗ Uzyskany w poprzednim kroku 48-bitowy blok E(R i−1 )dodać modulo 2 do podklucza K i .12


Przetwarzanie 64-bitowego bloku tekstu jawnego❏ Przetwarzać blok tekstu jawnego stosując 16 podkluczy (cd)◗ Rozdzielić blok, otrzymany w wyniku przetwarzania w poprzednimkroku, czyli E(R i−1 ) XOR K i na osiem 6-bitowych bloków B 1 – B 8 w taki sposób, że bity 1-6 blokuE(R i−1 ) XOR K i tworzą blok B 1 , bity 7-12 blok B 2 ,i na koniec bity 43-48 blok B 8◗ Obliczanie wartości wszystkich funkcji podstawienia S j ,j = 1, 2, . . . , 8 w zależności od konfigurcji bitów w blokachB j . Wartościami tych funkcji są bloki 4-bitowe. Przyjąćj = 1.◗ Jeśli B j = b 1 b 2 b 3 b 4 b 5 b 6 , to liczba binarna b 1 b 6 , odpowiadającaliczbie systemu dziesiątkowego m, wskazuje numerwiersza (od 0 do 3), który należy uwzględnić przy obliczaniuwartości funkcji S j , zaś liczba binarna b 2 b 3 b 4 b 5 , odpowiadającaliczbie systemu dziesiątkowego n, wskazujenumer kolumny (od 0 do 15), brany pod uwagę podczasobliczania wartości tej funkcji.13


Przetwarzanie 64-bitowego bloku tekstu jawnego❏ Funkcje podstawieniowe S j :S 1 : 14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 70 15 7 4 14 2 13 1 10 6 12 11 9 5 3 84 1 14 8 13 6 2 11 15 12 9 7 3 10 5 015 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13S 2 : 15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 103 13 4 7 15 2 8 14 12 0 1 10 6 9 11 50 14 7 11 10 4 13 1 5 8 12 6 9 3 2 1513 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9S 3 : 10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 813 7 0 9 3 4 6 10 2 8 5 14 12 11 15 113 6 4 9 8 15 3 0 11 1 2 12 5 10 14 71 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12S 4 : 7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 1513 8 11 5 6 15 0 3 4 7 2 12 1 10 14 910 6 9 0 12 11 7 13 15 1 3 14 5 2 8 43 15 0 6 10 1 13 8 9 4 5 11 12 7 2 1414


Przetwarzanie 64-bitowego bloku tekstu jawnego❏ Funkcje podstawieniowe S j :S 5 : 2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 914 11 2 12 4 7 13 1 5 0 15 10 3 9 8 64 2 1 11 10 13 7 8 15 9 12 5 6 3 0 1411 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3S 6 : 12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 1110 15 4 2 7 12 9 5 6 1 13 14 0 11 3 89 14 15 5 2 8 12 3 7 0 4 10 1 13 11 64 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13S 7 : 4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 113 0 11 7 4 9 1 10 14 3 5 12 2 15 8 61 4 11 13 12 3 7 14 10 15 6 8 0 5 9 26 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12S 8 : 13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 71 15 13 8 10 3 7 4 12 5 6 11 0 14 9 27 11 4 1 9 12 14 2 0 6 10 13 15 3 5 82 1 14 7 4 10 8 13 15 12 9 0 3 5 6 1115


Przetwarzanie 64-bitowego bloku tekstu jawnego❏ Przetwarzać blok tekstu jawnego stosując 16 podkluczy (cd)◗ Przyjmując, że y j = S j (B j ), dla obliczonych w poprzednimkroku wartości m i n wyznacza się tę wartość jakoliczbę binarną, odpowiadającą liczbie dziesiątkowej, leżącejna przecięciu wiersza m i kolumny n tabel, definiującychfunkcje podstawienia S j .◗ Wykonać permutację P na bloku bitów y 1 y 2 · · · y 8 .Permutacja P16 7 20 21 29 12 28 171 15 23 26 5 18 31 102 8 24 14 32 27 3 919 13 30 6 22 11 4 2516


Przetwarzanie 64-bitowego bloku tekstu jawnego❏ Przetwarzać blok tekstu jawnego stosując 16 podkluczy (cd)◗ Dodać modulo 2 otrzymany w poprzednim kroku blok 32-bitowy do bloku L i−1 . W wyniku tej operacji otrzyma sięblok R i = L i−1 XOR f(R i−1 , K i ).◗ Dokonać operacji podstawienia L i = R i−1 . Zwiększyć i o1❏ dokonać permutacji końcowej IP −1 bloku L 16 R 16 .Permutacja końcowa IP −140 8 48 16 56 24 64 3239 7 47 15 55 23 63 3138 6 46 14 54 22 62 3037 5 45 13 53 21 61 2936 4 44 12 52 20 60 2835 3 43 11 51 19 59 2734 2 42 10 50 18 58 2633 1 41 9 49 17 57 2517


Procedura deszyfrowaniaOpisany algorytm dotyczy procedury szyfrowania tekstu jawnegow postaci bloku 64-bitowego. W procesie deszyfrowania stosujesię ten sam algorytm, ale używa się kluczy w odwrotnej kolejności,czyli najpierw K 16 , a na końcu K 1 .18


Rozszerzenia algorytmu DESOpracowano kilka modyfikacji algorytmu DES:❏ Trzykrotny DES◗ Zastosowanie dwóch kluczy K 1 i K 2◗ Algorytm szyfrowania przebiega zgodnie z równaniem:C = DES K1 (DES −1K 2(DES K1 (M)))◗ Algorytm deszyfrowania odpowiada równaniu:M = DES −1K 1(DES K2 (DES −1K 1(C)))19


Rozszerzenia algorytmu DES❏ DESX◗ Zastosowanie trzech kluczy K zew , K wew , K DES , algorytmuDES i operacji XOR◗ Pierwsze dwa klucze są blokami 64-bitowymi◗ Algorytm szyfrowania przebiega zgodnie z równaniem:C = K zew XOR DES KDES (M XOR K wew )◗ Algorytm deszyfrowania odpowiada równaniu:M = K wew XOR DES −1K DES(C XOR K zew )◗ Nawet wynaleziona niedawno tzw. kryptoanaliza różnicowawymaga wypróbowania około 2 120 = 10 36 kluczy dlazłamania szyfru DESX.20


Algorytm IDEAInternational Data Encryption Algorithm (międzynarodowystandard szyfrowania danych)❏ algorytm stworzony przez Xuei Lai oraz Jamesa L. Masseyaze Szwajcarskiego Instytutu Technologii❏ 64-bitowy blok danych wejściowych oraz wyjściowych❏ 128-bitowy blok kluczaAlgorytm IDEA stosuje następujące trzy operacje, łatwo realizowalnesprzętowo i programowo na blokach 16-bitowych, dlategoteż jest realizowany bardzo efektywnie na procesorach 16-bitowych.❏ dodawanie modulo 2 (symbol ⊕),❏ dodawanie modulo 2 16 z pominięciem przeniesień (symbol ⊞),❏ mnożenie modulo 2 16 +1 z pominięciem przeniesień (symbol⊙).21


Schemat blokowy algorytmu IDEAX 1 X 2 X 3 X 4 Na wejście algorytmu podaje sięZ (1) ✲❄ ❤· + + ❤·1 Z (1) ✲❄2 ✲ ❤+ ✛ Z (1) ✲❄3 Z (1) ✲❄ 4 16-bitowe podbloki bloku tekstujawnego X 1 , X 2 , X 3 i X 4 .4 ✲ ❤+ ✛Z (1) ✲❄ ❄Te cztery podbloki stanowiące wejściedla 1. cyklu przetwarzania (ta-❤· ✲+5❄+ ✛❄ ❤· ✛ Z (1)kich cykli jest 8), poddawane są❄6❤+ ✛❄ ✲❄ ❤+❤+ ✛ ✲❄ 14 operacjom z 6 blokami podkluczy.Po zamianie miejscami dwóch❤❤❤❤❤❤❤❤❤✭✭✭✭✭✭✭✭✭❤+wewnętrznych podbloków, otrzymanychpo 1. cyklu przetwarzania,❄❄ ❄ ❄uzyskuje się blok wejściowy dla drugiegocyklu. Po ósmym cyklu wy-❤❤❤❤❤❤❤❤❤✭✭✭✭✭✭✭✭✭Z (9) ✲❄ ❤· ✲+ + ❤·1 Z (9) ❄✲2Z (9) ❄✲3 Z (9) ❄ konywane jest przekształcenie końcowe,po którym nie zamienia się4❄ ❄ ❄ ❄Y 1 Y 2 Y 3 Y 4 miejscami wewnętrznych bloków.22


Generowanie kluczy algorytmu IDEAIDEA wymaga 52 podbloków klucza: po 6 dla kałdego cyklu algorytmuoraz 4 podbloki klucza dla przekształcenia końcowego.Zasada generowania 16-bitowych bloków podkluczy jest następująca:❏ 128 bitów klucza dzieli się na 8 podkluczy: 6 dla rozpoczęciapierwszego cyklu iteracji, zostawiając pozostałe dwa podkluczedla iteracji drugiej.❏ Następnie klucz przesuwa się cyklicznie 25 bitów w lewo, dzieliponownie na 8 16-bitowych podkluczy, otrzymując 4 pozostałepodklucze dla drugiego cyklu i 4 podklucze dla cyklutrzeciego.❏ Procedurę tą powtarza się aż do uzyskania wszystkich potrzebnychkluczy.23


Generowanie kluczy algorytmu IDEAPodczas deszyfrowania stosuje się dokładnie ten sam algorytm,ale przy zupełnie innych blokach podkluczy. Przy obliczaniu podkluczydla operacji deszyfrowania należy stosować odwrotnościmultyplikatywne lub odwrotności addytywne pokluczy szyfrujących.Np. odwrotność multyplikatywną podklucza szyfrującegoZ (1)1 oznacza się symbolem Z (1)−11 , a odwrotność addytywną symbolem-Z (1)1 , przy czym zakłada się, że 0 −1 = 0. Tak więcZ (1)1 · Z (1)−11 ≡ 1 (mod 2 16 + 1),Z (1)1 + (−Z (1)1 ) ≡ 0 (mod 2 16 )).24


Generowanie kluczy algorytmu IDEAPodklucze szyfujące i deszyfujące dla algorytmu IDEAcykl klucz szyfrujący klucz deszyfrujący1 Z (1)1 Z (1)2 Z (1)3 Z (1)4 Z (1)5 Z (1)6 Z (9)−11 − Z (9)2 − Z (9)3 Z (9)−14 Z (8)5 Z (8)62 Z (2)1 Z (2)2 Z (2)3 Z (2)4 Z (2)5 Z (2)6 Z (8)−11 − Z (8)3 − Z (8)2 Z (8)−14 Z (7)5 Z (7)63 Z (3)1 Z (3)2 Z (3)3 Z (3)4 Z (3)5 Z (3)6 Z (7)−11 − Z (7)3 − Z (7)2 Z (7)−14 Z (6)5 Z (6)64 Z (4)1 Z (4)2 Z (4)3 Z (4)4 Z (4)5 Z (4)6 Z (6)−11 − Z (6)3 − Z (6)2 Z (6)−14 Z (5)5 Z (5)65 Z (5)1 Z (5)2 Z (5)3 Z (5)4 Z (5)5 Z (5)6 Z (5)−11 − Z (5)3 − Z (5)2 Z (5)−14 Z (4)5 Z (4)66 Z (6)1 Z (6)2 Z (6)3 Z (6)4 Z (6)5 Z (6)6 Z (4)−11 − Z (4)3 − Z (4)2 Z (4)−14 Z (3)5 Z (3)67 Z (7)1 Z (7)2 Z (7)3 Z (7)4 Z (7)5 Z (7)6 Z (3)−11 − Z (3)3 − Z (3)2 Z (3)−13 Z (2)5 Z (2)68 Z (8)1 Z (8)2 Z (8)3 Z (8)4 Z (8)5 Z (8)6 Z (2)−11 − Z (2)2 − Z (2)2 Z (2)−13 Z (1)5 Z (1)6pk Z (9)1 Z (9)2 Z (9)3 Z (9)4 Z (1)−11 − Z (1)2 − Z (1)3 Z (1)−14pk – przekształcenie końcowe25


Cechy algorytmu IDEA❏ Realizacja sprzętowa algorytmu IDEA jest prawie tak samoszybka, jak algorytmu DES (50 – 200 Mbit/s). Na szybkichprocesorach Pentium algorytmem IDEA można szyfrować danez szybkością rzędu MB/s.❏ Algorytm IDEA można stosowaś w takich samych trybach pracyjak algorytm DES.Algorytm RIJNDAEL (AES)Advanced Encryption Algorithm (zaawansowany standardszyfrowania danych)❏ algorytm stworzony przez Joana Daemena i Vincenta Rijmena❏ 128-bitowy blok danych wejściowych oraz wyjściowych❏ 128-, 192- lub 256-bitowy blok klucza26


Operacje matematyczne szyfru AESWiele operacji algorytmu RIJNDAEL wykonywanych jest na elementachciała skończonego GF (2 8 ), opisanych w postaci liczbybinarnej lub wielomianuLiczba 8-bitowa b, złożona z bitów b 0 b 1 b 2 b 3 b 4 b 5 b 6 b 7 , możebyć przedstawiona jako wielomianb 7 x 7 + b 6 x 6 + b 5 x 5 + b 4 x 4 + b 3 x 3 + b 2 x 2 + b 1 x 1 + b 0 .Na przykład liczba dziesiętna 87 (szesnastkowo 57, binarnie01010111) może być przedstawiona w postaci wielomianux 6 + x 4 + x 2 + x + 1.Inne operacje zdefiniowane są na 4-bajtowych słowach.27


Operacje matematyczne szyfru AES❏ Dodawanie. Sumą dwóch wielomianów jest wielomian otrzymanypoprzez zsumowanie modulo 2 odpowiadających sobiewspółczynników dwóch składników.Na przykład: 57 + 83 = D4, lub w notacji wielomianowej:(x 6 + x 4 + x 2 + x + 1) + (x 7 + x + 1) = x 7 + x 6 + x 4 + x 2W binarnej notacji, operacja ta może być zrealizowana za pomocąfunkcji XOR (⊕).28


Operacje matematyczne szyfru AES❏ Mnożenie. W wielomianowej notacji, mnożenie w GF (2 8 )odpowiada mnożeniu wielomianów modulo m(x), przy czymm(x) oznacza nierozkładalny binarny wielomian stopnia 8.W przypadku szyfru RIJNDAEL wielomian m(x) ma postaćx 8 + x 4 + x 3 + x + 1,lub szesnastkowo 11B.Na przykład: 57 · 83 = C1, lub(x 6 + x 4 + x 2 + x + 1) · (x 7 + x + 1) =(x 13 + x 11 + x 9 + x 8 + x 6 + x 5 + x 4 + x 3 + x 1 )(mod x 8 + x 4 + x 3 + x + 1) =x 7 + x 6 + 129


Operacje matematyczne szyfru AES❏ Mnożenie przez x. Mnożenie wielomianu b(x) przez xb 7 x 8 +b 6 x 7 +b 5 x 6 +b 4 x 5 +b 3 x 4 +b 2 x 3 +b 1 x 2 +b 0 x(mod m(x))może być łatwo zrealizowane na poziomie binarnym, poprzezprzesunięcie w lewo o jeden bit, a następnie redukcję modulom(x) (xor 1B), jeśli b 8 = 1. Operacja ta realizowana jest wpostaci funkcji b = xtime(a).Mnożenie przez wyższe potęgi x może być zrealizowane poprzezwielokrotne użycie funkcji xtime.Na przykład: 57 · 13 = FE, gdyż57·02=xtime(57)=AE57·04=xtime(AE)=4757·08=xtime(47)=8E57·10=xtime(8E)=0757·13=57·(01 ⊕ 02 ⊕ 10) = 57 ⊕ AE ⊕ 07=FE30


Operacje matematyczne szyfru AES❏ Wielomiany nad GF (2 8 ). Czterobajtowy wektor można zapisaćw postaci wielomianu stopnia mniejszego niż 4.◗ Dodawanie wielomianów nad GF (2 8 ) może być zrealizowanepoprzez dodanie poszczególnych współczynnikówtych wielomianów.◗ Mnożenie wielomianów można zrealizować nastpująco:a(x) = a 3 x 3 + a 2 x 2 + a 1 x + a 0 i b(x) = b 3 x 3 + b 2 x 2 + b 1 x + b 0c(x) = a(x)b(x) = c 6 x 6 + c 5 x 5 + c 4 x 4 + c 3 x 3 + c 2 x 2 + c 1 x + a 0 xc 0 = a 0 · b 0 c 1 = a 1 · b 0 ⊕ a 0 · b 1 c 2 = a 2 · b 0 ⊕ a 1 · b 1 ⊕ a 0 · b 2c 3 = a 3 · b 0 ⊕ a 2 · b 1 ⊕ a 1 · b 2 ⊕ a 0 · b 3c 4 = a 3 · b 1 ⊕ a 2 · b 2 ⊕ a 1 · b 3 c 5 = a 3 · b 2 ⊕ a 2 · b 3 c 6 = a 3 · b 3Redukcja wielomianu c(x) do wielomianu stopnia conajwyżej3 wykonywana jest poprzez operację modulo M(x),przy czymM(x) = x 4 + 1.31


Operacje matematyczne szyfru AES❏ Wielomiany nad GF (2 8 ) (cd)Jeślix j (mod x 4 + 1) = x j mod 4 ,to modularny iloczyn wielomianów a(x) oraz b(x) oblicza sięz zależnościd(x) = a(x) ⊗ b(x) d(x) = d 3 x 3 + d 2 x 2 + d 1 x + d 0d 0 = a 0 · b 0 ⊕ a 3 · b 1 ⊕ a 2 · b 2 ⊕ a 1 · b 3d 1 = a 1 · b 0 ⊕ a 0 · b 1 ⊕ a 3 · b 2 ⊕ a 2 · b 3d 2 = a 2 · b 0 ⊕ a 1 · b 1 ⊕ a 0 · b 2 ⊕ a 3 · b 3d 3 = a 3 · b 0 ⊕ a 2 · b 1 ⊕ a 1 · b 2 ⊕ a 0 · b 3Operacje ta mozna zapisać macierzowo⎡⎢⎣⎤d 0d 1⎥d 2d 3⎡⎦ = ⎢⎣⎤a 0 a 3 a 2 a 1a 1 a 0 a 3 a 2⎥a 2 a 1 a 0 a 3 ⎦a 3 a 2 a 1 a 0⎡⎢⎣⎤b 0b 1⎥b 2 ⎦ .b 332


Operacje matematyczne szyfru AES❏ Wielomiany nad GF (2 8 )Mnożenie przez xMnożąc wielomian b(x) przez x otrzymuje sięb 3 x 4 + b 2 x 3 + b 1 x 2 + b 0 xx⊗b(x) otrzymuje się poprzez redukcję powyższego wielomianuprzez M(x) = x 4 + 1. W efekcie otrzymuje się wielomianc(x)⎡⎢⎣⎤c 0c 1⎥c 2c 3⎡⎦ = ⎢⎣00 00 00 0101 00 00 0000 01 00 0000 00 01 00⎤ ⎡⎥ ⎢⎦ ⎣⎤b 0b 1⎥b 2 ⎦ .b 333


Stan szyfru AESStanem algorytmu RIJNDAEL nazywa się prostokątną macierzbajtów, stanowiącą bieżący wynik działania algorytmu szyfrującego.Wszystkie operacje podczas wykonywania realizowane są namacierzy stanu, a jako wynik, zwracają kolejną macierz stanu.Stan może być przedstawiony jako macierz prostokątna o czterechwierszach. Liczba kolumn określona jest parametrem Nb, i równajest długości bloku wejściowego podzielonego przez 32. Każdakolumna stanu może być potraktowana jako zbiór niezależnychczterech wartości typu Byte lub czterobajtowe słowo.Stanem klucza jest taka sama macierz, przy czym liczba kolumnuzależniona jest od parametru Nk, równej długości klucza podzielonegona 32.Macierz stanu o wymiarach i × j, można przedstawić w postacijednowymiarowego wektora Nb (lub Nk) 4-bajtowych słów,w którym przez n można określić indeks n-tego słowa, zatemi = n mod 4; j = ⌊n/3; ⌋ n = i + 4 ∗ j.34


Rundy szyfru AESLiczba rund algorytmu Rijndael, zależy od rozmiaru klucza orazbloku tekstu jawnego, i przedstawiona jest w poniższej tabeli:Nr Nb=4 Nb=6 Nb=8Nk=4 10 12 14Nk=6 12 12 14Nk=8 14 14 1435


Realizacja rundy w algorytmie AESOperacja, realizowana w poszczególnych rundach wygląda następującoRound(State, RoundKey) {ByteSub(State);ShiftRow(State);MixColumn(State);AddRoundKey(State, RoundKey);}Runda końcowa realizowana jest następująco:FinalRound(State, RoundKey) {ByteSub(State);ShiftRow(State);AddRoundKey(State, RoundKey);}36


Realizacja rundy w algorytmie AESTransformacja ByteSub realizowana jest nieależnie na każdymbajcie stanu szyfru, w podany niżej sposób:❏ Oblicza się odwrotność multyplikatywną w GF (2 8 ). Wartość0 mapowana jest na siebie.❏ Nastęnie oblicza się przekształcenie afiniczne bajtu zapisanegow postaci wektora bitów⎡⎢⎣⎤y 0y 1y 2y 3y 4y 5⎥y 6 ⎦y 7=⎡⎢⎣1 0 0 0 1 1 1 11 1 0 0 0 1 1 11 1 1 0 0 0 1 11 1 1 1 0 0 0 11 1 1 1 1 0 0 00 1 1 1 1 1 0 00 0 1 1 1 1 1 00 0 0 1 1 1 1 1⎤ ⎡⎥ ⎢⎦ ⎣⎤x 0x 1x 2x 3x 4x 5⎥x 6 ⎦x 7+⎡⎢⎣11000110⎤⎥⎦. (1)Operację odwrotną realizuje się obliczając odwrotność multyplikatywnąwyniku odwrotnego przekształcenia afinicznego.37


Realizacja rundy w algorytmie AESTransformacja ShiftRow polega na cyklicznym przesuwaniu w lewoposzczególnych wierszy macierzy stanu. Rozmiar przesunięćzależy od parametru Nb, co przedstawia następująca tabela:Nb=4 Nb=6 Nb=8C 0 0 0 0C 1 1 1 1C 2 1 2 3C 3 1 3 438


Realizacja rundy w algorytmie AESTransformacja MixColumn realizowana jest na poszczególnychkolumnach macierzy stanu, i polega na pomnożeniu kolumny zapisanejw postaci wielomianu przez wielomian c(x) modulo x 4 +1,przy czymc(x) = ’03’x 3 + ’01’x 2 + ’01’x + ’02’.Operację tą można zapisać w postaci macierzowej⎡⎢⎣⎤b 0b 1⎥b 2b 3⎡= ⎢⎦ ⎣02 03 01 0101 02 03 0101 01 02 0303 01 01 02⎤ ⎡⎥ ⎢⎦ ⎣⎤a 0a 1⎥a .2 ⎦a 3W operacji odwrotnej wielomian c(x) zastępuje się wielomianemd(x)d(x) = ’0B’x 3 + ’0D’x 2 + ’09’x + ’0E’,taki, żec(x) ⊗ d(x) = ’01’.39


Realizacja rundy w algorytmie AESTransformacja AddRoundKey polega na zsumowaniu modulo 2poszczególnych bajtów stanu oraz klucza rundy.Operacja AddRoundKey jest samoodwrotna.Generowanie kluczy❏ Całkowita liczba bitów kluczy rund równa jest długości blokupomnożonej przez liczbę rund powiększoną o 1. Np. dla szyfruo długości 128, potrzeba 1408 bitów kluczy rund. Klucze tegenerowane są na podstawie klucza szyfru.❏ Klucz szyfru rozszerzany jest do tzw. rozszerzonego klucza(Extended Key).❏ Klucze kolejnych rund stanowią kolejne fragmenty rozszerzonegoklucza.40


Generowanie kluczyRozszerzony klucz stanowi jednowimiarową tablicę czterobajtowychsłów W [Nb ∗ (Nr + 1)]. Pierwsze Nk słów zawiera kluczrozszerzony. Wszystkie kolejne słowa wyznaczane są rekurencyjnie,zgodnie z funkcją:Dla Nk 6 operacja rozszerzenia klucza wygląda następująco:KeyExpansion(byte Key[4*Nk] word W[Nb*(Nr+1)]) {for(i=0;i


Generowanie kluczyDla Nk > 6 operacja rozszerzania klucza wygląda następująco:KeyExpansion(byte Key[4*Nk] word W[Nb*(Nr+1)]) {for(i=0;i


Algorytm RIJNDAELProcedura szyfrująca algorytmu Rijndael przedstawia się następująco:Rijndael(State,CipherKey) {KeyExpansion(CipherKey,ExpandedKey) ;AddRoundKey(State,ExpandedKey);For(i=1;i

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!