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