Hej, hej... Programisto, to kolejny artykuł dla Ciebie! Druga część artykułu na temat wzorców projektowych. Poznaj Adapter oraz Memento.
Dzisiaj zapraszamy Was do długiej i wnikliwej serii na temat kryptografii. Postaramy się wyjaśnić ten temat od początku, tak aby zarówno ludzie związani z branżą IT wyciągnęli coś dla siebie z naszych artykułów, jak i laicy nie mający doświadczenia w temacie. Zapraszamy do lektury na temat kryptografii!
Kryptografia, kryptologia – po co?
Kryptologia w latach 70. XX wieku była nauką rozumianą głównie przez osoby związane z wojskiem czy uniwersytetami. Dzisiaj nieświadomie korzysta z niej każdy, a rynek często implementuje rozwiązania kryptograficzne do tworzenia bezpiecznych produktów IT. Sam koncept szyfrowania i deszyfrowania jest znany z czasów starożytnych.
Celem rozwiązań proponowanych przez kryptografię jest między innymi umożliwienie przesyłania wiadomości w bezpieczny sposób poprzez niezabezpieczony kanał komunikacyjny np. sieć Internet czy bezpieczne przechowywanie danych w pliku.
Jakie problemy stara się rozwiązać kryptografia?
Na początku przyjrzyjmy się jakie problemy mogą występować przy klasycznym przesyłaniu wiadomości z użyciem poczty listowej. W naszej ocenie to są podstawowe zagrożenia, z którymi może zmagać się przeciętny odbiorca chcąc bezpiecznie dostarczyć do kogoś wiadomość:
- Wysłana wiadomość musi być nieczytelna dla kogoś, kto przechwyci list. Jeśli ktoś otworzy list to wiadomość, którą odnajdzie powinna być zlepkiem niezrozumiałych znaków, których nie da się przywrócić do oryginalnej treści bez znajomości pewnego klucza.
- Wiadomość nie może zostać zmieniona i musimy mieć pewność, że nie została. Jeśli list zawierałby pewne skreślenia, poprawki korektorem moglibyśmy podejrzewać, że taka wiadomość została zmodyfikowana.
- Tożsamość nadawcy lub/i odbiorcy musi być znana.
- Tożsamość musi być możliwa do potwierdzenia.
- Wymiana kluczy użytych do zaszyfrowania listów musi nastąpić poprzez niebezpieczne medium (pocztę, kuriera dostarczającego wiadomość)
Choć dwa ostatnie punkty wydają się nieco abstrakcyjne do wyobrażenia w przypadku listów, to musimy przyjąć taką optykę, aby dobrze zrozumieć procesy kryptograficzne, które zachodzą w komputerach/Internecie. Powyższe wymagania mają więc w kryptografii swoje odpowiedniki i są zobrazowane poprzez wymagania co do przesyłanych danych. Wygląda to w następujący sposób:
- Poufność – Informacja może być dostępna tylko dla osoby, dla której jest przeznaczona i żadna inna osoba oprócz niej nie może jej uzyskać.
- Integralność – Informacja nie może być modyfikowana podczas przechowywania lub przesyłania między nadawcą a zamierzonym odbiorcą.
- Uwierzytelnienie – Tożsamości nadawcy lub/i odbiorcy są potwierdzane.
- Niezaprzeczalność – Nadawca wiadomości nie może zaprzeczyć faktu, że wysłał daną informację.
Powyższe wymagania są bardziej sformalizowaną wersją przedstawionych w poprzednim wypunktowaniu. Nie są to jednak odwzorowania jeden do jednego, a bardziej porównanie mające wyrobić pewną intuicję użytkownika. W ogólności powyższe wymagania będziemy realizować z użyciem takich konceptów jak funkcje hashujące, kryptografia symetryczna, kryptografia asymetryczna, podpisy cyfrowe, certyfikaty czy hasła.
Ale właściwie po co te abstrakcyjne pojęcia?
Chcąc osiągnąć określony efekt i poziom bezpieczeństwa będziemy miksować różne techniki kryptologiczne, aby osiągnąć pożądany efekt. To co jest pożądanym efektem zależy od konkretnych wymagań danego systemu. Istnieje jednak wiele sytuacji, które są bardzo powtarzalne i przez które każdy z nas codziennie nieświadomie przechodzi używając komputera. Przykładami zastosowania kryptografii mogą być takie scenariusze jak:
- hasło podawane przez użytkownika, które będziemy wykorzystywać w celu jego uwierzytelnienia na naszej stronie
- hasło przechowywane w bazie danych w postaci skrótu (hash’a)
- żeby udowodnić, że dany dokument pochodzi od danego użytkownika będziemy zmuszeni użyć zarówno mechanizmu podpisu cyfrowego jak i certyfikatu
- w celu połączenia się z serwerem będziemy musieli użyć protokołu SSH korzystającego z takich mechanizmów jak challenge response lub protokół wymiany kluczy diffiego-hellmana
- przeglądarka użytkownika korzystającego ze sklepu internetowego otrzymuje certyfikat, którym strona/serwer potwierdza, że jest to prawdziwy, zweryfikowany sklep a nie oszustwo, a z kolei użytkownik podaje login hasło w celu udowodnienia, że dane konto należy do niego
To tylko część przykładów, gdzie stosujemy w dzisiejszych czasach kryptografię w informatyce. W naszej serii postaramy się przejść przez jak największą ilość mechanizmów kryptograficznych i pokazać ich współczesne zastosowanie i implementację w możliwie prosty i przejrzysty sposób.
Definicje – szyfrowanie kontra kodowanie
Zaczynając rozmowę o kryptografii nie możemy unikać wprowadzenia pewnych pojęć, którymi będziemy się posługiwać w trakcie tej serii.
plaintext, cleartext (tekst jawny) – wiadomość która ma zostać ukryta
ciphertext, cryptogram (szyfrogram, kryptogram) – zaszyfrowany tekst jawny
szyfrowanie jest często spotykanym procesem w dziedzinie kryptografii oraz ogólnej ochrony cybernetycznej. To działanie, w wyniku którego czytelny dla człowieka tekst (tekst jasny, plaintext) przekształcany jest w postać zaszyfrowaną (szyfrogram, ciphertext) poprzez szereg operacji i zastąpień. Zaszyfrowanego tekstu nie da się odczytać ani rozszyfrować bez posiadania odpowiedniego klucza szyfrującego.
kodowanie to proces przekształcania struktury prezentacji tekstu, dokonywany poprzez zastosowanie znanego i odwracalnego zestawu zamian. Ten proces nie opiera się na użyciu klucza i z tego względu zakodowany tekst może być odczytany, pod warunkiem że jest znane zastosowane kodowanie. Przykładem prostego kodowania w technologiach komputerowych jest Base64. Kodowanie nie gwarantuje żadnej ochrony, ponieważ jest znane, odwracalne i nie wykorzystuje klucza (klucz nie jest wcale używany w procesie kodowania).
deszyfrowanie – operacja odwrotna do szyfrowania, czyli zamiana kryptogramu na tekst jawny
algorytm szyfrujący/deszyfrujący inaczej szyfr – zbiór zasad i kroków wykorzystywanych do zaszyfrowania/zdeszyfrowania informacji
klucz szyfrujący/deszyfrujący – klucz, zwykle tajny, wymagany, aby przetworzyć przy pomocy algorytmu ciphertext na plaintext
Jeśli chcesz się dokładniej zapoznać z definicjami, polecamy poniższy artykuł od OpenSecurity.
Innymi pojęciami często mylonymi z szyfrowaniem czy innymi pojęciami kryptograficznymi są:
steganografia to praktyka przedstawiania informacji w innej wiadomości lub obiekcie fizycznym w taki sposób, że obecność informacji nie jest oczywista dla ludzkiej inspekcji. Steganografia próbuje więc ukryć fakt prowadzenia komunikacji, w przeciwieństwie do szyfrowania. W kontekście komputerowym wiadomość jest ukryta w innym pliku, wiadomości, obrazie lub wideo. W klasycznym rozumieniu steganografii nie są tam wykorzystywane żadne klucze.
hashowanie to proces matematycznego przekształcania dowolnie długich danych (takich jak plik, tekst) w ciąg znaków o stałej długości np. 256 bitów, który jest znany jako „skrót”. Jest on generowany za pomocą specjalnej funkcji matematycznej, nazywanej funkcją skrótu lub funkcją/algorytmem hashującym. Kluczową cechą tej funkcji jest to, że nawet najmniejsza zmiana w danych wejściowych powoduje znaczną i trudną do przewidzenia zmianę w wynikowym skrócie, co oznacza, że np. kiedy zmodyfikujemy tekst wejściowy o 1 literę, to nasz wynik funkcji skrótu zmieni się całkowicie.
Podsumowanie
Zrozumienie podstawowych pojęć, celów i zasad obowiązujących w kryptografii jest kluczowe, aby poznać jej dalsze tajniki i bardziej abstrakcyjne pojęcia. Za tydzień porozmawiamy sobie dokładniej o hasłach i funkcjach hashujących, więc upewnijcie się, że dobrze rozumiecie ten temat. Zachęcamy także do zapoznania się ze źródłami z których sami korzystaliśmy. Do zobaczenia!
Źródła:
- https://opensecurity.pl/szyfrowanie-kodowanie-hashowanie/
- https://www.geeksforgeeks.org/cryptography-and-its-types/
- https://pl.quora.com/Czym-jest-haszowanie-i-na-czym-polega
- Nowoczesna kryptografia – Jean-Philippe Aumasson