
Jak algorytm, który miał gwarantować bezpieczeństwo danych, stał się przykładem podręcznikowym tego, czego nie robić w kryptografii.
Pamiętasz czasy, kiedy hasła w bazach danych „zabezpieczano” jedną funkcją i wszyscy spali spokojnie? MD5 było właśnie takim bohaterem internetu — szybkim, prostym i powszechnie używanym. Problem w tym, że ten bohater dawno już stracił swoją supermoc, a mimo to wciąż gdzieniegdzie pojawia się w kodzie, jakby nic się nie wydarzyło. Dziś opowiem Ci historię tego, jak algorytm, który miał gwarantować integralność danych, stał się przykładem podręcznikowym tego, czego nie robić w kryptografii.
Co to właściwie jest MD5?
Zacznijmy od podstaw, żeby wszyscy byli na tej samej stronie. MD5 (Message-Digest Algorithm 5) to funkcja skrótu (hashująca), zaprojektowana przez Ronalda Rivesta w 1991 roku. Jej zadaniem jest przyjęcie danych wejściowych — może to być plik, hasło, czy całe zdjęcie - i wygenerowanie z nich krótkiego, stałej długości „odcisku palca” o długości 128 bitów (czyli 32 znaki w zapisie szesnastkowym).
Idea była prosta i genialna:
- Te samo dane wejściowe → zawsze ten sam hash.
- Nawet najmniejsza zmiana w danych → kompletnie inny hash.
- Z hasha nie powinno się dać odtworzyć oryginalnych danych.
- Nie powinno być możliwe znalezienie dwóch różnych danych, które dają ten sam hash (tzw. kolizja).
Brzmi jak solidny fundament, prawda? I faktycznie, na początku lat 90. MD5 było prawdziwą rewolucją. Używano go wszędzie - do weryfikacji integralności plików, do podpisów cyfrowych, do przechowywania haseł w bazach danych, do certyfikatów SSL. Mówiąc krótko: MD5 było wszędzie, bo było szybkie i „wystarczająco dobre”.
Pierwsze rysy na fundamencie
Tu zaczyna się ta ciekawsza, bardziej dramatyczna część historii. Już w 1996 roku, czyli zaledwie pięć lat po publikacji algorytmu, kryptograf Hans Dobbertin opisał pewne słabości w funkcji kompresji MD5. To był pierwszy sygnał ostrzegawczy - coś w stylu pierwszej rysy na szybie samochodowej, którą można jeszcze zignorować, ale która z czasem będzie się powiększać.
Środowisko kryptograficzne zareagowało... cóż, raczej spokojnie. MD5 było zbyt wygodne, zbyt powszechne i zbyt głęboko zakorzenione w istniejących systemach, żeby ktoś chciał z niego masowo odchodzić na podstawie jednego teoretycznego ostrzeżenia. Brzmi znajomo? To klasyczny scenariusz w branży IT: „wiemy, że to ryzykowne, ale działa, więc po co to zmieniać”.
2004 rok - bomba wybucha
Prawdziwy przełom - albo, jeśli wolisz, prawdziwa katastrofa wizerunkowa MD5 - nastąpił w 2004 roku. Grupa chińskich badaczy, na czele z Xiaoyun Wang, opublikowała pracę, w której pokazała praktyczny sposób generowania kolizji MD5. Innymi słowy: udowodnili, że można stworzyć dwa różne pliki, które mają identyczny hash MD5.
To była prawdziwa rewolucja w świecie kryptoanalizy. Wcześniej teoretyczne ataki na MD5 wymagały tak gigantycznej liczby obliczeń, że w praktyce nikogo nie powinny niepokoić. Wang i jej zespół pokazali jednak, że kolizje można znaleźć w czasie liczonym w godzinach, a nie w latach świetlnych obliczeń. To zupełnie zmieniało reguły gry.
Co ciekawe, mimo tego odkrycia, świat IT wciąż nie rzucił się masowo do zmiany algorytmów. Brzmi absurdalnie, ale tak właśnie wygląda inercja technologiczna - ludzie wolą „działające” rozwiązanie niż „bezpieczne, ale wymagające pracy”.
Flame - wirus, który zhakował samego Microsoftu
Jeśli ktoś potrzebował dowodu na to, że teoretyczna słabość MD5 może mieć bardzo realne konsekwencje, dostał go w 2012 roku. Wtedy świat dowiedział się o złośliwym oprogramowaniu Flame, jednym z najbardziej zaawansowanych narzędzi cyberszpiegowskich w historii.
Co zrobił Flame? Wykorzystał słabość kolizyjną MD5 do podrobienia certyfikatu cyfrowego Microsoftu. Brzmi to jak scenariusz filmu szpiegowskiego, ale to wydarzyło się naprawdę. Atakujący stworzyli fałszywy certyfikat, który wyglądał jak legalnie podpisany przez Microsoft, dzięki czemu złośliwe oprogramowanie mogło się instalować na komputerach z Windows, podszywając się pod legalne aktualizacje systemowe.
To był moment, w którym wielu specjalistów od bezpieczeństwa powiedziało: „OK, koniec żartów”. Jeśli teoretyczna słabość matematyczna może posłużyć do ataku na infrastrukturę jednej z największych firm technologicznych na świecie, to nie jest to już akademicka dyskusja - to realne zagrożenie.
1991 - powstaje MD5, szybko zyskuje powszechne zastosowanie.1996 - Hans Dobbertin opisuje pierwsze słabości algorytmu.
2004 - Xiaoyun Wang i zespół pokazują praktyczny atak kolizyjny.
2012 - wirus Flame wykorzystuje słabość MD5 do podrobienia certyfikatu Microsoftu.
2026 - MD5 wciąż występuje w niektórych systemach legacy, mimo że uznawany jest za niebezpieczny.
Jak właściwie wygląda atak na MD5?
Żeby zrozumieć, dlaczego to jest takie istotne, warto wiedzieć, jak w praktyce wygląda taki atak. Mamy tu kilka rodzajów zagrożeń:
- Atak kolizyjny (collision attack) - atakujący tworzy dwa różne dokumenty z identycznym hashem. Może to wykorzystać np. do podpisania złośliwego pliku tak, żeby wyglądał na identyczny z legalnym, zaufanym dokumentem.
- Atak na bazę haseł (rainbow tables i brute force) - ponieważ MD5 jest bardzo szybkie obliczeniowo, można je łamać metodą „brute force” z zaskakującą prędkością. Tabele haseł (rainbow tables) dla MD5 są powszechnie dostępne w internecie i pozwalają odwrócić hash do oryginalnego hasła w ciągu sekund, jeśli hasło było proste.
- Atak preimage - teoretycznie trudniejszy do wykonania niż kolizje, ale badania nad nim wciąż trwają i z czasem mogą przynieść kolejne nieprzyjemne niespodzianki.
Najbardziej niepokojące jest to, że dzisiejsze karty graficzne (GPU) potrafią liczyć miliardy hashów MD5 na sekundę. To, co kiedyś wymagało superkomputera i wielu lat obliczeń, dziś można zrobić na domowym sprzęcie do gier w ciągu kilku godzin.
„Ale ja używam MD5 tylko do sprawdzania plików, to chyba nic złego?”
To pytanie, które słyszy się dość często, i warto je rozłożyć na czynniki pierwsze. Otóż zależy, do czego konkretnie używasz MD5.
Jeśli używasz MD5 wyłącznie do sprawdzenia, czy plik się nie uszkodził podczas pobierania (czyli czysto przypadkowe błędy, a nie celowe manipulacje), to ryzyko jest minimalne. Nikt nie próbuje celowo stworzyć kolizji, więc statystyczna szansa na przypadkowe uszkodzenie pliku, które dałoby identyczny hash, jest astronomicznie mała.
Problem zaczyna się, gdy MD5 jest używane w kontekstach, gdzie bezpieczeństwo ma znaczenie:
- przechowywanie haseł użytkowników,
- podpisy cyfrowe i certyfikaty,
- weryfikacja integralności oprogramowania pochodzącego z niezaufanego źródła,
- systemy uwierzytelniania.
W tych przypadkach MD5 to po prostu otwarta furtka dla kogoś, kto wie, co robi.
Dlaczego to wciąż jest problem w 2026 roku?
Możesz zapytać: „OK, ale to było ponad 20 lat temu, czy ktokolwiek jeszcze używa MD5 do czegokolwiek poważnego?”. Niestety odpowiedź brzmi: tak, zdecydowanie tak.
Powody są dość ludzkie i całkiem zrozumiałe:
- Stary kod legacy. Wiele systemów napisanych przed 2010 rokiem wciąż działa, a nikt nie chce „ruszać tego, co działa”, bojąc się, że coś się zepsuje.
- Brak świadomości. Część programistów, zwłaszcza tych mniej doświadczonych, po prostu nie wie, że MD5 jest passé. Kopiują fragment kodu ze starego tutoriala i nie zadają sobie pytania, czy to jest aktualne podejście.
- Wygoda i szybkość. MD5 jest szybsze obliczeniowo niż nowsze, bezpieczniejsze algorytmy. Dla kogoś, kto nie myśli o bezpieczeństwie, a tylko o wydajności, to może wydawać się atrakcyjne.
- „To nigdy się nie wydarzy mi”. Klasyczny błąd myślowy - ludzie zakładają, że ich system jest za mały, za nieistotny, żeby ktokolwiek chciał go atakować.
I tu właśnie pojawia się sedno problemu: bezpieczeństwo to nie jest coś, co robi się „kiedyś”, to coś, co trzeba robić cały czas i na bieżąco aktualizować.
Czym zastąpić MD5?
Dobra wiadomość jest taka, że nie musisz wymyślać koła na nowo. Świat kryptografii poszedł znacznie dalej i mamy do dyspozycji solidne alternatywy, w zależności od tego, do czego chcesz użyć funkcji hashującej:
Do ogólnego hashowania i weryfikacji integralności
- SHA-256 lub SHA-3 - standard branżowy, znacznie bezpieczniejszy niż MD5.
- BLAKE2 / BLAKE3 - nowoczesne, szybkie i bezpieczne.