Metody kryptograficzne stosowane w PKI

Daniel Rychcik
14-04-2001

0. Wstęp

Dokument ten opisuje zasady działania podstawowych metod kryptograficznych stosowanych w obrębie protokołu SSL i infrastruktury kluczy publicznych (PKI)

1. Kryptografia kluczy prywatnych

Ten sposób szyfrowania danych (zwany również kryptografią symetryczną lub kryptografią z kluczem tajnym) znany jest od dawna. Najprostsze jego rodzaje to szyfry oparte o przestawianie liter według pewnego, z góry ustalonego schematu. Dane szyfrowane były w ten sposób już w starożytności - np. Juliusz Cezar używał szyfru opartego na tym schemacie do przekazywania rozkazów swoim odległym oddziałom.

Ogólny schemat wszystkich tego typu algorytmów jest następujący:

  • Strony uzgadniają klucz(e) służące do szyfrowania/deszyfrowania danych
    (Najczęściej ten sam klucz służy zarówno do szyfrowania jak i deszyfrowania, ale nie jest to regułą)
  • W późniejszym czasie strony używają uzgodnionych kluczy do wymiany danych, ewentualnie zmieniając je co jakiś czas.

Bardziej zaawansowane szyfry symetryczne używane dzisiaj opierają się na manipulacji bitami danych. Najbardziej znany algorytm to DES używany m.in. do szyfrowania haseł w systemach UNIX-owych. Używa on skomplikowanych operacji na bitach danych, których kolejność i rodzaj zależy właśnie od bitów klucza. Inne znane algorytmy symetryczne to 3DES (mocniejsza wariacja DES), RC2 i RC4.

Największą zaletą algorytmów symetrycznych jest ich szybkość - odpowiednio stosowane, mogą tylko nieznacznie zmniejszać przepustowość kanału transmisyjnego.

2. Kryptografia kluczy publicznych

Odkrycia matematyczne drugiej połowy XX wieku umożliwiły powstanie kryptografii opartej o klucze publiczne. Podstawową wadą szyfrów symetrycznych jest bowiem konieczność uzgodnienia a priori tajnych kluczy używanych do wymiany danych. Często stawia to pod znakiem zapytania cały sens operacji, jeżeli np. strony znajdują się w dużym oddaleniu od siebie i potrzebują przesłać pilne dane.

Taka sytuacja wprowadzała poza tym problem związany z tajnością kluczy. Aby bowiem dwie strony mogły uzgodnić ze sobą tajne klucze, musiały najpierw przesłać je sobie drogą tajną - ale jak przesłać zaszyfrowane klucze nie mając kluczy używanych do szyfrowania ?...

Kryptografia kluczy publicznych zwana także kryptografią asymetryczną zakłada, że każda transmisja danych używa dwóch kluczy. Jeden z nich, klucz prywatny znany jest tylko jednej stronie, zaś drugi, klucz publiczny nie musi być tajny - jest on powszechnie dostępny i umożliwia przykładowo wysyłanie zaszyfrowanych informacji do właściciela klucza prywatnego.

Kryptografia asymetryczna ma tą własność, że cokolwiek zostało zaszyfrowane kluczem prywatnym może zostać odszyfrowane wyłącznie kluczem publicznym i odwrotnie: dane zaszyfrowane kluczem publicznym może odszyfrować tylko właściciel klucza prywatnego!

Matematyczne podstawy kryptografii asymetrycznej są oparte o "problemy asymetryczne", czyli takie, które jest o wiele łatwiej wymyśleć, niż rozwiązać. Typowy przykład to faktoryzacja liczb: łatwo jest pomnożyć przez siebie kilka liczb pierwszych, natomiast rozkład iloczynu na czynniki pierwsze jest już dużym problemem obliczeniowym. W przypadku naprawdę dużych liczb pierwszych problem jest praktycznie nierozwiązalny - właśnie taki schemat stosuje się w algorytmach asymetrycznych.

Najbardziej znany przykład algorytmu stosującego klucze publiczne to RSA stosowany np. w systemie bezpiecznej poczty PGP.

Jak widać kryptografia asymetryczna likwiduje wszystkie wady kryptografii symetrycznej. Jest to właściwie rozwiązania doskonałe, które ma tylko jedną wadę: szybkość. O ile algorytmy symetryczne (zwłaszcza blokow) doskonale nadają się do szyfrowania "w locie", lub nawet implementacji sprzętowej, to złożoność obliczeniowa szyfrowania/deszyfrowania danych z użyciem kluczy publicznych raczej wyklucza takie zastosowania.

Próbą połączenia najlepszych cech obydwu metod szyfrowania jest

3. Metoda mieszana

Kluczową obserwacją dla tej metody jest fakt, że niedogodność algorytmów symetrycznych nie polega na ich "słabości" - dobierając odpowiednio długi klucz możemy uzyskać zabezpieczenie właściwie dowolnie "silne". Problemem jest tylko uzgodnienie tych kluczy. Za to algorytmy symetryczne są o wiele szybsze.

Wymyślono więc następujący schemat bezpiecznego przesyłania danych:
(Zakładamy, że strony są już w posiadaniu swoich kluczy publicznych używanych w algorytmie asymetrycznym)

  • A generuje klucz K który będzie używany później przy przesyłaniu danych algorytmem symetrycznym
  • A wysyła klucz K do B szyfrując go kluczem publicznym B
  • B deszyfruje klucz K swoim kluczem prywatnym
  • Strony dalej komunikują się korzystając z szyfrowania symetrycznego z użyciem klucza K

Możliwe są różne wariacje tej metody umożliwiające na przykład:

  • Autentyfikację klienta/serwera:
    Można to zrealizować na etapie nawiązywania połączenia - właściwie sytuacja jest tu taka, jakby używany był tylko algorytm asymetryczny.
  • Okresową wymianę kluczy
    Strony mogą się umówić, że przykładowo co 15 minut niszczą i od nowa generują klucze symetryczne. Może to być ważne przy połączenia trwających wiele czasu i takich, po których przesyła się niewiele danych. Ktoś posiadający odpowiednio szybki komputer i będący w stanie podsłuchać szyfrowaną transmisję mógłby pokusić się wtedy o złamanie klucza.

4. Funkcje skrótu

Opisane dotąd metody działają lepiej lub gorzej w przypadku szyfrowania danych przesyłanych w sieci. Nie sprawdzają się jednak dobrze w sytuacji, w której mamy wygenerować tylko podpis pewnej porcji danych - konieczne jest w takiej sytuacji zaszyfrowanie całego dokumentu kluczem prywatnym, co jest operacją czasochłonną.

Aby temu zapobiec stosuje się funkcje skrótu (message digest). Działają one w ten sposób, że dla komunikatu o dużej długości liczona jest wartość (znacznie krótsza - coś na zasadzie sumy kontrolnej) pewnej funkcji i dopiero wynik tej funkcji jest szyfrowany przy użyciu algorytmu asymetrycznego.

Oczywiście nie można zagwarantować, że funkcja przekształcająca kilkunastoklilobajtowy komunikat w kilkudziesięciobajtowy skrót będzie różnowartościowa, jednak funkcje skrótu są tak dobrane, że prawdopodobieństwo przypadkowego skonstruowania dwóch komunikatów o tej samej wartości funkcji jest pomijalne.

5. Schematy stosowania algorytmów

W poniższych schematach będę stosował standardową konwencję stosowaną w książkach o kryptografii: ustalmy, że Alice i Bob to dwie osoby chcące się bezpiecznie komunikować, Charles zaś, to intruz chcący im w tym przeszkodzić.

5.1. Bezpieczne przesyłanie danych

Tu sytuacja jest klasyczna i najlepiej opisana. Załóżmy, że Alice chce przesłać poufne informacje do Boba i chce, żeby Charles nie mógł ich odczytać nawet, jeśli przechwyci wiadomość. Schemat postępowania jest następujący:

  • Bob generuje parę kluczy i umieszcza klucz publiczny w dostępnym miejscu
  • Alice pobiera klucz publiczny Boba
  • Alice szyfruje dane kluczem publicznym Boba i wysyła mu pocztą.
  • Dane są bezpieczne! Tylko Bob może je rozszyfrować (swoim kluczem prywatnym) - nawet Alice nie może tego zrobić, jeśli nie posiada oryginalnych danych! Zatem nawet jeżeli Charles będzie w stanie przechwycić list, to wiele się z niego nie dowie.

Oczywiście pojawia się pewien problem: skąd wiadomo, że Charles nie wygenerował sobie własnej pary kluczy, nie podpisał klucza publicznego jako "klucz Boba" i nie umieścił w publicznie dostępnym miejscu? Rozwiązaniem jest w tym momencie założenie, że Alice i Bob ufają pewnej ważnej instrytucji, która przechowuje klucze prywatne i zapewnia, że należą one rzeczywiście do tych osób, których imionami są podpisane.

(Ta instytucja to właśnie Certificate Authority z naszego projektu :-)

5.2. Podpisywanie wiadomości.

Załóżmy tym razem, że Alice chce przesłać Bobowi ważną informację, która co prawda nie musi pozostać tajna, ale ważne jest, aby Bob wiedział, że pochodzi rzeczywiście od Alice, a nie np. od Charlesa. Co robimy w takiej sytuacji? (zakładamy, że obie strony mają już swoje klucze publiczne)

  • Alice szyfruje komunikat swoim kluczem prywatnym
  • Bob deszyfruje otrzymany komunikat kluczem publicznym Alice
  • W tym momencie Bob ma pewność, że dane pochodzą od Alice - tylko ona mogła je zaszyfrować tak, że dały się odszyfrować jej kluczem publicznym!

Pewną wersją tej metody jest użycie funkcji skrótu. Schemat wygląda wtedy następująco:

  • Alice oblicza funkcję skrótu dla komunikatu
  • Alice szyfruje wynik swoim kluczem prywatnym i dołącza do przesyłki
  • Bob oblicza analogiczną funkcję skrótu dla przesyłki
  • Bob dekoduje załączony skrót kluczem publicznym Alice
  • deszyfruje otrzymany komunikat kluczem publicznym Alice
  • Jeżeli wyniki się zgadzają, to Bob ma (prawie*) pewność, że dane pochodzą od Alice!

(*) prawie - ponieważ funkcja skrótu teoretycznie nie jest różnowartościowa. W praktyce jest to niewielki problem

Podpis cyfrowy dokonany tą drogą może być uważany za ekwiwalent podpisu "prawdziwego" - Alice nie może się wyprzeć, że podpisała wiadomość, ponieważ tylko właściciel jej klucza prywatnego mógł to zrobić!

Szczególnym przypadkiem podpisywania wiadomości jest

5.3. Autentyfikacja partnera

Polega ona na tym, że wysyłamy partnerowi krótki losowy komunikat i prosimy o podpisanie jego kluczem prywatnym. Jeżeli będziemy w stanie rozszyfrować odpowiedź jego kluczem publicznym (i wynik będzie zgodny z oryginałem), to znaczy, że autentyfikacja się powiodła.