Patrick: md5() verschlüsselung entschlüsseln

Hallo
Ich habe jetzt bei meinem login eine md5() verschlüsselung für die passwörter eingebaut.

mein problem ist jetzt wie kann der user sich das passwort schicken lassen wenn er es vergessen hat? habs jetzt nur so das er die haxadezimal zahl bekommt aber er soll ja sein passwort geschickt bekommen.

was kann ich machen?

Mit freundlichen Grüssen,
Patrick

  1. Hallo,

    Ich habe jetzt bei meinem login eine md5() verschlüsselung für die passwörter eingebaut.
    mein problem ist jetzt wie kann der user sich das passwort schicken lassen wenn er es vergessen hat? habs jetzt nur so das er die haxadezimal zahl bekommt aber er soll ja sein passwort geschickt bekommen.
    was kann ich machen?

    [pref:t=54303&m=301587] lesen.

    Grüße aus Barsinghausen,
    Fabian

  2. Hallo Patrick,

    mein problem ist jetzt wie kann der user sich das passwort schicken lassen wenn er es vergessen hat?

    Gar nicht. MD5 ist eine Einwegverschlüsselung. In der aktuellen Hauptdatei dürfte folgender Thread zum Thema lesenswert sein: [pref:t=54303&m=301587] Falls er später ins Archiv wandert, wird er unter </archiv/2003/8/54303/#m301587> zu erreichen sein.

    was kann ich machen?

    Du könntest ihm auf Anfrage ein temporäres neues Passwort erzeugen, das Du ihm dann schickst. Das temporäre Passwort sollte aber extra gespeichert werden, falls die Person, die das Passwort schicken lässt, nicht gleichzeitig die Person ist, die den Account besitzt. Beim Login müsstest Du dann halt zusätzlich nachschauen, ob ein solches temporäres Passwort existiert. Wenn ja, dann darf sich der Benutzer auch einloggen, allerdings sollte er als erstes sein Passwort wieder ändern müssen. Das temporäre Passwort sollte bei nichtbenutzung (weil der Benutzer es z.B. gar nicht selbst angefordert hat) nach ein paar Tagen verfallen.

    Viele Grüße,
    Christian

    1. Hallo

      ja hab mir den tread eben durchgelesen.

      ja gut also kann ich es nicht rückgängig machen. was wäre denn am besten und am einfachsten einen login mit einer verschlüsslung nachzurüsten?

      weil mit dem temporären passwort und so das hört sich wieder nach arbeit an.

      danke schonmal!

      Mit freundlichen Grüssen,
      Patrick

      1. Hallo Patrick,

        ja gut also kann ich es nicht rückgängig machen. was wäre denn am besten und am einfachsten einen login mit einer verschlüsslung nachzurüsten?

        "Nachzurüsten"?

        Wenn Du eine "Quick&Dirty"-"Lösung" willst: Du könntest alle neu gesetzten Passwörter nicht mehr verschlüsselt speichern, dann hättest Du das Problem nicht mehr... In einer Übergangsphase prüfst Du noch, ob das Passwort gleich MD5(eingabe) oder einfach nur gleich eingabe ist. Halt bis alle Leute ihr Passwort einmal geändert haben.

        Die mit temporärem Passwort halte ich aber für sinnvoller, die ist allerdings auch etwas mehr Arbeit, allerdings auch nicht wirklich viel mehr.

        Viele Grüße,
        Christian

        1. Hallo

          Die mit temporärem Passwort halte ich aber für sinnvoller, die ist allerdings auch etwas mehr Arbeit, allerdings auch nicht wirklich viel mehr.

          ja gut werde mir das mal überlegen. wie erstelle ich denn ein temporäres passwort? und wie kann ich es verfallen lassen nach einer zeit?

          Mit freundlichen Grüssen,
          Patrick

          1. Hallo,

            Die mit temporärem Passwort halte ich aber für sinnvoller, die ist allerdings auch etwas mehr Arbeit, allerdings auch nicht wirklich viel mehr.
            ja gut werde mir das mal überlegen. wie erstelle ich denn ein temporäres passwort? und wie kann ich es verfallen lassen nach einer zeit?

            z.B. md5(mailadresse+timestamp), womit ich mit dem "+" eine Verkettung meine (nicht Addition)!

            Gruß
            Reiner

          2. Hallo Patrick,

            ja gut werde mir das mal überlegen. wie erstelle ich denn ein temporäres passwort?

            Du könntest eine Zufallszahl erzeugen und diese dann selbst durch md5 jagen.

            Also:

            MD5
            Zufallszahl    ----->    temp. Passwort
                                       /    \                    Email  /      \  MD5
                                     /        \                         v          v
                              Benutzer        Datenbank

            und wie kann ich es verfallen lassen nach einer zeit?

            Du speicherst es in einer Tabelle, in der Du auch speicherst, wann das Passwort generiert wurde. Wenn sich der Benutzer nun mit dem temporären Passwort versucht einzuloggen, wird nicht nur geschaut, ob das Passwort übereinstimmt, sondern auch, ob der Zeitpunkt des Erstellens des Passworts noch innerhalb eines gewissen Zeitraumes liegt. Wenn dem nicht der Fall ist, verweigerst Du den Zugang. Du solltest desweiteren bei jedem erfolgreichen Login alle eventuell vorhandenen temporären Passwörter für den Benutzer löschen, damit die nicht ewig als "Leichen" in der Datenbank rumliegen. Außerdem solltest Du Dir beim Login mit einem temporären Passwort merken, dass dieser Login "besonders" war, damit der Benutzer sein Passwort ändern kann, ohne sein altes zu kennen. (die Markierung "besonders" kannst Du in der Session als Variable speichern) Schließlich hat er das ja vergessen. Sobald der Benutzer sein Passwort geändert hat, löscht Du diese Variable sicherheitshalber wieder aus der Session.

            Viele Grüße,
            Christian

            1. Hallo

              Du könntest eine Zufallszahl erzeugen und diese dann selbst durch md5 jagen.

              Also:

              MD5
              Zufallszahl    ----->    temp. Passwort
                                         /    \                    Email  /      \  MD5
                                       /        \                         v          v
                                Benutzer        Datenbank

              aber dann bekommt der user ja eine 32 stellige hexadezimalzahl oder hab ich was falsch verstanden?

              und wie kann ich es verfallen lassen nach einer zeit?

              Du speicherst es in einer Tabelle, in der Du auch speicherst, wann das Passwort generiert wurde. Wenn sich der Benutzer nun mit dem temporären Passwort versucht einzuloggen, wird nicht nur geschaut, ob das Passwort übereinstimmt, sondern auch, ob der Zeitpunkt des Erstellens des Passworts noch innerhalb eines gewissen Zeitraumes liegt. Wenn dem nicht der Fall ist, verweigerst Du den Zugang. Du solltest desweiteren bei jedem erfolgreichen Login alle eventuell vorhandenen temporären Passwörter für den Benutzer löschen, damit die nicht ewig als "Leichen" in der Datenbank rumliegen. Außerdem solltest Du Dir beim Login mit einem temporären Passwort merken, dass dieser Login "besonders" war, damit der Benutzer sein Passwort ändern kann, ohne sein altes zu kennen. (die Markierung "besonders" kannst Du in der Session als Variable speichern) Schließlich hat er das ja vergessen. Sobald der Benutzer sein Passwort geändert hat, löscht Du diese Variable sicherheitshalber wieder aus der Session.

              ok das wird zwar wieder arbeit sein aber das beste. also die passwörter immer in md5-hash in der db speichern oder?

              Mit freundlichen Grüssen,
              Patrick

              1. Hallo Patrick,

                aber dann bekommt der user ja eine 32 stellige hexadezimalzahl oder hab ich was falsch verstanden?

                Du kannst auch mit $temp_pw = substr ($temp_pw, 0, 12); nur die ersten 12 Zeichen oder so etwas nehmen, falls Dir 32 zu lang ist. Sollte halt nur nicht zu kurz sein, sonst kann es jemand leicht knacken, ohne die Mail abfangen zu müssen.

                also die passwörter immer in md5-hash in der db speichern oder?

                Halte ich durchaus für sinnvoll. Es gibt aber auch für- und wider; im Archiv findest Du zum Thema auch einiges.

                Viele Grüße,
                Christian

                1. Hallo

                  Du kannst auch mit $temp_pw = substr ($temp_pw, 0, 12); nur die ersten 12 Zeichen oder so etwas nehmen, falls Dir 32 zu lang ist. Sollte halt nur nicht zu kurz sein, sonst kann es jemand leicht knacken, ohne die Mail abfangen zu müssen.

                  was wäre denn so das kürzeste was noch akzeptabel wär?

                  also die passwörter immer in md5-hash in der db speichern oder?

                  Halte ich durchaus für sinnvoll. Es gibt aber auch für- und wider; im Archiv findest Du zum Thema auch einiges.

                  hab da ja ein tread schon zu gelesen. kann es an md5 liegen wenn sich einer anmeldet mit passwort und sich dann einloggen will und es klappt nicht? also das passw wird in einer db gespeichert und wird beim einloggen mit md5 verschlüsselt und dann mit dem aus der db verglichen!

                  Mit freundlichen Grüssen,
                  Patrick

                  1. Hallo Patrick,

                    was wäre denn so das kürzeste was noch akzeptabel wär?

                    Mal rechnen: Wenn wir von einer ziemlich schlimmen Brute-Force-Attacke ausgehen mit 100 Anfragen pro Sekunde bei 3600 Sekunden pro Stunde und 24 Stunden pro Tag und 14 Tagen Zeit, dann könnte der Angreifer *auf jeden Fall* ein Passwort von der Länge

                    log_2(100*3600*24*14) ~ 27 bit

                    knacken. Das sind 3.375 Byte. Ein MD5-Hash in "lesbarer" Form brauch aber 2 Bytes, um 1 Byte darzustellen. Folglich wird der Angreifer bei 6.75 Bytes des MD5-Hashes auf *jeden* Fall Erfolg haben. Bei den ersten 8 Zeichen eines Hashes dürfte es für den Gebrauch als temporäres Passwort ziemlich sicher sein. Im Übrigen ist meine Rechnung natürlich extrem übertrieben, Du kannst gerne realistischere Werte einsetzen.

                    hab da ja ein tread schon zu gelesen. kann es an md5 liegen wenn sich einer anmeldet mit passwort und sich dann einloggen will und es klappt nicht? also das passw wird in einer db gespeichert und wird beim einloggen mit md5 verschlüsselt und dann mit dem aus der db verglichen!

                    Dann liegt es mit Sicherheit nicht an MD5, sofern das Passwort auch mit MD5 in der DB abgespeichert wurde. Dann liegt es eher an etwas anderem. Eine genaue Fehlerdiagnose ist allerdings nicht möglich.

                    Viele Grüße,
                    Christian

    2. Moin,

      Gar nicht. MD5 ist eine Einwegverschlüsselung.

      Nein ist sie nicht. Es ist bestenfalls eine Einwegfunktion oder ein Hash. Wenn die Leute endlich aufhören würden MD5 als Verschlüsselung zu bezeichnen, würden sich auch diese Fragen erübrigen. Das ist ja schlimmer als "if-Schleifen".

      --
      Henryk Plötz
      Grüße aus Berlin
      ~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
      ~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~
      1. Hallo Henryk,

        Vorneweg: ich werde mich bessern und in Zukunft versuchen, das Wort "Einwegverschlüsselung" nicht mehr in die Finger zu nehmen.

        Wenn die Leute endlich aufhören würden MD5 als Verschlüsselung zu bezeichnen, würden sich auch diese Fragen erübrigen.

        Allerdings muss ich hier dazu sagen, dass sich die Fragen dadurch nicht erübrigen werden. Denn dann fragen die Leute halt nach "MD5 enthashen" statt "MD5 entschlüsseln" - denn auch bei Anwendung korrekter Terminologie ist ein Grundverständnis nicht automatisch vorrausgesetzt.

        Desweiteren: Ich wußte zwar, was MD5 an sich ist, aber dass "Einwegverslüsselung" kein korrekter Terminus dafür ist, war mir nicht bekannt. (ich habe allerdings nie großartig darüber nachgedacht; sonst wäre ich vielleicht von alleine darauf gekommen. Achja, da wir gerade dabei sind, konsequenterweise wäre ja crypt(3) eine Einwegverschlüsselung, da hier ja wirklich mit einem Schlüssel etwas chiffriert wird, oder? Oder impliziert Verschlüsselung auch immer die Möglichkeit der Entschlüsselung?)

        "if-Schleifen".

        BTW: Wer hat diesen Ausdruck eigentlich erfunden?

        Viele Grüße,
        Christian