Real: Login mit MD5 Verschlüsselung

Hallo Leute,

Ich hab da volgendes Problem:
Ich möchte ein login machen, welches verschlüsselt läuft.
Dazu habe ich das Beispiel mit der MD5 Quersummen Berechnug auf der Seite benutzt. Ich habe zwei Felder definiert Name und Passwort. Diese Zwei verbinde ich zu einem String und verschlüssele sie. Das funktioniert auch. Nun möchte ich dieses Verschlüsselte Passwort an ein php Login schicken. Das Problem ist nur, dass es mir den Namen, das Passwort und das Verschlüsselte Passwort schickt. Ich möchte aber nur das verschlüsselte Passwort schicken.

Quelltext:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<TITLE>Login</TITLE>
<link href="style.css" rel="stylesheet" type="text/css">
<script language="javascript" src="md5.js"></script>
<script language="javascript">
<!--
  function doChallengeResponse() {
    str = document.login.user.value+"*"+document.login.pass.value;
    document.login.response.value = MD5(str);
    document.login.password.value = "";

}
// -->
</script>
</head>

<body>

<div id="index">
<form action="login.php" method="post" name="login">
Benutzer:
<input type="text" name="user" size=32 maxlength=32><br>
Passwort:
<input type="password" name="pass" size=32 maxlength=32><br>
<input onClick="doChallengeResponse(); return false;" type="submit" name="submitbtn" value="Login now">
MD5-Antwort: <input type="text" name="response"  value="" size=32>
</form>

</body>
</html>

  1. Dazu habe ich das Beispiel mit der MD5 Quersummen Berechnug auf der Seite benutzt. Ich habe zwei Felder definiert Name und Passwort. Diese Zwei verbinde ich zu einem String und verschlüssele sie. Das funktioniert auch. Nun möchte ich dieses Verschlüsselte Passwort an ein php Login schicken. Das Problem ist nur, dass es mir den Namen, das Passwort und das Verschlüsselte Passwort schickt. Ich möchte aber nur das verschlüsselte Passwort schicken.

    Ein neues Formular mit einem hidden-Field erzeugen, den Wert da reinschreiben und das abschicken.

  2. Sup!

    Du solltest die Felder fuer Name und Passwort vor dem Senden loeschen und/oder auf "disabled" setzen.

    Dir sollte klar sein, dass jemand, der das md5-verschluesselte Gesamt-Passwort abfaengt, sich auch ohne Kenntnis des Usernamens und Passworts einloggen kann.
    Gegen Belauschen der Verbindung wuerde nur SSL helfen.

    Und Du wirst bei vielen Nutzern Probleme bekommen, weil Du das md5-verschluesselte Gesamtpasswort mit allen gespeicherten Gesamtpassworten wirst vergleichen muessen, weil du ja nicht weisst, zu welchem Namen das Passwort gehoert.

    Gruesse,

    Bio

    --
    Elite ist mein zweiter Vorname
    1. Sup!

      Du solltest die Felder fuer Name und Passwort vor dem Senden loeschen und/oder auf "disabled" setzen.

      Dir sollte klar sein, dass jemand, der das md5-verschluesselte Gesamt-Passwort abfaengt, sich auch ohne Kenntnis des Usernamens und Passworts einloggen kann.
      Gegen Belauschen der Verbindung wuerde nur SSL helfen.

      http://forum.de.selfhtml.org/?t=63053&m=356998
      Ich kann leider kein SSL benutzen, desshalb muss ich auf ein sicheres login ausweichen.

      Und Du wirst bei vielen Nutzern Probleme bekommen, weil Du das md5-verschluesselte Gesamtpasswort mit allen gespeicherten Gesamtpassworten wirst vergleichen muessen, weil du ja nicht weisst, zu welchem Namen das Passwort gehoert.

      Stimmt. Habe ich vergessen. Nur das Passwort sollte nicht gesendet werden.

      Gruesse,

      Bio

      Danke

      1. Dann benutze einen SSL Proxy!
        Google Hilft bei der Suche!

        1. Dann benutze einen SSL Proxy!
          Google Hilft bei der Suche!

          Aber dann wäre die Verbindung zwischen SSL Proxy und dem Webserver trotzdem nicht verschlüsselt.

      2. Moin!

        Ich kann leider kein SSL benutzen, desshalb muss ich auf ein sicheres login ausweichen.

        Kannst du mal skizzieren, gegen welche Art von Angriffen du dich absichern willst? Ich habe im Moment noch den Eindruck, du bastelst hier wild irgendwas, was den Anschein von "sicher" hat, hast aber nicht wirklich einen Plan, wogegen du dich eigentlich absichern willst.

        - Sven Rautenberg

        --
        "Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
        (fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)
    2. Sup!

      Du solltest die Felder fuer Name und Passwort vor dem Senden loeschen und/oder auf "disabled" setzen.

      Wie lösche ich das Passwort?

      Dir sollte klar sein, dass jemand, der das md5-verschluesselte Gesamt-Passwort abfaengt, sich auch ohne Kenntnis des Usernamens und Passworts einloggen kann.
      Gegen Belauschen der Verbindung wuerde nur SSL helfen.

      Und Du wirst bei vielen Nutzern Probleme bekommen, weil Du das md5-verschluesselte Gesamtpasswort mit allen gespeicherten Gesamtpassworten wirst vergleichen muessen, weil du ja nicht weisst, zu welchem Namen das Passwort gehoert.

      Gruesse,

      Bio

      1. hi,

        Du solltest die Felder fuer Name und Passwort vor dem Senden loeschen und/oder auf "disabled" setzen.

        Wie lösche ich das Passwort?

        wengistens das solltest du aber eigentlich selber wissen ...
        http://selfhtml.teamone.de/javascript/objekte/elements.htm#value

        gruss,
        wahsaga

  3. Moin!

    Ich möchte ein login machen, welches verschlüsselt läuft.

    Toll. Benutze SSL dafür. Alles andere funktioniert _nicht_.

    Dazu habe ich das Beispiel mit der MD5 Quersummen Berechnug auf der Seite benutzt. Ich habe zwei Felder definiert Name und Passwort. Diese Zwei verbinde ich zu einem String und verschlüssele sie. Das funktioniert auch. Nun möchte ich dieses Verschlüsselte Passwort an ein php Login schicken. Das Problem ist nur, dass es mir den Namen, das Passwort und das Verschlüsselte Passwort schickt. Ich möchte aber nur das verschlüsselte Passwort schicken.

    Das Problem ist, dass du aus MD5 niemals wieder die Originalwerte gewinnen kannst. Du mußt den MD5-String also so nehmen, wie er ist, und kannst ihn dann gerne direkt abspeichern und beim späteren Login wieder vergleichen, aber das ändert an einer Tatsache nichts: Der MD5-String wird unverschlüsselt über das Internet übertragen, und jeder, der den String kennt, kennt das Passwort, denn ob der "MD5-String" tatsächlich ein MD5-codiertes Passwort ist, oder ob sich jemand so ein Passwort nur ausgedacht hat, ist irrelevant. Das kann der Server nicht unterscheiden.

    - Sven Rautenberg

    --
    "Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
    (fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)
    1. Hallo,

      Toll. Benutze SSL dafür. Alles andere funktioniert _nicht_.

      Falsch. Es ist möglich über ein sog. challenge Verfahren das Passwort mit MD5 zu verschlüsseln. Nur leider fehlt dem Skript ein challenge. Nur Benutzername und Passwort zu konkatenieren und dann die MD5 Prüfsumme verschicken ist fast genauso unsicher, wie die Daten per Klartext zu versenden.

      So gehts richtig: Der Server generiert einen challenge-String (z.B. 32 Zufallszeichen) und sendet den zusammen mit der Loginaufforderung an den Client. Der berechnet dann die Prüfsumme zu username + password + challengestr. Diese wird an den Server gesendet. Jemand, der den Netzwerkverkehr abhorcht, kann so niemals das Passwort herausbekommen und sich somit auch nicht anmelden.

      Mit freundlichen Grüßen,
      Michael Nagler

      1. So gehts richtig: Der Server generiert einen challenge-String (z.B. 32 Zufallszeichen) und sendet den zusammen mit der Loginaufforderung an den Client. Der berechnet dann die Prüfsumme zu username + password + challengestr. Diese wird an den Server gesendet. Jemand, der den Netzwerkverkehr abhorcht, kann so niemals das Passwort herausbekommen und sich somit auch nicht anmelden.

        Mit welcher Technologie soll der Client was berechnen?
        Und wie willst Du ausschliessen das dies der Nutzer nicht beeinflußen kann?
        Nö nö nö so ganz einfach wie Du dies vorschlägst geht es nicht!
        Warum benutzt Du nicht SSL?

        Viele Grüße aus Berlin

        1. So gehts richtig: Der Server generiert einen challenge-String (z.B. 32 Zufallszeichen) und sendet den zusammen mit der Loginaufforderung an den Client. Der berechnet dann die Prüfsumme zu username + password + challengestr. Diese wird an den Server gesendet. Jemand, der den Netzwerkverkehr abhorcht, kann so niemals das Passwort herausbekommen und sich somit auch nicht anmelden.

          Mit welcher Technologie soll der Client was berechnen?
          Und wie willst Du ausschliessen das dies der Nutzer nicht beeinflußen kann?
          Nö nö nö so ganz einfach wie Du dies vorschlägst geht es nicht!
          Warum benutzt Du nicht SSL?

          Viele Grüße aus Berlin

          Also ich mir das so vorgestellt:
          Der Server hat ein MD5 Verschlüsseltes Passwort in einer Datenbank gespeichert. Nun generiert er ein UNIX Timestamp, fügt ihn mit dem Passwort zusammen und berechnet nun die MD5 Quersumme. Nun schickt er den Timestamp an den Client. Dieser führt nun die Selbe berechnung mit dem Timestamp und dem Passwort durch und schickt das Resultat an den Server. Somit ist ein sicheres Login gewährleisten. Durch sniffing ist das Passwort nicht herausfindbar, da jedes mal ein anderes Resultat an der Server geschickt wird.

          Gruss

          1. Also ich mir das so vorgestellt:
            Der Server hat ein MD5 Verschlüsseltes Passwort in einer Datenbank gespeichert. Nun generiert er ein UNIX Timestamp, fügt ihn mit dem Passwort zusammen und berechnet nun die MD5 Quersumme. Nun schickt er den Timestamp an den Client. Dieser führt nun die Selbe berechnung mit dem Timestamp und dem Passwort durch und schickt das Resultat an den Server. Somit ist ein sicheres Login gewährleisten.

            Womit führt der client die Berechnung durch?
            Ideen wie man so etwas sicher lösen könnte hab ich ne ganze Reihe.
            Nur die Technologie setzt mir die Grenzen.

            Tom

            1. Also ich mir das so vorgestellt:
              Der Server hat ein MD5 Verschlüsseltes Passwort in einer Datenbank gespeichert. Nun generiert er ein UNIX Timestamp, fügt ihn mit dem Passwort zusammen und berechnet nun die MD5 Quersumme. Nun schickt er den Timestamp an den Client. Dieser führt nun die Selbe berechnung mit dem Timestamp und dem Passwort durch und schickt das Resultat an den Server. Somit ist ein sicheres Login gewährleisten.

              Womit führt der client die Berechnung durch?
              Ideen wie man so etwas sicher lösen könnte hab ich ne ganze Reihe.
              Nur die Technologie setzt mir die Grenzen.

              Tom

              Es gibt ein Java Script welches ein String MD5 Verschlüsselt. Das funktioniert auch, nur wird das Passwort im Form Feld auch gesentet. Ich hab mir gedacht, mit JavaScript zwei Felder zu machen und die dan Md5 verschlüsseln und das Resultat an den Server zu schicken. Hab aber keine Ahnung wie man das machen könnte

              1. hi,

                Ich hab mir gedacht, mit JavaScript zwei Felder zu machen und die dan Md5 verschlüsseln und das Resultat an den Server zu schicken. Hab aber keine Ahnung wie man das machen könnte

                wie schickst du daten an den server?
                am einfachsten mit einem formularfeld, in diesem falle bietet sich type=hidden an, wo du vorher den wert per JS reingeschrieben hast.

                was du machst, damit die originalwerte von username und passwort nicht mitgeschickt werden, hat dir Bio ja hier [pref:t=63053&m=356972] schon gesagt.

                gruss,
                wahsaga

      2. Moin,

        So gehts richtig: Der Server generiert einen challenge-String (z.B. 32 Zufallszeichen) und sendet den zusammen mit der Loginaufforderung an den Client. Der berechnet dann die Prüfsumme zu username + password + challengestr. Diese wird an den Server gesendet. Jemand, der den Netzwerkverkehr abhorcht, kann so niemals das Passwort herausbekommen und sich somit auch nicht anmelden.

        Hmm, dann kann man es auch gleich richtig machen, Digest Access Authentification benutzen und sich das JavaScript dort hin stecken wo die Sonne nicht scheint.

        Ist aber schon richtig: nur MD5 über das Passwort bringt genau _nichts_, wenn es nicht nur oberflächlich sicher aussehen soll, muß man Digest Auth oder HTTPS benutzen. Wobei der IE ja wieder weder RFC 2069 noch 2617 richtig hinkriegt, aber darüber habe ich ja im Archiv schon genug grauenerregendes erzählt.

        --
        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! ~~
      3. Moin!

        So gehts richtig: Der Server generiert einen challenge-String (z.B. 32 Zufallszeichen) und sendet den zusammen mit der Loginaufforderung an den Client. Der berechnet dann die Prüfsumme zu username + password + challengestr. Diese wird an den Server gesendet. Jemand, der den Netzwerkverkehr abhorcht, kann so niemals das Passwort herausbekommen und sich somit auch nicht anmelden.

        Bleibt nur noch die Frage: Wie prüft der Server die richtige Challenge-Antwort? Dazu braucht er das Passwort im Klartext vorliegend, damit sowohl Client als auch Server die folgende Formel anwenden können: Username+Passwort+Challenge = MD5-Hash. Mit Kenntnis von Username und MD5-Hash kann der Server das Klartextpasswort feststellen und prüfen.

        Aber die entscheidende Frage ist: Wie kommt das Klartextpasswort auf den Server?

        Es ist unmöglich, das Passwort sicher zu übertragen. Entweder generiert der Server ein Passwort - dann muß er es dem Benutzer im Klartext mitteilen (hier PGP o.ä für Mail zu verwenden wäre möglich, aber eher unsinnig). Und wenn der Client ein (neues) Passwort übermittelt, muß das ebenfalls im Klartext geschehen.

        Klar wird das Risiko minimiert, weil die Zahl der Klartext-Passwortübertragungen reduziert wird, aber wenn jemand durch Lauschen angreifen kann, dann kann er das auch über einen längeren Zeitraum und kriegt mit Sicherheit einzelne Passworte mit.

        - Sven Rautenberg

        --
        "Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
        (fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)