Maython: Timestamps bei Eingabe der Buchstaben des Passworts

Guten Tag liebes Forum! :)

Ich bin sehr vertraut mit PHP und HTML, bin aber nie dazu gekommen JS zu benutzen, da es bisher nie notwendig war. Jetzt will ich aber für ein Projekt schauen, wie schnell Leute ihr Passwort eintippen. Also jedes einzelne Zeichen soll einen Timestamp zurückgeben und in ein Array geschrieben werden, welches später in eine Datenbank gespeichert wird.

Die Idee dahinter ist, dass ich später die Differenz der Timestamps ausrechne, damit ich weiß, wie lange jemand für den nächsten Buchstabe braucht. In Python habe ich den Code schon entwickelt.

import time as t
import keyboard
from pynput.keyboard import Key, Listener
import math
import json

chars=['a','b','c','d','e','f','g','h','i','j','k','l','m','n',
       'o','p','q','r','s','t','u','v','w','x','y','z']

global password, time, sr
password = []
time = []
Abweichung = 0.3


def Listen():
    
    with Listener(
            on_press=on_press,
            on_release=on_release) as listener:
        listener.join()
        
    
def on_press(key):
    global time

    
    if (str(key)[1].lower() in chars) and (len(str(key)) == 3):
        password.append(str(key)[1])
        time.append(t.time())

def on_release(key):
    global time

    if key == Key.esc:
        time = calc_time(time)
        if sr == 0:
            return save(password, time)
        elif sr == 1:
            return encoder(password, time)

def calc_time(time):
    shorttime = []

    for i in range(len(time)-1):
        shorttime.append(time[i+1] - time[i] )
    return shorttime


def save(password, time):

    file = open("password.txt", "w")
    file.writelines(str(password)+"\n")
    file.writelines(str(time))
    file.close()

    print("Password changed!")

    return False

            
def encoder(password, time):
    global password_read, time_read
    file = open("password.txt", "r")
    password_read = str(file.readline())
    time_read = str(file.readline())
    file.close()

   

    password_read = password_read.replace(" ",'').replace('"','').replace("'",'').replace("[",'').replace("\n",'').replace("]",'').split(',')
    time_read = time_read.replace(" ",'').replace('"','').replace("'",'').replace("[",'').replace("\n",'').replace("]",'').split(',')
    return False

def compare(p, t, p_r, t_r, abweichung):
    if len(p) != len(p_r):
        return False
    else:
        for i in range(len(p)-1):
            
            if p[i] != p_r[i]:
                
                return False
            else:
                if (t[i] * (1 + abweichung)) >= float(t_r[i]) and (t[i] * (1 - abweichung)) <= float(t_r[i]):

                else:
                    return False
        return True

    
sr = int(input("0: Passw. setzen, 1: Passw. testen\n"))
Listen()
if sr == 1:

    if compare(password, time, password_read, time_read, Abweichung) == False:
        print("Kein Zugriff")
    else:
        print("Zugriff gestattet")


Das Problem das ich habe ist: Ich möchte nur die Zeiten des Passworts zurück bekommen, also wenn jemand in das Textfeld Pw schreibt. Hat jemand eine Anregung?

akzeptierte Antworten

  1. Hallo Maython,

    Guten Tag liebes Forum! :)

    Herzlich willkommen bei SELFHTML.

    chars=['a','b','c','d','e','f','g','h','i','j','k','l','m','n',
           'o','p','q','r','s','t','u','v','w','x','y','z']
    

    Hat jemand eine Anregung?

    Programmiertechnisch nicht, aber sehr wohl sicherheitstechnisch. Es handelt sich um ein sehr unsicheres Passwort. Ich sehe keinen Grund, warum man die gültigen Zeichen derart beschränken sollte.

    Bis demnächst
    Matthias

    --
    Du kannst das Projekt SELFHTML unterstützen,
    indem du bei Amazon-Einkäufen Amazon smile (Was ist das?) nutzt.
  2. Hallo,

    mit dem Python-Code kommst du aber nicht weiter, du benötigst schon etwas, das im Browser läuft: javascript. Aber das hast du ja schon erkannt.

    Für dieses Projekt solltest du

    • dich in die Grundlagen von Javascript einarbeiten
    • dich mit Eventhandling beschäftigen, dein Freund könnte das keyup-Event sein
    • dich mit dem date-Objekt beschäftgen
    • dich mit XMLHttpRequests beschäftigen, Stichwort fetch

    Unser Wiki hat da einiges zu bieten:

    Gruß
    Jürgen

  3. Hallo und willkommen,

    Ich bin sehr vertraut mit PHP und HTML, bin aber nie dazu gekommen JS zu benutzen, da es bisher nie notwendig war. Jetzt will ich aber für ein Projekt schauen, wie schnell Leute ihr Passwort eintippen.

    von den beiden Kollegen hast du ja schon Hinweise bekommen, von mir jetzt noch Bedenken oder Skepsis.

    Wozu das Ganze? Möchtest du den Tipp-Rhythmus als zusätzliches Indiz dafür, ob der Nutzer "echt" ist, der sich da anmeldet, oder ob jemand ein geklautes Passwort eintippt, das meist nicht so flüssig geht wie das eigene gewohnte?

    Ich habe vor etlichen Jahren mal gelesen, dass irgendeine Bank sowas bei der PIN-Eigabe gemacht hat (weiß nicht mehr, ob beim Onlinebanking oder am Automaten). Wenn der Tipp-Rhythmus deutlich vom gespeicherten Muster abweicht, sollte die Eingabe wiederholt werden.

    Das System konnte sich nicht durchsetzen, weil auch ein- und dieselbe Person je nach Tagesform und sonstigen äußeren Bedingungen (z.B. Beschaffenheit des verwendeten Eingabegeräts) sehr unterschiedlich tippt.

    Also jedes einzelne Zeichen soll einen Timestamp zurückgeben und in ein Array geschrieben werden, welches später in eine Datenbank gespeichert wird.

    Wenn das ein Feature werden soll, wie das oben beschriebene, überleg dir nochmal gut, ob du das den Leuten wirklich antun möchtest.

    Die Idee dahinter ist, dass ich später die Differenz der Timestamps ausrechne, damit ich weiß, wie lange jemand für den nächsten Buchstabe braucht.

    Gibt es noch einen anderen Verwendungszweck? Würde mich interessieren ...

    Live long and pros healthy,
     Martin

    --
    Früher war ich klein und dumm. Inzwischen hat sich so manches geändert. Ich bin größer geworden.
    1. Krass Martin, das war genau meine Intention. Ich wollte schauen, dass es keine "BruteForce" Attacken gibt, die einfach tausend mal dein Passwort innerhalb einer Sekunde versuchen zu knacken... Aber, dass die Bank das schon probiert hat, wusste ich nicht. Danke für das Zerstören meines Projektes.

      PS: Nur die Zeichen im PythonScript zu benutzen war auf Grund der einfacheren Implementierung. Wegen der Codierung etc, was ich nicht beachten wollte.^^

      1. Hi there,

        Krass Martin, das war genau meine Intention. Ich wollte schauen, dass es keine "BruteForce" Attacken gibt, die einfach tausend mal dein Passwort innerhalb einer Sekunde versuchen zu knacken... Aber, dass die Bank das schon probiert hat, wusste ich nicht. Danke für das Zerstören meines Projektes.

        Ich denke, da muß man schon differenzieren. Es ist ein Unterschied, ob man einen bestimmten "Tipp- oder Eingaberythmus" zu erkennen versucht oder einfach eine gewisse Zeit voraussetzt, die die Eingabe eines Passwortes benötigt. Letzeres kann schon Sinn machen und ist imho auch leichter zu realisieren, weil es genügt, die Zeit zu erfassen zwischen "Passwort-Feld erhält Fokus" und "Passwort-Feld wird abgeschickt"...

        (Wobei man natürlich sagen muß, schlichte Gemüter wie meinereiner, denen Sicherheit am ****** vorbeigeht wählen oft ein Passwort, das sehr schnell eingegeben werden kann, oder, andersrum, "fghfghfgh" kann man sehr schnell tippen...😉)

        1. Hallo,

          Krass Martin, das war genau meine Intention. Ich wollte schauen, dass es keine "BruteForce" Attacken gibt, die einfach tausend mal dein Passwort innerhalb einer Sekunde versuchen zu knacken...

          ja okay, solche Extremfälle kann man damit sicher aussieben. Aber da kämen vielleicht auch noch andere Ansätze in Frage.

          Es ist ein Unterschied, ob man einen bestimmten "Tipp- oder Eingaberythmus" zu erkennen versucht oder einfach eine gewisse Zeit voraussetzt, die die Eingabe eines Passwortes benötigt.

          Genau. Oder nach dem Absenden eine bestimmte Zeitlang (10 Sekunden? 30 Sekunden?) keinen weiteren Login-Versuch akzeptieren.

          (Wobei man natürlich sagen muß, schlichte Gemüter wie meinereiner, denen Sicherheit am ****** vorbeigeht wählen oft ein Passwort, das sehr schnell eingegeben werden kann, oder, andersrum, "fghfghfgh" kann man sehr schnell tippen...😉)

          Aber dabei kann man sich auch sehr schnell vertippen.

          Oder die Auto-Ausfüllen-Funktion des Browsers verwenden. Dann rufst du das Login-Formular auf, und in Nullkommanix steht Benutzername und Kennwort schon drin, und du musst bloß noch OK klicken (oder auf die Enter-Taste hauen).

          Live long and pros healthy,
           Martin

          --
          Früher war ich klein und dumm. Inzwischen hat sich so manches geändert. Ich bin größer geworden.
      2. Hallo,

        "BruteForce" Attacken

        das geht aber noch einfacher, einfach serverseits die Meldung zu „Passwort falsch“ um zwei oder drei Sekunden verzögern. Dann kann sich BruteForce ganz schön hinziehen.

        Gruß
        Jürgen

        1. Hallo JürgenB,

          um zwei oder drei Sekunden verzögern

          was bedeutet, dass dein Server 2-3 Sekunden warten muss und der Request so lange läuft.

          Schreibst Du das mit einer simplen PHP Installation, bedeutet das einen laufenden PHP-Request pro Login-Versuch. Ein FastCGI-Prozess kann - meine ich - nur einen Request zu einer Zeit abarbeiten, d.h. du brauchst für parallele Requestverarbeitung auch mehrere FastCGI Prozesse. Wenn die alle mal kurz schlafen gehen, ist der Server lahmgelegt.

          Vielleicht gibt's dafür Tricks und Methoden, das mit nginx oder Apache umzusetzen. Aber sicherlich nicht mit Default-Config, oder?

          Wie auch immer. Während der Wartezeit ist der Request trotzdem in der Queue und belegt Speicher. Ein fleißiger Bot kann deinen Server dann immer noch fluten.

          Rolf

          --
          sumpsi - posui - obstruxi
      3. Hallo Maython,

        "BruteForce" Attacken

        die fängst Du besser am Server ab. Ganz stumpfsinnig: Nach X Fehlversuchen wird der Account gesperrt oder in den Captcha-Modus versetzt.

        Das kann allerdings auch nach hinten losgehen, wenn sich ein doofer Durchprobier-Bot auf dich stürzt. In vielen phpbb Foren ist die Mitgliederliste öffentlich, oder die Liste der angemeldeten User. Die kann man ernten und dann pro User automatisiert Passworte verproben. Eine automatische Sperre führt dazu, dass eine Menge User meckern, dass ihr Account gesperrt sei und Du vor lauter Entsperren nichts anderes mehr getan bekommst.

        Bot-Abwehr ist eine Wissenschaft für sich. Vor allem, wenn man die Non-Bots möglichst wenig behindern will.

        In dem Forum, wo ich mit einem solchen Bot konfrontiert war, hat es gereicht, ein hidden field ins login-Form zu setzen, wo ein Token drinstand. Das musste mit einem Token übereinstimmen, das in der Session gespeichert war. Stimmte es nicht, wurde der Login-Request ignoriert. Das hilft natürlich nichts, wenn der Bot mehr tut als stumpf Standardrequeste für diesen Forentyp zu posten, aber, wie gesagt, der Bot war doof und es hat gereicht.

        Eine Alternative kann sein, dass nach einem Fehlversuch eine bestimmte Zeit (z.B. 10 Sekunden) gewartet werden muss. Ein Login von der gleichen IP innerhalb dieser Zeit wird wie ein Fehlversuch gewertet und die Strafzeit beginnt von vorn. Die IP Abfrage dient dazu, dass der korrekte User, der von einer anderen IP kommt, locker am Login vorbeispazieren kann, während der Bot gegen die Drehtüre läuft. Nützt natürlich auch nichts, wenn die Bots aus einem Netz kommen oder über TOR gehen und jeder Request von einem anderen Exit-Node kommt.

        Es kann auch nötig werden, IP-Bereiche gegen Login zu sperren. Dafür gibt's Tools - siehe fail2ban.

        Wie gesagt - eine Wissenschaft für sich.

        Rolf

        --
        sumpsi - posui - obstruxi
        1. Sehr spannend! Sehr lieb von Euch, dass ihr solche Informationen mit mir teilt, dass kommt meiner Inspiration zu gute :D

          Ich freue mich, dass so viele Leute direkt geantwortet haben, auch wenn ich ein totaler Beginner auf diesem Gebiet bin. Hatte eigentlich das Projekt für sensible Daten gedacht, die vom Netzwerk angegriffen werden. Aber gut... Dann muss ich meine Ideen nochmal zusammen kramen und ein wenig modifizieren. Immerhin hab ich schon Vorschläge von euch, was ich alles beachten muss. Danke dafür. Scheint ein sehr gutes Forum zu sein!

          Lieb von Euch.

          Grüße

          1. Hallo Maython,

            Scheint ein sehr gutes Forum zu sein!

            Hier ist selfhtml. Wir haben einen Ruf zu wahren!

            Es sei denn, wir fangen mal wieder an, uns untereinander über die richtige Zahl der Erbsen im Topf zu streiten...

            Rolf

            --
            sumpsi - posui - obstruxi
            1. @@Rolf B

              Scheint ein sehr gutes Forum zu sein!

              Hier ist selfhtml. Wir haben einen Ruf zu wahren!

              Es sei denn, wir fangen mal wieder an, uns untereinander über die richtige Zahl der Erbsen im Topf zu streiten...

              Aber genau das ist doch unser Ruf. duckundweg

              😷 LLAP

              --
              “When I was 5 years old, my mother always told me that happiness was the key to life. When I went to school, they asked me what I wanted to be when I grew up. I wrote down ‘happy.’ They told me I didn’t understand the assignment, and I told them they didn’t understand life.” —John Lennon
              1. Hallo Gunnar,

                erbse hinterherschmeiß

                Rolf

                --
                sumpsi - posui - obstruxi
            2. Hallo,

              Es sei denn, wir fangen mal wieder an, uns untereinander über die richtige Zahl der Erbsen im Topf zu streiten...

              hey, die Zahl der Karotten und Kartoffeln im Topf muss aber auch stimmen!

              Gruß
              Kalk

              1. @@Tabellenkalk

                Es sei denn, wir fangen mal wieder an, uns untereinander über die richtige Zahl der Erbsen im Topf zu streiten...

                hey, die Zahl der Karotten und Kartoffeln im Topf muss aber auch stimmen!

                Das heißt Mohrrüben!!1elf

                😷 LLAP

                --
                “When I was 5 years old, my mother always told me that happiness was the key to life. When I went to school, they asked me what I wanted to be when I grew up. I wrote down ‘happy.’ They told me I didn’t understand the assignment, and I told them they didn’t understand life.” —John Lennon
                1. Hallo,

                  Das heißt Mohrrüben!!1elf

                  Heut gibt’s Wurzeleintopf mit Mohrrüben und Karotten

                  Gruß
                  Kalk

                  1. n'Abend,

                    Das heißt Mohrrüben!!1elf

                    Heut gibt’s Wurzeleintopf mit Mohrrüben und Karotten

                    ich würde noch ein paar Möhrchen dazugeben.
                    Und ganz wichtig: Ein paar abgezählte Erbsen! 😛

                    Live long and pros healthy,
                     Martin

                    --
                    Früher war ich klein und dumm. Inzwischen hat sich so manches geändert. Ich bin größer geworden.
                    1. *seufz*

                      Rolf

                      --
                      sumpsi - posui - obstruxi
                      1. Hallo,

                        *seufz*

                        Oh ja! Zeit für ein Bier!

                        Gruß
                        Kalk

  4. Hallo Maython,

    meine Passwörter enthalten zumeist ein bis zwei Backspaces. Mal hier, mal da. Wenn ich zu Komplexität gezwungen werde, bestehen sie auch nur aus Strg+V (um das Passwort aus dem Passwortmanager zu übertragen).

    Wenn ich mich an meinem Desktop einlogge, habe ich einen ganz anderen Rhythmus als wenn ich das mit dem Mäuseklavier meines Smartphones mache. Und wenn ich schlecht drauf bin und mich schon dreimal zertippt habe, dann kommt die nächste Eingabe auf einmal gaaanz langsam.

    Wenn Du Bots erkennen willst, dann solltest Du beachten, dass auch Bots von solchen biometrischen Routinen wissen können. Ich bin sicher, dass das Google Captcha, bei dem man nur "ich bin kein Bot" klicken muss und das meistens gar nicht erst erscheint, in einem ständigen Kampf gegen die Menschwerdung der Bots liegt.

    Ich halte deine Idee einer biometrischen Eingabeanalyse für eine interessante Fingerübung, aber in der freien Wildbahn macht das mehr Ärger als es hilft.

    Beim keyup-Handling musst Du auch beachten, dass nich jede Taste für die Eingabe relevant ist. Die Shift-Taste löst beispielsweise auch keyup aus. Wenn mein Passwort "ABC" lautet, kann ich das so eingegben:

    keydown - Shift
    keydown - A
    keyup - A
    keydown - B
    keyup - B
    keydown - C
    keyup - C
    keyup - Shift
    

    oder so

    keydown - Caps Lock
    keyup - Caps Lock
    keydown - A
    keyup - A
    keydown - V
    keyup - V
    keydown - Backspace
    keyup - Backspace
    keydown - B
    keyup - B
    keydown - C
    keyup - C
    keydown - Caps Lock
    keyup - Caps Lock
    

    oder so

    keydown - Shift
    keydown - A
    keyup - A
    keyup - Shift
    keydown - Shift
    keydown - B
    keyup - B
    keyup - Shift
    keydown - Shift
    keydown - C
    keyup - C
    keyup - Shift
    

    Da draußen sind so viele verschiedene Typen unterwegs, du weißt gar nicht, was die alles tun und wie konsistent sie dabei sind.

    Rolf

    --
    sumpsi - posui - obstruxi
  5. Jetzt will ich aber für ein Projekt schauen, wie schnell Leute ihr Passwort eintippen.

    Üblicherweise speichern auch Browser oder deren Hilfsprogramme Passwörter. Das „Eintippen“ geht dann sehr schnell…

    • https://support.mozilla.org/de/kb/passworter-verwalten-speichern-loeschen-aendern
    • https://support.google.com/chrome/answer/95606?co=GENIE.Platform%3DDesktop&hl=de
    • https://support.microsoft.com/de-de/microsoft-edge/kennwortspeicherung-in-microsoft-edge-aktivieren-oder-deaktivieren-b4beecb0-f2a8-1ca0-f26f-9ec247a3f336
    1. Hallo,

      Jetzt will ich aber für ein Projekt schauen, wie schnell Leute ihr Passwort eintippen.

      Üblicherweise speichern auch Browser oder deren Hilfsprogramme Passwörter.

      wenn man ihnen das erlaubt.

      Das „Eintippen“ geht dann sehr schnell…

      Sag ich doch.

      Live long and pros healthy,
       Martin

      --
      Früher war ich klein und dumm. Inzwischen hat sich so manches geändert. Ich bin größer geworden.
      1. Das „Eintippen“ geht dann sehr schnell…

        Sag ich doch.

        Oh. Hab ich übersehen.