Passwortbestimmungen und Speicherung

von DaBu, am 12.07

Passwörter, jeder kennt sie, viele hassen sie. Ich möchte heute aus Sicht eines Entwicklers an das Thema herangehen und über ein paar Dinge zu dem Thema schreiben, die ich bei vielen Projekten im Netz nicht nachvollziehen kann.

Anfangen möchte ich mit einer einfachen und leider noch sehr häufig missachteten Regel bei der Speicherung von Passwörtern.

Hashing

Vor etwa einem Jahr, habe ich die Liste der Browsergames hier auf Webgamers durchgearbeitet, um zu prüfen wo ich überall ein Account registriert habe. Dazu nutzte ich die "Passwort vergessen" Funktion des jeweiligen Spiels. Zu meinem eigenen Erstaunen schickte man mir in ein paar Spielen direkt mein aktuelles Passwort zu.

Es gab eine Zeit, da war es leider normal Passwörter im Klartext in der Datenbank zu speichern, dass war vor über 15 Jahren. Inzwischen ist man schlau genug um zu erkennen, dass Datenbanken geknackt und kopiert werden können.

Aus diesem Grund haben viele Seiten angefangen, die Passwörter ihrer Nutzer mittels md5 zu hashen.

Als dann die ersten Rainbow Tables veröffentlicht wurden, ging der nächste Schritt zur Nutzung von sogenannten Salts. Dafür mussten immer neue Rainbow Tables generiert werden. Mit der zunehmenden Rechenleistung war es allerdings immer schneller möglich md5 Hashes zu generieren und somit zu einem Hash das originale Passwort zu erhalten.

Inzwischen hat sich bcrypt als einer der Standard etabliert, da dort beispielsweise auch direkt mit angegeben werden kann wie viel Rechenaufwand für die Generierung eines Hashes investiert werden muss. Mit jedem bisschen mehr Rechenaufwand steigt der Zeitaufwand für einen Angreifer stark an. Wir hingegen müssen lediglich bei jedem Login ein kleines bisschen mehr Rechenleistung aufwenden. Weitere Informationen für die Nutzung in PHP sind hier zu finden: http://php.net/manual/en/function.password-hash.php

Passwortbestimmungen

Nachdem wir gerade festgestellt haben, dass Passwörter niemals im Klartext in der Datenbank stehen dürfen, sondern immer nur als Hash, erscheinen viele Passwortfelder kurios, wenn dort eine maximale Anzahl an Zeichen beschrieben wird. Da Hashwerte immer eine bestimmte Länge haben, ist es nicht relevant, ob das Passwort nun 10 oder 100 Zeichen lang ist.

Ähnlich verhält es sich bei der Wahl der Zeichen. Durch den Hash ist die Eingabe der Zeichen prinzipiell egal, deswegen ist es nicht sinnvoll den Nutzer einzuschränken. Ausnahmen bilden vielleicht Zeichen wie zum Beispiel null bytes.

Uplay Passwortbestimmung

Bei Uplay fühlte ich mich in der Wahl des Passworts sehr eingeschränkt. Aus diesem Grund habe ich Ubisoft um eine Stellungnahme gebeten, in der Hoffnung in Erfahrung zu bringen was die Entwickler dort dazu bewegt hat, solche Bestimmungen durchzusetzen. Leider haben wir dazu keinerlei Rückmeldung erhalten.

Über viele Bestimmungen bei der Passwortvergabe kann man sicher streiten. Wie lang soll ein Passwort mindestens sein? Muss das Passwort Buchstaben, Ziffern und auch Sonderzeichen enthalten? Erlaube ich Emojis? Umso aufwendiger die Passwortbestimmungen sind, umso größer ist die Hürde für eine Registrierung. Deswegen gilt es hier einen guten Mittelweg zu finden.

Und sonst so?

Es gibt da draußen viele Ideen die Qualität von Passwörtern zu berechnen. Beispielsweise wie oft wiederholt sich ein Zeichen oder handelt es sich um ein Wort aus dem Duden mit angehängter Zahl. Alles nette Überlegungen allerdings können auch komplexere Passwörter bereits in großen Passwortlisten gelandet sein. Vielleicht steht das eigentlich sehr sichere Passwort des Nutzers in vielen Listen unter den Top 10.000 Passwörtern.

Um genau so etwas herauszufinden gibt es haveibeenpwned.com. Die Seite bietet eine API an, um mögliche Passwörter zu prüfen. Dabei wird lediglich ein SHA-1 Hash generiert und davon werden nur die ersten 5 Zeichen übertragen. Dadurch kann die Seite nicht sagen, welches Passwort ihr prüft und liefert selbst alle bekannten Hashwerte im geforderten Bereich zurück. Nun muss lediglich geprüft werden ob der eigene Hash in der Antwort vorkommt.

Fazit

Passwörter müssen immer als Hash mit Salt gespeichert werden. Unnötige Begrenzungen von Passwörtern sollte vermieden werden. Schickt euch jemand bei vergessenem Passwort euer altes Passwort zu, dann schreibt den Inhaber an und macht ihn darauf Aufmerksam, dass er sich darum kümmern soll.

Werbung