Klucz kodowania - KK to parametr(y) funkcji kodującej. Znając je można wysyłać zakodowane wiadomości.
Klucz dekodowania - KD to paramert(y) funkcji dekodującej. Znając je można dekodować wiadomości.
Przez wieki uważano, że w dowolnym kryptosystemie znajomość klucza kodujacego KK pozwala na szybkie poznanie klucza dekodującego znajomość KD, czyli że każdy kto umie kodować wiadomości może je też dekodować. Tak jest w rozważanym powyżej kryptosystemie Cezara. Jeśli Cezar używał tego samego kryptosystemu do kontaktu ze wszystkimi swoimi generałami, wtedy mogło dochodzić do sytuacji niepożądanych np. gdy generał A wysłał Cezarowi zaszyfrowaną wiadomość, generał B przechwytując kuriera po drodze mógł ją odczytać.
Kryptosystem z kluczem publicznym to system (J,f,KK,KD), gdzie KK i KD są odpowiednio kluczem kodującym i dekodującym, w którym
Szukamy więc funkcji f którą w jedną stronę liczy się relatywnie szybko na podstawie znajomości KK. Natomiast jej odwrotna f−1 jest bardzo trudna do policzenia bez dodatkowej informacji KD. W sposób naturalny przychodzi tu na myśl problem znajdowania rozkładu na czynniki pierwsze liczb naturalnych. W szczególności: wymnożenie dwu dużych liczb pierwszych jest łatwe (można to zrobić w czasie wielomianowym od długości ich zapisu), natomiast szybkie znalezienie rozkładu na czynniki pierwsze ich iloczynu (bez znajomości wyjściowych liczb lub innych dodatkowych informacji) wydaje się być problemem ekstremalnie trudnym. Właśnie na tym spostrzeżeniu oparta jest idea kryptosystemu RSA.
Nazwa kryptosystemu pochodzi od pierwszych liter nazwisk jego trzech pomysłodawców: Rivest, Shamir i Adelman. Choć jest to jeden z najstarszych kryptosystemów z kluczem publicznym (wynaleziony w 1977 roku) wciąż jest szeroko stosowany w komercyjnych protokołach. Jedynie długości kluczy rosną wraz ze wzrostem mocy obliczeniowej komputerów.
Uwaga: jest to oczekiwany czas działania, a nie maksymalny (pesymistyczny).
Poprawność tego kryptosystemu, czyli że f−1(f(P))=P, dla dowolnego P∈Zn wynika bezpośrednio z następującej obserwacji:
Obserwacja 7.1 [Poprawność RSA]
Ped ≡n1, dla dowolnego P∈Zn.
Dowód
Ponieważ ed ≡φ(n)1 mamy ed=aφ(n)+1 dla pewnego a.
Załóżmy najpierw, ze p⊥n. Wtedy z Twierdzenia Eulera dostajemy Pφ(n) ≡n1, a zatem Ped=Paφ(n)+1≡nP.
Jeśli zaś p⊥̸, to p|P lub q|P . Załóżmy, bez straty ogólności, że q|P , czyli P=bq dla pewnego 0 < b < p , bo bq=P < n=pq . Na mocy Małego Twierdzenia Fermata mamy:
\begin{align*} b^{p-1} & \equiv_p & 1, \\ q^{p-1} & \equiv_p & 1, \end{align*}
skąd:
\begin{align*} b^{a(p-1)(q-1)} & \equiv_p & 1, \\ q^{a(p-1)(q-1)} & \equiv_p & 1, \end{align*}
i dalej
\begin{align*} b\cdot(bq)^{a(p-1)(q-1)} & \equiv_p & b \cdot 1 = b. \end{align*}
Mnożąc obie strony ostatniej kongruencji przez q dostajemy
\begin{align*} bq\cdot(bq)^{a(p-1)(q-1)} & \equiv_{pq} & bq \end{align*}
czyli
P^{ed} = (bq)^{a(p-1)(q-1)+1}= (bq)\cdot (bq)^{a(p-1)(q-1)} \equiv_n bq = P,
co było do udowodnienia.
Bezpieczeństwo kryptosystemu RSA opiera się na domniemaniu trudności następującego problemu:
Szybkie rozwiązanie problemu faktoryzacji rozwiązałoby problem RSA. Gdyby ktoś znał rozkład n , to znaczy liczby p i q , miałby także \varphi(n)=(p-1)(q-1) . Wtedy, korzystając z publicznie dostępnego e , obliczyłby rozszerzonym algorytmem Euklidesa d . Dopóki nie jest znany efektywny algorytm rozwiązujący jeden z tych problemów (problem RSA, problem faktoryzacji) kryptosystem RSA pozostaje bezpieczny. Wzrastająca szybkość komputerów zmusza użytkowników RSA do zwiększania długości kluczy. Obecnie stosowane klucze mają najczęściej 1024 lub 2048 bitów. Największy złamany klucz (klucz dla którego znaleziono rozkład) ma długość 663 bity (stan z roku 2005).
W praktyce wiadomość przed zakodowaniem podlega wstępnej obróbce (padding). Zauważmy, że wartości 0 i 1 nie podlegają zmianie przy kodowaniu (z własności potęgowania), przez co stanowią one część informacji czytelnej dla wszystkich nawet w szyfrogramie. W praktyce różnymi metodami unika się takich wartości. Rozważania te już jednak wykraczają poza tematykę tego wykładu.
Przykład
Widzieliśmy, że znając rozkład n= pq można łatwo obliczyć \varphi(n) , a tym samym klucz d odpowiadający publicznemu kluczowi e . Na odwrót, znając n oraz \varphi(n) można szybko rozłozyć liczbę n na czynniki pierwsze:
a zatem mamy rozwiązać układ równań postaci:
\begin{align*} x \cdot y & = a \\ x + y & = 2b \end{align*}
skąd x,y wynoszą b \pm \sqrt{b^2-a} .
Pokazuje to, że wartości funkcji Eulera sa równie trudne do policzenia, jak faktoryzacja liczb.
Uwaga
Kryptosystem RSA wykorzystywany jest poza szyfrowaniem również w wielu innych protokołach kryptograficznych. Na bazie tego systemu można na przykład zbudować podpis elektroniczny. Mimo, że zagadnienia te wykraczają już znacznie poza treść tego wykładu, pokazują one jak wielką rolę odgrywa obecnie teoria liczb w informatyce.