12.9. Wie kann ich Passwörter sicher speichern?Antwort von Alex KieselUm Passwörter nicht im Klartext in eine Datenbank speichern zu müssen, gibt es die Möglichkeit diese vorher mit einer Einweg-Verschlüsselung zu versehen, bzw. nur einen Hash des Passworts abzuspeichern. Die Funktionen crypt() und md5() können hierfür benutzt werden. Crypt verschlüsselt auf den meisten Systemen das Passwort mit DES, es werden jedoch nur die ersten 8 Zeichen zur Verschlüsselung benutzt, längere Passwörter werden also einfach abgeschnitten. MD5 ist eine kryptographische Hash-Funktion. Sie berechnet für einen beliebigen Eingabestring einen Hash, der 128 Bit lang ist. Beide Funktionen haben Eigenschaften, die uns hier sehr nützlich sind:
Um die Passwörter der Benutzer also sicher zu speichern, wird vor dem Speichern in z.B. einer Datenbank erst der Hash des Passworts berechnet und dieser dann gespeichert. Da wir (und vor allem andere) nicht in der Lage sind, aus dem gespeicherten String das wirkliche Passwort zu berechnen, kann bei der Prüfung der Passworteingabe nicht das Passwort direkt verglichen werden. Wir berechnen zunächst also wieder den Hash der Eingabe und vergleichen diesen mit dem gespeicherten Hash. Wegen der o.g. Eigenschaft wird der Hash der Eingabe (i.A.) genau dann gleich dem gespeicherten Hashwert sein, wenn die ursprünglich eingegebenen Passwörter gleich sind. Auch wenn die Passwörter nun sicher in der Datenbank gespeichert sind, sollte hier nicht übersehen werden, dass die Eingaben des Benutzers, also auch das Passwort, bei einer normalen HTTP-Übertragung unverschlüsselt über die Leitung gehen und somit nicht sicher sind. Eine mögliche clientseitige Verschlüsselung z.B. durch Javascript, bei der nur das Passwort verschlüsselt wird, ist keine Abhilfe dagegen. Hier würde zwar das Passwort nicht ersichtlich sein, zum Anmelden würde es aber reichen, den mitgesnifften Hash an den Server zu schicken. Letztlich bleibt für eine sichere Authentifizierung nur die Übertragung über HTTPS. |
||
12.9. Wie kann ich Passwörter sicher speichern? http://www.php-faq.de/q/q-safe-password.html |
||
Archiv der de.comp.lang.php-FAQ Dies ist eine Archivseite von 2008 und wurde seitdem nicht geändert. Das dclp-FAQ-Team |