Sözlük saldırısı – Kapsamlı Operasyon
Project reference document Time2Crack
Recipients: geliştiricileri, güvenlik araştırmacıları, gelişmiş kullanıcılar
İçerikler
isDictWord()addDictionaryAttacks()applyHighFidelityCalibration()1. Genel bakış
Sözlük saldırısı, en eski şifre çatlakları yöntemi, en basit kavramsal olarak ve istatistiksel olarak en etkili gerçek insan şifrelerinin çoğunluğu üzerinde test etmektir. prensibi test etmektir, olasılık sıralaması, adayların önceden belirlenmiş bir listesi - ham güç olarak tüm olası kombinasyonlar.
Neden korkunç etkili İnsanlar şifrelerini rastgele seçmez.Veri sızıntılarının Decadesleri, şifrelerin gerçek dağılımının son derece yoğun olduğunu ortaya çıkarır: en yaygın 1.000 şifre, tüm online hesapların yaklaşık 5 ila% 10'unu temsil eder.En yaygın 1 milyon kapak 40 ila 60.Time2Crack, sözlük saldırı modelleri iki ayrı ama tamamlayıcı mekanizmalar:
Bu iki algılama bağımsız ve tamamlayıcıdır: HiBP tam uzlaşma bilgilerini kapsar, kelime listesi henüz sızdırılmamış olan ortak kelimeleri kapsar.
2. Tarihsel ve akademik arka plan
2.1 Origins
Sözcü saldırı, bilgisayar güvenliğinin modern çağından önce gelir. İlk Unix sistemleri açık dilde parolaları depoladı /etc/passwdDosyanın erişilebilir olduğu kadar herhangi bir sözlük saldırısı yapmak.
2.2
Bazı sızıntılar, insan şifrelerinin gerçek dağıtımını ortaya koyan sözlüğün görünümünü değiştirdi:
RockYou (2009) Bir geliştirici, standart dilde 14.3 milyon şifre depoladı.- Şifre #1 ("123456") 290,731 hesabı temsil etti (2)
2.3 Words Attack için Referans Benchmarks
Bir RTX 4090 hızında test edilen 200.000 giriş listesi:
AlgorithmHız Hız Hız Hız200k aday için zaman - !!!►- !!! MD5168.9 GH /s~1,2 nanosaniye SHA-150.86 GH /s~3.9 nanosaniye SHA-25622.68 GH /s~8.8 nanosaniye NTLM288.5 GH /s-0,7 nanosaniye bcrypt (cost 5)184 kH /s~1.09 ikinci Argon2id~67 H /s~50 dakikaSözlük saldırısı bu nedenle MD5, SHA-1 ve NTLM için neredeyse anındadır - ve küçük listelerde bile çok hızlı kalır.
3. Kavramsal temeller: Neden sözlük işleri
3.1 İnsan Şifrelerinin Güç Yasası
Tüm ampirik çalışmalar aynı gözleme yakınlaşır: insan şifrelerinin dağılımı üniforma değildir - takip eder Güç yasası (Zipf) Bazı şifreler seçimin disproportionate bir kısmını yoğunlaştırır.
Formally : Tüm şifreler frekansı azaltarak sınıflandırılırsa, sıralama parolasının frekansı r orantılıdır. ^ (-α) ile birlikte α 1.5 ila 2 Korpus'a göre.Doğrudan sonuç: En yaygın 10 şifre Sadece 10 adayı test eden bir saldırgan, 20'de başarılı olma şansına sahiptir - istatistiksel olarak, üretilen gürültü miktarı için büyük.
3.2 Şifre Yaratılışında Bilişsel Bias
İnsanlar rastgele seçim yapmazlar. Şifrelerini öngörülebilir hale getiren sezgiselleri sistematik olarak uygularlar:
3.3 Listelerde zaten "password" kavramı
Bir şifre iki farklı nedenden ötürü bir saldırı listesinde olabilir:
Sebep 1 - O HIBP'de Son bir sızıntıda tam teşhir edilmiştir. saldırganın tahmin etmesi gerekmez - bir tane tarafından bilinen kimlikleri test eder, frekans siparişinde.Eğer hedef sunucu haçlı kabul ederse, bitti. Sebep 2 - Bir dilsel kelime listesinde Şifre sıradan bir kelime kelimesidir. Hiç kaçmıyor olsa bile, tüm saldırı kelime listelerindedir, çünkü açık bir adaydır. "Paillon" HiBP'de olmayabilir, ancak Fransız kelime listesinde ciddi bir çatlaklar aracı değildir.Bu iki vaka farklı bir doğanın saldırılarına karşılık gelir, farklı hızlarla - ve bu tam olarak Time2Crack modellerinin ne olduğudır.
4 Modern bir sözlük saldırısının mimarisi
4.1 Genel boru hattı
Modern bir sözlük saldırısı birkaç aşamada gerçekleşir:
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)
2. Aşama 2: Wordlist Preprocessing
- Sık sık (en büyük olasılıkla ilk)
- Deduplication (aynı adayı iki kez değil)
- Uzunluk filtrasyon (hedef uzunluğu + ±2)
- Standardizasyon (düşük, Unicode NFC)
Aşama 3: Candidate Hashs
Her aday için kelime listesinde:
hashaday = hashAlgo (w)
Promosyon │ eğer varsaAday== hashhHedef: FINDED
- Hız: RTX 4090'da MD5 için 168 GH /s
Aşama 4: Sonuçlar Analizi
Çevik şifreler Raporu, kapsama istatistikleri
4.2 Donanım optimizasyonu
Modern sözlük saldırıları GPU üzerinde çok paraleldir:
Bir kelime listesi için 14 milyar giriş (HIBP büyüklüğü) 12× RTX 4090:
MD5 ile bcrypt arasındaki büyüklüğün 9 siparişinin bu farkı neden hash algoritmasının seçiminin kritik olduğunu açıklıyor.
4.3 Adayların Test siparişi
Kelime listesi alfabetik sırayla test edilmez - bu olasılık azaltılabilir :
Bu tür, şifrenin "düşü" olup, ilk milisaniyelerde bulunulmasını sağlar - ne olursa olsun hız.
5. Gerçek şifrelerin korpusu
5.1 (HIBP)
Boyut Boyutu -14 milyar eşsiz şifre (2024) Kaynak Kaynağı : 2013 yılından beri kamu sızıntılarının birleştirilmesi. Format Format : SHA-1 görünüşe göre sıralandı Public access : k anonim API, savunucuları için mevcut full hash indirHiBP küresel referanstır çünkü:
Tam HIBP çöpe sahip bir saldırgan ilk olarak frekans siparişinde ~14 milyar adayı test edebilir. Olmayan algoritmalar için (MD5, SHA-1), bu liste tüm gerçek online şifrelerin% 50'sini kapsar.
5.2 RockYou (2009) – Korpus
Boyut Boyutu 14.3 milyon açık şifre Anahtar özellikleri : Rank Rank Rank Rank Rank RankŞifre ŞifreOccurrencesKorpus % - ►---- ►---- ►---- ► 1 1 1123456290 7312.03% 2 21234579% 0,5 3 312345678976 790% 0.54% 4 4 4şifre şifre şifre59 4620.42% 5 5iloveyou49 9520.35% Top 10– –-650,000~4.5% Top 100– –~1 200 0008.4% Top 1 000– –~2 500 000 000~17.5% Top 10.000– –~4 500 000~31.5% Eğitim Eğitimi Sadece 10.000 adayı test edin (100 μs MD5 hız) uzlaşmalar - MD5 koruma hesabının veri tabanının% 31'i.5.3 Özel kelime listeleri
SecLists (Daniel Miessler): 4 GB kelime listelerinin açık kaynak koleksiyonu:Bu korpuslar halka açık olarak indirilebilir - onların varlığı saldırgan güvenliğin kurulmuş bir gerçeğidir.
6. K-Anonymity Verification HIBP: Gerçek Zamanlı Saldırı
6.1 Protokolü k anonim
Time2Crack, bir saldırganın HIBP veritabanı ile ne yapacağını tam olarak tekrarlayan gerçek zamanlı bir HIBP kontrol içerir - ancak asla parolayı düz dilde veya tam hash ile iletmez.
K-anonymity protokolü aşağıdaki gibi çalışır:
1. Calculer SHA-1(password) → par exemple "CBFDAC6008F9CAB4083784CBD1874F76618D2A97"
Sadece HIBP API'ye ilk 5 karakter gönderin: "CBFDA"
API, "CBFDA" ile başlayan TÜM SHA-1 eklerini döndürür (yaklaşık 400-600 hashes)
Arama yerel olarak eğer geri kalanlar ise (C6008F9CAB4083784CBD1874F76618D2A97) listededir.
Eğer bulunursa: şifre uzlaşmaz sayılır (HIBP aynı zamanda sızıntı sayısını döndürür)
Gizlilik Garantisi HIBP sunucusu asla tam hash'ı görmez (bu yüzden şifreyi tanımlayamaz), açık şifreyi yalnız bırakın. Son hesaplama yerel olarak yapılır.
Bu saldırı için ne anlama geliyor : HIBP yüksek bir sayıyla bir maç döndürürse (örneğin 9,547,236 "123456" için görünüşler), bu, HIBP veritabanı testi ile bir saldırganın onu listedeki çok yüksek bir pozisyonda bulduğu anlamına gelir - nanosaniyelerin bir kısmında.
6.2 Time2Crack'de Uygulama (app.js)
HIBP check, asynchronous and non-blocking. şifre hemen yerel yöntemler tarafından analiz edilir ve HIBP kontrolü sonucu tamamlar:
// 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
Sınırlı yanıt = bekleme ((()
https://api.pwnedpasswords.com/range/${prefix}
);
Sınırlı hatlar = yanıt bekliyor.text();
(Sekiz hattı) için
[hashSuffix, sayı] = line.split ()
If (hashSuffix.toLowerCase() = suffix.toLowerCase())
Geri dönüş parseInt (saygı); // sızıntı sayısı
}
}
iade 0; // bulunamadı
}
HIBP performans verileri :
6.3 Kont HIBP
HiBP tarafından iade edilen sayı, bu tam şifrenin indekslenmiş sızıntılarda ortaya çıktığını gösteriyor:
KontYorumCrack zamanı (MD5, 12× RTX 4090) - ►-- !!! > 1 000 000 000Top 100 World< 1 nanosaniye 10.000-1,000,000Çok yaygın< 10 nanosaniye 1 000-10 000Common Common Common Common Common< 100 nanosaniye 100-1,000Uncommon ama bilinen< 1 mikrosaniye 1–100Nadir ama uzlaşmacı< 10 mikrosaniye1'in bir sayısı bile (kullanıcı sadece bir kez ortaya çıktı) bir kırılganlığa işaret ediyor: Bir saldırgan bu hesabı özellikle hedef alıyorsa ve sorudaki sızıntının kimliklerine sahip olacak, onu bulacak.
7. Time2Crack Language Wordlists
7.1 Neden dil kelime listeleri HIBP'ye ek olarak
HiBP tam uzlaşma bilgilerini kapsar - ancak ortak kelimeler henüz tükenmez. Bir frankophone kullanıcısı, bir şifre olarak "ephemeral"i seçen bir kullanıcı HiBP'de olmayabilir (söz anglophone kimliklerinde olası değildir), ancak bir frankofon sistemini hedef alan herhangi bir saldırıcunun Fransızca kelime listesindedir.
Time2Crack'in dil kelime listeleri bu boşluğu kaplar:
Dil DiliKaynak KaynağıTahmin edilen boyut --- ►--- ►- İngilizce İngilizce İngilizce EnglishSecLists Wikipedia EN~200,000 giriş Fransız (fr)SecLists Wikipedia EN~150.000 giriş İspanyolca İspanyolca İspanyolcaSecLists Wikipedia ES~150.000 giriş Portekiz (pt)SecLists Wikipedia PT1.000 giriş Alman Alman AlmanDinle Wikipedia DE~180.000 giriş Türkçe (tr)SecLists Wikipedia TR~100,000 girişi İtalyan (it)kkrypt0nnnn~100,000 girişi Polonya (pl)kkrypt0nnnn~80 000 giriş Hollanda (nl)kkrypt0nnnn~80 000 giriş Uygulanan Filtreleme Sadece ≥ 4 karakterin sözleri korunmuştur ( 1-3 karakter gerçekçi bir şifre olmak için çok kısadır ve onların dahil edilmesi listeyi ek değer olmadan şişirecektir).7.2 Lazy yükleme
Wordlists koda dahil edilmez - dil değiştiğinde, ağ bütçesiyle tanışmak için talep üzerine yüklenir:
// app.js - loadDictionary()
async function loadDictionary(lang) {
if (DICTlang & DICTWORDS) return; // Déjà chargé
if (DICTLOADING)
DICTPENDINGLANG = lang; // Dosyayı Bekliyor
Geri dönüş;
}
DICTLOADING = true;
Kısıt res = Beklenirdata/wordlists/${lang}.txt);
Sınırlı metin = res.text();
// Set<string> for O(1) lookup
DICTWORDS = yeni Set(((Yeni Setler)
metin.split("\n")
.map(wken w.normalize("NFC")trim().toLowerCase())
.filter(wlan w.long >= 4)
);
DICTLANG = Lang;
DICTLOADING = false;
}
Neden Bir Şey Set ?? Yapı Yapısı Set JavaScript, O(1) görünümleri garanti eder - sözlük büyüklüğüne bakılmaksızın (50.000 veya 200.000 giriş), doğrulama doğrulama DICTWORDS.has(word) Aynı sürekli zaman alır. Array O(n) per lookup, i.e. up to 200,000 karşılaştırmas per check.
Yükleniyor kuyruk
The The The The The The The The DICTPENDINGLANG Hızlı dil değişiklikleri sırasında yarış koşullarını önlemek:
Scénario : l'utilisateur switche rapidement EN → FR → DE
├── EN demandé : DICTLOADING = false → getin başlangıcı EN
Satın alma sırasında talep edilen DICTLOADING = true → DICTPENDINGLANG = "fr"
├── DE demandé pendant fetch EN : DICTLOADING = true → DICTPENDINGLANG = "de" (crash "fr")
- Fetch Ends: DICTLANG = "en", puis lance loadDictionary("de")
└── Résultat : seule la dernière langue demandée est chargée
Bu davranış kasıtlıdır: Son zamanlarda istenen dil yüklenir, tüm orta diller değil.
8. Time2Crack içinde Sözlük: isDictWord()
8.1. Tespit işlemi
fonksiyon isDictWord(pw) Bir şifrenin mevcut bir sözlüğe ait olup olmadığını belirler:
// app.js - ligne 2181
function isDictWord(pw) {
if (!DICT(WORDS) sahte geri döner;
// Standardizasyon: NFC + Lowercase
l = pw.normalize("NFC")toLowerCase();
// Doğrudan doğrulama
Eğer (DICT)
WORDS.has(l) || DICTWORDS.has(deLeet(pw) gerçek geri döndü;
// Morpholojik varyasyonlar
Cont deleetWord = deLeet(pw);
Karşılaştırmalar = getMorphVariations (deleetWord);
Çünkü (konst varyasyonu) {
Eğer (DICT)
WORDS.has(variation)) return true;
}
Sahte geri dönüş;
}
3 katman algılama hattı :
8.2 Unicode Standardizasyon (NFC)
Standartlaştırma normalize("NFC") aksanlı karakterlerin sürekli tedavi edilmesini sağlar:
Bu standartlaşma hem sözlüğü hem de kontrol ederken uygulanır - aksan dilleri için doğru yazışmalar sağlar (FR, ES, DE, PT vs.).
8.3 kırılganlık üzerindeki etkisi tespit edildi
When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When When isDictWord() Go back back back trueBirkaç saldırı uygulanabilir:
hybridVuln = true → sözlük temelinde test edilen 1000 mutasyon9. De-leetification: saldırgan decodes substitutions
9.1 Leetspeak ve sınırlamaları koruma olarak
Leetspeak (veya "1337 konuşma") görsel benzer sayılar veya sembollerle mektupların değiştirilmesi uygulamasıdır: a→@, e→3, i→1 veya !, o→0, s→$. Kullanıcılar bunu "güçlü" ortak kelimeler için kullanır.
Gerçek: Bu alt kurumlardır Uygulanan ilk kurallar Herhangi bir sözlükte mutasyon kuralları ile saldırıya uğrarlar. yetkili bir saldırgana karşı gerçek bir savunma oluştururlar.
9.2 Uygulamanın uygulanması deLeet() Time2Crack
// app.js - ligne 3622
const LEETBASE = {
A: ["@", "4"]
E: ["3"]
O: ["0"]
s: ["$", "5"]
T: ["+", "7"]
["#"]
["9"]
=
LeetWith(pw, oneMap)
r = pw.normalize("NFC")toLowerCase();
(Resimler, geri dönüşler)
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;
}
Leet(pw) işlevi
// Belirsizlik: "1" veya "l" olabilir
I = deLeetWith(pw, { i: "1!", l: "
L = deLeetWith(pw, { l: "1", i: "!"
// Eğer sözlük yüklenirse, bu maçları tercih edin
Eğer (DICT)WORDS)
Eğer (DICT)WORDS.has (L ile)L ile geri döndü;
Eğer (DICT)WORDS.has(WithI) I ile geri döndü;
}
// Aksi takdirde: en az kalan sayılarla değişkeni tercih edin
I = (WithI.match (/\d/g)
s.)
Geri dönüş sayısal L < = sayısal I? withL: withI;
}
9.3 Belirsizlik Yönetimi "1" → "i" veya "l"
Alt kurum "1" belirsizdir: "1" "i" (örneğin "1nfo" → "info" veya "l" (as in "p1ayer" → "player") Time2Crack bu belirsizliği çözebilir:
9.4 Kurumlar kaplı değildir (aslında)
Time2Crack, LIABASE modellerinin ötesinde nadir veya belirsiz alt yerleri kapsamaz.Bu bir tasarım seçimidir: çok fazla vakayı kapsayan sahte pozitifleri artırmak (şu anda bir kelime olarak bir şifreyi tespit etmek).
10. Yoğun zaman hesaplaması: addDictionaryAttacks()
Hesaplama mantığı
// 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
Not = zayıf mı? t("nWeakPassword")
: yaygın ? t("nInLeaks")
: dictWord? t(nDictHit)
T(nAbsentLeaks);
satırlar.push({ atk: t("aDict") hash: a.name, spleen: a.rate, sec, not, kedi: "dict"
}
}
10.2 Üç kırılganlık seviyesi
Seviye 1 - Ultra-weak (weak = true) : ~100 / spleen
Şifre dünyanın En Top 100 ("password", "123456", "qwerty"...) Bu 100 öncelikli adayın ilk geçişte olduğunu test ediyor. MD5: 100 / 168.9e9 0.6 nanosaniye.
Seviye 2 - Common Common (common = true) : ~ 10 000 / spleen
Şifre, ~10.000 en sık şifrenin referans HIBP listesindedir. Bu adaylar ilk mikrosaniyede test edilir. MD5: 10.000 / 168,9e9 59 nanosaniye.
Seviye 3 - DictWord (dictWord = true) : ~200,000 / spleen
Şifre şu anki dil sözlüğünden bir kelimedir (yerel kelime listesi -50k-200k girişler). Kelime listesinin tam taraması neredeyse hızlı algoritmaları için anındadır. MD5 için: 200 000 / 168,9e9 1.18 mikrosaniye.
Seviye 4 - Geçerli Değil (sec = null) : Şifre ne ultra-weak, ne de ortak, ne de mevcut sözlerden gelen bir kelime geçerli değildir - diğer saldırılar (gross kuvveti, Markov, PCFG) ana tehdit haline gelir.
10.3 Neden bu sayılar (100, 10.000, 200.000)?
Bu değerler gerçek verilere kalibre edilir:
10.4 Tamam sayısal örnek
"sun" şifresi için (şimdi Fransız kelimesi, tespit edilen gibi dictWord)
Argon2id için bile, 250 saniye 5 dakikadan daha az - Fransızca sözlüğünden basit bir kelime için.
11. Yüksek sadakat kalibrasyonu: applyHighFidelityCalibration()
11.1 Neden ek kalibrasyon?
brüt hesaplama addDictionaryAttacks() “En kötü durumda” bir tahmin verir - saldırgan tüm kelime listesini üniformalı olarak test ederse. Muhtarya tarafından sipariş edilen : En yaygın şifreler ilk gelir.
Yüksek sadakat kalibrasyonu, ampirik gözlemlere dayanan düzeltici bir multiplier uygular:
// 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;
Bölüm;
Multiplier common (0.15) : Eğer şifre ortak öncelik listesinde ise, listenin yüzde 15'inde ortalama olarak bulunur – bu - 10.000 listedeki 1.500 testtir. Zaman, 0.15 → 6.7 × üniforması ile çarpılır.
Multiplier dictWord (0.5) : Ortak bir sözlük kelimesi iyi sipariş edilen bir listenin ortalama orta vadede bulunur. Multiplier 0,5 → üniformalı taramadan daha hızlı.
11.2 Kalibrasyonun Akademik Kaynakları
12. Uygunluk ve güven puanının aslilığı
12.1 Scoring sistemi
Time2Crack sadece bir zaman hesaplamaz - aynı zamanda sözlük saldırısının aslında çok faktörlü bir puanlama sistemi aracılığıyla en hızlı saldırı olduğunu da değerlendirmektedir:
// Score d'applicabilité (0-1)
case "dict":
return context.common ? 0.99 : context.dictWord ? 0.85 : 0;
common Şifre HIBP'de → sözlük saldırısı maksimum güven ile uygulanır.dictWord Sadece: yüksek olasılık. Bir sözlük kelimesi kırılgandır, ancak bir saldırganın doğru dil kelime listesine sahip olması gerekir.12.2 Kanıt puanı
Applicability puanı ile paralel olarak, gözlemlenen sinyalleri kaydeder:
case "dict":
return Number(!!context.common) + Number(!!context.dictWord);
// 0 : aucun signal
// 1 : un signal (common OU dictWord)
// 2 : deux signaux (common ET dictWord)
2'nin kanıt puanı (her iki HIBP ve dil sözlüğü) 0.08'in son güvenini artırır (2 × 0.04).
12.3 Final Güven Puanı
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
Doğruluk = Math.max (0, Math.min (1,
Math.max (applicability, base) + kanıtlarBoost - spesifikPenalty
)
Bir şifre için common ile birlikte dictWord Ayrıca tespit edildi:
applicability = 0.99evidenceBoost = min(0.12, 2 × 0.04) = 0.08confidence = min(1, max(0.99, 0.6) + 0.08) = min(1, 1.07) = 1.0Maksimum güven: Sözcü saldırı, belirsiz bir şekilde birincil saldırıdır.
13. Bloom filtre RockYou: yaygın şifrelerin yerel tespiti
13.1 Arka plan
HIBP doğrulamanın yanı sıra (bir ağ çağrısı gerektiriyor), Time2Crack bir araya getiriyor çiçekli filtre Bir çiçekli filtre, elementleri depolamadan bir sete ait bir yanlış pozitif olasılığı ile test etmenizi sağlayan bir olasılıktır.
13.2 çiçekli filtrenin Faydaları
KriterleriHIBP k- anonimBloom filtre yerel yerel ►----- * Coverage~14 milyar~14 milyon (RockYou) Latency50-200 ms (network)<1 ms (yerel) GizlilikK- anonimlik (5 SHA-1 tankları)% 100 yerel, hiçbir şey bulayamıyor Yanlış pozitif% 0% 0-%1% Boyut BoyutuAPI API API API~2-5 MB (bloom filtresi ikili)13.3 Çiftin Operasyonu
// app.js - ligne 1962
function bloomHas(filter, word) {
if (!filter) return false;
const { bitArray, m, k } = filter;
const w = word.toLowerCase();
// Double-hashing: h1 ve h2 iki bağımsız hash işlevleridir
K1 = fnv1a32 (w, 2166136261); // FNV1a standart tohum ile standart tohum
{2 = fnv1a32 (w, 0x811c9dc5); // FNV1a alternatif tohumla
(le i = 0; i < k; i++)
eksi = (h1 + (i) (h2) >>> (0))% m; // k pozisyonları biraz dizi
Cont byteIdx = Math.floor (pos / 8);
BirazIdx = % 8;
// Eğer biraz 0 ise: kelime DEFINITLY yok
Eğer (bitArray[baytIdx) ve (1 << bitIdx) = 0) geri dönüş false;
}
// Tüm bitler 1'dedir: kelime PROBABLY hediyedir ( FP'nin% 1'i ile)
Doğru geri dönüş;
}
FNV1a Double-hashing, biraz dizideki pozisyonların üniformasını sağlar, minimizleme çarpışmaları ve false pozitif oranı% 1'e yakın tutar.
13.4 Yük ve ikili format
Çiçekler filtre depolanır data/rockyou.bloom - ikili bir dosya ile:
Yük, kullanıcı tarafından manuel olarak tetiklenir (button in the UI), sayfa yüklemesinde otomatik olarak değil - ilk performansı korumak için.
Türlü saldırıların 14. Karşılaştırma
"pure" sözlük saldırısı, tüm ortak bir kök paylaştığı bir saldırının ilkidir: bir lexical wordlist. Time2Crack 7 çevrimdışı çatlakları uygular (gross güç, sözcü, hibrit, maske, PCFG, Markov, ssper), her bir şifreyi farklı bir açıdan saldırır.
14.1 Dictionary vs Hybrid
KriterleriSözlükHybrid (dict+rules) ►---- ►- !!! Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday AdaySözlüklerKelimeler + ~1000 mutasyonlar kelime başına Keyspace200.000 aday~200 milyon aday Cracked örnekler"password", "sun""P@sw0rd!", "s0l3il2024" Relative speed1000× daha hızlıÇok daha geniş kapsama alanı Uygulayırsa eğerListede tam kelimeBir dict kelimeden elde edilen şifreHibrit saldırı saf sözlüğün durduğu yerde başlar: Her kelimeyi listeden alır ve sistematik mutasyon kuralları uygular (hashcat "best64.rule" akılda).
14.2 Dictionary vs PCFG
KriterleriSözlükPCFGGG ►---- ►- ► Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model Model ModelAdayların sabit listesiOlasılıksal yapı grameri Kuvvet GücüDoğru kelimelerWord+Digits yapıları, Cap+lower+sym Örnek Örnek Örnek Örnek Örnek Örnek Örnek"password" →"Password123" → ✓ (yapı tespit) CoverageBilinen Kelime Kelime Kelime KelimesiGenric insan yapıları"Password123" gibi bir şifre, bir sözlükte (gerçek kelime "Password123" olarak listelenebilir) ancak yapıyı tanıyan PCFG tarafından çok hızlı bir şekilde kırılabilir [Majuscule][minuscules][digits].
14.3 Markov
KriterleriSözlükMarkov ►---- ►--- ► Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday Aday AdayPre-compiled listesiStatik model tarafından oluşturulan Fly- CoverageBilinen Kelime Kelime Kelime KelimesiHerhangi bir olası "insan" dizisi Avantaj avantajlarıTam kelimeler üzerinde çok hızlıBilinmeyen kelime kelimeler Örnek Örnek Örnek Örnek Örnek Örnek Örnek"sunshine" →"sunsh1ne" potansiyel olarak ✓Markov, şifrenin herhangi bir listede olmadan insan kelimesi gibi göründüğünü kapsar.
14.4 Dictionary vs Credential Thingsing
KriterleriSözlükCredential Thingsing ►---- ►- !!! Objektif HedefBir hashBelirli bir giriş test edin MechanismHash local computationUzaktan bağlantı deneme girişimleri Kaynak KaynağıGenric WordlistPair Giriş/password sızıntıları Savunma Savunma SavunmaGüçlü hash algoritmasıLimit, MFA, IP blokeCredential thingsing bir hash saldırmaz - doğrudan uzaktan hizmetler üzerinde giriş / anahtar kelime çiftlerine çalışır. Bu, çatlaklardan kavramsal olarak farklıdır, ancak aynı veri kaynağını paylaşır (HIBP/fail).
15. Saldırı Sözlüğü
15.1 Intrinsic limitleri
1. Bilinen kelime sadece sadece sadece Mevcut herhangi bir kelimeyi benzemeyen ve HiBP'de olmayan icat edilmiş bir şifre, saf sözcü saldırıya karşı şüphelidir. "Xqz7mK9pL" asla bir kelime listesinde olmayacaktır. 2. Dil kapsamı Fransızca konuşan bir kullanıcıyı Fransız kelime listesi olmadan hedef alan bir saldırgan, "ephemeral", "grenouille" veya standart İngilizce kelime listelerinde olmayan "bricolage" kelimeleri özleyecek. 3. Yeni şifreler Sadece yaratılmış bir haçlı ve asla HiBP'de olmayacak - çok yaygın olsa bile, bunu bulmak için bir sonraki sızıntıya kadar beklemek zorunda kalacak. 4. Çok uzun şifreler Uzun bir icat edilen cümleden oluşan bir şifre ("MaGrandeAventure2024SousLesEtoiles") hiçbir kelime listesinde olmayacak - her kelime ayrı ayrı alındığında, diğer saldırılar tarafından tedavi edilen bu fikir (Combinator, PRINCE).15.2 What Time2Crack's Hesapion Model Değil
Context Wordlists Belirli bir sektör hedefleyen bir saldırgan, oyun platformları için uygun kelime listeleri inşa edecektir. Time2Crack genel kelime listelerini kullanır. Kombi kuvvet Wordlists : CeWL (Müşteri Listesi Jeneratör) gibi araçlar, özel bir kelime listesi oluşturmak için hedef web sitesinden terim çıkarabilir. Bu hedefleme seviyesi modellemez. Son sızıntılar henüz HIBP'de değil Şu an arasında bir sızıntı meydana gelir ve HIBP'ye entegrasyonu, kamu API'si aracılığıyla erişilemeyen özel forumlarda yapılan uzlaşmalar. Hash algoritmaları kaplı değil Time2Crack modelleri 6 algoritmaları (MD5, SHA-1, SHA-256, NTLM, bcrypt, Argon2id) SHA-512, scrypt veya PBKDF2 gibi Algoritmalar farklı profillere sahiptir.16. Etkili Savunmalar
16.1 Sözcü saldırıya karşı koruyan şey
Modern hash algoritması (bcrypt, Argon2id) Bu, sunucu tarafında en etkili savunmadır.MD5 ve Argon2id arasındaki 10+ büyüklüğün farkı, Argon2id tarafından korunan pratikte sözel şifre "sun" bağışıklıkını yapar - saldırganın Fransız bir kelime olduğunu biliyorsa bile.
Hesap başına tek tuz Bir tuz, önceden hesaplanan masa saldırılarını ve saldırganları her hesap için bireysel olarak yeniden hesaplamak için engeller. Hedeflenen kelime listesini korumaz ( saldırgan hala tuzla 200.000 kelime test edebilir), ancak büyük veritabanlarında büyük saldırıları geçersiz kılar. Şifre uzunluğu Tek bir sözlük kelimesinin şifresi (8-10 karakter) kırılgandır. 4-5 kelimeden oluşan bir geçiştir ("cheval-lumière-forest-voyage") saf sözlüğe dayanıklıdır, ancak Combinator saldırıya karşı değildir - bu nedenle uzunluğun ve rastgeleliğin önemi. Rastgele olarak oluşturulan şifreler Gerçek çözüm: uzun rastgele şifre üreten bir şifre yöneticisi kullanın (20+ her tür karakter). Bu şifreler asla herhangi bir sözlükte olmayacak. Çok faktörlü doğrulama (MFA) MFA, çatlakları çevrimdışı engellemez (tahdit geri kazanılır ve çevrimdışı kırılır), ancak haçlı şeylere karşı koruma sağlar (bağlantılı kimliklere bağlanmak için). Limitleme ve anomalileri tespit etmek Online saldırılarına karşı korumalar (yönemli bağlantı girişimleri), çalınan hashlerin çevrimdışı çatlaklarına karşı değil.16.2 Ne korumuyor
Basit leet substitutions : "password" → "p@ssw0rd" - bölüm 9. Sonunda sayıları eklendi : "password" → "password1" - ilk kurallar arasında test edilmiştir. İlk ödeme : "password" → "Password" - standart sermayeleştirme kuralı. Şekiller ve semboller eğer kelime tanınabilir "sunshine!", temel kurallarla "sunshine" içeren herhangi bir kelime listesindedir. Kompleksi uzun süre olmadan uygulanmış "P@s1w" karmaşık kriterleri karşılar (maj, min, sayı, sembolü) ancak "korrecthorsebaterystaple"dan daha kısa ve daha öngörülebilirdir.16.3 Pratik Tavsiye
17. Referanslar
birincil kaynaklar (academik çalışmalar)
Morris, R., & Thompson, K. (1979). Şifre güvenliği: Bir vaka tarihi. ACM, 22(11), 594-597.common ? 0.15 (top 10k seviyesi)Endüstriyel kaynaklar
Ben de Pwned'e sahip oldum. (2024). Pwned Passwords. https://haveibeenpwned.com/PasswordsOrta kaynaklar (context)
Troy Hunt. (2013). Giriş 306 Milyon Freely Downloadable Pwned Passwords. Troyhunt.com.Web kaynakları Time2Crack uygulamasında atıfta bulundu
IEEE Xplore (dikal referans). https://iee blastre.ieee.org/document/6234435descDict (app.js) üst sözlüklerin kapsamı için.Time2Crack Project için üretilen doküman - Version 1.0 - 2026-04-01 Kaynak kodu:
app.js (işlevler) addDictionaryAttacks, isDictWord, deLeet, loadDictionary, applyHighFidelityCalibration, bloomHas)*