Następny: Jak PGP sprawdza Powyżej: Zarządzanie kluczami Poprzedni: Przeglądanie zawartości bazy

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ć.


Krzysztof Marek Matyskiel, Grzegorz Wójcik