7.Szyfrowanie RSA

Jest to jeden z pierwszych i obecnie najpopularniejszy asymetryczny algorytm kryptograficzny (z kluczem publicznym), zaprojektowany w roku 1977 przez Rona Rivesta, Adi Shamira i Leonarda Adlemana. Bezpieczeństwo tego algorytmu opiera się na trudności rozkładu na czynniki dużych liczb złożonych w rozsądnym czasie. Znajduje on zastosowanie zarówno do szyfrowania wiadomości, jak i do podpisów cyfrowych.

Schemat działania szyfrowania RSA podczas wysyłania wiadomości od nadawcy do odbiorcy:

Generowanie klucza

Wybieramy dwie liczby pierwsze p,q możliwie duże oraz bliskie sobie, przykładowo:

p=11, q=13

Wyznaczamy liczbę n, która jest iloczynem p⋅q i wybieramy dowolną liczbę naturalną e, względnie pierwszą z liczbą ( p − 1) ⋅ (q − 1). W naszym przykładzie:

n = p*q = 143

(p-1)*(q-1) = 10 * 12 = 120

e = 7, ponieważ NWD(7,120)=1

Wyznaczamy liczbę d, taką, że (e*d ) mod (p − 1)*(q − 1) = 1. W naszym przykładzie ma zachodzić, że:

(7 * d) mod 120 = 1

więc d może być równe 103, gdyż 7*103 = 721, a 721 mod 120 wynosi 1,

a więc d=103

Zapominamy o liczbach p i q.

Klucz publiczny to para liczb (n,e), klucz prywatny to para (n,d)

Klucz publiczny: (143,7) Klucz prywatny (143,103)

Szyfrowanie wiadomości

Aby zaszyfrować wiadomość należy przedstawić ją w postaci liczby nie większej od n . W tym celu najczęściej posługujemy się kodami ASCII. Na cele przykładu wybierzmy literę 'a', która ma kod ASCII 97, więc sekretna wiadomość do przesłania to:

W=97.

Wykorzystując klucz publiczny odbiorcy wiadomości, tworzymy zaszyfrowaną wiadomość P ze wzoru:

P = W^e mod n

Aby obliczyć tak dużą potęgę korzystamy z szybkiego potęgowania oraz własności operacji na resztach.

P = 97^7 mod 143

97^7 mod 143 = ( 97^4 * 97^2 * 97 ) mod 143 =

= 97^4 mod 143 * 97^2 mod 143 * 97 mod 143 = (126 * 114 * 97) mod 143 = 59

Liczba 59 jest kryptogramem, który należy przesłać.

Odszyfrowanie wiadomości

Aby odszyfrować wiadomość odbiorca oblicza:

W = P^d mod n

Czyli dla naszego przykładu:

W = 59^103 mod 143

Ponownie korzystamy z szybkiego potęgowania i własności operacji modulo:

59^103 = 59^64 * 59^32 * 59^4 * 59^2 * 59^1

przyp.

ponieważ 103 = (1 1 0 0 1 1 1)2 //bity odpowiadają za wykładniki będące kolejnymi potęgami dwójki

59^103 mod 143 = 59^64 mod 143 * 59^32 mod 143 * 59^4 mod 143 * 59^2 mod 143 * 59 mod 143 =

= (113 * 16 * 113 * 49 * 59) mod 143 = 97

W = 97

Jest to wiadomość, która została nadana.

Uwierzytelnianie wiadomości

RSA może być zastosowane do podpisywania (uwierzytelniania) wiadomości. Nadawca wylicza wartość skrótu wiadomości, a następnie podnosi ją do potęgi d (modulo n), a więc wykonuje te same operacje jak podczas zwykłego deszyfrowania. Zakodowana w ten sposób wartość skrótu zostaje załączona do wysyłanej wiadomości.

Odbiorca wiadomości podnosi zakodowaną wartość skrótu do potęgi e (modulo n), a następnie porównuje wynik z wartością skrótu wyliczoną przez siebie. Jeżeli obie wartości są takie same, to można mieć pewność, że nikt nie zmodyfikował treści wiadomości.