Woordenboekaanval Uitgebreide operatie

Projectreferentiedocument Time2Crack
Ontvangers: ontwikkelaars, security onderzoekers, geavanceerde gebruikers

Inhoud

  • Overzicht
  • Historische en academische achtergrond
  • Conceptuele stichtingen: waarom woordenboeken werken
  • Architectuur van een moderne woordenboekaanval
  • Het corpus van echte wachtwoorden
  • K-Anonimity HIBP verificatie: een real-time aanval
  • Time2Crack Taal Wordlists
  • Woordenboekdetectie in Time2Crack: isDictWord()
  • Ontleeting: hoe de aanvaller substituties decodeert
  • Berekening van de kraaktijd: addDictionaryAttacks()
  • Kalibratie van hoge trouw: applyHighFidelityCalibration()
  • Waarschijnlijkheid van toepasbaarheid en betrouwbaarheidsscore
  • Bloom filter RockYou: lokale detectie van wijdverbreide wachtwoorden
  • Vergelijking met afgeleide aanvallen
  • Beperkingen van aanvalswoordenboek
  • Doeltreffende verdediging
  • Referenties

  • 1. Overzicht

    Dictionary attack is de oudste wachtwoord kraken methode, de eenvoudigste conceptueel, en statistisch meest effectief op de meerderheid van de echte menselijke wachtwoorden. Het principe is om te testen, in afnemende volgorde van waarschijnlijkheid, een vooraf samengestelde lijst van kandidaten

    Waarom is het verschrikkelijk effectief? Mensen niet kiezen hun wachtwoorden willekeurig. Decennia van datalekken onthullen dat de werkelijke distributie van wachtwoorden is zeer geconcentreerd: de meest voorkomende 1000 wachtwoorden vertegenwoordigen ongeveer 5 tot 10% van alle online accounts. De meest voorkomende 1 miljoen dekking 40 tot 60%. Een goed gebouwde woordenboek aanval zal deze kandidaten testen in milliseconden tot seconden

    In Time2Crack, de woordenboek aanval modellen twee verschillende maar complementaire mechanismen:

  • HIB-keuring (Have I Ben Pwned): Confrontatie van het wachtwoord naar de ~14 miljard unieke referenties van historische datalekken. Als het wachtwoord er is, zou een aanvaller het ontdekken in een fractie van een seconde.
  • Taal Wordlist Detection Een gemeenschappelijk taalwoord "zon" of "zon" is kwetsbaar, zelfs als het niet in HIPP.
  • Deze twee detecties zijn onafhankelijk en complementair: HiBP dekt de exacte compromisgegevens, de wordlist dekt de gemeenschappelijke woorden die nog niet gelekt zijn.


    2. Historische en academische achtergrond

    2.1 Oorsprong

    De woordenboekaanval gaat vooraf aan het moderne tijdperk van computerbeveiliging. De eerste Unix systemen opgeslagen wachtwoorden in gewone taal in /etc/passwd, maakt elke woordenboek aanval triviaal zodra het bestand toegankelijk was.

    Chronologie van mijlpalen : JaarGebeurtenis --------------------- 1979Morris & Thompson: Eerste academisch artikel over Unix wachtwoordbeveiliging. Zie dat 1/3 van de wachtwoorden gewone Engelse woorden kiezen 1988Morris Worm: deels propageert via een 432 woord woordenboek + host /usr/share/dict/words 1993Crack 5.0 (Alec Muffett): Eerste publieke woordenboek aanval hulpmiddel op Unix, bevat mutatie regels 2000John the Ripper: populariseert wordlists in combinatie met hashcat regels (woordenlijst + regels modus) 2009RockYou lek: 14,3 miljoen duidelijke wachtwoorden onthullen de werkelijke verdeling van menselijke keuzes 2012Heb ik Ben Pwned (Troy Hunt): eerste openbare audit dienst voor gecompromitteerde referenties 2013Adobe break: 153 miljoen accounts De hoogste wachtwoorden worden herkenbaar door frequentieanalyse, zelfs op ongezouten hashen 2016Hashcat open source v3.0: massale optimalisatie van wordlistaanvallen op GPU (MD5: 2 TH/s op 8 GPU cluster) 2019Collectie #1 2024HIBP v8: ~14 miljard unieke wachtwoorden geïndexeerd

    2.2 Oprichtingslekken

    Sommige lekken hebben het landschap van de aanval door woordenboek veranderd door de feitelijke verspreiding van menselijke wachtwoorden te onthullen:

    RockYou (2009) Een ontwikkelaar had 14,3 miljoen wachtwoorden opgeslagen in gewone taal.
  • De eerste 10 wachtwoorden betroffen ~5% van de rekeningen
  • Eerste 1.000: ~20% van de rekeningen
  • Distributie volgt een machtswet
  • LinkedIn (2012) 6,5 miljoen ongezouten SHA-1. Adobe (2013) 153 miljoen rekeningen. Have I Been Pwned (2013 - Progressieve aggregatie van publieke lekken, waardoor Troy Hunt een referentiebasis kan creëren die wereldwijd wordt gebruikt.

    2.3 Referentiebenchmarks voor woordenboekaanval

    Een woordenlijst van 200.000 inzendingen getest met de snelheid van een RTX 4090:

    AlgoritmeSnelheidTijd voor 200k kandidaten -------------------------Onverzadigd MD5168,9 GH/s~1,2 nanoseconde SHA-150,86 GH/s~3,9 nanoseconden SHA-25622.68 GH/s~8,8 nanoseconden NTLM288,5 GH/s~0,7 nanoseconde bcrypt (kosten 5)184 kH/s1,09 seconde Argon2id~67 H/s50 minuten

    De woordenboekaanval is daarom bijna onmiddellijk voor MD5, SHA-1 en NTLM en blijft zeer snel zelfs voor bcrypt op kleine lijsten.


    3. Conceptuele fundamenten: waarom woordenboeken werken

    3.1 De machtswet van menselijke wachtwoorden

    Alle empirische studies komen samen in de richting van dezelfde observatie: de verdeling van menselijke wachtwoorden is niet uniform machtsrecht Sommige wachtwoorden concentreren een onevenredige fractie van keuzes.

    Formeel : als alle wachtwoorden worden geclassificeerd door afnemende frequentie, de frequentie van het rangwachtwoord r is evenredig met r^(-α) met α 1,5 tot 2 Volgens het corpus.

    Directe gevolgen: 10 meest voorkomende wachtwoorden Een aanvaller die slechts 10 kandidaten al een kans in 20 om te slagen statistisch, het is enorm voor de hoeveelheid lawaai gegenereerd.

    3.2 Cognitieve Bias in Wachtwoordcreatie

    Mensen kiezen niet willekeurig. Ze passen systematisch heuristiek toe die hun wachtwoorden voorspelbaar maken:

  • Geheugen Bias : de woorden gemakkelijk te onthouden (gewone namen, voornamen, termen van populaire cultuur) zijn oververtegenwoordigd
  • Beschikbaarheid Bias Het wachtwoord weerspiegelt de directe omgeving (binnenlandse diernaam, sportteam, seriële karakter)
  • Voorspelbare substitutievooroordeelen : "e" → "3," "a" → "@," "o" → "0" De gebruiker gelooft dat het wachtwoord sterk is, maar deze substituties zijn precies de eerste die de aanvaller probeert te doen
  • Complete Bias : toevoeging van een getal of symbool aan het einde van een woord (wachtwoord1, zonneschijn!)
  • Culturele vooroordelen Gemeenschappelijke wachtwoorden zijn gekoppeld aan de taal en cultuur van de gebruiker ("Soleil123" in Frankrijk, "Sommer123" in Duitsland)
  • 3.3 Het begrip "password al in de lijsten"

    Een wachtwoord kan in een aanvalslijst staan om twee verschillende redenen:

    Reden 1 Hij is in HIPP De exacte credential is gecompromitteerd in een verleden lek. De aanvaller hoeft niet om te raden dat het test de bekende referenties een voor een, in volgorde van frequentie. Als de doelserver accepteert de credential, het is voltooid. Reden 2 Het staat in een taalwoordenlijst Het wachtwoord is een gewoon woord van gewone woordenschat. Zelfs als het nooit is gevlucht, het is in alle aanval wordlists omdat het een voor de hand liggende kandidaat is. "Paillon" mag niet in HiBP, maar het is in de Franse woordenlijst van een ernstige kraakmiddel.

    Deze twee gevallen komen overeen met aanvallen van een andere aard, met verschillende snelheden en dit is precies wat Time2Crack modellen.


    4. Architectuur van een moderne woordenboek aanval

    4.1 Algemene pijpleiding

    Een moderne woordenboek aanval vindt plaats in verschillende fasen:

    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)
    

    Fase 2: Woordenlijst Voorverwerking - Sorteer op frequentie (meest waarschijnlijk eerst) - - Deduplicatie (niet tweemaal dezelfde kandidaat) - - Lengtefiltratie (doellengte + ±2) - Normalisatie (lagere case, Unicode NFC)

    Fase 3: Berekening van kandidaat Hashs Voor elke kandidaat w in de woordenlijst: │ hashkandidaat = hashalgo(w) Promotional │ if hashkandidaat== hashDoel: Gevonden - Snelheid: 168 GH/s voor MD5 op RTX 4090

    Fase 4: Analyse van de resultaten Rapport van gekraakte wachtwoorden, dekkingsstatistieken

    4.2 Hardwareoptimalisatie

    Moderne woordenboek aanvallen worden massaal parallel op GPU:

  • Hashcat (referentie tool): exploiteert de CUDA cores van de GPU om miljarden hash gelijktijdige berekeningen parallel te maken
  • Vectorpijpleiding : op een RTX 4090 berekent een enkele SIMD instructie 8 tot 16 MD5 hash parallel
  • GPU-cache : de wordlist wordt geladen in VRAM om geheugenlatentie te minimaliseren
  • Loting : de kandidaten worden verzonden naar de GPU in batches van miljoenen om de stroom te maximaliseren
  • Voor een woordenlijst van 14 miljard inzendingen (HBP-grootte) op 12× RTX 4090:

  • MD5 : 14e9 / (168.9e9 × 12) 6,9 seconden
  • bcrypt kosten 5: 14e9 / (184000 × 12) 6,337 jaar
  • Dit verschil van ~9 orden van grootte tussen MD5 en bcrypt verklaart waarom de keuze van de hash algoritme is cruciaal.

    4.3 Testvolgorde van de kandidaten

    De woordenlijst is niet in alfabetische volgorde getest. gesorteerd op afnemende waarschijnlijkheid :

  • De meest voorkomende ontsnappingswachtwoorden (RockYou top 100)
  • Gemeenschappelijke wachtwoorden met meerdere fouten (HBP-prioriteitenlijst)
  • Gemeenschappelijke woorden van de doeltaal
  • De juiste namen (voornamen, steden, beroemdheden)
  • Doelgerelateerde thematische termen
  • Variaties en vervoegingen
  • Dit soort zorgt ervoor dat als het wachtwoord "laag" is, het zal worden gevonden in de eerste milliseconden


    5. Het corpus van echte wachtwoorden

    5.1 Hebben ik geploegd (HIBP)

    Grootte ~14 miljard unieke wachtwoorden (2024) Bron : samenvoeging van openbare lekken sinds 2013 Formaat : SHA-1 gesorteerd op frequentie van verschijning Toegang van het publiek : k- anonimiteit API, volledige hash download beschikbaar voor verdedigers

    HiBP is de wereldwijde referentie omdat:

  • Het bestrijkt bijna alle grote openbare lekken
  • De hashs zijn gesorteerd op frequentie en de meest voorkomende wachtwoorden worden eerst getest
  • Het wordt actief onderhouden (nieuwe lekken continu toegevoegd)
  • Een aanvaller met de complete HIPP dump kan eerst de ~14 miljard kandidaten in dalende volgorde van frequentie testen. Voor niet-gezouten algoritmen (MD5, SHA-1), deze lijst dekt in de orde van 50-70% van alle echte online wachtwoorden.

    5.2 RockYou (2009)

    Grootte : 14,3 miljoen duidelijke wachtwoorden Belangrijkste kenmerken : RangWachtwoordVoorvallen% corpus ------- [57]- [57]- [57] 1123456290 7312,03% 21234579 0780,55% 312345678976 7900,54% 4wachtwoord59 4620,42% 5Ik hou van je.49 9520,35% Top 10Wat?~650,000~4,5% Top 100Wat?~1 200 000~8,4% Top 1 000Wat?~2 500 000~17,5% Top 10.000Wat?~4 500 000~31,5% Onderwijs Test slechts 10.000 kandidaten (100 μs MD5 snelheid) compromissen ~31% van een database van MD5 beschermde accounts.

    5.3 Verzamelingen van gespecialiseerde woordenlijsten

    Seclists (Daniel Miessler): open-source verzameling van ~4 GB woordenlijsten die betrekking hebben op:
  • Wachtwoorden (RockYou, top wachtwoorden verschillende lekken)
  • Huidige toepassingen
  • Wachtwoorden gesorteerd op taal
  • Technische termen, productnamen, beroemdheden
  • Kaonashi : 1,3 miljard inzendingen wordlist samengesteld sinds openbare lekken Crackstation : 1,5 miljard inzendingen inclusief woorden uit alle Wikipedia woordenboeken in verschillende talen Zwakke doorgang : aggregatie van ~8 miljard enkele echte wachtwoord ingangen

    Deze corpuses zijn publiekelijk downloadbaar en hun bestaan is een vaststaand feit van offensieve veiligheid.


    6. K-Anonimity Verificatie HIPB: Een echte-tijd aanval

    6.1 Protocol k- anonimiteit

    Time2Crack bevat een real-time HIPP check die precies reproduceert wat een aanvaller zou doen met de HIPP database

    Het k-anonimiteitsprotocol werkt als volgt:

    1. Calculer SHA-1(password)      → par exemple "CBFDAC6008F9CAB4083784CBD1874F76618D2A97"
    
  • Stuur alleen de eerste 5 tekens naar de HIPP API: "CBFDA"
  • De API geeft ALL SHA-1 achtervoegsels terug die beginnen met "CBFDA" (ongeveer 400-600 hashes)
  • Zoek lokaal als de rest van de hash ("C6008F9CAB4083784CBD1874F76618D2A97") in de lijst staat
  • Indien gevonden: wachtwoord is aangetast (HIBP geeft ook het aantal lekken)
  • Garantie van vertrouwelijkheid De HIBP server ziet nooit de complete hash (dus kan het wachtwoord niet identificeren), laat staan het duidelijke wachtwoord. De uiteindelijke berekening wordt lokaal gedaan. Wat dit betekent voor de aanval Dit betekent dat een aanvaller met de HIPP-database die deze credentialiteit test, hem in een zeer hoge positie op zijn lijst, gesorteerd op frequentie, in een fractie van nanoseconden zou vinden.

    6.2 Implementatie in Time2Crack (app.js)

    De HIPP check is asynchroon en niet-blokkerend. Het wachtwoord wordt onmiddellijk geanalyseerd door lokale methoden, en de HIPP check vult het resultaat aan:

    // 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 respons = wacht fetch( https://api.pwnedpasswords.com/range/${prefix} ); const regels = wacht op respons.text();

    voor (cont lijn van lijnen.split('\n')) { const [hashSuffix, count] = line.split(':"); indien (hashSuffix.toLowerCase() = suffix.toLowerCase()) { return parseInt(count); // aantal lekken } } teruggeven 0; // niet gevonden }

    HIB-prestatiegegevens :
  • Typische API latentie: 50
  • Volume van de achtervoegsels teruggegeven: ~400
  • Valspositief: 0 (SHA-1 is deterministisch)
  • Vals negatief: 0 (als in HiBP, altijd teruggekeerd)
  • 6.3 Interpretatie van graaf HIPP

    De door HiBP geretourneerde telling geeft het aantal keren aan dat dit exacte wachtwoord verscheen in geïndexeerde lekken:

    AantalInterpretatieCracktijd (MD5, 12× RTX 4090) ------------------------------------------------------------ > 1 000 000Top 100 Wereld< 1 nanoseconde 10.000Zeer vaak< 10 nanoseconden 1 000Vaak< 100 nanoseconden 100Soms, maar bekend< 1 microseconde 100Zelden maar aangetast< 10 microseconden

    Zelfs een telling van 1 (het wachtwoord verscheen slechts een keer in een lek) geeft een kwetsbaarheid aan: als een aanvaller dit account specifiek richt en heeft de lijst van referenties van het lek in kwestie, zal hij het vinden.


    7. Time2Crack Taal Wordlists

    7.1 Waarom taalwoordenlijsten naast HIPP

    HiBP heeft betrekking op de exacte compromis criminaliteiten

    De taalwoordenlijst van Time2Crack dekt deze kloof:

    TaalBronGeschatte grootte -------------------------------- EngelsSeclists Wikipedia NL200.000 inzendingen Frans (fr)Seclists Wikipedia NL150.000 inzendingen SpaansSecLists Wikipedia ES150.000 inzendingen Portugees (pt)SecLists Wikipedia PT~120,000 inzendingen DuitsSecLists Wikipedia DE180.000 inzendingen Turks (tr)SecLists Wikipedia TR100.000 inzendingen Italiaans (it)kkrypt0nn100.000 inzendingen Pools (pl)kkrypt0nn~80 000 vermeldingen Nederland (nl)kkrypt0nn~80 000 vermeldingen Filteren toegepast Alleen woorden van ≥ 4 karakters worden behouden (de 1

    7.2 Luie belasting

    Wordlists zijn niet opgenomen in de code

    // app.js - loadDictionary()
    async function loadDictionary(lang) {
      if (DICTLang & DICTWORDS) return;  // Déjà chargé
      if (DICTLADING) {
    DICTPENDINGLANG = lang; // Wachtbestand
    terugkeer;
    }
    DICTLOADING = true;
    

    const res = wacht op fetch(data/wordlists/${lang}.txt); const tekst = wacht res.text();

    // Converteren naar Set<string> voor O(1) opzoeken DICTVERMELDING = nieuwe verzameling( text.split("\n") .map(w => w.normalize("NFC").trim().toLowerCase()) .filter(w => w.lengte >= 4) ); DICTLANG = Lang; DICTLOADING = vals; }

    Waarom een Set ? Structuur Set JavaScript garandeert O(1) lookups, ongeacht de grootte van het woordenboek (50.000 of 200.000 inzendingen), verificatie DICTWORDS.has(word) Het duurt even lang. Array per lookup, d.w.z. tot 200.000 vergelijkingen per controle.

    Wachtrij wordt geladen

    De DICTHUNGLANG Vermijdt raceomstandigheden tijdens snelle taalveranderingen:

    Scénario : l'utilisateur switche rapidement EN → FR → DE
    ├── EN demandé : DICTLOADING = vals → start van de fetch NL
    FR gevraagd tijdens ophalen NL : DICTLOADING = true → DICTHUNGLANG = "fr"
    ├── DE demandé pendant fetch EN : DICTLOADING = True → DICTPENDINGLANG = "de" (crash "fr")
    - Einden ophalen: DICTLANG = "en", puis lance loadDictionary("de")
    └── Résultat : seule la dernière langue demandée est chargée

    Dit gedrag is opzettelijk: de meest recent gevraagde taal wordt geladen, niet alle tussenliggende talen.


    8. Dictionary Detection in Time2Crack: isDictWord()

    8.1. Opsporing

    De functie isDictWord(pw) bepaalt of een wachtwoord is of is afgeleid van een huidige woordenboekwoord:

    // app.js - ligne 2181
    function isDictWord(pw) {
      if (!DICT(Stemmen) return false;
    

    // Normalisatie: NFC + Kleine letters const l = pw.normalize("NFC").toLowerCase();

    // Directe controle indien (DICT)

    WORDS.has(l) || DICTVERMELDING.has(deLeet(pw)) return true;

    // Morfologische variaties const deleetWord = deLeet(pw); const variaties = getMorphVariations(deleetWord);

    voor (cont variatie van variaties) { indien (DICT)

    WORDS.has(variation)) return true; }

    Foutief retourneren; }

    3 laagdetectielijn :
  • Directe correspondentie : Is het standaard wachtwoord in het woordenboek zoals het er nu uitziet?
  • "zon" → directe hit
  • "SOLEIL" → standaard in "zon" → hit
  • Brief na de meeting : Bevat het wachtwoord standaard let substituties?
  • "s0l3il" → deLeet → "sun" → hit
  • "p@ssw0rd" → deLeet → "wachtwoord" → hit
  • Morfologische variaties : is het wachtwoord een bekende morfologische variant?
  • "zon" → meervoud variatie van "zon" → hit
  • "wachtwoorden" → variatie van "wachtwoord" → hit
  • 8.2 Unicodenormalisatie (NFC)

    Normalisatie normalize("NFC") zorgt ervoor dat geaccentueerde tekens consequent worden behandeld:

  • "e" kan in Unicode worden weergegeven als één puntcode (U+00E9) of als "e" + gecombineerd accent (U+0065 + U+0301)
  • Zonder standaardisatie zouden "koffie" en "koffie" (verschillende coderingen) niet overeenkomen
  • Deze normalisatie wordt toegepast zowel bij het aanmaken van het woordenboek als bij het controleren van de juiste correspondentie voor accenttalen (FR, ES, DE, PT, enz.).

    8.3 Effect op geconstateerde kwetsbaarheid

    Wanneer isDictWord() Ga terug. trueverschillende aanvallen worden van toepassing:

  • Woordenboekaanval zelf: betrouwbaarheidsscore 0,85 (vs 0 indien afwezig)
  • Hybride aanval : hybridVuln = true → 1000 mutaties getest op woordenboekbasis
  • PCFG aanval : verhoogde betrouwbaarheid score (lekische base gedetecteerd)
  • Morfologische aanval : hoge prioriteit indien morfologische variant gedetecteerd

  • 9. Ontleeting: hoe de aanvaller substituties decodeert

    9.1 Leetspeak en zijn beperkingen als bescherming

    De leetspeak (of "1337 speech") is een praktijk om letters te vervangen door visueel vergelijkbare getallen of symbolen: a→@, e→3, i→1 of !, o→0, s→$. Gebruikers gebruiken het om gemeenschappelijke woorden te "versterken."

    Voorbeeld : "wachtwoord" → "p@$$w0rd"

    De realiteit: deze substituties zijn de eerste toegepaste regels Ze vormen geen echte verdediging tegen een bekwame aanvaller.

    9.2 Uitvoering deLeet() in Time2Crack

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

    functie vanLeetWith(pw, oneMap) { laat r = pw.normalize("NFC").toLowerCase(); voor (const [ch, reps] of Object.entrys(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; }

    functie vanLeet(pw) { // Ambiguïteit: "1" mag "i" of "l" zijn samen metI = deLeetWith(pw, { i: "1!", l: "" }); const withL = deLeetWith(pw, {l: "1," i: "!" });

    // Als het woordenboek geladen is, geef dan de voorkeur aan de variant die overeenkomt met indien (DICT)VERMELDING) { indien (DICT)VERMELDING.has(withL)) return withL; indien (DICT)VERMELDING. has(withI) return withI; }

    // Anders: verkies de variant met de minst overgebleven nummers const samenvattingenI = (metI.match(/\d/g) const samenvattingenL = (metL.match(/\d/g) Return digit L <= cijfer I ? met L: metI; }

    9.3 Ambiguïteitsbeheer "1" → "i" of "l"

    De vervanging "1" is dubbelzinnig: "1" kan "i" vertegenwoordigen (zoals in "1nfo" → "info") of "l" (zoals in "p1ayer" → "speler"). Time2Crack lost deze dubbelzinnigheid op door:

  • Testen van beide varianten ("withI" en "withL")
  • Als het woordenboek geladen is, geef je de voorkeur aan de variant die een woordenboek overeenkomt
  • Zonder woordenboek, de voorkeur geven aan de variant die de weinigste restnummers achterlaat (aanname: volledige de-leetificatie is waarschijnlijker)
  • Voorbeeld :
  • "b1ue" → metI = "biue" (niet in dict), metL = "blue" (in dict) → geeft "blue" terug
  • "f1le" → withI = "file" (in dict), withL = "flle" (niet in dict) → returns "file"
  • 9.4 Niet onder de richtlijn vallende instellingen (bedoeld)

    Time2Crack heeft geen betrekking op zeldzame of dubbelzinnige vervangingen die verder gaan dan LEETBASE patronen. Het is een ontwerpkeuze: het bestrijken van te veel gevallen zou de valse positieven verhogen (een wachtwoord als "huidig woord" detecteren, terwijl het dat niet is). De meegeleverde patronen dekken >95% van de werkelijke Leetifications waargenomen in het corpus.


    10. Berekening van de kraaktijd: addDictionaryAttacks()

    Rekenlogica

    // 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
    

    const note = zwak ? t("nWeakPassword") : gemeenschappelijk ? t("nInLeaks") : dictWord ? t(nDictHit) : t(nAbsentLeaks);

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

    10.2 Drie kwetsbaarheidsniveaus

    Niveau 1 Ultrazwak (weak = true) : ~100 / milt Het wachtwoord is in 's werelds Top 100 ("wachtwoord," "123456," "qwerty"...). Een aanvaller die deze 100 prioritaire kandidaten test vindt het in de eerste pas. Voor MD5: 100 / 168.9e9 0,6 nanoseconde. Niveau 2 (common = true) : ~10 000 / milt Het wachtwoord staat in de referentie HIPP lijst van de ~10.000 meest frequente wachtwoorden. Deze kandidaten worden getest in de eerste microseconden. Voor MD5: 10.000 / 168,9e9 59 nanoseconden. Niveau 3 DictWord (dictWord = true) : ~200.000 / milt Het wachtwoord is een woord uit het huidige taalwoordenboek (lokale woordenlijst ~50k 1,18 microseconde. Niveau 4 (sec = null) : het wachtwoord is niet ultra-zwak, noch gebruikelijk, noch een woord uit het huidige woordenboek. De woordenboek aanval alleen is niet van toepassing .

    10.3 Waarom deze nummers (100, 10.000, 200.000)?

    Deze waarden worden gekalibreerd op feitelijke gegevens:

  • 100 De eerste 100 RockYou wachtwoorden vertegenwoordigen ~10% van het corpus. Alle serieuze instrumenten testen ze als prioriteit.
  • 10 000 : HiBP sorteert zijn ~14 miljard inzendingen per frequentie. De top 10.000 dekken ongeveer 30
  • 200 000 : typische grootte van een complete taalwoordenlijst na het filteren. Dit is voldoende om de huidige woordenschat van een taal te bestrijken zonder de redelijke laadcapaciteit in het geheugen te overschrijden.
  • Rubrieknummer Weir et al. (2009) tonen aan dat woordenboek woorden worden gevonden in de eerste 200.000 pogingen tot een goed geordende aanval. Ur et al. (2012) bevestigen dat gemeenschappelijke wachtwoorden worden gevonden in de eerste 10.000 pogingen.

    10.4 Volledig numeriek voorbeeld

    Voor het "zon" wachtwoord (huidig Frans woord, gedetecteerd als dictWord) :

    AlgoritmeSnelheid (12× RTX 4090)FormuleTijd ------------------------------------------------------ NTLM3,462 GH/s200 000 / 3 462e957,8 picoseconden MD52 027 GH/s200 000 / 2 027e998,7 picoseconden SHA-1610 GH/s200 000 / 610e9327,9 picoseconden SHA-256272 GH/s200 000 / 272e9735 picoseconden bcrypt (kosten 5)2,2 MH/s200 000 / 2 200 00090,9 milliseconden Argon2id800 H/s200 000 / 800250 seconden

    Zelfs voor Argon2id is 250 seconden minder dan 5 minuten voor een simpel woord uit het Franse woordenboek.


    11. Kalibratie van hoge trouw: applyHighFidelityCalibration()

    11.1 Waarom extra kalibratie?

    Brutoberekening addDictionaryAttacks() geeft een schatting van de "worst case" gerangschikt naar waarschijnlijkheid : de meest voorkomende wachtwoorden komen eerst.

    Hoge betrouwbaarheidskalibratie past een correctieve multiplier toe op basis van empirische waarnemingen:

    // 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.vaak ? 0,15: context.dictWord ? 0,5: 1,0;
    Break;
    Multiplier common (0,15) : als het wachtwoord in de gemeenschappelijke prioriteitenlijst staat, wordt het gemiddeld gevonden op het 15e percentiel van de lijst Multiplier dictWord (0,5) : een gemeenschappelijk woordenboek woord wordt gevonden op gemiddelde tussentijdse van een goed geordende lijst. Multiplier 0.5 → 2× sneller dan de uniforme scan.

    11.2 Academische Kalibratiebronnen

  • Ur et al. (2012) Hoe meet uw wachtwoord? (USENIX Security): analyse van de verdeling van wachtwoorden in echt corpus. Gemeenschappelijke woorden: gevonden in de eerste 10.000 proeven voor 95% van de gevallen.
  • Weir et al. (2009) Wachtwoord kraken met behulp van probabilistische contextvrije grammatica's Puur woordenboek woorden worden gevonden in de eerste 200.000 proeven van een ordelijke aanval.

  • 12. Waarschijnlijkheid van toepasbaarheid en betrouwbaarheid score

    12.1 Scoresysteem

    Time2Crack rekent niet alleen een tijd uit, maar evalueert ook de kans dat de woordenboekaanval de snelste aanval is, via een multifactor scoresysteem:

    // Score d'applicabilité (0-1)
    case "dict":
      return context.common ? 0.99 : context.dictWord ? 0.85 : 0;
  • 0,99 als common Het wachtwoord is in HIBP → de woordenboek aanval geldt met maximale zekerheid.
  • 0,85 als dictWord Een woordenboekwoord is kwetsbaar, maar een aanvaller moet de juiste taalwoordenlijst hebben.
  • 0 Anders: de woordenboekaanval is niet van toepassing (geen lexicale kwetsbaarheid gedetecteerd).
  • 12.2 Bewijsscore

    Parallel met de toepasbaarheidsscore registreert een "bewijs" score de waargenomen signalen:

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

    Een bewijsscore van 2 (woord in zowel HIPP als het taalwoordenboek) verhoogt het uiteindelijke vertrouwen van 0,08 (2 × 0,04).

    12.3 Definitieve betrouwbaarheidsscore

    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
    

    row.confidence = Math.max(0, Math.min(1, Wiskunde.max(toepasselijkheid, basis) + bewijsBoost - specifieke straf ));

    Voor een wachtwoord common met dictWord ook gedetecteerd:

  • 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
  • Maximale betrouwbaarheid: De woordenboek aanval is de primaire aanval ondubbelzinnig.


    13. Bloom filter RockYou: lokale detectie van wijdverbreide wachtwoorden

    13.1 Achtergrond

    Naast de HIPP verificatie (die een netwerkoproep vereist), bevat Time2Crack een Bloomfilter Een bloom filter is een probabilistische data structuur die u toelaat om te testen behoren tot een set met een waarschijnlijkheid van valse positieven (~1%), zonder het opslaan van de elementen zelf.

    13.2 Voordelen van het bloeifilter

    CriteriaHIPP k- anonimiteitBloomfilter lokaal ---------------------------------------------- Dekking~14 miljard~14 miljoen (RockYou) Matigheid50<1 ms (lokaal) Vertrouwelijkheidk-anonimiteit (5 SHA-1 tanks)100% lokaal, niets verzonden Valspositief0%~1% GrootteAPI~2

    13.3 Werking van dubbele hashing

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

    // Dubbele hashing: h1 en h2 zijn twee onafhankelijke hash functies const h1 = fnv1a32(w, 2166136261); // FNV1a met standaardzaad const h2 = fnv1a32(w, 0x811c9dc5); // FNV1a met alternatief zaad

    voor (let i = 0; i < k; i++) { const pos = (h1 + (i (h2) >>> (0)) % m; //k posities in de bitarray const byteIdx = Math.floor(pos / 8); const bitIdx = pos % 8;

    # If a bit is 0: the word is DEFINITIEFly absent if ((bitArray[byteIdx] & (1 < < bitIdx)) = 0) return false; } // Alle bits zijn op 1 : het woord is waarschijnlijk aanwezig (met 1% van FP) return true; }

    De FNV1a double-hashing zorgt voor een uniforme verdeling van de posities in de bit array, het minimaliseren van botsingen en het houden van de vals positieven tarief dicht bij 1%.

    13.4 Laden en binair formaat

    Het bloeifilter wordt opgeslagen in data/rockyou.bloom Een binair bestand met:

  • Kop (20 bytes): magisch getal (0x424c4f4f = "BLOO"), versie, m (bit-arraygrootte), k (aantal hashfuncties), n (aantal elementen)
  • Betaling : bit array (m/8 bytes)
  • De belasting wordt handmatig geactiveerd door de gebruiker (knop in de UI), niet automatisch bij het laden van de pagina om de eerste prestaties te behouden.


    14. Vergelijking met afgeleide aanvallen

    De "zuivere" woordenboek aanval is de eerste van een familie van aanvallen die allemaal een gemeenschappelijke wortel delen: een lexicale woordenlijst. Time2Crack implementeert 7 offline kraken modellen (bruto kracht, woordenboek, hybride, masker, PCFG, Markov, combinator), elk aanvallen van het wachtwoord vanuit een andere hoek.

    14.1 Woordenboek vs Hybride

    CriteriaWoordenboekHybride (dict+ rules) ------------ [57]---------------------- KandidatenWoordenboek woorden alsWoorden + ~1000 mutaties per woord Sleutelruimte200.000 kandidaten~200 miljoen kandidaten Gebarsten voorbeelden"wachtwoord," "zon""P@ssw0rd!", "s0l3il2024" Relatieve snelheid1000× snellerVeel breder bereik Van toepassing indienexact woord in de lijstWachtwoord afgeleid van een dict woord

    De hybride aanval begint waar het pure woordenboek stopt: het neemt elk woord uit de wordlist en past systematische mutatieregels (hashcat "best64.rule" in gedachten).

    14.2 Woordenboek vs PCFG

    CriteriaWoordenboekPCFG ------------ [57]------ ModelVaste kandidatenlijstProbabilistische structuur grammatica ForcerenNauwkeurige woordenWord+Digit structuren, Cap+lower+sym Voorbeeld"wachtwoord" → "Wachtwoord123" → DekkingBekende woordenschatAlgemene menselijke structuren

    Een wachtwoord als "Password123" kan onopgemerkt blijven in een woordenboek (het exacte woord "Password123" kan niet worden vermeld) maar zal zeer snel worden gekraakt door PCFG die de structuur herkent [Majuscule][minuscules][cijfers].

    14.3 Woordenboek vs Markov

    CriteriaWoordenboekMarkov ------------ [57]-------- KandidatenVooraf samengestelde lijstVliegen gegenereerd door statistisch model DekkingBekende woordenschatElke waarschijnlijke "menselijke" volgorde VoordeelZeer snel op exacte woordenBevat onbekende woorden Voorbeeld"zonneschijn" →"sunsh1ne" potentieel

    Markov behandelt gevallen waarin het wachtwoord eruit ziet als een menselijk woord zonder in een lijst te staan.

    14.4 Woordenboek vs Credential Stuffing

    CriteriaWoordenboekCredential Stuffing ------------ [57]--------------------- DoelEen hash krakenTest een specifieke login MechanismeHash lokale berekeningVerbindingspogingen op afstand BronAlgemene woordenlijstPaar login/wachtwoord lekken DefensieSterk hash-algoritmePrijsbeperking, MVO, IP-blokkering

    Credential vulling valt een hash niet aan, het probeert direct inloggen/wachtwoordparen op remote services. Het is conceptueel anders dan kraken, maar deelt dezelfde databron (HIBP/fail).


    15. Beperkingen van aanval woordenboek

    15.1 Intrinsieke grenswaarden

    1. Alleen bekende woordenschat Een uitgevonden wachtwoord dat niet lijkt op een bestaand woord en niet in HiBP is ondoorgrondelijk voor pure woordenboek aanval. "Xqz7mK9pL" zal nooit in een woordenlijst. 2. Taaldekking Een aanvaller die zich richt op een Franstalige gebruiker zonder een Franse woordenlijst mist woorden zoals "ephemeral," "grenouille" of "bricolage" die niet in standaard Engelse woordenlijsten staan. 3. Nieuwe wachtwoorden Een geloof dat zojuist is gemaakt en nooit is gevlucht zal niet in HiBP zijn, zelfs als het zeer gebruikelijk is, zal het moeten wachten tot het volgende lek om het te vinden. 4. Zeer lange wachtwoorden Een wachtwoord bestaande uit een lang uitgevonden zin ("MaGrandeAventure2024SousLesEtoiles") zal in geen enkele woordenlijst staan, zelfs als elk woord apart genomen triviaal is. Dit is het idee achter de wachtwoordzinnen, behandeld door andere aanvallen (Combinator, PRINCE).

    15.2 Wat Time2Crack's berekening niet Model

    Context Woordenlijsten : een aanvaller die zich richt op een specifieke sector zal aangepaste wordlists (medische termen voor ziekenhuizen, video game slang voor gaming platforms) bouwen. Time2Crack maakt gebruik van generieke wordlists. Gecombineerde bruto kracht Wordlists : Hulpmiddelen zoals CeWL (Custom Word List Generator) kunnen termen uit de doelwebsite halen om een aangepaste woordenlijst te bouwen. Dit niveau van targeting is niet gemodelleerd. Recente lekken nog niet in HIPP tussen het moment dat een lek zich voordoet en de integratie ervan in HIPP, circuleren de gecompromitteerde referenties in particuliere forums zonder toegankelijk te zijn via de publieke API. Hash-algoritmen niet behandeld Time2Crack modellen 6 algoritmen (MD5, SHA-1, SHA-256, NTLM, bcrypt, Argon2id). Algoritmes zoals SHA-512, scrypt, of PBKDF2 hebben verschillende profielen.

    16. Doeltreffende verdediging

    16.1 Wat beschermt tegen woordenboekaanval

    Moderne hash algoritme (bcrypt, Argon2id) Dit is de meest effectieve verdediging aan de server kant.
  • MD5: scheur in ~1 microseconde
  • bcrypt kosten 12: barsten in 35 uur
  • Argon2id (aanbevolen parameters): barst in jaren
  • Het verschil van 10+ orden van grootte tussen MD5 en Argon2id maakt het woordenboek wachtwoord "zon" immuun in de praktijk als beschermd door Argon2id

    Enkel zout per rekening Een zout voorkomt voorgecalculeerde tafelaanvallen en dwingt de aanvaller om voor elk account individueel te herberekenen. Het beschermt niet doelgerichte woordlijstaanvallen (de aanvaller kan nog steeds de 200.000 woorden met het zout testen), maar maakt de regenboogtafels ongeldig en maakt enorme aanvallen op grote databases onmogelijk. Wachtwoordlengte Een wachtwoord van een enkel woordenboekwoord (8-10 tekens) is kwetsbaar. Een wachtwoordzin van 4-5 woorden ("cheval-lumière-forest-voyage") is bestand tegen de pure woordenboekaanval, maar niet tegen de Combinatoraanval, vandaar het belang van de lengte EN de randomiteit. Willekeurig gegenereerde wachtwoorden De echte oplossing: gebruik een wachtwoordbeheerder die lange willekeurige wachtwoorden aanmaakt (20+ karakters van alle typen). Deze wachtwoorden zullen nooit in een woordenboek staan. Multifactor-authenticatie (MFA) De MVO voorkomt geen scheur offline (de aanvaller herstelt hashs en scheuren offline), maar beschermt tegen credential vulling (gebruik gebarsten referenties om te verbinden). Snelheidsbeperking en detectie van anomalieën Beschermt tegen online aanvallen (directe verbinding pogingen), niet tegen offline kraken van gestolen hashs.

    16.2 Wat beschermt niet

    Eenvoudige vervanging van leet : "wachtwoord" → "p@ssw0rd" Toegevoegd nummers aan het einde : "wachtwoord" → "password1" onder de eerste geteste regels. Oorspronkelijke betaling : "wachtwoord" → "Wachtwoord" "standaard kapitalisering regel. Cijfers en symbolen indien het woord herkenbaar blijft "zonneschijn!" staat in elke woordenlijst die "zonneschijn" bevat met basisregels. Complexiteit opgelegd zonder lengte "P@s1w" voldoet aan de complexiteitscriteria (maj, min, nummer, symbool) maar is korter en voorspelbaarder dan "correcthorsebaterystaple."

    16.3 Praktische aanbevelingen

  • Wachtwoordbeheer gebruiken (Bitwarden, 1Password, KeePass)
  • MVO overal inschakelen Zelfs als het wachtwoord wordt aangetast, kan de aanvaller geen verbinding maken.
  • Controleer HIPP regelmatig Of zijn e-mail in bekende lekken zit.
  • Gebruik nooit een wachtwoord Credential vulling exploiteert cross-services hergebruik.
  • Voor memorizeerbare wachtwoorden : 5+ woorden wachtwoordzinnen willekeurig (niet "paard-correct-battery-agrafe-violet" maar woorden echt getrokken door lot).

  • 17. Referenties

    Primaire bronnen (academische studies)

    Morris, R., & Thompson, K. (1979). Wachtwoordbeveiliging: een dossiergeschiedenis. Mededelingen van de ACM, 22(11), 594, 597.
  • Eerste academische analyse van Unix-wachtwoorddistributie
  • Herkent dat ~1/3 wachtwoorden zijn gewone Engelse woorden
  • Klein (1990).
    Foiling the cracker: Een overzicht van, en verbeteringen aan, wachtwoordbeveiliging. UNIX Security Symposium Proceedings, 5
  • 15.000 Unix-wachtwoordscheur: 25% gebarsten in een paar uur
  • Document eerste woordenlijsten en mutatieregels
  • Weir, M., Aggarwal, S., de Medeiros, B., & Glodek, B. (2009).
    Wachtwoord kraken met behulp van probabilistische context-vrije grammatica. IEEE Symposium over beveiliging en privacy.
  • Basisreferentie op PCFG aanval en vergelijking met pure woordenboek aanval
  • Bepaalt dat woordenboek woorden worden gevonden in de eerste 200.000 pogingen van een ordelijke aanval
  • Geplaatst in Time2Crack voor de HF-kalibratie van de woordenboekaanval (multiplier 0.5)
  • Ur, B., Kelley, P. G., Komanduri, S., Lee, J., Maase, M., Shay, R., Vaniea, K., Bauer, L., & Cranor, L. F. (2012).
    Hoe meet uw wachtwoord omhoog? Het effect van krachtmeters op de wachtwoord-gebruiker keuze. 21e USENIX Security Symposium.
  • Analyse van de verdeling van gewone woorden in het echte corpus
  • Gemeenschappelijke woorden gevonden in de eerste 100.000 pogingen
  • Geplaatst in Time2Crack voor HF-kalibratie common ? 0.15 (boven 10k niveau)
  • Bonneau, J (2012).
    De wetenschap van zingen: Het analyseren van een anoniem corpus van 70 miljoen wachtwoorden. IEEE Symposium over beveiliging en privacy.
  • Studie van 70 miljoen geanonimiseerde Yahoo wachtwoorden
  • Kwantificeert de feitelijke distributie van wachtwoorden, bevestigt de machtswet
  • Het meten van de effectiviteit van credentiële vullingen (2.5% hit rate op reële rekeningen)
  • Ma, J., Yang, W., Luo, M., & Li, N. (2014).
    Een studie van probabilistische wachtwoordmodellen. IEEE Symposium over beveiliging en privacy.
  • Vergelijking van probabilistische modellen (woordenboek, Markov, PCFG) op real corpus
  • Best64.rule geprioriteerd → ~40% reductie in gemiddelde tijd voor woordenboek woorden
  • Geplaatst in Time2Crack voor HF-kalibratie van hybride aanval
  • Wheeler (2016).
    zxcvbn: Low-budget wachtwoord sterkte schatting. 25e USENIX Security Symposium, 157
  • Dwing schattingssysteem met behulp van wordlists en patronen
  • Analyse van cognitieve vooroordelen bij het aanmaken van wachtwoorden
  • Meet de effectiviteit van woordenlijsten in verhouding tot brutokracht
  • Pasquini, D., Cianfriglia, M., Ateniese, G., & Bernaschi, M. (2021).
    Het verminderen van vooroordelen bij het modelleren van paswoordsterkte in de echte wereld via diep leren en dynamische woordenboeken. 30e USENIX Security Symposium.
  • Beoordeling van schattingsmodellen voor feitelijke aanvallen
  • Bevestigt dat woordenboeken het meest effectieve hulpmiddel voor gewone menselijke wachtwoorden blijven
  • Industriële bronnen

    Ik ben al eens geplooid. (2024).
    Wachtwoorden. https://haveibeenpwned.com/Passwords
  • Basis van ~14 miljard unieke wachtwoorden van gedocumenteerde lekken
  • k-anonimiteit API gebruikt door Time2Crack voor real-time verificatie
  • Hive Systems. (2025).
    2025 Hive Systems Paswoordtabel.
  • Benchmarks 12× RTX 4090: MD5 2,027 GH/s, NTLM 3,462 GH/s, bcrypt cost 5: 2,2 MH/s
  • Belangrijkste bron van hash rates gebruikt in Time2Crack
  • Hashcat. (2025).
    Geavanceerde wachtwoord herstel.
  • Referentietool voor GPU-benchmarks
  • Documentatie van mutatieregels (best64.rule, OneRuleToRegleThemAll)
  • Gosney, J (2012).
    Strictures op Lee et al. en Probabilistic Password Cracking. Passwordscon procedure.
  • Eerste openbaar gedocumenteerde multi-GPU benchmarks
  • Referentie voor de kalibratie van regelgebaseerde aanvallen
  • Miessler, D. (2024).
    Seclists Een verzameling van meerdere soorten lijsten gebruikt tijdens beveiligingsbeoordelingen. GitHub.
  • Bron van Wikipedia-taalwoordenlijsten gebruikt in Time2Crack
  • Woordenlijst in het Engels, Frans, Spaans, Portugees, Duits, Turks
  • Secundaire bronnen (context)

    Troy Hunt. (2013).
    Inleiding 306 Miljoen gratis downloadbare Pwned Wachtwoorden. Troyhunt.com.
  • Aanvankelijke oprichting van de HIB-dienst en uitleg van het k-anonimiteitsprotocol
  • Thomas, K., et al. (2019).
    Het beschermen van accounts tegen geloofwaardigheid vulling met wachtwoord break alerting. 28e USENIX Security Symposium.
  • Google/Stanford studie over de bescherming van gecompromitteerde referenties
  • Bevestigt de effectiviteit van k-anonimiteit als privacymechanisme
  • Wang, D., Cheng, H., Wang, P., Huang, X., & Jian, G. (2016).
    Zipf's wet in wachtwoorden. IEEE Transactions on Information Forensics and Security, 12(11), 2776
  • Wiskundige formalisering van machtsrecht in wachtwoorddistributie
  • Bevestigt dat Zipf-distributie alle bekende grote corpus bevat
  • Webbronnen geciteerd in de Time2Crack-toepassing

    IEEE Xplore (dictionele referentie). https://ieeexplore.ieee.org/document/6234435
  • Verwante bron in descDict (app.js) voor de volgorde van dekking van topwoordenboeken.
  • HIPP API bereik (k-anonimiteit). https://api.pwnedpasswords.com/range/
  • Eindpunt daadwerkelijk gebruikt door Time2Crack voor k-anonimiteit verificatie (sha1 prefix verzoek).
  • HiBP oproep patroon in code. https://api.pwnedpasswords.com/range/${prefix}
  • De exacte vorm van de URL die in de documentcodevoorbeelden wordt aangeroepen (geïnfiltreerd SHA-1 prefix).

  • Document gegenereerd voor Time2Crack Project Versie 1.0 Versie 2026-04-01 Broncode: app.js (functies addDictionaryAttacks, isDictWord, deLeet, loadDictionary, applyHighFidelityCalibration, bloomHas)