Współczesna infrastruktura internetowa opiera się na bezpiecznej transmisji danych między klientami a serwerami, a fundamentem tego bezpieczeństwa są algorytmy szyfrujące wdrożone w protokołach SSL/TLS. Protokoły te wykorzystują kombinację algorytmów symetrycznych, asymetrycznych, funkcji haszujących oraz nowoczesnych trybów szyfrowania, aby zapewnić poufność, autentyczność i integralność transmitowanych informacji. SSL/TLS łączy szyfrowanie asymetryczne i symetryczne w celu ustanowienia bezpiecznego połączenia, gdzie asymetryczne algorytmy służą do wymiany kluczy, a symetryczne do szyfrowania danych.

Ta wielowarstwowa architektura kryptograficzna ewoluowała od SSL do obecnych wersji TLS 1.3, eliminując przestarzałe metody i wprowadzając bezpieczniejsze, wydajniejsze algorytmy.

Architektura kryptograficzna SSL/TLS i rola algorytmów szyfrujących

SSL/TLS to standardowe protokoły kryptograficzne zaprojektowane w celu zabezpieczenia komunikacji internetowej przez zapewnienie poufności i integralności transmisji danych. Protokół operuje w warstwie transportowej i umożliwia szyfrowanie protokołów warstwy aplikacji, takich jak HTTP, POP3 czy IMAP.

Podczas nawiązywania połączenia SSL/TLS klient i serwer przeprowadzają handshake, w którym ustalają parametry bezpieczeństwa, w tym zestaw szyfrów, wersję protokołu i klucze sesji.

Najważniejsze komponenty architektury kryptograficznej SSL/TLS są następujące:

  • wymiana kluczy – mechanizm uzgodnienia wspólnego sekretu (np. ECDHE),
  • uwierzytelnianie – potwierdzenie tożsamości za pomocą certyfikatu i podpisu (np. RSA, ECDSA),
  • szyfrowanie – ochrona poufności danych (np. AES-GCM, ChaCha20-Poly1305),
  • funkcje haszujące/KDF – integralność, HMAC/HKDF i pochodne kluczy.

Kluczową koncepcją jest pojęcie zestawu szyfrów (cipher suite), czyli kombinacji algorytmów używanych do wymiany kluczy, uwierzytelniania, szyfrowania i funkcji skrótu. Aby ułatwić dobór i weryfikację, zestaw szyfrów składa się z elementów:

  • wymiana kluczy – np. RSA, DHE, ECDHE;
  • uwierzytelnianie – np. RSA, ECDSA, EdDSA;
  • szyfrowanie – np. AES-128/256-GCM, ChaCha20-Poly1305;
  • funkcja skrótu – np. SHA-256, SHA-384.

Przykład zapisu: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 oznacza ECDHE (wymiana kluczy), RSA (uwierzytelnianie), AES-256-GCM (szyfrowanie) i SHA-384 (funkcje pochodne).

Algorytmy szyfrowania symetrycznego w SSL/TLS

Algorytmy symetryczne stanowią podstawę szyfrowania danych po ustanowieniu kanału. Używają tego samego klucza do szyfrowania i deszyfrowania, dzięki czemu są bardzo wydajne i skalują się do dużych wolumenów ruchu. Problem bezpiecznej wymiany klucza rozwiązuje część asymetryczna handshake’u.

Advanced Encryption Standard, powszechnie znany jako AES, jest najbardziej rozpowszechnionym i zalecanym algorytmem szyfrowania symetrycznego w nowoczesnych implementacjach SSL/TLS. To szyfr blokowy operujący na blokach 128-bitowych, z długościami klucza 128/192/256 bitów (odpowiednio 10/12/14 rund). AES pozostaje uznawany za bezpieczny i jest regularnie audytowany przez społeczność kryptograficzną.

Triple Data Encryption Standard (3DES/TDEA) był istotny historycznie, lecz ma ograniczenia (blok 64-bitowy, ryzyko kolizji przy dużych wolumenach). NIST wyznaczył 3DES do wycofania w 2017 r. i zakazał nowego użycia od końca 2023 r. – w nowoczesnym TLS jest eliminowany.

RC4 – popularny niegdyś szyfr strumieniowy – wykazuje poważne słabości (odchylenia w strumieniu klucza). Badania umożliwiły praktyczne ataki, jak RC4-NOMORE. RFC 7465 zakazuje użycia RC4 w TLS, a jego obsługa jest wyłączona w przeglądarkach i serwerach.

Camellia to szyfr symetryczny o bezpieczeństwie porównywalnym z AES (klucze 128/192/256 bitów), zatwierdzony przez IETF i ISO/IEC. Jest jednak rzadziej używany, głównie jako alternatywa w wybranych jurysdykcjach.

ChaCha20-Poly1305 to nowoczesny algorytm AEAD łączący szyfr strumieniowy ChaCha20 i MAC Poly1305. Używa klucza 256-bitowego i nonce 96-bitowego, generuje znacznik 128-bitowy. Zapewnia świetną wydajność na CPU bez AES-NI, często przewyższając AES-GCM na urządzeniach mobilnych.

Data Encryption Standard (DES) z 56-bitowym kluczem jest dziś całkowicie wycofany z powodu łatwości ataku brute force.

Algorytmy wymiany kluczy i asymetryczne w SSL/TLS

Algorytmy asymetryczne odpowiadają za bezpieczne uzgodnienie sekretów i uwierzytelnianie serwera (i opcjonalnie klienta). Poniżej najczęściej stosowane mechanizmy i ich rola:

  • RSA – klasyczny algorytm oparty na faktoryzacji; używany do podpisów i (historycznie) wymiany kluczy; brak PFS w tradycyjnej wymianie RSA powoduje odchodzenie od tej metody;
  • Diffie–Hellman (DH/DHE) – uzgadnianie klucza przez kanał publiczny; wariant DHE zapewnia efemeryczność i PFS; zalecane grupy ≥ 2048 bitów;
  • ECDH/ECDHE – wersja na krzywych eliptycznych; ECDHE zapewnia PFS i wysoką wydajność przy mniejszych kluczach (np. ECC 256 ≈ RSA 3072); standard w TLS 1.3;
  • ECDSA – podpisy cyfrowe na krzywych eliptycznych; mniejsze klucze i dobra wydajność, powszechnie łączony z ECDHE;
  • EdDSA (Ed25519/Ed448) – nowoczesne, szybkie i odporne na błędy implementacyjne podpisy; deterministyczne, wspierane w TLS 1.3.

Funkcje haszujące i algorytmy uwierzytelniania w SSL/TLS

Funkcje haszujące zapewniają integralność i autentyczność komunikatów oraz służą do pochodnych kluczy. Niewielka zmiana wejścia powinna całkowicie zmieniać skrót, co utrudnia manipulację danymi.

MD5 generuje 128-bitowy skrót, ale jest podatny na szybkie kolizje. RFC 6151 zaleca jego wycofanie; w TLS 1.3 niedozwolony.

SHA-1 (160 bitów) również uznano za niebezpieczny (praktyczne kolizje od 2017 r.). SHA-1 jest zabroniony w TLS 1.3.

SHA-256 (rodzina SHA-2) to domyślny wybór w TLS 1.2 i 1.3, także dla HKDF. Uważany za bezpieczny produkcyjnie.

SHA-384/512 – dłuższe skróty; SHA-384 bywa preferowany w zestawach „high security”, SHA-512 zapewnia najwyższy margines bezpieczeństwa.

SHA-3 oparty na konstrukcji „sponge” nie jest podatny na ataki rozszerzenia długości; rzadziej stosowany w TLS, ale obecny w nowych standardach.

HMAC to uwierzytelnianie wiadomości na bazie funkcji skrótu i tajnego klucza; w TLS 1.2 używany głównie z CBC. W nowoczesnym TLS rolę HMAC przejęły tryby AEAD.

Zestawy szyfrów i kombinacje algorytmów w SSL/TLS

Liczba dostępnych zestawów szyfrów w TLS 1.2 jest duża (setki kombinacji o różnym poziomie bezpieczeństwa). TLS 1.3 znacząco ogranicza zestaw do pięciu pozycji, wszystkie w trybie AEAD:

  • TLS_AES_128_GCM_SHA256 – nowoczesny, szeroko wspierany, korzystna wydajność;
  • TLS_AES_256_GCM_SHA384 – silniejszy skrót i klucz, preferowany dla środowisk o podwyższonych wymaganiach;
  • TLS_CHACHA20_POLY1305_SHA256 – świetny wybór na CPU bez AES-NI i w urządzeniach mobilnych;
  • TLS_AES_128_CCM_SHA256 – alternatywa AEAD, popularna w IoT;
  • TLS_AES_128_CCM_8_SHA256 – wariant z krótszym tagiem, specyficzne zastosowania.

Podczas handshake klient wysyła listę obsługiwanych zestawów szyfrów w preferowanej kolejności, a serwer wybiera wspólną pozycję. Jeśli brak zgodności, handshake nie powiedzie się i połączenie zostanie przerwane.

Tryby szyfrowania blokowego i szyfrowanie uwierzytelnione

Tryby szyfrowania określają, jak szyfr blokowy działa na danych dłuższych niż pojedynczy blok. Poniżej najważniejsze tryby i ich właściwości:

  • Electronic Codebook (ECB) – najprostszy, ale niebezpieczny (ujawnia wzorce); w nowoczesnym TLS nieużywany;
  • Cipher Block Chaining (CBC) – maskuje wzorce, lecz podatny przy błędach IV i dopełnienia; usunięty w TLS 1.3;
  • Galois/Counter Mode (GCM) – AEAD łączący CTR i MAC w GF(2¹²⁸); bardzo szybki z akceleracją AES, z limitami użycia klucza;
  • Counter with CBC-MAC (CCM) – alternatywny tryb AEAD, często w IoT, zwykle gorsza równoległość niż GCM;
  • ChaCha20-Poly1305 – tryb AEAD efektywny bez AES-NI, świetny na platformach mobilnych;
  • AES-GCM-SIV – wariant GCM zwiększający odporność na powtórne użycie nonce dzięki syntetycznemu IV.

Ewolucja algorytmów przez wersje SSL/TLS

Protokoły SSL/TLS przeszły znaczną ewolucję: każda nowa wersja wzmacniała bezpieczeństwo, dodając lepsze algorytmy i eliminując podatne metody. TLS 1.3 to skok jakościowy: AEAD-only, uproszczony handshake (1-RTT) i opcjonalne 0-RTT.

Wersja Wymiana kluczy Szyfrowanie Haszowanie Tryby Notatki
SSL 3.0 RSA, DH DES, 3DES, RC4 MD5, SHA-1 CBC, ECB Całkowicie zdeprecjonowany
TLS 1.0/1.1 RSA, DHE 3DES, AES, RC4 MD5, SHA-1 CBC Przestarzały, wsparcie wyeliminowane
TLS 1.2 RSA, DHE, ECDHE AES, 3DES, RC4, Camellia SHA-1, SHA-256, SHA-384 CBC, GCM, CCM Wciąż bezpieczny, ale TLS 1.3 preferowany
TLS 1.3 ECDHE (wymagane) AES-GCM, ChaCha20-Poly1305, AES-CCM SHA-256, SHA-384 AEAD (wymagane) Nowoczesny, bezpieczny, szybki

Funkcje pochodne kluczy i generowanie kluczy sesji

Funkcje pochodne kluczy (KDF) generują klucze sesji, kody uwierzytelniania i inne materiały kryptograficzne z sekretów uzgodnionych podczas handshake.

W TLS 1.2 i starszych stosowano PRF oparte na HMAC, które z sekretu i danych inicjujących (losowości klienta i serwera) generowało potrzebny materiał kluczowy.

TLS 1.3 wprowadził HKDF (HMAC-based Key Derivation Function), który rozdziela proces na dwie fazy: Extract (redukcja surowego sekretu do PRK) i Expand (rozszerzenie PRK do wymaganej ilości materiału). To modularne podejście upraszcza analizę i zwiększa bezpieczeństwo.

Szyfrowanie uwierzytelnione i zaawansowane tryby AEAD

Szyfrowanie uwierzytelnione (AE/AEAD) łączy poufność i autentyczność w jednej operacji kryptograficznej, redukując złożoność i ryzyko błędów implementacyjnych.

Tryby AEAD rozwiązują typowe problemy kombinacji „szyfrowanie + HMAC”, integrując te funkcje w jednym kroku (np. GCM, CCM, ChaCha20-Poly1305, AES-GCM-SIV). TLS 1.3 wymaga, aby wszystkie zestawy szyfrów były AEAD.

W AEAD uwierzytelnia się także powiązane dane (AD), które nie są szyfrowane (np. nagłówki), ale muszą być chronione przed manipulacją.

Zagrożenia i podatności kryptograficzne

Poniżej zestawienie najważniejszych ataków na SSL/TLS i ich implikacji dla konfiguracji:

  • BEAST – atak na CBC w SSL 3.0 i TLS 1.0; mitigacja: jawny IV w TLS 1.1 oraz migracja do nowszych wersji;
  • POODLE – „padding oracle” wykorzystujący degradację do SSL 3.0; mitigacja: całkowite wyłączenie SSL 3.0 i CBC w starych wersjach;
  • BREACH – atak na kompresję HTTP nad TLS; mitigacja: wyłączenie kompresji w wrażliwych kontekstach, randomizacja sekretów;
  • Sweet32 – atak na szyfry z blokiem 64-bitowym (np. 3DES); mitigacja: wycofanie 3DES;
  • LogJam – atak na DH z małymi grupami; mitigacja: grupy ≥ 2048 bitów lub przejście na ECDHE;
  • D(HE)at – DoS wymuszający kosztowne obliczenia DHE; mitigacja: walidacja parametrów, limity i backoff.

Nowoczesne rekomendacje bezpieczeństwa i najlepsze praktyki

Dla nowych wdrożeń zalecany jest wyłącznie TLS 1.3 i następujące zestawy szyfrów:

  • TLS_AES_256_GCM_SHA384 – preferowany dla środowisk „high security”;
  • TLS_AES_128_GCM_SHA256 – szybki i szeroko wspierany;
  • TLS_CHACHA20_POLY1305_SHA256 – idealny dla urządzeń mobilnych i CPU bez AES-NI.

Dla kompatybilności ze starszymi klientami TLS 1.2 warto włączyć m.in.:

  • TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
  • TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
  • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
  • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
  • TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,
  • TLS_DHE_RSA_WITH_AES_128_GCM_SHA256.

Należy całkowicie wyłączyć następujące algorytmy i konfiguracje:

  • RC4,
  • DES i 3DES,
  • MD5,
  • SHA-1 (dla podpisów),
  • zestawy NULL (bez szyfrowania),
  • zestawy EXPORT (ze słabymi kluczami),
  • wymianę kluczy RSA (na rzecz ECDHE),
  • CBC w nowych wdrożeniach.

Stosuj perfect forward secrecy (PFS) – obowiązkowe w TLS 1.3 i silnie zalecane w TLS 1.2 – aby kompromitacja klucza prywatnego serwera nie umożliwiała odszyfrowania przeszłych sesji.

Kryptografia post-kwantowa i przyszłość SSL/TLS

Komputery kwantowe zagrożą powszechnie używanym algorytmom asymetrycznym (RSA, ECC) poprzez algorytm Shora, dlatego rośnie znaczenie kryptografii post-kwantowej (PQC).

NIST (2022) wybrał CRYSTALS-Kyber (enkapsulacja kluczy) i CRYSTALS-Dilithium (podpisy cyfrowe) jako pierwsze standardy PQC. Trwają prace nad integracją PQC z TLS, w tym mechanizmami hybrydowymi (np. ECDHE+Kyber), łączącymi bezpieczeństwo klasyczne i post-kwantowe.

Wyzwania to m.in. większe obciążenie obliczeniowe, większe rozmiary kluczy i artefaktów, a także interoperacyjność w okresie przejściowym. IETF aktywnie standaryzuje rozszerzenia TLS 1.3 dla PQC.