Mit phpass Passwörter in eigenen PHP Anwendungen richtig verschlüsseln

fehlt wasgeht sogutsehr guthat geholfen (1 votes, average: 5,00 out of 5)
Loading ... Loading ...
Werbung




Mit PHP verschlüsseln

Die altbekannte md5() Verschlüsselung in PHP ist nicht mehr sicher, das dürfte nun bekannt sein. Es gibt Serverfarmen, mit denen md5-Hashes von “relativ schnell” bis “mit dem richtigen Cluster errechenbar” knackbar sind. Hierzu werden bereits Clouds benutzt, wie beispielsweise Amazons AWS. Besser ist es, gehashte Passwörter zusätzlich zu “salzen” – mehrfach zuverschlüsseln. Somit wird ein zurückrechnen oder erraten um ein vielfaches erschwert. Eine fertige PHP Bibliothek bietet sich hier an: phpass.

Mit phpass in eigenen PHP Anwendungen arbeiten

phpass ist aktuell in der Version 0.3 verfügbar, und ist als tar.gz und zip zum download verfügbar.

Das Packet, was angeboten wird, enthält mehrere Test und Beispieldateien. Interessant ist allerdings nur die Datei

PasswortHash.php

Diese Datei enthält eine Klasse, in der die Passörter verschlüsselt werden und auch verglichen werden können.

Das Einbinden von phpass in eine Webanewndung erfolgt über das definieren einer neuen Klasse

include "PasswortHash.php";
$PHPass = new PasswortHash(8, FALSE);

Hierbei wird durch den ersten Parameter gleichzeitig die Verschlüsselungs-Tiefe definiert. Der angegebene Wert wird zur Potenz von 2 gesetzt, also 2^8 ergibt 256 Durchläufe. Die Hashfunktion zur Verschlüsselung wird also 256 mal aufgerfen.

Gibt man als 2. Parameter “TRUE” an, wird als Hash-Funktion die alte md5() Funktion verwendet. Allerdings wird diese Funktion abhängig vom ersten Wert 256 mal aufgerufen, was das Passwortergebnis gesalzen macht. Dies ist insbesondere auf Kombatibilitäten bei älteren Anwendungen notwendig.
Setzt man diesen Parameter auf “FALSE”, versucht phpass zunächst das neuere bcrypt-Verfahren.

Mit phpass Passwörter verschlüsseln

Das Modul kann nun verwendet werden.
Um ein eingegebenes Passwort zu hashen, erfolgt die Passwort-Verschlüsselung mit folgendem Befehl

$passhas = $PHPass->HashPasswort($_POST['password']);

In der Variable $passhash ist nun das Verschlüsselte Passwort.

Wichtig ist bei diesem Verfahren, dass der Inhalt von $passhash um einiges länger ist, wie das gewohnte Ergebnis von md5(). Bei md5() haben normalerweise Feld-Längen von ca. 25 Zeichen ausgereicht. Ist das Tabellenfeld in der Datenbank auf diese Zeichen begrenzt, müssen sie vergrößert werden. In dem Rückgabewert $passhash sind zusätzliche Angaben hinterlegt, die phpass zum späteren Vergleichen der Passwörter und gleichermaßem Hashen des zu vergleichenden Passwortes benötigt.

Man kann übrigens am Hashwert erkennen, ob phpass mit dem bcrypt verschlüsselt hat. Der Hashwert klärt auf:

$2a$08$jdiuism8s...

Hinter dem ersten Dollar-Zeichen bedeutet das “2a” eine bcrypt-Verschlüsselung.
Hinter dem zweiten Dollar-Zeichen steht die Hash-Tiefe, in diesem Falle 8 mal.

phpass Passwörter vergleichen

Ist das gehashte Passwort in der Datenbank gespeichert, muss es zum späteren Vergleichen, wenn sich ein Benutzer erneut einloggt, zum Vergleich heran gezogen werden.

$dbhash = mysql_query("SELECT hashpass FROM members WHERE username='".mysql_real_escape_string($_POST['user'])."'");
$hashpass = $PHPass->CheckPassword($_POST['password'], $dbhas['hashpass']);

Das Ergebnis ist bei einem korrekt eingegebenen Passwort “TRUE”.
Somit kann mit einer if-Abfrage gleich das Login geprüft werden.

Sicherheitsbetrachtung “phpass”

Reine md5() Passwörter sind nicht mehr zeitgemäß. Gehackte Datenbanken auch großer Web-Anbieter ziehen immer Massen-Emails mit der Aufforderung des Passwort änderns nach sich.

Gesalzene Passwörter sind dann schon etwas schwieriger zu errechnen. Mit Brute-Force wird man an einem 256 mal gesalzenen Passwort einiges an Zeit benötigen, so dass es für den Inhaber einer solchen Passwort-Tabelle fast nicht mehr rentabel sein wird.

Für Web-Administratoren ist dies natürlich kein Grund, die Sicherheit seiner Webanwendungen und Datenbank zu vernachlässigen, allerdings sind solche Passwort-Listen nicht das wert, was reine md5-Passwort-Listen wert sind.

Das Einbinden von phpass in eine Webanwendung gestaltet sich recht einfach und bietet eine höhere Sicherheit der Passwörter in der Dantenbank.



Werbung


Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *


*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>