PHP Manual
/
Bezpieczeństwo

Jak złamać funkcję md5

23. 08. 2019

Obsah článku

MD5 jest bardzo często używaną funkcją do obliczania haszy.

Początkujący użytkownicy często używają go do hashowania haseł, co nie jest dobrym pomysłem, ponieważ istnieje wiele sposobów na odzyskanie oryginalnego hasła.

W tym artykule opisano konkretne metody pozwalające to osiągnąć.

Złożoność czasowa

Wszystkie zabezpieczenia opierają się na fakcie, że wypróbowanie wszystkich haseł zajmuje nieproporcjonalnie dużo czasu. No cóż, powinno. Problem z algorytmem md5() polega w szczególności na tym, że jest to bardzo szybka funkcja. Na zwykłym komputerze bez problemu można obliczyć ponad milion hashy na sekundę.

Jeśli złamiemy hasło, próbując kolejno jego kombinacji, jest to atak brute force.

Metody krakowania

Istnieje kilka strategii:

  • Sukcesywne testowanie metodą prób i błędów (atak brute force)
  • Testowanie haseł słownikowych
  • Tablice tęczowe (baza danych z wstępnie obliczonymi hashami)
  • Wyszukiwania w Google
  • Kolizje trafień w algorytmie

Istnieje wiele innych metod, w tym artykule opisano tylko te najczęściej stosowane.

Strategie łamania metodą Brute Force

Próbowane są po kolei wszystkie kombinacje liter, cyfr i innych znaków.

Wygenerowane próby są kolejno haszowane i porównywane z oryginalnym haszem.

Tak więc, na przykład:

aaaaaaabaaacaaadaaaeaaaf...

Problem z tym atakiem leży w samym algorytmie md5(). Gdybyśmy mieli wypróbować tylko małe litery alfabetu angielskiego i cyfry, wypróbowanie wszystkich kombinacji na powszechnie dostępnym komputerze zajęłoby najwyżej kilkadziesiąt minut.

Dlatego ważne jest, aby wybierać długie hasła, najlepiej losowe, zawierające znaki specjalne.

Strategia ataku słownikowego

Ludzie zazwyczaj wybierają słabe hasła, które istnieją w słowniku.

Jeśli skorzystamy z tego faktu, możemy szybko odrzucić mało prawdopodobne warianty, takie jak 6w1SCq5cs, i zamiast tego odgadnąć istniejące słowa.

Co więcej, z poprzednich wycieków haseł dużych firm wiemy, że użytkownicy wybierają dużą literę na początku hasła i cyfrę na końcu. Zastanówmy się - czy Twoje hasło też tak ma? :)

Tablice tęczowe - wstępnie obliczona baza danych

Ponieważ jedno hasło zawsze odpowiada temu samemu hashowi, łatwo jest przeliczyć ogromną bazę danych, w której hasła będą wyszukiwane w pierwszej kolejności.

W rzeczywistości wyszukiwanie jest zawsze o rzędy wielkości szybsze niż wielokrotne przeszukiwanie haszy.

Ponadto, w przypadku większych wycieków danych, hasła mogą być w ten sposób równolegle haszowane, dzięki czemu można szybko odzyskać np. 10% wszystkich haseł użytkowników.

Dobrą bazą danych haseł jest na przykład Crack Station.

Wyszukiwanie w Google

Wiele prostych haseł jest znanych bezpośrednio firmie Google, ponieważ indeksuje ona strony zawierające hashe.

Zawsze korzystam z Google jako pierwszej opcji. :)

Znajdowanie kolizji w algorytmie

Zasada Zasada Dirichleta mówi, że jeśli mamy zbiór haseł, które zawsze mają 32 znaki, to istnieją co najmniej 2 różne hasła o długości 33 znaków (jedno dłuższe), które generują ten sam hash.

W praktyce szukanie kolizji nie ma sensu, ale czasami sam autor aplikacji ułatwia zgadywanie, przeliczając kolizje.

Na przykład:

$password = 'hasło';
for ($i = 0; $i <= 1000; $i++) {
$password = md5($password);
}
echo $password; // 1000x hashed via md5()

W tym przypadku sensowne jest odgadnięcie kolizji, a nie oryginalnego hasha.

Zdrowie za pieczenie!

Jan Barášek   Více o autorovi

Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.

Rád vám pomůžu:

Související články

1.
3.
Status:
All systems normal.
2024