Przeskocz do treści

Co to jest hash?


Na przeczytanie potrzebujesz
4 minut(y).

let's talk abou hash baybe

Wrzucić na instagram? Sadzić, palić, zalegalizować? Jeżeli słowo „hash” kojarzy Ci się głównie z tagami pod zdjęciem lub z substancją pochodną konopii indyjskich (tzw. haszyszem), najczęściej spożywaną w formie „skrętów”, to czym prędzej powinieneś przeczytać ten artykuł. Pojęcie hash w informatyce znaczy zupełnie coś innego.

Hash’em nazywamy wynik działania operacji matematycznej (nazywanej funkcją skrótu) na określonym ciągu znaków (np. na haśle lub pliku). Funkcja ta przekształca podane przez użytkownika dane wejściowe (np. hasło) na krótką, posiadającą stały rozmiar wartość znakową.

Przykład:

Po zastosowaniu funkcji skrótu MD5 na haśle ZieloneZyrafyNadlatuja! otrzymamy wartość wyjściową w postaci ciągu znaków a979fa3215db117b322dec4941b932af.

Ważną własnością funkcji skrótu jest to, że jest ona nieodwracalna (np. operacją matematyczną odwrotną do dodawanie jest odejmowanie, a dla mnożenia – dzielenie). Osoba mając hash nie może zastosować funkcji odwrotnej do funkcji skrótu by poznać ciągu znaków (np. hasła), dla którego dany hash został wygenerowany.

W przeciwieństwie do np. operacji dodawania, funkcji skrótu nie da się odwrócić

Wartość wyjściowa (hash) po zastosowaniu funkcji skrótu na stałym ciągu znaków zawsze będzie taka sama – nie jest ona zależna od czasu generowania hasha lub komputera, na którym hash jest wyliczany. Wykonując 100 razy funkcję skrótu na haśle ZieloneZyrafyNadlatuja! zawsze otrzymamy tę samą wartość wyjściową. To bardzo ważne, o czym wspominać będziemy za chwilę odwołując się do przykładów wyliczania hash’a różnymi funkcjami skrótów dla przykładowych haseł.

Tak samo stosując 100 razy funkcję skrótu na tym samym dokumencie zawsze uzyskamy ten sam wynik wyjściowy. Jeżeli dwóch użytkowników ma na swoich komputerach ten sam plik, to każdy z nich po zastosowaniu na nim tej samej funkcji skrótu uzyska hash o tej samej wartości. Dlatego hash otrzymany w wyniku stosowania funkcji skrótu na pliku często nazywany jego odciskiem palca

Rodzaje funkcji skrótu.

Istnieje wiele funkcji skrótu. Do tych najbardziej popularnych zaliczyć można MD5, SHA-1, SHA-2, SHA-256. Zastosowanie każdej z tych funkcji skrótu daje inną długość wyjściowego hasha.

MD5 - 32 znakowa (128 bitowa) wartość końcowa,

SHA-1 - 40 znakowa (160-bitowa) wartość końcowa,

SHA-256 - 64 znakowa (256-bitowa) wartość końcowa.

Oznacza to np. że dla dowolnego ciągu znaków, na którym wykonamy funkcję SHA-256 zawsze otrzymamy wartość w postaci 64 znakowej wartości wyjściowej.

W tym miejscu warto zaznaczyć, że nie zaleca się obecnie wykorzystywać funkcji MD5 oraz SHA-1. Generowane przez nie hashe są niewystarczająco długie, co może (w pewnych okolicznościach) prowadzić do stworzenia takiej samej wartości wyjścia dla funkcji skrótu dla dwóch różnych wejść. Takie zdarzenie nazywamy kolizją. W następnym paragrafie wyjaśnię dlaczego ważne jest unikanie kolizji hashy.

Do czego stosuje się funkcje skrótu oraz hash?

Funkcje skrótu oraz hashe wykorzystywane są m.in. przez różne strony internetowe, do których można się zalogować. Dobrą praktyką (z punktu widzenia bezpieczeństwa) jest zapisywanie hasła użytkownika po stronie bazy danych serwisu (np. w ramach procesu rejestracji konta użytkownika w serwisie internetowym) w postaci hasha. Dlaczego? Jeżeli baza danych serwisu internetowego wycieknie (a z nią loginy i hasła użytkowników), to przestępcy nie poznają hasła, którym się logowaliśmy, a jedynie jego wartość skrótu. Jak wspominałem wcześniej mając sam skrót hasła, przestępca nie może w prosty sposób otrzymać hasło, dla którego został wygenerowany dany hash (nie może użyć funkcji odwrotnej do funkcji skrótu).

Twórcy oprogramowania stosują hash jako mechanizm potwierdzający, że oprogramowanie, które ściągasz z internetu nie zostało zmodyfikowane. Obliczają oni za pomocą funkcji skrótu wartość hasha dla swojego oprogramowania, a następnie umieszczają ją w publicznie dostępnym miejscu. Jeżeli po ściągnięciu oprogramowania (np. z innego miejsca niż oficjalna strona dostawcy) wyliczony przez użytkownika hash nie zgadza się z tym podanym na stronie producenta, oznacza to, że pobrane oprogramowanie uległo zmianie (zostało zmodyfikowane przez przestępcę lub nie zostało w pełni pobrane) i nie należy go instalować na swoim komputerze, ponieważ może zawierać złośliwego wirusa.

Niektóre banki stosują hash jako mechanizm potwierdzający, że prezentowany na ich stronie regulamin dotyczący jakiegoś produktu lub usługi nie uległ zmianie. Po podpisaniu umowy klientowi wskazywana jest ścieżka przechowywania regulaminu, a na jego komórkę wysyłana jest wartość hasha dla tego dokumentu. Jeżeli regulamin zostałby zmodyfikowany przez bank, to posiadałby już inny hash niż ten przesłany klientowi w wiadomośći tekstowej.

Jeżeli dla powyższych przykładów zastosujemy funkcję skrótu, za pomocą której w kontrolowany sposób można wygenerować hash podobny do tego obliczonego dla innego pliku (tj. doprowadzić do kontrolowanej kolizji) to mechanizm bezpieczeństwa jakim jest hash traci sens stosowania.

Jak wygląda hash mojego hasła?

Załóżmy, że Twoim hasłem jest fraza ZieloneZyrafyNadlatuja! – To hasło długie (23 znakowe), zawierające wielkie i małe litery, oraz znak specjalny. Trudne do złamania i proste do zapamiętania (o tym jak tworzyć bezpieczne hasła pisał Łukasz w artykuke „Jak stworzyć bezpieczne hasło?”). Po zastosowaniu na nim funkcji skrótu MD5 otrzymamy wartość a979fa3215db117b322dec4941b932af.

MD5(ZieloneZyrafyNadlatuja!) = a979fa3215db117b322dec4941b932af

stosując inne funkcje skrótu otrzymalibyśmy inne wartości:

MD5(ZieloneZyrafyNadlatuja!) = a979fa3215db117b322dec4941b932af

SHA-1(ZieloneZyrafyNadlatuja!) = bf6951ad7ba57d2f813104b185228476d7eef5ad

SHA-256(ZieloneZyrafyNadlatuja!) = c02c1448bc17d8b972c53c62c6d8c2bac5eb41cdde08985faa16a562c4ff9d08

Zmieniając w jakikolwiek sposób nasze hasło (modyfikując jego długość lub zmieniając wartość chociaż jednego znaku otrzymamy całkowicie inną wartość hasha po zastosowaniu funkcji skrótu). Zmieniajac nasze hasło z ZieloneZyrafyNadlatuja! na MieloneZyrafyNadnatuja! (zamieniamy pierwszą literę „Z” na „M”) otrzymamy następujące wartości hashy:

MD5(MieloneZyrafyNadlatuja!) = 35e35318355c9bb8d5052b4c0266a943

SHA-1(MieloneZyrafyNadlatuja!) = 28eb9398c7eee83758252d1801e5d44c9c105d60

SHA-256(MieloneZyrafyNadlatuja!) = de9c8f0c97844063470b0dfe7d88ba6805a9c87e43a50558e122246a89245cac

Zmieniona została jedna litera z „Z” na „M”, co całkowicie zmieniło wartość otrzymanego hasha. Porównując hashe między sobą użytkownik nie jest w stanie, żaden sposób stwierdzić czy hasła, z których wygenerowane zostały hashe są do siebie podobne i którymi znakami ewentualnie się różnią:

Dla MD5:

MD5(ZieloneZyrafyNadlatuja!) = a979fa3215db117b322dec4941b932af

MD5(MieloneZyrafyNadlatuja!) = 35e35318355c9bb8d5052b4c0266a943

Dla SHA-1:

SHA-1(ZieloneZyrafyNadlatuja!) = bf6951ad7ba57d2f813104b185228476d7eef5ad

SHA-1(MieloneZyrafyNadlatuja!) = 28eb9398c7eee83758252d1801e5d44c9c105d60

 Dla SHA-256:

SHA-256(ZieloneZyrafyNadlatuja!) = c02c1448bc17d8b972c53c62c6d8c2bac5eb41cdde08985faa16a562c4ff9d08

SHA-256(MieloneZyrafyNadlatuja!) = de9c8f0c97844063470b0dfe7d88ba6805a9c87e43a50558e122246a89245cac

Powyższą operację tworzenia hashy z wykorzystaniem funkcji skrótu można oczywiście stosować również na plikach.

Podsumowanie

Hash to wynik zastosowania funkcji skrótu na pewnym ciągu znaków (haśle lub pliku). Hash pozostaje stały dla danego pliku, a każda choćby najmniejsza modyfikacja jednego znaku powoduje niezgodność nowo zmodyfikowanego pliku ze starym hashem. 

Jeżeli pobierasz oprogramowanie z internetu, a jego twórca na swojej oficjalnej stronie podaje hash dla pliku instalacyjnego, to dla własnego bezpieczeństwa wylicz wartość hash’a na pobranym pliku i porównaj go z tym podanym przez twórcę.

Jest nam niezwykle miło, że dotarłeś aż tutaj! Jeżeli uważasz, że powyższy tekst jest wartościowy, będziemy wdzięczni za udostępnienie go dalej, bo być może dzięki temu trafi do innej osoby, która również potrzebuje go przeczytać.

6 myśli na “Co to jest hash?

  1. Natalia

    Hej ciekawy materiał, prosty i wyjaśniający dobrze o co chodzi.
    Mam jeszcze pytanie, na końcu piszesz: wylicz wartość hash’a na pobranym pliku.

    Czy jest jakaś instrukcja dla laika? Chciałabym się tym pobawić.

    Odpowiedz
  2. Marek

    W przykładzie jest błąd:
    Dla MD5:
    MD5(MieloneZyrafyNadlatuja!) = a979fa3215db117b322dec4941b932af
    MD5(MieloneZyrafyNadlatuja!) = 35e35318355c9bb8d5052b4c0266a943
    W drugim wierszu powinno być:
    MD5(ZieloneZyrafyNadlatuja!) = a979fa3215db117b322dec4941b932af

    Odpowiedz

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *