it-swarm.com.de

Welchen Prüfsummenalgorithmus sollte ich verwenden?

Ich baue ein System, das feststellen muss, ob Blobs von Bytes aktualisiert wurden . Anstatt den ganzen Blob zu speichern (sie können bis zu 5 MB sein), denke ich, ich sollte eine Prüfsumme davon berechnen, diese speichern und die gleiche Prüfsumme etwas später berechnen, um zu sehen, ob der Blog aktualisiert wurde .

Das Ziel ist, die folgenden Punkte (in dieser Reihenfolge) zu minimieren:

  • größe der Prüfsumme 
  • zeit zu berechnen 
  • kollisionswahrscheinlichkeit (2 identische Prüfsummen treten auch bei Änderungen des Inhalts auf).

Es ist akzeptabel, dass unser System eine Kollision von nicht mehr als 1/1.000.000 hat. Das Anliegen ist nicht die Sicherheit, sondern lediglich die Erkennung von Updates/Fehlern. Daher sind seltene Kollisionen in Ordnung. (Deshalb habe ich es zuletzt in die Dinge gesteckt, die minimiert werden sollen).

Außerdem können wir die Blobs selbst nicht ändern.

Natürlich fallen mir md5, crc oder sha1 ein, und wenn ich eine schnelle Lösung wollte, würde ich mich dafür entscheiden. Ich suche jedoch mehr als eine schnelle Lösung, was ein Vergleich verschiedener Methoden sowie Vor- und Nachteile sein könnte. 

52

Ich schlage vor, Sie werfen einen Blick auf diese SO Seite , CRC vs MD5/SHA1.
Geschwindigkeit und Kollisionen werden in diesem anderen Thread besprochen.
Und wie immer Wikipedia ist dein Freund.

Wenn ich wählen müsste, gibt es eine wichtige Frage zu beantworten: Wollen Sie, dass es auf jeden Fall keine Kollision gibt - oder zumindest ist die Wahrscheinlichkeit so gering, dass sie der Wahrscheinlichkeit nahe ist, dass der Mond mit der Erde kollidiert innerhalb der nächsten 5 Minuten?

Wenn ja, wählen Sie die Familie SHA aus.
In Ihrem Fall würde ich ändern, wie Aktualisierungsprüfung ausgeführt wird.
Beispielsweise könnte dem Blob eine inkrementelle Nummer zugeordnet sein und anstelle von Hash gesendet werden, die Aktualisierungsanforderung wäre erforderlich, wenn die Nummer auf dem Andere Seite. Die Kollisionswahrscheinlichkeit reicht in diesem Fall von ~ 10 ^ -18 bis ~ 0 (grundsätzlich 0 + Fehlerwahrscheinlichkeit) ...

Bearbeiten folgende Kommentare

Gefunden wurde dieser Algorithmus, Alder-32, der für lange Nachrichten (MB) mit einer CRC von 32 Bits geeignet ist, d. H. Etwa 1/10 ^ 9 (MD5 ist 128 Bits lang).
Es ist schnell zu berechnen.
Adler-32 . Es gibt einige Beispiele (link) am unteren Rand.

25
Ring Ø

Blake2 ist die schnellste Hash-Funktion, die Sie verwenden können und die hauptsächlich verwendet wird:

BLAKE2 ist nicht nur schneller als die anderen guten Hashfunktionen, es ist noch schneller als MD5 oder SHA-1 Quelle

Der Gewinner des SHA-3-Wettbewerbs war der Keccak-Algorithmus, hat aber noch keine populäre Implementierung, die von GNU/Linux-Distributionen nicht standardmäßig übernommen wird. Stattdessen ist Blake2, ein Kandidat für einen SHA-3-Wettbewerb, schneller als Keccak und Teil von GNU coreutils . In Ihrer GNU/Linux-Distribution können Sie b2sum verwenden, um den Blake2-Hash-Algorithmus zu verwenden.

0
noraj