2009-07-13 8 views
3

Ich möchte doppelten Inhalt verhindern. Ich möchte keine Kopien von Inhalten behalten, also habe ich beschlossen, nur die MD5-Signaturen zu behalten.Kann ich doppelte Inhalte mit MD5 verhindern?

Ich habe gelesen, dass MD5 Kollisionen passieren, unterschiedliche Inhalte könnten in der gleichen MD5-Signatur geben.

Glauben Sie, dass MD5 genug ist?

Sollte ich md5 und sh1 zusammen verwenden?

+0

Wie viel Inhalt sprechen wir? – ceejayoz

+0

Es sollte nicht wichtig sein, da die Größe der SHA2-Verdaus groß genug ist, um zufällige Kollisionen absurd unwahrscheinlich zu machen. –

+0

Offensichtliche Folgefrage: Geht es um absichtliche Kollisionen oder nur zufällige? –

Antwort

5

Die Menschen waren in der Lage, MD5-Kollisionen unter konstruierten Umständen absichtlich herzustellen, aber um doppelte Inhalte zu verhindern (in Abwesenheit von böswilligen Benutzern), ist es mehr als ausreichend.

Nachdem Sie gesagt haben, wenn Sie SHA-1 (oder SHA-2) verwenden können, sollten Sie - Sie werden Bruchteil, aber messbar sicherer vor Kollisionen sein.

+0

Selbst in Gegenwart von Malusern sollte das in Ordnung sein, nicht wahr? Legitmate Inhalt wird zuerst gepostet -> maluser erstellt vorsätzliche Kollision -> maluser wird die Möglichkeit verweigert Inhalte zu posten –

+0

(Die Kommentarfolge auf Samoz's Antwort hier: http://stackoverflow.com/questions/1121701/cani-i-preventing-duplicate- content-using-md5 # 1121713 Adressen Spencers Kommentar.) – RichieHindle

+0

MD5 ist in Ordnung diese Art von Situation für die niedrigen CPU-Kosten. Wenn Sie sich wegen Kollisionen immer noch Sorgen um Fehlalarme machen, führen Sie zunächst MD5 aus, und dann, wenn Sie einen Treffer erhalten, verwenden Sie SHA-2, um die tatsächliche und keine Kollision zu überprüfen (falsch positiv). Das ist, was wir getan haben, erhalten die niedrigen CPU-Kosten von MD5 99,999999999999% der Zeit und die hohe Genauigkeit von SHA2 nur wenn benötigt. – srt8driver

3

MD5 sollte in Ordnung sein, Kollisionen sind sehr selten, aber wenn Sie wirklich besorgt sind, können Sie auch sha-1 verwenden.

Obwohl ich denke, die Signaturen sind wirklich nicht so groß, also, wenn Sie die freien Verarbeitungszyklen und den Speicherplatz haben, können Sie beides tun. Aber wenn Platz oder Geschwindigkeit begrenzt ist, würde ich nur mit einem gehen.

+0

MD5 ist nicht gut, weil es jetzt leicht ist, absichtlich zu kollidieren. –

+0

Also? Legitimate Inhalt wird zuerst gepostet -> maluser erzeugt vorsätzliche Kollision -> maluser hat keine Möglichkeit Inhalte zu posten. –

+0

Versuchen Sie es erneut mit legitimen Inhalten, die als zweites gepostet werden. –

0

MD5 ist defekt und SHA1 ist nah dran. Verwenden Sie SHA2.

bearbeiten

Basierend auf einem Update aus dem OP, scheint es nicht, dass absichtlich Kollisionen hier ein ernstes Problem sind. Für unbeabsichtigte, wäre jeder vernünftige Hash mit mindestens 64-Bit-Ausgabe in Ordnung.

Ich würde immer noch MD5 und sogar SHA1 im Allgemeinen vermeiden, aber es gibt keinen Grund, dogmatisch darüber zu sein. Wenn das Werkzeug hier passt, dann benutzen Sie es auf jeden Fall.

+1

Könnten Sie auf einige Beweise verweisen, dass SHA-1 wie MD5 gebrochen ist? –

+2

Ich denke, dass in diesem Fall SHA1 Overkill ist. Er versucht nicht, etwas zu sichern (wie Passwörter), sondern verhindert Duplikate. MD5 ist für diesen Zweck in Ordnung. –

+0

Es ist nah dran, aber noch nicht gebrochen. Siehe http://en.wikipedia.org/wiki/SHA_hash_functions#SHA-1 –

0

Ein Zeitstempel + MD5 zusammen sind sicher genug.

+3

Es hängt wirklich vom Inhalt ab; z.B. Sie möchten keinen Zeitstempel für ein Bild verwenden, da zwei Bilder ansonsten Byte für Byte Duplikate sein können, jedoch unterschiedliche Zeitstempel für die Erstellung/Änderung haben. – pdwetz

1

md5 sollte ausreichen. Ja, es kann zu Kollisionen kommen, aber die Chancen dafür sind so unglaublich gering, dass ich mir keine Sorgen machen müsste, es sei denn, du würdest buchstäblich Milliarden von Inhalten aufspüren.

1

Wenn Sie wirklich Angst vor versehentlichen Kollisionen haben, tun Sie einfach beide MD5 und SHA1 Hashes und vergleichen Sie sie. Wenn beide übereinstimmen, ist es der gleiche Inhalt. Wenn sich eines unterscheidet, ist es ein anderer Inhalt.

2

Warum vergleichen Sie nicht einfach den Inhalt Byte für Byte, wenn es eine Hash-Kollision gibt? Hash-Kollisionen sind sehr selten, und Sie werden nur sehr selten ein Byte für die Byte-Überprüfung benötigen. Auf diese Weise werden Duplikate nur dann erkannt, wenn die Elemente tatsächlich dupliziert werden.

1

Die Kombination von Algorithmen dient nur der Verschleierung, erhöht jedoch nicht die Sicherheit in einem Hashalgorithmus.

MD5 ist zu kaputt, um irgendwie zu verwenden, IMHO. Das Schmieden von MD5-Hashes wurde von Forschern bewiesen, die demonstrierten, dass sie Inhalte fälschen konnten, die eine MD5-Kollision erzeugten, und damit die Tür zu einem gefälschten CSR öffneten, um ein Zertifikat von RapidSSL für einen Domainnamen zu kaufen, den sie nicht besitzen. Security Now! episode 179 explains the process.

Für mich sind SHA-basierte Hashes stärker und die meisten Entwicklungsplattformen unterstützen es, so dass die Auswahl einfach ist. Der verbleibende entscheidende Faktor ist dann die Blockgröße.

+1

Ich würde nur hinzufügen, dass SHA-1 Anzeichen von Schwäche gezeigt hat, so dass SHA-2 im Allgemeinen empfohlen wird. –