Da meine erste Frage die Marke verfehlt hat, gebe ich eine separate Antwort. Der Hauptgrund ist, dass Grenzwerte erforderlich sind. Obwohl die Bedenken hinsichtlich des Speicherplatzes und des Datenblocks zutreffend sind, gibt es einige Probleme.
Wenn Sie zuerst meine ursprüngliche Antwort unten lesen, werden Sie feststellen, dass eine der Empfehlungen iteratives Hashing ist (dh pbkdf). . Dies erfordert eine große Anzahl von Iterationen, um wirklich effektiv zu sein. Wenn ein Benutzer eine große Zeichenfolge senden kann, werden die Kosten für die Berechnung dieses iterativen Hashwerts für eine einfache Authentifizierungsfunktion schnell teurer als erwartet.
Jede einzelne rechenintensive Aufgabe auf einem Server, insbesondere eine Dies ist explizit für einen nicht authentifizierten Benutzer verfügbar und wird von einem böswilligen Benutzer missbraucht, um einen Denial-of-Service-Angriff durchzuführen.
Zweitens bietet die Implementierung eines Kennworts mit fester Länge die Möglichkeit, vorzeitig zu beenden, wenn dies extrem ist lange Anfrage wird eingereicht. Wenn die Parameter in der Anforderung außerhalb der erwarteten Länge liegen, können Sie einfach eine Fehlermeldung ausgeben und die Verbindung schließen.
Der Grund dafür, dass die Anforderungen an die Kennwortkomplexität auf vielen Websites durchgesetzt werden, besteht darin, zu verhindern, dass Benutzer ein schwaches Kennwort auswählen. Es gibt zahlreiche Beispiele in der jüngeren Geschichte, die zeigen, dass die meisten Benutzer schwache, leicht einzugebende und leicht zu merkende Passwörter anstelle komplexer Passwörter auswählen. In diesem Fall setzt sich der Eigentümer der Website selbst einem Risiko aus, da Benutzer die Website ausnahmslos beschuldigen, wenn ein Kennwort gestohlen oder geknackt wird und welche Ergebnisse dies sowohl für die Website als auch für den betroffenen Benutzer haben kann.
Durch die Implementierung strenger Kennwortanforderungen wird die Wahrscheinlichkeit verringert, dass ein Angreifer das Kennwort leicht erraten kann. Passwörter müssen außerdem vor zwei verschiedenen Angriffspfaden geschützt werden. Der erste, Online-Angriffe, setzt voraus, dass ein Website-Entwickler über eine Richtlinie verfügt, die den Erfolg von Brute-Force-Angriffen verhindert. Dies wird erreicht, indem ein Benutzer ein entsprechend langes, komplexes Kennwort auswählen und die Anzahl der fehlgeschlagenen Anmeldeversuche einschränken muss, bevor er verlangsamt (dh vorübergehende Sperren, Captchas usw.) oder Anmeldeversuche stoppt (permanente Sperren, obligatorisches Zurücksetzen des Kennworts, Kontobestätigungen) usw.)
Der zweite Angriff ist ein Offline-Angriff, bei dem ein Angreifer eine Kopie einer Kennwortdatenbank abruft und versucht, mithilfe einer Regenbogentabelle oder eines Offline-Kennwortcrackers mehrere Konten zu knacken. Diese Art von Angriff wird verhindert, indem ein starker Hashing-Algorithmus in Verbindung mit einem Salt pro Benutzer und vorzugsweise ein erneutes Aufwärmen im pbkdf2- oder bcrypt / scrypt-Stil verwendet wird, um die Rechenkosten für das Offline-Cracken zu erhöhen.
Letztendlich beides Diese Techniken schlagen fehl, wenn Websites Benutzer nicht dazu ermutigen, ein eindeutiges Kennwort für ihre verschiedenen Konten auszuwählen. Viele Benutzer wählen dieselben Kennwörter für mehrere Konten aus. Wenn dieses Kennwort verfügbar ist, insbesondere für ihr E-Mail-Konto, kann ein Angreifer diese Anmeldeinformationen für einen anderen Dienst verwenden. Aus diesem Grund ist es am besten, eindeutige, sichere Kennwörter für jede Site oder zumindest verschiedene Gruppen von Sites zu generieren und einen sicheren Passwort-Manager zum Speichern aller verschiedenen Passwörter zu verwenden.