it-swarm-eu.dev

Was ist der Vorteil der Verwendung von PBKDF2 gegenüber SHA256 zum Generieren eines AES-Verschlüsselungsschlüssels aus einer Passphrase?

Ich betrachte zwei vergleichbare Software-Teile, die Daten auf der Festplatte mit einer Passphrase verschlüsseln. Einer verwendet PBKDF2, um den Verschlüsselungsschlüssel aus einer Passphrase zu generieren, während der andere zwei Runden SHA256 verwendet. Was ist der Unterschied? Wird einer dem anderen vorgezogen?

82
Andrey Fedorov

Der Unterschied ist, dass:

  • PBKDF2 beabsichtigt ist langsam
  • SHA256 ist eine gute Hash-Funktion. es ist nicht langsam, von Natur aus

Wenn also jemand viele verschiedene mögliche Passphrasen ausprobieren würde, sagen wir das gesamte Wörterbuch, dann jedes Wort mit einer angehängten Ziffer, dann jedes Wort mit einer anderen Groß- und Kleinschreibung, dann zwei Wörterbuchwörter usw., dann wäre dieser Prozess mit PBKDF2 viel langsamer .

Wenn Ihre Passphrase jedoch wirklich sicher ist, sehr lang, ziemlich zufällig und für einen systematischen Aufzählungsprozess unerreichbar ist, macht dies keinen praktischen Unterschied, außer dass ein Angreifer möglicherweise mehr Ressourcen für den Versuch einsetzt, Ihre Passphrase zu brechen (oder weniger, wenn sie beschließen, früher aufzugeben).

93
curiousguy

Kennwort-Hashing-Algorithmen wie PBKDF2, bcrypt und scrypt sind für die Verwendung mit Kennwörtern vorgesehen und absichtlich langsam. Kryptografische Hashing-Algorithmen sind schnell. Schnell ist in den meisten Situationen gut, aber hier nicht. Das Verlangsamen des Algorithmus (normalerweise durch Iteration) erschwert die Arbeit des Angreifers erheblich. Passwort-Hashes fügen außerdem jedem Hash einen Salt-Wert hinzu, um ihn eindeutig zu machen, sodass ein Angreifer nicht mehrere Hashes gleichzeitig angreifen kann.

Angreifer versuchen, Kennwörter wiederherzustellen, indem sie Wörterbuch- und Brute-Force-Angriffe ausführen, bei denen sie Kennwörter erraten, indem sie sie hashen und mit dem gespeicherten Kennwort vergleichen, um festzustellen, ob sie übereinstimmen. Mit regulären kryptografischen Hash-Funktionen (z. B. MD5, SHA256) kann ein Angreifer Milliarden von Passwörtern pro Sekunde erraten. Mit PBKDF2, bcrypt oder scrypt kann der Angreifer nur wenige tausend Vermutungen pro Sekunde anstellen (oder weniger, je nach Konfiguration).

Dies bedeutet, dass jedes Passwort viel stärker ist, wenn PBKDF2, bcrypt oder scrypt anstelle einer regulären Hash-Funktion verwendet werden.

Darüber hinaus verwenden PBKDF2, bcrypt und scrypt große zufällige "Salt" -Werte, um sicherzustellen, dass das Kennwort jedes Benutzers eindeutig gehasht wird. Das Angreifen von 100 Passwort-Hashes dauert 100-mal länger als das Angreifen eines Hashs. Das Angreifen einer Million dauert eine Million Mal länger usw. Mit SHA256 kann der Angreifer versuchen, Tausende oder Millionen von Hashes gleichzeitig mit sehr geringer Verlangsamung zu knacken.

Sie sollten immer einen Passwort-Hash oder eine "Schlüsselableitungsformel" für Passwörter anstelle eines normalen kryptografischen Hash verwenden. Es ist sehr schwierig, Passwörter auszuwählen, die stark genug sind, um einem dedizierten Cracking-Aufwand standzuhalten, wenn sie mit etwas wie SHA oder MD5) gehasht werden. Mit PBKDF2, bcrypt oder scrypt können Passwörter so kurz wie sein 7 oder 8 Zeichen, aber mit MD5 oder SHA müssen sie mindestens 13-14 Zeichen sein.

52

Es gibt oben gute Antworten, aber der unmittelbare Grund ist, dass sha256 nicht gesalzen ist und zwei Runden erbärmlich schwach sind, genauso wie 4-stellige Passwörter rechnerisch schwach sind:

  • Ein modernes GPU-Setup kann problemlos alle ungesalzenen 4-stelligen sha256-Hashes (in Millisekunden) berechnen.
10
Bradley Kreider