Cała filozofia tej technologii polega na posiadaniu specjalnej pary kluczy, prywatnego oraz publicznego. Klucz prywatny powinien być przez nas zabezpieczony i nie rozpowszechniany. Klucz publiczny powinien być ogólne dostępny i udostępniany każdemu, kto chce wysłać do nas zaszyfrowaną wiadomość, bądź sprawdzić nasz podpis cyfrowy.
Klucze publiczne można umieścić na specjalnych, przeznaczonych do tego celu serwerach.
Generowanie klucza
Na początku będziemy musieli wygenerować pary kluczy: prywatny i publiczny.
[user@host]$ gpg --gen-key
Zostaniemy zapytani o rodzaj klucza:
Please select what kind of key you want:
(1) DSA and ElGamal (default)
(2) DSA (sign only)
(4) RSA (sign only)
Your selection?
Wybieramy pierwszą opcję dzięki, której będziemy mogli nie tylko podpisywać ale i szyfrować informacje.
Następnie wybieramy długość klucza, wybieramy znowu domyślną wartość:
About to generate a new ELG-E keypair.
minimum keysize is 768 bits
default keysize is 1024 bits
highest suggested keysize is 2048 bits
What keysize do you want? (1024) 1024
Następnie zostaniemy zapytani o termin ważności klucza, dla większości przypadków wystarczająca będzie opcja 0 (bezterminowo):
Please specify how long the key should be valid.
0 = key does not expire
= key expires in n days
w = key expires in n weeks
m = key expires in n months
y = key expires in n years
Key is valid for? (0)
Zostaniemy jeszcze poproszeni o podanie danych identyfikacyjnych (Imienia, Nazwiska, e-maila) i hasła. Dane identyfikacyjne będą się pojawiały innym użytkownikom po zaimportowaniu naszego klucza publicznego.
Po wpisaniu hasła zostaną wreszcie wygenerowane nasze nowe klucze. Ilość czasu potrzebna do ich utworzenia jest zależna od szybkości procesora, wybranej długości klucza oraz entropii podanych informacji (hasło, dane identyfikacyjne). Dodatkowo zostaniemy poproszeni o pomoc przy generowaniu liczb pierwszych. Polegać będzie ona na wykonywaniu jak największej ilości operacji podczas procesu tworzenia naszych kluczy.
Eksportowanie klucza publicznego
Aby wyeksportować nasz klucz lub kogokolwiek wpisanego do naszej bazy kluczy wydajemy polecenie:
[user@host]$ gpg --output key.pgp --armor --export adres@mailowy_osoby.pl
W bieżącej kartotece w pliku key.pgp zostanie zapisany klucz publiczny. Opcja --armor spowoduje, że zbiór zostanie zapisany w formacie ASCII (domyślnie jest on zapisywany w postaci binarnej). Tak zapisany plik możemy opublikować na naszej stronie internetowej.
Można również wysłać nasz klucz publiczny na serwer kluczy komendą:
[user@host]$ gpg --keyserver certserver.pgp.com --send-key 5AFCCBDC
Importowanie kluczy publicznych
Aby zaimportować klucz publiczny wydajemy komendę:
[user@host]$ gpg --import klucz.pgp
Można również z serwera kluczy pobrać klucz publiczny podając identyfikator klucza bądź adres mailowy:
gpg --keyserver wwwkeys.pgp.net --recv-keys C6F888DF
Sprawdzanie kluczy
Teraz można sprawdzić wszystkie klucze publiczne w naszej bazie wydając polecenie:
[user@host]$ gpg --list-keys
Aby zweryfikować autentyczność klucza z nadawcą weryfikujemy jego odcisk:
[user@host]$ gpg --fingerprint adres@mailowy.pl
Po ustaleniu (np. telefonicznie) poprawności odcisku możemy go ostatecznie podpisać:
[user@host$ gpg --sign-key adres@mailowy.pl
Podpisywanie wiadomości
Aby podpisać wiadomość zawartą w zbiorze tekstowym wydajemy następującą komendę:
[user@host]$ gpg --clearsign ./wiadomosc.txt
Zostaniemy zapytani o nasze hasło i po jego podaniu na dysku pojawi się zbior wiadomosc.txt.asc wraz z cyfrową sygnaturą.
Sprawdzenie autentyczności zbioru
Po wydaniu komendy:
[user@host]$ gpg --verify ./wiadomosc.txt.asc
zostanie zweryfikowana wiadomość i mamy pewność czy jest ona prawdziwa i pochodzi od naszego nadawcy.
Szyfrowanie wiadomości
Po wydaniu komendy:
[user@host]$ gpg --encrypt --sign --armor --recipient adres@mailowy.pl tekst.txt
Teraz w bieżącym katalogu powinien pojawić się zaszyfrowany (opcja --encrypt) kluczem publicznym użytkownika adres@mailowy.pl (--recipient adres@mailowy.pl), podpisany (--sign) oraz zapisany w postaci ASCII (--armor) plik tekst.txt.asc. Pamiętajmy, że ostatnim argumentem musi być ścieżka do pliku w którym jest zapisana treść naszej wiadomości.
Rozszyfrowanie wiadomości
Użytkownik otrzymując od nas zaszyfrowaną przesyłkę, musi ją rozszyfrować:
[user@host]$ gpg --output wiadomość --decrypt ./tekst.txt.asc
Po podaniu hasła odbezpieczającego klucz prywatny, GPG rozszyfruje i zweryfikuje wiadomość zapisaną w bieżącym katalogu w pliku tekst.txt.asc (--decrypt ./tekst.txt.asc).
Wyszukiwanie kluczy publicznych
Aby wyszukać na serwerze kluczy, klucz wydajemy komendę:
[user@host]$ gpg --keyserver wwwkeys.pgp.net --search-keys j.krijthe@tiscali.nl
Usuwanie kluczy
Aby usunąć błędnie zaimportowany klucz lub klucz, który stracił ważność, wydajemy komendę:
[user@host]$ gpg --delete-keys user@serwer.pl
W przypadku gdy chcemy usunąć swoją główną parę kluczy (publiczny / prywatny), bądź utworzyliśmy kilka takich par i np. jedna z nich nie jest już nam potrzebna, wtedy najpierw musimy użyć opcji --delete-secret-keys . Dla przykładu, załóżmy, że komuś udało się wejść w posiadanie naszego klucza prywatnego. Musimy teraz jak najszybciej wygenerować nową parę kluczy oraz rozesłać wszystkim znajomym nasz nowy klucz publiczny. Najpierw jednak musimy pozbyć się starej, nieaktualnej już pary. Usuwamy więc w pierwszej kolejności klucz prywatny:
[user@host]$ gpg --delete-secret-keys adres@mailowy.pl
Będziemy musieli dwukrotnie potwierdzić naszą decyzję, po czym zostanie nam jeszcze do usunięcia klucz publiczny:
[user@host]$ gpg --delete-keys adres@mailowy.pl
Szyfrowanie symetryczne
Ciekawą i często przydatną opcją jest możliwość symetrycznego szyfrowania plików z pomocą GnuPG. Możemy w ten sposób zakodować dowolny plik na naszym dysku. W tym przypadku nasze klucze nie są używane, a jedynie pojedyncze hasło, które jest potrzebne do zaszyfrowania i rozszyfrowania pliku. Chcąc zaszyfrować np. plik dane.txt z katalogu bieżącego, wystarczy, że wydamy polecenie:
[user@host]$ gpg --symmetric dane.txt
Po podaniu hasła szyfrującego powinniśmy teraz posiadać obok pliku jawnego dane.txt, jego zakodowaną wersję dane.gpg. Pamiętajmy, że oryginał nie jest automatycznie usuwany. Teraz, gdy będziemy chcieli rozkodować nasz plik, wydamy polecenie:
[user@host]$ gpg --output dane.txt --decrypt dane.gpg
Otrzymamy (oczywiście po podaniu odpowiedniego hasła) zapisaną w pliku dane.txt, rozszyfrowaną wiadomość z dane.gpg. Domyślnie program wyświetla wynik tej operacji na standardowym wyjściu, jednak dzięki opcji --output zapiszemy wszystko w osobnym pliku. Dzięki symetrycznemu szyfrowaniu dostęp do jawnych danych zawartych w pliku dane.gpg mają jedynie osoby znające nasze hasło. Jest to szczególnie przydatne gdy musimy ważne dane umieścić na ogólnodostępnym serwerze, a chcemy, aby ich treść mogły poznać tylko niektóre osoby.
podczas pisania tej porady korzystałem z http://7thguard.net i artykułu Architektura klucza publicznego w Gnu Privacy Guard (GPG) autorstwa: Krzysztofa Śniadoch





Odpowiedzi
pon., 15/01/2007 - 14:48
Dobra robota.
pon., 15/01/2007 - 17:38
Ja tylko uprościłem artykuł z portalu 7thguard.net i przygotowałem go pod siebie, więc o dobrej robocie nie ma mowy :).
Zresztą pod artykułem jest informacja o tym na jakiej podstawie pisałem moją poradę.
Ale dziękuję za zauważenie tego artykułu.
czw., 18/01/2007 - 07:48
Tzn. ja już wcześniej interesowałem się GPG. Ale wszędzie było opisane to zbyt szczegółowo, niekiedy mało zrozumiałym językiem. Tak apropo nie tylko zauważyłem artykuł a z niego skorzystałem. Od czasu pierwszego mojego komentarza, moje PSI szyfruje wiadomości, dziękuje za artykuł.
czw., 18/01/2007 - 11:51
To cieszę się, że tak "niechcący" pomogłem :)
pon., 09/06/2008 - 22:05
Dzieki przyda sie bardzo! :)
Dodaj nową odpowiedź