Funkcja mieszająca (ang. hash function) przekształca dane wejściowe, np. hasło użytkownika, na ciąg znaków o stałej długości nazywany skrótem, hashem lub wartością hash.
W serwisach WWW haseł nie powinno się zapisywać w bazie danych w postaci jawnej. Zamiast tego zapisuje się wynik działania funkcji mieszającej. Dzięki temu administrator lub osoba, która uzyska dostęp do bazy, nie odczyta bezpośrednio hasła użytkownika.
Cechy dobrej funkcji mieszającej
- działa jednokierunkowo: z hasha nie powinno dać się łatwo odtworzyć hasła,
- ta sama dana wejściowa daje ten sam wynik,
- niewielka zmiana danych wejściowych całkowicie zmienia wynik,
- powinna być odporna na kolizje, czyli sytuacje, gdy różne dane dają ten sam hash.
Hasła a funkcje mieszające
Do haseł nie powinno się używać zwykłych szybkich funkcji typu MD5 lub SHA1, ponieważ są zbyt łatwe do łamania metodą słownikową lub brute force.
W praktyce stosuje się specjalne algorytmy do haseł, np.:
bcrypt,Argon2,PBKDF2.
W PHP zalecane jest użycie funkcji:
$hash = password_hash($haslo, PASSWORD_DEFAULT);
Sprawdzenie hasła wykonuje się tak:
if (password_verify($haslo, $hash)) {
echo "Hasło poprawne";
}
Ważne
Funkcja mieszająca nie służy do szyfrowania danych w celu późniejszego odszyfrowania. Jest to mechanizm jednokierunkowy. Przy zapisywaniu haseł użytkowników stosuje się właśnie funkcje mieszające.