Wykład 4 Protokoły SSL i TLS główne slajdy 26 października 2011 Instytut Informatyki Uniwersytet Jagielloński 4.1
Secure Sockets Layer i Transport Layer Security SSL zaproponowany przez Netscape w 1994 roku wersja 1.0 miała tak wiele błędów, że nigdy nie została udostępniona Netscape współpracował ze społecznościa Internetu kryptolodzy natychmiast zauważyli mnóstwo dziur pierwsza udostępniona była wersja v2.0 ok. lutego 1995 TLS poprawił wiele błędów SSL ma zapewniać bezpieczeństwo połaczeń w sieci jest protokołem pomiędzy warstwa TCP a warstwa aplikacji TLS jest "przeźroczysty" i działa w warstwie prezentacji OSI całkowicie opiera się na protokołach połaczeniowych zapewniajacych kompletność transmisji istnieje rozszerzenie Datagram TLS (DTLS) dla UDP 4.2
Weryfikacja TLS zapewnia uwierzytelnianie (authentication) oparte na certyfikatach komunikaty sa podpisywane i przesyłane wraz z certyfikatem strony certyfikat zawiera informację identyfikujac a i klucz publicznym, podpisane przez instytucję, do której odbiorca ma zaufanie instytucja zapewnia możliwość weryfikacji certyfikatu czasem serwer wykorzystuje certyfikat podpisany przez samego siebie jest protokołem typu klient serwer w HTTPS, POP3S, IMAP4S zwykle weryfikowany jest tylko serwer serwer może zażadać weryfikacji klienta możliwa jest anonimowa wymiana kluczy w takiej sytuacji weryfikacja nie jest wykonywana możliwość ustawienia fałszywego serwera 4.3
TLS IETF uznało SSL v3.0 i przyjęło go za standard TLS 1.0 w 1999 roku teraz mamy wersję TLS 1.2 wykorzystuje SHA-256 istnieje możliwość użycia poprzednich przy połaczeniu z wcześniejsza wersja TLS wykorzystuje funkcję haszujac a z kluczem HMAC jako generator liczb losowych do danych XOR-owany jest łańcuch bloków 0x5C z kluczem i danymi co jest haszowane do wyniku doklejany jest klucz, XOR-owany inny łańcuch i haszowane wielokrotne haszowanie HMAC z ziarnem daje generator liczb losowych o dobrych własnościach 4.4
Komunikaty TLS handshake nawiazanie porozumienia, weryfikacja (serwera, lub obu), wymiana kluczy hello request client hello server hello server certificate server key exchange server hello done client certificate client key exchange certificate verify change ciper spec informuje, że ustalone parametry staja się ważne od tej chwili wysyłane zaraz po ustaleniu, tuż przed przesyłaniem danych obowiazuje tylko stronę odbierajac a musi więc być wysłane w obydwu kierunkach alert wysyłane w dowolnym momencie gdy połaczenie ma być przerwane lub nastapił bład application data dane aplikacji 4.5
Wymiana komunikatów TLS: wymiana klucza poprzez RSA KLIENT SERWER client Hello server hello certificate server hello done client key exchange change cipher spec change cipher spec application data application data klucz na podstawie liczb losowych w komunikatach hello obliczanie klucza wykorzystuje także wstępna tajemnicę tajemnica wysyłana przez klienta zaszyfrowana kluczem publicznym udostępnionym w certyfikacie serwera skróty wszystkich wysłanych komunikatów 4.6
Wymiana komunikatów: client hello połaczenie przychodzace na port 443 zakłada użycie TLS serwer oczekuje komunikatu client hello w definicji protokołu TLS istnieje możliwość przesyłania pustych danych dla zmylenia ewentualnych podsłuchiwaczy klient wysyła client hello z zawartym numerem najwyższej wersji TLS, która obsługuje to sposób na znalezienie najlepszego możliwego połaczenia client hello zawiera także identyfikator sesji client hello ma też 32-bajtowa liczbę losowa (32 bity czasu i 28 bajtów wygenerowanych lokalnie przez generator liczb losowych oparty na HMAC) kryptografia asymetryczna jest kosztowna, więc jeśli klient komunikuje się z tym samym IP czy serwerem, który już zna i ma uwierzytelnienia, to wysyła ten sam identyfikator sesji, co ostatnim razem to połaczenie mogło być bardzo niedawno nie ma żadnej gwarancji, że serwer zaakceptuje ten ID w client hello jest lista obsługiwanych protokołów kryptograficznych i algorytmów kompresji TLS jest łatwo modyfikowalny i można przestać obsługiwać błędne algorytmy a przyjać nowe ewentualna kompresja (rzadko) oczywiście najpierw 4.7
Wymiana komunikatów TLS istnieje możliwość wstecznej kompatybilności jednak nie dalej niż SSL v3.0 na pewno nie wolno użyć np. MD5 serwer wybiera najwyższy poziom kompatybilności, która znaja obie strony generuje własna 32-bajtowa liczbę losowa wyszukuje czy zna już zaproponowany identyfikator sesji ID serwer zwraca w server hello wybrany poziom, liczbę losowa oraz pusty ID zgoda wznowienie sesji a serwer nie robi cache-owania po swojej stronie nowy ID nie zna podanego ID i proponuje nowy podany ID rozpoznaje klienta i sesję i jest zgoda na jej wznowienie skrócony handshake następnie wysyła certyfikat (w server hello lub certificate) certyfikat zawiera cała hierarchię podpisów 4.8
Wymiana TLS: client cipher jeśli wraca do klienta inny ID klient kontroluje otrzymany w certificate certyfikat generuja klucze obie strony wysyłaja change cipher spec i kontroluja hasze w i rozpoczyna się wymiana danych 4.9
Komunikaty TLS: efemeryczny handshake KLIENT client Hello SERWER server hello server key exhange certificate server hello done client key exchange change cipher spec change cipher spec application data application data wykorzystuje wymianę kluczy Diffie Hellmana 4.10
Wymiana TLS: client cipher jeśli wraca ten sam ID, to nie ma więcej negocjacji klient wysyła change cipher spec oznaczajacy koniec negocjacji obie strony generuja nowy klucz sesyjny serwer potwierdza i wysyła swój change cipher spec wtedy wymieniaja hasze wszystkich poprzednich komunikatów i dopiero po ich potwierdzeniu rozpoczyna się wymiana na poziomie aplikacji 4.11
Wymiana komunikatów TLS: skrócony handshake KLIENT client Hello SERWER server hello changed cipher spec change cipher spec application data application data 4.12