2013-03-31 13 views
6

Die Frage ist der gleiche Titel, wo $ 2x $ in BCrypt verwendet wird?Wo 2x Präfix in BCrypt verwendet werden?

Das folgende Szenario ist richtig?

Wir haben eine Reihe von Passwörtern, die bereits mit $2a$ Präfix hashed, wenn die Server-PHP-Version früher 5.3.7 war. Jetzt haben wir das PHP auf 5.3.7+ aufgerüstet, jetzt müssen wir zuerst die vorherigen Passwörter mit dem $2x$ Algorithmus verifizieren und dann das Passwort mit $2y$ Präfix rehash. Stimmt?

+0

Kann eine gute Antwort finden in diesem ** [Weblog] (http://daveyshafik.com/archives/35354-the-blowfish-debacle.html) **. aber ich habe nicht verstanden, was in diesem Satz sagt: _Now, dieser Code geht davon aus, dass Sie das Problem vor der Aktualisierung des Servers entdeckt haben; Wenn Sie seit dem Upgrade neue Passwörter erstellt haben, sollten Sie den $ 2a $ Hash prüfen, wenn der $ 2x $ Check fehlschlägt, und dann auf $ 2y $ 'updaten._ ** Ist der Mittelwert, manchmal Passwörter hashed mit '$ 2a $' in 'PHP 5.3.7-' kann nicht mit '$ 2x $' in 'PHP 5.3.7 +'? ** – msoa

+0

Eine andere Antwort : [CRYPT_BLOWFISH Sicherheitsfix Details] (http://www.php.net/security/crypt_blowfish.php) ** Ergebnis: Soweit ich verstehe, wenn wir eine Reihe von Passwörtern Hash mit '$ 2a $' on 'haben PHP 5.3.7-'und wollen das PHP auf' 5.3.7 + 'aktualisieren, müssen wir nach dem Upgrade alte Passwörter mit' $ 2x $ 'verifizieren. Also, nur die Verwendung von $ 2x $ ist genau das gleiche. ** Wenn jemand denkt, dass ich einen Fehler bemerkt habe, dann erkenne mich bitte. Danke – msoa

Antwort

23

Hinweis auf wikipedia Herausgeber: Content in dieser Antwort in der Public Domain ist; Ich weiß, weil ich es geschrieben habe. Ich schrieb es zuerst für mich selbst und später auf Stackoverflow. Ich weiß es auch, weil alles auf Stackoverflow Copyleft ist. Und selbst wenn dies nicht der Fall ist, ist es jedem freigestellt, es jederzeit und aus irgendeinem Grund von irgendjemandem zu benutzen. Wie soll ich wissen? Weil ich es geschrieben habe und ich habe es gerade gesagt. Das schließt den BCrypt-Eintrag auf Wikipedia ein. Im Wikipedia-Jargon: Ich spende es.

Also aufhören, Urheberrechtsverletzungen geltend zu machen, wenn Sie nicht wissen, worüber Sie sprechen.

BCrypt Varianten

$ $

BCrypt von den OpenBSD Menschen entworfen wurde. Es wurde entwickelt, um Passwörter für den Speicher in der OpenBSD-Passwortdatei zu hashen. Hash-Passwörter werden mit einem Präfix gespeichert, um den verwendeten Algorithmus zu identifizieren. BCrypt hat das Präfix $2$.

Dies stand im Gegensatz zu den anderen Algorithmus Präfixen:

  • $1$: MD5
  • $5$: SHA-256
  • $6$: SHA-512

2a $ $

In der ursprünglichen BCrypt-Spezifikation wurde nicht definiert, wie mit Nicht-ASCII-Zeichen verfahren wird oder wie mit einem Nullabschlusszeichen umzugehen ist. Die Spezifikation wurde überarbeitet, um festzulegen, dass, wenn Strings Hashing:

  • die Zeichenfolge muss UTF-8 sein
  • das Nullabschluss codiert muss

$ 2x $, $ 2j $enthalten sein (Juni 2011)

Ein Fehler wurde in crypt_blowfish, eine PHP-Implementierung von BCrypt entdeckt. Mit dem 8. Bit wurden Zeichen falsch verarbeitet.

Sie schlugen vor, dass Systemadministratoren ihre vorhandene Kennwortdatenbank aktualisieren und $2a$ durch $2x$ ersetzen, um anzuzeigen, dass diese Hashes schlecht sind (und den alten defekten Algorithmus verwenden müssen).Sie schlugen auch die Idee vor, dass crypt_blowfish $2y$ für Hashes ausgibt, die vom festen Algorithmus erzeugt werden. Niemand sonst, einschließlich des kanonischen OpenBSD, übernahm die Idee von 2x/2y. This version marker was was limited to crypt_blowfish.

Die Versionen $ 2x $ und 2j $ $ sind nicht "besser" oder "stärker" als 2a $ $. Sie sind Reste einer bestimmten fehlerhaften Implementierung von BCrypt.

2b $ $ (Februar 2014)

Ein Fehler in der OpenBSD Implementierung von BCrypt entdeckt wurde. Sie speicherten die Länge ihrer Saiten in einem unsigned char. Wenn ein Passwort länger als 255 Zeichen wäre, würde es überlaufen und bei 255 umbrechen.

BCrypt wurde für OpenBSD erstellt. Wenn sie einen Fehler in ihre Bibliothek haben, entschieden sie sich, die Version zu stoßen. Dies bedeutet, dass alle anderen folgen müssen, wenn Sie zu "ihre" Spezifikation aktuell bleiben wollen.

Die Version 2b $ $ ist nicht "besser" oder "stärker" als 2a $ $. Es ist ein Rest einer bestimmten fehlerhaften Implementierung von BCrypt. Aber da BCrypt kanonisch zu OpenBSD gehört, können sie den Versions-Marker auf das ändern, was sie wollen.

Es gibt keinen Unterschied zwischen 2a, 2x, 2y und 2b. Wenn Sie Ihre Implementierung korrekt geschrieben haben, geben alle dasselbe Ergebnis aus.

Und wenn Sie das Richtige von Anfang an taten (Strings in UTF-8 zu speichern und auch den Nullabschluss Hashing), dann: Es gibt keinen Unterschied zwischen , 2a, 2x, 2j, und 2b. Wenn Sie Ihre Implementierung korrekt geschrieben haben, geben alle dasselbe Ergebnis aus.

Die einzigen Leute, die sich um 2x und 2y kümmern müssen, sind diejenigen, die Sie vielleicht verwendet haben crypt_blowfish. Und die einzigen Leute, die sich um 2b kümmern müssen, sind jene, die vielleicht OpenBSD laufen haben.

Alle anderen korrekten Implementierungen sind identisch und korrekt.

+2

Sehr danke mein Freund. – msoa