Wystarczy stwierdzić, czy bcrypt lub SHA-512 (w kontekście odpowiedniego algorytmu, takiego jak PBKDF2) jest wystarczająco dobry . Odpowiedź brzmi: tak, każdy z algorytmów jest wystarczająco bezpieczny, aby doszło do naruszenia z powodu wady implementacji, a nie kryptoanalizy.
Jeśli nalegasz, aby wiedzieć, która jest „lepsza”, SHA-512 miał dogłębne recenzje NIST i innych. To dobrze, ale wykryto wady, które, choć nie nadają się teraz do wykorzystania, doprowadziły do rywalizacji o nowe algorytmy mieszania SHA-3. Pamiętaj również, że badanie algorytmów mieszania jest „nowsze” niż badanie szyfrów, a kryptografowie wciąż się o nich uczą.
Chociaż bcrypt jako całość nie był tak dokładnie badany jak sam Blowfish, uważam, że bazowanie na szyfrze o dobrze zrozumiałej strukturze daje mu pewne nieodłączne bezpieczeństwo, którego brakuje uwierzytelnianiu opartemu na haszowaniu. Ponadto łatwiej jest używać typowych układów GPU jako narzędzia do atakowania skrótów opartych na SHA-2; ze względu na wymagania dotyczące pamięci, optymalizacja bcrypt wymaga bardziej specjalistycznego sprzętu, takiego jak FPGA z pewną wbudowaną pamięcią RAM.
Uwaga: bcrypt to algorytm wykorzystujący wewnętrznie Blowfish. Nie jest to sam algorytm szyfrowania. Służy do nieodwracalnego zasłaniania haseł, podobnie jak funkcje skrótu służą do wykonywania „skrótu jednokierunkowego”.
Algorytmy szyfrowania kryptograficznego zaprojektowano tak, aby niemożliwe było ich odwrócenie. Innymi słowy, biorąc pod uwagę tylko dane wyjściowe funkcji skrótu, powinno minąć „na zawsze”, aby znaleźć komunikat, który wygeneruje taki sam wynik skrótu. W rzeczywistości znalezienie jakichkolwiek dwóch komunikatów o tej samej wartości skrótu powinno być niewykonalne obliczeniowo. W przeciwieństwie do szyfru, funkcje skrótu nie są parametryzowane za pomocą klawisza; to samo wejście zawsze będzie generowało to samo wyjście.
Jeśli ktoś poda hasło, które jest skrótem do wartości zapisanej w tabeli haseł, zostanie uwierzytelnione. W szczególności, z powodu nieodwracalności funkcji skrótu, zakłada się, że użytkownik nie jest atakującym, który przechwycił skrót i odwrócił go, aby znaleźć działające hasło.
Teraz rozważ bcrypt. Używa Blowfish do szyfrowania magicznego ciągu, używając klucza „pochodzącego” z hasła. Później, gdy użytkownik wprowadzi hasło, klucz jest uzyskiwany ponownie, a jeśli tekst zaszyfrowany utworzony przez szyfrowanie przy użyciu tego klucza pasuje do zapisanego tekstu zaszyfrowanego, użytkownik jest uwierzytelniany. Tekst zaszyfrowany jest przechowywany w tabeli „hasło”, ale klucz pochodny nigdy nie jest przechowywany.
Aby złamać tutaj kryptografię, osoba atakująca musiałaby odzyskać klucz z tekstu zaszyfrowanego. Nazywa się to atakiem „znanym tekstem jawnym”, ponieważ atak zna magiczny ciąg znaków, który został zaszyfrowany, ale nie użyty klucz. Blowfish został gruntownie przebadany i nie są jeszcze znane żadne ataki, które pozwoliłyby atakującemu znaleźć klucz z jednym znanym tekstem jawnym.
Tak więc, podobnie jak nieodwracalne algorytmy kryptograficzne oparte na algorytmach, bcrypt wytwarza nieodwracalne dane wyjściowe z hasła, soli i współczynnika kosztów. Jego siła polega na odporności Blowfish na znane ataki w postaci zwykłego tekstu, co jest analogiczne do „pierwszego ataku przed obrazem” na algorytm skrótu. Ponieważ można go używać zamiast algorytmu skrótu do ochrony haseł, bcrypt jest myląco określany jako sam algorytm „skrótu”.
Zakładając, że tablice tęczy zostały udaremnione przez właściwe użycie soli, każda naprawdę nieodwracalna funkcja sprowadza atakującego na próbę i błąd. A szybkość, z jaką atakujący może przeprowadzić próby, zależy od szybkości tego nieodwracalnego algorytmu „mieszania”. Jeśli zostanie użyta pojedyncza iteracja funkcji skrótu, atakujący może wykonać miliony prób na sekundę, używając sprzętu kosztującego 1000 USD, testując wszystkie hasła o długości do 8 znaków w ciągu kilku miesięcy.
Jeśli jednak podsumowanie zostanie „zwrócone” tysiące razy, przetestowanie tego samego zestawu haseł na tym sprzęcie potrwa setki lat. Bcrypt osiąga ten sam efekt „wzmocnienia klucza”, iterując wewnątrz swojej procedury wyprowadzania klucza, a odpowiednia metoda oparta na haszowaniu, taka jak PBKDF2, robi to samo; pod tym względem obie metody są podobne.
Zatem moja rekomendacja bcrypt wynika z założeń 1), że Blowfish miał podobny poziom kontroli jak rodzina funkcji skrótu SHA-2, oraz 2) że metody kryptoanalityczne dla szyfrów są lepiej opracowane niż te dla funkcji skrótu.