Dlaczego nie po prostu SHA-256?
Zwykły skrót kryptograficzny jak to właściwe narzędzie do integralności, ale niewłaściwe do przechowywania haseł, a powodem jest właśnie ta cecha, która czyni go dobrym gdzie indziej: jest szybki. Atakujący, który ukradnie bazę skrótów SHA-256 haseł, może podejmować miliardy prób na sekundę na zwykłym sprzęcie, ponieważ każda próba to tylko jeden szybki skrót. Popularne hasła padają niemal natychmiast. Szybkość, zaleta skrótu ogólnego przeznaczenia, jest tu wadą.
Przechowywanie haseł wymaga skrótu, który jest celowo wolny i odporny na wyspecjalizowany sprzęt. Trzy elementy konstrukcyjne sprawiają, że to działa: solenie, regulowany współczynnik pracy i twardość pamięciowa.
Solenie: pokonanie prekomputacji
Sól (salt) to unikatowa losowa wartość przechowywana obok każdego skrótu hasła i wmieszana w haszowanie. Bez soli identyczne hasła dają identyczne skróty, więc atakujący może raz prekomputować gigantyczną tabelę skrótów popularnych haseł („rainbow table") i błyskawicznie wyszukać każde dopasowanie. Unikatowa sól na hasło czyni tę prekomputację bezwartościową: atakujący musi atakować każdy skrót osobno, a to samo hasło haszuje się inaczej dla każdego użytkownika. Nowoczesne funkcje haszowania haseł generują i przechowują sól za ciebie.
Współczynnik pracy: uczynić każdą próbę kosztowną
Współczynnik pracy (lub parametr kosztu) reguluje, ile obliczeń wymaga każdy skrót. Ustaw go tak, by pojedynczy skrót był na tyle wolny, by był niezauważalny przy legalnym logowaniu (kilkaset milisekund), ale dotkliwy na skalę. Ponieważ jest parametrem, możesz go podnosić przez lata w miarę przyspieszania sprzętu, utrzymując koszt zgadywania mniej więcej stały. To pokrętło, którego skrót ogólnego przeznaczenia po prostu nie ma.
Trzy standardowe wybory
- bcrypt to długo istniejąca, dobrze zrozumiana opcja, zbudowana na szyfrze Blowfish z konfigurowalnym współczynnikiem kosztu. Bezpieczna wartość domyślna tam, gdzie jest dostępna.
- scrypt dodaje twardość pamięciową: celowo zużywa regulowaną ilość pamięci, co tępi atakujących używających procesorów GPU i niestandardowych układów, ponieważ te skalują obliczenia znacznie taniej niż pamięć.
- Argon2 wygrał Password Hashing Competition w 2015 r. i jest obecnym zaleceniem dla nowych systemów. Jest pamięciowo twardy z osobnymi pokrętłami dla pamięci, czasu i równoległości; wariant Argon2id to zwykły wybór.
Każdy z tych jest rozsądnym wyborem; kardynalna zasada to używać jednego z nich, nigdy gołego szybkiego skrótu, i nigdy nie wymyślać własnego schematu.
Wniosek
Używaj SHA-256 (w narzędziu skrótu) do sum kontrolnych i integralności, gdzie szybkość to zaleta. Do haseł sięgaj po bcrypt, scrypt lub Argon2, gdzie powolność i koszt pamięci są całym sednem. Oba zadania wyglądają podobnie i wymagają przeciwnych narzędzi.