Pack Camo

Generator hashy bcrypt i Argon2

Zahaszuj hasło za pomocą bcrypt lub Argon2id albo sprawdź je z zapisanym hashem.

Wszystko działa lokalnie — nic nie jest wysyłane.

28 bajtów

Tutaj pojawi się zakodowany hash.

Zahaszuj hasło za pomocą bcrypt lub Argon2 albo porównaj je z zapisanym hashem

Ten generator hashy haseł tworzy hashe bcrypt (<code>$2b$</code>, koszt od 4 do 15) oraz hashe Argon2id, Argon2i i Argon2d w standardowym formacie ciągu PHC, z wybraną przez Ciebie pamięcią, liczbą iteracji, równoległością, długością soli i wyniku. Przełącz na <strong>Weryfikację</strong>, aby wkleić hash z bazy danych, rozpoznać algorytm i parametry po prefiksie i sprawdzić, czy hasło pasuje. Każdy hash dostaje nową losową sól i pokazuje, ile trwał na Twoim urządzeniu. Haszowanie działa w WebAssembly w przeglądarce; hasło nigdy nie jest wysyłane.

Jak wygenerować hash bcrypt lub Argon2

  1. 1Wybierz Hash, a potem algorytm: Argon2id dla nowych systemów, bcrypt, aby dopasować się do istniejącego.
  2. 2Ustaw koszt: współczynnik kosztu bcrypt albo preset Argon2, np. OWASP 19 MiB, t=2. Jeśli musisz odtworzyć konfigurację, dostosuj ręcznie pamięć, iteracje i równoległość.
  3. 3Wpisz hasło i kliknij Haszuj hasło. Poniżej pojawi się zakodowany hash, jego części i czas obliczeń.
  4. 4Aby sprawdzić hash, wybierz Weryfikację, wklej zapisany hash i hasło, a następnie kliknij Weryfikuj.

Dlaczego hasła potrzebują wolnego hasha

Szybki hash, taki jak SHA-256, to złe narzędzie do haseł. Jedna karta graficzna oblicza miliardy hashy SHA-256 na sekundę, więc wyciekłą tabelę hashy SHA-256 haseł można zgadywać w tym tempie. Funkcje haszujące hasła są celowo wolne, a w przypadku Argon2 wymagają też dużo pamięci, aby każda próba kosztowała realny czas i sprzęt. Ustawienie, które na Twoim serwerze zajmuje ćwierć sekundy, kosztuje atakującego tę samą ćwierć sekundy przy każdej próbie, dla każdego użytkownika.

Każdy hash ma też własną losową sól, więc dwóch użytkowników z tym samym hasłem dostaje różne hashe, a wcześniej obliczone tablice są bezużyteczne. Sól i wszystkie parametry są zapisane w samym ciągu hasha, dlatego biblioteka może zweryfikować hasło na podstawie samego hasha.

Jak czytać hash bcrypt

Hash bcrypt, np. $2b$12$R9h/cIPz0gi.URNNX3kh2OPST9/PgBkqquzi.Ss7KIUgO2t0jWMUW, ma cztery części: wersję 2b, koszt 12 (212 = 4096 rund rozszerzania klucza), 22-znakową sól i 31-znakowy hash, oba we własnym alfabecie Base64 bcrypt. Każdy kolejny stopień kosztu podwaja czas.

$2a$, $2b$ i $2y$ dają ten sam wynik dla haseł do 72 bajtów; litery oznaczają poprawki błędów w starych implementacjach. bcrypt czyta tylko pierwsze 72 bajty hasła i ignoruje resztę, o czym to narzędzie ostrzega — długa fraza hasła albo hasło w alfabecie niełacińskim, gdzie znak zajmuje od dwóch do czterech bajtów, może osiągnąć ten limit szybciej, niż się spodziewasz.

Argon2id, Argon2i i Argon2d

Ciąg PHC zawiera wszystko, co potrzebne do weryfikacji: $argon2id$v=19$m=19456,t=2,p=1$<salt>$<hash> oznacza wersję 1.3, 19 456 KiB pamięci, 2 przebiegi i 1 tor, a po nich sól i hash w Base64 bez dopełnienia.

Argon2id
Hybryda dwóch poniższych wariantów, zalecana przez RFC 9106 i OWASP do przechowywania haseł. Używaj jej, chyba że coś wymusza inaczej.
Argon2i
Dostęp do pamięci niezależny od hasła, co chroni przed atakami kanałem bocznym, ale przy małej liczbie przebiegów jest słabszy wobec łamania na GPU.
Argon2d
Dostęp do pamięci zależy od hasła: najmocniejszy wobec GPU, ale podatny na kanały boczne. Nadaje się do proof-of-work, nie do serwerów sprawdzających logowania.

Zalecane ustawienia

  • Argon2id: OWASP zaleca 19 MiB pamięci z 2 iteracjami i równoległością 1 albo równoważny kompromis, np. 47 MiB z 1 iteracją lub 12 MiB z 3. RFC 9106 sugeruje 64 MiB, 3 iteracje i 4 tory, jeśli pozwala na to pamięć.
  • bcrypt: koszt co najmniej 10; 12 to dziś popularna wartość domyślna. Wybierz najwyższy koszt, na jaki stać Twój endpoint logowania — około 250 ms na hash na serwerze to rozsądny cel.
  • Sól: 16 losowych bajtów. Długość hasha: 32 bajty w zupełności wystarczą.
  • Czas mierzony tutaj dotyczy Twojego urządzenia i WebAssembly, który zwykle jest wolniejszy niż natywna biblioteka na serwerze. Zanim ustalisz koszt, zrób benchmark na sprzęcie produkcyjnym.

Kiedy używać tego narzędzia

Użyj go, aby utworzyć hash dla użytkownika seed lub pliku konfiguracyjnego, sprawdzić, czy hash w bazie danych naprawdę pasuje do hasła, które masz na myśli, albo ustalić, z jakimi parametrami powstał istniejący hash. Twoja aplikacja powinna haszować hasła własną biblioteką podczas rejestracji; nigdy nie powinna wysyłać haseł w postaci jawnej do strony internetowej w celu zahaszowania. Aby najpierw utworzyć silne hasło, użyj generatora haseł; do podpisów z kluczem zamiast przechowywania haseł zobacz generator HMAC.

Najczęstsze pytania

Używać bcrypt czy Argon2?
Argon2id w nowych systemach: wygrał Password Hashing Competition i jest memory-hard, przez co łamanie na GPU i ASIC jest znacznie droższe. bcrypt nadal jest akceptowalny i bardzo szeroko wspierany, więc zostaw go, jeśli Twój stack już go używa.
Dlaczego hash za każdym razem jest inny dla tego samego hasła?
Każdy hash używa nowej losowej soli, więc wynik zmienia się za każdym razem. Tak ma być. Aby sprawdzić hasło, zweryfikuj je z zapisanym hashem zamiast porównywać dwa świeżo wygenerowane hashe.
Czy hash bcrypt lub Argon2 da się odszyfrować?
Nie. To funkcje jednokierunkowe. Jedynym sposobem na znalezienie hasła jest zgadywanie kandydatów i haszowanie każdego z nich, a te algorytmy celowo to spowalniają.
Czym jest limit 72 bajtów w bcrypt?
bcrypt używa tylko pierwszych 72 bajtów hasła. Wszystko dalej nie wpływa na hash, więc dwa długie hasła o tych samych pierwszych 72 bajtach dają pasujące hashe. Argon2 nie ma takiego limitu.
Jaki współczynnik kosztu wybrać dla bcrypt?
Co najmniej 10, a 12 to popularna wartość domyślna. Każde zwiększenie podwaja pracę. Wybierz najwyższą wartość, przy której logowanie na Twoim serwerze pozostaje wystarczająco szybkie.
Czy hashe bcrypt $2a$, $2b$ i $2y$ są zgodne?
Tak, dla haseł do 72 bajtów dają ten sam hash. Większość bibliotek akceptuje wszystkie trzy prefiksy, a to narzędzie weryfikuje każdy z nich.
Dlaczego weryfikacja trwa tyle samo co haszowanie?
Weryfikacja polega na ponownym zahaszowaniu hasła z solą i parametrami zapisanymi w hashu i porównaniu wyników, więc kosztuje dokładnie tyle samo pracy. To właśnie sprawia, że zgadywanie jest kosztowne.
Czy hasło jest wysyłane na serwer?
Nie. bcrypt i Argon2 działają w WebAssembly w Twojej przeglądarce. Nic, co wpiszesz, nie opuszcza strony.