OCHRONA INFORMACJI W SYSTEMACH I SIECIACH KOMPUTEROWYCH SYMETRYCZNE SZYFRY BLOKOWE

Podobne dokumenty
Rijndael szyfr blokowy

2 Kryptografia: algorytmy symetryczne

PROBLEMATYKA BEZPIECZEŃSTWA SIECI RADIOWYCH Algorytm szyfrowania AES. Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

PROBLEMATYKA BEZPIECZEŃSTWA SIECI RADIOWYCH Algorytm szyfrowania AES. Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

I N P U T 128 lub 192 lub 256. K L U C Z 128 lub 192 lub 256 A E S RIJNDAEL. O U T P U T 128 lub 192 lub 256

Bezpieczeństwo systemów komputerowych. Algorytmy kryptograficzne (1) Algorytmy kryptograficzne. Algorytmy kryptograficzne BSK_2003

1.1. Standard szyfrowania DES

Wykład 5. Podwójny algorytm DES. Podwójny algorytm DES. Podwójny algorytm DES. Podwójny algorytm DES. Podwójny algorytm DES

INŻYNIERIA BEZPIECZEŃSTWA LABORATORIUM NR 2 ALGORYTM XOR ŁAMANIE ALGORYTMU XOR

Zarys algorytmów kryptograficznych

CAST, 3DES, GOST, IDEA, RC2, RC4,

Zadanie 1. Zmiana systemów. Zadanie 2. Szyfr Cezara. Zadanie 3. Czy liczba jest doskonała. Zadanie 4. Rozkład liczby na czynniki pierwsze Zadanie 5.

1. Maszyny rotorowe Enigma

Wykład 4 Temat: Algorytm symetryczny Twofish: cele projektowane, budowa bloków, opis algorytmu, wydajność algorytmu.

Implementacja algorytmu DES

Szyfry kaskadowe. permutacyjnej (SPP).

n = p q, (2.2) przy czym p i q losowe duże liczby pierwsze.

Szyfry kaskadowe. Szyfry kaskadowe

Luty 2001 Algorytmy (7) 2000/2001

Algorytmy i struktury danych. Wykład 4

5. Rozwiązywanie układów równań liniowych

Szyfrowanie informacji

Zamiana porcji informacji w taki sposób, iż jest ona niemożliwa do odczytania dla osoby postronnej. Tak zmienione dane nazywamy zaszyfrowanymi.

Rozdział 4. Macierze szyfrujące. 4.1 Algebra liniowa modulo 26

Kryptografia. z elementami kryptografii kwantowej. Ryszard Tanaś Wykład 8

Kryptografia. z elementami kryptografii kwantowej. Ryszard Tanaś Wykład 7

Metody szyfrowania danych

Laboratorium ochrony danych

Kryptografia systemy z kluczem tajnym. Kryptografia systemy z kluczem tajnym

Architektury akceleratorów kryptograficznych opartych o układy programowalne. Marcin Rogawski

Macierze. Rozdział Działania na macierzach

Rozwiązywanie układów równań liniowych metody dokładne Materiały pomocnicze do ćwiczeń z metod numerycznych

Bezpieczeństwo systemów komputerowych

Algorytmy podstawieniowe

Algorytmy asymetryczne

ARYTMETYKA BINARNA. Dziesiątkowy system pozycyjny nie jest jedynym sposobem kodowania liczb z jakim mamy na co dzień do czynienia.

DYDAKTYKA ZAGADNIENIA CYFROWE ZAGADNIENIA CYFROWE

Uniwersytet Kazimierza Wielkiego w Bydgoszczy Zespół Szkół nr 5 Mistrzostwa Sportowego XV Liceum Ogólnokształcące w Bydgoszczy

Bezpieczeństwo systemów komputerowych. Algorytmy kryptograficzne. Algorytmy kryptograficzne (1) Algorytmy kryptograficzne. Szyfry przestawieniowe

0 + 0 = 0, = 1, = 1, = 0.

Bezpieczeństwo danych i systemów informatycznych. Wykład 5

Techniki multimedialne

Rozdział 5. Macierze. a 11 a a 1m a 21 a a 2m... a n1 a n2... a nm

Kodowanie i kompresja Streszczenie Studia dzienne Wykład 6

Samodzielnie wykonaj następujące operacje: 13 / 2 = 30 / 5 = 73 / 15 = 15 / 23 = 13 % 2 = 30 % 5 = 73 % 15 = 15 % 23 =

Systemy liczbowe używane w technice komputerowej

Bezpieczeństwo systemów komputerowych. Metody łamania szyfrów. Kryptoanaliza. Badane własności. Cel. Kryptoanaliza - szyfry przestawieniowe.

Bezpieczeństwo systemów komputerowych. Kryptoanaliza. Metody łamania szyfrów. Cel BSK_2003. Copyright by K.Trybicka-Francik 1

L6.1 Systemy liczenia stosowane w informatyce

Arytmetyka. Arytmetyka. Magdalena Lemańska. Magdalena Lemańska,

Wykład VIII. Systemy kryptograficzne Kierunek Matematyka - semestr IV. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Załóżmy, że musimy zapakować plecak na wycieczkę. Plecak ma pojemność S. Przedmioty mają objętości,,...,, których suma jest większa od S.

1.1. Pozycyjne systemy liczbowe

Kryptografia-0. przykład ze starożytności: około 489 r. p.n.e. niewidzialny atrament (pisze o nim Pliniusz Starszy I wiek n.e.)

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

Znaki w tym systemie odpowiadają następującym liczbom: I=1, V=5, X=10, L=50, C=100, D=500, M=1000

Systemy zapisu liczb.

0 --> 5, 1 --> 7, 2 --> 9, 3 -->1, 4 --> 3, 5 --> 5, 6 --> 7, 7 --> 9, 8 --> 1, 9 --> 3.

Macierze - obliczanie wyznacznika macierzy z użyciem permutacji

0.1 Pierścienie wielomianów

Podstawy systemów kryptograficznych z kluczem jawnym RSA

Ataki na RSA. Andrzej Chmielowiec. Centrum Modelowania Matematycznego Sigma. Ataki na RSA p. 1

Detekcja i korekcja błędów w transmisji cyfrowej

W11 Kody nadmiarowe, zastosowania w transmisji danych

Implementacja algorytmu szyfrującego

Przykładowe pytania DSP 1

Wstęp do informatyki- wykład 1 Systemy liczbowe

Sieci Komputerowe Mechanizmy kontroli błędów w sieciach

Ćwiczenie nr 3. Wyświetlanie i wczytywanie danych

Bezpieczeństwo systemów i sieci komputerowych

1. Operacje logiczne A B A OR B

3. Macierze i Układy Równań Liniowych

Met Me ody numer yczne Wykład ykład Dr inż. Mic hał ha Łanc Łan zon Instyt Ins ut Elektr Elektr echn iki echn i Elektrot Elektr echn olo echn

Mikrooperacje. Mikrooperacje arytmetyczne

Arytmetyka liczb binarnych

Arytmetyka komputera. Na podstawie podręcznika Urządzenia techniki komputerowej Tomasza Marciniuka. Opracował: Kamil Kowalski klasa III TI

Metoda eliminacji Gaussa. Autorzy: Michał Góra

ROZPRAWA DOKTORSKA. Wydziaª Elektroniki Politechnika Wrocªawska. Metody ochrony przed kryptoanaliz z uszkodzeniami. mgr. in».

Zadanie 1. Test (6 pkt) Zaznacz znakiem X w odpowiedniej kolumnie P lub F, która odpowiedź jest prawdziwa, a która fałszywa.

Zapis liczb binarnych ze znakiem

Kryptografia na procesorach wielordzeniowych

Przedmiot: Urządzenia techniki komputerowej Nauczyciel: Mirosław Ruciński

Podstawy OpenCL część 2

Zadania do wykonania. Rozwiązując poniższe zadania użyj pętlę for.

9 10 = U1. Przykład dla liczby dziesiętnej ( 9): negacja 1001= =10110 U1. Podsumowując: w zapisie dziesiętnym

Zaawansowane algorytmy i struktury danych

Wstęp do informatyki- wykład 1

Algorytmy i struktury danych

UKŁADY ALGEBRAICZNYCH RÓWNAŃ LINIOWYCH

Pracownia Komputerowa wykład V

Matematyka dyskretna. Andrzej Łachwa, UJ, /10

KRYPTOANALIZA. Opracowanie wewnętrzne Instytutu Informatyki Gliwice, 1999

Authenticated Encryption

Algorytmy podstawieniowe

Systemy liczenia. 333= 3*100+3*10+3*1

DZIESIĘTNY SYSTEM LICZBOWY

WSIZ Copernicus we Wrocławiu

a) Zapisz wynik działania powyższego algorytmu dla słów ARKA i MOTOR...

KOŁO MATEMATYCZNE LUB INFORMATYCZNE - klasa III gimnazjum, I LO

Wykład 2. Informatyka Stosowana. 9 października Informatyka Stosowana Wykład 2 9 października / 42

Transkrypt:

OCHRONA INFORMACJI W SYSTEMACH I SIECIACH KOMPUTEROWYCH SYMETRYCZNE SZYFRY BLOKOWE 1

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

Tryby pracy szyfrów blokowych Tryb wiązania bloków zaszyfrowanych gwrantuje generowanie innych bloków kryptogramu przy tych samych tekstach jawnych. Danymi wejściowymi dla algorytmu szyfrowania jest tu XOR bloku textu jawnego i poprzedniego bloku kryptogramu. W celu wytworzenia pierwszego bloku kryptogramu należy wygenerować losowo sekwencję wp, zwaną wektorem począ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 trybie nie szyfruje się całych bloków, lecz fragmenty bloku, złożone z j bitów. W praktyce j = 1 lub j = 8. Jeśli j = 1, to szyfruje się jednorazowo pojedyncze bity, a gdy j = 8 pojedyncze znaki kodu ASCII. 4

Algorytm DES Data 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 świecie 5

Schemat blokowy algorytmu DES Wiadomość jawna M 64 Permutacja początkowa IP 64 32 32 L 0 + 32 R 0 f L 1 R 1 + f L 2 R 2 K 1 K 2 48 48 Permutowany wybór P C 2 Permutowany wybór P C 2 Klucz K 64 Permutowany wybór P C 1 28 56 28 C 0 D 0 Przesunięcie Przesunięcie w lewo w lewo C 1 D 1 Przesunięcie Przesunięcie w lewo w lewo C 2 D 2 28 28 + f L 16 32 32 R 16 64 Permutacja końcowa IP 1 Wiadomość 64 zaszyfrowana C K 16 48 Permutowany wybór P C 2 C 15 D 15 Przesunięcie Przesunięcie w lewo w lewo C 16 D 16 6

Schemat blokowy wyznaczania wartości funkcji f R i 1 32 Rozszerzenie E k i R 48 48 i 1 + B 48 B 1 6 B 6 6 2 B 8 S 1 S 2 S 8 y 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 powinien posiadać nieparzystą liczbę jedynek w każdym bajcie, a każdy ósmy bit klucza jest traktowany jako bit kontroli parzystości. Przetwarzanie klucza Dokonać permutacji 64 bitów klucza zgodnie z Permutowanym wyborem PC 1 Permutowany wybór PC 1 57 49 41 33 25 17 9 1 58 50 42 34 26 18 10 2 59 51 43 35 27 19 11 3 60 52 44 36 63 55 47 39 31 23 15 7 62 54 46 38 30 22 14 6 61 53 45 37 29 21 13 5 28 20 12 4 8

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 podkluczy Liczba cyklicznych przesunięć w lewo bloków podkluczy w zależności od numeru iteracji i 1 2 3 4 5 6 7 8 lpc 1 1 2 2 2 2 2 2 i 9 10 11 12 13 14 15 16 lpc 1 2 2 2 2 2 2 1 9

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 2 14 17 11 24 1 5 3 28 15 6 21 10 23 19 12 4 26 8 16 7 27 20 13 2 41 52 31 37 47 55 30 40 51 45 33 48 44 49 39 56 34 53 46 42 50 36 29 32 Po wykonaniu tej czynności otrzyma się klucz dla i-tej iteracji K i. Zwiększyć i o 1. 10

Przetwarzanie 64-bitowego bloku tekstu jawnego Pobrać od użytkownika 64-bitowy blok tekstu jawnego. Jeśli blok jest krótszy, należy go odpowiednio uzupełnić do 64 bitów. Bity bloku tekstu jawnego poddać permutacji początkowej IP Permutacja początkowa IP 58 50 42 34 26 18 10 2 60 52 44 36 28 20 12 4 62 54 46 38 30 22 14 6 64 56 48 40 32 24 16 8 57 49 41 33 25 17 9 1 59 51 43 35 27 19 11 3 61 53 45 37 29 21 13 5 63 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 symbolem L 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 1 z funkcją wyboru E. Funkcja wyboru E 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 do 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 poprzednim kroku, 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 bloku E(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 blokach B 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ąca liczbie systemu dziesiątkowego m, wskazuje numer wiersza (od 0 do 3), który należy uwzględnić przy obliczaniu wartości funkcji S j, zaś liczba binarna b 2 b 3 b 4 b 5, odpowiadająca liczbie systemu dziesiątkowego n, wskazuje numer kolumny (od 0 do 15), brany pod uwagę podczas obliczania 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 7 0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0 15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13 S 2 : 15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10 3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5 0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15 13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9 S 3 : 10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8 13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1 13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7 1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12 S 4 : 7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15 13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9 10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4 3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14 14

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 9 14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6 4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14 11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3 S 6 : 12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11 10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8 9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6 4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13 S 7 : 4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1 13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6 1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2 6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12 S 8 : 13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7 1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2 7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8 2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11 15

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 poprzednim kroku wartości m i n wyznacza się tę wartość jako liczbę binarną, odpowiadającą liczbie dziesiątkowej, leżącej na przecięciu wiersza m i kolumny n tabel, definiujących funkcje podstawienia S j. Wykonać permutację P na bloku bitów y 1 y 2 y 8. Permutacja P 16 7 20 21 29 12 28 17 1 15 23 26 5 18 31 10 2 8 24 14 32 27 3 9 19 13 30 6 22 11 4 25 16

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 o 1 dokonać permutacji końcowej IP 1 bloku L 16 R 16. Permutacja końcowa IP 1 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 17

Procedura deszyfrowania Opisany algorytm dotyczy procedury szyfrowania tekstu jawnego w postaci bloku 64-bitowego. W procesie deszyfrowania stosuje się 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 DES Opracowano 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 1 K 2 (DES K1 (M))) Algorytm deszyfrowania odpowiada równaniu: M = DES 1 K 1 (DES K2 (DES 1 K 1 (C))) 19

Rozszerzenia algorytmu DES DESX Zastosowanie trzech kluczy K zew, K wew, K DES, algorytmu DES 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 1 K DES (C XOR K zew ) Nawet wynaleziona niedawno tzw. kryptoanaliza różnicowa wymaga wypróbowania około 2 120 = 10 36 kluczy dla złamania szyfru DESX. 20

Algorytm IDEA International Data Encryption Algorithm (międzynarodowy standard szyfrowania danych) algorytm stworzony przez Xuei Lai oraz Jamesa L. Masseya ze Szwajcarskiego Instytutu Technologii 64-bitowy blok danych wejściowych oraz wyjściowych 128-bitowy blok klucza Algorytm IDEA stosuje następujące trzy operacje, łatwo realizowalne sprzętowo i programowo na blokach 16-bitowych, dlatego też 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 IDEA X 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 tekstu jawnego X 1, X 2, X 3 i X 4. 4 + Z (1) Te cztery podbloki stanowiące wejście dla 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, otrzymanych po 1. cyklu przetwarzania, uzyskuje się blok wejściowy dla drugiego cyklu. Po ósmym cyklu wy- Z (9) + + 1 Z (9) 2 Z (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 IDEA IDEA wymaga 52 podbloków klucza: po 6 dla kałdego cyklu algorytmu oraz 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ęcia pierwszego cyklu iteracji, zostawiając pozostałe dwa podklucze dla iteracji drugiej. Następnie klucz przesuwa się cyklicznie 25 bitów w lewo, dzieli ponownie na 8 16-bitowych podkluczy, otrzymując 4 pozostałe podklucze dla drugiego cyklu i 4 podklucze dla cyklu trzeciego. Procedurę tą powtarza się aż do uzyskania wszystkich potrzebnych kluczy. 23

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

Generowanie kluczy algorytmu IDEA Podklucze szyfujące i deszyfujące dla algorytmu IDEA cykl klucz szyfrujący klucz deszyfrujący 1 Z (1) 1 Z (1) 2 Z (1) 3 Z (1) 4 Z (1) 5 Z (1) 6 Z (9) 1 1 Z (9) 2 Z (9) 3 Z (9) 1 4 Z (8) 5 Z (8) 6 2 Z (2) 1 Z (2) 2 Z (2) 3 Z (2) 4 Z (2) 5 Z (2) 6 Z (8) 1 1 Z (8) 3 Z (8) 2 Z (8) 1 4 Z (7) 5 Z (7) 6 3 Z (3) 1 Z (3) 2 Z (3) 3 Z (3) 4 Z (3) 5 Z (3) 6 Z (7) 1 1 Z (7) 3 Z (7) 2 Z (7) 1 4 Z (6) 5 Z (6) 6 4 Z (4) 1 Z (4) 2 Z (4) 3 Z (4) 4 Z (4) 5 Z (4) 6 Z (6) 1 1 Z (6) 3 Z (6) 2 Z (6) 1 4 Z (5) 5 Z (5) 6 5 Z (5) 1 Z (5) 2 Z (5) 3 Z (5) 4 Z (5) 5 Z (5) 6 Z (5) 1 1 Z (5) 3 Z (5) 2 Z (5) 1 4 Z (4) 5 Z (4) 6 6 Z (6) 1 Z (6) 2 Z (6) 3 Z (6) 4 Z (6) 5 Z (6) 6 Z (4) 1 1 Z (4) 3 Z (4) 2 Z (4) 1 4 Z (3) 5 Z (3) 6 7 Z (7) 1 Z (7) 2 Z (7) 3 Z (7) 4 Z (7) 5 Z (7) 6 Z (3) 1 1 Z (3) 3 Z (3) 2 Z (3) 1 3 Z (2) 5 Z (2) 6 8 Z (8) 1 Z (8) 2 Z (8) 3 Z (8) 4 Z (8) 5 Z (8) 6 Z (2) 1 1 Z (2) 2 Z (2) 2 Z (2) 1 3 Z (1) 5 Z (1) 6 pk Z (9) 1 Z (9) 2 Z (9) 3 Z (9) 4 Z (1) 1 1 Z (1) 2 Z (1) 3 Z (1) 1 4 pk przekształcenie końcowe 25

Cechy algorytmu IDEA Realizacja sprzętowa algorytmu IDEA jest prawie tak samo szybka, jak algorytmu DES (50 200 Mbit/s). Na szybkich procesorach Pentium algorytmem IDEA można szyfrować dane z szybkością rzędu MB/s. Algorytm IDEA można stosowaś w takich samych trybach pracy jak algorytm DES. Algorytm RIJNDAEL (AES) Advanced Encryption Algorithm (zaawansowany standard szyfrowania danych) algorytm stworzony przez Joana Daemena i Vincenta Rijmena 128-bitowy blok danych wejściowych oraz wyjściowych 128-, 192- lub 256-bitowy blok klucza 26

Operacje matematyczne szyfru AES Wiele operacji algorytmu RIJNDAEL wykonywanych jest na elementach ciała skończonego GF (2 8 ), opisanych w postaci liczby binarnej lub wielomianu Liczba 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że być przedstawiona jako wielomian b 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, binarnie 01010111) może być przedstawiona w postaci wielomianu x 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 otrzymany poprzez zsumowanie modulo 2 odpowiadających sobie współ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 2 W 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 czym m(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 + 1 29

Operacje matematyczne szyfru AES Mnożenie przez x. Mnożenie wielomianu b(x) przez x b 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, poprzez przesunięcie w lewo o jeden bit, a następnie redukcję modulo m(x) (xor 1B), jeśli b 8 = 1. Operacja ta realizowana jest w postaci funkcji b = xtime(a). Mnożenie przez wyższe potęgi x może być zrealizowane poprzez wielokrotne użycie funkcji xtime. Na przykład: 57 13 = FE, gdyż 57 02=xtime(57)=AE 57 04=xtime(AE)=47 57 08=xtime(47)=8E 57 10=xtime(8E)=07 57 13=57 (01 02 10) = 57 AE 07=FE 30

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ć zrealizowane poprzez dodanie poszczególnych współczynników tych 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 0 c(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 x c 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 2 c 3 = a 3 b 0 a 2 b 1 a 1 b 2 a 0 b 3 c 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 3 Redukcja wielomianu c(x) do wielomianu stopnia conajwyżej 3 wykonywana jest poprzez operację modulo M(x), przy czym M(x) = x 4 + 1. 31

Operacje matematyczne szyfru AES Wielomiany nad GF (2 8 ) (cd) Jeśli x j (mod x 4 + 1) = x j mod 4, to modularny iloczyn wielomianów a(x) oraz b(x) oblicza się z zależności d(x) = a(x) b(x) d(x) = d 3 x 3 + d 2 x 2 + d 1 x + d 0 d 0 = a 0 b 0 a 3 b 1 a 2 b 2 a 1 b 3 d 1 = a 1 b 0 a 0 b 1 a 3 b 2 a 2 b 3 d 2 = a 2 b 0 a 1 b 1 a 0 b 2 a 3 b 3 d 3 = a 3 b 0 a 2 b 1 a 1 b 2 a 0 b 3 Operacje ta mozna zapisać macierzowo d 0 d 1 d 2 d 3 = a 0 a 3 a 2 a 1 a 1 a 0 a 3 a 2 a 2 a 1 a 0 a 3 a 3 a 2 a 1 a 0 b 0 b 1 b 2 b 3. 32

Operacje matematyczne szyfru AES Wielomiany nad GF (2 8 ) Mnożenie przez x Mnożąc wielomian b(x) przez x otrzymuje się b 3 x 4 + b 2 x 3 + b 1 x 2 + b 0 x x b(x) otrzymuje się poprzez redukcję powyższego wielomianu przez M(x) = x 4 + 1. W efekcie otrzymuje się wielomian c(x) c 0 c 1 c 2 c 3 = 00 00 00 01 01 00 00 00 00 01 00 00 00 00 01 00 b 0 b 1 b 2 b 3. 33

Stan szyfru AES Stanem algorytmu RIJNDAEL nazywa się prostokątną macierz bajtów, stanowiącą bieżący wynik działania algorytmu szyfrującego. Wszystkie operacje podczas wykonywania realizowane są na macierzy stanu, a jako wynik, zwracają kolejną macierz stanu. Stan może być przedstawiony jako macierz prostokątna o czterech wierszach. Liczba kolumn określona jest parametrem Nb, i równa jest długości bloku wejściowego podzielonego przez 32. Każda kolumna stanu może być potraktowana jako zbiór niezależnych czterech wartości typu Byte lub czterobajtowe słowo. Stanem klucza jest taka sama macierz, przy czym liczba kolumn uzależniona jest od parametru Nk, równej długości klucza podzielonego na 32. Macierz stanu o wymiarach i j, można przedstawić w postaci jednowymiarowego wektora N b (lub N k) 4-bajtowych słów, w którym przez n można określić indeks n-tego słowa, zatem i = n mod 4; j = n/3; n = i + 4 j. 34

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

Realizacja rundy w algorytmie AES Operacja, realizowana w poszczególnych rundach wygląda następująco Round(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 AES Transformacja ByteSub realizowana jest nieależnie na każdym bajcie 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 zapisanego w postaci wektora bitów y 0 y 1 y 2 y 3 y 4 y 5 y 6 y 7 = 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 1 x 0 x 1 x 2 x 3 x 4 x 5 x 6 x 7 + 1 1 0 0 0 1 1 0. (1) Operację odwrotną realizuje się obliczając odwrotność multyplikatywną wyniku odwrotnego przekształcenia afinicznego. 37

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

Realizacja rundy w algorytmie AES Transformacja MixColumn realizowana jest na poszczególnych kolumnach macierzy stanu, i polega na pomnożeniu kolumny zapisanej w postaci wielomianu przez wielomian c(x) modulo x 4 +1, przy czym c(x) = 03 x 3 + 01 x 2 + 01 x + 02. Operację tą można zapisać w postaci macierzowej b 0 b 1 b 2 b 3 = 02 03 01 01 01 02 03 01 01 01 02 03 03 01 01 02 W operacji odwrotnej wielomian c(x) zastępuje się wielomianem d(x) d(x) = 0B x 3 + 0D x 2 + 09 x + 0E, taki, że c(x) d(x) = 01. a 0 a 1 a 2 a 3. 39

Realizacja rundy w algorytmie AES Transformacja AddRoundKey polega na zsumowaniu modulo 2 poszczegó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 bloku pomnożonej przez liczbę rund powiększoną o 1. Np. dla szyfru o długości 128, potrzeba 1408 bitów kluczy rund. Klucze te generowane są na podstawie klucza szyfru. Klucz szyfru rozszerzany jest do tzw. rozszerzonego klucza (Extended Key). Klucze kolejnych rund stanowią kolejne fragmenty rozszerzonego klucza. 40

Generowanie kluczy Rozszerzony klucz stanowi jednowimiarową tablicę czterobajtowych słów W [Nb (Nr + 1)]. Pierwsze Nk słów zawiera klucz rozszerzony. 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<nk;i++) W[i] = (Key[4*i],Key[4*i+1],Key[4*i+2],Key[4*i+3]); for(i=nk;i<nb*(nr+1);i++) { temp = W[i - 1]; if (i % Nk == 0) temp = SubByte(RotByte(temp)) ^ Rcon[i / Nk]; W[i] = W[i - Nk] ^ temp; } } 41

Generowanie kluczy Dla N k > 6 operacja rozszerzania klucza wygląda następująco: KeyExpansion(byte Key[4*Nk] word W[Nb*(Nr+1)]) { for(i=0;i<nk;i++) W[i] = (key[4*i],key[4*i+1],key[4*i+2],key[4*i+3]); for(i = Nk; i < Nb * (Nr + 1); i++) { temp = W[i - 1]; if (i % Nk == 0) temp = SubByte(RotByte(temp)) ^ Rcon[i / Nk]; else if (i % Nk == 4) temp = SubByte(temp); W[i] = W[i - Nk] ^ temp; } } Operacja SubByte(W) jest funkcją zwracającą 4-bajtowe słowo, w którym każdy bajt jest wynikiem operacji S-Box, która odpowiada transformacji ByteSub. Operacja RotByte(W) zwraca słowo stanowiące cykliczną permutację bajtów słowa wejściowego (a, b, c, d) (b, c, d, a). 42

Algorytm RIJNDAEL Procedura szyfrująca algorytmu Rijndael przedstawia się następująco: Rijndael(State,CipherKey) { KeyExpansion(CipherKey,ExpandedKey) ; AddRoundKey(State,ExpandedKey); For(i=1;i<Nr;i++) Round(State,ExpandedKey + Nb*i) ; FinalRound(State,ExpandedKey + Nb*Nr); } Jeśli rozszerzenie klucza wykona się przed rozpoczęciem szyfrowania, to procedura szyfrująca wygląca następująco: Rijndael(State,ExpandedKey) { AddRoundKey(State,ExpandedKey); For(i=1;i<Nr;i++) Round(State,ExpandedKey + Nb*i) ; FinalRound(State,ExpandedKey + Nb*Nr); } 43