In der IT sind Datensicherheit und die Geschwindigkeit bei der Datenverarbeitung von zentraler Bedeutung. Hashwerte spielen in diesem Zusammenhang eine wichtige Rolle.
Hashwert beschreibt die Verarbeitung des Inhaltes einer Datei, um diesem einen eindeutigen numerischen Wert zuzuweisen. Anhand des numerischen Wertes können Suchalgorithmen den Inhalt einer Datei identifizieren. Metaphorisch gesprochen sind Hashwerten die "Fingerabdrücke von Dateien". Jeder Wert ist also einmalig und kann deswegen eindeutig einer Datei zugeordnet werden.
Hashing bezeichnet die Umwandlung einer Zeichenfolge in einen normalerweise kürzeren, numerischen Wert oder Schlüssel mit fester Länge. Der numerische Wert ist der Hashwert und eine andere Darstellung der ursprünglichen Zeichenfolge. Hashing wird zum Indizieren und Abrufen von Elementen in einer Datenbank verwendet. Ein Suchalgorithmus kann Elemente in einer Datenbank anhand des kürzeren Hashwertes schneller finden. Hashing wird zudem in vielen Verschlüsselungsalgorithmen verwendet. Ein Passwort wird beispielsweise ebenfalls als Hashwert anstelle des Klarwertes in der Datenbank abgespeichert.
Als ein einfaches Beispiel für die Verwendung von Hashwerten kann eine Gruppe von Städten in einer Datenbank dienen, die wie folgt angeordnet ist:
Aachen, Bonn, Gelsenkirchen - und viele mehr in alphabetischer Reihenfolge
Jeder dieser Namen ist der Schlüssel für die Daten, die zu dieser Stadt in der Datenbank gespeichert sind. Bei einer Suche nach einem bestimmten Eintrag müsste zunächst zeichenweise nach Übereinstimmungen im Namen gesucht werden. So lange, bis eine Übereinstimmung gefunden wird und die anderen Einträge ausgeschlossen werden konnten. Mithilfe eines Hash-Algorithmus wird für jeden Namen ein eindeutiger, mehrstelliger Schlüssel, der Hashwert, generiert. Zum Beispiel:
7864 für Aachen, 9802 für Bonn, 1990 für Gelsenkirchen etc.
Für eine Suche nach einem beliebigen Namen wird zunächst - unter Verwendung der gleichen Hash-Funktion, die zum Speichern des Elements verwendet wurde - der Hashwert berechnet. Anschließend kann mit diesem Wert eine Übereinstimmung gesucht werden. Im Allgemeinen geht es viel schneller, eine Übereinstimmung bei wenigen Ziffern mit jeweils nur zehn Möglichkeiten zu finden als bei einer unvorhersehbaren Wertelänge, bei der jedes Zeichen 26 Möglichkeiten hat.
Verschlüsselungsprogramme nutzen Hashwerte zum Verschlüsseln und Entschlüsseln digitaler Signaturen - zum Beispiel zum Authentifizieren von Absender:innen und Empfänger:innen von Nachrichten. Die Hash-Funktion transformiert zunächst die digitale Signatur. Dann werden sowohl der berechnete Hash-Wert - der auch als Message Digest bezeichnet wird - als auch die Signatur in separaten Übertragungen an den oder die Empfänger:in gesendet.
Unter Verwendung der gleichen Hash-Funktion, die der oder die Absender:in verwendet hat, leitet der oder die Empfänger:in aus der Signatur einen Message Digest ab und vergleicht diesen mit dem Message Digest, den er ebenfalls empfangen hat. Sie sollten beide übereinstimmen. Stimmen die beiden Werte nicht überein, ist dies ein Zeichen für eine Manipulation.
Eine Hash-Funktion muss deterministisch sein. Das bedeutet, dass die Funktion auch bei einer mehrfachen Anwendung für jede Eingabe das gleiche Ergebnis liefern muss. Bei der Berechnung von Hashwerten dürfen keine zufälligen Elemente mit in die Berechnung einfließen, wie dies beispielsweise bei einer Randomisierungsfunktion der Fall ist. Es muss zudem sichergestellt sein, dass eine andere Hashfunktion den Hashwert nicht umkehren und damit entschlüsseln kann.
Die Kryptografie nutzt mehrere Hash-Algorithmen. Dazu gehören die Message-Digest-Hash-Algorithmen MD4, MD5 und MD6, die zum Hashing digitaler Signaturen in einen kürzeren Wert verwendet werden. Der berechnete kürzere Wert wird als "Message Digest" bezeichnet und ist der Namensgeber für diese Hash-Algorithmen. Ein weiterer Algorithmus ist der von der NSA entwickelte Secure-Hash-Algorithmus (SHA). SHA wird heute oft als Standardalgorithmus eingesetzt. SHA liefert einen größeren (60-bit) Hashwert, der einen besseren Schutz vor Manipulationen bietet.
Eine Hashfunktion soll dafür sorgen, dass zwei unterschiedliche Eingaben (Input) auch zu unterschiedlichen Eingabewerten (Output) führen. Doch in der Regel ist die Menge der möglichen Hashwerte geringer als die der möglichen Eingaben. Dieses Missverhältnis kann dazu führen, dass zwei unterschiedliche Eingaben (Input) zum selben Eingabewert (Output) führen. Diese als “Hashkollision” bezeichnete Art von Kollision gilt es zu vermeiden, weil sie zu fehlerhaften Suchergebnissen führen kann. Es gibt mittlerweile spezielle Verfahren zur Kollisionserkennung, die jeweils für bestimmte Eingaben getroffen werden. Das Ziel ist es, die Anzahl der Hashkollisionen zu minimieren.