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?
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.
Hinter jedem von ihnen steckt ein anderer Zweck:
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.
Es gibt tatsächlich einige Unterschiede:
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.
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.
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.
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.
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.
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.
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