Vous êtes sur la page 1sur 6

Hashfunktion

Eine Hashfunktion (auch Streuwertfunktion) ist eine Abbildung, die eine


große Eingabemenge (die Schlüssel) auf eine kleinere Zielmenge (die
Hashwerte) abbildet. Eine Hashfunktion ist daher im Allgemeinen nicht injektiv.
Die Eingabemenge kann Elemente unterschiedlicher Längen enthalten, die
Elemente der Zielmenge haben dagegen meist eine feste Länge.

Der Name „Hashfunktion“ stammt vom englischen Verb to hash, das sich als
„zerhacken“ übersetzen lässt. Der deutsche Name lautet Streuwertfunktion.
Beide Namen deuten darauf hin, dass diese Funktionen normalerweise darauf
angelegt sind, die Daten zu „verstreuen“ und zu „zerhacken“ (siehe auch
Zerhacker in der Funktechnik). Speziell in der Informatik verwendet man auch Eine Hashfunktion, die Namen auf
Ganzzahlen abbildet. Für die Namen
den Begriff Hash-Algorithmus (englisch hash algorithm), da Hashfunktionen
„John Smith“ und „Sandra Dee“ gibt es
oftmals in Form eines Algorithmus statt einer mathematischen Funktion
eine Kollision.
spezifiziert werden.

Die Hash- oder Streuwerte sind meist skalare Werte aus einer begrenzten
Teilmenge der natürlichen Zahlen. 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, so wie ein Fingerabdruck
einen Menschen nahezu eindeutig identifiziert.

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,
weshalb es Verfahren zur Kollisionserkennung geben muss. Eine gute Hashfunktion zeichnet sich dadurch aus, dass sie für die
Eingaben, für die sie entworfen wurde, möglichst wenige Kollisionen erzeugt.

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

Für bekannte und beschränkte Eingabemengen können auch perfekte (im Sinne von kollisionsfreie) Hashfunktionen gefunden
werden.

Inhaltsverzeichnis
Erklärung
Definition einer Hashfunktion
Kriterien für eine gute Hashfunktion
Anwendungen
Hashfunktionen in Datenbanken
Prüfsummen
Beispiele
Kryptologie
Hash-Algorithmen
Bekannte
Gitterbasierte
Prüfsummen
Kryptologische Hashfunktionen
Nicht-kryptologische Hashfunktionen
Passwort-Hashfunktionen
Literatur
Weblinks
Einzelnachweise

Erklärung
Hashfunktionen werden typischerweise angewendet, um:

einem komplexen Objekt einen Speicherort zuzuweisen


Beispiel: „Max Mustermann“ wird im Ordner „m“ abgelegt – dem ersten Buchstaben des Nachnamens.
eine (kurze) Prüfsumme zu dem Objekt zu berechnen
Beispiel: Prüfsumme einerISBN, Zyklische Redundanzprüfungzur Erkennung von Übertragungsfehlern von Dateien
einen Inhalt nahezu eindeutig (aber immer noch „kurz“) zu identifizieren, ohne etwas über den Inhalt zu verraten
Beispiel: Anwendungen in derKryptographie.
Je nach Anwendung hat man unterschiedliche Anforderungen an die Funktion. Gruppiert man beispielsweise eine Adresskartei nach
dem ersten Buchstaben des Nachnamens, spart man sich offensichtlich bei der Suche viel Zeit – man braucht nur einen von 26 Teilen
zu durchsuchen. Diese „Hashfunktion“ ist für den Menschen sehr praktisch (da sie sehr einfach zu „berechnen“ ist), jedoch würde ein
Computerprogramm andere Verfahren verwenden, um ein Adressbuch zu organisieren. Für das Programm ist es nämlich wichtig,
möglichst wenige Kollisionen zu haben; es gibt aber offenbar viele Namen, die mit demselben Anfangsbuchstaben beginnen, und sie
kommen ungleichmäßig oft vor. Legt man also beispielsweise Personalakten nach diesem Prinzip ab, so hat man oftmals viele Akten
im Ordner mit dem Buchstaben „S“, während der Ordner „Q“ leer bleibt.

Die einstellige Quersumme ist eine einfache Hashfunktion. Sie ordnet einer beliebigen Zahl eine einstellige Zahl zu, so wird
beispielsweise auf abgebildet. Als Prüfsumme ist diese Quersumme aber nicht gut geeignet, da die Vertauschung von
Ziffern – ein typischer Fall beim Abtippen von langen Zahlen – nicht erkannt wird. So hat auch die Zahl dieselbe Quersumme
. Prüfsummen wie bei der ISBN eines Buches oder die CRC-32-Prüfsumme einer Datei (z. B. beim Prüfen einer aus dem
Internet heruntergeladenen Datei auf Übertragungsfehler) eignen sich besser, derartige Fehler zu erkennen.

Bei der Identifikation von Inhalten mit sogenannten kryptologischen Hashfunktionenist es nicht nur wichtig, dass sich der Hashwert
bei jeder kleinen Modifikation scheinbar zufällig (d. h. nicht etwa mit nur wenigen Bits) ändert (hierfür würde eine normale
Prüfsumme reichen) und dass es nicht einfach ist, einen zweiten Inhalt mit demselben Hashwert zu erzeugen (um einen
Komplettaustausch des Inhaltes zu vermeiden). Ebenso wichtig ist es, dass der Inhalt nicht aus dem Hashwert rekonstruiert werden
kann. Hat man zwei Dokumente ausgetauscht und möchte beispielsweise am Telefon die erfolgreiche Übertragung überprüfen, so
reicht es, am Telefon die Korrektheit des Hashwertes zu überprüfen. Wird das Gespräch abgehört, so wird dabei nichts über den
Inhalt der Nachricht verraten, selbst falls Teile des Inhalts bereits bekannt sein sollten.

Definition einer Hashfunktion


Eine Abbildung heißt Hashfunktion, wenn gilt. Insbesondere liefert eine Hashtabelle der Größe . Die
Menge repräsentiert die Daten, die gehasht werden sollen, und wird auch die Menge der Schlüssel genannt; die Menge ist die
Menge der möglichen Hashwerte. Typischerweise wird die Menge der Hashwerte als Anfangsstück der natürlichen Zahlen gewählt:
. Diese Menge heißt dann auchAdressraum.

Typischerweise wird in der Praxis immer nur eine kleine Teilmenge der Schlüssel mit abgebildet. Die Menge
sind dann die tatsächlich genutzten Hashwerte.
Das Verhältnis liefert den Belegungsfaktor.

Der Fall wird als Kollision bezeichnet. Eine injektive Hashfunktion heißt perfekt, u. a. weil sie keine
Kollisionen erzeugt.

Kriterien für eine gute Hashfunktion


Geringe Wahrscheinlichkeit von Kollisionen der Hashwerte für den Eingabewertebereich, also möglichst eine
Gleichverteilung der Hashwerte auf die erwarteten Eingabewerte.
Der Speicherbedarf des Hashwertes soll deutlich kleiner sein als jener des Schlüssels (Eingabewert).
Chaos oder Lawineneffekt – Ähnliche Quellelemente (Eingabewerte) sollen zu völlig verschiedenen Hashwerten
führen. Im Idealfall verändert das Umkippen einesBits in der Eingabe durchschnittlich die Hälfte aller Bits im
resultierenden Hashwert.
Surjektivität – Kein Ergebniswert (Hashwert) soll unmöglich sein, jedes Ergebnis (jeder Hashwert im definierten
Wertebereich) soll tatsächlich vorkommen können.
Effizienz – Die Funktion muss schnell berechenbar sein, ohne großen Speicherverbrauch auskommen und sollte die
Quelldaten (Eingabewerte) möglichst nur einmal zu lesen brauchen.
ordnungserhaltend – Falls die Hashfunktion einen sortierten Zugrif
f in einer Hashtabelle erlauben soll.
Je nach Anwendung spielen diese Kriterien eine unterschiedliche Rolle. So sind Chaos und Ordnungserhaltung offenbar im
Widerspruch zueinander. In der Kryptographie ist letztere tabu, für bestimmte Datenbankanwendungen ist dies dafür genau
erwünscht.

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

1. Datenbanken
2. Prüfsummen
3. Kryptologie

Hashfunktionen in Datenbanken
Datenbankmanagementsysteme verwenden Hashfunktionen, um Daten in großen Datenbeständen mittels Hashtabellen zu suchen. In
diesem Fall spricht man von einemDatenbankindex.

Prüfsummen
→ Hauptartikel: Prüfsumme
Prüfsummen sind ein einfaches Mittel, um die Plausibilität zur Erkennung von Veränderungen an übertragenen Daten zu erhöhen.
Nur die Teilmenge der Datenvarianten, die bei Berechnung der Prüfsumme das gleiche Ergebnis wie das der Original-Daten
erzeugen, kann noch als Verfälschung unerkannt bleiben. Mit mehreren verschiedenen passend erzeugten Prüfsummen kann die
Wahrscheinlichkeit einer Kollision stark reduziert werden.

Ein Fehler ist immer feststellbar, wenn die berechnete Prüfsumme der empfangenen Daten sich von der übertragenen Prüfsumme,
also der der Originaldaten, unterscheidet. Falls ein Fehler festgestellt wird, kann die Verfälschung auch ausschließlich in der
Prüfsumme enthalten sein. Die Eignung verschiedener Hashfunktionen zur Prüfsummenberechnung hängt von deren
Kollisionswahrscheinlichkeit ab.

Wenn die Prüfsumme vor gezielten Manipulationen der Daten schützen soll, wird eine kryptologische Hashfunktion verwendet, da
hier nur mit sehr hohem Rechenaufwand eine Kollision gefunden werden kann.

Beispiele
Hashwerte haben unter anderem bei P2P-Anwendungen aus verschiedenen Gründen eine wichtige Aufgabe. Die Hashwerte werden
hier sowohl zum Suchen und Identifizieren von Dateien als auch zum Erkennen und Prüfen von übertragenen Dateifragmenten
verwendet. So lassen sich große Dateien zuverlässig in kleinen Segmenten austauschen.

Zur Anwendung in P2P-Netzen kommen vor allem gestufte Hashfunktionen, bei denen für kleinere Teile einer Datei der Hashwert
und dann aus diesen Werten ein Gesamtwert berechnet wird. Bei den Netzwerken Gnutella G2, Shareaza und Direct Connect sind
dies zum Beispiel Tiger-Tree-Hash-Funktionen.

Das Auffinden von Dateien anhand des Hashwertes ihres Inhaltes ist zumindest in den USA als Softwarepatent geschützt. Der
Inhaber verfolgt Programme und Firmen, die auf Basis dieses Systems die Suche von Dateien ermöglichen, einschließlich Firmen,
die im Auftrag von RIAA oder MPAA Anbieter von unlizenzierten Inhalten ermitteln wollen.

Bei der Programmierung von Internet-Anwendungen werden Hashfunktionen zum Erzeugen von Session-IDs genutzt, indem unter
Verwendung von wechselnden Zustandswerten (wie Zeit, IP-Adresse) ein Hashwert berechnet wird.

Kryptologie
→ Hauptartikel: Kryptologische Hashfunktion
Kryptologische Hashfunktionen besitzen spezielle Eigenschaften, in der Praxis sind es kollisionsresistente Einwegfunktionen. Sie
werden verwendet, um Nachrichten zu signieren bzw. die Integrität von Daten sicherzustellen. Zum Hashen von Passwörtern, mit
dem Ziel, sie sicher zu speichern oder daraus Schlüssel zu gewinnen, werden spezielle Hashfunktionen verwendet. Diese sind
besonders aufwändig zu berechnen, umBrute-Force-Angriffe zu erschweren.

Hash-Algorithmen

Bekannte
Brent-Hashing
Divisions-Rest-Methode
Doppel-Hashing
Kuckucks-Hashing
Multiplikative Methode
Mittquadratmethode
Zerlegungsmethode
Ziffernanalyse

Gitterbasierte
Ajtai
Micciancio
Peikert-Rosen
Schnelle Fourier-Transformation (FFT Hashfunktion[1])
LASH[2]

Prüfsummen
Fletcher-32
Adler-32
CRC (Zyklische Redundanzprüfung)
Parität
Quersumme
Kryptologische Hashfunktionen
MD2, MD4, MD5
Secure Hash Algorithm(SHA)
RIPEMD-160
Tiger
HAVAL
Whirlpool

Nicht-kryptologische Hashfunktionen

Hashfunktion Geschwindigkeit Entwickler Jahr


xxHash 5,4 GB/s Yann Collet 2012
MurmurHash 3a 2,7 GB/s Austin Appleby 2008
SBox 1,4 GB/s Bret Mulvey 2007?
Lookup3 1,2 GB/s Bob Jenkins 2006
CityHash64 1,05 GB/s Geoff Pike & Jyrki Alakuijala 2011
FNV 0,55 GB/s Fowler, Noll, Vo 1991

SipHash/HighwayHash[3] Jan Wassenberg & Jyrki Alakuijala 2016 / 2012

Passwort-Hashfunktionen
LM-Hash
PBKDF2
Bcrypt
Scrypt

Literatur
Donald E. Knuth: The Art of Computer ProgrammingVolume 3. 2. Auflage. Addison Wesley, 1998, ISBN 0-201-
89685-0, S. 513 ff.
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest & Clifford Stein: Algorithmen. Eine Einführung. 2.
Auflage. Oldenbourg, München/Wien 2007,ISBN 978-3-486-58262-8, S. 221 ff.
CHI, Lianhua; ZHU, Xingquan:Hashing Techniques: A Survey and Taxonomy. In: ACM Computing Surveys (CSUR).
Band 50, Nr. 1, April 2017, 11, doi:10.1145/3047307.

Weblinks
Wiktionary: Hashfunktion – Bedeutungserklärungen, Wortherkunft, Synonyme, Übersetzungen
CRC Press – Handbook of Applied Cryptography(Kapitel 9) (PDF; 471 kB)
Konstruktion von Hashfunktionen(PDF; 841 kB)
Online Generator für Hashberechnungen (md, sha, ripemd, whirlpool, tiger
, snefru, gost, adler, cc, salsa, haval)

Einzelnachweise
1. C. P. Schnorr, Serge Vaudenay: Parallel FFT-hashing. In: Fast Software Encryption, pp 149–156, 1993
2. K. Bentahar, D. Page, J. H. Silverman, M.-J.O. Saarinen, N.P. Smart: LASH. 2nd NIST Cryptographic Hash
Workshop, 2006
3. https://github.com/google/highwayhash
Abgerufen von „https://de.wikipedia.org/w/index.php?title=Hashfunktion&oldid=172264869

Diese Seite wurde zuletzt am 25. Dezember 2017 um 01:30 Uhr bearbeitet.

Der Text ist unter der Lizenz„Creative Commons Attribution/Share Alike“verfügbar; Informationen zu den Urhebern und
zum Lizenzstatus eingebundener Mediendateien (etwa Bilder oder ideos)
V können im Regelfall durch Anklicken dieser
abgerufen werden. Möglicherweise unterliegen die Inhalte jeweils zusätzlichen Bedingungen. Durch die Nutzung dieser
Website erklären Sie sich mit denNutzungsbedingungenund der Datenschutzrichtlinie einverstanden.
Wikipedia® ist eine eingetragene Marke der Wikimedia Foundation Inc.