GPG #2 Podpisywanie, certyfikat unieważniający, eksport klucza publicznego, weryfikacja klucza

Lokalne eksportowanie klucza publicznego

We wcześniejszym artykule wspominałem o kluczach publicznych, do czego służą itd. Teraz zajmiemy się eksportem klucza publicznego i prywatnego.

Aby wyeksportować klucz, należy skorzystać z opcji --export programu gpg.
Przykładowe polecenie może wyglądać tak:

gpg --armour --export [email] > klucz

bądź

gpg --armour --output KLUCZ_PUB --export yuri20@o2.pl

Natomiast eksportowanie klucza prywatnego można dokonać za pomocą:

gpg --export-secret-key [email]
Nigdy nikomu nie podawaj swojego klucza prywatnego

Przy wpisywaniu odpowiednich parametrów takich jak --armour czy --output należy pamiętać o tym, który parametr jest najważniejszy. Innymi słowy, który parametr mówi programowi GPG co ma tak w zasadzie robić, reszta to „ozdobniki”, które wpisuje się zawsze przed operacją najważniejszą, np --export. Kolejność podawania owych „ozdobników jest raczej dowolna, ale podanie --export w środku mogłoby spowodować niepoprawne działanie programu.

Eksportowanie klucza publicznego na serwery

Celowo, także w powyższych przykładach, podałem opcję --armour, która upakuje nasz plik binarny w ASCII, co jest zazwyczaj wymagane, jeśli chodzi o eksport klucza na serwer kluczy, np. keyserver.ubuntu.com. Jeśli chcemy opublikować nasz klucz na serwerze to w wypadku serwera Ubuntu można to zrobić za pomocą strony internetowej. Jednak nie zawsze jest to możliwe, dlatego wytłumaczę jak to zrobić za pomocą terminala.
Aby wysłać swój klucz publiczny należy skorzystać z opcji --send-key poprzedzonej --keyserver oznaczającą serwer na jakim chcemy operować, np.:

gpg --keyserver keyserver.ubuntu.com --send-key IDENTYFIKATOR_KLUCZA

Aby zdobyć identyfikator swojego klucza najpierw należy wyświetlić listę wszystkich kluczy publicznych jakie mamy zapisane, za pomocą:

gpg --list-key

Należy w tej liście odnaleźć swój klucz, który jest nad Twoim imieniem i nazwiskiem, w tej samej linijce co napis pub , po slashu, wygląda on mniej więcej tak → FBFBFF24

Certyfikat unieważniający

Klucz publiczny wysłany na jeden serwer ulegnie po pewnym czasie rozpropagowaniu na inne, tak więc nie należy się martwić o problem z jego znalezieniem. Należy pamiętać, że klucz wysłany raz na serwer nie może już zostać usunięty. Mogłoby się to wydawać trochę utrudniające życie, ale nikt nie wpadałby na taki pomysł bez powodu, jakim jest wzrost bezpieczeństwa. Co zrobić kiedy nasz klucz wygaśnie lub kiedy będziemy chcieli stworzyć nową parę kluczy? W takim wypadku należy przygotować odpowiedni certyfikat unieważniający, który jak sama nazwa wskazuje unieważni klucz publiczny. Certyfikat ten jest tworzony na podstawie klucza prywatnego, dlatego można być pewnym, że osoba, która unieważniła dany klucz publiczny, była jego prawowitym właścicielem :)

gpg --gen-revoke [email] 

Tak przygotowany certyfikat należy zaimportować do własnej bazy kluczy oraz wysłac na serwer kluczy.

Weryfikacja klucza

W jaki sposób można być pewnym, że klucz, który mamy należy na pewno do tej osoby, pod którą został on wygenerowany? Przecież nic nie stoi na przeszkodzie, żebym teraz sobie stworzył parę kluczy dla Linusa Torvaldsa, Baracka Obamy oraz Jana Kazimierza. Jak więc zweryfikować klucz, żeby mieć pewność, że należy do tej osoby, do której powinien? Każdy klucz charakteryzuje jego odcisk palca (ang. fingerprint), więc tak jak w przypadku funkcji skrótu MD5, najmniejsza zmiana klucza powoduje wygenerowanie zupełnie innej wartości dla fingerprinta (który można porównywać do funkcji skrótu). Jeśli wyszukamy w bazie kluczy klucz dla danej osoby, należy najpierw się z nią skontaktować (odwiedzić homepage, zadzwonić itp) i poprosić o podyktowanie fingerprinta. Jeśli ten się będzie zgadzał to możemy być absolutnie pewni, że klucz należy właśnie do niego, a nie do jakiegoś oszusta.
Żeby poznać fingerprint należy skorzystać z:

gpg --fingerprint [email]

Jeśli wszystko się zgadza możemy podpisać klucz:

gpg --edit-key [email]

oraz w trybie interaktywnym należy wpisać sign

Podpisywanie

Zaraz po szyfrowaniu, podpisywanie danego pliku jest chyba jednym z najpraktyczniejszych sposób wykorzystywania GPG. Całkiem jak w życiu realnym, cyfrowe podpisywanie daje pewność, że plik pochodzi od tej, a nie innej osoby. Po drugie, podpisany plik gwarantuje, że to co otrzymaliśmy nie różni się w żadnym stopniu od tego co nam wysłał nadawca. Podsumowując, podpis gwarantuje nam prawdziwą tożsamość nadawcy oraz oryginalność pliku.
Najprościej plik można podpisać za pomocą --sign, np:

gpg --output plik.sig --sign plik

Taki plik nie jest zaszyfrowany za pomocą żadnego klucza publicznego, ale gwarantuje nam tożsamość podpisującego oraz oryginalnośc pliku. Odszyfrować oraz sprawdzić klucz możemy w następujący sposób:

gpg --output wynik --decrypt plik.sig

W trakcie deszyfracji (symetrycznej) gpg poinformuje nas o prawdziwości podpisu i zapisze plik pod nazwą wynik

A co jeśli komuś nie chce się specjalnie ściągać programu GPG, żeby sprawdzić kilkukilobajtowy plik i odszyfrować jego zawartość? Bez problemu można podpis umieścić w innym pliku umożliwiając podejrzenie pliku bez programu GPG. Należy skorzystać z opcji --detach-sign, np.:

gpg --detach-sign plik

Zostanie wtedy utworzony plik plik.sig i oczywiście można go zweryfikować:

gpg --verify plik.sig

Jeszcze innym sposobem podpisu jest stworzenie pliku .asc, który będzie zawierał treść pliku oraz podpis, tak więc można sprawdzić podpis pewnego pliku, wskazując na ten sam plik. Stworzenie takiego podpisu można wykonać za pomocą --clearsign, np.:

gpg --clearsign plik

Jeśli ktoś chce to można w tym momencie sprawdzić, czy GPG nas nie okłamuje o tym, że podpisy są zawsze takie zgodne :D Zmieńmy zatem zawartość podpisywanego pliku, a potem spróbujmy jeszcze raz go zweryfikować :)

Źródło: pl.wikibooks.org
Jeżeli powyższy artykuł nie rozwiązał lub rozwiązał częściowo Twój problem, dodaj swój komentarz opisujący, w którym miejscu napotkałeś trudności.
Mile widziane komentarze z uwagami lub informacjami o rozwiązaniu problemu.