Zapisz się na newsletter, jeśli nie chcesz przegapić kolejnych publikacji.
W wielu zagadnieniach obowiązujących na egzaminie CompTIA Security+ pojawia się termin hash bądź hashing. Z tego względu, postanowiłem jak najszybciej dodać ten punkt do kompilacji.
- Skrót (ang. hash; hash-code; fingerprint) jest to nieuporządkowany ciąg znaków o stałej długości, wygenerowany za pomocą specjalnej funkcji matematycznej na podstawie wejściowego ciągu znaków o dowolnej długości.
- Proces obliczania skrótu (ang. hashing): dane wejściowe dowolnej długości -> funkcja hashująca -> tekstowy łańcuch znaków (ang. string) o stałej długości, zależnej od rodzaju zastosowanej funkcji.
- Hash – cechy charakterystyczne:
- Stała długość – niezależnie od rozmiaru danych wejściowych, wynik funkcji hashującej jest stałej długości. Na przykład, dla algorytmu SHA256, wynik zawsze będzie miał rozmiar 256 bitów (32 bajty).
- Nieodwracalność – w przeciwieństwie do szyfrowania (ang. encryption), odzyskanie danych wejściowych na podstawie skrótu jest (a przynajmniej powinno być) obliczeniowo trudne.
- Odporność na kolizje – kolizją (ang. collision) nazywamy sytuację, w której dwie różne wartości na wejściu spowodują wygenerowanie identycznego hasha i jest to zjawisko niepożądane. Pamiętajmy, że funkcje hashujące zwracają ciąg znaków o stałej długości, więc zakres wartości tych funkcji będzie zawsze mniejszy od zbioru danych wejściowych. Oznacza to, że hipotetycznie kiedyś do kolizji dojść musi. Istnieją jednak algorytmy (np. funkcje z rodziny SHA2 i SHA3), które mają tak duży zakres danych wyjściowych, że jeszcze nie odnaleziono dla nich przykładów kolizji. Natomiast dla algorytmu MD5 odnotowano kolizje już w 1996 roku, dlatego nie powinno się go wykorzystywać do krytycznych funkcjonalności, takich jak np. przechowywanie haseł.
- Przykład: skrót SHA256 dla tekstu
admin123
, to240be518fabd2724ddb6f04eeb1da5967448d7e831c08c8fa822809f74c720a9
. - Nawet niewielka zmiana w danych wejściowych spowoduje wygenerowanie zupełnie innego skrótu. Na przykład, jeśli do tekstu wejściowego z powyższego przykładu dodamy jedynie wykrzyknik (
admin123!
), to hash będzie wyglądał już całkowicie inaczej:5c06eb3d5a05a19f49476d694ca81a36344660e9d5b98e3d6a6630f31c2422e7
. - Przykładowe zastosowania hashingu:
- Gwarancja niezmienności danych – możemy wykorzystać unikatowy charakter skrótu do wygenerowania sygnatury dla określonych danych. Jeśli nie mamy pewności, czy ściągnięty plik nie został zmodyfikowany gdzieś po drodze, możemy dla pewności porównać sygnaturę ściągniętego pliku (jego hash), uzyskaną za pomocą wskazanego algorytmu, z tą udostępnioną dla oryginalnego pliku.
- Przechowywanie haseł – trzymanie haseł użytkowników w postaci czystego tekstu jest bardzo złym pomysłem ze względu na potencjalne wycieki danych. Dlatego w bazach danych, zamiast jawnych haseł, przechowuje się wyniki kryptograficznych funkcji skrótu, charakteryzujące się nieodwracalnością i silną odpornością na kolizje. Kiedy użytkownik podaje hasło w ramach procesu uwierzytelniania, zostaje wyliczony skrót z użyciem identycznej funkcji i jest on porównywany z tym zapisanym w bazie.
- Podpisy elektroniczne – dzięki nim wiemy, że dane zostały przesłane przez zaufanego nadawcę. Hash pełni tutaj funkcję pomocniczą, jako sygnatura oryginalnych danych, która później jest jeszcze szyfrowana za pomocą algorytmu szyfrowania asymetrycznego. Dzięki temu sam podpis elektroniczny nie generuje ogromnego narzutu dodatkowy bajtów do wysłania.
- Łatwe porównywanie zawartości plików – jeśli chcemy szybko porównać zawartość plików tekstowych, to zamiast całych plików, w bazie możemy przechowywać tylko skrót wyliczony na podstawie tejże zawartości. Wiedząc, że nawet niewielka zmiana powoduje wygenerowanie zupełnie innego skrótu, możemy wykorzystać tę właściwość do szybkiego porównywania i zidentyfikowania ewentualnych duplikatów.
- Technologia blockchain – w dużym uproszczeniu: blockchain to nic innego jak rozproszona baza danych z zapisanym łańcuchem transakcji, do którego stale dodawane są nowe transakcje. Transakcją może być np. informacja o tym, że ktoś zakupił bądź sprzedał określoną ilość Bitcoinów. Zastosowanie skrótów pozwala na zweryfikowanie czy nowa transakcja jest prawdziwa i dozwolona, zanim zostanie dodana do łańcucha.
- W przypadku weryfikacji ściągniętych plików możemy spotkać się z pojęciem sumy kontrolnej (ang. checksum). Należy zaznaczyć, że choć hash może być wykorzystany jako suma kontrolna, to jednak jest to zupełnie inny mechanizm. Celem stosowania sum kontrolnych jest sprawdzenie, czy nie wystąpiły przypadkowe błędy w czasie transmisji danych (np. podczas wysyłania przez sieć lub zapisu na nośniku danych). W związku z tym, używają one prostszych i szybszych algorytmów, ale przez to nie są odporne na kolizje i można w łatwy sposób je sfałszować.