Kodowanie i kompresja 1 Kryptografia: algorytmy asymetryczne (RSA)
Transkrypt
Kodowanie i kompresja 1 Kryptografia: algorytmy asymetryczne (RSA)
Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 15, 19.06.2005 1 Kryptografia: algorytmy asymetryczne (RSA) Niech EK (x) oznacza szyfrowanie wiadomości x kluczem K (E od encrypt, DK (x) oznacza deszyfrowanie kryptogramu x kluczem K. Własność RSA: Niech K1 , K2 to para kluczy dla algorytmu RSA. Wówczas: DK1 (EK2 (x)) = DK2 (EK1 (x)). Powód: szyfrowanie i deszyfrowanie to ta sama operacja. Zastosowania: • szyfrowanie; • uwierzytelnianie; 1.1 Algorytm RSA Wybór kluczy 1. Losowy wybór (dużych) liczb pierwszych p i q. 2. Losowy wybór liczby e spełniajacej ˛ warunek: e i (p − 1)(q − 1) sa˛ wzgl˛ednie pierwsze. 3. Wybór za pomoca˛ algorytmu Euklidesa liczby d takiej, że e · d = 1 mod (p − 1)(q − 1). 4. Wyznaczenie n = p · q i usuni˛ecie liczb p, q. 5. Niech para [e, n] to klucz publiczny, para [d, n] to klucz prywatny. Szyfrowanie Liczb˛e m < n szyfrujemy w nast˛epujacy ˛ sposób: E[e,n] (m) = me mod n. 1 Deszyfrowanie Kryptogram c deszyfrujemy w nast˛epujacy ˛ sposób: D[d,n] (c) = cd mod n. Uwaga: szyfrowana wiadomość m na nie wi˛ecej bitów niż n, podobnie jej zaszyfrowana postać E[e,n] (m). Narz˛edzia matematyczne potrzebne przy analizie własności RSA: Twierdzenie 1 (Eulera) Niech φ(n) oznacza liczb˛e liczb naturalnych mniejszych od n, które sa˛ wzgl˛ednie pierwsze z n. Niech x < n takie, że x i n sa˛ wzgl˛ednie pierwsze. Wówczas xφ(n) = 1 mod n. Wniosek 1 (Twierdzenie Fermata) Jeśli n jest liczba˛ pierwsza,˛ to xn−1 = 1 mod n dla każdego x < n. Algorytm Euklidesa: Dane: liczby naturalne m > n. Wyniki: c =NWD(m, n) oraz s, t takie, że c = sm + tn. 1. a := m, a0 := n, s := 1, s0 := 0, t := 0, t0 := 1 2. Dopóki a0 6= 0, powtarzaj: q := a div a0 (a, a0 ) := (a0 , a − qa0 ) (s, s0 ) := (s0 , s − qs0 ) (t, t0 ) := (t0 , t − qt0 ) 3. c := a Jak wykorzystać algorytm Euklidesa do wyznaczenia d: warunek e · d = 1 mod (p − 1)(q − 1) jest równoważny znalezieniu całkowitych d, f takich, że e · d + f · (p − 1)(q − 1) = 1 = NWD(e, (p − 1)(q − 1)) czyli stosujemy algorytm Euklidesa dla m = max(e, (p − 1)(q − 1) i n = min(e, (p − 1)(q − 1)) i zwracamy końcowa˛ wartość s lub t. 2 1.1.1 Poprawność deszyfrowania Twierdzenie 2 Niech [e, n], [d, n] to para kluczy RSA. Wówczas dla każdego m < n zachodzi: D[d,n] (E[e,n] (m)) = m. Dowód. Jeśli NWD(m, n) = 1: D[d,n] (E[e,n] (m)) = D[d,n] (me mod n) = med mod n. Z faktu, że e · d = 1 mod (p − 1)(q − 1) uzyskujemy: e · d = 1 + x(p − 1)(q − 1) = 1 + φ(n), dla pewnego naturalnego x. Stosujac ˛ twierdzenie Eulera: med = m · (mφ(n) )x = m mod n. Jeśli NWD(m, n) > 1: • ten przypadek ma bardzo małe prawdoodobieństwo; • wystapienie ˛ tego przypadku pozwala znaleźć p i q a tym samym d (na podstawie e i n): oznacza to złamanie kluczy; • niemniej, również w tym przypadku deszyfrowanie da poprawny wynik (dowód w oparciu o twierdzenie Fermata i chińskie twierdzenie o resztach). Bezpieczeństwo i implementacja RSA: 1. podstawowa metoda łamania RSA: rozkład n na czynniki pierwsze (faktoryzacja); znane tylko algorytmy o złożoności wykładniczej, w praktyce pozwoliły złamać tylko klucze 512-bitowe; 2. generowanie losowych liczb pierwszych: możliwe dzi˛eki dużej g˛estości liczb pierwszych (frakcja 1/ ln n w przedziale [2, n]); 3. sprawdzanie pierwszości liczb: wydajne algorytmy probabilistyczne; algorytm deterministyczny o wielomianowym czasie działania. Uwaga: sprawdzanie pierwszości może wykluczyć pierwszość liczby, bez podania jej dzielników (p. faktoryzacja). 3 1.2 RSA: przykład 1. Losujemy liczby pierwsze p = 7 i q = 11. 2. Wyznaczamy (p − 1)(q − 1) = 6 · 10 = 60. 3. Wybieramy losowa˛ liczb˛e e i sprawdzamy czy jest wzgl˛ednie pierwsza z (p − 1)(q − 1). Czynność powtarzamy aż do napotkania liczby wzgl˛ednie pierwszej z (p − 1)(q − 1). (Sprawdzanie wzgl˛edniej pierwszości: algorytm Euklidesa). Niech e = 13. 4. Szukamy d takiego, że e · d = 1 mod (p − 1)(q − 1), czyli 13 · d = 1 mod 60 co oznacza wyznaczanie NWD(60, 13): m n q a a0 s s0 t t0 60 13 60 13 1 0 0 1 4 13 8 0 1 1 −4 1 8 5 1 −1 −4 5 1 5 3 −1 2 5 −9 1 3 2 2 −3 −9 14 1 2 1 −3 5 14 −23 2 1 0 5 -23 5. W konsekwencji mamy: 13 · (−23) ≡ 1 mod 60 13 · (60 − 23) ≡ 1 mod 60 13 · 37 ≡ 1 mod 60 czyli d = 37. 6. Klucz publiczny: (13, 77) Klucz prywatny (37, 77). Niszczymy wszelkie ślady po tym, że używaliśmy liczb 7 i 11. 7. Co można szyfrować: ciagi ˛ bitów o wartości mniejszej od 77 (ciagi ˛ ciagi ˛ 6bitowe). 4 1.3 Sprawdzanie pierwszości Uwagi: 1. Istnieje deterministyczny algorytm sprawdzajacy ˛ pierwszość w wielomianowym czasie (alg. Agrawal-Kayal-Saxena). 2. W praktyce najpopularniejsze sa˛ probabilistyczne testy pierwszości, np. (oparte na teście Fermata), test Solovaya-Strassena i test Millera-Rabina. Liczb˛e w nazywamy świadkiem pierwszości dla liczby n jeśli w < n oraz wn−1 = 1 mod n. Test Fermata (dla liczby n): 1. Powtarzamy k razy: (a) Wybieramy losowo liczb˛e w taka,˛ że w < n. Jeśli NWD(w, n) > 1, to n jest liczba˛ złożona.˛ (b) Jeśli wn−1 6= 1 mod n, to n jest liczba˛ złożona.˛ 2. Jeśli żadna z k powyższych prób nie zakończyła si˛e stwierdzeniem, że n jest liczba˛ złożona,˛ stwierdzamy, że n jest liczba˛ pierwsza.˛ Lemat 1 Niech S b˛edzie zbiorem liczb wzgl˛ednie pierwszych z n (i mniejszych od n). Wtedy albo każdy element S jest świadkiem pierwszości n albo co najwyżej połowa jest świadkami pierwszości S. Dowód: Niech w1 , . . . , wt b˛eda˛ wszystkimi świadkami pierwszości n. Załóżmy, że istnieje w ∈ S, który nie jest świadkiem pierwszości n. Niech ui = wi · w dla i ∈ [1, t]. Pokażemy, że ui 6= uj dla i 6= j oraz ui nie jest świadkiem pierwszości dla każdego i, j ∈ [1, t]: • ui 6= uj : Załóżmy nie wprost, że ui = uj Zauważmy, że ui − uj = w(wi − wj ) = 0, czyli n dzieli ui − uj . Skoro w ∈ S, czyli w jest wzgl˛ednie pierwszy z n, wi˛ec n dzieli wi − wj . Ale −n < wi − wj < n, wi˛ec wi = wj – sprzeczność. • un−1 = (wwi )n−1 = wn−1 win−1 = wn−1 6= 1 mod n. i Wniosek 2 Jeśli n jest liczba˛ złożona˛ dla której istnieje w < n które nie jest świadkiem pierwszości n, to test Fermata zwraca dla n poprawna˛ odpowiedź z prawdopodobieństwem 1 − 1/2k . Jeśli n jest liczba˛ pierwsza˛ to test Fermata zawsze zwraca dla n poprawna˛ odpowiedź. 5 Problem!: istnieja˛ liczby złożone, dla których wszystkie liczby wzgl˛ednie pierwsze (i mniejsze) sa˛ świadkami pierwszości. Rozwiazanie: ˛ test Millera-Rabina dla liczby n. Niech n − 1 = 2t m, gdzie m jest liczba˛ nieparzysta.˛ Powtarzamy k razy: 1. Wybieramy losowo a < n i wyznaczamy w = am mod n. i 2. Niech i b˛edzie minimalna˛ wartościa˛ taka,˛ że w2 6= 1 mod n lub i = t. t i−1 3. Jeśli w2 6= 1 mod n lub w2 złożona.˛ 6= −1 mod n, to stwierdzamy, że n jest liczba˛ Jeśli żadna z k powyższych prób nie zakończyła si˛e stwierdzeniem, że n jest liczba˛ złożona,˛ stwierdzamy, że n jest liczba˛ pierwsza.˛ Twierdzenie 3 Dla każdej liczby pierwszej test Millera-Rabina zwraca poprawna˛ odpowiedź. Dla każdej liczby złożonej test Millera-Rabina zwraca poprawna˛ odpowiedź z prawdopodobieństwem co najmniej 1 − (1/4)k . 1.4 Bezpieczeństwo RSA 1. Nie należy stosować dwóch lub wi˛ecej par kluczy z ta˛ sama˛ wartościa˛ n. 2. Łamanie RSA ma „podobna˛ trudność” do zadania rozkładu liczb na czynniki pierwsze. 2 Jednokierunkowe funkcje haszujace ˛ Pożadane ˛ własności funkcji h: • Jednokierunkowa: dla danego y praktycznie niemożliwe znalezienie x takiego, że h(x) = y; natomiast samo wyznaczanie wartości funkcji h jest „łatwe” (obliczeniowo). • Słabo bezkonfliktowa: dla danego x niemożliwe (w praktyce) wyznaczenie x0 takiego, że h(x) = h(x0 ). • Silnie bezkonfliktowa: praktycznie nie jest możliwe znalezienie x, x0 takich, że h(x) = h(x0 ). Dla zastosowań interesuje nas znalezienie takiej funkcji h (albo „iteracyjnego” zastosowania pewnej funkcji), która jest jednokierunkowa i bezkonfliktowa oraz przekształca ciagi ˛ (liczby) dowolnej długości w ciagi ˛ (liczby) o ustalonej długości: h : {0, 1}∗ → {0, 1}k . Zastosowania: 6 • przechowywanie haseł; • zabezpieczanie przed zmianami (MAC); • odcisk palca. 3 Zastosowania Podpis elektroniczny, szybkie szyfrowanie, uwierzytelnianie, bezpieczna komunikacja,... 7