Password Strength Meter
Transcription
Password Strength Meter
Lehrstuhl für Informatik 1 Friedrich-Alexander-Universität Erlangen-Nürnberg Bachelorarbeit Password Strength Meter Bernd Grillenberger Roßtal, 30.11.2014 Examiner: Advisor: Prof. Dr. Felix Freiling Michael Gruhn, M. Sc. Eidesstattliche Erklärung / Statutory Declaration Hiermit versichere ich eidesstattlich, dass die vorliegende Arbeit von mir selbständig, ohne Hilfe Dritter und ausschließlich unter Verwendung der angegebenen Quellen angefertigt wurde. Alle Stellen, die wörtlich oder sinngemäß aus den Quellen entnommen sind, habe ich als solche kenntlich gemacht. Die Arbeit wurde bisher in gleicher oder ähnlicher Form keiner anderen Prüfungsbehörde vorgelegt. I hereby declare formally that I have developed and written the enclosed thesis entirely by myself and have not used sources or means without declaration in the text. Any thoughts or quotations which were inferred from the sources are marked as such. This thesis was not submitted in the same or a substantially similar version to any other authority to achieve an academic grading. Der Friedrich-Alexander-Universität, vertreten durch den Lehrstuhl für Informatik 1, wird für Zwecke der Forschung und Lehre ein einfaches, kostenloses, zeitlich und örtlich unbeschränktes Nutzungsrecht an den Arbeitsergebnissen der Arbeit einschließlich etwaiger Schutz- und Urheberrechte eingeräumt. Roßtal, 30.11.2014 Bernd Grillenberger i Zusammenfassung Passwörter sind als Authentifikationsmechanismus nicht mehr wegzudenken. Daher beschäftigten sich bereits einige Studien mit der Analyse von verwendeten Passwörtern. Dabei werden die Passwörter hinsichtlich ihrer Länge und ihrem Aufbau untersucht. Diese Studien ergaben, dass sehr oft kurze Passwörter oder Passwörter, die aus einer Character-Klasse bestehen, verwendet werden und diese unsicher sind. Dadurch, dass Crackprogramme wie Hashcat oder John the Ripper Wörterbücher Regeln verwenden, um ihre Passwortkandidaten zu erzeugen, sind auch diejenigen Passwörter, die in diesem Wörterbuch vorkommen oder leicht mit Standardregeln herzuleiten sind, als unsicher einzustufen. In dieser Arbeit wird ein Password Strength Meter in Python implementiert, das ein Passwort hinsichtlich der Sicherheit gegenüber Hashcat und John the Ripper bewertet. Das Wörterbuch wird importiert, die verschiedenen Regeln implementiert und Benchmarks von John the Ripper/Hashcat zur Zeitabschätzung herangezogen. Am Ende werden Schätzwerte zu verschiedene Angreifern und Hashfunktionen ausgegeben. Abstract Passwords are indispensable as an authentication mechanism. Therefore, some studies have already addressed the analysis of used passwords. In this case, the passwords are examined with regard to their length and their structure. These studies found out that passwords or passwords that consist of only one character class are very often used. These passwords are mostly unsafe. Cracking tools such as Hashcat or John the Ripper use dictionaries and rules to generate their password candidates. Because of this fact those passwords that are found in this dictionary or easily to derive with standard rules are also classified as unsafe. In this work a Password Strength Meter is implemented, which assesses a password regarding to its safety against Hashcat and John the Ripper. The dictionary is imported, the various rules implemented and benchmarks by John the Ripper/Hashcat used for time estimation. At the end estimated values are output to various types of attackers and hash functions. ii Liste von Tabellen 2.1 2.2 2.3 Regeln, die Hashcat und John the Ripper unterstützt . . . . . . . . . . . . . . . . . . . . . Regeln, um Kandidaten abzulehnen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Regeln, die nur Hashcat bietet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11 Benchmarks Multi Processing John the Ripper Benchmarks ONE-CPU John the Ripper . . . Benchmarks GPU Hashcat . . . . . . . . . . Benchmark John the Ripper: Heimnutzer . . Brute-Force: Heimnutzer . . . . . . . . . . . Benchmark John the Ripper: Kleine Firma . . Brute-Force: Kleine Firma . . . . . . . . . . Benchmark John the Ripper: Große Firma . . Brute-Force: Große Firma . . . . . . . . . . Brute-Force: Geheimdienst GPU-Angriff . . Worst Case Regeln . . . . . . . . . . . . . . . . . . . . . . . . . 17 18 18 19 19 20 20 20 21 21 22 5.1 Evaluierung: Online PSM vs. eigenes PSM . . . . . . . . . . . . . . . . . . . . . . . . . 23 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 8 9 iii CONTENTS 1 Einleitung 1 1.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 Hintergrund . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3 Definitionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.4 Aufgabenstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.5 Verwandte Arbeiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.6 Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2 Technischer Hintergrund 5 2.1 Hashcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2 John the Ripper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.3 Hash Typen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3 Implementierung 11 3.1 Beschreibung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.2 Übersicht der Einordnung der Passwortstärke . . . . . . . . . . . . . . . . . . . . . . . . 15 4 Zeitabschätzung 16 4.1 Benchmarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 4.2 Modellieren von Angreifern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 4.2.1 Heimnutzer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 4.2.2 Kleine Firma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 4.2.3 Große Firma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4.2.4 Geheimdienst GPU-Angriff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Worst Case Regeln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4.3 5 Evaluierung 23 6 Fazit 24 Literaturverzeichnis 26 iv E INLEITUNG 1 Passwort Authentifikation ist der aktuell meist verwendete Authentifikationsmechanismus in Computer Systemen. Dabei möchte sich der Benutzer (Prover) in einem System (Verifier) authentisieren, indem er durch die Kombination Benutzername und Passwort seine Identität preisgibt. Die vorgegebene Identität wird dann durch den Verifier überprüft, d.h. ob das zum Benutzernamen passendes Passwort eingegeben wurde. Nach der erfolgreichen Authentifikation erhält der Benutzer seine Berechtigungen im System. Das Passwort wird hierbei vom Benutzer vergeben und sollte einige Anforderungen erfüllen. Dazu gehört z.B. eine gewisse Passwortlänge, Groß- und Kleinschreibung, Ziffern und Sonderzeichen, um die Komplexität zu steigern. Wie in [2] beschrieben besitzen die vergebenen Passwörter eine zu geringe Komplexität, was sie anfällig gegen Angriffe macht. Oft werden sehr schwache Passwörter aus Bequemlichkeit des Benutzers vergeben. Ein bekanntes Beispiel für ein unsicher vergebenes Passwort ist der Launch-Code für US-Atomraketen während des Kalten Krieges. Zu dieser Zeit lautete das Passwort, um die Atomwaffe zu starten, 00000000 vergeben. Dies sollte vermutlich einen schnellen Start im Notfall ermöglichen, lässt jedoch die mangelnde Sicherheit des Passworts außer Acht. 1.1 Motivation Aktuell gibt es einige Tools, um einen Angriff auf Nutzerdaten zu vollziehen. Dazu zählen beispielsweise John the Ripper und Hashcat. Diese bedienen sich im groben zweierlei Techniken. Zum einen den Brute-Force-Modus, was bedeutet, dass alle möglichen Kombinationen ausprobiert werden. Beinhaltet das Passwort ASCII [23] Groß- und Kleinschreibung, Ziffern und Sonderzeichen so stehen für jedes einzelne Zeichen 95 Möglichkeiten zur Verfügung. So multipliziert sich die Anzahl der Möglichkeiten mit jedem weiteren Zeichen um den Faktor 95. Zum anderen erzeugt John the Ripper die Passwortkandidaten durch Wörterbücher und Regeln. Dabei wird auch in den Regeln beachtet, wie Personen meistens ihre Passwörter zusammensetzen. Bei Ausführung des Crackprogrammes werden Hashwerte gebildet und diese mit der Hash-Liste oder einem Passwort-Hash verglichen. Falls es zu einer Hashkollision kommt, wurde das gesuchte Passwort gefunden. 1 CHAPTER 1. EINLEITUNG Würden unendlich schnelle Rechner zur Verfügung stehen, könnte jedes Passwort gecracked werden. Zur Beschleunigung der Berechnung werden auch GPUs zur Unterstützung herangezogen [22]. 1.2 Hintergrund Tendenziell neigt der Mensch dazu, einfache und leicht zu merkende und eher kurze Passwörter zu verwenden. Prinzipiell jedoch gilt: Die Passwortlänge spielt eine entscheidende Rolle für die Stärke eines Passworts, welche durch die Verwendung von Klein- und Großbuchstaben, Zahlen und Sonderzeichen erhöht wird. Doch aufgrund der Tatsache, dass Crackprogramme mit Wörterbüchern und Regeln arbeiten, werden Passwörter, die im vorhandenen Wörterbuch vorkommen oder durch Anwenden einer Standard-Regel erzeugbar sind, deutlich schneller gecracked. In diesen Wörterbüchern sind Namen, sehr oft verwendete Passwörter und vor allem Wörter, die einen Sinn ergeben, enthalten. Da viele Password Strength Meter wie [13] jedoch ein Passwort danach bewerten, ob genügend Zeichen, Klein- und Großbuchstaben, Zahlen oder Sonderzeichen darin vorkommen, ist die Aussage, die diese Password Strength Meter über die Sicherheit des Passworts treffen, oftmals hinsichtlich der Crackbarkeit durch Crackprogramme nicht ganz richtig. So kommt es dazu, dass ein Passwort wie beispielsweise sample123! als stark bezeichnet wird, da es aus Kleinbuchstaben, drei Zahlen, Sonderzeichen aus 10 Zeichen besteht. Doch mit dem Standard Wörterbuch von John the Ripper kann dieses Passwort durch Verwendung von einer Regel schnell gecracked werden. Denn: sample123 ist im Standard Wörterbuch von Openwall vorhanden und nach Anwenden der Regel Append Character ist das Passwort gecracked und kann daher nicht als stark bezeichnet werden. 1.3 Definitionen • Basis: Als Basis wird ein Wort bezeichnet, das im Wörterbuch vorkommt, ein Teilstring des Passworts ist und eine minimale Länge von drei Zeichen aufweist. Wird beispielsweise das Passwort abcpassword1abc entgegengenommen und das Wörterbuch enthält unter anderem den Eintrag password, so ist dieser Eintrag die Basis. Ein Passwort kann innerhalb eines Wörterbuchs auch mehrere Basen besitzen. • Maske: Moderne Passwort Cracker benutzen Masken, welche die Muster der Passwortkandidaten darstellen. Eine Maske ist ein String, der aus Platzhalter in Form eines ? gefolgt vom Zeichentyp besteht. Zeichentypen sind wie folgt vordefiniert: - ?u = abcdefghijklmnopqrstuvwxyz (nur Kleinbuchstaben) - ?l = ABCDEFGHIJKLMNOPQRSTUVWXYZ (nur Kleinbuchstaben) - ?d = 0123456789 (nur Zahlen) - ?s = «space»!"’#$%&’()*+,-./:;<=>?@[]ˆ_’{|}~(nur Sonderzeichen) - ?a = ?l?u?d?s Somit lautet die Maske für das Passwort "123Passwort!" ?d?d?d?u?l?l?l?l?l?l?l?s • Brute-Force: Brute-Force bedeutet alle Möglichkeiten von potenziellen Lösungen auf Kosten von Zeit und Ressourcen durchzuprobieren. Es müssen also alle möglichen Kombinationen von Zahlen, Sonderzeichen, Großund Kleinbuchstaben auf Kosten von Effizienz erzeugt werden. 2 CHAPTER 1. EINLEITUNG 1.4 Aufgabenstellung Das Ziel der Arbeit ist, auf den beschriebenen Hintergrund einzugehen und ein Password Strength Meter zu entwickeln, das die Crackbarkeit eines Passwortes durch Programme wie John the Ripper oder HashCat ermittelt und dann auf dieser Basis eine Aussage trifft, ob das Passwort eher schwach oder stark ist. Dabei sollen sich die Regeln, die John the Ripper und HashCat auf das Wörterbuch anwendet, betrachtet werden. Denn diese dienen zur Erzeugung der Passwortkandidaten. Die Implementierung erfolgt in Python. Das Python Script erhält als Eingabe ein Passwort und nach der Analyse eine Aussage über die Stärke des Passworts treffen. Da für die Zeit, die diese Crackprogramme benötigen, einige Faktoren eine Rolle spielen, sollen verschieden Szenarien ausgegeben werden. Einer dieser Faktoren ist die verwendete Hashfunktion, denn unterschiedliche Hashfunktionen benötigen unterschiedlich lange für die Berechnung des jeweiligen Hashwertes. Außerdem ist die Hardware entscheidend, mit der die Hashwerte erzeugt werden. 1.5 Verwandte Arbeiten Einige Studien haben sich bereits mit der Analyse von Passwörtern, die von Nutzer verwendet werden, beschäftigt. In Analyzing Password Strength [4] wird bereits auf das Problem eingegangen, dass sehr viele Benutzer unsichere Passwörter verwenden. Dabei wurde eine große Datenbank mit Passwörtern mittels eines Password Checkers getestet. Das Ergebnis offenbarte, dass mehr als 90% aller untersuchten Passwörter als unsicher einzustufen waren. Des Weiteren werden in Guess again (and again and again): Measuring password strength by simulating password-cracking algorithms [12] 12000 Passwörter, die während einer Online-Studie gesammelt wurden, unter anderem mit verschiedenen password-guessing algorithms hinsichtlich ihrer Passwortstärke untersucht. In Improving computer security for authentication of users: Influence of proactive password restrictions [20] geht es um den Einfluss von Passwortbedingungen auf die Crackbarkeit. So wurden 75% der Passwörter, die keine Bedingungen erfüllten und aus fünf Zeichen bestanden, gecracked. Mit Bedingungen waren es nur 33%. Bei einer Passwortlänge von acht Zeichen waren es 17% und mit Bedingungen 12,5%. Zu den Bedingungen gehörten, dass das Passwort Klein-und Großschreibung, eine Zahl, keine Wiederholung eines Zeichens hintereinander und weniger als zwei Zeichen des Benutzernamens enthalten musste. In Analysis of Login Credentials in Keylogger Dropzones [2] wurden Zugangsdaten aus 30 GB Logdateien analysiert. Dabei wurden die Passwörter auf ihre Häufigkeit, durchschnittliche Länge, Zeichensatz, Struktur und dem Vorkommen in der Openwall Wortliste untersucht. Diese Openwall Wortliste wird auch von John the Ripper verwendet, die das Cracken der Passwörter beschleunigt. Daher ist auch die Statistik über das Vorkommen in der Wortliste für diese Arbeit von Bedeutung. Die Ergebnisse besagen, dass in 19,1% die Passwörter auch in der Wortliste vorkamen, somit hätte fast jedes fünfte Passwort innerhalb kürzester Zeit gecracked werden können. In weiteren 16,4% kam das Basiswort in der Wortliste vor. Das Basiswort musste mindestens drei Zeichen lang sein und nur aus Kleinbuchstaben bestehen. Beim Finden einer Basis kann John the Ripper durch Anwenden von Regeln schneller als durch reines Brute-Forcen das gesuchte Passwort erzeugen. 80% der Top20 Passwörter bestanden ausschließlich nur aus Zahlen. 58,8% waren zwischen 6 und 8 Zeichen lang. Des Weiteren waren 94,4% alphanumerisch, d.h. lediglich 5,6% enthielten Sonderzeichen. Außerdem wurde auch der Kontext zwischen dem Benutzernamen und dem gewählten Passwort analysiert. Dabei wählten 1,68% Benutzernamen und Passwort gleich, bei 0,61% war das Passwort eine Teilmenge des Benutzernamens und bei 1,49% war der Benutzername eine Teilmenge des Passwortes. Somit waren in 3,78% der Benutzername und das Passwort ähnlich. Die Abgrenzung zu diesen Arbeiten ist, dass sich darauf konzentriert wird, die Passwortstärke dahingehend zu bewerten, dass wir als Basis die Zeit, die Cracking-Tools wie John the Ripper oder HashCat benötigen, betrachten und nicht nur die Bedingungen, die Passwörter erfüllen. Außerdem legen wir unseren Fokus auf die Implementierung eines Password Strength Meter und nicht auf die Auswertung und Analyse bereits benutzter Passwörter. 3 CHAPTER 1. EINLEITUNG 1.6 Überblick Die Abschlussarbeit ist folgendermaßen gegliedert. Zuerst wird auf die beiden Tools Hashcat und John the Ripper genauer eingegangen. Dabei sollen vor allem die Regeln, die Hashcat und John the Ripper verwendet, genauer betrachtet werden. Denn diese Regeln werden dann im Script implementiert. Außerdem wird kurz der Unterschied zwischen langsamen und schnellen Hashes beleuchtet. Im dritten Kapitel wird die Vorgehensweise erläutert bzw. die Implementierung des Scripts beschrieben. Das nachfolgende Kapitel erläutert die Zeitabschätzung. Dazu werden zunächst die verwendeten Benchmarks in Tabellen dargestellt. Dann werden verschiedene Angreifer für unterschiedliche Hashwerte und reines Brute-Force modelliert. Anschließend wird in einer Tabelle der Worst Case der Regeln festgehalten. Das darauffolgende Kapitel beinhaltet den Vergleich von einigen Passwörtern mit einem bisherigen online zur Verfügung stehenden Password Strength Meter und dem Password Strength Meter dieser Arbeit. Das letzte Kapitel enthält eine kurze Zusammenfassung und Ausblick. 4 T ECHNISCHER H INTERGRUND 2 Dieses Kapitel soll die verschiedenen Anfgriffs-Modi und Besonderheiten zweier von Hashcat und John the Ripper erläutern. 2.1 Hashcat Hashcat unterstützt folgende Angriffs-Modi, die auf der offiziellen Website von Hashcat [7] zu finden sind: • Brute-Force attack: In diesem Modus werden sämtliche Kombinationen aller Zeichen gebildet. Es werden sozusagen alle Möglichkeiten von Passwörtern, die sich mit der Zunahme jedes Zeichens vervielfachen, erzeugt. Der Nachteil dieses Angriffs ist die Performance. • Combinatory attack: Diese Attacke beinhaltet, dass sämtliche Wörterbucheinträge erneut an jeden Wörterbucheintrag angehängt werden. Dies ermöglicht, dass Wortwiederholungen, sofern das einzelne Wort im Wörterbuch vorhanden ist, schneller gecracked werden. Als kleines Beispiel: Unser Wörterbuch besitzt nur vier Einträge und sieht folgendermaßen aus: Max Mustermann Passwort 123456 Hashcat erzeugt daraus AnzahlEinträge2 Passwortkandidaten: MaxMax MaxMustermann MaxPasswort 5 2.1. HASHCAT Max123456 MustermannMax MustermannMustermann MustermannPasswort Mustermann123456 PasswortMax PasswortMustermann PasswortPasswort Passwort123456 123456Max 123456Mustermann 123456Passwort 123456123456 • Dictionary attack: Dies ist wohl neben dem Brute-Force einer der bekanntesten Modi. Hierbei verwendet Hashcat einfach sämtliche Einträge eines Wörterbuchs als Passwortkandidaten. Wichtig hierbei ist, dass jedes Wort in einer separaten Zeile steht. • Fingerprint attack: Er ist eine Verschmelzung der Ergebnisse des Expanders mit einer Kombinationsmaschine. Dieser Modus wird nicht genauer erläutert, da er für unser Password Strength Meter nicht weiter relevant ist. • Hybrid attack: Im Prinzip eine Combinary attack. Dazu wird das Wörterbuch und Brute-Force attack genutzt. An die Einträge des Wörterbuchs werden Zeichen vorangestellt oder angehängt. • Mask attack: Dieser Modus ist im Prinzip ein spezifizierter Brute-Force attack. Der Unterschied liegt darin, dass ein jedes einzelnes Zeichen auf einen bestimmten Schlüsselraum eingeschränkt wird und sich somit die Anzahl der Möglichkeiten enorm verkürzen lassen. Die vordefinierten Zeichensätze wurden bereits in 1.3 erläutert. Bei der Maskenbildung wird dabei ausgenutzt, wie Menschen normalerweise ihre Passwörter bilden. Viele Menschen bilden ihr Passwort durch einen Namen gefolgt von einer Jahresangabe, z.B. Bernd1991. Dieses Passwort hat eine Länge von 9 Zeichen. Angenommen man möchte dieses Passwort brute-forcen, dann müsste man 959 mögliche Passwortkandidaten erzeugen. Bei einer Erzeugung von 100 Millionen Hashwerten pro Sekunde würde man über 199 Jahre benötigen, um das Password zu cracken. Würde man jedoch die Maske ?u?l?l?l?l?l?d?d?d?d benutzen, so hätte man 26 ∗ 26 ∗ 26 ∗ 26 ∗ 26 ∗ 10 ∗ 10 ∗ 10 ∗ 10 Möglichkeiten . Dies würde lediglich knapp 20 Minuten benötigen. • Permutation attack: Hier werden alle Permutationen jedes einzelnen Wörterbucheintrages erzeugt. Ein Nachteil davon ist, dass bei vielen langen Einträgen enorm viele Möglichkeiten gebildet werden müssen. Unser Wörterbuch enthält beispielsweise den Eintrag PWD. Dann erhält man AnzahlZeichen! Passwortkandidaten: PWD PDW WPD WDP DPW DWP • Rule-based attack: Der komplizierteste aber auch mächtigste Angriffsmodus, denn dieser erzeugt mit Hilfe von Modifikationen und Erweiterungen nach bestimmten Regeln neue Passwortkandidaten. Dieser Modus wird genauer beschrieben, da diese Regeln, bis auf die letzten vier Regeln wegen Speicherzugriffe, 6 CHAPTER 2. TECHNISCHER HINTERGRUND im Script implementiert werden. Folgende Tabelle enthält Regeln, die auch von John the Ripper unterstützt werden. Bei Positionsangaben mittels N startet N bei Null. Name Fkt. Nothing Lowercase : l Uppercase u Capitalize c Invert Capitalize Toggle Case Toggle @ C t TN Reverse Duplicate Duplicate N Reflect r d pN Rotate Left Rotate Right Append Character Prepend Character Truncate left Truncate right Delete @ N Delete range Insert @ N Overwrite @N Replace Purge Duplicate first N Duplicate last N Duplicate all { f Beschreibung Tut nichts Wandelt alle Buchstaben in Kleinbuchstaben um Wandelt alle Buchstaben in Großbuchstaben um Macht erstes Zeichen groß, Rest klein Macht erstes Zeichen klein, Rest groß Kehrt Klein/Großschreibung um Kehrt Klein/Großschreibung an Stelle N um Kehrt Eingabe um Dupliziert Eingabe Hängt Duplikat N mal an Bsp.Regel : l Eingabe Ausgabe Pwd1234 Pwd1234 Pwd1234 pwd1234 u Pwd1234 PWD1234 c pwD1234 Pwd1234 C Pwd1234 pWD1234 t Pwd1234 pWD1234 T2 Pwd1234 PWd1234 r d p1 Pwd1234 Pwd1234 Pwd1234 4321dwP Pwd1234Pwd1234 Pwd1234Pwd1234 f Pwd1234 Pwd12344321dwP { Pwd1234 wd1234P } Pwd1234 4Pwd123 $X Hängt umgekehrtes Duplikat der Eingabe an Schiebt Eingabe um eine Stelle nach links Schiebt Eingabe um eine Stelle nach rechts Hängt Zeichen X an $! Pwd1234 Pwd1234! ˆX Stellt Zeichen X voran ˆ! Pwd1234 !Pwd1234 [ Löscht erstes Zeichen [ Pwd1234 wd1234 ] Löscht letztes Zeichen ] Pwd1234 Pwd123 } DN Löscht Zeichen an Stelle N D2 Pwd1234 Pw1234 xNM Löscht M Zeichen ab Stelle N Setzt Zeichen X an Stelle N ein Überschreibt Zeichen an Stelle N mit X Ersetzt alle X durch Y Eliminiert alle X Dupliziert erstes Zeichen N mal Dupliziert letztes Zeichen N mal Dupliziert jedes Zeichen x03 Pwd1234 1234 i3A Pwd1234 PwdA1234 o3! Pwd1234 Pwd!234 sws @w z2 Pwwd1234 Pwwd1234 Pwd1234 Pssd1234 Pd1234 PPPwd1234 Z2 Pwd1234 Pwd123444 q Pwd1234 PPwwdd11223344 iNX oNX sXY @X zN ZN q 7 2.1. HASHCAT Extract memory XNMI Append memory 4 Prepend memory 6 Memorize M Fügt einen Teilstring des im Speicher an Position i stehenden Wortes der Länge M beginnend ab Position N ein Fügt das im Speicher stehende Wort an aktuelles Wort an Stellt das im Speicher stehende Wort vor aktuelles Wort Behält aktuelles Wort lMX428 p@ssW0rd p@ssw0rdw0 uMl4 p@ssW0rd p@ssw0rdP@SSW0RD rMr6 p@ssW0rd dr0Wss@pp@ssW0rd lMuX084 p@ssW0rd P@SSp@ssw0rdW0RD Tabelle 2.1: Regeln, die Hashcat und John the Ripper unterstützt Des Weiteren gibt es noch Regeln, die den Nutzen haben, bestimmte Kandidaten abzulehnen: Name Fkt. Beschreibung Reject less Reject greater Reject contain Reject not contain Reject equal first Reject equal last Reject equal at Reject contains Reject contains <N >N !X /X (X )X =NX %NX Q Lehnt ab, die größer N sind Lehnt ab, die kleiner N sind Lehnt ab, die X enthalten Lehnt ab, die X nicht enthalten Lehnt ab, die nicht mit X beginnen Lehnt ab, die nicht mit X enden Lehnt ab, bei denen an Postion N nicht X steht Lehnt ab, die X weniger als N mal enthalten Lehnt ab, wo der Speicher aktuelles Wort matched Bsp.Regel <16 >7 !a /b (c )d 3e %2f rMrQ Tabelle 2.2: Regeln, um Kandidaten abzulehnen Außerdem stellt Hashcat folgende Regeln zur Verfügung, die jedoch in John the Ripper nicht vorhanden sind und deshalb in unserem Script nicht implementiert werden: Name Fkt. Beschreibung Swap front Swap back Swap @ N k Tauscht ersten zwei Zeichen K Tauscht letzten zwei Zeichen Tauscht Zeichen an Stelle X mit Stelle Y Shiftet Zeichen an Stelle N bitweise nach links Shiftet Zeichen an Stelle N bitweise nach rechts Inkrementiert Zeichen an Stelle N um 1 Ascii-Wert Dekrementiert Zeichen an Stelle N um 1 Ascii-Wert Ersetzt Zeichen an Stelle N mit Wert an Stelle N+1 Bitwise shift left Bitwise shift right Ascii increment Ascii decrement Replace N +1 8 *XY LN RN +N -N .N Bsp.Regel k Eingabe Ausgabe Pwd1234 wPd1234 K Pwd1234 Pwd1243 *02 Pwd1234 dwP1234 L2 Pwd1234 R2 Pwd1234 +2 Pwd1234 -2 Pwd1234 .2 Pwd1234 Pw11234 CHAPTER 2. TECHNISCHER HINTERGRUND Replace N -1 Duplicate block front Duplicate block back Title ,N ,2 Pwd1234 Pww1234 yN Ersetzt Zeichen an Stelle N mit Wert an Stelle N-1 Dupliziert ersten N Zeichen y2 Pwd1234 PwPwd1234 YN Dupliziert letzten N Zeichen Y2 Pwd1234 Pwd123434 E Wandelt Zeile in Kleinbuchstaben um, erstes Zeichen in Großbuchstaben und jedes Zeichen nach einem Leerzeichen E pwD1234 pwd Pwd1234 Pwd Tabelle 2.3: Regeln, die nur Hashcat bietet • Table-Lookup attack: In diesem Modus wird für jeden Eintrag unseres Wörterbuch die entsprechende Maske generiert. Genauer wird auf den Modi nicht eingegangen, da dieser für unser Password Strength Meter keine Rolle spielt. • Toggle-Case attack: Dies bewirkt, dass alle möglichen Varianten von Groß- und Kleinbuchstaben eines jeden einzelnen Wörterbucheintrag gebildet werden. Beispiel: Das Wörterbuch enthält pwd1234. Daraus werden 2AnzahlBuchstaben Passwortkandidaten erzeugt: pwd1234 Pwd1234 PWd1234 PwD1234 PWD1234 pWd1234 pwD1234 pWD1234 2.2 John the Ripper Bei John the Ripper stehen 4 verschiedene Modi zur Verfügung [17]: • Single crack mode: Dies ist der Modus mit dem begonnen werden sollte. Er benutzt den Benutzername und andere Heimverzeichnis-Namen als potentielle Kandidaten und wendet einige Regeln auf diese an. Außerdem ist er deutlich schneller als der Wordlist mode, da weniger Regeln und Wörter verwendet werden. Erfolgreich gecrackte Passwörter werden ebenfalls geprüft, in Vermutung, dass mehrere Benutzer das gleiche Passwort verwenden. • Wordlist mode: Man benötigt ein Wörterbuch, das einen Eintrag pro Zeile enthält. Diese Einträge werden sowohl eins zu eins geprüft als auch verschiedenste Regeln auf diese angewendet. Das Wörterbuch wird nicht sortiert und von der ersten bis zur letzten Zeile durchlaufen. Falls die Passwörter nicht aus einem bestimmten Grund so angereiht sind, sollten die Passwörter alphabetisch sortiert werden, da 9 2.3. HASH TYPEN bei manchen Hashtypen John the Ripper schneller arbeitet, wenn sich das nachfolgende Passwort nur in wenige Zeichen unterscheidet. • Incremental mode: Dieser Modus probiert alle möglichen Kombinationen von Zeichen als Passwortkandidaten. Er ist somit identisch zum Brute-Force attack bei Hashcat. In der Regel wird dieser Modus nur bei relativ kurzen Passwörtern zum Erfolg führen, da es eine so große Anzahl an Möglichkeiten gibt und dies zu viel Zeit benötigt. Für diesen Modus sollten daher spezifische Definitionen getroffen werden wie etwa Passwortlängenlimits oder Zeichensatz (Masken). • External mode: Man kann bei John auch einen externen Cracking-Modus definieren. Die Definition erfolgt in der Konfigurationsdatei. In der Sektion [List.External:MODE] kann Programmcode in C hinterlegt werden, den John the Ripper dann benutzt, um die Passwortkandidaten zu generieren. 2.3 Hash Typen Da, wie bereits angesprochen, die Hashfunktion eine Bedeutung für die Performance spielt, soll folgend kurz die prinzipiell zwei verschiedenen Gruppen von Hashes erläutert werden [16] : • Schnelle Hashes: Diese sind typischerweise kryptographische Hashes und sollen schnell und effizient berechenbar sein, um beispielsweise in Authentifikationssystemen verwendet werden zu können. Zu diesen gehören unter anderem MD4, MD5 und SHA-1. Der Vorteil der Performance wird zum Nachteil gegenüber der Crackbarkeit. Denn umso schneller Hashes berechnet werden können, umso mehr können durch Hashcat oder John the Ripper erzeugt und geprüft werden. Dies wiederum erhöht die Wahrscheinlichkeit das Passwort zu cracken. • Langsame Hashes: Diese sind dadurch charakterisiert, dass sie ineffizient und schwer zu erzeugen sind. Beispiele dazu sind unter anderem bcrypt, PBKDF2 und scrypt. Dadurch kann eine höhere Sicherheit gegenüber Angreifern gewährleistet werden, da die Anzahl der Hashes, die pro Sekunde erzeugt werden können deutlich abnimmt. Insgesamt gibt es eine große Anzahl verschiedener Hashes, die jeweils unterschiedliche Performance aufweisen. Eine beschränkte Übersicht zu den Benchmarks einiger Hashes wird in 4.1 gegeben. 10 I MPLEMENTIERUNG 3 3.1 Beschreibung In diesem Abschnitt wird der Programmablauf und die Implementierung der Regeln beschrieben. Mit dem Start des Scripts wird das Wörterbuch mit dem Dateinamen password.lst zeilenweise durchlaufen und jeder Eintrag in einem Array und die Anzahl der Einträge für spätere Überprüfungen gespeichert. Hierbei ist es wichtig, dass pro Zeile nur ein Passwort und keine leeren Zeilen vorhanden sind, um die richtige Funktion des Scripts zu gewährleisten. Die Tests wurden mit dem Standard Wörterbuch [18] zu finden ist, durchgeführt. Dort sind auch weitere länderspezifische Wörterbücher vorhanden, welche die Erfolgschancen wahrscheinlich im jeweiligen Land erhöhen. Nach dem Abspeichern der Einträge der Wortliste wird das zu untersuchende Passwort entgegengenommen. Dieses wird zu Beginn auf Länge und Character-Klassen untersucht. Da Passwörter, die unter sechs Zeichen lang sind, selbst via Brute-Force Heimnutzer 4.2.1 und langsamer Hashfunktion in annehmbarer Zeit gecracked werden würden, werden Passwörter unter dieser Länge gleich als sehr schwach eingestuft und nicht weiter analysiert. Außerdem spielt es eine Rolle, ob ein Passwort nur aus einer Character-Klasse besteht. Denn diese Passwörter sind deutlich anfälliger gegenüber eines Angriffs via Masken. Somit werden Passwörter, die nur aus einer Character-Klasse und aus weniger als acht Zeichen bestehen, als schwach eingestuft. Die Funktion einheitlich(passwort) gibt True zurück, falls das Passwort mittels der Methoden isalpha(), islower(), isupper(), isdigit(), isalnum() auf eine Character-Klasse festgelegt werden kann. Danach wird überprüft, ob das Passwort eins-zu-eins im Wörterbuch vorkommt, also im Prinzip die Regel Nothing angewandt. Wenn dem so ist, kann das Passwort mittels Dictionary attack sehr schnell gecracked werden. Denn dazu müssen im Worst Case lediglich zu jedem Eintrag der Hashwert gebildet werden. Das Standard Wörterbuch enthält 3545 Passwortkandidaten. Somit kann auch ein solches Passwort, das einszu-eins im verwendeten Wörterbuch vorkommt, als schwach bezeichnet werden. Sofern keiner dieser Fälle zuvor zutrifft, wird zunächst die Funktion maskepw(passwort) ausgeführt. Diese prüft jedes einzelne Zeichen des Passworts auf ihre Character-Klasse, gibt die Maske des Passworts aus und die Anzahl der Möglichkeiten bei einer Mask attack zurück. 11 3.1. BESCHREIBUNG Danach wird mittels der Funktion regelnMatchen(passwort, wortListe, anzWorte) überprüft, ob das Anwenden der einzelnen Standard Regeln auf das Wörterbuch das Passwort matchen können. Dabei werden die jeweiligen Regeln durchlaufen. Als Parameter wird das Passwort, die Wortliste, die das Wörterbuch enthält und die Anzahl der Einträge des Wörterbuchs mitgegeben. Falls eine Regel matchen kann, wird ausgegeben, welche Regel matchen konnte und True zurückgeliefert. Kann eine Standard Regel matchen, so ist das Passwort ebenfalls als schwach einzustufen. Folgende Regeln konnten aufgrund von Speicherzugriffen, die dort verwendet werden, nicht implementiert werden: Extract memory, Append memory, Prepend memory, Memorize. Ansonsten sind alle Regeln, die sowohl von Hashcat als auch John the Ripper unterstützt werden (siehe 2.1), implementiert. Bei manchen Regeln konnte die Implementierung mittels Umkehrschluss realisiert werden, um nicht die Regel auf jeden Wörterbucheintrag anwenden zu müssen. Bei den meisten Regeln war dies jedoch nicht möglich und so musste die Regel auf alle Einträge angewandt und mit dem Passwort verglichen werden. Im Folgenden werden die einzelnen Implementierungen der Regeln beschrieben. • Lowercase: Auf die Einträge des Wörterbuchs wird die Methode lower(), die alle Buchstaben in Kleinbuchstaben wandelt, angewandt. • Uppercase: Hier wird statt lower() die Methode upper(), die alle Buchstaben zu Großbuchstaben wandelt, verwendet. Ansonsten ist die Implementierung identisch. • Capitalize: Statt upper() wird die Methode capitalize(), die das erste Zeichen in Großbuchstabe und den Rest in Kleinbuchstaben wandelt. Ansonsten ist die Vorgehensweise gleich. • Invert Capitalize: Es wird eine Hilfsmethode icapitalize(wort) implementiert, die als Parameter wort den jeweiligen Eintrag übergeben bekommt. Das erste Zeichen wird in Kleinbuchstabe, der Rest in Großbuchstaben gewandelt und als String zurückgegeben. • Toggle Case: Dafür wird die Methode swapcase() verwendet, die jeden Kleinbuchstabe in Großbuchstabe und jeden Großbuchstabe in Kleinbuchstabe wandelt. • Toggle @: Die Hilfsmethode toggleAt(wort, i) erhält den Wörterbucheintrag und den Index, an dem der Buchstabe gewechselt werden soll, als Parameter und gibt den String zurück. • Reverse: Hier wird eine neue Reverse-Wortliste erstellt, welche die Wörterbucheinträge von rechts nach links enthält. Diese Liste wird dann mit dem Passwort verglichen. • Rotate Left: Hier wird zum ersten mal der Umkehrschluss genutzt. Bei dieser Regel werden alle Zeichen nach links verschoben, wobei das erste zum letzten Zeichen wird. Daher kann durch das Verschieben der Zeichen des Passworts nach rechts, wobei das letzte zum ersten Zeichen wird und anschließendem Vergleich mit der Wortliste auf diese Regel geschlossen werden. • Rotate Right: Im Prinzip wie Rotate Left über Umkehrschluss implementiert. Diesmal wird das erste zum letzten Zeichen des Passworts. • Duplicate: Es wird mittels *2 auf den jeweiligen Wörterbucheintrag der Wörterbucheintrag verdoppelt. • Reflect: Die zuvor in der Regel Reverse angelegte Reverse-Wortliste wird hier nochmals verwendet. An jeden Wörterbucheintrag wird mittels + Operand der passende Eintrag der Reverse-Wortliste angehängt. 12 CHAPTER 3. IMPLEMENTIERUNG • Duplicate all: Es wird erneut der Umkehrschluss genutzt. Beim Anwenden von Modulo 2 auf die Länge des Passworts darf es keinen Rest geben, denn alle Zeichen müssen dupliziert vorkommen. Dann werden in zweier Schritte die Zeichen des Passworts verglichen und bei Gleichheit einmal in eine Liste eingefügt. Diese Listeneinträge werden einem String zugewiesen. Die Länge des Strings muss gleich der halben Länge des Passworts sein, damit gewährleistet ist, dass jedes Zeichen dupliziert enthalten ist. Ist dies der Fall wird der String mit der Wortliste verglichen. • Duplicate N: Die Länge des Passworts muss dazu ein Vielfaches von der Länge des Wörterbucheintrags sein und mindestens dreimal so lang, da sonst bereits die Regel Duplicate matchen kann. Dann wird der Faktor n bestimmt und mittels *n auf den jeweiligen Wörterbucheintrag dieser vervielfacht. • Append Character: Mittels Umkehrschluss wird geprüft, ob das Passwort ohne das letzte Zeichen im Wörterbuch vorkommt. • Prepend Character: Diese ist identisch zu Append Character mit dem Unterschied, dass diesmal ohne das erste Zeichen des Passworts geprüft wird. • Duplicate first N: Auch hier wird der Umkehrschluss genutzt. Zunächst wird die Anzahl der wiederholenden Zeichen des Passworts von Beginn an bestimmt. Die Hilfsmethode duplicateFirstN(wort, n) bekommt den Wörterbucheintrag und den Faktor, wie viele Zeichen dupliziert werden sollen, übergeben und gibt den String mit den ersten n duplizierten Zeichen zurück. Da im Passwort auch duplizierte Zeichen enthalten sein können, die beim Wörterbucheintrag nicht dupliziert werden müssen, muss für n gleich eins gestartet werden. Zum Beispiel hat das Passwort hheello als n drei, auf den Wörterbucheintrag hello müssen jedoch nur die ersten beiden Zeichen dupliziert werden. Außerdem muss vor Aufruf der Hilfsmethode geprüft werden, ob die Länge des Wörterbucheintrags mindestens gleich n ist, damit nicht auf einen ungültigen Index zugegriffen wird. • Duplicate last N: Diese wurde identisch zu Duplicate first N implementiert, nur dass der Faktor n vom Ende beginnend bestimmt wird. Die Hilfsmethode duplicateLastN(wort, n) gibt den String mit den letzten n duplizierten Zeichen zurück. • Truncate left: Es wird jeder Wörterbucheintrag ohne das erste Zeichen mit dem Passwort verglichen. • Truncate right: Jeder Wörterbucheintrag wird ohne das letzte Zeichen mit dem Passwort verglichen. • Delete @ N: Die Hilfsmethode deleteAt(wort, i) bekommt den Wörterbucheintrag und einen Index übergeben, an welcher Stelle gelöscht werden soll und gibt den String ohne das Zeichen an Index zurück. • Delete range: Die Hilfsmethode deleteRange(wort, start, laenge) bekommt als Parameter den Wörterbucheintrag, den Start und die Länge des Bereichs übergeben und gibt den String mit gelöschtem Bereich zurück. Dieser Bereich muss mindestens eine Länge von zwei haben, da sonst die Regel Delete @ greift. • Purge: Es wird zunächst eine Zeichenliste angelegt, in der alle druckbaren 95 ASCII-Zeichen enthalten sind. Für jedes dieser Zeichen wird geprüft, ob dieses im jeweiligen Wörterbucheintrag enthalten ist. Falls ja, wird mittels der Methode replace(old, new) das jeweilige Zeichen durch nichts ersetzt. • Overwrite @ N und Replace: Diese beiden Regeln wurden zusammen implementiert, da diese sich vom Algorithmus ähneln. Dazu muss die Länge des Wörterbucheintrags gleich der Länge des Passworts sein. Es wird erneut die Zeichenliste benötigt. Diesmal muss das Zeichen im Passwort enthalten sein. Auf jeden Wörterbucheintrag wird die Methode replace(old, new) das Zeichen des Wörterbucheintrags durch das Ze- 13 3.1. BESCHREIBUNG ichen der Zeichenliste ersetzt. Mittels der Methode count(obj) wird dann noch zwischen Overwrite @ N und Replace unterschieden. Falls das Zeichen genau einmal im Wörterbucheintrag vorkommt, ist die Regel Overwrite @ N möglich. Wenn es mehr als einmal vorkommt, kann die Regel Replace matchen. • Insert @ N: Dazu muss die Länge des Passworts um eins größer sein als die Länge des jeweilige Wörterbucheintrags. Die Hilfsmethode insertAt(wort, zeichen, i) erhält als Parameter den Wörterbucheintrag, das Zeichen der Zeichenliste, den Index, an dem eingefügt werden soll und gibt den String mit eingefügtem Zeichen an richtiger Stelle zurück. Für jede Stelle bis auf die Stelle Null wird jedes Zeichen eingesetzt. Denn Stelle Null ist bereits durch Prepend Character abgehandelt. Die letzte Stelle ist jedoch nötig, da das letzte Zeichen dann rechts verschoben wird und nicht durch Append Character abgedeckt ist. Sofern keine Standard-Regel zum gewünschten Passwort führen konnte, werden verschiedenen Angreifer und deren Werte zu verschiedenen Hashfunktionen angelegt 4.2. Danach wird nach einer möglichen Basis gesucht. Die Hilfsmethode basisSuchen(passwort, wortListe, anzWorte) erhält als Parameter das Passwort, die Wortliste und die Anzahl der Einträge in der Wortliste und gibt die größte gefundene Basis, die mehr als zwei Zeichen lang ist, zurück. Zuerst wird das Passwort von hinten immer wieder um ein Zeichen gekürzt und verglichen, ob das verkürzte Passwort in der Wortliste vorhanden ist. So wird der Fall abgedeckt, dass an die Basis mittels Append Character lediglich Zeichen angehängt werden müssen. Folgend wird das Passwort von vorne immer wieder um ein Zeichen gekürzt und erneut verglichen, damit der Fall, dass lediglich mittels Prepend Character Zeichen vorangestellt werden müssen. Zuletzt fehlt noch der Fall, dass die Basis nicht mit dem ersten Zeichen beginnt und nicht mit dem letzten Zeichen endet, sodass sowohl Append Character als auch Prepend Character angewandt werden müssen. Dazu wird für jeden Bereich des Passwort mit der Länge drei gegen das Wörterbuch geprüft. Falls eine Basis gefunden wurde, wird die Basis und die Zeichen, die nicht in der Basis enthalten sind ausgegeben. Die nicht enthaltenen Zeichen müssen durch die Regeln Append/Prepend Character hinzugefügt werden. Also im Prinzip im Worst Case mittels Brute-Force erraten werden. Da die Basis dem Crackprogramm nicht bekannt ist, kann es dazu kommen, dass erst der letzte Wörterbucheintrag das Passwort matchen kann. Bei der Zeitschätzung dafür wird vom Average Case ausgegangen. Wird hingegen keine Basis gefunden, muss das komplette Passwort mittels Brute-Force gecracked werden. Die Schätzung auch hier ebenfalls nach Average Case. Für die Umrechnung der Möglichkeiten und Hashwertbildung pro Sekunde wird die Hilfsmethode zeitUmrechnen(moeglichkeiten, benchmark) verwendet. Diese bekommt als Parameter die Anzahl der Möglichkeiten und den Benchmark des jeweiligen Angreifers zu einer bestimmten Hashfunktion. Mittels Umrechnungen wird dann entschieden, welche Einheit für die Dauer angegeben wird. Dabei wird zwischen Sekunden, Minuten, Stunden, Tage und Jahre unterschieden. Ist die Dauert größer als 100 Jahre, so wird sich auf >100 Jahre festgelegt. Als Rückgabe wird dann der Wert inklusive Einheit als String geliefert. 14 CHAPTER 3. IMPLEMENTIERUNG 3.2 Übersicht der Einordnung der Passwortstärke In der nachfolgenden Abbildung wird die Einordnung der Passwortstärke des Scripts, wie sie in der Implementierung realisiert wurde, noch einmal verdeutlicht. Passwort einlesen Nein Länge < 6 Einfache Stringtests zutreffend Ja Ja Nein Passwort sehr schwach Nein Länge < 8 Ja 1:1 im Wörterbuch Ja Passwort schwach Nein Standard Regel matcht Nein Basis vorhanden Ja Ja Nein Zeichen brute-forcen Regel ausgeben Passwort schwach Passwort brute-forcen Geschätzte Dauer ausgeben Abbildung 3.1: Einordnung Passwortstärke 15 4 Z EITABSCHÄTZUNG 4.1 Benchmarks Folgende Benchmarks sind auf der Website von Openwall [15] zu finden. In den folgenden Auflistungen wurde sich nur auf die Benchmarks beschränkt, die für jeden der aufgelisteten Hashes einen Wert enthielten. Betriebssystem wurde auf Linux eingegrenzt. Des weiteren wurden unterschiedliche Compiler benutzt, die hier nicht mit aufgelistet werden. Falls nur der Compiler einen Unterschied ausmachte, wurde der bessere Wert genommen. DES crypt() many / one salt 117315K / 23130K 73334K / 27426K 73098K / 26699K 61675K / 31241K 50017K / 29746K 46153K / 30965K 36667K / 27349K 22773K / 18284K 16 MD5 crypt() bcrypt x32 Windows LanMan CPUs & clock rate Threads JtR Version 1953K 56320 33410K 128 1.7.9-jumbo-6 850944 23808 42630K 16x X7550, 2.0 GHz, HAT disabled 4x X7560, 2.27 GHz 64 1.7.9-jumbo-5 344603 23500 40540K 4x X7560, 2.27 GHz 64 1.7.9 325558 18510 55030K 4x X7560, 2.27 GHz 32 1.7.9 404352 10800 72351K 24 1.7.9-jumbo-6 333504 7488 87244K 12 1.7.9-jumbo-6 493056 14112 74514K 2x E5-2630, 2.3 GHz + turbo 2x E5-2630, 2.3 GHz + turbo 2x X5690, 3.47 GHz 24 1.7.9-jumbo-5 66914 4800 88834K Core i7-2600K 3.4 GHz 8 1.7.9 CHAPTER 4. ZEITABSCHÄTZUNG 22193K / 16377K 21561K / 16187K 21430K / 15446K 20334K / 15499K 18527K / 14247K 17758K / 14091K 17530K / 14516K 17039K / 12124K 16578K / 14581K 16442K / 12792K 14648K / 12288K 11599K / 9928K 9410K / 8601K 8867K / 7058K 6852K / 6366K 6650K / 5468K 1335K / 1228K 292K / 278K 95389 7003 54214K 2x E5620, 2.4 GHz + turbo 16 1.7.9.6-owl1 216192 5568 59244K 2x E5420, 2.5 GHz 8 1.7.9-jumbo-5 205708 6302 26682K 2x E5520, 2.27 GHz + turbo 16 1.7.9-jumbo-5 85844 5135 54027K 2x E5420, 2.5 GHz 8 1.7.9 87305 5539 48044K FX-8120, o/c 3.6 GHz 8 1.7.9 80325 5367 60707K 6 1.7.9 150144 4419 79069K Phenom II X6 1090T, 3.21 GHz E31230, 3.2 GHz + turbo 8 1.7.9-jumbo-5 203264 5300 44826K FX-8120, 3.1 GHz + turbo 8 1.7.9-jumbo-6 60235 4419 78610K E31230, 3.2 GHz + turbo 8 1.7.9 87305 5537 43692K FX-8120, 3.1 GHz + turbo 8 1.7.9 58368 3730 81674K Q8400, o/c 3.4 GHz 4 45623 2952 64978K Q8400, 2.66 GHz 4 91903 2115 66972K Celeron E3200, oc 4.0 GHz 2 1.7.9.4-owl1, Owl package 1.7.9.4-owl1, Owl package 1.7.9-jumbo5 33969 2110 68012K Celeron E3200, oc 4.0 GHz 2 1.7.9 27033 1740 63317K 2 1.7.9 29271 1872 54290K Core 2 Duo E6550, o/c to 3.15 GHz Celeron E3200, oc 3.33 GHz 2 1.7.9 14304 840 15548K AMD E-450, 1.65 GHz 2 1.7.9-jumbo-6 2953 166 3596K 2x Cortex-A9 666 MHz, (in Xilinx Zynq 7020) 2 1.8.0.1 Tabelle 4.1: Benchmarks Multi Processing John the Ripper Außerdem sind auch Benchmarks für ONE-CPUs zu finden. DES crypt() many / one salt 6200K / 5898K 5802K / 5491K 5731K / 4647K 5723K / 5518K MD5 crypt() 17418 14766 14648 14642 bcrypt x32 1046 940 918 918 Windows LanMan 80981K 71238K 26852K 74812K 4738K / 4390K 4463K / 4261K 4452K / 4275K 4381K / 4195K 39584 17279 45328 12388 946 1119 1122 786 57165K 61836K 61470K 60186K CPUs & clock rate Core i7-3770, 3.4 GHz Core i7-2600K, 3.4 GHz Core i7-2600K, 3.4 GHz Core i7-2600K, 3.4 GHz FX-8120, 4.0 GHz turbo Celeron E3200, oc 4.0 GHz Celeron E3200, oc 4.0 GHz E31230, 3.2 GHz + turbo JtR Version 1.8.0 1.7.9 1.7.8 1.7.8-fast-deskey-setup-3 1.7.9-jumbo-6 1.7.9 1.7.9-jumbo5 1.7.9 17 4.1. BENCHMARKS 4370K / 4186K 3951K / 3786K 3828K / 3673K 3713K / 3561K 3500K / 3369K 35340 14636 39348 14733 13300 792 950 904 944 882 60199K 53934K 51187K 50995K 48700K 3486K / 2989K 3429K / 3014K 15580 15696 943 924 17754K 21567K E31230, 3.2 GHz + turbo FX-8120, 4.0 GHz turbo X5690, 3.47 GHz Celeron E3200, oc 3.33 GHz Core 2 Duo E6550, o/c to 3.15 GHz E6750, o/c to 3.6 GHz Core i7 920, o/c to 3.6 GHz 3376K / 3218K 3296K / 3213K 16089 13564 1070 790 43999K 47566K Phenom II X6 1090T, 3.21 GHz X5650, 2.67 GHz 3116K / 2843K 3017K / 2588K 3013K / 2531K 13599 13644 11257 791 825 745 20379K 14938K 16649K X5650, 2.67 GHz X5460, 3.16 GHz X5460, 3.16 GHz 2965K / 2504K ... 45K / 43K 44K / 43K 10K / 9K 9438 / 8654 15530 ... 740 645 201 254 1011 ... 53.5 42.2 17.3 16.6 14997K ... 600K 804K 224K 202K Phenom II X6 1075T, 3.0 GHz ... Pentium II, 350 MHz SD5113, 530 MHz K5 PR75, 75 MHz Pentium, 100 MHz 1.7.9-jumbo-5 1.7.9 1.7.9-jumbo-5 1.7.9 1.7.9 1.7.3.1 1.7.6-jumbo12 1.7.9 1.7.8-fast-deskey-setup-3 1.7.8 1.7.4.2 1.7.3.1-owl1 package 1.7.8 ... 1.7.3.1 1.8.0.2 1.8.0 1.8.0 Tabelle 4.2: Benchmarks ONE-CPU John the Ripper Des Weiteren unterstützt die Version oclHashcat auch die Hashwertbildung durch GPUs. Dazu sind folgende Benchmarks veröffentlicht [8]. Hash Type MD4 MD5 SHA1 SHA256 SHA512 SHA3(Keccak) RipeMD160 Whirlpool LM NTLM NetNTLMv1 NetNTLMv2 WPA/WPA2 Windows 7, 64 bit, 1x AMD hd7970 15445M c/s 7893M c/s 2495M c/s 1036M c/s 179M c/s 157M c/s Windows 7, 32 bit, 1x Nvidia gtx580 4245M c/s 2802M c/s 879M c/s 337M c/s 103M c/s 91M c/s Ubuntu, 64 bit, 1x AMD hd6990 Ubuntu, 64 bit, 8x AMD R9 290X 19868M c/s 10436M c/s 3833M c/s 1413M c/s 383M c/s 277M c/s Ubuntu, 64 bit, 1x Nvidia gtx750Ti 5718M c/s 3178M c/s 1103M c/s 406M c/s 90M c/s 111M c/s 1690M c/s 41281k c/s 1271M c/s 14789M c/s 7912M c/s 545M c/s 130k c/s 615M c/s 94752k c/s 412M c/s 4059M c/s 1844M c/s 205M c/s 47k c/s 2255M c/s 91128k c/s 967M c/s 19011M c/s 8605M c/s 491M c/s 181k c/s 677M c/s 54138k c/s 398M c/s 5708M c/s 1355M c/s 135M c/s 54k c/s 20008M c/s 507744k c/s 15176M c/s 174152M c/s 91984M c/s 6456M c/s 1454k c/s Tabelle 4.3: Benchmarks GPU Hashcat 18 183232M c/s 93800M c/s 29528M c/s 12328M c/s 1952M c/s 2005M c/s CHAPTER 4. ZEITABSCHÄTZUNG 4.2 Modellieren von Angreifern In diesem Script werden verschiedene Szenarien modelliert. So spielt es eine Rolle, ob beispielsweise ein Heimnutzer, eine Firma oder ein darauf spezialisierter Dienst einen Angriff durchführt. Denn diese besitzen unterschiedliche Ressourcen und Hardware. Für unsere Angriffstypen werden zur Einstufung nur der Wert der dafür nötigen Prozessoren betrachtet. Wie aus den Benchmarks ersichtlich ist die Anzahl der zu erzeugenden Hashes pro Sekunde nicht nur von der Hardware sondern auch von der gewählten Hashfunktion abhängig. Heutzutage sollte kein DES crypt() mehr verwendet werden, da dieser Hash sehr schnell zu berechnen ist. Für unsere Schätzungen werden Windows LanMan, MD5 und bcrypt genauer betrachtet. Die Tabellen zum Brute-Force attack sollen einen Einblick geben, bis zu welcher Passwortlänge der jeweilige Angreifer Erfolgschance hat. Dabei wird vom Worst Case, dass sämtliche Kombinationen gebildete werden müssen ausgegangen. Für die Zeitabschätzung im Script wird jedoch mit dem Average Case gerechnet. 4.2.1 Heimnutzer Bei einem Heimnutzer wird davon ausgegangen, dass dieser eine zeitgemäße und preislich angemessene Hardware zur Verfügung hat. In diesem Fall wird folgender Datensatz aus den Benchmarks verwendet, da die Kosten des Prozessors bei ca. 300 Euro [10] liegen: DES crypt() many / one salt 22773K / 18284K MD5 crypt() bcrypt x32 Windows LanMan 66914 4800 88834K CPUs & clock rate Core i7-2600K 3.4 GHz Threads 8 JtR Version 1.7.9 Tabelle 4.4: Benchmark John the Ripper: Heimnutzer Brute-Force attack Die nachfolgende Tabelle zeigt, dass für einen Heimnutzer ein Brute-Force attack erst bei einer Passwortlänge kleiner acht im Falle eines Windows LanMan Hash Erfolg in annehmbarer Zeit verspricht. Bei den anderen beiden Hashes muss die Passwortlänge sogar noch kleiner sein. Zeichen 95 95 95 95 95 95 95 95 Passwortlänge 1 2 3 4 5 6 7 8 Windows LanMan 0 0 0 1 Sekunde 1 Minute 2 Stunden 9 Tage 2 Jahre MD5 crypt() bcrypt x32 0 0 13 Sekunden 20 Minuten 32 Stunden 127 Tage 33 Jahre 0 2 Sekunden 3 Minuten 5 Stunden 19 Tage 5 Jahre Tabelle 4.5: Brute-Force: Heimnutzer 4.2.2 Kleine Firma Einer kleinen Firma steht in der Regel mehr Ressourcen und Hardware als einem Heimnutzer zur Verfügung. Diesmal werden für die Kosten von vier Prozessoren, die einen Einzelpreis von ca. 400 Euro [11] 19 4.2. MODELLIEREN VON ANGREIFERN besitzen, herangezogen. Damit belaufen sich die Gesamtkosten auf ca. 2000 Euro. Dazu passt folgender Datensatz aus den Benchmarks: DES crypt() many / one salt 73098K / 26699K MD5 crypt() bcrypt x32 Windows LanMan 344603 23500 40540K CPUs & clock rate Threads 4x X7560, 2.27 GHz 64 JtR Version 1.7.9 Tabelle 4.6: Benchmark John the Ripper: Kleine Firma Brute-Force attack Auch für eine kleine Firma ist ein Brute-Force attack erst bei einer Passwortlänge kleiner acht bei Windows LanMan Hash in annehmbarer Zeit sinnvoll. Zeichen Passwortlänge 1 2 3 4 5 6 7 8 95 95 95 95 95 95 95 95 Windows LanMan 0 0 0 2 Sekunden 3 Minuten 5 Stunden 20 Tage 5 Jahre MD5 crypt() bcrypt x32 0 0 2 Sekunden 4 Minuten 6 Stunden 25 Tage 6 Jahre 0 0 36 Sekunden 58 Minuten 91 Stunden 362 Tage 94 Jahre Tabelle 4.7: Brute-Force: Kleine Firma 4.2.3 Große Firma Für eine große Firma wird davon ausgegangen, dass dieser Ressourcen und Hardware der besten Benchmarks zur Verfügung hat. Dazu sind 16 Prozessoren nötig, die einen Einzelpreis von ca. 400 Euro [9] besitzen. Die Gesamtkosten dafür belaufen sich somit auf ca. 6400 Euro. Dies ergibt folgenden Datensatz: DES crypt() many / one salt 117315K / 23130K MD5 crypt() bcrypt x32 Windows LanMan CPUs & clock rate Threads JtR Version 1953K 56320 33410K 16x X7550, 2.0 GHz, HAT disabled 128 1.7.9-jumbo-6 Tabelle 4.8: Benchmark John the Ripper: Große Firma Brute-Force attack Selbst für ein große Firma ändert sich nichts an der maximalen Passwortlänge. Bei MD5 crypt() und bcrypt x32 wird jedoch eine deutlich verkürzte Dauer im Gegensatz zu Heimnutzer und kleiner Firma erreicht. 20 CHAPTER 4. ZEITABSCHÄTZUNG Zeichen Passwortlänge 1 2 3 4 5 6 7 8 95 95 95 95 95 95 95 95 Windows LanMan 0 0 0 2 Sekunden 4 Minuten 6 Stunden 24 Tage 6 Jahre MD5 crypt() bcrypt x32 0 0 0 42 Sekunden 66 Minuten 105 Stunden 414 Tage 108 Jahre 0 0 15 Sekunden 24 Minuten 38 Stunden 151 Tage 39 Jahre Tabelle 4.9: Brute-Force: Große Firma 4.2.4 Geheimdienst GPU-Angriff Bei einem Geheimdienst wird davon ausgegangen, dass dieser die beste Hardware, zu denen es Benchmarks gibt, zur Verfügung hat und die Hashwerte mittels GPUs erzeugt werden. Dazu sind acht AMD R9 290X nötig. In Tabelle 4.3 ist die Hashfunktion bcrypt x32 nicht aufgelistet. Deshalb werden nur die Werte für Windows LanMan und MD5 crypt() verwendet: • Windows LanMan: 15176M • MD5 crypt(): 93800M Brute-Force attack Im Falle eines derart starken Angriff mittels 16 GPUs würde sogar ein Brute-Force attack bei einer Passwortlänge kleiner neun in annehmbarer Zeit einen Erfolg bringen. Zeichen 95 95 95 95 95 95 95 95 95 95 Passwortlänge 1 2 3 4 5 6 7 8 9 10 MD5 crypt() 0 0 0 0 0 8 Sekunden 12 Minuten 20 Stunden 78 Tage 20 Jahre Windows LanMan 0 0 0 0 1 Sekunde 1 Minute 1 Stunde 5 Tage 1 Jahr Tabelle 4.10: Brute-Force: Geheimdienst GPU-Angriff 4.3 Worst Case Regeln In der folgenden Tabelle soll eine Worst Case Übersicht zu jeder einzelnen Regel in Abhängigkeit vom Wörterbuch gegeben werden. Also wie viele Hashes erzeugt werden müssen, damit das Passwort, sofern es mit der Regel erreichbar ist, auf jeden Fall gefunden wird. Dabei wird die jeweilige Regel nur einmal angewandt, d.h. nicht mit anderen Regeln kombiniert. Denn bei mehrmaliger Anwendung unterschiedlichster Regeln könnte man prinzipiell irgendwann auf jedes Passwort matchen, doch diese Dauer würde sich immer 21 4.3. WORST CASE REGELN mehr dem Brute-Force nähern. In unserem Password Strength Meter wird ein Passwort daher als schwach bezeichnet, sofern man es mittels Anwenden einer Regel matchen kann. Als Basis dazu dient das Standard Wörterbuch mit 3545 Einträgen. Bei einem utopisch großen Wörterbuch, das sich einem Brute-Force attack nähert, kann davon nicht mehr ausgegangen werden. Regel Nothing Lowercase Uppercase Capitalize Invert Capitalize Toggle Case Toggle @ Reverse Rotate Left Rotate Right Duplicate Reflect Duplicate all Duplicate N Append Character Prepend Character Duplicate first N Duplicate last N Truncate left Truncate right Delete @ N Delete range Purge Overwrite @ N Replace Worst Case Anzahl Einträge Anzahl Einträge Anzahl Einträge Anzahl Einträge Anzahl Einträge Anzahl Einträge Anzahl Buchstaben Anzahl Einträge Anzahl Einträge Anzahl Einträge Anzahl Einträge Anzahl Einträge Anzahl Einträge Anzahl Einträge Anzahl Einträge*ASCII-Zeichen Anzahl Einträge*ASCII-Zeichen Anzahl der Summe aus jedem Eintrag*Länge Anzahl der Summe aus jedem Eintrag*Länge Anzahl Einträge Anzahl Einträge Anzahl der Summe aus jedem Eintrag*Länge Anzahl der Summe aus jedem Eintrag*mögliche ranges Anzahl der Summe aus jedem Eintrag*jedes unterschiedliche Zeichen Anzahl der Summe aus jedem Eintrag*jede Stelle*ASCII-Zeichen Anzahl der Summe aus jedem Eintrag*jedes unterschiedliche Zeichen*ASCII-Zeichen Tabelle 4.11: Worst Case Regeln 22 5 E VALUIERUNG Da für die Evaluierung der geschätzten Dauer des Password Strength Meter und der Dauer der Crackprogramme die Hardware, die den Benchmarks zu Grunde liegt, nicht vorhanden ist, wird sich auf die Benchmarks verlassen. In der folgenden Tabelle werden jedoch ein paar Beispiele von Passwörtern, die sowohl mit dem Password Strength Meter dieser Arbeit als auch einem Online Password Strength Meter [13] bewertet werden, verglichen. Vor allem bei Passwörtern, die im Wörterbuch direkt oder die Basis darin vorkommt, ist es zu erwarten, dass dabei durchaus unterschiedliche Ergebnisse hinsichtlich der Passwortstärke dabei zum Vorschein kommen. Als Werte für die Berechnung der Dauer der Hashwertbildung wird beispielsweise MD5 und große Firma herangezogen. Für den Vergleich ist bei unserem Password Strength Meter natürlich das verwendete Wörterbuch entscheidend. Beim Verwenden eines anderen Wörterbuchs können sich die Ergebnisse hingegen ändern. Passwort !Az0" 1357924 dkgnrfhdt1 123456789! Password123 !@#$%ˆ]& Volleyball Elizabeth123! ecLipse 4ugH391! Michael1! thunderBird Pa!!word Online PSM gut sehr schwach schwach stark stark stark schwach sehr stark schwach sehr stark stark schwach stark Eigenes PSM sehr schwach schwach >100 Jahre schwach 12 Minuten schwach schwach 20 Stunden schwach 53 Jahre 8 Sekunden schwach schwach Begründung Brute-Force bis 5 Zeichen Weniger als 8 Zeichen und nur Zahlen Komplett mittels Brute-Force Standard Regel Append Character $! Basis Password gefunden, Brute-Force von 3 Zeichen 1:1 im Wörterbuch Standard Regel Capitalize Basis Elizabeth gefunden, Brute-Force von 4 Zeichen Standard Regel Toggle @2 Komplett mittels Brute-Force Basis Michael gefunden, Brute-Force von 2 Zeichen Standard Regel Toggle @7 Standard Regel Replace ss! Tabelle 5.1: Evaluierung: Online PSM vs. eigenes PSM 23 FAZIT 6 Mit dieser Arbeit wurde ein Password Strength Meter entwickelt, das die gemeinsamen Regeln zweier bekannter Crackprogramme umsetzt. Dadurch kann die Passwortstärke nun auch dahingehend bewertet werden, wie sicher man gegen mögliche Angriffe durch diese Programme ist. Für die Zeitabschätzung konnten jedoch nur Benchmarks zu aktueller Hardware und beschränkt vielen unterschiedlichen Hashfunktionen verwendet werden. Im Laufe der Zeit wird sich die Hardware höchstwahrscheinlich erneut verbessern, weshalb die Zeitabschätzungen zu den modellierten Angreifern dann nur noch bedingt der Realität entsprechen werden. Außerdem können neue bzw. extrem langsame Hashfunktionen hinzukommen, was die Anzahl an Hashwertbildungen enorm senkt und die Sicherheit gegenüber solcher Angriffe erhöht. Generell kann man jedoch davon ausgehen, dass Passwörter, die durch einfaches Anwenden der Standard Regeln auf das Wörterbuch, auch in Zukunft in annehmbarer Zeit gecracked werden. Voraussetzung dafür ist natürlich, dass das Wörterbuch nicht utopisch viele Einträge enthält. Die Evaluierung macht deutlich, dass Passwörter ohne Sinn oder Struktur schwerer zu cracken sind. Die Unterschiede in der Bewertung der Passwortstärke gingen hauptsächlich bei Passwörtern, die eins-zu-eins im Wörterbuch oder eine verhältnismäßig große Basis im Wörterbuch gefunden wurde, auseinander. In [6] werden ein paar Tipps aufgeführt, die bei der Wahl zu einem sicheren Passwort helfen sollen. Da Passwörter mit Sinn oder Struktur leichter zu merken sind, werden solche Passwörter auf Grund ihrer Praktikabilität jedoch gern verwendet. Merksätze unterstützen dabei, sich leichter auf den ersten Blick sinnfrei erscheinende Passwörter zu merken. Dazu benötigt man einen beliebigen Beispielsatz wie Ich kann mir dieses Passwort unter keinen Umständen nicht einmal merken!. Falls ein Wort etwas mit einer Zahl zu tun hat, wird diese auch als Zahl verwendet. Ansonsten wird von jedem Wort der Anfangsbuchstabe und das Satzzeichen am Ende benutzt und zu einem Passwort zusammengesetzt. In diesem Beispiel würde das Passwort IkmdPukUn1m! lauten. Es muss dann im Nachhinein natürlich verglichen werden, ob dieses Passwort wirklich keinen Sinn ergibt und auch genügend Zeichen enthält. Außerdem ist dazu zu raten, für unterschiedliche Dienste unterschiedliche Zugangsdaten zu verwenden. Angenommen ein Angreifer konnte beispielsweise einen E-Mail Account erfolgreich hacken und der Benutzer verwendet die identischen Zugangsdaten zu seinem Paypal Account. So besitzt der Angreifer auch 24 CHAPTER 6. FAZIT ebenfalls Zugriff auf den Paypal Account, was zu einem großen finanziellen Schaden führen kann. Daher ist die Sicherheit eines Passworts von großer Bedeutung, um sich präventiv gegen Angreifer zu schützen. 25 Literaturverzeichnis [1] Claude Castelluccia, Markus Dürmuth, and Daniele Perito. Adaptive password-strength meters from markov models. In NDSS, 2012. [2] M.Sc. Michael Gruhn Dr. Zinaida Benenson Daniel Günzel, Prof. Dr.-Ing. Felix Freiling. Analysis of login credentials in keylogger dropzones. 2014. [3] Matteo Dell’Amico, Pietro Michiardi, and Yves Roudier. Password strength: An empirical analysis. In INFOCOM, 2010 Proceedings IEEE, pages 1–9. IEEE, 2010. [4] Martin MA Devillers. Analyzing password strength. Radboud University Nijmegen, Tech. Rep, 2010. [5] Dinei Florencio and Cormac Herley. A large-scale study of web password habits. In Proceedings of the 16th international conference on World Wide Web, pages 657–666. ACM, 2007. [6] Surfer haben Rechte. Website. URL http://www.surfer-haben-rechte.de/content/ tipps-und-tricks-fuer-sichere-passwoerter. Zuletzt besucht: 25.11.2014. [7] Hashcat. Website, . URL http://hashcat.net/wiki/doku.php?id=start. Zuletzt besucht: 25.11.2014. [8] Hashcat. Website, . URL http://hashcat.net/oclhashcat/. Zuletzt besucht: 25.11.2014. [9] Idealo. Website, . URL http://www.idealo.de/preisvergleich/OffersOfProduct/ 2962374_-xeon-x7550-intel.html. Zuletzt besucht: 25.11.2014. [10] Idealo. Website, . URL http://www.idealo.de/preisvergleich/OffersOfProduct/ 2356374_-core-i7-2600k-intel.html. Zuletzt besucht: 25.11.2014. [11] Idealo. Website, . URL http://www.idealo.de/preisvergleich/OffersOfProduct/ 3000732_-xeon-x7560-intel.html. Zuletzt besucht: 25.11.2014. [12] Patrick Gage Kelley, Saranga Komanduri, Michelle L Mazurek, Richard Shay, Timothy Vidas, Lujo Bauer, Nicolas Christin, Lorrie Faith Cranor, and Julio Lopez. Guess again (and again and again): Measuring password strength by simulating password-cracking algorithms. In Security and Privacy (SP), 2012 IEEE Symposium on, pages 523–537. IEEE, 2012. [13] Online Password Strength Meter. Website. URL http://www.passwordmeter.com/. Zuletzt besucht: 25.11.2014. [14] OpenWall. Website, . URL http://www.openwall.com/john/doc/. Zuletzt besucht: 25.11.2014. [15] OpenWall. Website, . URL http://openwall.info/wiki/john/benchmarks. Zuletzt besucht: 25.11.2014. [16] OpenWall. Website, . URL http://openwall.info/wiki/john/essays/ fast-and-slow-hashes. Zuletzt besucht: 25.11.2014. [17] OpenWall. Website, . URL http://www.openwall.com/john/doc/MODES.shtml. Zuletzt besucht: 25.11.2014. [18] OpenWall. Website, . URL http://download.openwall.net/pub/wordlists/ passwords/. Zuletzt besucht: 25.11.2014. [19] Benny Pinkas and Tomas Sander. Securing passwords against dictionary attacks. In Proceedings of the 9th ACM conference on Computer and communications security, pages 161–170. ACM, 2002. 26 Literaturverzeichnis [20] Robert W Proctor, Mei-Ching Lien, Kim-Phuong L Vu, E Eugene Schultz, and Gavriel Salvendy. Improving computer security for authentication of users: Influence of proactive password restrictions. Behavior Research Methods, Instruments, & Computers, 34(2):163–169, 2002. [21] Python. Website. 25.11.2014. URL https://docs.python.org/2/library/. Zuletzt besucht: [22] Riebartsch. Website, 2013. URL http://www.macwelt.de/ratgeber/ Bruteforce-Angriff-auf-die-Daten-7847259.html. Zuletzt besucht: 25.11.2014. [23] Wikipedia. Website. URL http://de.wikipedia.org/wiki/American_Standard_ Code_for_Information_Interchange. Zuletzt besucht: 25.11.2014. 27