Was ist Hashing? So funktioniert das Hashverfahren

Bei Hashing handelt es sich um eine kryptografische Methode, die Datensätze und Zeichen beliebiger Länge in kompakte, feste Hashwerte verwandelt. Auf diese Weise bietet Hashing mehr Sicherheit als Verschlüsselung, denn Hashwerte lassen sich ohne Schüssel nicht in Ursprungswerte zurückverwandeln. Besondere Bedeutung hat Hashing für die Verwaltung und Sicherheit von Datenbanken, Nutzerdaten, Passwortverwaltung und Zugriffsauthentifizierung.

Was ist Hashing?

Hashing ist ein wichtiges kryptografisches Instrument, um Daten in sogenannte Hashwerte zu verwandeln. Hierzu kommt eine spezielle Hashfunktion, meist in Form eines Algorithmus, zum Einsatz. Die zentrale Aufgabe des Hashings lässt sich anhand der deutschen Übersetzung „zerhacken“ erahnen. Denn nichts anderes geschieht beim Hashing: Datensätze wie Passwörter, Firmen- und Nutzerdaten oder andere Datenformen werden zerlegt und in eine neue, kurze Form – den Hashwert – verwandelt. Im jeweiligen Hashing-Verfahren weisen Hashwerte immer die gleiche Länge auf und repräsentieren originale Datensätze. Als Hashtabelle lassen sich Hashwerte in Datenbanken in kompakter Form sicher und ressourcenschonend speichern.

Der Vorteil am Hashing: Hashwerte lassen sich ohne Schlüssel nicht in die Originalform zurückverwandeln. Selbst wenn sie in die falschen Hände fallen, können Cyberkriminelle nichts mit Hashwerten anfangen. Oft kommt es zur Verwechslung zwischen Hashing und Verschlüsselung. Da Hashwerte jedoch nicht verschlüsselt, sondern in eine vollständig neue Zeichenfolge verwandelt werden, lassen sie sich auch nicht entschlüsseln. Für eine Zuordnung bräuchte es vielmehr die entsprechenden Schlüssel, den verwendeten Algorithmus und die Originaldaten, die mit den Hashwerten assoziiert sind.

Wie funktioniert Hashing?

Der Prozess des Hashings setzt sich aus drei Bausteinen zusammen:

  • Hashfunktion: Bei der Hashfunktion handelt es sich in der Regel um einen kryptografischen Algorithmus, der Daten verschiedener Länge vollständig zerlegt, auflöst und in Zeichenfolgen immer gleicher Länge verwandelt. Diese Hashwerte sind deutlich kürzer und kompakter als die Originalwerte.
  • Hashwert: Hashwerte sind das Ergebnis der Hashfunktion. Im Rahmen der angewandten Hashmethode weisen sie anders als die Originalwerte immer eine feste Länge aus hexadezimalen Zeichen auf. Die feste Länge der Hashwerte hängt vom jeweiligen Verfahren ab.
  • Hashtabellen: Hashwerte lassen sich in Datenbanken als Hashtabellen speichern. Diese erfordern deutlich weniger Datenraum als das Speichern von originalen Datensätzen. Hierzu erhalten Datensätze per Hashing spezifische Index-Werte, die anzeigen, wo sich der Datensatz befindet. Dadurch verkürzt sich die Verarbeitungszeit und Rechenleistung bei der Suche nach Informationen deutlich.

Die Funktionsweise des Hashings basiert auf fünf charakteristischen Eigenschaften, die Sicherheit und Zuverlässigkeit garantieren:

  • Determinismus: Die Hashfunktion muss bei vielen Eingaben unterschiedlich langer Zeichenfolgen immer einen Hashwert fester, kurzer Länge erzeugen.
  • Nicht rücklesbar: Hashing verwandelt Originalwerte in Hashwerte, die sich nicht „rücklesen“ lassen. Es darf keine Möglichkeit geben, den Hashwert im klassischen Sinne zu entschlüsseln und den Ursprungstext oder die originale Zeichenfolge daraus zu erzeugen.
  • Kollisionssicherheit: Verschiedenen Eingaben darf nicht derselbe Hashwert zugewiesen sein. Erhalten zwei Originalwerte denselben Hashwert, liegt eine Kollision vor. Unverwechselbare, einzigartige Hashwerte verringern die Angriffspunkte und erhöhen die Sicherheit. Je nach Anwendungsfall kann eine Kollision jedoch auch gewünscht sein.
  • Kontinuität bzw. Nichtkontinuität: Grundsätzlich bieten Hashwerte eine höhere Sicherheit, wenn sie nicht kontinuierlich sind – wenn also verschiedene originale Datensätze möglichst unterschiedliche Hashwerte erhalten. Kontinuierliche Hashwerte sind wiederum erwünscht, wenn Hashing zur Verwaltung ähnlicher Datensätze und Eingaben dient.
  • Geschwindigkeit: Hashing ermöglicht nicht nur mehr Sicherheit, sondern auch einen schnelleren Zugriff auf Datenbanken.

Anwendungsbereiche von Hashing

Besonders deutlich werden Nutzen und Funktionsweise des Hashings anhand verschiedener Anwendungsfälle und Einsatzbereiche. Typische Anwendungsbereiche sind:

  • Erzeugung von Hashtabellen
  • „Verschlüsselung“ wichtiger Daten
  • Suche nach Duplikaten
  • Prüfsummen und digitale Signaturen
  • Suche nach ähnlichen Daten
  • Authentifizierungssysteme
  • Caching

Verwaltung von Datenbanken

Hashing bietet den Vorteil, dass sich große Datenmengen kompakter und effizienter in Form von Hashtabellen speichern lassen. Hierzu werden Zeichenfolgen als Hashwerte unter einer Adressposition in der Datenbank als Hashtabelle zusammengefasst. Das spart Speicher, erhöht die Sicherheit von Datenbanken und beschleunigt die Suche nach bestimmten Einträgen in der Hashtabelle. Hashwerte und Hashtabellen optimieren die Organisation und Verwaltung von Index- und Dateninfrastrukturen.

Zur Veranschaulichung: Kundendatenbanken umfassen in der Regel wichtige Informationen wie Namen, Kontaktdaten oder Adressen der Kundinnen und Kunden. Soll eine Datenbank nach spezifischen Informationen durchsucht werden, würde eine reguläre Suche lange dauern. Denn die gesamte Datenbank müsste nach den gesuchten Werten gescannt werden. Durch Hashing lassen sich jedoch Datenblöcke mit einer bestimmten Adressposition in der Datenbank bilden. So springt der Computer bei der Suche sofort an die Position, unter der ein zugehöriger Hashwert in einer Hashtabelle adressierbar ist.

Digitale Signaturen und Prüfsummen

Hashing spielt auch als Authentifizierungsmethode eine wichtige Rolle. Beispielsweise dient es zum Erzeugen digitaler Signaturen, sogenannter digitaler Fingerabdrücke. Hierdurch lässt sich die Integrität bei der Kommunikation zwischen Sender und Empfänger bestätigen. Auch beim Anlegen eines neuen Benutzerkontos lassen sich auf diese Weise Passwörter mit einem Hashwert verknüpfen. Beim Anlegen neuer Benutzerkonten erzeugt eine Hashfunktion einen Hashwert für das gewählte Passwort. Bei jeder weiteren Anmeldung wird das eingegebene Passwort per Hashing mit dem hinterlegten Hashwert abgeglichen. Auch bei der Passwortwiederherstellung kommt es zur Erzeugung eines neuen Hashwerts für das neue Passwort.

Zur Veranschaulichung: Durch digitale Signaturen lässt sich überprüfen, ob Nachrichten, Downloads oder auch Websites sicher sind. Hierzu erzeugen Absender Hashwerte aus Nachrichten oder liefern einen Hashwert beim Download eines Programms. Empfänger wiederum erzeugen mit derselben Hashfunktion ebenfalls einen Hashwert. Dieser wird mit dem mitgelieferten, meist verschlüsselten Hashwert abgeglichen. Bestes Beispiel hierfür ist die SSL/TLS-Verschlüsselung im Web. Hierbei sendet der Webserver ein sogenanntes Serverzertifikat an den Browser. Hashing erzeugt daraus einen Sitzungsschlüssel, den der Server erhält, entschlüsselt und bestätigt. Nach der Authentifizierung erfolgt der HTTPS-Datenverkehr. Auch SFTP funktioniert auf ähnliche Weise.

Passwörter und andere sensible Daten

Für das Speichern sensibler Daten, etwa von Passwörtern oder Anmelde- und Nutzerdaten, bietet Hashing deutlich höhere Sicherheit. Denn diese werden nicht in Originalform oder „bloß“ verschlüsselt in der Datenbank hinterlegt. Stattdessen werden Datensätze in Hashwerte zerlegt, die selbst bei Datendiebstahl ohne entsprechende Mittel oder Schlüssel nichts bringen. Bei der Passworteingabe wird nämlich der berechnete Hashwert für das Passwort mit dem gespeicherten Hashwert verglichen. Auch beim Caching kommt Hashing bisweilen zum Einsatz, um temporär gespeicherte Daten wie besuchte Websites oder Anmelde- und Zahldaten für Unbefugte unlesbar zu machen.

Zur Veranschaulichung: Auch das Speichern vielfältiger Inhalte wie Texte oder Audio- und Videodateien lässt sich per Hashing sicherer gestalten. So werden die binären Strukturen von Dateien in kompakte Hashwerte übertragen, über die sich der zugehörige Datenblock referenzieren lässt. Da Hashwerte mit der Datenbankposition verknüpft sind, lassen sich gesuchte Daten nicht nur schneller finden; sie sind auch für Angreifende ohne entsprechenden Schlüssel nicht lesbar und nicht in die Originalform übertragbar.

Welche Vorteile bietet Hashing?

Die Vorteile von Hashing auf einen Blick:

  • Sensible Daten lassen sich sicher und kompakt speichern und verwalten.
  • In Hashwerte übertragene Datensätze lassen sich nicht ohne weiteres „entschlüsseln“ bzw. in ihre Originalform rückübertragen.
  • Der Zugriff auf Datenbanken erfolgt schneller, da Hashwerte mit Positionen in der Datenbank assoziiert sind.
  • Gestohlene Hashwerte sind für Angreifende ohne entsprechende Technologien oder Informationen zur Hashfunktion nicht nützlich.
  • Der sichere Austausch von Daten, Nachrichten oder Software lässt sich durch Hashing zuverlässig authentifizieren oder signieren.

Hashing und Blockchain

Hashing und Hashfunktionen sind ein zentraler Bestandteil der Blockchain. Zur Authentifizierung von Transaktionen mit Kryptowährungen wie Bitcoin werden beim Mining Hashes erzeugt. Bitcoin arbeitet beispielsweise mit dem SHA-256-Hashing-Algorithmus, der beliebig lange Zeichenfolgen in eine feste Zeichenfolge, also Hashes, von 64 Zeichen umwandelt. Diese legitimieren, authentifizieren und dokumentieren offizielle Krypto-Transaktionen, hinterlegen diese in der Blockchain und sorgen somit für einen hohen Grad an Sicherheit.

In der Blockchain erfüllt Hashing drei Hauptfunktionen:

  • Mining: Die Mining-Leistung eines Kryptonetzwerks nennt sich auch Hashrate. Sie zeigt an, wie viele Miner aktiv sind. Miner erzeugen durch das Lösen mathematischer Rätsel Hashes. Ist ein Hash gültig, wird ein Transaktionsblock validiert. Je höher die Hashrate, desto mehr Coins oder Tokens lassen sich erzeugen. Kryptomining basiert somit auf transaktionsbezogenen Hashing-Algorithmen.
  • Blockchain: Aufgezeichnete, validierte Transaktionen werden als Blöcke sequenziell dokumentiert. Sie werden im Verlauf des Minings zur Blockchain hinzugefügt. Jeder Block wird hierbei mit dem vorherigen verknüpft und enthält den Hashwert des vorausgegangenen Blocks. So wird ausgeschlossen, dass ein invalider oder schädlicher Block hinzukommt.
  • Schlüsselgenerierung: Hashing kommt auch zum Übertragen von Kryptowährungen zum Einsatz. Hierbei findet eine Authentifizierung über öffentliche und private Schlüssel durch Hashing statt.

Wie sicher ist Hashing?

Grundsätzlich raten Datenschutzexpertinnen und -experten zum Einsatz von Hashing, um Datenbanken und sensible Daten so sicher wie möglich zu speichern. Hashing ist der klassischen Verschlüsselung vorzuziehen, da Hashwerte keine Hinweise auf die originalen Datensätze enthalten und sich nicht „entschlüsseln“ lassen. Selbst Brute-Force-Angriffe, bei denen Kombinationen von Zeichenketten so lange ausprobiert werden, bis eine Übereinstimmung vorliegt, benötigen eine astronomisch hohe Zahl an Versuchen.

Dennoch gibt es bösartige Akteure, die Listen von gestohlenen Hashwerten mit Rainbow Tables, auch Regenbogenlisten genannt, abgleichen. Dabei handelt es sich um Listen mit geklauten Hashwerten und ihnen zugeordneten Zugangsdaten. Stimmt ein Hashwert aus der Datenbank mit einem Hashwert der Regenbogenliste und dem zugeordneten Kennwort überein, dann besteht eine Sicherheitslücke. Aus diesem Grund wird auch beim Hashing zum regelmäßigen Ändern von Passwörtern, regelmäßigen Updates und neuen bzw. aktualisierten Hashing-Algorithmen geraten. So empfahl die Internet Engineering Taskforce (IETF) im Jahr 2021 folgende Hashing-Algorithmen:

  • Argon2
  • Bcrpt
  • Scrypt
  • PBKDF2

Eine weitere Möglichkeit, Hashing noch sicherer zu gestalten, sind Verschüsselungsverfahren wie Salting und Pepper. Beim Salting erhält jedes in Hashwerte übertragene Kennwort eine zusätzliche zufällig erzeugte Zeichenfolge. Salts mit einer empfohlenen Länge von 16 Zeichen machen Brute-Force-Attacken fast unmöglich und bieten somit eine noch zuverlässigere Sicherheit. Kommt dann noch ein 32 Zeichen langer Code namens „Pepper“ für alle Passwörter hinzu, sind gestohlene Hashwerte mit zusätzlichem Salt kaum noch zu knacken.