PGP jest narzędziem umożliwiającym bezpieczną komunikację.

Najczęściej PGP stosuje się do:
- szyfrowania wiadomości pocztowych wysyłanych przez Internet
- podpisów elektronicznych

O co w tym wszystkim chodzi ...
PGP do szyfrowania i odszyfrowywania wiadomości stosuje parę kluczy: klucz publiczny i prywatny. Oba klucze należą do osoby otrzymującej wiadomość. Klucz publiczny, jak sama nazwa wskazuje może być podarowany każdemu, z kim chcemy prowadzić bezpieczną korespondencję. Klucz prywatny jest przeznaczony tylko dla nas i w żadnym wypadku nie powinniśmy go nikomu udostępniać. Użytkownik, który wysyła wiadomość szyfruje ją kluczem publicznym adresata.

Szyfrowanie z użyciem klucza publicznego oparte jest na użyciu 'one-way trapdoor functions'. Funkcje te są łatwe do wyliczenia tylko w jednym kierunku, np. łatwo jest pomnożyć liczby pierwsze uzyskując jakiś wynik, jednak znacznie trudniej jest rozbić ten wynik na liczby pierwsze z których został otrzymany. Słowo trapdoor oznacza, że jeszcze trochę bardziej komplikujemy sprawę.

Klucz publiczny składa się z liczby powstałej przez pomnożenie dwóch dużych liczb pierwszych i algorytmu, który używa tej liczby do zaszyfrowania wiadomości.

Aby odszyfrować wiadomości algorytm musi znać liczby pierwsze, które pomnożone przez siebie dają liczbę zawartą w kluczu publicznym.

Bezpieczeństwo zależy oczywiście od zastosowanego klucza. Nie można jednak porównywać rozmiaru klucza używanego w szyfrowaniu z kluczem publicznym do rozmiaru klucza używanego w szyfrowaniu symetrycznym (z użyciem jednego klucza). Obecnie zaleca się szyfrowanie klucza publicznego 1024 bitowego.

No ale tak naprawdę to sprawa wygląda jeszcze trochę bardziej skomplikowanie ... a to dlatego, że w PGP stosuje się szyfrowanie hybrydowe. Oznacza to, że klucz publiczny stosuje się do szyfrowania klucza symetrycznego (chodzi mi tu oczywiście o klucz używany w szyfrowaniu symetrycznym, a nazywam go symetrycznym bo to znacznie mniej pisania), który jest używany do szyfrowania wiadomości. Klucz symetryczny jest inny dla każdej wiadomości i dlatego często nazywa go się kluczem sesji. Odbiorca używa klucza prywatnego do odszyfrowania klucza symetrycznego, a tego do odszyfrowania wiadomości.

Podpis cyfrowy to wynik działania funkcji haszującej na dokumencie. (funkcje haszujące to funkcje typu many-to-one które dopasowują wejście do zestawu wyników, np. f(x)=0 lub f(x)=x mod 23).

Wartość hash jest szyfrowana kluczem prywatnym, dzięki temu osoba posiadająca klucz publiczny może sprawdzić podpis. Podpisany dokument może zostać przesłany z użyciem dowolnego algorytmu szyfrowania lub żadnego. Jeżeli dokument zostanie zmieniony, to podpis cyfrowy nie będzie się zgadzał. W GnuPG (o którym mowa za chwilę) Digital Signature Standard (DSA) jest używany jako algorytm do tworzenia podpisów cyfrowych.

Instalacja

Oczywiście w przypadku Linuxa wykorzystamy darmową implementację PGP o nazwie GnuPG.
GnuPG możesz pobrać z tejstrony.
Rozpakuj źródła do jakiegoś katalogu (np.: /usr/local), a następnie
./configure
make
make check
make install
make clean
i GnuPG jest już zainstalowany.

Użycie

Aby wygenerować kluch publiczny i prywatny:
gpg --gen-key
Trzeba będzie odpowiedzieć na kilka pytań. Będziesz musiał podać swoje imię i nazwisko a także adres email.
Jeżeli chcesz zobaczyć, że klucze naprawdę zostały wygenerowane:
gpg --list-keys
Jeżeli chcesz komuś przesłać swój klucz publiczny, trzeba go wyeksportować:
gpg --armor --export --output mojklucz.asc
mojklucz.asc możesz przesłać jako załącznik, lub podarować w dowolnej innej formie osobom, z którymi chcesz prowadzić bezpieczną korespondencję. Jeżeli otrzymasz od kogoś kluch publiczny trzeba go zaimportować.
gpg --import klucz_kolegi.asc
Załóżmy, że kolega ma adres poczty kolega@serwer.com . Po zaimportowaniu klucza kolegi, musisz go podpisać:

gpg --edit-key kolega@serwer.com
>fpr
>sign
>quit

Jeżeli chcesz zaszyfrować wiadomość przeznaczoną dla twojego kolegi:
gpg --output wiadomosc.txt.pgp --encrypt --recipient kolega@serwer.com wiadomosc.txt
Jeżeli chcesz odszyfrować wiadomość przeznaczoną dla ciebie:
gpg --output wiadomosc_dla_mnie.txt --decrypt wiadomosc_dla_mnie.txt.pgp

Podpisy cyfrowe.
Masz tutaj duże pole do popisu.
Możesz podpisać wiadomość i jednocześnie ją zaszyfrować:
gpg --output plik.sig --sign plik
Aby go odszyfrować:
gpg --output plik.ok --decrypt plik.sig
Aby sprawdzić podpis:
gpg --verify plik.sig
Możesz podpisać wiadomość bez szyfrowania jej:
gpg --clearsign plik
Plikiem wyjściowym będzie domyślnie plik z rozszerzeniem asc.
Możesz utworzyć podpis dokumentu w osobnym pliku:
gpg --output podpis_pliku.sig --detach-sig plik
Aby sprawdzić tak podpisany plik:
gpg --verify podpis_pliku.sig plik

Dodatki

Na tej samej stronie, z której pobierałeś(łaś) GnuPG można pobrać wiele dodatkowych programów, które pomagają w zarządzaniu kluczami (graficzne interfejsy), programy integrujące GnuPG z programami pocztowymi itp. Ale to już pozostawiam twojej inwencji. Oczywiście zachęcam do lektury man'ów.

Miłej zabawy.

** Jacek Seń **


MENU LINUX