portal Michała Hanćkowiaka
Begin main content
Search · Index
No registered users in community Materiały
in last 10 minutes

SOP - polecenia "kryptograficzne"

polecenie openssl

Polecenie openssl jest częścią pakietu/projektu OpenSSL i pozwala wykonywać wiele operacji kryptograficznych, np. oblicza skrót, szyfruje, koduje, zarządza certyfikatami SSL, tworzy klucz pub/pryw RSA i wiele innych...

OpenSSL pozwala także na używanie w programach tzw. bezpiecznych gniazdek (zwanych też gniazdkami SSL); połączenia tcp używające gniazdek SSL są m.in. szyfrowane, a końce połączenia mogą być uwierzytelniane przy pomocy certyfikatów SSL...

Skąd czerpać informacje o pleceniu openssl?
man jest raczej kiepski..., patrz tutaj: 1, 2, ...

openssl -h
  # wyświetla wszystkie podkomendy tego polecenia
openssl enc -h
  # wyświetla opcje podkomendy "enc", która służy do szyfrowania symetrycznego

Przykład zastosowania openssl: szyfrowanie symetryczne
(tzn. tym samym kluczem sie szyfruje i deszyfruje)

echo "123123123" | openssl enc -e -bf > qqq.txt
  # będzie pytanie o hasło i weryfikacja hasła
  # -bf to typ algorytmu szyfrującego (Blowfish)
  # -e szyfrowanie, -d deszyfrowanie
cat qqq.txt | openssl enc -d -bf 
123123123
  # będzie pytanie o hasło

echo "123123123" | openssl enc -e -a -bf -k 1234 > qqq.txt
cat qqq.txt 
U2FsdGVkX1+tPrxR41I+SJo136I38glCVp6pXgN2u6g=
  # opcja -a powoduje, że wynik dodatkowo zostanie przetworzony przez base64
cat qqq.txt | openssl enc -d -a -bf -k 1234
123123123
  # w tym przykładzie hasło jest przekazywane przez opcje -k

Z1. wypróbuj jak działa szyfrowanie symetryczne różnymi algorytmami...

Z2. zbadaj jak się oblicza "skrót" przy pomocy openssl (podkomenda "dgst"). Funkcja skrótu to coś w rodzaju funkcji hash (wynik jest "mały" w porównaniu z argumentem). Zastanów się także jakie zastosowania ma funkcja skrótu...

Generowanie klucza prywatnego i publicznego RSA:

openssl genrsa 1024 > priv.pem
  # wygenerowanie klucza prywatnego RSA
openssl rsa -in priv.pem -pubout > pub.pem
  # wygenerowanie klucza publicznego odpowiadającego priv.pem

Szyfrowanie i deszyfrowanie przy pomocy kluczy RSA...

echo "123123123" | openssl rsautl -pubin -inkey pub.pem -encrypt > qqq.txt
  # szyfruje przy pomocy klucza publicznego
  # klucz podaje się w -inkey, przy czym jeśli to klucz publiczny to trzeba dodac -pubin
cat qqq.txt | openssl rsautl -inkey priv.pem -decrypt          
123123123
  # deszyfruje przy pomocy klucza prywatnego...

Z3. Spróbuj zaszyfrować jakis dłuższy plik przy pomocy klucza publicznego RSA, a potem go odszyfruj przy pomocy klucza prywatnego. Wyjaśnij jaki sens ma taka operacja. Zbadaj też, czy po odszyfrowaniu otrzymujemy dokładnie ten sam tekst, który mieliśmy przed zaszyfrowaniem.
Uwaga, 06.2019: w przypadku szyfrowania tą metodą jest ograniczenie na długość tekstu, który chcemy zaszyfrować!

Z4. Zrób to samo co w zadaniu Z3, ale niech zaszyfrowany plik będzie przekodwowany przez base64 (dzięki temu unikniemy "krzaczków" i będziemy mieli normalne znaki ASCII w tym pliku; kodowanie base64 robimy także przy pomocy openssl...)

Z5. Spróbuj wykonać "podpis elektroniczny" danego tekstu, a następnie zweryfikuj podpis osoby (na podstawie jej klucza publicznego). Robi się to przy pomocy podkomendy rsautl i opcji -sign oraz -verify; trzeba też odpowiednio podawać klucz w -inkey oraz informować, jeśli to jest klucz publiczny przez -pubin. (podobnie jak przy szyfrowaniu/deszyfrowaniu). Wyjaśnij dokładnie jaki sens mają te operacje...



.............. reszta jest niedokończona !!!

polecenie pgp

Polecenie pgp pełni dość podobne funkcje jak openssl, ale nie jest powiązane z biblioteką bezpiecznych gniazdek(?).
Zaletą pgp jest łatwość kompilacji (jest dostarczane w postaci kodu w j. C, który można skompilować prawie wszędzie...)

???

bezpieczne gniazdka SSL (na przykładzie j. Tcl)

patrz: SOP322/Temat D1, opis jak działaja gniazdka SSL

???

uwaga: portal używa ciasteczek tylko do obsługi tzw. sesji...