it-swarm.com.de

SHA512 gegen Blowfish und Bcrypt

Ich suche nach Hashing-Algorithmen, konnte aber keine Antwort finden.

  • Bcrypt verwendet Blowfish
  • Blowfish ist besser als MD5
  • F: Aber ist Blowfish besser als SHA512?

Vielen Dank..

Update:

Ich möchte klarstellen, dass ich den Unterschied zwischen Hashing und Verschlüsselung verstehe. Was mich dazu veranlasst hat, diese Frage zu stellen, ist dieser Artikel , , wobei der Autor bcrypt als "adaptives Hashing" bezeichnet

Da bcrypt auf Blowfish basiert, war ich der Meinung, dass Blowfish ein Hashing-Algorithmus ist. Wenn es sich um eine Verschlüsselung handelt, wie die Antworten gezeigt haben, sollte sie meines Erachtens keinen Platz in diesem Artikel haben. Schlimmer ist, dass er zu dem Schluss kommt, dass bcrypt das Beste ist. Was mich jetzt auch verwirrt, ist, dass die phpass-Klasse (die meiner Meinung nach für Passwort-Hashing verwendet wird) bcrypt (d. H. Blowfish, d. H. Verschlüsselung) verwendet. Basierend auf diesen neuen Informationen, die ihr mir erzählt (Blowfish ist Verschlüsselung), klingt diese Klasse falsch. Vermisse ich etwas?

219
Chris

Es sollte ausreichen zu sagen, ob bcrypt oder SHA-512 (im Kontext eines geeigneten Algorithmus wie PBKDF2) gut genug ist. Und die Antwort lautet: Ja, jeder Algorithmus ist so sicher, dass ein Verstoß durch einen Implementierungsfehler und nicht durch eine Kryptoanalyse verursacht wird.

Wenn Sie darauf bestehen, zu wissen, was "besser" ist, hat SHA-512 eingehende Tests von NIST und anderen durchgeführt. Es ist gut, aber es wurden Fehler erkannt, die, obwohl sie jetzt nicht ausgenutzt werden können, zum SHA-3-Wettbewerb um neue Hash-Algorithmen geführt haben. Denken Sie auch daran, dass das Studium von Hash-Algorithmen "neuer" ist als das von Chiffren, und Kryptographen lernen immer noch über sie.

Obwohl bcrypt als Ganzes nicht so genau untersucht wurde wie Blowfish selbst, glaube ich, dass eine Verschlüsselung mit einer gut verständlichen Struktur der Verschlüsselung eine gewisse inhärente Sicherheit verleiht, die einer hashbasierten Authentifizierung fehlt. Es ist auch einfacher, gängige GPUs als Tool zum Angriff auf SHA-2-basierte Hashes zu verwenden. Aufgrund seines Speicherbedarfs erfordert die Optimierung von bcrypt spezialisiertere Hardware wie FPGA mit etwas integriertem RAM.


Hinweis: bcrypt ist ein Algorithmus, der Blowfish intern verwendet. Es ist kein Verschlüsselungsalgorithmus. Es wird verwendet, um Passwörter irreversibel zu verbergen, genau wie Hash-Funktionen verwendet werden, um einen "One-Way-Hash" durchzuführen.

Kryptografische Hash-Algorithmen können nicht rückgängig gemacht werden. Mit anderen Worten, wenn nur die Ausgabe einer Hash-Funktion angegeben wird, sollte es "ewig" dauern, bis eine Nachricht gefunden wird, die dieselbe Hash-Ausgabe erzeugt. Tatsächlich sollte es rechnerisch unmöglich sein, zwei Nachrichten zu finden, die denselben Hash-Wert erzeugen. Im Gegensatz zu einer Chiffre werden Hash-Funktionen nicht mit einem Schlüssel parametrisiert. Der gleiche Eingang erzeugt immer den gleichen Ausgang.

Wenn jemand ein Kennwort bereitstellt, das dem in der Kennworttabelle gespeicherten Wert entspricht, wird er authentifiziert. Insbesondere aufgrund der Irreversibilität der Hash-Funktion wird davon ausgegangen, dass der Benutzer kein Angreifer ist, der den Hash ergriffen und ihn rückgängig gemacht hat, um ein funktionierendes Passwort zu finden.

Betrachten wir nun bcrypt. Es verwendet Blowfish, um eine magische Zeichenfolge mit einem vom Kennwort abgeleiteten Schlüssel zu verschlüsseln. Wenn ein Benutzer später ein Kennwort eingibt, wird der Schlüssel erneut abgeleitet, und wenn der durch Verschlüsselung mit diesem Schlüssel erzeugte Chiffretext mit dem gespeicherten Chiffretext übereinstimmt, wird der Benutzer authentifiziert. Der Chiffretext wird in der "Passwort" -Tabelle gespeichert, der abgeleitete Schlüssel wird jedoch niemals gespeichert.

Um hier die Kryptographie zu durchbrechen, müsste ein Angreifer den Schlüssel aus dem Chiffretext wiederherstellen. Dies wird als "bekannter Klartext" -Angriff bezeichnet, da der Angriff die magische Zeichenfolge kennt, die verschlüsselt wurde, aber nicht den verwendeten Schlüssel. Blowfish wurde eingehend untersucht, und es sind noch keine Angriffe bekannt, die es einem Angreifer ermöglichen würden, den Schlüssel mit einem einzigen bekannten Klartext zu finden.

Genau wie irreversible Algorithmen, die auf kryptografischen Digests basieren, erzeugt bcrypt eine irreversible Ausgabe aus einem Passwort, Salt und Kostenfaktor. Die Stärke von Blowfish liegt in der Beständigkeit gegenüber bekannten Klartextangriffen, die einem "ersten Pre-Image-Angriff" auf einen Digest-Algorithmus entsprechen. Da es anstelle eines Hash-Algorithmus zum Schutz von Passwörtern verwendet werden kann, wird bcrypt verwirrenderweise als "Hash" -Algorithmus selbst bezeichnet.

Unter der Annahme, dass Rainbow-Tische durch die ordnungsgemäße Verwendung von Salz vereitelt wurden, reduziert jede wirklich irreversible Funktion den Angreifer auf Versuch und Irrtum. Die Geschwindigkeit, mit der der Angreifer Versuche durchführen kann, wird durch die Geschwindigkeit dieses irreversiblen "Hash" -Algorithmus bestimmt. Wenn eine einzelne Iteration einer Hash-Funktion verwendet wird, kann ein Angreifer mit Geräten, die in der Größenordnung von 1000 US-Dollar kosten, Millionen von Versuchen pro Sekunde durchführen und alle Passwörter mit einer Länge von bis zu 8 Zeichen in wenigen Monaten testen.

Wenn die Digest-Ausgabe jedoch tausende Male "rückgemeldet" wird, dauert es Hunderte von Jahren, um denselben Satz von Kennwörtern auf dieser Hardware zu testen. Bcrypt erzielt den gleichen "Schlüsselverstärkungseffekt", indem es innerhalb seiner Schlüsselableitungsroutine iteriert, und eine geeignete hashbasierte Methode wie PBKDF2 tut das Gleiche. In dieser Hinsicht sind die beiden Methoden ähnlich.

Meine Empfehlung für bcrypt ergibt sich daher aus den Annahmen 1), dass ein Blowfish einen ähnlichen Untersuchungsgrad wie die SHA-2-Familie von Hash-Funktionen aufweist, und 2) dass kryptoanalytische Methoden für Chiffren besser entwickelt sind als solche für Hash-Funktionen.

317
erickson

Ich bin mit Ericksons Antwort einverstanden, mit einer Einschränkung: Für die Passwortauthentifizierung ist bcrypt weit besser als eine einzelne Iteration von SHA-512 - einfach weil es viel langsamer ist. Wenn Sie nicht verstehen, warum Langsamkeit in diesem speziellen Spiel von Vorteil ist, lesen Sie den Artikel, mit dem Sie erneut verlinkt haben (scrollen Sie nach unten zu " Geschwindigkeit ist genau das, was Sie in einem Passwort-Hash nicht wollen Funktion. ").

Sie können natürlich einen sicheren Passwort-Hashing-Algorithmus für SHA-512 erstellen, indem Sie ihn tausende Male iterieren, genau wie der MD5-Algorithmus von PHK funktioniert. lrich Drepper hat genau das getan , für die Krypta von glibc (). Es gibt jedoch keinen besonderen Grund, dies zu tun, wenn Sie bereits über eine getestete bcrypt-Implementierung verfügen.

49
caf

Blowfish ist kein Hashing-Algorithmus. Es ist ein Verschlüsselungsalgorithmus. Das bedeutet, dass Sie etwas mit Blowfish verschlüsseln und später wieder in einfachen Text entschlüsseln können.

SHA512 ist ein Hashing-Algorithmus. Das bedeutet, dass Sie (theoretisch) die ursprüngliche Eingabe nicht mehr zurückerhalten können, sobald Sie die Eingabe gehasht haben.

Es sind zwei verschiedene Dinge, die für verschiedene Aufgaben entwickelt wurden. Es gibt keine 'richtige' Antwort auf "ist Blowfish besser als SHA512?" Sie könnten genauso gut fragen "sind Äpfel besser als Kängurus?"

Wenn Sie mehr über das Thema erfahren möchten, folgen einige Links:

31
Glen

Blowfish ist nicht besser als MD5 oder SHA512, da sie unterschiedlichen Zwecken dienen. MD5 und SHA512 sind Hashing-Algorithmen, Blowfish ist ein Verschlüsselungsalgorithmus. Zwei völlig unterschiedliche kryptografische Funktionen.

4
blowdart

Ich würde Ulrich Dreppers SHA-256/SHA-512-basierte Crypt-Implementierung empfehlen.

Wir haben diese Algorithmen nach Java portiert. Eine frei lizenzierte Version finden Sie unter ftp://ftp.arlut.utexas.edu/Java_hashes/ .

Beachten Sie, dass die meisten modernen (L) Unices den Drepper-Algorithmus in ihren/etc/shadow-Dateien unterstützen.

2
Jonathan Abbey

Ich bin gerade auf folgendes gestoßen:

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

Kann der Autor dieses Artikels falsch sein?

2
disappearedng