Pipolino: Passwortverschlüsselung, so gehts!

Liebe SELHTMLerinnen

Aus aktuellem Anlaß will ich hier mal kurz erklären wie man eine halbwegs vernünftige Passwortverschlüsselung mit Javascript basteln kann (und zwar ohne die rechte Maustaste zu sperren und ohne pseudo gif's)

Viele (auch ich) haben nicht die Möglichkeit mit .htacces oder cgi-scripts zu arbeiten. Allerdings ist das auch nicht immer notwendig. Wenn es nur darum geht einen privaten Bereich einzurichten, bei dem es letztendlich egal ist ob er gehackt wird oder eine Rätselseite wo es darum geht den User davor zu bewahren sich selbst zu beschummeln ist JS völlig ausreichend. (die Kontonummer von Bill Gates würde ich allerdings so nicht schützen!)

Leider ist das alles nicht auf meinem Mist gewachsen und die Zutaten kommen von:
http://www.teamone.de/selfaktuell/artikel/javascript/md5/index.htm = MD5 verschlüsselung
und http://www.teamone.de/selfhtml/tq.htm = einfachste Passwortabfrage

Und so gehts:

  • überlege Dir zuerst das Passwort (=PW) (zb. javascriptverrenkung)

  • erstelle die geheime Datei und nenne sie: javascriptverrenkung.htm (bzw. .html)

  • gib das PW in den MD5-Verschlüssler (Link s.o.) ein. Du erhälst einen sog. Hashwert (den nenn ich mal RH, für RichtigenHashwert) (in diesem Beispiel ist das:697dc25c71b8b6ee6da50453f731c070)

  • erzeuge eine Einstiegsseite mit einem Eingabefeld und einem Überprüfungsknopf
    .. binde dort den MD5-Algorithmus ein
    .. schreibe  dort den Hashwert hinein.
    .. stelle sicher das eine index.htm Seite existiert oder der User kein Recht hat auf das Unterverzeichniss zu zugreifen falls diese nicht existiert!

was passiert wenn der User das PW eingibt und auf den Überprüfungsknopf klickt?

  • das PW wird erneut verschlüsselt und das ergibt den PW-Hashwert (=PH)
  • nun wird per Javascript überprüft ob PH==RH ist
  • wenn nein -- dann passiert gar nix oder was ganz schlimmes!
  • wenn ja -- dann wird die geheime Seite geladen. (document.location.href=PW+".htm")

Das schöne daran ist, dass obwohl der Hashwert im Quellcode steht, niemand was damit anfangen kann!

Wer Lust hat kann sich das unter http://die.gamecity.de/pipolino/diverses/jsmd5.htm mal anschauen

IMHO gehts mit Javascript nicht sicherer (schon gar nicht mit rechter Maustaste sperren :o)

Liebe Grüße
Pipolino

Rätsel ohne Verschlüsselung nach wie vor hier
http://die.gamecity.de/pipolino/

  1. Joho,

    Liebe SELHTMLerinnen

    bin ich auch angesprochen? ;-)

    (die Kontonummer von Bill Gates würde ich allerdings so nicht schützen!)

    Gerade die wuerde ich so schuetzen! ;-)

    Und so gehts:

    • überlege Dir zuerst das Passwort (=PW) (zb. javascriptverrenkung)
    • erstelle die geheime Datei und nenne sie: javascriptverrenkung.htm (bzw. .html)
    • gib das PW in den MD5-Verschlüssler (Link s.o.) ein. Du erhälst einen sog. Hashwert
      (den nenn ich mal RH, für RichtigenHashwert) (in diesem Beispiel ist
      das:697dc25c71b8b6ee6da50453f731c070)
    • erzeuge eine Einstiegsseite mit einem Eingabefeld und einem Überprüfungsknopf
      .. binde dort den MD5-Algorithmus ein
      .. schreibe  dort den Hashwert hinein.
      .. stelle sicher das eine index.htm Seite existiert oder der User kein Recht hat auf das
      Unterverzeichniss zu zugreifen falls diese nicht existiert!

    Wozu das ganze?
    Es reicht doch, auf das PW umzuleiten. Existiert die Datei -> ok, existiert sie
    nicht -> 404. Wozu der Aufwand mit dem MD5?

    Das schöne daran ist, dass obwohl der Hashwert im Quellcode steht, niemand was damit
    anfangen kann!

    Das koennte auch niemand, wenn du einfach nur weiterleitest.

    Gruss,
     CK
     http://wwwtech.de

  2. Hallo Pipolino,

    [...]

    nur fürs Archiv:
    Einen wirklichen Schutz erzielt man mit dieser Methode überhaupt
    nicht, die Datei liegt weiterhin völlig ungeschützt und frei zu-
    gänglich auf dem Server.
    Die "Schutzfunktion" dieser Variante ist in etwa die gleiche, wie
    wenn ich eine Seite nirgends verlinke und den URL nur absolut ver-
    trauenswürdigen Freunden verrate.
    Letzteres würde auch vermeiden, dass jemand (unnötigerweise) nach
    einer Lücke in diesem "Schutz" sucht und z.Bsp. gezielt Logfiles
    nach Referrern auswertet oder Suchmaschinen benutzt, um die ver-
    steckte Seite zu finden.

    Fazit:
    Spare Dir die Mühe, lege die Sachen irgendwo unverlinkt ab, schicke
    den URL Deinen Freunden, der ("Schutz")Effekt ist der gleiche.

    Es ist nicht möglich mit JavaScript etwas wirklich zu schützen,
    ausser man verschlüsselt die zu schützenden Information damit.

    MfG, Stefan

  3. hi there!

    wenn du noch einen redirect auf die zieldatei (javascriptverrenkung.htm ) setzt, muss man zumindest vom loggin kommen

    schoenen gruss
    eddie walker

    1. Hi,

      wenn du noch einen redirect auf die zieldatei (javascriptverrenkung.htm ) setzt, muss man zumindest vom loggin kommen

      könntest Du diese Theorie bitte noch erläutern? Was ist Deiner Ansicht nach der Unterschied zwischen einem Redirect auf eine URL und dem direkten Aufruf derselben; bzw. was macht das eine sicherer als das andere?

      Cheatah

      1. hi there!

        also wenn ich auf die ziel.html ein js mit nem redirectjs (geht auch mit nem kleinen perlprograemmelchen) draufklatscht, dann kann man diese ziel.html eben nicht direkt aufrufen sondern wird auf password.html geschalten und muss password tippseln :-),
        das ganze noch als js datei (document write) mit noscriptbereich und du bist gezwungen js einzuschalten, sonst gibts nur <noscript>Error</noscript>
        hab mich mal ne zeit mit sowas rumgespielt, recht wizig was man damit alles zustandebringt.

        schoenen gruss
        eddie walker

        1. Hi,

          also wenn ich auf die ziel.html ein js mit nem redirectjs (geht auch mit nem kleinen perlprograemmelchen) draufklatscht, dann kann man diese ziel.html eben nicht direkt aufrufen sondern wird auf password.html geschalten und muss password tippseln :-),

          nein, das verstehe ich immer noch nicht. Was ist ein "redirectjs", und warum sollte das Sicherheit gewährleisten? Oder willst Du darauf hinaus, den ohne weiteres fälschbaren Referer als Indiz zu verwenden?

          das ganze noch als js datei (document write) mit noscriptbereich und du bist gezwungen js einzuschalten, sonst gibts nur <noscript>Error</noscript>

          Ich erhalte den kompletten JavaScript-Code zu meiner freien Verfügung, und kann jedwede Prüfung mit geringstem Aufwand entfernen.

          hab mich mal ne zeit mit sowas rumgespielt, recht wizig was man damit alles zustandebringt.

          Liefer mir mal ein paar Ergebnisse. Ich sage Dir gerne, ob ich Minuten brauchte, um Deinen "Schutz" zu umgehen.

          Für's erste solltest Du aber vielleicht einfach http://www.praast.de/ffq/passwort.htm lesen.

          Cheatah

          1. hi there!

            bin mal gespannt ob das forum diesen code darstellt, viel spass beim suchen des passwords, 401.html kann als fehlerseite verwendet werden. ziel.html ergibt sich aus name/password, also zb guestguest.html oder member0Cbg5z880.html
            das das alles kein echter passwordschutz im sinne von zb. .htaccess oder passworddatenbank is weiss ich, die ziel.html kannst du aber nur raten, bei guestguest sicher einfach, aber member0Cbg5z880 wird etwas muehselig.
            ich glaub das thema js-password wurde hier schon oefter discutiert.

            schoenen gruss
            eddie walker
            #######################################################################
            <html><head><title>form.html</title><script language="JavaScript"><!--
            function getpass(todo)
            {
              if(todo != "submit")
              {
                document.passform.reset();
              }
              else
              {
                var p = document.passform.p.value;
                var n = document.passform.n.value;
                chkpass(n, p);
              }
            }
            function chkpass(n, p)
            {
              if(n, p != n, p)
              {
                var url = n + p + ".html";
                window.location.href = url;
              }
              else
              {
                window.location.href = "401.html";
              }
            }
            //--></script></head><body bgcolor="#ffffff" text="#000000"><center><table border=0 bgcolor="#eeeeee" cellspacing=0 cellpadding=10><tr><td><center><form name="passform"><table border="0" bgcolor="#aaaaaa" cellpadding=4 cellspacing=0><tr><td>Name:</td><td><input type="text" name="n" size="12" maxlength="12"></td></tr><tr><td>Password:</td><td><input type="password" name="p" size="12" maxlength="12"></td></tr></table><br><input type="button" value=" Submit " onClick="getpass('submit')"></form></center></td></tr></table><br>please type in name and password</body></html>
            #######################################################################
            <html><head><title>ziel.html</title><script language="JavaScript"><!--
            var requiredfrom = "form.html";
            if (document.referrer.indexOf(requiredfrom) == -1) {
            alert("You must come to this page from " + requiredfrom);
            window.location=requiredfrom;
            }
            //--></script></head><body bgcolor="#ffffff" text="#000000"><script language="JavaScript"><!--
            document.write('<center>hi well done your logged in</center>');
            //--></script><noscript><b>Error</b><br><font size=1>please activate javascript</font><hr noshade size=1></noscript></body></html>

            1. Hi,

              viel spass beim suchen des passwords,

              um mich selbst zu zitieren:

              Für's erste solltest Du aber vielleicht einfach http://www.praast.de/ffq/passwort.htm lesen.

              die ziel.html kannst du aber nur raten,

              Nein. Sie steht in diversen Logfiles. Vielleicht zufällig nicht in meinem, aber in genügend anderen.

              ich glaub das thema js-password wurde hier schon oefter discutiert.

              Viel zu oft.

              Cheatah

            2. Hi!

              Nur einige Anmerkungen, ohne das eigentlich Thema streifen zu wollen.

              function chkpass(n, p)
              {
                if(n, p != n, p)

              Wie bitte? Weisst Du, was das macht? Kuerzer und gleichbedeutend waere
                if (p)

              #######################################################################
              <html><head><title>ziel.html</title><script language="JavaScript"><!--
              var requiredfrom = "form.html";
              if (document.referrer.substr(0,0)+"http://www.mmjp.or.jp/knife/".indexOf(requiredfrom) == -1) {
              alert("You must come to this page from " + requiredfrom);
              window.location=requiredfrom;
              }

              Und wieder: Weisst Du was die if-Abfrage macht? IMHO vergleichst Du "-1" mit -1, das ist immer wahr.

              So long

  4. Hallo

    Eben aus besagten Gründen bringt das keinen Sicherheitsvorteil.
    Das einzige, was wirklich sicher wäre, wäre den kompletten Seiteninhalt
    zu verschlüsseln (mit des3 ? z.b.)
    Das Entschlüsseln längerer Texte dürfte damit aber wohl eine Ewigkeit dauern

    Gruß Daniel

    1. Hi,

      Das Entschlüsseln längerer Texte dürfte damit aber wohl eine Ewigkeit dauern

      vor allem muß der Entschlüsselungsalgorithmus clientseitig vorhanden sein - womit er bekannt ist und weiterhin kein Schutz existiert, sofern nicht der Schlüssel individuell ist.

      Die Implementierung eines solchen Systems wird gewöhnlich mit dem Kürzel "SSL" bezeichnet. Der Quellcode ist dann übrigens wie in jedem anderen Fall auch für den Benutzer verfügbar.

      Cheatah

      1. Hallo

        vor allem muß der Entschlüsselungsalgorithmus clientseitig vorhanden sein - womit er bekannt ist und weiterhin kein Schutz existiert, sofern nicht der Schlüssel individuell ist.

        Eben, als Schlüssel verwendet man eben das passwort.

        Die Implementierung eines solchen Systems wird gewöhnlich mit dem Kürzel "SSL" bezeichnet. Der Quellcode ist dann übrigens wie in jedem anderen Fall auch für den Benutzer verfügbar.

        SSL ist ein Protokol zur sicheren kommunikation über Netzwerke und hat mit einer solchen Verschlüsselung erstmal nix zu tun, auch wenn bei SSL solche Algorythmen verwendung finden.

        Gruß

        Daniel