Der offensichtliche Unterschied zwischen den 3 Zeichen Passwörtern "ccc" und "abc" besteht in der Varianz.
Beide Passwörter haben 3 Zeichen. Aber nur das Passwort "abc" hat 3 Zeichen aus einem Alphabet von 3 Zeichen. Das Passwort "ccc" hat 3 Zeichen aus einem Alphabet von 1 Zeichen.
Nun beweise mir das der Angreifer
nicht nur das Alphabeth "c" benutzt sondern eben immer das komplette Alphabet bei seinem Angriff benutzt. Denn falls er seinen Angriff nur mit dem Symbolraum "c" durchführt dann kann er das Passwort "ccc" nach 3 Versuchen knacken. Beim Symbolraum "abc" benötigt er aber schon 6 Versuche. Dh. an Hand des Passwortes kann man sehr wohl den nötigen Aufwand festlegen den der Hacker aufwenden muß.
Jede andere Annahme führt die auf Passwörtern basierende Kryptographie ad absurdum.
Wenn du eine Funktion bauen möchtest die die Qualität eines Passwortes bewertet dann muß man sich eben über verschiedene Punkte im Klaren sein:
1.) die einzige, harte Ausgangsbasis ist der Fakt das wir ein Passwort für eine Verschlüsselung bewerten wollen. Dh. die für die Verschlüsselungen anerkannten Regeln für gute Passwörter müssen als Bewertungsfunktion benutzt werden. Die beiden wichtigsten Regeln für Passörter in Verschlüsselungen sind die Länge des Passwortes und die Gleichverteilung der Wahrscheinlichkeit des ausgewählten Schlüssels im Schlüsselraum der Verschlüsselung. Letzteres mal verkürzt ausgedückt: das Passwort sollte zufällig sein.
2.) Irgendwelche Annahmen mit welchem Verfahren, also
wie und
welche Verfahren ein möglicher Angreifer konkret benutzt sind enorm schwierig. Im Grunde wäre das Hellsehen.
3.) man kann abstrahieren und wird feststellen das bessere Angriffe die Eigenheiten der Menschen bei der Wahl der Passwörter ausnutzen. Dh. ein Angreifer wird nicht alle 256 Zeichen des
ASCII Alphabetes benutzen sondern im Idealfall die Buchstaben gewichtet nach ihrer Häufigkeit in unserer Sprache.
Berachtet man nun alle Fakten was wir überhaupt tuen können dann bleibt im Grunde nur das was ich in meiner Funktion versucht habe zu bewerkstelligen.
Nun, meine Funktion bewertet nicht auf "faire" Art & Weise alle möglichen Passwörter, das ist vom Rainhard Kern schon korrekt herausgearbeitet worden. Denn ein Passwort aus lauter Nullen ist ebenso wahrscheinlich wenn man es zufällig erzeugt und könnte ebenso gut bewertet werden. Meine Funktion hat nur die Aufgabe ein Passwort besser zu bewerten wenn es komplexer ist als andere. Und das heist letzendlich: möglichst lang, möglichst viele verschiedene Buchstaben, möglichst wenig wiederholende Muster (und "ccc" ist ein Muster, 3x "c"), möglichst wenig Entropie und damit wenig Redundanzen.
Das heist das eine Passwort-Bewertungs-Funktion immer wie ein Sieb arbeitet und aus der Menge aller Passwörter diejenigen auswählt bei denen wir die Möglichkeit haben zu beweisen das sie gut sein müssen im Rahmen unserer gewählten Bewertungsfunktion. Dabei müssen je nach Bewertungsfunktion, quasi Kollateralschäden entstehen und ansonsten gute Passwörter als schlechter bewertet werden.
Mehr können wir nicht bewerten und macht auch keinen Sinn.
Schlußendlich gibt es bei zb. einer 128 Bit Verschlüsselung 2^128 verschiede starke 128 Bit lange Passwörter. Alle sollten sie identich stark sein, wenn die Verschlüsselung gut ist. Insofern hat Rainhard bis hier auch Recht. Das was nun verschiedene Passwörter so schlecht macht sind die ausgefeilten Angriffe auf verschiedene Passwörter. Fast alle diese Angriffe basieren auf der Annahme das von Menchen ausgedachte und eingebbare Passwörter benutzt wurden. Ergo: die Angriffe schränken als erstes den Suchraum ein indem sie den benutzen Symbolraum einschränken. Statt einen Suchraum von 256
ASCII Zeichen pro Symbol nutzen sie zb. nur das Alphabet und die Ziffern als eingeschränkten Suchraum. Zudem sortieren sie diese Menge noch nach Häufigkeiten der Buchstaben, also zb. "e" wird im Angriff häufiger und früher verwendet als "ß" oder "z" usw.
Weiter führend wird dieser Angriff in den höherwertigen Symbol Raum "Wörter" überführt, wo wir dann bei der Wörterbuchattacke angekommen wären.
Der Angreifer macht also nichts anderes als die Entropie unserer Sprache auszunutzen um seinen Suchraum effizienter zu gestalten. Sowohl auf Symbolebene wie auch Wortebene nutzt er diesen Trick.
Die Aufgabe eines "Gegners" des Hackers ist es also ebenfalls die Entropie zu benutzen um möglichst schwer erratbare Passwörter als besser zu bewerten.
Eine Passwort-Bewertungs-Funktion wird also immer nur die Komplexität eines Passwortes bewerten können. Und das heist: maximale Länge + maximale Ausnutzung des Symbolraumes + maximale Varianz der ausgewählten Symbole aus dem Symbolraum (keine Wiederholungen).
Ich stimme aber mit Rainhard nicht übereine wenn er behauptet das man Passwörter nicht bewerten kann. Das geht sehr wohl und muß auch gehen da ansonsten wiederum die Kryptographie basiernd auf Passwörtern sinnfällig würde. Die Frage ist welche Bewertung kann man praktisch programmieren und macht noch einen Sinn. Und da habe ich von Anfang an betont das man nie die Qualität eines Passwortes bewerten kann wenn man als Angriff eine Wörterbuchattacke mit unbekannten Wörterbuch annimmt. Insofern verstehe ich auch nicht warum immer wieder dahingehend argumentiert wird.
Allerdings kann man davon ausgehen das ein Angreifer in seinem Wörterbuch die häufigst benutzten Passwörter abgespeichert hat, logisch oder ? Und da diese Passwörter bisher noch von Menschen ausgedacht wurden und damit sehr nahe an unserer Sprache liegen, ist die Entropie als eine Funktion der Bewertung von Redundanz in unserer Sprache sehr wohl eine brauchbare Funktion um Passwörter zu qualifizieren.
Nun kommen wir wieder zum Anfang der Geschichte: als ich sagte das es am Wichtigsten ist das man weiß was man tut und warum man es tut. Meine Funktion habe ich exakt aus all diesen Erwägungen heraus gezielt so konstruiert wie sie jetzt ist. Nicht weil ich gefühlsmäßig meinte das ist richtig und jenes wäre unlogisch oder so.
Gruß Hagen