Pretty Good Privacy czyli kryptografia publiczna dla mas

2008-10-25 00:00:00 +0100


Pretty Good Privacy czyli kryptografia publiczna dla mas Philip Zimmerman tłumaczenie: Paweł Krawczyk korekta: Janusz B. Wiśniewski PGP w wersji 2.6.2
30 września 1994

Motto:


Mało znaczy wszystko co robisz, ale
bardzo ważne jest byś to zrobił w ogóle
- Mahatma Gandhi

 

Abstract:

PGP(tm) jest programem zapewniającym zaawansowaną ochronę poczty elektronicznej (email) i danych przy wykorzystaniu kryptografii z kluczem publicznym. Pozwala na bezpieczną wymianę informacji z ludźmi, których nie musisz znać osobiście, bez potrzeby utrzymywania specjalnych kanałów łączności do wymiany kluczy. PGP jest szybkie, ergonomiczne i posiada bogaty zestaw funcji zarządzania kluczami, elektronicznymi podpisami i kompresją danych.

 

 

Program i dokumentacja (c) copyright 1990-1994 Philip Zimmermann. Wszelkie prawa zastrzeżone. Informacje nt. licencji, dystrybucji, praw autorskich, patentów, znaków towarowych, zastrzeżeń wykorzystania i eksportu zamieszczone są w rozdziale "Kwestie prawne" drugiej części podręcznika. Dystrybucją PGP zajmuje się Massachusetts Institute of Technology.

Tłumaczenie dokumentacji i komunikatów PGP za zgodą Autora, Philipa Zimmermana. Polska wersja językowa PGP copyright 1995 by Paweł Krawczyk. Zabronione jest wprowadzanie jakichkolwiek zmian w jakimkolwiek pliku należącym do polskiej wersji PGP bez pisemnej zgody autora. Jedyną dopuszczalną (i wskazaną) zmianą jest konwersja standardów polskich znaków. Zabroniona jest sprzedaż pakietu i należących do niego plików bez zgody autora przekładu.

Wstęp

PGP jest u nas dobrze znane i używane, jednak dla osób słabo lub w ogóle nie znających języka angielskiego dość poważną barierą może być całkowita anglojęzyczność PGP. Idea kryptografii publicznej nie jest nowa, ale dopiero PGP umożliwia jej tak powszechne zastosowanie, "kryptografia publiczna dla mas", tak bowiem brzmi jego podtytuł. PGP jest do tego programem freeware, co znaczy że za jego używanie i dystrybucję nie trzeba nic płacić (dotyczy to wyłącznie prywatnych użytkowników; szczegóły licencji zawarte są w załączonych dokumentach).

Instalacja

Szczegóły instalacji polskiej wersji znajdziesz w plikach !README.!PL (DOS) lub INSTALACJA (UNIX).

Uwagi do przekładu

Tłumacz przyznaje od razu, że nie jest ekspertem w sprawach matematyki dyskretnej i kryptografii (co nie znaczy że nie ma o nich pojęcia), niemniej starał się zapewnić w miarę jednolite, sensowne i niezbyt sztuczne słownictwo.

Każda propozycja i uwaga będzie mile widziana, oraz zostanie uwzględniona w kolejnych wydaniach. Miejmy nadzieję że będzie jeszcze tylko jedno - to pozbawione błędów ;). Proszę pisać na adresy:

kravietz@pipeta.chemia.pk.edu.pl (email)
Paweł Krawczyk, 2:486/18.4 (FidoNet)

Istnieje dodatkowo możliwość automatycznego otrzymywania ewentualnych dodatków i nowych wersji polskiego wydania PGP, ale tylko emailem Proszę pisać na w/w adres, tylko z dopiskiem w linii Subj: "sub PGP". Najnowszą wersję pakietu można zawsze znaleźć w archiwum FTP pod adresem ftp://pipeta.chemia.pk.edu.pl/pub/pgp. Tam również można znaleźć najnowszą wersję PGP.

Uwagi tłumacza, który również musiał odwalać robotę redaktora, są umieszczone w tekście w [nawiasach z dopiskiem -PK].

Za pomoc w tłumaczeniu i korektę dziękuję serdecznie Januszowi B. Wiśniewskiemu (2:486/22.5@fidonet). Jego uwagi mają dopisek [-JBW].

W obecnej chwili (koniec lipca) druga część dokumentacji PGP nie jest jeszcze dostępna ze względu na przerażającą objętość ;). W obecnym składzie spodziewamy się jej we wrześniu - październiku.

Wstęp

Pretty Good(tm) Privacy (PGP), produkt Phil's Pretty Good Software, jest zaawansowanym systemem kryptograficznym przeznaczonym dla systemów MSDOS, Unix, VAX/VMS i innych. PGP pozwala na wygodną wymianę plików lub listów z zapewnieniem prywatności i wiarygodności. Prywatność w tym przypadku oznacza, że przeczytać dany list będą mogły tylko osoby dla których będzie on przeznaczony. Wiarygodność autorstwa listu gwarantują techniki "podpisu cyfrowego".

Wygoda używania PGP to brak utrudnień występujących przy pracy z konwencjonalnym oprogramowaniem kryptograficznym, związanych z zarządzaniem kluczami. Do wymiany kluczy nie są wymagane specjalne, bezpieczne kanały łączności. Dzieje się tak dzięki wykorzystaniu w PGP nowej i potężnej technologii zwanej kryptografią publiczną.

PGP łączy wygodę systemu publicznego Rivest-Shamir-Adleman (RSA) z szybkością tradycyjnej kryptografii, mechanizmami autoryzacji tekstów (podpisu cyfrowego), kompresją danych przed szyfrowaniem, ergonomicznym wykonaniem i wreszcie zaawansowaną filozofią zarządzania kluczami. Co więcej, PGP przeprowadza wszystkie te operacje szybciej niż większość innych implementacji tego typu. PGP jest systemem dla wszystkich.

PGP nie posiada funkcji komunikacji modemowej itp. Do tego celu musisz używać odrębnych programów. [PGP jako takie nie jest również programem do obsługi poczty elektronicznej; za to wiele takich programów przewiduje możliwość jego podłączenia, np. GoldED, elm-pgp; istnieje również specjalny interfejs dla programów pracujących w Windows (Eudora, Pegasus) - Private Idaho -PK]

Pierwsza część podręcznika PGP pt. "Podstawy obsługi", omawia pokrótce główne opcje; powinien zapoznać się z nią każdy użytkownik. W części II pt. "Tematy szczegółowe" opisane są dokładnie wszystkie oferowane przez PGP funkcje i zastosowania. Przeznaczona jest przede wszystkim dla osób pragnących szerzej poznać i wykorzystać PGP. Opis techniczny zastosowanych algorytmów i formatów danych jest zawarty w odrębnym dokumencie.

Po co mi PGP?

PGP jest prywatne. PGP jest osobiste. Nie jest częścią żadnej inwestycji ani kampanii, należy tylko do Ciebie. Możesz prowadzić kampanię polityczną, krytykować podatki, uprawiać seks pozamałżeński lub robić coś, co jest niezgodne z prawem (pomimo że w Twoim odczuciu słusznie). Cokolwiek by to było, na pewno nie chciałbyś, by Twoja prywatna poczta elektroniczna była czytana przez kogoś innego. Nie ma nic złego w zapewnianiu sobie prywatności. Prywatność jest jedną z podstawowych zasad Konstytucji.

Być może sądzisz, że skoro Twój e-mail jest całkiem legalny, to nie ma potrzeby stosowania kryptografii. Ale nawet jeśli jesteś przestrzegającym prawa obywatelem, to dlaczego wkładasz list do koperty przed wysłaniem, a nie piszesz na kartkach pocztowych? Dlaczego nie zgadzasz się na regularne testy na zawartość narkotyków w organizmie? [na razie jest to paranoja dotycząca tylko części amerykańskich pracowników -PK] Dlaczego właściwie wymagasz od policji nakazu rewizji, zanim przeszuka Twoje mieszkanie? Czyżbyś coś ukrywał? Czy tylko wywrotowcy i handlarze narkotyków wkładają listy do kopert? Czy też paranoicy, trapieni manią prześladowczą. Czy praworządny obywatel ma jakiekolwiek uzasadnienie dla szyfrowania swojej poczty elektronicznej?

Wyobraźmy sobie społeczeństwo, w którym wszyscy prawowici obywatele pisaliby listy na kartkach pocztowych. Gdyby jakiś odważny "dziwak" próbował zapewnić sobie prywatność przy pomocy koperty, na pewno wzbudziłoby to podejrzenia. Być może nawet władze posunęły by się do otwarcia koperty, w celu zbadania co też miał ów człowiek do ukrycia. Na szczęście, nie żyjemy w takim społeczeństwie, i przesyłanie listów w kopertach jest rzeczą normalną. Analogicznie, nie powinno wzbudzać niczyich podejrzeń przesyłanie e-mailu, legalnego czy nie, pod osłoną szyfru. Myśl o tym, jak o formie solidarności społecznej.

W obecnych czasach rząd chcąc mieć wgląd w prywatne sprawy zwykłych obywateli, musi ponieść pewne wydatki, na przykład na czajniki do otwierania listów nad parą, podsłuch rozmów telefonicznych oraz zbieranie i segregację uzyskanych tak informacji. Te tradycyjne metody kontroli informacji nie opłacają się na większą skalę.. Jednak obecnie poczta elektroniczna w znaczącym stopniu zastępuje tradycyjne metody komunikacji. Równocześnie jest ona niezwykle łatwa do kontrolowania - e-mail można przeglądać w skali masowej całkiem automatycznie, i w sposób niewidoczny dla adresata wynajdywać interesującyce słowa kluczowe. Nie jest to pieśń przyszłości - już obecnie międzynarodowa wymiana poczty jest kontrolowana przez NSA [National Security Agency, amerykański odpowiednik naszego UOP -PK].

Zmierzamy szybko w stronę przyszłości, w której całe społeczeństwo będzie połączone pajęczyną szybkich, światłowodowych sieci komputerowych. E-mail będzie czymś tak oczywistym, jak dzisiaj pocztówka czy telefon. Władze będą chronić nasze informacje szyframi najwyższej jakości, zaprojektowanymi przez państwowych specjalistów. Większości będzie to odpowiadać. Ale z pewnością duża grupa ludzi będzię wolała chronić swoje dane na własną rękę.

Projekt ustawy o zapobieganiu przestępczośći z roku 1991 zawiera jeden element, który może być znaczącym krokiem w kierunku naruszania prywatności. Jeśli stałby się on prawomocnym, zmusiłby wszystkich wytwórców sprzętu i oprogramowania szyfrującego do umieszczania w swoich wyrobach "pluskiew", które pozwoliły by na rozszyfrowanie wiadomości przez "uprawnione osoby" w "uzasadnionych przypadkach". Projekt ten został zarzucony po zdecydowanych protestach ze strony społeczeństwa i kół przemysłowych.

Z kolei w roku 1992 FBI przedstawiła Kongresowi Stanów Zjednoczonych projekt ustawy o podsłuchu w telefonii cyfrowej [która zdobywa coraz większą popularność, np. jako ISDN -PK]. Według projektu, każdy nowy telefon, faks czy modem pracujący na łączach cyfrowych musiałby posiadać wbudowane odpowiednie wyjścia, umożliwiające zdalny podsłuch agentom FBI [pomysł chyba żywcem zaczerpnięty z Orwella -PK]. Mimo że projekt ten nie uzyskał akceptacji w Kongresie, został ponownie przedstawiony dwa lata poźniej.

Najbardziej alarmujący jest fakt przyjęcia przez Biały Dom nowej ustawy, przedstawionej przez NSA 16 kwietnia 1993 roku. Jej "bohaterem" jest układ scalony o nazwie "Clipper", implementujący nowy, ściśle tajny algorytm szyfrowania zaprojektowany przez NSA. Rząd, zachęcając producentów sprzętu komunikacyjnego do używania Clippera w ich urządzeniach, będzie równocześnie posiadał kopię każdego unikalnego klucza szyfrującego dane. Mimo to, nie ma się czego bać, władze zapewniają że prywatne dane będą czytane tylko wtedy, gdy będzie to potrzebne. Jednak następnym logicznym krokiem do zapewnienia całkowitej skutecznośći idei Clippera byłaby delegalizacja innych form kryptografii!

Jeśli kryptografia byłaby przestępstwem, to tylko przestępcy mieliby zapewnioną prawdziwą prywatność, bo o ile agencje wywiadowcze dysponują doskonałymi technologiami kryptograficznymi, to dysponują nimi również wielcy handlarze bronią czy narkotykami, tak samo jak i wielkie, legalne korporacje. Normalni obywatele i organizacje polityczne zwykle nie mogą sobie pozwolić na zaawansowane technologie szyfrowania. A raczej nie mogli - do niedawna..

PGP oddaje prawo do prywatności, należne każdemu człowiekowi, w jego własne ręce. Czułem wzrastające społeczne zapotrzebowanie na nie. Dlatego też napisałem ten program.

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.

Instalacja

PGP dla systemu MS-DOS jest rozprowadzane w postaci archiwum o nazwie postaci: PGPxx.ZIP, gdzie xx jest numerem wersji (na przykład dla wersji 2.6.2 będzie to PGP262.ZIP). Do rozpakowania archiwum służy popularny program PKUNZIP, lub unixowy "unzip". Archiwum zawiera szereg plików, z których jako z pierwszym powienieneś zapoznać się z dokumentem README.DOC zawierającym najważniejsze informacje, uzupełnienia i nowości w aktualnej wesji PGP.

Jeśli posiadasz już starszą wersję PGP, powinieneś ją usunąć dla uniknięcia konfliktów nazw.

Instalacja PGP na Twoim komputerze ogranicza się do skopiowania archiwum do oddzielnego katalogu na twardym dysku (np. C:\PGP) i rozpakowania go PKUNZIPem. Zalecane jest też wprowadzenie paru dodatków do pliku AUTOEXEC.BAT, ale można to zrobić później. Jeśli instalujesz PGP po raz pierwszy, następnym krokiem będzie wygenerowanie pary kluczy - prywatnego i publicznego - komendą "pgp -kg".

Instalacja w systemach Unix i VAX/VMS wymaga dodatkowo ściągnięcia kodu źródłowego PGP i skompilowania go lokalnym kompilatorem języka C. Do archiwum zawierającego kod źródłowy PGP dołączony został plik "Makefile" obsługiwany przez większość unixowych kompilatorów.

Szczegóły instalacji oraz zalecane zmiany w AUTOEXEC.BAT opisane są w pliku SETUP.DOC,

Użytkowanie

[Oto wykaz używanych przeze mnie nazw parametrów umieszczanych w linii poleceń wraz z krótkim wyjaśnieniem:

 

tekst jawny
nazwa pliku przeznaczonego do zaszyfrowania; może to być równie dobrze plik binarny, np. ZIP, ale nazwa bierze się z faktu, że na ogół szyfrowane są pliki tekstowe; jest ona zresztą zgodna z terminologią kryptograficzną
nazwa
jakakolwiek część identyfikatora użytkownika, pozwalająca jednoznacznie określić żądany klucz; zwykle będzie to nazwisko właściciela klucza lub część jego adresu emailowego
szyfrogram
nazwa pliku zawierającego zaszyfrowany tekst, sygnaturę, bądź klucz -PK]

Ściągawka z podstawowych komend

Krótką listę podstawowych komend i opcji programu wyświetla polecenie:


pgp -h

Szyfrowanie listu

Szyfrowanie tekstu kluczem publicznym adresata:


pgp -e tekst_jawny nazwa_odbiorcy

Komenda ta generuje szyfrogram w postaci pliku o nazwie pliku zawierającego tekst jawny z rozszerzeniem ".pgp". Przykłady:


pgp -e list.txt Krzysztof

lub:


pgp -e list.txt "Krzysztof S"

W pierwszym przypadku program przeszuka bazę kluczy znajdującą w pliku "pubring.pgp" w poszukiwaniu metryki, zawierającej łańcuch "Krzysztof" w polu identyfikatora użytkowanika. W drugim przypadku znajdzie metryki zawierające łańcuch "Krzysztof S". A zatem łańcuch zawierający wewnątrz spacje musi być umieszczony w cudzysłowach. Małe i duże litery nie są rozróżniane. Znaleziony klucz zostanie użyty do zaszyfrowania pliku, podanego jako pierwszy parametr. [w praktyce PGP użyje do szyfrowania tylko pierwszego klucza zawierającego podany ciąg znaków -PK]

Przed szyfrowaniem PGP próbuje poddać plik kompresji, co w znaczącym stopniu utrudnia złamanie oraz powoduje, że szyfrogram jest zwykle o 1/3 mniejszy niż oryginalny plik. [w przypadku tekstów -PK]

Do przesłania zaszyfrowanego listu pocztą elektroniczną szyfrogram musi być dodatkowo przekodowany na znaki ASCII (patrz poniżej), przez dodanie opcji -a.

Szyfrowanie listu dla wielu odbiorców

Jeśli chcesz, by Twój list mogła przeczytać więcej niż jedna osoba, możesz zaszyfrować go kilkoma kluczami publicznymi. W tym celu należy dodać do linii poleceń identyfikatory ich właścicieli. Każdy z nich będzie mógł rozszyfrować list:


pgp -e list.txt Krzysztof Pawel Zenon

Program wygeneruje szyfrogram list.pgp, który będą mogli przeczytać Krzysztof, Paweł i Zenon. W linii komend możesz podać dowolną liczbę odbiorców, przy czym oczywiście musisz posiadać klucz publiczny każdego z nich.

Cyfrowy podpis (sygnowanie listu)

Do składania pod listem cyfrowego podpisu Twojego tajnego klucza służy polecenie:


pgp -s plik_tekstowy [-u nazwa_twojego]

Pamiętaj, że argumenty umieszczone w [nawiasach] kwadratowych są opcjonalne, i nie trzeba ich zawsze wpisywać. Nie należy również wpisywać samych nawiasów.

Polecenie to generuje opatrzony sygnaturą plik z rozszerzeniem ".pgp". Na przykład:


pgp -s list.txt -u Dowejko

Program przeszuka bazę kluczy prywatnych "secring.pgp" w poszukiwaniu klucza zawierającego łańcuch "Dowejko" w polu identyfikatora użytkownika. Jak już wspomniano, nie są rozróżniane małe i duże litery. Znaleziony klucz zostanie użyty do podpisania pliku "list.txt", dając w wyniku plik "list.pgp".

Jeśli nie podasz opcji -u, program użyje do podpisania pliku pierwszego klucza znalezionego w bazie kluczy prywatnych.

PGP próbuje poddać podpisywany plik kompresji, dzięki czemu zwykle staje się on mniejszy, ale za to przestaje być normalnie czytelny. Taka forma podpisywania może być wygodna np. do celów archiwizacji danych, ale nie w przypadku podpisywania zwykłego tekstu ASCII przy wysyłaniu go emailem lub do listy dyskusyjnej. W tej sytuacji pomocną staje się opcja CLEARSIG, która powoduje że PGP nie poddaje tekstu kompresji, a sygnatura zostaje umieszczona na końcu odpowiednio ograniczonego tekstu. Opcja CLEARSIG jest opisana szczegółowo w części II dokumentacji. W skrócie, możemy to wyjaśnić na przykładzie:


pgp -sta list.txt

Spowoduje wygenerowanie pliku "list.asc" zawierającego tekst w niezmienionej postaci, wraz z czytelną (zakodowaną w znakach ASCII) sygnaturą. Plik ten jest już gotowy np. do wysłania emailem.

Podpis i szyfrowanie

Złożenie cyfrowego podpisu pod tekstem, a następnie zaszyfrowanie go kluczem publicznym adresata:


pgp -es tekst_jawny nazwa_odbiorcy [-u nazwa_twojego_klucza]

(argument w [nawiasach] jest opcjonalny)

Program wygeneruje plik z rozszerzeniem ".pgp". Plik wejściowy zostanie najpierw podpisany Twoim kluczem prywatnym, a następnie zaszyfrowany kluczem publicznym adresata. Program szuka klucza publicznego adresata w bazie kluczy publicznych, posługując się podanym identyfikatorem. Jeśli opuścisz ten identyfikator to PGP poprosi o jego podanie. Klucz prywatny jest pobierany z bazy kluczy prywatnych i opuszczenie jego nazwy (w opcji -u) spowoduje użycie pierwszego znalezionego w bazie klucza.

PGP będzie próbowało poddać wejściowy plik kompresji.

Jeśli plik ma być przesyłany emailem, musi być przekodowany na znaki ASCII. Należy wówczas dodać opcję -a.

Możesz oczywiście zaszyfrować podpisany list do więcej niż jednego odbiorcy. Podaj ich identyfikatory w linii poleceń.

Używanie konwencjonalnej kryptografii

Czasem potrzebne jest zaszyfrowanie czegoś w konwencjonalny sposób, jednym hasłem. Dzieje się tak na przykład w sytuacji, gdy chcesz zabezpieczyć plik który nie będzie nigdzie wysyłany, a mogą mieć do niego dostęp osoby niepowołane. Ponieważ szyfruje i deszyfruje go ta sama osoba, użycie kryptografii publicznej nie jest potrzebne.

Do szyfrowania pliku przy uzyciu konwencjonalnej kryptografii służy polecenie:


pgp -c plik

Wygeneruje zaszyfrowany plik o nazwie "plik.pgp", bez korzystania z kluczy publicznych, identyfikatów itp. Zostaniesz natomiast poproszony o podanie hasła, którym ma być zabezpieczony plik. Nie musi to być, ani nawet nie powinno, hasło które zabezpiecza Twój klucz prywatny. PGP próbuje poddać wejściowy plik kompresji.

Otrzymany szyfrogram nigdy nie będzie taki sam, nawet mimo użycia tego samego hasła.

Rozszyfrowywanie i sprawdzanie sygnatur

Podanie jako pierwszego parametru pliku będącego szyfrogramem lub plikiem z sygnaturą spowoduje roszyfrowanie lub sprawdzenie sygnatury:


pgp szyfrogram [-o tekst_jawny]

(argument w [nawiasach] jest opcjonalny)

Domyślnie szyfrogram posiada rozszerzenie ".pgp". Opcjonalny parametr -o definiuje plik do którego zostanie zapisany wyjściowy tekst jawny. Jeśli nie zostanie on podany, tekst jawny zostanie zapisany do pliku o tej samej nazwie, ale bez rozszerzenia [jeżeli plik o danej nazwie już istnieje, PGP umożliwia podanie "w biegu" nowej nazwy -JBW]. Jeśli zaszyfrowany plik posiada również sygnaturę, zostanie ona automatycznie sprawdzona. Wyświetlony zostaje pełny identyfikator sygnatora.

Wszystkie czynności są wykonywane całkiem automatycznie, zarówno jeśli plik jest tylko zaszyfrowany, tylko podpisany lub poddany obu procesom naraz. PGP również automatycznie odszukuje potrzebne klucze w obydwu bazach, posługując się do tego zawartymi w szyfrogramie identyfikatorami. Interwencja użytkownika może byc wymagana jedynie dla podania hasła odblokowującego prywatny klucz.

PGP rozpozna także przypadek, gdy plik został zaszyfrowany konwencjonalnie (z opcją -c) i poprosi Cię o hasło.

Zarządzanie kluczami

Od czasów Juliusza Cezara, zarządzanie kluczami było zawsze najtrudniejszą częścią kryptografii. Jedną z największych zalet PGP jest filozofia obsługi i weryfikacji kluczy.

Generowanie klucza RSA

Do generowania unikalnej pary kluczy - publicznego i prywatnego służy polecenie:


pgp -kg

PGP pozwala wybrać jeden z trzech zalecanych rozmiarów kluczy (niski poziom komercyjny, wysoki komercyjny, "wojskowy") i prosi o podanie albo wybranego numeru, albo podanie własnej wielkości klucza (w bitach), która w wersji 2.6.2i może byc dowolną liczbą do 2048. Odporność klucza na kryptoanalizę rośnie wraz z jego rozmiarem, ale za to maleje prędkość jego przetwarzania.

Następnie zostaniesz poproszony o podanie identyfikatora użytkownika klucza, czyli Twojego imienia i nazwiska. Przyjętym standardem stało się umieszczanie po nazwisku adresu sieciowego w <nawiasach>. Dopuszczalne są spacje i znaki przestankowe:


Stefan Kowalski <kowals@ganja.edu>

Jeśli nie posiadasz adresu sieciowego, możesz umieścić tam numer telefonu lub inne przydatne pozostałym użytkownikom informacje o Tobie, które dodatkowo zapewnią unikalność Twojego identyfikatora.

Następne pytanie PGP dotyczy hasła, które będzie chronić Twój klucz prywatny w przypadku gdyby dostał się w niepowołane ręce. Hasło nie musi składać się z jednego słowa - może to być całe zdanie ze spacjami, znakami przestankowymi, cyframi itp. Nie ma metody odzyskania hasła, więc staraj się go nie zapomnieć. Nie używaj krótkiego i prostego do zgadnięcia hasła, ani nie zapisuj go w miejscu, w którym mogłoby być przez kogoś znalezione. Jeśli nie chesz zabezpieczać klucza hasłem, przyciśniej ENTER. [używanie bezpiecznego hasła jest szczególnie ważne w systemach multipersonalnych, gdzie praktycznie każdy (nie wierz administratorowi ;) ma dostęp do Twojego konta; bezpieczne, znaczy długie, różnorodne pod względem znakowym i z niczym się nie kojarzące potencjalnemu hackerowi; z drugiej strony, nie bardzo ma chyba sens używania hasła w domu -PK]

Para kluczy - publiczny i prywatny - jest generowana na podstawie dużych i naprawdę losowych liczb. Aby zapewnić maksymalną przypadkowość wyboru tych liczb, program poprosi Cię o wprowadzenie przypadkowego ciągu znaków, przypadkowego najlepiej zarówno pod względem częstotliwości uderzeń, jak i zawartości. Losowość wynika tutaj w pewnym stopniu z nieprzewidywalności wprowadzanych przez Ciebie znaków, więc nie przyciskaj w kółko tych samych klawiszy.

Generowanie klucza RSA jest procesem wymagającym sporej mocy obliczeniowej, więc może trwać stosunkowo długo - od kilkunastu sekund dla małego klucza na szybkim procesorze, do kilku minut dla dużego klucza na PC/XT. PGP wyświetla postęp generowania.

Gotowa para kluczy jest umieszczana w bazach - odpowiednio publicznej i prywatnej. Używając komendy -kx możesz później zrzucić swój klucz publiczny do pliku, na przykład w celu rozesłania go znajomym. Klucza prywatnego oczywiście nie należy nikomu dawać. Każdy klucz prywatny jest dodatkowo chroniony własnym hasłem (jeśli zostało założone).

Klucz prywatny powinien być zawsze umieszczony w miejscu do którego nikt poza Tobą nie ma dostępu. Każdy użytkownik powinien mieć własny klucz prywatny, osobiście wygenerowany.

Jeśli PGP pokazuje komunikat o niemożności odnalezienia dokumentacji, i w rezultacie odmawia generowania klucza, przeczytaj rozdział o konfiguracji opcji NOMANUAL w drugiej części podręcznika.

Dodawanie klucza do bazy

Klucze publiczne i prywatne rozprowadzane są w postaci baz. Często zachodzi potrzeba dodania czyjegoś klucza do Twoich zbiorów.

Służy do tego polecenie:


pgp -ka plik_z_kluczem [baza_kluczy]

(argument w [nawiasach] jest opcjonalny)

Domyślnym rozszerzeniem pliku jest ".pgp". Domyślną nazwą pliku zawierającego bazę kluczy jest "pubring.pgp" lub "secring.pgp", w zależnosći od tego czy chodzi o bazę kluczy publicznych czy prywatnych. W przypadku podania innych nazw, domyślnym rozszerzeniem jest również ".pgp".

PGP przed dodaniem kluczy sprawdza obecną zawartość bazy i pomija duplikaty.

W dalszej części podręcznika wyjaśniona jest filozofia podpisywania kluczy sygnaturami. Należy tylko zaznaczyć, że podczas dodawania klucza do bazy przepisywane są również i jego sygnatury, natomiast jeśli klucz już w bazie się znajduje - tylko nowe sygnatury.

PGP zostało oryginalnie zaprojektowane do zarządzanie małymi, osobistymi bazami kluczy. Jeśli masz zamiar obsługiwać naprawdę dużą bazę, przeczytaj rozdział "Obsługa dużych baz kluczy" w drugiej części podręcznika.

Usuwanie kluczy lub identyfikatorów z bazy

Polecenie:


pgp -kr nazwa_użytkownika [baza_kluczy]

Powoduje przeszukanie bazy kluczy i usunięcie identyfikatora lub klucza pasującego do podanego łańcucha. Domyślną nazwą bazy kluczy jest "pubring.pgp". Jeśli znaleziony klucz posiada więcej niż jeden identyfikator, PGP zapyta Cię, czy chcesz usunąć cały klucz czy tylko wskazane identyfikatory.

Kopiowanie klucza z bazy

Polecenie:


pgp -kx nazwa_użytkownika plik_z_kluczem [baza_kluczy]

Kopiuje znaleziony klucz z bazy kluczy do wskazanego pliku. Jest to przydatne, gdy chcesz dać komuś konkretny klucz.

Wraz z kluczem kopiowane są wszytkie uwierzytelniające go sygnatury.

Klucz zostanie zakodowany w znakach ASCII (do emailu) jeśli użyjesz opcji -kxa.

Przeglądanie zawartości bazy kluczy

Do przeglądania kluczy służy polecenie:


pgp -kv[v] [nazwa_uzytkownika] [baza_kluczy]

Które wypisuje wszystkie klucze pasujące do podanego identyfikatora. Brak identyfikatora powoduje wyświetlenie wszystkich kluczy zawartych w podanym pliku. Domyślnie przeszukiwana jest baza "pubring.pgp", by przejrzeć klucze prywatne, podaj "secring.pgp" (o ile tak nazywa się Twoja baza). Domyślnym rozszerzeniem pliku zawierającego klucze jest ".pgp".

W dalszej części podręcznika zostanie wyjaśniona filozofia sygnowania i certyfikowania cudzych kluczy publicznych. Tymczasem, do przeglądania wszystkich sygnatur opatrujących dany klucz służy polecenie:


pgp -kvv [nazwa_użytkownika] [baza_kluczy]

Jeśli chcesz obejrzeć zawartość innego, konkretnego pliku zawierającego klucze, możliwe jest wydanie polecenia postaci:


pgp plik_z_kluczami

PGP wymieni wszystkie znalezione w tym pliku klucze i spróbuje dołączyć je do standardowej bazy kluczy.

Ochrona klucza publicznego przed sfałszowaniem

Systemy kryptografii publicznej cechują się tym, że nie ma potrzeby chronienia klucza publicznego przed innymi użytkownikami, wprost przeciwnie, dobrze jest go szeroko rozpowszechnić. Znacznie ważniejszą sprawą jest zapewnienie autentyczności klucza, tzn. pewności, że należy on rzeczywiście do osoby, której nazwisko na nim figuruje. Jest to jeden ze słabszych punktów w bezpieczeństwie całego systemu. Przedstawię najprzód potencjalne zagrożenia, a potem sposoby ich uniknięcia.

Przypuśćmy, że chcesz wysłać zaszyfrowany list do prof. Gąbki. W tym celu ściągasz jego klucz publiczny z najbliższego BBSu (serwera). Szyfrujesz list tym kluczem i wysyłasz go pocztą elektroniczną.

Ale na nieszczęście niejaki Don Pedro, złamawszy zabezpieczenia BBSu umieścił w nim wygenerowany przez siebie, fałszywie oznaczony nazwiskiem prof. Gąbki, klucz publiczny. W ten sposób Don Pedro może (posiadając pasujący klucz tajny) odczytać przeznaczoną dla profesora wiadomość, co więcej, może ją potem zaszyfrować prawdziwym kluczem publicznym profesora i doń odesłać. Może nawet robić dobre sygnatury, ponieważ wszyscy sprawdzający będą używać fałszywego klucza.

Jedyną metodą zapobieżenia zbrodni jest uniemożliwienie podrobienia klucza. Problem rozwiązałoby uzyskanie klucza profesora bezpośrednio od niego, ale co zrobić jeśli mieszka on na Antypodach, albo akurat jest kompletnie nie do złapania?

Dobrą metodą jest uzyskanie klucza profesora od waszego wspólnego, zaufanego znajomego - Smoka, który z pewnością posiada właściwą kopię klucza. Smok mógłby poświadczyć prawdziwość tego klucza, składając na nim swój podpis własnym kluczem prywatnym.

Dałoby to gwarancję [opierającą się oczywiście tylko na zaufaniu do Smoka -PK] że klucz prof. Gąbki nie został podrobiony. Wymaga to jednak posiadania dobrej kopii klucza publicznego Smoka, w celu sprawdzenia jego sygnatury. Smok mógłby też w razie potrzeby zaopatrzyć profesora w Twój klucz publiczny. Smok byłby zatem pośrednikiem, osobą "przedstawiającą" was sobie nawzajem.

Tak podpisany klucz może być spokojnie przesłany do BBSu, bez obawy że zostanie sfałszowany, wymagałoby to bowiem również sfałszowania prywatnego klucza Smoka i jego sygnatury.

Rolę pośredników spełniaja często zaufane osoby specjalizujące się w funkcji sprawdzania i podpisywania kluczy innych osób. Mogą to być operatorzy popularnych serwerów kluczy. Każdy klucz, niezależnie od tego jaką drogą uzyskany, może być uznany za prawdziwy, pod warunkiem, że zgadza się sygnatura pośrednika.

Model absolutnie zaufanego serwera, poświadczającego klucze innych użytkowników jest wygodny i czasem używany w przypadku dużych, sterowanych centralnie systemów firm lub instytucji.

Dla rozproszonych i pozbawionych centalnego zarządzania, "anarchistycznych" systemów wygodniejszy jest protokół pozwalający wszystkim uzytkownikom na poświadczanie kluczy autentyczności ich przyjaciół. PGP ma nawet tendencje do naturalnego stymulowania takiego zdecentralizowanego podejścia do spraw certyfikacji kluczy. Przybliża ono lepiej społeczny model publicznego zaufania, i pozwala użytkownikom samodzielnie decydować, komu powierzają odpowiedzialność.

Kwestia prawidłowej autoryzacji kluczy jest zwykle Achillesową piętą systemów kryptografii publicznej, toteż zastosowane w PGP rozwiązania programowe są bardzo złożone.

Klucza publicznego możesz użyć tylko wówczas, gdy masz PEWNOŚĆ że nie został on podrobiony i faktycznie należy do osoby, której nazwisko nosi. Pewność tę można zyskac na dwa sposoby: albo otrzymując klucz bezpośrednio od właściciela, albo inną drogą, pod warunkiem że jest on sygnowany przez osobę której w tej kwestii ufasz oraz posiadasz jej dobry klucz publiczny. Wiąże się z tym również konieczność opisywania kluczy pełnym imieniem i nazwiskiem.

W żadnym wypadku, niezależnie od pokusy, a taka będzie istniała na pewno, nie ufaj kluczom ściągniętym z BBSów jeśli nie są opatrzone wiarygodną sygnaturą. Nieautoryzowany klucz może być podrobiony przez każdego, włącznie z administratorem danego systemu.

Sygnując klucze innych osób pamiętaj o odpowiedzialności jaka na Tobie spoczywa - w ten sposób wyrażasz swoje przekonanie, że posiadaczem danego klucza jest tylko i wyłącznie jego - nominalny - właściciel. Nie powinieneś opierać się na zapewnieniach i hipotezach innych osób. Nie podpisuj klucza, dopóki nie będziesz miał stuprocentowej pewności co do autorstwa klucza. Najlepiej oczywiście jest podpisywać tylko klucz uzyskany bezpośrednio od właściciela.

Podpisanie klucza jest czynnością wymagającą znacznie większej pewności co do jego autorstwa niż na przykład użycie do zaszyfrowania listu. Jeśli klucz jest opatrzony sygnaturą osoby której ufasz, spokojnie możesz go wykorzystać. Jednak samodzielnie podpisując klucz powinieneś żądać możliwie najlepszej gwarancji, nawet jeśli wymagałoby to skontaktowania się z potencjalnym właścicielem. Szczegóły weryfikacji kluczy opisane są w rodziale "Weryfikacja klucza przez telefon" w II części podręcznika.

Oczywistym jest, że gwarantując wiarygodność klucza, nie możesz zagwarantować wiarygodności i zrównoważenia samego autora. Sygnatura stwierdza jedynie, że jesteś całkowicie pewien tego, że dana osoba stworzyła i nadal posiada opisywany klucz. Podpisując klucz szaleńca nie ryzykujesz niczym swojego autorytetu, jeśli istotnie jest on rzeczywistym posiadaczem klucza.

Zaufanie nie przenosi się z osoby na osobę. Na przykład: mam przyjaciela który nigdy nie kłamie. Ale jest on człowiekiem naiwnym, który uważa że Prezydent mówi prawdę. Nie oznacza to jednak, że i ja tak uważam, mimo całego mojego zaufania do owego przyjaciela. Odnieśmy to do sygnatur: fakt, że uznaję za wiarygodną sygnaturę Smoka, nie oznacza wcale, że ufam sygnaturze prof. Gąbki, mimo że Smok uważa profesora za godnego zaufania.

Dla Twojego własnego klucza publicznego najlepiej jest uzbierać najwiekszą liczbę sygnatur od różnych ludzi. Wzrasta w ten sposób prawdopodobieństwo, że używająca go kiedyś osoba znajdzie wśród nich przynajmniej jedną godną zaufania. Podpisawszy z kolei klucz innej osoby zwróć go jej by mogła dodać do swojej bazy Twoją sygnaturę.

PGP automatycznie sprawdza które klucze w bazie są opatrzone sygnaturami zaufanych uzytkowników i w razie potrzeby prosi o weryfikację i potwierdzenie absolutnie zaufanym kluczem (czyli Twoim własnym). Zmiana dowolnego ogniwa łańcucha sygnatur powoduje automatyczne uaktualnienie pozostałych.

Upewnij się, że Twoje klucze są całkowicie zabezpieczone przed sfałszowaniem. Na ich wiarygodności opiera się całkowicie wiarygodność nowych kluczy, sprawdzanych po ściągnięciu z serwera itp. Baza kluczy publicznych - tak jak prywatnych - powininna znajdować się na systemie fizycznie odizolowanym od sieci (np. osobistym notebooku). Niebezpieczne jest umieszczanie go na wielozadaniowych i wieloużytkowych systemach sieciowych, nie tylko ze względu na możliwość ujawnienia, ale także podrobienia. Zawsze trzymaj pewne kopie klucza prywatnego i publicznego na zabezpieczonej przed zapisem dyskietce. Będziesz mógł wtedy wykryć każde oszustwo porównując posiadane klucze z kopiami zapasowymi. Szczegóły znajdziesz w II częśći podręcznika.

Teoretycznie możliwe jest również wprowadzenie do samego programu PGP poprawek uniemożliwiająych wykrycie nieprawidłowości w kluczach lub sygnaturach. [PGP jest rozprowadzane łącznie z kodem źródłowym; przed takimi przeróbkami zabezpiecza załączona sygnatura każdego z dystrybucyjnych archiwów -PK]

Dość skomplikowaną metodą zabezpieczenia bazy kluczy prywatnych jest każdorazowe sygnowanie go Twoim kluczem prywatnym. Służy do tego opcja "-sb" (rozdział "Separating Signatures From Messages" w części II). Koniecznym warunkiem bezpieczeństwa jest jednak w takiej sytuacji posiadanie oddzielnej, zaufanej kopii klucza publicznego do sprawdzenia poprawności sygnatury. Nie możesz do tego celu użyć klucza znajdującego się już w bazie, bo m.in. jego autentyczność chcesz stwierdzić.

Jak PGP sprawdza wiarygodność klucza?

(przed przeczytaniem tego rozdziału powinieneś zapoznać się z rozdziałem "Ochrona klucza publicznego przed sfałszowaniem")

PGP samo sprawdza czy każdy z kluczy w bazie posiada wiarygodną sygnaturę. Twoim zadaniem jest jedynie decydowanie, którym osobom chcesz ufać jako wprowadzającym nowe klucze, oraz podpisanie ich kluczy Twoim kluczem prywatnym, mającym status "aksjomatycznego" (absolutnie i z założenia zaufanego). Jak już wspomniano, zmiana zaufania w stosunku do klucza sygnatora automatycznie pociągnie za sobą zmianę wiarygodności sygnowanych przezeń kluczy.

PGP kieruje się dwoma - całkowicie odrębnymi kryteriami przy ocenie wiarygodności kluczy - nie wolno ich łączyć:

  1. Czy dany klucz rzeczywiście należy do tego, kto wydaje się być jego właścicielem? Innymi słowy, czy został podpisany przez zaufaną osobę?
  2. Czy należy do osoby, której możesz zaufać jako sygnatorowi nowych kluczy?

PGP jest w stanie samodzielnie uzyskać odpowiedź na pierwsze pytanie. Na drugie musi odpowiedzieć sam użytkownik. Na podstawie udzielonej odpowiedzi PGP automatycznie uzupełni też odpowiedzi na pierwsze pytanie w stosunku do innych kluczy podpisanych przez posiadacza akurat sprawdzanego klucza.

Klucz poświadczony przez zaufaną osobę [jej kluczem prywatnym -PK] jest przez PGP uznawany za dobry. Z kolei klucze publiczne owych "zaufanych osób" też muszą byc podpisane: przez Ciebie lub przez innych "zaufanych".

Zaufanie do osoby swiadczącej inne klucze nie ma w założeniu odzwierciedlać Twojej opinii tylko o odpowiedzialności tej osoby ale też o jej kompetencji do zarządzania kluczami. Dlatego też PGP pozwala okreslić to zaufanie jako kilkustopniowe : brak zaufania, zaufanie nieznane, marginalne, pełne oraz absolutne. Twój wybór jest przechowywany razem z kluczem danej osoby. Ponieważ jest on traktowany jako informacja prywatna i poufna, poziom zaufania nie jest kopiowany wraz z kluczem.

Podczas obliczania wiarygodności klucza publicznego PGP bierze pod uwagę wagę każdej z opatrujących go sygnatur. Standardowo dwie sygnatury osób marginalnie zaufanych znaczą tyle co jedna osoby w pełni zaufanej. Ustawienie to może byc zmienione w zależności od indywidualnych potrzeb - na przykład możesz żądać od PGP by o wiarygodności klucza decydowały dwie sygnatury osób w pełni zaufanych lub trzy marginalnie.

Twój klucz publiczny posiada status klucza aksjomatycznego. Oznacza to że nie potrzebuje on żadnych dodatkowych sygnatur od osób trzecich by PGP uznało go za wiarygodny. Złożone przez Ciebie sygnatury również mają dla PGP status absolutnie zaufanych. PGP decyduje o tym czy dany klucz należy do Ciebie, czy nie, szukając pasującego doń klucza prywatnego.

Podstawowym założeniem takiego, opartego na sygnaturach, zdecentralizowanego i odpornego na infiltrację systemu jest to że w miarę upływu czasu każdy z użytkowników gromadzi coraz większą pulę kluczy publicznych innych osób, potencjalnie zaufanych. W ten sposób klucz dawany innym osobom opatrzony jest coraz to większą liczbą sygnatur. Daje to nadzieję, że gdy dotrze on do którejś z kolei osoby chcącej go wykorzystać, znajdzie ona pośród sygnatur przynajmniej jedną - dwie godne zaufania.

Takie podejście stroi w żywej opozycji z oficjalnymi, sterowanymi przez rząd systemami zarządzania kluczami jak np. stosowany w Internecie PEM (Privacy Enhanced Mail), który oparty jest na centralnej kontroli i narzuconym z góry obiekcie zaufania. Standard ten opiera się na hierarchii Urzędników Certyfikujących którzy mówią Ci komu masz ufać. Kluczem do systemu PGP jest zdecentralizowana, probabilistyczna metoda określania wiarygodności. PGP pozwala Ci samodzielnie decydować komu ufasz, ustawiając Twój klucz na samym szczycie piramidy certyfikatów. PGP jest dla ludzi którzy przed skokiem z samolotu wolą sami spakować sobie spadochron ;)

Jak chronić klucz tajny przed ujawnieniem?

Ochrona Twojego klucza prywatnego jest podstawowym warunkiem bezpieczeństwa Twoich danych. Równie dobrze należy pilnować zabezpieczającego go hasła. Jeśli zdarzy się że twój klucz prywatny dostanie się w niepowołane ręce, lepiej bez zwłoki zawiadom wszystkich (życzę szczęścia...) zainteresowanych o tym przykrym zdarzeniu. Jeśli będą dalej, nieświadomi, używać Twojego klucza publicznego to na ujawnienie narażone będą wysyłane do Ciebie listy, a każda opatrzona Twoim nazwiskiem sygnatura będzie z dużym prawdopodobieństwem fałszywa. Niebezpieczeństwo jest jeszcze większe, jeśli Twój klucz cieszył się powszechnym zaufaniem.

Podstawą bezpieczeństwa klucza prywatnego jest posiadanie pełnej fizycznej kontroli nad nim. Klucz prywatny będzie stosunkowo bezpieczny, jeśli będziesz go przechowywał na domowym komputerze, lub notebooku noszonym przy sobie. Na duże niebezpieczeństwo naraża go natomiast przechowywanie na włączonym do sieci, wielodostepnym komputerze. Przy zdalnej pracy z terminala wcale nietrudne do zrealizowania jest przechwycenie hasła odblokowującego klucz, a nastepnie kradzież samego klucza. Jeśli musisz uzywać PGP na takim komputerze, na przykład w pracy, najlepszym rozwiązaniem będzie przechowywanie go na zabezpieczonej przed zapisem dyskietce zawsze noszonej ze sobą.

Hasło zabezpieczające klucz prywatny nigdy nie powinno być przechowywane razem z kluczem. Miałoby to taki sens jak noszenie przy kluczach od mieszkania breloczka z adresem. Najlepszym jednak sposobem uchronienia hasła przed ujawnieniem jest nie zapisywanie go nigdzie, poza własnym mózgiem ;). Jesli masz zbyt wiele rzeczy na głowie, by dodatkowo pamiętać wymyślne hasło i musisz go gdzieś zapisać, to przechowuj go w maksymalnie bezpiecznym miejscu. Bezpieczeństwo hasła jest nawet ważniejsze niż samego klucza.

Zawsze rób kopie bezpieczeństwa kluczy. Pamiętaj że jesteś jedyną osobą posiadającą tę parę kluczy. Utrata klucza prywatnego (w tym utrata hasła) czyni bezwartościowymi wszytkie kopie Twojego klucza publicznego znajdujące sie na świecie.

Zdecentralizowany charakter PGP oznacza również, że nie należy za bardzo wierzyć w istnienie i funkcjonalność jakiejś centralnej listy utraconych bądź odtajnionych kluczy. Jedynym sposobem powiadomienia innych użytkowników o takim zdarzeniu jest rozesłanie wieści o tym na wszystkie strony świata i liczenie że dotrze ona do zainteresowanych.

Unieważnianie klucza publicznego

Jeśli dojdzie do ujawnienia klucza, tzn. odtajnienia i klucza i broniącego go hasła (musisz się jeszcze o tym jakoś dowiedzieć!), należy wygenerować odpowiednie "zawiadomienie" - metrykę odtajnienia klucza. Służy do tego polecenie:


pgp -kd nazwa_twojego_klucza

PGP wywołane w ten sposób generuje taką metrykę, unikalną dla danego klucza, oraz opatrzoną jego sygnaturą. Należy ją teraz rozesłać do możliwie największej liczby posiadaczy Twojego klucza publicznego. Ich PGP automatycznie zablokuje posiadane przez nich kopie Twojego klucza przed ewentualnym użyciem. Oczywiście w przypadku odtajnienia klucza prywatnego należy bezzwłocznie stworzyć nową parę kluczy. Można wtedy wysłać znajomym nowy klucz publiczny, wraz z metryką odtajnienia starego.

Tego samego mechanizmu można używać w przypadku potrzeby unieważnienia starego klucza z innych powodów niż jego odtajnienie.

Co zrobić w razie utraty klucza prywatnego?

Normalnie do unieważnienia klucza i zawiadomienia o tym innych użytkowników słuzy opcja "-kd", generująca certyfikat unieważnienia klucza (patrz rozdział "Unieważnianie klucza publicznego").

Jednak w przypadku uszkodzenia lub zgubienia klucza prywatnego wygenerowanie takiego certyfikatu nie jest możliwe, bo do tego potrzebny jest sam klucz! Przyszłe wersje PGP będa miały większe możliwości w zakresie anulowania kluczy w takiej sytuacji, np. autoryzację certyfikatu przez zaufaną osobę. Obecnie jedyna metodą jest rozesłanie "słownego" zawiadomienia o konieczności zablokowania kopii Twojego klucza publicznego znajdujących się w posiadaniu indywidualnych użytkowników. Musi to być zrobione przez nich ręcznie, przez wywołanie PGP z opcją "-kd" i Twoim nazwiskiem w linii poleceń. PGP zablokuje Twój klucz publiczny w ich bazach, tak że nie będzie mógł być wykorzystywany do szyfrowania listów ani dalej kopiowany. W dalszym ciągu będą oni mogli sprawdzać nim Twoje sygnatury, lecz będzie wyswietlane odpowiednie ostrzeżenie. Niemożliwe będzie również ponowne włączenie odblokowanej kopii tego samego klucza do bazy. Wszystko to ma na celu powstrzymanie dalszego rozpowszechniania nieważnego klucza publicznego.

Opcja "-kd" służy również do ponownego odblokowania danego klucza, jeśli jest on zablokowany.

Tematy zaawansowane

Całość zaawansowanych opcji i zastosowań PGP jest opisana w drugiej części podręcznika. [..która na razie jest nieprzetłumaczona ;( -PK]

Przesyłanie szyfrogramów e-mailem: opakowanie ASCII

Wiele sieciowych systemów pocztowych pozwala na przesyłanie listów składających się tylko z 7-bitowych znaków ASCII, podczas gdy produkowany przez PGP właściwy szyfrogram składa się ze znaków 8-bitowych. Dla obejścia tego problemu PGP stosuje algorytm kodowania plików binarnych w znaki ASCII (radix-64), zbliżoną do algorytmów stosowanych przez PEM, MIME czy UUencode. Takie "opakowanie ASCII" (transport ASCII armor) zabezpiecza szyfrogram przed zniszczeniem przez oprogramowanie pocztowe. Opakowanie jest chronione przed ewentualnymi zniekształceniami podczas transmisji przez dodane sumy kontrolne CRC.

Algorytm radix-64 zamienia każdą trójkę 8-bitowych bajtów w cztery 7-bitowe znaki ASCII. Zwiększa to szyfrogram o ok. 33przy założeniu że prawdopodobnie plik został uprzednio poddany kompresji.

Wygenerowanie szyfrogramu w opakowaniu ASCII (podczas podpisywania lub szyfrowania) powoduje opcja "-a":


pgp -sea list.txt nazwa_odbiorcy

W tym przykładzie do pliku "list.asc" zostanie zapisany szyfrogram w opakowaniu ASCII podobnym do MIME czy UUencode. Plik ten bez problemów może zostać przeczytany i wysłany przez oprogramowanie pocztowe Internetu i każdej innej sieci.

Kryptogram w opakowaniu ASCII rozszyfrowuje się tak samo jak binarny:


pgp list

PGP samo szuka najpierw pliku "list.asc" (ASCII) a potem "list.pgp" (binarny). Automatycznie rozpozna obecność opakowania i usunie go, tworząc pośredni plik ".pgp". Dalej roszyfrowanie toczy się już jak zwykle. Efektem działania jest "list.txt".

Większość Internetowego oprogramowania nie pozwala na przesyłanie listów większych niż 50 lub 65 tys. znaków [anonimowe remailery ograniczają tę długość 20-30 tys. -PK, w Fido obowiązuje ograniczenie do 32K -JBW]. Jeśli wynikowy plik w opakowaniu będzie większy, to PGP potnie go na mniejsze [wielkość kawałków ustawia się (2.6.2i) w pliku konfiguracyjnym -JBW] kawałki z rozszerzeniami ".as1", ".as2", ".as3" itp. Odbiorca musi połączyć wszystkie kawałki w jeden duży plik przed rozszyfrowaniem. PGP ignoruje tekst nie należący do szyfrogramu (nagłówki pocztowe, komentarze itp.).

By skopiować swój klucz publiczny do pliku celem wysłania go e-mailem należy również skorzystać z opcji "-a" podczas kopiowania (patrz "Kopiowanie klucza z bazy ").

Jeśli zapomniałeś dodać opakowania podczas szyfrowania lub kopiowania klucza, możesz to zrobić poźniej. W tym celu wywołaj PGP z samą opcją "-a" podając nazwę pliku binarnego do konwersji. PGP stworzy odpowiedni plik ".asc".

Jeśli opatrujesz tekst swoim podpisem cyfrowym, to PGP normalnie podda go kompresji.Tekstu więc nie będzie można odczytać bez ponownego użycia PGP. Taka metoda nadaje sie do celów archiwizacji, ale nie jest najlepsza do sygnowania tekstów publikowanych np. w sieciowych grupach dyskusyjnych, bo uniemożliwia przeczytanie listu od razu. PGP posiada jednak jeszcze jedną możliwość sygnowania: tekst zostaje nietknięty, a zapakowany podpis cyfrowy jest umieszczany na końcu. Oczywiście PGP jest dalej potrzebne odbiorcy do sprawdzenia podpisu. Szczegóły dotyczące opcji CLEARSIG opisane są w II cześci podręcznika.

Zwykle do przesyłania plików binarnych e-mailem wykorzystuje się program uuencode i podobne. PGP może z lepszymi wynikami zastępować uuencode. Wystarczy użyć samej opcji "-a" podając nazwę pliku binarnego w linii komend. Szczegóły opisane są w rozdziale "PGP jako lepsze UUencode" w II części podręcznika.

Zmienne środowiskowe

PGP potrzebuje do pracy kilku plików, takich jak baza kluczy publicznych "pubring.pgp", prywatnych "secring.pgp", inicjator liczb losowych "randseed.bin", plik konfiguracyjny PGP "config.txt" (lub "pgp.ini" lub ".pgprc") i plik językowy "language.txt". Katalog, w którym się znajdują, określa zmienna środowiskowa PGPPATH. Na przykład pod MS-DOSem jej ustawianie może wyglądać tak:


SET PGPPATH=C:\PGP

Spowoduje to że PGP będzie następnym razem szukać w/w plików w katalogu C:\PGP. Powyższe polecenie najlepiej umieścić jest w pliku AUTOEXEC.BAT, wtedy automatycznie będzie wykonywane przy każdym rozpoczęciu pracy. Jeśli zmienna PGPPATH nie zostanie zdefiniowana, PGP będzie szukać potrzebnych plików w bieżącym katalogu.

[UWAGA: niektóre kiepsko napisane programy instalacyjne szukają w pliku AUTOEXEC.BAT napisu "PATH=" i znajdują go w powyższym tekście, w wyniku czego dopisują swoje ścieżki w niewłaściwym miejscu - dlatego instalując oprogramowanie trzeciorzędnych firm lepiej czasowo usunąć lub "popsuć" to polecenie (swoją drogą chyba nieszczęśliwie wybrana nazwa) -JBW]

Konfiguracja PGP: plik CONFIG.TXT

PGP ma mnóstwo konfigurowalnych opcji, które mogą być ustawione wedle życzenia w pliku "config.txt", w katalogu określonym przez zmienną PGPPATH. W pliku konfiguracyjnym można również zdefiniować często używane opcje, by nie wpisywać ich za każdym razem w linii komend.

Dla zgodności z lokalnymi zwyczajami plik konfiguracyjny może się nazywać inaczej niż "config.txt". Opcjonalną nazwą pod MS-DOSem jest "pgp.ini", a pod Unixem - ".pgprc".

W pliku konfiguracyjnym można na przykład określić gdzie PGP ma umieszczać pliki tymczasowe, jakiego języka używać i wiele innych parametrów.

Szczegółowy opis wszystkich opcji konfiguracyjnych PGP znajduje się w II części podręcznika.

Słabe punkty

Nie ma systemu nie do złamania. PGP można podejść na wiele sposobów. Potencjalnie najsłabsze punkty całego systemu na które należy szczególnie uważać, to ujawnienie hasła lub klucza prywatnego, sfałszowanie klucza publicznego, pliki które niby zostały skasowane, ale dalej gdzieś tam są, wirusy i konie trojańskie, błędy w fizycznych zabezpieczeniach, emisja elektromagnetyczna, zagrożenia wynikające z pracy w systemach wielodostępnych, przechwytywanie pakietów sieciowych a nawet bezpośrednia kryptoanaliza.

Zagrożenia te są przedyskutowane wyczerpująco w rozdziale "Słabe punkty" w II części podręcznika.

O złudnym poczuciu bezpieczeństwa

Przy pracy z oprogramowaniem kryptograficznym zawsze nasuwa się pytanie o stopień bezpieczeństwa zapewnianego przez dany produkt. Nawet biorąc pod uwagę samodzielne sprawdzenie kodu źródłowego, nie każdy ma na tyle doświadczenia w kryptografii, by osądzić bezpieczeństwo szyfru. Nawet uwadze doświadczonego kryptologa mogą ujść drobne i trudne do odkrycia słabości algorytmu.

We wczesnych latach 70-tych, ucząc się w liceum, byłem przekonany że udało mi się opracować doskonały algorytm szyfrujący. Prosty strumień pseudolosowy był dodawany do tekstu jawnego, dając w wyniku szyfrogram. Na pozór udaremniało to wszelkie próby analizy częstościowej szyfrogramu i było nie do złamania nawet przez doskonale wyposażone służby specjalne. Byłem z niego bardzo dumny i bardzo pewny siebie. Tak szczeniacko pewny..

Kilka lat później znalazłem ten sam algorytm opisany w kilku wprowadzających artykułach z dziedziny kryptografii. Fajnie, inni też wpadli na ten pomysł. Problem w tym, że mój algorytm był przytoczony jako przykład szyfru ulegającego elementarnym technikom kryptoanalitycznym. Tyle zostało z mojego szyfru.

To wstydliwe doświadczenie nauczyło mnie, jak łatwo wpaść w fałszywe przekonanie o bezpieczeństwie opracowanego algorytmu. Większość ludzi mało zdaje sobie sprawę z tego, jak diabelnie trudno zaprojektować jest szyfr, który oprze się długotrwałym i zdeterminowanym próbom złamania przez dobrze wyposażonego przeciwnika. Większość mainstreamowych programistów opracowało równie naiwne szyfry (często analogiczne do mojego), co więcej, sporo weszło w skład komercyjnych systemów i zostało sprzedanych za ciężkie pieniądze niczego nie podejrzewającym użytkownikom.

To tak jakby sprzedawać kierowcom pasy bezpieczeństwa, które wyglądają i leżą doskonale, ale nie wytrzymują najsłabszego naprężenia. Poleganie na nich może być bardziej niebezpieczne niż jazda bez pasów. Poleganie na słabym algorytmie może wystawic istotne dane na ryzyko. To ryzyko mogłoby nie zaistnieć, gdybyś w ogóle obywał się bez takich szyfrów [zaszyfrowane dane stanowią większą pokusę od niezaszyfrowanych, na które przeciwnik mógłby nawet nie spojrzeć -JBW]. A tak, prawdopodobnie nawet nie będziesz wiedział że Twoje dane dostały się w niepowołane ręce.

Spora rzesza komercyjnych programów używa federalnego standardu szyfrowania danych DES, przyzwoitego szyfru konwencjonalnego zalecanego przez władze do użytku handlowego (zastanawiająca rzecz, że niezalecanego dla danych oznaczonych jako poufne - hmm). DES może pracować w kilku trybach, różniących się siłą. Władze nie zalecają używania najprostszego i najsłabszego trybu - elektronicznej książki kodowej (ECB). Zalecane jest natomiast używanie innych trybów - CFB (sprzężenia zwrotnego) i CBC (szyfrowania blokowego).

Tymczasem większość dostępnych w handlu programów, z jakimi miałem kontakt, używa właśnie trybu ECB. Rozmowa z autorami tych implementacji przyniosła ciekawe efekty: żaden z nich nie słyszał nawet o CBC czy CFB, ani o słabościach trybu ECB. Wynikający stąd wniosek, że nie mają oni elementarnej wiedzy o kryptografii, niestety nie nastraja optymistycznie. Częste jest także niedpowiedzialne i niebezpieczne zarządzanie kluczami. Programy te oferują także zamiennie szybsze algorytmy szyfrujące. Przekonanie ich autorów o bezpieczeństwie dorównującym standardowi DES jest również całkowicie błędne. Zwykle okazywały sie one prostymi wariacjami mojego szyfru z lat szkolnych. Prawdopodobnie nie były one nawet dokładnie analizowane, a mimo to ich autorzy z przekonaniem zapewniali mnie o ich bezpieczeństwie, mówiąc że spokojnie mogę im zaufać. Jestem pewien, że wierzą oni w błyskotliwość swoich algorytmów, ale skąd ja mam nabrać takiej pewności nie mając okazji ich przeanalizować?

Gwoli sprawiedliwości muszę przyznać, że w większości przypadków owe zastraszająco słabe szyfry nie znjdowały miejsca w programach firm specjalizujących się w kryptografii.

Niestety, nawet naprawdę dobre programy używające DES w silniejszych trybach nie są obecnie zbyt bezpieczne. Standardowa implementacja DES używa klucza 56-bitowego, który może być dziś łatwo złamany przez wyczerpujące przeszukiwania kluczy przy użyciu szybkich mikroprocesorów. DES osiągnął kres swojej użyteczności. Tak samo oprogramowanie na nim się opierające.

Amerykańska firma AccessData (87 East 600 South, Orem, utah 84058, tel. 1-800-658-5199) sprzedaje za 185 USD program łamiący szyfry zastosowane w aplikacjach WordPerfect, Lotus 1-2-3, MS Excel, Symphony, Qattro Pro, Paradox i MS Word 2.0. Program ten nie zgaduje haseł - dokonuje prawdziwej kryptoanalizy. Kupują go ludzie którzy zapomnieli haseł do swoich danych, kupują instytucje śledcze. Eryk Thompson, autor, powiedział mi że w rzeczywistości złamanie hasła zajmuje programowi ułamek sekundy. By nie wydawało się to klientowi zbyt proste, algorytm zawiera specjalne pętle opóźniające. Powiedział też, że z łatwością złamany może być szyfr programu PKZip i że rządowi klienci regularnie korzystają z tej usługi w innej firmie.

Kryptografię można pod tym względem porównać do farmacji. Jakość szyfru, tak jak jakość lekarstwa może być całkowicie zwodnicza. Zła penicylina wygląda dokładnie tak samo jak dobra. Kryptogram wyprodukowany przez słaby algorytm szyfrujący nie wygląda gorzej od wyprodukowanego przez silny algorytm. W przeciwieństwie do lekarza-szarlatana projektanci tych algorytmów rzadko zdają sobie sprawę z ich wad. Dobry programista może zaprojektować algorytm, który będzie działał bezbłędnie, ale co z tego jeśli ma on nikłe pojęcie o kryptografii? Poprawność działania nie implikuje poprawności kryptograficznej.

Przekonanie o odporności szyfru na kryptoanalizę może sugerować, że mamy do czynienia albo z niesłychanie utalentowanym geniuszem, albo naiwnym i niedoświadczonym kryptologiem. Czasem spotykam ludzi, chcących uzupełnić PGP o takie "niełamalne" szyfry własnego pomysłu.

Przypomina mi się rozmowa z Brianem Snowem, wysoko postawionym długoletnim kryptologiem z NSA. Powiedział mi on, że nigdy nie zaufałby algorytmowi wymyślonemu przez kogoś, kto nie spędził uprzednio wiele czasu łamiąc szyfry. Miało to głęboki sens. Zauważyłem, że praktycznie nikt, zajmujący sie kryptografią na potrzeby rynku, nie spełnia tego warunku. - Zgadza się, odpowiedział Snow z uśmiechem - bardzo ułatwia to nam pracę w NSA. Dość nieprzyjemna świadomość. Wówczas i ja nie spełniałem tego warunku.

Władze również mają na swoim koncie tworzenie takiego złudnego poczucia bezpieczeństwa. Po Drugiej Wojnie Światowej, Amerykanie sprzedawali niemieckie maszyny szyfrujące Enigma państwom Trzeciego Świata. Nie informowali jednak, że Alianci złamali Enigmę jeszcze w czasie wojny, a fakt ten był utrzymywany w tajemnicy przez długie lata. [w rzeczywistości Enigma została złamana jeszcze przed wojną; dokonała tego trójka polskich matematyków, pracowników Biura Szyfrów w Warszawie -PK]. Szyfr Enigmy jest stosowany po dziś dzień jako standard w systemach Unix, częściowo dlatego że władze ograniczyły legalne stosowanie lepszych algorytmów. W roku 1977 próbowano nawet zapobiec publikacji algorytmu RSA. Duże środki zostały podjęte dla uniemożliwienia publicznego wykorzystania bezpiecznej telefonii kodowanej.

Głównym zadaniem amerykańskiej NSA jest gromadzenie i analiza informacji wywiadowczych, zdobywanych głównie przez podsłuch prywatnych kanałów informacyjnych (James Bamford "The Puzzle Palace"). NSA jest doskonale przygotowana do łamania szyfrów, ale odcięcie społeczeństwa od dobrych algorytmów szyfrujących czyni ich zadanie niemalże trywialnym. NSA jest również instytucją odpowiedzialną za ocenę oraz dopuszczanie do użytku algortymów szyfrujących. Krytycy porównują taki układ do stawiania lisa na straży kurnika. Zaprojektowane przez NSA i dopuszczone do komercyjnego wykorzystania algorytmy są tajne i nikt nie może sprawdzić na własną rękę jaka jest ich rzeczywista wartość. [chodzi tu zapewne o szyfr FELIX -PK] Agencja chce, by społeczeństwo jej zaufało i używało tych szyfrów ze świadomością, że coś, co zostało przez specjalistów z NSA zaprojektowane może być przez nich również baz trudu złamane. Czyż nie jest to świadome stwarzanie złudnego poczucia bezpieczeństwa?

Na jakość amerykańskiego oprogramowania kryptograficznego miały wpływ trzy czynniki. Pierwszy z nich, to niemal powszechna nieznajomość problemu wśród twórców tego oprogramowania. Przeświadczenie tych ludzi o własnej wiedzy i talencie w tym zakresie doprowadziło do prawdziwego zalewu programów o naprawdę nikłej wartości. Drugi czynnik, to nieustanne blokowanie prób wypuszczenia na rynek dobrej jakości technologii bądź przez ograniczenia prawne bądź naciski ekonomiczne. Zaostrzenie przepisów dotyczących kontroli eksportu oprogramowania kryptograficznego zaowocowało ograniczeniem prac prowadzonych przez prywatne firmy, pozbawione w ten sposób chłonnych rynków zbytu. Ostatnim ze sposobów na blokowanie upowszechniania i rozwoju dobrych algorytmów szyfrujących jest przyznawanie patentów na wszystkie systemy kryptografii publicznej jednej tylko firmie. Wszystko to doprowadziło do tego, że przed PGP nie było w Ameryce naprawdę bezpiecznych danych.

Nie jestem już tak przekonany o "niełamliwości" zastosowanych w PGP rozwiązań, jak było to w przypadku mojego pamiętnego szyfru z czasów szkolnych. I byłby to zły znak, gdybym w takim przekonaniu się utrzymywał. Mam natomiast świadomość, że PGP nie zawiera żadnego w znaczący sposób ograniczającego bezpieczeństwo błędu, chociaż sam program oczywiście może mieć pewne usterki. Algorytm RSA został zaprojektowany przez wysokiej klasy specjalistów z najlepszych szkół kryptografii, i wielokrotnie był poddawany dogłębnej analizie przez innych ludzi. PGP jest rozprowadzane z kodem źródłowym by umożliwić każdemu samodzielną ocenę jakości programu. Oczywiście nie pracuję dla NSA. Korzystanie z PGP nie zmusza nikogo do dawania zaufania na kredyt.

Do użytkowników Macintosha

PGP zostało oryginalnie napisane z myślą o pracy pod MSDOSem i Unixem, istnieje jednak również jego wersja przeznaczona dla komputerów Apple Macintosh. Podręcznik ten tyczy głównie wersji dosowo/unixowej w której wszystkie parametry podawane są w linii poleceń. Na Macu PGP obsługiwane jest przez system rozwijanych menu i okien dialogowych, posiada ono również zawsze dostępną pomoc dotyczącą funkcji PGP. Niezależnie od tego pakiet MacPGP powienien posiadać dodatkową dokumentację uwzględniającą jego specyfikę.

Znacząca większość znakomitych programów dla Macintosha została napisana od zera z myślą o tym systemie. Nie jest tak niestety w przypadku PGP. Zostało ono przerobione z wersji unixowej i dostosowane do graficznego interfejsu użytkownika przez Zbigniewa Fiedorowicza, niemniej nadal może być oparczone pewną liczbą błędów. Trwają prace nad kolejną wersją PGP przeznaczoną tym razem wyłącznie dla Maca, opartą na najnowszej, obecnej wersji PGP. Pomimo pluskiew w dotychczasowym MacPGP, należy podkreślić, że gdyby Zbigniew od początku powstrzymywał się z implementacją PGP na Macintosha do czasu stworzenia nowej wersji, jego potencjalni użytkownicy mógliby być w dalszym ciągu pozbawieni tego programu.

Krótki przegląd poleceń PGP

 

Szyfrowanie, deszyfrowanie, podpisy:
Szyfrowanie tekstu kluczem publicznym adresata:


pgp -e plik_tekstowy nazwa_adresata

Składanie elektronicznego podpisu (sygnatury) przy pomocy Twojego klucza tajnego (tekst jest pakowany razem z sygnaturą):


pgp -s plik_tekstowy [-u nazwa_twojego_klucza]

Elektroniczny podpis pod plikiem tekstowym (tekst nie jest pakowany, sygnatura na końcu):


pgp -sta plik_tekstowy [-u nazwa_twojego_klucza]

Elektroniczny podpis, a następnie szyfrowanie dokumentu kluczem publicznym adresata:


pgp -es plik_tekstowy nazwa_adresata [-u nazwa_twojego_klucza]

Rozszyfrowanie lub sprawdzenie elektronicznego podpisu pliku:


pgp otrzymany_szyfrogram [-o plik_tekstowy]

Szyfrowanie pliku dla kilku odbiorców:


pgp -e plik_tekstowy odbiorca1 odbiorca2 .. odbiorca-n

Zarządzanie kluczami
Generowanie własnej pary kluczy - publicznego i prywatnego:


pgp -kg

Dodawanie nowych kluczy do bazy:


pgp -ka plik_z_nowymi_kluczami [zbiór_kluczy]

Wyciąganie (kopiowanie) dowolnego klucza z bazy:


pgp -kx nazwa_klucza plik_docelowy [baza_kluczy]

lub:


pgp -kxa nazwa_klucza plik_docelowy [baza_kluczy]

Przeglądanie bazy kluczy:


pgp -kv[v] [nazwa_klucza] [baza_kluczy]

Sprawdzanie "odcisku" klucza, np. w celu uzgodnienia go z właścicielem przez telefon:


pgp -kvc [nazwa] [baza_kluczy]

Przeglądanie bazy i sprawdzanie sygnatur uwierzytelniających klucze publiczne:


pgp -kc [nazwa] [baza_kluczy]

Zmiana/dodawanie identyfikatorów użytkownika lub hasła Twojego klucza tajnego:


pgp -ke nazwa_twojego_klucza [baza_kluczy]

Zmiana zaufania w stosunku do danego użytkownika:


pgp -ke nazwa_klucza [baza_kluczy]

Usuwanie klucza/identyfikatora z bazy kluczy publicznych:


pgp -kr nazwa_klucza [baza_kluczy]

Uwierzytelnianie czyjegoś klucza Twoim własnym (sygnowanie):


pgp -ks nazwa_klucza [-u nazwa_twojego_klucza] [baza_kluczy]

Usuwanie wskazanych sygnatur z kluczy:


pgp -krs nazwa_klucza [baza_kluczy]

Anulowanie Twojego klucza i wydanie certyfikatu odtajnienia klucza:


pgp -kd nazwa_twojego_klucza

Blokowanie/uaktywnianie kluczy:


pgp -kd nazwa_klucza

Różne:
Rozszyfrowanie tekstu bez naruszania sygnatury:


pgp -d szyfrogram

Tworzenie elektronicznego podpisu w postaci oddzielnego pliku:


pgp -sb plik_tekstowy [-u nazwa_twojego_klucza]

Oddzielanie sygnatury od już podpisanego pliku:


pgp -b szyfrogram

Opcje, które mogą wchodzić w skład innych poleceń:
Dodanie opcji -a powoduje wygenerowanie szyfrogramu zapakowanego w znaki ASCII, tak by można było go przesłac pocztą itp. (jak uuencode):


pgp -sea plik_tekstowy nazwa_adresata

lub:


pgp -kxa nazwa_klucza plik_docelowy [baza_kluczy]

Opcja -w (wipe) powoduje zamazanie i nadpisanie tekstu jawnego po sygnowaniu lub/i zaszyfrowaniu; spryciarzom uniemożliwia jego odtworzenie:


pgp -sew plik_tekstowy nazwa_adresata

Opcja -t (text) sugeruje, że przetwarzany plik jest tekstem, i powinien być przekonwertowany wg lokalnej specyfiki:


pgp -seat plik_tekstowy nazwa_adresata

Sama opcja -m (more) pozwala na obejrzenie rozszyfrowanego tekstu:


pgp -m szyfrogram

Opcja -m, użyta podczas szyfrowania, powoduje, że po rozszyfrowaniu plik nie będzie zapisany na dysk, tylko wyświetlony na ekranie ("For Your Eyes Only"):


pgp -steam plik_tekstowy nazwa_adresata

Opcja -p powoduje odzyskanie oryginalnej nazwy zaszyfrowanego pliku:


pgp -p szyfrogram

Opcja -f umożliwia korzystanie z stdin i stdout na modłę Unixową:


pgp -feast nazwa_adresata <plik_wej >plik_wyj

[wg nomenklatury MSDOS-owej PGP pracuje w tym trybie jako tzw. filtr - stąd "f" -JBW]

Kwestie prawne

Dokładne informacje na temat licencji PGP(tm), dystrybucji, praw autorskich, patentów, ograniczeń odpowiedzialności i eksportu znajdują się w rozdziale "Kwestie prawne" drugiej części podręcznika.

PGP wykorzystuje algorytm kryptografii publicznej chroniony przez amerykański patent nr 4,405,829. Posiadaczem patentu jest firma Public Key Partners (PKP) i naruszaniem jej praw może być używanie PGP w USA bez licencji. Jest to omówione szczegółowo w drugiej części podręcznika oraz w licencji RSAREF rozprowadzanej z darmową wersją PGP. PKP zezwoliła na wykorzystanie patentu m.in firmie ViaCrypt (Phoenix, Arizona, tel. 602-944-0773) sprzedającej w pełni licencjonowaną wersję PGP.

PGP jest programem typu freeware i nie mam nic przeciwko jego szerokiemu rozpowszechnianiu, byle bym tylko nie otrzymywał niezliczonych próśb o przysłanie kopii. Zamiast tego szukaj najnowszych wersji w licznych BBSach i archiwach FTP w Internecie. Przed dalszym rozpowszechnianiem PGP powinieneś jednak zapoznać się z ograniczeniami eksportowymi nakładanymi przez amerykańskie prawo i zrozumieć je.

Podziękowania

Liczne środki przedsięwzięto dla uniemożliwienia wykorzystania PGP. Jednak równie wiele osób poświęcało swój czas dla ich obejścia, dzięki czemu PGP uzyskało poniekąd status programu "podziemnego", a wypracowanie jego całkowitej legalności wymagało wiele cierpliwości i uporu. Chciałbym tu szczególnie podziękować Halowi Abelsonowi, Jeffowi Schillerowi, Brainaowi LaMachhia i Derekowi Atkinsowi z MIT za ich zdeterminowane działanie. Podziękowania należą się również Jimowi Bruce i Davidowi Litsterowi z administracji MIT oraz Bobowi Prior i Terry'emu Ehlingowiz z wydziału prasowego MIT. Dziękuję też całej grupie osób zajmujących się moją obroną w nie kończących sie jeszcze problemach prawnych. Od jakiegoś czasu przestałem nawet opowiadać dowcipy o prawnikach, mogąc poznać tak wiele pozytywnych przykładów ich pracy, zwłaszcza że wielu z nich poświęcało swój czas pro bono.

Doskonalenie PGP zmieniło się szybko w zdumiewające zjawisko społeczne, którego podłoże polityczne zainspirowało zbiorowy wysiłek wciąż rosnącej rzeszy programistów-ochotników.

Chciałbym też podziękować następującym osobom za wysiłek włożony w prace nad PGP. Pomimo że byłem autorem pierwszej jego wersji, wiekszość późniejszych rozszerzeń i udoskonaleń jest efektem zbiorowej pracy wielu ludzi, jedynie nadzorowanej przeze mnie jako kierownika projektu.

Branko Lancaster, Hal Finney i Peter Gutmann poświęcili wiele czasu i wysiłku włożonego w stworzenie PGP 2.0 i jego unixowych implementacji.

Hugh Kennedy przeniósł PGP na system VAX/VMS, Lutz Frank na Atari ST, a Cos Bosman i Colin Plumb na Commodore Amiga.

Przekładu PGP na inne języki dokonali: Jan-Loup Gailly (Francja), Armando Ramos (Hiszpania), Felipe Rodriguez Svensson i Branko Lancaster (Holandia), MiguelcAngel Gallardo (Hiszpania), High Kennedy i Lutz Frank (Niemcy), David Vinzetti (Włochy), Harry Bush i Marin Gabalis (Łotwa), Zygimantas Cepaitis (Litwa), Piotr Suszkow i Andriej Czernow (Rosja) oraz Alexander Smischlajev na Esperanto. Peter Gutmann zaoferował również przetłumaczenie na nowozelandzki angielski, ale w końcu postanowiliśmy pozostać przy amerykańskim.

Jean-Loup Gailly, Mark Adler i Richard B. Wales opublikowali kod kompresji ZIP oraz udzielili pozwolenia na jego wykorzystanie w PGP. Algorytm MD5 został opracowany i udostępniony jako jako własność publiczna przez Rona Rivesta. Szyfr IDEA(tm) został opracowny przez Xuejia Lai i Jamesa L. Massey'a w ETH w Zurychu, a pozwolenia na wykorzystanie w PGP udzielił Ascom-TEch AG.

Charlie Merritt udzielił mi rad co do przystosowania arytmetyki zmiennoprzecinkowej do potrzeb krytpografii publicznej, a Jimmy Upton dostarczył szybszych algorytmów mnożenia i mnożenia modulo. Thad Smith zaimplementował jeszcze szybszy algorytm mnożenia modulo. Zhahai Stewart podzielił się kilkoma przydatnymi uwagami na temat formatu PGP itp., na przykład więcej niż jednego identyfikatora użytkownika. Pomysł zaufanych sygnatorów kluczy podsunął mi Whit Diffie. Kelly Goen wykonał większość pracy w zakresie publikacji PGP 1.0.

Dużą pomoc w przy pisaniu PGP okazali również Colin Plumb, Derek Atkins i Castor Fu. Wysiłków nie szczędzili również Hugh Miller, Eric Hughes, Tim May Stephen Neuhaus i zbyt wielu innych, bym mógł ich sobie w tym miejscu przypomnieć. Pierwsza wersja MacPGP jest dziełem Zbigniewa Fiedorowicza.

Po wypuszczeniu PGP 2.0 wielu programistów przysłało uwagi o pluskwach i pomogło w przeniesieniu go na inne komputery. Jest ich zbyt wielu by dziękować tutaj każdemu z nich.

O autorze

Philip Zimmermann jest konsultantem oprogramowania z 19-letnim stażem w zakresie przetwarzania w czasie rzeczywistym, kryptografii, autoryzacji i przesyłania danych. Ma na swoim koncie projekty i implementacje systemów uwierzytalniających w sieciach wymiany danych finansowych, bezpieczeństwa w sieciach, protokołów zarządzania kluczami, aplikacji wielozadaniowych pracujących w czasie rzeczywistym, systemów operacyjnych i sieci lokalnych.

Dopasowane do konkretnych wymagań systemy kryptograficzne i uwierzytelniające, jak NIST DSS, dostępne są u Zimmermana oraz zespołów zajmujących się ich rozwojem. Adres firmy konsultingowej Zimmermanna:

Boulder Software Engineering
3021 Eleventh Street
Boulder, Colorado 80304 USA
Phone: 303-541-0140 (10:00am - 7:00pm Mountain Time)
Fax: po porozumieniu telefonicznym
Internet: prz@acm.org