Słownik

Czym jest bcrypt?

bcrypt to funkcja haszowania haseł oparta na blokowym szyfrze Blowfish, która zawiera wbudowaną sól i konfigurowalny współczynnik kosztu. Jest zaprojektowana jako kosztowna obliczeniowo w sposób szczególnie odporny na akcelerację przez układy GPU i dedykowany sprzęt.

Znane również jako: bcrypt hash, Blowfish crypt

bcrypt został zaprojektowany w 1999 r. przez Nielsa Provosa i Davida Mazièresa specjalnie do haszowania haseł, w czasie gdy większość systemów używała szybkich funkcji skrótu, takich jak MD5 lub SHA-1. Kluczową innowacją był współczynnik kosztu — parametr kontrolujący liczbę iteracji bazowego harmonogramu kluczy Blowfisha. Każde zwiększenie współczynnika kosztu podwaja czas obliczeń, pozwalając obrońcom skalować trudność wraz ze wzrostem wydajności sprzętu.

To, co odróżnia bcrypt od PBKDF2, to odporność na akcelerację GPU. PBKDF2 używa operacji HMAC, które dobrze odwzorowują się na architekturach GPU, pozwalając atakującym z konsumenckimi kartami graficznymi osiągać masową równoległość. Harmonogram kluczy bcrypt oparty na Blowfishu wymaga częstego dostępu do 4-kilobajtowej tabeli stanu, która musi być modyfikowana podczas obliczeń. Ten wzorzec dostępu do pamięci nie zrównolegli się efektywnie na układach GPU, spychając atakujących z powrotem do prędkości procesorów.

bcrypt generuje ciąg 60 znaków kodujący razem wersję algorytmu, współczynnik kosztu, sól i skrót — co czyni go samodzielnym i przenośnym. Typowy skrót bcrypt wygląda tak: $2b$12$..., gdzie 12 to współczynnik kosztu. Aktualnie zalecany minimalny współczynnik kosztu to 10 (ok. 100 ms na skrót na nowoczesnym sprzęcie), choć 12–14 jest powszechne dla aplikacji, które mogą tolerować nieco wolniejszy czas logowania. bcrypt jest dostępny praktycznie w każdym języku programowania i pozostaje jednym z najszerzej wdrożonych algorytmów haszowania haseł.

Jak Vaulted używa bcrypt

Vaulted używa PBKDF2 zamiast bcrypt do wyprowadzania kluczy z passphrase, ponieważ PBKDF2 jest natywnie dostępny przez Web Crypto API w przeglądarkach, natomiast bcrypt nie jest. Web Crypto API nie udostępnia bcrypt, więc jego użycie wymagałoby implementacji w JavaScript, rezygnując z korzyści bezpieczeństwa natywnego, stałoczasowego wykonania. Do aplikacji serwerowych, które haszują hasła na potrzeby uwierzytelniania, bcrypt pozostaje doskonałym wyborem — jednak do wyprowadzania kluczy po stronie klienta w przeglądarce standardowym podejściem jest PBKDF2 przez Web Crypto.