Czym jest bcrypt?
Bcrypt to funkcja haszowania haseł zaprojektowana przez Nielsa Provosa i Davida Mazièresa, oparta na szyfrze Blowfish. W przeciwieństwie do szybkich skrótów takich jak MD5 czy SHA-256, bcrypt jest celowo wolny i wymagający obliczeniowo — to sprawia, że ataki brute-force na skradzione hasze haseł są niepraktyczne. Bcrypt automatycznie generuje losową sól dla każdego hasła, więc identyczne hasła dają różne hasze.
Jak działa bcrypt?
Algorytm bcrypt działa w całości w Twojej przeglądarce. Oto co dzieje się krok po kroku:
- Twoje hasło jest kodowane jako bajty UTF-8 i przekazywane do harmonogramu kluczy bcrypt, który inicjuje 4184-bajtową tablicę P i S-boxy szyfru Blowfish przy użyciu hasła i soli.
- Generowana jest losowa 128-bitowa sól. Sól jest mieszana z harmonogramem kluczy, tak że każda unikalna sól daje zupełnie inny hasz nawet dla tego samego hasła.
- Harmonogram kluczy jest wykonywany przez 2^cost rund (np. 2^10 = 1024 iteracji dla kosztu 10). Każda iteracja ponownie szyfruje sól i wpisy tablicy P, spowalniając obliczenia proporcjonalnie do wzrostu kosztu.
- Wynik końcowy to 60-znakowy ciąg w formacie
$2b$<cost>$<salt><hash>, gdzie cost jest uzupełniony zerami (np. 10), salt to 22 znaki Base64, a hash to 31 znaków Base64. - Do weryfikacji ten sam algorytm jest uruchamiany ponownie z kandydatem na hasło i solą wyodrębnioną z przechowywanego haszu. Jeśli pochodny hasz jest zgodny z przechowywanym, hasło jest poprawne.
Jaki współczynnik kosztu powinienem użyć?
Współczynnik kosztu to logarytm liczby iteracji — koszt 10 oznacza 2^10 = 1024 rundy, koszt 12 oznacza 4096 rund. Wybierz w zależności od potrzeb bezpieczeństwa i sprzętu:
- Koszt 4-6 (16-64 rund) — tylko do programowania i testowania. Zbyt szybki dla produkcji; zapewnia minimalną ochronę.
- Koszt 8 (256 rund) — absolutne minimum dla niekrytycznych aplikacji. Około 6ms na nowoczesnym sprzęcie.
- Koszt 10 (1024 rundy) — obecnie zalecana wartość bazowa. Zajmuje około 25ms. Dobry dla większości aplikacji webowych.
- Koszt 12 (4096 rund) — zalecany dla portali administracyjnych, systemów finansowych i aplikacji o wysokim poziomie bezpieczeństwa. Zajmuje około 100ms.
- Koszt 14 (16384 rundy) — wysokie bezpieczeństwo. Zajmuje około 400ms. Użyj dla haseł głównych, kluczy szyfrowania lub gdy opóźnienie logowania jest akceptowalne.
Dlaczego warto użyć tego generatora bcrypt?
- Prywatność — każde hasło jest haszowane lokalnie w przeglądarce. Żadne dane nie opuszczają Twojego urządzenia.
- Podwójny tryb — generuj nowe hasze lub weryfikuj istniejące obok siebie bez przełączania stron.
- Regulowany współczynnik kosztu — dostosuj koszt od 4 (szybki) do 15 (bardzo wolny) do potrzeb bezpieczeństwa aplikacji.
- Zgodność ze standardami — generuje hasze w standardowym formacie
$2b$kompatybilnym z każdym głównym językiem i frameworkiem.
Jakie są typowe zastosowania bcrypt?
Bcrypt jest szeroko stosowany w branży do przechowywania i weryfikacji haseł:
- Uwierzytelnianie użytkowników aplikacji webowych — przechowywanie haszy haseł w bazach danych, aby hasła w postaci jawnej nigdy nie były zapisywane.
- Haszowanie kluczy API — haszowanie sekretów API przed przechowaniem, aby naruszenie bazy danych nie ujawniło ważnych poświadczeń.
- Audyt migracji — sprawdzanie, czy starsze hasze haseł z poprzedniego systemu nadal uwierzytelniają użytkowników po aktualizacji warstwy uwierzytelniania.
Jak wygląda hasz bcrypt?
Haszowanie hasła hunter2 z kosztem 10 daje ciąg taki jak $2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy. Format składa się z: $2b$ (wersja algorytmu), 10 (współczynnik kosztu), $, następnie 22 znaki soli i 31 znaków haszu, wszystkie zakodowane w Base64. Każde uruchomienie dla tego samego hasła daje inny hasz z powodu losowej soli.
Ten generator bcrypt działa w całości w Twojej przeglądarce przy użyciu czystej implementacji JavaScript. Haszuj hasła przed ich przechowaniem, weryfikuj istniejące hasze i dostosuj współczynnik kosztu do swoich wymogów bezpieczeństwa — wszystko bez wysyłania ani jednego bajtu na serwer.