Whitesnake: Methode um sicheren key zu generieren

Weiß irgendwer von euch irgendeine Art und Weise wie ich einen key generieren kann den niemand durch ausprobieren erraten kann? Der Key soll in ein Cookie geschrieben werden und das einloggen ermöglichen.

  1. Hallo,

    kennst du eine Möglichkeit ein Cookie zu setzen,
    welches niemand lesen kann?

    Grüße, ...

    1. Nein es geht darum dass bei einem erfolgreichen Login auf der datenbank eine Session angelegt wird deren Primary Key der generierte "Key" ist. Der soll also eindeutig sein. Und der Key wird nur dann generiert, wenn der Benutzername und PW nach der Überprüfung mit der Datenbank positiv ist.

      Also: Ich such eine Methode um einen key zu generieren der eindeutig ist, der nicht doppelt vorkommen könnte. Also sowas wie die Systemzeit nur nicht erratbar.

      1. Moin!

        Also: Ich such eine Methode um einen key zu generieren der eindeutig ist, der nicht doppelt vorkommen könnte. Also sowas wie die Systemzeit nur nicht erratbar.

        session_start() generiert wunderbar eigenständig hinreichend verschiedene, nicht erratbare Session-IDs, die sich bestens eignen, um einen Benutzer für die Zeit der Session eindeutig zu identifizieren.

        Was gefällt dir daran nicht?

        • Sven Rautenberg
        1. session_starts verlangt eine variable die per GET/POST daherkommt. Ich persönlich möchte nur eine Codezeile die so ausschaut:

          $key = xyz;

          Und genau dieses xyz würde ich gerne von euch hören was ihr so für Vorschläge habt. Die Gültigkeit wird extra definiert wie lange die Session gültig ist, es geht nur um den key.

          Und ich mein mal ehrlich: Lest ihr wegen einem Mini-Problem ein Buch? Das ist sehr uneffizient.

          1. Moin!

            session_starts verlangt eine variable die per GET/POST daherkommt.

            Nein, PHP-Sessions arbeiten primär mit Cookies. Die Übermittlung der Session-ID via GET oder POST ist eine Option, die man nicht nutzen muß.

            $key = xyz;

            Und genau dieses xyz würde ich gerne von euch hören was ihr so für Vorschläge habt. Die Gültigkeit wird extra definiert wie lange die Session gültig ist, es geht nur um den key.

            Ursprünglich schreibst du:
            "Weiß irgendwer von euch irgendeine Art und Weise wie ich einen key generieren kann den niemand durch ausprobieren erraten kann? Der Key soll in ein Cookie geschrieben werden und das einloggen ermöglichen."

            Ich lese da so viele Stichwörter, die alle zusammen ausdrücken "Hallo, nimm Sessions, damit kriegst du das meiste schon fertig auf dem Silbertablett geliefert".

            Und ich mein mal ehrlich: Lest ihr wegen einem Mini-Problem ein Buch? Das ist sehr uneffizient.

            Mal ehrlich: Schreibst du für jedes Skript, welches Multiplizieren soll, eine Funktion, die entsprechend häufig Additionen vornimmt? Das ist auch sehr uneffizient.

            Du willst eine eindeutige ID, du willst sie in einem Cookie haben, und es geht um ein Login mit HTTP. All das schreit in unüberhörbarer Lautstärke "SESSIONS", und genau dafür ist session_start() zuständig.

            Wenn du das nicht nehmen willst, dann hast du sicherlich irgendwelche Gründe dafür, die du bislang nicht genannt hast. Entweder erzählst du die noch, um einen fachlich fundierten besseren Rat zu erhalten, oder du läßt es bleiben - dann ändert sich die bisherige Antwort aber auch nicht mehr.

            • Sven Rautenberg
            1. Mein Problem ist, dass wir das im Unterricht machen und die Cookies frontendmäßig realisiert werden. Der key aber Backend. Sprich mich interessiert das was das Front-End macht nicht. Ich biete ihm nur eine Schnittstelle.
              Ich mein eindeutig so, dass in der Tabelle nicht zweimal der gleiche Key vorkommen kann. Es muss ja auch net DER Algorithmus sein, sondern etwas, wofür man schon etwas länger braucht um es zu knacken.

              1. Hallo Whitesnake,

                Mein Problem ist, dass wir das im Unterricht machen

                Im Endeffekt dürfte dann folgendes für Dich ausreichen: Du sammlest viele möglichst zufällige Daten, baust die zu einem riesigen String zusammen und lässt einen Hashing-Algorithmus (bspw. MD5) drüber laufen.

                Bspw. könntest Du den in PHP eingebauten Random Number Generator mt_rand() verwenden, diesen zusammen mit ein paar anderen Dingen (Remote-IP-Adresse sofern verfügbar, aktuelle Uhrzeit, Server-Version, was weiß ich) zu einem langen String zusammenfügen. Dann lässt Du md5() drüber laufen und kriegst einen relative eindeutigen Schlüssel.

                Achtung: mt_rand() in PHP ist meist deutlich besser als rand(), allerdings benutzt das den "Mersenne Twister"-Algorithmus, der *nicht* kryptographisch sicher ist. Das heißt nicht, dass man ihn nicht verwenden kann, allerdings muss man sich im klaren sein, dass die Chancen, dass der nächste Schlüssel, den der Algorithmus damit erzeugt, vorhergesehen werden kann, drastisch erhöht wird (allerdings gehört dennoch ein beträchtlicher Aufwand dazu, diesen Angriff durchzuführen, insofern dürfte der Algorithmus für die gegebene Aufgabenstellung hinreichend sicher sein).

                Falls Dir ein Linux-System zur Verfügung steht und Du keine open_basedir-Restriction in PHP hast, dann ist eine *viel* sicherere Methode, Zufallszahlen zu bekommen, aus /dev/urandom zu lesen (oder /dev/random für die ganz paranoiden). Lese dort n Bytes heraus und bilde daraus nochmal einen Hash (n ist abhängig vom Hash; wenn Du MD5 nimmst wäre 16 die ideale Wahl, da ein MD5-Hash nur 128 Bit lang ist und somit mehr Zufallsdaten nichts erreichen würden) - das dürfte eine der sichersten Methoden sein, mit PHP etwas zufälliges zu erzeugen.

                Viele Grüße,
                Christian

          2. Hi Whitesnake,

            Und ich mein mal ehrlich: Lest ihr wegen einem Mini-Problem ein Buch? Das ist sehr uneffizient.

            Nein, aber das entsprechende Kapitel in diesem Buch.

            MfG, Dennis.

            --
            Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
            Dies hier ist ein öffentliches Forum - wer dir hier geholfen hat, hat dies vollkommen freiwillig und unter Aufopferung seiner Freizeit getan!
      2. Hi,

        der nicht doppelt vorkommen könnte.

        Das macht dir doch deine Datenbank, indem du die Spalte auf unique setzt.

  2. hi,

    Weiß irgendwer von euch irgendeine Art und Weise wie ich einen key generieren kann den niemand durch ausprobieren erraten kann? Der Key soll in ein Cookie geschrieben werden und das einloggen ermöglichen.

    ich vermute, du suchst sessions.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
  3. Hi,

    Weiß irgendwer von euch irgendeine Art und Weise wie ich einen key generieren kann den niemand durch ausprobieren erraten kann?

    ich empfehle dir, Digital Fortress (Deutscher Titel: "Diabolus") von Dan Brown zu lesen.

    Du kannst keinen 100%ig sicheren Key erstellen. Aber wenn du eine Identifikationsnummer für deine User brauchst, die eindeutig sein soll, so nutze den Usernamen, das (verschlüsselte) Passwort und das Geburtsdatum, um daraus eine ID zu generieren.

    MfG Hopsel

    --
    "It's amazing I won. I was running against peace, prosperity, and incumbency."
    George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
    1. Hallo,

      ich empfehle dir, Digital Fortress (Deutscher Titel: "Diabolus") von Dan Brown zu lesen.

      Ich rate davon ab.

      Tim

      1. Hi,

        ich empfehle dir, Digital Fortress (Deutscher Titel: "Diabolus") von Dan Brown zu lesen.
        Ich rate davon ab.

        ich habe es nur auf Englisch gelesen, aber es ist meiner Meinung nach eines der besten Bücher, die ich je geschmökert habe. Besser als gewisse Bücher von Ken Follet oder J.K. Rowling.

        MfG Hopsel

        --
        "It's amazing I won. I was running against peace, prosperity, and incumbency."
        George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
        1. Hallo,

          ich habe es nur auf Englisch gelesen, aber es ist meiner Meinung nach eines der besten Bücher, die ich je geschmökert habe.

          Ich habe Digital Fortress gar nicht gelesen, aber ich rate aus Prinzip von Büchern Dan Browns ab, nachdem ich mich sehr über „Da Vinci Code“ („Sakrileg“) und „Angels and Demons“ („Illuminati“) geärgert habe. Zudem schrecken mich die im Klappentext geschilderten kryptographischen Phantastereien ab.

          Tim

          --
          Alternativen? Im Bezug auf Verschwörungstheorien natürlich des intelligenten Mensches Sakrileg, Das focaultsche Pendel von Umberto Eco. Kryptographisches? Vielleicht das Cryptonomicon von Neal Stephenson
          1. Hi,

            nachdem ich mich sehr über „Da Vinci Code“ („Sakrileg“)

            das Buch war ja auch nicht gut.

            und „Angels and Demons“ („Illuminati“)

            Dieses hat mir hingegen schon besser gefallen. (Ich war, ehrlich gesagt, begeistert.)

            geärgert habe.

            Zudem schrecken mich die im Klappentext geschilderten kryptographischen Phantastereien ab.

            Kann ich nichts dazu sagen. Besitze nur die englischen Taschenbuchausgaben.

            MfG Hopsel

            --
            "It's amazing I won. I was running against peace, prosperity, and incumbency."
            George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
    2. Hallo,

      ich empfehle dir, Digital Fortress (Deutscher Titel: "Diabolus") von Dan Brown zu lesen.

      Ich hab's gelesen und das, was der Autor darin über Kryptographie erzählt, ist ausgemachter Schwachsinn. In dem Buch stehen so viele Halbwahrheiten über Kryptographie, dass es einen nur so schüttelt. Das Schlimme ist ja, dass das nicht nur kompletter Schwachsinn ist (wie bspw. die Art, wie die Leute in »Hackers« in Fremde Computer einbrechen), sondern es stecken da ja durchaus wahre Dinge drin; außerdem sind die Aussagen alle sehr glaubwürdig (wenn man kein Vorwissen besitzt) beschrieben. Wenn jemand also was über Kryptographie lesen will, dann *bitte*, *bitte*, *bitte* nicht das Buch. Es ist ganz unterhaltsam als Roman, allerdings wirkluch nur dann, wenn man sich eben vor Augen hält, dass da fachlich gesehen Schwachsinn drin steht.

      Ich empfehle dagegen lieber Geheime Botschaften von Simon Singh - dort wird Kryptographie für Laien verständlich erklärt, es ist mit interessanten historischen Informationen gespickt.

      Viele Grüße,
      Christian