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



25.10.2019

Skalowalna infrastruktura

Red Hat OpenStack Platform 15
25.10.2019

Cienki klient 2.0

Windows Virtual Desktop
25.10.2019

Nowy sprzęt Microsoftu

Rodzina Surface się powiększa
24.10.2019

Serwery ARM

Oracle stawia na Ampere Computing
24.10.2019

Wszechstronny i elegancki

Dell XPS 15
10.10.2019

CYBERSEC EXPO - największe w...

Bezpieczeństwo cyfrowe nie jest problemem dotyczącym jedynie działów IT. Obecnie stanowi...
30.09.2019

Nowości w wirtualizacji

VMware World 2019
30.09.2019

Bezpieczeństwo mobile-first

Android 10

Zastosowania poleceń OpenSSL

Data publikacji: 24-10-2019 Autor: Grzegorz Kuczyński
DZIAŁANIE DIGITAL SIGNATURE...

W pierwszej części cyklu zapoznaliśmy się z narzędziem OpenSSL oraz jego możliwościami w zakresie szyfrowania symetrycznego. Kolejnym zagadnieniem jest kryptografia klucza publicznego nazywana również kryptografią asymetryczną.

 

Mimo że kryptografia symetryczna jest tak samo popularna i powszechnie używana jak asymetryczna, za rewolucję bezpieczeństwa świata wirtualnego odpowiada ta druga. To ona stała się fundamentem takich dziedzin jak bankowość elektroniczna czy cyfrowe podpisy. W jej implementacji wykorzystano arytmetykę modularną, o której wspomnieliśmy w pierwszej części cyklu o OpenSSL („IT Professional” 10/2019, s. 50). Natomiast jej fundamentem są ogromne liczby pierwsze. Przypomnijmy – trudność złamania klucza prywatnego (eksponentu) dla liczby pierwszej o wielkości 32 bitów wynosi:

7exp mod 2147483647 = 807453528

Jest to użyteczny przykład edukacyjny, jednak prawdziwe bezpieczeństwo zapewniają liczby pierwsze o długości co najmniej 2048 bitów lub większej, złożone nawet z sześciuset cyfr i więcej. OpenSSL oferuje nam możliwość generowania takich liczb za pomocą komendy prime, co można wykorzystać do zobrazowania, z jaką skalą wielkości mamy do czynienia, np. zliczając znaki wygenerowanych liczb:

 


> ALGORYTM DIFFIEGO-HELLMANA

Istnieje kilka popularnych metod wykorzystujących kryptografię klucza publicznego, ale to metoda Diffiego-Hellmana (DH) była pierwszą, która rozwiązywała problem bezpiecznego przesłania klucza szyfru przez sieć publiczną. Opiera się ona na multiplikatywnej właściwości arytmetyki modularnej. Z poniższego wzoru wiemy, że obliczanie eksponentu jest trudne:

ge1.e2 mod m = (ge1 mod m)e2 mod m

Z pomnożenia dwóch mniejszych liczb możemy wygenerować liczbę e. Jeżeli pełni ona funkcję klucza prywatnego, to obie strony mogą przemnożyć swoje klucze prywatne i otrzymać wspólny tajny klucz. Jednak takie rozwiązanie wymagałoby, aby obie strony wymieniły się kluczami prywatnymi. Obejściem tego problemu jest druga postać równania, która do tego celu wykorzystuje klucz publiczny, będący wynikiem operacji dzielenia modulo jednej ze stron. Z powyższego wzoru wynika, że jeżeli obie strony wymienią się swoimi kluczami publicznymi, to będą w stanie obliczyć wspólny tajny klucz. Na schemacie dokładnie zobrazowano sposób działania algorytmu Diffiego-Hellmana.

Wiedząc, jak działa algorytm DH, można przejść do jego wykorzystania. Analogicznie do wspomnianego schematu przyjmujemy, że w operacji uczestniczą dwie strony (użytkownik A i B). Jedna z nich musi wygenerować moduł i wyznaczyć dla niego generator. Służy do tego komenda genpkey, która przede wszystkim odpowiada za generowanie kluczy prywatnych, ale za jej pomocą można również wygenerować same parametry m i g. Używając tej komendy, musimy określić, że chodzi nam o algorytm DH i podać jego parametry, czyli długość liczby pierwszej. Do tej pory w naszych wzorach liczbę pierwszą określaliśmy jako moduł (m), natomiast OpenSSL określa ją jako prime (p). Poniższym poleceniem użytkownik A generuje parametry dla algorytmu DH z kluczem o wielkości 2048 bitów:

 

 

Parametry zostały zapisane w pliku dhparam.pem, którego zawartość możemy podejrzeć za pomocą komendy pkeyparam, służącej do operacji na kluczach publicznych. Pomimo że mamy do czynienia z parametrami dla algorytmu DH, używamy wspomnianej komendy, ponieważ te wartości wchodzą w skład klucza publicznego. Jedynie wartość e jest częścią klucza prywatnego:

 

 

Opcja –noout każe nie drukować parametrów w formie base64. Skoro użytkownik A posiada już parametry DH, czas na wygenerowanie klucza prywatnego (na schemacie PrvA):

 

 

Plik klucza prywatnego dhPrvA.pem wbrew pozorom nie przechowuje tylko tajnej liczby e, ale wszystkie składniki równania wraz z wynikiem, czyli kluczem publicznym. Aby się o tym przekonać, wystarczy wydać komendę:

 

 

Skoro generując klucz prywatny, generujemy również publiczny, możemy ten drugi wydobyć. Operację należy przeprowadzić, stosując komendę pkey, przeznaczoną do operacji na kluczach zarówno prywatnych, jak i publicznych:

 

 

Zawartość klucza publicznego możemy podejrzeć w taki sam sposób, jak zrobiliśmy to z prywatnym:

 

 

Jak widać, zawiera on wszystkie składniki równania oprócz tajnej liczby e.

Użytkownik A wygenerował już wszystkie dane potrzebne do rozpoczęcia procedury wymiany tajnego klucza. Teraz musi przesłać do użytkownika B plik dhparam.pem z użytymi parametrami oraz klucz publiczny, czyli plik dhPubA.pem. Użytkownik B po otrzymaniu tych dwóch plików wykonuje te same operacje co użytkownik A.

 

[...]

 

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

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

prenumerata Numer niedostępny Spis treści

.

Transmisje online zapewnia: StreamOnline

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