Sven Rautenberg: Passwort verschlüsselt speichern

Beitrag lesen

Moin!

Hab grad crypt() getestet, aber wenn ich das selbe Wort mehrmals hintereinander mit crypt() verschlüsseln möchte, kommt jedes mal ein anderer verschlüsselter Wert raus?

Gibt es da eine geeignetere Funktion?

crypt() ist eigentlich genau dafür gedacht - allerdings ist die Funktion schon ziemlich alt, weshalb sie nur die ersten 8 Zeichen des Passwortes verwendet. 8 Zeichen lange Passwörter sind aber oftmals zu kurz, weshalb crypt() allein deswegen nicht mehr zum Einsatz kommen sollte. Außerdem kann man gecryptete Passwörter heutzutage schon recht gut mit "Brute Force" herausfinden, die Rechenpower existiert mittlerweile.

Aber nur zur Anwendung: crypt() arbeitet mit einem "salt", das ist ein beim ersten Mal zufällig von dir (oder der Funktion) gewählter Wert, der das Ergebnis von crypt() beeinflußt. Dasselbe Passwort, mit unterschiedlichem "salt" gecryptet, ist immer unterschiedlich.

Die Passwortprüfung benötigt deshalb das gleiche "salt" - praktischerweise sind das die ersten beiden Buchstaben des crypt-Wertes. Es reicht daher eigentlich immer aus, wenn man der crypt-Funktion bei der Prüfung sowohl das Klartext-Passwort als auch das bestehende Crypt-Passwort übergibt. Diese Funktion nimmt nämlich auch zwei Parameter entgegen (siehe http://www.php.net/crypt).

Wie man dieser Doku-Seite entnehmen kann, arbeitet Crypt aber nicht zwingend mit dieser ganz alten Methode, sondern wahlweise auch mit besseren Methoden wie MD5 oder SHA1, sofern das Betriebssystem dieses anbietet. Ich glaube aber, dass diese Vorgehensweise ziemlich problematisch ist, weil man keine wirkliche Kontrolle hat, ob nicht doch nur das alte DES-Verfahren mit 8 Zeichen Passwortlänge verwendet wird.

Empfehlenswerter sind md5() und sha1() - wobei diese Funktionen auch schon kryptografische Angriffe erleiden mußten, die deren Verwendung unter Umständen nicht vollkommen ratsam erscheinen lassen. PHP bietet derzeit aber nach meiner Information noch nicht die Nachfolgerfunktionen SHA-2 oder SHA-512 an.

  • Sven Rautenberg