funkcja skrótu (hashowanie)
| Po angielsku | hashing |
|---|---|
| Którą formą pisać | obie formy Obie formy są w obiegu. Przy pierwszym wystąpieniu pisz „polski termin (english term)”, dalej sam polski. |
| Inne formy | skrót kryptograficzny · hashowanie · funkcja hashująca · haszowanie (poprawne słownikowo, ale wbrew uzusowi branżowemu — niezalecane) |
| Kategoria | Kryptografia, tożsamość i uwierzytelnianie |
Funkcja skrótu (hash function) przekształca wiadomość dowolnej długości w skrót o stałej długości [1]. Funkcja kryptograficzna musi być przy tym jednokierunkowa i odporna na kolizje: znalezienie dwóch różnych danych o tym samym skrócie ma być obliczeniowo niewykonalne [1]. Skrót zmienia się całkowicie przy najmniejszej zmianie wejścia, dlatego służy do kontroli integralności plików i do przechowywania haseł. W polskiej praktyce branżowej sam proces nazywa się zwykle hashowaniem.
Jak działa
Funkcja skrótu nie używa klucza i nie da się jej odwrócić. Różni ją to od szyfrowania, które z kluczem pozwala odzyskać dane. OWASP zaznacza, że hashowanie jest jednokierunkowe i dlatego właściwe dla haseł, a szyfrowanie jest odwracalne [3].
NIST wymaga od zatwierdzonych funkcji trzech własności [1]:
| Własność | Co oznacza |
|---|---|
| odporność na kolizje | nie da się znaleźć dwóch różnych wejść o tym samym skrócie [1] |
| odporność na przeciwobraz | ze skrótu nie da się odtworzyć wejścia [1] |
| odporność na drugi przeciwobraz | do danego wejścia nie da się dobrać innego o tym samym skrócie [1] |
Zatwierdzone algorytmy NIST opisuje w dwóch normach. FIPS 180-4 obejmuje SHA-1 i rodzinę SHA-2, w tym SHA-256 i SHA-512, a FIPS 202 rodzinę SHA-3 opartą na algorytmie Keccak [1].
Zastosowania
Funkcja skrótu ma dwa główne zastosowania w bezpieczeństwie stron i każde wymaga innej funkcji.
Integralność. Skrót pliku porównuje się z wartością wzorcową. Jeśli się różni, plik zmieniono. Na tej zasadzie działa monitorowanie integralności plików, a także podpis cyfrowy, w którym podpisuje się skrót dokumentu. Tu potrzebna jest funkcja szybka i odporna na kolizje, na przykład SHA-256.
Przechowywanie haseł. Serwis zapisuje skrót hasła, a przy logowaniu liczy skrót wpisanego hasła i porównuje wyniki. Tu szybkość jest wadą. OWASP wyjaśnia, że szybkie funkcje, takie jak SHA-256, pozwalają atakującemu sprawdzać ogromne liczby haseł w krótkim czasie, a funkcje do haseł celowo działają wolno [3].
Przebieg zapisu hasła pokazuje schemat poniżej.
Sól to losowa wartość, unikalna dla każdego hasła; nowoczesne biblioteki generują ją automatycznie [3]. Dzięki niej dwa takie same hasła mają różne skróty, a tęczowe tablice tracą sens. Pieprz to wspólny sekret przechowywany poza bazą, który daje dodatkową warstwę ochrony, gdy baza wycieknie [3]. Funkcje do haseł są odmianą KDF, czyli funkcji wyprowadzania klucza.
Funkcje do haseł
CERT Polska wymienia jako zalecane funkcje skrótu zabezpieczające hasło Argon2, Bcrypt, PBKDF2 i Scrypt [4]. Pozwalają one ustawić koszt obliczeń, co wydłuża ich przydatność w czasie [4]. OWASP podaje minimalne parametry [3]:
- Argon2id (wybór preferowany): 19 MiB pamięci, 2 iteracje, równoległość 1;
- scrypt: parametr kosztu 2 do potęgi 17, rozmiar bloku 8, równoległość 1;
- bcrypt (systemy starsze): współczynnik pracy co najmniej 10, limit hasła 72 bajty;
- PBKDF2 (zgodność z FIPS-140): co najmniej 600 000 iteracji z HMAC-SHA-256.
Limit bcrypta ma znaczenie praktyczne. CERT Polska zauważa, że 72 bajty mogą oznaczać mniej niż 64 znaki, zależnie od kodowania, i opisuje obejście przez wstępne hashowanie innym bezpiecznym algorytmem [4]. Ostrzega też, że błędna implementacja wstępnego hashowania może umożliwić wyłuskanie haseł [4].
W WordPressie
Przed wersją 6.8 WordPress zapisywał hasła użytkowników przenośnym skrótem biblioteki phpass [5]. Wersja 6.8 zastąpiła go bcryptem ze wstępnym hashowaniem SHA-384 [5]. Według ogłoszenia zmiana znacząco podnosi koszt obliczeniowy łamania skrótu hasła [5]. Nowe skróty mają prefiks $wp$2y$, a stare nadal działają i są przeliczane nowym algorytmem przy najbliższym logowaniu [5]. Hasła aplikacji i klucze bezpieczeństwa są od tej wersji hashowane algorytmem BLAKE2b z biblioteki Sodium [5]. Hasła wpisów chronionych hasłem nadal używają phpass [5].
Programiści korzystający z wp_hash_password() i wp_check_password() nie muszą niczego zmieniać [5]. Zmian może wymagać tylko kod, który sam odczytuje lub porównuje skróty haseł [5].
Drugie zastosowanie widać w kontroli plików rdzenia. Polecenie wp core verify-checksums pobiera z WordPress.org sumy kontrolne MD5 dla bieżącej wersji i porównuje je z zainstalowanymi plikami [6]. Rozbieżność sumy oznacza, że plik różni się od wydania pobranego z WordPress.org, co bywa śladem włamania. MD5 jest tu narzędziem porównania z zaufanym wzorcem, a nie sposobem przechowywania haseł.
wp core verify-checksums
Zagrożenia i skutki
Wyciek bazy z szybkimi skrótami bez soli pozwala szybko odtworzyć większość prostych haseł. Łamanie haseł polega wtedy na liczeniu skrótów kolejnych kandydatów i porównywaniu wyników; to odmiana ataku siłowego (brute-force) prowadzona poza serwisem. Odzyskane hasła trafiają potem do ataków credential stuffing na inne serwisy.
Drugim zagrożeniem są kolizje. Gdy dla funkcji da się wytworzyć dwa pliki o tym samym skrócie, skrót przestaje potwierdzać integralność i autentyczność. NIST uznał SHA-1 za przestarzałą w 2011 roku, a w grudniu 2022 roku ogłosił wycofanie jej ze wszystkich zastosowań do 2030 roku [1].
Historia i przykłady
23 lutego 2017 roku badacze z CWI Amsterdam i Google ogłosili pierwszą praktyczną kolizję SHA-1, nazwaną SHAttered [2]. Pokazali dwa różne pliki PDF o identycznym skrócie SHA-1 [2]. Obliczenia zajęły około 6500 lat pracy procesora i 110 lat pracy procesora graficznego [2]. Autorzy podkreślają, że atak był tysiące razy szybszy niż sprawdzanie wszystkich możliwości [2]. Wynik przyspieszył wycofywanie SHA-1 z przeglądarek, urzędów certyfikacji i systemów kontroli wersji [2].
Przypisy
6- [1] Hash Functions · NIST CSRC
- [2] SHAttered — first SHA-1 collision · CWI Amsterdam, Google
- [3] Password Storage Cheat Sheet · OWASP
- [4] Rekomendacje techniczne dla systemów uwierzytelniania · CERT Polska
- [5] WordPress 6.8 will use bcrypt for password hashing · WordPress.org
- [6] wp core verify-checksums — WP-CLI Commands · WordPress.org
Hasła w tym artykule
11Linkują tutaj
27- uwierzytelnianie
- szyfrowanie
- łamanie haseł
- kod jednorazowy
- deserializacja niezaufanych danych (insecure deserialization)
- monitorowanie integralności plików
- zabezpieczenie katalogu hasłem
- klucze bezpieczeństwa i sole
- sól
- podpis cyfrowy
- atak bocznym kanałem
- pass-the-hash
- naruszenie ochrony danych osobowych
- stalkerware
- wykrywanie sygnaturowe i heurystyczne
- wskaźnik kompromitacji (IoC)
- informatyka śledcza
- Safe Browsing
- kryptografia asymetryczna
- pieprz
- tęczowe tablice
- DNSSEC
- bezpieczne hasła
- KDF
- podpisywanie kodu
- chain of custody
- zatruwanie danych / zatruwanie modelu