Hashwerte haben ein breites Anwendungsfeld, z.B. als Marker für Speicherorte oder als digitaler Fingerabdruck zur Verifizierung von Dateien. Eine ebenfalls große Rolle spielt die Hashfunktion bei der Passwortüberprüfung. Nachfolgend erläutern wir, wie Hashing-Algorithmen zu mehr Sicherheit beitragen.
Dieser Beitrag richtet sich nicht an Entwickler. Stattdessen soll er Führungskräften, die aufgrund ihres Tagesgeschäfts nicht über das technische Detailwissen verfügen, die Thematik näherbringen.
Was ist ein Hashwert?
Der Hashwert ist das Ergebnis, das eine Hashfunktion nach Verarbeitung von Daten liefert.
Beispiel: Der Anwender wird zur Vergabe eines Passworts gebeten. Hierzu gibt er die Zeichenkette „Datenschutz“ ein. Anschließend generiert das System mittels Hashing Algorithmus aus dem Passwort einen Hashwert.
1. Eingabe des Passworts → „Datenschutz“
2. Berechnung des Hashwerts via MD5 → „3da775df8d065507c482a20bf7a93427“
Die Hashfunktion liefert stets eine Zeichenkette von identischer Länge, unabhängig von der Länge des eingegebenen Wertes.
Warum Hashwerte statt Passwörter im Klartext speichern?
Weshalb Hashwerte in Verbindung mit Passwörtern eine bedeutsame Rolle spielen, verdeutlicht der nachfolgende skizzierte Login-Prozess:
- Authentisierung: Der Nutzer gibt seine Zugangsdaten (Benutzername und das zugehörige Passwort) ein.
- Hashfunktion: Das System generiert aus dem Passwort einen Hashwert.
- Authentifizierung: Der erzeugte Hashwert wird mit dem in der Datenbank hinterlegten Hashwert abgeglichen. Bei einer Übereinstimmung werden dem Nutzer die für den Zugriff notwendigen Rechte eingeräumt.
In Form von Klartext ist das Passwort gar nicht im System hinterlegt. Hierfür gibt es gute Gründe:
- Mitarbeiter / Admins könnten unverschlüsselte Passwörter auslesen und sich in Benutzerkonten einloggen.
- Bei einem Hack der Datenbank / Datendiebstahl könnte der Angreifer die erbeuteten Passwortdaten sofort missbrauchen.
Ist in der Datenbank hingegen nur der Hashwert gespeichert, enthält sie keine vollständigen Zugangsdaten. Der Angreifer kann sich nicht in den Account einloggen und somit keinen unmittelbaren Schaden anrichten. Es hilft auch nicht, beim Login den Hashwert als Passwort einzugeben. Denn hieraus würde das System einen Wert generieren, der bei der Authentifizierung / beim Abgleich nicht übereinstimmt.
Angriffe über Passwort-Hashing
Hashwerte anstelle von Passwörtern in Klartext bieten jedoch keine vollständige Sicherheit. Es gibt Methoden, um aus (erbeuteten) Hashwerten die zugehörigen Passwörter abzuleiten.
Ein Ansatz ist schlichtes Ausprobieren. Geschieht dies durch Einsatz von Tools automatisiert mit hoher Geschwindigkeit, liegt ein Brute-Force-Angriff vor.
Hacker mögen außerdem Dictionary-Angriffe. In diesem Fall probieren die Angreifer verschiedene Begriffe, die einem Wörterbuch entstammen, aus. Die Begriffe werden mit der Hashfunktion verarbeitet, um die Ergebnisse mit erbeuteten Hashwerten abzugleichen. Sobald eine Übereinstimmung vorliegt, ist das Passwort ermittelt. Leider funktioniert diese Methode überraschend gut, weil viele Nutzer simple Begriffe (die in jedem guten Wörterbuch stehen) als Kennwort verwenden.
Derartige Angriffe erfordern umfassende Ressourcen, insbesondere Rechenleistung und Zeit. Ein bei Hackern beliebter Lösungsansatz besteht darin, sogenannte Rainbow Tables nach passenden Hashwerten zu durchforsten. Vereinfacht ausgedrückt sind dies Tabellen, in denen Hashwerte und die zugehörigen Passwörter bereits stehen. Es ist also lediglich ein Abgleich notwendig. Reizvoll an solchen Tabellen ist die Tatsache, dass sie auch anspruchsvolle Algorithmen berücksichtigen können.
Glücklicherweise haben Rainbow Tables eine Schwäche, nämlich ihre Größe. Ihre Daten erfordern viel Speicherplatz und bringen die Such- und Filterfunktionen einer Datenbank an technische Grenzen. Deshalb sind Rainbow Tables üblicherweise vorgefiltert, sodass nicht alle erdenklichen Kombinationen für mögliche Passwörter bis zu einer bestimmten Länge berücksichtigt sind.
Fingerprinting vs. kryptographische Algorithmen
Zahlreiche Hashing Algorithmen (wie auch der oben erwähnte MD5 Algorithmus) sind primär zum Fingerprinting (Erzeugung digitaler Fingerabdrücke) vorgesehen. Sofern große Rechenleistung zur Verfügung steht, lassen sich die zu Hashwerten zugehörigen Passwörter in akzeptabler Dauer ermitteln.
Entwickler sind deshalb gut damit beraten, nur ausgewählte Hashfunktionen zu verwenden. Es existieren kryptografische Algorithmen, die im Vergleich mehr Sicherheit beim Speichern verschlüsselter Passwörter bieten. Eine erhöhte Sicherheit kann sich z.B. daraus ergeben, dass keine Kollisionen auftreten. Zu solch sicheren Hashfunktionen zählen unter anderem:
- Argon2
- PBKDF2
- RIPE-MD 320
- scrypt
- SHA3
SALT und PEPPER Verfahren für mehr Sicherheit
Administratoren und Entwickler können die Passwortsicherheit zusätzlich erhöhen, indem sie ein Passwort vor der Berechnung des Hashwerts mit einem SALT oder PEPPER versehen. Im Fall von SALT wird das Passwort um eine jeweils zufällig erzeugte Zeichenkette ergänzt. Sie verlängert das Passwort und erschwert dadurch das Knacken des Hashwerts.
Das PEPPER Verfahren ist ähnlich, allerdings wird jedes Passwort um dieselbe, also identische Zeichenkette ergänzt. Dies bietet im Vergleich zwar weniger Sicherheit, kann technisch aber leichter umsetzbar sein.
Fragen & Antworten zum Thema
Was sind Kollisionen beim Passwort-Hashing?
Der Hashwert ist das Ergebnis einer Rechenoperation: Der Hashing Algorithmus verarbeitet eine vom Nutzer eingegebene Zeichenkette, nämlich das Passwort. Man sollte meinen, dass jede eingegebene Zeichenkette zu einem einzigartigen Ergebnis führt.
Allerdings ist dies nicht bei jedem Algorithmus gewährleistet. Es kann sein, dass die Eingabe eines vollkommen anderen Begriffs zur Berechnung desselben Hashwerts führt. Dann liegt eine Kollision vor. Solch eine Eigenschaft verringert die Passwortsicherheit. Sie erhöht die Wahrscheinlichkeit, dass Hacker ein Passwort errechnen, mit dem der Login gelingt – auch wenn dieses Passwort anders lautet als vom Nutzer ursprünglich gewählt.
Warum kennen Hacker die Hashing Algorithmen?
Die Anzahl an Hashing Algorithmen ist überschaubar und letztlich müssen Entwickler auf bewährte Lösungen zurückgreifen. Zugleich beherrschen viele Server-Installationen standardmäßig nur wenige Algorithmen. Dies ist einer der Hauptgründe, weshalb immer noch so viele Entwickler beim Passwort Hashing ihre Daten mit MD5 verarbeiten.
Via Internet finden Cyberkriminelle den Zugang zu Wissen und Tools, die sie für ihre Angriffe benötigen. Folglich ist es umso sinnvoller, Kennwörter mit kryptografischen Algorithmen verbunden mit SALT oder PEPPER Verfahren zu verarbeiten. Sie tragen maßgeblich zu Steigerung der Passwortsicherheit bei.