2010-05-04 5 views
8

Nach dem Lesen des Themas "Is MD5 really that bad" habe ich über eine bessere Lösung für die Generierung von Hashes nachgedacht. Gibt es bessere Lösungen wie Adler, CRC32 oder SHA1? Oder sind sie auch gebrochen?Wenn MD5 defekt ist, was ist eine bessere Lösung?

+5

Hashes für welchen Zweck? – Gumbo

+0

@gumbo guter Punkt, denn auch mit einer Sicherheitsanwendung sind Kollisionen nicht immer sinnvoll. Zum Beispiel beeinträchtigen Kollisionen nicht die Integrität eines HMAC. – rook

Antwort

9

CRC32 ist wahrscheinlich das Schlimmste, was Sie möglicherweise für Kennwörter verwenden könnten (neben vielleicht crc16 :). Zyklische Redundanzprüfungen sollen erkennen, ob eine Nachricht durch natürliche Ursachen beschädigt wurde, es ist trivial, Kollisionen zu erzeugen, die nichts anderes als Algebra verwenden. SHA0 und SHA1 sind ebenfalls gebrochen, obwohl im Gegensatz zu md5() niemand eine SHA1-Kollision erzeugt hat, aber es wird angenommen, dass dies mit unserer derzeitigen Technologie rechnerisch durchführbar ist.

Jedes Mitglied der SHA-2-Familie sollte verwendet werden. Sha-256 ist gut, SHA-512 ist wahrscheinlich mehr als du brauchst. NIST ist jetzt den SHA-3 Wettbewerb halten und diese irgendwann im Jahr 2012 fertig gestellt werden (für den Gewinn Knäuel!)

+0

+1 für die Erwähnung SHA-3-Wettbewerb ... Ich habe einige Zweifel über Skein obwohl ..;) [Haftungsausschluss: Ich könnte voreingenommen sein!] – Krystian

+0

@krystian Ihre rechten Knäuel hat einige Beulen getroffen und wurde gepatcht. Ich freue mich darauf zu sehen, wie das ausgeht. – rook

+0

Leistung ist ziemlich schnell auf 64-Bit-Plattformen, aber es ist auf 32-Bit-Systemen, vor allem solchen eingebetteten Systemen, bei denen Leistung am wichtigsten ist (z. B. Router oder manipulationssichere Zahlungsterminals). BMW und SHABAL scheinen viel schneller und freundlicher zu Systemen mit harten Einschränkungen der Code-Größe. –

4

Wenn Sie eine verschlüsselte Hash-Funktion suchen, Adler und CRC32 sind wirklich schlechte Idee. SHA-1 ist auch schon gebrochen, aber in einer viel weniger gefährlichen Weise als MD5. Dies wird sich jedoch in Zukunft wahrscheinlich ändern.

Im Moment scheint die einzige vernünftige Wahl zu sein, SHA-256 zu verwenden und den Digest möglicherweise auf die gewünschte Länge abzuschneiden.

+0

-1 Trunkierung ist eine schlechte Idee. Obwohl sha-384 von sha-512 und sha-224 von sha-256 erzeugt wird. Dies ist eine Verschwendung von Berechnungen, während nur ein paar Bytes gespeichert werden. – rook

+2

@The Rook: Es ist im Allgemeinen wahr, aber ich hatte einige spezifische Fälle im Sinn. Wenn Sie es sich leisten können, den vollständigen Hash zu speichern, ist dies die beste Option, und das sollte getan werden. Aber wenn Sie genau 160 Bits des Digests benötigen (indem Sie SHA-1 in einer nicht-flexiblen Codebasis ersetzen), dann ist es besser, verkürztes SHA-2 zu verwenden als SHA-1 zu verlassen. – Krystian

+0

Ich stimme dieser Aussage zu. Es ist das kleinere Übel. – rook

2

SHA1 hat einige theoretische Angriffe, aber AFAIK gibt es noch nichts Praktisches, das Sie es bis jetzt brechen lassen wird.

SHA2 scheint für jetzt stabil zu sein.

Verwandte Themen