Strona korzysta z plików cookies w celu realizacji usług i zgodnie z Polityką Plików Cookies.


26.05.2020

Cloud Native Universe

Jako patron medialny zapraszamy programistów wdrażających lub integrujących się z dowolną...
26.03.2020

Koniec certyfikatów...

MCSA, MCSD i MCSA
26.03.2020

Odświeżony OS

FortiOS 6.4
26.03.2020

Bezpieczeństwo w chmurze

Cisco SecureX
26.03.2020

Modernizacja IT

Nowości w VMware Tanzu
26.03.2020

Krytyczne zagrożenie dla...

Nowa groźna podatność
26.03.2020

Laptopy dla wymagających

Nowe ThinkPady T, X i L
26.03.2020

Serwerowe ARM-y

Ampere Altra
26.03.2020

Energooszczędny monitor

Philips 243B1

Zastosowania poleceń OpenSSL

Data publikacji: 25-11-2019 Autor: Grzegorz Kuczyński
RYS. 1. SCHEMAT UŻYCIA...

W poprzednich częściach opisane zostały ogólne zasady kryptografii na przykładzie algorytmu wymiany klucza Diffiego-Hellmana i podpisu cyfrowego DSA. Tym razem skupimy się na algorytmie RSA, który oferuje szyfrowanie i autoryzację.
 

RSA to obecnie najpowszechniej stosowany algorytm kryptografii klucza publicznego stworzony jeszcze w latach siedemdziesiątych. Jego nazwa Rivest-Shamir-Adleman pochodzi od nazwisk jego twórców. Przypomnijmy wzory, w których m to wiadomość, którą chcemy zaszyfrować za pomocą RSA, natomiast c to jej zaszyfrowana postać:

c = me mod n
m = cd mod n


Klucz publiczny składa się z wartości (n, e), natomiast prywatny z (n, d). Zachodzi tu podobna zależność pomiędzy eksponentami e i d jak w przypadku algorytmu DH. Aby lepiej to zobrazować, wzór na odszyfrowanie wiadomości możemy zapisać w poniższej postaci:

m = (me)d mod n

Oczywiście wartości eksponentów e i d są specjalnie dobierane w zależności m.in. od wartości modułu n. Dobrym przykładem użycia protokołu RSA jest usługa SSH. Początek komunikacji może wykorzystać protokół RSA, ale po ustaleniu wspólnego tajnego klucza korzysta się z jednego z preferowanych algorytmów kryptografii symetrycznej. Listę obsługiwanych algorytmów szyfrowania dla klienta SSH można sprawdzić komendą:

 

 

> GENEROWANIE KLUCZY RSA

Do operacji na RSA w OpenSSL służą komendy genrsa i rsautl, które zostały zastąpione nowszymi uogólnionymi poleceniami genpkey i pkeyutl. Pierwszym etapem, jaki należy wykonać, jest wygenerowanie klucza prywatnego zawierającego również klucz publiczny:

 

 

Najistotniejszą opcją podczas tej operacji jest rsa_keygen_bits, która określa długość samego klucza. Jeżeli jej nie podamy, zostanie wygenerowany klucz o długości 1024 bitów. Kolejnym krokiem jest wydobycie klucza publicznego za pomocą komendy pkey, tak jak było to wykonywane w przypadku algorytmów omawianych we wcześniejszych częściach cyklu:

 

 

Jak już wspomniano, na klucz publiczny składają się wartości n i e. Można to sprawdzić w poniższy sposób:

 

 

W przypadku klucza prywatnego sytuacja jest bardziej złożona, przyjrzyjmy się więc jego składnikom:

 

 

 

Wartość modulus to nasze n, natomiast publicExponent i privateExponent to odpowiednio e i d. Wartości prime1 i prime2 to faktory liczby n (prime1 * prime2 = modulus), ponieważ mnożenie liczb pierwszych jest jedną z metod na wyznaczanie dużych liczb pierwszych. Trzy ostatnie elementy są składowymi metody CRT (Chinese Remainder Theorem), która służy do optymalizacji obliczeń algorytmu RSA. Oczywiście jej składniki są tajne.

> PRZYKŁAD UŻYCIA RSA

W poprzedniej części naszego cyklu („IT Professional” 11/2019, s. 46) przedstawiliśmy, jak za pomocą protokołu Diffiego-Hellmana wymienić tajny klucz sesji do szyfrowania symetrycznego AES. Z kolei protokół DSA zapewniał nam integralność danych oraz autoryzację, pod warunkiem że jego klucze zostałyby wymienione w pewny sposób. Niestety RSA podobnie jak DSA ma ograniczoną ilość danych, jakie można za jego pomocą zaszyfrować. Przykładowo używając publicznego klucza RSA o długości 4096 bitów, który wygenerowaliśmy samodzielnie, możemy zaszyfrować tylko 2000 bitów, czyli 250 bajtów. W praktyce takie protokoły jak RSA wykorzystuje się tylko do wymiany klucza dla kryptografii symetrycznej lub autoryzacji. Teraz zademonstrujemy, jak za pomocą narzędzia OpenSSL przeprowadzić kompletną procedurę nawiązania szyfrowanej sesji klienta z serwerem (rys. 1).

Zaletą RSA i ogólnie algorytmów klucza publicznego jest to, że jedna para kluczy może obsługiwać dowolną liczbę klientów. Każdy klient pobiera publiczny klucz z serwera i za jego pomocą szyfruje indywidualny dla każdego klienta klucz szyfrowania symetrycznego. Jest to klucz jednorazowy dla danej sesji. Po wygenerowaniu pary kluczy RSA na hoście Srv publiczny klucz należy udostępnić w taki sposób, aby host Cli mógł go pobrać. Gdy host Cli pobierze publiczny klucz RSA, może zacząć on przygotowywać dane, które nim zaszyfruje.

 

[...]

 

Autor zawodowo zajmuje się informatyką. Jest członkiem społeczności open source, prowadzi blog nt. systemu GNU/Linux. 

Artykuł pochodzi z miesięcznika: IT Professional

Pełna treść artykułu jest dostępna w papierowym wydaniu pisma.

.

Transmisje online zapewnia: StreamOnline

All rights reserved © 2019 Presscom / Miesięcznik "IT Professional"