Co należy wiedzieć o funkcji skrótu?

Co należy wiedzieć o funkcji skrótu?

Podpis elektroniczny, o którym pisałem w poprzednim wpisie, oprócz potwierdzenia autorstwa dokumentu, ma także inne istotne znaczenie – gwarantuje, że treść wiadomości nie była po drodze przez nikogo zmieniana. Jakiekolwiek, nawet najdrobniejsze zmiany w treści wiadomości wpływają na szyfrogram. Praktycznie niemożliwym jest podmiana treści wiadomości, aby otrzymać taki sam szyfrogram, co nazwalibyśmy kolizją.

Kolizja do sytuacja, kiedy dwie różne wiadomości dają taki sam szyfrogram.

Często podpis elektroniczny jest zbyt absorbującą metodą, kiedy chcemy jedynie sprawdzić, czy posiadana przez nas wiadomość jest identyczna z oryginalną. Przykładem może być pobieranie plików z internetu, kiedy chcemy sprawdzić, czy pobrany przez nas plik został pobrany w całości i jest on zgodny z plikiem udostępnianym przez autora.

Funkcja skrótu pozwala szybko zweryfikować wiadomość

Funkcja skrótu jest jednostronna, to znaczy mając wiadomość możemy stworzyć szyfrogram (skrót lub ang. hash), jednak znając szyfrogram nie możemy odgadnąć oryginalnej wiadomości. Najprostszym przykładem funkcji skrótu jest działanie matematyczne, którą poznajemy w już w szkole podstawowej – reszta z dzielenia.

Wiadomość to 13. Naszą funkcją skrótu będzie reszta z dzielenia przez 10. Jak łatwo policzyć skrótem będzie 3.

Znając jedynie skrót nie możemy poznać oryginalnej wiadomości, ale taka sama wiadomość zawsze da ten sam skrót. Taki sam skrót może mieć zarówno liczba 13, 3 jaki i 142453, tworząc kolizje.

Oczywiście reszta z dzielenia jest zbyt przewidywalne, a generowanie kolizji w tej metodzie jest banalnie proste. Dobra funkcja skrótu wykonuje dużo więcej działań, ale zasada jednostronności jest zawsze zachowana.

Popularnie wykorzystywane funkcje skrótu jak MD5, SHA-1, czy rodzina SHA-2, charakteryzują się bardzo dużą nieprzewidywalnością i drobne zmiany w wiadomości powodują bardzo duże, ciężkie do przewidzenia skutki. Znalezienie kolizji, jest niezwykle trudne, a w przypadku większości zadań, znaleziona kolizja jest całkowicie bezużyteczna.

Do czego wykorzystywana jest funkcja skrótu?

Skróty pozwalają sprawdzić kompletność wiadomości

Pierwszym z dwóch najczęstszych zastosowań funkcji skrótu, poza rozmaitymi algorytmami szyfrowania, to sprawdzanie zgodności i kompletności przesyłanych plików. Wraz z przekazywaną wiadomością przekazujemy wygenerowany przez nas skrót. Odbiorca także generuje skrót z otrzymanej wiadomości i porównuje go z otrzymanym od nas skrótem.

Hasła powinny być przechowywane w postaci skrótów

Drugim niezwykle popularnym wykorzystaniem funkcji skrótu jest przechowywanie haseł użytkowników. Bazy użytkowników, przechowujące hasła, tak naprawdę przechowują jedynie ich skróty. Za każdym razem kiedy użytkownik wpisuje hasło logując się, tworzony jest skrót, który jest następnie porównywany z tym przechowywanym w bazie. Dzięki temu nikt nie ma wglądu w hasła użytkowników, a jedynie metodą prób i błędów może szukać hasła, które generuje wskazany skrót. Co więcej,  często stosowaną praktyką jest dodatkowe solenie haseł. Do każdego hasła przed wygenerowanie skrótu dodawany jest ciąg znaków, który sprawia, że skróty w bazie będą inne niż gdybyśmy wykorzystali jedynie funkcję skrótu.