Wie kann ich die Stärke eines Passwortes messen?

8

Ich suchte nach einem effektiven Algorithmus, der mir eine genaue Vorstellung davon geben kann, wie stark ein Passwort ist.

Ich habe festgestellt, dass mehrere verschiedene Websites verschiedene Algorithmen verwenden, da ich auf verschiedenen Websites unterschiedliche Passwortstärken erhält.

    
OrangeRind 23.10.2009, 17:17
quelle

6 Antworten

19

Dies ist zu meinem allgemeinen Braindump von Best Practices für die Arbeit mit Passwörtern in PHP / MySQL gewachsen. Die hier vorgestellten Ideen sind im Allgemeinen nicht meine eigenen, sondern das Beste, was ich bisher gefunden habe.

Stellen Sie sicher, dass Sie SSL für alle Vorgänge mit Benutzerinformationen verwenden. Alle Seiten, die diese Formulare enthalten, sollten prüfen, ob sie über HTTPS aufgerufen werden, und sich weigern, anderweitig zu arbeiten.

Sie können die meisten Angriffe eliminieren, indem Sie einfach die Anzahl der zulässigen fehlgeschlagenen Anmeldungen begrenzen.

Ermöglichen Sie relativ schwache Passwörter, speichern Sie jedoch die Anzahl der fehlgeschlagenen Logins pro Benutzer und verlangen Sie eine Bestätigung des Captchas oder des Passworts per E-Mail, wenn Sie diese überschreiten. Ich habe meine maximalen Fehler auf 5 gesetzt.

Das Anzeigen von Anmeldefehlern für den Benutzer muss sorgfältig durchdacht werden, um Angreifern keine Informationen bereitzustellen. Eine fehlgeschlagene Anmeldung aufgrund eines nicht vorhandenen Benutzers sollte die gleiche Nachricht wie eine fehlgeschlagene Anmeldung aufgrund eines ungültigen Kennworts zurückgeben. Durch das Bereitstellen einer anderen Nachricht können Angreifer gültige Benutzeranmeldungen ermitteln.

Stellen Sie außerdem sicher, dass Sie im Falle eines Fehlers für zu viele Logins mit einem gültigen Passwort und einem Fehler mit zu vielen Logins und einem falschen Passwort genau dieselbe Nachricht zurückgeben. Durch das Bereitstellen einer anderen Nachricht können Angreifer gültige Benutzerkennwörter ermitteln. Eine recht große Anzahl von Benutzern, die gezwungen sind, ihr Passwort zurückzusetzen, werden es einfach zurückstellen, was es war.

Leider ist es nicht praktisch, die Anzahl der erlaubten Logins pro IP-Adresse zu begrenzen. Mehrere Anbieter wie AOL und die meisten Unternehmen geben ihre Webanfragen weiter. Durch die Einführung dieses Limits werden diese Benutzer effektiv eliminiert.

Ich habe herausgefunden, dass die Suche nach Wörterbuchwörtern vor dem Senden ineffizient ist, da entweder ein Wörterbuch an den Client in JavaScript gesendet werden muss oder eine Ajax-Anfrage pro Feldwechsel gesendet werden muss. Ich habe das eine Weile lang gemacht und es hat funktioniert, aber ich mochte den Traffic nicht, den es erzeugt hat.

Die Überprüfung auf inhärent schwache Passwörter ohne Wörterbuchwörter ist praktische Clientseite mit etwas einfachem Javascript.

Nach dem Abschicken prüfe ich nach Wörterbuchwörtern und Benutzernamen, die ein Passwort enthalten und umgekehrt Serverseite. Sehr gute Wörterbücher können leicht heruntergeladen werden, und das Testen gegen sie ist einfach. Eine Sache ist hier, dass Sie, um nach einem Wörterbuchwort zu suchen, eine Abfrage an die Datenbank senden müssen, die wiederum das Passwort enthält. So kam ich dazu, mein Wörterbuch vorher mit einer einfachen Verschlüsselung zu verschlüsseln und SALT zu beenden und dann nach dem verschlüsselten Passwort zu suchen. Nicht ideal, aber besser als reiner Text und nur auf dem Draht für Leute auf Ihren physischen Maschinen und Subnetz.

Sobald Sie mit dem Passwort, das sie ausgewählt haben, zufrieden sind, verschlüsseln Sie es zuerst mit PHP und speichern Sie es dann. Die folgende Passwortverschlüsselung ist auch nicht meine Idee, löst aber eine Reihe von Problemen. Die Verschlüsselung in PHP verhindert, dass Personen auf einem gemeinsam genutzten Server Ihre unverschlüsselten Passwörter abfangen. Hinzufügen von etwas pro Benutzer, der sich nicht ändert (ich benutze E-Mail, da dies der Benutzername für meine Sites ist) und einen Hash hinzufügen (SALT ist eine kurze konstante Zeichenfolge, die ich pro Site ändere) erhöht den Widerstand gegen Angriffe. Da sich das SALT innerhalb des Passworts befindet und das Passwort beliebig lang sein kann, ist es nahezu unmöglich, dies mit einer Rainbow-Tabelle anzugreifen. Alternativ bedeutet dies auch, dass Personen ihre E-Mails nicht ändern können und dass Sie das SALT nicht ändern können, ohne das Passwort für jeden zu entwerten.

EDIT: Ich würde jetzt empfehlen PhPass statt meiner eigenen Funktion hier zu rollen, oder einfach User Logins ganz zu vergessen und Verwenden Sie stattdessen OpenID .

%Vor%

Mein Jqueryish-Client-Seiten-Passwort-Messgerät. Ziel sollte ein div sein. Die Breite ändert sich zwischen 0 und 100 und die Hintergrundfarbe ändert sich basierend auf den im Skript angegebenen Klassen. Wiederum meist von anderen Sachen die ich gefunden habe gestohlen:

%Vor%     
Daren Schwenke 23.10.2009, 17:31
quelle
7

Grundsätzlich möchten Sie die wichtigsten Arten von Angriffen verhindern

  • Wörterbuchangriffe
  • Brute-Force-Angriffe

Um das erste zu verhindern, sollten Sie Passwörter mit schwachen Wörtern berücksichtigen. Um das zweite zu verhindern, möchten Sie Passwörter mit einer angemessenen Länge (8 Zeichen sind üblich) und einem relativ großen Zeichensatz (einschließlich Buchstaben, Zahlen und Sonderzeichen) unterstützen. Wenn Sie Klein- und Großbuchstaben als unterschiedlich betrachten, erhöht dies den Zeichensatz erheblich. Dies führt jedoch zu einem Benutzerfreundlichkeitsproblem für einige Benutzergemeinschaften, sodass Sie diese Abwägung berücksichtigen müssen.

Bei einer schnellen Google-Suche wurden Lösungen gefunden, die für Brute-Force-Angriffe (komplexes Passwort), nicht jedoch für Wörterbuchangriffe verantwortlich sind. PHP Password Strength Meter von diese Liste der Stärkeüberprüfer Führt die Check-Server-Seite aus, so dass es erweitert werden könnte, um ein Wörterbuch zu überprüfen.

BEARBEITEN:

Übrigens sollten Sie auch die Anzahl der Anmeldeversuche pro Benutzer beschränken. Dadurch werden beide Arten von Angriffen weniger wahrscheinlich. Wirksam, aber nicht benutzerfreundlich ist, ein Konto nach X schlechten Versuchen zu sperren und erfordern ein Passwort zurückgesetzt. Benutzerfreundlicher, aber anstrengender ist es, die Zeit zwischen den Anmeldeversuchen zu verkürzen. Sie können auch CAPTCHA nach den ersten Anmeldeversuchen anfordern (was Stack Overflow nach zu vielen Änderungen oder für sehr neue Benutzer benötigt) ).

    
Eric J. 23.10.2009 17:21
quelle
3
___ qstnhdr ___ Wie kann ich die Stärke eines Passwortes messen? ___ answer1618675 ___

Wie Daren Schwenke darauf hingewiesen hat, arbeiten Sie besser selbst an der Sicherheit und nicht in den Händen der Benutzer .

Aber es ist gut, dem Benutzer einige Hinweise darauf zu geben, wie stark sein Passwort ist, denn ist der beste Weg, um ein Passwort zu erhalten, immer noch sozial engenering .

Sie können also ein kleines clientseitiges Skript hacken, das die Benutzerpasswortstärke als Höflichkeitsanzeige in Echtzeit überprüft. Es blockiert nichts, aber gibt ihm ein gutes warmes Gefühl, wenn es grün wird: -)

Was Sie im Grunde überprüfen müssen, ist common sense: Überprüfen Sie, ob das Passwort Buchstaben, Zahlen und nicht alphabetische Zeichen in einer angemessenen Menge enthält.

Sie können Ihren eigenen Algo sehr leicht hacken: machen Sie einfach 10/10-Markierung:

  • 0 ist ein Null langes Passwort;
  • +2 für alle 8 Zeichen im Passwort (15 soll eine sichere Länge sein);
  • +1 für die Verwendung eines Buchstabens, +2 für die Verwendung von zwei Buchstaben;
  • +1 für die Verwendung einer Nummer, +2 für die Verwendung von 2 Nummern;
  • +1 für die Verwendung von nicht alphabetischen Zeichen, +2 für 2.

Sie müssen nicht nach gottähnlichen Passwörtern suchen (gibt es Großbuchstaben, wo sind die Sonderzeichen, usw.), Ihre Benutzer sind nicht in der Bank / Militär / Geheimdienst / Monatspythonfilmindustrie, oder?

Sie können das in einer Stunde ohne verrückte Javascript-Fähigkeiten programmieren.

Und trotzdem, validiere das Passwort und verschiebe den gesamten Sicherheitscode auf der Serverseite. Wenn Sie Authentifizierung (z. B. offene ID) delegieren können, noch besser.

    
___ answer1614958 ___

Ich kann mir keinen speziellen Algorithmus vorstellen, um die Stärke eines Passworts zu überprüfen. Was wir tun ist, dass wir mehrere Kriterien definieren und wenn das Passwort ein Kriterium respektiert, fügen wir 1 zu seiner Punktzahl hinzu. Wenn das Passwort einen Schwellenwert erreicht, ist das Passwort stark. Sonst ist es schwach.

Sie können viele verschiedene Stärkegrade definieren, wenn Sie unterschiedliche Threshold-Werte haben, oder Sie können einen anderen Wert für ein bestimmtes Kriterium definieren. Wenn zum Beispiel ein Passwort 5 Zeichen hat, fügen wir 1 hinzu, aber wenn es 10 ergibt, fügen wir 2 hinzu.

Hier ist eine Liste mit Kriterien, nach denen

gesucht werden soll

Länge (8 bis 12 ist ok, mehr ist besser) Enthält Kleinbuchstaben Enthält Großbuchstaben Der Großbuchstabe ist NICHT der erste. Enthält Nummer Enthält Symbole das letzte Zeichen ist kein menschenähnliches Symbol (zB: oder!) Sieht nicht wie ein Wörterbuch aus. Irgendein kluger Kennwortsprung enthält Bibliothek der Wort- und Buchstabensubstitute (wie Bibliothek - & gt; L1br @ ry)

Hoffen Sie, dass Hilfe.

    
___ answer35002517 ___

Rollen Sie nicht selbst!

Kryptographie-Experten raten von der eigenen Kryptographie ab offensichtlich sein.

Aus den gleichen Gründen sollte man nicht versuchen, seine eigene Lösung für das Problem der Messung der Stärke eines Passworts zu finden; es ist ein kryptografisches Problem.

Gehen Sie nicht in die hässliche Angelegenheit, einen massiven regulären Ausdruck für diesen Zweck zu erstellen; Sie werden wahrscheinlich nicht mehrere Faktoren berücksichtigen, die die Gesamtstärke eines Kennworts beeinflussen.

Es ist ein schwieriges Problem

Das Problem der Messung der Stärke eines Passworts ist mit erheblichen Schwierigkeiten verbunden. Je mehr Forschung ich zu diesem Thema mache, desto mehr erkenne ich, dass dies ein "unidirektionales" Problem ist; das heißt, man kann nicht die "Schwierigkeit" (Rechenaufwand) messen, ein Passwort effizient zu knacken . Vielmehr ist es effizienter, Komplexitätsanforderungen bereitzustellen und die Fähigkeit des Passworts zu messen, diese zu erfüllen.

Wenn wir das Problem logisch betrachten, macht ein "Crackability-Index" nicht viel Sinn, so bequem es klingt. Es gibt so viele Faktoren, die die Berechnung steuern, von denen sich die meisten auf die Berechnungsressourcen beziehen, die dem Cracking-Prozess gewidmet sind, so dass sie unpraktisch sind.

Stellen Sie sich vor, dass Sie John the Ripper (oder ein ähnliches Tool) gegen das betreffende Passwort einsetzen. Es kann Tage dauern, ein anständiges Passwort zu knacken, Monate, um ein gutes Passwort zu knacken, und bis die Sonne brennt, um ein außergewöhnliches Passwort zu knacken. Dies ist kein praktisches Mittel, um die Passwortstärke zu messen.

Das Problem aus der anderen Richtung zu erreichen, ist viel überschaubarer: Wenn wir eine Reihe von Komplexitätsanforderungen stellen, ist es möglich, die relative Stärke eines Passworts sehr schnell zu beurteilen. Offensichtlich müssen sich die gelieferten Komplexitätsanforderungen im Laufe der Zeit ändern, aber es gibt weitaus weniger Variablen, die berücksichtigt werden müssen, wenn wir das Problem auf diese Weise angehen.

Eine tragfähige Lösung

%code% ist ein eigenständiges Dienstprogramm von Openwall erhältlich (vermutlich für Password Quality Checker <) / em>). Openwall Entwickler, Solar Designer, scheint ein echter Kryptographieexperte zu sein (seine Werke sprechen für sich) und ist daher qualifiziert, ein solches Werkzeug zu schreiben.

Für meinen speziellen Anwendungsfall ist dies eine weitaus attraktivere Lösung als die Verwendung eines schlecht durchdachten JavaScript-Snippets in einer dunklen Ecke des Webs.

Die Festlegung von Parametern für Ihre speziellen Bedürfnisse ist der schwierigste Teil. Die Implementierung ist der einfache Teil.

Ein praktisches Beispiel

Ich biete eine einfache Implementierung in PHP an, um einen Start zu ermöglichen. Es gelten die Standard-Disclaimer.

Dieses Beispiel geht davon aus, dass wir dem PHP-Skript eine vollständige Liste von Passwörtern geben. Es versteht sich von selbst, dass wenn Sie dies mit echten Passwörtern tun (z. B. solche, die aus einem Passwortmanager herausgeworfen werden), sollte äußerste Vorsicht in Bezug auf die Passwortbehandlung ausgeübt werden. Einfach den unverschlüsselten Passwort-Dump auf die Festplatte zu schreiben, gefährdet die Sicherheit Ihrer Passwörter!

%code% :

%Vor%

%code% :

%Vor%

Ergebnis %code% :

%Vor%

Wrapping-Up

Ich muss noch eine gründlichere Lösung im Internet finden; Selbstverständlich begrüße ich weitere Empfehlungen.

Offensichtlich ist dieser Ansatz für bestimmte Anwendungsfälle (z. B. ein "Passwortsicherheitsmesser", der "clientseitig" implementiert ist) nicht ideal. Trotzdem wäre es trivial, einen AJAX-Aufruf an eine serverseitige Ressource zu richten, die eine Pass / Fail-Antwort unter Verwendung des oben beschriebenen Ansatzes zurückgibt, aber ein solcher Ansatz sollte das Potenzial für Missbrauch (z. B. DoS-Angriffe) annehmen und erfordern sichere Kommunikation zwischen Client und Server sowie Akzeptanz der mit der Übertragung des unverschlüsselten Passworts verbundenen Risiken.

    
___ tag123php ___ PHP ist eine weit verbreitete, dynamische, objektorientierte und interpretierte Skriptsprache, die primär für die serverseitige Webentwicklung entwickelt wurde. ___ answer1614890 ___

Dies ist zu meinem allgemeinen Braindump von Best Practices für die Arbeit mit Passwörtern in PHP / MySQL gewachsen. Die hier vorgestellten Ideen sind im Allgemeinen nicht meine eigenen, sondern das Beste, was ich bisher gefunden habe.

Stellen Sie sicher, dass Sie SSL für alle Vorgänge mit Benutzerinformationen verwenden. Alle Seiten, die diese Formulare enthalten, sollten prüfen, ob sie über HTTPS aufgerufen werden, und sich weigern, anderweitig zu arbeiten.

Sie können die meisten Angriffe eliminieren, indem Sie einfach die Anzahl der zulässigen fehlgeschlagenen Anmeldungen begrenzen.

Ermöglichen Sie relativ schwache Passwörter, speichern Sie jedoch die Anzahl der fehlgeschlagenen Logins pro Benutzer und verlangen Sie eine Bestätigung des Captchas oder des Passworts per E-Mail, wenn Sie diese überschreiten. Ich habe meine maximalen Fehler auf 5 gesetzt.

Das Anzeigen von Anmeldefehlern für den Benutzer muss sorgfältig durchdacht werden, um Angreifern keine Informationen bereitzustellen. Eine fehlgeschlagene Anmeldung aufgrund eines nicht vorhandenen Benutzers sollte die gleiche Nachricht wie eine fehlgeschlagene Anmeldung aufgrund eines ungültigen Kennworts zurückgeben. Durch das Bereitstellen einer anderen Nachricht können Angreifer gültige Benutzeranmeldungen ermitteln.

Stellen Sie außerdem sicher, dass Sie im Falle eines Fehlers für zu viele Logins mit einem gültigen Passwort und einem Fehler mit zu vielen Logins und einem falschen Passwort genau dieselbe Nachricht zurückgeben. Durch das Bereitstellen einer anderen Nachricht können Angreifer gültige Benutzerkennwörter ermitteln. Eine recht große Anzahl von Benutzern, die gezwungen sind, ihr Passwort zurückzusetzen, werden es einfach zurückstellen, was es war.

Leider ist es nicht praktisch, die Anzahl der erlaubten Logins pro IP-Adresse zu begrenzen. Mehrere Anbieter wie AOL und die meisten Unternehmen geben ihre Webanfragen weiter. Durch die Einführung dieses Limits werden diese Benutzer effektiv eliminiert.

Ich habe herausgefunden, dass die Suche nach Wörterbuchwörtern vor dem Senden ineffizient ist, da entweder ein Wörterbuch an den Client in JavaScript gesendet werden muss oder eine Ajax-Anfrage pro Feldwechsel gesendet werden muss. Ich habe das eine Weile lang gemacht und es hat funktioniert, aber ich mochte den Traffic nicht, den es erzeugt hat.

Die Überprüfung auf inhärent schwache Passwörter ohne Wörterbuchwörter ist praktische Clientseite mit etwas einfachem Javascript.

Nach dem Abschicken prüfe ich nach Wörterbuchwörtern und Benutzernamen, die ein Passwort enthalten und umgekehrt Serverseite. Sehr gute Wörterbücher können leicht heruntergeladen werden, und das Testen gegen sie ist einfach. Eine Sache ist hier, dass Sie, um nach einem Wörterbuchwort zu suchen, eine Abfrage an die Datenbank senden müssen, die wiederum das Passwort enthält. So kam ich dazu, mein Wörterbuch vorher mit einer einfachen Verschlüsselung zu verschlüsseln und SALT zu beenden und dann nach dem verschlüsselten Passwort zu suchen. Nicht ideal, aber besser als reiner Text und nur auf dem Draht für Leute auf Ihren physischen Maschinen und Subnetz.

Sobald Sie mit dem Passwort, das sie ausgewählt haben, zufrieden sind, verschlüsseln Sie es zuerst mit PHP und speichern Sie es dann. Die folgende Passwortverschlüsselung ist auch nicht meine Idee, löst aber eine Reihe von Problemen. Die Verschlüsselung in PHP verhindert, dass Personen auf einem gemeinsam genutzten Server Ihre unverschlüsselten Passwörter abfangen. Hinzufügen von etwas pro Benutzer, der sich nicht ändert (ich benutze E-Mail, da dies der Benutzername für meine Sites ist) und einen Hash hinzufügen (SALT ist eine kurze konstante Zeichenfolge, die ich pro Site ändere) erhöht den Widerstand gegen Angriffe. Da sich das SALT innerhalb des Passworts befindet und das Passwort beliebig lang sein kann, ist es nahezu unmöglich, dies mit einer Rainbow-Tabelle anzugreifen. Alternativ bedeutet dies auch, dass Personen ihre E-Mails nicht ändern können und dass Sie das SALT nicht ändern können, ohne das Passwort für jeden zu entwerten.

EDIT: Ich würde jetzt empfehlen PhPass statt meiner eigenen Funktion hier zu rollen, oder einfach User Logins ganz zu vergessen und Verwenden Sie stattdessen OpenID .

%Vor%

Mein Jqueryish-Client-Seiten-Passwort-Messgerät. Ziel sollte ein div sein. Die Breite ändert sich zwischen 0 und 100 und die Hintergrundfarbe ändert sich basierend auf den im Skript angegebenen Klassen. Wiederum meist von anderen Sachen die ich gefunden habe gestohlen:

%Vor%     
___ tag123javascript ___ JavaScript (nicht zu verwechseln mit Java) ist eine dynamische Sprache mit mehreren Paradigmen auf hoher Ebene, die sowohl für das clientseitige als auch für das serverseitige Scripting verwendet wird. Verwenden Sie dieses Tag für Fragen zu ECMAScript und seinen verschiedenen Dialekten / Implementierungen (außer ActionScript und Google-Apps-Script). ___ tag123passwordprotection ___ Passwortschutz wird verwendet, um sicherzustellen, dass nur autorisierte Benutzer (d. h. diejenigen, die das Passwort kennen) auf bestimmte Informationen zugreifen oder diese ändern können. ___ answer1614836 ___

Grundsätzlich möchten Sie die wichtigsten Arten von Angriffen verhindern

  • Wörterbuchangriffe
  • Brute-Force-Angriffe

Um das erste zu verhindern, sollten Sie Passwörter mit schwachen Wörtern berücksichtigen. Um das zweite zu verhindern, möchten Sie Passwörter mit einer angemessenen Länge (8 Zeichen sind üblich) und einem relativ großen Zeichensatz (einschließlich Buchstaben, Zahlen und Sonderzeichen) unterstützen. Wenn Sie Klein- und Großbuchstaben als unterschiedlich betrachten, erhöht dies den Zeichensatz erheblich. Dies führt jedoch zu einem Benutzerfreundlichkeitsproblem für einige Benutzergemeinschaften, sodass Sie diese Abwägung berücksichtigen müssen.

Bei einer schnellen Google-Suche wurden Lösungen gefunden, die für Brute-Force-Angriffe (komplexes Passwort), nicht jedoch für Wörterbuchangriffe verantwortlich sind. PHP Password Strength Meter von diese Liste der Stärkeüberprüfer Führt die Check-Server-Seite aus, so dass es erweitert werden könnte, um ein Wörterbuch zu überprüfen.

BEARBEITEN:

Übrigens sollten Sie auch die Anzahl der Anmeldeversuche pro Benutzer beschränken. Dadurch werden beide Arten von Angriffen weniger wahrscheinlich. Wirksam, aber nicht benutzerfreundlich ist, ein Konto nach X schlechten Versuchen zu sperren und erfordern ein Passwort zurückgesetzt. Benutzerfreundlicher, aber anstrengender ist es, die Zeit zwischen den Anmeldeversuchen zu verkürzen. Sie können auch CAPTCHA nach den ersten Anmeldeversuchen anfordern (was Stack Overflow nach zu vielen Änderungen oder für sehr neue Benutzer benötigt) ).

    
___ qstntxt ___

Ich suchte nach einem effektiven Algorithmus, der mir eine genaue Vorstellung davon geben kann, wie stark ein Passwort ist.

Ich habe festgestellt, dass mehrere verschiedene Websites verschiedene Algorithmen verwenden, da ich auf verschiedenen Websites unterschiedliche Passwortstärken erhält.

    
___
brendan 23.10.2009 17:25
quelle
2

Wie Daren Schwenke darauf hingewiesen hat, arbeiten Sie besser selbst an der Sicherheit und nicht in den Händen der Benutzer .

Aber es ist gut, dem Benutzer einige Hinweise darauf zu geben, wie stark sein Passwort ist, denn ist der beste Weg, um ein Passwort zu erhalten, immer noch sozial engenering .

Sie können also ein kleines clientseitiges Skript hacken, das die Benutzerpasswortstärke als Höflichkeitsanzeige in Echtzeit überprüft. Es blockiert nichts, aber gibt ihm ein gutes warmes Gefühl, wenn es grün wird: -)

Was Sie im Grunde überprüfen müssen, ist common sense: Überprüfen Sie, ob das Passwort Buchstaben, Zahlen und nicht alphabetische Zeichen in einer angemessenen Menge enthält.

Sie können Ihren eigenen Algo sehr leicht hacken: machen Sie einfach 10/10-Markierung:

  • 0 ist ein Null langes Passwort;
  • +2 für alle 8 Zeichen im Passwort (15 soll eine sichere Länge sein);
  • +1 für die Verwendung eines Buchstabens, +2 für die Verwendung von zwei Buchstaben;
  • +1 für die Verwendung einer Nummer, +2 für die Verwendung von 2 Nummern;
  • +1 für die Verwendung von nicht alphabetischen Zeichen, +2 für 2.

Sie müssen nicht nach gottähnlichen Passwörtern suchen (gibt es Großbuchstaben, wo sind die Sonderzeichen, usw.), Ihre Benutzer sind nicht in der Bank / Militär / Geheimdienst / Monatspythonfilmindustrie, oder?

Sie können das in einer Stunde ohne verrückte Javascript-Fähigkeiten programmieren.

Und trotzdem, validiere das Passwort und verschiebe den gesamten Sicherheitscode auf der Serverseite. Wenn Sie Authentifizierung (z. B. offene ID) delegieren können, noch besser.

    
e-satis 24.10.2009 18:22
quelle
0

Ich kann mir keinen speziellen Algorithmus vorstellen, um die Stärke eines Passworts zu überprüfen. Was wir tun ist, dass wir mehrere Kriterien definieren und wenn das Passwort ein Kriterium respektiert, fügen wir 1 zu seiner Punktzahl hinzu. Wenn das Passwort einen Schwellenwert erreicht, ist das Passwort stark. Sonst ist es schwach.

Sie können viele verschiedene Stärkegrade definieren, wenn Sie unterschiedliche Threshold-Werte haben, oder Sie können einen anderen Wert für ein bestimmtes Kriterium definieren. Wenn zum Beispiel ein Passwort 5 Zeichen hat, fügen wir 1 hinzu, aber wenn es 10 ergibt, fügen wir 2 hinzu.

Hier ist eine Liste mit Kriterien, nach denen

gesucht werden soll

Länge (8 bis 12 ist ok, mehr ist besser) Enthält Kleinbuchstaben Enthält Großbuchstaben Der Großbuchstabe ist NICHT der erste. Enthält Nummer Enthält Symbole das letzte Zeichen ist kein menschenähnliches Symbol (zB: oder!) Sieht nicht wie ein Wörterbuch aus. Irgendein kluger Kennwortsprung enthält Bibliothek der Wort- und Buchstabensubstitute (wie Bibliothek - & gt; L1br @ ry)

Hoffen Sie, dass Hilfe.

    
David Brunelle 23.10.2009 17:44
quelle
0

Rollen Sie nicht selbst!

Kryptographie-Experten raten von der eigenen Kryptographie ab offensichtlich sein.

Aus den gleichen Gründen sollte man nicht versuchen, seine eigene Lösung für das Problem der Messung der Stärke eines Passworts zu finden; es ist ein kryptografisches Problem.

Gehen Sie nicht in die hässliche Angelegenheit, einen massiven regulären Ausdruck für diesen Zweck zu erstellen; Sie werden wahrscheinlich nicht mehrere Faktoren berücksichtigen, die die Gesamtstärke eines Kennworts beeinflussen.

Es ist ein schwieriges Problem

Das Problem der Messung der Stärke eines Passworts ist mit erheblichen Schwierigkeiten verbunden. Je mehr Forschung ich zu diesem Thema mache, desto mehr erkenne ich, dass dies ein "unidirektionales" Problem ist; das heißt, man kann nicht die "Schwierigkeit" (Rechenaufwand) messen, ein Passwort effizient zu knacken . Vielmehr ist es effizienter, Komplexitätsanforderungen bereitzustellen und die Fähigkeit des Passworts zu messen, diese zu erfüllen.

Wenn wir das Problem logisch betrachten, macht ein "Crackability-Index" nicht viel Sinn, so bequem es klingt. Es gibt so viele Faktoren, die die Berechnung steuern, von denen sich die meisten auf die Berechnungsressourcen beziehen, die dem Cracking-Prozess gewidmet sind, so dass sie unpraktisch sind.

Stellen Sie sich vor, dass Sie John the Ripper (oder ein ähnliches Tool) gegen das betreffende Passwort einsetzen. Es kann Tage dauern, ein anständiges Passwort zu knacken, Monate, um ein gutes Passwort zu knacken, und bis die Sonne brennt, um ein außergewöhnliches Passwort zu knacken. Dies ist kein praktisches Mittel, um die Passwortstärke zu messen.

Das Problem aus der anderen Richtung zu erreichen, ist viel überschaubarer: Wenn wir eine Reihe von Komplexitätsanforderungen stellen, ist es möglich, die relative Stärke eines Passworts sehr schnell zu beurteilen. Offensichtlich müssen sich die gelieferten Komplexitätsanforderungen im Laufe der Zeit ändern, aber es gibt weitaus weniger Variablen, die berücksichtigt werden müssen, wenn wir das Problem auf diese Weise angehen.

Eine tragfähige Lösung

passwdqc ist ein eigenständiges Dienstprogramm von Openwall erhältlich (vermutlich für Password Quality Checker <) / em>). Openwall Entwickler, Solar Designer, scheint ein echter Kryptographieexperte zu sein (seine Werke sprechen für sich) und ist daher qualifiziert, ein solches Werkzeug zu schreiben.

Für meinen speziellen Anwendungsfall ist dies eine weitaus attraktivere Lösung als die Verwendung eines schlecht durchdachten JavaScript-Snippets in einer dunklen Ecke des Webs.

Die Festlegung von Parametern für Ihre speziellen Bedürfnisse ist der schwierigste Teil. Die Implementierung ist der einfache Teil.

Ein praktisches Beispiel

Ich biete eine einfache Implementierung in PHP an, um einen Start zu ermöglichen. Es gelten die Standard-Disclaimer.

Dieses Beispiel geht davon aus, dass wir dem PHP-Skript eine vollständige Liste von Passwörtern geben. Es versteht sich von selbst, dass wenn Sie dies mit echten Passwörtern tun (z. B. solche, die aus einem Passwortmanager herausgeworfen werden), sollte äußerste Vorsicht in Bezug auf die Passwortbehandlung ausgeübt werden. Einfach den unverschlüsselten Passwort-Dump auf die Festplatte zu schreiben, gefährdet die Sicherheit Ihrer Passwörter!

passwords.csv :

%Vor%

password-check.php :

%Vor%

Ergebnis report.csv :

%Vor%

Wrapping-Up

Ich muss noch eine gründlichere Lösung im Internet finden; Selbstverständlich begrüße ich weitere Empfehlungen.

Offensichtlich ist dieser Ansatz für bestimmte Anwendungsfälle (z. B. ein "Passwortsicherheitsmesser", der "clientseitig" implementiert ist) nicht ideal. Trotzdem wäre es trivial, einen AJAX-Aufruf an eine serverseitige Ressource zu richten, die eine Pass / Fail-Antwort unter Verwendung des oben beschriebenen Ansatzes zurückgibt, aber ein solcher Ansatz sollte das Potenzial für Missbrauch (z. B. DoS-Angriffe) annehmen und erfordern sichere Kommunikation zwischen Client und Server sowie Akzeptanz der mit der Übertragung des unverschlüsselten Passworts verbundenen Risiken.

    
Ben Johnson 25.01.2016 21:16
quelle