VIII. Wprowadzenie do kryptografii

1. Wprowadzenie

Jak pamiętamy bezpieczne oprogramowanie powinno zapewnić: Poza wymienionymi cechami od bezpiecznego oprogramowania wymaga się czasami również zapewnienia prywatności (privacy), czyli możliwość sprawowania przez podmiot kontroli nad informacją dotyczącą jego samego.

2. Prymitywy kryptograficzne

Poufność, spójność, prywatność i niezaprzeczalność są w oprogramowaniu realizowana za pomocą mechanizmów kryptograficznych. Podstawowym pojęciem występującym w kryptografii jest tzw. prymityw kryptograficzny.

Wyróżniamy trzy podstawowe rodzaje prymitywów kryptograficznych:

Z kolei algorytmy szyfrowania dzielimy na:

2.1 Algorytmy symetryczne

O algorytmie symetrycznym możemy w ogólności mówić, jeśli znając jeden z pary kluczy (zasadniczo chodzi tutaj o klucz szyfrujący) można w sposób „łatwy” (ang. in a computionally feasible manner) ustalić odpowiadający mu klucz wykorzystywany w trakcie operacji odwrotnej. Powyższy warunek implikuje konieczność utrzymywania obydwu kluczy w tajemnicy – stąd nazwa klucz tajny (secret key). W wykorzystywanych praktycznie algorytmach klucz szyfrujący jest tożsamy z kluczem deszyfrującym.

Istnieją dwa rodzaje algorytmów symetrycznych:

2.1.1 Szyfry blokowe

Zasada działania szyfrów blokowych polega na podziale wiadomości na bloki o odpowiedniej długości, po czym wykonaniu operacji kryptograficznych na każdym takiego bloku z osobna. Jeśli ostatni fragment wiadomości jest zbyt krótki, by wypełnić cały blok jest odpowiednio uzupełniany (padded).

Do podstawowych (atomowych) operacji wykonywanych na bloku zaliczamy:

Żaden z wymienionych typów operacji nie ma najmniejszych szans na efektywne praktyczne zastosowanie. Powszechnie znane algorytmy blokowe stanowią kompozycję atomowych operacji zapewniając w ten sposób wysoki poziom bezpieczeństwa – są to tzw. szyfry złożone. W szyfrach złożonych bardzo często operacje atomowe grupuje się w pary: podstawienie + przestawianie tworząc tzw. rundę (round) – wykorzystywane współcześnie szyfry blokowe wykorzystują wiele rund w celu zaszyfrowania bloku. Zadaniem podstawienia w każdej rundzie jest utrudnienie wychwycenia związku między kluczem a wynikowym szyfrogramem, natomiast przestawianie powoduje rozproszenie informacji statystycznej.

Do szyfrów blokowych zaliczają się najpowszechniej stosowane algorytmy szyfrowania symetrycznego: (1) Data Encryption Standard (DES), (2) Triple DES, (3) Rijandel – Advanced Encryption Standard (AES) – następca DES, (4) IDEA, (5) Blowfish, (6) RC2, i inne.

2.1.2 Szyfry strumieniowe

Szyfry strumieniowe to tak naprawdę szyfry blokowe o długości bloku równej jeden znak. Zasadnicza różnica, a jednocześnie siła szyfrów strumieniowych polega na tym, że każdy kolejny znak może być poddany innemu przekształceniu przy użyciu innego klucza. Wykorzystywane praktycznie szyfry strumieniowe stosują bardzo proste przekstałcenia w oparciu o ciąg jednoznakowych kluczy – strumień kluczy (keystream).

Strumień kluczy może być generowany przez generator liczb losowych tworząc tym samym jedyny znany szyfr, o którym wiadomo na pewno, że jest niemożliwy do złamania – tzw. szyfr jednokrotny (one-time pad). Prosta suma modulo 2 (XOR) znaku wiadomości i klucza, czyli tzw. Vernam Cipher był z powodzeniem wykorzystywany w komunikacji radzieckiej siatki szpiegowskiej działającej w Stanach Zjednoczonych w latach 40-tych ubiegłego wieku.

2.2 Kryptosystemy asymetryczne

Koncepcja kryptosystemów asymetrycznych jest oparta na założeniu, że pełne wykorzystanie wszystkich mechanizmów kryptograficznych jest możliwe przy utajnieniu klucza deszyfrującego oraz wszelkich informacji, które mogłyby „ułatwić” jego ustalenie. W stosunku do wszystkich pozostałych elementów – zwłaszcza algorytmów – wykorzystywanych w trakcie operacji kryptograficznych powinno być przyjęte założenie, że są one powszechnie dostępne.

Praktyka stosowania kryptografii dowiodła, że utrzymanie informacji w tajemnicy jest zadaniem wyjątkowo trudnym. Dlatego, aby w stopniu akceptowalnym być pewnym, że informacja pozostaje niedostępna dla osób do tego niepowołanych należy:

  1. Dokonywać okresowej zmiany zabezpieczenia zmniejszając w ten sposób prawdopodobieństwo ewentualnego jego złamania (compromising);
  2. Bezzwłocznie przeprowadzać zmianę zabezpieczenia w momencie wykrycia jego naruszenia;
  3. Ograniczyć informację decydującą o zapewnieniu poufności danych do niezbędnego minimum oraz przechowywać ją w możliwie najmniejszej liczbie miejsc.
W ogólności o algorytmie asymetrycznym możemy mówić, jeśli dla każdej pary odpowiadających sobie kluczy szyfrującego i deszyfrującego jest obliczeniowo „niewykonalne” (computionally unfeasible) ustalenie klucza deszyfrującego w oparciu o klucz szyfrujący. Funkcja szyfrująca w kryptosystemie asymetrycznym to w języku kryptografii „funkcja jednostronna z oknem wyłazowym” (trapdoor one-way function), w której wspomniane „okno wyłazowe” stanowi klucz deszyfrujący.

Najpowszechniej wykorzystywanym w praktyce algorytmem asymetrycznym jest RSA, który wziął swoją nazwę od pierwszych liter twórców: Ronalda Rivesta, Adiego Shamira oraz Leonarda Adlemana. Bezpieczeństwo algorytmu RSA jest oparte o problem faktoryzacji (rozkładu na czynniki pierwsze).

2.3 Funkcje skrótu

Jednokierunkowe funkcje skrótu (one-way hash functions) to funkcje, które w wyniku otrzymania na wejściu „długiego” ciągu znaków o dowolnej długości generują tzw. skrót (digest), zwany też cyfrowym podpisem palca (digital fingerprint) – ciąg znaków o stałej długości. O bezpieczeństwie funkcji skrótu decyduje stopień „niewykonalności” (unfeasibility) znalezienia wejściowego (oryginalnego, bądź dowolnego innego) ciągu znaków dla danego message digest.

Najpowszechniej stosowanymi algorytmami skrótu są: Message Digest 5 (MD5), oraz Secure Hash Algorithm 1 (SHA-1). W obu wymienionych algorytmach znaleziono błędy, które powodują, że stopniowo odchodzi się od nich na rzecz SHA-2 – następcy SHA-1.

2.4 Schematy podpisów cyfrowyvch

Schematy podpisów cyfrowych (digital signature schemes) są sposobem na weryfikację tożsamości (authentication) informacji cyfrowej i pełnią rolę podpisu tradycyjnego. Działanie schematu podpisu elektronicznego polega na wyliczeniu skrótu dla wiadomości, po czym zaszyfrowanie go kluczem prywatnym podmiotu podpisującego.

Najpowszechniej stosowanymi algorytmami w podpisach cyfrowych są: RSA, oraz Digital Signature Algorithm (DSA) – zazwyczaj w połączeniu z SHA-1.

3. Kryptografia a efektywne bezpieczeństwo danych

Komunikacja dwustronna z wymianą kluczy przez kanał bezpieczny – jedyna możliwość jeśli korzystamy z algorytmu, w którym klucz deszyfrujący może być „łatwo” uzyskany z klucza szyfrującego.

Rysunek 8.1:

Teoretycznie korzystanie z kryptografii klucza publicznego umożliwia transmisję klucza szyfrującego (publicznego) kanałem niezabezpieczonym.

Rysunek 8.2:

Sam fakt korzystania z kryptografii klucza publicznego w trakcie komunikacji nie daje nam jednak stuprocentowej gwarancji, że wymiana danych między stronami będzie odbywała się w sposób bezpieczny. Klucz publiczny jest ciągiem bajtów (o określonych właściwościach), który nie dostarcza nam jednak żadnych informacji nt. tożsamości właściciela. Aktywny przeciwnik (active adversary) może deszyfrować wiadomości podszywając się pod odbiorcę – jest to tzw. impersonation attack, lub man in-the-middle attack.

Atak przebiegałby zgodnie z następującym scenariuszem:

  1. Złośnik przechwytuje klucz publiczny Alicji, który miał dotrzeć do Boba.
  2. Zamiast klucza publicznego Alicji Złośnik przekazuje Bobowi klucz publiczny wygenerowany przez siebie.
  3. Bob szyfruje wiadomość kluczem publicznym otrzymanym od Złośnika będąc przekonanym, że jest to klucz publiczny Alicji.
  4. Złośnik przechwytuje wiadomość zaszyfrowaną przez Boba, dokonuje w niej zmian po czym szyfruje zmodyfikowaną wiadomość kluczem publicznym Alicji przyczyniając się tym samym do jej dezinformacji.

Rysunek 8.3: Man-in-the-middle attack

Atak na opisany protokół dystrybucji kluczy nie wynika ze słabości kryptografii klucza publicznego, a faktu, że projektanci protokołu zapomnieli zastosować w nim mechanizmów chroniących integralność klucza publicznego (szyfrującego).

W celu uchronienia się przed man-in-the-middle attack strona wysyłająca wiadomość musi przeprowadzić uwierzytelnienie klucza publicznego odbiorcy tej wiadomości. Zanim jednak nadawca będzie mógł uwierzytelnić klucz odbiorcy wiadomości, sam odbiorca wiadomości musi certyfikować swój klucz publiczny u tzw. zaufanej trzeciej strony (trusted third party), która cieszy się zaufaniem obu stron komunikacji (przede wszystkim nadawcy). Certyfikacja w tym przypadku polega na:

Jeśli weryfikacja wypadnie pomyślnie trusted third party tworzy tzw. dane certyfikatu – informację jednoznacznie identyfikującą podmiot (np. imię, nazwisko, data urodzenia, itp.) powiązaną z kluczem publicznym. Proces certyfikacji zamyka złożenie przez zaufaną trzecią stronę podpisu na danych certyfikatu.

Z kolei podstawą do zaufania do strony wystawiającej certyfikat jest fakt posiadania przez nadawcę kopii ważnego klucza publiczny trusted third party, który przykładowo otrzymał bezpieczną drogą (np. w pakiecie dystrybucyjnym oprogramowania). W oparciu o klucz publiczny trusted third party strona wysyłająca może przeprowadzić weryfikację, czy otrzymany klucz publiczny rzeczywiście pochodzi od odbiorcy wiadomości. Sam certyfikat może być przesłany dowolnym kanałem: bezpiecznym, bądź niezabezpieczonym. Po otrzymaniu certyfikatu nadawca wiadomości sprawdza jego autentyczność, następnie akceptuje klucz publiczny znajdujący się w certyfikacie. Od tego momentu nadawca może szyfrować korespondencję do okaziciela certyfikatu mając pewność, że nie zostanie ona odczytana, ani zmodyfikowana z pewnością taką, z jaką ufa trusted third party.

Rysunek 8.4: Proces certyfikacji klucza publicznego za pośrednictwem zaufanej trzeciej strony.

4. Public Key Infrastructure

W ogólności pod pojęciem Public Key Infrastructure (PKI) kryje się instytucjonalne rozwiązanie, którego celem jest wkomponowanie kryptografii klucza publicznego w system informacyjny zgodnie z wymogami stawianymi przez politykę bezpieczeństwa.

Na PKI składają się:

PKI pełni w kontekście kryptografii klucza publicznego rolę analogiczną do roli jaką odgrywa polityka bezpieczeństwa informacji w ramach instytucji. Sprawując kontrolę nad wystawianymi certyfikatami PKI określa poziom zaufania pomiędzy (1) z jednej strony okazicielami certyfikatów, (2) z drugiej strony podmiotami akceptującymi certyfikat.

Proces tworzenia PKI – podobnie jak polityki bezpieczeństwa informacji – zawsze powinno rozpoczynać szczegółowe określenie wymagań. Punktem wyjściowym powinna być specyfika działalności organizacji oraz operacje biznesowe, które mają być wspierane przez kryptografię publiczną. Dopiero na dalszym etapie powinna być rozpatrywana wykorzystywana technologia.

Na świecie wypracowano dwie koncepcje rozwiązania problemów związanych z uwierzytelnianiem klucza szyfrującego w oparciu o kryptografię klucza publicznego:

By uniknąć konieczności wzajemnej certyfikacji każdego obiektu przez każdy inny, która uczyniłaby pierwsze podejście zupełnie niepraktycznym, przyjęto założenie „propagacji zaufania” – w skrócie jeśli A ufa B, a B ufa C to A jednocześnie ufa C.

Pierwsza z wymienionych metod zakłada solidarną odpowiedzialność użytkowników za wiarygodność certyfikatów. To właśnie przesądziło, że pierwsze podejście nie znalazło uznania wśród organizacji, natomiast znakomicie sprawdziło się w zastosowaniach prywatnych, na takim bowiem rozproszonym modelu PKI jest oparte Pretty Good Privacy (PGP). Philip Zimmermann – twórca PGP – wyszedł z założenia, że każdy powinien świadomie chronić swoją prywatność – nie zdając się w tym względzie na żadną instytucję. W rzeczywistości – mimo deklaracji – większość ludzi nie dba o swoją prywatność, co wynika głównie z braku świadomości i lenistwa. Z tego pewnie względu PGP lub GNU Privacy Guard (GPG) nie ma aż tak wielu użytkowników jak można by oczekiwać.

W zastosowaniach komercyjnych oraz w administracji publicznej znakomicie przyjął się z kolei scentralizowany model PKI. Najpowszechniej stosowanym standardem zapisu certyfikatu w oparciu o centralny model PKI jest X.509.

PKI jest odpowiedzialne za: (1) wystawianie certyfikatów, (2) unieważnianie certyfikatów, (3) uaktualnianie oraz odnawianie certyfikatów, a także (4) rejestrację wszystkich powyższych zdarzeń. Z tego względu w praktyce trudno raczej mówić o PKI innym niż zarządzane centralnie przez specjalnie wydesygnowaną instytucję trusted third party, czyli tzw. Certificate Authority (CA). W niektórych implementacjach PKI obowiązki związane z:

spoczywają na barkach specjalnie w tym celu wyznaczonego ciała zwanego Registration Authority (RA). Zazwyczaj jedno CA może wystawiać certyfikaty podmiotom zweryfikowanym przez wiele zaufanych RA. W takim modelu RA przejmuje odpowiedzialność za wnioski certyfikacji (certificate signing requests) wysyłane do CA.

Certyfikat składa się z trzech zasadniczych elementów:

  1. nazwy jednostki dla której został on wystawiony – jest to tzw. podmiot (subject) certyfikatu;
  2. skojarzony z podmiotem certyfikatu klucz publiczny;
  3. podpis cyfrowy złożony przez CA, który stanowi podstawę dla weryfikacji informacji zawartych w certyfikacie.
Istnieje wiele formatów zapisu certyfikatów klucza publicznego, jednak najpowszechniej stosowanym formatem zapisu certyfikatu jest X.509 version 3. Chociaż istnieją inne standardy certyfikatów (np. PGP/GPG) – standard X.509 version 3 jest dominujący.

Elementy składowe certyfikatu zapisanego w formacie X.509 version 3:

Distinguished Name (DN) stanowi pełną ścieżkę w drzewie X.500, jest to stosunkowo długi łańcuch znaków w którym poszczególne węzły w ścieżce są oddzielone przecinkami.

W skład Distinguished Name wchodzą następujące pola:

Format DN sprawia, że podmiot identyfikowany za pomocą danego CN (zazwyczaj osoba) może mieć wystawionych wiele różnych certyfikatów – np. jeśli jest związany z wieloma organizacjami jednocześnie.
# exemplary DN --- from the keystore of Internet Explorer
# DN may not contain EOLs
CN = CC Signet – RootCA, OU = Centrum Certyfikacji Signet,
O = TP Internet Sp. z o.o., C = PL
Certyfikaty X.509 dzieli się na klasy w zależności od procesu weryfikacji, dokumentów wymaganych od aplikanta, oraz oczywiście uiszczanej opłaty. Przyznanie certyfikatu wysokiego poziomu zaufania zazwyczaj wiąże się z bardzo rygorystyczną (i kosztowną) weryfikacją tożsamości przez urząd certyfikacji. Z kolei utworzenie wystawieniu certyfikatu osobistego towarzyszy co najwyżej sprawdzenie poprawności adresu poczty elektronicznej. Zatem w podczas decydowania o tym, czy zaufać jednostce przedstawiającej certyfikat bardzo istotnym elementem jest sprawdzenie klasy certyfikatu. Klasa certyfikatu określa obszary zastosowania certyfikatu: popisywanie korespondencji, szyfrowanie korespondencji, itp.

PKI sprawuje pełną kontrolę nad wystawionymi przez siebie certyfikatami. Gdy istnieje niebezpieczeństwo wykorzystania certyfikatu w celach innych, niż został on wystawiony tylko PKI jest w stanie unieważnić certyfikat. Powiadomienie o unieważnieniu certyfikatu jest realizowane poprzez publikację Certificate Revocation List (CRL). W najprostszym przypadku CRL może być zrealizowane w postaci listy numerów seryjnych certyfikatów podpisanych przez dane CA, które zostały unieważnione. Tego rodzaju listę umieszcza się w publicznie dostępnym repozytorium skąd może być ona skopiowana przez obiekty ufające danemu CA. Obiekt, któremu przedstawiono certyfikat wystawiony przez dane CA powinien sprawdzić odpowiednie CRL – na podobnej zasadzie jak sprzedawca weryfikuje kartę płatniczą u jej wystawcy.

Dla zminimalizowania czasu dzielącego unieważnienie certyfikatu od chwili, kiedy o fakcie tym zostaje poinformowany obiekt ufający danemu CA czasami poza standardową metodą pull stosuje się również metodę push. Przy zastosowaniu tzw. metody push CA rozsyła CRL do wszystkich obiektów, które mu ufają – oczywiście tego rodzaju rozwiązanie ma ograniczone zastosowanie (np. w ramach jednej korporacji, czy departamentu).

Dla potrzeb systemów zabezpieczających wyjątkowo „wrażliwe” dane, w których wady CRL wykluczają jego efektywne zastosowanie opracowano Online Certificate Status Protocol (OCSP) umożliwiający weryfikację statusu certyfikatu w czasie rzeczywistym. Istota działania OCSP jest wyjątkowo nieskomplikowana – obiekt ufający danemu CA zamiast pobierać całą CRL wysyła zapytanie o status przedstawianego mu w danym momencie certyfikatu. Do dystrybucji certyfikatów przechowywanych w repozytorium certyfikatów można posłużyć się dowolnymi protokołami komunikacji – w najprostszym przypadku można posłużyć się w tym celu zwykłą pocztą elektroniczną (SMTP). Zostały opracowane standard dostępu do repozytorium certyfikatów przez FTP oraz HTTP. Samo PKIX Working Group rekomenduje do tego celu usługi katalogowe z dostępem przez LDAP.

Duże implementacje PKI obsługujące wiele tysięcy użytkowników posiadają więcej niż jedno CA – poszczególne certyfikaty są natomiast wystawiane tylko przez jedno z takich CA. By certyfikaty wystawione przez różne CA mogły być wykorzystywane wśród użytkowników danej implementacji PKI istnieje konieczność stworzenia tzw. architektury zaufania PKI.

Chyba najbardziej oczywistą architekturą zaufania PKI jest architektura hierarchiczna – na samym szczycie hierarchii znajduje się główne ciało certyfikujące (root certificate authentication authority – root CA). Wszystkie certyfikaty zarządzane przez dane PKI – w tym certyfikaty podległych CA – są podpisane (bezpośrednio, bądź pośrednio) certyfikatem wystawionym przez CA główne. Jeśli obiekt ufa certyfikatowi root CA ufa również wszystkim certyfikatom wystawionym przez dowolne z podległych CA. Ujawnienie klucza prywatnego root CA powoduje załamanie całej architektury – czyli mamy w tym przypadku do czynienia z tzw. single point-of-failure vulnerability.

Rysunek 8.5: Hierarchiczna architektura zaufania PKI

Drugim niespecjalnie skomplikowanym rodzajem architektury zaufania PKI jest tzw. architektura wzajemnego zaufania jest opierająca się wzajemnym podpisywaniu certyfikatów przez CA. Tego rodzaju architektura znajduje zastosowanie w momencie łączenia dwóch (lub więcej) dotychczas odrębnych PKI.

Rysunek 8.6: Architektura wzajemnego zaufania PKI

Ostatnim schematem łączenia drzew zaufania do certyfikatów CA jest tzw. hybrydowa architektura zaufania posiadająca cechy dwóch wcześniej wymienionych metod i polegająca na stworzeniu wzajemnego zaufania na dowolnym poziomie hierarchii.

Rysunek 8.7: Hybrydowa architektura zaufania PKI