Frage:
Warum schränken einige Websites und Programme die Kennworteigenschaften ein?
TheLQ
2011-01-10 03:31:26 UTC
view on stackexchange narkive permalink

Es gibt einige Websites und sogar Programme, die ich benutze und die lächerliche Passwortbeschränkungen haben. Viele Foren beschränken beispielsweise Passwörter auf ~ 32 Zeichen. Andere erzwingen einen eingeschränkten Zeichensatz.

Was würde einen Entwickler dazu veranlassen, solche Einschränkungen vorzunehmen? Solange Sie das anfängliche Hashing eines Kennworts auf dem Client durchführen, wird der Server nicht belastet, da er den Hash enormer automatisch generierter Kennwörter berechnen muss. Die Verwendung solcher Einschränkungen scheint keinen Vorteil zu haben

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 der Grenzlast bei der Berechnung des Hash eines Datenblocks beliebiger Länge zutreffend sind, gibt es einige Probleme.
Sie führen den ersten Hash nicht auf der Clientseite durch. Wenn Sie dies tun würden, würde dies bedeuten, dass ein fehlerhafter Client nur den Hash als Passwort verwenden könnte, wodurch die Passwortstärke auf Ihre Hash-Größe reduziert wird :)
@Bill Ich habe mehr darüber nachgedacht, das Passwort zu sichern, wenn https nicht verfügbar ist, und dann Ihr Salt auf dem Server hinzuzufügen. Aber das ist kein Thema.
Fünf antworten:
Jakob Borg
2011-01-10 07:20:08 UTC
view on stackexchange narkive permalink

Ich denke, der Grund ist der gleiche wie bei jeder anderen Eingabevalidierung. um sicherzustellen, dass es während der Verarbeitung und Lagerung keine Probleme verursacht. Für Passwörter ist dies natürlich völlig falsch, da sie gehasht und daher im Klartext weder gespeichert noch wirklich verarbeitet werden sollten.

Ich würde solche Einschränkungen als Hinweis darauf nehmen, dass die Entwickler nicht wissen, was sie aus Sicherheitsgründen tun, und das Kennwort wahrscheinlich im Klartext speichern werden. Bleib weg.

+1, meine Gedanken genau. Es ist jedoch auch möglich, dass sie das Kennwort symmetrisch verschlüsseln (anstatt es zu hashen). In diesem Fall wäre es immer noch durch eine beliebige Feldgröße begrenzt, die lang, aber nicht lang genug ist. Zeichenbeschränkungen sind auch ein fehlgeleiteter Versuch, Vergleiche zu vereinfachen.
Das symmetrische Verschlüsseln des Passworts ist meistens ein Zeichen, um sich von irgendwo fernzuhalten. Ja, es gibt Zeiten, in denen dies erforderlich ist oder sogar ein guter Weg, aber sie sind selten.
@Bill, oh ich stimme zu. Ich möchte nur darauf hinweisen, dass es Zeiten gibt, in denen es nicht gehasht wird und dennoch die Einschränkung besteht. Symmetrisch verschlüsselte Passwörter sind nicht so schlecht wie Klartext, aber es ist (normalerweise, wie Sie sagten, es gibt Zeiten, in denen es richtig ist) ein gutes Zeichen, dass die Entwickler irregeführt werden.
D.W.
2011-01-10 10:19:16 UTC
view on stackexchange narkive permalink

Ich werde gehen mit: den gleichen alten Gründen, warum Menschen seltsame Dinge tun.

  • Weil es zu dieser Zeit eine gute Idee zu sein schien. Entwickler sind möglicherweise gut gemeint, aber schlecht informiert. Die Kennwortlänge muss nicht begrenzt werden, aber Entwickler sind sich dessen möglicherweise nicht bewusst. Vielleicht haben Entwickler nicht einmal darüber nachgedacht.

  • Weil es einfacher war als die Alternativen. Vielleicht verwenden sie eine API, die nicht funktioniert Passwörter beliebiger Länge; Dies könnte es einfacher machen, die Kennwortlänge zu begrenzen, als eine bessere API zu verwenden. Möglicherweise haben sie SQL-Injection-Fehler in ihrer Datenbank, und anstatt die Dinge richtig zu codieren, um den SQL-Injection-Fehler zu vermeiden, ist es einfacher, nur einige Zeichen auf die schwarze Liste zu setzen (z. B. Benutzern zu verbieten, einfache Anführungszeichen in ihre Passwörter aufzunehmen). Vielleicht war es aus irgendeinem Grund einfacher, ein Array mit fester Länge als eine Zeichenfolge mit variabler Länge zu verwenden. Wer weiß.

Fazit: Es gibt keine wirklich gute Rechtfertigung für solche Grenzen. Ich bin sicher, wir sind daran gewöhnt, dass im Handel erhältliche Software oft alle möglichen seltsamen Designfehler enthält. Es passiert. Es ist eine Tatsache des Lebens. Dies ist eine Folge der Tatsache, dass "gut genug" viel billiger ist als "perfekt".

Aber kein Grund, wirklich lange Passwörter zuzulassen. Es gibt so viele nützliche Alternativen, die mehr Sicherheit, weniger Fehlerwahrscheinlichkeit usw. bieten.
Thomas Pornin
2011-01-10 20:28:25 UTC
view on stackexchange narkive permalink

Ein vernünftiger Grund für die Begrenzung der Kennwortlänge und des möglichen Zeichensatzes besteht darin, den Benutzer zur Anwendung geeigneter Kennwortverwaltungstechniken aufzufordern. In einfachen Worten, wenn ein Passwort riesig oder voller seltsamer Zeichen ist, erhöht dies die Wahrscheinlichkeit, dass der Benutzer das Passwort auf ein Blatt Papier (traditionell unter die Tastatur geklebt) aufschreibt und / oder dasselbe Passwort in mehreren Systemen wiederverwendet

Konzeptionell liegt es in seiner Verantwortung, wie der Benutzer seine eigenen Passwörter verwaltet, und es geht ihn nichts an. In der Praxis sind Benutzer jedoch in Bezug auf die Sicherheit ahnungslos und können sich nicht mit etwas langweilen, das keine sofortige Vergeltung bietet (insbesondere wenn Benutzer potenzielle Kunden sind). Es liegt also an der Website, zu versuchen, das zu tun, was sie kann, um den Benutzer zu schützen.

Beachten Sie, dass ich nicht behaupte, dass der Versuch, eine gute Passwortverwaltung durchzusetzen, der ist Grund, warum eine bestimmte Site die Passwortlänge begrenzt; Dies ist nur ein Grund, warum I eine Beschränkung der Kennwortlänge auf meiner eigenen Website vorsieht (wenn ich eine Website mit Benutzerkennwörtern verwalten würde).

Eine weitere Begründung für einen begrenzten zulässigen Zeichensatz soll die Interoperabilität fördern: Vorzugsweise sollte der Benutzer in der Lage sein, sein Passwort auf einer Vielzahl von Eingabegeräten einzugeben. Nicht-ASCII-Zeichen eignen sich nicht für alles, was wie eine US-Tastatur aussieht (es ist möglich, Nicht-ASCII-Buchstaben auf einer US-Tastatur einzugeben, ich mache das ständig, aber die Methoden variieren je nach Betriebssystem und Konfiguration und tun dies auch funktioniert nicht gut mit blindem Tippen, wie es bei der Passworteingabe üblich ist). Smartphones unterliegen noch größeren Einschränkungen. Auch hier ist die Interoperabilität (meiner Ansicht nach) ein guter Grund, einen begrenzten Zeichensatz durchzusetzen, aber viele Websites unterliegen aus schlechten Gründen einer solchen Einschränkung (z. B. damit das Kennwort unachtsam in SQL gespeichert werden kann) Anfrage ohne ordnungsgemäße Escape-Zeichenfolge, was nur als schlampiges Engineering bezeichnet werden kann.

Es gibt gute Gründe, sichere Passwörter zu fördern oder sogar durchzusetzen, aber ich denke, neun von zehn Fällen erfinden Menschen ein sicheres Passwort und * schreiben es dann auf ein Post-it *. Ein schwächeres Passwort, das sie dann auswendig gelernt haben, wäre wohl sicherer.
@Shadur Ich stimme nicht unbedingt zu. Das Aufschreiben eines Passworts ist zwar weniger sicher als das Auswendiglernen, es ist jedoch nicht immer möglich, solche geschriebenen Passwörter zu erwerben. In Hochsicherheitskontexten mag dies zutreffen, aber für öffentliche Websites mit einer riesigen Benutzerbasis ist es weniger wahrscheinlich, dass ein solches Passwort gesucht und gestohlen wird. Ihr schwaches Passwort ist schlechter als ein geschriebenes Passwort.
* In einfachen Worten, wenn ein Passwort riesig oder voller seltsamer Zeichen ist, erhöht dies die Wahrscheinlichkeit, dass der Benutzer das Passwort auf ein Blatt Papier (traditionell unter die Tastatur geklebt) aufschreibt und / oder dasselbe Passwort in mehrere wiederverwendetSysteme. * - (Fast) alle meine Passwörter sind lange, standortspezifische ASCII-verknüpfte Hashes (die ich nicht notiert, sondern generiert habe, wenn ich sie brauche).Das Auferlegen von Einschränkungen hindert mich daran, diese sicheren Passwörter zu verwenden.
Rory Alsop
2011-01-10 07:06:29 UTC
view on stackexchange narkive permalink

Ich dachte, wir hätten eine Frage wie diese, aber entweder ist mein Such-Fu heute Abend schwach oder es war auf einer anderen Site.

Grundsätzlich ist es in den meisten Anwendungen oder Datenbanken sinnvoll, nützliche Grenzen für die Eingabe zu definieren Saiten. Auf diese Weise können Sie die Eingabe stoppen, sobald das Limit erreicht ist (wodurch Überläufe usw. vermieden werden können), und Sie können auch die Codeleistung vorhersagen.

Außerdem benötigen Sie möglicherweise temporären Speicher, während Sie Kennwörter überprüfen, bevor sie gehasht werden Eine beliebig lange Eingabe kann Probleme verursachen.

Warum 32? Eine vernünftige Zahl für die meisten Zwecke - die Entropie in 32 Zeichen ist riesig. In einigen Umgebungen reicht dies natürlich nicht aus, aber für viele von ihnen ist ein Zertifikat oder ein zweiter Faktor (z. B. ein Token) möglicherweise ohnehin besser geeignet.

Obwohl ich damit einverstanden bin, dass es einige Grenzen geben sollte, um zu verhindern, dass Menschen Monster mit 10.000 Charakteren erzeugen, hat die Beschränkung auf 32 Charaktere und das Blockieren bestimmter Charaktere keinen Zweck. Wenn Sie sich nicht an einem extrem aktiven Standort befinden, verursachen 100 aller Zeichen (einschließlich Unicode) nur wenig Rechenaufwand.
Ich denke, diese Antwort ist zirkulär. Der Fragesteller fragt: "Warum gibt es Grenzen?". Sie antworten: "Weil es Sinn macht, Grenzen zu haben." Aber das wirft nur die Frage auf: "Warum ist es sinnvoll, Grenzen zu haben?". Persönlich bezweifle ich sehr, dass Entwickler die Alternativen ausführlich abgewogen haben und nach eingehender Überlegung entschieden haben, dass eine Beschränkung auf 32 Zeichen ideal und allen Alternativen überlegen ist. Ich vermute, es ist wahrscheinlicher, dass sich die Entwickler mehr auf andere Dinge konzentriert haben und eine Beschränkung auf 32 Zeichen meistens ein Unfall ist.
Ich stimme voll und ganz zu, dass dies mit ziemlicher Sicherheit keine kalkulierte Zahl ist. Das habe ich nicht gemeint. Sie möchten auf keinen Fall, dass Benutzer sehr lange Passwörter eingeben müssen - über 30 ist es nicht sinnvoll, ein Passwort zu haben, da Sie sich nur für Tippfehler usw. offen lassen. Verwenden Sie für zusätzliche Sicherheit etwas, das besser für das geeignet ist Job, wie ein Zertifikat oder ein Token, wie ich bereits erwähnte. Dies ist viel sinnvoller als beispielsweise die Eingabe von 200-Zeichen-Passwörtern.
@Rory,, aber warum sollte es sinnvoll sein, die Passwortlänge * beliebig * zu begrenzen? es wird alles auf die gleiche Länge gehasht, und wenn ein Benutzer sich selbst bestrafen will, um "mehr" Sicherheit zu erhalten, warum nicht? Vergessen Sie nicht, dass er es möglicherweise nicht selbst eingibt - es gibt viele clientseitige Tools (z. B. PassSafe), die dies für Sie erledigen.
@AviD - Ich denke, auf den Stufen, die vor dem Hashing auftreten, müssen Sie die Zeichenfolge kontrolliert handhaben. Stimmen Sie jedoch mit PassSafe überein - ich verwende es, um einige Anmeldeinformationen zu speichern, bei denen die Anwendung keine Zertifikate oder Token zulässt.
Dies könnte z.B. C ++ - Anwendungen, aber in den meisten Apps - .NET, Java, verschiedenen Skriptsprachen - ist eine Zeichenfolge nur eine Zeichenfolge, und abgesehen davon, dass sie mit 2 GB Datenlänge geladen wird, sollte dies keine Rolle spielen. Aber mir ist klar, wohin du gehst - 60000 Zeichen sind lächerlich und sinnlos. 32 Zeichen mögen die gleiche Logik sein, aber viel weniger konservativ ...
ygjb
2011-01-10 07:05:30 UTC
view on stackexchange narkive permalink

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.

Ich glaube, das OP hat sich gefragt, warum das Passwort auf eine so kurze Länge beschränkt war, anstatt ihn ein viel längeres Passwort eingeben zu lassen.
Hmm .. wenn Sie die Frage noch einmal lesen, könnten Sie richtig liegen. Wie auch immer, hoffentlich ist meine Antwort für jemanden nützlich;)
Quatsch. Lange Passwörter sind kein effektiver DOS-Angriff. Ich kaufe diese Antwort überhaupt nicht.
Ich möchte auch darauf hinweisen, dass die Begrenzung der Länge von Passwörtern oder der zulässigen Zeichen die Passwörter nicht stärkt. es * schwächt * sie, indem es die Entropie begrenzt. Und Regenbogentabellen sind hier irrelevant; Sie rechtfertigen keine Passwortbeschränkungen.
@D.W., Der zweite Teil seiner Antwort war der ursprüngliche Beitrag von @ygjb's, als er die Frage falsch interpretierte - und sie wurde dort gelassen, um hoffentlich trotzdem jemandem zu helfen ...
Obwohl ich damit einverstanden bin, dass lange Passwörter nicht zu DOS beitragen - Hash ist selbst bei mäßig langen Zeichenfolgen äußerst effizient. Okay, das Hashing von "Krieg und Frieden" könnte einen Performance-Hit verursachen, aber alles Vernünftige - sogar hundert Charaktere - wäre vernachlässigbar. Was das wiederholte Hashing (pbkdf) angeht, haben Sie nach dem ersten Hash immer die gleiche Länge.
Hashing an sich führt nicht zu einer Denial-of-Service-Bedingung, empfiehlt jedoch Ansätze für die Verwendung von "Passwort-Stretching" im pbkdf-, scrypt- oder bcrypt-Stil, die für jede Authentifizierung in einem beliebig großen Datensatz tausend oder mehr Iterationen des Hashing-Algorithmus erfordern Dies könnte schwerwiegende Auswirkungen auf die Serverleistung haben. In diesem Fall ist es sinnvoll, eine maximale Länge für ein Kennwort festzulegen, um Auswirkungen auf die Leistung des Servers zu vermeiden.
@ygjb, Wenn Sie für jedes Passwort tausend Hash-Iterationen durchführen, führen Sie dieselben tausend Iterationen durch, unabhängig davon, wie lang das Passwort ist. Mit Ausnahme der ersten Iteration arbeiten ALLE anderen Iterationen mit derselben Datenmenge: der Ausgabe der vorherigen Iteration. Z.B. 512b (für SHA-512). Die Länge der Originaldaten ist nur in der ersten Iteration relevant. Danach handelt es sich nur noch um Hash-Ausgaben (deren Länge identisch ist).
https://www.djangoproject.com/weblog/2013/sep/15/security/


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 2.0-Lizenz, unter der er vertrieben wird.
Loading...