Angriff auf das Wörterbuch — Umfassende Operation

Referenzdokument des ProjektsTime2Crack
Empfänger: Entwickler, Sicherheitswissenschaftler, Fortgeschrittene

Inhalt

  • Überblick
  • Historischer und akademischer Hintergrund
  • Konzeptionelle Grundlagen: warum Wörterbücher funktionieren
  • Architektur eines modernen Wörterbuch-Angriffs
  • Die Korpus der echten Passwörter
  • K-Anonymität HIBP-Verifikation: ein Echtzeit-Angriff
  • Sprachwörterlisten vonTime2Crack
  • Wörterbuch Detection inTime2Crack: isDictWord()
  • De-leetification: wie der Angreifer Substitutionen dekodiert
  • Berechnung der Rißzeit: addDictionaryAttacks()
  • Hohe Treuekalibrierung: applyHighFidelityCalibration()
  • Wahrscheinlichkeit der Anwendbarkeit und Vertrauensbewertung
  • Bloom filter RockYou: lokale Erkennung von weit verbreiteten Passwörtern
  • Vergleich mit abgeleiteten Angriffen
  • Einschränkungen des Angriffswörterbuchs
  • Effektive Verteidigung
  • Referenzen

  • 1. Überblick

    Der Angriff auf das Wörterbuch ist die älteste Passwort-Cracking-Methode, die einfachste konzeptionell und statistisch am effektivsten auf die Mehrheit der realen menschlichen Passwörter. Sein Prinzip ist, in absteigender Reihenfolge der Wahrscheinlichkeit eine vorkompilierte Liste der Kandidaten zu testen — das "diktionäre" — anstatt alle möglichen Kombinationen, wie die Rohkraft tut, vollständig aufzuzählen.

    Warum es schrecklich effektiv ist Die Dekaden von Datenlecks zeigen, dass die tatsächliche Verteilung von Passwörtern extrem konzentriert ist: die häufigsten 1.000 Passwörter repräsentieren etwa 5 bis 10% aller Online-Konten. Die häufigsten 1 Million Cover 40 bis 60%. Ein gut gebauter Wörterbuch-Angriff wird diese Kandidaten in Millisekunden bis Sekunden testen – wo die Bruttokraft Millionen von Jahren dauern würde.

    InTime2CrackDer Wörterbuchangriff modelliert zwei verschiedene, aber komplementäre Mechanismen:

  • Überprüfung der HIBP (Have I Been Pwned): Konfrontation des Passworts zu den ~14 Milliarden einzigartigen Anmeldeinformationen aus historischen Datenlecks. Wenn das Passwort da ist, würde ein Angreifer es in einem Bruchteil einer Sekunde entdecken.
  • Sprach-Wörterbuch-Erkennung Ein gemeinsames Sprachwort — "sun" oder "sunshine" — ist verletzlich, auch wenn es nicht in HIBP ist.
  • Diese beiden Erkennungen sind unabhängig und komplementär: HiBP deckt die genauen Kompromiss-Anmeldeinformationen ab, die Wordlist deckt die gemeinsamen Wörter noch nicht aus.


    2. Historischer und akademischer Hintergrund

    2.1 Ursprung

    Die ersten Unix-Systeme haben Passwörter in der Sprache in der Sprache gespeichert /etc/passwd, so dass jedes Wörterbuch-Angriff trivial, sobald die Datei zugänglich war.

    Chronologie der Meilensteine : JahrVeranstaltung -------------- 1979Morris & Thompson: Erster akademischer Artikel über Unix-Passwort-Sicherheit. Siehe, 1/3 der Passwörter wählen gemeinsame englische Wörter 1988Morris Worm: propagiert teilweise über ein 432 Wort Wörterbuch + Host /usr/share/dict/words 1993Crack 5.0 (Alec Muffett): Erstes öffentliches Wörterbuch Angriffswerkzeug auf Unix, beinhaltet Mutationsregeln 2000John the Ripper: popularisiert Wordlists kombiniert mit Hashcat-Regeln (wordlist + reglement mode) 2009RockYou Leck: 14,3 Millionen klare Passwörter zeigen die reale Verteilung der menschlichen Entscheidungen 2012Habe ich Pwned (Troy Hunt): erster öffentlicher Auditdienst für kompromittierte Anmeldeinformationen 2013Adobe Break: 153 Millionen Konten — Top-Passwörter werden durch Frequenzanalyse auch auf ungelösten Hashs identifizierbar 2016Hashcat Open Source v3.0: massive Optimierung von Wordlist-Angriffen auf GPU (MD5: 2 TH/s auf 8 GPU-Cluster) 2019Sammlung #1–5: 2,7 Milliarden Login/Passwort-Paare zusammengestellt, öffentlich verteilt 2024HIBP v8: ~14 Milliarden einzigartige Passwörter indexiert

    2.2 Gründung von Lecks

    Einige Lecks haben die Landschaft des Angriffs durch Wörterbuch verändert, indem sie die tatsächliche Verteilung der menschlichen Passwörter zeigen:

    RockYou (2009) Ein Entwickler hatte 14,3 Millionen Passwörter in einfacher Sprache gespeichert.
  • Die ersten 10 Passwörter bedeckten ~5% der Konten
  • Erste 1.000: ~20% der Konten
  • Die Verteilung folgt einem Machtgesetz — die Bestätigung, dass die Menschen "das gleiche denken"
  • LinkedIn (2012) — 6,5 Millionen nicht gesaltete SHA-1. Adobe (2013) — 153 Millionen Konten. Habe ich Pwned (2013–präsent) - Progressive Aggregation von öffentlichen Lecks, so dass Troy Hunt eine weltweit verwendete Referenzbasis schafft.

    2.3 Referenz Benchmarks für Wörterbuch-Angriff

    Eine Wortliste von 200.000 Einträgen, die mit der Geschwindigkeit eines RTX 4090 getestet wurden:

    AlgorithmenGeschwindigkeitZeit für 200k Kandidaten --------------------------------------- MD5168,9 GH/s~1,2 nanosecond ~ SHA-150.86 GH/s~3,9 Nanosekunden SHA-25622.68 GH/s~8.8 Nanosekunden NT2 ARBEITSLOSIGKEIT288.5 GH/s~0,7 Nanosekunde bcrypt (Kosten 5)184 kH/s~1.09 second Argon2id~67 H/s~50 minutes

    Der Wörterbuch-Angriff ist daher für MD5, SHA-1 und NTLM fast augenblicklich – und bleibt auch für Bcrypt auf kleinen Listen sehr schnell.


    3. Konzeptionelle Grundlagen: warum Wörterbücher funktionieren

    3.1 Das Machtrecht der menschlichen Passwörter

    Alle empirischen Studien konvergieren sich zur gleichen Beobachtung: die Verteilung menschlicher Passwörter ist nicht gleichförmig — es folgt einer Gesetz der Macht (Zipf). Einige Passwörter konzentrieren sich auf einen unverhältnismäßigen Teil der Wahlen.

    Formal : wenn alle Passwörter durch abnehmende Frequenz klassifiziert werden, die Frequenz des Rang-Passworts R ist proportional zu (-α) mit α 1,5 bis 2 Laut dem Korpus.

    Direkte Folge: 10 häufigste Passwörter Ein Angreifer, der nur 10 Kandidaten testet, hat bereits in 20 Jahren die Chance, erfolgreich zu sein – statistisch gesehen ist es riesig für die Menge an Lärm erzeugt.

    3.2 Kognitive Bias in der Passwort-Erstellung

    Menschen wählen nicht zufällig aus. Sie verwenden systematisch Heuristiken, die ihre Passwörter vorhersehbar machen:

  • Erinnerungen : Die leicht zu erinnernden Worte (gemeinsame Namen, Vornamen, Begriffe der Volkskultur) werden überrepräsentiert
  • Verfügbarkeit Bias Das Passwort spiegelt die unmittelbare Umgebung wider (Haustiername, Sportteam, Seriencharakter)
  • Vorhersehbare Substitutionsbias : "e" → "3", "a" → "@", "o" → "0" - der Benutzer glaubt, das Passwort stark zu sein, aber diese Substitutionen sind genau die ersten, die der Angreifer versucht zu tun
  • Vollständige Bias : Zugabe einer Anzahl oder eines Symbols am Ende eines Wortes (Passwort 1, Sonnenschein!)
  • Kulturelle Vorurteile Gemeinsame Passwörter sind mit der Sprache und Kultur des Benutzers verbunden ("Soleil123" in Frankreich, "Sommer123" in Deutschland)
  • 3.3 Das Konzept des "Passworts bereits in den Listen"

    Ein Passwort kann aus zwei verschiedenen Gründen in einer Angriffsliste sein:

    Grund 1 — Er ist in HIBP Der Angreifer muss sich nicht erraten – er testet die bekannten Anmeldeinformationen von einem nach dem anderen, um die Frequenz zu bestimmen. Grund 2 — Es ist in einer sprachlichen Wortliste Das Passwort ist ein gewöhnliches Wort des üblichen Vokabulars. Auch wenn es nie geflohen ist, ist es in allen angreifenden Wortlisten, weil es ein offensichtlicher Kandidat ist. "Paillon" kann nicht in HiBP sein, aber es ist in der französischen Wortliste eines ernsthaften Cracking-Tools.

    Diese beiden Fälle entsprechen den Angriffen anderer Natur, mit unterschiedlichen Geschwindigkeiten — und das ist, wasTime2CrackModelle genau.


    4. Architektur eines modernen Wörterbuch-Angriffs

    4.1 Allgemeine Pipeline

    Ein moderner Wörterbuchangriff findet in mehreren Phasen statt:

    Phase 1 : Constitution de la wordlist
        ├── Mots de passe fuités (HIBP, RockYou, Collections)
        ├── Wordlists linguistiques (dictionnaires, prénoms, lieux)
        ├── Wordlists thématiques (sport, pop culture, tech, religion)
        └── Wordlists contextuelles (domaine de l'entreprise cible, noms d'employés)
    

    Phase 2: Wordlist Vorverarbeitung - Sortieren nach Häufigkeit (meist wahrscheinlich zuerst) - Deduplizierung (nicht zweimal der gleiche Kandidat) - - Längenfiltration (Ziellänge + ±2) - Standardisierung (kleiner, Unicode NFC)

    Phase 3: Berechnung der Kandidat Hashs Für jeden Kandidaten w in der Wortliste: Ψ hashBewerber = HashAlgo(w) WerbeartikelBewerber = hashZiel : FINDED - Geschwindigkeit: 168 GH/s für MD5 auf RTX 4090

    Phase 4: Analyse der Ergebnisse Bericht über geknackte Passwörter, Berichterstattungsstatistik

    4.2 Hardwareoptimierungen

    Moderne Wörterbuch-Angriffe sind massiv parallel zu GPU:

  • Hashcat (Referenz-Tool): nutzt die CUDA-Kerne der GPU, um Milliarden von Hash-Simulationen zu parallelisieren
  • Vector Pipeline : Auf einem RTX 4090 berechnet eine einzige SIMD-Anweisung 8 bis 16 MD5 Hashs parallel
  • GPU-Cache : die Wortliste wird in VRAM geladen, um die Speicherlatenz zu minimieren
  • Batch : Die Kandidaten werden in Millionen Chargen an die GPU geschickt, um den Fluss zu maximieren
  • Für eine Wortliste von 14 Milliarden Einträgen (HIBP-Größe) auf 12× RTX 4090:

  • MD5: 14e9 / (168.9e9 × 12) 6.9 Sekunden
  • bcrypt kostet 5 : 14e9 / (184000 × 12) 6,337 Jahre
  • Dieser Unterschied von ~9 Größenordnungen zwischen MD5 und bcrypt erklärt, warum die Wahl des Hash-Algorithmus kritisch ist.

    4.3 Prüfauftrag der Kandidaten

    Die Wortliste wird nicht in alphabetischer Reihenfolge geprüft — sie ist sortiert nach abnehmender Wahrscheinlichkeit :

  • Die häufigsten Escape Passwörter (RockYou top 100)
  • Gemeinsame Multi-Fault-Passwörter (HIBP-Prioritätsliste)
  • Gemeinsame Wörter der Zielsprache
  • Die richtigen Namen (erste Namen, Städte, Prominente)
  • Zielbezogene thematische Begriffe
  • Variationen und Konjugationen
  • Diese Art sorgt dafür, dass, wenn das Passwort "low" ist, es in den ersten Millisekunden gefunden wird - was auch immer die Hash-Geschwindigkeit.


    5. Die Korpus der echten Passwörter

    5.1 Habe ich Pwned (HIBP)

    Größe ~14 Milliarden einzigartige Passwörter (2024) Quelle : Aggregation von öffentlichen Lecks seit 2013 Format : SHA-1 sortiert nach Erscheinungsrhythmus Öffentlicher Zugang : k-Anonymität API, volle Hash-Download für Verteidiger

    HiBP ist die globale Referenz, weil:

  • Es umfasst fast alle großen öffentlichen Lecks
  • Die Hashs werden nach Häufigkeit sortiert — die häufigsten Passwörter werden zuerst getestet
  • Es wird aktiv gepflegt (neue Lecks kontinuierlich hinzugefügt)
  • Ein Angreifer mit dem kompletten HIBP-Dump kann zunächst die ~14 Milliarden Kandidaten in absteigender Reihenfolge der Frequenz testen. Für nicht gesaltete Algorithmen (MD5, SHA-1), umfasst diese Liste in der Größenordnung von 50-70% aller realen Online-Passwörter.

    5.2 RockYou (2009) — Gründung corpus

    Größe : 14,3 Millionen klare Passwörter Hauptmerkmale : RangPasswort vergessen?Umstände% des Korpus ------------------------------------- 1123456290 7312,03% 2.ANHANG79 0780,55 % 312345678976 7900,54% ANHANGPasswort vergessen?59 4620,42 % 5.Ich liebe dichANHANG0,35 % Top 10—~650,000~4.5% ~ Top 100—~1 200 000~8.4% ~ 1 000—~2 500 000 ~~17.5% ~ 10.000—~4 500 000~31.5% ~ Bildung Testen Sie nur 10.000 Kandidaten (100 μs MD5 Geschwindigkeit) Kompromisse ~31% einer Datenbank von MD5-geschützten Konten.

    5.3 Sammlungen von spezialisierten Wortlisten

    Sekundarbereich (Daniel Miessler): Open-Source-Sammlung von ~4 GB-Wortlisten
  • Passwörter (RockYou, Top Passwörter verschiedene Lecks)
  • Aktuelle Anwendungen
  • Passwörter nach Sprache sortiert
  • Technische Begriffe, Produktnamen, Prominente
  • Kaonashi : 1,3 Milliarden Einträge Wordlist erstellt seit öffentlichen Lecks Crackstation : 1,5 Milliarden Einträge inklusive Wörter aus allen Wikipedia Wörterbüchern in mehreren Sprachen Schwachstelle : Aggregation von ~8 Milliarden einzelnen realen Passworteinträgen

    Diese Korpusen sind öffentlich herunterladbar — ihre Existenz ist eine etablierte Tatsache der Offensive Sicherheit.


    6. K-Anonymität Verification HIBP: Ein Echtzeit-Angriff

    6.1 Protokoll k-Anonymität

    Time2Crackintegriert einen Echtzeit-HIBP-Check, der genau das reproduziert, was ein Angreifer mit der HIBP-Datenbank tun würde – aber niemals das Passwort in der einfachen Sprache oder in der vollen Hash übertragen würde.

    Das k-Anonymitätsprotokoll funktioniert wie folgt:

    1. Calculer SHA-1(password)      → par exemple "CBFDAC6008F9CAB4083784CBD1874F76618D2A97"
    
  • Senden Sie nur die ersten 5 Zeichen an die HIBP API: "CBFDA"
  • Die API liefert ALLE SHA-1 Suffixes ab "CBFDA" (etwa 400-600 Hashes)
  • Suchen Sie lokal, ob der Rest der Hash ("C6008F9CAB4083784CBD1874F76618D2A97") in der Liste
  • Wenn gefunden: Passwort wurde beeinträchtigt (HIBP gibt auch die Anzahl der Lecks zurück)
  • Gewährleistung der Vertraulichkeit Der HIBP-Server sieht nie den kompletten Hash (so kann er das Passwort nicht identifizieren), geschweige denn das klare Passwort. Die endgültige Berechnung erfolgt lokal. Was das für ein Angriff bedeutet : wenn HIBP eine Übereinstimmung mit einer hohen Anzahl zurückgibt (z.B. 9,547,236 Auftritte für "123456"), bedeutet dies, dass ein Angreifer mit der HIBP-Datenbank, der dieses Anmeldeinformationen testet, ihn in einer sehr hohen Position auf seiner nach Häufigkeit sortierten Liste in einem Bruchteil von Nanosekunden finden würde.

    6.2 Implementierung inTime2Crack(app.js)

    Die HIBP-Überprüfung ist asynchron und nicht blockierend. Das Passwort wird sofort nach lokalen Methoden analysiert und die HIBP-Überprüfung beendet das Ergebnis:

    // Pseudo-code simplifié
    async function checkHIBP(password) {
      const sha1 = await sha1Hash(password);
      const prefix = sha1.substring(0, 5);   // 5 premiers chars
      const suffix = sha1.substring(5);       // reste du hash
    

    const response = Warteruf( https://api.pwnedpasswords.com/range/${prefix} ; const lines = Antwort erwarten.text();

    für (const line of lines.split('\n') { const [hashSuffix, count] = line.split(':'); wenn (hashSuffix.toLowerCase() = suffix.toLowerCase()) zurück parseInt(count); // Anzahl der Lecks } } zurück 0; // nicht gefunden }

    HIBP Leistungsdaten :
  • Typische API-Latenz: 50–200 ms (Netzwerk)
  • Volumen der Suffixes zurückgegeben: ~400–600 pro Anfrage
  • Falsch positiv: 0 (SHA-1 ist deterministisch)
  • Falsch negativ: 0 (wenn in HiBP, immer zurück)
  • 6.3 Interpretation des Zählers HIBP

    Die von HiBP zurückgegebene Anzahl gibt an, wie oft dieses genaue Passwort in indexierten Lecks erschien:

    AnzahlAuslegungCrackzeit (MD5, 12× RTX 4090) ------------------------------ 1 000Top 100 Welt< 1 Nanosekunden 10.000–1,000.000Sehr häufig< 10 Nanosekunden 1 000 bis 10 000Gemeinsame< 100 Nanosekunden 100-1000Ungewöhnlich, aber bekannt< 1 Mikrosekunden 1–100Selten, aber kompromittiert< 10 Mikrosekunden

    Auch eine Anzahl von 1 (das Passwort erschien nur einmal in einem Leck) zeigt eine Schwachstelle: Wenn ein Angreifer dieses Konto gezielt anspricht und die Liste der Anmeldeinformationen des betreffenden Lecks hat, wird er es finden.


    7. SprachwörterlistenTime2Crack

    7.1 Warum Sprachwortlisten zusätzlich zu HIBP

    HiBP deckt die genauen Kompromissberechtigungen ab – aber nicht die gemeinsamen Wörter laufen noch nie weg. Ein Francophone-Nutzer, der "ephemeral" als Passwort wählt, kann nicht in HiBP sein (das Wort ist unwahrscheinlich in anglophone Anmeldeinformationen), aber es ist in der französischen Wortliste eines Angreifers, der ein Francophonsystem anstrebt.

    Sprachwörterlisten vonTime2Crackdiese Lücke abdecken:

    SpracheQuelleGeschätzte Größe ------------------------ EnglischSecLists Wikipedia DE~200.000 Einträge Französisch (fr)SecLists Wikipedia DE~150.000 Einträge SpanischSecLists Wikipedia ES~150.000 Einträge Portugiesisch (pt)SecLists Wikipedia PT~120.000 Einträge DeutschSecLists Wikipedia DE~180.000 Einträge Türkisch (tr)SecLists Wikipedia TR~100.000 Einträge Italienisch (it)kkrypt0nn~100.000 Einträge Polnisch (pl)kkrypt0nn~80 000 Einträge Niederlande (nl)kkrypt0nn~80 000 Einträge Anwendung der Filter Nur Wörter von ≥ 4 Zeichen werden beibehalten (die 1–3 Zeichen sind zu kurz, um ein realistisches Passwort zu sein, und ihre Aufnahme würde die Liste ohne Mehrwert aufblasen).

    7.2 Lazy Belastung

    Wordlisten sind nicht im Code enthalten — sie werden auf Anfrage beim Wechsel der Sprache geladen, um den Netzbudget zu erfüllen:

    // app.js - loadDictionary()
    async function loadDictionary(lang) {
      if (DICTLang &amp; DICTWORDS) return;  // Déjà chargé
      if (DICT(LACHT)
    DIKTPENDINGLANG = lang; // Wartedatei
    zurück;
    }
    DIKTLOADING = true;
    

    const res = Warteruf(data/wordlists/${lang}.txt; const text = warten res.text();

    // Konvertieren in Set<string> für O(1) Lookup DIKTWORDS = neues Set( Text.split("\n") .map(w => w.normalize("NFC").trim().toLowerCase()) .filter(w = >= >= 4) ; DIKTLANG = Lang; DIKTLOADING = falsch; }

    Warum? Set ? Struktur Set JavaScript garantiert O(1) Lookups – unabhängig von der Wörterbuchgröße (50.000 oder 200.000 Einträge), Verifikation DICTWORDS.has(word) nimmt die gleiche konstante Zeit. Array würde O(n) pro Lookup erfordern, d.h. bis zu 200.000 Vergleiche pro Check.

    Warteschlange laden

    Die DICTÄNDERUNGLANG vermeidet Rassebedingungen bei schnellen Sprachänderungen:

    Scénario : l'utilisateur switche rapidement EN → FR → DE
    ├── EN demandé : DICTLOADING = falsch → Beginn des Ficks EN
    FR beantragt während des Ficks EN : DICTLOADING = true → DICTÄNDERUNGLANG = "fr"
    ├── DE demandé pendant fetch EN : DICTLOADING = true → DICTPENDINGLANG = "de" (crash "fr")
    - Federende: DICTLANG = "en", puis lance loadDictionary("de")
    └── Résultat : seule la dernière langue demandée est chargée

    Dieses Verhalten ist absichtlich: Die zuletzt geforderte Sprache wird geladen, nicht alle Zwischensprachen.


    8. Wörterbuch Erkennung inTime2Crack: isDictWord()

    8.1. Erkennungsoperation

    Die Funktion isDictWord(pw) bestimmt, ob ein Passwort aus einem aktuellen Wörterbuchwort abgeleitet ist oder wird:

    // app.js - ligne 2181
    function isDictWord(pw) {
      if (!DICT(WORDS) Rückgabe falsch;
    

    // Standardisierung: NFC + Unterkoffer const l = pw.normalize("NFC").toLowerCase();

    // Direkte Verifikation wenn (DICT)

    WORDS.has(l) || DICTWORDS.has(deLeet(pw))

    // Morphologische Variationen const deleetWord = deLeet(pw) const Variationen = getMorphVariations(deleetWord);

    für (Konst. Variationen) { wenn (DICT)

    WORDS.has(variation)) return true; }

    Rückgabe falsch; }

    3 Schichterfassungslinie :
  • Direkte Korrespondenz : Ist das Standard-Passwort im Wörterbuch, wie es steht?
  • "sun" → direkter Treffer
  • "SOLEIL" → Standard in "sun" → hit
  • Nachbereitung Korrespondenz : Enthält das Passwort standardmäßige Substitutionen?
  • "s0l3il" → deLeet → "sun" → hit
  • "p@sw0rd" → deLeet → "Passwort" → hit
  • Morphologische Variationen : Ist das Passwort eine bekannte morphologische Variante?
  • "sun" → Plural Variation von "sun" → hit
  • "passwords" → Variation von "password" → hit
  • 8.2 Unicode Standardisierung (NFC)

    Standardisierung normalize("NFC") sorgt dafür, dass akzentuierte Zeichen konsequent behandelt werden:

  • "e" kann in Unicode als Einzelpunktcode (U+00E9) oder als "e" + Kombinationsakzent (U+0065 + U+0301) dargestellt werden
  • Ohne Standardisierung würden "Kaffee" und "Kaffee" (unterschiedliche Kodierungen) nicht übereinstimmen.
  • Diese Standardisierung wird sowohl bei der Erstellung des Wörterbuchs als auch bei der Überprüfung angewendet, um eine korrekte Korrespondenz für Akzentsprachen (FR, ES, DE, PT, etc.) zu gewährleisten.

    8.3 Auswirkungen auf die Schwachstelle erkannt

    Wann isDictWord() Zurück truemehrere Angriffe gelten:

  • Wörterbuch-Angriff Selbst: Vertrauen erzielt 0,85 (vs 0 wenn abwesend)
  • Hybrid-Angriff : hybridVuln = true → 1000 Mutationen auf Wörterbuchbasis getestet
  • AngriffPCFG : erhöhtes Vertrauensergebnis (lexische Basis erkannt)
  • morphologischer Angriff : hohe Priorität bei nachgewiesener morphologischer Variante

  • 9. De-leetification: wie der Angreifer Substitutionen dekodiert

    9.1 Leetspeak und seine Einschränkungen als Schutz

    Der Leetspeak (oder "1337 Sprache") ist eine Praxis, Briefe durch visuell ähnliche Zahlen oder Symbole zu ersetzen: a→@, e→3, i→1 oder !, o→0, s→$. Benutzer verwenden es, um "strengthen" gemeinsame Wörter.

    Beispiel : "Passwort" → "p@$w0rd"

    Die Realität: diese Substitutionen sind die ersten geltenden Regeln Sie stellen keine echte Verteidigung gegen einen kompetenten Angreifer dar.

    9.2 Implementierung deLeet() inTime2Crack

    // app.js - ligne 3622
    const LEETBASE =
    a: ["@", "4"],
    e: ["3"],
    o: ["0"]
    s: ["$", "5"],
    t: ["+", "7"],
    h: ["#"]
    g: ["9"],
    };
    

    Funktion vonLeetWith(pw, oneMap) { r = pw.normalize("NFC").toLowerCase(); für (const [ch, reps] of Object.entries(LEET)

    BASE)) for (const c of reps) r = r.split(c).join(ch); // Appliquer la résolution ambiguë (i ou l) en dernier for (const [ch, reps] of Object.entries(oneMap)) for (const c of reps) r = r.split(c).join(ch); return r; }

    Funktion vonLeet(pw) { // Mehrdeutigkeit: "1" kann "i" oder "l" sein const withI = deLeetWith(pw, { i: "1!", l: "" }); const mitL = deLeetWith(pw, { l: "1", i: "!" });

    // Wenn das Wörterbuch geladen wird, bevorzugen Sie die Variante, die passt wenn (DICT)WORDS { wenn (DICT)WORDS.has(withL) mit L zurück; wenn (DICT)WORDS.has(mitI) mit I zurück; }

    // Andernfalls: bevorzugen Sie die Variante mit den am wenigsten verbleibenden Zahlen const digsI = (mit I.match(/\d/g) const digsL = (mit L.match(/\d/g) Zahl L < = Zahl I? mitL: mitI; }

    9.3 Mehrdeutigkeitsmanagement "1" → "i" oder "l"

    Die Substitution "1" ist mehrdeutig: "1" kann "i" (wie in "1nfo" → "info") oder "l" (wie in "p1ayer" → "player") darstellen.Time2Cracklöst diese Mehrdeutigkeit durch:

  • Prüfung beider Varianten ("mitI" und "mitL")
  • Wenn das Wörterbuch geladen wird, bevorzuge die Variante, die ein Wörterbuch-Spiel gibt
  • Ohne ein Wörterbuch bevorzugt die Variante, die die wenigsten Restzahlen lässt (Annahme: vollständige Entleerung ist wahrscheinlicher)
  • Beispiel :
  • "b1ue" → mitI = "biue" (nicht in dict), mitL = "blau" (in dict) → gibt "blau"
  • "f1le" → mitI = "file" (in dict), mitL = "flle" (nicht in dict) → gibt "file"
  • 9.4 Nicht erfasste Substitutionen (absichtlich)

    Time2Crackdie seltenen oder mehrdeutigen Substitutionen nicht über LEETBASE-Muster hinaus. Dies ist eine Design-Auswahl: zu viele Fälle würden falsche Positive erhöhen (die Erkennung eines Passworts als "aktuelles Wort", während es nicht ist).


    10. Berechnung der Rißzeit: addDictionaryAttacks()

    Rechenlogik

    // app.js - ligne 3848
    function addDictionaryAttacks(rows, common, weak, dictWord) {
      for (const a of ALGOS) {
        let sec;
        if (weak)     sec = 100 / a.rate;     // Top ~100 entrées
        else if (common) sec = 10000 / a.rate; // HIBP priority list ~10k
        else if (dictWord) sec = 200000 / a.rate; // Scan wordlist complète ~200k mots
        else sec = null;                        // Non applicable
    

    konstnote = schwach ? t("nWeakPassword") : häufig ? t("nInLeaks") : dictWord ? t(nDictHit) : t(nAbsentLeaks);

    Zeilen.push({ atk: t("aDict"), hash: a.name, spleen: a.rate, sec, note, cat: "dict" }); } }

    10.2 Drei Ebenen der Sicherheitslücke

    Ebene 1 — Ultra-weak (weak = true) : ~100 / Milz Das Passwort befindet sich in der Top 100 der Welt ("Passwort", "123456", "qwerty"...). Ein Angreifer, der diese 100 Prioritätskandidaten testet, findet es im ersten Pass. 0,6 Nanosekunden. Ebene 2 — Gemeinsam (common = true) Das Passwort befindet sich in der Referenz-HIBP-Liste der ~10.000 häufigsten Passwörter. Diese Kandidaten werden in den ersten Mikrosekunden getestet. Für MD5: 10.000 / 168,9e9 59 Nanosekunden. Ebene 3 — DictWord (dictWord = true) : ~200.000 / Milz Das Passwort ist ein Wort aus dem aktuellen Sprachwörterbuch (local wordlist ~50k–200k Einträge). Ein kompletter Scan der Wortliste ist fast sofort für schnelle Algorithmen. Für MD5: 200 000 / 168,9e9 1.18 Mikrosekunde. Ebene 4 — Nicht anwendbar (sec = null) : Das Passwort ist weder ultra-weak noch allgemein, noch ein Wort aus dem aktuellen Wörterbuch. Der Wörterbuchangriff allein ist nicht anwendbar — andere Angriffe (Bruchkraft,Markov,PCFG) die Hauptbedrohung werden.

    10.3 Warum diese Zahlen (100, 10.000, 200.000)?

    Diese Werte werden auf aktuelle Daten kalibriert:

  • 100 % Die ersten 100 RockYou-Passwörter repräsentieren ~10% des Korpus. Alle ernsthaften Tools testen sie als Priorität.
  • 10 000 : HiBP sortiert seine ca. 14 Milliarden Einträge nach Häufigkeit. Die Top 10.000 decken ca. 30–40 % der realen Passwörter im Einsatz. Jeder kompetente Angreifer beginnt mit diesem Subset.
  • 200 000 : typische Größe einer kompletten Sprachwortliste nach der Filterung. Dies reicht aus, um den aktuellen Vokabular einer Sprache abzudecken, ohne die angemessene Speicherkapazität zu überschreiten.
  • Sachgebiet Weir et al. (2009) zeigen, dass in den ersten 200.000 Versuchen eines gut bestellten Angriffs Wörter gefunden werden. Ur et al. (2012) bestätigen, dass in den ersten 10.000 Versuchen gemeinsame Passwörter gefunden werden.

    10.4 Vollständiges numerisches Beispiel

    Für das "Sun"-Passwort (aktuelles französisches Wort, erkannt als dictWord)

    AlgorithmenGeschwindigkeit (12× RTX 4090)FormelZeit ----------------------------------------- NT2 ARBEITSLOSIGKEIT3,462 GH/s200 000 / 3 462e957.8 Picosekunden MD52 027 GH/s200 000 / 2 027e998,7 Picosekunden SHA-1610 GH/s200 000 / 610e9327.9 Picosekunden SHA-256272 GH/s200 000 / 272e9735 Picosekunden bcrypt (Kosten 5)2.2 MH/s200 000 / 2 200 00090,9 Millisekunden Argon2id800 H/s200 000 / 800250 Sekunden

    Selbst für Argon2id, 250 Sekunden ist weniger als 5 Minuten - für ein einfaches Wort aus dem Französisch Wörterbuch.


    11. Hohe Treuekalibrierung: applyHighFidelityCalibration()

    11.1 Warum zusätzliche Kalibrierung?

    Bruttoberechnung addDictionaryAttacks() gibt eine Schätzung des "wurst case" — als ob der Angreifer die gesamte Wortliste gleichmäßig testen würde. geordnet nach Wahrscheinlichkeit : Die häufigsten Passwörter kommen zuerst an.

    Hohe Treuekalibrierung gilt für einen Korrekturmultiplikator basierend auf empirischen Beobachtungen:

    // app.js - ligne 4442
    case "dict":
      // Ur et al. 2012 : mots communs trouvés dans les 100-10k premiers essais
      // Weir 2009 : mots dict trouvés dans les 200k premiers essais (scan ordonné)
      m = context.common ? 0.15: context.dictWord ? 0.5: 1.0;
    Bruch
    Multiplikator common (0.15) : Wenn sich das Passwort in der gemeinsamen Prioritätsliste befindet, wird es im Durchschnitt am 15. Perzentil der Liste gefunden - das ist ~ 1.500 Tests der 10.000 aufgelistet. Zeit wird mit 0.15 → 6.7× schneller als der einheitliche Scan multipliziert. Multiplikator dictWord (0,5) : Ein gemeinsames Wörterbuchwort findet sich im Durchschnitt Mitte der gut sortierten Liste. Multiplier 0.5 → 2× schneller als der einheitliche Scan.

    11.2 Akademische Quellen der Kalibrierung

  • Ur et al. (2012) - Wie misst Ihr Passwort? (USENIX Security): Analyse der Verteilung von Passwörtern in realen Korpus. Gebräuchliche Wörter: in den ersten 10.000 Versuchen für 95% der Fälle gefunden.
  • Weir et al. (2009) — Passwort-Cracking mit probabilistischen Kontext-freien Grammatik (IEEE S&P): Reine Wörter werden in den ersten 200.000 Versuchen eines geordneten Angriffs gefunden.

  • 12. Wahrscheinlichkeit der Anwendbarkeit und des Vertrauens

    12.1 Scoring-System

    Time2Cracknicht nur eine Zeit berechnen – sie wertet auch die Wahrscheinlichkeit aus, dass der Wörterbuchangriff tatsächlich der schnellste Angriff ist, über ein Multi-Faktor-Scoring-System:

    // Score d'applicabilité (0-1)
    case "dict":
      return context.common ? 0.99 : context.dictWord ? 0.85 : 0;
  • 0,99 wenn common Das Passwort ist in HIBP → der Wörterbuchangriff gilt mit maximalem Vertrauen.
  • 0,85 % wenn dictWord Nur: hohe Wahrscheinlichkeit. Ein Wörterbuchwort ist verletzlich, aber ein Angreifer muss die richtige Sprachwortliste haben.
  • 0) Andernfalls: der Wörterbuch-Angriff gilt nicht (keine lexische Verwundbarkeit erkannt).
  • 12.2 Evidenzwert

    Parallel zum Applicability-Score erfasst ein "Evidence" die beobachteten Signale:

    case "dict":
      return Number(!!context.common) + Number(!!context.dictWord);
      // 0 : aucun signal
      // 1 : un signal (common OU dictWord)
      // 2 : deux signaux (common ET dictWord)

    Ein Beweiswert von 2 (Wort sowohl im HIBP als auch im sprachlichen Wörterbuch) erhöht das endgültige Vertrauen von 0,08 (2 × 0,04).

    12.3 Final Confidence Score

    const base = confidenceBase["dict"] || 0.6;  // confiance de base
    const evidenceBoost = Math.min(0.12, row.evidenceScore  0.04);
    const speculativePenalty = speculativeCats.has("dict") ? 0.08 : 0;  // dict n'est pas spéculatif
    

    Zeile.confidence = Math.max(0, Math.min(1, Math.max(Anwendbarkeit, Basis) + evidenzBoost - spezifischPenalty ),

    Für ein Passwort common mit dictWord auch erkannt:

  • applicability = 0.99
  • evidenceBoost = min(0.12, 2 × 0.04) = 0.08
  • confidence = min(1, max(0.99, 0.6) + 0.08) = min(1, 1.07) = 1.0
  • Maximales Vertrauen: Der Wörterbuch-Angriff ist der primäre Angriff eindeutig.


    13. Bloom filter RockYou: lokale Erkennung von weit verbreiteten Passwörtern

    13.1 Hintergrund

    Neben der HIBP-Verifikation (die einen Netzwerkanruf erfordert),Time2Crackintegriert ein bloom filter Ein Blütenfilter ist eine probabilistische Datenstruktur, die es Ihnen erlaubt, die Zugehörigkeit zu einem Satz mit einer Wahrscheinlichkeit von falschen Positiven zu testen (~1%), ohne die Elemente selbst zu speichern.

    13.2 Vorteile des Blütenfilters

    KriterienHIBP k-AnonymitätFilter lokal ----------------------------------- Deckung~14 Milliarden~14 Millionen (RockYou) Latenz50–200 ms (Netzwerk)< 1 ms (lokal) Vertraulichkeitk- Anonymität (5 SHA-1 Tanks)100% lokal, nichts übertragen Falsch positiv0 %~1% ~ GrößeAPI~2–5 MB (Blühfilter binär)

    13.3 Betrieb des Doppelhaspels

    // app.js - ligne 1962
    function bloomHas(filter, word) {
      if (!filter) return false;
      const { bitArray, m, k } = filter;
      const w = word.toLowerCase();
    

    // Double-Hashing: h1 und h2 sind zwei unabhängige Hash-Funktionen const h1 = fnv1a32(w, 2166136261); // FNV1a mit Standardsaat const h2 = fnv1a32(w, 0x811c9dc5); // FNV1a mit alternativem Saatgut

    für (let i = 0; i < k; i++) { = (h1 + (i) (h2) >>> (0)) % m; // k Positionen im Bit-Array const byteIdx = Math.floor(pos / 8); const bitIdx = pos % 8;

    // Wenn ein bisschen 0 ist: das Wort ist DEFINITLY abwesend wenn ((bitArray[byteIdx] & (1 << bitIdx)) = 0) falsch zurückgeben; } // Alle Bits sind bei 1 : das Wort ist PROBABLY vorhanden (mit 1% von FP) Rückkehr wahr; }

    Das Doppelhashing FNV1a sorgt für eine gleichmäßige Verteilung von Positionen im Bit-Array, minimiert Kollisionen und hält die falsche Positivrate nahe 1%.

    13.4 Lade- und Binärformat

    Der Blütefilter wird in data/rockyou.bloom — eine binäre Datei mit

  • Kopf (20 Bytes): Magienummer (0x424c4f4f = "BLOO"), Version, m (bit Arraygröße), k (Anzahl Hash-Funktionen), n (Anzahl der Elemente)
  • Nutzlast : Bit-Array (m/8 Bytes)
  • Die Last wird vom Benutzer manuell ausgelöst (Taste in der UI), nicht automatisch bei der Seitenbelastung – um die Ausgangsleistung zu erhalten.


    14. Vergleich mit abgeleiteten Angriffen

    Der "reine" Wörterbuch-Angriff ist die erste von einer Familie von Angriffen, die alle eine gemeinsame Wurzel teilen: eine lexische Wortliste.Time2Crackimplementiert 7 Offline-Cracking-Modelle (Brutskraft, Wörterbuch, Hybrid, Maske,PCFG,Markov, Kombinator), jeder angreift das Passwort aus einem anderen Winkel.

    14.1 Wörterbuch vs.Hybride)

    KriterienWörterbuchHybride (dict+rules) -------------------------------------- KandidatenWörter als WörterbuchWörter + ~1000 Mutationen pro Wort Schlüsselbereich200.000 Kandidaten~200 Millionen Kandidaten Gekrackte Beispiele"Passwort", "Sun""P@ssw0rd!", "s0l3il2024" Relativgeschwindigkeit1000× schnellerViel breitere Abdeckung Anwendbar beigenaue Wort in der ListePasswort abgeleitet von einem Diktwort

    Der Hybridangriff beginnt, wo das reine Wörterbuch aufhört: es nimmt jedes Wort von der Wortliste und wendet systematische Mutationsregeln an (hashcat "best64.rule" im Kopf).

    14.2 Wörterbuch vs.PCFG

    KriterienWörterbuchPCFG ----------------------- ModellFeste Liste der KandidatenProbabilistische Struktur Grammatik KraftGenaue WörterWord+Digits Strukturen, Cap+lower+sym Beispiel"Passwort" → ✓"Password123" → ✓ (Struktur erfasst) DeckungBekannter VokabularGenerische menschliche Strukturen

    Ein Passwort wie "Password123" kann unbemerkt in einem Wörterbuch gehen (das genaue Wort "Password123" darf nicht aufgeführt werden) aber wird sehr schnell vonPCFGdie die Struktur [Majuscule][minuscules][figuren] erkennt.

    14.3 Wörterbuch vs.Markov

    KriterienWörterbuchMarkov ------------------------- KandidatenVorkompilierte ListeFly-generiert durch statistisches Modell DeckungBekannter VokabularJede wahrscheinliche "menschliche" Sequenz VorteilSehr schnell auf exakten WörternCovers unbekannte Wortschatzwörter Beispiel"Sunshine" → ✓"sunsh1ne" potenziell ✓

    DieMarkovdeckt Fälle ab, in denen das Passwort wie ein menschliches Wort aussieht, ohne in irgendeiner Liste zu sein.

    14.4 Wörterbuch vs Credential Stuffing

    KriterienWörterbuchEinzigartiges Stuffing -------------------------------------- ZielEinen Hasch klopfenTesten Sie einen bestimmten Login MechanikHash lokale BerechnungenRemote-Verbindungsversuche QuelleGenerelle WortlistePaar Login/Passwort Lecks VerteidigungStarker Hash-AlgorithmusGeschwindigkeitsbegrenzung, MFA, IP-Blockung

    Credential stuffing attackiert keine Hash – es versucht direkt Login/Passwort-Paare auf Remote-Dienste. Es ist konzeptuell anders als Cracking, aber teilt die gleiche Datenquelle (HIBP/fail).


    15. Einschränkungen des Angriffswörterbuchs

    15.1 Eigene Grenzen

    1. Bekannte Wortschatz nur Ein erfundenes Passwort, das kein vorhandenes Wort ähnelt und nicht in HiBP ist, ist undurchlässig für einen reinen Wörterbuchangriff. "Xqz7mK9pL" wird nie in irgendeiner Wortliste sein. 2. Sprachabdeckung Ein Angreifer, der einen französischsprachigen Benutzer ohne französische Wortliste anvisiert, wird Wörter wie "ephemeral", "grenouille" oder "bricolage" vermissen, die nicht in Standard-englischen Wortlisten sind. 3. Neue Passwörter Ein Anmeldetag, der gerade erstellt wurde und nie geflüchtet wurde, wird nicht in HiBP sein — auch wenn es sehr häufig ist, muss es bis zum nächsten Leck warten, um es zu finden. 4. Sehr lange Passwörter Ein Passwort, bestehend aus einer langen erfundenen Phrase ("MaGrandeAventure2024SousLesEtoiles"), wird in keiner Wortliste sein – auch wenn jedes Wort separat genommen trivial ist.Combinator, PRINCE).

    15.2 Was die BerechnungTime2Cracknicht model

    Inhaltsverzeichnis : ein Angreifer, der auf einen bestimmten Sektor zielt, wird angepasste Wortlisten (medizinische Begriffe für Krankenhäuser, Videospielslang für Spielplattformen) erstellen.Time2Crackverwendet generische Wortlisten. Kombinierte Bruttokraft-Wortlisten : Tools wie CeWL (Custom Word List Generator) können Begriffe aus der Ziel-Website extrahieren, um eine benutzerdefinierte Wortliste zu erstellen. Aktuelle Lecks noch nicht in HIBP zwischen dem Moment, in dem ein Leck auftritt und dessen Integration in HIBP, zirkulieren die kompromittierten Anmeldeinformationen in privaten Foren, ohne über die öffentliche API zugänglich zu sein. Hash Algorithmen nicht abgedeckt :Time2Crack6 Algorithmusmodelle (MD5, SHA-1, SHA-256, NTLM, bcrypt, Argon2id). Algorithmen wie SHA-512, scrypt oder PBKDF2 haben unterschiedliche Profile.

    16. Wirksame Verteidigung

    16.1 Was schützt vor Wörterbuch-Angriff

    Moderner Hash-Algorithmus (Bcrypt, Argon2id) Dies ist die effektivste Verteidigung auf der Serverseite.
  • MD5: Risse in ~1 Mikrosekunde
  • bcrypt kostet 12 : Risse in 35 Stunden
  • Argon2id (empfohlene Parameter): Riß in Jahre
  • Der Unterschied von 10 + Größenordnungen zwischen MD5 und Argon2id macht das Wörterbuch-Passwort "sun" in der Praxis immun, wenn durch Argon2id geschützt - auch wenn der Angreifer weiß, dass es ein französisches Wort ist.

    Einzelsalz pro Konto Ein Salz verhindert vorkalkulierte Tischangriffe und zwingt den Angreifer, für jedes Konto einzeln neu zu berechnen. Es schützt nicht gezielte Wortlistenangriffe (der Angreifer kann noch die 200.000 Wörter mit dem Salz testen), aber unwirksamiert die Regenbogentabellen und macht massive Angriffe auf große Datenbanken undurchführbar. Passwort Länge Ein Passwort eines einzelnen Wörterbuchwortes (8-10 Zeichen) ist verletzlich. Eine Passphrase von 4-5 Wörtern ("horse-light-forest-travel") ist resistent gegen reines Wörterbuch-Angriff, aber nicht gegen AngriffCombinator— daher die Bedeutung von Länge und Zufall. Zufällig generierte Passwörter Die eigentliche Lösung: Verwenden Sie einen Passwort-Manager, der lange zufällige Passwörter erzeugt (20+ Zeichen aller Arten). Multifaktor-Authentifizierung (MFA) Die MFA verhindert nicht Riss offline (der Angreifer erholt Hashs und Risse offline), sondern schützt vor Anmeldeinformationen (verwende knackte Anmeldeinformationen). Geschwindigkeitsbegrenzung und Erkennung von Anomalien Schützt gegen Online-Angriffe (direkte Verbindungsversuche), nicht gegen Offline-Cracking gestohlener Hashs.

    16.2 Was nicht schützt

    Einfache Leet-Substitutionen : "Passwort" → "p@ssw0rd" — siehe Abschnitt 9. Zahlen am Ende hinzugefügt : "password" → "password1" – unter den ersten getesteten Regeln. Erste Zahlung : "Passwort" → "Passwort" — Standardkapitalisierungsregel. Figuren und Symbole, wenn das Wort erkennbar bleibt "sunshine!" ist in jeder Wortliste, die "sunshine" mit Grundregeln beinhaltet. Komplex ohne Länge "P@s1w" erfüllt die Komplexitätskriterien (maj, min, number, symbol) aber ist kürzer und vorhersehbarer als "correcthorsebaterystaple".

    16.3 Praktische Empfehlungen

  • Verwenden Sie einen Passwort-Manager (Bitwarden, 1Password, KeePass) — erzeugt zufällige Passwörter, Sie müssen sich nur an das Master-Passwort erinnern.
  • MFA überall aktivieren — auch wenn das Passwort kompromittiert ist, kann der Angreifer nicht verbinden.
  • HIBP regelmäßig überprüfen — ob seine E-Mail in bekannten Lecks ist.
  • Nie wieder ein Passwort — das Anmeldematerial ausgenutzt Cross-Services wiederverwenden.
  • Für unvergessliche Passwörter : 5+ Wörter passphrasen Zufall (nicht "horse-correct-battery-agrafe-violet", sondern Worte wirklich von Lot gezeichnet).

  • 17. Referenzen

    Primärquellen (Akademische Studien)

    Morris, R., & Thompson, K. (1979). Passwort-Sicherheit: Eine Fallgeschichte. Mitteilungen der ACM, 22(11), 594-597.
  • Erste akademische Analyse der Unix-Passwortverteilung
  • Erkennt, dass ~1/3 Passwörter häufige englische Wörter sind
  • Klein, D.V. (1990).
    Foiling the cracker: Eine Umfrage von und Verbesserungen an, Passwort-Sicherheit. UNIX Security Symposium Proceedings, 5–14.
  • 15.000 Unix Passwort-Crack: 25% in ein paar Stunden geknackt
  • Dokument erste Wortlisten und Mutationsregeln
  • Weir, M., Aggarwal, S., de Medeiros, B., & Glodek, B. (2009).
    Passwort-Cracking mit probabilistischen kontextfreien Grammatik. IEEE Symposium über Sicherheit und Datenschutz.
  • Grundlegende Bezugnahme auf den AngriffPCFGund Vergleich mit reinem Wörterbuchangriff
  • Bestimmt, dass in den ersten 200.000 Versuchen eines geordneten Angriffs Wörter gefunden werden
  • ZitrusfrüchteTime2Crack zur HF-Kalibrierung des Wörterbuchangriffs (Multiplier 0.5)
  • Ur, B., Kelley, P. G., Komanduri, S., Lee, J., Maase, M., Shay, R., Vaniea, K., Bauer, L., & Cranor, L. F. (2012).
    Wie misst Ihr Passwort nach oben? Der Einfluss von Kraftmessgeräten auf die Passwort-Benutzerwahl. 21. USENIX Security Symposium.
  • Analyse der Verteilung von gemeinsamen Wörtern in realen Korpus
  • Gemeinsame Worte in den ersten 100–10 000 Versuchen gefunden
  • ZitrusfrüchteTime2Crack für HF-Kalibrierung common ? 0.15 (ober 10k Ebene)
  • Bonneau, J (2012).
    Die Wissenschaft des Gesangs: Analysieren eines anonymen Korpus von 70 Millionen Passwörtern. IEEE Symposium über Sicherheit und Datenschutz.
  • Studie von 70 Millionen anonymisierten Yahoo-Passwörtern
  • Gibt die tatsächliche Verteilung von Passwörtern an, bestätigt das Machtgesetz
  • Messung der Wirksamkeit der Anmeldestopfung (2–5% Trefferquote auf realen Konten)
  • Ma, J., Yang, W., Luo, M., & Li, N. (2014).
    Eine Studie über probabilistische Passwortmodelle. IEEE Symposium über Sicherheit und Datenschutz.
  • Vergleich probabilistischer Modelle (diktionär,Markov,PCFG) auf real corpus
  • Best64.rule prioritized → ~40% Reduktion der durchschnittlichen Zeit für Wörterbuchwörter
  • ZitrusfrüchteTime2Crack zur HF-Kalibrierung von Hybridangriff
  • Wheeler, D.L. (2016).
    zxcvbn: Low-budget Passwortstärke Schätzung. 25. USENIX Security Symposium, 157–173.
  • Kraftschätzungssystem mit Wortlisten und Mustern
  • Analyse von kognitiven Vorurteilen in der Passwort-Erstellung
  • Messung der Wirksamkeit von Wortlisten in Bezug auf die Bruttokraft
  • Pasquini, D., Cianfriglia, M., Ateniese, G., & Bernaschi, M. (2021).
    Reduzierung der Vorspannung bei der Modellierung der Echt-Welt-Passwortstärke durch Deep Learning und dynamische Wörterbücher. 30. USENIX Security Symposium.
  • Bewertung von Schätzmodellen für tatsächliche Angriffe
  • bestätigt, dass Wörterbücher das effektivste Werkzeug für gemeinsame menschliche Passwörter bleiben
  • Industrielle Quellen

    Habe ich Pwned (2024).
    Pwned Passwords. https://haveibeenpwned.com/Passwords
  • Basis von ~14 Milliarden einzigartigen Passwörtern aus dokumentierten Lecks
  • k-Anonymität API verwendet vonTime2Crackzur Echtzeit-Überprüfung
  • Hive Systems. (2025).
    2025 Hive Systems Passworttabelle.
  • Benchmarks 12× RTX 4090: MD5 2.027 GH/s, NTLM 3,462 GH/s, bcrypt cost 5 : 2,2 MH/s
  • Hauptquelle der inTime2Crack
  • Hashcat. (2025).
    Hashcat — Erweiterte Passwortwiederherstellung.
  • Referenzwerkzeug für GPU-Benchmarken
  • Dokumentation der Mutationsregeln (best64.rule, OneRuleToRuleThemAll)
  • Gosney, J (2012).
    Strenge auf Lee et al. und Probabilistic Password Cracking. Passwordscon-Verfahren.
  • Erste öffentlich dokumentierte Multi-GPU-Benchmarks
  • Referenz zur Kalibrierung von regelbasierten Angriffen
  • Miessler, D. (2024).
    SecLists — Eine Sammlung von mehreren Arten von Listen, die bei Sicherheitsbewertungen verwendet werden. GitHub.
  • Quelle der Wikipedia-Sprachwörterlisten inTime2Crack
  • Wordlisten auf Englisch, Französisch, Spanisch, Portugiesisch, Deutsch, Türkisch
  • Sekundärquellen (Kontext)

    Troy Hunt. (2013).
    Einführung 306 Millionen Frei herunterladbare Pwned-Passwörter. troyhunt.com.
  • Erster Aufbau des HIBP-Dienstes und Erläuterung des k-Anonymitätsprotokolls
  • Thomas, K., et al. (2019).
    Schützen von Konten vor Anmelde-Stopfen mit Passwort-Pause-Benachrichtigung. 28. USENIX Security Symposium.
  • Google/Stanford-Studie zum Schutz von gefährdeten Anmeldeinformationen
  • bestätigt die Wirksamkeit von k-Anonymität als Datenschutzmechanismus
  • Wang, D., Cheng, H., Wang, P., Huang, X., & Jian, G. (2016).
    Zipf's Gesetz in Passwörtern. IEEE Transactions on Information Forensics and Security, 12(11), 2776–2791.
  • Mathematische Formalisierung des Machtgesetzes in der Passwortverteilung
  • bestätigt, dass Zipf-Verteilung auf allen bekannten großen Korpus hält
  • Webquellen, die in der Anmeldung genannt werdenTime2Crack

    IEEE Xplore (diktive Referenz). https://ieeexplore.ieee.org/document/6234435
  • Verwandte Quelle in descDict (app.js) für die Reihenfolge der Abdeckung der Top-Wörterbücher.
  • HIBP API Bereich (k-Anonymität). https://api.pwnedpasswords.com/range/
  • Endpoint tatsächlich verwendetTime2Crackfür k-Anonymitätsprüfung (sha-1 Präfix-Anforderung).
  • HIBP Anrufmuster in Code. https://api.pwnedpasswords.com/range/${prefix}
  • Die genaue Form der URL, die in den Dokumentcode-Beispielen aufgerufen wird (interpoliert SHA-1 Präfix).

  • ProjektdokumentTime2Crack— Version 1.0 — 2026-04-01 Quellcode: app.js (Funktionen) addDictionaryAttacks, isDictWord, deLeet, loadDictionary, applyHighFidelityCalibration, bloomHas)*