Hash — co to jest, jak działa i które algorytmy są bezpieczne

Ciągi znaków i kod binarny, ilustracja funkcji skrótu hash w kryptografii

Hash to unikalny „odcisk palca” danych — krótki ciąg znaków o stałej długości, wygenerowany przez funkcję skrótu z dowolnie długiego wejścia. Funkcja skrótu jest jednokierunkowa: znając hash, nie można odtworzyć oryginalnych danych. Hashe chronią Twoje hasła w bazach danych, pozwalają weryfikować integralność plików i stanowią fundament blockchainów. Ale różne algorytmy hashowania mają radykalnie różne poziomy bezpieczeństwa — i wybór złego może być katastrofalny.

Co to jest hash — definicja

Hash to wynik działania funkcji matematycznej (funkcji skrótu) na ciągu danych wejściowych. Funkcja skrótu przekształca dowolnie długie dane — hasło, plik, wiadomość — w ciąg znaków o stałej, z góry określonej długości.

Przykład: hasło qwerty123 po przetworzeniu przez SHA-256 daje zawsze ten sam wynik: f2c57870308dc87f432e5912d4de6f8e322721ba21db943d0d9c6290c9b2c027. Zmiana jednego znaku — np. zmiana q na Q — daje zupełnie inny hash. To właściwość zwana lawinowością.

Cztery kluczowe cechy funkcji skrótu

  1. Deterministyczność — te same dane zawsze dają ten sam hash, niezależnie od czasu i urządzenia.
  2. Jednokierunkowość — znając hash, nie można matematycznie odtworzyć danych wejściowych.
  3. Lawinowość — zmiana nawet jednego bitu wejścia powoduje radykalną zmianę całego hasha.
  4. Odporność na kolizje — dwa różne zestawy danych wejściowych nie powinny dawać identycznego hasha. (Słaba odporność na kolizje to główna wada MD5.)

Popularne algorytmy hashowania

Algorytm Długość hasha Status bezpieczeństwa Zastosowanie
MD5 128 bitów (32 znaki hex) Nieuzywany do bezpieczeństwa Sumy kontrolne plików (nie hasła!)
SHA-1 160 bitów (40 znaków) Wycofany Stary Git, certyfikaty SSL (historycznie)
SHA-256 256 bitów (64 znaki) Bezpieczny Bitcoin, TLS, podpisy cyfrowe, sumy kontrolne
SHA-3 224–512 bitów Bezpieczny Standard NIST 2015, alternatywa dla SHA-2
bcrypt 60 znaków Bezpieczny do haseł Przechowywanie haseł w bazach danych
Argon2 Konfigurowalna Najlepszy do haseł (2015) Zwycięzca Password Hashing Competition

Dlaczego MD5 i SHA-1 są niebezpieczne do haseł

MD5 i SHA-1 są szybkie — to ich problem w kontekście haseł. Nowoczesna karta graficzna (GPU) może obliczyć miliardy hashów MD5 na sekundę. To oznacza, że hashowanie hasła MD5 i zapisanie go w bazie to niemal to samo, co zapisanie go w czystym tekście — atak brute force łamie je w minuty.

Dodatkowo MD5 ma udokumentowane kolizje — dwa różne dane wejściowe mogą dać identyczny hash MD5. To dyskwalifikuje go z zastosowań kryptograficznych.

Tęczowe tablice — atak na proste hashe

Tęczowa tablica (ang. rainbow table) to prekomputowana baza danych par: hasło → hash. Atakujący, który zdobędzie bazę z hashami haseł, porównuje je z tablicą i odczytuje oryginalne hasła.

Przykładowe rozmiary baz tęczowych tablic dla MD5: dla haseł 8-znakowych złożonych z cyfr i małych liter tablica zajmuje kilka GB, ale pokrywa niemal 100% możliwości.

Obrona: sól (salt). Przed hashowaniem do hasła dodaje się losowy ciąg znaków (sól), unikalny dla każdego użytkownika. Hash z solą: SHA-256("$2a$12$[losowa_sol]" + "moje_haslo"). Sól jest przechowywana w bazie razem z hashem — to nie tajemnica. Ale sprawia, że prekomputowane tablice stają się bezużyteczne — każde hasło w bazie ma inną sól, więc każde wymagałoby oddzielnej tablicy.

Zastosowania funkcji skrótu

Przechowywanie haseł

Aplikacje nigdy nie przechowują haseł w czystym tekście. Po rejestracji hasło jest hashowane (bcrypt/Argon2) i zapisywane. Przy logowaniu hasło wpisane przez użytkownika jest hashowane ponownie i porównywane z przechowywanym hashem. Serwer nigdy nie „zna” oryginalnego hasła.

Weryfikacja integralności plików

Przy pobieraniu oprogramowania (np. Linux ISO) strona podaje hash SHA-256 pliku. Po pobraniu możesz samodzielnie obliczyć hash pobranego pliku i porównać — jeśli się zgadza, plik nie był podmieniany ani uszkodzony podczas pobierania.

Blockchain i kryptowaluty

Bitcoin używa SHA-256 do łączenia bloków w łańcuch. Hash poprzedniego bloku jest wbudowany w nagłówek kolejnego — zmiana danych w dowolnym bloku zmienia jego hash, co „psuje” cały łańcuch od tego miejsca. To mechanizm odporności blockchain na manipulacje.

Podpisy cyfrowe i certyfikaty TLS

W protokole TLS serwer przesyła certyfikat SSL podpisany cyfrowo. Podpis to hash certyfikatu zaszyfrowany kluczem prywatnym CA. Przeglądarka oblicza hash certyfikatu i porównuje z odszyfrowanym podpisem — jeśli się zgadza, certyfikat jest autentyczny.

Źródła:

  • bezpieczny.blog — Co to jest hash? Co to jest funkcja skrótu?
  • ssl.com — Co to jest funkcja skrótu kryptograficznego?
  • netbe.pl — Funkcje skrótu (hashujące) w kryptografii

Najczęściej zadawane pytania o hash

Czy można „odszyfrować” hash?

Nie — w sensie matematycznym. Funkcja skrótu jest jednokierunkowa i nie ma operacji odwrotnej. Można jednak atakować hash: brute force (sprawdzanie kolejnych haseł), słownik (lista popularnych haseł) lub tęczowe tablice (prekomputowane pary hasło-hash). Dlatego słabe hasła z MD5 da się „złamać” — nie przez odszyfrowanie, ale przez odnalezienie wejścia, które daje ten sam hash.

Jaka różnica między MD5 a SHA-256?

MD5 generuje 128-bitowy hash (32 znaki hex) i jest bardzo szybki — co jest problemem dla bezpieczeństwa haseł (GPU może liczyć miliardy MD5/s). SHA-256 generuje 256-bitowy hash, jest wolniejszy i nie ma znanych kolizji. Do sum kontrolnych plików oba działają, ale do haseł żaden z nich nie nadaje się — należy użyć bcrypt lub Argon2.

Po co dodawać sól (salt) do hashowania haseł?

Sól to losowy ciąg dodawany do hasła przed hashowaniem, unikalny dla każdego użytkownika. Eliminuje tęczowe tablice — prekomputowane bazy par hasło-hash stają się bezużyteczne, bo każde hasło w bazie danych ma inną sól i musiałoby być atakowane indywidualnie. Sprawia też, że dwóch użytkowników z tym samym hasłem ma różne hashe w bazie.

Dlaczego bcrypt jest lepszy do haseł niż SHA-256?

bcrypt został zaprojektowany specjalnie do hashowania haseł — jest celowo wolny (koszt obliczeniowy można konfigurować). To kluczowe: im trudniejszy jest do obliczenia jeden hash, tym mniej hashów na sekundę może sprawdzić atakujący. SHA-256 jest zaprojektowany do szybkości — co jest zaletą przy sumach kontrolnych, ale wadą przy hasłach. Argon2 jest jeszcze lepszy od bcrypt.

Jak hash jest używany w Bitcoinie?

Bitcoin używa SHA-256 (dwóch rund) do mechanizmu proof-of-work. Górnicy szukają wartości (nonce), która dodana do nagłówka bloku daje hash zaczynający się od wymaganej liczby zer. To obliczeniowo trudne (proof of work), ale łatwe do zweryfikowania. Hash każdego bloku jest również wbudowany w następny blok — tworząc łańcuch odporny na modyfikacje.

Picture of Tomasz Zieliński
Tomasz Zieliński

Tomasz zajmuje się tematyką SEO, sztucznej inteligencji i automatyzacji pracy w marketingu internetowym. W swoich artykułach analizuje zmiany w algorytmach wyszukiwarek, rozwój narzędzi AI oraz nowe sposoby tworzenia i optymalizacji treści. Interesuje go przede wszystkim to, jak technologia wpływa na codzienną pracę specjalistów SEO, marketerów i twórców internetowych.

Facebook
Twitter
LinkedIn
Pinterest

Najnowsze Wpisy

Śledź nas