Hashowanie haseł to zapisywanie w bazie nieodwracalnych skrótów (hashy) zamiast haseł jawnym tekstem. Dzięki temu wyciek bazy nie ujawnia haseł wprost. Do tego celu służą wolne, dedykowane algorytmy, takie jak bcrypt, scrypt i Argon2.
Dlaczego nie MD5 ani SHA-256?
Ogólne funkcje skrótu są zaprojektowane tak, by liczyć się szybko, więc atakujący sprawdza miliardy haseł na sekundę. Algorytmy do haseł są celowo kosztowne i mają parametr kosztu, który można zwiększać wraz ze wzrostem mocy obliczeniowej.
Sól i pieprz
Sól (salt) to unikalna, losowa wartość dodawana do każdego hasła przed hashowaniem. Chroni przed tablicami tęczowymi i sprawia, że identyczne hasła mają różne skróty. Nowoczesne biblioteki generują ją automatycznie.
Jak to zrobić w PHP?
$hash = password_hash($haslo, PASSWORD_DEFAULT);
if (password_verify($haslo, $hash)) { /* poprawne */ }
Czy hashowanie to to samo co szyfrowanie?
Nie. Szyfrowanie jest odwracalne przy użyciu klucza, a hashowanie jest jednokierunkowe. Hasła nie powinny być w ogóle możliwe do odszyfrowania.