TI/Kryptografia
Spis treści
TI/ Kryptografia
Internet rozwija się lawinowo po części dzięki zakupom na odległość, usługom bankowym itp. operacjom, wymagającym przesyłania poufnych wiadomości, jak choćby numer karty kredytowej. Podstawowa struktura Internetu właściwie uniemożliwia zagwarantowanie, że wysyłanej przez nas informacji ktoś (poza adresatem) po drodze nie przeczyta. Nie podąża ona konkretnym kablem, lecz po drodze może przebywać w pamięci kilkunastu komputerów. Nie znaczy to, że nasze listy są po drodze wywieszane na ogólnodostępnych tablicach ogłoszeń. Ale administrator komputera ma wgląd we wszystkie pliki — administrator każdego z komputerów, przez które prowadzi droga naszej przesyłki. Istnieją też inne sposoby na przechwytywanie krążącej w Internecie informacji przez osoby inne niż adresat.
I choć właściwie nie mamy też gwarancji tajemnicy korespondencji wysyłanej tradycyjną pocztą ani rozmów telefonicznych, to jednak w Internecie problem wydaje się poważniejszy. Jedynym rozwiązaniem jest szyfrowanie danych.
Szyfr = algorytm + klucz
Przypomnijmy na przykładzie, jak działa tradycyjna (symetryczna) kryptografia:
Dwie osoby mają dokładnie to samo wydanie pewnej książki. Umawiają się, że każdą literę w przesyłanych wiadomościach będą zamieniać na numer strony, na której ta litera jest dziesiąta z rzędu. Taki algorytm szyfrowania natychmiast ujawnia sposób na odkodowanie: każdą cyfrę z zaszyfrowanej wiadomości zamieniamy na dziesiątą literę na danej stronie umówionej książki. Po wykonaniu tej żmudnej operacji naszym oczom powinien ukazać się "jawny" tekst — taki, jaki napisano przed zaszyfrowaniem.
I choć stosowane w praktyce szyfry są nieporównanie bardziej skomplikowane, wyróżnić można dwa podstawowe elementy: algorytm szyfrowania i klucz. Kluczem jest książka, bez której sama znajomość sposobu szyfrowania nie zda się na wiele, dzięki czemu zaszyfrowany tekst możemy przesyłać bez obaw (jeśli użyliśmy "mocnego" szyfru) pocztą elektroniczną. Jednak jeśli do wiadomości załączymy klucz (przy znanym algorytmie), to szyfrowanie straci sens, bo każdy, kto przechwyci tekst zaszyfrowany razem z kluczem, będzie mógł go odszyfrować. Dlatego klucz należy przekazywać tzw. bezpiecznym kanałem informacyjnym, czyli na przykład osobiście.
Wyobraźmy sobie zakupy przez Internet: znajdujemy interesujący nas towar w sklepie na drugiej półkuli — czemu nie, Internet znosi odległości. Ale żeby zapewnić bezpieczne przesłanie numeru naszej karty kredytowej, musimy ustalić klucz, wsiadamy więc do samolotu i udajemy się do sklepu osobiście. Po powrocie do domu dokonujemy bezpiecznie zakupu na odległość, szyfrując dane z pomocą ustalonego klucza.
Nie, tak źle nie jest. Współczesna matematyka oferuje efektywniejsze sposoby. Aby zrozumieć ich działanie, rozważmy na początek szyfrowanie bez odszyfrowywania.
Funkcja skrótu (haszująca) i zapisywanie haseł
Działanie z pozoru bez sensu: zaszyfrować informację tak, aby nikt, nawet autor szyfru ani szyfrujący, nie mógł jej odczytać. Okazuje się jednak, że ma szereg praktycznych zastosowań. Przyjrzyjmy się mechanizmowi identyfikacji użytkownika przez system. W systemach Unixowych hasła użytkowników przechowywane są na dysku w postaci zaszyfrowanej, zaszyfrowane właśnie takim algorytmem, którego nie da się odwrócić. Gdy wpiszemy hasło, system od razu liczy na jego podstawie funkcję skrótu i porównuje z funkcją skrótu obliczoną dla hasła, które użytkownik ustalał przy zakładaniu konta. Jeśli są jednakowe, to znaczy, że wpisaliśmy ten sam ciąg znaków, co właściciel konta przy ostatniej zmianie hasła.
Przykłady obliczania funkcji skrótu algorytmem SHA256 można obejrzeć pod adresem https://guggero.github.io/blockchain-demo/#!/hash
Główną zaletą tego systemu jest fakt, że hasła przechowywane są wyłącznie w postaci funkcji skrótu, której odszyfrowanie jest w zasadzie niemożliwe. Choć, gdyby się nad tym zastanowić, jest wyjątek: można hasło "zgadnąć". Jeśli obliczymy znanym algorytmem funkcje skrótu dla kilku "podejrzanych" wyrazów, jak imiona najbliższych i ulubione sporty użytkownika, to może się zdarzyć, że otrzymamy identyczny ciąg znaków, jak zaszyfrowane hasło. Współczesne komputery pozwalają sprawdzać w ten sposób nie tylko kilka słów, ale całe słowniki. Jednak w obliczu dowolnej kombinacji liter, cyfr i znaków przestankowych o odpowiedniej długości komputery stają się bezsilne. Oznacza to, że czas potrzebny do "złamania" odpowiednio długiego hasła może wynosić lata lub nawet sięgać wieku Wszechświata. Dlatego właśnie jako hasło nie powinniśmy wybierać słów w dowolnym języku, imion, dat — nawet pisanych wspak. Najlepsze są przypadkowe na pierwszy rzut oka zlepki dużych i małych liter i cyfr. Aby ułatwić zapamiętanie, można wykorzystać pierwsze litery wyrazów z jakiegoś zdania. Reasumując, hasła:
- przechowywane są w systemie w postaci zaszyfrowanej (funkcją haszującą, inaczej funkcją mieszającą lub funkcją skrótu), dlatego nawet administrator nie zna naszego hasła, może je tylko zmienić
- brak funkcji odwrotnej — wpisane hasło system szyfruje tym samym algorytmem i porównuje z zapisanym
- jedyny znany sposób łamania haseł — odgadywanie
Przybliżone liczby kombinacji dla hasła złożonego z:
- 8 cyfr — 100 000 000
- 8 liter — 200 000 000 000
- 8 liter dużych i małych i in. znaków — 7 000 000 000 000 000
- 16 liter dużych i małych i in. znaków — 400 000 000 000 000 000 000 000 000 000 000
Dla porównania: wiek wszechświata < 1000 000 000 000 000 000 sekund.
Kryptografia klucza publicznego
Nadszedł czas na rozwiązanie "nierozwiązywalnego" problemu: bezpiecznej wymiany danych bez uprzedniego ustalania tajnego klucza. Znaleziono je całkiem niedawno — pierwsza publiczna wzmianka pochodzi z roku 1976[1]. Proces przebiega według schematu "tradycyjnego" szyfrowania z kluczem, jednak algorytm wykazuje zasadniczą różnicę: znajomość klucza, użytego do szyfrowania (klucza szyfrującego), nie pomoże w rozszyfrowaniu! Wydawałoby się, że wracamy tu do sytuacji z poprzedniego rozdziału. Jednak clou tej fascynującej techniki polega na tym, że wiadomość można odszyfrować, ale z pomocą innego klucza! Innego oznacza, że nie da się go odtworzyć z pomocą klucza szyfrującego (stąd określenie kryptografia asymetryczna).
Mamy więc parę kluczy: szyfrujący i deszyfrujący. Parę taką możemy utworzyć z pomocą komputera (i odpowiedniego programu) w minutę. Jednak odgadnięcie jednego z nich na podstawie znajomości drugiego jest równie mało prawdopodobne, jak zgadnięcie hasła opisane w poprzednim rozdziale.
Wyobraźmy sobie teraz, że po wygenerowaniu takiej pary klucz deszyfrujący pozostawiamy w bezpiecznym miejscu, a klucz szyfrujący udostępniamy do publicznej wiadomości (na przykład umieszczamy na swojej stronie WWW). Wtedy dowolna osoba może zaszyfrować z jego pomocą wysłaną do nas wiadomość i mieć całkowitą pewność, że odczytamy ją tylko my — jeśli strzegliśmy dostatecznie swego tajnego klucza deszyfrującego.
No właśnie, dowolna osoba. Ta procedura nie daje nam możliwości upewnienia się, od kogo tak naprawdę dostaliśmy wiadomość! Ale i na to jest rada. Wyobraźmy sobie, że zamiast klucza szyfrującego podajemy do publicznej wiadomości nasz klucz odszyfrowujący. Wtedy możemy do dowolnej osoby wysłać wiadomość zaszyfrowaną naszym tajnym kluczem szyfrującym. Jeśli adresat odszyfruje wiadomość naszym upublicznionym kluczem deszyfrującym, to ma pewność, że wiadomość zaszyfrowaliśmy my, a nie kto inny. Jest to nasz elektroniczny podpis, bez porównania trudniejszy do sfałszowania od podpisu na papierze. W zasadzie można uznać, że jeśli pilnujemy dostatecznie swoich tajnych kluczy, to podpis taki, w przypadku klucza o odpowiedniej długości, jest nie do podrobienia.
Połączenie tych dwóch procedur umożliwia jednocześnie identyfikację nadawcy (podpis cyfrowy) i zachowanie tajemnicy korespondencji: jeśli obie strony upubliczniły klucze szyfrujący z jednej i deszyfrujący z drugiej pary, wystarczy wiadomość zaszyfrować najpierw naszym tajnym kluczem szyfrującym, a potem publicznym kluczem szyfrującym adresata. Adresat jest jedyną osobą, która może odwrócić drugi etap szyfrowania. Z kolei jeśli wynik daje się odszyfrować naszym publicznym kluczem deszyfrującym, to znaczy, że tylko my mogliśmy wykonać pierwszy etap szyfrowania.
Poziom bezpieczeństwa (wiarygodności) tego typu podpisów przerasta nieporównywalnie wszelkie tradycyjne podpisy i pieczątki. Jednak rodzi się ciekawe pytanie — o tożsamość osoby podpisującej. W przypadku podpisu na papierze jesteśmy raczej na stałe związani z ręką, która wiedzie pióro. Natomiast w przypadku podpisu elektronicznego tożsamość sprowadza się do szeregu cyfr...
W praktyce takiej wymiany kluczy dokonują automatycznie współczesne przeglądarki, gdy łączymy się ze stronami, które wymagają szyfrowania informacji (w każdej chwili możemy się dowiedzieć, czy aktualna sesja jest szyfrowana). Natomiast w przypadku poczty elektronicznej szyfrowanie nie jest jeszcze zbyt powszechne; jeśli nie używają go osoby, z którymi korespondujemy, to sprawa nie będzie prosta. Jeśli mimo to zależy nam na takiej możliwości, możemy spróbować przekonać naszych korespondentów. Moduły szyfrowania znajdują się w większości współczesnych programów pocztowych.
- ↑ Przyjmuje się, że technika mogła być znana w tajnych agencjach ok. dekady przed pierwszą publikacją.