Liefern kryptographische Hashes wirklich einzigartige Ergebnisse?

8

Ich habe mich gefragt, ob md5, sha1 und anothers einzigartige Werte zurückgeben.

Zum Beispiel gibt sha1() für test a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 zurück, was 40 Zeichen lang ist. Also muss sha1 für Strings, die größer als 40 Zeichen sind, identisch sein (natürlich ist es verschlüsselt, weil die gegebene Eingabe Leerzeichen und spezielle Zeichen enthalten kann.).

Aus diesem Grund können wir beim Speichern von Benutzerpasswörtern entweder ihr ursprüngliches Passwort eingeben oder ein sehr langes, das niemand kennt.

Stimmt das, oder liefern diese Hash-Algorithmen wirklich einzigartige Ergebnisse? Ich bin mir ziemlich sicher, dass das kaum möglich ist.

    
Mikulas Dite 17.06.2010, 09:07
quelle

5 Antworten

12

(Hinweis: Sie fragen nach Funktionen Hashing , nicht Verschlüsselung ).

Es ist unmöglich, dass sie per Definition einzigartig sind. Sie nehmen eine große Eingabe und reduzieren ihre Größe. Daraus folgt offensichtlich, dass sie nicht alle Informationen darstellen können, die sie komprimiert haben. Also nein, sie liefern keine "wirklich einzigartigen" Ergebnisse.

Was sie jedoch tun liefern "kollisionsresistente" Ergebnisse. I.e. Sie versuchen zu zeigen, dass zwei leicht unterschiedliche Daten einen deutlich anderen Hashwert ergeben.

    
Noon Silk 17.06.2010, 09:09
quelle
9

Hash-Algorithmen (auf die Sie sich beziehen) liefern keine eindeutigen Ergebnisse. Was du bezeichnest, nennt man das Taubenschlag-Prinzip . Die Anzahl der Eingänge übersteigt die Anzahl der Ausgänge, daher müssen mehrere Eingänge demselben Ausgang zugeordnet werden. Dies ist der Grund, dass je länger der Hash-Wert der Ausgabe ist, desto besser, weil weniger Eingaben einer Ausgabe zugeordnet sind.

Verschlüsseln muss eine eindeutige Ergebnisse liefern, weil Sie eine Nachricht verschlüsseln und entschlüsseln können und die gleiche Nachricht erhalten.

    
kemiller2002 17.06.2010 09:12
quelle
4

SHA1 ist kein Verschlüsselungsalgorithmus, sondern eine kryptografische Hash-Funktion .

Sie haben Recht - da es beliebig lange Eingaben auf einen Hash mit fester Größe abbildet, kann es zu Kollisionen kommen. Aber die Idee einer kryptografischen Hash-Funktion besteht darin, es unmöglich zu machen, solche Kollisionen "on demand" zu erzeugen. Deshalb nennen wir sie auch Einweg-Hash-Funktionen .

Zitat (Quelle) :

  

Die ideale kryptographische Hash-Funktion hat vier Haupt- oder wesentliche Eigenschaften:
   * es ist einfach, den Hash-Wert für jede gegebene Nachricht zu berechnen,
   * Es ist nicht möglich, eine Nachricht mit einem gegebenen Hash zu finden    * Es ist nicht möglich, eine Nachricht zu ändern, ohne ihren Hash zu ändern    * Es ist nicht möglich, zwei verschiedene Nachrichten mit demselben Hash zu finden.

    
tanascius 17.06.2010 09:11
quelle
1

Hash-Algorithmen garantieren niemals ein anderes Ergebnis für eine andere Eingabe. Aus diesem Grund wird Hashing immer als einseitige "Verschlüsselung" verwendet.

Aber Sie müssen realistisch sein, ein 160-Bit-Hashalgorithmus kann 2 ^ 160 mögliche Kombinationen haben, was ... sehr viel ist! (1 mit 48 Nullen)

    
Philippe Leybaert 17.06.2010 09:09
quelle
1

Dies sind keine Verschlüsselungsfunktionen, sondern Hashing-Funktionen.

Beim Hashing können zwei verschiedene Zeichenfolgen aus genau den Gründen, die Sie erwähnen, kollidieren (auf denselben Wert abgebildet werden). Aber das ist normalerweise nicht relevant, weil:

  1. Kryptografische Hashes (wie SHA1) versuchen sehr, die Kollisionswahrscheinlichkeit für ähnliche Strings (sehr, sehr) niedrig zu halten (
  2. )
  3. Sie können die ursprüngliche Zeichenfolge nicht aus dem Hash ableiten.

Diese beiden Punkte bedeuten, dass Sie keinen Hashwert verwenden können und einfach eine der Zeichenketten erzeugen können, die darauf abgebildet sind.

    
Vinko Vrsalovic 17.06.2010 09:10
quelle

Tags und Links