it-swarm-eu.dev

Die sichersten Passwort-Hash-Algorithmen?

Was ist/sind derzeit die kryptografisch sichersten Hashing-Algorithmen? ( verfügbar in PHP )

Geschwindigkeit ist irrelevant, da ich den Hash über eine feste Zeit iteriere (anstatt einer festen Anzahl von Iterationen). Was mich interessiert, ist die mathematische Stärke.

Meine Intuition sagt mir, dass es Whirlpool ist, der größte und langsamste der Gruppe. Das oder SHA-512. Aber wo im Internet kann ich sehen, was die Experten empfehlen?

41
Core Xii

Kryptografen könnten darauf hinweisen, dass es beim Lesen des Kleingedruckten keinen Beweis dafür gibt, dass überhaupt sichere Hash-Funktionen vorhanden sind. Das einzige, was wir jetzt haben, sind Kandidaten, für die noch keine Schwäche gefunden wurde.

Das Beste, auf das Sie hoffen können, ist eine Funktion, die von vielen Kryptographen lange Zeit geprüft wurde. Außerdem muss es eine ausreichend breite Ausgabe haben (256 Bit reichen aus, wenn Sie "128-Bit-Sicherheit" erreichen möchten und darüber hinaus wenig Sinn haben). Ab Sommer 2011 deutet dies auf SHA-256 oder SHA-512 hin, nicht auf Whirlpool.

Es ist eine gute Idee, die Anzahl der Iterationen auf die Zeit zu stützen, die auf einer typischen Maschine benötigt wird - aber auf die Zeit, die wirklich auf Ihre Maschine benötigt keine gute Idee. Andernfalls kann es bei einigen Kennwörtern zu einer geringen Anzahl von Iterationen kommen, da der Computer zu diesem Zeitpunkt viele Anforderungen verarbeitet hat (eine Situation, die ein Angreifer übrigens erzwingen könnte). Die Verwendung vieler Iterationen soll Angreifer vereiteln, indem das Hashing von Passwörtern auf dem Computer des Angreifers verlangsamt wird - dass es auch auf Ihrem System langsam wird, ist ein unglückliches Nebenprodukt. Das wahre Ziel ist jedoch die Maschinenkraft, die der Angreifer aufbringen könnte. Da Sie auf dem Computer des Angreifers keine Benchmarks erstellen können, müssen Sie auf grobe Schätzungen zurückgreifen, daher eine feste Anzahl, die so hoch wie möglich ist, solange die durchschnittliche Belastung Ihres Systems tolerierbar ist (das wichtige Wort hier ist "durchschnittlich") disqualifiziert eine dynamische Kennzahl, wie Sie sie ausführen möchten).

Außerdem muss die Maschine des Angreifers nicht wie Ihre aussehen. es kann z. B. ein GPU oder ein FPGA sein, das unterschiedliches Rechnen bietet Fähigkeiten von dem, was Sie auf einem typischen Server bekommen können. Sie möchten eine Funktion, für die ein Angreifer durch die Verwendung von Nicht-PC-Hardware keine enormen Leistungssteigerungen erzielen kann. Auch hier werden SHA-256 oder SHA-512 gefördert, die für die CPU-Effizienz (mit 32-Bit- oder 64-Bit-Arithmetikoperationen) gedacht sind, nicht Whirlpool, das von Hardwareoptimierungen profitieren kann, die denen ähneln, für die AES entwickelt wurde.

Schließlich sind Iterationen nur ein Teil des Jobs. Sie brauchen auch ein lang genug, einzigartig genug Salz. Iterationen und Salzen können gleichzeitig etwas schwierig sein; Es wird dringend empfohlen, eine Standardkonstruktion wie PBKDF2 zu verwenden (obwohl dies als Schlüsselableitungsfunktion und nicht als Passwort-Hasher gedacht war, erweist sich PBKDF2 auch als einigermaßen gut).

33
Thomas Pornin

Aus dem Kommentar von OP:

"Sicher" wie in, basierend auf einem mathematischen Problem, für das keine schnelle Lösung bekannt ist. "Am sichersten" wie in, basierend auf dem komplexesten dieser Probleme. Ein Hashing-Algorithmus wird als "stark" angesehen, wenn er einen wesentlichen Beitrag zur Kryptologie/Mathematik erfordert.

Es hört sich so an, als hätten Sie Thomas Ptaceks "Genug mit den Regenbogentabellen: Was Sie über sichere Passwortschemata wissen müssen" gelesen, und jetzt haben Sie ' Ich frage mich, welcher moderne kryptografische Hash, der für die Kennwortspeicherung optimiert wurde, als "der sicherste" gilt.

Ich glaube nicht, dass es eine eindeutige Antwort gibt. Soweit ich weiß, wurden einige der aktuellen Favoriten in der Programmier-Community (scrypt & bcrypt) nicht streng als Passwort-Hashing-Funktionen einer Peer-Review unterzogen. Zumindest wurden sie nicht von einer großen Anzahl von Kryptographen einer Peer-Review unterzogen, die mit der Überprüfung der Wettbewerbseinträge für die NIST-Hash-Funktion vergleichbar ist.

Der aktuelle Konsens von Hacker News lautet jedoch, dass die Reihenfolge lautet:

  1. scrypt . Da es sowohl speicherintensiv als auch CPU-intensiv ist, wird angenommen, dass scrypt die höchste Sicherheitsmarge der aktuellen Passwort-Hashes aufweist . Sie können hier mehr über das Design sehen .
  2. bcrypt war der vorherige Champion, wie in Thomas Ptaceks Blogpost oben erwähnt.
  3. PBKDF2 und mehrere Runden von SHA2 (fx Unix Crypt mit SHA256 ) sind Es wird angenommen, dass es das drittbeste ist (welches davon das beste ist, hängt weitgehend von der Anzahl der verwendeten Iterationen ab).

(Beachten Sie, dass "Hacker News" größtenteils eine Programmier-Community ist und nicht, wie der Name für eine Sicherheitsspezialisten-Community bedeuten könnte (obwohl einige von denen auch dort rumhängen).)

Wenn Sie sich auf dieser Site umschauen, finden Sie unter KryptografiePasswörter und Hashing Tags fx, dann werden Sie sehen, dass normalerweise kein einziger 'bester' Passwort-Hash erwähnt wird. Ich denke, das liegt zum Teil daran, dass die echten Kryptographen aufgrund der relativ begrenzten Begutachtung durch Fachkollegen keinen eindeutigen Konsens darüber haben, welcher am stärksten ist.

Hier ist ein ziemlich ausgeglichener und leicht lesbarer Vergleich (der keine Verschlüsselung enthält, vermutlich weil er noch zu neu ist).

Geschwindigkeit ist irrelevant, da ich den Hash über eine feste Zeit iteriere (anstatt über eine feste Anzahl von Iterationen).

Mit einigen dieser Hashes kann man das nicht wirklich machen. Sie geben einen "Arbeitsfaktor" an, wenn Sie die Bibliothek aufrufen, und die Bibliothek kümmert sich um den Rest.

20
Jesper M

CRYPT_BLOWFISH (OpenBSD bcrypt, basierend auf der symmetrischen Blowfish-Chiffre, aber ein tatsächlicher Hashing-Algorithmus, es scheint viel Verwirrung darüber zu geben) und CRYPT_SHA512 sind die besten. Beide bieten die Möglichkeit, die Anzahl der verwendeten "Runden" zu skalieren, sodass Sie einen Kompromiss zwischen Sicherheit und Leistung wählen können.

Beispielsweise beträgt die Standardanzahl der Runden für Blowfish 7 (Wertebereich 4-31). Dieser Wert ist logarithmisch, sodass bei jeder Erhöhung der Algorithmus zehnmal häufiger ausgeführt wird. Ein Wert von 13 dauert auf einem Core2Duo mit 2,4 GHz fast 1 Minute pro Hash

Wenn Sie dies so hoch wie möglich einstellen, wird die höchste Sicherheit erzielt.

hinweis: Vor kurzem wurde in einigen Implementierungen von bcrypt ein Fehler gefunden. Daher möchten Sie möglicherweise stattdessen SHA-512 verwenden.

Hinweis: SHA-512 ist auf 64-Bit-Prozessoren schneller zu berechnen als SHA-256 (insbesondere wenn es mit SSE2_64 optimiert ist. Insbesondere sollten Sie dies berücksichtigen und zusätzliche Runden verwenden, um sicherzustellen, dass Ihre Hashes für ihren Zweck stark genug sind.

Die Open-Source-Anwendung hashkill veröffentlichte einige Leistungsbenchmarks dafür, wie schnell moderne GPUs moderne Hashing-Algorithmen durchbrechen können. Insbesondere kann eine Radeon HD 6990 Folgendes tun: 11001 Megahashes/Sek. Geraden MD5 (CRYPT_MD5 ist gesalzen, und die FreeBSD-Implementierung verwendet 100 Runden). Gerade SHA1 bei 3444 Megahashes/s.

7
Allan Jude

Ich empfehle Ihnen, phpass zu verwenden

Dies ist ein portables Public-Domain-Passwort-Hashing-Framework zur Verwendung in PHP -Anwendungen. Es soll mit PHP 3 und höher) funktionieren und wurde tatsächlich getestet mit mindestens PHP 3.0.18 bis 5.3.0 bisher.

Die bevorzugte (sicherste) Hashing-Methode, die von phpass unterstützt wird, ist die OpenBSD-basierte Blowfish-basierte Verschlüsselung, die auch von unserem gemeinfreien crypt_blowfish-Paket (für C-Anwendungen) unterstützt wird und in PHP als CRYPT_BLOWFISH bekannt ist) , mit einem Fallback auf erweiterte DES-basierte Hashes im BSDI-Stil, bekannt in PHP als CRYPT_EXT_DES, und einem letzten Fallback auf MD5-basierte gesalzene und Kennwörter-Hashes mit variabler Iterationszahl, die in phpass selbst implementiert sind ( auch als tragbare Hashes bezeichnet).

Wie die Website sagt, ist Blowfish-basiertes bcrypt das sicherste Hashing. Ich glaube, das ist wahr, weil es " Moores Gesetzesbeweis " ist, während die meisten anderen es nicht sind.

0
Alfred