2010-10-26 9 views
9

Was ist die am besten geeignete Hash-Funktion für die Überprüfung der Dateiintegrität (Prüfsummen), um Korruption zu erkennen?Eine geeignete Hash-Funktion zur Erkennung von Datenkorruption/Datenintegritätsprüfung?

Ich brauche folgendes zu beachten:

Große Auswahl an Dateigröße (1 kb bis 10GB +)
Viele verschiedene Dateitypen
Große Sammlung von Dateien (+/- 100 TB und wachsend)

Erfordern größere Dateien höhere Digest-Größen (SHA-1 vs SHA 512)?

Ich sehe, dass die SHA-Familie als kryptografische Hash-Funktionen bezeichnet wird. Sind sie für die allgemeine Verwendung wie die Erkennung von Dateifehlern ungeeignet? Wird etwas wie MD5 oder Tiger besser sein?

Wenn böswillige Manipulation auch ein Anliegen ist, wird Ihre Antwort w.r.t die am besten geeignete Hash-Funktion ändern?

Externe Bibliotheken sind keine Option, nur was auf Win XP SP3 + verfügbar ist.

Natürlich ist auch die Leistung ein Problem.

(Bitte entschuldigen Sie meine Terminologie, wenn sie falsch ist, mein Wissen zu diesem Thema ist sehr begrenzt).

Antwort

15

Jede kryptografische Hash-Funktion, auch eine unterbrochene, ist in Ordnung, um eine versehentliche Beschädigung zu erkennen. Eine gegebene Hash-Funktion kann nur für Eingaben bis zu einer bestimmten Grenze definiert werden, aber für alle Standard-Hash-Funktionen beträgt diese Grenze mindestens 2 Bits, d.h. etwa 2 Millionen Terabyte. Das ist ziemlich groß.

Dateityp hat keinerlei Auswirkungen. Hash-Funktionen arbeiten über Sequenzen von Bits (oder Bytes) unabhängig davon, was diese Bits darstellen.

Hashfunktionsleistung ist wahrscheinlich kein Problem. Selbst die "langsamen" Hash-Funktionen (zB SHA-256) laufen auf einem typischen PC schneller als die Festplatte: Das Lesen der Datei ist der Flaschenhals, kein Hashing (ein 2,4 GHz PC kann Daten mit SHA-512 mit einer Geschwindigkeit hashen) fast 200 MB/s, mit einem einzigen Kern). Wenn die Leistung der Hash-Funktion ein Problem ist, dann ist entweder Ihre CPU sehr schwach, oder Ihre Festplatten sind schnelle SSD (und wenn Sie 100 TB schnelle SSD haben, bin ich irgendwie eifersüchtig). In diesem Fall sind einige Hash-Funktionen etwas schneller als andere, MD5 ist eine der "schnellen" Funktionen (aber MD4 ist schneller, und es ist einfach genug, dass sein Code in jeder Anwendung ohne viel Aufwand enthalten sein kann).

Wenn böswillige Manipulationen ein Problem darstellen, wird dies zu einem Sicherheitsproblem, und das ist komplexer. Zuerst möchten Sie eine der kryptografisch ungebrochenen Hash-Funktionen verwenden, also SHA-256 oder SHA-512, nicht MD4, MD5 oder SHA-1 (die in MD4, MD5 und SHA-1 gefundenen Schwachstellen treffen möglicherweise nicht auf einen bestimmten zu Situation, aber das ist eine subtile Angelegenheit und es ist besser, sicher zu spielen). Je nachdem, ob der Angreifer Zugriff auf die Hash-Ergebnisse hat, kann Hashing ausreichend sein oder auch nicht. Möglicherweise müssen Sie möglicherweise eine MAC verwenden, die als eine Art Keyed Hash angesehen werden kann. HMAC ist eine Standardmethode zum Erstellen eines MAC aus einer Hash-Funktion. Es gibt andere nicht-Hash-basierte MAC. Darüber hinaus verwendet ein MAC einen geheimen "symmetrischen" Schlüssel, der nicht geeignet ist, wenn Sie möchten, dass einige Personen die Dateiintegrität verifizieren können, ohne stille Änderungen vornehmen zu können. In diesem Fall müssten Sie auf digitale Signaturen zurückgreifen. Um es kurz zu machen, benötigen Sie in einem Sicherheitskontext eine gründliche Sicherheitsanalyse mit einem klar definierten Angriffsmodell.

+0

Ausgezeichnete Antwort! Vielen Dank. – links77