![]() |
| | Themen-Optionen |
| | Nach oben #1 |
| Martin Schröder Registriert seit: 15.12.2004 Ort: Stockholm
Beiträge: 116
| Anmerkung der Projektleitung Diese Diskussion ist auf Basis folgender Nachricht entstanden: http://www.developers-guide.net/foru...hen-und-finden Die Diskussion wurde als eigenständiger Thread abgespalten, da sie so im geeigneteren Forum geführt werden kann. hab das gestern auch gelesen und direkt mal mit nem alten passwort von mir ausprobiert. es funktionierte nicht. also ich hab nach eingabe des md5-hashes nicht das passwort bekommen. entgegenwirken.. hmm.. man macht vielleicht triple-md5 oder so.. halt so, dass die checksumme der checksumme der checksumme des passworts in der db als klartext steht. oder auch zwischendurch mal den sha1-hash mit md5 behandeln.. nur son gedanke.. edit: $string = "1"; md5("1") -> c4ca4238a0b923820dcc509a6f75849b (20300 hits bei google) $string = "c4ca4238a0b923820dcc509a6f75849b"; md5("c4ca4238a0b923820dcc509a6f75849b") -> 28c8edde3d61a0411511d3b1866f0636 (83 hits bei google) $string = "28c8edde3d61a0411511d3b1866f0636"; md5("28c8edde3d61a0411511d3b1866f0636") -> 40f5888b67c748df7efba008e7c2f9d2 (1 hit bei google) $string = "40f5888b67c748df7efba008e7c2f9d2 "; md5("40f5888b67c748df7efba008e7c2f9d2 ") -> bc554ecf2b33458ff1f152433cd4c813 (0 hits bei google) da muss man wohl doch quintuple-md5 anwenden..
__________________ "Wer nicht mit der Zeit geht, wird mit der Zeit gehen." ___________________________ Geändert von Ben (29.11.2007 um 19:03 Uhr). Grund: ergänzung |
| | |
| | Nach oben #2 |
| Benjamin Steininger Registriert seit: 02.06.2005 Ort: weiher im tiefsten Odenwald
Beiträge: 1.177
|
Gibt einige möglichkeiten sowas auszubauen: - man lässt weitere FESTE parameter mit einfließen: benutzername, registrierungsdatum, emailadresse (abhängig vom system) ... z.B. sowas .... md5(sha1(md5(username).md5(registrierungsdatum).md 5(passwort))) |
| | |
| | Nach oben #3 | |
| Patrick Freitag Registriert seit: 17.08.2005
Beiträge: 118
| Zitat:
| |
| | |
| | Nach oben #4 | |
| Martin Schröder Registriert seit: 15.12.2004 Ort: Stockholm
Beiträge: 116
|
korrekt. Zitat:
__________________ "Wer nicht mit der Zeit geht, wird mit der Zeit gehen." ___________________________ | |
| | |
| | Nach oben #5 |
| Jann Hendrik Bekaan Registriert seit: 02.12.2004 Ort: Wildeshausen
Beiträge: 2.203
| Ich denke nicht, dass sich dadurch ein höheres Maß an Sicherheit einstellen lässt!
__________________ Umfragen: Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Danke! |
| | |
| | Nach oben #6 |
| Patrick Freitag Registriert seit: 17.08.2005
Beiträge: 118
| Tut mir leid, hab ich wohl übersehen. Aber im Grunde ist es nur eine Frage der Zeit bis alle Strings mit einer gewissen Länge (die sich mit den Jahren natürlich immer verlängern werden) erfasst worden sind. Die PC's werden performanter und die Technologien immer ausgereifter. Und je mehr User diese Seite unterstützen desto schneller wird das von statten gehen.
|
| | |
| | Nach oben #7 |
| Martin Eisengardt Registriert seit: 30.03.2006 Ort: Pfinztal
Beiträge: 355
|
Der Punkt ist, dass es auch völlig egal ist, welches Passwort man rausbekommt. Es gibt mehr als ein Passwort, was zum gleichen MD5-Hash führt. Und mehr als ein Passwort, was zum gleichen Triple-MD5 führt usw. Du musst nur eines wissen und ob es das Original ist, ist doch völlig egal. Du hast Hash. Du weisst, dass das zu hackende System zweimal MD5 aufruft. Und du weisst, dass Passwort X zu genau diesem Hash führt. Zack. Login. Dass der enutzer ein völlig anderes Passwort genutzt hatte, kann dir egal sein. Was mich bei alldem wundert: Wer speichert denn ein MD5-Passwort auf dem Client ab?!?!
__________________ Open Sourcing the Online Gaming Universe PHP/SQL/Java/C++/Assembler. Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html |
| | |
| | Nach oben #8 |
| Martin Schröder Registriert seit: 15.12.2004 Ort: Stockholm
Beiträge: 116
| woher? ich sehe deinen punkt. habs nur grad gedanklich mal durchgespielt. du weisst den hash aus der datenbank (oder woher auch immer), also den zielhash. aber man weiss in der regel nicht, wie man darauf nun kommt (ausser man schaut ins script). und wenn ich kombinationsweise irgendwelche hashfunktionen aufrufe, in einer bestimmten reihenfolge, mit bestimmten zusatzstrings, dann komm ich grad nich dahinter, inwiefern die info den zielhash zu kennen nuetzlich sein könnte.. also angenommen, du findest nen string dessen hash genau dem zielhash gleichkommt, und du gibst diesen string im loginformular als passwort ein, dann wird doch die prozedur (kombination aus hashfunktionen) auch wieder aufgerufen, woraufhin dann bestimmt was anderes als der zielhash rauskommt, oder?
__________________ "Wer nicht mit der Zeit geht, wird mit der Zeit gehen." ___________________________ Geändert von Orolhawion (26.11.2007 um 09:52 Uhr). Grund: ergänzung |
| | |
| | Nach oben #9 | ||
| Patrick Freitag Registriert seit: 17.08.2005
Beiträge: 118
| Zitat:
Zitat:
MD5-Passwort auf dem Client speichern? Der Client erzeugt einfach willkürliche Strings die gehasht werden und dann auf den Webserver gesendet werden. So wird jeder String den es gibt durchgenommen (das haben sie zumindest vor) und von irgendeinem User erstellt, das läuft so wie Torrents. | ||
| | |
| | Nach oben #10 | |||
| Martin Eisengardt Registriert seit: 30.03.2006 Ort: Pfinztal
Beiträge: 355
| Zitat:
Zitat:
Zitat:
__________________ Open Sourcing the Online Gaming Universe PHP/SQL/Java/C++/Assembler. Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html | |||
| | |
| | Nach oben #11 | |
| Patrick Freitag Registriert seit: 17.08.2005
Beiträge: 118
| Zitat:
Auch wenn er offen zugänglich ist, heißt das noch nicht das dieser Hash schon geknackt wurde. Klar, Rainbow Tables vereinfachen und verschnelleren den Vorgang beim "entschlüsseln", trotzdem muss dieser Hash noch nicht entschlüsselt worden sein. Dein folgender Satz drückt genau das aus, was ich die ganze Zeit sagen will: | |
| | |
| | Nach oben #12 | |
| Martin Eisengardt Registriert seit: 30.03.2006 Ort: Pfinztal
Beiträge: 355
| Zitat:
Nun nutze man das System selbst. Man generiert also einen Account und robiert mehrere Passwörter aus. Dabei werden ja immer neue Hashes generiert. Man hat also mehrfache Zuordnungen zwischen Hashes und Passwörtern. Die gleichen Programme, die die Rainbow-Tables erzeugen können, sind auch in der Lage, unbekannte Hashes mit einzubeziehen, sobald du mehrere funktionierende Zuordnungen zwischen Hashes und Passwörtern hast. Für die Salts gilt auch, dass es mehrere Salts gibt, die gleich funktionieren, man also nicht zwingend den Salt kennen muss. Auch wenn die Wahrscheinlichkeit niedriger ist, einen funktionierenden Salt zu errechnen, so dass die Zeitdauer bzw. Rechenleistung deutlich steigt. Einen Schönheitsfehler hat das ganze "leider" (oder zum Glück) : Generiert man zufällige, gute Salts, klappt es nicht mehr. Insofern wären also Salts, die sich von User zu User unterscheiden, eine ziemlich stabile Lösung. Edith sagt: Wenn man aber pro User zufällige Salts mit einbezieht, muss man diese wiederum in der Datenbank irgendwie ablegen und daraus ergibt sich wiederum, dass einer, der in die Datenbank kommt, wieder leichtes Spiel hat.
__________________ Open Sourcing the Online Gaming Universe PHP/SQL/Java/C++/Assembler. Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html Geändert von mepeisen (28.11.2007 um 11:00 Uhr). | |
| | |
| | Nach oben #13 | |
| Neuer Benutzer Registriert seit: 10.11.2006 Ort: Hamburg
Beiträge: 20
| Zitat:
Das würde zwar die länge des Passwort verlängern, gäbe aber die Möglichkeit in der Generierung nochmals zu variieren. Man könnte die Salts vorne, hinten, in der Mitte oder sonst wo "verstecken". Wobei mir noch keine Stabile Lösung zum Dynamischen positionieren der Salts eingefallen ist. Derzeit denke ich über eine PrimeryKey Steuerung nach, wobei das eine "Reservierung" des PrimeryKey(zB ID) und somit eines Datensatzes erfordern würde Wie gesagt mir ist da noch nicht die zündelnde Idee gekommen. | |
| | |
| | Nach oben #14 |
| Jann Hendrik Bekaan Registriert seit: 02.12.2004 Ort: Wildeshausen
Beiträge: 2.203
|
Kann man nicht einfach den salt jedes Mal, wenn es einen erfolgreichen login gab austauschen und damit den md5-hash verändern? Wer dann den hash meines Passwortes hat (ggf. und salt) der kann damit dann nichts mehr anfangen, sofern er nicht länger direkten Zugriff auf die db hat.. Wäre das sinnvoll?
__________________ Umfragen: Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Danke! |
| | |
| | Nach oben #15 |
| Martin Eisengardt Registriert seit: 30.03.2006 Ort: Pfinztal
Beiträge: 355
|
Generell sind dynamische Salts quasi nicht zu knacken, wenn man keinen direkten Zugriff auf die DB hat und sie nicht irgendwo versehentlich zum Client geschludert werden. Und wenn sie dann sogar noch bei jedem neuen Login ausgetauscht werden, ist es noch unmöglicher. Aber wenn man einen MD5 des Passworts zum Client geschleust hat, kann den ein Trojaner auch immer noch klauen, auch wenn das MD5 bei einem Login-dynamischen Salt nur begrenzt gültig wäre. Alles, was man zum Client schaufelt, ist im Endeffekt unsicher.
__________________ Open Sourcing the Online Gaming Universe PHP/SQL/Java/C++/Assembler. Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html |
| | |
| | Nach oben #16 |
| Jann Hendrik Bekaan Registriert seit: 02.12.2004 Ort: Wildeshausen
Beiträge: 2.203
|
klar - alles was vom client kommt ist potentiell unsicher; egal ob man das dort sicher dort hinbekommen hat, oder nicht. Darauf beruht ja wohl auch das wichtigste Prinzip eines Angriffes...
__________________ Umfragen: Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Danke! |
| | |
| | Nach oben #17 |
| Neuer Benutzer Registriert seit: 10.11.2006 Ort: Hamburg
Beiträge: 20
|
In wie weit mach so was (siehe Beispiel) Sinn? PHP-Code: Was gebe ich den Benutzer als Keks zum Wiedererkennen bzw. Automatisch einloggen? Ich den da an eine Identity generiert aus UniqueFeld ( zB Email oder Benutzername ) , DatensatzID(?bei der ID bin ich mir noch nicht sooo sicher?) & LastLoginTimestamp ) und wie das Passwort gehasht. zusammen mit den Rohdaten in ein Array... serialize drüber und in den Keks packen. Beim Autologin kann man nachschauen ob die Cookie Daten in sich noch Konsistent sind und dann gegen die Datenbank prüfen... Ist etwas nicht Koscher kann man intern die Nötigen schritte ablaufen und nach außen hin dem Benutzer eine Fehlermeldung + Formular präsentieren. |
| | |
| | Nach oben #18 |
| Patrick Freitag Registriert seit: 17.08.2005
Beiträge: 118
|
Hälst du es für sinnvoll wenn du den Salt direkt vor/nach dem sha1-Hash ankettest? Ich weiß, du brauchst es wieder zum entsalzen, da würd ich mir jedoch was anderes überlegen. Außerdem würde ich noch immer md5 bevorzugen, sha1 wurde schon vor längerer Zeit geknackt. |
| | |
| | Nach oben #19 | |
| Neuer Benutzer Registriert seit: 10.11.2006 Ort: Hamburg
Beiträge: 20
| Zitat:
Ich bin noch am überlegen. Da in meinen Gedanken jeder User einen andres Salt bekommt muss ich bzw. die Applikation wissen wo es zu finden ist. Mit der Variante Salt mit in den Datensatz zu speichern kann ich mich noch weniger anfreunden. Und da wird es mit Alternativen knapp.... | |
| | |
| | Nach oben #20 |
| Martin Eisengardt Registriert seit: 30.03.2006 Ort: Pfinztal
Beiträge: 355
|
Zufallssteuerung ist ein witziges Thema. Also das Salz abhängig von einem Zufall, der sich aus einer Random-Funktion ergibt, erzeugen. Dann taucht er nicht mal in einer Datenbank auf. Man könnte den Random anhand der User-ID oder des registrierungszeitstempels initialisieren und dann eine Nummer in der Datenbank abspeichern, die immer mal geändert wird und angibt, die wievielte Zufallszahl für den Salt genutzt wird. Solche und ähnliche Spielereien sind dann quasi nicht mehr zu knacken. Und man braucht dann immer beides, sowohl Script als auch DB, um den zu knacken.
__________________ Open Sourcing the Online Gaming Universe PHP/SQL/Java/C++/Assembler. Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html |
| | |