Zauważyłem, że bardzo powszechne jest stwierdzenie, iż o bezpieczeństwie haseł decyduje ich długość, natomiast całkowicie zapomina się w tym momencie o algorytmie, który tworzy skrót. Na bardzo wielu stronach tworzenie skrótu wygląda tak: md5($hash). Funkcja jest bardzo prosta, wykonuje się szybko…
No właśnie, wykonuje się szybko… Działa to bardzo na korzyść hakera, który najczęściej, aby poznać hasło, szyfruje (takim samym algorytmem) po kolei miliony ciągów znaków i porównuje z hashem wykradzionym z naszej bazy danych. W jego interesie jest to, aby wszystko odbyło się jak najszybciej.
Natomiast właściciel strony internetowej, zwykle, nie musi porównywać milionów ciągów na sekundę, więc może sobie pozwolić na nieco dłuższe wykonywanie kodu.
Postanowiłem wykonać kilka pomiarów na swoim komputerze. Tworzenie skrótu md5("test"); trwa ok. 16us. Natomiast poniższy kod:

$str = md5("test");
for($i = 1;$i < 5000;$i++) {
$str = md5(base64_encode($str));
}

wokonuje się w 8000us, czyli 8ms, czyli 0.008 sekundy. Cóż to jest dla systemu… Użytkownik nawet nie mrugnie, gdy skróty jego haseł zostaną porównane. Jednak haker będzie przez to łamał hasło 500 razy dłużej!

Oczywiście to „zabezpieczenie” będzie użyteczne dopiero gdy hakerowi uda się włamać na stronę, jednak nie możemy wykluczać takiego przypadku, a każda forma obrony naszej witryny jest warta zastosowania!