Hashcode - SHA256Managed

29/02/2008 - 07:57 von Karsten Sosna | Report spam
Hallo NG,
iregendwie will das nicht in meinen Kopf. Die angegebene Klasse erzeugt
einen 256Bit-breiten Hashcode. Jetzt heißt es, wenn sich die Datenmenge
àndert muss sich auch der Hash àndern. Da der Hash eine feste Lànge hat muss
doch die Datenmenge begrenzt sein und meines Erachtens ebenfalls auf 256Bit,
was enem 32Byte großen Byte-Array entspricht. Wenn ich jetzt also ein
Byte-Array mit der Lànge 33 erstellen würde und dieses so fülle, das ich
alle möglichen Kombinationen erreichen würde, müsste es eigentlich doppelte
Hash geben. Ausprobieren werde ich das kaum können, da ich dann theoretisch
264^2 = ca. 2,9E+79 Hashcodes erzeugen müsste. Dass könnte etwas lànger
dauern. ;=)
Jetzt stelle ich mir das so vor, wie bei der Erstellung einer GUID, das kann
aber nicht funktionieren, da bei der Erstellung einer GUID neben etlichen
Faktoren auch die Zeit eine Rolle spielt und das darf bei einem Hash nicht
der Fall sein und ist es auch nicht. Außerdem dürfen die Systemkomponenten
keine Rolle spielen, da sonst 2 verschiedene System für ein und die selbe
Datenmenge unterschiedliche Hashcodes erzeugen würden.
Letztendlich kommt zu meiner Überlegung hinzu, dass wenn die Datenmenge
steigt auch die Wahrscheinlichkeit steigt, dass doppelte Hashcodes erzeugt
werden. Ich habe mal von ca. 10.000 Dateien mit durchschnittlichen Größe von
5MB, Hashcodes erzeugt und diese in eine Datenbank geschrieben. Leider
wurden dabei keine doppelten Hashcodes erzeugt, außer bei denen wo die
Dateien wirklich gleich waren.
Habe ich hier nun einen wirklichen Gedankenfehler?

Danke für jede Aufklàrung.
Gruß Scotty
 

Lesen sie die antworten

#1 Christoph Schneegans
29/02/2008 - 10:05 | Warnen spam
Karsten Sosna schrieb:

Da der Hash eine feste Lànge hat muss doch die Datenmenge begrenzt sein und
meines Erachtens ebenfalls auf 256Bit, was enem 32Byte großen Byte-Array
entspricht. Wenn ich jetzt also ein Byte-Array mit der Lànge 33 erstellen
würde und dieses so fülle, das ich alle möglichen Kombinationen erreichen
würde, müsste es eigentlich doppelte Hash geben.



Ja, spàtestens nach 2^256 + 1 ≈ 10^77 Hashes für verschiedene Eingaben
erhàltst du die erste Kollision. Im beobachtbaren Universum gibt es
schàtzungsweise 10^80 Atome.

Letztendlich kommt zu meiner Überlegung hinzu, dass wenn die Datenmenge
steigt auch die Wahrscheinlichkeit steigt, dass doppelte Hashcodes erzeugt
werden.



Wenn du alle möglichen 32 Bytes großen Dateien hashst, ist es möglich, daß
dabei keine Kollisionen auftreten. (Ich weiß nicht, ob SHA sich wirklich so
verhàlt.)

Wenn du alle möglichen 33 Bytes großen Dateien hashst, erhàltst du auf jeden
Fall Kollisionen.

Praktisch relevant ist weder das eine noch das andere.

Ich habe mal von ca. 10.000 Dateien mit durchschnittlichen Größe von
5MB,



10^5 ist erheblich weniger als 10^77.

Hashcodes erzeugt und diese in eine Datenbank geschrieben. Leider
wurden dabei keine doppelten Hashcodes erzeugt, außer bei denen wo die
Dateien wirklich gleich waren.



Klar, das war ja auch wirklich nicht zu erwarten gewesen.

<http://schneegans.de/web/xhtml/> · Klare Antworten zu XHTML

Ähnliche fragen