Bezpieczeństwo danych w Internecie

Poczta elektroniczna

Grzegorz Blinowski Instytut Informatyki PW
Nowowiejska 15/19
00-665 Warszawa
tel. 660-7995
e-mail: gjb@ii.pw.edu.pl

"CC"
Puławska 107A/2; 02-595 Warszawa
tel/fax (22) 844-35-62
e-mail: cc@cc.com.pl
WWW: http://www.cc.com.pl/

Sondaże prowadzone wśród użytkowników Internetu pokazują, że ciągle najpopularniejszą usługą jest poczta elektroniczna (e-mail). Bezpieczeństwo danych przekazywanych pocztą internetową ma więc pierwszorzędne znaczenie. O ile subtelności enkrypcji danych na poziomie transportu sieciowego, bezpieczne wywołania procedur, itd. mogą mieć dla typowych użytkowników niewielkie znaczenie, o tyle bezpieczne przesyłanie dokumentów drogą elektroniczną wzbudza bardzo duże zainteresowanie. Nie trzeba chyba tłumaczyć, że każda firma zainteresowana jest poufnością dokumentów finansowych czy projektów umów handlowych, niezależnie od tego czy istnieją one w postaci papierowej czy elektronicznej.

System bezpiecznej poczty elektronicznej musi spełniać trzy podstawowe założenia - musi zapewniać: tajność, uwierzytelnianie i integralność korespondencji. Tajność oznacza, że dokumenty są szyfrowane w sposób uniemożliwiający ich odczyt przez osoby niepowołane. Uwierzytelnianie oznacza, że nadawca oraz odbiorca są w sposób jednoznaczny identyfikowani, a podszycie się pod jednego lub drugiego jest bardzo trudne. Integralność oznacza, że osoby niepowołane nie mogą zmienić treści wiadomości, lub, że zmiana taka zostanie zawsze wykryta.

Standard PEM

Podstawowym internetowym standardem bezpiecznej poczty jest PEM (Privacy-Enhanced Mail). Standard ten specyfikuje zapewniające bezpieczeństwo rozszerzenia podstawowych protokołów przesyłania poczty elektronicznej.

PEM opracowano z myślą o zgodności z różnymi systemami kodowania danych oraz zarządzania kluczami. Umożliwia on szyfrowanie danych w oparciu o klucze tajne i jawne. Sama wiadomość kodowana jest algorytmem DES-ECB lub trzykrotnym DES, integralność zapewniona jest przez funkcje skrótu MIC, MD2 lub MD5. Zarządzanie kluczami PEM, w tym ich certyfikacja, zgodna jest ze specyfikacją ISO X.509.

Rysunek 1: Wiadomość PEM wewnątrz przesyłki e-mail


Funkcje skrótu

Integralność wiadomości w kryptografii zapewniana jest przez tzw. jednokierunkowe funkcje skrótu. Funkcje skrótu umożliwiają przyporządkowanie dowolnemu tekstowi (dokładnie - dowolnemu ciągowi liczb) "podpisu", czyli skrótu (digest), ściśle zwiazanego z danym tekstem. Oznaczmy wiadomość, która jest w rzeczywistości reprezentowana przez ciąg liczb przez M. Skrót h powstaje przez zastosowanie funkcji skrótu H do wiadomości M:

h = H(M)

Funkcja skrótu posiada trzy ważne własności, które sprawiają, że jest ona przydatna w kryptografii:

  1. Na podstawie M można szybko obliczyć h
  2. Na podstawie h nie da się (lub jest to bardzo trudne) obliczyć M
  3. Znając M trudno jest znaleźć takie M' takie, że: H(M) = H(M')

Próba zmiany wiadomości, do której dodano jej skrót powoduje, że skrót przestaje "pasować" do wiadomości. Własności funkcji skrótu powodują, że znalezienie wiadomości pasującej do skrótu jest bardzo żmudne obliczeniowo. Funkcja skrótu jest w pewnym sensie losowa - najmniejsza zmiana skracanej wiadomości powoduje, że jej skrót całkowicie się zmienia.

Widzimy więc, że dodanie skrótu do wiadomości dość dobrze zabezpiecza ją przed manipulacją.

Z punktu widzenia zastosowania w systemach poczty elektronicznej ważne są funkcje skrótu: MD5 (Message Digest) stosująca skrót 128 bitowy, MD2 będący gorszą odmianą MD5 oraz MD4 - wcześniejsza wersja MD5.


Format wiadomości PEM

Format wiadomości PEM jest zgodny z ogólną koncepcją formatu wiadomości przesyłanych pocztą internetową. PEM definiuje własny nagłówek, tj. pola określające sposób przetwarzania, przyjęte kodowanie, itd. Całość wiadomości PEM zawarta jest w zwykłej przesyłce poczty elektronicznej. Warto dodać, że PEM jest w znacznym stopniu niezależny od bazowego systemu dostarczania wiadomości, może być np. wykorzystywany w systemie pocztowym sieci BITNET.

Nagłówek oraz właściwa wiadomość PEM zawarta jest w ciele wiadomości w formacie RFC822 (rys. 1) i ograniczona jest parą nawiasów tekstowych oznaczających początek i koniec wiadomości PEM. Wewnątrz, przesyłka PEM zawiera własny nagłówek oraz właściwą wiadomość. Nagłówek PEM określa m.in:

Pola nagłówka są różne, w zależności od tego czy stosuje się szyfrowanie symetryczne czy asymetryczne.

Oto przykład wiadomości PEM dla przypadku symetrycznego kodowania (ten sam klucz dla odbiorcy i nadawcy):


Linie wiadomość PEM                            Komentarz                      

-----BEGIN PRIVACY-ENHANCED MESSAGE-----       Początek wiadomości PEM        

Proc-Type: 4, ENCRYPTED                        Wiadomość jest zaszyfrowana    

Content-Domain: RFC822                         Typ wiadomości (nie            
                                               wykorzystywany przy            
                                               szyfrowaniu)                   

DEK-Info: DES-CBC,E387A02071AE1F61             Algorytm szyfrowania           
                                               wiadomości i jego parametry    

Originator-ID-Symetric: gjb@ii.pw.edu.pl,,     Nadawca                        

Recipent-ID-Symetric:                          Odbiorca, jego pełnomocnik,    
gjb@ii.pw.edu.pl,ptf-kmc,4                     dane o ważności klucza         

Key-Info:                                      Parametry zarządzania          
DES-ECB,RSA-MD2,791EC7590C1B5570,A9007D67186E0 kluczem: algorytm szyfrowania  
C6850158C5410BEFE7B                            klucza wymiany (tu DES-ECB),   
                                               algorytm skrótu (tu RSA-MD2),  
                                               zaszyfrowany klucz wymiany ,   
                                               zaszyfrowany skrót             
                                               wiadomości.                    

... dalszy ciąg nagłówka                                                      

                                               Pusta linia kończy nagłówek    
                                               PEM                            

LO1jkg+89hujh7h/oKV54o01Bg/FWbC5KnO2Igtu+M78hb Początek zaszyfrowanej         
DRj2hM22N5fT6Rw6N                              wiadomości                     

... dalszy ciąg zaszyfrowanej wiadomości                                      

-----END PRIVACY-ENHANCED MESSAGE-----         Koniec wiadomości PEM          



Uwierzytelnianie nadawcy i odbiorcy

PEM stosuje zarządzanie kluczami oparte na standardzie X.509. Certyfikacja kluczy w systemie X.509 odbywa się w sposób hierarchiczno - drzewiasty. Najwyższym autorytetem certyfikującym klucze jest Internet Policy Registration Authority (IPRA), niżej w hierarchii znajdują się Policy Certification Authorities (PCA), którym z kolei podlegają Certification Authorities (CA) wydające certyfikaty użytkownikom i podporządkowanym wydziałom.

Słabe strony PEM

Stosowane w PEM metody szyfrowania są dość silne i odporne na brutalny atak polegający na wypróbowywaniu wszystkich możliwych kluczy. Słabe strony PEM to przede wszystkim zarządzanie kluczami - certyfikacja nie zabezpiecza niedbałych użytkowników przed wykradnięciem klucza tajnego lub podstawieniem klucza jawnego przez włamywacza. PEM nie gwarantuje też takich cech bezpieczeństwa jak: kontrola dostępu, wybór trasy przesyłania wiadomości, gwarantowane dostarczenie wiadomości, potwierdzanie i wykrywanie duplikatów.

Druga metoda ataku została już opisana w artykule o systemie Kerberos - włamywacz może podsunąć użytkownikom z pozoru poprawnie funkcjonującą, lecz zmodyfikowaną wersję oprogramowania PEM. Taki koń trojański może np. wysłać włamywaczowi klucze tajne, lub zmieniać treść przesyłanych wiadomości.

PGP - Pretty Good Privacy

Skomplikowanie standardu PEM oraz komercyjność jego implementacji przyczyniły się do powstania słynnego pakietu PGP autorstwa Philipa Zimmermana. O PGP głośno jest nie tylko z powodu jego niezaprzeczalnych walorów, ale także z powodu poważnych nieprzyjemności prawnych jakie spotkały jego autora. W USA urządzenia i oprogramowanie szyfrujące ma status "militarny", dlatego też powszechne udostępnienie programu szyfrującego o poziomie zabezpieczenia zbliżonym do wojskowego naraziły jego autora na proces sądowy, tego b. interesującego aspektu nie będę jednak dalej rozwijał.

PGP jest pakietem darmowym, rozpowszechnianym na zasadach licencji Free Software Foundation. Dostępne są jego implementacje dla wielu popularnych systemów operacyjnych, w tym oczywiście dla MS-DOS. Dla Unix-a PGP dostępne jest w postaci źródeł w języku C.

Funkcje PGP

PGP wykorzystuje klucze prywatne i publiczne do szyfrowania wiadomości oraz tworzenia skrótów. Jego podstawowe możliwości to:

PGP udostępnia też szereg funkcji operujących na zbiorze kluczy. Możliwe jest wygenerowanie pary kluczy zadanej długości, dodanie lub usunięcie kluczy publicznych oraz podpisywanie (certyfikacja) kluczy. Oczywiście, dopasowywanie odpowiednich kluczy do wiadomości jest automatyczne - chcąc odszyfrować i zweryfikować wiadomość wprowadza się ją do programu PGP, który określa nadawcę, znajduje jego klucz w lokalnym zbiorze kluczy i dokonuje odszyfrowania oraz weryfikacji podpisu.

Certyfikacja kluczy w PGP jest diametralnie odmienna od przyjętej w PEM - nie istnieje hierarchia certyfikacji. Użytkownicy PGP wzajemnie podpisują swoje klucze publiczne - uzyskanemu kluczowi publicznemu można zaufać, jeżeli jest on już podpisany przez osoby, których kluczom ufamy.

Implementacja PGP

PGP do szyfrowania danych stosuje algorytm symetryczny IDEA (uznawany za trudniejszy do złamania niż DES). Jako funkcja skrótu stosowany jest algorytm MD5. Do szyfrowania kluczy stosowany jest algorytm asymetryczny - RSA z kluczem o długości 512, 1024 lub 1280. bitów. Nieszyfrowanie samej wiadomości algorytmem asymetrycznym podyktowane jest względami praktycznymi: implementacje IDEA są znacznie szybsze od implementacji RSA (co wynika z natury algorytmów).

Podstawowa implementacja PGP jest dość siermiężna - program działa w trybie tekstowo - wsadowym, a poszczególne funkcje określa się przez opcje wywołania. Dostępnych jest jednak szereg graficznych nakładek na PGP umożliwiających korzystanie z pakietu osobom przyzwyczajonym do środowisk graficznych. Dla MS-Windows godny polecenia jest sharewarowy program WinPGP autorstwa Christophera Geiba oraz freewarowy PGP WinFront autorstwa Rossa Barclaya. Istnieją też nakładki dla PGP, pracujące pod systemem Unix, włączające PGP w sposób przezroczysty do systemu poczty internetowej. Np. program pgpsendmail umożliwia przezroczystą enkrypcję i dekrypcję wychodzącej i wchodzącej poczty elektronicznej.

Słabe strony PGP

Algorytmy kryptograficzne PGP są bardzo silne, ich poziom zbliżony jest do militarnego. Przez pewien czas pojawiały się spekulacje co do jakości algorytmów wykorzystywanych przez PGP, nie przedstawiono jednak konkretnych dowodów na istnienie błędów w implementacji, czy też słabości samych algorytmów kryptograficznych. Do PGP zastosować można krytykę analogiczną do tej jaką przedstawiono dla PEM. Należy też pamiętać, że PGP jest programem szyfrującym i deszyfrującym informacje, z pewnymi ułatwieniami związanymi z obsługą poczty elektronicznej. PGP nie jest jednak w sensie dosłownym programem implementującym bezpieczną pocztę eletrkoniczną.

Algorytm RSA

Algorytm RSA (nazwa pochodzi od nazwisk autorów: Rona Rivesta, Adi Shamira i Leonarda Adelmana) realizuje asymetryczne kodowanie z kluczami publicznym i prywatnym i jest koncepcyjnie podobny do przedstawionego w pierwszym odcinku cyklu algorytmu Diffiego-Hellmana. Asymetryczna funkcja kodująca algorytmu RSA wykorzystuje, podobnie jak algorytm Diffiego-Helamana funkcje jednokierunkowe, tj. takie, dla których znalezienie argumentu na podstawie wyniku jest b. trudne. Zabezpieczenie RSA zapewnione jest poprzez trudność faktoryzacji (rozłożenia na czynniki pierwsze) dużych liczb:

Aby otrzymać parę kluczy wybieramy dwie losowe, duże liczby pierwsze p i q i obliczamy ich iloczyn:

n = p * q

Wybieramy losowo klucz szyfrujący e taki, że e i (p-1)(q-1) są względnie pierwsze (nie mają wspólnych dzielników):

Wyznaczamy klucz deszyfrujący d będący odwrotnością e modulo (p-1)(q-1), tzn:

(e * d) mod (p-1)(q-1) = 1

Liczby e i n tworzą klucz publiczny, d jest kluczem prywatnym. Po obliczeniu n, e i d liczby p i q nie są już potrzebne i powinny zostać wymazane. Zauważmy, że n oraz (p-1)(q-1) są względnie pierwsze.

Wiadomość m szyfrujemy podnosząc ją do potęgi e modulo n, dostajemy wiadomość zaszyfrowaną c:

c = me mod n

W celu odszyfrowania wiadomości podnosimy zaszyfrowany tekst do potęgi d modulo n:

cd mod n = me*d mod n = m1 mod n = m

Opis szyfrowania jest nieco uproszczony, gdyż w rzeczywistości wiadomość m musi być dzielona na bloki o jednoznacznej reprezentacji modulo n.

Sądzi się, że uzyskanie tekstu jawnego z zaszyfrowanej przy wykorzystniu RSA wiadomości jest równoznacze z faktoryzacją klucza publicznego - ponieważ ten jest iloczynem b. dużych liczb pierwszych, np. stucyfrowych, faktoryzacja taka jest bardzo trudna. Od czasu wynalezienia algorytmu w 1978 r. mimo instensywnych starań kryptoanalityków "boczna furtka" nie została znaleziona.

Zakładając, że nie zostanie odkryta "boczna furtka" umożliwiająca złamanie RSA, algorytm jest b. skuteczny: faktoryzacja liczby o długości 664 bitów (stosowane są nawet dłuższe klucze) wymaga 4000 lat pracy miliona komputerów wykonujących milion kroków algorytmu na sekundę. Atak może być jednak przeprowadzony z innej strony: np. głośne ostatnio złamanie kodowania RSA stosowanego przez przeglądarkę WWW firmy Netscape, zostało wykonane poprzez odgadnięcie liczb p i q - nie były one naprawdę losowe (zresztą klucz używany przez tą wersję przeglądarki był b. krótki).

Literatura i inne źródła

Grzegorz Blinowski pracuje w Instytucie Informatyki Politechniki Warszawskiej, jest też właścielem firmy konsultingowej "CC" zajmującej się doradztwem w zakresie architektur klient-serwer, Internetu i bezpieczeństwa systemów komputerowych.