it-swarm.com.de

MD5 vs. CRC32: Welches ist besser für den allgemeinen Gebrauch?

Vor kurzem habe ich irgendwo gelesen, dass CRC32 und MD5 zwar ausreichend gleichmäßig und stabil sind, CRC32 jedoch effizienter als MD5 ist. MD5 scheint ein sehr häufig verwendeter Hash-Algorithmus zu sein, aber wenn CRC32 schneller/speichereffizienter ist, warum dann nicht den?

24
bytefire

MD5 ist einEinweg-Hash- Algorithmus.One-Way-HashAlgorithmus wird häufig in der Kryptographie verwendet, da sie (je Design) die Eigenschaft haben, dass es schwierig ist, die Eingabe zu finden, die einen bestimmten Hashwert erzeugt hat. Insbesondere ist es schwierig, zwei verschiedene Eingaben vorzunehmen, die den gleichen Einweg-Hash ergeben. Diese werden häufig verwendet, um zu zeigen, dass eine Datenmenge seit der Erstellung des Hash-Codes nicht absichtlich geändert wurde. Da es sich bei dem MD5 um einenone-way-hash- Algorithmus handelt, liegt der Schwerpunkt auf der Sicherheit über der Geschwindigkeit. Leider gilt MD5 jetzt als unsicher.

CRC32 dient zur Erkennung versehentlicher Datenänderungen und wird häufig in Netzwerken und Speichergeräten verwendet. Der Zweck dieses Algorithmus ist nicht zum Schutz vor absichtlichen Änderungen, sondern zum Erfassen von Unfällen wie Netzwerkfehlern und Plattenschreibfehlern usw. Der Schwerpunkt dieses Algorithmus liegt eher auf der Geschwindigkeit als auf der Sicherheit.

40

Aus Wikipedia-Artikel zu MD5 (Hervorhebung meines):

MD5 ist eine weit verbreitete kryptographische Hashfunktion.

Jetzt CRC32 :

CRC ist ein Fehlererkennungscode

Wie Sie sehen können, ist CRC32 kein Hash-Algorithmus. Das bedeutet, dass Sie es nicht zum Hashing verwenden sollten, weil es nicht dafür gebaut wurde.

Ich denke, es macht keinen Sinn, über die allgemeine Verwendung zu sprechen, da ähnliche Algorithmen für unterschiedliche Zwecke verwendet werden und jeweils unterschiedliche Anforderungen haben. Es gibt keinen einzigen Algorithmus, der für die allgemeine Verwendung am besten geeignet ist. Stattdessen sollten Sie den Algorithmus auswählen, der für Ihre spezifische Verwendung am besten geeignet ist.

17
svick

Ein großer Unterschied zwischen CRC32 und MD5 ist, dass es in der Regel einfach ist, eine CRC32-Prüfsumme auszuwählen und dann mit einer Nachricht auf diese Prüfsumme zu reagieren, selbst wenn der Nachricht Einschränkungen auferlegt werden, wohingegen MD5 speziell dafür ausgelegt ist der Sache schwierig (obwohl es sein Alter zeigt - dies ist jetzt in einigen Situationen möglich).

Wenn Sie sich in einer Situation befinden, in der es möglich ist, dass ein Gegner sich dazu entscheidet, Nachrichten mit angegebenen CRC32-Hashes zu laden, andere Nachrichten zu imitieren oder eine Hashtabelle nur sehr schlecht auszuführen, da alles gleich ist Wert, dann wäre MD5 die bessere Option. (Noch besser, IMHO, wäre HMAC-MD5 mit einem Schlüsselwert, der für das verwendete Modul eindeutig ist und außerhalb davon unbekannt ist.).

4
mcdowella

CRCs dienen zum Schutz vor zufälligen Fehlern, beispielsweise bei der Datenübertragung.

Kryptografische Hashfunktionen schützen vor intelligenten Gegnern, die die Nachricht gefälscht haben, obwohl MD5 in dieser Hinsicht beschädigt wurde.

3
starblue

Das hängt von deinen Zielen ab. Hier einige Beispiele, was mit CRC32 im Vergleich zu MD5 möglich ist:

Doppelte Dateien erkennen

Wenn Sie überprüfen möchten, ob zwei Dateien identisch sind, ist CRC32-Hashing der richtige Weg, da sie schneller als MD5 ist. Aber seien Sie vorsichtig: CRC sagt Ihnen nur zuverlässig, wenn die Binärdateien unterschiedlich sind. es sagt Ihnen nicht zuverlässig, ob sie identisch sind. Wenn Sie für zwei Dateien unterschiedliche Hashwerte erhalten, können diese nicht die gleiche Datei sein, sodass Sie sie sehr schnell als Duplikate ablehnen können.

Unabhängig von Ihren Schlüsseln wird der CRC32-Hashwert aus 2 ^ 32 verschiedenen Werten bestehen. Unter der Annahme von Stichproben-Dateien beträgt die Wahrscheinlichkeit einer Kollision zwischen den Hashwerten zweier Dateien 1/2 ^ 32. Die Wahrscheinlichkeit von Kollisionen zwischen einer der N angegebenen Dateien beträgt (N - 1)/2 ^ 32.

Erkennen bösartiger Software

Wenn Sicherheit ein Problem ist, z. B. das Herunterladen einer Datei und das Prüfen des Hashs der Quelle mit Ihrem, um festzustellen, ob sie gültig ist, ist CRC eine schlechte Option. Dies liegt daran, dass Angreifer Malware erstellen, die denselben CRC-Hash hat. In diesem Fall ist MD5 sicherer - CRC wurde aus Sicherheitsgründen nicht erstellt. Bei zwei verschiedenen Binärdateien ist der MD5-Hash wahrscheinlich größer als bei einem CRC-Hash. 

Kennwörter für die Benutzerauthentifizierung sichern

Die synchrone (One-Way) Verschlüsselung ist normalerweise einfacher, schneller und sicherer als die asynchrone (2-Wege) Verschlüsselung. Daher ist dies eine übliche Methode zum Speichern von Kennwörtern. Grundsätzlich wird das Passwort mit anderen Daten (Salzen) und manchmal mit dem Benutzernamen kombiniert. Anschließend wird der Hash auf alle diese kombinierten Daten angewendet. Zufällige Salze reduzieren die Wahrscheinlichkeit, dass zwei Passwörter identisch sind, erheblich. Standardmäßig hat das gleiche Passwort für die meisten Algorithmen den gleichen Hashwert, sodass Sie Ihre eigene Zufälligkeit hinzufügen müssen. Natürlich muss das Salz von außen gerettet werden.

Was nützt ein Passwort, das Sie nicht sehen können? Sie müssen es nicht sehen, um das Konto eines Benutzers zu überprüfen. Sie nehmen nur die Informationen, die sie Ihnen beim Einloggen geben. Sie verwenden ihren Benutzernamen, um deren Salz zu erhalten. Sie kombinieren diesen Salt mit den Anmeldeinformationen des Benutzers (Kennwort und möglicherweise Benutzername), um einen neuen Hash zu erhalten. Wenn es mit dem in der Datenbank übereinstimmt, ist die Anmeldung erfolgreich. Da Sie diese Kennwörter speichern, müssen sie sehr sicher sein. Initialisierungsvektoren, iteratives Hashing, Zufälligkeitstheorie usw. habe ich nicht erwähnt.

Kryptographische Hashes sind in der Berechnung teurer als ein CRC. Bessere Hashes wie sha256 sind zwar sicherer, aber langsamer. Sha512-Hashing ist übrigens schneller als sha256.

3
Victor Stoddard

Sie sollten MD5 verwenden, das 128 Bit lang ist. _. CRC32 ist nur 32 Bit lang und dient zum Erkennen von Fehlern, die keine Hashwerte enthalten. Falls Sie nur eine 32-Bit-Hash-Funktion benötigen, können Sie 32 Bit auswählen, die zurückgegeben werden von MD5 die LSBs/MSBs/Whatever.

3
0x90

Der Hauptgrund, warum CRC32 (oder CRC8 oder CRC16) für jeden Zweck verwendet wird, ist, dass es kostengünstig implementiert werden kann in Hardware als Mittel zum Erkennen einer "zufälligen" Korruption von Daten. Sogar bei Software-Implementierungen kann es nützlich sein, um zufällige Verfälschungen von Daten durch Hardware-Ursachen (z. B. verrauschte Kommunikationsleitungen oder unzuverlässige Flash-Medien) zu erkennen. Es ist nicht manipulationssicher und eignet sich im Allgemeinen nicht zum Testen, ob zwei beliebige Dateien wahrscheinlich gleich sind: Wenn auf jedes Datenstück in der Datei unmittelbar ein CRC32 dieses Datenstücks folgt (dies ist bei einigen Datenformaten der Fall) Chunk hat den gleichen Effekt auf den CRC der Gesamtdatei wie ein Block aller Null-Byte, unabhängig davon, welche Daten in diesem Chunk gespeichert wurden.

Wenn Sie die Möglichkeit haben, einen CRC32 schnell zu berechnen, kann dies in Verbindung mit anderen Prüfsummen- oder Hashmethoden hilfreich sein, wenn sich unterschiedliche Dateien mit identischen CRCs wahrscheinlich in einem der anderen Hashwerte unterscheiden und umgekehrt, jedoch auf vielen Computern Andere Prüfsummen- oder Hashmethoden sind wahrscheinlich relativ zum Schutzniveau, das sie bieten, wahrscheinlich einfacher zu berechnen.

3
supercat

Ein Mann ist gewöhnlich, ein anderer Mann ist selten. Die Häufigkeit hängt davon ab, in welchem ​​Bereich Sie arbeiten.

Wenn Sie sehr schnelle Übertragungen durchführen oder Hash-Codes für kleine Objekte ausarbeiten, sind CRCs besser, da sie viel schneller sind und die Wahrscheinlichkeit, dass dieselben 16- oder 32-Bit-CRC für falsche Daten erzielt werden, gering ist.

Wenn es sich um Megabytes von Daten handelt, beispielsweise um ein Linux-Iso, könnten Sie ein paar Megabytes verlieren und trotzdem mit demselben CRC enden. Nicht so wahrscheinlich bei MD5. Aus diesem Grund wird MD5 normalerweise für große Transfers verwendet. Es ist langsamer aber zuverlässiger.

Wenn Sie also eine große Übertragung durchführen und am Ende prüfen, ob Sie das richtige Ergebnis haben, verwenden Sie MD5. Wenn Sie in kleinen Abschnitten senden möchten, verwenden Sie CRC.

0
cup