Transport Layer Security

TLS (ang. Transport Layer Security) – przyjęte jako standard w Internecie rozwinięcie protokołu SSL (ang. Secure Socket Layer), zaprojektowanego pierwotnie przez Netscape Communications. TLS zapewnia poufność i integralność transmisji danych, a także uwierzytelnienie serwera, a niekiedy również klienta. Opiera się na szyfrowaniu asymetrycznym oraz certyfikatach X.509. W sierpniu 2018 r. wprowadzono wersję 1.3 tego protokołu jako aktualną.

Według modelu OSI, TLS działa w warstwie prezentacji, dzięki czemu może zabezpieczać protokoły warstwy najwyższej – warstwy aplikacji, np.: telnet, HTTP, gopher, POP3, IMAP, NNTP, SIP.

SSL – informacje ogólne

W 1994 roku przedsiębiorstwo Netscape stworzyło protokół służący do bezpiecznej transmisji zaszyfrowanego strumienia danych, nazwany SSL (Secure Socket Layer), a już rok później pojawiła się trzecia jego wersja. W 1996 roku Internet Engineering Task Force powołało grupę roboczą pod nazwą Transport Layer Security, której zadaniem było rozwijanie protokołu SSL. W 1999 roku został opublikowany standard TLS 1.0, który jest czasem określany jako SSL 3.1. Całość działa w architekturze klient-serwer, pozwalając na nawiązanie bezpiecznego połączenia z użyciem certyfikatów. Architektura jest zorientowana głównie na uwierzytelnianie serwera (np. sklepu internetowego, do którego klient wysyła numer karty kredytowej i chce mieć pewność co do odbiorcy), ale przewiduje również możliwość uwierzytelniania klienta.

Z powodu ograniczeń w eksporcie technologii kryptograficznych ze Stanów Zjednoczonych, większość implementacji protokołu SSL nie mogła wykorzystywać kluczy symetrycznych dłuższych niż 40 bitów. Dzięki temu rządowe agencje bezpieczeństwa dysponujące odpowiednio dużą mocą obliczeniową (m.in. NSA) były w stanie złamać szyfr metodą brute-force. Po kilku latach publicznej debaty, lepszemu poznaniu dłuższych kluczy przez zainteresowane strony oraz kilku sprawach sądowych, rząd złagodził swoje stanowisko wobec stosowania dłuższych kluczy. Obecnie 40-bitowe klucze wyszły z użycia i zostały zastąpione przez zapewniające wyższe bezpieczeństwo klucze o długości 128 i więcej bitów.

W 2009 w protokole SSL odkryto podatność na atak w procesie renegocjacji sesji. Błąd umożliwiał wysłanie danych do serwera przed użytkownikiem bez jego wiedzy (zobacz: Atak man in the middle). W związku z tym, że podatność dotyczyła protokołu, a nie jednej implementacji, jedyną metodą jej obejścia było wyłączenie możliwości renegocjacji w ogóle. Równocześnie zaproponowana została poprawka do specyfikacji protokołu w postaci rozszerzenia.

Wersje protokołu

Algorytmy szyfrowania

SSL nie jest żadnym nowym algorytmem szyfrującym. To ustandaryzowany zestaw wcześniej znanych algorytmów, technik i schematów używanych do zapewnienia bezpieczeństwa. Wykorzystuje on algorytmy szyfrowania:

SSL jest najczęściej kojarzony z protokołem HTTP (HTTPS), ale może służyć do zabezpieczania wielu innych protokołów, m.in.: Telnet, SMTP, POP3, IMAP czy FTP, gdyż protokoły te same w sobie nie zapewniają szyfrowania transmisji.

SSL składa się z dwóch podprotokołów, gdzie SSL Handshake, SSL Alert Protocol i SSL Change Cipher stanowią pierwszy podprotokół natomiast SSL Record Protocol stanowi osobny podprotokół SSL:


SSL v3 dopuszcza m.in. następujące algorytmy i protokoły: AES, DES, 3DES, IDEA, RC2, RC4, RSA, DSS, Diffiego-Hellmana.

W szyfrowanym kanale transmisji SSL może być przenoszonych wiele sesji HTTP. Dane podczas transmisji są szyfrowane kluczem symetrycznym, jednak na początku sesji sam klucz symetryczny jest uzgadniany przy wykorzystaniu algorytmu niesymetrycznego (RSA, Diffiego-Helmana). Integralność zapewniają podpisy elektroniczne.

Szyfr

Zabezpieczenie szyfru przed publicznie znanymi możliwymi atakami
SzyfrWersja protokołuStatus
Typ Algorytm Nominalna siła (w bitach) SSL 2.0 SSL 3.0
TLS 1.0
TLS 1.1
TLS 1.2
TLS 1.3
Szyfr blokowy
z
Trybem wiązania
AES GCM 256, 128 N/AN/AN/AN/AzabezpieczonezabezpieczoneZdefiniowany dla TLS 1.2 w RFC
AES CCM N/AN/AN/AN/Azabezpieczonezabezpieczone
AES CBC N/Aniezabezpieczonezależy od środków zaradczychzależy od środków zaradczychzależy od środków zaradczychN/A
Camellia GCM 256, 128 N/AN/AN/AN/AzabezpieczoneN/A
Camellia CBC N/Aniezabezpieczonezależy od środków zaradczychzależy od środków zaradczychzależy od środków zaradczychN/A
ARIA GCM 256, 128 N/AN/AN/AN/AzabezpieczoneN/A
ARIA CBC N/AN/Azależy od środków zaradczychzależy od środków zaradczychzależy od środków zaradczychN/A
SEED CBC 128 N/Aniezabezpieczonezależy od środków zaradczychzależy od środków zaradczychzależy od środków zaradczychN/A
3DES EDE CBC 112 niezabezpieczoneniezabezpieczoneniezabezpieczoneniezabezpieczoneniezabezpieczoneN/A
GOST 28147-89 CNT 256 N/AN/AniezabezpieczoneniezabezpieczoneniezabezpieczoneN/Azdefiniowany w RFC 4357 ↓
IDEA CBC 128 niezabezpieczoneniezabezpieczoneniezabezpieczoneniezabezpieczoneN/AN/AUsunięte z TLS 1.2
DES CBC 56 niezabezpieczoneniezabezpieczoneniezabezpieczoneniezabezpieczoneN/AN/A
40 niezabezpieczoneniezabezpieczoneniezabezpieczoneN/AN/AN/Azakazany w TLS 1.1 and later
RC2 CBC 40 niezabezpieczoneniezabezpieczoneniezabezpieczoneN/AN/AN/A
Szyfr strumieniowy ChaCha20-Poly1305 256 N/AN/AN/AN/AzabezpieczonezabezpieczoneZdefiniowany dla TLS 1.2 w RFC
RC4 128 niezabezpieczoneniezabezpieczoneniezabezpieczoneniezabezpieczoneniezabezpieczoneN/AZakazany we wszystkich wersjach TLS przez RFC 7465 ↓
40 niezabezpieczoneniezabezpieczoneniezabezpieczoneN/AN/AN/A
Brak Null – niezabezpieczoneniezabezpieczoneniezabezpieczoneniezabezpieczoneniezabezpieczoneN/AZdefiniowany dla TLS 1.2 w RFC

Certyfikaty

Certyfikaty używane w protokole SSL zawierają m.in. nazwę domeny, dla której zostały wystawione. Ponieważ każda osoba może stworzyć dowolny certyfikat, utworzono tzw. Infrastrukturę Klucza Publicznego. Na jej szczycie znajdują się Urzędy Certyfikacji (Certificate Authority – CA). Są to zaufane instytucje weryfikujące prawo do posługiwania się domeną. Osoba uprawniona wysyła do wybranego urzędu swój klucz publiczny, nazwę domeny i inne dane niezbędne do wygenerowania certyfikatu w postaci żądania podpisania certyfikatu (Certificate Signing Request – CSR). Po przejściu procedury sprawdzającej, certyfikat jest podpisywany. Jeśli serwer przedstawi certyfikat niepodpisany przez CA, w większości przeglądarek i klientów pocztowych w czasie próby połączenia użytkownik zobaczy odpowiednie ostrzeżenie.

Rodzaje certyfikatów

Zasadniczo certyfikaty dzielą się na 3 różne klasy różniące się poziomem weryfikacji:

Długość klucza

Krytycznym parametrem określającym siłę szyfrowania SSL jest długość użytych kluczy. Im dłuższy klucz, tym trudniej jest go złamać, a przez to odszyfrować transmisję. Dla kluczy asymetrycznych, zgodnie z zaleceniami organizacji NIST, długością sugerowaną jest obecnie 2048 bitów. Powszechnie używane są wyrażenia „SSL 128 bitów” lub „SSL 256 bitów” określające długość użytego klucza symetrycznego.

Zasada działania SSL

Schemat działania protokołu wygląda następująco (jako K oznaczamy klienta, a jako S – serwer):

Uwierzytelnianie klienta

Jak widać na schemacie z poprzedniego punktu, w protokole SSL domyślna sytuacja zakłada tylko uwierzytelnianie serwera. Istnieją jednak metody pozwalające na uwierzytelnienie klienta. W tym celu korzysta się z trzech dodatkowych komunikatów:

Odtwarzanie poprzedniej sesji

Nawiązanie połączenia SSL jest procesem dość długotrwałym i wymagającym skomplikowanych obliczeń. W przypadku wielu krótkich połączeń pożądana byłaby możliwość kontynuowania połączenia bez ponownej wymiany kluczy publicznych, ustalania klucza sesji itp. (podobna sytuacja ma miejsce w przypadku protokołu HTTP – stosowane są tam tzw. połączenia trwałe – persistent connections).

Protokół SSL przewiduje taką możliwość. Jeżeli w komunikacie ClientHello klient poda SessionId równy identyfikatorowi jednej z poprzednich sesji, to serwer przyjmie, że klient chce kontynuować połączenie z użyciem poprzednio używanego klucza.

Przypisy

  1. ↑ RFC 8446The Transport Layer Security (TLS) Protocol Version 1.3 (ang.) [dostęp 2121-04-18]
  2. ↑ Dziura w protokołach SSL i TLS. Security Standard, 2009. [dostęp 2009-11-11]. [zarchiwizowane z tego adresu (2009-11-15)].
  3. ↑ SSL/TLS Authentication Gap – Status of Patches. Phone Factor. [zarchiwizowane z tego adresu (2013-05-14)].
  4. ↑ E. Rescorla, M. Ray, S. Dispensa, N. Oskov: Transport Layer Security (TLS) Renegotiation Indication Extension. 2009.
  5. ↑ Marcin Karbowski: Podstawy Kryptografii, wydanie drugie.
  6. 1 2 3 4 Konieczna jest implementacja RFC 5746 ↓ w celu naprawy błędu renegocjacji, który w innym przypadku spowodowałby złamanie tego protokołu.
  7. ↑ Jeśli biblioteki implementują poprawki wymienione w RFC 5746 ↓, narusza to specyfikację SSL 3.0, której IETF nie może zmienić (w przeciwieństwie do TLS). Jednak większość obecnych bibliotek implementuje tę poprawkę i ignoruje powodowane przez nią naruszenie.
  8. 1 2 Tzw. „atak bestii” łamie wszystkie szyfry blokowe (szyfry CBC) wykorzystywane w SSL 3.0 oraz TLS 1.0 (o ile nie zostanie złagodzony przez klienta i/lub serwer).
  9. ↑ Tzw. „atak POODLE” łamie wszystkie szyfry blokowe (szyfry CBC) wykorzystywane w SSL 3.0 (o ile nie zostanie złagodzony przez klienta i/lub serwer).
  10. ↑ RFC 5288 5289 ↓
  11. 1 2 3 4 5 Szyfry z rodziny AEAD, takie jak GCM oraz CCM) mogą być używane tylko w TLS w wersji 1.2 oraz późniejszych.
  12. ↑ RFC 6655 7251 ↓
  13. 1 2 3 4 5 6 7 8 Szyfry CBC są podatne na tzw. „Lucky Thirteen attack”, jeśli biblioteka nie zostanie zaimplementowana starannie w celu uniknięcia ataków kanałami bocznymi.
  14. ↑ RFC 6367 ↓
  15. ↑ RFC 5932 6367 ↓
  16. 1 2 RFC 6209 ↓
  17. ↑ RFC 4162 ↓
  18. 1 2 3 4 5 On the Practical (In-)Security of 64-bit Block Ciphers — Collision Attacks on HTTP over TLS and OpenVPN. 2016-10-28. [dostęp 2017-06-08]. [zarchiwizowane z tego adresu (2017-04-24)]. (ang.).
  19. ↑ Atak Sweet32 łamie szyfry blokowe o rozmiarze bloku 64 bitów.
  20. ↑ NIST Special Publication 800-57 Recommendation for Key Management — Part 1: General (Revised). 2007-03-08. [dostęp 2014-07-03]. [zarchiwizowane z tego adresu (6 czerwca 2014)].
  21. ↑ Qualys SSL Labs: SSL/TLS Deployment Best Practices. [dostęp 2015-06-02]. [zarchiwizowane z tego adresu (4 lipca 2015)].
  22. ↑ Pomimo że długość klucza 3DES wynosi 168 bitów, efektywna siła tego algorytmu wynosi tylko 112 bitów, co jest wartością poniżej rekomendowanej minimalnej długości - 128 bitów.
  23. ↑ draft-chudov-cryptopro-cptls-04 – GOST 28147-89 Cipher Suites for Transport Layer Security (TLS)
  24. 1 2 IDEA oraz DES zostały usunięte z TLS 1.2.
  25. ↑ RFC 5469 ↓
  26. 1 2 3 40-bitowe zestawy szyfrów zostały celowo zaprojektowane ze zmniejszoną długością klucza, aby zachować zgodność z amerykańskimi przepisami zakazującymi eksportu oprogramowania kryptograficznego zawierającego pewne silne algorytmy szyfrowania (patrz Eksport kryptografii ze Stanów Zjednoczonych). Te słabe zestawy algorytmów zostały zakazane w TLS w wersji 1.1 oraz późniejszych.
  27. ↑ RFC 7905 ↓
  28. ↑ Wykorzystanie RC4 we wszystkich wersjach TLS jest zabronione przez RFC 7465 ↓, gdyż ataki na RC4 osłabiają bądź zupełnie łamią RC4, używany w SSL/TLS.
  29. ↑ Brak szyfrowania, tylko uwierzytelnianie.
  30. ↑ Krystian Grabianowski, Protokół HTTP i HTTPS – podstawowe różnice [online], Blog widzialni.pl - pozycjonowanie i SEO, 19 grudnia 2018 [dostęp 2020-07-10] (pol.).

Linki zewnętrzne