gnupg gnupg-doc gpa mcrypt openssh-client openssh-server
Nadawca i odbiorca mają ten sam klucz.
Nadawca:
Odbiorca:
Oprócz szyfrogramu musi być przekazany klucz!
Nadawca i Odbiorca mają pary własnych kluczy (Pub/Prv). Wymieniają się publicznymi.
Nadawca:
Odbiorca:
Narzędzie mcrypt nie jest dostępne na serwerze spk, ale warto je znać, bo jest podstawowym narzędziem do symetrycznego szyfrowania plików. Można zainstalować je samodzielnie na własnej maszynie (pakiet mcrypt
)
# lista dostępnych algorytmów szyfrowania (cbc, cfb i in. to dostępne tryby szyfrów blokowych) $ mcrypt --list cast-128 (16): cbc cfb ctr ecb ncfb nofb ofb gost (32): cbc cfb ctr ecb ncfb nofb ofb rijndael-128 (32): cbc cfb ctr ecb ncfb nofb ofb twofish (32): cbc cfb ctr ecb ncfb nofb ofb arcfour (256): stream cast-256 (32): cbc cfb ctr ecb ncfb nofb ofb loki97 (32): cbc cfb ctr ecb ncfb nofb ofb rijndael-192 (32): cbc cfb ctr ecb ncfb nofb ofb saferplus (32): cbc cfb ctr ecb ncfb nofb ofb wake (32): stream blowfish-compat (56): cbc cfb ctr ecb ncfb nofb ofb des (8): cbc cfb ctr ecb ncfb nofb ofb rijndael-256 (32): cbc cfb ctr ecb ncfb nofb ofb serpent (32): cbc cfb ctr ecb ncfb nofb ofb xtea (16): cbc cfb ctr ecb ncfb nofb ofb blowfish (56): cbc cfb ctr ecb ncfb nofb ofb enigma (13): stream rc2 (128): cbc cfb ctr ecb ncfb nofb ofb tripledes (24): cbc cfb ctr ecb ncfb nofb ofb
# Szyfrowanie pliku "plik" (powstaje plik.nc; nc = eNCrypted) $ mcrypt -a des plik Wprowadź hasło (maksymalnie 512 znaków) Proszę użyć kombinacji cyfr i małych i wielkich liter. Wprowadź hasło: Wprowadź hasło: File plik was encrypted.
# Deszyfrowanie pliku $ mdecrypt plik.nc Wprowadź hasło: File plik.nc was decrypted.
# Wyliczanie funkcji skrótu MD5 $ md5sum plik 0eb376701ee34505840e4b3c47baf894 plik $ md5sum /bin/bash 557c0271e30cf474e0f46f93721fd1ba /bin/bash # Funkcja skrótu ma taką samą długość, mimo że pliki są różnej długości $ du -h /bin/bash moj_plik 1,1M /bin/bash 4,0K plik
Nadawca i Odbiorca mają pary własnych kluczy (Pub/Prv). Wymieniają się publicznymi.
Nadawca:
Odbiorca:
Najważniejsze etapy używania programu (szczegóły we fragmentach kodu poniżej):
$ gpg --full-generate-key gpg (GnuPG) 2.2.4; Copyright (C) 2017 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. gpg: directory '/home/kutt/.gnupg' created gpg: keybox '/home/kutt/.gnupg/pubring.kbx' created Proszę wybrać rodzaj klucza: (1) RSA i RSA (domyślne) (2) DSA i Elgamala (3) DSA (tylko do podpisywania) (4) RSA (tylko do podpisywania) Twój wybór? 1 Klucze RSA będą miały od 1024 do 4096 bitów długości. Jakiej długości klucz wygenerować? (3072) Żądana długość klucza to 3072 bitów. Okres ważności klucza. 0 = klucz nie ma określonego terminu ważności <n> = termin ważności klucza upływa za n dni <n>w = termin ważności klucza upływa za n tygodni <n>m = termin ważności klucza upływa za n miesięcy <n>y = termin ważności klucza upływa za n lat Okres ważności klucza? (0) Klucz nie wygaśnie w ogóle Czy wszystko się zgadza (t/N)? t GnuPG musi utworzyć identyfikator użytkownika do identyfikacji klucza. Imię i nazwisko: Krzysztof Kutt Adres poczty elektronicznej: krzysztof.kutt@uj.edu.pl Komentarz: UJ Twój identyfikator użytkownika będzie wyglądał tak: "Krzysztof Kutt (UJ) <krzysztof.kutt@uj.edu.pl>" Zmienić (I)mię/nazwisko, (K)omentarz, adres (E)mail, przejść (D)alej, czy (W)yjść z programu? D Musimy wygenerować dużo losowych bajtów. Dobrym pomysłem aby pomóc komputerowi podczas generowania liczb pierwszych jest wykonywanie w tym czasie innych działań (pisanie na klawiaturze, poruszanie myszką, odwołanie się do dysków); dzięki temu generator liczb losowych ma możliwość zebrania odpowiedniej ilości entropii. gpg: /home/kutt/.gnupg/trustdb.gpg: baza zaufania utworzona gpg: klucz EA188E410EB2C17B został oznaczony jako obdarzony absolutnym zaufaniem. gpg: directory '/home/kutt/.gnupg/openpgp-revocs.d' created gpg: revocation certificate stored as '/home/kutt/.gnupg/openpgp-revocs.d/2237165D8C8DC756C1BF9D91EA188E410EB2C17B.rev' klucz publiczny i prywatny (tajny) zostały utworzone i podpisane. pub rsa3072 2021-04-23 [SC] 2237165D8C8DC756C1BF9D91EA188E410EB2C17B uid Krzysztof Kutt (UJ) <krzysztof.kutt@uj.edu.pl> sub rsa3072 2021-04-23 [E]
# wyświetlanie wszystkich kluczy $ gpg --list-keys /home/kutt/.gnupg/pubring.kbx ----------------------------- pub rsa3072 2021-04-23 [SC] 2237165D8C8DC756C1BF9D91EA188E410EB2C17B uid [ absolutne ] Krzysztof Kutt (UJ) <krzysztof.kutt@uj.edu.pl> sub rsa3072 2021-04-23 [E] # --------------------------------------------------- # export własnego klucza $ gpg -a --export kutt > moj_klucz_publiczny.asc $ file moj_klucz_publiczny.asc moj_klucz_publiczny.asc: PGP public key block Public-Key (old) # --------------------------------------------------- # import cudzego klucza $ gpg --import gjn_public.asc gpg: klucz 5AB733FD8FB5187A: klucz publiczny ,,Grzegorz J. Nalepa (UJ) <gjn@gjn.re>'' wczytano do zbioru gpg: Ogółem przetworzonych kluczy: 1 gpg: dołączono do zbioru: 1 $ gpg --list-keys /home/kutt/.gnupg/pubring.kbx ----------------------------- pub rsa3072 2021-04-23 [SC] 2237165D8C8DC756C1BF9D91EA188E410EB2C17B uid [ absolutne ] Krzysztof Kutt (UJ) <krzysztof.kutt@uj.edu.pl> sub rsa3072 2021-04-23 [E] pub rsa3072 2021-04-23 [SC] 416C5029A116A059D48726895AB733FD8FB5187A uid [ nieznane ] Grzegorz J. Nalepa (UJ) <gjn@gjn.re> sub rsa3072 2021-04-23 [E] # --------------------------------------------------- # edycja klucza (zostanie podpisany, aby wskazać, że jest zaufany) $ gpg --edit-key gjn gpg (GnuPG) 2.2.4; Copyright (C) 2017 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. pub rsa3072/5AB733FD8FB5187A utworzono: 2021-04-23 wygasa: nigdy użycie: SC zaufanie: nieznany poprawność: nieznany sub rsa3072/8AC4381E38BF3114 utworzono: 2021-04-23 wygasa: nigdy użycie: E [ nieznane ] (1). Grzegorz J. Nalepa (UJ) <gjn@gjn.re> gpg> sign pub rsa3072/5AB733FD8FB5187A utworzono: 2021-04-23 wygasa: nigdy użycie: SC zaufanie: nieznany poprawność: nieznany Odcisk klucza głównego: 416C 5029 A116 A059 D487 2689 5AB7 33FD 8FB5 187A Grzegorz J. Nalepa (UJ) <gjn@gjn.re> Czy jesteś naprawdę pewien, że chcesz podpisać ten klucz swoim kluczem ,,Krzysztof Kutt (UJ) <krzysztof.kutt@uj.edu.pl>'' (EA188E410EB2C17B) Czy na pewno podpisać? (t/N) t gpg> quit Zapisać zmiany? (t/N) t # sprawdź jak zmienił się poziom zaufania (w nawiasach kwadratowych) $ gpg --list-keys /home/kutt/.gnupg/pubring.kbx ----------------------------- pub rsa3072 2021-04-23 [SC] 2237165D8C8DC756C1BF9D91EA188E410EB2C17B uid [ absolutne ] Krzysztof Kutt (UJ) <krzysztof.kutt@uj.edu.pl> sub rsa3072 2021-04-23 [E] pub rsa3072 2021-04-23 [SC] 416C5029A116A059D48726895AB733FD8FB5187A uid [ pełne ] Grzegorz J. Nalepa (UJ) <gjn@gjn.re> sub rsa3072 2021-04-23 [E]
# --armor = wynik będzie plikiem tekstowym, a nie binarnym # -r gjn = wybieramy klucz publiczny odbiorcy, w którym częścią identyfikatora jest "gjn" # -o plik.asc = powstanie plik o nazwie plik.asc $ gpg --encrypt --armor -r gjn -o plik.asc plik $ head -5 plik.asc -----BEGIN PGP MESSAGE----- hQGMA4rEOB44vzEUAQwArV/i52Y59t9eubCDFscM+fPi61qOABS42BuWArFred0z X8qlarO5WtdfBwJ+0UYi6K3QLhVlouft4kv2+cfAufPs5vISqtvPdhsZUt21VWrd ALe6UHnGpWrcaBjF5pNtY+lN0h6tt9l7jFDWkYcWzGJ/BFbI2h57hHdZttoBWhG7 $ file plik.asc plik.asc: PGP message Public-Key Encrypted Session Key (old)
$ gpg --decrypt -o otrzymany-plik otrzymany-plik.asc gpg: zaszyfrowano 3072-bitowym kluczem RSA o identyfikatorze 28EE2447375F2314, stworzonym 2021-04-23 ,,Krzysztof Kutt (UJ) <krzysztof.kutt@uj.edu.pl>''
# podpisywanie wiadomości za pomocą --sign $ gpg --sign --armor -o podpisany-plik.sign plik # wiadomość NIE jest zaszyfrowana, ale nie da się jej odczytać bezpośrednio z pliku $ head -5 podpisany-plik.sign -----BEGIN PGP MESSAGE----- owEB7gER/pANAwAKAeoYjkEOssF7AawnYgRwbGlrYILv+0JsYWggQmxhaCBCbGFo ClJheiBEd2EgVHJ6eQoKiQGzBAABCgAdFiEEIjcWXYyNx1bBv52R6hiOQQ6ywXsF AmCC7/sACgkQ6hiOQQ6ywXvtwQv/awZCpTt9sUEAjGbB0kt/ODvUZKzlrJj3SrGU # --------------------------------------------------- # podpisywanie wiadomości za pomocą --clearsig $ gpg --clearsig -o podpisany-plik.sign plik # tutaj wiadomość jest podzielona na dwa bloki - wiadomość i podpis $ cat podpisany-plik.sign -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 [tutaj znajduje się wiadomość] -----BEGIN PGP SIGNATURE----- [tutaj znajduje się podpis = zaszyfrowany hash] -----END PGP SIGNATURE----- # --------------------------------------------------- # użyteczność pliku i podpisu połączonego w jeden plik jest mała # dlatego najlepiej skorzystać z opcji --detach-sign, dzięki której powstanie SAM podpis # który trzeba przekazać RAZEM z właściwym plikiem $ gpg --sign --armor -o podpis.sign --detach-sign plik # tutaj jest tylko podpis $ cat podpisany-plik.sign -----BEGIN PGP SIGNATURE----- [tutaj znajduje się podpis = zaszyfrowany hash] -----END PGP SIGNATURE-----
# Weryfikacja wiadomości zawierającej podpis $ gpg --verify podpisany-plik.sign gpg: Podpisano w pią, 23 kwi 2021, 18:06:32 CEST gpg: przy użyciu klucza RSA 2237165D8C8DC756C1BF9D91EA188E410EB2C17B gpg: Poprawny podpis złożony przez ,,Krzysztof Kutt (UJ) <krzysztof.kutt@uj.edu.pl>'' [absolutne] # --------------------------------------------------- # Weryfikacja wiadomości (gdy podpis i wiadomość są OSOBNYMI plikami) $ gpg --verify podpis.sign plik gpg: Podpisano w pią, 23 kwi 2021, 18:23:57 CEST gpg: przy użyciu klucza RSA 2237165D8C8DC756C1BF9D91EA188E410EB2C17B gpg: Poprawny podpis złożony przez ,,Krzysztof Kutt (UJ) <krzysztof.kutt@uj.edu.pl>'' [absolutne]
# Zauważ, że przed "-sear" jest jedna pauza = to są 4 krótkie opcje $ gpg -sear gjn -o plik.asc plik
Przebieg:
Uwierzytelnianie przez klucz publiczny SSH:
Konfiguracja:
moj-laptop$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/kkutt/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/kkutt/.ssh/id_rsa. Your public key has been saved in /home/kkutt/.ssh/id_rsa.pub. The key fingerprint is: SHA256:VIEzJAtY57zQSmGFEkHOnqQWnhI/1F5EqeyuqvogVz0 kkutt@moj-laptop
moj-laptop$ scp .ssh/id_rsa.pub kutt@149.156.43.64:.ssh/id_rsa.pub-moj-laptop kutt@149.156.43.64's password: id_rsa.pub 100% 395 82.3KB/s 00:00
moj-laptop$ ssh kutt@149.156.43.64 'cat .ssh/id_rsa.pub-moj-laptop >> .ssh/authorized_keys' kutt@149.156.43.64's password:
moj-laptop$ ssh kutt@149.156.43.64 Enter passphrase for key '/home/kkutt/.ssh/id_rsa': kutt@spk-ssh:~$
moj-laptop$ ssh-add .ssh/id_rsa Enter passphrase for /home/kkutt/.ssh/id_rsa: Identity added: /home/kkutt/.ssh/id_rsa (kkutt@moj-laptop) moj-laptop$ ssh [-A] kutt@149.156.43.64 kutt@spk-ssh:~$
gpg -‐gen-key
albo gpg –full-generate-key
(wszystkie wartości domyślne są w porządku, możemy je zostawić)-‐sign
)cd /tmp
, do którego wszyscy mamy dostęp = wszystkie pliki (klucze, pliki do zaszyfrowania) można umieścić w tym katalogu i druga osoba będzie miała do nich dostęp (sprawdzić UPRAWNIENIA DOSTĘPU)gpg -‐list-keys
-‐export
-‐import
-v
(ssh -v [konto@]maszyna
))md5sum
skrót wybranego pliku.echo a » plik
, wyliczyć hash i porównać z wcześniejszym.
Narzędzie mcrypt nie jest dostępne na serwerze spk, ale warto je znać, bo jest podstawowym narzędziem do symetrycznego szyfrowania plików. Można zainstalować je samodzielnie na własnej maszynie (pakiet mcrypt
)
Przy pomocy wybranego algorytmu symetrycznego za/rozszyfrować plik za pomocą mcrypt
.
Pracę z GPG mogą wspomagać: