Dieter: md5 encodieren

Hallo,

ich habe eine passwortabfrage die die vom User eingegebenen passwörter im md5 format zurückgibt... die codierten passwörter liegen in der DB...und werden nach der eingabe verglichen...

nun bleibt mir die frage wie ich das passwort in der DB wieder in uhrzustand bekommen?

Für den Fall das der User sein PW vergessen hat, um es ihm zuzusenden..

Oder bin ich gezwungen in der DB das Original und das md5 Codierte passwort zu speichern!?
Was ja für mich bedeuten würde das ich mir praktisch die md5 codierung sparen könnte, denn wenn ein kidy an die DB kommt hat er auch die passörter!

Danke für eure Hilfe

Grüsse

Dieter

  1. Hi,

    ich würde es einfacher machen:

    Sollte ein User sein Passwort vergessen, lässt Du einfach ein neues nach dem Zufallsprinzip erstellen und sendest ihm das per Mail zu.

    Mit einem entsprechenden Formular ließe sich das automatisieren.

    Andere Möglichkeit wäre das Verwenden einer reversiblen Verschlüsselung - davon halt ich persönlich im Falle von Passwörtern nichts.

    Gruß

    Axel

    1. Hi

      du kannst ein mit md5 verschlüsseltes PW nicht mehr zurückentschlüsseln.
      Also wie Axel schon sagte, du kannst dem user in diesem fall nur ein neues PW zuschicken.

      Gruss
      Carl

    2. Hallo Axel,

      Sollte ein User sein Passwort vergessen, lässt Du einfach ein neues nach dem Zufallsprinzip erstellen und sendest ihm das per Mail zu.

      Dabei darf man aber auf keinen Fall vergessen, dass dann bis zum nächsten Login auch das alte Passwort noch gilt. Erst beim Login wird entschieden, welches Passwort weiterhin das einzige gültige ist, nämlich genau das, welches bei diesem Login verwendet wurde.

      Sonst kommt irgend ein Unbefugter daher, der so tut, als ob er bei einem fremden Account das Passwort vergessen hat. Und wenn der eigentliche Inhaber des Accounts die E-Mail nicht bekommt (nicht jeder gibt seine haupt-E-Mail Adresse bei Registrierungen an), könnte dieser sich sonst nämlich nie mehr einloggen, weil das alte Passwort bereits verworfen wurde.

      Robert

  2. Hallo Dieter,

    nun bleibt mir die frage wie ich das passwort in der DB wieder in uhrzustand bekommen?

    Entschlüsseln kannst du das Passwort nicht, da md5 nicht unkehrbar ist.

    Für den Fall das der User sein PW vergessen hat, um es ihm zuzusenden..

    da musst du ihm einfach ein neues generieren.

    Oder bin ich gezwungen in der DB das Original und das md5 Codierte passwort zu speichern!?

    nein, das wäre ja nicht der sinn der Übung

    Was ja für mich bedeuten würde das ich mir praktisch die md5 codierung sparen könnte, denn wenn ein kidy an die DB kommt hat er auch die passörter!

    ja :-)

    Dass du weißt wie du eingegebene Passwort mit dem verschlüsselten in der DB vergleichst nehme ich jetzt einfach mal an. :-)

    Grüße aus Nürnberg
    Tobias

  3. Hallo an alle,

    erstmal danke an alle die geholfen haben ;-)

    Nun habe ich allerdings noch ein bedenken...

    Wenn ich mir das Bruteforce verfahren vor augen führe stelle ich mir dies so vor:::

    eine Liste mit Usern und Passwörtern ODER ein Programm das alle erdenklichen Zeichen reihenfolgen über meine Passwortfunktion in diesem falle das formular zur eingabe jagt..!?
    Wenn ich dort falsch liege berichtigt mich bitte?

    Also macht md5 doch nur das snifen der Daten direkt aus der Datenbank unmöglich oder?

    Also wenn jetzt jemand nach dem Bruteforce verfahren das richtige unkordierte passwort rausfindet bekommt er genauso zugang als hätte ich nicht md5 kodiert oder?

    Der vorgang meiner abfrage::

    formular-->>Passwort z.B. "Dieter" dieses nach md5 kodieren und mit dem kodierten passwort in der DB vergleichen....

    ist dies so richtig?

    Danke für eure Hilfe

    Grüsse Dieter

    1. Hallo Dieter,

      eine Liste mit Usern und Passwörtern ODER ein Programm das alle erdenklichen Zeichen reihenfolgen über meine Passwortfunktion in diesem falle das formular zur eingabe jagt..!?

      sorry, den Satz versteh ich nicht so ganz... aber ich glaube du willst wissen, ob man durch ausprobieren das Passwort rausbekommen kann :-)
      Prinzipiell ist das natürlich möglich aber so kannst du ja jeden Passwortschutz knacken. Abhilfe schaft da nur ein genügend sicheres Passwort (dazu gibt es ein Featureartikel ->[1]). Zusätzlich muss natürlich auch noch der Username herausgefunden werden und dann dürfte es natürlich schwierig werden.

      Also macht md5 doch nur das snifen der Daten direkt aus der Datenbank unmöglich oder?

      im prinzip ja.

      Also wenn jetzt jemand nach dem Bruteforce verfahren das richtige unkordierte passwort rausfindet bekommt er genauso zugang als hätte ich nicht md5 kodiert oder?

      wenn er das rausbekommt, war das Passwort zu schlecht :-) Die Wahrscheinlichkeit, dass die passwörter durch andere Methoden (Abhören der Leitung, über-die-Schulter-schauen) herausgefunden werden, ist, würde ich mal sagen, größer.

      formular-->>Passwort z.B. "Dieter" dieses nach md5 kodieren und mit dem kodierten passwort in der DB vergleichen....
      ist dies so richtig?

      ja.

      Grüße aus Nürnberg
      Tobias

      [1] http://aktuell.de.selfhtml.org/artikel/gedanken/passwort/index.htm

    2. Hallo,

      Also macht md5 doch nur das snifen der Daten direkt aus der Datenbank unmöglich oder?

      ja

      Also wenn jetzt jemand nach dem Bruteforce verfahren das richtige unkordierte passwort rausfindet bekommt er genauso zugang als hätte ich nicht md5 kodiert oder?

      ja, aber desto komplizierter das Passwort, desto Aufwendiger wird eine BruteForce Attack. Ein Passwort wie "hallo" ist nicht wirklich sicher.
      "agA#hdrK_+68%1ä2&"ܧ%!846%%(&" hingegen schon ;)

      ergänzend könntest du z.B. HTTPS einsetzen, um den Aufwand vom Mitsniffen des Passwortes für einen Hacker/ein Kiddy so zu erhöhen, dass du diese Sicherheitslücke auch noch abdeckst.

      formular-->>Passwort z.B. "Dieter" dieses nach md5 kodieren und mit dem kodierten passwort in der DB vergleichen....

      Evtl. könntest du das Passwort auch noch client-seitig mit JavaScript zu MD5 kodieren...

      PS: hoffe ich habe nix falsches Gesagt. Wenn, dann war das keine Absicht !

      Gruß,
      Benne

      1. Hallo Benne,

        "agA#hdrK_+68%1ä2&"ܧ%!846%%(&" hingegen schon ;)

        und du kannst dir das merken, ja? :-)

        ergänzend könntest du z.B. HTTPS einsetzen, um den Aufwand vom Mitsniffen des Passwortes für einen Hacker/ein Kiddy so zu erhöhen, dass du diese Sicherheitslücke auch noch abdeckst.

        ja, fragt sich nur, ob das für den Verwendungszweck von Dieter nicht etwas oversizede wäre :-)

        formular-->>Passwort z.B. "Dieter" dieses nach md5 kodieren und mit dem kodierten passwort in der DB vergleichen....
        Evtl. könntest du das Passwort auch noch client-seitig mit JavaScript zu MD5 kodieren...

        und woher weiß der Server dann, ob es schon codiert wurde (möglicherweise kein js) - gut, man könnte auch prüfen, ob das (nochmal) verschlüsselte oder das übergebene richtig ist...

        PS: hoffe ich habe nix falsches Gesagt. Wenn, dann war das keine Absicht !

        würde ich dir auch nicht unterstellen :-)

        Grüße aus Nürnberg
        Tobias

        1. Hi

          "agA#hdrK_+68%1ä2&"ܧ%!846%%(&" kannst du dir das merken, ja? :-)

          ich nicht, aber der Passwort Manager von Mozilla schon ;)

          ja, fragt sich nur, ob HTTPS für den Verwendungszweck von Dieter nicht etwas oversizede wäre :-)

          ich weiß ja nicht, was Dieter machen will.
          Aber du hast Recht, in den meisten Fällen ist HTTPS nicht verfügbar.

          Evtl. könntest du das Passwort auch noch client-seitig mit JavaScript zu MD5 kodieren...
          und woher weiß der Server dann, ob es schon codiert wurde (möglicherweise kein js) - gut, man könnte auch prüfen, ob das (nochmal) verschlüsselte oder das übergebene richtig ist...

          die Umsetzung wäre dann das Problem von Dieter ;)
          Evtl. könnte man ja mit js noch einen Parameter setzen, der dann definiert, ob JS available, oder nicht.

          PS: hoffe ich habe nix falsches Gesagt. Wenn, dann war das keine Absicht !
          würde ich dir auch nicht unterstellen :-)

          es gab halt vor kurzer Zeit ein Aufsehen erregendes Posting, in dem Unterstellt wurde, dass manche User wissentlich Falschangaben machen.

          Gruß,
          Benne

          1. Hallo Benne,

            "agA#hdrK_+68%1ä2&"ܧ%!846%%(&" kannst du dir das merken, ja? :-)
            ich nicht, aber der Passwort Manager von Mozilla schon ;)

            *grmpf* das halte ich aber für keine gute Idee die Passwörter auf der Festplatte zu speichern (gut, mach ich auch gelegentlich, aber nur mit unwichtigen Passwörtern)

            und woher weiß der Server dann, ob es schon codiert wurde (möglicherweise kein js) - gut, man könnte auch prüfen, ob das (nochmal) verschlüsselte oder das übergebene richtig ist...
            die Umsetzung wäre dann das Problem von Dieter ;)

            jep :-)

            Evtl. könnte man ja mit js noch einen Parameter setzen, der dann definiert, ob JS available, oder nicht.

            mhh... wie willt du den setzen?

            PS: hoffe ich habe nix falsches Gesagt. Wenn, dann war das keine Absicht !
            würde ich dir auch nicht unterstellen :-)
            es gab halt vor kurzer Zeit ein Aufsehen erregendes Posting, in dem Unterstellt wurde, dass manche User wissentlich Falschangaben machen.

            welches? Wenn es unterstellt wurde, heißt das ja noch lange nicht, dass es so ist. Ich kann mir jetzt aber auch nicht vorstellen dass jemand wissentlich Falschangaben macht (zumindest nicht jemand von den Stammpostern) die unwissentlichen Falschangaben sind natürlich was anderes :-) - da habe ich auch gelegentlich schon was nicht (ganz) richtiges gesagt (wobei mich dann jemand aufgeklärt hat :-)).

            Grüße aus Nürnberg
            Tobias

            1. Moin,

              *grmpf* das halte ich aber für keine gute Idee die Passwörter auf der Festplatte zu speichern

              Die legt man deshalb auch auf ein verschlüsseltes Dateisystem. Bei Mozilla zum Beispiel muß man die beiden Dateien mit dem komischen Namen (sowas wie 78164022.s 92837029.w, letztere eher optional) dorthin verschieben und einen symbolischen Link von ihrer alten auf die neue Position setzen. So funktioniert das mit den meisten Programmen, einzig fetchmail weigert sich einen symbolischen Link als Konfigurationsdatei zu aktzeptieren, das muss man mit dem Parameter  -f PfadZurDatei  zu seinem Glück zwingen. Bei der Gelegenheit wandern natürlich auch die privaten GPG-Schlüssel und SSH-Keyfiles auf den sicheren Speicher.

              Evtl. könnte man ja mit js noch einen Parameter setzen, der dann definiert, ob JS available, oder nicht.
              mhh... wie willt du den setzen?

              Mit JavaScript ?!?

              --
              Henryk Plötz
              Grüße aus Berlin
    3. Moin,

      Also wenn jetzt jemand nach dem Bruteforce verfahren das richtige unkordierte passwort rausfindet bekommt er genauso zugang als hätte ich nicht md5 kodiert oder?

      _Das_ Passwort kann er aus dem MD5-Hash nicht mehr extrahieren, da MD5-Summen eine feste Länge haben, die Eingabe jedoch unbegrenzt lang sein kann. Also gibt es potentiell unendlich viele Passwörter die den selben MD5-Hash haben und nur aus einem Hash kannst du nicht rekonstruieren welches die Eingabe war. (Jedenfalls kannst du nicht ohne weiteres beweisen dass deine Rekontruktion die einzig mögliche ist.)

      Abgesehen davon hast du natürlich recht, dass man durch Brute Force eine Kollision (== zwei Eingaben mit dem gleichen Hash) finden kann, du musst nur 2^128+1 = 340282366920938463463374607431768211457 verschiedene Eingaben ausprobieren um ganz sicher Eine zu bekommen. Im Durschnitt wirst du 'schon' nach 170141183460469231731687303715884105730 Versuchen eine Kollision haben.

      Nehmen wir jetzt mal den unwahrscheinlichen Fall, dass dein 2 GHz-Prozessor in jedem Taktschritt ein Passwort probieren könnte, wären das 85070591730234615865843651857.942... Sekunden, also 2697570767701503547242.632... Jahre. Unser Sonnensystem hat eine geschätzte Restlebenszeit von 4500000000 Jahren. Sicher genug?

      (Wenn du mehr Rechner draufwirfst bringen die nur im optimalen Fall eine lineare Verbesserung, also doppelt so viele Rechner schaffen das allerhöchstens in halber Zeit, eher mehr.)

      Das alles gilt jetzt für das Finden von Kollisionen allgemein. Um eine Eingabe zu finden die einen vorgegebenen Hash erzeugt, kannst du unter Umständen länger oder weniger lange brauchen, falls der Hash den du gegeben hast selten oder häufig vorkommt. Eigentlich ist aber eine Gleichverteilung für die meisten Kryptosysteme am günstigsten, also rechne ich damit, dass auch MD5 darauf ausgelegt ist, alle Hashes gleich häufig auftreten zu lassen.

      Eine Anmerkung dazu: Diese Zahlen gelten nur, wenn du davon ausgehst, dass Brute Force der beste Algorithmus ist (ist meines Wissens nach zur Zeit so). Man kann aber theoretisch den MD5-Algorithmus in eine riesige Formel packen (ist soweit ich mich erinnern kann auch schon geschehen) und dann versuchen daraus eine Umkehrfunktion zu basteln. Da die Formel aber ekelhaft groß ist, wird es wohl noch eine Weile dauern bis man damit Erfolg hat.

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