KRYPTOGRAFIA I OCHRONA DANYCH Krzysztof Kaczmarczyk 150024
Zadanie 1 Szyfrowanie DES Algorytm DES (Data Encryption Standard) to zastosowanie schematu Feistela. Algorytm operuje na 64-bitowych blokach używając 56-bitowego (8x7 bitów) klucza, wykonując 16 cykli (podstawieo wg schematu Feistela). DES jest symetrycznym algorytmem szyfrującym, w którym ten sam klucz używany jest zarówno do szyfrowania jak i deszyfrowania. Na początku (przed rozpoczęciem pierwszego cyklu) tekst jawny jest permutowany. Wewnątrz cyklu połówka danych (32 bity) rozszerzana jest do 48 bitów (tzw. permutacja rozszerzająca). Wynik permutacji poddawany jest operacji logicznej XOR (excusive OR - czyli alternatywa wykluczająca) wraz z pod kluczem danego cyklu. W ten sposób wyliczona wartośd dzielona jest na sześd 8-bitowych części, z których każda przepuszczana jest przez tzw. S-box. S-box to tablica rozmiaru 4x16, której każdy wiersz zawiera wszystkie liczby od 0 do 15. Pierwszy i ostatni bit 6-bitowego wejścia kodują numer wiersza, pozostałe kodują numer kolumny. Następnie połączone wyjścia S-boxów poddawane są permutacji. Po ostatnim cyklu, blok szyfrogramu jest przepuszczany przez permutację odwrotną do permutacji początkowej. rys. 1: Ilustracja działania algorytmu DES źródło: http://www.eventid.net/docs/desexample.asp
Szyfrowanie: Klucz: 981723425kj Wiadomość: Ala ma kota, a kot ma Alę! Rezultat: 0x8fa2417cccb4b03ee2a70e014ce93396a49e4117b3f154cbf8494e5eeb84c567 Deszyfrowanie: Klucz: 981723425kj Wiadomość: 0x8fa2417cccb4b03ee2a70e014ce93396a49e4117b3f154cbf8494e5eeb84c567 Rezultat: Ala ma kota, a kot ma Alę! Stanisław Klekot Notatki z Kryptografii szyfry, kwiecieo 2004; Mirosław Kutyłowski, Willy B. Strothmann Kryptografia Teoria i praktyka zabezpieczania systemów komputerowych, Warszawa 1998, http://tero.co.uk/des/test.php Zadanie 2 MD2 MD2 jest funkcją hashującą stworzoną w 1989 roku przez Rona Rivesta. Algorytm ten został zoptymalizowany pod kątem komputerów 8-bitowych. MD2 jest opisany w RFC1319. Nie jest on obecnie uważany za bezpieczną funkcję skrótu, i nie powinien byd wykorzystywany. Wejście: wikipedia Wyjśćie: 01ebd633170ac3210b4c25e941b3417 Wejście: Wyjśćie: 8350e5a3e24c153df2275c9f80692773 http://pl.wikipedia.org/wiki/md2
Zadanie 3 MD5 Algorytm MD5 jest funkcją szyfrującą, której autorem jest R. Rivest współautor szyfru RSA. W algorytmie tym, wiadomośd dowolnej długości przekształcana jest w swój 128-bitowy odcisk palca (sumę kontrolną). Jest to tak zwana funkcja haszująca. Etapy algorytmu MD5: 1. Doklejamy do wiadomości wejściowej bit o wartości 1 2. Doklejamy tyle zer ile potrzeba, żeby ciąg wejściowy składał się z bloków będących wielokrotnością bloku 512-bitowego i ostatniego bloku 448-bitowego. 3. Doklejamy 64-biotowy (zaczynając od najmniej znaczącego bitu) licznik oznaczający rozmiar wiadomości. W ten sposób otrzymujemy wiadomośd złożoną z 512-bitowych fragmentów. 4. Ustawiamy stan początkowy na 0123456789abcdeffedcba9876543210 5. Uruchamiamy na każdym bloku (zawsze istnieje co najmniej jeden blok, nawet wtedy, gdy wiadomość wejściowa jest pusta) funkcję zmieniającą stan. 6. Po przetworzeniu ostatniego bloku zwracamy stan jako obliczony skrót wiadomości. Funkcja zmiany stanu ma 4 cykle (co łącznie daje 64 kroki). Stan jest traktowany jako 4 liczby 32- bitowe. W każdym kroku do jednej z tych liczb dodawany jest jeden z szesnastu 32-bitowych fragmentów bloku wejściowego, pewna stała zależna od numeru kroku oraz pewna prosta funkcja boolowska trzech pozostałych liczb. W dalszych krokach liczba ta jest obracana (przesuwana cyklicznie z najstarszymi bitami wsuwanymi w najmłodsze pozycje) o liczbę bitów zależną od kroku, oraz dodawana jest do niej jedna z pozostałych liczb. Funkcje te to: W krokach 1 do 16 (cykl 1) funkcja F(x,y,z) = (x and y) or (neg x and z) (jeśli x to y, w przeciwnym wypadku z) W krokach 17 do 32 (cykl 2) funkcja G(x,y,z) = (x and z) or (y and neg z) (jeśli z to x, w przeciwnym wypadku y) W krokach 33 do 48 (cykl 3) funkcja H(x,y,z) = (x xor y xor z) (suma argumentów modulo 2, lub innymi słowy: czy występuje nieparzysta liczba jedynek w argumentach) W krokach 49 do 64 (cykl 4) funkcja I(x,y,z) = (y xor (x or neg z)) (jeżeli (z = 1 i x = 0) wtedy y, w przeciwnym wypadku nie y)
rys. 2: ilustracja działania algorytmu MD5 źródło: http://upload.wikimedia.org/wikipedia/commons/thumb/d/d8/md5.svg/546px-md5.svg.png Wiadomość: Ala ma kota, a kot ma ale Rezultat: 509b7bafdc5d397cd83537fcbf1aad3c Ryszard Tanaś, Kryptografia wykład z podstaw klasycznej kryptografii z elementami kryptografii kwantowej ; http://pl.wikipedia.org/wiki/md5
Zadanie 4 - SHA Algorytm opracowany przez NIST przy udziale NSA opublikowany w 1993. Nowsza wersja SHA-1 została opublikowana w roku 1995. Idea tego algorytmu oparta jest na MD4 i MD5, lecz w tym wypadku wartośd funkcji haszującej jest liczbą 160-bitową, w związku z czym algorytm wymaga o jeden rejestr więcej niż MD5. Również nieliniowe funkcje transformujące używane są tutaj w inny sposób niż w MD5, dokonując dodatkowych operacji na poszczególnych słowach wiadomości. Algorytm w każdej rundzie wykonuje 20 kroków zamiast (jak MD5) 16. Ogólnie jednak działanie algorytmu SHA jest bardzo podobne do MD5 i uważane za jego bezpieczniejszą wersję do czego przyczynia się dłuższa wartośd funkcji haszującej i pewne ulepszenia samego algorytmu, co w efekcie prowadzi np. do jego odporności na tzw. atak urodzinowy. Wiadomość: Ala ma kota, a kot ma ale Rezultat: e48b962b3dcb57e072b237edbdfd3c4b08a71b27 Ryszard Tanaś, Kryptografia wykład z podstaw klasycznej kryptografii z elementami kryptografii kwantowej ; http://pl.wikipedia.org/wiki/sha-1. Zadanie 5 - RSA RSA jest szyfrem z grupy algorytmów kryptografii asymetrycznej. Stworzony został w 1978 roku przez grupę: Ronald Rivest, Adi Shamir, Leonard Adleman (nazwa RSA jest akronimem utworzonym z pierwszych liter nazwisk jego twórców). RSA opiera się na trudności faktoryzacji dużych liczb. Znalezienie szybkiej metody faktoryzacji doprowadziłoby do złamania RSA, aczkolwiek nie ma dowodu, że nie da się go złamad w inny sposób. Szyfrowanie i deszyfrowanie Aby wygenerowad klucz RSA należy najpierw znaleźd dwie duże losowe liczby pierwsze p i q oraz liczbę e, która jest względnie pierwsza z (p-1)(q-1). Następnie,, ponieważ wybraliśmy względnie pierwsze e, ma ono odwrotnośd, którą można łatwo obliczyd stosując rozszerzony algorytm Euklidesa). Obliczyd należy także: Kluczem publicznym jest para (e,n), natomiast kluczem prywatnym para (d,n). Liczby p i q należy zniszczyd. Aby zaszyfrowad wiadomośd posługujemy się następującym wzorem: Z kolei do deszyfrowania wiadomości skorzystamy ze wzoru:
Nie znając d nie potrafimy łatwo odzyskad wiadomości z kryptogramu. Nie znając faktoryzacji n na p i q nie znamy też prostej metody odtworzenia d z e. Zagrożeniem dla szyfrowania RSA są komputery kwantowe, które (jeśli zostaną skonstruowane) będą mogły poradzid sobie ze złamaniem szyfru RSA. 1. Wybieramy dwie liczby pierwsze p = 61 i q = 53 2. Wyliczamy 3. Obliczamy 4. Wybieramy e > 1 względnie pierwsze do 3120 e = 17 5. Obliczamy takie, że : d = 2753 Kluczem publicznym jest (n = 3233,e = 17). Funkcją szyfrującą dla tego klucza jest więc: Kluczem prywatnym jest (n = 3233,d = 2753). Funkcja deszyfrująca: Dla przykładowego m = 123 By odszyfrować c = 855, liczymy.
źródło przykładu: http://pl.wikipedia.org/wiki/rsa_%28kryptografia%29 Ryszard Tanaś, Kryptografia wykład z podstaw klasycznej kryptografii z elementami kryptografii kwantowej ; http://pl.wikipedia.org/wiki/rsa_%28kryptografia%29 Zadanie 6 szyfr ElGamala Szyfrowanie ElGamala to jeden z dwóch najważniejszych algorytmów kryptografii asymetrycznej (obok opisanego wyżej RSA). Oparty jest on na trudności problemu logarytmu dyskretnego w ciele liczb całkowitych modulo duża liczba pierwsza. Algorytm został opublikowany w połowie lat 80. XX wieku przez Egipcjanina Taher Elgamal a. Szyfrowanie Na początku procesu szyfrowania wygenerowad należy klucz. Aby to zrobid wybieramy dowolną liczbę pierwszą p, dowolny generator α podgrupy multiplikatywnej, tzn. taki element, którego rząd równy jest p-1 oraz dowolne k, takie że 1 < k < p. Obliczamy β z następującego wzoru: Następnie publikujemy trójkę (p, α, β) jako klucz publiczny. Kluczem prywatnym jest (p,α,β,k). Szyfrowanie: Mając do zaszyfrowania wiadomośd m przedstawiamy ją jako element grupy *1 < m < p 1], wybieramy losową liczbę x i liczymy (modulo p): Deszyfrowanie: Aby dokonad deszyfrowania wiadomości wystarczy prosta operacja: Następnie znajdujemy odwrotnośd β x (oczywiście nadal modulo p) rozszerzonym algorytmem Euklidesa: γβ x + δp = 1 W koocu dzielimy przez β x, czyli mnożymy przez jej odwrotnośd γ:
Stanisław Klekot Notatki z Kryptografii szyfry, kwiecieo 2004; Mirosław Kutyłowski, Willy B. Strothmann Kryptografia Teoria i praktyka zabezpieczania systemów komputerowych, Warszawa 1998; http://pl.wikipedia.org/wiki/elgamal. Zadanie 7 szyfr Hilla W kryptografii klasycznej szyfr Hill a jest poligraficznym szyfrem podstawieniowym opartym o algebrę liniową. Wynaleziony został w 1929 roku przez Lester a S. Hill a i był pierwszym szyfrem, który operował (chod z trudem) na więcej niż trzech symbolach jednocześnie. Działanie Na początku każda litera kodowana jest jako liczba. Najczęściej używany jest najprostszy schemat: A = 0, B = 1,, Z = 25. W ten sposób otrzymujemy wektor złożony z N liter, który mnożymy przez macierz NxN modulo 26. Macierz ta jest kluczem szyfru, a jej wartości powinny byd losowe, tak żeby macierz była odwracalna w dzięki czemu możliwa będzie deszyfracja. Wiadomość: ACT Klucz: GYBNQKURP przekształcony do macierzy: Dalej: A przekształcamy do 0, C = 2, T = 19, zatem wektor wiadomości to: Szyfrowanie odbywa się poprzez obliczenie wektora: Który odpowiada zaszyfrowanemu tekstowi: POH, zatem Wiadomość zaszyfrowana: POH Dla tego samego klucza szyfrujemy inną wiadomośd:
Wiadomość: CAT Wiadomość zaszyfrowana: FIN Stanisław Klekot Notatki z Kryptografii szyfry, kwiecieo 2004; Mirosław Kutyłowski, Willy B. Strothmann Kryptografia Teoria i praktyka zabezpieczania systemów komputerowych, Warszawa 1998; http://en.wikipedia.org/wiki/hill_cipher Zadanie 8 szyfr Cezara Szyfr Cezara (zwany również szyfrem przesuwającaym) jest w kryptografii jedną z najprostszych technik szyfrowania. Jest to pewien rodzaj szyfru podstawieniowego, w którym każdą literę wiadomości szyfrowanej zastępuje się oddaloną od niej o stałą liczbę pozycji w alfabecie inną literą (szyfr monoalfabetyczny), przy czym kierunek zmiany musi byd zachowany. Szyfr cezara nie rozróżnia liter małych i dużych. Algorytm szyfru Cezara bywa wykorzystywany w bardziej złożonych systemach szyfrowania, takich jak szyfr Vigenere a. rys. 3: ilustracja działania szyfru cezara źródło: http://pl.wikipedia.org/wiki/szyfr_cezara Wiadomość: ala ma kota a kot ma mysz Klucz: 7 Wiadomość zaszyfrowana: hsh th rvah h rva th tfzg Stanisław Klekot Notatki z Kryptografii szyfry, kwiecieo 2004; Mirosław Kutyłowski, Willy B. Strothmann Kryptografia Teoria i praktyka zabezpieczania systemów komputerowych, Warszawa 1998; http://pl.wikipedia.org/wiki/szyfr_cezara
Zadanie 9 Szyfr Vigenère'a Szyfr Vigenère'a, to polialfabetyczny szyfr podstawieniowy, stworzony przez Blaise de Vigenere`a, oficjalnie opublikowany w jego pracy "Traicte des Chiffres" w 1586 roku. Podczas tworzenia swojego szyfru Vigenere chciał skonstruowad szyfr, który będzie bardziej odporny na złamanie niż szyfry monoalfabetyczne. Szyfrowanie przebiega następująco: Najpierw należy utworzyd słowo klucz. Następnie każdą literę szyfrowanej wiadomości kodujemy wykorzystując alfabet zaczynający się od odpowiadającej litery w kluczu. W przypadku, gdy klucz jest krótszy od szyfrowanego tekstu, powtarzamy jest on wielokrotnie. Szyfrowanie i deszyfrowanie odbywa się na podstawie tablicy Vigenere`a, która wygląda następująco: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z B C D E F G H I J K L M N O P Q R S T U V W X Y Z A C D E F G H I J K L M N O P Q R S T U V W X Y Z A B D E F G H I J K L M N O P Q R S T U V W X Y Z A B C E F G H I J K L M N O P Q R S T U V W X Y Z A B C D F G H I J K L M N O P Q R S T U V W X Y Z A B C D E G H I J K L M N O P Q R S T U V W X Y Z A B C D E F H I J K L M N O P Q R S T U V W X Y Z A B C D E F G I J K L M N O P Q R S T U V W X Y Z A B C D E F G H J K L M N O P Q R S T U V W X Y Z A B C D E F G H I K L M N O P Q R S T U V W X Y Z A B C D E F G H I J L M N O P Q R S T U V W X Y Z A B C D E F G H I J K M N O P Q R S T U V W X Y Z A B C D E F G H I J K L N O P Q R S T U V W X Y Z A B C D E F G H I J K L M O P Q R S T U V W X Y Z A B C D E F G H I J K L M N P Q R S T U V W X Y Z A B C D E F G H I J K L M N O Q R S T U V W X Y Z A B C D E F G H I J K L M N O P R S T U V W X Y Z A B C D E F G H I J K L M N O P Q S T U V W X Y Z A B C D E F G H I J K L M N O P Q R T U V W X Y Z A B C D E F G H I J K L M N O P Q R S U V W X Y Z A B C D E F G H I J K L M N O P Q R S T V W X Y Z A B C D E F G H I J K L M N O P Q R S T U W X Y Z A B C D E F G H I J K L M N O P Q R S T U V X Y Z A B C D E F G H I J K L M N O P Q R S T U V W Y Z A B C D E F G H I J K L M N O P Q R S T U V W X Z A B C D E F G H I J K L M N O P Q R S T U V W X Y Wiadomość: ALA MA KOTA A KOT MA MYSZ Klucz: KLUCZYK Wiadomość zaszyfrowana: KWUOZIYDLUMNRWKXSUY Proces szyfrowania: Bierzemy klucz (KLUCZYK) oraz wiadomośd do zaszyfrowania i uzupełniamy klucz do długości wiadomości: ALA MA KOTA A KOT MA MYSZ KLU CZ YKKL U CZY KK LUCZ
Korzystając z tablicy Vigenere`a wyszukujemy litery znajdujące się na przecięciu wierszy i kilumn wyznaczonych przez kolejne pary liter: A,K => K; L,L => W; A,U => U; M,C => O; ; Z,Z => Y W ten sposób otrzymujemy słowo KWUOZIYDLUMNRWKXSUY. Deszyfrowanie pprzeprowadzamy w sposób analogiczny. Stanisław Klekot Notatki z Kryptografii szyfry, kwiecieo 2004; http://pl.wikipedia.org/wiki/szyfr_vigenere a Zadanie 10 szyfr Vernama Szyfr Vernama należy do szyfrów polialfabetycznych. W roku 1817 Gilbert Vernam stworzył maszynę, która wykorzystywala szyfr z kluczem jednokrotnym, czyli taki, w którym klucz jest losową sekwencją znaków i jest używany bez powtórzeo. Dzięki jego maszynie możliwe jest stosowanie szyfrów z kluczem jednokrotnym w systemach komputerowych. Swoje urządzenie Vernam skonstruował do łączności telegraficznej korzystającej z 32-znakowego kodu Baudota. Każdy znak kodu jest kombinacją pięciu sygnałów lub ich braku, co odpowiada bitom 1 i 0 w komputerach. Niepowtarzalny losowy ciąg znaków klucza jest wyperforowany na taśmie papierowej i każdy bit tekstu jawnego jest dodawany modulo 2 do kolejnego bitu klucza. Jeżeli mamy wiadomośd M=m 1, m 2, m 3,, m n, to aby ją zaszyfrowad, należy każdy jej bit m i dodad modulo 2 (funkcja XOR) do bitu pochodzącego z idealnego generatora losowego K = k1, k2,, kn. Generatorem takim może byd na przykład ciąg losowy n doświadczeo Bernoulliego z prawdopodobieostwem 0,5 (np. rzut syemtryczną monetą). Szyfrogram C = c1, c2,, cn odczytujemy w analogiczny sposób, korzystając z ciągu bitów wygenerowanego przy szyfrowaniu, zatem:. Na podstawie twierdzenia: jeżeli dwie zmienne losowe X1 i X2 są niezależne i X2 ma rozkład jednostajny nad {0, 1}, to Y = X1 V X2 ma rozkład jednostajny nad {0,1} otrzymujemy wiadomośd zaszyfrowaną. Wejście: Wiadomość: Kiedy idziemy do kina? Wygenerowany klucz: guwsoufsukysbpqdaiszzb
Wyjście: Wiadomość zakodowana: [44, 14, 2, 3, 30, 71, 14, 3, 29, 14, 2, 10, 30, 71, 3, 8, 71, 12, 14, 9, 6, 88] Wiadomość odkodowana: "Kiedy idziemy do kina?" http://pl.wikipedia.org/wiki/szyfr_vernama Zadanie 11 Pierwszość Protha Twierdzenie Protha definiuje warunek, aby dana liczba była pierwsza. Oto treśd twierdzenia: Twierdzenie Protha: Niech N = k2 m + 1, gdzie k jest nieparzyste i mniejsze od 2 m. Jeżeli istnieje liczba całkowita a taka, że to N jest liczbą pierwsza. Na odwrót, jeśli powyższa kongruencja nie zachodzi. Wejście: pp 13 Wyjście: 13 to liczba pierwsza http://pl.wikipedia.org/wiki/liczby_fermata Zadanie 12 Liczby doskonałe Liczba doskonała to liczba naturalna n, będąca sumą wszystkich swoich podzielników różnych od niej samej. Przykładami takich liczb są: 6, 28, 496, 8128, 33550336, 8589869056, 137438691328 Algorytm poszukuje k liczb doskonałych. Wejście: ruby doskonale.rb 3
Wyjście: Generowanie n doskonalych liczb. 6 jest liczba doskonala 28 jest liczba doskonala 496 jest liczba doskonala http://www.u.lodz.pl/~wibig/hieronim/hie15pok.htm; http://pl.wikipedia.org/wiki/liczby_doskonałe Zadanie 13 - LZW Lempel-Ziv-Welch (skracane zwykle do LZW) metoda strumieniowej bezstratnej kompresji słownikowej, będąca modyfikacją metody LZ78. Algorytm wymyślony został przez Terryego A. Welcha i został opisany w roku 1984 w artykule A technique for high-performance data compression, opublikowanym w numerze 6. Computer (str. 8-19). Metoda LZW jest względnie łatwa do zaprogramowania, daje bardzo dobre rezultaty. Metodę wykorzystuje się między innymi w programach ARC, PAK i UNIX-owym compress, w formacie zapisu grafiki GIF, w formatach PDF i PostScript (filtry kodujące fragmenty dokumentu) oraz w modemach (V.32bis). KOMPRESJA Wejście: ciąg do dekompresji: abccd_abccd_acd_acd_acd_ alfabet: [a b c d _] Wyjście: ZAKODOWANA: [1, 2, 3, 3, 4, 5, 6, 8, 10, 1, 9, 11, 16, 15, 10] DEKOMPRESJA Wejście: ciąg do dekompresji: [1, 2, 3, 3, 4, 5, 6, 8, 10, 1, 9, 11, 16, 15, 10] wygenerowany alfabet: [a b c d _] Wyjście: ODKODOWANA: abccd_abccd_acd_acd_acd_ http://en.wikipedia.org/wiki/lempel Ziv Weg
Zadanie 14 - Entropia W teorii informacji entropia zdefiniowana został jako średnia ilośd informacji, przypadająca na znak symbolizujący zajście zdarzenia z pewnego zbioru, w którym każde zdarzenie przypisane ma prawdopodobieostwo wystąpienia. Wzór na entropię: gdzie p(i) prawdopodobieostwo zajścia zdarzenia i, a n liczba wszystkich zdarzeo danej przestrzeni. W przypadku kodowania ciągu znaków jest to prawdopodobieostwo wystąpienia i-tego znaku. W teorii informacji najczęściej stosuje się logarytm o podstawie r=2, wówczas jednostką entropii jest bit. Dla r= e jednostka ta nazywa się nat (nit), natomiast dla r=10 dit lub hartley. Zadanie polega na liczeniu entropii dla zadanego ciągu zdarzeo losowych, który zadany jest w postaci pliku dwupozycyjnych rekordów. Wartośd zmiennej losowej to liczba całkowita, prawdopodobieostwo to liczba zmiennoprzecinkowa. Wejście: # zawartośd przykładowego pliku: 12 0.654 3 0.346 Wyjście: Entropia: 0.644935254959156 nat Entropia: 0.280091822413629 hartley http://pl.wikipedia.org/wiki/entropia_(teoria_informacji)