© saicle/Shutterstock.com
PHP Magazin
Warum man Passwörter hashen muss und wie man das richtig macht

Passwörter speichern, aber richtig!

Wer Passwörter als Klartext speichert, fordert das Unglück heraus. Und auch wer sie nur als Hash speichert, lebt gefährlicher als er es in seinen schlimmsten Albträumen vermuten würde. Aber wie sieht es denn mit gesalzenen Passwort-Hashes aus - versalzen wenigstens die dem Angreifer die Suppe?

Carsten Eilers


Speichern Sie Passwörter als Klartext? Hoffentlich nicht, denn falls ein Angreifer sich zum Beispiel über eine SQL-Injection-Schwachstelle Zugriff auf die Datenbanktabelle mit den Zugangsdaten verschafft, kann er diese Daten dann sofort verwenden. Auch eine Speicherung als einfacher Hash-Wert ist heutzutage nicht mehr ausreichend, und sogar die Speicherung als so genannter gesalzener Hash-Wert ist teilweise nicht mehr sicher.

Aber fangen wir ganz am Anfang an: Was ist eigentlich ein Hash-Wert? Nun, das ist einfach: Ein Hash-Wert ist das Ergebnis einer Hash-Funktion. Die kennen Sie sicher schon, zum Beispiel in Form der in Datenbanken genutzten Hash-Tabellen. Vereinfacht ausgedrückt berechnet eine Hash-Funktion H(M) aus einer beliebig langen Eingabe M, zum Beispiel einem Text, einen möglichst eindeutigen Hash-Wert h fester Länge, zum Beispiel eine Zahlen-Buchstaben-Kombination: h = H(M). Der Hash-Wert kann auch als Fingerprint (Fingerabdruck) der Eingabe bezeichnet werden.

Allgemeine Anforderungen an Hash-Funktionen

An Hash-Funktionen werden eine Reihe von Anforderungen gestellt:

Erste Anforderung an eine Hash-Funktion: Aus einer großen Eingabe wird effizient eine kleine Ausgabe berechnet: Zu gegebenen M ist es leicht, h = H(M) zu berechnen.

Allgemein wird von Hash-Funktionen gefordert, dass sich die Ergebnisse für verschiedene Eingaben mit ausreichend großer Wahrscheinlichkeit unterscheiden: Die Ergebnisse sollen möglichst gleichmäßig auf den definierten Wertebereich verteilt sein. Insbesondere sollen sich die Ausgabewerte für ähnliche Eingabewerte deutlich unterscheiden.

Zweite Anforderung an eine Hash-Funktion: Ähnliche Eingaben führen zu verschiedenen Ausgaben.

Anforderungen speziell an kryptographische Hash-Funktionen

In der Kryptographie kommen drei weitere Anforderungen dazu. Erstens (und damit insgesamt drittens) darf es nicht effizient möglich sein, zu einem gegebenen Hash-Wert eine passende Nachricht zu berechnen.

Dritte Anforderung an eine (Einweg-)Hash-Funktion: Zu gegebenen h ist es schwer, ein M mit H(M) = h zu berechnen.

Hash-Funktionen, die diese Anforderung erfüllen, werden als Einweg-Hash-Funktionen bezeichnet. Dabei wurde die englische Originalbezeichnung one-way leider zu wortgetreu übersetzt, besser wäre Einbahn wie bei der Einbahnstraße gewesen: Die Funktion kann nur in eine Richtung berechnet werden, sie wird ja nicht nach einmaligem Gebrauch unbrauchbar.

Es darf auch nicht effizient möglich sein, zu einer gegebenen Eingabe eine weitere Ein...

PHP Magazin
Warum man Passwörter hashen muss und wie man das richtig macht

Passwörter speichern, aber richtig!

Wer Passwörter als Klartext speichert, fordert das Unglück heraus. Und auch wer sie nur als Hash speichert, lebt gefährlicher als er es in seinen schlimmsten Albträumen vermuten würde. Aber wie sieht es denn mit gesalzenen Passwort-Hashes aus - versalzen wenigstens die dem Angreifer die Suppe?

Carsten Eilers


Speichern Sie Passwörter als Klartext? Hoffentlich nicht, denn falls ein Angreifer sich zum Beispiel über eine SQL-Injection-Schwachstelle Zugriff auf die Datenbanktabelle mit den Zugangsdaten verschafft, kann er diese Daten dann sofort verwenden. Auch eine Speicherung als einfacher Hash-Wert ist heutzutage nicht mehr ausreichend, und sogar die Speicherung als so genannter gesalzener Hash-Wert ist teilweise nicht mehr sicher.

Aber fangen wir ganz am Anfang an: Was ist eigentlich ein Hash-Wert? Nun, das ist einfach: Ein Hash-Wert ist das Ergebnis einer Hash-Funktion. Die kennen Sie sicher schon, zum Beispiel in Form der in Datenbanken genutzten Hash-Tabellen. Vereinfacht ausgedrückt berechnet eine Hash-Funktion H(M) aus einer beliebig langen Eingabe M, zum Beispiel einem Text, einen möglichst eindeutigen Hash-Wert h fester Länge, zum Beispiel eine Zahlen-Buchstaben-Kombination: h = H(M). Der Hash-Wert kann auch als Fingerprint (Fingerabdruck) der Eingabe bezeichnet werden.

Allgemeine Anforderungen an Hash-Funktionen

An Hash-Funktionen werden eine Reihe von Anforderungen gestellt:

Erste Anforderung an eine Hash-Funktion: Aus einer großen Eingabe wird effizient eine kleine Ausgabe berechnet: Zu gegebenen M ist es leicht, h = H(M) zu berechnen.

Allgemein wird von Hash-Funktionen gefordert, dass sich die Ergebnisse für verschiedene Eingaben mit ausreichend großer Wahrscheinlichkeit unterscheiden: Die Ergebnisse sollen möglichst gleichmäßig auf den definierten Wertebereich verteilt sein. Insbesondere sollen sich die Ausgabewerte für ähnliche Eingabewerte deutlich unterscheiden.

Zweite Anforderung an eine Hash-Funktion: Ähnliche Eingaben führen zu verschiedenen Ausgaben.

Anforderungen speziell an kryptographische Hash-Funktionen

In der Kryptographie kommen drei weitere Anforderungen dazu. Erstens (und damit insgesamt drittens) darf es nicht effizient möglich sein, zu einem gegebenen Hash-Wert eine passende Nachricht zu berechnen.

Dritte Anforderung an eine (Einweg-)Hash-Funktion: Zu gegebenen h ist es schwer, ein M mit H(M) = h zu berechnen.

Hash-Funktionen, die diese Anforderung erfüllen, werden als Einweg-Hash-Funktionen bezeichnet. Dabei wurde die englische Originalbezeichnung one-way leider zu wortgetreu übersetzt, besser wäre Einbahn wie bei der Einbahnstraße gewesen: Die Funktion kann nur in eine Richtung berechnet werden, sie wird ja nicht nach einmaligem Gebrauch unbrauchbar.

Es darf auch nicht effizient möglich sein, zu einer gegebenen Eingabe eine weitere Ein...

Neugierig geworden?


    
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang