Bezpieczeństwo

Szyfrowanie Sieciowe

Algorytmy szyfrowania, zarządzanie kluczami i protokoły bezpiecznej komunikacji.

Szyfrowanie danych w sieciach

Ruch sieciowy przechodzi przez wiele urządzeń i łączy, które nie należą do nadawcy ani odbiorcy. Bez ochrony obserwator może odczytać treść komunikacji, a modyfikacja wiadomości może pozostać niewykryta. Hasła, dane płatnicze i dokumenty przesyłane przez aplikacje wymagają mechanizmu ograniczającego dostęp do treści. Połączenia HTTPS, tunele VPN i komunikatory mogą stosować szyfrowanie, lecz zakres ochrony zależy od protokołu oraz jego konfiguracji. Znaczenie ma także miejsce szyfrowania: dane zapisane przed wysłaniem oraz treść dostępna po odszyfrowaniu na hoście pozostają poza ochroną odcinka do serwera.

to mechanizm, który zmienia tekst jawny w szyfrogram przy użyciu algorytmu i klucza. Odbiorca posiadający właściwy klucz odtwarza tekst jawny. Szyfrowanie zapewnia poufność treści, a protokoły używające uwierzytelnionego szyfrowania mogą również wykrywać modyfikacje. Samo szyfrowanie nie potwierdza tożsamości serwera, nie ukrywa wszystkich metadanych i nie chroni danych po odszyfrowaniu przez aplikację. Integralność oraz uwierzytelnienie uzyskuje się przez podpis, kod uwierzytelniający albo tryb AEAD, zależnie od protokołu. Prawidłowy klucz musi być związany z właściwą stroną, ponieważ poufność bez uwierzytelnienia może pozwolić na atak pośrednika. Wymiana klucza, weryfikacja certyfikatu i ochrona rekordów są odrębnymi etapami. Błąd w jednym etapie może pozostać niewidoczny dla samego szyfru, dlatego konfigurację sprawdza się razem z implementacją protokołu, magazynem kluczy i logami błędów.

Podstawowe pojęcia kryptografii

Przed wyborem algorytmu trzeba rozróżnić dane wejściowe, procedurę, klucz i zbiór możliwych kluczy. Te pojęcia opisują, co chroni system i gdzie powstaje ryzyko. W praktycznym protokole trzeba jeszcze ocenić sposób uwierzytelnienia, generowanie liczb losowych, format rekordów oraz reakcję na błąd weryfikacji.

  • Tekst jawny i szyfrogram: Oryginalna, czytelna wiadomość jest tekstem jawnym. Po zastosowaniu algorytmu szyfrowania powstaje szyfrogram, który bez właściwego klucza powinien pozostawać nieczytelny. Poufność zależy od tajności klucza oraz poprawnej implementacji całego protokołu.
  • Algorytm (szyfr): Jest to matematyczna procedura używana do przekształcania tekstu jawnego w szyfrogram i odwrotnie. Algorytm może być publicznie opisany. Bezpieczeństwo systemu zależy od jego właściwości, parametrów, implementacji oraz ochrony kluczy. Ukrywanie procedury nie zastępuje tych mechanizmów.
  • Klucz: To informacja sterująca działaniem algorytmu podczas szyfrowania i deszyfrowania, często reprezentowana jako ciąg bitów. Klucz nie jest tym samym co hasło. Musi być generowany, przekazywany i przechowywany zgodnie z zasadami zarządzania kluczami, ponieważ jego ujawnienie pozwala odczytać chronione dane.
  • Przestrzeń kluczy: Oznacza całkowitą liczbę kluczy dopuszczanych przez algorytm. Jej rozmiar określa koszt pełnego przeszukiwania metodą brute force, lecz bezpieczeństwo zależy także od konstrukcji szyfru i generatora losowego. Dla klucza o długości 8 bitów istnieje 282^8 (256) możliwości. Standardy i biblioteki stosują między innymi klucze 128, 192 lub 256-bitowe. Przestrzeń klucza 128-bitowego zawiera 21282^{128} możliwości, dlatego pełne przeszukiwanie nie jest praktyczną metodą ataku przy poprawnej implementacji.

Szyfrowanie symetryczne i asymetryczne

Systemy szyfrowania dzielą się na podejścia symetryczne i asymetryczne. Różnica dotyczy sposobu użycia kluczy, kosztu obliczeń oraz dystrybucji sekretu. W wielu protokołach obie techniki występują w jednym połączeniu: mechanizm publiczny uwierzytelnia stronę lub uzgadnia sekret, a szyfr symetryczny chroni kolejne rekordy.

Szyfrowanie symetryczne

używa tego samego tajnego klucza do szyfrowania i deszyfrowania. Szyfry symetryczne są przeznaczone do ochrony dużych strumieni danych, ponieważ operacje na blokach lub strumieniach wymagają mniej zasobów niż operacje z kluczami publicznymi. Wybrany tryb określa sposób przetwarzania bloków oraz użycia nonce lub wektora inicjalizującego. Tryby AEAD zapewniają także sprawdzanie integralności. Błąd ponownego użycia nonce może osłabić ochronę nawet przy silnym algorytmie.

Obie strony muszą otrzymać ten sam sekret przed rozpoczęciem wymiany danych. Kanał użyty do przekazania klucza musi chronić go przed odczytem i podmianą. W większej sieci dystrybucja odrębnego sekretu dla każdej pary stron szybko zwiększa liczbę kluczy i wymaga centralnego zarządzania.

  • Zaleta: Szyfry symetryczne szybko przetwarzają duże ilości danych przy małym narzucie obliczeniowym. Z tego powodu stosuje się je do ochrony strumieni podczas pobierania pliku, transmisji głosu i wideokonferencji.
  • Wada (problem wymiany kluczy): Obie strony muszą uzgodnić wspólny sekret, zanim rozpoczną komunikację. Przekazanie klucza przez kanał bez ochrony pozwala przechwycić go osobie podsłuchującej. Protokół potrzebuje więc bezpiecznej dystrybucji lub mechanizmu uzgodnienia klucza.
  • Przykłady: Do szyfrów symetrycznych należą AES (Advanced Encryption Standard), przestarzały DES (Data Encryption Standard) oraz szyfr strumieniowy ChaCha20.

Szyfrowanie asymetryczne

wykorzystuje parę matematycznie powiązanych kluczy. Kryptografia klucza publicznego została opisana w latach 70. i pozwala oddzielić publikowanie klucza od ochrony klucza prywatnego. W uzgadnianiu Diffie-Hellmana klucze publiczne służą do obliczenia wspólnego sekretu, lecz same nie ujawniają wartości prywatnych. Certyfikat i łańcuch zaufania wiążą klucz z nazwą podmiotu. Weryfikacja nazwy, okresu ważności i statusu certyfikatu należy do konfiguracji klienta. Klient powinien też odrzucać nieobsługiwane wersje protokołu i zestawy szyfrów.

Klucz publiczny można udostępnić wielu odbiorcom. Klucz prywatny pozostaje po stronie właściciela i służy do odszyfrowania danych przeznaczonych dla właściciela. Ta sama para może służyć do podpisu cyfrowego, w którym weryfikacja używa klucza publicznego.

  • Klucz publiczny: Można go opublikować i użyć do zaszyfrowania wiadomości dla właściciela. Odbiorca musi jednak sprawdzić, czy otrzymany klucz rzeczywiście należy do wskazanej strony.
  • Klucz prywatny: Jest przechowywany przez właściciela i umożliwia odszyfrowanie danych związanych z jego kluczem publicznym. Ujawnienie klucza prywatnego podważa poufność oraz podpisy utworzone tym kluczem.
  • Zaleta: Publikowanie klucza publicznego upraszcza dystrybucję, a certyfikaty i PKI mogą wiązać klucz z tożsamością. Odbiorca zachowuje klucz prywatny po swojej stronie.
  • Wada: Operacje asymetryczne wymagają więcej zasobów niż szyfrowanie symetryczne. Dlatego używa się ich do uwierzytelniania i uzgadniania sekretu, a duże strumienie danych chroni się później szyfrem symetrycznym.
  • Przykłady: Do algorytmów asymetrycznych należą RSA (nazwa pochodzi od Rivesta, Shamira i Adlemana) oraz ECC (kryptografia krzywych eliptycznych). Krzywe eliptyczne zapewniają porównywalny poziom bezpieczeństwa przy krótszych kluczach niż klasyczne systemy oparte na RSA.

Protokoły hybrydowe

TLS używany w HTTPS oraz IPsec łączą uwierzytelnianie lub uzgadnianie klucza z symetryczną ochroną danych. Rozdzielenie funkcji ogranicza koszt operacji asymetrycznych i pozwala chronić długie strumienie danych szyfrem AEAD. W TLS 1.3 handshake ustala parametry i sekrety, a rekordy aplikacyjne korzystają z kluczy wyprowadzonych przez HKDF. Klucze dla kierunku do klienta i do serwera są rozdzielone.

W uproszczonym przebiegu TLS 1.3:

  1. Przeglądarka rozpoczyna połączenie, a serwer przedstawia certyfikat i parametry uzgadniania. Certyfikat zawiera klucz publiczny używany do weryfikacji tożsamości serwera.
  2. Strony uzgadniają sekret za pomocą efemerycznego mechanizmu Diffie-Hellmana, na przykład ECDHE. W TLS 1.3 nie jest to wysłanie gotowego klucza sesji zaszyfrowanego kluczem publicznym serwera.
  3. Serwer podpisuje część uzgodnienia. Przeglądarka sprawdza podpis oraz łańcuch certyfikatów, zanim zaakceptuje tożsamość serwera.
  4. Obie strony wyprowadzają z uzgodnionego sekretu niezależne klucze ruchu dla obu kierunków transmisji.
  5. Przez resztę sesji używają szyfru symetrycznego AEAD, takiego jak AES-GCM lub ChaCha20-Poly1305, do ochrony treści i integralności rekordów.

Protokół hybrydowy łączy uwierzytelnianie i uzgadnianie sekretu z wydajną ochroną danych. TLS 1.3 definiuje taki przebieg w aktualnej specyfikacji protokołu. Warstwa rekordów wykrywa modyfikacje przed dostarczeniem tekstu jawnego. Implementacja powinna ograniczać wersje protokołu, wybierać zatwierdzone zestawy AEAD, sprawdzać nazwy certyfikatów i obsługiwać kompromitację kluczy procedurami operacyjnymi.

Algorytmy szyfrujące i tryby działania

Szyfry blokowe i tryby działania

Algorytmy symetryczne, takie jak AES, są znane jako szyfry blokowe. Oznacza to, że działają na blokach danych o stałym rozmiarze. AES, na przykład, operuje na blokach 128-bitowych (16 bajtów). Większa wiadomość jest przetwarzana jako sekwencja takich bloków zgodnie z wybranym trybem, który określa sposób ich łączenia.

Szyfrowanie każdego bloku niezależnie tym samym kluczem ujawnia powtarzające się wzorce. Identyczne bloki tekstu jawnego dają wtedy identyczne bloki szyfrogramu. Szyfry blokowe stosuje się więc w trybach działania, które określają sposób łączenia bloków, użycia wektora inicjalizującego i ochrony integralności. Parametry inicjalizujące nie muszą być tajne, lecz wymagają właściwej unikalności albo losowości zgodnie z wymaganiami trybu:

  • Cipher Block Chaining (CBC): Przed szyfrowaniem blok tekstu jawnego jest łączony operacją XOR z poprzednim szyfrogramem. Pierwszy blok wymaga wektora inicjalizującego. CBC ukrywa wzorce, lecz sam nie zapewnia uwierzytelnienia ani ochrony przed modyfikacją, dlatego potrzebuje osobnego mechanizmu integralności.
  • Galois/Counter Mode (GCM): GCM używa licznika i wymaga nonce, który nie powtarza się dla danego klucza. Jest trybem AEAD, więc szyfruje dane oraz oblicza znacznik uwierzytelniający. Odbiorca odrzuca rekord po nieudanej weryfikacji znacznika. TLS 1.3 używa szyfrów AEAD, w tym AES-GCM.

Zarządzanie kluczami

obejmuje cały cykl życia klucza. NIST uwzględnia w nim generowanie, dystrybucję, użycie, ochronę, rotację, unieważnienie i niszczenie. Błąd w którymkolwiek z tych etapów może osłabić ochronę zapewnianą przez algorytm. Polityka powinna wskazywać właściciela klucza, dozwolone zastosowanie, poziom ochrony, procedurę odzyskania oraz sposób postępowania po podejrzeniu kompromitacji.

Najważniejsze etapy to:

  • Generowanie: Klucz wymaga generatora losowego odpowiedniego dla zastosowania kryptograficznego. Przewidywalny generator może pozwolić odtworzyć klucz bez łamania szyfru.
  • Dystrybucja: Klucz powinien trafić do właściwej strony z ochroną przed odczytem i podmianą. W tym celu stosuje się między innymi uzgadnianie klucza, certyfikaty i PKI.
  • Przechowywanie: Dostęp do kluczy ogranicza się uprawnieniami, a użycie można rejestrować. W środowiskach o wysokim poziomie bezpieczeństwa HSM chroni klucze przed bezpośrednim odczytem.
  • Czas życia i rotacja: Polityka określa czas użycia, zmianę klucza i sposób unieważnienia po podejrzeniu ujawnienia. Rotacja ogranicza zakres danych zależnych od jednego klucza. Harmonogram powinien uwzględniać kopie zapasowe, klucze zapasowe, certyfikaty oraz możliwość odtworzenia usługi.

Perfect Forward Secrecy i poufność poprzednich sesji

W protokołach z PFS każda sesja korzysta z efemerycznego uzgodnienia klucza. Późniejsze ujawnienie długoterminowego klucza uwierzytelniającego nie pozwala wtedy odtworzyć sekretów użytych w zakończonej sesji. Właściwość dotyczy zakończonych sesji, które faktycznie użyły efemerycznego uzgodnienia i nie zachowały wymaganych sekretów. Nie chroni przed przejęciem punktu końcowego podczas aktywnego połączenia.

wynika z efemerycznej wymiany Diffie-Hellmana, takiej jak DHE lub ECDHE. Klucz długoterminowy służy do uwierzytelnienia uzgodnienia, a efemeryczny sekret służy do wyprowadzenia kluczy ruchu. Po zakończeniu sesji usunięcie sekretów efemerycznych utrudnia odtworzenie zapisanych danych po późniejszym ujawnieniu klucza serwera. PFS nie zastępuje ochrony punktów końcowych ani poprawnej konfiguracji protokołu. Weryfikacja certyfikatu pozostaje osobnym warunkiem poprawnego uwierzytelnienia serwera. Wznowienie sesji i przechowywane bilety wymagają osobnej polityki uwzględniającej ich sekrety oraz czas przechowywania.

Powiązane artykuły