Henryk Plötz: Und welches nehme ich jetzt???

Beitrag lesen

Moin

Und dann einfach $v in der SQL Abfrage einfügen, oder?

genau

Jetzt habe ich aber wieder eins meiner alten Probleme: Egal wie oft ich das durchführe... ich erhalte immer dieselbe Verschlüsselung?!

Hmm, probieren geht über studieren. (aber ja, es kommt immer das selbe bei raus) Vielleicht möchtest du mal nach md5 googlen und dir ein bisschen was über den Algorithmus durchlesen. http://aktuell.de.selfhtml.org/artikel/javascript/md5/index.htm ist für den Anfang auch ganz lesenswert.

Ich hätte ja jetzt mal gedacht, dass da jedesmal was anderes steht, ist zwar jetzt schön einfach beim Einloggen zu vergleichen, aber dafür könnte man doch theoretisch einfach ein "md5 Wörterbuch" erstellen, mit nem Script soger recht einfach, wenn man eine Passwort Liste hat kann man die ja einfach kpl. übersetzen, was bringt das dann für einen Schutz???

Oh, viel Spaß. Vorneweg, das selbe ist mit klassischer Crypt()-Verschlüsselung auch möglich, und zwar braucht man da Algorithmenbedingt nur 10 Zeichen (8 Zeichen Passwort + 2 Zeichen Salt) zu berücksichtigen.

Mit MD5 macht das aber keinen Spaß: Du brauchst ca. 15 Petabyte Speicher für diese Liste wenn sie nur die Passwörter der Längen 1 bis 8 berücksichtigen soll. (Das ist 'ne Überschlagsrechnung, Kombinatorik ist bei schon ein bisschen her). Und ausserdem: liest du manchmal auch was ich schreibe? http://forum.de.selfhtml.org/?m=18697&t=3267 Absatz "Erweiterte Möglichkeiten" Punkt 1. Das verhindert genau diese Art des Angriffs.

Ahja, noch ein bisschen was dazu: Die Passwörter sollten vernünftig lang sein. Mit einem Brute Force-Dingens (ich glaub es war md5crack, google mal danach) kriegt man einfache 4buchstabige Passwörter in etwa 4 sek. erraten (wenn man den Hash hat). Die Verbindung des Usernamens mit dem Passwort sollte dagegen aber auch ein bisschen schützen, probier es einfach mal aus.
Wichtig ist dass der Username _hinter_ das Passwort kommt. md5crack optimiert nämlich seine Suche wenn du von vorneherein schon weisst dass am Anfang des gehashten Strings etwas konstantes liegt, dann setzt es die MD5-Funktion darauf an, speichert den Zustand des MD5-Generators zu diesem Zeitpunkt zwischen und geht dann alle Passwörter von dort aus durch. Das kann die Suche enorm beschleunigen. (So sucht er afaik auch innerhalb der Passwörter, wenn er bespielsweise grade die Passwörter aaaaaa bis aaaazz untersucht, speichert er den Zustand nach aaaa zwischen und führt den rest der Funktion nur noch mit aa bis zz durch). Wenn der Username dahinter steht, ist das nicht (so einfach) möglich.

Weiterer Vorteil der Verschlüsselung bereits in PHP: Wenn deine SQL-Abfragen Fehler produzieren, ist es immer gut eine Fehlerausgabe zu erzeugen die unter anderem die gesendete Abfrage enthält, das ist beim debuggen ungemein hilfreich und sowas wirst du früher oder später auch einbauen. Wenn nun aber das Passwort während so eines Fehlers in der Abfrage drinlag ist das arg böse (ob die Fehlermeldung nun direkt an den Browser oder in eine Logdatei geht, ist erstmal unwichtig, wichtig ist dass das Passwort nun irgendwo lesbar rumliegt). Da du aber so eine schöne MD5-Funktion drin hast, kann der Hash gerne in der Fehlermeldung auftauchen, das ist nicht _soo_ kritisch (schön ist es trotzdem wenn der User es nicht alles sieht, spätestens im produktiven Einsatz)

Alle Klarheiten beseitigt?

--
Henryk Plötz
Grüße aus Berlin