it-swarm-eu.dev

Was ist der Unterschied zwischen einer Hash-Funktion und einer kryptografischen Hash-Funktion?

Ich meine, geht es nur darum, "wie schwierig es ist, die Funktion mit der aktuellen Technologie umzukehren"?

Oder gibt es ein mathematisches Konzept oder eine mathematische Eigenschaft, die sie unterscheidet?

Wenn es darum geht, "wie schwierig es ist, die Funktion umzukehren", ist es dann richtig zu sagen, dass mit dem Fortschritt der Technologie einige kryptografische Hash-Funktionen nicht mehr kryptografisch sind, sondern nur noch Hash-Funktionen? Ist das mit MD5 passiert?

56
Mr.Eddart

Jede kryptografische Hash-Funktion ist eine Hash-Funktion. Aber nicht jede Hash-Funktion ist ein kryptografischer Hash.

Eine kryptografische Hash-Funktion soll eine Reihe von Sicherheitseigenschaften gewährleisten. Am wichtigsten ist, dass es schwierig ist, Kollisionen oder Vorbilder zu finden, und dass die Ausgabe zufällig erscheint. (Es gibt noch ein paar weitere Eigenschaften, und "hart" hat in diesem Zusammenhang genau definierte Grenzen, aber das ist hier nicht wichtig.)

Nicht kryptografische Hash-Funktionen versuchen lediglich, Kollisionen für nicht böswillige Eingaben zu vermeiden. Einige zielen darauf ab, versehentliche Änderungen an Daten (CRCs) zu erkennen, andere versuchen, Objekte mit möglichst wenigen Kollisionen in verschiedenen Buckets in einer Hash-Tabelle abzulegen.

Im Austausch gegen schwächere Garantien sind sie normalerweise (viel) schneller.

Ich würde MD5 immer noch als kryptografische Hash-Funktion bezeichnen, da sie Sicherheit bieten soll. Aber es ist kaputt und daher nicht mehr als kryptografischer Hash verwendbar. Wenn Sie jedoch eine nicht kryptografische Hash-Funktion haben, können Sie sie nicht wirklich als "defekt" bezeichnen, da sie nie versucht hat, überhaupt sicher zu sein.

62
CodesInChaos

Es gibt einige Eigenschaften, die kryptografisch sichere Hash-Funktionen dringend erfordern, die für nicht kryptografisch sichere Hash-Funktionen nicht so stark erforderlich sind:

  • preimage-Widerstand (bei einem Hash h muss es schwierig sein, eine Nachricht m zu finden, die beim Hash h ergibt
  • schwache Kollisionsfestigkeit (gegeben eine Nachricht m1 es muss schwierig sein, eine andere Nachricht zu finden m2 damit m1 und m2 den gleichen Hash ergeben)
  • starke Kollisionsbeständigkeit (es sollte schwierig sein, Nachrichten zu finden m1 und m2 die den gleichen Hash ergeben)

In diesen Punkten sehen Sie viel schwierig, was ein qualitatives Maß anstelle eines quantitativen ist. Die beste Antwort hier ist die Machbarkeit: Es gibt eine unscharfe Linie, wenn etwas machbar wird und diese Linien sich im Laufe der Zeit bewegen (da die Rechenfähigkeiten gemäß Moores Gesetz exponentiell zunehmen, können schwierige Probleme jetzt von Ihrem Handy gelöst werden).

Im Allgemeinen ist es eine gute Praxis anzunehmen, dass schwierig bedeutet, dass die Zeit zum Erreichen eines Ziels NP-vollständig ist. Dies bedeutet, dass die zum Brechen des Hashs erforderliche Zeit mit zunehmender Hash-Länge stark zunimmt.

Ein weiterer Punkt ist, dass ein kryptografisch sicherer Hashing-Algorithmus in einigen Anwendungen nützlich sein kann, in anderen jedoch nicht. Dies hängt vom Modell Ihres Angreifers, der Art der Informationen, die Sie schützen möchten, und von Leistungsanforderungen ab (in der Regel gilt: Je besser die kryptografischen Eigenschaften eines Hashs sind, desto schlechter ist das Laufzeitverhalten).

21
jupp0r

Ich würde sagen, dass die beiden wichtigsten Dinge, die hier zu verstehen sind, sind:

  1. Der Begriff "Hash-Funktion" ist vage - genauer gesagt polysemisch: Er hat eine "Familie" von Bedeutungen, die eng verwandt, aber verschieden sind. Wenn jemand eine Funktion als "Hash-Funktion" bezeichnet, sagt Ihnen die Bezeichnung einfach nicht, welche Eigenschaften diese Funktion haben muss. Sie müssen den Kontext untersuchen, in dem der Begriff verwendet wird, und die Anforderungen dieses Kontexts.
  2. Der Begriff "kryptografische Hash-Funktion" ist eine leichte Fehlbezeichnung - er sieht aus wie eine Beschreibung, enthält jedoch eine technische Definition, die der Begriff selbst nicht beschreibt. Einfach ausgedrückt gibt es Funktionen wie Nachrichtenauthentifizierungscodes (MAC), die häufig als Hash-Funktionen bezeichnet werden und irgendeine Form von kryptografischer Sicherheit bieten, aber im herkömmlichen Fall keine "kryptografischen Hash-Funktionen" sind Definition.

Der Begriff "kryptografische Hash-Funktion" wird üblicherweise verwendet, um sich auf das zu beziehen, was besser als kollisionssichere Hash-Funktionen bezeichnet werden könnte, die öffentlich sind Funktionen ("public" = benötigen keinen geheimen Schlüssel), die diese drei Eigenschaften haben müssen:

  • Zweiter Widerstand vor dem Bild: Für einen zufälligen Wert m1, der von einer ehrlichen Partei ausgewählt wurde, ist es für einen Angreifer sehr kostspielig, einen Wert m2 ≠ m1 zu finden, so dass hash(m1) = hash(m2).
  • Vorbildwiderstand: Für einen zufälligen Wert h, der von einer ehrlichen Partei ausgewählt wurde, ist es für einen Angreifer sehr kostspielig, einen Wert m so dass hash(m) = h.
  • Kollisionsfestigkeit: Es ist sehr kostspielig für einen Angreifer, ein Wertepaar m1 ≠ m2 zu finden, so dass hash(m1) = hash(m2).

Es gibt eine vierte Eigenschaft, bei der ältere kryptografische Hash-Funktionen trivial fehlschlagen, die jedoch mit neueren Funktionen wie SHA-3 und Blake2 erreicht werden soll:

  • Zufällige Oracle-Gleichgültigkeit: Diese ist so gut wie unmöglich kurz zu erklären, aber lassen Sie es uns auf den Punkt bringen: Es ist sehr kostspielig für einen Angreifer, keine zu finden -chance Korrelationen zwischen den Ausgängen von Eingängen ihrer Wahl.

Die zufällige Oracle-Eigenschaft (bei korrekter Formulierung) impliziert die drei vorherigen Eigenschaften sowie zusätzliche Eigenschaften wie das Fehlen effizienter Längenerweiterungsangriffe . (Längenerweiterungen sind der offensichtlichste Grund, warum ältere Hash-Funktionen wie SHA-256 und SHA-512 die zufällige Oracle-Eigenschaft nicht erfüllen.)

3
Luis Casillas