Niedawno obchodziliśmy 30-tą rocznicę powstania sieci Arpanet, zalążka współczesnego Internetu. W ciągu tych lat sieć ta przeszła stopniową, lecz gruntowną przemianę: od fazy eksperymentalnej, poprzez narzędzie służace stosunkowo wąskiemu gronu złożonemu głównie z naukowców, do publicznego i masowego medium przekazu informacji. W ostatnich latach coraz większe znaczenie w Internecie odgrywa biznes; jak grzyby po deszczu powstają "internetowe sklepy", upowszechniają się transakcje zawierane przez sieć, prawie każda licząca się firma posiada łącze sieciowe i swoją stronę WWW. Szybka komunikacja, powszechność dostępu do informacji i łatwość wyszukiwania potrzebnych danych - to dobrodziejstwa płynące z upowszechnienia Internetu. Istnieje jednak także i druga strona medalu, przez jednych wstydliwie przemilczana, przez innych - zwłaszcza żądnych sensacji dziennikarzy - wyolbrzymiana. Chodzi tu o zagrożenia stwarzane przez sieciowych przestępców, potocznie zwanych "crackerami" lub (błędnie) "hackerami".
Jakiego rodzaju niebezpieczeństwa grożą z ich strony? Można je podzielić na 3 główne klasy:
W tym tekście zajmiemy się dwoma ostatnimi przypadkami, a konkretnie metodami zabezpieczania się za pomocą narzędzi kryptograficznych przed kradzieżą i fałszerstwem szeroko rozumianych danych.
Dane przesyłane poprzez sieć narażone są na przechwycenie bądź modyfikację w wielu punktach: po pierwsze, przez operatorów samej sieci. Internet nie jest jednolitym tworem, lecz federacją tysięcy mniejszych i większych sieci: firmowych, uczelnianych, miejskich, regionalnych, krajowych i międzynarodowych. Np. list wysłany pocztą elektroniczną przez pana X z krakowskiej Akademii Górniczo-Hutniczej, nim dotrze do pani Y w firmie Cisco w USA, musi przejść przez sieci należące do kilku różnych instytucji: najpierw przez sieć AGH, następnie Krakowską Sieć Metropolitalną, Naukowo-Akademicką Sieć Komputerową, międzynarodową sieć Sprint, amerykańską sieć Digex, wreszcie firmową sieć w Cisco. Czasami droga ta bywa nawet bardziej skomplikowana, a liczba osób mających dostęp do łącz i urządzeń sieciowych po drodze może być rzędu setek, przy czym każda z tych osób ma możliwość techniczną przechwycenia ("podglądnięcia") przesyłanej informacji. Po drugie, do łącz sieciowych (podobnie jak i do innych łącz telekomunikacyjnych) mogą zyskać dostęp osoby nieupoważnione. Po trzecie wreszcie, w sieci lokalnej opartej np. o technologię Ethernet często trywialnie łatwe jest przechwytywanie ruchu przeznaczonego dla innych komputerów w tej samej sieci (tzw. sniffing) - tak więc list pana X mógłby przeczytać pan Z, siedzący obok pana X w tym samym laboratorium studenckim, lub pan W, kolega z pracy pani Y.
Jest oczywiste, że zaszyfrowanie danych do postaci niezrozumiałej dla osób niepowołanych zabezpiecza te dane przed kradzieżą. W pewnym stopniu, zabezpiecza je również przed sfałszowaniem: fałszerz wprowadzający modyfikacje do danych zaszyfrowanych nie wie, jaki będzie rezultat modyfikacji - po rozszyfrowaniu zazwyczaj otrzymane zostaną dane nonsensowne; tym samym nie jest w stanie sfałszować ich zgodnie ze swoim zamierzeniem. Nieco bardziej zaawansowane narzędzia kryptograficzne umożliwiają także wykrycie faktu, że dane były poddane modyfikacji.
Jednym z podstawowych problemów dla stosowania szyfrowania w sieci Internet (i ogólnie w przesyłaniu - w przeciwieństwie do przechowywania - zaszyfrowanych danych) jest wymiana kluczy szyfrowych. W tradycyjnych metodach szyfrowania - tzw. szyfrach symetrycznych - nadawca i odbiorca zaszyfrowanej informacji musieli dysponować tym samym kluczem, aby rezultat odszyfrowania pokrył się z informacją, która została zaszyfrowana. Tym samym, klucz szyfrowania musiał być uprzednio ustalony, np. przesłany jednej stronie przez drugą z użyciem tzw. kanału bezpiecznego (tzn. w sposób zapewniający poufność). W Internecie rozwiązanie takie jest mało praktyczne, gdyż dla stron komunikujących się przez sieć często jest ona jedynym dostępnym kanałem wymiany informacji i tym samym bezpieczna (poufna) wymiana klucza jest niemożliwa. W naszym przykładzie: jeżeli pan X prześle pani Y klucz e-mailem, to klucz może zostać przechwycony tak jak i inne listy; pozostaje więc przesłanie go np. zwykłą pocztą lub faxem. Oczywiście, można w ten sposób ustalić klucze z osobami, z którymi systematycznie korespondujemy. Dla okazjonalnej wymiany pojedynczych wiadomości taka metoda byłaby jednak bezsensowna (skoro już wysyłam fax, dlaczego nie zawrzeć w nim od razu całej informacji raczej niż samego klucza?).
Z pomocą przychodzi matematyka. To dzięki niej możliwe było stworzenie nowej dziedziny kryptografii, mianowicie szyfrów niesymetrycznych i metody kluczy publicznych. Na czym polega różnica między kryptosystemem (tzn. systemem szyfrująco-deszyfrującym) "tradycyjnym", a metodą klucza publicznego? W największym uproszczeniu: szyfr "tradycyjny" wymagał użycia tego samego klucza do szyfrowania i odszyfrowywania. Przykładem powszechnie używanego szyfru symetrycznego jest DES (Digital Encryption Standard) od około 20 lat stosowany przez agendy rządu USA, a także w zastosowaniach komercyjnych. W metodzie klucza publicznego, pojedynczy klucz zastąpiony jest parą kluczy: jeden z nich służy do zaszyfrowania listu, drugi do odszyfrowania. Znajomość samego klucza szyfrowania nie wystarczy do odszyfrowania listu, ani do odtworzenia klucza deszyfrowania (stąd "niesymetryczny").Efekt ten osiągnięty jest przez odpowiednią konstrukcję algorytmu szyfrowania/deszyfrowania. Klucz deszyfrowania bazuje na parze dużych liczb pierwszych, klucz szyfrowania zaś - na ich iloczynie. Znajomość iloczynu 2 liczb pierwszych nie wystarczy do znalezienia czynników - a raczej, wystarczy, lecz dla odpowiednio dużych liczb (rzędu 10 do potęgi 100) operacja taka zajmuje bardzo wiele czasu, nawet na najszybszych dostępnych komputerach. Tym samym "złamanie" szyfru jest możliwe, ale w czasie stawiającym pod znakiem celowość przedsięwzięcia. Na przykład dla klucza 512-bitowego, czyli odpowiadającego liczbie rzędu 10 do potęgi 150, aktualnie znane metody szukania czynników pierwszych pozwolą odnaleźć klucz deszyfrowania dopiero po wielu setkach lat z użyciem superkomputerów, a nic nie stoi na przeszkodzie, aby użyć klucza znacznie dłuższego. Co za tym idzie, tylko klucz deszyfrowania musi pozostać sekretem swego właściciela (i dlatego nazywany jest "kluczem prywatnym"). Klucz szyfrowania może być udostępniony ogółowi - stąd termin "klucz publiczny". Dowolna osoba, chcąca wysłać tajną wiadomość do właściciela tego klucza, używa klucza publicznego w celu zaszyfrowania informacji. Informację tę odszyfrować może tylko osoba będąca w posiadaniu klucza prywatnego związanego z tym kluczem publicznym.Najpopularniejszy obecnie algorytm szyfrowania kluczem publicznym nosi nazwę RSA (Rivest-Shamir-Adleman) - jak łatwo zgadnąć, otrzymał ją od nazwisk jego twórców. Algorytm ten jest w USA opatentowany, a ponadto podlega restrykcjom eksportowym ITAR (podobnie jak wszelkie algorytmy i programy mające związek z kryptografią) i nie może być używany w programach wywożonych z USA. Istnieje jednak wiele programów opracowanych poza USA (i tym samym nie podlegających amerykańskim przepisom) wykorzystujących algorytm RSA. Istnieją też inne algorytmy oparte o tę samą ideę klucza publicznego, np. Diffie-Hellman i DSS (Digital Signature Standard). Szczególnie popularnymi programami wykorzystującymi RSA są PGP i SSH.
PGP (Pretty Good Privacy - Całkiem Niezła Prywatność) jest kryptosystemem autorstwa Phila Zimmermanna <prz@acm.org> wykorzystującym ideę klucza publicznego do szyfrowania plików. Podstawowym zastosowaniem PGP jest szyfrowanie poczty elektronicznej, przesyłanej przez kanały nie dające gwarancji poufności ani integralności poczty. Przez poufność rozumiemy tu niemożność podglądania zawartości listów przez osoby trzecie; przez integralność - niemożność wprowadzania przez takie osoby modyfikacji do treści listu. Oczywiście PGP można używać również do szyfrowania np. danych przechowywanych na nośniku takim jak dysk czy dyskietka, na wypadek gdyby dostały się one w niepowołane ręce. PGP pozwala nie tylko szyfrować listy, aby uniemożliwić ich podglądanie, ale także podpisywać (sygnować) listy zaszyfrowane lub niezaszyfrowane w sposób umożliwiający adresatowi stwierdzenie, czy list pochodzi rzeczywiście od nadawcy, oraz czy jego treść nie była po podpisaniu modyfikowana przez osoby trzecie. Technika ta pozwala na stosowanie PGP np. do podpisywania dokumentów, jednakże na razie prawodawstwo większości państw nie traktuje podpisu "elektronicznego" na równi z podpisem "odręcznym", pomimo że prawdopodobieństwo skutecznego sfałszowania takiego podpisu jest porównywalne, a nawet niższe od prawdopodobieństwa pomyłki grafologa identyfikującego podpis "odręczny". W tym miejscu należy podkreślić, że żaden kryptosystem nie jest silniejszy od swego najsłabszego ogniwa, którym z reguły okazuje się użytkownik. Jeżeli użytkownik nie dba we właściwy sposób o tajność swego klucza prywatnego, nawet PGP nie zapewni mu należytej prywatności. Najbardziej wskazanym sposobem przechowywania klucza prywatnego jest dyskietka, noszona przy sobie lub trzymana w zamknięciu. W drugiej kolejności, dysk twardy komputera dostępnego tylko właścicielowi. Następnie, konto w odpowiednio zabezpieczonym systemie wielodostępnym np. Unix. Dysk komputera klasy PC dostępnego dla innych osób niż właściciel klucza zdecydowanie nie jest właściwym miejscem przechowywania klucza! Dodatkowo, klucz prywatny PGP powinien być (i zwykle jest) chroniony znanym tylko właścicielowi hasłem (passphrase) poprzez zaszyfrowanie go zwykłym szyfrem symetrycznym z użyciem hasła jako klucza. Dzięki temu, nawet jeżeli klucz PGP dostanie się w niepowołane ręce, skorzystanie z niego nadal nie będzie możliwe bez znajomości hasła. Szczególnie istotny z punktu widzenia użytkownika poczty elektronicznej jest fakt, że techniki szyfrowania oparte o metodę klucza publicznego nie wymagają wcześniejszego przekazania klucza szyfrowania/deszyfrowania kanałem bezpiecznym, tzn. gwarantującym poufność. Dzięki temu, używając PGP, mogą ze sobą bezpiecznie korespondować osoby, dla których poczta elektroniczna (kanał niepoufny) jest jedyną formą kontaktu.Swą popularność PGP zawdzięcza nie tylko temu, że autor udostępnia swój program (w tym kod źródłowy) nieodpłatnie, ale także że osiągalne jest na prawie wszystkich liczących się platformach, począwszy od wszelkich odmian Unixa (w szczególności, Linuxa), poprzez DEC VMS, IBM OS/2, MS Windows (w tym Windows NT) i MS-DOS, skończywszy na Apple MacIntosh i Commodore Amiga. Istnieją również inne, konkurencyjne wobec PGP metody szyfrowania poczty elektronicznej, np. PEM (Privacy Enhanced Mail) czy S/MIME (Secure Multimedia Internet Mail Extension), znacznie mniej rozpowszechnione.
W rozpowszechnieniu PGP poważną przeszkodę stanowiły wspomniane wcześniej przepisy ITAR, zabraniające eksportu produktów związanych z kryptografią. W związku z tym w użyciu były 3 odmiany PGP:
Ponadto, istnieje od niedawna program gpg (GNU PGP), oparty o podobne założenia, ale wykorzystujący wyłącznie nieopatentowane algorytmy. Dzięki temu może być używany w celach komercyjnych (także w USA) bez wnoszenia żadnych opłat; niestety w chwili obecnej oznacza to również brak kompatybilności z oryginalnym PGP.
Aktualna wersja PGP (w chwili pisania tego tekstu - 5.5) została natomiast wydrukowana w formie książkowej, a następnie zeskanowana poza USA - przepisy ITAR nie zabraniają bowiem eksportu algorytmów w formie drukowanych publikacji, a jedynie w formie nośników czytelnych dla komputera. Fakt ten dobitnie wskazuje, że przepisy te są reliktem nie mającym obecnie racji bytu i wielu producentów oprogramowania w USA domaga się ich zmiany twierdząc, że nie tylko nie chronią one interesów USA, ale przeciwnie - zmniejszają konkurencyjność amerykańskich produktów software'owych na światowych rynkach. Dla dociekliwych: PGP nie szyfruje całego dokumentu (np. listu) z użyciem algorytmu RSA - ponieważ jest on dość powolny, trwałoby to długo. Zamiast tego PGP szyfruje z użyciem RSA pewną (wygenerowaną losowo, osobno dla każdego szyfrowanego dokumentu) liczbę 128-bitową, która następnie jest używana jako klucz szyfrowania właściwego dokumentu "tradycyjnym" (tzn. symetrycznym) algorytmem o nazwie IDEA. Przy deszyfracji PGP odszyfrowuje klucz IDEA z użyciem prywatnego klucza RSA odbiorcy, a następnie kluczem IDEA odszyfrowuje list. W zasadzie zatem PGP jest połączeniem "tradycyjnego" kryptosystemu bazującego na kluczu (innym dla każdej wiadomości) przekazanym kanałem bezpiecznym i kryptosystemu opartego o metodę klucza publicznego, który zapewnia ten bezpieczny kanał.
W sieci Internet dostępne są rozmaite materiały w języku polskim i angielskim dotyczące PGP. Oto niektóre z nich:
Jak wspomniano wcześniej, PGP jest programem służącym do szyfrowania plików. Czasami jednak zachodzi potrzeba szyfrowania ciągłego strumienia danych na bieżąco podczas jego przesyłania, a nie zamkniętego, kompletnego pliku z danymi. Przykładowo, sytuacja taka zachodzi, gdy pracujemy interakcyjnie poprzez sieć na odległym komputerze (tzw. "remote login"). Z myślą o takich sytuacjach Tatu Ylonen opracował SSH, czyli "Secure Shell". Idea działania SSH jest zbliżona do PGP, tyle że "właścicielem" klucza zwykle nie jest osoba, ale komputer. Serwer udostępniający usługę "remote login" posiada swój klucz prywatny, który jest zapisany w pliku niedostępnym dla użytkowników serwera. Klucz publiczny natomiast każdy może sobie skopiować (zwykle odbywa się to automatycznie podczas pierwszego połączenia z serwerem), następnie zaś - podczas nawiązywania połączenia z serwerem - z użyciem tegoż klucza przekazywany jest losowo wygenerowany klucz, którym następnie kodowany jest strumień danych do i od serwera. Algorytmem używanym do szyfrowania strumienia może być jeden z popularnych szyfrów symetrycznych, np. IDEA, 3DES, DES lub Blowfish; do zaszyfrowania klucza szyfru symetrycznego służy podobnie jak w PGP algorytm RSA. Możliwe jest również używanie klucza prywatnego RSA przez konkretne osoby (użytkowników) dla potwierdzenia ich tożsamości, podobnie jak to się dzieje w przypadku podpisów cyfrowych. SSH jest produktem znacznie młodszym od PGP, ale szybko zdobywa sobie popularność, przede wszystkim wśród użytkowników systemu Unix (dla których dostępny jest bezpłatnie w postaci źródłowej, z pewnymi ograniczeniami). Dla użytkowników MS Windows została opracowana wersja komercyjna klienta SSH (serwer SSH dostępny jest obecnie wyłącznie dla systemu Unix). Użycie SSH zabezpiecza m.in. przed nagminnym ostatnio, zwłaszcza w środowiskach akademickich, przechwytywaniem (w drodze "sniffingu" sieci Ethernet) haseł użytkowników.Więcej informacji o SSH można znaleźć na stronie WWW poświęconej temu programowi: http://www.cs.hut.fi/ssh/ lub na stronach firmy DataFellows rozpowszechniającej komercyjną wersję programu: http://www.datafellows.com/
Zupełnie odmienne podejście do problemu przechwytywania haseł prezentuje zaproponowana przez Lamporta metoda tzw. "haseł jednorazowych", której reprezentantem jest program S/KEY autorstwa Karna i Hallera. Szyfrowanie haseł przysłanych siecią ma na celu uniemożliwienie potencjalnemu włamywaczowi ich przechwycenia i wykorzystania. W metodzie haseł jednorazowych hasło może być przesyłane siecią w sposób jawny, ponieważ jego przechwycenie nic włamywaczowi nie daje - hasło jest, jak wskazuje nazwa metody, jednorazowe i po jednokrotnym użyciu przestaje być użyteczne. Przy kolejnym wejściu do systemu użytkownik używa kolejnego hasła. Jak wiele innych metod kryptograficznych (np. opisana poniżej MD5) S/KEY wykorzystuje fakt istnienia funkcji jednokierunkowych, dla których nie da się w łatwy sposób obliczyć funkcji odwrotnej. Dzięki temu możliwy jest następujący sposób postępowania:
Obieramy pewną jednokierunkową funkcję f i hasło p0. Obliczamy p1=f(p0); następnie p2=f(p1) itd., N-krotnie.
Jako początkowe hasło w systemie ustawiamy pN. Przy pierwszym zalogowaniu się użytkownik nie podaje jednak tego hasła, ale hasło pN-1. System oblicza f(pN-1)=pN i otrzymany wynik porównuje do zapamiętanego hasła. W przypadku zgodności, użytkownik zostaje zweryfikowany pozytywnie, natomiast zapamiętane w systemie hasło pN zostaje zastąpione podanym przed chwilą przez użytkownika hasłem pN-1. Następnym razem, użytkownik poda hasło pN-2. Warto zauważyć, że ktoś znający ostatnio użyte hasło pi jest w stanie obliczyć wszystkie poprzednio używane przez tego użytkownika hasła pi+1, pi+2, itd. Nie jest natomiast w stanie wyznaczyć kolejnego hasła w sekwencji, tzn. pi-1 . Właściwy użytkownik bądź to posiada całą sekwencję N haseł np. wydrukowaną na papierze, bądź też może używać kalkulatora (w formie programu lub specjalizowanego kieszonkowego urządzenia) do szybkiego obliczenia pi=f(f(...f(p0)...)) dla danego hasła początkowego (czy też raczej: końcowego, zważywszy, że użyte będzie jako ostatnie) p0 i dla danej wartości i. Po wyczerpaniu serii N haseł postępowanie powtarzamy od początku z nowym p0.
Przy założeniu, że funkcja f istotnie jest jednokierunkowa, metoda ta jest absolutnie odporna na przechwytywanie haseł z sieci. Co więcej, zabezpiecza także przed bardziej prymitywnymi formami ataku takimi jak np. "patrzenie na ręce" wpisującego hasło i nie wymaga żadnego specjalnego oprogramowania po stronie klienta (tzn. komputera, z którego użytkownik nawiązuje połączenie z serwerem). Jest natomiast mniej wygodna dla użytkownika.
MD5, czyli Message Digest 5, jest jedną z najpopularniejszych obecnie tzw. funkcji skrótu kryptograficznego (obok np. starszego MD4, czy nowszego SHA1, czyli Secure Hash Algorithm 1). Funkcje skrótu kryptograficznego są to funkcje, które - podobnie jak znane z baz danych tzw. funkcje rozpraszające (hash functions) - na podstawie pewnego tekstu generują relatywnie krótki tekst (czy też liczbę, zwaną sumą kontrolną) związaną w pewien sposób z tym tekstem (np. może to być suma kodów ASCII wszystkich znaków tekstu). Aby funkcja była dobrą funkcją skrótu kryptograficznego musi jednak spełniać dodatkowe założenie: funkcja musi być jednokierunkowa, tzn. nie może być znany łatwy sposób generowania tekstów, dla których funkcja skrótu zwróci zadaną wartość (np. taką samą jak dla pewnego danego tekstu). Jeżeli warunek ten jest spełniony, to funkcja może być wykorzystywana do kontroli integralności danych: jeżeli obliczona dwukrotnie wartość funkcji dla pewnego tekstu uległa zmianie, to zmianie uległ sam tekst; odwrotnie, jeżeli wartość funkcji pozostaje ta sama, to wejściowy tekst zapewne nie został zmodyfikowany. Dwa przykładowe programy stosujące MD5 to Tripwire i omówiony wcześniej PGP.
Program Tripwire służy do kontroli integralności plików przechowywanych w systemie np. Unix. Podczas pierwszego wykonania program oblicza sumy kontrolne określonych w konfiguracji programu plików, i zapamiętuje je w pliku przechowywanym poza systemem (np. na dyskietce). Jeżeli zachodzi podejrzenie, że pliki te zostały poddane zmianom, powtórnie uruchomiony Tripwire porówna ich sumy kontrolne z zapamiętanymi, w ten sposób weryfikując zgodność plików ze stanem pierwotnym.
W programie PGP algorytm MD5 (a w wersji PGP 5.0 także algorytm SHA1) służy do weryfikacji autentyczności dokumentu: obliczona nim suma kontrolna dokumentu zostaje zaszyfrowana kluczem prywatnym nadawcy i dołączona do dokumentu jako tzw. sygnatura dokumentu. Odbiorca do jej odszyfrowania używa klucza publicznego nadawcy (korzysta się tu z faktu, że w algorytmie RSA istnieje pewna symetria pomiędzy kluczem prywatnym a publicznym - można wykorzystać klucz prywatny do zaszyfrowania tekstu, który następnie da się poprawnie odszyfrować kluczem publicznym). Jeżeli otrzymana wartość pokrywa się z wartością obliczoną przez odbiorcę, to dokument nie był modyfikowany. Ewentualna próba modyfikacji zmieniłaby sumę kontrolną, a podmiana sumy kontrolnej na nowo wyliczoną wymagałaby znajomości klucza prywatnego nadawcy - bez znajomości tego klucza nie można zaszyfrować sumy w sposób pozwalający odbiorcy na odszyfrowanie sumy znanym mu kluczem publicznym nadawcy. Tym samym, RSA w połączeniu z MD5 umożliwiają cyfrowe podpisywanie (poświadczanie autentyczności) dokumentu.
Opisane powyżej programy i algorytmy stanowią tylko niewielki podzbiór technik kryptograficznych mających zastosowanie w praktyce; należy jednak zauważyć, że są one dostępne przeciętnemu użytkownikowi, zapewniając wysoki (porównywalny do militarnego) poziom odporności na próby przełamania przy zerowym lub relatywnie niedużym koszcie wdrożenia. Co za tym idzie, ich popularność wzrasta tak wśród indywidualnych użytkowników, jak i w zastosowaniach instytucjonalnych. Należy oczekiwać, że wraz z poszerzaniem się zakresu oferowanych w sieci Internet usług stosowanie tych czy podobnych metod stanie się codziennością. Pojawią się również nowe zastosowania kryptografii, np. będąca od niedawna przedmiotem intensywnych prac badawczych "elektroniczna gotówka" (e-cash). Decydującym czynnikiem będą tu zapewne: uregulowanie zagadnień prawnych dotyczących elektronicznych dokumentów oraz masowość dostępu do Internetu.
Szymon Sokół <szymon@uci.agh.edu.pl>, 20.04.99