2014-04-03 11 views
5

Ist es wahr, dass E-Mails dedupliziert werden können, indem nur einige ihrer Header verwendet werden, da ihre Nachrichten-ID laut RFC eindeutig sein sollte?E-Mail-Deduplizierung

Gibt es eine Möglichkeit, die Wahrscheinlichkeit zu berechnen, dass 1 einzelne E-Mail-Adresse in dieser Deduplizierungsmethode verpasst wird (sha512-Hash dieser 3 Header)?

// $email is a parsed array containing 3 keys (mime headers) -> message_id, subject and date. $hashStr = $email['message_id']; $hashStr .= $email['subject']; $hashStr .= $email['date']; $uniqueEmailId = hash('sha512', $hashStr);

Es ist eine Art Mission entscheidend, dass keine einzige E-Mail übersehen wird, sind die Chancen, dass wir mehrere dedupliziert über haben (> 2) Milliarden Mime-Dateien.

Antwort

4

Der Hash SHA512 erzeugt einen Hash-Wert mit 512 Datenbits. Unter der Annahme einer zufälligen Verteilung von Bits ergibt dies mehr als 1,34e + 154 mögliche Werte. Selbst mit über 2e + 9 Abtastwerten sind die Chancen einer zufälligen Kollision sehr nahe Null.

Allerdings ist Ihre Eingabe für den Hash nicht ganz so zufällig. message_id ist ein globally unique identifier, der "nur" 5,3e + 36 mögliche Werte hat, und die Zufälligkeit hängt von der Implementierung ab. Laut dem Wiki-Link liegen die Chancen einer Kollision bei 4,2e + 18 Samples bei ca. 50%. E-Mail-Adressen und Daten sind wahrscheinlich deutlich höher als das.

Das heißt, ohne tatsächlich die Wahrscheinlichkeit Mathematik, würde ich sagen, dass die Chancen sind vernachlässigbar.

+0

Message-ID ist keine GUID in diesem Sinne. Es ist global einzigartig, aber in einer implementierungsspezifischen Weise aufgebaut. Übliche Technik ist es, ein hex timestamp_seq # auf der linken Seite mit dem Hostnamen auf der rechten Seite des @ -Zeichens zu kombinieren. Siehe RFC 2822 pp22-24 –

2

Wenn die Nachrichten-ID bereits eindeutig ist, hat das Hashing wenig Sinn (und führt daher die zugegebenermaßen vernachlässigbare Wahrscheinlichkeit einer Kollision ein).
Es scheint ein robusterer Ansatz zu sein, die Nachrichten-ID selbst als Basis für einen Vergleich zu verwenden.

+0

Würde nicht diese Kombination von MessageID, Betreff und Datum die Hash-Kollision Chance niedriger? – Floris

+0

@Floris nein, es würde die Wahrscheinlichkeit einer Kollision in erster Linie einführen. Ich spreche nicht über Hashing der msgid, aber wörtlich nehmen, da es bereits eine eindeutige Kennung sein soll – fstd

+0

Ich weiß, aber ich muss (sehr große) Mengen von E-Mail-Daten (über 10k Konten mit je 20k Nachrichten) behandeln), also brauche ich 1 Schlüssel für eine eindeutige Nachricht. Leider hat sich in meinen Tests herausgestellt, dass der Message-ID Header nicht wirklich "einzigartig" ist. – Floris