Generator bcrypt

bcrypt nadal jest jednym z najbezpieczniejszych wyborów do przechowywania haseł. Jest celowo wolny, wyprowadza własną sól i skaluje się wraz z ulepszeniami sprzętu dzięki regulowanemu parametrowi kosztu. Ten generator tworzy zgodny ze standardem hash bcrypt z hasła plaintext, aby można było zasilić użytkownika testowego, przenieść konto między systemami albo porównać wartości z istniejącym hashem zapisanym w kolumnie users.password.

Jak zahaszować hasło bcrypt

  1. 1

    Wpisz hasło plaintext

    Do 72 bajtów — bcrypt po cichu obcina wszystko powyżej tego limitu.

  2. 2

    Wybierz współczynnik kosztu

    10 to obecny domyślny poziom; 12 jest częste w nowych systemach; 14 to wariant paranoiczny. Każde +1 w przybliżeniu podwaja czas haszowania.

  3. 3

    Generowana jest losowa sól

    16 bajtów soli pochodzi z kryptograficznego RNG i zostaje osadzonych w wynikowym ciągu hasha.

  4. 4

    Skopiuj hash

    Wynik to samopisujący się ciąg w rodzaju `$2b$12$...`, który zawiera wersję, koszt, sól i digest.

Anatomia hasha bcrypt

$2b$12$mE2n5YqWjKqT9tXg.OQPoeeHZJ9hdSvOt5wFdRRQwl6yE1vWWY3z6
  |   |  |                      |
  |   |  salt (22 znaki Base64) digest (31 znaków Base64)
  |   cost (2 cyfry, 4-31)
  version (2a, 2b, 2y — wszystko bcrypt)

Cały ciąg ma 60 znaków. Kolumny typu VARCHAR(60) albo CHAR(60) są standardowym schematem.

Zalecenia dotyczące współczynnika kosztu

Cost Przybliżony czas na hash (CPU 2024) Zastosowanie
10 ~80 ms Starsza wartość domyślna, nadal akceptowalna
12 ~300 ms Obecnie zalecany punkt bazowy
13 ~600 ms Aplikacje o wyższym bezpieczeństwie
14 ~1.2 s Paranoiczny; zauważalne opóźnienie logowania

Każde zwiększenie podwaja współczynnik pracy. Jeśli opóźnienie logowania poniżej 500 ms jest krytyczne, trzymaj się 10-12.

Bajt wersji: 2a vs 2b vs 2y

  • $2a$ — Oryginalna specyfikacja z 1999 roku. Większość bibliotek emituje hashe 2a.
  • $2b$ — Rewizja z 2014 roku naprawiająca błąd obcinania w crypt_blowfish. Preferowana dla nowych hashy.
  • $2y$ — Tag specyficzny dla PHP, funkcjonalnie równoważny $2b$.

Wszystkie trzy weryfikują się wzajemnie; różni się tylko tag w ciągu hasha.

Przed czym chroni bcrypt

  • Rainbow tables — Unikalna sól dla każdego hasha niweluje gotowe tablice wyszukiwania.
  • Łamanie GPU/ASIC — Harmonogram klucza Blowfish jest zależny od pamięci i nieprzyjazny dla GPU. Nie tak nieprzyjazny jak Argon2, ale nadal wolny do brute force.
  • Wycieki baz danych — Plaintext nie da się odzyskać z hasha bez brute force.

Przed czym bcrypt NIE chroni: słabe hasła (używaj minimalnej długości i sprawdzaj listy wycieków), credential stuffing (używaj drugiego czynnika), phishing.

Limit 72 bajtów

bcrypt używa tylko pierwszych 72 bajtów hasła. Dłuższe wejścia są obcinane po cichu, dlatego wiele bibliotek zaleca dziś wstępne haszowanie hasła SHA-256 przed podaniem go do bcrypt. Nowoczesne alternatywy (Argon2, scrypt) nie mają takiego limitu.

Najczęściej zadawane pytania

Tak do przechowywania haseł, przy koszcie ≥ 12. OWASP nadal wymienia go jako akceptowalny algorytm. Argon2id jest preferowanym wyborem dla nowych systemów, ale migracja starych hashy bcrypt ma niski priorytet.

Ponieważ sól jest generowana losowo dla każdego hasha. Weryfikacja bierze sól z zapisanego hasha, ponownie haszuje z nią podane hasło i porównuje wyniki.

Większość bibliotek tego nie udostępnia, i słusznie — przewidywalne sole niweczą ich sens. Używaj soli generowanej przez bibliotekę; to bezpieczna ścieżka.

Tak — współczynnik pracy jest symetryczny. Weryfikacja hasha o koszcie 14 trwa 16x dłużej niż weryfikacja hasha o koszcie 10. Dobierz go z myślą o przepustowości logowania.

Powiązane narzędzia