MD5 vs SHA-256: różnice i rekomendacje

MD5 i SHA-256 to dwie kryptograficzne funkcje haszujące. Produkują odcisk o stałym rozmiarze z wejścia o dowolnej długości. Spotyka się je wszędzie: weryfikacja integralności plików, podpisy, unikalne identyfikatory, certyfikaty TLS, blockchain. Ich status bezpieczeństwa jest natomiast bardzo różny: MD5 jest złamany od 2004 roku dla zastosowań kryptograficznych, SHA-256 pozostaje bezpieczny w 2026 roku. Ten artykuł podsumowuje sytuację.

Przypomnienie o funkcjach haszujących

Kryptograficzna funkcja haszująca przekształca wiadomość o dowolnej długości w odcisk o stałym rozmiarze. Trzy oczekiwane właściwości:

  • Odporność na preimage: mając hash, znalezienie oryginalnej wiadomości powinno być niewykonalne.
  • Odporność na drugą preimage: mając wiadomość, znalezienie innej, która daje ten sam hash, powinno być niewykonalne.
  • Odporność na kolizje: znalezienie dwóch różnych wiadomości dających ten sam hash powinno być niewykonalne.

Funkcja jest uznawana za złamaną, gdy tylko jedna z tych właściwości upadnie. W przypadku MD5 odporność na kolizje upadła w 2004 roku.

MD5: 128 bitów, złamany od 2004

MD5 (Message Digest 5) to funkcja zaprojektowana przez Ronalda Rivesta w 1991 roku i ustandaryzowana przez RFC 1321. Produkuje odcisk o długości 128 bitów (16 bajtów, 32 znaki szesnastkowe).

W 2004 roku Wang i Yu publikują atak, który produkuje kolizje MD5 w kilka godzin na PC. Od tego czasu koszt wygenerowania kolizji spadł do kilku sekund. W 2008 roku badacze wytworzyli fałszywy certyfikat SSL podpisany MD5, uznany za ważny przez wszystkie przeglądarki. W 2012 roku malware Flame używał kolizji MD5, aby podpisać swój plik wykonywalny jako legalny binarny Microsoftu.

Wniosek: MD5 nie powinien już służyć, gdy tylko atakujący może wpływać na wejście. Wszystkie zastosowania kryptograficzne (podpisy, integralność wobec przeciwnika, derywacja klucza) są wykluczone. Tylko nieliczne zastosowania bez wrogości pozostają akceptowalne, jak suma kontrolna transferu sieciowego lub klucz cache: MD5 pozostaje szybki, a niezamierzona kolizja pozostaje statystycznie niemożliwa.

SHA-256: 256 bitów, bezpieczny w 2026

SHA-256 należy do rodziny SHA-2 opublikowanej przez NIST w 2001 roku i ustandaryzowanej przez FIPS 180-4. Produkuje odcisk o długości 256 bitów (32 bajty, 64 znaki szesnastkowe).

Nie jest znany żaden praktyczny atak przeciwko SHA-256. Najlepszy teoretyczny atak na kolizje dotyczy 31 rund z 64, bez praktycznych implikacji. Koszt brute force dla znalezienia kolizji jest rzędu 2^128 operacji, poza zasięgiem jakiejkolwiek znanej infrastruktury.

SHA-256 jest używany w: TLS (certyfikaty X.509), Git (od przejścia na SHA-256), Bitcoin (proof of work), podpisy pakietów Linux, Windows Update itd. Jest dziś domyślnie rekomendowanym hashem dla większości ogólnych zastosowań kryptograficznych.

Różnice praktyczne

Długość wyjścia

MD5("hello")     = 5d41402abc4b2a76b9719d911017c592               (32 chars hex)
SHA-256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (64 chars hex)

Szybkość

MD5 jest około 2 do 3 razy szybszy niż SHA-256 na tej samej maszynie. Na nowoczesnym CPU MD5 przetwarza kilka GB/s na rdzeń, SHA-256 jest rzędu GB/s. Na ostatnich CPU z rozszerzeniem SHA-NI różnica mocno się zmniejsza.

Bezpieczeństwo

To jedyna różnica, która naprawdę się liczy: MD5 jest złamany dla kolizji, SHA-256 nie jest. Jeśli w grę wchodzi bezpieczeństwo wobec przeciwnika, wybór jest przesądzony.

Tabela porównawcza

Kryterium MD5 SHA-256
Rok19912001
Rozmiar wyjścia128 bitów / 32 hex256 bitów / 64 hex
Odporność na kolizjeZłamana od 2004Brak praktycznego ataku
Szybkość względna2 do 3 razy szybszyPunkt odniesienia
Akceleracja sprzętowaBrak dedykowanejSHA-NI na ostatnich CPU
Zastosowanie kryptograficzneNiezalecaneRekomendowane
Integralność bez wrogościAkceptowalneRekomendowane
Zgodność regulacyjnaOdrzucony (PCI-DSS, FIPS)Zaakceptowany

Przypadki użycia

Kiedy MD5 pozostaje akceptowalny

  • Klucz cache aplikacyjnego (Redis, memcached) bez znaczenia dla bezpieczeństwa
  • Wykrywanie duplikatów w datasecie bez wrogości
  • Suma kontrolna transferu sieciowego do wykrywania przypadkowego uszkodzenia
  • Odcisk ciągu do rozkładu (sharding) bez ograniczeń adwersarialnych

Kiedy SHA-256 jest obowiązkowy

  • Weryfikacja integralności wobec atakującego (podpisane downloady, pakiety)
  • Podpisy cyfrowe, certyfikaty X.509
  • Identyfikatory Git commitów i obiektów
  • Derywacja kluczy (w połączeniu z HKDF)
  • Każda aplikacja podlegająca wymogom regulacyjnym (PCI-DSS, ANSSI, FIPS)

Konkretne przykłady

W PHP obie funkcje są dostępne przez funkcję hash():

// Empreinte d'une chaine
$md5    = hash('md5',     'hello world');
$sha256 = hash('sha256',  'hello world');

// Empreinte d'un fichier (lecture en streaming)
$md5File    = hash_file('md5',    '/path/to/file.iso');
$sha256File = hash_file('sha256', '/path/to/file.iso');

Możesz generować te odciski bezpośrednio online za pomocą naszego generatora hashy tekstu, haszować plik za pomocą generatora hashy plików, lub zidentyfikować nieznany typ hashu za pomocą identyfikatora hashy.

Rekomendacja

Reguła 2026 jest prosta: SHA-256 domyślnie. MD5 nie powinien już pojawiać się w Twoim kodzie, gdy tylko atakujący może wpływać na wejście, co pokrywa niemal wszystkie przypadki serwerowe. Wyższa wydajność MD5 nie uzasadnia już jego stosowania, różnica stała się pomijalna wraz z akceleracją SHA-NI obecną na nowoczesnych CPU x86 i ARM.

Często zadawane pytania

Czy MD5 jest nadal bezpieczny do haseł?

Nie, nigdy. I ten punkt jest niezależny od kolizji: MD5 jest zbyt szybki. GPU łamie kilka miliardów hashy MD5 na sekundę, co czyni każdy atak słownikowy lub brute force trywialnym. Do haseł używaj bcrypt, Argon2 lub scrypt (zobacz nasze porównanie Bcrypt vs Argon2).

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

SHA-2 to rodzina, SHA-256 jest jej członkiem. Rodzina obejmuje SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 i SHA-512/256. Różnią się rozmiarem wyjścia i rozmiarem bloków wewnętrznych. SHA-256 jest najczęściej używanym wariantem.

Czy trzeba przejść na SHA-3?

Niekoniecznie. SHA-3 (opublikowany w 2015 roku) opiera się na radykalnie odmiennej konstrukcji (Keccak / sponge), ale SHA-256 pozostaje bezpieczny. SHA-3 służy głównie jako plan B w razie nieoczekiwanego problemu z SHA-2. Wybierz SHA-3, jeśli wymaga tego norma, lub jeśli chcesz różnorodności kryptograficznej. W przeciwnym razie SHA-256 pozostaje standardowym wyborem.

Czy można odwrócić hash MD5 lub SHA-256?

Nie, z założenia: hash traci informację. Strony „deszyfrowania” MD5 jedynie odpytują olbrzymie bazy prekalkulowanych hashy (rainbow tables) dla popularnych wejść. Dla losowych długich danych odnalezienie wejścia jest niemożliwe w obu algorytmach.

Czy SHA-256 zostanie złamany przez komputer kwantowy?

Algorytm Grovera dzieli efektywne bezpieczeństwo hashy przez dwa wobec atakującego kwantowego: SHA-256 oferowałby wtedy około 128 bitów bezpieczeństwa, co pozostaje w pełni wystarczające. Brak pośpiechu po stronie hashy, w przeciwieństwie do kryptografii asymetrycznej.