Następny: Instalacja Powyżej: PGP 2.6.2 Poprzedni: Po co mi

Jak to działa?

Doskonale się składa, jeśli masz pewne podstawowe wiadomości na temat kryptografii, a w szczególności kryptografii publicznej. Tak, czy inaczej, poniżej wyjaśnię kilka podstawowych terminów związanych z kryptografią.

Przyjmijmy, że chcę napisać do Ciebie list, tak by nie mógł go przeczytać nikt poza Tobą. W tym celu szyfruję go, tzn. przepuszczam przez przez tak beznadziejnie skomplikowany, ale działający według określonego KLUCZA algorytm, by nie posiadając tego samego klucza, nie można było doprowadzić listu do pierwotnej postaci (rozszyfrować). Tak przynajmniej działa konwencjonalna kryptografia "z jednym kluczem".

W konwencjonalnych systemach kryptograficznych, jak np. DES [używ. np. w Norton DISKREET -PK] ten sam klucz jest używany i do szyfrowania, i od deszyfrowania. Oznacza to, że klucz ten musi byc dostarczony do adresata sposób, wykluczający ujawnienie osobom trzecim. Jest w tej metodzie pewna niekonsekwencja - po co w takim razie szyfr, skoro i tak musi znaleźć się sposób na bezpieczne przekazanie klucza?

W systemach kryptografii publicznej, każdy z użytkowników posiada dwa klucze - publiczny, udostępniany wszystkim, i prywatny, przechowywany pieczołowicie tylko przez właściciela. Na podstawie znajomości klucza publicznego, nie można odtworzyć klucz prywatnego, i na odwrót. Taki układ wyklucza niebezpieczeństwo przesyłania przez publiczne sieci komputerowe przesyłania jakichkolwiek danych, umożliwiających dostęp do listu osobom niepowołanym.

Klucz publiczny służy do szyfrowania wiadomości, która jednak może być rozszyfrowana tylko przy użyciu odpowiedniego klucza prywatnego. Klucz publiczny i prywatny danego użytkownika stanowią unikalną parę, tak że nawet osoba szyfrująca list czyimś kluczem publicznym nie może go przeczytać.

Unikalność kluczy pozwala również na autoryzację listów. Jest to możliwe wówczas gdy w procesie szyfrowania zostanie wykorzystany klucz prywatny, który niejako "podpisuje" tekst wiadomości. Taki cyfrowy podpis pozwala nam upewnić się co do dwóch rzeczy: że list pochodzi w rzeczywistości od tej osoby od której wydaje się pochodzić, oraz że dotarł do nas w formie niezmienionej. "Poprawienie" listu i późniejsze uzupełnienie sygnatury przez osobę trzecią nie jest możliwe.

Obydwie funkcje mogą być łączone: list najpierw jest podpisywany kluczem prywatnym nadawcy, a potem szyfrowany kluczem publicznym odbiorcy. Adresat odwraca kolejność przez rozszyfrowanie listu (swoim kluczem prywatnym), a następnie sprawdzenie zgodności sygnatury z kluczem publicznym domniemanego autora. Obydwa kroki są oczywiście wykonywane automatycznie przez program.

Dla zwiększenia szybkości działania dość wolnego algorytmu szyfrowania kluczem publicznym został zastosowany trick, który wykorzystuje znacznie szybszą kryptografię konwencjonalną (z jednym kluczem). Tekst jawny (oryginalna wiadomość) jest szyfrowany wysokiej jakości szyfrem konwencjonalnym, przy użyciu tworzonego losowego klucza, za każdym razem tworzonego od nowa. Klucz ten jest szyfrowany z kolei kluczem publicznym adresata, i dołączany do kryptogramu (zaszyfrowanej wiadomości). Odbiorca używa swojego klucza prywatnego do odzyskania owego "tymczasowego klucza", który z kolei służy do szybkiego rozszyfrowania wiadomości. [nawiasem mówiąc, bardzo ułatwia to i skraca tworzenie kryptogramów przeznaczonych dla wielu odbiorców -PK].

Każdy klucz publiczny jest opisywany w pierwszym rzędzie identyfikatorem użytkownika (userID) [dalej określanego również jako "nazwa użytkownika" -PK], składającym się zwykle z imienia, nazwiska i adresu emailowego. "Metryka" klucza publicznego, czyli postać w jakiej jest on przechowywany i przenoszony składa się z identyfikatora użytkownika, datownika określającego czas stworzenia klucza i wreszcie właściwego kodu klucza. Klucz prywatny ma taką samą budowę, z tą różnicą, że jest on dodatkowo zaszyfrowany hasłem, chroniącym go przed ujawnieniem na wypadek dostania się w niepowołane ręce. Metryki są przechowywane są w zbiorach - bazach kluczy, oddzielnych dla kluczy publicznych prywatnych. Każdy użykownik posiada zatem dwie bazy kluczy.

Klucz jest również opisywany za pomocą identyfikatora cyfrowego (numeru), który faktycznie jest jego "skrótem" (64 najmniej znaczące bity klucza). Przy pracy wyświetlane są tylko 32 bity identyfikatora. Mimo że często różne klucze mogą mieć ten sam identyfikator użytkownika, to w praktyce nie ma dwóch kluczy o tym samym identyfikatorze cyfrowym.

Do tworzenia podpisów cyfrowych (sygnatur) PGP używa algorytmu cyfrowego "streszczenia" tekstu (message digest algorithm), który jest jego 128-mio bitową jednokierunkową funkcją mieszającą. Jest ona analogiczna do rozpowszechnionych sum kontrolnych i CRC, jednoznacznie odzwierciedlających zawartość tekstu. W praktyce niemożliwe jest wprowadzenie do tekstu zmian w taki sposób, by nie zmieniły one sygnatury. Sygnatura jest następnie szyfrowana kluczem tajnym autora tekstu.

Dokument jest sygnowany przez dodanie na jego początku metryki, zawierającej identyfikator sygnującego go klucza, zaszyfrowane "streszczenie" oraz datownik. Przy sprawdzaniu poprawności sygnatury przez odbiorcę program używa identyfikatora klucza do znalezienia go w bazie i stwierdzenia autorstwa.

Każdy zaszyfrowany plik zawiera na początku identyfikator klucza publicznego który został użyty do zaszyfrowania go. Pozwala to na odnalezienie przez program odbiorcy odpowiedniego klucza prywatnego przy rozszyfrowaniu. [można oczywiście posiadać więcej niż jeden klucz prywatny -PK]

Podsumowując: w użyciu są dwa rodzaje kluczy - prywatne i publiczne; dla wygody manipulacji nie są przechowywane pojedynczych plikach, ale w dwóch bazach kluczy - publiczne w jednej i prywatne w drugiej. Możliwe jest oczywiście kopiowanie dowolnej liczby kluczy z bazy do pliku, na przykład w celu przesłania swojego klucza publicznego przyjacielowi.


Krzysztof Marek Matyskiel, Grzegorz Wójcik