760 likes | 1.08k Views
Algorytmy asymetryczne i haszujące. Plan wykładu. Motywacja Szyfrowanie asymetryczne Algorytm RSA Liczby pierwsze Algorytmy haszujące Algorytm MD5 Algorytm SHA Podsumowanie. Plan wykładu. Motywacja Szyfrowanie asymetryczne Algorytm RSA Liczby pierwsze Algorytmy haszujące
E N D
Plan wykładu • Motywacja • Szyfrowanie asymetryczne • Algorytm RSA • Liczby pierwsze • Algorytmy haszujące • Algorytm MD5 • Algorytm SHA • Podsumowanie
Plan wykładu • Motywacja • Szyfrowanie asymetryczne • Algorytm RSA • Liczby pierwsze • Algorytmy haszujące • Algorytm MD5 • Algorytm SHA • Podsumowanie
Motywacja • Wzrost potrzeb związanych z bezpieczeństwem z powodu rozwoju sieci komputerowych • Potrzeba realizacji elektronicznych transakcji, operacji finansowych z zapewnieniem uwierzytelnienia, podpisu cyfrowego, niezaprzeczalności, itd. • Trudna realizacja podanych usług bezpieczeństwa stosując wyłącznie szyfrowanie symetryczne • Trudna realizacja usługi dystrybucji kluczu w środowisku sieciowym z wieloma użytkownikami stosując wyłącznie szyfrowanie symetryczne
Motywacja • Jak zapewnić uwierzytelnienie? • Jak zapewnić dystrybucję kluczy szyfrujących • Jak zapewnić niezaprzeczalność danych? • Jak zapewnić integralność danych? • Jaką usługę bezpieczeństwa można efektywnie realizować za pomocą szyfrowania symetrycznego?
Plan wykładu • Motywacja • Szyfrowanie asymetryczne • Algorytm RSA • Liczby pierwsze • Algorytmy haszujące • Algorytm MD5 • Algorytm SHA • Podsumowanie
Szyfrowanie asymetryczne • Algorytmy asymetryczne z kluczem jawnym opierają się na funkcjach matematycznych, a nie na podstawianiu i permutacji • Szyfrowanie jest asymetryczne, wykorzystuje dwa klucze: publiczny (ogólnie dostępny) i prywatny
Asymetryczne versus symetryczne Niezbędne do działania
Asymetryczne versus symetryczne • Niezbędne do bezpieczeństwa
Wymagania dla systemów szyfrowania z kluczem jawnym • Strona B może łatwo wygenerować na drodze obliczeń swój klucz jawny i prywatny • Nadawca A, znając klucz jawny B i tekst jawny może łatwo na drodze obliczeń stworzyć tekst zaszyfrowany • Odbiorca B może łatwo otrzymać tekst jawny z tekstu zaszyfrowanego znając swój klucz prywatny • Dla przeciwnika, znającego klucza jawny B, określenie klucza prywatnego B powinno być niewykonalne • Dla przeciwnika, znającego klucza jawny B i tekst zaszyfrowany określenie tekstu jawnego powinno być niewykonalne • Funkcje szyfrowania i deszyfrowania mogą być stosowane w dowolnej kolejności
Funkcja jednokierunkowa • Stworzenie praktycznego systemu szyfrowania asymetrycznego z kluczem jawnym wymaga zastosowania funkcji jednokierunkowej z bocznym wejściem (ang. trapdoor one-way function) • Funkcja jednokierunkowa to taka, która przekształca swoją dziedzinę na przedział w taki sposób, że każda wartość funkcji ma tylko jedną odwrotność, z tym że obliczenie funkcji jest łatwe (czas wielomianowy), a obliczenie odwrotności niewykonalne (wysiłek obliczeniowy rośnie szybciej niż wielomianowo): • Y=f(X) - łatwe • X=f-1(Y) - niewykonalne
Funkcja jednokierunkowa z bocznym wejściem • Obliczenie funkcji jednokierunkowej z bocznym wejściem jest łatwe w jednym kierunku, a niewykonalne w drugim, chyba że są znane pewne dodatkowe informacje, które umożliwiają obliczenie odwrotności w czasie wielomianowym • Y=fk(X) - łatwe przy znajomości k i X • X=fk-1(Y) - łatwe przy znajomości k i Y • X=fk-1(Y) - niewykonalne, gdy znamy Y, a nie znamy k
Kryptoanaliza algorytmów asymetrycznych • Atak metodą brutalną (sprawdzenie wszystkich kombinacji klucza) • Atak na podstawie klucza jawnego – próba wyliczenia klucza prywatnego na podstawie klucza jawnego • Atak prawdopodobnego komunikatu – wszystkie możliwe komunikaty są szyfrowane kluczem jawnym i porównywane z tekstem zaszyfrowanym
Plan wykładu • Motywacja • Szyfrowanie asymetryczne • Algorytm RSA • Liczby pierwsze • Algorytmy haszujące • Algorytm MD5 • Algorytm SHA • Podsumowanie
Algorytm RSA • Algorytm RSA został opublikowany w 1978 roku przez Rona Rivesta, Adi Shamira i Lena Adlemana • Algorytm RSA to szyfr blokowy, w którym tekst jawny i tekst zaszyfrowany są liczbami całkowitymi od 0 do n-1 dla pewnego n • Tekst jawny jest szyfrowany blokami, z których każdy ma wartość binarną mniejszą niż n
Algorytm RSA • Szyfrowanie i deszyfrowanie bloku tekstu jawnego M i zaszyfrowanego C mają następującą formę: C = Me mod n M = Cd mod n = (Me)d mod n = Med mod n • Zarówno odbiorca i nadawca muszą znać wartość n • Klucz jawny to KJ={e,n}, a klucz prywatny to KP={d,n} • Jak wyznaczyć liczby n, e, d aby M = Med mod n oraz podany schemat był bezpieczny?
Plan wykładu • Motywacja • Szyfrowanie asymetryczne • Algorytm RSA • Liczby pierwsze • Algorytmy haszujące • Algorytm MD5 • Algorytm SHA • Podsumowanie
Liczby pierwsze • Liczba naturalna to liczba całkowita nieujemna • Liczba b jest dzielnikiem liczby a, jeśli istnieje takie m, że a=mb. Zapisujemy to jako ba • Liczba p>1 jest liczbą pierwszą, jeżeli jej dzielnikami są tylko 1 i p • Każda liczba naturalna a może być rozłożona na czynniki: a=p11p22…ptt gdzie p1>p2>…>pt to liczby pierwsze oraz i>0 dla i=1,...t
Liczby pierwsze • Niech nwd(a,b) oznacza największy wspólny dzielnik liczb a i b: nwd(a,b)=max[k takie, że ka oraz kb] • Liczby a i b są względnie pierwsze, jeśli nwd(a,b)=1
Jak wyznaczać liczby pierwsze? • Sito Eratostenesa – usuwanie kolejnych wielokrotności liczb pierwszych Liczby pierwsze
Arytmetyka modulo • Dowolną liczbę a można zapisać w następujący sposób: a = nq + r 0 r < n q = floor(n/q) gdzie q nazywamy ilorazem, a r resztą lub rezyduem. • Resztę r definiujemy jako a mod n. • Dla każdej liczby a możemy zawsze napisać następującą zależność: a = (floor(a/n))n + a mod n • Na przykład n = 5 a = 54 = 10x5 + 4 r = 4 4 = 54 mod 5 n=9 a = 73 = 9x8 + 1 r = 1 1 = 73 mod 9 n=3 a = 84 = 3x29 + 0 r = 0 0 = 84 mod 3
Arytmetyka modulo • Mówimy, że dwie liczby całkowite a i bprzystają modulo n, jeżeli a mod n = b mod n • Zapisujemy to jako a b mod n • Na przykład 27 126 mod 9 80 1055 mod 5 121 66 mod 11 63 133 mod 7
Arytmetyka modulo Operator modulo ma następujące własności: • a b mod n jeżeli n(b – a) • Z a mod n = b mod n wynika, że a b mod n • Z a mod n = b mod n wynika, że b a mod n • Z a b mod n oraz b c mod n wynika, że a c mod n Ostatnią zależność można udowodnić następująco. • Z a b mod n wynika, że a = qn + r oraz b = pn + r • Z b c mod n wynika, że c = sn + r • Więc mamy, że a c mod n
Arytmetyka modulo • Zdefiniujmy zbiór rezyduów liczby n Zn = {0,1,2,…,(n – 1)} Arytmetyka modulo w zbiorze Zn ma następujące własności • Prawo przemienności: (a + b) mod n = (b + a) mod n (a x b) mod n = (b x a) mod n • Prawo łączności: [(a + b) + c] mod n = [a + (b + c)] mod n • Prawo rozdzielności: [c x (a + b)] mod n = [(c x a) + (b x c)] mod n • Tożsamość: (0 + a) mod n = a mod n (1 x a) mod n = a mod n
Funkcja Eulera • Leonhard Euler – szwajcarski matematyk i fizyk żyjący w XVIII wieku • Funkcja Eulera, zapisywana jako (n)oznacza liczbę dodatnich liczb całkowitych mniejszych od n i jednocześnie względnie pierwszych względem n • Dla każdej liczby pierwszej p zachodzi (p) = p – 1
Funkcja Eulera • Dla dwóch liczb pierwszych p i q oraz ich iloczynu n = pq zachodzi: (n) = (pq) = (p) x (q) = (p – 1)x(q – 1) • Zauważmy, że Zn = {0,1,2,…,(pq – 1)} • Rezydua nie będące względnie pierwsze względem n to zbiory {p,2p,…,(q – 1)p} oraz {q,2q,…,(p – 1)q} i liczba 0. • Dlatego: (n) = pq – [(p – 1) + (q – 1) + 1] = (p – 1)x(q – 1) = (p) x (q)
Twierdzenie Eulera Teza: Dla każdego a i n względnie pierwszych to n dzieli bez reszty liczbę (a(n) – 1), czyli a(n) 1 mod n • Z twierdzenia Eulera wynika, że dla dwóch liczb pierwszych p i q i dwóch liczb całkowitych takich, że n = pq oraz 0<m<n i dowolnej liczby k, zachodzi następująca zależność mk(n)+1= mk(p – 1)(q – 1)+1m mod n
Twierdzenie Eulera Teza: mk(n)+1 m mod n Dowód. Z twierdzenia Eulera mamy m(n) 1 mod n Ponieważ m(n) = (an + 1) to (an + 1)k = qn + 1 więc możemy napisać m(n) 1 mod n mk(n) 1 mod n Ponieważ mk(n) = qn + 1 to mk(n)+1 = m(qn + 1) = (mq)n + m Otrzymujemy więc mk(n)+1 m mod n
RSA i twierdzenie Eulera • Z twierdzenia Eulera wynika, że mk(n)+1 m mod n dla n=pq, p i q to liczby pierwsze • Aby osiągnąć następującą zależność potrzebną w algorytmie RSA M = Med mod n • musimy podstawić ed = k(n)+1
Generowanie kluczy w RSA • Wybierz dwie liczby pierwsze p, q • Oblicz n=pxq • Wybierz liczbę całkowitą d taką, że nwd(d,(n))=1 oraz 1<d<(n) • Oblicz e d-1 mod (n) • Klucz jawny KJ={e,n} i klucz prywatny KP={d,n}
Szyfrowanie i deszyfrowanie w RSA Szyfrowanie • Tekst jawny: M<n • Tekst zaszyfrowany: C = Me mod n Deszyfrowanie • Tekst zaszyfrowany: C • Tekst jawny: M = Cd mod n
Przykład dla algorytmu RSA • Wartość tekst jawnego M=19 • Wybieramy dwie liczby pierwsze p=7, q=17 • Obliczamy n=7x17=119, (n)=96 • Wybieramy takie e, że e i (n) są względnie pierwsze i e<(n); stąd e=5 • Obliczamy d takie, że de=1 mod 96 i d<96; stąd d=77, gdyż 77x5=385=4x96+1 • Otrzymane klucze to: klucz jawny KJ={5,119}, i klucz prywatny KP={77,119} • Szyfrowanie: C=195 mod 119=2476099 mod 119=66 • Deszyfrowanie: M=6677 mod 119=1,27..x10140 mod 119=19
Łamanie RSA • Metoda brutalna. Odpowiednia długość klucza zapewnia bezpieczeństwo • Ponieważ znane jest {n,e} to rozkładając n na czynniki pierwsze p i q można obliczyć (n) i d. Odpowiednie duże liczby pierwsze zapewniają bezpieczeństwo. Dlatego duże liczby pierwsze są nieustannie poszukiwane i następne chronione • Określić (n) bezpośrednio • Określić d bezpośrednio bez znajomości (n)
Aspekty obliczeniowe RSA • Podnoszenie do dużej potęgi dla dużych liczb naturalnych daje bardzo duże wyniki, co następnie utrudnia operacje modulo • Można skorzystać z własności arytmetyki modulo: [(a mod n)x(b mod n)] mod n = (axb) mod n • Na przykład 221 mod 3 = (211 x 210) mod 3 = [(211 mod 3) x (210 mod 3)] mod 3 = [(2048 mod 3) x (1024 mod 3)] mod 3 = [2 x 1] mod 3 = 2 • Dodatkowo używa się specjalnych algorytmów przyspieszających potęgowanie dla dużych potęg.
Plan wykładu • Motywacja • Szyfrowanie asymetryczne • Algorytm RSA • Liczby pierwsze • Algorytmy haszujące • Algorytm MD5 • Algorytm SHA • Podsumowanie
Algorytmy haszujące • Funkcja haszująca z danych o zmiennym rozmiarze wylicza pewien wynik H(M) o stałym rozmiarze, zwany też wyciągiem lub skrótem komunikatu • Wynik haszowania jest funkcją wszystkich bitów komunikatu i zapewnia wykrywanie błędów, uwierzytelnianie
Wymagania dla funkcji haszującej • H można zastosować do dowolnej wielkości bloku danych • H tworzy dane wyjściowe o ustalonej długości • H(x) jest łatwo obliczyć dla każdego x, co ułatwia implementację sprzętową i programową • Dla każdego kodu m znalezienie takiego x, że H(x)=m nie jest wykonywalne na drodze obliczeń • Dla każdego danego bloku x, znalezienie takiego y różnego od x, dla którego H(y)=H(x) nie jest wykonywalne na drodze obliczeń • Znalezienie pary (x,y), że H(y)=H(x) nie jest wykonywalne na drodze obliczeń
Przykład funkcji hashującej Jedną z najprostszych funkcji haszujących jest logiczny (bit po bicie) XOR każdego bloku: Ci=bi1 bi2...bim gdzie • Ci - i-ty bit wyniku haszowania • m - liczba n-bitowych bloków danych wejściowych • bij - i-ty bit w j-tym bloku
Zastosowanie funkcji haszującej • AB: EK[M||H(M)] • Zapewnia poufność, gdyż tylko A i B mają K • Zapewnia uwierzytelniania, gdyż H(M) jest zaszyfrowane
Zastosowanie funkcji haszującej • AB: M||EK[H(M)] • Nie zapewnia poufność, gdyż tekst M nie jest szyfrowany • Zapewnia uwierzytelniania, gdyż H(M) jest zaszyfrowane
Zastosowanie funkcji haszującej • AB: M||EKPa[H(M)] • Nie zapewnia poufność, gdyż tekst M nie jest szyfrowany • Zapewnia uwierzytelniania i sygnaturę cyfrową, gdyż H(M) jest zaszyfrowane kluczem prywatnym KPa
Plan wykładu • Motywacja • Szyfrowanie asymetryczne • Algorytm RSA • Liczby pierwsze • Algorytmy haszujące • Algorytm MD5 • Algorytm SHA • Podsumowanie
Algorytm MD5 • Algorytm MD5 (ang. Message Digest) został stworzony przez Rona Rivesta i opublikowany jako RFC1321 • Algorytm z wejściowego komunikatu o dowolnej długości generuje 128-bitowy wyciąg • Dane wejściowe przetwarzane są w 512 bitowych blokach • Przykład działania • MD5("Ala ma kota") = 91162629d258a876ee994e9233b2ad87 • MD5("Ala ma koty") = 6a645004f620c691731b5a292c25d37f
Generowanie wyciągu w MD5 • Dodawanie bitów dopełniających • Dodanie długości komunikatu • Inicjalizacja 128-bitowego bufora MD • Przetwarzanie komunikatu w blokach 512-bitowych • Otrzymanie wyniku
Dodawanie bitów dopełniających • Komunikat jest dopełniany tak, by jego długość w bitach przystawała do 448 modulo 512 • Czyli długość komunikatu musi być o 64 bity mniejsza niż całkowita wielokrotność 512 bitów • Na przykład jeżeli komunikat ma 2345 bitów to najbliższa wielokrotność 512 bitów to 2560, więc komunikat zostanie dopełniony do 2496 bitów • Dopełnienie dodaje się zawsze, nawet gdy komunikat ma żądaną długość • Dopełnienie składa się z bitu 1, po którym następuje odpowiednia liczba bitów 0