06 Nov
2008

Ein Kennwort muss gesalzen werden

 

Beim Speichern von Kennwörtern hat man üblicherweise drei Möglichkeiten.

  1. Klartext
  2. Verschlüsselt jedoch wiederherstellbar
  3. Als Hash und somit nicht wiederherstellbar

Von 1. und 2. halte ich nicht viel, da so die Kennwörter im falle eines Datenlecks oder neugierigen Administrators ausgelesen werden können und somit für die Allgemeinheit zu Verfügung stehen. Und kaum jemand hat wohl für jedes Online-Angebot ein eigenes Kennwort, wobei dies natürlich zu bevorzugen wäre.

Somit verwende ich in meinen Anwendungen immer einen Hash aus dem sich das Kennwort nicht zurückrechnen lässt, meist MD5 oder SHA1. Jedoch besteht bei jedem Hash die Möglichkeit einer Kollision, dies bedeutet das eine andere Zeichenkette (oder auch Daten) den gleichen Hashwert liefert. Desweiteren gibt insbesondere für MD5 Listen von Zeichenketten mit denen sich bestimmte Hashwerte erzeugen lassen.

Somit wäre es mit dem Zugriff auf den Hashwert möglich eine Eingabe zu erzeugen die diesem entspricht und mit etwas Glück kann man sich mit diesem dann an anderen Systemen anmelden.

Dieses gilt es zu vermeiden, deshalb muss man den Hash des Kennwortes salzen.

Es gibt verschiedene Wege einen Wert zu ermitteln mit dem gesalzen wird. Oft wird ein Zufallswert genommen der auch mit der Datenbank gespeichert wird, sonst ist der Hash ja nicht rekonstruierbar. Ein Beispiel dazu findet sich hier http://www.aspheute.com/artikel/20040105.htm.

Durch das Salzen verhindert man zwar nicht das zu dem Hashwert eine passende Kollision erzeugt wird, jedoch verhindert dies dass man sich mit damit an anderen Systemen anmelden kann.

Auf keinen Fall sollte man immer denselben Wert für alle Kennwörter verwenden. Da so für gleiche Kennwörter auch dieselben Hashs erzeugt werden. Dies kann ein Zufallswert sein oder eine andere Benutzerspezifischer Wert (z.B. Zeitpunkt der Erstellung, Id in der Datenbank).

Zusätzlich nehme ich dann noch einen Anwendungsspezifischen Wert der einmalig bei der Einrichtung der Anwendung festgelegt wird. Somit sind dann auch Hashes mit denselben Daten von anderen Anwendungen unterschiedlich.

Mit dieser, nicht ganz neuen Technik, kann man die Kennwörter so speichern das diese woanders nicht zum Einsatz gebracht werden können. Leider ist dies auch heute noch nicht immer der Fall und Kennwörter werden im Klartext oder mit einem ungesalzenen Hash gespeichert. Also an die Arbeit.


Der Eintrag ist mir etwas Wert
 
Comments have been closed on this topic.