2009-08-06 5 views
1

Ich weiß, dass sagen gegeben, eine md5/sha1 von einem Wert, dass die Reduzierung von X-Bits (dh 128) zu sagen Y-Bits (dh 64 Bit) die Möglichkeit von Geburtstagsangriffe seit Informationen verloren hat. Gibt es ein einfach zu verwendendes Werkzeug/Formel/Tabelle, das sagt, wie hoch die Wahrscheinlichkeit einer "richtigen" Schätzung ist, wenn diese Längenreduzierung auftritt (im Vergleich zu ihrer ursprünglichen Schätzwahrscheinlichkeit)?Hash-Länge reduzieren?

Antwort

0

Nun, da jedes zusätzliche Bit im Hash die doppelte Anzahl an möglichen Hashes liefert, jedes Mal, wenn Sie den Hash ein wenig verkürzen, gibt es nur halb so viele mögliche Hashes und die Wahrscheinlichkeit, dass diese Zufallszahl geschätzt wird, verdoppelt sich .

128 bits = 2^128 possibilities 

so

64 bits = 2^64 

so, indem sie es in die Hälfte schneiden, erhalten Sie

2^64/2^128 percent 

weniger Möglichkeiten

+3

Ich glaube nicht, dass md5 oder sha1 garantieren eine gleiche Menge an Entropie (Zufälligkeit) für jede Teilmenge des Hash. Wenn dies der Fall ist, wird die einheitliche Wahrscheinlichkeitsverteilung nicht angewendet. –

+0

Ich würde zustimmen müssen, aber um zu vermeiden, dass Leute diese Art von Schneiden tun, scheint es eine hirntote Tabelle zu geben, die sagt, wie schlimm es wird, wenn man (mit verschiedenen Algorithmen) versucht –

+0

Update: Nach der Überprüfung von MD5 ist es offensichtlich, dass jeder 32-Bit-Abschnitt separat berechnet wird. Wenn Sie wirklich einen 128-Bit-MD5-Hash reduzieren möchten, tun Sie das am besten alle zwei oder vier Bits. Natürlich tun Sie es am besten nicht, wenn Sie Sicherheit brauchen. – erjiang

1

Crypto hart ist. Ich würde empfehlen, das nicht zu versuchen. Es ist wie Kochen Kugelfisch: Am besten zu Experten überlassen.

Verwenden Sie einfach den Hash in voller Länge. Und seit MD5 is broken und SHA-1 is starting to show cracks sollten Sie nicht in neuen Anwendungen verwenden. SHA-2 ist wahrscheinlich die beste Wahl.

+0

Ich stimme zu, dass es schwer ist, aber ohne es "normalen" Menschen leicht zu machen, die Konsequenzen zu verstehen, dann wird es weiterhin auftreten. Ich weiß, dass es Konsequenzen gibt, aber um andere davon zu überzeugen, dass man nicht wirklich die Hälfte der Bits schneiden kann und die Hälfte der "Qualität" des Originals erwartet. –

1

Ich würde definitiv empfehlen, die Bitzahl von Hash zu reduzieren. Hier stehen zu viele Probleme auf dem Spiel. Erstens, wie würdest du entscheiden, welche Bits fallen gelassen werden?

Zweitens wäre es schwer vorherzusagen, wie das Fallenlassen dieser Bits die Verteilung der Ausgaben in der neuen "gekürzten" Hash-Funktion beeinflussen würde. Eine (gut entworfene) Hash-Funktion soll Eingaben gleichmäßig über den gesamten Ausgabebereich verteilen, nicht eine Teilmenge davon.

Indem Sie die Hälfte der Bits fallenlassen, nehmen Sie effektiv eine Teilmenge der ursprünglichen Hash-Funktion, die möglicherweise nicht die wünschenswertesten Eigenschaften einer richtig entworfenen Hash-Funktion hat und zu weiteren Schwächen führen kann.

+0

Aber ohne zu quantifizieren, was der Effekt ist, wird es schwer sein, Leute davon zu überzeugen, dass sie es nicht tun sollten. –