Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Dynamische Salt Hashes auswerten

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Dynamische Salt Hashes auswerten

    Hallo Leutz,

    ich habe nun einiges über salted Hashes gelesen.

    So einen Statischen Salthash zu verwenden ist ja absolut kein Problem, denn der ist immer da.

    Aber mir fehlt grad absolut die Idee wie ich dynamische Salt Hashes benutzen kann, denn die müssen ja auch irgendwie immer verfügbar sein bei einem Login.

    Ich habe mir schon überlegt den Usernamen und den passenden Salthash in eine extra Tabelle zu speichern und dann Anhand des Usernamens ausgelesen Salt an das eingebene Passwort zu hängen, aber da kommt dann wieder das Problem was wenn zwei oder drei gleiche Usernamen in der Tabelle ausftauchen.

    Das heist dann muss ich das Feld des Usernamens auf unique setzen muss, so verhinder ich dann das ein Username doppelt vorkommt, aber dann habe ich wieder das Problem das ich das Feld Username wieder nicht als FULLTEXT Index festlegen kann (ich hatte da schon mal Probleme).

    Ich stecke da grad absolut fest, habt ihr vieleicht den ein oder anderen Tipp?

    Vielen Dank Gruß Litter
    Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
    http://www.lit-web.de


  • #2
    das Problem was wenn zwei oder drei gleiche Usernamen in der Tabelle ausftauchen.
    Hä ??? Wieso sollte es 2 User mit dem gleichen Namen geben, wenn das geht stößt du auch bei einem normalen Login an ein Problem...

    Das heist dann muss ich das Feld des Usernamens auf unique setzen muss, so verhinder ich dann das ein Username doppelt vorkommt, aber dann habe ich wieder das Problem das ich das Feld Username wieder nicht als FULLTEXT Index festlegen kann (ich hatte da schon mal Probleme).
    Lass doch einfach die Applikation abfragen ob es einen User mit dem Namen schon gibt, bevor ein neuer User angelegt wird. Und wenn es den schon gibt wird halt eine Fehlermeldung ausgegeben.

    Code:
    username | dynSalt | password
    Signatur:
    PHP-Code:
    $s '0048656c6c6f20576f726c64';
    while(
    $i=substr($s=substr($s,2),0,2))echo"&#x00$i;"

    Kommentar


    • #3
      Wieso nicht den Salt und den Usernamen in eine Tabelle? Bzw. in die Tabelle, wo das Passwort drin steht?

      Code:
      ID | Nickname | Password | Salt
      --

      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


      --

      Kommentar


      • #4
        Naja... der User wird ja eine Userid haben.
        Dann kannste USERID + Salt in eine extra Tabelle speichern.
        "Dummheit redet viel..Klugheit denkt und schweigt.." [Amgervinus]

        Kommentar


        • #5
          Zitat von litterauspirna Beitrag anzeigen
          Ich habe mir schon überlegt den Usernamen und den passenden Salthash in eine extra Tabelle zu speichern
          Warum denn eine extra Tabelle?

          aber da kommt dann wieder das Problem was wenn zwei oder drei gleiche Usernamen in der Tabelle ausftauchen.
          Wieso sind deine Usernamen nicht eindeutig?

          Das heist dann muss ich das Feld des Usernamens auf unique setzen
          Das hast du in einer halbwegs vernünftigen Userverwaltung doch sowieso längst gemacht.

          aber dann habe ich wieder das Problem das ich das Feld Username wieder nicht als FULLTEXT Index festlegen kann
          Was willst du denn mit einem Fulltext-Index auf dem Usernamen?

          Kommentar


          • #6
            Danke für eure Antworten,

            nun weis ich wie ich da ran gehe.

            Ich schreibe den Salt in die selbe Tabelle (stimmt schon ne extra Tabelle wäre da zu viel des guten) und den Usernamen werde ich auch eindeutig machen, dass ist der wohl einfachste Weg.

            Dann werde ich beim Login nach dem Usernamen den Salt raus ziehen und den vor das eingegebene Passwort setzen und dann eine Abfrage für das eigentlich Login machen, so habe ich ein gesalzenes Passwort und es ist dynamisch und somit nicht wirklich leicht ausfindig zu machen.

            Warum ich das Feld des Usernamens mit einem FULLTEXT Index belegen wollte war, weil ich der Meinung war es die Anwendung dessen bei einer Suche sich Performancegünstig auswirkt. Sollte ich damit auf dem Holzweg sein?

            Gruß Litter
            Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
            http://www.lit-web.de

            Kommentar


            • #7
              Zitat von litterauspirna Beitrag anzeigen
              Dann werde ich beim Login nach dem Usernamen den Salt raus ziehen und den vor das eingegebene Passwort setzen und dann eine Abfrage für das eigentlich Login machen
              Auch Unfug.
              Code:
              SELECT COUNT(*) as AnzahlDatensaetze FROM usertabelle
              WHERE username = 'eingegebenerUsername'
                AND HASHFUNKTION(CONCAT(salt, 'eingegebenesPasswort') = gespeicherterHashVonSaltPlusPasswort
              Gezählte Anzahl auswerten; davon abhängig den Schluss ziehen, ob erfolgreich eingeloggt oder nicht.

              (Ja, HASHFUNKTION(CONCAT(salt, 'eingegebenesPasswort') muss theoretisch für jeden Datensatz in der Tabelle ausgewertet werden. Wenn aber zuvor schon der Username verglichen wurde, dann braucht der zweite Teil einer mit AND verknüpften Gesamtbedingung nur noch dann ausgewertet werden, wenn der erste Teil ein Treffer ist.)
              Warum ich das Feld des Usernamens mit einem FULLTEXT Index belegen wollte war, weil ich der Meinung war es die Anwendung dessen bei einer Suche sich Performancegünstig auswirkt. Sollte ich damit auf dem Holzweg sein?
              Ja. Informiere dich bitte, wofür ein FULLTEXT-Index wirklich dient.

              Kommentar


              • #8
                ChrisB ich kann allem folgen was du da geschrieben hast, nur dem hier nicht wirklich.

                Code:
                AND HASHFUNKTION(CONCAT(salt, 'eingegebenesPasswort') = gespeicherterHashVonSaltPlusPasswort
                hinter dem AND sollte bei mir nicht HASHFUNKTION sondern der name meines Passwortfeldes stehen oder?

                Über CONCAT werde ich gleich mal nachlesen.
                Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                http://www.lit-web.de

                Kommentar


                • #9
                  Zitat von litterauspirna Beitrag anzeigen
                  hinter dem AND sollte bei mir nicht HASHFUNKTION sondern der name meines Passwortfeldes stehen oder?
                  Nein, natürlich soll da die Hashfunktion stehen, für deren Verwendung du dich entschieden hast.
                  Der Name deines Passwortfeldes, dass das bereits mit dem Salt zusammen gehashte Original-Passwort enthält, der steht auf der anderen Seite des Vergleichs - gespeicherterHashVonSaltPlusPasswort.


                  CONCAT dient nur dazu, zwei Strings zusammenzufügen - den Inhalt Spalte, in der du dein Salt gespeichert hast, und das vom Nutzer beim Login eingegebene Passwort.


                  Edit: Nach dem ganzen fehlte in meinem Code noch eine schließende Klammer,
                  Code:
                  HASHFUNKTION(CONCAT(salt, 'eingegebenesPasswort'))

                  Kommentar


                  • #10
                    Das mit dem CONCAT konnte ich im Mysql Manual schon nachlesen.

                    Das hier
                    Code:
                    'eingegebenesPasswort'
                    Soll aber nicht das vom User eingegebene Passwort enthalten sondern der names des Passwortfeldes sein wo das Passwort mit dem Hash drin steht richtig?

                    Oder eher so?

                    Code:
                    AND md5(sha1(feldMitSaltwert, 'passwortAusLoginFormularfeld')) = passwortFeldMitSaltUndPasswort
                    Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                    http://www.lit-web.de

                    Kommentar


                    • #11
                      Soll aber nicht das vom User eingegebene Passwort enthalten sondern der names des Passwortfeldes sein wo das Passwort mit dem Hash drin steht richtig?
                      *seufz* - Nein, genau anders herum.

                      Das sollte eigentlich ziemlich logisch sein, wenn du es mal im Gesamtkontext der SELECT-Abfrage betrachtest!

                      Das bei der Registierung vom Nutzer eingegebene Passwort hast du sofort mit einem Salt gehasht, und dann nur diesen Hash abgespeichert.

                      Das Passwort, was der Nutzer beim Login eingibt - das ist logischerweise das, was noch gehasht werden muss.

                      Kommentar


                      • #12
                        Also so hier?

                        Code:
                        AND md5(sha1(feldMitSaltwert, 'passwortAusLoginFormularfeld')) = passwortFeldMitSaltUndPasswort
                        Ich habe noch keinen Code dazu geschrieben, darum die Fragen, weil ich so auch nichts zum testen habe, sonst hätte ich das schon längst ausprobiert.
                        Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                        http://www.lit-web.de

                        Kommentar


                        • #13
                          Ja schon besser, aber was machst du mit sha1? Irgendwie sollte das doch concat sein oder?

                          Kommentar


                          • #14
                            Zitat von litterauspirna Beitrag anzeigen
                            Ich habe noch keinen Code dazu geschrieben, darum die Fragen, weil ich so auch nichts zum testen habe, sonst hätte ich das schon längst ausprobiert.
                            Dann warte halt damit, bis du was zum Testen hast ...


                            Und dann geh mit ein bisschen Logik vor; was ich erklärt habe, sollte eigentlich klar sein, wenn man selber ein bisschen drüber nachdenkt (und Grundlagenwissen in SQL hat).

                            Kommentar


                            • #15
                              Zitat von Flor1an Beitrag anzeigen
                              Ja schon besser, aber was machst du mit sha1? Irgendwie sollte das doch concat sein oder?
                              Nee das sha1 ist schon richtig, ich hatte nur vergessen das CONCAT mit rein zu machen, war ein Copy and Paste Fehler. Ich mache einen gemischten Has aus md5 und sha1.

                              Code:
                              AND md5(sha1(CONCAT(feldMitSaltwert, 'passwortAusLoginFormularfeld'))) = passwortFeldMitSaltUndPasswort
                              @ChrisB
                              Gewisses Grundlagenwissen an SQL habe ich schon, nur mit CONCAT habe ich noch nie etwas gemacht, darum war mir das fremd. Ich bin mit deinem Beispiel irgendwie nicht richtig klar gekommen.

                              Aber nun werde ich das erst mal probieren und dann gebe ich hier wieder Bescheid ob alles geklappt hat, danach markiere ich den Thread als erledigt.

                              Danke vorab schon mal für die Denkanstöße.

                              Gruß Litter
                              Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                              http://www.lit-web.de

                              Kommentar

                              Lädt...
                              X