Czy jacyś eksperci od bezpieczeństwa zalecają bcrypt do przechowywania haseł?

Na Powierzchni bcrypt, 11-letni algorytm bezpieczeństwa zaprojektowany do hashowania haseł przez Niels Provos i Davida Mazieres, który opiera się na funkcji inicjalizacji używanej w zatwierdzonym przez NIST algorytmie blowfish wydaje się prawie zbyt dobry, aby był prawdziwy. Nie jest podatny na tęczowe stoły (ponieważ ich tworzenie jest zbyt drogie), a nawet nie jest podatny na ataki brute force.

Jednak 11 lat później, wielu nadal używa SHA2x z solą do przechowywania hashe haseł i bcrypt nie są powszechnie stosowane.

  • jakie jest zalecenie NIST w odniesieniu do bcrypt (i hashowania haseł w ogóle)?
  • co wybitni eksperci ds. bezpieczeństwa (tacy jak Arjen Lenstra itd.) mówią o używaniu bcrypt do hashowania haseł?
Author: Sam Saffron, 2010-09-16

5 answers

Bcrypt ma najlepszą reputację, jaką można osiągnąć dla algorytmu kryptograficznego: istnieje już od dłuższego czasu, jest dość szeroko stosowany, "przyciąga uwagę", a mimo to pozostaje nieprzerwany do dziś.

Dlaczego bcrypt jest nieco lepszy od PBKDF2

Jeśli spojrzeć na sytuację w szczegółach, można rzeczywiście zobaczyć kilka punktów, w których bcrypt jest lepszy niż, powiedzmy, PBKDF2 . Bcrypt jest funkcją hashowania haseł, która ma na celu powolne działanie. Aby być precyzyjnym, chcemy, aby funkcja haszująca hasła była jak najwolniejsza dla atakującego, a nie była nietolerancyjnie powolna dla uczciwych systemów . "PC"), które są również dostępne dla atakującego, najlepszym, na co możemy mieć nadzieję, jest spowolnienie hashowania N razy zarówno dla atakującego, jak i dla nas. Następnie dostosowujemy N tak, aby nie przekraczać naszych zasobów (przede wszystkim cierpliwość użytkownika, która jest naprawdę ograniczona).

Chcemy uniknąć tego, że atakujący może używać sprzętu innego niż komputer, który pozwoliłby mu cierpieć mniej niż my z powodu dodatkowej pracy sugerowanej przez bcrypt lub PBKDF2. W szczególności, pracowity atakujący może chcieć użyć GPU lub FPGA. Na przykład SHA-256 może być bardzo wydajnie zaimplementowany na GPU, ponieważ używa tylko 32-bitowych operacji logicznych i arytmetycznych, w których GPU jest bardzo dobry. Stąd napastnik z 500$ wart GPU będzie mógł "wypróbować" o wiele więcej haseł na godzinę niż to, co mógł zrobić z 500 $ wartym PC (stosunek zależy od typu GPU, ale stosunek 10x lub 20x byłby typowy).

Bcrypt polega w dużym stopniu na dostępie do tabeli, która jest stale zmieniana w trakcie wykonywania algorytmu. Jest to bardzo szybkie na komputerze, a tym bardziej na GPU, gdzie pamięć jest współdzielona, a wszystkie rdzenie konkurują o kontrolę wewnętrznej magistrali pamięci. Tak więc impuls, który atakujący może uzyskać od korzystanie z GPU jest dość ograniczone, w porównaniu do tego, co atakujący dostaje z PBKDF2 lub podobnych projektów.

Projektanci bcrypt byli świadomi tego problemu, dlatego zaprojektowali bcrypt z szyfru blokowego Blowfish , a nie funkcję SHA -*. Zauważają w swój artykuł następujący:

Oznacza to, że każde hasło powinno działać tak efektywnie, jak to tylko możliwe dla ustawienia, w którym będzie działać. Projektantom krypty nie udało się tego zrobić. Opierały się one na DES, szczególnie nieefektywnym algorytmie do implementacji w oprogramowaniu ze względu na liczne transpozycje bitów. Zdyskontowali ataki sprzętowe, częściowo dlatego, że krypty nie można obliczyć za pomocą sprzętu stock DES. Niestety, Biham później odkrył technikę oprogramowania znaną jako bitslicing, która eliminuje koszty transpozycji bitów w obliczeniach wielu jednoczesnych SZYFROWAŃ DES. Choć bitslicing nie pomoże nikomu szybciej logować się, oferuje oszałamiające przyspieszenie brutalnej siły wyszukiwanie haseł.

Co pokazuje, że sprzęt i sposób jego użycia jest ważny. Nawet na tym samym komputerze, co uczciwy system, atakujący może użyć bitslicingu, aby wypróbować kilka haseł jednocześnie i uzyskać z niego impuls, ponieważ atakujący mA kilka haseł do wypróbowania, podczas gdy uczciwy system ma tylko jedno na raz.

Dlaczego bcrypt nie jest optymalnie Bezpieczny

Autorzy bcrypt pracowali w 1999 roku. W tym czasie threat to custom ASIC z bardzo niską liczbą bramek. Czasy się zmieniły; teraz zaawansowany atakujący będzie używał dużego FPGA, a nowsze modele (np. Virtex z Xilinx) mają wbudowane bloki RAM, które pozwalają im bardzo efektywnie implementować Blowfish i bcrypt. Bcrypt potrzebuje tylko 4 kB szybkiej pamięci RAM. Podczas gdy bcrypt wykonuje przyzwoitą pracę w utrudnianiu życia atakującemu z ulepszonym GPU, robi niewiele przeciwko atakującemu z obsługą FPGA.

To skłoniło Colina Percivala do wynalezienia scrypt w 2009 roku; jest to funkcja podobna do bcrypt, która wymaga znacznie więcej pamięci RAM. Jest to wciąż nowy projekt (tylko dwa lata) i nigdzie nie jest tak rozpowszechniony jak bcrypt; uważam, że jest zbyt Nowy, aby można go było ogólnie polecić. Ale jego kariera powinna być kontynuowana.

(Edit: scrypt okazał się nie do końca dotrzymać swoich obietnic. Zasadniczo jest to dobre do tego, do czego został zaprojektowany, tj. do ochrony klucza szyfrowania głównego dysku twardego komputera: jest to użycie kontekst, w którym hashowanie może wykorzystywać setki megabajtów pamięci RAM i kilka sekund wartości procesora. W przypadku zapracowanego serwera, który uwierzytelnia przychodzące żądania, budżet procesora jest znacznie niższy, ponieważ serwer musi być w stanie obsługiwać kilka jednoczesnych żądań naraz, a nie zwalniać do indeksowania przy sporadycznych obciążeniach szczytowych; ale gdy scrypt używa mniej procesora, używa również mniej pamięci RAM, jest to część sposobu, w jaki funkcja jest wewnętrznie zdefiniowana. Gdy obliczenia hash muszą zakończyć się w ciągu kilku milisekund pracy, ilość użytej pamięci RAM jest tak niska, że scrypt staje się technicznie słabszy niż bcrypt.)

Co poleca NIST

NIST wydało specjalną publikację SP 800-132 na temat przechowywania hashowanych haseł. Zasadniczo polecają PBKDF2. Nie oznacza to, że uważają bcrypt za niepewny; nic nie mówią o bcrypt. Oznacza to po prostu, że NIST uważa PBKDF2 za " wystarczająco bezpieczny "(i z pewnością jest znacznie lepszy niż zwykły hash !). Również, NIST jest organizacją administracyjną, więc z pewnością pokochają wszystko, co opiera się na już "zatwierdzonych" algorytmach, takich jak SHA-256. Z drugiej strony, bcrypt pochodzi od Blowfish, który nigdy nie otrzymał żadnego rodzaju błogosławieństwa (lub przekleństwa) NIST.

Chociaż polecam bcrypt, nadal podążam za NIST w tym, że jeśli zaimplementujesz PBKDF2 i używasz go poprawnie( z "dużą" liczbą iteracji), to jest całkiem prawdopodobne, że przechowywanie haseł nie jest już najgorszym z twoich problemów z bezpieczeństwem.

 638
Author: Thomas Pornin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-21 19:53:07

Bcrypt ma znaczącą przewagę nad po prostu solonym skrótem SHA-256: bcrypt używa zmodyfikowanego algorytmu konfiguracji klucza, który jest dość kosztowny. To się nazywa wzmocnienie klucza i sprawia, że hasło jest bezpieczniejsze przed atakami brute force, ponieważ atakujący potrzebuje teraz dużo więcej czasu na przetestowanie każdego możliwego klucza.

W wpisie na blogu " dość tęczowych tabel: co trzeba wiedzieć o zabezpieczonych schematach haseł", do którego osobiście polecam przeczytaj, Thomas Ptacek, autor i badacz bezpieczeństwa zaleca użycie bcrypt.

Osobiście patrzyłem ostatnio na PBKDF2, która jest funkcją pochodną klucza, która stosuje pseudolosową funkcję (np. hash kryptograficzny) do hasła wejściowego wraz z salt, a następnie wyprowadza klucz powtarzając proces tyle razy, ile określono. Chociaż jest to funkcja pochodna klucza, wykorzystuje zasadę wzmacniania klucza w swoim rdzeniu, która jest jedną z wielu rzeczy, do których powinieneś dążyć, decydując się na bezpieczne wygenerowanie hasha hasła.

Cytuję Tomasz Ptacek z powyższego linkowanego posta:

Speed is exactly what you don ' t want w funkcji hashowania hasła.

 107
Author: Giuseppe Accaputo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-11 13:34:37

Myślę, że sugestia Gui dotycząca PBKDF2 ma sens, choć wiem, że Rook zdecydowanie się z tym nie zgadza. Gdyby tylko mieli jasność co do swojego rozumowania!

Niezależnie od tego, nie ma powodu, aby używać solonego haszu SHA-256 w porównaniu do HMAC-SHA256. HMAC ma tę zaletę, że blokuje ataki rozszerzające.

 23
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-18 01:51:13

NIST jest organizacją rządową z siedzibą w Stanach Zjednoczonych, a zatem przestrzega standardów FIPS (United States based), które nie obejmują blowfish, ale obejmują SHA-256 i SHA-512 (a nawet SHA-1 dla zastosowań podpisów niecyfrowych, nawet w NIST SP800-131A, które określają, jak długo każdy starszy algorytm może być używany w jakim celu).

Dla każdej firmy wymaganej do przestrzegania amerykańskich standardów NIST lub FIPS, bcrypt nie jest prawidłową opcją. Sprawdź prawa i regulacje każdego kraju oddzielnie, jeśli robisz tam interesy, oczywiście.

PBKDF2 jest w porządku; prawdziwą sztuką jest uzyskanie kart Tesla (opartych na GPU) na uczciwych serwerach, aby iteracje mogły być wystarczająco wysokie, aby konkurować z krakerami bazującymi na GPU. W przypadku PBKDF2 w 2012 r., OWASP zaleca co najmniej 64 000 iteracji w arkuszu do przechowywania haseł , podwojonych co 2 lata.

 22
Author: PBKDF2,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-25 15:06:49

Warto przyjrzeć się Argon2, który wygrał konkurs haszowania haseł .

 18
Author: David C. Bishop,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-06 22:18:24