SHA512 vs. Blowfish i Bcrypt [zamknięty]

Patrzę na algorytmy haszujące, ale nie mogę znaleźć odpowiedzi.

  • Bcrypt używa Blowfish
  • Blowfish jest lepszy od MD5]}
  • P: Ale czy Blowfish jest lepszy od SHA512?
Dzięki..

Update:

Chcę wyjaśnić, że rozumiem różnicę między hashowaniem a szyfrowaniem. To, co skłoniło mnie do zadania pytania w ten sposób, to ten artykuł, gdzie autor określa bcrypt jako " adaptacyjny hashing "

Ponieważ bcrypt opiera się na Blowfish, zostałem przekonany, że Blowfish jest algorytmem haszującym. Jeśli jest to szyfrowanie, jak wskazały odpowiedzi, to wydaje mi się, że nie powinno mieć miejsca w tym artykule. Co gorsza dochodzi do wniosku, że bcrypt jest najlepszy. Co mnie teraz również myli, to to, że Klasa phpass (używana do hashowania haseł, jak sądzę) używa bcrypt(tj. blowfish, tj. szyfrowanie). Na podstawie tych nowych informacji, o których mi mówicie (blowfish jest szyfrowanie), ta klasa brzmi źle. Coś przeoczyłem?

Author: Peter Vandivier, 2009-10-13

6 answers

Wystarczy powiedzieć, czy bcrypt lub SHA-512 (w kontekście odpowiedniego algorytmu, takiego jak PBKDF2) jest wystarczająco dobry. A odpowiedź brzmi tak, albo algorytm jest na tyle bezpieczny, że dojdzie do naruszenia przez wadę implementacji, a nie kryptoanalizę.

Jeśli nalegasz, aby wiedzieć, co jest "lepsze", SHA-512 miał dogłębne recenzje NIST i innych. Jest dobry, ale wady zostały uznane, że choć nie można go teraz wykorzystać, doprowadziły do konkurencji SHA-3 dla nowe algorytmy haszujące. Należy również pamiętać, że badanie algorytmów haszujących jest "nowsze" niż badanie szyfrów, a kryptografowie wciąż się o nich uczą.

Mimo, że bcrypt jako całość nie miał aż takiej kontroli jak sam Blowfish, uważam, że bazowanie na szyfrze o dobrze zrozumiałej strukturze daje mu pewne wrodzone bezpieczeństwo, którego nie ma uwierzytelniania opartego na hash. Ponadto łatwiej jest używać zwykłych procesorów graficznych jako narzędzia do atakowania skrótów opartych na SHA-2; ze względu na pamięć wymagania, optymalizacja bcrypt wymaga bardziej wyspecjalizowanego sprzętu, takiego jak FPGA z wbudowaną pamięcią RAM.


Uwaga: bcrypt jest algorytmem, który używa Blowfish wewnętrznie. Nie jest to sam algorytm szyfrowania. Jest on używany do nieodwracalnego zaciemniania haseł, podobnie jak funkcje skrótu są używane do "jednokierunkowego skrótu".

Kryptograficzne algorytmy haszujące są zaprojektowane tak, aby nie dało się ich odwrócić. Innymi słowy, biorąc pod uwagę tylko wyjście funkcji hash, powinno zająć "wieczność", aby znaleźć wiadomość, która wytworzy ten sam wynik hash. W rzeczywistości znalezienie dwóch komunikatów o tej samej wartości skrótu powinno być obliczeniowo niewykonalne. W przeciwieństwie do szyfru, funkcje skrótu nie są parametryzowane za pomocą klucza; to samo wejście zawsze wytworzy to samo wyjście.

Jeśli ktoś poda hash do wartości przechowywanej w tabeli haseł, zostanie uwierzytelniony. W szczególności, ze względu na nieodwracalność funkcji hash, przyjmuje się, że użytkownik nie jest atakujący, który zdobył hash 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 "pochodnego" z hasła. Później, gdy użytkownik wprowadzi hasło, klucz jest pobierany ponownie, a jeśli szyfr wytworzony przez zaszyfrowanie tym kluczem pasuje do przechowywanego szyfru, użytkownik jest uwierzytelniany. Tekst szyfrowy jest przechowywany w tabeli "hasło", ale klucz Pochodny nigdy nie jest przechowywany.

W celu złamania kryptografia tutaj atakujący musiałby odzyskać klucz z szyfru. Nazywa się to atakiem "znanym tekstem jawnym" , ponieważ atak zna magiczny ciąg, który został zaszyfrowany, ale nie użyty klucz. Blowfish został szeroko zbadany 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 oparte na kryptograficznych digestach, bcrypt wytwarza nieodwracalne wyjście, z hasła, soli, i współczynnik kosztów. Jego siła polega na odporności Blowfisha na znane ataki tekstowe, które są analogiczne do" pierwszego ataku przed obrazem " na algorytm digest. Ponieważ może być używany zamiast algorytmu hashowego do ochrony haseł, bcrypt jest mylnie określany jako algorytm "hash".

Zakładając, że tablice tęczowe zostały udaremnione przez właściwe użycie soli, każda prawdziwie nieodwracalna funkcja redukuje atakującego do prób i błędów. I szybkość, jaką napastnik może próby make jest określona przez szybkość tego nieodwracalnego algorytmu" hash". Jeśli używana jest pojedyncza iteracja funkcji skrótu, atakujący może wykonać miliony prób na sekundę przy użyciu sprzętu, który kosztuje 1000 USD, testując wszystkie hasła o długości do 8 znaków w ciągu kilku miesięcy.

Jeśli jednak wyjście digest zostanie "odesłane" tysiące razy, przetestowanie tego samego zestawu haseł na tym sprzęcie zajmie setki lat. Bcrypt osiąga to samo " wzmocnienie klucza" efekt poprzez iterację wewnątrz swojej procedury wyprowadzania kluczy, a właściwa metoda oparta na hash, taka jak PBKDF2, robi to samo; pod tym względem obie metody są podobne.

Tak więc, moja rekomendacja bcrypt wynika z założeń 1) że Blowfish miał podobny poziom kontroli jak rodzina funkcji hash SHA-2, oraz 2) że metody kryptoanalityczne dla szyfrów są lepiej rozwinięte niż te dla funkcji hash.

 306
Author: erickson,
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-12-23 17:29:50

Zgadzam się z odpowiedzią Ericksona, z jednym zastrzeżeniem: dla celów uwierzytelniania hasłem, bcrypt jest daleko lepszy niż pojedyncza iteracja SHA-512-po prostu dlatego, że jest znacznie wolniejszy. Jeśli nie rozumiesz, dlaczego powolność jest zaletą w tej konkretnej grze, przeczytaj artykuł, do którego się połączyłeś (przewiń w dół do "Prędkość jest dokładnie tym, czego nie chcesz w funkcji hashowania hasła.").

Można oczywiście zbudować bezpieczny algorytm hashowania haseł wokół SHA-512 poprzez powtarzanie go tysiące razy, tak jak działa algorytm MD5 PHK. Ulrich Drepper zrobił dokładnie to dla Crypt () glibc. Nie ma konkretnego powodu, aby to zrobić, jeśli masz już przetestowaną implementację bcrypt.

 47
Author: caf,
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
2009-10-13 23:12:45

Blowfish nie jest algorytmem haszującym. To algorytm szyfrujący. Oznacza to, że możesz zaszyfrować coś za pomocą blowfish, a później możesz odszyfrować to z powrotem do zwykłego tekstu.

SHA512 jest algorytmem haszującym. Oznacza to, że (teoretycznie) po hashowaniu danych wejściowych nie można odzyskać oryginalnego danych wejściowych.

To dwie różne rzeczy, przeznaczone do różnych zadań. Nie ma "poprawnej" odpowiedzi na " czy blowfish jest lepszy od SHA512?" Równie dobrze można zapytać " czy jabłka są lepsze niż kangury?"

Jeśli chcesz poczytać więcej na ten temat, oto kilka linków:

 31
Author: Glen,
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-03-17 05:58:53

Blowfish nie jest lepszy od MD5 czy SHA512, ponieważ służy innym celom. MD5 I SHA512 to algorytmy haszujące, Blowfish to algorytm szyfrowania. Dwie zupełnie różne funkcje kryptograficzne.

 4
Author: blowdart,
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
2009-10-13 16:06:35

Polecam implementację kryptograficzną Ulricha Dreppera opartą na SHA-256/SHA-512.

Przeportowaliśmy te algorytmy do Javy, a ich darmową wersję znajdziesz pod adresem ftp://ftp.arlut.utexas.edu/java_hashes/.

Zauważ, że większość nowoczesnych uników (L)obsługuje algorytm Dreppera w ich plikach /etc/shadow.

 2
Author: Jonathan Abbey,
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-03-18 18:07:18

Właśnie natknąłem się na to:

Http://codahale.com/how-to-safely-store-a-password/

Czy autor tego artykułu może się mylić?

 2
Author: disappearedng,
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-12-13 18:15:33