Re: Hashcode - SHA256Managed
- From: Tobias Müller <tekk1608@xxxxxx>
- Date: Fri, 29 Feb 2008 23:36:26 +0100
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
.
- Next by Date: Re: Probleme bei der Installation von VB2008 & dotnet 3.5
- Next by thread: Re: Probleme bei der Installation von VB2008 & dotnet 3.5
- Index(es):
Relevant Pages
|