Hashes

Aus xinux.net
Zur Navigation springen Zur Suche springen

Grundlagen

Hashfunktion

  • Eine Hashfunktion (auch Streuwertfunktion) ist eine Abbildung, die eine große Eingabemenge (die Schlüssel) auf eine kleinere Zielmenge (die Hashwerte) abbildet.
  • Eine „gute“ Hashfunktion liefert dabei für die (erwarteten) Eingabedaten Werte so, dass zwei unterschiedliche Eingaben auch zu unterschiedlichen Ausgabewerten führen.
  • Ein Hashwert wird deshalb auch als englisch Fingerprint bezeichnet, da er eine nahezu eindeutige Kennzeichnung einer größeren Datenmenge darstellt.

Kollisionen

  • Eine sog. Kollision tritt dann auf, wenn unterschiedlichen Eingabedaten derselbe Hashwert zugeordnet wird.
  • Da die Menge der möglichen Hashwerte meist kleiner ist als die der möglichen Eingaben, sind solche Kollisionen dann prinzipiell unvermeidlich.
  • Eine gute Hashfunktion zeichnet sich dadurch aus, dass sie für die Eingaben, für die sie entworfen wurde, möglichst wenige Kollisionen erzeugt.

Funktion

Auf Rechner1 wird aus den Daten ein Hash-Rechner1 gebildet


Rechner1 schickt Daten und Hash an Rechner2


Rechner2 bidet aus den empfangenen Daten den Hash-Rechner2
Ergebnis

Hash-ergebnis.png

Anwendungen

Hashfunktionen haben verschiedene Anwendungsfelder. Dabei lassen sich drei große Gebiete unterteilen:

  • Datenbanken
    • In der Datenspeicherung kann ein Hashwert verwendet werden, um die Speicherstelle der angefragten Daten zu berechnen (z. B. Hashtabelle).
  • Prüfsummen
    • Bei Prüfsummen verwendet man Hashwerte, um Übertragungsfehler zu erkennen.
  • Kryptologie
    • In der Kryptologie werden spezielle kryptologische Hashfunktionen verwendet, bei denen zusätzlich gefordert wird, dass es praktisch unmöglich ist, Kollisionen absichtlich zu finden.

Kryptologische Hashfunktionen

  • Eine kryptologische Hashfunktion oder kryptographische Hashfunktion ist eine spezielle Form der Hashfunktion, welche kollisionsresistent sein sollte und nach Definition immer eine Einwegfunktion ist.
  • Kryptologische Hashfunktionen werden in schlüssellose und schlüsselabhängige eingeteilt.

Einfaches Beispiel Quersumme

  • Fritz bekommt als Rechnaufgabe auf auszurechnen.
  • Die Quersumme beträgt 16.
  • Fritz rechnet aus 169 aus.
  • Fritz zählt
  • Ergebnis stimmt.

Merkle-Damgård-Verfahren

  • Bei der Merkle-Damgård-Konstruktion wird die eingegebene Nachricht M zuerst in Blöcke fester Länge geteilt
  • Der letzte Block wird mit zusätzlichen Bits aufgefüllt, so dass die Eingabelänge ein ganzzahliges Vielfaches der Blocklänge beträgt.
  • Die Funktion hat als Input einen Nachrichtenblock und den Wert des letzten Hashberechnung(ausser beim ersten Block).
  • Der Output entspricht dem Wert der neuen Hashberechnung.
  • Der Hashwert der gesamten Nachricht ist der Hashwert des letzten Blocks:

IV bezeichnet einen festen Startwert (initial value).


Merkle-Damgard-1.png

Links