Wyścig algorytmów hashujących - czym Whirlpool różni się od SHA i MD5

12.10.2026

algorytmy hashujące


Jeśli kiedykolwiek pobierałeś obraz systemu Linux i obok linku do pobrania widziałeś długi ciąg liter i cyfr podpisany „SHA-256", to miałeś już do czynienia z funkcją skrótu. Jeśli logowałeś się na jakiejś stronie, Twoje hasło prawdopodobnie przeszło przez coś podobnego, zanim trafiło do bazy danych. A jeśli używasz szyfrowanych dysków, w tle mogły pracować algorytmy, o których istnieniu nawet nie miałeś pojęcia — na przykład Whirlpool.

Dziś zabieram Cię w podróż po świecie hashowania. Opowiem, czym są funkcje skrótu, dlaczego jedne się zestarzały, a inne wciąż trzymają się świetnie, i czym tak naprawdę różnią się trzy rodziny algorytmów: MD5, SHA oraz nieco mniej znany, ale bardzo ciekawy Whirlpool. Obiecuję, że obejdzie się bez matematycznego żargonu, a przy okazji dowiesz się, jak wygląda prawdziwy wyścig zbrojeń w kryptografii.

Czym jest funkcja skrótu? Wyjaśnienie bez magii

Funkcja skrótu (ang. hash function) to algorytm, który przyjmuje dowolne dane — jedno słowo, zdjęcie, cały film w 4K — i zamienia je na ciąg znaków o stałej długości. Ten ciąg nazywamy skrótem, hashem lub czasem „odciskiem palca" danych.

Najlepiej wyobrazić to sobie jak maszynkę do mielenia mięsa: wrzucasz kawał mięsa, wychodzi mielone. Z mielonego nie odtworzysz już kotleta, a dwa różne kawałki mięsa dadzą dwie różne porcje mielonego. Oczywiście to tylko metafora, ale oddaje sedno.

Dobra kryptograficzna funkcja skrótu musi spełniać kilka warunków:

  • Jest deterministyczna — te same dane zawsze dają ten sam skrót.
  • Jest szybka w obliczaniu (w typowych zastosowaniach, bo przy hasłach to akurat wada — o tym za chwilę).
  • Jest jednokierunkowa — z samego skrótu nie da się odtworzyć danych wejściowych (tzw. odporność na odwracanie, preimage resistance).
  • Daje efekt lawiny — zmiana jednego bitu na wejściu zmienia mniej więcej połowę bitów skrótu.
  • Jest odporna na kolizje — praktycznie niewykonalne jest znalezienie dwóch różnych danych, które dadzą ten sam skrót.

Przykład? Skrót MD5 pustego tekstu to d41d8cd98f00b204e9800998ecf8427e, a SHA-256 pustego tekstu zaczyna się od e3b0c44298fc1c14.... Dodaj jedną literę do wejścia, a wynik zmieni się nie do poznania.

Do czego to się właściwie przydaje?

Zastosowań jest mnóstwo, a wiele z nich mijasz codziennie:

  1. Weryfikacja integralności plików — porównujesz skrót pobranego pliku ze skrótem podanym przez autora.
  2. Podpisy cyfrowe i certyfikaty — podpisuje się zazwyczaj skrót dokumentu, a nie cały dokument.
  3. Przechowywanie haseł — w bazie powinien lądować skrót (z solą), nie hasło jawnym tekstem.
  4. Systemy kontroli wersji — Git identyfikuje obiekty po ich skrótach.
  5. Blockchain — łańcuch bloków to w gruncie rzeczy łańcuch skrótów.
  6. Wykrywanie duplikatów — szybkie sprawdzenie, czy dwa pliki są identyczne.

Krótka historia: skąd wzięły się te wszystkie skróty?

Aby zrozumieć różnice, warto spojrzeć na rodowód każdej z rodzin. To trochę jak z modelami samochodów — łatwiej pojąć, dlaczego jeden jest szybki, a drugi bezpieczny, gdy wiesz, kto go projektował i w jakich czasach.

MD5 — weteran z 1991 roku

MD5 (Message Digest 5) zaprojektował w 1991 roku Ronald Rivest, współtwórca algorytmu RSA. Opisano go w dokumencie RFC 1321. Generuje skrót o długości 128 bitów, zapisywany zwykle jako 32 znaki szesnastkowe. Przetwarza dane w blokach po 512 bitów, w czterech rundach po szesnaście kroków.

Przez lata MD5 był absolutnym standardem. Był szybki, prosty i wszędzie obecny. Problem w tym, że kryptografowie ciągle go testowali — a w świecie bezpieczeństwa zainteresowanie atakujących przychodzi razem z popularnością.

W 2004 roku zespół chińskich badaczy pod kierunkiem Xiaoyun Wang pokazał praktyczny sposób na tworzenie kolizji w MD5, czyli dwóch różnych wiadomości o identycznym skrócie. Kolejne lata przyniosły usprawnienia: w 2007 roku zaprezentowano ataki typu chosen-prefix, a w 2008 grupa badaczy wykorzystała słabości MD5 do wystawienia fałszywego certyfikatu pośredniego urzędu certyfikacji. Głośnym echem odbił się też przypadek złośliwego oprogramowania Flame z 2012 roku, które według analiz użyło wariantu ataku kolizyjnego na MD5, aby podszyć się pod legalną aktualizację systemu Windows.

Wniosek? MD5 jest złamany pod kątem odporności na kolizje i nie powinien być używany tam, gdzie liczy się bezpieczeństwo — w podpisach, certyfikatach czy weryfikacji autentyczności. Jako prosta suma kontrolna wykrywająca przypadkowe uszkodzenie pliku wciąż bywa używany, ale i tu rozsądniej sięgnąć po nowszy algorytm.

Rodzina SHA — od SHA-1 po SHA-3

SHA (Secure Hash Algorithm) to nie jeden algorytm, lecz cała rodzina standardów publikowanych przez amerykański instytut NIST. Jej członkowie bywają ze sobą mylnie utożsamiani, więc uporządkujmy:

  • SHA-1 (1995) — skrót 160-bitowy. Przez lata był podstawą internetowego bezpieczeństwa. W 2017 roku badacze z Google i amsterdamskiego CWI zaprezentowali pierwszą praktyczną kolizję, projekt nazwany SHAttered. W 2020 roku pokazano jeszcze groźniejszy atak z wybranym prefiksem. Dziś SHA-1 jest uznawany za przestarzały, a NIST zaleca całkowite wycofanie go z użycia.
  • SHA-2 (2001) — pod tą nazwą kryje się cały zestaw wariantów: SHA-224, SHA-256, SHA-384, SHA-512 oraz warianty obcięte, jak SHA-512/256. Do dziś jest to absolutny koń roboczy internetu: TLS, certyfikaty, Bitcoin, aktualizacje oprogramowania.
  • SHA-3 (2015) — wybrany w otwartym konkursie NIST, który trwał od 2007 do 2012 roku. Zwyciężył algorytm Keccak autorstwa zespołu Bertoni, Daemen, Peeters i Van Assche. Standard opublikowano jako FIPS 202.

Ciekawostka: SHA-3 nie powstał dlatego, że SHA-2 został złamany. Po prostu po atakach na MD5 i SHA-1 chciano mieć w zanadrzu algorytm zbudowany zupełnie inaczej, na wypadek gdyby w SHA-2 odkryto fundamentalną wadę. To rozsądna strategia ubezpieczeniowa — nie wkładaj wszystkich jajek do jednego koszyka.

Whirlpool — europejska odpowiedź

A teraz bohater, który zwykle pozostaje w cieniu. Whirlpool zaprojektowali Vincent Rijmen (belgijski kryptograf, współautor algorytmu szyfrowania AES) oraz Paulo S. L. M. Barreto (brazylijski kryptograf). Nazwa nawiązuje do Galaktyki Wir (M51), co dobrze pasuje do idei „mielenia" danych w wirze.

Whirlpool generuje skrót o długości 512 bitów, czyli aż 128 znaków szesnastkowych. Istniały trzy wersje: pierwotna (często nazywana Whirlpool-0), poprawiona Whirlpool-T oraz finalna wersja z 2003 roku, w której zmodyfikowano m.in. macierz dyfuzji. To właśnie ona została znormalizowana w ISO/IEC 10118-3 i znalazła się wśród rekomendacji europejskiego projektu NESSIE, którego celem było wyłonienie wartościowych algorytmów kryptograficznych.

Pod maską: jak budowane są te algorytmy?

Tu zaczyna się najciekawsza część. Różnice między MD5, SHA i Whirlpool to nie tylko liczby, lecz przede wszystkim filozofia projektowania.

Konstrukcja Merkle’a–Damgårda

MD5, SHA-1 i SHA-2 korzystają z klasycznej konstrukcji Merkle’a–Damgårda. Dane dzieli się na bloki, a każdy kolejny blok jest mieszany ze „stanem" wynikającym z poprzednich. Stan końcowy to Twój skrót. Pomyśl o tym jak o kuli śnieżnej, która toczy się po zboczu i przy każdym obrocie oblepia się kolejną porcją śniegu.

Ta budowa ma jedną znaną wadę: podatność na ataki przez wydłużenie wiadomości (length extension attacks). Jeśli znasz skrót wiadomości i jej długość, możesz — bez znajomości samej wiadomości — policzyć skrót wiadomości z doklejonym ciągiem. Dotyczy to MD5, SHA-1 oraz pełnych SHA-256 i SHA-512. Warianty obcięte, jak SHA-512/256, są na ten atak odporne, podobnie jak SHA-3.

Whirlpool: szyfr blokowy w roli miksera

Whirlpool również opiera się na schemacie iteracyjnym, ale jego rdzeniem jest coś innego niż w MD5 czy SHA. To dedykowany szyfr blokowy, wzorowany na AES (nazywany często W), użyty w trybie Miyaguchi–Preneel, czyli sposobie zamiany szyfru w funkcję skrótu.

W praktyce:

  • stan to macierz 8×8 bajtów (AES używa 4×4),
  • wykonywanych jest 10 rund przekształceń,
  • każda runda składa się z podstawienia bajtów (S-box), przestawienia kolumn, mieszania wierszy i dodania klucza rundowego,
  • wiadomość jest dopełniana tak, by jej długość była wielokrotnością 512 bitów, a na końcu dopisywana jest 256-bitowa wartość długości.

To ciekawe, bo oznacza, że Whirlpool dziedziczy dobrze przebadaną „dyfuzję" znaną z AES. Autorzy liczyli, że wieloletnia analiza AES pośrednio zwiększy zaufanie do konstrukcji skrótu.

Keccak: gąbka zamiast łańcucha

SHA-3 idzie jeszcze innym torem. Zamiast Merkle’a–Damgårda stosuje konstrukcję gąbki (sponge construction): dane są „wchłaniane" do wielkiego stanu wewnętrznego, a potem skrót „wyciskany" na zewnątrz. Dzięki temu SHA-3 nie ma problemu z wydłużaniem wiadomości i jest bardzo elastyczny — z tej samej idei wywodzą się funkcje o zmiennej długości wyjścia (SHAKE).

Porównanie w pigułce

CechaMD5SHA-1SHA-256SHA-3-256Whirlpool
Rok powstania1991199520012015 (standard)2000–2003
Długość skrótu128 bitów160 bitów256 bitów256 bitów512 bitów
Zapis szesnastkowy32 znaki40 znaków64 znaki64 znaki128 znaków
KonstrukcjaMerkle–DamgårdMerkle–DamgårdMerkle–DamgårdGąbkaMiyaguchi–Preneel (szyfr typu AES)
Status bezpieczeństwaZłamany (kolizje)Złamany (kolizje)Uznawany za bezpiecznyUznawany za bezpiecznyBrak praktycznych ataków
Zalecany dzisiaj?NieNieTakTakTak, choć rzadko wybierany

Dlaczego długość skrótu ma znaczenie?

Z powodu tzw. paradoksu urodzin znalezienie kolizji jest łatwiejsze, niż wskazywałaby sama długość skrótu. Dla skrótu o n bitach potrzeba mniej więcej 2n/2 prób, aby z sensownym prawdopodobieństwem trafić na kolizję. Dla MD5 to około 264 operacji — kiedyś abstrakcja, dziś wykonalne dla zdeterminowanego przeciwnika, zwłaszcza że prawdziwe ataki są jeszcze sprytniejsze. Dla SHA-256 to 2128, co jest poza zasięgiem jakiegokolwiek znanego sprzętu. A dla Whirlpool — aż 2256.

To trochę jak zgadywanie PIN-u. Czterocyfrowy kod złamiesz w kilka minut. Sześćdziesięciocztero­cyfrowy? Wszechświat skończy się szybciej.

Whirlpool kontra MD5 i SHA: kto wygrywa?

To pytanie jest trochę podchwytliwe, bo zależy od tego, co mierzymy. Rozbijmy to na kategorie.

Bezpieczeństwo

Tu sprawa jest prosta: MD5 i SHA-1 odpadają. Jeśli chodzi o SHA-2, SHA-3 i Whirlpool, żadna z tych funkcji nie doczekała się praktycznego ataku na pełną wersję. Dla Whirlpool najlepsze znane wyniki dotyczą wersji z ograniczoną liczbą rund — badacze (m.in. Lamberger, Mendel, Rechberger, Rijmen i Schläffer) używali tzw. rebound attack, by znaleźć kolizje lub rozróżniacze dla zredukowanych wariantów. Dla pełnych dziesięciu rund nic praktycznego nie ma. Margines bezpieczeństwa wygląda więc solidnie.

Warto jednak być uczciwym: Whirlpool jest znacznie mniej przebadany niż SHA-2. Im więcej uwagi kryptoanalityków, tym większe zaufanie, a SHA-2 jest po prostu najbardziej „oblężoną twierdzą" świata. Brak ataków na mniej popularny algorytm nie zawsze oznacza jego wyższą wytrzymałość — czasem oznacza mniejsze zainteresowanie.

Wydajność

MD5 jest szybki, ale jego szybkość to dziś bardziej przekleństwo niż zaleta (o tym zaraz). SHA-256 i SHA-512 mają ogromną przewagę w praktyce: nowoczesne procesory — zarówno Intela i AMD, jak i ARM — oferują sprzętowe instrukcje przyspieszające SHA-2, więc obliczenia są błyskawiczne. Whirlpool takiego wsparcia nie ma i w typowym oprogramowaniu bywa od SHA-2 wolniejszy. Jego duży, 512-bitowy skrót i skomplikowana struktura sprawiają, że sprawdza się raczej tam, gdzie ktoś świadomie go wybrał.

Dostępność i wsparcie

SHA-2 jest dostępny dosłownie wszędzie: w każdej bibliotece, każdym języku, każdym systemie. Whirlpool znajdziesz w wielu bibliotekach kryptograficznych i narzędziach, ale już nie wszędzie jako opcję domyślną. W niektórych projektach — na przykład w nowszych wersjach OpenSSL — został przeniesiony do mniej eksponowanych modułów. W świecie szyfrowania dysków bywa za to oferowany jako jedna z opcji funkcji pomocniczych w narzędziach pokroju VeraCrypt.

Wielki mit: szybki hash do haseł

Tu muszę zatrzymać się na chwilę, bo to jeden z najczęstszych błędów początkujących programistów. Skoro MD5, SHA-256 i Whirlpool to „funkcje skrótu", to czy można nimi hashować hasła użytkowników? Nie powinno się tego robić — przynajmniej nie wprost.

Problem polega na tym, że wszystkie te algorytmy zaprojektowano jako szybkie. A szybkość to marzenie dla atakującego, który po wycieku bazy danych próbuje odgadnąć hasła. Współczesna karta graficzna potrafi liczyć miliardy skrótów MD5 na sekundę. W takiej sytuacji nawet całkiem przyzwoite hasło poddaje się w rozsądnym czasie.

Do haseł służą algorytmy celowo powolne i wymagające pamięci:

  • Argon2 — zwycięzca konkursu Password Hashing Competition z 2015 roku,
  • bcrypt — od lat sprawdzony standard,
  • scrypt — kosztowny pamięciowo, utrudnia ataki na sprzęcie specjalizowanym,
  • PBKDF2 — starszy, ale wciąż akceptowany, zwłaszcza w zastosowaniach wymagających zgodności z normami.

Do tego zawsze stosuje się sól (salt), czyli unikalny losowy dodatek dla każdego hasła, by dwóch użytkowników z tym samym hasłem nie miało identycznego skrótu w bazie.

Zapamiętaj: szybki hash świetnie sprawdza się przy plikach, a fatalnie przy hasłach. To dwa różne światy z odwrotnymi wymaganiami.

Jak wybrać algorytm w praktyce?

Przejdźmy do konkretów. Oto prosta ściąga, którą możesz zastosować w swoich projektach:

  1. Weryfikacja integralności pobranych plików — wybierz SHA-256 (lub SHA-512). To obecnie najpopularniejszy wybór, więc większość projektów publikuje właśnie takie sumy.
  2. Podpisy cyfrowe, certyfikaty, TLS — SHA-256 lub wyższy wariant SHA-2, ewentualnie SHA-3.
  3. Hasła — Argon2id, bcrypt lub scrypt, nigdy surowy MD5 czy SHA.
  4. Szybkie wykrywanie duplikatów w niewrażliwych danych — nawet MD5 może wystarczyć, o ile nikt nie ma motywacji, aby celowo wywoływać kolizje. Ale skoro i tak nowsze algorytmy są szybkie, lepiej od razu użyć SHA-256 lub szybszego, niekryptograficznego skrótu.
  5. Gdy potrzebujesz algorytmu o innej konstrukcji niż SHA-2 — SHA-3 to naturalny wybór.
  6. Gdy ktoś wymaga Whirlpool — na przykład przez specyfikację, kompatybilność z istniejącym systemem albo zgodność z normą ISO — nie ma powodu się go obawiać. Nadal jest bezpieczny.

Zauważ, że Whirlpool pojawia się na tej liście głównie jako świadomy wybór specjalistyczny. Nie dlatego, że jest słaby, lecz dlatego, że SHA-2 i SHA-3 wygrały walkę o ekosystem: są wszędzie, mają sprzętowe wsparcie i oficjalne rekomendacje największych instytucji.

Czego uczy nas ta historia?

Wyścig algorytmów hashujących to fascynująca opowieść o tym, jak nauka się rozwija. Kilka wniosków, które wyciągam z tej historii jako wielki entuzjasta nauki i edukacji:

  • Bezpieczeństwo nie jest stanem, tylko procesem. To, co było bezpieczne w 1995 roku, może być bezużyteczne w 2017. Kryptografowie nie szukają ataków dla zabawy — to właśnie dzięki nim algorytmy ewoluują.
  • Otwartość się opłaca. Konkurs na SHA-3 pokazał, jak publiczna analiza i debata prowadzą do lepszych standardów niż tajne projekty.
  • Różnorodność to strategia. Fakt, że istnieją alternatywy — SHA-3, Whirlpool, BLAKE — to polisa na wypadek, gdyby kiedyś ktoś znalazł fundamentalną słabość w SHA-2.
  • Popularność nie zawsze znaczy jakość, ale wpływa na zaufanie. Dobrze przebadany algorytm jest wart więcej niż egzotyczny, o którym nie wiadomo, czy ktoś go naprawdę przetestował.
  • Nie istnieje jedno narzędzie do wszystkiego. Inaczej hashuje się plik, inaczej hasło, a jeszcze inaczej podpisuje się dokument.

Podsumowanie

MD5 to zasłużony weteran, który odszedł na emeryturę po tym, jak okazało się, że kolizje można wytwarzać na zawołanie. SHA-1 podzielił jego los. SHA-2 pozostaje solidnym koniem roboczym internetu, SHA-3 — eleganckim zapasowym planem o odmiennej architekturze, a Whirlpool — ciekawym, bezpiecznym i elegancko zaprojektowanym wyborem, który po prostu przegrał wyścig o popularność, ale nie o jakość.

Jeśli więc ktoś zapyta Cię, czym Whirlpool różni się od SHA i MD5, możesz odpowiedzieć krótko: MD5 jest szybki, ale złamany; SHA-2 jest szybki i powszechny; SHA-3 jest zbudowany inaczej, by być niezależnym zabezpieczeniem; a Whirlpool opiera się na szyfrze podobnym do AES i daje aż 512-bitowy skrót — bezpieczny, choć rzadziej spotykany.

A jeśli kiedyś pobierzesz kolejny plik i zobaczysz obok niego długi ciąg znaków, spójrz na niego innym okiem. Za tym ciągiem stoją dekady badań, błyskotliwych ataków i bezkompromisowej matematyki. I to właśnie w tym tkwi cały urok kryptografii.

FAQ — najczęstsze pytania

Czy MD5 można jeszcze używać?
Do sprawdzania, czy plik nie uległ przypadkowemu uszkodzeniu — ostrożnie i niechętnie. Do czegokolwiek związanego z bezpieczeństwem — nie.

Czy skrót można „odszyfrować"?
Nie, bo to nie szyfrowanie. Hash jest jednokierunkowy. Atakujący może jedynie zgadywać dane wejściowe i porównywać skróty, dlatego tak ważne są silne hasła i powolne algorytmy do ich przechowywania.

Który algorytm jest „najlepszy"?
Nie ma jednego. Dla większości zastosowań wystarczy SHA-256, a do haseł należy wybrać Argon2id lub bcrypt.

Czy Whirlpool jest bezpieczniejszy od SHA-256 dzięki dłuższemu skrótowi?
Dłuższy skrót daje większy teoretyczny margines, ale SHA-256 już jest poza zasięgiem znanych ataków. W praktyce różnicę robi bardziej ekosystem, wsparcie sprzętowe i przebadanie niż sama liczba bitów.