Strona główna serwisu Gazeta Policyjna

Czy można dokonać kradzieży tożsamości zgodnie z protokołem?

Tytułowe pytanie można traktować jako szczególny przypadek szerszego problemu: czy można dokonać przestępstwa zgodnie z prawem? Odpowiedź wydaje się banalna: oczywiście, że nie można! Na polu akademickim można jednak tutaj podjąć pewną dyskusję: według jakiego prawa, w jakim terminie obowiązującego?

Jeżeli przestępstwem jest wszystko to, co ściśle określone i zabronione regułami prawnymi, to przestępstwa zgodnego z prawem popełnić nie można. Pozostaje jeszcze kwestia spójności i więcej – niesprzeczności przepisów prawnych. Można się zastanawiać nad szerokim problemem poprawności przepisów. Autor tego artykułu nie jest prawnikiem, ale jest przekonany, że sprzeczne przepisy czasem funkcjonują w systemach prawnych, dopóki się ich nie zlokalizuje i nie poprawi. Można nawet zaryzykować tezę, że nie ma dużego systemu prawnego niezawierającego sprzeczności.

NOWA ROLA KRYPTOGRAFII

W nowoczesnym świecie trudno już wyobrazić sobie komunikację bez mediów elektronicznych – począwszy od smartfonów, przez notebooki, domowe komputery czy firmowe terminale, z łączy komputerowych korzystamy nieustannie. Komunikując się, potrzebujemy zapewnienia określonego poziomu bezpieczeństwa komunikacji. Jest to oczywiście problem wieloaspektowy.

Jeden z kluczowych problemów bezpieczeństwa komunikacji sieciowej stanowi uwierzytelnianie komunikujących się stron. Mogą to być osoby, serwery komunikacyjne lub nawet złożone systemy oprogramowania. Pomocna w zapewnianiu bezpieczeństwa komunikacji okazuje się kryptografia, młoda stosunkowo dyscyplina naukowa, leżąca na styku matematyki i informatyki technicznej, zajmująca się głównie metodami szyfrowania informacji i kojarzona najczęściej z zapewnianiem poufności przesyłanych danych w postaci szyfrogramów (informacji poufnych).

Kryptografia pozwala nie tylko na szyfrowanie danych. Najnowsze, pochodzące z ostatnich dekad XX wieku, systemy kryptograficzne pozwalają przykładowo na zastosowanie kryptografii do potwierdzania autentyczności informacji jawnych (podpisy cyfrowe). Inną stosowaną techniką kryptograficzną są funkcje skrótu służące m.in. do potwierdzania integralności danych.

Często stosowanymi narzędziami wykorzystującymi techniki kryptograficzne do osiągania celów związanych z szeroko pojętym bezpieczeństwem w sieciach komputerowych są tzw. protokoły zabezpieczające (ang. security protocols). Historia ich konstruowania i stosowania jest ciekawa i pouczająca.

Wszystko zaczęło się wraz z tworzeniem i rozwojem sieci komputerowych. Już w roku 1978 panowie Needham i Schroeder, próbując rozwiązać problemy związane z uwierzytelnianiem komunikujących się w sieciach stron oraz zapewnieniem poufności przesyłanych danych, opracowali kilka schematów algorytmów współbieżnych mających na celu zagwarantowanie pewnych własności związanych z bezpieczeństwem komunikacji elektronicznej. Algorytmy te szybko zaczęto stosować w praktyce. W następnych latach opracowano i wdrożono wiele protokołów zabezpieczających w sieciach komputerowych. Także dzisiaj protokoły takie są powszechnie wykorzystywane podczas komunikacji w sieciach cyfrowych. Najczęściej są one częściami składowymi protokołów komunikacyjnych szerszego zastosowania. Jako przykłady można wskazać systemy Kerberos, SSL/TLS, SESAME czy różne wersje protokołu WPA.

Ogólnie protokołami nazywa się algorytmy współbieżne, czyli wykonywalne na współpracujących ze sobą jednostkach obliczeniowych powiązanych ze sobą siecią komunikacyjną. Programy stworzone z wykorzystaniem tych algorytmów różnią się od tradycyjnych procesów sekwencyjnych, w których kolejne instrukcje programu wykonywane są po kolei na jednym procesorze. Protokoły zabezpieczające to takie, których głównym celem jest zapewnienie jednego lub wielu celów związanych z bezpieczeństwem systemów. Najczęściej protokoły te wykorzystują w swojej pracy różne techniki kryptograficzne.

Podstawowymi celami, których osiągnięcie ma być zagwarantowane przez protokoły zabezpieczające, są:

1) jednostronne lub wzajemne uwierzytelnienie (potwierdzenie tożsamości) komunikujących się w sieci stron (ang. authentication),

2) zachowanie poufności przesyłanych informacji (confidentiality),

3) zachowanie integralności przesyłanych danych (message integrity),

4) dystrybucja nowego kryptograficznego klucza sesyjnego (new session key distribution).

PROTOKÓŁ NEEDHAMA I SCHROEDERA

W celu zobrazowania problemów z tym związanych należy przedstawić przykład protokołu zabezpieczającego, jednak dla zrozumienia jego algorytmu potrzebne jest krótkie przypomnienie podstawowych pojęć kryptograficznych.

Ogólnie szyfrem określamy funkcję matematyczną, która przekształca dane zapisane w zrozumiałej postaci (tekst jawny) do postaci, która jest niezrozumiała dla niepowołanych osób (szyfrogram). W związku z tym, że zajmujemy się komunikacją w sieciach cyfrowych, dane, które rozważamy, są danymi binarnymi (liczbami). Funkcja szyfrująca musi być funkcją odwracalną, to znaczy, że szyfrogram można z powrotem przekształcić na tekst jawny. Oczywiście nie każdy może to uczynić. Tylko znajomość odpowiednich parametrów szyfru to umożliwia. Najczęściej parametr taki nazywany jest po prostu kluczem szyfrowym.

Rodzajów szyfrów jest wiele i można je w różnoraki sposób dzielić. Najpopularniejszym podziałem jest podział na algorytmy symetryczne i asymetryczne. Szyfry symetryczne to takie, w których praktycznie klucze szyfrujący i deszyfrujący są takie same. Stosowanie takich algorytmów

w praktyce wymaga jednak wcześniejszego uzgodnienia klucza szyfrowego między porozumiewającymi się stronami przed rozpoczęciem przesyłania zaszyfrowanej wiadomości. Problem ten nazywany jest często w literaturze problemem dystrybucji kluczy.

Zupełnie inne własności mają szyfry asymetryczne, nazywane też szyframi z kluczem publicznym. W kryptografii asymetrycznej klucze szyfrujący i deszyfrujący są różne. Dodatkowo konstrukcja algorytmu musi zapewniać obliczeniową niemożliwość wyznaczenia, przynajmniej w rozsądnym czasie, klucza deszyfrującego z szyfrującego. Stosując takie szyfry, każdy

z uczestników systemu ma parę własnych kluczy: klucz publiczny, którym można zaszyfrować dane do tego użytkownika, oraz klucz prywatny, którym można te dane odszyfrować. Nazwa klucz publiczny bierze się stąd, że klucz szyfrujący można publicznie ujawnić. Każdy, kto go ma, może nim szyfrować informacje, ale tylko posiadacz klucza deszyfrującego (prywatnego) może odszyfrować dane.

Powróćmy jednak do protokołów zabezpieczających. Jak już wspomniano, pionierską rolę w tym zakresie odegrały konstrukcje autorstwa Needhama i Schroedera zaproponowane w 1978 r. Przedstawili oni wtedy pierwsze pomysły dotyczące wykorzystania technik kryptograficznych do rozwiązywania problemów związanych z zabezpieczaniem komunikacji stron porozumiewających się w sieciach komputerowych.

Jednym z takich proponowanych schematów jest tzw. protokół Needhama-Schroedera z Kluczem Publicznym (Needham-Schroeder Public Key Authentication Protocol, NSPK). W protokole biorą udział dwie strony oznaczane A (Alicja) i B (Bartek) chcące poufnie się komunikować. W poniższych zapisach przez i(A) oraz i(B) będą oznaczane cyfrowe identyfikatory tych użytkowników. Przez [X]KA będzie oznaczony szyfrogram zawierający wiadomość X zaszyfrowany kluczem publicznym użytkownika A. Zapis X•Y będzie oznaczać tzw. konkatenację (połączenie) X oraz Y. Symbolami NA oraz NB będą oznaczane tzw. nonces Alicji i Bartka. Są to duże liczby (np. kilkusetcyfrowe) generowane losowo na potrzeby jednej sesji komunikacji. Liczby te będą pełnić funkcję lokalnych tajemnic użytkowników. Przez zapis A → B : X będzie oznaczany symbolicznie fakt, że Alicja wysłała do Bartka wiadomość X. Zakłada się tutaj dodatkowo, że wysłanie informacji jest równoważne z jej otrzymaniem przez adresata.

Celem protokołu NSPK jest wzajemne uwierzytelnienie dwóch stron komunikacji cyfrowej. Konieczne jest również zachowanie poufności tajemnic użytkowników, czyli liczb NA oraz NB. Zakłada się, że użytkownicy posługują się kryptografią asymetryczną, tj. mają swoje pary kluczy: publiczny i prywatny, oraz znają klucz publiczny drugiej strony. Inicjatorem protokołu jest Alicja.

Akcje wykonywane przez strony podczas realizacji protokołu są następujące:

1. A → B : [NA•i(A)]KB,

W tym kroku Alicja rozpoczyna komunikację z Bartkiem, wysyłając mu swój identyfikator i(A) oraz wygenerowaną na potrzeby tej sesji unikalną, dużą (np. kilkusetcyfrową) liczbę NA. Dane te są zaszyfrowane kluczem publicznym Bartka, zatem tylko Bartek może je odszyfrować. Mimo podpisu Alicji i(A) zawartego w wiadomości Bartek nie może być pewny, kto do niego napisał, gdyż każdy użytkownik sieci zna klucz publiczny KB i może taką wiadomość stworzyć. Konieczne jest zatem potwierdzenie faktu komunikacji z Alicją. W tym celu Bartek generuje swoją liczbę NB oraz wysyła ją w kroku drugim razem z poznaną liczbą NA, szyfrując oczywiście kluczem publicznym Alicji.

2. B → A : [NA•NB]KA,

Jest to ważny krok tej komunikacji. Alicja wygenerowała swoją tajną liczbę NA i wysłała ją do Bartka, szyfrując jego kluczem publicznym, zatem poza Alicją tylko Bartek może posiadać tę liczbę. Liczba ta zostaje odesłana z liczbą NB do Alicji, zatem to Bartek musiał to uczynić. W kroku tym Bartek, odsyłając tajemnicę Alicji, uwierzytelnia się wobec niej.

3. A • B : [NB]KB.

Podobnie jak w kroku poprzednim, Alicja, wysyłając poznaną liczbę NB do Bartka i odpowiednio ją szyfrując, uwierzytelnia się wobec Bartka.

FORMA ATAKU I OBRONY

Uzasadnienie poprawności działania protokołu wydaje się nie tylko proste, ale także dobrze przeprowadzone. Odpowiednia wiedza o kluczach szyfrowych i właściwie ugruntowane matematycznie własności algorytmów kryptografii asymetrycznej nie pozwalają na odczytanie informacji przez osoby do tego niepowołane, a tym samym proces wzajemnego uwierzytelnienia Alicji i Bartka można uważać za pomyślnie przeprowadzony.

Ale czy na pewno? Historia stosowania protokołu NSPK jest bardzo pouczająca. Funkcjonował on w powyższej wersji dość długo, bo przez 17 lat. W 1995 r. Gavin Lowe, profesor uniwersytetu

w Cambridge, odkrył atak na ten protokół, czyli takie jego wykonanie, które nie zapewnia realizacji celów protokołu, jakimi są wzajemne uwierzytelnienie oraz zachowanie poufności NA oraz NB.

Protokół, a przez to jego uczestników, można bowiem oszukać. W tym ataku bierze udział oszust oznaczany symbolem I (Ireneusz). Po wykonaniu poniższego przebiegu jeden z uczestników zostaje oszukany co do tożsamości rozmówcy. Oto atak podany przez Lowe’a:

α1. A → I : [NA•i(A)]KI,

β1. I(A) → B : [NA•i(A)]KB,

β2. B → I(A) : [NA•NB]KA,

α2. I → A : [NA•NB]KA,

α3. A → I : [NB]KI,

β3. I(A) → B : [NB]KA.

Powyższy atak jest w zasadzie przeplotem dwóch różnych wykonań protokołu. Wykonanie oznaczane przez α to komunikacja uczciwej Alicji z Ireneuszem mogącym występować w sieci również w roli uczciwego użytkownika. W wykonaniu β Ireneusz podaje się za użytkownika A (sytuacja ta oznaczana jest przez I(A)).

W kroku pierwszym Alicja nawiązuje komunikację z Ireneuszem, przesyłając mu swoją tajną liczbę NA. Ten jednak, niezgodnie ze schematem protokołu, nadużywa zaufania Alicji i niewłaściwie wykorzystuje przekazaną mu przez nią liczbę NA do zapoczątkowania kontaktu z Bartkiem (krok β1). Bartek zgodnie z protokołem wysyła do Ireneusza (myśląc, że to Alicja) szyfrogram [NA•NB]KA. Oczywiście Ireneusz nie może tego szyfrogramu odszyfrować, nie zna bowiem klucza prywatnego Alicji. Może jednak przesłać dalej (odbić) cały szyfrogram do Alicji jako drugi krok wykonania α. To słaby punkt konstrukcji protokołu, skoro pozwala na takie zachowanie. Niczego nieświadoma Alicja rozszyfrowuje szyfrogram, wydobywa zeń liczbę NB i wysyła zaszyfrowaną do Ireneusza w kroku α3. Ten teraz może już rozszyfrować szyfrogram, ponieważ posiada odpowiedni klucz szyfrowy i, poznawszy NB, przesyła liczbę do Bartka w kroku β3. Jest to ostatni krok wykonania β między Ireneuszem podającym się za Alicję i uczciwym Bartkiem. Po takim wykonaniu, zgodnie z protokołem, Bartek jest pewny, że porozumiewa się z Alicją, podczas gdy naprawdę wymienia informacje z Ireneuszem. W trakcie dalszego ewentualnego kontaktu oszust może wykorzystywać poznane liczby NA i NB np. do dalszego oszukiwania Bartka.

Poprawiona wersja protokołu opracowana i opublikowana również przez Lowe’a jest następująca:

1. A → B : [NA•i(A)]KB,

2. B → A : [NA•NB•i(B)]KA,

3. A → B : [NB]KB.

Lowe zaproponował wprowadzenie zmiany w kroku drugim protokołu. Przez zwyczajne dodanie identyfikatora Bartka i(B) do szyfrogramu [NA•NB•i(B)]KA wykluczona jest możliwość oszukańczego, jak w powyższym ataku, posłużenia się tym szyfrogramem przez oszusta.

Ta drobna, wydawałoby się, poprawka wyklucza oczywiście przedstawiony wyżej atak oraz również wszystkie inne znane dotąd typy ataków. Poprawiony protokół Needhama-Schroedera przechodzi jak dotąd pozytywnie wszystkie opracowane i znane testy poprawności. Można również dodać, że ze względu na swoją prostotę jest jednocześnie najczęściej stosowanym w najlepszych ośrodkach akademickich i firmowych przykładem do testowania własności protokołów za pomocą każdego nowego systemu weryfikacji poprawności protokołów zabezpieczających.

AD REM...

Oczywiście po odkryciu opisanego i innych ataków na protokoły zabezpieczające problem ich poprawności od razu został uznany za istotny i rozpoczęto intensywne badania naukowe w tym zakresie. Z biegiem lat pojawiały się kolejne prace, rozwiązania, wręcz całe metodologie tworzenia różnorakich systemów badających własności protokołów, a zwłaszcza ich szeroko rozumianą poprawność.

Szybko się okazało, że badanie własności protokołów nie jest rzeczą prostą, bowiem protokoły zabezpieczające wyróżnia od innych algorytmów to, że są one wykonywane przez użytkowników sieci (ludzi, komputery, serwery) wielokrotnie, czasem nawet wiele tysięcy razy w ciągu dnia i w większości przypadków współbieżnie. Wykonania protokołów zależą często również od informacji zawartych w bazach wiedzy, np. repozytoriach certyfikatów kluczy szyfrowych.

Do badania protokołów wykorzystano wiele konstruowanych specjalnie do tego celu formalizmów matematycznych. Budowano np. systemy logiczne (dedukcyjne) przeznaczone do wyrażania i dowodzenia własności protokołów. Jednak najbardziej efektywne okazały się metody tzw. model checkingu polegającego na weryfikacji odpowiedniego matematycznego modelu wykonań protokołów. Prace te są bardzo zaawansowane i dzisiaj można już na etapie projektowania tego typu zabezpieczeń weryfikować własności ich bezpieczeństwa.

Bardzo dobre wyniki w tej dziedzinie osiągnięto także w Polsce. Opracowano je m.in. w Instytucie Podstaw Informatyki PAN w Warszawie, na Politechnice Częstochowskiej oraz na Uniwersytecie kard. St. Wyszyńskiego w Warszawie. Autor tego artykułu zajmował się tą tematyką przez kilkanaście lat i swoje doświadczenie oraz wiedzę wykorzystuje dzisiaj do projektowania i weryfikacji własności wdrażanych do realnych systemów zabezpieczeń protokołów, poprawiając czasem ich pierwotne wersje, tak aby zapewniały odpowiedni poziom zabezpieczeń.

Wróćmy jednak do tytułowego pytania: czy można dokonać kradzieży tożsamości zgodnie z protokołem? Odpowiedź brzmi, oczywiście, że można, jeżeli protokół jest źle zaprojektowany i nie zapewnia odpowiedniego poziomu bezpieczeństwa. Tak jak przepisy prawne mogą być niespójne, czy nawet sprzeczne, tak samo algorytmy i tworzone na ich podstawie oprogramowanie mogą zawierać błędy i dlatego szczególnie istotne jest badanie ich własności bezpieczeństwa, oczywiście na odpowiednim naukowym poziomie.

dr hab. MIROSŁAW KURKOWSKI

profesor w Instytucie Służby Kryminalnej WSPol w Szczytnie