Funkcje mieszające

Słownik kwalifikacji INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych

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.