Podstawy kryptografii Prowadzący: Prof. dr h Jemec Władzimierz Wykład 1 23.02.2009 Literatura 1. Buchmann J. A. Wprowadzenie do kryptografii, PWN, 2006 rok, 244 s. 2. Stinson D. R. Kryptografia w teorii i praktyce, WNT, 2005 rok, 438 s. 3. Bruce Schneier Kryptografia dla praktyków, WNT, 2002 rok (200 zł) I Terminologia Najważniejsze pole zainteresowania kryptografii to szyfrowanie dokumentów. Oryginalny dokument nazywamy tekstem jawnym lub otwartym. Zaś jego zaszyfrowaną wersje nazywamy szyfrogramem lub kryptogramem. Tekst jawny zawiera znaki należące do pełnego alfabetu np.: Z 26 - alfabet łaciński, 26 liter (beż dużych liter) Z 2 ={0,1} - alfabet binarny Z 256 - alfabet kodu ASCII Z 32 - alfabet polski (32 litery) Do szyfrowania i deszyfrowania potrzebny jest dodatkowo klucz lub klucze. Algorytmem szyfrowania i deszyfrowania stanowi krypto-system, czyli szyfr. Klucz szyfr. Klucz deszyfr. Tekst jawny System crypt Krypt. System kryptograficzny Przykłady Szyfr Cezara (100 44) Litery alfabetu można utożsamiać z liczbami. W systemie Cezara używanych jest 26 symboli (liter) odpowiadających liczbą od 0 do 25 0 25, a to 0, b to 1 itp. Szyfr polega na przesunięciu. W następujący sposób: C= P 3 mod 26, gdzie C kryptogram, P tekst jawny Każdą literkę przesuwamy o trzy pozycje dalej. Słyne powiedzenie Cezara: Veni vidi vici (tekst jawny), C = yhgl ylgl ylfl (kryptogram) 1
Uwaga pamiętać: numeracja zaczyna się od zera. Szyfr częstokołu (szyfr permutacyjny) Przykładowo przy tekście jawnym: Kryptografia, oraz ustalonym poziomie 1 (klucz 1) rozpisujem następująco: K r y p t o g r a f i a Z czego uzyskujemy C = rporfakytagi Natomiast przy zastosowaniu poziomu 2 uzyskamy: k ryp t ogr a fi a ygirporfakt Tekst jawny P (plain) zaszyfrowany za pomocą klucza K (key) oznaczać będziemy przez E K P =C (E encryption), gdzie C kryptogram. Tekst jawny uzyskany z kryptogramu C za pomocą klucza K oznaczać będziemy D K C =P (D decryption). Ze względu na własności kluczy rozróżniamy dwie odmiany szyfrowania (algorytmy). Algorytm symetryczny klucz do szyfrowania oraz deszyfrowania jest ten sam. Szyfrowanie kluczem K B K E Osoba nieupoważniona C Deszyfrujący klucz K D K A Algorytm asymetryczny algorytm z kluczem kluczem publicznym. Klucze do szyfrowania i deszyfrowania są różne. W ramach kryptografii rozważamy metody łamania szyfru, czyli krypto analizy. Najprostszą formą krypto analizy jest metoda brud-force (brutalny atak). Polega ona na rozważeniu wszystkich możliwych kluczy. Klasyfikacja ataków kryptograficznych w zależność od rodzaju informacji dostępnych, zawiera: 1. Atak jedynie kryptogramu (ciphentext-only). Atakuje dysponując wyłącznie krypto tekstem E K P lub pełną ich ilością E K P 1,...,E K P l zaszyfrowanych przez ten sam klucz, ale brak jest informacji na temat odpowiadającym im tekstom jawnym. 2. Atak ze znanym tekstem jawnym (known plaintext) oprócz E K P (kryptogramu), pełne pary E K P 1 i P 1,..., E K P l, P l są znane, ale pary te nie mogą być wybrane przez atakującego. 3. Atak z wybranym tekstem jawnym (chosen plaintext). Atakujący dysponuje kryptogramem E K P dla dowolnie wybranego tekstu jawnego P (tego typu atak jest możliwy, gdy staramy znaleźć się klucz zapisany w urządzeniu kryptograficznym). 4. Atak z wybranym kryptogramem (chosen ciphertext). Atakujący może uzyskać teksty jawne D K C dla dowolnie wybranego kryptogramów. 2
II Zastosowanie szyfrowania 1. Ochrona danych przed niepowołanym odczytem Dane medyczne, bankowe, kredytowe itp. są zapisane w postaci kryptogramu. Tylko posiadać klucza może z kryptogramu odczytać oryginalny tekst. Zabezpieczenie komunikacji poprzez linie narażone na podsłuch. Tego rodzaju zabezpieczenia niezbędne jest w przypadku elektronicznego dokonywania operacji finansowych. 2. Uwierzytelnianie dokumentów To uwierzytelnianie dokonujemy za pomocą algorytmu szyfrowania asymetrycznego. Osoba A publikuje klucz K D służący do deszyfrowania (klucz publiczny), drugi z pary kluczy jest strzeżony (nazywa się kluczem prywatnym) K E. Za pomocą publicznego klucza osoby A, dowolna osoba może odczytać oryginalny tekst. To gwarantuje, że dokument należy do osoby, która posiada parę kluczy K D i K E. 3. Ochrona prywatności elektronicznej korespondencji Załóżmy, że osoba A dysponuje parą kluczy asymetrycznych algorytmu szyfrowania. Gdy osoba B pragnie wysłać list do osoby A, wtedy jest realizowany następujący protokół: osoba B zapatruje się w publiczny klucz K osoby A. osoba B szyfruje tekst według klucza K osoby A i wysyła list pocztą elektroniczną. Osoba A deszyfruje otrzymany list za pomocą swego kluczu prywatnego K D i w ten sposób otrzymuje oryginalny tekst. Tylko osoba A może odszyfrować, bo posiada klucz K D. 4. Elektroniczny notariusz Do notariusza zgłaszamy się w dwóch sytuacjach: 1. Gdy chcemy urzędowo potwierdzić istnienie dokumentu bez ujawniania jego treści. 2. Jeśli chcemy zagwarantować, aby w jakimś dokumencie nie były dokonywane zmiany przez nieuczciwego partnera. W obu przypadkach wystarcza jednokierunkowych funkcji haszujących (funkcja skrót). Mówimy, że H jest jednokierunkową funkcją haszującą o ile spełnione są warunki: 1. Dla każdego X łatwo jest obliczyć H X. 2. H X Ma ustaloną długość dla wszystkich tekstów X. 3. H 1 X funkcja odwrotna do funkcji H nie istnieje. Gdy wartość funkcji haszującej składa się z 128 bitów to mamy do dyspozycji 2 128 możliwych wartości. W celu notarialnego potwierdzenia dokumentu X należy obliczyć H X i umieścić tę wartość u notariusza. 3
III Historia Prawdziwy przełom pod względem kryptografii nastąpił w 1976 roku. Wtedy zostały opublikowane pierwsze algorytmy asymetryczne. 1976 pierwsze algorytmy asymetryczne. 4
Wykład 2 02.03.2009 Klasyczne technik szyfrowania 1. Alfabet więzienny Do szyfrowania i deszyfrowania używany jest kwadrat albo prostokątu, w który wpisano litery alfabetu. Przykład: Klucz 1 2 3 4 5 1 2 K O 3 4 T U 5 Tekst jawny: kto tu Kryptogram:......................... 2. Szyfr par Kluczem jest fraza (hasło), która zawiera równo połowę liter alfabety. Szyfrowanie przebiega następująco. Zapisujemy kolejne litery występujące w haśle w pierwszym wiersze. Pod nim wpisujemy kolejne litery alfabety, przy czym pomijamy się litery hasła. W taki sposób otrzymujemy odpowiedni pary alfabety. Przykład: Hasło: ż e l a z n y s z p i c w d o mu l e ż y (16 różnych liter) ą b ć ę f g h j k ł ń ó r ś t ź Wpisujemy litery, które są w alfabecie, ale nie ma w haśle. W ten sposób otrzymujemy pary liter, które w tekście jawnym zamieniamy, aby otrzymać kryptogram. Przykład: tekst jawny: Spotkanie unieważniono, Janek zdrajca kryptogram: Jkśmpęgłb źgłbóęągłśgś, Sęgbp frdęsńe 3. Szyfr Playfair a (XVI wiek) dla alfabetu latyńskiego Litera J jest zastąpiona przez I (J I), czyli nie rozróżniamy J. Kluczem są cztery kwadraty 5 5, w które są wpisany w pewnej kolejności litery alfabety łacińskiego. System Playfair a jest przykładem systemu, w którym szyfruje się bloki liter o długości dwa. Przykład na 1 kwadracie. K L N G D O M A B C F F H L P Q R S T U V W X Y Z Zasłużmy, że chcemy zaszyfrować litery T i O. Litery T i O tworzą prosty kąt w którym występują litery B i Q. OT-> BQ. 5
Jeśli litery leżą na jednym wierszu/kolumnie to postępujemy zgodnie z własnymi ustaleniami np. przesuwamy o jeden wiersz/kolumnę. 4. Szyfr Wiżener a (Enigma) Dla tekstu jawnego i kryptogramu jest wykorzystany ten sam alfabet. Załużmy, że x i y to są dwie litery z tego alfabetu. Wtedy x y jest rezultatem cyklicznego przesuwania litery x wprawo w alfabecie na ilość pozycji, która jest równa numery litery y w alfabecie. Numeracja zawsze zaczyna się od zera. Powyższa operacja x y może być przedstawiona za pomocą tabeli Wiżener a. A B C D... X Y Z B C D E... Y Z A C D E F... Z A B... X Y Z A... U V W Y Z A B... V W X Z A B C... W X Y W celu szyfrowania wybieramy klucz. Gdy długość klucza jest mniejsza od długości tekstu jawnego, wtedy klucz jest cyklicznie przedłużany. Na przykład: Tekst jawny: A B C D E F G H I J... Klucz: + K L U C Z K L U C Z... Kryptogram: K M W F D P R B K I... W tym systemie jednakowym literom kryptogramu mogą odpowiadać różne litery tekstu jawnego. Ten system szyfrowania przy małych długościach klucza gwarantują tylko niewielki zakres bezpieczeństwa. Słabością szyfrów opartych na podstawieniach jest to, że mogą one być złamane, poprzez analizę częstotliwości występowania liter albo bloków liter alfabetu. Analiza tych częstotliwości w zaszyfrowanych tekstach pozwala na zgadnięcie niektórych wartości zamiany. Istnieją tabele częstotliwość występowania danych liter w danym języku. Na przykład dla języka angielskiego: E 0,127 T 0,097 I 0,075 A 0,073... J 0,001 najemnej występująca litera Kryptoanaliza polega na sporządzeniu tabeli częstotliwości występowania liter w kryptogramie i porównania z powyższą tabelą. Na tej podstawie można zlokalizować prawdopodobne wartości najczęściej spotykanych liter. 5. Szyfr S-boksy S boksy są składnikami algorytmu DES (Data Encryption Standard). Każdy S -boks jest definiowany poprzez macierz rozmiaru 4 16 zawierającą liczby z przedziału od 0 do 15 0 15 6
. S boks definiuje funkcję, jej argumentami są ciągi złożone z 6 bitów. Obliczenie wartości S- koksu dla argumentu x ma następujący przebieg: 1. Pierwszy i ostatni bit argumentu x wyznaczającą numer wiersza (wierszy numerujemy od 0 do 3 0 3 ). 2. Pozostałe 4 bity argumentu x wyznaczają numer kolumny (kolumny numerujemy od 0 do 15 0 15 ). 3. Na przecięciu tak wyznaczonych kolumny i wiersza znajduje się pojedynczy element, liczba ta jest szukaną wartością funkcji. Za pomocą S- boksów można zrealizować efekt lawinowy. Zmiana pojedynczego bitu w tekście jawnym powoduje lawinę zmian w kryptogramie. Właściwości S-boksu: 1. Każdy wierz S- boksu zawiera wszystkie liczby całkowite od 0 do 15 0 15. Własność ta zapewnia, że sama znajomość wiersza nie daje żadnej informacji o wartości końcowej. 2. Funkcja obliczana przez S- boks nie jest funkcją afiniczną, tzn. żaden bit wyniku nie da się przedstawić jako c 0 i= 0 6 c i x i, gdzie x i - oznacza i-ty bit argumentu 3. Zmiana jednego bitu argumentu zmienia co najmniej dwa bity wyniku. Permutacja Ten system szyfrowania polega na permutacji liter tekstu jawnego i w praktyce nie jest używany, bo częstotliwość występowania liter w kryptogramie i tekście jawnym jest równa między sobą. Przykład. 1. Szyfr macierzy Tekst jawny jest zapisany kolejnymi wierszami w prostokącie. Przy tym kolejność wypisywanych liter kryptogramu określa się ciągiem liter w kolumnach, a ich kolejność określą się kluczem. Przykład: Klucz: GARDEN Tekst jawny: DON T PUT IT OFF TILL TOMORROW 4 1 6 2 3 5 G A R D E N D O N T P U T I T O F F T I L L T O M O R R O W Kryptogram: OIIOTOLRPFTODTTMUFOWNTLR Możliwe jest stosowanie dodatkowego klucza do wierszy. Klucze dla tej metody mogą być podane w postaci tabeli. Załóżmy, że dokonujemy permutacji n liter 7
1 2... l l i 1 i 2... i Która powoduje, że jedna litera zajmuje w kryptogramie pozycje i 1, drugą i 2 itp. Mamy l! kluczy takich. 1 2 3 4 odwrotnie piszemy 4 3 2 1 2. Szyfr ADFGVX (szyfr I wojny światowej) Ten szyfr zawiera dwa sposoby szyfrowania: podstawienie i permutacja. Każda litera lub liczba szyfruje się blokami długości 2, złożonych z liter A, D, F, G, V, X na podstawie tabeli. Przykład: A D F G V X A C 0 8 X F 4 D M K 3 A Z 9 F N W L O J D G 5 S I Y H U V P 1 V B 6 R X E Q 7 T 2 G Tekst jawny: M-16 Po użyciu tabeli: AD DV VV Następnie: + szyfr macierzy 8
Wykład 3 09.03.2009 Algorytmy symetryczne Pracownicy poczty I Algorytm z kluczem jednorazowym (One-time pad) (1917, G. Vernam, J. Moborn) Szyfr opiera się na operacji XOR (exclusive OR), czyli dodawania modulo 2. 0 XOR 0=0 1 XOR 0=1 0 XOR 1=1 1 XOR 1=0 Załóżmy, że mamy dwa ciągi A=a 1,a 2,...,a n, B=b 1, b 2,..., b n, wtedy C= A XOR B, c j =a j XOR b j, C=c 1, c 2,...,c n. Przy tym A XOR 0= A, A XOR A=0. Szyfr z kluczem jednorodnym jest metodą szyfrowania, w której używano losowy ciąg, który określa nam klucz. Czyli klucz jest losowy ciąg (czyli np. rzuty monetą albo wykorzystanie szumu). Własności tej metody: 1. Kryptogram jest ciągiem losowym n bitów. 2. Bez znajomości klucza żadna informacja dotycząca tekstu jawnego nie może być wydedukowana z kryptogramu. Własność ta oznacza bezpieczeństwo doskonałe i wypływa z słynnego twierdzenia Shannona z teorii informacji (którego praca była opracowana podczas II Wojny Światowej). Czyli nie podaje się kryptoanalizie. Jedyną dziedziną zastosowań jest szyfrowanie stosunkowo krótkich, ale ważnych informacji (np. wojskowych). Zasady używania szyfru mówią, że klucz powinien być: 1. Zawczasu uzgodniony przez osoby komunikujące się. 2. Wybrany losowo. 3. Co najmniej tak długi jak szyfrowany tekst. Bo załóżmy, że mamy długi tekst a 1,a 2,...,a n,... i używamy klucza k 1,k 2,...,k n. Ten c j XOR c j n = a j XOR k j a j n XOR k j n =a j XOR a j n. Czyli na podstawie kryptogramu możemy dostać informacje o tekście jawnym. II DES (Data Enscryption Standard, 1970 r., IBM) DES szyfruje bloki złożone z 64 bitów. Klucze też składa się z 64 bitów, przy tym 8 bitów to są bity parzystości. To znaczy w trakcie wyboru klucza można określić jedynie 56 bitów, reszta jest generowana automatycznie. Szyfrowanie i deszyfrowanie DES składa się z 16 rund (cykli). W trakcie każdej rundy dokonywane są te same obliczenia, ale na wynikach obliczeń z poprzedniej rundy i specjalnym podkluczem generowanym z podstawowego klucza. Dodatkowo przed pierwszą rundą i po ostatniej rundzie bity są permutowane w ustalony sposób. Dla uzyskania podkluzcy usuwano najpierw 8 bitów parzystości. Następnie z pozostałych 56 bitów tworzonych jest 16 podkluczy, każdy składający się z 48 bitów. Dane wejściowe rundy i 1 składają się z dwóch ciągów 32 bitowych. ' L i = x i, 0, x i, 1, x i, 31 (pierwsze 32 bity) oraz R i = x i,0 Zachodzą następujące związki: ',x i,1 ',x i,31 (pozostałe 32 bity). 9
L i 1 =R i R i =L i XOR f R i, K i 1 czyli można to pokazać za pomocą rysunku. L i 32 R i 32 Blok wejściowy L i f(r + i, K i + 1 ) L i + 1 R i + 1 i + 1 DES Obliczenie wartości funkcji f dokonuje się w następujący sposób: 1. Poprzez permutację z rozszerzeniem otrzymuje się ciąg złożony z 48 bitów. Bity te, to 32 bity bloku R i kopiowane na 48 pozycji (niektóre z nich dwukrotnie). 2. Na otrzymanych 48 bitach jest dokonywana jest operacja XOR z klucza rundy K i 1. 3. Otrzymane 48 bitów dzielone jest na 8 grup po 6 bitów. Każda grupa poddawana jest działaniu S boksu (są 8 S-boksy). 4. Otrzymane 32 bity są na koniec permutowane w ustalony sposób. 32 32 1 runda DES 32 R i bity Permutacja z rozszerzeniem K i + 1 XOR 48 bitów = 6 bitów 8 grup S-boksy (8) 4 bitów 8 = 32 bity Permutacja f(r i, K i + 1 ) Po 16 iteracji lewa i prawa połowa są zamieniane, a otrzymany blok jest poddawany permutacji odwrotnej do początkowej. Jest to konieczne, aby prezentowany algorytm mógł być użyty zarówno jak do szyfrowania, jak i deszyfrowania (czyli żadnych podstaw matematycznych nie ma). DES=IP 1 16... 1 IP DES 1 =IP 1 1... 16 IP IP - inital Permutation - runda DES Była zbudowana specjalna maszyna, która pozwala znaleźć klucz za trzy doby jeśli mamy tekst 10
jawny i klucz. III Rozszerzenie algorytmu DES 1. DESX (exetended) (1984 r., Rivest) Dla zaszyfrowania używano trzy klucze: K int (wewnętrzny), K DES, K ext (zewnętrzny). Kryptogram oblicza się następująco: C=K ext XOR DES K DES P XOR K int. 2. Trzykrotny DES (DES EDE (Encrypt-Decrypt-Encrypt)) Szyfrowanie, deszyfrowanie, szyfrowanie. Używany w bankowości do tej pory. Szyfrowanie odbywa się następująco: C=DES K 3 DES 1 K2 DES K1 P IV Szyfrowanie dowolnych tekstów 1. Elektroniczna książka kodowa (Electronic Code Book (ECB)) ECB polega na podziale informacji na bloki ustalonej długości. Każdy z tych bloków jest oddzielnie szyfrowany za pomocą tego samego klucza. Zaleta, taki tryb pracy jest odporny na zakłócenia, bo utrata jednego bloku kryptogramu nie wpływu na możliwość deszyfrowania pozostałych. Wada, jest możliwość zmiany pewnych bloków kryptogramu na inne. Przykład: załóżmy, że komunikacja pomiędzy dwoma bankami odbywa się w trybie ECB szyfrowane są przelewy między kontami. Specyfikacja kont ma postać: Przelew: kon_ to odbior_ za kwo_to Kryptogam: blok 1 blok 2 blok 3 blok 4 bolk 5 Przestępca, który jest w stanie modyfikować treść kryptogramów, może przeprowadzić atak. 1. Dokonuje 17 przelewów na swe konto, zawsze tę samą kwotę. Następnie identyfikuje w przesyłanych kryptogramach taki kryptogram konta, na który dokonano dokładnie 17 przelewów i na tę samą kwotę. Poznaje kryptogram numeru swego konta, mimo iż nie zna klucza. (Na kolokwium dlaczego 17 przelewów!!!) 2. Zamienia szyfru numeru konta wstawiając na to miejsce kryptogramu numeru swego konta. Bank dopisuje do konta kwotę przeznaczony pierwotnie dla kogo innego. 3. Zabieramy pieniądze i znikamy. 2. Wiązania bloków (Cipher Blok Chaining (CBC)) Ten tryb jest zdefiniowany następująco: C 1 =E K P 1 XOR I C i =E K P i XOR C i 1, i=2,3,... Gdzie I jest losowo wygenerowanym ciągiem, który przesyłany jest w sposób jawny. E K - algorytm szyfrowania. P 1, P 2,... - bloki tekstu jawnego. Zaleta, takie same bloki są reprezentowane przez różne bloki szyfrogramu. 11
Wada, nie można żadnego bloku usunąć z kryptogramu. 12
Wykład 4 16.03.2009 Algorytmy symetryczne IV Szyfrowanie dowolnych tekstów 3. Sprzężenie zwrotne szyfrogramu (CFB) Tą metodą można zaszyfrować zarówno bloki kilko znakowe jaki i pojedyncze bity. Jednym z zasadniczych składników CFB jest rejestr przesuwający. Na początku zawiera on losowo wygenerowany ciąg. W trakcie pracy CFB wykonuje są następujące operacje: 1. Zawartość rejestru przesuwającego jest szyfrowana jakimś algorytmem blokowym. 2. Z wytworzonego kryptogramu pobierano pierwszych 8 bitów. Bity te służą do operacji XOR z 8 bitami tekstu jawnego. W wyniku otrzymujemy ciąg 8 bitów Z. 3. Ciąg Z tworzy 8 kolejnych bitów kryptogramu. Ponadto w rejestrze przysuwającym wykonujemy przesunięcie o 8 pozycji. 8 bitów z lewej strony ulega usunięciu, z kolei na 8 zwolnionych pozycjach zapisywany jest ciąg Z. K Rejestr przesuwający DES Na przykład można użyć algorytmu blokowego DES, tak jak w tym przykładzie. Kryptogram 8 bit litera P XOR Z wyjście AES (Advanced Encryption Standard) Ten standard opiera się na algorytmie Rijndael (Dane, Rijmen) (2001 USA) Arytmetyka wielomianu Niech F n 2 oznacza ciało skończone, które składa się z 2 n elementów. Każdy element w tym ciele jest reprezentowany jako wielomian f x =a m 1 x n 1 a n 2 x n 1... a 0, a i Z 2. Każdemu wielomianowi odpowiada ciąg bitów. Na przykład rozważmy ciało F 3 2 13
Wielomian 0 0 0 0 1 0 0 1 x 0 1 0 x 1 0 1 1 x 2 1 0 0 x 2 1 1 0 1 x 2 x 1 1 1 1 Dodawanie Ciąg bitów Dodawanie dokonuje się mod 2 na bitach wspólnych potęg x. Na przykład: f 1 x = x 2 x f 2 x =x 2 x 1 Wtedy: f 1 f 2 =1 Mnożenie Algorytm wykorzystuje ciało F 2 8. Mnożenie dokonuje się mod m w (moduł wielomianu m w ), gdzie m x =x 8 x 4 x 3 x 1=11B 16 (po prawej stronie w postaci szestnastkowej...). Przykład. x 3 x x 7 1 = x 10 x 8 x 3 x mod m x =x 6 x 5 x 4 x 3 x 2 1 x 10 x 8 x 3 x x 10 x 6 x 5 x 3 x 2 x 8 x 6 x 5 x 2 x x 8 x 4 x 3 x 1 x 8 x 4 x 3 x 1 x 2 1 1 mod 2=1 x 6 x 5 x 4 x 3 x 2 1 Rozważmy teraz dwa wielomiany f x =a 3 x 3 a 2 x 2 a 1 x a 0, a i F 2 8 f x =b 3 x 3 b 2 x 2 b 1 x b 0, b i F 2 8 Mnożenie f x przez g x dokonuje się modulo wielomianu M x =x 4 1. Czyli otrzymujemy, że: f x g x = c 6 x 6 c 5 x 5... c 0 mod M x Ponieważ x 4 =1 mod x 4 1 to x 5 = x mod M x x 6 = x 2 mod M x d x = f x g x =c 3 x 3 c 2 c 6 x 2 c 1 c 5 x c 0 c 1 =d 3 x 3 d 2 x 2 d 1 x d 0 14
Albo d 0 d 1 d 2 a3 a2 a1 a 1 a 0 a 3 a 2 a 2 a 1 a 0 a 3 d 3 =[a0 b 1 b 2 a 3 a 2 a 1 a 0][b0 3] b Algorytm AES wykorzystuje wielomian a x dla każdego a 0 = x, a 1 =1, a 2 =1, a 3 =x 1. Powyższe przekształcenie jest zdefiniowane w algorytmie jako Mix Column, czyli koniec arytmetyku. Algorytm Rijndeel AES jest symetrycznym blokowym szyfrem, długości bloku i kluczy są 128 (standard), 192 albo 256 bitów. Wyspecyfikowano 9 wersji algorytmu, w zależności od danych i długości kluczy. Poszczególne postacie tekstu jawnego po zastosowaniu kolejnych transformacji algorytmu, określane są mianem stanu (status). Każdy stan jest reprezentowany w postaci tablicy która ma 4 długość bloku danych wiersze, a ilość kolumn N b =. Podobnie klucze stanu (Cipher Key) jest 32 długość klucza tablicą, która ma 4 wiersze, a jest kolumn N k =. Ilość rund szyfrowania N 32 r zależy od długości bloku wejściowego i długości klucza, w następujący sposób: N r Długość bloku Długość klucza 128 192 256 128 10 12 14 192 12 12 14 256 14 14 14 Runda szyfrowania składa się z 4 warstw (layers): podstawienia bajtu (Byte Sub) nieliniowe postawienie w S-boksy przesunięcia wierszu (Shift Row) przesunięcie bitowe w lewo wierszu stanu permutacja kolumn (Mix Column) transformacja kolumn stanu dodanie klucza rundy (Add Round Key) połączenie stanu z podkluczem 1. Podstawienie bajtu (Byte Sub) To jest przekształcenie afiniczne, które można zapisać w postaci macierzowej. bajt n =[S] 8 8 bajts 63 16 S-boksy To dla każdego bajtu nie zerowego. 63 rozwinięcie szestnastkowe 15
2. Przesunięcia wierszu (Shift Row) Wierszy są podane przesunięciu w lewo. W zależności od długości bloku wejściowego N b, w następujący sposób: 0 wiersz nie zmienia się 1 wiersz jest przesunięty o c 1 bajt 2 wiersz jest przesunięty o c 2 bajt 3 wiersz jest przesunięty o c 3 bajt c 1, c 2, c 3 zależy od N b. Gdzie: N b c 1 c 2 c 3 4 1 2 3 6 1 2 3 8 1 3 4 3. Permutacja kolumn (Mix Column) Jest zdefiniowana wyżej. 4. Dodanie klucza rundy (Add Round Key) Klucz rundy XOR z blokiem danych. Klucz rundy XOR z blokiem wejściowym. Procedura generowania kluczy algorytmu AES. Argument wejściowy: klucz użytkownika K [128,192, 256] N b - ilość kolumn w stanie danych N r - ilość wykonywanych rund Argument wyjściowy: tablica W słów 4 bajtowych o wymiarze N b N r 1 (1 słowo reprezentuje 1 kolumna w stanie) 1. Wypełniamy pierwszych N k elementów tablicy W kluczem użytkownika. For i=0 to N K 1 do W [i]= K [ 4i ] K [4 i 1] K [4 i 2] K [4 i 3] 2. Wypełniamy pozostałe elementy tablicy W. 16
if N K 6 then for i=n K to N b N R 1 1 do temp=w [i 1] ; if i mod N k == 0 then temp=s box [RotByte temp ] R con [i/ N K ] ; W [i]=w [i N K ] temp ; else // N K == 8 for i=n K to N b N R 1 1 do temp=w [i 1] ; if i mod N k == 0 then temp=s box [RotByte temp ] R con [i/ N K ] ; else if i mod N k == 4 then temp=s box [temp ] ; W [i]=w [i N K ] temp ; RotByte(temp) przesunięcie cykliczne o 24 bity R con [i]= R c [i],0,0,0 R c [1]=1 R c [i]= x R c [i 1] DataState blok weściowy Algorytm: for i=1 to N r 1 do ByteSub(DataState); ShiftRow(DataState); MixColumn(DataState); AddRoundKey(DataState, ExpandedKey[ i 1 N K ]); for i=n r ByteSub(DataState); ShiftRow(DataState); AddRoundKey(DataState, ExpandedKey[ i 1 N K ]); C = DataState; 17
Wykład 5 25.03.2009 Algorytmy symetryczne 1. Arytmetyka Niech n N, x Z. Przez x mod n oznaczamy resztę z dzielenia x przez n (np 122 mod 11=1 3 mod10=3 ). Zbiór reszt modulo n oznaczamy przez Z n ={0, 1,2,..., n 1}. W zbiorze Z n można zdefiniować dwie operacje: dodawanie oraz mnożenie. Mówimy, że liczba y jest elementem odwrotnym do x mod n jeśli x y=1mod n. W tej sytuacji piszemy y=x 1 mod n, bo dla każdej liczby istnieje element odwrotny modulo n. Piszemy x y mod n gdy x mod n=y mod n i mówimy, że x jest kongruentne w y mod n, czyli podobne. Twierdzenie 1 Następujące warunki ekwiwalentne: 1. x y mod n 2. x= y k n, k Z 3. n x y ( n dzieli x y ) Własności kongruencji: Przykład if x 1 y 1 mod n, x 2 y 2 mod n then x 1 x 2 y 1 y 2 mod n x 1 x 2 y 1 y 2 mod n Udowodnimy, że liczba jest dzielona przez liczbe 9 jeżeli suma wszystkich cyfr tej liczby jest dzielona przez 9. Dowolną liczbę naturalną można przedstawić w postaci: N x= a i 10 i i =0 N x mod 9= a i i=0 Algorytm Euklidesa (III w. p.n.e.) Algorytm Eulkidesa obliczania największego wspólnego dzielnika NWD licz naturalnych a i b a,b N. Algorytm oparty jest na wyrażeniach: (*) NWD a,b =NWD b,a mod b, a b (**) NWD 0, a =a 18
Przykład NWD 211,79 -? wykorzystaj wzór (*): 211=79 2 53 79=53 1 26 53=26 2 1 26=1 26 0 NWD 211,79 =NWD 79,53 =NWD 53, 26 =NWD 26,1 =NWD 0, 1 =1 Ilość kroków m algorytmu Eulkidesa definiowano nierównością m 2 log 2 b 1. W trakcie działania algorytmu Eulkidesa można wyznaczyć liczny całkowite x i y takie, że: a x b y=1 przy założeniu, że NWD a, b =1. Definiujemy liczny: q 0,q 1,...,q k takie, że: a=b q 0 a 1 b=a 1 q 1 a 2... a k 1 =a k q k 0 Następnie dal każdego n 0 obliczamy wartości p n, które równają się P n =q n P n 1 P n 2. Podobnie Q n =q n Q n 1 Q n 2. Gdzie liczba P 2 =0, P 1 =1, Q 2 =1, Q 1 =0. Wtedy x= 1 k 1 Q k 1, natomiast y= 1 k 1 P k 1. Oprócz tego P k =a, Q k =b. Te powyższe obliczenia można zręcznie wykonać za pomocą tabeli: N -2-1 0 1... k 1 k q N q 0 q 1... q k 1 q k P N 0 1 P 0 P 1... P k 1 a Q N 1 0 Q 0 Q 1... Q k 1 b Żeby obliczyć np: P 0 =q 0 1 0, P 0 =q 1 P 1 1 Przykład Wyznaczyć liczby całkowite takie, że 17 x 13 y=1. Najpierw sprawdzamy, NWD 17,13 =1 17=13 1 4 q 0 =1 13=4 3 1 q 1 =3 4=1 4 0 q 2 =4 N -2-1 0 1 2 q N 1 3 4 P N 0 1 1 4 17 Q N 1 0 1 3 13 Tu znajduje się rozwiązanie 19
x= 3 (ujemne, ponieważ kolumna z wynikiem ma wartość nieparzystą) y= 4 Przykład Obliczyć liczbę odwrotną do liczby 8mod 35. Czyli obliczyć 8 1 mod 35, 8 x 35 y=1. Wystarczy obliczyć konkretnie 8 x 35 y=1, co oznacza, że x jest naszą szukaną. Zbiór elementów dla których istnieje odwrotne w Z n oznaczamy przez Z n *. Twierdzenie 2 Zbiór Z * n składa się z elementu x względnie pierwsze z n i tylko z nich, czyli będą to liczby takie, że {x n :NWD x, n =1}. Niech n będą liczb naturalnych mniejszych od n, które są względnie pierwsze z n. Funkcja n nazywa się funkcją Eulera. Jeśli p i q są różne liczby pierwsze to wtedy łatwo policzyć p q = p 1 q 1. Wzór dla funkcji Eulera. Niech n N będzie liczbą naturalną oraz n= p 1 1 p 2 2... p l l, gdzie p 1, p 2,..., p l to są liczby pierwsze, wtedy łatwo policzyć n =n 1 1/ p 1... 1 1 / p l. Na przykład Niech n= p n =n 1 1/ p 16 =16 1 1/2 =8 (gdzie p - liczba pierwsza) to mówi, że ma 8 liczb względnie pierwszych z liczbą 16 ( {1, 3, 5, 7, 9, 11,13, 15} ) Twierdzenie 3 (Oliera) (1763 r.) Dla względnie pierwszych x Z i n N ma miejsce kongruencja x x 1 mod n (zwany algorytm RSA jest oparty na tym twierdzeniu). Z tego twierdzenia wypływa twierdzenie 4. Twierdzenie 4 (Fermata) (1640 r.) Małe twierdzenie Fermata. Jeśli p jest liczbą pierwszą oraz liczba x nie dzieli się przez p to x p 1 1 mod p. Przykład: 33 30 mod 31=? 33 2 mod 31=4 33 4 mod 31=16 33 8 mod 31=8 33 16 mod 31=2 33 30 mod 31= 4 16 8 2 mod31=1 20
Twierdzenie 5 (Chińskie twierdzenie o resztach) (I p.n.e.) Niech liczby naturalne n 1, n 2 będą względnie pierwsze NWD n 1,n 2 =1 oraz x 1, x 2 Z dowolne liczby całkowite. Wtedy istnieje dokładne jedna liczba x taka, że x x 1 mod n 1 x x 2 mod n 2 Ponieważ NWD n 1, n 2 =1 to istnieją liczby całkowite u i v takie, że: u n 1 v n 2 =1. Wtedy x=u n 1 x 2 v n 2 x 1, bo x mod n 1 = v n 2 x 1 mod n 1 =x 1 x mod n 2 = u n 1 x 2 mod n 2 =x 2 Tak naprawdę tych reszt może być wiele. Przykład: Wyznaczyć liczby x takie, że: x=2 mod 3, x=3 mod 7. NWD 3,7 =1 3 u 7 v=1 u= 2, v= 1 x=3 2 3 7 1 2= 18 14= 4 4mod 21=17 Stąd x=17 Twierdzenie 6 Niech p to liczba pierwsza wtedy istnieje generator zbioru Z p * x Z p * i x g i mod p. to znaczy taki element g Z p *, że Załóżmy, że p 1=q 1 1 q 2 2... q l l, gdzie q 1, q 2,...,q l to liczby pierwsze. Wtedy liczba g jest generatorem zbioru Z p * jeśli dla każdego i l spełnia się warunek g p 1 / g 1 mod p. Przykład: Chcemy sprawdzić, czy liczba 2 będzie generatorem zbioru Z * 29. 29 1=28=2 2 7 2 28/ 2 mod 29=2 14 mod 29= 1mod 29 1 2 28/ 7 mod 29=2 4 mod 29 1 To oznacza, że liczba 2 jest generatorem zbioru Z * 29. Każda liczba od 1 do 28 może być podana jako potęga liczby 2. Liczba 5 nie jest generatorem zbioru Z * 29, bo 5 14 mod 29=1. 21
Wykład 6 30.03.2009 Reszta kwadratowa Mówimy, że x jest resztą kwadratową mod p, gdy kongruencja y x mod p ma rozwiązanie, czyli y Z p * y x mod p, gdzie y jest pierwiastkiem z x mod p. Przykład Resztami kwadratowymi mod 11 są liczby 1, 3, 4, 5 i 9. Ponieważ: ±1 2 mod 11=1 ±5 2 mod 11=3 ±2 2 mod 11=4 ±4 2 mod 11=5 ±3 2 mod 11=9 Czyli te liczby są liczby określone jako reszty kwadratowe. Problem decyzyjny reszty kwadratowej Dane: liczba pierwsza p 2 oraz liczba całkowita x taka, że 0 x p 1. Pytanie: czy x jest resztą kwadratową mod p. Odpowiedź na to pytanie daje kryterium Eulera. Kryterium Eulera Niech p będzie liczbą pierwszą większą od 2 ( p 2 ). Wówczas x jest resztą kwadratową p 1 mod p wtedy i tylko wtedy, gdy x 2 1mod p. Jeśli to jest spełnione wtedy x jest resztą kwadratową. Załóżmy, że x y 2 mod p wtedy z małego twierdzenia Fermata wypływa, że x p 1 1mod p, gdy x 0mod p (czyli x nie jest podzielne przez p ). Mamy zatem p 1 p 1 x 2 y 2 2 mod p =y p 1 mod p 1 mod p. Na odwrót p 1 Załóżmy, że x 2 1 mod p. Niech g jest generatorem zbioru Z p*. Wtedy x g i mod p (dla pewnego i ). p 1 p 1 Mamy wówczas x 2 i i g 2 mod p, są stąd wynika, że 2 ±g są pierwiastkami kwadratowymi liczby x. 22
Twierdzenie Niech p 2, q 2 będą liczbami pierwszymi oraz p q, a n= p q. Oprócz tego NWD x, n =1 i x N. Wtedy: 1. Jeśli y 2 x mod n to dla reszt (1) y p y mod p, y q y mod q (2) wykonuje się kongruencja y p 2 x mod p, y q 2 x mod q. (3) Odwrotnie niech spełnia się kongruencja (3), wtedy każdy y jakie spełnia porównanie (2) spełnia porównanie (1). 2. Istnieje dokładnie cztery pierwiastki z x mod n. Załóżmy, że y p 2 x mod p, y q 2 x mod q oraz liczby S p, S q pryzmują wartości S p,s q { 1,1}. Na podstawie chińskiego twierdzenia o resztach istnieje dokładnie jedna liczba z taka, że z S p y p mod p, z S q y q mod q oraz z 2 x mod n. Ponieważ S p, S q było dowolną kombinacją liczb 1, -1 otrzymujemy w ten sposób cztery pierwiastki: z 1 z resztami y p, y q z 1 z resztami p y p,q y q z 2 z resztami y p,q y q z 2 z resztami p y p, y q Przykład Oblicz wszystkie pierwiastki równania y 2 x mod n, gdy x=58, n= p q, p=7, q=11. 1. Sprawdzamy czy NWD x, n =NWD 58, 77 =1 y p 2 =x mod p=58mod 7=2 y p q =x mod q=58 mod 11=3 p=7=4 1 3 w tym przypadku, żeby obliczyć pierwiastek spotęgować o resztę razem y p =2 1 1 mod 7=±4 mod 7= 4, 3 q=11=4 2 3 y q =3 3 mod 11=±5 mod11= 5,6 2. Stosując chińskie twierdzenie o resztach. Szukamy z 1 takie, że: z 1 =4 mod 7 z 1 =5mod 11 z 1=60 z 2 = z 1 mod n= 60md 77=17 z 3 =4 mod 7 z 3 =6 mod11 z 1 =39 z 4 = z 3 mod 77=38 Są to pierwiastki tego równania. Testy pierwszości (czy liczba jest pierwsza) Mówimy, że w n jest światkiem pierwszości dla n jeśli w n 1 1 mod n (na mocy małego twierdzenia Fermata). Jeśli n jest liczbą pierwszą to wszystkie w n są pierwszości. 23
Testy Prabolistyczne Test Fermata k razy niezależnie przeprowadzamy testy. 1. Wybieramy w sposób losowy liczbę w n i obliczamy NWD w,n. 2. Jeśli NWD w, n 1 to n liczba złożona. 3. Inaczej obliczamy u=w n 1 mod n 4. Jeśli u 1 to n liczba złożona. Jeśli w trakcie żadnego k testów nie stwierdzimy, że n jest liczbą złożoną to odpowiedź brzmi n jest liczbą pierwszą. Twierdzenie Niech S oznacza zbiór liczb względnie pierwszych z n. Wtedy albo każdy element S jest świadkiem pierwszości n albo co najwyżej połowa elementów S jest świadkiem pierwszości n. Z powyższego twierdzenia wynika, że prawdopodobieństwo tego test Fermata daje dobrą odpowiedź wina 1 1 2 k (k-ilości testów). Istnieją liczby tak zwane liczby Carmichael R.D. Dla których test Fermata zawsze daje złą odpowiedź. Najmniejsza z tych liczb równa się 651=3 11 17. Czyli istnieje tabela takich liczb, które są mniejsze od 25 10 9. Test Millera Rabina Badamy, czy n to liczba pierwsza. Załóżmy, że n 1=2 s m, gdzie m to liczba nieparzysta. k-razy przeprowadzamy test. 1. Wybieramy liczbę, która musi być 0 x n. 2. Jeśli NWD x,n 1, wtedy n złożone, inaczej. 3. Obliczamy y 0 =x m mod m. 4. Jeśli y 0 =1 to przeprowadzamy obliczenia i stwierdzamy, że n jest pierwsza, inaczej. 2 5. Obliczamy y i =y i 1 mod n. Przerywając te obliczenia, gdy y i =±1. 6. Jeśli y i =1 to stwierdzamy, że n jest złożona, a jeśli y i = 1 to n jest pierwsze. Twierdzenie Jeśli m jest liczbą złożoną to prawdopodobieństwo, że losowo wybrany x 0 x n nie jest świadkiem pierwszości dla n wynosi co najmniej 3 4. Test Millera Rabina daje prawdopodobieństwo 1 1 4 k, że liczba jest liczbą pierwszą. 24
Testy deterministyczne Test AKS (Agrawal Kojal, Suksen) Niech NWD a, p =1, p 1, a N. Liczba p niech będzie liczbą pierwszą wtedy i tylko wtedy, gdy: x a p x p a mod p Liczba postaci 2 127 1, ta liczba ma 139 cyfr, była pierwszą największą liczbą pierwszą, liczba Luka udowodnił on 1876. Ta liczba przez 75 lat była największą znaną liczbą pierwszą. Liczby pierwsze postaci M k =2 k 1, gdzie k, też liczbą pierwszą nazywają się liczbami Mersena, a liczby pierwsza postaci 2 k 1 ( k=2 n, n N ) nazywają się liczbami pierwszymi Fermata. Twierdzenie Luka Liczba M k =2 k 1 ( k 2 ) wtedy i tylko wtedy jest liczbą pierwszą, gdy liczba L k 1 jest dzielna przez M k, gdzie L 1 =4, a L n 1 =L n 2 2. 25
Wykład 7 6.04.2009 Szyfr afiniczny Klusze a, s :0 a n, 0 s n, gdzie n -ilość liter alfabetu (litery numerowane od zera). NWD a, n =1 Szyfrowanie: litera x tekstu jawnego zamienia się na E x = a x s mod n=x '. Deszyfrowanie: D x ' = a ' x ' s ' mod n, gdzie a'=a 1 mod n, s '= n a ' s mod n. Jeśli a=1 to szyfr jest linowy. Złożoność obliczeniowa Mówimy, że algorytm A jest algorytmem czasu wielomianowego jeżeli istnieje stała całkowita d taka, że liczba operacji bitowych niezbędnych do wykonania algorytmu A na danej długości k jest rzędu O k d (np 8n 2 2 n=o n 2 ). Długość liczby n jest ilość bitów potrzebnych do jej zapisywania oraz dł n =1 [log 2 n ]=O ln n. Czas pracy testu Millera Rabina, gdy badamy liczbę n można oszacować jako O n 3. Klasy problemów Problemy klasy P Problemy należy do klasy P jeśli istnieje stała d i algorytm taki, że jeśli przypadek problemu ma dane długości mniejsze równe n ( n ) to algorytm odpowiada na pytanie w czasie O n d, to zaznaczy w czasie wielomianowym. Problemy klasy NP Problem należy do klasy NP jeśli dla każdego przypadku problemu, osoba dysponuje nieograniczoną mocą obliczeniową, może nie tylko odpowiedzieć na pytanie będące treścią problemu, ale w przypadku gdy odpowiedź brzmi tak może dostarczyć dowodu którego inna osoba może użyć do sprawdzenia poprawności odpowiedzi w czasie wielomianowym. Problem, czy P=NP należy do 7 nierozwiązanych problemów matematyki współczesnej (www.claymath.org Clay Mathematics Institute of Cambridge Massachusetts). Powszechnie uważa się, że P NP. Problem klasy NP-zupełny Problem Q klasy np. nazywamy problemem NP-zupełnym jeśli każdy inny problem klasy np. można zredukować do Q w czasie liniowym. 26
Twierdzenie Problem kryptoanalizy algorytmu asymetrycznych jest zagadnieniem z klasy NP. Z twierdzenia wynika, że złamanie szyfru utworzonego przy użyciu algorytmów asymetrycznych nie może być trudniejsze niż rozwiązanie problemu np. zupełnego. Nigdy nie osiągniemy dla algorytmów asymetrycznych takiego bezpieczeństwa jak dla algorytmu one-time pad (jednorazowego notatnika). Teoria złożoności obliczeniowej operuje asymptotyczną złożonością problemu, wyznacza to złożoność problemu z dokładnością do stałego czytnika, nawet jeśli ta stała wynosi 2 1000 w przypadku wyrażenia O n to mówimy o liniowym czasie obliczeń. Praktycznie jednak algorytm o złożoności n 2 1000 jest zupełnie bezużyteczny. Naturalnie jest rozważać zagadnienie NP-zupełne jako najbardziej złożone w klasie NP. Standardowym przykładem są algorytmy plecakowe (algorytmy plecakowe należą do klasy NP-zupełne). Szyfrowanie plecakowe Problem plecakowy Dane są liczby naturalne a 1,a 2,...,a n oraz liczba k. szukane są liczby i 1, i 2,...,i n {0 1} takie, że i j a j =k (k-plecaków). Problem z klasy NP-zupełnych. Szyfrowanie n j=1 Ciąg bitów i 1, i 2,...,i n jest szyfrowany poprzez liczbę i j a j przy tym powstają następujące problemy: 1) Pojedynczy kryptogram musi odpowiadać jednemu tekstowi jawnemu, ale można pokazać, n że j=1 n i j a j = j=1 k j a j, gdzie k j inny ciąg bitów. 2) Złamanie takich szyfrów jest trudne ze względu na NP-zupełność, ale nie znamy również żadnej metody by za pomocą klucza taki kryptogram deszyfrować. Oba problemy dają się rozwiązać poprzez pełne ograniczenia na wartości a j, j=1, k. Definicja wektora super rosnącego n j=1 Wektor a 1,a 2,...,a n nazywamy super rosnącym jeśli i n j i a j a i. Wtedy dla każdego wektora super rosnącego: 1. Każdemu kryptogramowi odpowiada jeden tekst jawny. 2. Deszyfrowanie może być dokonane w czasie proporcjonalnym do długości wektora super rosnącego. Wynika problem, każdy kto zna wektor super rosnący może zarówno szyfrować i deszyfrować, bo 27
algorytm asymetryczny przewiduje jeden klucz do szyfrowania i jeden do deszyfrowania. Aby poradzić z tym problemem szyfrowanie będzie odbywać się za pomocą innego wektora. W tym celu: n 1. Wybieramy liczbę M, która jest M a j. j=1 2. Wybieramy M i W takie, że M 2 W M, NWD M,W =1. 3. Tworzymy nowy ciąg a i ' = a i W mod M (klucz publiczny). Utworzony ciąg permutuje się, i tak utworzony wynik podaje się jako klucz publiczny, a klucz prywatny jest wektorem super rosnącym a 1, a 2,...,a n, M, W oraz użyta permutacja (klucz prywatny). Szyfrowanie i deszyfrowanie Dla prostoty założymy, że permutacja nie jest używana. Szyfrowanie bitów i 1,i 2,...,i n odbywa się standardowo za pomocą klucza publicznego i kryptogram równa się y= a ' i i j (stosujemy klucz publiczny). j n Deszyfrowanie: 1. Obliczamy wartość W 1 mod M 2. Obliczamy W 1 y mod M= a i i j =k j n 3. Dla kryptogramu K i wektora super rosnącego a 1, a 2,..., a n znajdujemy tekst jawny i 1,i 2,...,i n. Zauważmy, że i n =1 wtedy i tylko wtedy, gdy k a n. Po znalezieniu i n rozważmy wartość k '=k i n a n i super rosnący wektor a 1, a 2,..., a n analogicznie jak poprzedni możemy teraz znaleźć i n 1. Konstrukcja ciągu pseudo losowych Losowe ciągi są niezbędnym elementem algorytmów kryptograficznych. 1. Generowanie kluczy algorytmu RSA, szyfrowanie algorytmem ElGamala. 2. Generowanie podpisów cyfrowych. 3. Liczne protokoły kryptograficzne. 4. one-time pad (szyfrowanie notatnika) i pokrewne mu szyfrowanie strumieniowe. Ciąg pseudolosowe można uzyskać za pomocą algorytmu deterministycznych. Jedynym losowym elementu takiego ciągu jest zarodek. Ciąg pseudolosowy jest tworzony tak, że jego i-ty element s i jest wyznaczony przez algorytm z zarodka x, indeksu i oraz wartości s 1, s 2,..., s i 1. Nie powinny ciągi pseudolosowy być rozróżnialne od prawdziwe losowych ciągów przy użyciu 28
żadnych praktyczne dostępnych metod. To znaczy: niech {X n }, {Y n } są dwa siągi binarne, mówimy że te ciągi nie są rozróżnialne w czasie wielomianowym jeśli dla każdego algorytmu A zachodzi nierówność: c 0 P [ A X n =1] P [ A Y n =1] 1 n c Dla stałej c przy wystarczająco dużych n, gdzie P[ A X n =1] oznacza prawdopodobieństwo tego, że algorytm A daje odpowiedź 1, gdy na jego wejście podany jest losowy ciąg x n. Oprócz tego nie powinie być ciągi pseudolosowe przewidywalne, to znaczy, że bez znajomości zarodka nie da się obliczyć bitu s i z bitu s 1,s 2,...,s i 1. s i można policzyć za pomocą wzoru: s i = a s i 1 b mod n, gdzie b - liczba nieparzysta n - liczba parzysta a mod 4=1 s 0 - liczba duża s i 1 = a s i b mod n Ta konstrukcja nie pasuje dla celów kryptograficznych, bo można obliczyć zarodek. Generatory 1. Generator Linear Feedback Shift Register Zarodek w ciągu stanowi konfiguracje połączeń pomiędzy rejestrami, a węzłami realizującymi operacje XOR oraz początkowy ciąg bitów zapisanych w rejestrze przesuwającym. Rejestr przesuwający Generator liczb XOR Podczas jednego taktu pracy wyliczana jest wartość XOR i obliczany bit jest przesyłany do rejestru na miejsce pierwszego z lewej, a późnej przesuwane bity o jedną pozycje w prawo. 2. Generator BBS (Lenora and Manuel Blum, Mike Shub) Niech p i q są to liczby pierwsze, p q oraz p q=3 mod 4. Załóżmy, że r Z n, gdzie 2 n= p q i jest losowym elementem. Obliczamy: x i = x i 1 mod n, x 0 =r 2 mod n, a ciąg pseudolosowy s i = x i mod 2, i=1,2,... 3. Generator Blum-Micali a i p są to liczby pierwsze, p~1024 ( p rzędu 1024 bity i wyżej). x 0 p Stanowi zarodeg generatora. Definiujemy x i 1 =a x i mod p. Wtedy: 29
s i = 1 jeśli x i p 1 /2 0 w przeciwnym przypadku 4. Generator oparty o algorytm RSA Załóżmy e, n - klucz prywatny algorytmu RSA. Definiujemy x i 1 =x i e mod n oraz x 0 n zarodnik generatora, wtedy s i = x i mod 2. 30
Wykład 8 20.04.2009 1. Kryptosystem RSA Został przedstawiony w 1977 r. Nazwa tego systemu pochodzi od nazwisk jego autorów R. Rivest, A. Shamin, L. Adleman. Zastosowanie: Niech K 1 jest kluczem prywatnym, a K 2 kluczem publicznym osoby A (Alicja). 1. Szyfrowanie korespondencji Osoba B (Bob) pragnie przesłać list M do osoby A. W tym celu osoba B oblicza E K 2 M i wysyła. Osoba A otrzymuje E K 2 M i oblicza D K 1 E K2 M =M. To gwarantuje, że tylko osoba A może odczytać list od osoby B. 2. Uwierzytelnianie Osoba A pragnie rozesłać komunikat T potwierdzający przy tym, że jest jego autorem. Osoba A szyfruje T jako E K 1 T, każdy odbiorca deszyfruje wiadomość za pomocą klucza K 2, D K 2 E K 1 T =T. I Algorytm RSA Jednostkom m tekstu jawnego są liczby całkowite z przedziału 0 m N. W praktyce liczba N ma od 200 do 600 znaków dziesiętnych ( 200 600 ). Litery alfabetu są traktowane jako rozwiązanie liczby całkowitych przy podstawieniu 10. Co robi, każdy użytkownik: 1) Wybór kluczy. Losowo wybieramy dwie różne liczby pierwsze p i q, tak żeby n= p q N. 2) Losowo wybieramy liczbę e tak, aby e było tego samego rzędu wielkości co n oraz NWD e, n =1, gdzie n to funkcja Eulera. 3) Za pomocą algorytmu Euklidesa znajdujemy liczbę d=e 1 mod n. Liczby e, n - wygenerowany klucz e, n to klucz publiczny, natomiast d klucz prywatny. II Szyfrowanie Szyfrowane mogą być liczby m n. W taki sposób: E m =m e mod n=c (wykorzystywany klucz publiczny). III Deszyfrowanie D C =C d mod n=m (wykorzystywany klucz prywatny) 31
Przykład Załóżmy, że p=53, q=63 (w praktyce liczby p, q muszą być conajmniej 1024 bitowe). Jednocześnie obliczamy d =e 1 mod n =1237 e=1021 i n=3551 to klucz publiczny, natomiast d =1237 klucz prywatny. Użytkownik B pragnie przesłać wiadomość do osoby A. Wiadomość: 19 20 18 05 00 13 - M 1. Szukamy klucza publicznego osoby A. 2. Dzielimy wiadomość co 4 literki, bo wiadomość musi być mniejsza od n. 3. 1920 1021 mod3551=2393 1805 1021 mod 3551=1788 13 1021 mod 3551=2188 23 93 17 88 21 88 - C Żeby to deszyfrować wykorzystujemy klucz prywatny. Zasada tworzenia klucza szyfrowania i deszyfrowania opiera się na następującym twierdzeniu, które wypływa z twierdzenia Oliera. Twierdzenie 1 Niech n= p q jest iloczynem z różnych liczb pierwszych. Jeśli e d 1 mod n, to dla wszystkich x Z n wykonuje się kongruencja x e d x mod n. W trakcie szyfrowania i deszyfrowania wykonywane są operacje podnoszenia liczb do dużych potęg. Istnieje sporo metod potęgowania, zwłaszcza metoda binarna, meta metoda i metoda Montgomery. Twierdzenie 2 Niech A będzie algorytmem, który dla zadanego klucza e, n algorytmu RSA znajduje pasujący klucz D. Wtedy można skonstruować algorytm z podprocedurą A, który rozkłada n na czynniki pierwsze oraz ma podobny czas obliczeń, i używa podobnej pamięci co A. Twierdzenie 2 oznacza, że jeśli istnieje praktyczna metoda znajdowania prywatnych kluczy to można ukazać praktyczny algorytm rozkładu n na czynniki pierwsze. Problem rozkładu liczby na czyniki pierwsze jest problemem z klasy NP, ale nie wiadomo czy jest to problem NP-zupełny co świadczyło, by o jego trudności. Czas faktoryzacji (rozkład na czynniki pierwsze) zależy od ilości bitów liczby n i ten czas można oszacować jako L n =O n c, c=const, gdzie n ilość bitów. The magie words are squeamish ossifruga 1 Żeby deszyfrować to powiadomienie potrzebne było 17 lat. Liczba n miała 129 cyfr. Deszyfrowanie wymagało 220 dni, 600 ludzi, 1600 komputerów połączonych siecią. 1 Magiczne słowa są obrzydliwie nudne 32
2. Kryptosystem M. Kabina (1979 r.) Metoda ta ma wadę, że przy deszyfrowaniu otrzymywane są 4 różne teksty. Dla tej metody możliwość znalezienia tekstu jawnego z kryptogramu jest równoważna rozkładowi liczby na czynniki pierwsze. Wybór klucza, losowo wybieramy dwie różne liczby pierwsze p i q tak, żeby n= p q N. n to klucz publiczny, natomiast liczby p, q stanowią klucz prywatny. Szyfrowanie C=E m =m 2 mod n, m n Deszyfrowanie 1 m=c 2 mod n (stąd wypływa, że będą 4 różne pierwiastki) Przykład Załóżmy, że p=53, q=63, wtedy n=3551. Załóżmy, że mamy kryptogram C=1497. W tym celu obliczmy: y p 2 =1497 mod 53=13 y q 2 =1497 MOD67=23 Liczba p=53=8 m 5, gdzie m=6 oraz 13 2m 1 1 mod 53 Liczba q=67=4 m 3, gdzie m=16. Na podstawie Chińskiego twierdzenia o resztach otrzymujemy liczbę z 1 =969 taka, że 969 15 mod 15 969 31 mod 67 Dla reszt 15 i 36 otrzymujemy, że: z 2 =1711 z 3 = z 1 mod n=2582 z 4 = z 2 mod n=1840 Czyli mamy 4 teksty jawne. 3. Kryptosystem ElGamala (1985 r.) Wybór klucza. 1. Losowo wybieramy liczbę pierwszą p (w praktyce 1024 bity i wyżej). 2. Losowo wybieramy g tab, aby 1 g p 1. W idealnym przypadku g jest generatorem zbioru Z p. 3. Znajdujemy liczby a i h takie, że 1 a p 1, a h=g a mod p. 33
p, g, h jest wygenerowanym kluczem publicznym, natomiast a to klucz prywatny. Szyfrowanie Szyfrowane mogą być liczby n p. Wykonywane są następujące kropki: 1) Wybieramy losowo liczbę r tak, aby 1 r p 1. 2) Obliczamy kryptogram, który składa się z dwóch bloków: C= C 1,C 2 C 1 =g r mod p C 2 =m h r mod p Deszyfrowanie D C =C 2 C a 1 1 mod p Sprawdzenie: C 2 C a 1 1 =m h r g r a 1 =m g r a g r a 1 =m Możliwe jest jeszcze ukrycie informacji używając r. Przykład Załóżmy, że p=23, g=5, a=6. Obliczamy h=5 6 mod 23=8 Klucz został wygenerowany: 23, 5, 8 klucz publiczny 6 klucz prywatny Chcemy zaszyfrować wiadomość m=7 (musi m p ). Wybieramy r =10 i obliczamy. C 1 =5 10 mod 23=9 C 2 =7 8 10 mod 23=21 C= 9, 21 Aby deszyfrować posługujemy się kluczem prywatnym. D C =21 9 6 1 mod 23=7 34
Wykład 11 (9) 11.05.2009 1. Szyfrowanie strumieniowe Ta metoda prezentuje podejście, nie bloki, a pojedyncze bity są szyfrowane i bezpośrednio po szyfrowaniu gotowe do wysłania. Ona może być realizowana poprzez jednoczesne wykorzystanie ciągów pseudolosowych i idei one-time pad. Szyfrowanie za pomocą klucza K ma przebieg: a) Klucz K traktujemy jako zarodek generatora bitów pseudolosowych s 1,s 2,... b) kryptogram tekstu jawnego a 1,a 2,... ma postać c j =a j XOR s j. 2. RC4 Ta metoda jest szeroko stosowana w praktyce. Algorytm dobrze nadaje się do implementacji software'owej. Ciąg pseudolosowy używany do szyfrowana i deszyfrowania generowany jest jako ciąg bitów: a) w każdej fazie algorytmu generowany jest jeden bajt ciągu pseudolosowego. Jednocześnie uaktualniane są parametry i, j 256 oraz permutacje na zbiorze liczb {1, 2,..., 256 }. i, j, - wewnętrzne klucze b) pojedyncze fazy algorytmu wykonują następujące operacje i=i 1mod 256 j= j i mod 256 swap i, j zamienia wartość dla argumentu i oraz j k= i j Liczba k jest kolejnym bajtem ciągu pseudolosowego generowanego w tej fazie. c) Wewnętrzny klucz i, j, są inicjalizowane za pomocą ciągu bitów klucza k o długości m k=s 1, s 2,...,s m 1 przy czym i=0, j=0, n =n dla n 256. Następnie 256 razy wykonywane są operacje j= j i s i mod 256 swap i, j i=i 1mod m d) Zgodnie z zasadą szyfrowania strumieniowego generowany jest i-ty bit kryptogramu. Operacje wykonywane na w pojedynczej fazie zmierzają do zamiany w pseudolosowy sposób. Bajty k wybierane są jako wartość permutacji w miejscu dynamicznie wskazanym poprzez wartości i, j. 3. Algorytm Bluma-Goldwassr Algorytm jest opart o własności generatora BBS oraz trudności rozkładu liczby na czynniki pierwsze. Niech p i q będą dostatecznie dużymi liczbami pierwszymi oraz p=q=3 mod 4. Liczby p i q stanowią klucz służący do deszyfrowania natomiast m= p q to klucz szyfrowania. 35
Szyfrowanie a) Wybieramy losowe x 0 jako zarodek generatora BBS. b) Dla l-bitowego tekstu jawnego generujemy liczby x 1, x 2,..., x l 1, gdzie x i 1 =x i 2 mod n i {0,...,l }. Z tych bitów generujemy s 1, s 2,..., s l, gdzie s i = x i mod 2. c) Dla tekstu jawnego w postaci binarnej a 1,a 2,...,a l obliczamy kryptogram c i =a i XOR s i d) Kryptogramem podanego tekstu jawnego jest c 1, c 2,...,c l, x l 1 Deszyfrowanie Na podstawie p, q, x l 1 obliczamy x l, x l 1,..., x 1, a z nich a i =c i XOR s i Metoda obliczania s 1, s 2,..., s l. 2 Mamy x i 1 =x i mod n. Niech y 2 p =x i mod p, a y 2 q = x i mod q. Ponieważ p=q=3 mod 4, to y p =x i y q = x i p 1 4 mod p q 1 4 mod q Dalej rozważamy równania p u q v=1 x i 1 = p u y q q v y p, i=l 1,l,..., 2 Funkcje hashujące W kontekście zastosowań kryptograficznych te funkcje mogą być wykorzystywane: MD5 1) Przy przechowywaniu haseł. 2) Podpisach cyfrowych. 3) Uwierzytelnianiu dokumentów. Algorytm składa się z 4 rund. Dokonuje obliczeń na 6 blokach 32-bitowych i przekształca ciągi 512-bitowe w 128-bitowe. Każda runda wykorzystuje operacje logiczne,, (kreseczka to negacja). Powyższe operacje wykonywane są na odpowiadających sobie bitach 32-bitowych blokach X,Y, Z : definiujemy procedury F X,Y,Z =X Y X Z G X,Y, Z =X Y Y Z H X, Y, Z =X Y Z I X,Y, Z =Y X Z Za pomocą funkcji F,G,H, I definiujemy procedury FF,GG,HH,II. 36
FF a,b,c,d,m j, s,t i gdzie M j oznacza j-oty blok 32 bitów ciągu wejściowego, a + to dodawanie mod 2 32. FF a,b,c,d,m j, s,t i =a:=b Sh s F b,c,d M j t i Sh s oznacza operacje cyklicznego przesuwania o s pozycji w prawo. t i =[2 32 sin i ] Dla GG, HH,II funkcję F zastępuje się odpowiednią G, H,I. Algorytm używa rejestrów a, b, c, d przechowujących liczby 32-bitowe. Ich początkowe wartości są następujące: a=67452301 b=efcdab89 c=98badcfe d =10325476 Część całkowita Runda 1 Po kolei jest wykonywane 16 operacji: 1. FF a,b, c,d,m 0,7,t 1 2. FF a, b, c, d,m 1,12, t 2 3. FF a,b, c,d,m 2,7,t 3...... 16. FF a, b, c, d,m 15, 22, t 16 Każdorazowo rejestry są przesunięte o jedną pozycję. Ponadto przedostatnie argumenty tworzą ciąg losowy. Runda 2 Przebieg podobnie do rundy 1, jednak zamiast FF używamy procedury GG oraz ciąg okresowy 5, 9, 14,20. Poza tym używa wartość t s 1 oraz M 1 5i mod16. Runda 3 Przebieg z angiologicznymi zmianami ciąg 4, 11, 16,23 HH t 32 i M 5 3 i mod16 Runda 4 II 37