Wie ich dein Passwort speichere, welches Passwort du dir aussuchen solltest und was passiert, wenn du dein Passwort vergisst

In diesem Artikel gehe ich detailliert darauf ein, wie ich Passwörter für ListX-Benutzer speichere.

Man kann sich wahrscheinlich vorstellen, dass es eine schlechte Idee ist, Passwörter im Klartext zu speichern (wie man es beim Einloggen eingibt). Wenn eine Datenbank mit Klartext-Passwörtern angegriffen wird (wenn ein Unbefugter Zugriff darauf erhält), sind alle Benutzerkonten in unmittelbarer Gefahr.

Aus diesem Grund standardisierte die Industrie bereits 1976 die Speicherung von Passwörtern mittels sicherer, einseitiger Hash-Mechanismen (angefangen bei Unix Crypt). Während dies im Falle eines Kompromisses zwar das direkte Lesen von Passwörtern verhindert, erlauben alle Hash-Mechanismen es Angreifern jedoch notwendigerweise, den Hash offline zu brechen, indem sie Listen möglicher Passwörter durchgehen, sie haschen und das Ergebnis vergleichen. In diesem Zusammenhang haben sichere Hashing-Funktionen wie SHA einen kritischen Fehler bei der Passwort-Hashing: Sie sind so konzipiert, dass sie möglichst schnell sind.

Eine moderne CPU kann Millionen von SHA256-Hashes pro Sekunde erzeugen. Wenn Sie eine gut ausgestattete Grafikkarte verwenden, können Sie Hashes mit einer Geschwindigkeit von Milliarden pro Sekunde berechnen. Bei allen meinen Projekten schaue ich mir immer die aktuelle Situation an, um sicherzustellen, dass ich die Passwörter meiner Benutzer korrekt speichere. Was ich derzeit mit ListX verwende, ist eine Kombination aus SHA512 auf der Client-Seite und bcrypt auf der Server-Seite. Als erstes wird das Klartext-Passwort mit SHA512 in einen Hash-Wert umgewandelt. Dies behebt zwei spezielle Probleme mit bcrypt. Einige Implementierungen von bcrypt kürzen die Eingabe auf 72 Bytes, was die Entropie der Passwörter reduziert. Andere Implementierungen kürzen die Eingabe nicht ab und sind daher anfällig für DoS-Angriffe, da sie die Eingabe beliebig langer Passwörter erlauben. Durch die Anwendung von SHA kann ich wirklich lange Passwörter schnell in einen 512-Bit-Wert mit fester Länge umwandeln, wodurch beide Probleme gelöst werden.

Als nächstes wird dieser SHA512-Hash wieder mit bcrypt gehasht, mit kosten von 10, und mit einem einzigartigen Salt pro Benutzer. Im Gegensatz zu kryptographischen Hash-Funktionen wie SHA ist bcrypt so konzipiert, dass es langsam ist und schwer über angepasste Hardware und GPUs zu beschleunigen ist. Ein Arbeitsfaktor von 10 bedeutet ungefähr 100 ms für alle diese Schritte auf meinen Servern.

Warum nicht scrypt oder argon2 anstelle von bcrypt verwenden?

Ich habe überlegt, scrypt zu benutzen, aber ich hatte viel mehr Erfahrung mit bcrypt. Die Debatte darüber, welcher Algorithmus besser ist, ist noch offen, und die meisten Sicherheitsexperten sind sich einig, dass scrypt und bcrypt ähnliche Schutzfunktionen bieten.
Ich ziehe argon2 für das nächste Sicherheits-Upgrade in Betracht, da es der aktuelle Gewinner der Password Hashing Competition ist.
Zusätzlich, während ich glaube, dass argon2 eine fantastische Passwort-Hashing-Funktion ist, mag ich es, dass bcrypt seit 18 Jahren existiert, ohne dass signifikante Schwachstellen gefunden wurden.

Welches Passwort solltest du wählen?

Ich lassen Randall Munroe (alias XKCD) das mal erklären.
XKCD: Password Strength Das Problem mit den aktuellen Passwörtern und Passwortrestriktionen auf den meisten Seiten ist, dass sie für einen Hacker relativ einfach zu bruteforcen sind und für Menschen nur schwer zu behalten sind.
Wenn man einen einfachen Weg sucht, um sichere Passwörter zu finden, ohne einen Passwortgenerator zu verwenden, kann man einfach einen Satz bauen, der nur für einen selbst Sinn macht (aber nicht correct horse battery staple, das funktioniert nicht mehr), der aus weniger gebräuchlichen Wörtern besteht.
Ich schränke Passwörter nicht ein. So kann man sich problemlos an die aktuellen Abläufe anpassen und hat immer das sicherste Passwort.

Was passiert, wenn du dein Passwort vergessen hast?

Das passiert den Besten von uns. Eines Morgens wacht man auf, macht sich bereit zum Einkaufen und als man versucht, auf die ListX-Einkaufsliste zuzugreifen, wird einem klar: Man hat sein Passwort vergessen.
Nun, das ist nicht das Ende der Welt. Ich weiß nicht, was dein Passwort ist, also fang nicht an, mich für Passwörter anzutweeten.

Für mich ist es wirklich einfach, mich darauf zu verlassen, dass andere gute Entscheidungen treffen. Eine davon ist, wie dein E-Mail-Provider deinen Posteingang absichert. Wenn man sein Passwort bei ListX vergisst, bekommt man ein Token zugeschickt, mit dem man ein neues Passwort setzen kann. Klingt einfach, oder? Ist es! Alles, was man tun muss, ist auf den Link in der E-Mail zu klicken und ein neues Passwort einzugeben. Dies kann auch das alte Passwort sein, falls es dir wieder in den Sinn gekommen ist (in diesem Fall brauchst du nicht einmal dein Passwort zu ändern, du kannst einfach dein altes weiterverwenden). Nachdem du dein neues Passwort festgelegt hast, musst du nur noch die E-Mail mit dem Link löschen. Egal, ob du es benutzt hast oder nicht, stelle einfach sicher, dass niemand jemals in der Lage sein wird, diesen Link zu finden (es sei denn, die Privatsphäre spielt für dich keine Rolle).

Mit diesen Informationen sollten du gut vorbereitet sein. Melde dich jetzt bei ListX an!

Luca Kiebel

MEAN-Stack Developer (and PHP if I *have* to); Student 👨🏼‍💻🎓

Münster, Germany https://luca-kiebel.de

Subscribe to Luca Kiebel

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!