it-swarm.com.de

Ist bcrypt besser als scrypt

Mögliches Duplikat:
Empfehlen Sicherheitsexperten bcrypt zur Kennwortspeicherung?

Ich bin kein Sicherheitsexperte und gebe nicht vor, das zu sein, deshalb frage ich hier. Ich schreibe viele PHP-basierte Anwendungen und bis jetzt habe ich bcrypt verwendet, um meine Passwörter zu hashen.

Die Scrypt-Website behauptet, 4000-mal langsamer als bcrypt zu sein. Kann diese Behauptung wirklich richtig sein? Wenn ja, wäre es für einen sicherheitsbewussten Entwickler "besser", auf die Verwendung von scrypt anstelle von bcrypt umzusteigen?

52
twigg

Scrypt soll "besser" sein als bcrypt, ist aber auch viel jünger, und das ist schlecht (weil "neuer" von Natur aus impliziert, dass "weniger geprüft wurde").

Alle diese Passwort-Hashing-Schemata versuchen, die Verarbeitung eines einzelnen Passworts teurer zu machen für den Angreifer, ohne es zu teuer zu machen für Ihren Server. Da Ihr Server im Grunde genommen ein PC ist und der Angreifer die effizienteste Hardware für seine Aufgabe auswählen kann, versuchen Kennwort-Hashing-Schemata so zu sein, dass die beste Plattform für ihn ein PC ist. PBKDF2 kann mit der GPU gründlich optimiert werden, während bcrypt und scrypt viel weniger GPU-freundlich sind. Bcrypt und scrypt erfordern beide schnelles RAM , eine knappe Ressource in einer GPU (eine GPU kann viel RAM haben, kann jedoch nicht von allen Kernen gleichzeitig darauf zugreifen).

Es kommt also vor, dass moderne FPGA viele kleine RAM Blöcke) einbetten, die sehr praktisch sind, um einen parallelen Wörterbuchangriff mit bcrypt zu optimieren: Dies bedeutet, dass ein Angreifer einen enormen Schub erhält, wenn er FPGA im Wert von 1000 $ anstelle von generischem PC im Wert von 1000 $ verwendet. Dies ist die Art von Boost, die wir vermeiden möchten. Daher verschlüsseln, was viel mehr RAM erfordert, nicht auch viel für einen PC (wir sprechen hier nur von ein paar Megabyte), aber genug, um einem FPGA das Leben schwer zu machen (siehe diese Antwort für eine detaillierte Behandlung der Frage).

Daher sollte theoretisch die Verschlüsselung besser sein als die Verschlüsselung. Allerdings hängt dies alles davon ab, ob die Verschlüsselung ihren kryptografischen Versprechen entspricht. Diese Art der Robustheitsgarantie kann nur mit der Zeit erreicht werden: Das System gilt als sicher, wenn es jahrelange unerbittliche Angriffe von Kryptographen überlebt. Wie viel Zeit benötigt wird, ist natürlich etwas subjektiv und hängt auch stark von Exposition ab (je weiter ein Schema eingesetzt wird, desto "interessanter" wird ein Ziel darin es zu brechen würde den akademischen Ruhm des Täters erhöhen und somit mehr Kontrolle anziehen). Meine eigene Faustregel lautet, nach der Veröffentlichung etwa 5 Jahre zu warten, im Falle von Verschlüsselung also 2014.

Es gibt auch die Frage nach der Verfügbarkeit : Wenn Sie eine Funktion verwenden möchten, benötigen Sie eine Implementierung, die in das von Ihnen verwendete Programmierframework eingefügt werden kann.

54
Thomas Pornin

Ich würde die Behauptung "Scrypt ist 4000-mal langsamer als BCrypt" mit einem Körnchen Salz nehmen. Erstens sind diese beiden Algorithmen variabel komplex; Selbst wenn diese Zahl "4000x" gilt, können Sie BCrypt genauso langsam machen, indem Sie der Schlüsselableitung weitere 11 Runden hinzufügen. Zweitens sind SCrypt und BCrypt irgendwann dadurch begrenzt, wie lange es dauert, einen Hash auf dem Computer eines durchschnittlichen Benutzers (oder auf Ihrem Server, wenn Sie ihn für eine Web-App serverseitig ausführen) zu berechnen. SCrypt, das 4000x langsamer ist, kann die Absprungrate Ihrer Website um mehr als die erhöhte Sicherheit erhöhen.

Gründe, sich für BCrypt zu entscheiden:

  • Wie SCrypt ist BCrypt konfigurierbar langsam, sodass es im Vergleich zu einem herkömmlichen CPU/GPU-Crackbot recht gut mit Moores Gesetz Schritt hält.
  • BCrypt ist 14 Jahre alt, basierend auf einer Chiffre, die älter als 20 Jahre ist, und es wurde keine nachweisbare theoretische Schwäche festgestellt (es gibt eine bekannte Klartext-Sicherheitslücke in Blowfish, die BCrypt nicht im geringsten betrifft, aber es gibt eine Ein Fehler in einer UNIX-Implementierung von BCrypt kann zu Anwendungsfehlern führen, wenn bestimmte Zeichencodes eingegeben werden.

    SCrypt ist erst 3-4 Jahre alt und verfügt daher nicht über den erforderlichen kryptoanalytischen Stammbaum, um das Vertrauen der meisten Kryptographen zu gewinnen. Das bedeutet nicht, dass es verwundbar ist. Dies bedeutet, dass Mopst-Sicherheitsexperten nicht sicher genug sind, dass es nicht anfällig ist noch.

  • Es gibt Implementierungen von BCrypt für praktisch jede Sprache/Laufzeit. Auch hier ist SCrypt, da es so neu ist, nicht so weit verbreitet, und daher ist die Anzahl der gut überprüften Implementierungen geringer.

Es gibt wirklich nur einen Grund, sich für SCrypt anstelle von BCrypt zu entscheiden, und es ist der Grund, warum SCrypt entwickelt wurde: Die Hauptschwäche von BCrypt gegenüber einem verteilten Cracking-System ist die geringe, konstante Speichernutzung. Dies macht BCrypt anfällig für kostengünstiges Brute-Forcing mit relativ kostengünstigen Field-Programmable Gate Arrays oder FPGAs. Diese Arrays haben eine relativ kleine Menge an SRAM in ihren Logikblöcken eingebaut, was immer noch ausreicht, um die Statusdaten von BCrypt zu speichern. Wie Thomas sagte, sind diese Arrays billiger zu kaufen und einzurichten als ein verteiltes Netzwerk herkömmlicher Crackbots auf CPU- oder GPU-Basis. Entsprechend erhält Ihr Angreifer mehr für sein Geld.

Im Gegensatz dazu verwendet SCrypt nicht nur exponentielle Zeit, sondern auch exponentiellen Speicher. Mit zunehmender Anzahl von Ableitungsrunden erfordert SCrypt die Speicherung einer Reihe von Zwischenzustandsdaten "Schnappschüssen", die für weitere Ableitungsvorgänge verwendet werden. Dies ist kein Problem für den Computer eines legitimen Benutzers, der einen Hash generiert (Sie verwenden wahrscheinlich höchstens einige MB), aber der begrenzte Speicher eines FPGA-Blocks wird schnell unzureichend. Alles, was Sie speichern könnten, könnten Sie stattdessen "on-demand" berechnen, aber da jeder dieser Zwischenzustände das Ergebnis einer eigenen exponentiell komplexen Reihe von Operationen ist (von denen jede weniger komplex ist als der endgültige Hash, aber muss mehrmals für den On-Demand-Einsatz berechnet werden), der Angreifer befindet sich jetzt in einem Dilemma; Entweder benötigen sie exponentiell mehr FPGAs, um mit der erhöhten Rechenzeit des On-Demand-Modells Schritt zu halten, oder sie müssen die FPGAs auf etwas mit ausreichend Speicher aktualisieren, um die Aufgabe zu erledigen (im Grunde ziehen Sie eine einfache Hochtakt-CPU/FSB in Betracht/RAM-Architekturen an diesem Punkt, was hinter den verteilten Petaflop-Clustern im Wert von mehreren Millionen Dollar steckt. In beiden Fällen sind FPGAs nicht mehr so ​​realisierbar wie für BCrypt (oder PBKDF2).

26
KeithS

Mit scrypt können Sie zusätzlich zur Erhöhung der Berechnung den für die Berechnung des Hashs erforderlichen Speicherplatz erhöhen. Dies stört Software-Implementierungen nicht sehr, ist jedoch mit Hardware viel schwieriger zu implementieren - was ein dedizierter Angreifer wahrscheinlich entwickeln und verwenden wird. bcrypt (und PBKDF2) verwenden konstante und kleine Speichermengen.

- Orip

Per https://stackoverflow.com/questions/1226513/whats-the-advantage-of-scrypt-over-bcrypt

10
Lucas Kauffman