10. KRYPTOGRAFICZNE PROTOKOŁY KOMUNIKACYJNE Protokoły kryptograficzne mogą być stosowane w różnych warstwach modelu ISO/OSI. Zaletą stosowania ich w niższych warstwach jest to, że użytkownicy nie muszą być świadomi ich działania, natomiast wadą jest to, że ich bezpieczeństwo często zależy od umiejętności i dobrej woli zewnętrznych dostarczycieli usług internetowych (ISP). Umieszczenie protokołów kryptograficznych powyżej warstwy transportowej powoduje, że ich działanie musi być uwzględniane przez sieciowe oprogramowanie użytkowe. Protokoły warstwy łącza 1) WEP (Wired Equivalent Privacy) WEP jest najwcześniejszym standardem służącym do zabezpieczania sieci bezprzewodowych z rodziny 802.11. Zakłada, że każda z komunikujących się stron (komputer i stacja bazowa) dysponuje zarówno kluczem tajnym (służącym do szyfrowania symetrycznego), jak i kluczem jawnym (służącym do przekazania klucza tajnego przez stronę przeciwną). Klucze tajne mają długość 40 bitów (z powodu ograniczeń nałożonych przez rząd USA).
Do każdej wysyłanej ramki na końcu dołączane jest 32-bitowe pole kontrolne obliczone przy użyciu wielomianu CRC-32 (tak, jak w protokole Ethernet), które pozwala z dużym prawdopodobieństwem stwierdzić ewentualne naruszenie treści ramki. Do właściwego zaszyfrowania tak rozszerzonej ramki służy szyfr strumieniowy RC-4 wykorzystujący otrzymany 40-bitowy klucz tajny, rozszerzony o 24-bitowy wektor inicjujący (przesłany jawnie). Standard WEP zawiera wiele błędów projektowych (por. np. [Tanenbaum] ), które w połączeniu ze stwierdzoną słabością algorytmu szyfrowania RC-4 (szczególnie z 40-bitowym kluczem) spowodowały, że od roku 2002 stosowanie tego standardu jest niezalecane. W Internecie zamieszczonych jest dość dużo programów narzędziowych służących do znajdywania kluczy tajnych używanych w komunikacji WEP na podstawie niezbyt dużych ilości podsłuchanej informacji. Prawdopodobnie najbardziej popularnym z takich programów jest AirSnort.
2) WPA 2 (WiFi Protected Access version 2) Po utracie zaufania do protokołu WEP na okres przejściowy wprowadzono pierwszą wersję protokołu WPA, która stanowiła ulepszenie WEP poprzez wymuszanie (dość częstej) okresowej wymiany kluczy. Rozwiązanie takie odroczyło na pewien czas radykalną wymianę sieciowych kart bezprzewodowych, gdyż wymagało jedynie wymiany sterowników tych kart (na implementujące algorytm wymiany kluczy TKIP). Głównym algorytmem szyfrowania pozostał jednak RC-4. Protokół WPA-2, wprowadzony kilka lat później, został zatwierdzony jako standard IEEE 802.11i. Jego bezpieczeństwo jest oceniane jako dużo wyższe od bezpieczeństwa jego poprzedników. Zamiast RC-4 wykorzystuje blokowy algorytm szyfrowania AES z kluczami 128-bitowymi. Wymiana kluczy (na przykład oddzielny klucz dla każdego połączenia) wraz z szyfrowaniem AES jest realizowana przez protokół CCMP. Do uwierzytelniania użytkowników służy protokół EAP (Extensible Authentication Protocol). Protokół EAP zazwyczaj służy jedynie jako pośrednik pomiędzy przyjmującym połączenie punktem dostępowym, a zewnętrznym serwerem uwierzytelniania (na przykład RADIUS).
Protokoły warstwy sieciowej 1) IPsec (Internet Protocol security) jest standardem bezpiecznej komunikacji w warstwie sieciowej. Zapewnia możliwość szyfrowania (również bezpieczne ustalenie klucza symetrycznego), kontrolę integralności przesyłanych danych oraz ochronę przed atakiem powtórzeniowym. Zasadniczo został zaprojektowany pod kątem zastosowania w IPv6, ale może również być stosowany w IPv4 (przy użyciu dodatkowych nagłówków). Rodzaj stosowanego szyfrowania z kluczem symetrycznym nie jest określony przez standard – ma to na celu zarówno zapewnienie możliwości zastąpienia obecnie stosowanych szyfrów ewentualnymi lepszymi (wynalezionymi w przyszłości), jak też możliwości rezygnacji z szyfrowania (dokładniej: zastosowania tak zwanego szyfru neutralnego) w celu zwiększenia wydajności przesyłu. Pomimo tego, że IP jest protokołem bezpołączeniowym, działanie IPsec ma charakter połączeniowy, gdyż ustalanie parametrów związanych z bezpieczeństwem nie odbywa się dla każdego pakietu oddzielnie, ale dla całych serii pakietów wymienianych czy to pomiędzy pojedynczymi hostami, czy to pomiędzy całymi sieciami lokalnymi.
W związku z powyższym, podstawowym pojęciem w IPsec jest skojarzenie bezpieczeństwa (Security Association, SA), które identyfikuje połączenie jednokierunkowe pomiędzy parą hostów lub routerów (jeśli połączenie jest dwukierunkowe, związane są z nim dwa różne identyfikatory SA). IPsec może być używany w trybie transportowym (służącym do zabezpieczenia komunikacji pary hostów) lub w trybie tunelowym (zazwyczaj wykorzystywanym do zabezpieczenia całej komunikacji pomiędzy parą sieci lokalnych). W tym drugim przypadku tunel tworzony jest pomiędzy dwiema bramami do sieci lokalnych. Technicznie realizacja jednego z tych trybów sprowadza się do odpowiedniej przebudowy nagłówków pakietów ([M. Serafin] ): a) tryb transportowy Pierwotny Nagłówek Nagłówek D A N E nagłówek IP IPsec TCP lub UDP b) tryb tunelowy Nowy Nagłówek Pierwotny Nagłówek D A N E nagłówek IP IPsec nagłówek IP TCP lub UDP
Występują dwa rodzaje nagłówków IPsec (i związane z nimi funkcje ich obsługi): AH (Authentication Header) oraz ESP (Encapsulation Security Payload). Pierwszy z nich może być stosowany tylko do zapewniania integralności pakietów i zapobiegania atakom powtórzeniowym, ale nie do szyfrowania. Zawiera następujące pola: - Następny nagłówek – nazwa użyta w związku z implementacją w IPv6; w przypadku użycia w IPv4 do pola tego kopiowana jest zawartość pola Numer protokołu nadrzędnego z pierwotnego nagłówka IP, a pierwotny nagłówek IP jest modyfikowany przez wpisanie do tego pola wartości 51; - Długość – długość nagłówka AH (w słowach 32-bitowych) zmniejszona o 2; - Indeks parametrów bezpieczeństwa – identyfikator SA dla danego połączenia; - Numer sekwencyjny – unikalny numer pakietu w ramach danego połączenia; - Dane uwierzytelniające – wartość funkcji skrótu obliczona od zawartości pierwotnego pakietu IP wydłużonego o klucz symetryczny wykorzystywany w danym połączeniu. Powyższy sposób obliczenia funkcji skrótu jest oznaczany jako HMAC (Hashed Message Authentication Code). Uwierzytelnienie HMAC nie obejmuje tych pól nagłówka IP, których wartości mogą zmieniać się na trasie przesyłu pakietu (na przykład TTL).
Nagłówek ESP początkowo zapewniał jedynie szyfrowanie, a nie zapewniał kontroli integralności. Jego podstawowe pola to: - Indeks parametrów bezpieczeństwa – jak dla nagłówka AH; - Numer sekwencyjny – jak dla nagłówka AH. W przypadku stosowania szyfrowania innego, niż neutralne (czyli brak), za nagłówkiem umieszczane jest dodatkowe pole zawierające wartość wektora inicjującego dla algorytmu szyfrowania. Obecnie nagłówki ESP umożliwiają zarówno stosowanie szyfrowania, jak i kontrolę integralności, w związku z czym przewidywane jest wycofanie z użycia nagłówków AH. Dodatkową przyczyną tego może być niemożliwość wykorzystania translacji adresów sieciowych NAT w przypadku stosowania nagłówków AH (nagłówki ESP również nie umożliwiają tego bezpośrednio, ale przewidziane jest dla nich stosowanie techniki o nazwie NAT-Traversal, polegającej na dodatkowym opakowywaniu pakietów IPsec w datagramy UDP, na ogół kierowane do portu UDP 4500). Wstępne negocjacje parametrów połączenia przez IPsec są realizowane przez protokół IKE (Internet Key Exchange), działający w dwóch fazach: ISAKMP (Internet Security Association and Key Management Protocol), wykorzystujący port UDP 500, oraz Oakley.
Protokoły warstwy prezentacji 1) SSL (Secure Socket Layer) Pakiet oprogramowania SSL został udostępniony w 1995 roku przez firmę Netscape Communications w celu umożliwienia tworzenia bezpiecznych połączeń przez przeglądarki internetowe. Od tamtej pory protokół SSL rozwinął się (po wersji 1 nastąpiły wersje 2 i 3) i znalazł wiele innych zastosowań (tworzenie wirtualnych sieci prywatnych VPN, otwieranie zdalnych szyfrowanych sesji w trybie tekstowym SSH i inne). W 1996 roku firma Netscape wystąpiła do IETF z wnioskiem o standaryzację protokołu SSL. Wynikiem prac standaryzacyjnych jest protokół TLS (Transport Layer Security), który nie jest w pełni zgodny z protokołem SSLv3 (czasem jest określany jako SSL 3.1). W standardowym stosie protokołów SSL plasuje się pomiędzy warstwą transportową, a warstwą zastosowań. W zasadzie jest kwalifikowany jako protokół warstwy prezentacji, ale posiada również pewne cechy protokołu warstwy sesji (przeprowadzanie wstępnych negocjacji parametrów połączenia). W przypadku, gdy służy do zabezpieczania działania protokołu HTTP, cały zestaw HTTP + SSL określany jest jako HTTPS i standardowo korzysta z portu TCP 443.
Protokół SSL przed rozpoczęciem właściwej transmisji danych wykonuje nawiązanie sesji SSL (SSL handshake) w następującym ciągu kroków ([M. Serafin] ): - klient wysyła do serwera pakiet inicjujący, a wraz z nim numer obsługiwanej wersji SSL, wykaz identyfikatorów obsługiwanych algorytmów szyfrujących i kompresji oraz liczbę losową (ID sesji); - serwer odsyła klientowi numer wybranej wersji SSL, identyfikatory wybranych algorytmów oraz swój certyfikat; - klient sprawdza certyfikat serwera (najpierw w swoich zasobach, a potem ewentualnie korzystając ze ścieżki certyfikacji w PKI); - klient wysyła do serwera 48-bajtowy wstępny klucz główny (premaster key) zawierający 2 bajty wysłane w pakiecie inicjującym oraz 46 bajtów losowych, zaszyfrowane kluczem publicznym serwera (zawartym w jego certyfikacie); - serwer odszyfrowuje otrzymaną wartość swoim kluczem prywatnym i porównuje pierwsze dwa bajty z otrzymanymi w pakiecie inicjującym; - opcjonalnie może nastąpić uwierzytelnienie klienta przy użyciu jego certyfikatu; - na podstawie wymienionych pomiędzy klientem i serwerem danych następuje ustalenie klucza głównego sesji (master key);
- na podstawie uzgodnionego klucza głównego generowanych jest sześć kluczy symetrycznych (trzy dla transmisji od klienta do serwera i trzy dla transmisji od serwera do klienta) służących do szyfrowania i sprawdzania integralności komunikatów; - klient przesyła serwerowi wiadomość o zakończeniu negocjacji zaszyfrowaną uzgodnionym kluczem symetrycznym; - serwer odpowiada klientowi w analogiczny sposób. Właściwa komunikacja polega na wymianie pakietów zawierających fragmenty komunikatów (o ustalonej wielkości) upakowanych przy użyciu uzgodnionego algorytmu kompresji, uzupełnionych o skrót uwierzytelniający (Message Authentication Code, MAC) i zaszyfrowanych wybranym szyfrem. Bezpieczeństwo połączenia SSL w dużym stopniu zależy od wynegocjowanych algorytmów szyfrujących i obliczających funkcję skrótu. Standardowo używany jest szyfr strumieniowy RC4 i funkcja skrótu MD5, co ze względu na ujawnione słabości obu algorytmów nie jest bardzo bezpiecznym rozwiązaniem. W zastosowaniach wymagających zwiększonego stopnia bezpieczeństwa zalecane jest używanie zestawu (jeśli jest dostępny) AES + SHA-3 (pomimo wyraźnej utraty wydajności komunikacji).