GnuPG/Serwery kluczy
Wspomniałem już, że można opublikować swój klucz np. na stronie internetowej albo dołączać do wiadomości. Istnieje jeszcze jeden sposób - serwery kluczy. Zasada ich działania jest bardzo prosta - przechowują one klucze publiczne OpenPGP. Najczęsciej udostępniają również na swojej stronie internetowej wyszukiwarkę kluczy i umożliwiają ich pobranie lub sprawdzenie odcisku. Przykładowy serwer to www.keyserver.net. Jeśli chcesz się przekonać jak on działa, to wejdź na stronę www udostępnianą przez niego i wpisz mój adres e-mail. Jak zapewne zauważyłeś, można za jej pomocą pobrać czyjś klucz lub udostępnić swój. My jednak nauczymy się, jak to zrobić bezpośrednio przez gpg. Najpierw musimy określić, z którego serwera chcemy skorzystać: przez parametr --keyserver [adres-serwera]. Adres serwera ma postac: schame://name[:port], przy czym schame określa protokół, najczęśćiej hkp (dla HTTP) lub ldap (dla LDAP). Najlepiej jako serwer kluczy podać hkp://subkeys.pgp.net, który losowo przydzieli nam jakiś inny serwer kluczy. Teraz musimy użyć parametru --send-key <nazwa>, gdzie nazwa określa klucz, który chcemy wysłać lub parametr --recv-key <numer>, gdzie numer określa, który klucz chcemy pobrać. Możemy także użyć --search-keys [name] do wyszukania klucza dla podanej nazwy na danym serwerze. Najpierw wyeksportujmy nasz klucz: ( UWAGA: klucza, który wyślesz na serwer, nie będziesz w stanie w żaden sposób stamtąd usunąć)
$ gpg --keyserver "hkp://subkeys.pgp.net" --send-key 630BE83F gpgkeys: WARNING: this is an *experimental* HKP interface! $ gpg --keyserver "hkp://subkeys.pgp.net" --search-key adres@email.pl gpgkeys: WARNING: this is an *experimental* HKP interface! gpgkeys: searching for "adres@email.pl" from HKP server subkeys.pgp.net Keys 1-1 of 1 for "adres@email.pl" (1) Imie Nazwisko <adres@email.pl> 1024 bit DSA key 630BE83F, created 2004-11-15 Enter number(s), N)ext, or Q)uit > q $
Jak widać po wyeksportowaniu można już znaleźć nasz klucz na serwerze (choć może się to okazać możliwe dopiero po kilku minutach). Serwery wymieniają między sobą informacje, więc nie jest potrzebne eksportowanie do kilku serwerów. Teraz spróbujemy pobrać klucz z serwera. Zanim to jednak zrobimy, usuniemy klucz mr_K@interia.pl z naszej listy, używając opcji --delete-keys <nazwa>.
$ gpg --delete-keys mr_K gpg (GnuPG) 1.2.6; Copyright (C) 2004 Free Software Foundation, Inc. This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the file COPYING for details. pub 1024D/D82E0E4B 2004-02-07 Krzysztof Adamski <mr_K@interia.pl> Usunąć ten klucz ze zbioru? t $ gpg --keyserver "hkp://subkeys.pgp.net" --search-keys mr_K@interia.pl gpgkeys: WARNING: this is an *experimental* HKP interface! gpgkeys: searching for "mr_K@interia.pl" from HKP server subkeys.pgp.net Keys 1-2 of 2 for "mr_K@interia.pl" (1) Krzysztof Adamski <mr_K@interia.pl> 1024 bit DSA key D82E0E4B, created 2004-02-06 (2) Krzysztof Adamski <mr_K@interia.pl> 1024 bit DSA key D0F82C9D, created 2003-11-05 Enter number(s), N)ext, or Q)uit > 1 gpgkeys: WARNING: this is an *experimental* HKP interface! gpg: klucz D82E0E4B: klucz publiczny Krzysztof Adamski <mr_K@interia.pl> wczytano do zbioru gpg: Ogółem przetworzonych kluczy: 1 gpg: dołączono do zbioru: 1 $ gpg --list-keys /var/home/gnupg/.gnupg/pubring.gpg --------------------------------- pub 1024D/630BE83F 2004-11-16 Imie Nazwisko <adres@email.pl> sub 1024g/624564B4 2004-11-16 pub 1024D/D82E0E4B 2004-02-07 Krzysztof Adamski <mr_K@interia.pl> sub 1024g/E9B3B634 2004-02-07
Jest kilka rzeczy wymagających wytłumaczenia. Najpierw usunęliśmy klucz dla mr_K@interia.pl, podając jedynie część e-maila - mr_K. Jest to dozwolone i bardzo często stosowane, ważne jest aby podać jednoznacznie, który klucz ma być usunięty. Program zapytał, czy na pewno usunąć klucz, a po przyciśnięciu t klucz znika z naszej listy. Następnie wyszukaliśmy na serwerze klucz dla podanego adresu e-mail i otrzymaliśmy odpowiedź, że istnieją dwa takie klucze. Porównujemy daty i wybieramy nowszy, wpisując jego numer. Klucz został automatycznie zaimportowany. Chciałbym tu poruszyć problem istnienia dwóch kluczy dla mojego adresu e-mail. Otóż raz wysłany klucz do serwera nie może zostać jednoznacznie usunięty, może zostać jedynie unieważniony (o tym w dalszej części artykułu). Jednak klucz publiczny może być unieważniony jedynie przez jego właściciela czyli osobę, która posiada klucz prywatny. Niestety przez awarię mojego dysku twardego straciłem ten klucz i nie jestem już w stanie unieważnić starego klucza (od tamtej pory robię kopie zapasowe kluczy i innych danych). Unieważnianiem kluczy zajmiemy się później, teraz wróćmy do ich pobierania. Chciałbym jeszcze pokazać drugą metodę - przez numer.
$ gpg --delete-keys mr_K [...] pub 1024D/D82E0E4B 2004-02-07 Krzysztof Adamski <mr_K@interia.pl> Usunąć ten klucz ze zbioru? y $ gpg --keyserver "hkp://subkeys.pgp.net" --recv-keys D82E0E4B gpgkeys: WARNING: this is an *experimental* HKP interface! gpg: klucz D82E0E4B: klucz publiczny Krzysztof Adamski <mr_K@interia.pl> wczytano do zbioru gpg: Ogółem przetworzonych kluczy: 1 gpg: dołączono do zbioru: 1 $
Wytłuściłem numer klucza, który został użyty przy pobieraniu z serwera. Ten sam numer możemy odczytać z listy kluczy wypisnej np. przez opcję --list-keys.