Verschlüsselung der Passwörter bei phpBB3

Wenn man in der Datenbank nach dem Passwort eines Benutzers sucht, so wird man nicht auf das Passwort im Klartext treffen, sondern vielmehr einen String der Art
$H$9ASHca2xFIq35cwWe4KQkTzDnFU6ZS/
Bei diesem Wert handelt es sich um einen generierten Hash-Wert des Passwortes (hier übrigens "phpBB 3.0").

Was ist ein Hash-Wert


Der Hash-Wert ist das Ergebnis einer Hash-Funktion, die man kurz als Einwegverschlüsselung bezeichnen kann. Aus dem Passwort wird dabei ein Wert generiert, der folgende Eigenschaften erfüllen sollte:
  • es ist nahezu unmöglich, den zu einem Hash-Wert gehörenden Ursprungstext zu finden.
  • es ist nahezu unmöglich, zwei Ursprungstexte zu finden, die den selben Hash-Wert produzieren.
Der Trick dabei ist folgender: der Ursprungstext wird so umgewandelt, dass ein neuer Wert entsteht. Die Wahrscheinlichkeit, dass ein anderer Ursprungstext den gleichen Wert erzeugt, ist nahezu Null, gleiches gilt für die Wahrscheinlichkeit, vom Ergebnis auf den Ursprungstext zurück schließen zu können.
Für einen Passwortschutz ist dies ausreichend: das Passwort wird nicht im Klartext gespeichert sondern nur der Hash-Wert. Damit kann das Passwort nicht im Klartext ausgelesen werden, auf der anderen Seite kann jedoch ein eingegebenes Passwort überprüft werden: ist der Hash-Wert des eingegebenen Passworts identisch mit dem in der Datenbank hinterlegten Hash-Werts, so dürften das ursprüngliche und das eingegebene Passwort identisch sein.

Bekannte Standards für Hash-Werte


Es gibt drei wesentliche Standards für Hash-Werte:
  • MD5: Dieses Verfahren wurde auch bei phpBB bis Version 2.0 verwendet. Allerdings hat MD5 eine Sicherheitslücke und ist somit (wenn auch mit viel Aufwand) knackbar. Aus diesem Grund werden in phpBB 3.0 neben dem einfachen md5 Hash weitere Sicherheitsmaßnahmen ergriffen um Rückschlüsse vom Hashwert auf das Passwort zu verhindern.
  • SHA: Ein neuerer Standard, der 160 bit-Werte erzeugt. Gilt derzeit in der aktuellen Variante (SHA-1) als sicherer als MD5, jedoch scheint es auch hier eine Kollisionsgefahr zu geben.
  • RIPEMD-160: Eine europäische Variante mit 160-bit Werten (auch höherer Werte sind denkbar). Gilt derzeit als sicher.
  • bcrypt: Dieses Verfahren basiert auf dem Blowfish-Algorithmus und wird seit phpBB 3.1 angewendet. Es gilt als sicherer als SHA-1 oder MD5, da es mit bcrypt aufwendiger ist, eine Brute-Force-Attacke durchzuführen (also den Hash-Wert zu knacken).
Eine Übersicht über diese und andere Hash-Funktionen gibt es auf Wikipedia. Wer es noch detaillierter haben will, kann unter http://dev.mysql.com/doc/refman/5.1/de/ ... tions.html (deutsch, MySQL Referenz Verschlüsselung) oder http://www.cs.bham.ac.uk/~mdr/teaching/ ... /hash.html (Universitäts-Veröffentlichung in englisch, aber eigentlich recht gut verständlich) weitere Informationen zu Grundlagen von Hash-Funktionen und Algorithmen finden.

Knacken von Hash-Werten


Ein guter Hash-Wert gibt in der Regel keine Informationen über den Ursprungswert preis. Demnach sollte auch der Hash-Wert bei ähnlichen Folgen komplett unterschiedliche Ergebnisse hervorbringen. Der einzige Wert, einen möglichen Ursprungstext zu erhalten, ist ein Brute Force-Angriff: also jeden möglichen Ausgangswert verschlüsseln und prüfen, ob das Ergebnis mit dem vorhandenen Hash-Wert identisch ist.
Jedoch haben einige Hash-Funktionen eine Lücke: ist es möglich, einen ähnlichen Ursprungswert zu generieren, der zum gleichen Hash-Wert führt, so wird eine der wesentlichen Eigenschaften eines Hash-Wertes verletzt. Eine solche Schwäche besitzt z.B. MD5, sie beeinträchtigt die Sicherheit von MD5 nur teilweise, führt jedoch zu einer generellen Neigung, auf SHA/SHA-1 auszuweichen. (Wer es genau wissen will: md5_someday.pdf) Auch bei SHA-1 wird über ein entsprechendes Problem diskutiert (http://www.schneier.com/blog/archives/2005/02/sha1_broken.html).

Unterstützung in PHP/MySQL


md5 wird von PHP und MySQL unterstützt. Ab PHP 4.3.0 bzw. MySQL 4.0.2 wird auch SHA-1 und ab PHP 5.3.0 wird bcrypt unterstützt.

Hash-Werte online ausrechnen


Ein Online-Rechner für MD5 und SHA-1 befindet sich unter http://pajhome.org.uk/crypt/md5/

Zuletzt bearbeitet: 26.05.2014 15:15 von • Der Artikel wurde 40387 mal angeschaut.