Jaki byłby idealny czynnik pracy bcrypt do mieszania haseł.
Jeśli używam współczynnika 10, zaszyfrowanie hasła na moim laptopie zajmuje ok. 1s. Jeśli otrzymamy bardzo ruchliwą witrynę, wystarczy tylko sprawdzić hasła użytkowników.
Może lepiej byłoby użyć współczynnika pracy 7, zmniejszając łączną pracę mieszania haseł do około 0,01 s na logowanie do laptopa?
Jak decydujesz o kompromisie między bezpieczeństwem brutalnej siły a kosztami operacyjnymi?
Odpowiedzi:
Pamiętaj, że wartość jest przechowywana w haśle:
$2a$(2 chars work)$(22 chars salt)(31 chars hash)
. Nie jest to stała wartość.Jeśli okaże się, że obciążenie jest zbyt wysokie, po prostu zrób to tak, aby następnym razem, gdy się zalogują, szyfrujesz do czegoś szybszego do obliczenia. Podobnie, w miarę upływu czasu i otrzymywania lepszych serwerów, jeśli obciążenie nie stanowi problemu, możesz zwiększyć siłę ich skrótu, gdy się zalogują.
Sztuczka polega na tym, aby w przyszłości zajmowało mniej więcej tyle samo czasu w nieskończoność, co Prawo Moore'a. Liczba to log2, więc za każdym razem, gdy prędkość komputera zwiększa się dwukrotnie, dodaj 1 do wartości domyślnej.
Zdecyduj, ile czasu ma zająć brutalne wymuszenie hasła użytkownika. Na przykład w przypadku niektórych popularnych słów w słowniku prawdopodobnie utworzono już konto, które ostrzegło ich, że ich hasło jest słabe. Jeśli jest to jedno z 1000 popularnych słów, powiedzmy, a testowanie każdego z nich zajmuje atakującemu 0,1 sekundy, to kupuje mu 100 (cóż, niektóre słowa są bardziej powszechne ...). Jeśli użytkownik wybrał „popularne słowo słownikowe” + 2 cyfry, to ponad dwie godziny. Jeśli Twoja baza danych haseł została naruszona, a osoba atakująca może uzyskać tylko kilkaset haseł dziennie, większość użytkowników kupiła godziny lub dni na bezpieczną zmianę haseł. To kwestia kupienia im czasu.
W witrynie http://www.postgresql.org/docs/8.3/static/pgcrypto.html jest kilka momentów na złamanie haseł, które warto rozważyć. Oczywiście hasła, które tam wymieniają, mają losowe litery. Słownik słów ... Praktycznie rzecz biorąc, nie możesz uratować gościa, którego hasło to 12345.
źródło
$2y$08$fJS4yx0i8kiOzIBIamZ51OWTMrzyE/4je34Oxhw.5xxp3Es7Ke32W
. Powód, dla którego próbowałem edytować: nie było dla mnie jasne, czy „praca z 2 znakami” to cyfra, szesnastka, czy coś, co należy przetestować. Oto wynik testu dla wszystkich innych, więc nie musisz sam go wypróbowywać.Krótka wersja
Liczba iteracji, które dają co najmniej 250 ms do obliczenia
Długa wersja
Kiedy BCrypt został opublikowany po raz pierwszy, w 1999 roku, wymienili domyślne współczynniki kosztów ich implementacji:
Koszt bcrypt wynoszący 6 oznacza 64 rundy (2 6 = 64).
Zwracają również uwagę:
To daje wyobrażenie o rodzaju opóźnień, które pierwotni implementatorzy rozważali, kiedy to pisali:
Ale oczywiście im dłużej możesz stać, tym lepiej. Każda implementacja BCrypt, którą widziałem, była używana
10
jako domyślny koszt. I moja implementacja to wykorzystała. Uważam, że nadszedł czas, aby zwiększyć domyślny koszt do 12.Zdecydowaliśmy, że chcemy osiągnąć cel nie mniej niż 250 ms na hash.
Mój komputer stacjonarny to procesor Intel Core i7-2700K @ 3,50 GHz. Pierwotnie testowałem implementację BCrypt 23.01.2014:
Sprawdzanie przyszłości
Zamiast mieć stałą stałą, powinno to być ustalone minimum .
Zamiast mieć funkcję skrótu hasła:
powinno to być coś takiego:
Idealnie byłoby, gdyby była to część biblioteki BCrypt każdego użytkownika, więc zamiast polegać na użytkownikach biblioteki w celu okresowego zwiększania kosztów, koszt okresowo sam się zwiększa.
źródło