PGP Jednym z wielu waûnych zadaï, jakie otrzymaîy komputery po ich wynalezieniu, staîo sië szyfrowanie tekstów. Jest to praca wrëcz stworzona dla tych póîgîówków, jako ûe wymaga szybkoôci, cierpliwoôci i precyzji, a takûe, co moûe sië okazaê najwaûniejsze, dyskrecji. Kamil Iskra Chyba najlepszym z popularnych programów kodujâcych jest PGP autorstwa Philipa R. Zimmermanna z USA. Program ten istnieje na wszystkich waûniejszych platformach sprzëtowych, ja mam wersjë 2.6.2i, którâ przeniósî na Amigë Peter Simons. Znalazîem jâ w Aminecie, w katalogu "util/crypt", archiwum zajmuje 381 KB. W Internecie moûna teû znaleúê archiwa zawierajâce kod úródîowy tego programu. W archiwum znajdujemy sam program PGP w dwóch wersjach, dla procesorów MC68000 i MC68020, oraz dokumentacjë. Dokumentacja programu jest doôê rozbudowana. Jej trzon stanowiâ dwa pliki tekstowe. Jeden dla poczâtkujâcych (omawiajâcy najwaûniejsze cechy programu), drugi dla zaawansowanych (opisujâcy co bardziej wymyôlne jego opcje). Dokumentacja byîa pisana raczej z myôlâ o pecetach i maszynach unixowych, ale wszystkie komputery majâ ze sobâ coô wspólnego... Oprócz tego w skîad dokumentacji wchodzâ pewne informacje dla programistów, a takûe dla pasjonatów prawa, o czym za chwilë. Dziaîanie programu opiera sië na zasadzie kluczy publicznych. Co to takiego? Kaûdy uûytkownik PGP ma parë kluczy: sekretny i publiczny. Klucz publiczny naleûy udostëpniê reszcie ôwiata, natomiast klucz sekretny trzymaê w ukryciu i pilnowaê, ûeby nikt sië do niego nie dobraî. Klucz publiczny zawiera informacje niezbëdne do zaszyfrowania dokumentu, a sekretny -- do rozszyfrowania. Gdy ktoô chce przekazaê nam wiadomoôê, szyfruje jâ za pomocâ naszego klucza publicznego, po czym przesyîa nam. List moûe sië dostaê w niepowoîane rëce, ale to nic nie da, jako ûe tylko my mamy klucz sekretny, niezbëdny do rozkodowania wiadomoôci. PGP instaluje sië kopiujâc zawartoôê katalogów "bin" i "doc" z archiwum do jakiegoô nowego katalogu, najlepiej oczywiôcie na twardym dysku, o ile sië go posiada. Nastëpnie naleûy utworzyê zmiennâ ôrodowiskowâ o nazwie PGPPATH, w której zapisuje sië peînâ ôcieûkë dostëpu do tego katalogu. Najproôciej to zrobiê, nagrywajâc plik ASCII, zawierajâcy ôcieûkë dostëpu w katalogu ENVARC: pod nazwâ PGPPATH (ôciôlej: tak muszâ zrobiê posiadacze OS 2.04. W OS 1.3 nie ma ENVARC:). Sam plik wykonalny PGP warto przenieôê do katalogu "C:", tak aby system zawsze go odnalazî, bez wzglëdu na to, jaki katalog byîby w danym momencie bieûâcym. Pierwszâ rzeczâ, którâ naleûy zrobiê po instalacji programu, jest utworzenie powyûszych kluczy. Robimy to za pomocâ komendy: pgp -kg Tworzenie klucza jest doôê skomplikowane, program jednak prowadzi nas "za râczkë". Musimy wykonaê nastëpujâce czynnoôci: -- Ustaliê rozmiar klucza -- 512, 768 lub 1024 bity -- im wiëkszy, tym bezpieczniejszy, ale za to szyfrowanie i deszyfrowanie wolniejsze. -- Podaê nasz identyfikator -- najlepiej imië, nazwisko i ew. adres sieciowy. -- Podaê hasîo odbezpieczajâce nasz klucz sekretny. Uûycie tego klucza bëdzie moûliwe TYLKO po poprawnym podaniu hasîa, tak wiëc zabezpiecza nas to w pewnym stopniu przed jego kradzieûâ itp. Rzecz jasna, wpisywane hasîo nie ukazuje sië na ekranie. Moûna je póúniej zmieniê. -- Wklepaê pewnâ liczbë znaków. Jest to doôê zabawne, ale i sprytne. Program mierzy odstëpy czasowe pomiëdzy poszczególnymi wciôniëciami przycisków na klawiaturze, na ich podstawie generuje potem klucz -- taki sposób gwarantuje peînâ losowoôê uzyskanego wyniku, nieosiâgalnâ algorytmicznie (i jak tu nie powiedzieê, ûe komputery sâ gîupie?). Nie napisaîem wczeôniej, ûe PGP nie ma graficznego interfejsu uûytkownika. Jest to oczywiôcie pewna wada, ale dziëki temu program jest niemal taki sam na wszystkich platformach, a i przenoszenie programu pomiëdzy róûnymi platformami nie sprawia wiëkszych kîopotów. Kolejnâ rzeczâ, którâ naleûy zrobiê, jest skonfigurowanie programu. Robimy to edytujâc plik "config.txt", znajdujâcy sië w katalogu, w którym zainstalowaliômy pakiet PGP. Przede wszystkim warto zmieniê linië "MyName", wpisujâc po znaku równoôci nasz identyfikator. O ile zamierzamy przesyîaê zakodowane listy z uûyciem poczty elektronicznej, to warto teû usunâê znak komentarza (#) sprzed linii "Armor=on". Spowoduje to, ûe zakodowany plik nie bëdzie miaî ûadnych znaków "binarnych", które nie mogâ byê przekazywane e-mailem. Jesteômy wiëc gotowi do zakodowania pierwszego listu. Robi sië to za pomocâ komendy: pgp -e nazwa_pliku Program prosi o podanie, dla kogo jest przeznaczona wiadomoôê. Wystarczy zwykle podaê pierwsze sîowo identyfikatora -- do zaszyfrowania zostanie uûyty klucz publiczny tej osoby (skâd go wziâê, o tym za chwilë). Po chwili program zakoïczy pracë, jej rezultatem bëdzie zakodowany plik, o nazwie takiej samej, jak nazwa pliku úródîowego, z koïcówkâ ".asc" bâdú ".pgp" (w zaleûnoôci od tego, jak skonfigurowano program). Otrzymany plik jest zazwyczaj krótszy od oryginaîu. Ten "fenomen" uzyskuje sië w bardzo prosty sposób: plik jest przed zaszyfrowaniem kompresowany. Utrudnia to dodatkowo ewentualnâ próbë zîamania szyfru, jako ûe odpada jedna z klasycznych metod, polegajâcych na zakîadaniu procentowej "zawartoôci" poszczególnych znaków w tekôcie, np. w jëzyku angielskim najpopularniejszâ literâ jest ponoê "e" -- po kompresji ulega to, oczywiôcie, zmianom. W celu rozszyfrowania wiadomoôci wystarczy napisaê: pgp nazwa_pliku Naleûy oczywiôcie mieê wîaôciwy klucz sekretny -- informacja o tym, dla kogo jest przeznaczona wiadomoôê, jest zapisana w pliku. Jeûeli ktoô "grzebaî" w zakodowanym pliku, tzn. zmieniî coô w jego zawartoôci, to PGP wykryje to i poinformuje nas o tym. PGP umoûliwia równieû "podpisanie" wiadomoôci. Bywa to przydatne do zaôwiadczenia, ûe to my, a nie ktoô inny, wysîaî jakiô list. Robimy to za pomocâ komendy: pgp -s nazwa_pliku Powoduje ona, ûe wiadomoôê jest szyfrowana z uûyciem naszego klucza sekretnego. Kaûdy posiadacz naszego klucza publicznego moûe jâ rozkodowaê, a podczas rozkodowywania ukaûe sië komunikat o tym, kto zakodowaî tekst. Tak otrzymany "podpisany" plik jest jednak zakodowany. Chcâc go przeczytaê, trzeba go rozkodowaê. Raz, ûe na wolnych komputerach chwilë to trwa, dwa, ûe nie zawsze zaleûy nam na sprawdzeniu sygnatury (podpisu). Moûemy wiëc podczas "podpisywania" uûyê opcji "-t" (lub napisaê "TextMode=on" w pliku konfiguracyjnym), co spowoduje, ûe sam tekst nie zostanie zakodowany; w pierwszej linijce pliku wynikowego bëdzie sië znajdowaî tekst: -----BEGIN PGP SIGNED MESSAGE----- W ostatnich zaô kilku linijkach -- sygnatura. Jest ona zaleûna od zawartoôci tekstu, jeûeli wiëc ktoô dokona w tekôcie jakichô zmian, a my sprawdzimy sygnaturë (wpisujâc "pgp nazwa_pliku"), to program wykryje to i poinformuje: WARNING: Bad signature, doesn't match file contents! Istnieje moûliwoôê poîâczenia podpisywania z szyfrowaniem -- wystarczy podaê komendë: pgp -es nazwa_pliku Powoduje ona podpisanie wiadomoôci naszym kluczem sekretnym, a nastëpnie jej zakodowanie z uûyciem klucza publicznego odbiorcy. Pisaîem o uûywaniu cudzych kluczy publicznych. Jak je zainstalowaê? Robi sië to za pomocâ komendy: pgp -ka nazwa_pliku_z_kluczem Dodawanie nowego klucza jest doôê zîoûone, ale równieû i w tym momencie program prowadzi nas "za râczkë": -- Zwykle program stwierdza, ûe nowy klucz nie jest "pewny". Otóû klucze mogâ mieê tzw. certyfikaty od innych uûytkowników. Oznacza to potwierdzenie uûytkowników, ûe klucz jest oryginalny i rzeczywiôcie naleûy do danego osobnika. Jeûeli mamy klucze publiczne tych "potwierdzajâcych" uûytkowników i ustaliliômy, ûe ufamy im (o tym za chwilë), to program bez ûadnych wâtpliwoôci instaluje klucz. Jeûeli tak nie jest, to program pyta nas o zdanie, umoûliwiajâc potwierdzenie autentycznoôci klucza przez nas samych (moûna to zrobiê bez obaw, jeûeli klucz otrzymaliômy bezpoôrednio od jego wîaôciciela lub z innego pewnego úródîa). -- Program pyta, w jakim stopniu ufamy wîaôcicielowi wîaônie instalowanego klucza publicznego. Jest to uûywane do potwierdzania autentycznoôci cudzych kluczy publicznych, posiadajâcych certyfikat tego uûytkownika. Jeûeli ustalimy, ûe ufamy mu caîkowicie, to wystarczy tylko certyfikat tego jednego uûytkownika pod cudzym kluczem publicznym, aby PGP zaakceptowaî go bez zastrzeûeï; jeûeli ustalimy, ûe ufamy mu "zwykle", to program bëdzie wymagaî dwóch certyfikatów od takich uûytkowników, aby uznaê klucz za autentyczny (te wartoôci moûna zmieniê w pliku konfiguracyjnym). Moûemy teû ustaliê, ûe danemu uûytkownikowi nie ufamy wcale, albo ûe nie wiemy, czy moûemy mu ufaê. Klucz zostaje dodany do pliku "pubring.pgp". Z pliku tego moûna równieû skopiowaê klucze "na zewnâtrz", w szczególnoôci nasz klucz publiczny, aby móc go przekazaê innym: pgp -kx Program pyta o to, czyj klucz ma "wyeksportowaê" oraz o nazwë pliku docelowego. Nasz klucz publiczny najlepiej umieôciê w jakimô "îatwo dostëpnym" miejscu. Istniejâ np. w Internecie tzw. key-servery, które zajmujâ sië wîaônie przechowywaniem i udostëpnianiem kluczy publicznych. Innym rozwiâzaniem, przeze mnie stosowanym, jest udostëpnienie klucza za pomocâ "fingera". Wiem, ûe wiëkszoôê z Was nie zna Unixa, wiëc parë sîów wyjaônienia: "finger" to komenda Unixa, udzielajâca informacji o podanym w parametrze uûytkowniku (przykîadowe wywoîanie: "finger iskra@student.uci.agh.edu.pl"). Udzielane informacje to zwykle imië i nazwisko uûytkownika, data ostatniego zalogowania i liczba nie przeczytanych listów; moûna teû stworzyê plik, który zostanie wyôwietlony na ekranie "nagabywacza" (tzw. plan) -- w tym wîaônie pliku umieôciîem mój klucz publiczny. Pojawia sië pytanie, jak bezpieczny jest PGP? Informacja, ûe zostaî on napisany przez zawodowego kryptografa to juû coô, ale... przecieû autor udostëpniî kod úródîowy, wiëc wystarczy go przeanalizowaê, aby zrozumieê zasadë dziaîania programu i wymyôliê sposób na jego zîamanie, nie? Otóû NIE. PORZÂDNE algorytmy kodujâce nie bojâ sië jawnoôci. PGP opiera sië na algorytmie RSA, który jest, zgodnie z naszâ dzisiejszâ wiedzâ, praktycznie niemoûliwy do zîamania. Nie wdajâc sië w algorytmiczne zawiîoôci (sam nie znam ich zbyt dokîadnie) wystarczy powiedzieê, ûe w kluczu sekretnym sâ przechowywane dwie bardzo duûe liczby pierwsze (majâce nawet kilkaset cyfr), a w kluczu publicznym ich iloczyn. Wspóîczesna algorytmika nie zna efektywnych metod znajdowania podzielników danej liczby -- czas wykonywania znanych algorytmów roônie wykîadniczo wraz z iloôciâ cyfr sprawdzanej liczby. Z drugiej strony, nie udaîo sië matematycznie udowodniê, ûe szybszy algorytm nie moûe istnieê. Nie moûna wiëc wykluczyê, ûe taki algorytm jednak kiedyô powstanie, a wtedy kaûdy klucz publiczny moûna bëdzie zîamaê w ciâgu uîamka sekundy... Póki co, moûna jednak spaê spokojnie. Nie tak dawno obiegîa wprawdzie Internet wiadomoôê o "zîamaniu RSA", okazaîa sië ona jednak nie do koïca prawdziwa. Owszem, udaîo sië zîamaê POJEDYNCZY klucz publiczny (nie wiem, niestety, ile miaî bitów), wymagaîo to jednak zaangaûowania tysiëcy szybkich komputerów na caîym ôwiecie na czasu kilku miesiëcy. To mógîby juû byê wîaôciwie koniec tego artykuîu, gdyby nie jeszcze jedna interesujâca sprawa zwiâzana z PGP. Nie jest to jednak sprawa natury komputerowej, ale raczej prawnej. Pierwszym problemem jest to, ûe autor PGP uûyî algorytmów kodujâcych RSA bez zgody ich autorów, tîumaczâc sië póúniej, ûe wprowadziî do nich pewne udoskonalenia, wiëc wîaôciwie nie uûyî "oryginaîów". Ta sprawa zostaîa jednak rozwiâzana polubownie -- wersje PGP od 2.6 w górë uûywajâ w peîni legalnych, opatentowanych w USA procedur RSA, tzw. RSAREF. Okazaîo sië jednak, ûe sâ one wolniejsze od napisanych przez Zimmermanna, dlatego teû poza USA uûywa sië tych drugich -- patent RSA obejmuje tylko USA. Nie ma to wiëkszego znaczenia dla uûytkownika, bo oba algorytmy sâ ze sobâ zgodne. To "i" w wersji PGP (2.6.2i) oznacza wîaônie "International" -- wersjë nie uûywajâcâ RSAREF. Duûo gorzej przedstawia sië sprawa "eksportu zaawansowanych technologii szyfrujâcych poza granice USA". Otóû w USA, skâd pochodzi autor PGP, obowiâzuje prawo, wedîug którego nie wolno bez zgody jakichô tam wysokich organów wywoziê za granicë zaawansowanych technologii szyfrujâcych. Tymczasem PGP rozprzestrzeniî sië na caîy ôwiat. Autor broni sië tu twierdzâc, ûe on nikomu za granicë programu nie przesîaî -- ûe program "przeciekî" przez granicë dziëki Internetowi. Dyskusyjne wydaje sië w ogóle to, czy powyûszy przepis powinien sië stosowaê do PGP. Jak rozumiem, ustawa ta powstaîa z myôlâ o jakichô tajnych szyfrach uûywanych przez armië. PGP jest zaô jak najbardziej jawny, kaûdy moûe go uûywaê, modyfikowaê itp. Urzëdnicy wydajâ sië byê jednak nieugiëci i przeciw Philipowi Zimmermannowi toczy sië ôledztwo. Zawdziëcza on to chyba w duûej mierze swojej arogancji. Otóû NSA, czyli Narodowa Agencja Bezpieczeïstwa, "zaleca" producentom sprzëtu i oprogramowania szyfrujâcego "uzgadnianie" z niâ nowych rozwiâzaï, które chcieliby oni wprowadziê na rynek. Ta sama NSA zajmuje sië PODSÎUCHIWANIEM obywateli -- jest wiëc oczywiste, ûe zatwierdza ona tylko w miarë proste algorytmy, doôê îatwe do zîamania, aby nie mieê póúniej zbyt wiele roboty przy podsîuchiwaniu jakichô szefów mafii. Doszîo nawet do tego, ûe ukîad scalony stosowany w "bezpiecznych" telefonach i faksach do kodowania, o nazwie "Clipper", ma specjalne, przewidziane konstrukcyjnie, "wejôcie", uîatwiajâce NSA montowanie podsîuchu! Philip Zimmermann powiedziaî zaô: "NIE! Ja mam konstytucyjnie zagwarantowane prawo do prywatnoôci mojej korespondencji i mam zamiar je sobie zapewniê"! Odnoszë wraûenie, ûe rzâd USA chce odstraszyê innych od pójôcia w ôlady Zimmermanna i dlatego pod pierwszym lepszym pretekstem chce wytoczyê mu proces. "Dziëki" caîej tej aferze PGP przestaî byê îatwo dostëpny: nowe wersje, rozwijane przez ludzi z MIT (Massachusetts Institute of Technology), sâ dostëpne tylko dla mieszkaïców USA (po prostu po poîâczeniu sië z ich serwerem sprawdza on, skâd pochodzi "dzwoniâcy"). PGP, a wraz z nim niemal caîy katalog "util/crypt", zniknâî równieû ze wszystkich serwerów Aminetu, znajdujâcych sië na terenie USA, pozostaî jednak na innych serwerach, np. w niemieckim "ftp.uni-paderborn.de". Zabezpieczenie nie jest szczelne i nowe wersje PGP przeciekajâ przez granicë, tak staîo sië choêby z opisanâ przeze mnie 2.6.2. Nie moûna jednak powiedzieê, ûe jej uûywanie jest nielegalne. Nielegalne byîo tylko jej przemycenie. Przepisy prawne USA nie obowiâzujâ poza granicami tego païstwa, wiëc uûywanie przemyconej wersji, choêby w Polsce, jest w peîni legalne. A Philip Zimmermann oczekuje w tym momencie na proces, organizujâc grupë doôwiadczonych adwokatów. Wymaga to jednak ogromnych pieniëdzy, rzesze uûytkowników jego programu starajâ sië wiëc pomóc mu w ich zgromadzeniu -- jeûeli moûemy, pomóûmy i my. Ze swej strony mogë obiecaê, ûe caîoôê honorarium uzyskanego za ten artykuî postaram sië przekazaê na ten cel.