Hinweis: Ich betrachte diese Frage nach dieser Bearbeitung und berücksichtige sie:
Hinweis: Ich meine speziell die Mehrrunden-Passwort-Hashes, die in den verknüpften Dokumenten beschrieben und in Krypto-Hashes mit den Codes $ 5 $ und $ 6 $ gekennzeichnet sind, nicht eine einzige Runde der einfachen SHA256- oder SHA512-Hash-Funktionen.
Wenn Sie sich den langen 22-Schritte-Algorithmus in diesem Link ansehen, den Sie bereitgestellt haben, möchte ich lieber eine Frage umdrehen: Warum sollten Sie diesen Algorithmus lieber anstelle von PBKDF2 mit HMAC-SHA2? Zumindest wie dargestellt:
- Die Definition von PBKDF2 sieht viel einfacher aus. Dies liegt daran, dass es modularer ist - es verschiebt den größten Teil seiner Arbeit auf ein externes gelieferte Pseudozufallsfunktion. Dies wird normalerweise mit HMAC instanziiert, was wiederum den größten Teil seiner Arbeit auf eine externe Hash-Funktion wie SHA-1 oder SHA-2 verschiebt.
- Dies bedeutet, dass die Sicherheit von PBKDF2 sollte einfacher zu analysieren sein.
Im Gegensatz dazu listet der Algorithmus in dem von Ihnen bereitgestellten Dokument eine Menge Schritte auf, deren Motivation schwerer zu verstehen ist. Zum Beispiel:
11. Für jedes Bit der binären Darstellung der Länge der Kennwortzeichenfolge bis einschließlich der höchsten 1-stelligen Zahl, beginnend mit der niedrigsten Bitposition (numerischer Wert 1): a) Fügen Sie für eine 1-stellige Zusammenfassung Digest B zu Digest A b hinzu ) Fügen Sie für eine 0-stellige Kennwortzeichenfolge hinzu. Hinweis: Dieser Schritt unterscheidet sich erheblich vom MD5-Algorithmus. Es fügt mehr Zufälligkeit hinzu.
Es fügt mehr Zufälligkeit hinzu? Wie macht es das? Warum gibt es diesen Schritt überhaupt - fügt SHA-2 nicht genügend Zufälligkeit hinzu? Wenn SHA-2 nicht zufällig genug ist, warum sollte es überhaupt verwendet werden? Und führt dieser Schritt nicht geheime abhängige Verzweigung in den Algorithmus ein und wirft die Frage nach möglichen Timing-Angriffen gegen ihn auf?
Ich sage keineswegs, dass die von Ihnen verknüpften Algorithmen unsicher sind. Es ist nur so:
- Der von ihnen eingeführte Arbeitsfaktor hängt von der gleichen Funktion ab, die PBDKF2 - HMAC-SHA2 ausführen würde (eine große Anzahl von SHA2-Iterationen).
- Sie ähneln weitgehend dem, was Sie hätten Wenn Sie eine PBKDF2-HMAC-SHA2-Implementierung abgewickelt haben, aber mit zusätzlicher Komplexität, deren Zweck ich nicht verstehe;
- Also zumindest wie in diesen Dokumenten dargestellt, fällt es mir schwerer Vertrauen in ihr Design zu gewinnen als ich für PBKDF2.
hr>
BEARBEITEN: Nachdem ich das alles geschrieben hatte, ging ich ein bisschen in diesen Algorithmus, um ihn besser zu verstehen. Zunächst erfahren wir aus den Links "Beschreibung" und "Spezifikation" der Frage, dass der Algorithmus durch relativ geringfügige Änderungen von einem älteren MD5-basierten abgeleitet wurde / p>
Dieser ältere MD5-basierte Algorithmus scheint der zu sein, den Poul-Henning Kamp 1994 für FreeBSD-2.0 geschrieben hat, den er nicht mehr für sicher hält. Im ersten Link (wo er die Geschichte der Funktion erzählt) erwähnt er, dass glibc auch seine Funktion übernommen hat. Er verweist auch auf das Papier von Provos und Mazières aus dem Jahr 1999 über bcrypt und erwähnt, dass es etwas Missbilligung ausdrückt, und komischerweise haben sie denselben Schritt hervorgehoben, der meine Aufmerksamkeit oben erregt hat:
MD5 crypt hascht das Kennwort und das Salt in verschiedenen Kombinationen, um die Auswertungsgeschwindigkeit zu verlangsamen. Einige Schritte im Algorithmus lassen Zweifel daran aufkommen, dass das Schema unter kryptografischen Gesichtspunkten entworfen wurde. Beispielsweise bestimmt die binäre Darstellung der Kennwortlänge zu einem bestimmten Zeitpunkt, welche Daten gehasht werden, für jedes Nullbit das erste Byte des Kennworts und für jedes gesetzte Bit das erste Byte einer vorherigen Hash-Berechnung.
Aber ich denke, dies erklärt die Motivation der neueren Funktionen, nach denen Sie fragen: Sie sind eine sehr minimale Modifikation einer älteren Funktion, die älter ist als die meisten modernen Passwort-Hash-Funktionen, deren Design in Frage gestellt wurde, aber wahrscheinlich nicht grundlegend gebrochen, nur sinnlos komplex.