Inzynieria bezpieczenstwa
Transkrypt
Inzynieria bezpieczenstwa
INŻYNIERIA BEZPIECZEŃSTWA LABORATORIUM NR 3 SZYFRY PODSTAWIENIOWE: WIELOALFABETOWE, HOMOFONICZNE, POLIGRAMOWE WSTĘP DO KRYPTOANALIZY 1 Proste szyfry podstawieniowe – przypomnienie wiadomości z laboratorium nr 1 W prostych szyfrach podstawieniowych stosuje się jednoznaczne odwzorowanie: f : mi → f (mi ) zastępujące każdy znak tekstu jawnego odpowiadającym mu znakiem kryptogramu. Tekst jawny m składa się ze znaków oznaczonych m1, m2, …. W celu zaszyfrowania, przekształcenie stosujemy do każdego znaku, otrzymując: E f (m) = f (m1 ) f (m2 )... Przykładowy prosty szyfr podstawieniowy można zrealizować za pomocą tabeli 1: mi f(mi) A F B E C K D J E N F P G O H C I D J Y K U L H M V N M O B P Z Q L R W S G T X U T V A W R X I Y S Tabela 1 - Przykład prostego szyfru podstawieniowego Dla tak zdefiniowanego przekształcenia szyfru podstawieniowego, tekstowi jawnemu KRYPTOGRAFIA odpowiada szyfr UWSZXBOWFPDF. Odwzorowaniu n znaków odpowiada permutacja liczb całkowietych 0,1,…,n-1, a zatem liczba możliwych podstawień wynosi n!. Kluczem szyfru jest permutacja elementów stosowanego alfabetu. W przykładzie, w którym zastosowano litery alfabetu angielskiego, zawierającego 26 liter, istnieje 26!= 4 × 10 26 różnych podstawień. W przypadku zastosowania podstawienia dla całego zakresu kodów ASCII, ilość podstawień będzie wynosić 256!. Odmianą prostych szyfrów podstawieniowych monoalfabetowych są szyfry przesunięte, w których alfabetem tajnym jest alfabet przesunięty cyklicznie o pewną liczbę pozycji k. Przykładem szyfru przesuniętego może być szyfr Cezara (dla tego szyfru k=3). Szyfry podstawieniowe monoalfabetowe są łatwe do złamania. Wystarczy zastosować analizę statystyczną: zbadać rozkład częstości znaków w tekście jawnym i kryptogramie, a następnie skojarzyć znaki o zbliżonych częstościach występowania (dane statystyczne zawiera tabela z dodatku 4.1). W celu ułatwienia sobie analizy kryptogramu, kryptoanalityk powinien znać też występujące często ciągi dwu- i trzyznakowe (digramy i trigramy). Z Q 2 Szyfry podstawieniowe homofoniczne W szyfrach tych każdy znak tekstu jawnego mi jest odwzorowany na jeden znak ze zbioru f(mi) tekstu zaszyfrowanego, przy czym zbiory f(mi) są rozłączne. Znaki zbioru f(mi) nazywane są homofonami. Tekst jawny m = m1, m2, … jest zaszyfrowany jako c = c1, c2, …, przy czym znaki ci wybiera się dowolnie ze zbioru homofonów f(mi). Przykład. Zakładamy, że litery (z alfabetu angielskiego, bez polskich znaków diakrytycznych) są szyfrowane jako liczby dwucyfrowe. Liczba znaków przydzielonych każdej literze jest proporcjonalna do względnej częstości jej występowania w tekście i każda liczba jest przydzielona tylko do jednej litery. Możliwe przyporządkowanie liczb przedstawia tabela: Litera A B C D E F G … Homofony 19 34 41 56 60 73 83 96 31 27 59 62 81 11 28 77 10 23 42 49 61 88 99 76 23 Tabela 2 - Przykład przyporządkowania liczb - szyfr homofoniczny Tekst jawny m = B A C A może być zaszyfrowany jako c = 31 56 59 19. Szyfry homofoniczne są trudniejsze do złamania niż proste szyfry podstawieniowe, gdyż ukrywają rozkład znaków w kryptogramie przyporządkowując jednej literze tekstu jawnego wiele symboli kryptogramu. Im więcej symboli przydzielonych będzie literom, tym szyfr będzie mocniejszy. Szyfr ten nie ukrywa jednak statystycznych właściwości języka, co można sprawdzić np. analizując rozkład digramów. 3 Szyfry podstawieniowe wieloalfabetowe Szyfry te zostały opracowane i wprowadzone do użytku w XVI wieku. Mają one wiele jednoznakowych kluczy, które zmieniają się w procesie szyfrowania, a każdy z kluczy stosowany jest do szyfrowania pojedynczego znaku tekstu jawnego. Po wyczerpaniu wszystkich kluczy stosowane są one cyklicznie (szyfry wieloalfabetowe są zwykle szyframi okresowymi). Liczba kluczy nazywana jest okresem szyfru. Szyfry wieloalfabetowe ukrywają rozkład znaków tekstu jawnego dzięki użyciu wielu podstawień. 3.1 Szyfr Vigenere’a Pochodzi z XVI wieku. Wymaga przypisania znakom tekstu jawnego liczb, np. wg następującej tabeli: Klucz 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 A 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 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 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 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 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 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 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 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 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 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 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 Tekst jawny L M N O L M N O M N O P N O P Q O P Q R P Q R S Q R S T R S T U S T U V T U V W U V W X V W X Y W X Y Z X Y Z A Y Z A B Z A B C A B C D B C D E C D E F D E F G E F G H F G H I G H I J H I J K I J K L J K L M K L M N P 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 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 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 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 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 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 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 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 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 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 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 Tabela 3 - Tablica szyfru Vigenere'a Dla klucza, będącego sekwencją k = k1, k2, …szyfrowanie znaku mi należącego do alfabetu jawnego n-literowego, jest określone zależnością: ci = (mi + ki ) mod n Wyrażenie deszyfrujące ma postać: mi = (ci − ki ) mod n Dla okresu szyfru Vigenere’a równego 1, szyfr ten staje się prostym szyfrem podstawieniowym. Przykład. Alfabet zawiera 26 liter, kluczem szyfru Vigenere’a jest ciąg E N T D O o okresie d = 5. Tekst jawny KRYPTOGRAFIA będzie zaszyfrowany następująco: m= K k= E c= O R N E Y T R P D S T O H O E S G N T R T K A D D F O T I E M A N N W procesie szyfrowania szukamy kolumny, zawierającej odpowiedni znak tekstu jawnego, oraz wiersza, zawierającego znak klucza. Do kryptogramu dopisujemy znak, będący na przecięciu znalezionego wiersza i kolumny. Tablica Vigenere’a może służyć także do deszyfrowania. Wtedy szukamy wiersza odpowiadającego znakowi klucza, a literę tekstu jawnego odczytujemy znak z nagłówka kolumny, w której znajduje się litera kryptogramu. 4 Szyfry podstawieniowe poligramowe Szyfry poligramowe lub inaczej wieloliterowe szyfrują naraz większe bloki tekstu jawnego. Złamanie takich szyfrów jest trudne, ze względu na ukrycie częstości występowania liter w kryptogramie. Przykładowymi szyframi poligramowymi mogą być szyfr Hilla oraz szyfr Playfaira. 4.1 Szyfr Playfaira Szyfr Playfaira wynaleziono w XIX wieku, był on stosowany w czasie I wojny światowej. Kluczem w tym szyfrze jest przypadkowa tablica 5×5 znakowa, w której pominięto nieużywaną literę J: W A R F S I C O D B E P G K Y M N Q T U V H X L Z Tabela 4 - Szyfr Playfaira Algorytm szyfrowania wygląda następująco: 1) Jeśli m1 i m2 leżą w tym samym wierszu, to znakami kryptogramu c1 i c2 są litery leżące po prawej stronie m1 i m2, przy czym pierwszą kolumnę traktuje się jako położoną na prawo od ostatniej; 2) Jeśli m1 i m2 leżą w tej samej kolumnie, to znakami kryptogramu c1 i c2 są litery leżące poniżej m1 i m2, przy czym pierwszy wiersz traktuje się jako położony pod ostatnim wierszem; 3) Jeśli m1 i m2 leżą w różnych kolumnach i wierszach, to znakami kryptogramu c1 i c2 są litery znajdujące się w narożnikach prostokąta, wyznaczonego przez m1 i m2, przy czym c1 pochodzi z wiersza zawierającego m1, a c2 – z wiersza zawierającego m2; 4) Jeśli m1 = m2 , to do tekstu jawnego pomiędzy te litery wstawia się nieznaczącą literę, np. X. Podobnie jeśli ostatnia litera nie ma pary, dopisuje się nieznaczącą literę na koniec tekstu jawnego. Przykład: m= c= K G R F Y E P G T Q O D G Q R O A R F S I C A W 5 Algorytm z kluczem jednorazowym Może się to wydawać niemożliwe, jednak istnieje idealny algorytm szyfrujący. Jest on nazywany po angielsku one-time-pad (można to tłumaczyć jako algorytm z kluczem jednorazowym). Klasycznie algorytm ten jest dużym zbiorem o niepowtarzalnych i przypadkowych sekwencjach znaków, zapisanych razem na sklejonych arkuszach papieru. Każdy klucz używany jest tylko jeden raz, do zaszyfrowania tylko jednej wiadomości. Po zaszyfrowaniu tekstu jawnego nadawca niszczy już wykorzystaną część przypadkowej sekwencji znaków. Odbiorca musi dysponować identycznym zbiorem sekwencji i używa tych samych znaków zbioru do operacji odszyfrowania, po czym, tak, jak nadawca, niszczy zbiór znaków stanowiących klucz. Przy nadawaniu nowej wiadomości należy zastosować nowy zbiór znaków i nowe znaki klucza. Przykładowo, szyfrujemy wiadomość ONETIMEPAD kluczem postaci TBFRGFARFM Otrzymujemy następujący kryptogram: IPKLPSFHGQ gdyż O + T mod 26 = I, N + B mod 26 = P, E + F mod 26 = K,… itd. Zakładając, że przeciwnik nie ma dostępu do jednorazowego zestawu znaków, stosowanego do szyfrowania wiadomości, można powiedzieć, że jest to idealnie bezpieczny algorytm utajniania. Dowolny kryptogram może być z równym prawdopodobieństwem kryptogramem dowolnego tekstu jawnego o tej samej długości. Ze względu na to, że każdy klucz jest równie prawdopodobny (klucze są tworzone losowo), nie ma tu informacji, mogącej ułatwić złamanie szyfru. Kluczem mógłby być przykładowo następujący zestaw znaków: POYYAEAAZX Co po odszyfrowaniu daje SALMONEGGS Albo, użycie klucza BXFGBMTMXM prowadzi do otrzymania GREENFLUID Zatem kryptoanalityk nie ma możliwości rozstrzygnięcia, który tekst jawny jest poprawny, gdyż wszystkie teksty jawne są jednakowo prawdopodobne. Przypadkowy klucz zsumowany modulo 2 z nieprzypadkowym tekstem jawnym daje całkowicie losowy kryptogram i nawet największa moc obliczeniowa na świecie nie umożliwi złamania tego szyfru. Dużą wadą tej metody szyfrowania jest generowanie przypadkowych kluczy. Każda metoda złamania takiego szyfru będzie metodą złamania algorytmu generowania klucza. Stosowanie generatorów liczb pseudolosowych (np. wbudowanych w języki programowania) nie jest dobrym rozwiązaniem, gdyż praktycznie prawie zawsze mają one właściwości nielosowe; konieczne jest użycie prawdziwie losowego źródła (co, wbrew pozorom, jest trudniejsze, niż się wydaje), gdyż dopiero wtedy bezpieczeństwo algorytmu z kluczem jednorazowym jest gwarantowane. Przykładem algorytmu z kluczem jednorazowym może być również XOR, jeśli tylko zachowane są podane powyżej warunki (klucz całkowicie losowy i użyty wyłącznie jeden raz). 6 Kryptoanaliza Podstawowym zadaniem kryptografii jest utrzymanie w tajemnicy tekstu jawnego, bądź klucza, bądź obu elementów jednocześnie przed atakującymi (przeciwnikami), którzy chcą uzyskać pełen dostęp do tekstów przesyłanych pomiędzy nadawcą i odbiorcą. Kryptoanaliza jest nauką o odtwarzaniu tekstu jawnego bez znajomości klucza. Zajmuje się również wyszukiwaniem słabych punktów systemów kryptograficznych, punktów, które mogą pozwolić na znalezienie sposobu do poznania tekstu jawnego lub klucza. Utrata tajności klucza wskutek działań innych, niż kryptoanalityczne, nazywana jest kompromitacją klucza. Stosowanie kryptoanalizy nazywa się łamaniem szyfru (ang. attack). Podstawowym zadaniem kryptoanalizy jest założenie, że bezpieczeństwo algorytmu jest oparte na kluczu. Należy założyć, że kryptoanalityk, przystępując do łamania szyfru, zna wszystkie szczegóły algorytmu szyfrowania i jego implementację. Założenie takie nie jest prawdziwe w wielu realnych systemach, ale warto je przyjąć, gdyż jeśli nie uda się złamać szyfru wiedząc, jak działa algorytm szyfrujący, to tym bardziej nie uda się go złamać nie wiedząc, jak ten algorytm działa. Wyróżnia się cztery główne typy metod łamania szyfrów. Przy każdej z nich zakłada się, że kryptoanalityk posiada pełną wiedzę o stosowanym algorytmie szyfrowania. Zastosowane oznaczenia: Ci – i-tykryptogram, Mi – i-ty tekst jawny, K – klucz, EK – operacja szyfrowania za pomocą klucza K, DK – operacja odszyfrowywania za pomocą klucza K. • Łamanie z kryptogramami (ang. ciphertext-only attack). Kryptoanalityk dysponuje kryptogramami kilku wiadomości, zaszyfrowanych z zastosowaniem tego samego algorytmu szyfrującego. Jego zadanie polega na odtworzeniu tekstu jawnego możliwie wielu wiadomości lub na poznaniu klucza (kluczy) zastosowanego do szyfrowania wiadomości, by móc odczytać również inne wiadomości zaszyfrowane z wykorzystaniem tego samego klucza. Dane: C1 = EK (M1), C2 = EK (M2), …, Ci = EK(Mi) Wnioskowanie: M1, M2, …, MK lub K, lub algorytm wnioskowania o Mj+1 na podstawie Ci+1 = EK(Mi+1) • Łamanie ze znanym tekstem jawnym (ang. known-plaintext attack). Kryptoanalityk dysponuje nie tylko kryptogramami kilku wiadomości, lecz także ich tekstami jawnymi. Zadanie polega na znalezieniu klucza (bądź kluczy) zastosowanego do szyfrowania lub też wydedukowania algorytmu do deszyfrowania kolejnych wiadomości zaszyfrowanych z tym samym kluczem. Dane: M1, C1 = EK (M1); M2, C2 = EK (M2); …, Mi, Ci = EK(Mi) Wnioskowanie: K lub algorytm wnioskowania o Mj+1 na podstawie Ci+1 = EK(Mi+1) • Łamanie z wybranym tekstem jawnym (ang. chosen-plaintext attack). Kryptoanalityk ma możliwość wybrania tekstu jawnego i ma dostęp do jego kryptogramu. Jest to dogodna sytuacja dla łamiącego szyfr, gdyż tym razem można wybrać określony tekst jawny do zaszyfrowania i w ten sposób uzyskać więcej informacji o kluczu. Zadaniem kryptoanalityka jest wywnioskowanie klucza (kluczy), zastosowanego do szyfrowania lub wydedukowaniu algorytmu do deszyfrowania kolejnych wiadomości zaszyfrowanych tym samym kluczem. Dane: M1, C1 = EK (M1); M2, C2 = EK (M2); …, Mi, Ci = EK(Mi) M1, M2, …, Mi są wybrane przez kryptoanalityka Wnioskowanie: K lub algorytm wnioskowania o Mj+1 na podstawie Ci+1 = EK(Mi+1) • Łamanie z adaptacyjnie wybranym tekstem jawnym (ang. adaptive-chosen plaintext attack). Jest to szczególny przypadek łamania z wybranym tekstem jawnym. Kryptoanalityk może nie tylko wybrać dowolny tekst jawny do szyfrowania, ale także wykonać kolejne próby, dobierając tekst jawny zgodnie z wynikami poprzednich szyfrowań. Przy łamaniu z wybranym tekstem jawnym łamiący może wybrać do zaszyfrowania jeden duży blok tekstu jawnego; natomiast przy łamaniu z adaptacyjnie wybranym tekstem jawnym może wybrać mniejszy blok tekstu jawnego, potem wybrać inny, biorąc pod uwagę skutki pierwszego wyboru itd. Ponadto można wyróżnić przynajmniej trzy inne metody łamania szyfrów: • Łamanie z wybranym kryptogramem (ang. chosen-ciphertext attack). Kryptoanalityk może wybierać różne kryptogamy do deszyfrowania i mieć dostęp do odszyfrowanego tekstu jawnego. Gdy ma sprawdzoną metodę automatycznego deszyfrowania, jego zadanie polega na znalezieniu klucza. Dane: C1, M1 = DK (C1); C2, M2 = DK (C2); …, Ci, Mi = DK(Ci) Wnioskowanie: K • Łamanie z wybranym kluczem (ang. chosen-key attack). Nie jest to metoda łamania, w której kryptoanalityk ma możliwość wyboru klucza, lecz posiada on pewną wiedzę o powiązaniach między różnymi kluczami. Metody te są rzadko stosowane i dlatego nie będą tu omówione. • Łamanie z gumową pałką (ang. rubber-hose cryptoanalysis). Kryptoanalityk grozi, szantażuje lub torturuje odpowiednią osobę dopóty, dopóki nie otrzyma klucza. Przekupstwo jest nazywane łamaniem przez nabycie (ang. purchase-key attack). Ta metoda łamania szyfrów bywa bardzo skuteczna i często jest najlepszą i najskuteczniejszą (a często też najtańszą) metodą rozpoznania algorytmu lub zdobycia klucza. Najpopularniejszą metodą łamania szyfru jest metoda ze znanym tekstem jawnym i z wybranym tekstem jawnym. Wbrew pozorom dość często kryptoanalityk dysponuje tekstem jawnym, który został zaszyfrowany. Wiele wiadomości ma standardowe nagłówki i zakończenia znane kryptoanalitykowi. Szczególnie podatny na złamanie jest choćby zaszyfrowany program w postaci kodu źródłowego, gdyż regularnie występują w nim kluczowe słowa języka programowania (np. #define, #include, if, else, return, while, itp.). Zaszyfrowany program wykonywalny (EXE) stwarza te same problemy związane z protokołami, strukturami pętli itp. Łamanie ze znanym tekstem jawnym (a nawet z wybranym tekstem jawnym) było z powodzeniem stosowane w czasie II wojny światowej przeciwko Niemcom i Japończykom. Jeśli siła systemu kryptograficznego opiera się na nieznajomości algorytmu przez atakującego, to jest to duży błąd. Pomyłką jest sądzić, że chroniąc szczegóły algorytmu zapewnia się większe bezpieczeństwo systemu niż w sytuacji, gdy opublikuje się algorytm i pozwoli na jego analizę. Naiwnością jest wiara w to, że nikt nie dokona disasemblacji kodu algorytmu ani nie będzie chciał odtworzyć algorytmu. Najlepsze dzisiejsze algorytmy są opublikowane i latami bezskutecznie łamane przez najlepszych kryptoanalityków na świecie. Nie zawsze osoba łamiąca szyfr ma dostęp do algorytmu, lecz tak jest najczęściej. Jeśli algorytm szyfrujący jest zastosowany w programie komercyjnym, to jest tylko kwestią czasu i pieniędzy jego zdeasemblowanie i odtworzenie algorytmu. Możliwe jest także, przy odpowiednich nakładach czasowych i finansowych, przejście zabezpieczeń sprzętowych – wystarczy kupić (lub ukraść) odpowiednie urządzenia i odtworzyć algorytm. 7 Bezpieczeństwo systemów kryptograficznych Różne systemy kryptograficzne charakteryzują się różnymi poziomami zapewnianego bezpieczeństwa w zależności od tego, jak trudno je złamać. Jeśli koszt złamania szyfru jest większy niż wartość zaszyfrowanej informacji, to prawdopodobnie szyfr jest bezpieczny. Jeśli czas niezbędny do złamania szyfru jest dłuższy niż czas, w którym dane muszą pozostać utajnione, to prawdopodobnie szyfr jest bezpieczny. Jeśli ilość danych zaszyfrowanych z zastosowaniem pojedynczego klucza jest mniejsza niż ilość danych niezbędnych do złamania szyfru, to prawdopodobnie szyfr jest bezpieczny. Prawdopodobnie bezpieczny – gdyż w każdej chwili może pojawić się w kryptoanalizie nowa koncepcja, która wymusi ponowną ocenę bezpieczeństwa szyfru. Kategorie łamania szyfrów są następujące: • • • • Całkowite złamanie szyfru. Kryptoanalityk znajduje klucz K, taki, że DK(C) = M. Ogólne wnioskowanie. Kryptoanalityk znajduje alternatywny algorytm, równoważny z algorytmem DK(C), nie wymagającym poznania K. Lokalne wnioskowanie. Kryptoanalityk znajduje tekst jawny przechwyconego kryptogramu. Częściowe wnioskowanie. Kryptoanalityk zdobywa nieco informacji o kluczu i tekście jawnym. Informacją tą może być kilka bitów klucza, informacja na temat formatu tekstu jawnego (np. „jest to kod źródłowy w języku C”) itp. Algorytm jest bezwarunkowo bezpieczny (ang. uncoditionally secure) jeśli niezależnie od liczby kryptogramów, które ma kryptoanalityk, nie jest możliwe odtworzenie tekstu jawnego. W zasadzie tylko algorytmów z kluczem jednorazowym nie można złamać, dysponując nieograniczonymi zasobami. Wszystkie inne systemy można złamać, podstawiając po kolei różne klucze i sprawdzając, czy otrzymany tekst jawny jest sensowny. Ta metoda jest nazywana łamaniem brutalnym (ang. brute-force attack). Kryptografia zajmuje się przede wszystkim systemami, których nie da się złamać obliczeniowo. Algorytm uznawany jest za obliczeniowo bezpieczny lub silny jeśli nie może być złamany za pomocą dostępnych obecnie i w przyszłości środków, przy czym interpretacja terminu „dostępne środki” jest nadal sprawą dyskusyjną. Złożoność metody łamania można mierzyć kilkoma sposobami: • Złożoność danych. Ilość danych, wymaganych jako dane wejściowe metody łamania szyfru. • Złożoność przetwarzania. Czas wymagany do złamania szyfru. • Wymagania pamięci. Wielkość pamięci niezbędnej do złamania szyfru. Złożoność metody łamania szyfru jest szacowana jako minimum z tych trzech miar. Niektóre metody łamania wymagają kompromisu pomiędzy tymi trzema miarami, np. łamanie jest szybsze, ale wymaga dużo więcej pamięci itp. Złożoność jest określana jako rząd wielkości. Jeśli z jakimś algorytmem jest związana złożoność przetwarzania rzędu 2128, to oznacza, że do złamania tego algorytmu trzeba wykonać 2128 operacji, które mogą być złożone i czasochłonne. Dysponując procesorem, wykonującym milion operacji na sekundę, i stosując milion takich procesorów, nasze zadanie pochłonie 1019 lat, czyli miliard razy więcej niż wynosi wiek Wszechświata. Złożoność metody łamania, niezbędna do złamania danego algorytmu jest stała (oczywiście do czasu znalezienia lepszej metody łamania), ale moc obliczeniowa komputerów nie jest stała. Dlatego też twierdzenie, że algorytm jest bezpieczny, gdyż przy obecnych możliwościach przetwarzania danych nie można go złamać, jest ryzykowne – postęp w konstrukcji procesorów jest nadal bardzo szybki i trend ten najprawdopodobniej zostanie utrzymany. Dobre algorytmy są projektowane tak, aby nie można ich było złamać nawet dysponując przewidywanymi za wiele lat mocami obliczeniowymi. 8 Łamanie brutalne Aby rozpocząć atak, kryptoanalityk potrzebuje tylko kryptogramu (nawet fragmentu kryptogramu). W przypadku szyfrów blokowych będzie niezbędny przynajmniej jeden blok kryptogramu. Zdobycie kryptogramu powinno być stosunkowo proste. Dodatkowo warto uzyskać pewne informacje na temat struktury czy układu tekstu jawnego, co bardzo ułatwia łamanie (np. w przypadku łamania algorytmu XOR) – np. czy tekst jawny to plik Worda, plik graficzny JPG, standardowa wiadomość poczty elektronicznej, rekord bazy danych, plik spakowany algorytmem ZIP itp. Każdy z tych formatów danych ma pewne, charakterystyczne i ściśle określone bajty w określonych miejscach pliku, co znacznie ułatwia operację łamania szyfru, tak, że kryptoanalityk może wykorzystać te informacje w celu ograniczenia złożoności obliczeniowej łamania brutalnego. Jednak często kryptoanalityk dysponuje wyłącznie fragmentem (lub całością) kryptogramu i może wtedy zastosować wyłącznie łamanie brutalne. Oszacowanie złożoności obliczeniowej łamania brutalnego jest łatwe. Jeśli klucz ma długość 8 bitów (1 bajt), to należy zbadać 28 = 256 możliwych kluczy. Zatem przy 256 próbach jest pewność znalezienia klucza, przy szansie 50% na powodzenie przy połowie tej ilości prób. Jeśli klucz ma długość 56 bitów, to kombinacji jest 256, co przy sprawdzaniu miliona kluczy na sekundę daje 2 285 lat badania. Dla 64-bitowego klucza jest to już 585 000 lat, zaś dla klucza 128-bitowego 1025 lat. Wiek Wszechświata szacowany jest tylko na 1010 lat, więc okres 1025 lat prawdopodobnie zapewnia bezpieczeństwo. Przy kluczu 2048bitowym milion komputerów, pracujących równolegle i badających po milionie kluczy na sekundę każdy, łamanie brutalne szyfru zajmie 10597 lat. Należy jednak pamiętać, że algorytm musi być tak bezpieczny, by nie było innej metody jego złamania niż atak brutalny. Nie jest to tak łatwe, jak mogłoby się wydawać. Nawet algorytmy, które wydają się być doskonałe, często po pewnym czasie badań okazują się być skrajnie słabe. Dlatego też najlepiej jest ufać algorytmom, które są od wielu lat przedmiotem bezskutecznych badań kryptografów, natomiast z dystansem podchodzić do nowych algorytmów, reklamowanych jako najlepsze i nie do złamania. 9 Zadania 9.1 Zapoznać się z materiałami (pod kątem wejściówki). 9.2 Zaimplementować algorytmy: szyfru homofonicznego, szyfru Vigenere’a oraz szyfru Playfaira. 10 Dodatki 10.1 Częstość występowania wybranych znaków w tekstach Znak A B C D E F G H I J K L M Polski 0,080 0,013 0,038 0,030 0,069 0,001 0,010 0,010 0,070 0,019 0,027 0,031 0,024 Ang. 0,067 0,013 0,019 0,031 0,089 0,021 0,017 0,043 0,054 0,002 0,009 0,033 0,022 Pas 0,037 0,013 0,032 0,028 0,081 0,014 0,017 0,015 0,050 0,002 0,003 0,031 0,014 Znak N O P Q R S T U V W X Y Z Polski 0,047 0,071 0,024 0,035 0,038 0,024 0,018 0,036 0,032 0,056 Ang. 0,053 0,063 0,012 0,001 0,042 0,043 0,070 0,021 0,006 0,018 0,001 0,023 0,001 Pas 0,050 0,046 0,022 0,057 0,034 0,060 0,019 0,008 0,007 0,008 0,008 0,001 Znak Spacja 0 1 2 3 4 5 6 7 8 9 . , Polski 0,172 0,009 0,009 Ang. 0,197 0,008 0,002 Pas 0,192 0,003 0,004 0,002 0,001 0,001 0,002 0,001 0,001 0,001 0,002 0,012 0,010 Tabela 5 - Częstość występowania znaków w tekstach [4.2] Tabela zawiera częstości wystąpień wybranych znaków w tekstach w języku polskim, angielskim oraz w programie pascalowym. Nie uwzględniono znaków diakrytycznych języka polskiego. Kreska oznacza, że częstość występowania znaku jest mniejsza niż 0,0005.