Atak słownika - Kompleksowa obsługa

Dokument referencyjny projektu Time2Crack
Odbiorcy: deweloperzy, badacze bezpieczeństwa, zaawansowani użytkownicy

Spis treści

  • Przegląd
  • Tło historyczne i akademickie
  • Fundamenty koncepcyjne: dlaczego słowniki działają
  • Architektura nowoczesnego ataku słownika
  • Korpus prawdziwych haseł
  • K- Anonimowa weryfikacja HIBP: atak w czasie rzeczywistym
  • Time2Crack Język Wordlist
  • Wykrywanie słownika w Time2Crack: isDictWord()
  • De- leetification: jak atakujący decodes zastępowania
  • Obliczanie czasu krakowania: addDictionaryAttacks()
  • Wysoka kalibracja wierności: applyHighFidelityCalibration()
  • Prawdopodobieństwo zastosowania i stopień ufności
  • Filtr Bloom RockYou: lokalne wykrywanie powszechnych haseł
  • Porównanie z atakami pochodnymi
  • Ograniczenia słownika ataku
  • Skuteczna obrona
  • Odniesienia

  • 1. Przegląd

    Atak słownika jest najstarszą metodą łamania haseł, najprostszą koncepcyjnie i statystycznie najskuteczniejszą na większości prawdziwych haseł ludzkich. Jego zasadą jest testowanie, w kolejności malejącej prawdopodobieństwa, wstępnie skompilowanej listy kandydatów - "słownika" - zamiast wyczerpująco wyliczać wszystkie możliwe kombinacje, jak to robi surowa siła.

    Dlaczego jest okropnie skuteczny? Ludzie nie wybierają swoich haseł losowo. Dekady wycieków danych pokazują, że rzeczywisty rozkład haseł jest niezwykle skoncentrowany: najczęstsze 1000 haseł stanowią około 5 do 10% wszystkich kont online. Najczęstsze 1 milion pokrywa 40 do 60%. Dobrze zbudowany atak słownika przetestuje tych kandydatów w milisekundach do sekund - gdzie siła brutto zajęłaby miliony lat.

    W Time2Crack, atak słownika modeluje dwa odrębne, ale uzupełniające się mechanizmy:

  • Weryfikacja HIBP (Czy I Been Pwned): Konfrontacja hasła do ~ 14 miliardów unikalnych referencji z wycieków danych historycznych. Jeśli hasło jest tam, napastnik odkryje go w ułamku sekundy.
  • Język Wordlist Wykrywanie Wspólne słowo językowe - "słońce" lub "słońce" - jest podatne nawet jeśli nie jest w HiBP.
  • Te dwa badania są niezależne i uzupełniające: HiBP obejmuje dokładne poświadczenia kompromisowe, lista słów obejmuje wspólne słowa jeszcze nie wyciekły.


    2. Tło historyczne i akademickie

    2.1 Początki

    Atak słownika poprzedza współczesną erę bezpieczeństwa komputera. Pierwsze systemy Unix przechowywane hasła w języku prostym w /etc/passwd, co każdy atak słownika trywialny jak tylko plik był dostępny.

    Chronologia etapów pośrednich : RokZdarzenie Więc...To... 1979Morris & Thompson: Pierwszy artykuł akademicki na temat bezpieczeństwa haseł Unix. Zobacz, że 1 / 3 haseł wybiera wspólne angielskie słowa 1988Morris Worm: częściowo rozprzestrzenia się poprzez słownik 432 słów + host / usr / share / dict / words 1993Crack 5.0 (Alec Muffett): Pierwsze narzędzie ataku słownika publicznego na Unix, zawiera zasady mutacji 2000John Rozpruwacz: popularyzuje listy słów w połączeniu z regułami hashcat (tryb wordlist + rules) 2009RockYou wyciek: 14,3 mln jasnych haseł ujawnia rzeczywisty rozkład ludzkich wyborów 2012Czy byłem Pwned (Troy Hunt): pierwsza publiczna służba audytowa dla sfałszowanych mandatów 2013Adobe break: 153 mln kont - najlepsze hasła stają się identyfikowalne na podstawie analizy częstotliwości nawet na niesolonych hashs 2016Hashcat open source v3.0: masywna optymalizacja ataków listy słów na GPU (MD5: 2 TH / s na 8 GPU klaster) 2019Kolekcja # 1-5: 2.7 mld par logowania / hasła skompilowanych, publicznie dystrybuowanych 2024HIBP v8: ~ 14 miliardów unikalnych haseł indeksowanych

    2.2 Wycieki z zakładu

    Niektóre przecieki zmieniły krajobraz ataku przez słownika, ujawniając rzeczywisty rozkład haseł ludzkich:

    RockYou (2009) Deweloper przechowywał 14,3 miliona haseł w zwykłym języku.
  • Pierwsze 10 haseł pokryło ~ 5% rachunków
  • Pierwsze 1000: ~ 20% kont
  • Dystrybucja postępuje zgodnie z prawem władzy - potwierdzając, że ludzie "myślą tak samo"
  • LinkedIn (2012) - 6,5 miliona niesolonych SHA-1. Adobe (2013) - 153 miliony kont. Czy jestem Pwned (2013- obecny) - Progresywna agregacja publicznych przecieków, pozwalająca Troy Huntowi stworzyć bazę referencyjną używaną na całym świecie.

    2.3 Wartości odniesienia dla ataku słownika

    Lista 200 000 wpisów testowana z prędkością RTX 4090:

    AlgorytmPrędkośćCzas dla kandydatów na 200k To...Czy...To... MD5168.9 GH / s- 1,2 nanosekundy SHA-150,86 GH / s- 3.9 nanosekundy SHA- 25622, 68 GH / s- 8,8 nanosekundy NTLM288,5 GH / s~ 0,7 nanosekunda bcrypt (koszt 5)184 kH / s- 1,09 sekundy. Argon2id- 67 H / s- 50 minut

    Atak słownika jest więc niemal natychmiastowy dla MD5, SHA-1 i NTLM - i pozostaje bardzo szybki nawet dla bcrypt na małych listach.


    3. Fundamenty koncepcyjne: dlaczego słowniki działają

    3.1 Prawo władzy haseł ludzkich

    Wszystkie badania empiryczne zbliżają się do tej samej obserwacji: dystrybucja haseł ludzkich nie jest jednorodna - następuje prawo władzy (Zipf). Niektóre hasła koncentrują nieproporcjonalną część wyborów.

    Formalnie : jeżeli wszystkie hasła są klasyfikowane przez zmniejszającą się częstotliwość, częstotliwość hasła rank do jest proporcjonalne do r ^ (- α) z α 1,5 do 2 Według korpusu.

    Bezpośrednie konsekwencje: 10 najczęściej używanych haseł Napastnik, który testuje tylko 10 kandydatów ma już szansę w 20 odnieść sukces - statystycznie, jest ogromny dla ilości generowanego hałasu.

    3.2 Bia kognitywne w tworzeniu haseł

    Ludzie nie wybierają losowo, systematycznie stosują heurystykę, która czyni ich hasła przewidywalnymi:

  • Bias pamięci : słowa łatwe do zapamiętania (nazwy zwyczajowe, imiona, określenia kultury popularnej) są zbyt reprezentowane
  • Dostępność Bias Hasło odzwierciedla bezpośrednie środowisko (nazwa zwierząt domowych, zespół sportowy, charakter seryjny)
  • Przewidywalne czynniki zastępcze : "e" → "3", "a" → "@", "o" → "0" - użytkownik uważa, że hasło jest mocne, ale te substytucje są dokładnie pierwsze, że napastnik próbuje zrobić
  • Kompletne Bias : dodanie numeru lub symbolu na końcu słowa (hasło 1, słońce!)
  • Biografia kulturowa Wspólne hasła są powiązane z językiem i kulturą użytkownika ("Soleil123" we Francji, "Sommer123" w Niemczech)
  • 3.3 Koncepcja "hasła już na liście"

    Hasło może być na liście ataków z dwóch różnych powodów:

    Powód 1 - Jest w HiBP Dokładna wiarygodność została naruszona w przeszłości wycieku. Atakujący nie musi zgadywać - testuje znane referencje jeden po drugim, w kolejności częstotliwości. Jeśli serwer docelowy akceptuje akredytację, jest skończony. Powód 2 - znajduje się na liście słowników Hasło jest zwyczajnym słowem wspólnego słownictwa. Nawet jeśli nigdy nie uciekł, to jest we wszystkich listach słów ataku, ponieważ jest to oczywisty kandydat. "Paillon" może nie być w HiBP, ale jest to w francuskiej liście słów jakiegokolwiek poważnego narzędzia pękania.

    Te dwa przypadki odpowiadają atakom o innym charakterze, z różnymi prędkościami - i właśnie takie są modele Time2Crack.


    4. Architektura nowoczesnego ataku słownika

    4.1 Gazociąg ogólny

    Nowoczesny atak słownika odbywa się w kilku fazach:

    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)
    

    Faza 2: Wordlist Preprocessing - Sortuj według częstotliwości (najprawdopodobniej najpierw) - - Odliczanie (nie dwa razy ten sam kandydat) - - filtracja długości (długość docelowa + ± 2) - - Normalizacja (małe skrzynie, Unicode NFC)

    Faza 3: Obliczanie haszów kandydackich Dla każdego kandydata w liście słów: Roszpunka warzywnakandydat = hashalgo (w) Promocyjna reklama hashkandydat = = hashCel: USTALENIA - Prędkość: 168 GH / s dla MD5 na RTX 4090

    Faza 4: Analiza wyników Sprawozdanie dotyczące pękniętych haseł, statystyki zasięgu

    4.2 Optymalizacja sprzętu

    Nowoczesne ataki słowników są bardzo podobne na GPU:

  • Hashcat (narzędzie referencyjne): wykorzystuje rdzenie CUDA GPU, aby porównać miliardy symultanicznych obliczeń haszu
  • Pipeline wektorowy : na RTX 4090, pojedyncza instrukcja SIMD oblicza 8 do 16 hashs MD5 równolegle
  • GPU cache : lista słów jest załadowana w VRAM, aby zminimalizować opóźnienie pamięci
  • Łatanie : kandydaci są wysyłane do GPU w partiach milionów w celu maksymalizacji przepływu
  • Dla słownika zawierającego 14 miliardów wpisów (rozmiar HIBP) na 12 × RTX 4090:

  • MD5: 14e9 / (168.9e9 × 12) 6.9 sekund
  • koszt bcrypt 5: 14e9 / (184000 × 12) 6 337 lat
  • Ta różnica ~ 9 rzędów wielkości pomiędzy MD5 i bcrypt wyjaśnia, dlaczego wybór algorytmu haszu jest krytyczny.

    4.3 Porządek testowy kandydatów

    Lista słów nie jest testowana w porządku alfabetycznym - jest posortowane przez malejące prawdopodobieństwo :

  • Najczęstsze hasła escape (RockYou top 100)
  • Wspólne hasła wielousterek (lista priorytetowa HIBP)
  • Wspólne słowa języka docelowego
  • Właściwe nazwy (imiona, miasta, gwiazdy)
  • Terminy tematyczne związane z celami
  • Zmiany i sprzęganie
  • Ten rodzaj zapewnia, że jeśli hasło jest "niskie", zostanie znalezione w pierwszych milisekundach - niezależnie od prędkości haszu.


    5. Korpus prawdziwych haseł

    5.1 Czy zostałem zaszczepiony (HIBP)

    Rozmiar ~ 14 miliardów unikalnych haseł (2024) Źródło : agregacja przecieków publicznych od 2013 r. Format : SHA-1 posortowane według częstości występowania Dostęp publiczny : k- anonimowość API, pełne pobieranie haszu dostępne dla obrońców

    HiBP jest globalnym punktem odniesienia, ponieważ:

  • Obejmuje prawie wszystkie główne przecieki publiczne
  • Hashs są sortowane według częstotliwości - najczęściej haseł są testowane jako pierwsze
  • Jest aktywnie utrzymywany (nowe przecieki dodawane w sposób ciągły)
  • Napastnik z kompletnym wysypiskiem HIBP może najpierw przetestować ~ 14 miliardów kandydatów w kolejności malejącej częstotliwości. Dla niesolonych algorytmów (MD5, SHA-1), ta lista obejmuje w kolejności 50- 70% wszystkich prawdziwych haseł online.

    5.2 RockYou (2009) - Founding corpus

    Rozmiar : 14.3 mln jasnych haseł Kluczowe cechy : WskaźnikHasłoZdarzenia% korpus Czy...- Tak.- Tak.- Tak. 1123456290 7312,03% 21234579 0780, 55% 312345678976 7900, 54% 4hasło59 4620, 42% 5Iloveyou49 9520, 35% Top 10-- 650,000- Top 100-~ 1 200 0008, 4% Top 1 000-~ 2 500 000~ 17,5% 10 000-- 4 500 000- 31,5% Edukacja Test tylko 10,000 kandydatów (100 μs MD5 prędkości) kompromisy ~ 31% bazy danych MD5 kont chronionych.

    5.3 Zbiory specjalistycznych list słów

    Sektory (Daniel Miessler): kolekcja słów o wartości ~ 4 GB:
  • Hasła (RockYou, górne hasła różne przecieki)
  • Bieżące zastosowania
  • Hasła posortowane według języka
  • Terminy techniczne, nazwy produktów, gwiazdy
  • Kaonashi : 1.3 mld wpisów lista słów skompilowana od publicznych wycieków Crackstation : 1.5 miliarda wpisów, w tym słowa ze wszystkich słowników Wikipedii w kilku językach Słabe przejście : agregacja ~ 8 miliardów wpisów pojedynczego prawdziwego hasła

    Te korpusy są do publicznego pobrania - ich istnienie jest utrwalonym faktem ofensywnego bezpieczeństwa.


    6. K- Weryfikacja anonimowości HIBP: Atak czasu rzeczywistego

    6.1 Protokół k- anonimowość

    Time2Crack zawiera kontrolę HIBP w czasie rzeczywistym, która odtwarza dokładnie to, co napastnik zrobiłby z bazą danych HIBP - ale nigdy nie przekazuje hasła w języku prostym lub jego pełnym haszu.

    Protokół k- anonimowości działa następująco:

    1. Calculer SHA-1(password)      → par exemple "CBFDAC6008F9CAB4083784CBD1874F76618D2A97"
    
  • Wyślij tylko 5 pierwszych znaków do API HIBP: "CBFDA"
  • API zwraca wszystkie przyrostki SHA-1 zaczynając od "CBFDA" (około 400- 600 hash)
  • Szukaj lokalnie, jeśli reszta haszu ("C6008F9CAB4083784CBD1874F76618D2A97") znajduje się na liście
  • Jeśli znaleziono: hasło zostało naruszone (HIBP zwraca również liczbę przecieków)
  • Gwarancja poufności Serwer HIBP nigdy nie widzi pełnego haszu (więc nie może zidentyfikować hasła), nie mówiąc już o wyraźnym haśle. Ostateczne obliczenia są wykonywane lokalnie. Co to oznacza dla ataku? : jeżeli HIBP zwraca dopasowanie z wysoką liczbą (np. 9547,236 ukazań dla "123456"), oznacza to, że napastnik z bazą danych HIBP testującą ten wskaźnik kredytowy znajdzie go w bardzo wysokiej pozycji na liście uporządkowanej według częstotliwości - w ułamku nanosekund.

    6.2 Realizacja w Time2Crack (app.js)

    Kontrola HIBP jest asynchroniczna i nieblokująca. Hasło jest natychmiast analizowane metodami lokalnymi, a kontrola HIBP kończy wynik:

    // 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 = hount fetch ( https://api.pwnedpasswords.com/range/${prefix} ); linie const = oczekuj odpowiedzi .text ();

    dla (const linii linii.split ('\ n')) { const [hashSuffix, count] = line.split (":"); if (hashSuffix.toLowerCase () = suffix.toLowerCase ()) { powrót parseInt (liczba); / / liczba wycieków ¶ ¶ powrót 0; / / nie znaleziono ¶

    Dane dotyczące działania HIBP :
  • Typowe opóźnienie API: 50- 200 ms (sieć)
  • Zwrócona objętość przyrostów: ~ 400- 600 na zapytanie
  • Fałszywy wynik dodatni: 0 (SHA-1 jest deterministyczny)
  • Fałszywy wynik ujemny: 0 (jeśli w HiBP, zawsze zwracane)
  • 6.3 Interpretacja Hrabiego HIBP

    Liczba zwrócona przez HiBP wskazuje liczbę razy to dokładne hasło pojawiło się w indeksowanych przeciekach:

    LiczInterpretacjaCzas pęknięcia (MD5, 12 × RTX 4090) Więc...{C: $aaccff} Tłumaczenie:- Nie. > 1 000 000Top 100 Świat< 1 nanosekunda 10,000-1,000,000Bardzo często< 10 nanosekund 1 000-10 000Często< 100 nanosekund 100- 1000Niezbyt często, ale znane< 1 mikrosekundy 1- 100Rzadkie, ale zagrożone< 10 mikrosekund

    Nawet liczba 1 (hasło pojawiło się tylko raz w przecieku) wskazuje na podatność: jeśli napastnik celuje w to konto specjalnie i ma listę referencji danego przecieku, znajdzie je.


    7. Time2Crack Język Wordlist

    7.1 Dlaczego listy słów oprócz HIBP

    HiBP obejmuje dokładne poświadczenia kompromisowe - ale nie zwykłe słowa nigdy nie uciec jeszcze. Użytkownik frankofonu, który wybiera "efemeryczne" jako hasło może nie być w HiBP (słowo jest mało prawdopodobne w referencjach anglofonu), ale znajduje się na francuskiej liście słów każdego napastnika celem systemu frankofonu.

    Lista słów Time2Crack obejmuje tę lukę:

    JęzykŹródłoSzacunkowa wielkość Bo...Bo...{C: $aaccff} Tłumaczenie: AngielskiSecLists Wikipedia PL200,000 wpisów Francuski (fr)SecLists Wikipedia PL- 150 000 wpisów HiszpańskiSecLists Wikipedia ES- 150 000 wpisów Portugalski (pt)SecLists Wikipedia PT- 120 000 wpisów NiemieckiSecLists Wikipedia DE- 180 000 wpisów Turecki (tr)SecLists Wikipedia TR100 000 wpisów Włoski (it)kkrypt0nn100 000 wpisów Polski (pl)kkrypt0nn~ 80 000 wpisów Niderlandy (nl)kkrypt0nn~ 80 000 wpisów Zastosowanie filtra Zachowuje się tylko słowa o ≥ 4 znakach (znaki 1-3 są zbyt krótkie, aby były realistycznym hasłem, a ich włączenie zwiększyłoby listę bez wartości dodanej).

    7.2 Ładunek leniwy

    Listy wordlist nie są zawarte w kodzie - są ładowane na życzenie przy zmianie języka, aby spełnić budżet sieci:

    // app.js - loadDictionary()
    async function loadDictionary(lang) {
      if (DICTlang & DICTWORDS) return;  // Déjà chargé
      if (DICT/
    DICTPENDINGLANG = lang; / / oczekujący plik
    powrót;
    ¶
    DICTLOADING = true;
    

    const res = czekać fetch (data/wordlists/${lang}.txt); const text = wait res.text ();

    / / Convert to Set < string > for O (1) lookup DICTWORDS = nowy zestaw ( text.split ("\ n") .map (w = > w.normalize ("NFC") .trim () .toLowerCase ()) .filter (w = > w.długość > = 4) ); DICTLANG = Lang; DICTLOADING = false; ¶

    Dlaczego Set ? Struktura Set JavaScript gwarantuje O (1) przeglądanie - niezależnie od rozmiaru słownika (50 000 lub 200 000 wpisów), weryfikacja DICTWORDS.has(word) ma ten sam stały czas. Array wymagałoby O (n) na kontrolę, tj. do 200 000 porównań na kontrolę.

    Wczytywanie kolejki

    W DICTPRACALANG unika warunków wyścigu podczas szybkich zmian językowych:

    Scénario : l'utilisateur switche rapidement EN → FR → DE
    ├── EN demandé : DICTLOADING = false → początek pobierania PL
    FR wymagane podczas pobierania EN: DICTLOADING = true → DICTPRACALANG = "fr"
    ├── DE demandé pendant fetch EN : DICTLOADING = prawdziwe → DICTPENDINGLANG = "de" (crash "fr")
    - Fetch Ends: DICTLANG = "en", puis lance loadDictionary("de")
    └── Résultat : seule la dernière langue demandée est chargée

    Zachowanie to jest zamierzone: ostatnio wymagany język jest załadowany, nie wszystkie języki pośrednie.


    8. Wykrywanie słownika w Time2Crack: isDictWord()

    8.1. Operacja wykrywania

    Funkcja isDictWord(pw) określa, czy hasło pochodzi z bieżącego słownika:

    // app.js - ligne 2181
    function isDictWord(pw) {
      if (!DICT(WORDS) zwrot fałszywy;
    

    / / Normalizacja: NFC + Niska skrzynia const l = pw.normalize ("NFC") .toLowerCase ();

    / / Bezpośrednia weryfikacja jeśli (DICT)

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

    / / Zmiany morfologiczne const deleetWord = deLeet (pw); zmienności const = getMorphVariations (deleetWord);

    dla (const variation of variations) { jeśli (DICT)

    WORDS.has(variation)) return true; }

    zwrot fałszywy; ¶

    Linia detekcji 3 warstw :
  • Korespondencja bezpośrednia : Czy standardowe hasło jest w słowniku?
  • "słońce" → bezpośrednie uderzenie
  • "SOLEIL" → standard w "słońce" → hit
  • Korespondencja po leetifikacji : Czy hasło zawiera standardowe substytucje pozwoleń?
  • "s0l3il" → deLeet → "sun" → hit
  • "p @ ssw0rd" → deLeet → "hasło" → hit
  • Zmiany morfologiczne : czy hasło jest znanym wariantem morfologicznym?
  • "słońce" → różnorodność mnoga "słońce" → hit
  • "hasła" → zmiana "hasło" → hit
  • 8.2 Normalizacja jednorodna (NFC)

    Normalizacja normalize("NFC") zapewnia, że znaki akcentowane są traktowane konsekwentnie:

  • "e" może być reprezentowane w Unicode jako jednopunktowy kod (U + 00E9) lub jako "e" + łączący akcent (U + 0065 + U + 0301)
  • Bez normalizacji "kawa" i "kawa" (różne kodowanie) nie będą pasować
  • Normalizacja ta jest stosowana zarówno przy tworzeniu słownika, jak i przy sprawdzaniu - zapewniając prawidłową korespondencję dla języków akcentu (FR, ES, DE, PT itp.).

    8.3 Wpływ na wykrytą podatność na zagrożenia

    Kiedy isDictWord() Wracaj. truestosuje się kilka ataków:

  • Atak słownika sam: wynik ufności 0,85 (w porównaniu do 0, jeśli nie występuje)
  • Atak hybrydowy : hybridVuln = true → 1000 mutacji testowanych na bazie słownika
  • Atak PCFG : zwiększenie poziomu ufności (wykryta podstawa leksykologiczna)
  • Atak morfologiczny : wysoki priorytet w przypadku wykrycia wariantu morfologicznego

  • 9. Odleetyfikacja: jak atakujący dekoduje substytucje

    9.1 Leetspeak i jego ograniczenia jako ochrona

    Leetspeak (lub "1337 mowy") jest praktyką zastępowania liter podobnymi numerami lub symbolami wizualnymi: a→@, e→3, i→1 lub !, o→0, s→$Użytkownicy używają go do "wzmocnienia" wspólnych słów.

    Przykład : "hasło" → "p @ $$w0rd"

    Rzeczywistość: te substytucje są stosowane pierwsze zasady Nie stanowią prawdziwej obrony przed kompetentnym napastnikiem.

    9.2 Wdrożenie deLeet() w Time2Crack

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

    funkcja LeetWith (pw, oneMap) { let r = pw.normalize ("NFC") .toLowerCase (); dla (const [ch, reps] obiektów (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; }

    funkcja leet (pw) { / / Niepewność: "1" może być "i" lub "l" const with I = deLeetWith (pw, {i: "1!", l: "}); const with L = deLeetWith (pw, {l: "1", i: "!"});

    / / Jeśli słownik jest wczytany, preferuj wariant, który pasuje jeśli (DICT)SŁOWA) jeśli (DICT)WORDS.has (with L)) return with L; jeśli (DICT)WORDS.has (with I) return with I; ¶

    / / W przeciwnym razie: preferuj wariant z najmniejszą pozostałą liczbą const digestsI = (with I.match (/\ d / g) const digestsL = (with L.match (/\ d / g) cyfra zwrotna L < = cyfra I? z L: z I; ¶

    9.3 Zarządzanie wszechstronnością "1" → "i" lub "l"

    Zastępstwo "1" jest dwuznaczne: "1" może reprezentować "i" (jak w "1nfo" → "info") lub "l" (jak w "p1ayer" → "gracz"). Time2Crack rozwiązuje tę dwuznaczność poprzez:

  • Badanie obu wariantów ("with I" i "with L")
  • Jeśli słownik jest wczytany, preferuje wariant, który daje dopasowanie słownika
  • Bez słownika, preferując wariant, który pozostawia najmniejszą liczbę resztek (założenie: całkowite odleetyfikacja jest bardziej prawdopodobne)
  • Przykład :
  • "b1ue" → with I = "biue" (not in dict), with L = "blue" (in dict) → zwraca "blue"
  • "f1le" → with I = "file" (in dict), with L = "flle" (not in dict) → zwraca "file"
  • 9.4 Zastępstwa nieobjęte (celowo)

    Time2Crack nie obejmuje rzadkich lub niejednoznacznych substytucji poza wzorami LEETBASE. Jest to wybór projektu: pokrycie zbyt wielu przypadków zwiększyłoby fałszywe pozytywne (wykrywanie hasła jako "aktualnego słowa", podczas gdy nie jest). Uwzględnione wzorce obejmują > 95% rzeczywistej leetications obserwowane w korpusie.


    10. Obliczanie czasu pękania: addDictionaryAttacks()

    Logika obliczania

    // 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 = słaby? t ("nWeakPassword") ("nInLeaks") : dictWord? t (nDictHit) : t (nAbsentLeaks);

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

    10.2 Trzy poziomy wrażliwości

    Poziom 1 - Uszkodzenie (weak = true): ~ 100 / śledziona Hasło znajduje się w Top 100 na świecie ("hasło", "123456", "qwerty"...). Napastnik testujący te 100 priorytetowych kandydatów znajduje go w pierwszym przejściu. 0, 6 nanosekundu. Poziom 2 - często (common = true): ~ 10 000 / śledziona Hasło znajduje się w referencyjnej liście HIBP ~ 10 000 najczęściej haseł. Kandydaci są testowani w pierwszych mikrosekundach. 59 nanosekund. Poziom 3 - DictWord (dictWord = true): ~ 200,000 / śledziona Hasło jest słowem z obecnego słownika językowego (lokalna lista słów ~ 50k- 200k). Kompletny skan listy słów jest niemal natychmiastowy dla szybkich algorytmów. Dla MD5: 200 000 / 168,9e9 1,18 mikrosekundy. Poziom 4 - Nie dotyczy (sec = null): hasło nie jest ani ultrasłabe, ani powszechne, ani słowo z obecnego słownika. Sam atak słownika nie ma zastosowania - inne ataki (siła brutto, Markov, PCFG) stają się głównym zagrożeniem.

    10.3 Dlaczego te liczby (100, 10 000, 200 000)?

    Wartości te są skalibrowane na rzeczywiste dane:

  • 100 Pierwsze 100 haseł RockYou stanowi ~ 10% korpusu. Wszystkie poważne narzędzia testują je jako priorytet.
  • 10 000 : HiBP sortuje swoje ~ 14 miliardów wpisów według częstotliwości. Top 10.000 obejmuje około 30- 40% prawdziwych haseł w użyciu. Każdy kompetentny napastnik zaczyna od tego podzbioru.
  • 200 000 : typowy rozmiar pełnej listy słów po filtrowaniu. Jest to wystarczające, aby pokryć obecne słownictwo języka bez przekraczania rozsądnego obciążenia w pamięci.
  • Odniesienie Weir et al. (2009) pokazać, że słowniki znajdują się w pierwszych 200 000 prób dobrze uporządkowanego ataku. Ur et al. (2012) potwierdzić, że wspólne hasła znajdują się w pierwszych 10 000 prób.

    10.4 Kompletny przykład numeryczny

    Hasło "słońce" (obecne francuskie słowo, wykryte jako dictWord):

    AlgorytmPrędkość (12 × RTX 4090)WzórCzas To...Czy...Czy...Więc... NTLM3,462 GH / s200 000 / 3 462e957,8 pikosekund MD52 027 GH / s200 000 / 2 027e998.7 pikosekund SHA-1610 GH / s200 000 / 610e9327.9 pikosekund SHA- 256272 GH / s200 000 / 272e9735 pikosekund bcrypt (koszt 5)2.2 MH / s200 000 / 2 200 00090,9 milisekundy Argon2id800 H / s200 000 / 800250 sekund

    Nawet dla Argon2id, 250 sekund to mniej niż 5 minut - za proste słowo z francuskiego słownika.


    11. Wysoka kalibracja wierności: applyHighFidelityCalibration()

    11.1 Dlaczego dodatkowa kalibracja?

    Obliczenie brutto addDictionaryAttacks() daje oszacowanie "najgorszego przypadku" - tak jakby napastnik testował jednolicie całą listę słów. według prawdopodobieństwa : najczęstsze hasła są najpierw.

    Wysoka kalibracja wierności stosuje mnożnik korekcyjny na podstawie obserwacji empirycznych:

    // 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.dicWord? 0.5: 1.0;
    Przerwa;
    Mnożnik common (0, 15) : jeśli hasło znajduje się na wspólnej liście priorytetów, znajduje się ono średnio w 15. percentylu listy - czyli ~ 1500 testów z 10.000 wymienionych na liście. Czas mnoży się przez 0.15 → 6.7 × szybciej niż jednolity skan. Mnożnik dictWord (0, 5) : wspólne słowo słownika znajduje się na średnim semestrze dobrze uporządkowanej listy. Mnożnik 0.5 → 2 × szybciej niż jednolity skanowanie.

    11.2 Źródła kalibracji akademickiej

  • Ur et al. (2012) - Jak twoje hasło się mierzy? (USENIX Security): analiza dystrybucji haseł w ciałach rzeczywistych.
  • Weir et al. (2009) - Hasło Cracking Korzystanie Probabilistic Context- Free Grammars (IEEE S & P): Czyste słowniki znajdują się w pierwszych 200.000 próbach uporządkowanego ataku.

  • 12. Prawdopodobieństwo zastosowania i stopień ufności

    12.1 System punktowy

    Time2Crack nie tylko oblicza czas - ocenia również prawdopodobieństwo, że atak słownika jest rzeczywiście najszybszym atakiem, poprzez wieloczynnikowy system punktacji:

    // Score d'applicabilité (0-1)
    case "dict":
      return context.common ? 0.99 : context.dictWord ? 0.85 : 0;
  • 0, 99 jeśli common Hasło jest w HIBP → atak słownika stosuje się z maksymalną pewnością.
  • 0, 85 jeśli dictWord Tylko: wysokie prawdopodobieństwo. Słownik słowo jest wrażliwe, ale napastnik musi mieć odpowiednią listę słów językowych.
  • 0 W przeciwnym razie: atak słownika nie ma zastosowania (nie wykryto podatności leksycznej).
  • 12.2 Wynik dowodowy

    Równolegle z punktacją stosowalności "dowody" rejestrują obserwowane sygnały:

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

    Wynik dowodowy 2 (słowo w HIBP i słowniku językowym) zwiększa ostateczne zaufanie 0,08 (2 × 0,04).

    12.3 Ostateczna ocena zaufania

    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, Math.max (możliwość zastosowania, podstawa) + dowód Boost - specyficzna kara );

    Hasło common z dictWord wykryto również:

  • 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
  • Maksymalna pewność: Atak słownika jest pierwszym atakiem jednoznacznie.


    13. Filtr Bloom RockYou: lokalna detekcja powszechnych haseł

    13.1 Kontekst

    Oprócz weryfikacji HIBP (która wymaga połączenia sieciowego) Time2Crack zawiera filtr rozkwitu Filtr bloom jest probabilistyczną strukturą danych, która pozwala na testowanie przynależności do zestawu z prawdopodobieństwem fałszywie dodatnich (~ 1%), bez przechowywania samych elementów.

    13.2 Korzyści z filtra rozkwitu

    KryteriaHiBP k- anonimowośćFiltr Bloom lokalny Czy...{C: $aaccff} Tłumaczenie:Więc... Zakres14 miliardów- 14 milionów. Opóźnienie50- 200 ms (sieć)< 1 ms (lokalny) Poufnośćk- anonimowość (5 zbiorników SHA-1)100% lokalne, nic transmitowane Fałszywy wynik0%- 1% RozmiarAPI~ 2- 5 MB (bloom filter binarny)

    13.3 Działanie podwójnego rozłupywania

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

    / / Double- hashing: h1 i h2 to dwie niezależne funkcje haszu const h1 = fnv1a32 (w, 2166136261); / / FNV1a ze standardowym materiałem siewnym const h2 = fnv1a32 (w, 0x811c9dc5); / / FNV1a z alternatywnym materiałem siewnym

    dla (niech i = 0; i < k; i + +) { const pos = (h1 + (i) (h2) > > > (0))% m; / / k pozycji w tablicy bitów const byteIdx = Math.floor (pos / 8); const bitIdx = pos% 8;

    / / Jeśli bit jest 0: słowo jest nieobecne jeżeli ((bitArray [byteIdx] & (1 < < bitIdx)) = 0) zwraca false; ¶ / / Wszystkie bity są na 1: słowo jest PROBABLY obecny (z 1% FP) zwrot true; ¶

    FNV1a-hashing zapewnia jednolity rozkład pozycji w tablicy bitowej, minimalizując kolizje i utrzymując wskaźnik fałszywie dodatni blisko 1%.

    13.4 Format załadowczy i binarny

    Filtr kwitnący jest przechowywany w data/rockyou.bloom - plik binarny z:

  • Nagłówek (20 bajtów): magiczny numer (0x424c4f4f = "BLOO"), wersja, m (rozmiar tablicy bitowej), k (liczba funkcji haszu), n (liczba elementów)
  • Ładunek : tablica bitowa (m / 8 bajtów)
  • Obciążenie jest uruchamiane ręcznie przez użytkownika (przycisk w UI), nie automatycznie przy załadowaniu strony - aby zachować początkową wydajność.


    14. Porównanie z atakami pochodnymi

    "Czysty" atak słownika jest pierwszym z rodziny ataków, które wszystkie mają wspólny root: leksykalna lista słów. Time2Crack wdraża 7 modeli offline crack (siła brutto, słownik, hybryda, maska, PCFG, Markov, combinator), każdy atakuje hasło pod innym kątem.

    14.1 Słownik vs Hybrid

    KryteriaSłownikHybryda (dyct + rules) Czy...- Tak.Czy... KandydaciSłownik Słowa jakoSłowa + ~ 1000 mutacji na słowo Klawiatura200 000 kandydatów- 200 milionów kandydatów Pęknięte przykłady"hasło", "słońce"P @ ssw0rd!, s0l3il2024 Prędkość względna1000 × szybciejZnacznie szerszy zakres Stosuje się, jeżelidokładne słowo w liścieHasło pochodzące ze słownika

    Atak hybrydowy rozpoczyna się tam, gdzie kończy się czysty słownik: bierze każde słowo z listy słów i stosuje systematyczne zasady mutacji (hashcat "best64.rule" na myśli).

    14.2 Dictionary vs PCFG

    KryteriaSłownikPCFG Czy...- Tak.Czy... WzórStała lista kandydatówGramatyka struktury probabilistycznej MocDokładne słowaWord + Digits struktury, Cap + niższe + sym Przykład"hasło" →"Password123" → ZakresZnane słownictwoOgólne struktury ludzkie

    Hasło takie jak "Password123" może być niezauważone w słowniku (dokładne słowo "Password123" może nie być wymienione), ale zostanie bardzo szybko złamana przez PCFG, który rozpoznaje strukturę [Majuskule] [minuskuły] [cyfry].

    14.3 Słownik vs Markov

    KryteriaSłownikMarkov Przewodniczący Czy...- Tak.Bo... KandydaciLista wstępnie skompilowanaPlik wygenerowany przez model statystyczny ZakresZnane słownictwoKażda prawdopodobna sekwencja "człowieka" KorzyśćBardzo szybko na dokładne słowaObejmuje nieznane słowa słownictwa Przykład"słoneczny" →"sunsh1ne" potencjalnie

    Markov zajmuje się sprawami, w których hasło wygląda jak ludzkie słowo, nie będąc na żadnej liście.

    14.4 Dictionary vs Credential farshing

    KryteriaSłownikWypychanie kredytu Czy...- Tak.- Tak. CelŁamanie haszuSprawdź konkretny logowanie MechanizmLokalne obliczenia haszowePróby zdalnego połączenia ŹródłoOgólna lista słówPara wycieków logowania / hasła ObronaSilny algorytm haszuOgraniczenie stawki, MFA, blokowanie IP

    Ufarbowanie kredowe nie atakuje haszu - bezpośrednio próbuje par logowania / hasła na zdalnych usługach. Pojęcie różni się od pęknięcia, ale posiada to samo źródło danych (HIBP / fail).


    15. Ograniczenia słownika ataku

    15. 1 Wartości graniczne wewnątrz

    1. Tylko znane słownictwo Wynalezione hasło, które nie przypomina żadnego istniejącego słowa i nie znajduje się w HiBP, nie jest odporne na czysty atak słownika. "Xqz7mK9pL" nigdy nie będzie w żadnej liście słów. 2. Zasięg językowy Napastnik celujący w użytkownika francuskojęzycznego bez francuskiej listy słów pominie słowa takie jak "efemeral", "grenouille" lub "bricolage", które nie znajdują się w standardowych angielskich listach słów. 3. Nowe hasła Wiarygodny, który został stworzony i nigdy nie uciekł nie będzie w HiBP - nawet jeśli jest bardzo powszechne, będzie musiał poczekać do następnego przecieku, aby go znaleźć. 4. Bardzo długie hasła Hasło składające się z długo wymyślonej frazy ("MaGrandeAventure2024SousLesEtoiles") nie będzie w liście słów - nawet jeśli każde słowo wzięte oddzielnie jest trywialne. Jest to idea za passphrases, traktowane przez inne ataki (Combinator, PRINCE).

    15.2 Jakie obliczenia Time2Crack nie model

    Context Wordlist : atakujący skierowany do określonego sektora buduje dostosowane listy słów (terminy medyczne dla szpitali, slang gier wideo dla platform gier). Time2Crack używa ogólnych list słów. Połączone siły brutto Wordlist : Narzędzia takie jak CeWL (Custom Word List Generator) mogą pobierać terminy ze strony docelowej, aby zbudować własną listę słów. Ostatnie przecieki jeszcze nie w HIBP między chwilą przecieku a jego włączeniem do HIBP, naruszone referencje krążą na forach prywatnych bez dostępu za pośrednictwem publicznego API. Algorytmy haszowe nieobjęte Modele Time2Crack 6 algorytmów (MD5, SHA-1, SHA- 256, NTLM, bcrypt, Argon2id). Algorytmy takie jak SHA- 512, scrypt lub PBKDF2 mają różne profile.

    16. Skuteczna obrona

    16.1 Co chroni przed atakiem słownika

    Nowoczesny algorytm haszu (bcrypt, Argon2id) To najbardziej skuteczna obrona po stronie serwera.
  • MD5: pęknięcie ~ 1 mikrosekundy
  • bcrypt koszt 12: crack in 35 godzin
  • Argon2id (zalecane parametry): pęknięcie lata
  • Różnica 10 + rzędu wielkości między MD5 i Argon2id sprawia, że hasło słownika "słońce" jest w praktyce odporny, jeśli jest chronione przez Argon2id - nawet jeśli napastnik wie, że jest to francuskie słowo.

    Pojedyncza sól na konto Sól zapobiega wcześniej obliczonym atakom stołowym i zmusza napastnika do przeliczania indywidualnie dla każdego konta. Nie chroni ukierunkowanych ataków na listę słów (napastnik może jeszcze przetestować 200 000 słów za pomocą soli), ale unieważnia stoły tęczy i sprawia, że masowe ataki na duże bazy danych są niewykonalne. Długość hasła Hasło jednego słownika (8- 10 znaków) jest wrażliwe. Passsphrase 4- 5 słów ("cheval- lumière- leśna podróż") jest odporny na atak czystego słownika, ale nie na atak Kombinatora - stąd znaczenie długości i losowości. Losowo wygenerowane hasła Prawdziwe rozwiązanie: użyj menedżera haseł, który generuje długie przypadkowe hasła (20 + znaki wszystkich typów). Te hasła nigdy nie będą w żadnym słowniku. uwierzytelnianie wieloczynnikowe (MFA) MFA nie zapobiega crack offline (napastnik odzyskuje hashy i pęknięcia offline), ale chroni przed creditial farshing (używać pęknięte referencje do połączenia). Ograniczanie i wykrywanie anomalii Chroni przed atakami online (próby bezpośredniego połączenia), a nie przed offline kradzieżą skradzionych haszów.

    16. 2 Czego nie chroni

    Proste substytucje leetów : "haslo" → "p @ ssw0rd" - patrz punkt 9. Dodano numery na końcu : "password" → "password1" - wśród pierwszych sprawdzonych zasad. Płatność początkowa : "hasło" → "Hasło" - standardowa zasada kapitalizacji. Rysunki i symbole, jeśli słowo pozostaje rozpoznawalne "słońce!" jest na każdej liście słów, która zawiera "słońce" z podstawowymi zasadami. Kompleksowość narzucona bez długości "P @ s1w" spełnia kryteria złożoności (maj, min, liczba, symbol), ale jest krótsza i bardziej przewidywalna niż "correcthorsebateryficture".

    16.3 Zalecenia praktyczne

  • Użyj menedżera hasła (Bitwarden, 1Password, KeePass) - generuje przypadkowe hasła, wystarczy pamiętać hasło główne.
  • Włącz MFA wszędzie - nawet jeśli hasło jest naruszone, napastnik nie może się połączyć.
  • Regularne kontrolowanie HIBP - czy jego e-mail jest w znanych przeciekach.
  • Nigdy nie używaj hasła - credicial farshing exploits crossservices result.
  • Dla zapamiętanych haseł : 5 + słowa passphrases losowo (nie "konno-recorrect- battery- agrafe- fiolet", ale słowa naprawdę narysowane przez los).

  • 17. Referencje

    Źródła pierwotne (studia akademickie)

    Morris, R., & Thompson, K. (1979). Bezpieczeństwo haseł: Historia spraw. Komunikaty ACM, 22 (11), 594- 597.
  • Pierwsza analiza akademicka dystrybucji hasła Unix
  • Uznaje, że ~ 1 / 3 haseł to popularne angielskie słowa
  • Klein, D.V. (1990).
    Foiling cracker: Badanie i ulepszenia do bezpieczeństwa hasła. UNIX Security Symposium Proceedings, 5- 14.
  • 15.000 Hasło Unix crack: 25% crack w ciągu kilku godzin
  • Dokumenty pierwsze listy słów i zasady mutacji
  • Weir, M., Aggarwal, S., de Medeiros, B., & Globek, B. (2009).
    Hasło pękające przy użyciu gramatyki wolnej od probabilistyki. Sympozjum IEEE na temat bezpieczeństwa i prywatności.
  • Podstawowe odniesienie do ataku PCFG i porównania z atakiem czystego słownika
  • Określa, że słowa słownika znajdują się w pierwszych 200 000 prób uporządkowanego ataku
  • Cytowane w Time2Crack do kalibracji HF ataku słownika (mnożnik 0.5)
  • Ur, B., Kelley, P. G., Komanduri, S., Lee, J., Maase, M., Shay, R., Vania, K., Bauer, L., & Cranor, L. F. (2012).
    Jak Twoje hasło mierzy się? Wpływ mierników siły na Password- User Choice. 21. Sympozjum Bezpieczeństwa USENIX.
  • Analiza rozkładu słów wspólnych w ciałach rzeczywistych
  • Wspólne słowa znalezione w pierwszych 100- 10 000 prób
  • Cytowane w Time2Crack do kalibracji HF common ? 0.15 (górny poziom 10k)
  • Bonneau, J (2012).
    Nauka śpiewu: analiza anonimowego ciała 70 milionów haseł. Sympozjum IEEE na temat bezpieczeństwa i prywatności.
  • Badanie 70 milionów anonimowych haseł Yahoo
  • Ilościuje rzeczywisty podział haseł, potwierdza prawo władzy
  • Pomiar skuteczności farszu kredytowego (wskaźnik trafień na rachunkach rzeczywistych na poziomie 2- 5%)
  • Ma, J., Yang, W., Luo, M., & Li, N. (2014).
    Badanie probabilistycznych modeli hasła. Sympozjum IEEE na temat bezpieczeństwa i prywatności.
  • Porównanie modeli probabilistycznych (słownik, Markov, PCFG) na prawdziwym korpusie
  • Best64.reguła priorytetowo → ~ 40% zmniejszenie średniego czasu na słowniki
  • Cytowane w Time2Crack do kalibracji HF ataku hybrydowego
  • Wheeler, D.L. (2016).
    zxcvbn: Szacunkowa wytrzymałość hasła w budżecie. 25th USENIX Security Symposium, 157- 173.
  • System estymacji siły przy użyciu listy słów i wzorów
  • Analiza błędów poznawczych w tworzeniu hasła
  • Zmierzyć skuteczność listy słów w stosunku do siły brutto
  • Pasquini, D., Cianfriglia, M., Ateniese, G., & Bernaschi, M. (2021).
    Ograniczanie uprzedzeń w modelowaniu siły prawdziwego hasła poprzez głębokie uczenie się i dynamiczne słowniki. 30. USENIX Sympozjum Bezpieczeństwa.
  • Ocena modeli szacowania rzeczywistych ataków
  • Potwierdza, że słowniki pozostają najskuteczniejszym narzędziem dla wspólnych haseł ludzkich
  • Źródła przemysłowe

    Zostałam wrobiona. (2024).
    Pwned Passwords. https: / / havibeenpwned.com / Passwords
  • Podstawa ~ 14 miliardów unikalnych haseł z udokumentowanych wycieków
  • k- anonimowość API używana przez Time2Crack do weryfikacji czasu rzeczywistego
  • Hive Systems. (2025).
    2025 Hive Systems Password Table.
  • Wartości odniesienia 12 × RTX 4090: MD5 2,027 GH / s, NTLM 3,462 GH / s, koszt krypty 5: 2,2 MH / s
  • Główne źródło stawek haszu stosowanych w Time2Crack
  • Hashcat (2025).
    Hashcat - Zaawansowane odzyskiwanie hasła.
  • Narzędzie referencyjne dla wskaźników GPU
  • Dokumentacja zasad mutacji (best64.rule, OneRuleToruleThemAll)
  • Gosney, J (2012).
    Struktury na Lee et al. i Probabilistic Hasło Cracking. Postępowanie w sprawie słownika.
  • Pierwsze publicznie udokumentowane wielopoziomowe poziomy odniesienia GPU
  • Odniesienie do kalibracji ataków opartych na regułach
  • Miessler, D. (2024).
    SecLists - Zbiór wielu rodzajów list wykorzystywanych podczas ocen bezpieczeństwa. GitHub.
  • Źródło słowników języka Wikipedia używane w Time2Crack
  • Wordlist w języku angielskim, francuskim, hiszpańskim, portugalskim, niemieckim, tureckim
  • Źródła wtórne (kontekst)

    Troy Hunt. (2013).
    Wprowadzenie 306 Mln Wolny do pobrania Pwned Hasła. troyhunt.com.
  • Wstępne ustanowienie usługi HIBP oraz wyjaśnienie protokołu k- anonimowości
  • Thomas, K., et al. (2019).
    Ochrona kont przed wiarygodnym nadzieniem z ostrzeżeniem o przerwie hasła. 28. USENIX Sympozjum Bezpieczeństwa.
  • Badanie Google / Stanford na temat ochrony sfałszowanych mandatów
  • Potwierdza skuteczność anonimowości jako mechanizmu ochrony prywatności
  • Wang, D., Cheng, H., Wang, P., Huang, X., & Jian, G. (2016).
    Prawo Zipfa w hasłach. IEEE Transactions on Information Forensics and Security, 12 (11), 2776- 2791.
  • Matematyczna formalizacja prawa mocy w dystrybucji haseł
  • Potwierdza, że dystrybucja Zipf posiada na wszystkich znanych dużych ciałach
  • Źródła internetowe cytowane w aplikacji Time2Crack

    IEEE Xplore (odniesienie dykcyjne). https: / / ieeexplore.ieee.org / document / 6234435
  • Powiązane źródło descDict (app.js) dla kolejności pokrycia najlepszych słowników.
  • Zakres API HIBP (k- anonimowość). https: / / api.pwnedpasswords.com / range /
  • Endpoint rzeczywiście używany przez Time2Crack do weryfikacji anonimowości k- (Sha1 prefix wniosek).
  • Wzór wywołania HIBP w kodzie. https: / / api.pwnedpasswords.com / range / ${prefix}
  • Dokładna forma URL wywołana przykładami kodu dokumentu (interpolowany prefiks SHA-1).

  • Dokument wygenerowany dla Time2Crack Project - Wersja 1.0 - 2026- 04- 01 Kod źródła: app.js (funkcje addDictionaryAttacks, isDictWord, deLeet, loadDictionary, applyHighFidelityCalibration, bloomHas) *