Es sollte genügen 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 sicher genug, dass ein Verstoß durch einen Implementierungsfehler und nicht durch eine Kryptoanalyse auftritt.
Wenn Sie darauf bestehen zu wissen, was "besser" ist, hat SHA-512 eingehende Überprüfungen durch NIST und andere erhalten. Es ist gut, aber es wurden Fehler erkannt, die, obwohl sie jetzt nicht ausnutzbar sind, 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 Kryptografen noch etwas über sie lernen.
Obwohl bcrypt als Ganzes nicht so genau unter die Lupe genommen wurde wie Blowfish selbst, glaube ich, dass die Verwendung einer Verschlüsselung mit einer gut verstandenen Struktur eine gewisse Sicherheit bietet, die der Hash-basierten Authentifizierung fehlt. Es ist auch einfacher, gängige GPUs als Werkzeug für den Angriff auf SHA-2-basierte Hashes zu verwenden. Aufgrund des Speicherbedarfs erfordert die Optimierung von bcrypt speziellere Hardware wie FPGA mit etwas integriertem RAM.
Hinweis: bcrypt ist ein Algorithmus, der Blowfish intern verwendet. Es ist selbst kein Verschlüsselungsalgorithmus. Es wird verwendet, um Passwörter irreversibel zu verschleiern, genauso wie Hash-Funktionen verwendet werden, um einen "Einweg-Hash" durchzuführen.
Kryptografische Hash-Algorithmen sind so konzipiert, dass sie nicht rückgängig gemacht werden können. Mit anderen Worten, wenn nur die Ausgabe einer Hash-Funktion gegeben ist, sollte es "ewig" dauern, bis eine Nachricht gefunden wird, die dieselbe Hash-Ausgabe erzeugt. Tatsächlich sollte es rechnerisch unmöglich sein, zwei beliebige Nachrichten zu finden, die denselben Hashwert 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 mit dem in der Kennworttabelle gespeicherten Wert übereinstimmt, wird er authentifiziert. Insbesondere aufgrund der Irreversibilität der Hash-Funktion wird angenommen, dass der Benutzer kein Angreifer ist, der den Hash ergriffen und umgekehrt hat, um ein funktionierendes Passwort zu finden.
Betrachten Sie 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. 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 Tabelle "Passwort" gespeichert, der abgeleitete Schlüssel wird jedoch nie gespeichert.
Um die Kryptographie hier zu brechen, müsste ein Angreifer den Schlüssel aus dem Chiffretext wiederherstellen. Dies wird als "bekannter Klartext" -Angriff bezeichnet, da der Angriff die verschlüsselte magische Zeichenfolge kennt, jedoch nicht den verwendeten Schlüssel. Blowfish wurde ausführlich 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 bei irreversiblen Algorithmen, die auf kryptografischen Digests basieren, erzeugt bcrypt eine irreversible Ausgabe aus einem Kennwort, einem Salt und einem Kostenfaktor. Seine Stärke liegt in der Beständigkeit von Blowfish gegen bekannte Klartextangriffe, die einem "ersten Pre-Image-Angriff" auf einen Digest-Algorithmus entspricht. Da bcrypt anstelle eines Hash-Algorithmus zum Schutz von Passwörtern verwendet werden kann, wird es verwirrenderweise selbst als "Hash" -Algorithmus bezeichnet.
Unter der Annahme, dass Regenbogentabellen durch die richtige Verwendung von Salz vereitelt wurden, reduziert jede wirklich irreversible Funktion den Angreifer auf Versuch und Irrtum. Und die Rate, 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 "zurü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 Hash-basierte Methode wie PBKDF2 macht dasselbe. In dieser Hinsicht sind die beiden Methoden ähnlich.
Meine Empfehlung für bcrypt beruht also auf den Annahmen 1), dass ein Blowfish ein ähnliches Maß an Kontrolle hatte wie die SHA-2-Familie von Hash-Funktionen, und 2) dass kryptoanalytische Methoden für Chiffren besser entwickelt sind als solche für Hash-Funktionen.