2008-12-25 17 views
15
Siehe auch What is the best way to check the strength of a password?

Wie berechnen Sie die Komplexität des Passwortes?

Einige Anwendungen (oder Websites) berechnen eine Kennwortkomplexität, wenn Sie sie eingeben. Sie zeigen normalerweise einen roten Balken an, der orange wird, dann grün, dann noch grüner, wenn Ihr Passwort länger wird, und enthält mehr Klassen von Zeichen (dh Kleinbuchstaben, Großbuchstaben, Interpunktion, Ziffern ...)

Hier ist der Algorithmus I benutzen.

private int GetPasswordComplexity(string password) 
     { 
      if (password.Length <= 4) 
       return 1; 

      int complexity = 0; 

      int digit = 0; 
      int letter = 0; 
      int cap = 0; 
      int other = 0; 


     for (int i = 0; i < password.Length; i++) 
     { 
       if (char.IsDigit(password[i]) && i!=password.Length-1) 
       digit = 1; 
      else if (char.IsLower(password[i])) 
       letter = 1; 
      else if (char.IsUpper(password[i]) && i!=0) 
       cap = 1; 
      else 
       other = 1; 
     } 

      complexity = digit + letter + cap + other; 

      if (password.Length <= 7) 
       complexity = Math.Min(3, complexity); 

      return complexity; 
     } 

Ich bin besorgt, dass mein Algorithmus "Password1!" als "sehr stark" und "] @ fee: m" als "schwach", weil es nur 7 Char lang ist.

BEARBEITEN: Ich habe den Algorithmus geringfügig aktualisiert, um Großbuchstaben und Ziffern zu ignorieren, wenn sie jeweils das erste und das letzte Zeichen des Passworts sind.

Hat jemand hier Erfahrung mit dieser Art von Problemen? Wie würden Sie ein Wörterbuch hinzufügen, um gängige Wörter zu erkennen?

Antwort

26

Verwenden Sie etwas wie cracklib ist sehr gut, wenn Sie die Zeit der Überprüfung gegen alle möglichen Regeln leisten können. Wenn Sie nur etwas Schnelles wollen - sagen Sie für einen Javascript-basierten Stärkemesser - dann überlegen Sie sich, wie viele potenzielle Vermutungen für einen Brute-Force-Angriff benötigt werden. Aktualisieren Sie für jeden gefundenen Zeichentyp einen Multiplikator basierend auf der Anzahl der möglichen Zeichen dieses Typs. Wenn Sie also nur Ziffern haben, dann wäre der Multiplikator 10. Wenn Sie nur Kleinbuchstaben haben, dann ist der Multiplikator 26. Wenn beide, dann ist der Multiplikator 36 - also für jedes Zeichen im Passwort, ein Brute-Force-Angriff wäre müssen bis zu 36 verschiedene Charaktere ausprobieren. Ein Passwort, das sowohl Groß- als auch Kleinbuchstaben, Ziffern und Interpunktion enthält, hätte dann einen Multiplikator von 10 + 26 + 26 + 32 = 94 (mehr oder weniger abhängig von der zulässigen Interpunktion).

Um die durchschnittliche Anzahl von Permutationen zu schätzen, die eine Brute-Force-Methode benötigen würde, erhöhen Sie den Multiplikator auf die Potenz, die der Anzahl der Ziffern im Passwort entspricht. Dies gibt Ihnen dann die durchschnittliche Anzahl von Schätzungen, die nötig wären, um das Passwort mit einem Brute-Force-Angriff zu brechen. Nehmen wir an, dass jede Schätzung einen CPU-Zyklus benötigt und berechnet, wie lange es dauern würde, ein Passwort bei einer bestimmten Anzahl von Permutationen zu brechen. Zum Beispiel, wenn mein Multiplikator 10 und das Passwort 10 Zeichen lang wäre, dann hätte ich 10.000.000.000 mögliche Kombinationen. Bei einem 3GHz-Prozessor sollte dies 10/3 * k oder 3k Sekunden dauern (wobei k die Anzahl der Zyklen pro Schätzung ist, typischerweise klein). Dies ist eindeutig ein schwaches Passwort.

Stellen Sie nun einige Bereiche ein, die angemessene Kennwortstärken darstellen. Zum Beispiel, wenn Sie denken, dass ein 8-stelliges Passwort mit Groß- und Kleinbuchstaben minimal für mittlere Stärke benötigt wird, dann wäre Ihr Cutoff 52^8 oder ungefähr 1,5 Jahre auf einem 3GHz-Prozessor (unter der Annahme k = 1). Wenn Sie Ziffern hinzufügen, wird der Cutoff 62^8 oder ungefähr 8 Jahre auf dem 3GHz-Prozessor.

Um es in Gebrauch zu nehmen, müssen Sie nur verfolgen, welche Arten von Zeichen Sie sehen, konstruieren Sie den entsprechenden Multiplikator, berechnen Sie die erwarteten Permutationen basierend auf Passwortlänge und vergleichen Sie es mit Ihren vordefinierten Cutoffs, um zu bestimmen, welche Stärke der Passwort hat.

+0

Absolut tolle Beschreibung. Vielen, vielen Dank! –

+0

Gute Ideen. Aber: Komplexität ("PasswordPassword") = 52^17 = 1.5^10^29 Komplexität ("!:^DE1") = 94^6 = 6x10^11 Nun, welches Passwort ist stärker? – Brann

+0

Es ist nur eine grobe Maßnahme. Wahrscheinlich möchten Sie auch die gängigsten Passwörter überprüfen. http://www.modernlifeisrubbish.co.uk/article/top-10-most-common-passwords http://lawprofessors.typepad.com/law_librarian_blog/2007/05/10_most_common_.html – tvanfosson

3

Ich würde nicht einfach eine Flagge setzen, wenn Sie eine Ziffer, Kapital usw. sehen, sondern Punkte für sie geben. So etwas wie ein Punktesystem. Ein normaler Buchstabe zählt 1, eine Ziffer 2 und ein Sonderzeichen 3.

Jetzt berücksichtigt Ihre Gesamtanzahl sowohl die Anzahl der Zeichen als auch das Passwort. Sie müssen nur Linien zeichnen für das, was schwach ist und was stark ist.

+0

Die Entropie, die durch ein Sonderzeichen hinzugefügt wird, ist kleiner als die einer Ziffer. Die Entropie, die durch eine Ziffer hinzugefügt wird, ist kleiner als die für ein Zeichen. Sie sollten die Entropie berechnen. – Mausy5043

8

Ich würde die Verwendung von Cracklib dafür empfehlen.

+0

Sie können die Python-Bindungen hier finden: http://www.nongnu.org/python-crack/ –

0

Sie sollten auch gegen ein Wörterbuch überprüfen. Ich denke, Apple tut dies in seinem eingebauten Passwort-Checker.

1

Ich schrieb eine kleine Javascript-Anwendung (GPL). Schau mal: Yet Another Password Meter. Sie können die Quelle herunterladen und unter GPL verwenden/ändern.

1

This link tut genau das, mit einer detaillierten Erklärung der verwendeten Kriterien!

Verwandte Themen