| | | | |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | |
| Erfahrener Benutzer Registriert seit: 04.07.2003
Beiträge: 359
PHP-Kenntnisse: Fortgeschritten ![]() | Ja, du hast etwas übersehen! Ersteinmal ist MD5 keine Verschlüsselung, sondern eine Hash-Funktion, mit dem riesen Unterschied, dass eine Hash-Funktion die Eigenschaft einer Einwegfunktion hat, es also nicht möglich ist aus einem Hash-Wert y = hash(x) die Eingabe x zu berechnen. Die Idee ist daher den Hash-Wert eines Passwortes zu speichern, weil jeder der die Datenbank ausliesst nur das gehashte Passwort erhällt, aber dieses nicht zurückrechnen kann (Einwegfunktion). Bei der Eingabe des Passwortes (also dem Login) berechnet man den Hash-Wert des Passwortes und vergleicht dieses mit dem gespeicherten Hash-Wert - so erfährt man eben ob der Benutzer das korrekte Passwort eingegeben hat. Die Idee hat in der Praxis jedoch einen kleinen Haken, da eine Hash-Funktion deterministisch ist, erhällt man auf die gleiche Eingabe immer die selbe Ausgabe! Das heißt alle Benutzer mit dem Passwort "geheim" haben den selben Hash-Wert in der Datenbank stehen. Folglich kann man eine riesen Liste mit allen möglichen Passwörtern und zugehörigen Hash-Werten speichern und wenn man einen Hash-Wert erhält diesen in der Liste nachsehen und das Passwort erhalten (in der Praxis kann man dafür effiziente Listen verwenden). Dies ist ein riesen Problem, kann aber gelöst werden, indem man die Hash-Funktion probabilistisch (zumindest etwas) macht, indem man für jeden Benutzer einen anderen Zufall (Seed) einfließen lässt. Man speichert also zu jedem Benutzer noch ein wenig Zufall und berechnet den Hash-Wert dann z.B. als y = hash( x | seed ). Da nun jeder Benutzer auf jeden Fall eine andere Eingabe - selbst mit gleichem Passwort - hat, wird auf jeden Fall ein anderer Hash-Wert gespeichert. Dies war nun doch etwas mehr als ich eigentlich zu dem Thema schreiben wollte! Für weitere Informationen kann ich dir "key/password stretching" oder "PBKDF2" ans Herz legen, dort findet man viele Informationen zu einem ordnetlichen Vorgehen! Edit: War ja klar dass ich viel zu langsam war... :/ |
| | |
|
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Type Hints - Grundsätzliches | olli666 | PHP Tipps 2009 | 2 | 05.01.2010 15:28 |
| Formular - Grundsätzliches zum Formatieren | Horst Stack | HTML, Usability und Barrierefreiheit | 4 | 17.07.2009 23:39 |