2016-11-22 4 views
0

Ich habe dieses Stück Code in einer Veröffentlichung gesehen. Welchen Nutzen bringt es, den Hash 11 Mal zu generieren? Ist es wegen der Entropie sicherer als eins?Vorteile der laufenden sha512 Hash-Funktion mehrmals

var hash = sha512(salt+":"+user+":"+passwd); 
for(i = 0; i < 10; i++) 
    hash = sha512(salt+":"+user+":"+passwd); 
+1

Ich bin nicht sicher, aber ich würde sagen, dass Nutzen sein könnte. '" somepassword ">" some-hash "', wenn Sie es mehrmals hasen, würde es nicht in einer solchen Tabelle gefunden werden, oder es würde erfordern, dass diese Tabelle 10-mal größer ist. – pie6k

+3

Dieses genaue Stück Code? Es ist genau dasselbe wie einmal SHA512 zu laufen - es gibt keine tatsächliche Änderung der Entropie. Es dauert höchstens etwas länger (um Brute Forcing zu verhindern), aber ich bezweifle wirklich, dass es effektiv sein wird. – vlaz

+1

Das wiederholte Ausführen desselben Hashs wird immer sicherer, da das erneute Erstellen der Hashes in einer Brute-Force-Methode rechenintensiver wird. Überprüfen Sie einige der Antworten auf [diese Frage] (http://softwareengineering.stackexchange.com/questions/115406/is-it-more-secure-to-hash-a-password-multiple-times) – castis

Antwort

5

Der letzte Hash-Wert in diesem Beispiel ist nicht sicherer (und auch nicht anders), als wenn er einmal hashed wäre. Der einzige Effekt, den ich aus dem bereitgestellten Code erkennen kann, ist, dass es länger dauert.

In Bezug auf einige der Links, Kommentare und andere Antworten bezüglich wiederholten Hashing, ist dies nur sinnvoll, wenn die nachfolgenden Hash-Funktionen auf die Ausgabe des vorherigen Hash angewendet werden. Das Beispiel des Fragestellers wiederholt einfach dieselben Daten und erzeugt das gleiche Ergebnis.

könnte Dieser Code effektiver sein: wenn einige Hash sind in einiger Regenbogen-Tabelle zB

var hash = sha512(salt+":"+user+":"+passwd); 
for(i = 0; i < 10; i++) 
    hash = sha512(salt+":"+user+":"+passwd+":"+hash); 
2

Es ist sicherer, wenn ein Angreifer Zugriff auf die Datenbank erhält, die die gehashten Kennwörter enthält.

Mehrfache Hashes verlangsamen den Angreifer um einen Faktor, der linear zur Anzahl der Hash-Iterationen ist, während die einfachen Kennwörter aus den Hashes mit Brute-Force-Angriffen erraten werden.

In dieser Perspektive würde ich sagen, dass 10 eine eher kleine Zahl ist und wenn dieser Fall (ein Angreifer Zugriff auf Passwörter Datenbank bekommt) ist ein Anliegen für Sie, ich denke, es ist besser zu mehr Iterationen als 10 (sagen wir 1000).

Edit: Ich habe gerade bemerkt, dass die Wiederholung Hash in der Frage immer das Original-Passwort verwendet, und es wird immer und immer nicht wieder wie im folgenden Code-Hashing

var hash = sha512(salt+":"+user+":"+passwd); 
for(i = 0; i < 10; i++) 
    hash = sha512(salt+":"+user+":"+hash); 

Meine Antwort auf diesen Fall bezieht sich (hashing den Hash immer und immer wieder) und nicht auf den Code in der Frage erwähnt.

+1

Und es ist zu beachten, dass dies eine sehr schlechte Implementierung von Key-Stretching ist, gibt es eine bewährte Möglichkeit, diese Iterationen [PBKDF2] (https://en.wikipedia.org/wiki/PBKDF2) zu tun. – martinstoeckli

Verwandte Themen