Re: Hashcode - SHA256Managed

Tech-Archive recommends: Repair Windows Errors & Optimize Windows Performance



Karsten Sosna schrieb:
>>>>> Ich habe mal von ca. 10.000 Dateien mit durchschnittlichen Größe von
>>>>> 5MB,
>>> die Wahrscheinlich ist ca. 2^40.000.000mal so groß das es zu einer
>>> Kollision kommt.
>> ähh das wäre aber SEHR wahrscheinlich...
>
> Hallo Tobias,
> ist es auch.

nein, eben nicht.

> Nehmen wir an der Hash code ist 32Byte breit, also 256Bit(was dem SHA256
> entspricht), dann ware die maximale Anzahl an Kombinationen bei 2^256
> erschöpft.

Jep.

> Nimmst Du jetzt eine Datenmenge mt 256Bit und erzeugst
> dementsprechend einen Hashcode, so ginge das gerade auf. Hättest Du jetzt
> eine Datenmenge von 257Bit muss automatisch zur Kollision kommen.

nein, warum?
Wenn ich von EINE Datei(257Bit oder von mir aus auch 256TB) mit SHA256 einen Hashcode erzeuge, wo habe bitte eine Kollision? Mit was?


> die
> Wahrscheinlichkeit liegt hier also bei 2, du hast ja doppelt so viele
> Möglichkeiten, als wie der Hashcode.

Wahrscheinkeit von 2 gibt es nicht.

> Ist Deine Datenmenge 258Bit breit hast
> Du schon das 4fache an Möglichkeiten. Mit jedem weiteren Bit wird also die
> Wahrscheinlichkeit verdoppelt. Also bei einem Bit mehr sind es 2^1 bei 2Bit
> mehr 2^2 bei 3Bit 2^3 usw. ist die Datenmenge wie in meinem Beispiel
> 5.000.032 Bytes lang isnd das 5.000.000 Bytes mehr als der Hashcode breit
> ist. Das entspricht dann 40.000.000 Bits mehr. Ergo liegt die
> Wahrscheinlichkeit bei 2^40.000.000 das es zu einer Kollision kommt.

Nein eben nicht.


>
>> Was verstehst du unter Datenmenge? Wie groß das gehashte Objekt ist, oder
>> wieviele Objekte du hashen willst?
> Ich bezeichne mal das Objekt als Byte-Array mit 5.000.000 Bytes, das ist
> meine Datenmenge.
>
>> Ein Hash soll doch Kennung mit fester Länge erzeugen, und zwar so das man
>> es nicht auf das Object zurückrechnen kann.
>
> Ist ja auch richtig, aber es soll auch dazu dienen 2 unterschiedlich Objekte
> auseinander zu halten.

Ja und nein.
Man kann damit prüfen ob zwei Objekte gleich sind. Mehr nicht.
Und bei 2^256 ist sehr unwahrscheinlich das zwei unterschiedliche Objekte den gleichen Hash haben. Wie gesagt, ab zwei Objekten ist aber die Wahrscheinlichkeit dafür > 0.

Du willst aber, das die Wahrscheinlichkeit immer 0 ist. Egal von der Objektanzahl. Und dann muss der "Hash", welcher aber dann keiner mehr ist, min. genauso Breit sein wie das breiteste Objekt.



Es gibt zwei bekannte Aufgaben, wo Hashe sehr oft genutzt wird.

1. Passwörter
Da werden Passwörter gehasht gespeichert/übertragen, damit das Passwort nicht in Klartext gespeichert wird.

2. Dateiübertragungen
Wenn du dir ne 5GB große Datei runterlädst, wie prüfst du das es keine Übertragungsfehler gab? Ein neuer Abgleich und wieder min. 5GB Traffig?
Nein du erstellt ein Hash dieser 5GB-Datei und vergelichst dem mit dem Hash die der Webseiten-Betreiber angibt. Ist auch nur ein Bit anders, wird der Hash anders sein. Musst aber nur 256Bit "runterladen" um sicher zusein, das alles OK ist.


>> Mieser BeispielHash für ein beliebig große Password :
>> [...]
>
> Dein Beispiel hingt von Anfang an.

Es vereinfacht nur, aber das Prinzip ist das gleiche.


> Nehmen wir mal an Du hast ein Passwort.
> Jedes Zeichen kann einen ASCII aus den 256 aufnehmen. Damit ware jedes
> Zeichen 1 Byte breit. Ich habe aber noch Niemanden kennengelernt der ein 32
> zeichenlanges Passwort benutzt.

Nein das ist es eben. Ein Hashcode besitzt eine FESTE Breite, während das Objekt beliebig breit sein kann.

Es "falten",kürzt,wandelt, macht-sonst-was mit einen Objekt bis es auf die FESTE Breite kommt, 256Bit im SHA-Fall.

Gruß
Tobias

.



Relevant Pages

  • Re: Hashcode - SHA256Managed
    ... dann ware die maximale Anzahl an Kombinationen bei 2^256 ... dementsprechend einen Hashcode, ... eine Datenmenge von 257Bit muss automatisch zur Kollision kommen. ...
    (microsoft.public.de.german.entwickler.dotnet.vb)
  • Re: Hashcode - SHA256Managed
    ... Daher passt dein GUID-Beispiel auch nicht, weil es kein Hash erzeugen soll, möglichst viele Objekte eindeutig unterscheidbar machen soll. ... Du kannst aber aus der Quersumme nicht schliessen, welches Password das Ursprungliche war. ... Mit der Anzahl der Passwörter steigt die Wahrscheinlichkeit eines Doppelten Hashcode ... Also bei einer Passwordhast du 0-Wahrscheinlichkeit einer Kollision, bei 2^256+1 eine Wahrscheinlichkeit von 1. ...
    (microsoft.public.de.german.entwickler.dotnet.vb)
  • Re: =?UTF-8?B?4oCYcGVyZm9ybWFuY2XigJkgb2YgYmFzaWMgb3BlcmF0aW9ucw==?=
    ... Hash: SHA1 ... Patricia Shanahan schreef: ... implement equals and hashCode. ...
    (comp.lang.java.programmer)
  • Re: Generate hash code
    ... The hashcode is not the same as the key; the hashcode is just used to ... requests both an equality method and a hash method. ... then takes the mod of this with the bucket count to ... checking Equals, or possibly first checking the hash of each item and then ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: retrieve the key from a map
    ... The key here is the word "Hash" in HashMap. ... A good hash algorithm ... Each Object in java has an overrideable hashCode() method which is ... string. ...
    (comp.lang.java.programmer)