Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałPatryk Borkowski Został zmieniony 9 lat temu
1
8. MATEMATYCZNE PODSTAWY ALGORYTMÓW KRYPTOGRAFICZNYCH
Szyfrowanie polega na zamianie ciągu znaków (w przypadku sieci komputerowych zapisanego w postaci ciągu bitów) na inny ciąg znaków. Funkcja zamiany jest niezależna od wyższych jednostek syntaktycznych (słów, zdań) używanego języka. Zamianę całych słów na odpowiadające im (inne) ciągi znaków nazywamy kodowaniem. W dalszym ciągu będziemy zajmowali się wyłącznie metodami szyfrowania. Podstawową cechą dobrego algorytmu szyfrowania jest to, że tworzy on szyfrogramy w możliwie dużym stopniu przypominające ciągi losowe ( rozkłady prawdopodobieństwa wystąpienia zarówno pojedynczych znaków, jak i ich serii, są możliwie równomierne). Takie szyfrogramy nie poddają się analizie statystycznej (bazującej na znajomości rozkładów statystycznych w języku naturalnym). Istotnym elementem kryptografii jest umiejętność generowania ciągów losowych (lub pseudolosowych o wystarczająco dobrych własnościach).
2
Algorytm z kluczem jednorazowym
Algorytmem z kluczem jednorazowym nazywany jest sposób szyfrowania, gdzie do celu zaszyfrowania / odszyfrowania pojedynczego komunikatu jest stosowany za każdym razem inny klucz (o długości równej długości szyfrowanego komunikatu). Przykład: Komunikat: Klucz: Szyfrogram (suma modulo 2): Takie szyfry są stosowane do przesyłania szczególnie tajnych, dość krótkich informacji. Klucze jednorazowe po użyciu powinny być zniszczone zarówno po stronie nadawcy, jak i po stronie odbiorcy (ich wpadnięcie w ręce przeciwnika może spowodować nie tylko odczytanie zaszyfrowanych nimi komunikatów, ale również odkrycie ogólnej zasady działania generatora liczb pseudolosowych, co z kolei umożliwi odczytywanie wszystkich kolejnych komunikatów).
3
Zalety: - jest szyfrem idealnym (nie do złamania), jeśli generowane klucze jednorazowe są wystarczająco losowe; - przekłamanie (zmiana wartości) pojedynczych bitów w szyfrogramie powoduje tylko błędne odczytanie odpowiadających im bitów w komunikacie. Wady: - trzeba generować dużo długich kluczy (w przypadku ożywionej komunikacji); - klucze trzeba przekazywać bezpośrednio, trzymać w ukryciu i niszczyć po jednokrotnym użyciu; - utracenie pojedynczego bitu w szyfrogramie powoduje błędne odczytanie całego dalszego ciągu komunikatu. Przekazywanie kluczy jednorazowych bywa czasem rozwiązywane przez ukrycie ich wewnątrz dużych plików (na przykład w pliku z filmem o objętości kilku GB lub pliku z dużym programem w postaci binarnej).
4
Szyfry podstawieniowe
Szyfry podstawieniowe były używane już od starożytności (na przykład szyfr Cezara). Polegają na zastąpieniu każdego znaku (lub ciągu znaków) innym znakiem (lub ciągiem znaków). Przykład: Znaki komunikatu: A B C D E F G H X Y Z Znaki szyfrogramu: D E F G H I J K A B C Zależność znaków szyfrogramu od znaków komunikatu może być znacznie mniej oczywista, niż w powyższym przykładzie – osoby posługujące się tego rodzaju szyframi mogą dysponować odpowiednimi tabelami do szyfrowania i deszyfrowania (lub programami komputerowymi). Wyróżniane są cztery typy szyfrów podstawieniowych: - prosty szyfr podstawieniowy; - homofoniczny szyfr podstawieniowy; - wieloalfabetowy szyfr podstawieniowy; - poligramowy szyfr podstawieniowy.
5
Szyfr prosty (był użyty w powyższym przykładzie) opiera się na dowolnym, wzajemnie
jednoznacznym odwzorowaniu alfabetu komunikatów na inny (lub ten sam) alfabet. Szyfr homofoniczny jest podobny do szyfru prostego, ale każdemu znakowi w alfabecie komunikatów odpowiada kilka alternatywnych znaków (na przykład używanych cyklicznie). Szyfr wieloalfabetowy również jest podobny do szyfru prostego, ale stosuje wiele tabel odwzorowań alfabetu komunikatów – do pierwszego znaku komunikatu jest stosowana pierwsza tabela, do drugiego – druga tabela itd., po użyciu wszystkich tabel ponownie jest używana pierwsza tabela itd. Szyfr poligramowy to taki szyfr, w którym zastępuje się nie pojedyncze znaki komunikatu, ale całe ich grupy – w najprostszym przypadku każda para sąsiadujących ze sobą znaków w komunikacie jest zastępowana inną parą znaków (zgodnie z podaną tabelą). Żaden z powyższych rodzajów szyfrów nie ma istotnych (poza „zabawowymi”) zastosowań w obecnych czasach z powodu dużej podatności na kryptoanalizę przy użyciu statystycznych własności języka komunikatów.
6
Szyfry przestawieniowe
Szyfrogram utworzony przy użyciu szyfru przestawieniowego jest permutacją (jedną z wielu możliwych) ciągu znaków szyfrowanego komunikatu. Ponieważ komunikaty mogą mieć zmienną długość, potrzebny jest (dość prosty, ze względu na wydajność szyfrowania i deszyfrowania) sposób zdefiniowania takiej permutacji. Jednym z najczęściej stosowanych sposobów jest przestawianie kolumn liter w tekście (według ustalonego schematu). Przy ustalonej liczbie kolumn n tekst komunikatu jest wypisywany kolejnymi wierszami o długości n, na przykład (dla n = 4): T O J O J T E S T S T E T E K S Następnie kolumny są E S K T Ostateczny szyfrogram T K O przestawiane, np. 2, 4, 3, 1: O K T jest zapisywany kolumnami: M U N I U I N M OSE UAJ SOIU TKKNTTETTMK K A T U A U T K
7
Szyfry przestawieniowe w swojej „czystej postaci” również są dość łatwe do złamania w obecnych
czasach. Oba rodzaje omówionych szyfrów, zarówno podstawieniowe, jak i przestawieniowe, występują jednak nadal jako elementy szyfrów złożonych (które można postrzegać jako złożenie wielu prostszych funkcji szyfrujących). Uwaga Podstawienia i przestawienia mogą być realizowane programowo, ale mogą też być (łatwo) realizowane sprzętowo (przez pojedynczy układ scalony lub kilka prostych elementów połączonych kaskadowo), co zapewnia większą prędkość działania. Jest to istotne na przykład w przypadku transmisji w czasie rzeczywistym (szyfrowane kanały telewizyjne itp.). Przykładem maszyny mechanicznej realizującej wiele podstawień i przestawień była maszyna Enigma (stosowana w czasie ostatniej wojny). Była rodzajem tak zwanej maszyny rotorowej. Jej szyfr został złamany przez matematyków polskich i angielskich.
8
Szyfry blokowe i strumieniowe
Szyfrowanie blokowe polega na podziale tekstu jawnego na bloki jednakowej wielkości i szyfrowaniu każdego bloku oddzielnie. Typowa wielkość bloku to 64 bity (ale bywają też większe). Ostatni, zwykle niepełny blok powinien być dopełniony w sposób sprawiający wrażenie losowego. Tekst jawny: Klucz Szyfrogram: Jeśli fragment szyfrogramu odpowiadający pojedynczemu blokowi zależy jedynie od treści tego bloku oraz od użytego klucza, tryb szyfrowania nazywany jest trybem elektronicznej książki kodowej (electronic codebook, ECB) i taki szyfr jest dość łatwy do złamania. Zaletą (i zarazem wadą) trybu ECB jest to, że można odszyfrować pojedyncze fragmenty szyfrogramu nie znając pozostałych (na przykład w sytuacji wystąpienia zakłóceń w linii przesyłowej).
9
Jednym z możliwych sposobów na wzmocnienie szyfru blokowego jest uzależnienie zawartości bloku
szyfrogramu nie tylko od zawartości bloku szyfrowanego, ale też od zawartości innych bloków (tak zwane wiązanie bloków). Przykład: i-ty blok szyfrogramu uzyskujemy przez zaszyfrowanie sumy modulo 2 i-tego bloku tekstu jawnego z (i 1)-szym blokiem szyfrogramu. Tekst jawny: Wektor inicjujący Klucz Szyfrogram: Wektor inicjujący (o wielkości jednego bloku) powinien być ciągiem bitów generowanym losowo oddzielnie dla każdego wysyłanego komunikatu (ale może być wysłany jawnym tekstem do odbiorcy). Zaletą (i wadą) powyższego sposobu szyfrowania jest uzależnienie każdego kolejnego bloku szyfrogramu od wszystkich wcześniej zaszyfrowanych bloków (jak dla szyfru strumieniowego).
10
Szyfrowanie strumieniowe w najprostszym przypadku polega na generowaniu po stronie nadawcy
i po stronie odbiorcy takiego samego pseudolosowego ciągu bitów i używania go w charakterze klucza jednokrotnego (o zmiennej długości). NADAWCA ODBIORCA Klucz Generator Klucz Generator Tekst jawny Szyfrogram Tekst jawny Generatory po obu stronach powinny być dokładnie zsynchronizowane (zgubienie pojedynczego bitu uniemożliwia dalszy odbiór wiadomości). Klucze powinny być zmieniane co mniejszą liczbę bitów, niż wynosi cykl generatora pseudolosowego (liczba bitów, po której generowany ciąg zaczyna powtarzać się). Bardzo istotny wpływ na bezpieczeństwo ma jakość użytego generatora. Szyfry strumieniowe najlepiej nadają się do wysyłania długich komunikatów (albo całych ciągów komunikatów) w niezawodnych liniach transmisyjnych (czyli do szyfrowania ruchu w linii). Wymagają jednak okresowej wymiany kluczy (i związanej z tym ponownej synchronizacji linii).
11
Szyfrowanie z kluczem publicznym
Idea szyfrowania z kluczem publicznym bazuje na istnieniu funkcji matematycznych, które są łatwe do obliczenia, ale co do których panuje przekonanie, że ich funkcje odwrotne są bardzo trudne do obliczenia. Przy odpowiednio dużej długości klucza obliczenie funkcji odwrotnej staje się praktycznie niemożliwe. Jest to prawdziwe w odniesieniu do obecnego stanu wiedzy matematycznej oraz techniki komputerowej, natomiast nie ma całkowitej gwarancji, że ten stan rzeczy nie zmieni się w przyszłości. Przykład (algorytm Diffi’ego – Hellmana uzgadniania współdzielonego klucza tajnego) Dane są dwie duże (co najmniej 512-bitowe) liczby naturalne n, g takie, że 1 < g < n, znane obu stronom procesu komunikacji (mogą być uzgodnione jawnie). Zalecane jest, żeby n oraz (n – 1)/2 były liczbami pierwszymi. Obie strony losują po jednej dużej liczbie całkowitej (oznaczamy je odpowiednio x, y), obliczają odpowiednio X = gx mod n oraz Y = gy mod n , a następnie wymieniają się (jawnie) tymi wartościami. Pierwsza ze stron oblicza Yx mod n, a druga – Xy mod n. Obie obliczone wartości są równe (wynoszą gxy mod n) i mogą służyć jako współdzielony tajny klucz. Uwaga: słabością tego algorytmu (stosowanego oddzielnie) jest brak uwierzytelnienia.
12
Generowanie liczb losowych i pseudolosowych
Definicja pojęcia losowości jest problemem natury filozoficznej. Ogólnie chodzi tu o jak największą nieprzewidywalność wyniku losowania. Dobry generator losowy powinien posiadać następujące własności: - rozkłady prawdopodobieństwa wystąpienia zarówno pojedynczych bitów, jak i serii bitów o dowolnych długościach powinny być równomierne (czyli w generowanym ciągu liczb losowych, w miarę, jak długość tego ciągu rośnie, procentowe zawartości bitów 0 i 1 powinny dążyć do 50%, procentowe zawartości serii 00, 01, 10, 11 powinny dążyć do 25% itd.); - nie powinno być technicznie możliwe odtworzenie początkowych warunków pracy generatora tak dokładnie, aby zaczął generować taki sam ciąg liczb, jak poprzednio. Prawdziwe generatory losowe opierają swoje działanie na zjawiskach fizycznych, które dla człowieka są nieprzewidywalne, na przykład: - szumy cieplne w elementach półprzewodnikowych; - dokładna wartość ładunków elektrycznych w kondensatorach; - dokładne czasy dotykania klawiatury komputera przez użytkownika.
13
Generatory pseudolosowe są algorytmami (wykonywanymi na przykład przez komputer, urządzenie
mechaniczne lub człowieka), które mają wystarczająco dobre własności statystyczne, aby trudno było je odróżnić od generatorów losowych. Ponieważ każda realizacja generatora pseudolosowego może być uważana za maszynę skończenie stanową (każdy komputer ma skończony zakres obliczeniowy i skończoną dokładność obliczeń), po pewnym czasie pracy stan generatora musi powtórzyć się i zacznie on generować ten sam ciąg od początku. Długość ciągu wygenerowanego pomiędzy dwoma jednakowymi stanami generatora nazywana jest okresem generatora. Z oczywistych powodów okres generatora pseudolosowego powinien być jak najdłuższy (w praktyce okres rzędu, na przykład, 2128 można z powodzeniem uznać za wystarczający). Przykład (liniowy generator kongruencyjny) Dla ustalonych liczb naturalnych a, b, m, X0 przyjmijmy następujący wzór rekurencyjny określający n-tą liczbę w ciągu pseudolosowym: Xn = (aXn-1 + b) mod m . Wartość X0 jest nazywana zarodkiem generatora pseudolosowego. Powyższy generator generuje ciąg liczb naturalnych z zakresu od 0 do m – 1. Ponieważ okres tego generatora wynosi (w najlepszym przypadku) m, nie ma on praktycznych zastosowań w obecnych czasach.
14
Generowanie dużych liczb pierwszych
Zostało udowodnione, że liczb pierwszych jest nieskończenie wiele. Dla dużych wartości naturalnych N prawdopodobieństwo tego, że losowo wybrana liczba o długości N bitów okaże się liczbą pierwszą, jest rzędu 1 / ln N . O ile sprawdzenie ze stuprocentową pewnością, że duża liczba naturalna (na przykład 400-bitowa) jest liczbą pierwszą, byłoby bardzo czasochłonne (często w praktyce niewykonalne), o tyle istnieją testy pozwalające stwierdzić taki fakt z określonym prawdopodobieństwem (na przykład 50%) w dużo krótszym czasie. W praktyce stosowana jest następująca metoda: dla wylosowanej dużej liczby naturalnej przeprowadzanych jest n niezależnych testów – jeśli wszystkie one dadzą pozytywny wynik, wybrana liczba może być uznana za liczbę pierwszą z prawdopodobieństwem 1 – (1 – p)n, gdzie p jest prawdopodobieństwem słusznego stwierdzenia dla pojedynczego testu. Jeśli, na przykład, p = 0.5, a n = 128, wylosowana liczba jest uznawana za liczbę pierwszą z prawdopodobieństwem 1 – 1 / 2128 (w praktyce zupełnie wystarczającym).
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.