Gepostet: |
Haskell Hash-Funktionen | ||||||||||
In dieser Aufgabe sollen Sie Analysefunktionen für Hash-Funktionen implementieren, die wünschenswerte Eigenschaften einer Hash-Funktion überprüfen. Die Schlüssel der Hashfunktion sollen vom Datentyp Integer sein. Als Bild soll eine endliche Integer-Teilmenge dienen. a) Besonders wichtig im Fall von kryptographischen Hashfunktionen ist das Avalanche-Kriterium: Es besagt, dass durch Kippen eines Bits in der Eingabe im Mittel die Hälfte der Ausgabe-Bits verändert wird. Implementieren Sie eine Funktion avalanche, die eine Statistik über die gekippten Ausgabe-Bits ausgibt. b) Interessant ist auch die Verteilung der Kollisionen. Diese sollten möglichst gleichverteilt über der Zielmenge sein. Schreiben Sie eine Funktion collusion, die eine Statistik über die Positionen der Kollisionen ausgibt. c) Überlegen Sie sich eine Hash-Funktion h, die sich möglichst vorteilhaft gemäß der beiden Kriterien verhält. d) Das wichtigste Kriterium für eine kryptographische Hash-Funktion ist, dass sich Kollisionen nur schwer berechnen lassen. Wie ist das bei Ihrer Funktion? Kann mir wer helfen? wie fange ich da am besten an? |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
also als erstes würde ich mir ne hashfunktion schreiben z.b. auch ein sehr einfaches beispiel ...;-)
und hier mal ne ganz einfachvariante von collision die alle mit myhash errechneten werte in eine liste wirft
eine möglichkeit wäre hier einfach einen zähler zu erhöhen wenn das element bereits einmal vorkam z.b. if (myhash x) `elem` list then (count+1) oder einfach die ergebnisliste von collision durchlaufen und alle doppelten zählen für die sache mit den kippen von bits hatte ich dir ja schonmal einige binärfunktionen geschrieben du weißt schon inttobin und bintoint...erinnerst du dich? das könnte dir ja eigentlich schon helfen... und d ist ja nur ne textaufgabe... gruß jacke |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
also ich steh aufm schlauch, ich bekomm nichts hin :( | |||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
habt ihr ein paar tipps bekommen? wenn ja erzähl mal...für diese beiden funktionen(avalance und colliosion) müßte es formeln geben oder? | |||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
keine ahnung, ich hab nichts im script oder so gefunden wir bekommen für haskell allgemein sehr sehr wenige informationen |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
myhash x= x `mod` 10 so also noch ein wenig erklärung dazu ... avalance ruft die funktion diff auf... diff gibt die differenz zwischen zwei Binärzahlen zurück...deshalb die tobinary funktion diff wir mit der dem um eins geänderten bit aufgerufen: also das hier: (toBinary(myhash(toint((((head(toBinary zahl))+1)`mod`2) : (tail(toBinary zahl))))))(toint((((head(toBinary zahl))+1)`mod`2) : (tail(toBinary zahl)))) myhash ist wird hier nochmal aufgerufen weil die ausgabewerte der hashfunktion verglichen werden sollen der zweite wert der der diff-funktion übergeben wurde ist der normale wert den die hashfunktion zurrückgibt...also ohne verschobenes bit avalance 3 [0,0,0,1]<---nur eine 1 also 1 bit besagt das sich nur ein bit geändert hat...das zeigt wie schlecht meine hashfunktion ist... gruß jacke |
|||||||||||
Zum Seitenanfang | |||||||||||