Blog 24/7

funkcja skrótu (hashowanie)

TAB. 1Hasłoobie formy
Po angielskuhashing
Którą formą pisaćobie formy Obie formy są w obiegu. Przy pierwszym wystąpieniu pisz „polski termin (english term)”, dalej sam polski.
Inne formyskrót kryptograficzny · hashowanie · funkcja hashująca · haszowanie (poprawne słownikowo, ale wbrew uzusowi branżowemu — niezalecane)
KategoriaKryptografia, 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 kolizjenie da się znaleźć dwóch różnych wejść o tym samym skrócie [1]
odporność na przeciwobrazze skrótu nie da się odtworzyć wejścia [1]
odporność na drugi przeciwobrazdo 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.

RYS. 1Zapis hasła w bazie

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].

TAB. 2

Przypisy

6
  1. [1] Hash Functions · NIST CSRC
  2. [2] SHAttered — first SHA-1 collision · CWI Amsterdam, Google
  3. [3] Password Storage Cheat Sheet · OWASP
  4. [4] Rekomendacje techniczne dla systemów uwierzytelniania · CERT Polska
  5. [5] WordPress 6.8 will use bcrypt for password hashing · WordPress.org
  6. [6] wp core verify-checksums — WP-CLI Commands · WordPress.org
TAB. 3

Hasła w tym artykule

11
TAB. 4

Linkują tutaj

27

Wszystkie kategorie → · Hasło w słowniku →

Blog 24/7
05.11CISA i FBI wzywają do zabezpieczenia sterowników chłodzenia po atakach w Europietherecord.media05.11Midnight Blizzard atakowała iPhone'y i Androidy przez zainfekowane strony w Europie i USAsecurityweek.com05.11APT29 kradła dane z iPhone'ów i Androidów przez przejęte i podrobione stronytherecord.media05.11Grupa APT29 przejęła skrypt Plerdy i atakowała niezałatane iPhone'y i Androidythehackernews.com05.11Microsoft wykrył 7,3 mld wiadomości phishingowych w III kwartale 2026microsoft.com05.11DigiCert ujawnia wyciek danych klientów i skanów dokumentów tożsamościbleepingcomputer.com05.11CWPdoor podmienia serwer cwpsrv w Control Web Panel i otwiera tylne wejście do Linuksableepingcomputer.com05.11Brytyjskie NCSC ostrzega, że narzędzia AI zwiększyły liczbę wykrywanych luk zero-daythehackernews.com05.11Skaner RootEvidence sprawdza starą lukę w Cisco IOS i dodaje nagłówki Opt-Outisc.sans.edu05.11Włamanie do portalu grantowego Norad, zagrożone dane 20 614 użytkownikówhelpnetsecurity.com