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
???