2016-06-22 3 views
0

Ich habe das Verfahren (Pseudocode):sicherste Weg Passwörter Hash

string predefinedsalt = "03jf0j02j302jf0j3f08h3298fbckm91jr192jr091j2-r01" 

string dynsalt(user) 
{ 
    return md5(user.id) 
} 

Und Passwort Hash ich eine dieser Möglichkeiten nutzen wollen:

  1. md5(user.password)
  2. md5(user.password + predefinedsalt)
  3. md5(user.password + dynsalt(user))
  4. md5(md5(user.password) + dynsalt(user))

Welche dieser Wege ist sicherer?

Antwort

3

Keiner Ihrer Vorschläge ist sicher für Hash-Passwörter. Verwenden Sie eine langsame Hash-Funktion mit einem Kostenfaktor wie BCrypt, PBKDF2 oder SCrypt und lassen Sie die Funktion ein Salz aus der zufälligen Quelle des Betriebssystems generieren.

Password Cracker-Tools implementieren solche Kombinationen bereits mit MD5 aus der Box, und MD5 ist viel zu schnell. Man kann etwa 100 Giga MD5 per second mit gängiger Hardware berechnen.

+0

Gute Antwort, aber ich glaube nicht, dass Computer mit 8 x NVidia Titan X ist _common Hardware_. Vielleicht möchten Sie auch [Argon2] (https://en.wikipedia.org/wiki/Argon2) in die Liste aufnehmen. – 1615903

+1

@ 1615903 - Sie haben recht, was ich meinte ist, dass jeder entschlossene Angreifer solche handelsübliche Hardware zu einem vernünftigen Preis bestellen kann, es gibt keine speziellen Kenntnisse für den Aufbau solcher Hardware (wie es bei Regierungsbehörden der Fall wäre)). – martinstoeckli