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


26.10.2020

Nowa wersja nVision

Można już pobierać nową wersję nVision
26.10.2020

Monitorowanie infrastruktury

Vertiv Environet Alert
23.10.2020

Telefonia w chmurze

NFON Cloudya
23.10.2020

Nowości w EDR

Bitdefender GravityZone
23.10.2020

Wykrywanie anomalii

Flowmon ADS11
23.10.2020

Mobilny monitor

AOC 16T2
22.10.2020

HP Pavilion

HP zaprezentowało nowe laptopy z linii Pavilion.
22.10.2020

Inteligentny monitoring

WD Purple SC QD101
22.10.2020

Przełącznik 2,5GbE

QNAP QSW-1105-5T

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. 

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"