Warum sollte ich nicht das 23. Zeichen in einer crypt () - Funktion verwenden?

9

Ich lerne die crypt () -Funktion von PHP kennen und habe damit einige Tests durchgeführt. Laut diesem Beitrag sollte ich ein Salz verwenden, das 22 Zeichen lang ist . Ich kann jedoch eine Zeichenfolge verwenden, die 23 Zeichen lang ist, mit einigen Einschränkungen. Wenn ich eine 22 Zeichen lange Zeichenfolge verwende, bekomme ich immer ein Ergebnis von '$ 2y $ xxStringStringStriStri.HashHashHashHashHashHashHashHas'. Ich weiß, dass die Zeit nur ein Teil des Salzes ist.

Es scheint, dass wenn ich 23 statt 22 Zeichen verwende, ich erfolgreich verschiedene Hashes erzeugen kann, aber es gibt nur 4 verschiedene Ergebnisse für alle 64 Zeichen. Das 23. Zeichen "rundet" auf das nächste 1/4 des 64-Zeichen-Alphabets ab (z. B. ist das 23. Zeichen "W" und wird auf "O" abgerundet oder eine beliebige Zahl wird auf "u" abgerundet)

%Vor%

Alle vier dieser crypt-Funktionen erzeugen dasselbe Salz:

%Vor%

Aber dieser ist anders:

%Vor%

Warum sollte ich nicht das 23. Zeichen verwenden, wenn es erfolgreich verschiedene Ergebnisse generieren kann? Gibt es in PHP ein Glitchy-Verhalten, das vermieden werden sollte, indem man es nicht benutzt?

Zur Klärung, wie ich das 23. Zeichen im Salz zähle:

%Vor%     
Andrew 05.03.2013, 16:39
quelle

2 Antworten

2

Es hat mit Hash-Kollisionen zu tun. Sobald Sie 22 Zeichen überschreiten, sind die generierten Hashes nicht mehr abhängig von NAMESPACE des Algorithmus. Anders gesagt, mehr als 22 Zeichen führen zu keiner erhöhten Sicherheit und können Ihr Sicherheitsniveau sogar verringern.

    
Phillip Berger 05.03.2013 16:43
quelle
0

$ ist nicht Teil des eigentlichen Salzes. Es ist ein Trennzeichen.

Bei der Blowfish-Krypta lautet das Format $ 2 [axy] $ log2Rounds $ [salt] [hash]. Du beschreibst es mit einem. - weil du das letzte Zeichen verpasst hast. Blowfishs Salz ist 128 Bits. Sie könnten nur 126 verwenden, ja, aber Sie sind nur unnötig das Salz zu schwächen.

    
Zer 10.05.2013 15:03
quelle

Tags und Links