Mein Verständnis ist, dass ein Hash-Code und eine Prüfsumme ähnliche Dinge sind - ein numerischer Wert, der für einen Datenblock berechnet wird, der relativ ist eindeutig ist.
dh 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 dasselbe oder gibt es wichtige Unterschiede zwischen Hash-Codes und Prüfsummen?
language-agnostic
hash
computer-science
checksum
Richard Ev
quelle
quelle
Antworten:
Ich würde sagen, dass eine Prüfsumme notwendigerweise ein Hashcode ist . Allerdings sind nicht alle Hashcodes gute Prüfsummen.
Eine Prüfsumme hat einen besonderen Zweck - sie überprüft oder überprüft die Integrität von Daten (einige können darüber hinausgehen, indem sie eine 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 einem bestimmten Wert zuordnet . Bei Verwendung als Indizierungsmittel in Datenstrukturen (z. B. einer Hash-Tabelle) ist eine geringe Kollisionswahrscheinlichkeit wünschenswert.
quelle
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 die Rechenkosten leisten können.
quelle
Es gibt tatsächlich einige Unterschiede:
quelle
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 eine kleine Änderung am Datenelement vorgenommen wird. Für einen Hash-Wert besteht die Anforderung lediglich darin, dass reale Datenelemente unterschiedliche Hash-Werte haben müssen.
Ein klares Beispiel sind Zeichenfolgen. Eine Prüfsumme für eine Zeichenfolge sollte jedes einzelne Bit enthalten, und die Reihenfolge ist wichtig. Ein Hashcode hingegen kann häufig als Prüfsumme eines Präfixes mit begrenzter Länge implementiert werden. Das würde bedeuten, dass "aaaaaaaaaaba" dasselbe wie "aaaaaaaaaaab" hasht, aber Hash-Algorithmen können mit solchen Kollisionen umgehen.
quelle
Wikipedia drückt es gut aus:
quelle
Eine Prüfsumme schützt vor versehentlichen Änderungen.
Ein kryptografischer Hash schützt vor einem sehr motivierten Angreifer.
Wenn Sie Bits auf dem Draht 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 jemand die Nachricht auf dem Kabel 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 Hash oder die Verwendung eines sekundären Kanals oder dergleichen seitdem die Frage scheint sich dem nicht zu entziehen).
quelle
Quelle: CompTIA ® Security + Leitfaden zu Grundlagen der Netzwerksicherheit - Fünfte Ausgabe - Mark Ciampa - Seite 191
quelle
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 in ... anheften, dann würden Sie es hoffentlich tun wissen, ob eine der Originaldaten beschädigt wurde. Ähnlich wie ein Prüfbit, jedoch mit Bytes.
quelle
Der Unterschied zwischen Hash-Code- und Prüfsummenfunktionen besteht darin, dass sie für unterschiedliche Zwecke entwickelt wurden.
Eine Prüfsumme wird verwendet, um herauszufinden, ob sich etwas in der Eingabe geändert hat.
Ein Hash-Code wird verwendet, um herauszufinden, ob sich etwas in der Eingabe geändert hat und um so viel "Abstand" wie möglich zwischen einzelnen Hash-Code-Werten zu haben.
Im Gegensatz zu dieser Regel gibt es möglicherweise weitere Anforderungen an eine Hash-Funktion, z. B. die Fähigkeit, frühzeitig Bäume / Cluster / Buckets mit Hash-Code-Werten zu bilden.
Und wenn Sie eine gemeinsame anfängliche Randomisierung hinzufügen, gelangen Sie zum Konzept für moderne Verschlüsselung / Schlüsselaustausch.
Über die 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 in 50% der Fälle 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 zu 100% erkennen, 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 2 Bits in den Eingabedaten tatsächlich unterschiedlich sind .
...
Dies bedeutet: Wenn die Anzahl der Bits in Ihren Eingabedaten um ein Vielfaches größer ist als die Anzahl der Bits in Ihrem Hash- / Prüfsummenwert, verringert sich Ihre Wahrscheinlichkeit, tatsächlich unterschiedliche Hash- / Prüfsummenwerte für unterschiedliche Eingabewerte zu erhalten, und ist nicht a konstant .
quelle
Ich neige dazu, das Wort Prüfsumme zu verwenden, wenn ich mich auf den Code (numerisch oder anderweitig) beziehe, der für eine Datei oder ein Datenelement erstellt wurde, mit dem überprüft werden kann, ob die Datei oder die Daten nicht beschädigt wurden. Die häufigste Verwendung besteht darin, zu überprüfen, ob über das Netzwerk gesendete Dateien (absichtlich oder auf andere Weise) nicht geändert wurden.
quelle
Beim Redis-Cluster-Daten-Sharding wird mit a entschieden,
hash slot
auf welchen Knoten es sich bezieht. Nehmen Sie zum Beispiel die folgende Modulo-Operation:Das
6
kommt zweimal über verschiedene Eingänge. Der Zweck des Hash besteht einfach darin, einen Eingabewert einem Ausgabewert zuzuordnen, und die Eindeutigkeit ist nicht Teil des Geschäfts. In der Welt der Hashes sind also zwei verschiedene Eingaben, die dieselbe Ausgabe erzeugen, in Ordnung.Andererseits muss eine Prüfsumme die Ausgabe unterscheiden, selbst wenn sich ein Bit in der Eingabe ändert, da ihr Zweck nicht darin besteht, Daten zu beschädigen, sondern sie zu erkennen. Daher sind zwei verschiedene Eingaben, die dieselbe Ausgabe erzeugen, in einer Prüfsumme nicht akzeptabel.
quelle
Eine Prüfsumme ist einfach eine Zahl, die durch Oring aus dem Datenfeld generiert wird (durch logische Addition, also Summe). Die Prüfsumme kann eine Beschädigung eines Bits oder einer Anzahl von Bits innerhalb des Datenfelds erkennen, aus dem sie generiert wird, dh sie sucht nach Fehlern, die alles sind, und kann sie nicht korrigieren. Eine Prüfsumme ist ein Hash, da die Größe der Prüfsumme kleiner als die Originaldaten ist. Ja, Sie haben Kollisionen, da die Prüfsumme überhaupt nicht empfindlich auf die Bitposition im Datenfeld reagiert.
Eine zyklische Redundanzprüfung (CRC) ist etwas ganz anderes, komplexer und wird NICHT als Prüfsumme bezeichnet. Es ist die Anwendung einer Polynomreihe, die die Fähigkeit hat, eine beliebige Anzahl von einzelnen beschädigten Bits innerhalb des Datenfeldes zu korrigieren, aus dem sie erzeugt wurde. Die Erstellung eines CRC führt zu einer Zahl, die größer ist als das ursprüngliche Datenfeld (im Gegensatz zur Prüfsumme) - daher der Name einschließlich des Wortes "Redundanz" und der Preis, den Sie für die Fehlerkorrekturfunktion zahlen. Ein CRC ist daher KEIN Hash und darf nicht als Prüfsumme verwechselt oder benannt werden, da die Redundanz notwendigerweise die Größe der Originaldaten erhöht.
quelle