it-swarm.com.de

Hash Code und Checksum - was ist der Unterschied?

Nach meinem Verständnis sind ein Hash-Code und eine Prüfsumme ähnliche Dinge - ein numerischer Wert, der für einen Datenblock berechnet wird und relativ eindeutig ist.

d.h. die Wahrscheinlichkeit, dass zwei Datenblöcke denselben numerischen Hash-/Prüfsummenwert ergeben, ist niedrig genug, dass sie für die Zwecke der Anwendung ignoriert werden können.

Haben wir also zwei Wörter für dieselbe Sache oder gibt es wichtige Unterschiede zwischen Hash-Codes und Prüfsummen?

104
Richard Everett

Ich würde sagen, dass eine Prüfsumme notwendigerweise ein Hashcode ist. Es sind jedoch nicht alle Hashcodes gute Prüfsummen.

Eine Prüfsumme hat einen besonderen Zweck - sie überprüft oder prüft die Integrität von Daten (einige können darüber hinausgehen, indem sie Fehlerkorrektur zulassen). "Gute" Prüfsummen sind einfach zu berechnen und können viele Arten von Datenverfälschungen erkennen (z. B. ein, zwei, drei fehlerhafte Bits).

Ein Hashcode beschreibt einfach eine mathematische Funktion , die Daten auf einen bestimmten Wert abbildet. Bei Verwendung als Indizierungsmittel in Datenstrukturen (z. B. einer Hash-Tabelle) ist eine geringe Kollisionswahrscheinlichkeit wünschenswert.

64
Zach Scrivena

Hinter jedem von ihnen steckt ein anderer Zweck:

  • Hash-Code - Zufälliger Code in der gesamten Domäne (um Kollisionen in Hash-Tabellen und Ähnlichem zu minimieren). Kryptografische Hash-Codes sind auch so konzipiert, dass sie sich rechnerisch nicht umkehren lassen.
  • Prüfsumme - wurde entwickelt, um die häufigsten Fehler in den Daten zu erkennen und um schnell zu berechnen (für effektive Prüfsummen schneller Datenströme).

In der Praxis sind häufig dieselben Funktionen für beide Zwecke gut. Insbesondere ein kryptografisch starker Hash-Code ist eine gute Prüfsumme (es ist fast unmöglich, dass ein zufälliger Fehler eine starke Hash-Funktion zerstört), wenn Sie sich den Rechenaufwand leisten können.

40
Rafał Dowgird

Es gibt tatsächlich einige Unterschiede:

  • Prüfsummen müssen nur unterschiedlich sein, wenn die Eingabe unterschiedlich ist (so oft wie möglich), aber es ist fast genauso wichtig, dass sie schnell berechnet werden können.
  • Hash-Codes (für die Verwendung in Hash-Tabellen) müssen dieselben Anforderungen erfüllen und sollten darüber hinaus gleichmäßig über den Codebereich verteilt sein, insbesondere für ähnliche Eingaben.
  • Kryptografische Hashes haben die viel strengere Anforderung, dass bei einem Hash keine Eingabe erstellt werden kann, die diesen Hash erzeugt. Die Berechnungszeiten kommen an zweiter Stelle, und je nach Anwendung kann es sogar wünschenswert sein, dass der Hash sehr langsam berechnet wird (um Brute-Force-Angriffe zu bekämpfen).
21

Wikipedia drückt es gut aus:

Prüfsummenfunktionen beziehen sich auf Hashfunktionen, Fingerabdrücke, Randomisierungsfunktionen und kryptografische Hashfunktionen. Jedes dieser Konzepte hat jedoch unterschiedliche Anwendungen und daher unterschiedliche Entwurfsziele. Prüfziffern und Paritätsbits sind Sonderfälle von Prüfsummen, die für kleine Datenblöcke geeignet sind (z. B. Sozialversicherungsnummern, Bankkontonummern, Computerwörter, Einzelbytes usw.). Einige fehlerkorrigierende Codes basieren auf speziellen Prüfsummen, die nicht nur häufige Fehler erkennen, sondern in bestimmten Fällen auch die Wiederherstellung der Originaldaten ermöglichen.

8
Jon Skeet

Hashcodes und Prüfsummen werden beide verwendet, um aus einem Datenelement einen kurzen numerischen Wert zu erstellen. Der Unterschied besteht darin, dass sich ein Prüfsummenwert ändern sollte, selbst wenn das Datenelement geringfügig geändert wird. Für einen Hash-Wert ist lediglich erforderlich, dass reale Datenelemente unterschiedliche Hash-Werte aufweisen.

Ein klares Beispiel sind Strings. Eine Prüfsumme für eine Zeichenfolge sollte jedes Bit und jede Reihenfolge enthalten. Ein Hashcode kann andererseits häufig als Prüfsumme eines Präfixes mit begrenzter Länge implementiert werden. Das würde bedeuten, dass "aaaaaaaaaaba" dasselbe wie "aaaaaaaaaaab" hat, aber Hash-Algorithmen können mit solchen Kollisionen umgehen.

8
MSalters

Eine Prüfsumme schützt vor versehentlichen Änderungen.

Ein kryptografischer Hash schützt vor einem sehr motivierten Angreifer.

Wenn Sie Bits auf der Leitung senden, kann es versehentlich vorkommen, dass einige Bits entweder umgedreht, gelöscht oder eingefügt werden. Damit der Empfänger solche Unfälle erkennen (oder manchmal korrigieren) kann, verwendet der Absender eine Prüfsumme.

Wenn Sie jedoch davon ausgehen, dass sich jemand in der Leitung befindet, der die Nachricht aktiv und intelligent ändert, und Sie sich gegen diese Art von Angreifer schützen möchten, verwenden Sie einen kryptografischen Hash (ich ignoriere das kryptografische Signieren des Hashs oder die Verwendung eines sekundären Kanals oder dergleichen seitdem) die Frage scheint sich dem nicht zu entziehen.

4
user3464863

Heutzutage sind sie austauschbar, aber in früheren Tagen war eine Prüfsumme eine sehr einfache Technik, bei der Sie alle Daten addieren (normalerweise in Bytes) und am Ende ein Byte mit diesem Wert inheften. Dann hoffentlich Sie müssen wissen, ob die Originaldaten fehlerhaft waren. Ähnlich wie ein Prüfbit, jedoch mit Bytes.

3
Steven Robbins

Der Unterschied zwischen Hash-Code- und Prüfsummenfunktionen besteht darin, dass sie für verschiedene Zwecke entwickelt wurden.

  • Eine Prüfsumme wird verwendet, um herauszufinden, if was sich in der Eingabe geändert hat.

  • Ein Hash-Code wird verwendet, um herauszufinden, wenn etwas in der Eingabe geändert hat und um so viel "Abstand" zwischen einzelnen Hash-Code-Werten wie möglich zu haben .

    Es kann auch weitere Anforderungen für eine Hash-Funktion geben , die dieser Regel widersprechen, z. B. die Fähigkeit, Bäume/Cluster/Eimer von Hash-Funktionen zu bilden. Code-Werte früh.

    Wenn Sie eine gemeinsame anfängliche Randomisierung hinzufügen, gelangen Sie zum Konzept für moderne Verschlüsselung/Schlüsselaustausch.


Über Wahrscheinlichkeit:

Nehmen wir beispielsweise an, dass sich die Eingabedaten tatsächlich immer ändern (100% der Zeit). Nehmen wir an, Sie haben eine "perfekte" Hash-/Prüfsummenfunktion, die einen 1-Bit-Hash-/Prüfsummenwert generiert. Daher erhalten Sie 50% der Zeit unterschiedliche Hash-/Prüfsummenwerte für zufällige Eingabedaten.

  • Wenn sich genau 1 Bit in Ihren zufälligen Eingabedaten geändert hat, können Sie dies in 100% der Fälle feststellen, unabhängig davon, wie groß die Eingabedaten sind.

  • Wenn sich 2 Bits in Ihren zufälligen Eingabedaten geändert haben, wird Ihre Wahrscheinlichkeit, "eine Änderung" zu erkennen, durch 2 geteilt, da sich beide Änderungen gegenseitig neutralisieren könnten und keine Hash-/Prüfsummenfunktion erkennen würde, dass sich 2 Bits in den Eingabedaten tatsächlich unterscheiden .

    ...

Das heißt, wenn die Anzahl der Bits in Ihren Eingabedaten um ein Vielfaches größer ist als die Anzahl der Bits in Ihrem Hash-/Prüfsummenwert, wird Ihre Wahrscheinlichkeit, tatsächlich für verschiedene Eingabewerte unterschiedliche Hash-/Prüfsummenwerte zu erhalten, verringert und ist keine Konstante.

2
Sascha Wedler

Ich neige dazu, die Word-Prüfsumme zu verwenden, wenn ich mich auf den Code (numerisch oder auf andere Weise) beziehe, der für eine Datei oder ein Datenelement erstellt wurde, das verwendet werden kann, um zu überprüfen dass die Datei oder die Daten nicht beschädigt wurden. Die häufigste Verwendung ist die Überprüfung, ob über das Netzwerk gesendete Dateien nicht (absichtlich oder auf andere Weise) geändert wurden.

1
Ian1971

Obwohl Hashing und Prüfsummen dahingehend ähnlich sind, dass beide einen Wert basierend auf dem Inhalt einer Datei erstellen, ist Hashing nicht dasselbe wie das Erstellen einer Prüfsumme. Eine Prüfsumme soll die Integrität von Daten überprüfen und Fehler bei der Datenübertragung identifizieren, während ein Hash dazu dient, einen eindeutigen digitalen Fingerabdruck der Daten zu erstellen.

Quelle: CompTIA ® Security + - Leitfaden zu Grundlagen der Netzwerksicherheit - Fünfte Ausgabe - Mark Ciampa - Seite 191

1
N Randhawa