Protokół SSL zaprojektowany został przez firmę Netscape w 1994 roku, lecz już
rok później pojawiła się jego trzecia wersja, jako szkic przyszłego standardu (internet
draft). Gdy osiągnięto zgodę co do opracowania standardu, w ramach IETF
zawiązała się w tym celu grupa robocza TLS, która w 1999 roku opublikowała
standard o nazwie TLS 1.0, kompatybilny z SSLv3 i z tego względu często określany
nazwą SSL 3.1.
W tej sekcji zajmiemy się wyłącznie protokołem SSLv3, w następnej dokonamy
natomiast jego porównania z protokołem TLS.
Architektura SSL
SSL zaprojektowano w celu zapewnienia niezawodności połączeń TCP. SSL nie
ma struktury jednolitej, lecz składa się z dwóch podwarstw, jak to przedstawiono
na rysunku u dołu ⇓.
Podprotokół powitalny SSL | Podprotoków zmiany szyfru SSL | Podprotokół alarmowy SSL | HTTP |
Podprotokół rekordu SSL | |||
TCP | |||
IP |
Rysunek. Stos protokołów TCP /IP wzbogacony
o protokół SSL.
W podwarstwie niższej rezyduje podprotokół rekordu (SSL Record Protocol),
zapewniający podstawowe usługi dla podprotokołów rezydujących w wyższej podwarstwie.
Jednym z tych podprotokołów jest HTTP (Hypetext Transfer Protocol)
zapewniający usługę transferu danych między klientem a serwerem w ramach
aplikacji webowej. Trzy pozostałe podprotokoły - podprotokół powitalny (Handshake
Protocol), podprotokół zmiany szyfru (Change Cip her Spec Protocol) i podprotokół
alarmowy (Alert Protocol) - są już integralną częścią SSL.
Dwie istotne koncepcje definiowane w specyfikacji protokołu SSL to połączenie
SSL i sesja SSL:
- Połączenie to komunikacja między warstwami transportowymi (w kategoriach modelu odniesienia OSI) zapewniająca odpowiedni typ usługi; w protokole SSL połączenie ma charakter peer-to-peer. Połączenie SSL ma charakter tymczasowy i zawsze odbywa się w ramach konkretnej sesji.
- Sesja to skojarzenie między klientem i serwerem. Sesje tworzone są przez podprotokół powitalny i definiują zestaw parametrów używanych dla nawiązywanych połączeń. Pozwalają one unikać czasochłonnego negocjowania parametrów dla każdego nawiązywanego połączenia z osobna.
- identyfikator sesji - dowolny ciąg bajtów wybrany przez serwer do identyfikowania stanu sesji;
- certyfikat partnera - zgodny ze standardem X509.v3, parametr ten może pozostać pusty;
- metodę kompresji - algorytm wykorzystywany do kompresowania danych przed ich szyfrowaniem;
- specyfikację szyfru - określenie algorytmu kompresji (opcjonalne, na przykład AES), algorytmu haszowania wykorzystywanego do obliczenia kodu MAC (np. MDS lub SHA- 1 ) oraz atrybutów kryptograficznych, m.in. hash_size;
- tajny kod główny - ciąg 48 bajtów współdzielony przez klienta i serwer i nieznany nikomu innemu;
- znacznik wznawiania- określający, czy w ramach sesji mogą być tworzone nowe połączenia.
- unikalny ciąg losowy - wybierany przez klienta i serwer niezależnie dla każdego połączenia;
- tajny parametr MAC dla serwera - wartość parametru MAC_write_secret używana w operacjach MAC dla danych wysyłanych przez serwer;
- tajny parametr MAC dla klienta - wartość parametru MAC_write_secret używana w operacjach MAC dla danych wysyłanych przez klienta;
- klucz serwerowy - klucz szyfrowania symetrycznego, za pomocą którego serwer szyfruje wysyłane dane, a klient odszyfrowuje je po otrzymaniu;
- klucz kliencki - klucz szyfrowania symetrycznego, za pomocą którego klient szyfruje wysyłane dane, a serwer odszyfrowuje je po otrzymaniu;
- wektory inicjacyjne - gdy wykorzystywany jest tryb operacyjny CBC szyfru blokowego, dla każdego klucza utrzymywana jest wartość wektora inicjacyjnego (IV) - wartość ta inicjowana jest przez podprotokół powitalny, po czym ostatni blok szyfrogramu dla każdego rekordu zapamiętywany jest jako wartość IV dla szyfrowania rekordu następnego;
- numery sekwencyjne - każdy z partnerów komunikacji utrzymuje oddzielną pulę numerów sekwencyjnych dla wysyłanych i otrzymywanych komunikatów. Gdy któryś z partnerów wysyła lub otrzymuje komunikat zmiany szyfru, powinien zresetować do zera aktualną wartość numeru sekwencyjnego. Numery sekwencyjne są 64-bitowymi liczbami całkowitymi, maksymalna wartość numeru wynosi więc 2⁶⁴ - 1.
- Poufność - podprotokół powitalny definiuje współdzielony tajny klucz używany do konwencjonalnego szyfrowania treści przesyłanych w ramach protokołu SSL.
- Ochronę integralności - podprotokół powitalny definiuje także współdzielony tajny klucz wykorzystywany do obliczania kodów MAC dla przesyłanych komunikatów.
Między parą węzłów (na przykład między klientem i serwerem w komunikacji
HTTP) może w danej chwili istnieć wiele bezpiecznych połączeń. Teoretycznie
może między nimi istnieć także wiele otwartych sesji, lecz możliwość ta nie jest
wykorzystywana w praktyce.
Każda sesja może w danej chwili znajdować się w różnych stanach. Gdy zostanie
ustanowiona, znajduje się w stanie ustalonym dla odczytu i zapisu (czyli odbierania
i wysyłania danych); ponadto w czasie tworzenia sesji przez podprotokół
powitalny tworzony jest stan przejściowy (pending state), który po zakończeniu
działania tego protokołu staje się stanem ustalonym.
Stan sesji SSL określony jest przez następujące parametry:
Poniższe parametry składają się natomiast na stan połączenia:
Podprotokół rekordu oferuje dwie następujące usługi dla podprotokołów
w wyższej podwarstwie:
Poszczególne etapy funkcjonowania podprotokołu rekordu przedstawiono na
rysunku u dołu ⇓. Otrzymany od aplikacji komunikat przeznaczony do wysłania jest
najpierw fragmentowany, czyli dzielony na mniejsze bloki łatwiejsze w zarządzaniu.
Potem dla każdej jednostki danych wykonywane są: kompresja (która
jednak jest opcjonalna), uwierzytelnienie za pomocą kodu MAC, zaszyfrowanie,
opatrzenie nagłówkiem i wysłanie. Odebrany pakiet jest poddawany procesowi
odwrotnemu: deszyfracji, zweryfikowaniu kodu MAC i dekompresji i ostatecznie
poszczególne jednostki składane są na powrót w kompletny komunikat (który
dostarczony zostaje aplikacji docelowej).
Dane aplikacji | |||||
⇓ | ⇓ | ⇓ | |||
Fragmentacja | |||||
⇓ | |||||
Kompresja | |||||
⇓ | |||||
Dołączenie kodu MAC | |||||
⇓ | |||||
Szyfrowanie | |||||
⇓ | |||||
Dołączenie nagłówka SSL |
Rysunek. Operacje podprotokołu rekordu SSL.
Źródła i Literatura:
William Stallings - "Kryptografia i Bezpieczeństwo sieci komputerowych" - Koncepcje i metody bezpiecznej komunikacji. Wydanie V, Wydawnictwo Helion 2012, ISBN: 978-83-246-2987-9.
Polish language edition published by HELION S.A. Copyright© 2012.
Copyright© 2012 Wydawnictwo HELION S.A
WWW: http:pl/helion.pl (księgarnia internetowa, katalog książek)
Copyright© 2012 Wydawnictwo HELION S.A
WWW: http:pl/helion.pl (księgarnia internetowa, katalog książek)