Güvenlik
Parola Güvenliği: Güçlü Parolayı Gerçekte Ne Yapar?
10 dk okuma
Bankalar web sitelerinde hâlâ parolanızın bir büyük harf, bir rakam ve bir sembol içerdiğini kanıtlamanızı şart koşuyor — sonra da sizi gerçekten koruyacak olan uzun parola öbeklerini reddediyor. Araştırmalar, bu kuralların varsaydığının tam tersini söylüyor. Güçlülük, karakter türlerinden oluşan bir kontrol listesi değildir; bir sayıdır: saldırganın parolanıza ulaşmak için geçmesi gereken deneme sayısı. Bit cinsinden ölçülen bu sayı, önemli olan tek şeydir. Geri kalan her şey — eklediğiniz ünlem işareti, büyüttüğünüz harf — çoğunlukla tiyatrodur.
Entropi: her parolanın arkasındaki sayı
Kullandığınız kurallar altında yaratabileceğiniz her parola tek tek bir listeye yazılabilir. Listenin boyutu sizin arama uzayınızdır. Parola listeden tekdüze rastgele seçildiyse, parolaları tek tek deneyen saldırgan ortalamada listenin yarısını tüketmek zorundadır. Bu uzayın boyutunun ikinin kuvveti olarak ifadesi, parolanın entropisidir: saldırganın çözmesi gereken belirsizlik miktarı.
Matematik düz bir çarpmadır. 26 harfli küçük harfli bir alfabeyle 8 karakterlik bir parola 26^8 = 2,09 × 10^11 olasılık verir — yaklaşık 38 bit. Büyük harfleri, rakamları ve sembolleri katarsanız — 95 karakterlik tam yazdırılabilir küme — aynı 8 karakter 95^8 = 6,6 × 10^15 olasılığa çıkar, yaklaşık 52,5 bit. Eklenen her karakter listeyi alfabenizin boyutuyla çarpar.
İki sonuç doğar. Uzunluk birikir: her ek karakter bit değerine alfabenin log2'sini ekler. Alfabe ne kadar darsa karakter başına kazanç o kadar azdır: 26'dan 95 karaktere çıkmak karakter başına yaklaşık 1,9 bit kazandırır; oysa bir karakter daha eklemek 4,7 ila 6,6 bit getirir. Uzun parola lehine dönen tartışmanın özü budur.
// Upper bound for a password a real random generator produced.
// Real human choices score lower — patterns occupy a smaller space.
function bits(length, charsetSize) {
return length * Math.log2(charsetSize);
}
console.log(bits(8, 26)); // ≈ 37.6 → ~2.1 × 10^11 possible
console.log(bits(8, 95)); // ≈ 52.5 → ~6.6 × 10^15 possible
console.log(bits(12, 95)); // ≈ 78.8
console.log(bits(16, 95)); // ≈ 105.1| Uzunluk / yapı | Karakter kümesi | Olası birleşim | Yaklaşık bit |
|---|---|---|---|
| 8 karakter | 26 küçük harf | 2,1 × 10^11 | ≈ 38 |
| 8 karakter | 95 yazdırılabilir | 6,6 × 10^15 | ≈ 53 |
| 12 karakter | 95 yazdırılabilir | 5,4 × 10^23 | ≈ 79 |
| 16 karakter | 95 yazdırılabilir | 4,4 × 10^31 | ≈ 105 |
| 4 rastgele kelime | 7.776 kelimelik liste | 3,7 × 10^15 | ≈ 52 |
| 5 rastgele kelime | 7.776 kelimelik liste | 2,8 × 10^19 | ≈ 65 |
Formül gerçek rastgeleliği varsayar ve ağırlığın tamamı bu varsayımdadır. Gerçek hayattaki seçimler için üst sınırdır, çünkü insanlar tekdüze değildir: Sunshine1 sekiz karakterdir ama 6,6 × 10^15 olasılıktan çok uzaktır. Saldırganın gerçek arama uzayı, yaygın kalıpların uzayıdır ve bu uzay binlerce kat küçüktür.
Klasik kurallar parolayı neden zayıflatır
O meşhur kontrol listesi — en az 8 karakter, bir büyük harf, bir rakam, bir sembol — grafik kartlarının parola kırmayı hobiye çevirmesinden çok önce tasarlandı. İki şekilde başarısız olur: insanları öngörülebilir kalıplara iter ve gerçekten işe yarayan tek şeyi, uzunluğu cezalandırır.
Birine büyük harf, rakam ve sembol koyması gerektiğini söyleyin; büyük olasılıkla sıradan bir kelime alıp üç hareketi uygular: ilk harfi büyütür, sona bir rakam ekler, bir de sembol yapıştırır. Sonuç Password1! ya da yerel dildeki karşılığıdır. Tüm sınıf tek bir şablonu izlediği için saldırganın 95 karakterlik uzayı aramasına gerek yoktur; çok daha küçük olan şablon uzayını arar. Ünlü xkcd örneği Tr0ub4dor&3 tam da bu yüzden 28 bit civarındadır.
Zorunlu rotasyon bunu daha da kötüleştirir. Politika her 90 günde bir yeni parola istediğinde insanlar bir öncekini mutasyona uğratır: Password1! → Password2! → Password3!. Eski parola bir kez sızdıysa bir sonraki parola önemsiz bir tahmine döner. Güncel tavsiye — NIST SP 800‑63B — zorunlu süre bitimini de, karmaşıklık kurgusunu da bırakır; yerine uzunluk, yasaklı parola listeleri ve ikinci bir doğrulama faktörü ister.
Uzunluk karmaşıklığı yener: parola öbeğinin matematiği
7.776 kelimelik bir listeden — EFF'in önerdiği diceware listesi — çekilen dört rastgele kelime 7776^4 = 3,7 × 10^15 birleşim, yani yaklaşık 51,7 bit eder. Bu, 95 karakterlik kümeden rastgele seçilmiş 8 karakterlik parolayla kıyaslanabilir — ama insanın gerçekten hatırlayabildiği kelimelerle yazılır. Daha tutucu bir 2.048 kelimelik liste bile kelime başına 11 bit verir: dört kelimede 44 bit.
Pr3tty! ile correct-horse-battery-staple i yan yana koyun. İkisi de savunulabilir görünür. İlki, 95 karakterlik kümeden 7 karakterdir — kâğıt üzerinde yaklaşık 46 bit — ama sıradan bir sıfat artı bir semboldür; şablona uyan parolaların küçücük uzayından gelir, bu yüzden gerçek değeri bunun bir kesridir. Diğeri ise binlerce kelime arasından dört bağımsız rastgele seçimin ürettiği 28 karakterdir; örüntü olmadığı için saldırganın kestirme yolu yoktur.
Buradaki incelik — gerçek bir incelik — rastgele kelimesindedir. mycatispurple gibi uydurduğunuz bir öbek dört rastgele kelime değildir; tek bir doğal-dil cümlesidir ve akıllı bir saldırgan onu da modeller. Güç zekânızdan değil, zardan gelir. Diceware kullanın ya da tekdüze seçen bir üretici edinin; bir blog yazısında ya da şarkı sözünde parlayan hazır öbeklerden uzak durun.
- Hatırlanabilir: dört tanıdık kelime, on beş dağınık karakterden kolaydır.
- Uzun: ham uzunluk, çevrimdışı kaba kuvveti daha başlamadan bloke eder.
- Örüntüsüz: tekdüze rastgele seçimler saldırgana kullanacak şablon bırakmaz.
- Ölçeklenir: beş rastgele kelime yaklaşık 64,6 bit eder ve hâlâ hatırlanabilirdir.
Asıl tehlike parola tekrarıdır
Aynı parola on hesabı koruyorsa entropi matematiğinin hiçbiri sizi korumaz. Veri ihlalleri nadir olay değildir; rutindir ve iyi güvenlik ekipleri olan dikkatli şirketlerde de olur. Karma listesi sızdığında hashlar çevrimdışı kırılır — önce sözlük, sonra mutasyonlar — ve kullandığınız parola düz metin olarak ortaya dökülür.
Saldırganlar sonra bu listeyi kullandığınız diğer tüm sitelere karşı çalıştırır. Buna kimlik bilgisi doldurma denir: otomatik komut dosyaları sızan her kullanıcı adı/parola çiftini binlerce hedefe karşı dener ve bu yöntem işler, çünkü tekrar normdur. Yapabileceğiniz en değerli şey daha akıllı bir parola değil, site başına benzersiz paroladır.
Parola yöneticileri tam da bu ölçekteki benzersizliği otomatikleştirir. Diğer yüzü de şudur: yöneticinin ana parolası sahip olduğunuz tek yeri doldurulamaz sırdır; onu başka bir yerde tekrar kullanmak modelin tamamını çökertir.
Gerçekte karşınızda olan saldırı vektörleri
- Sözlük saldırısı: önceki ihlallerden sızan parolalar, kelimeler, adlar, klavye dizileri gibi olasılıklı bir listeyi dener.
sunshine1gibi parolaları milisaniyeler içinde çözer. - Kaba kuvvet: belirli bir karakter kümesinin tüm birleşimlerini bir uzunluk sınırına kadar dener. Basit ve yavaştır; yukarıdaki tablo tam bu yüzden önemlidir: saniyede bir milyar denemede, 8 karakterlik tam küme parolası bir günden kısa sürede biter.
- Kimlik bilgisi doldurma: sızan kullanıcı adı/parola çiftlerini binlerce siteye karşı otomatikleştirir. Başarısı, parola tekrarının doğrudan bir ölçüsüdür.
- Oltalama: gerçek bir giriş sayfasını taklit eder ve parolayı — ya da iki aşamalı doğrulama kodunu — insandan toplar. Güçlülüğün tüm kurallarını aşar; bu yüzden ikinci bir faktör ve yöneticinin otomatik doldurması önemlidir.
Dikkat edin: burada sizi kişisel olarak hedefleyen bir hacker yok. Saldırılar otomatik ve fırsatçıdır; matematiğin en zayıf, tekrarın en yoğun olduğu yere giderler.
Parola yöneticileri parolaları nasıl üretir ve saklar
Bir parola yöneticisi her kimlik bilgisini, ana parolanızdan türetilen bir anahtarla şifrelenmiş bir kasada saklar — PBKDF2 ya da Argon2 gibi yavaş bir fonksiyonla gerdirilmiş bir anahtar; ana parolayı çevrimdışı tahmin etmek tasarım gereği zordur. Kasa, sırlarınızın tek evidir; ana parola onu açan anahtardır.
İyi bir yöneticinin asıl işi üretimdir. Her site için taze, kriptografik olarak rastgele bir parola yaratır — tipik olarak tam karakter kümesiyle 15 ila 20 karakter — çünkü bunları ezberlemek zorunda değildir. Ekosistem düşündüğünüzden geniştir: tarayıcılar yerleşik yöneticiler sunar, Bitwarden ve 1Password şifreli kasa senkronizasyonunu bulutla yapar, KeePass tarzı uygulamalar yerelde şifreli bir dosya tutar. Prensip her yerde aynıdır: tek güçlü ana anahtar, her şey için rastgele benzersiz parolalar.
Giriş formunun ötesinde sorumlu bir site parolanızı saklamaz; bcrypt ya da argon2id gibi yavaş, bellek-yoğun bir fonksiyonla üretilmiş bir tuzlanmış hash saklar. Tuzlu, kullanıcı başına rastgele bir değerin karıştırıldığı — yani aynı parolanın milyon sitede milyon farklı hash verdiği — anlamına gelir. Yavaş, saldırganın saniyedeki deneme sayısını milyarlardan birkaç bine indirdiği anlamına gelir. Makul bir parolanın sızan veritabanından sağ çıkmasının ve kısa bir parolanın çıkamamasının nedeni tam olarak budur — yukarıdaki tablonun da vardığı sonuç.
Ana parolanız, tüm kasandır
Dizüstü bilgisayarınız gittikten sonra yazabildiğiniz tek parola, kasanın ana parolasıdır. Onu uzun, gerçekten rastgele bir parola öbeği yapın — ve başka hiçbir yerde tekrar kullanmayın: misafir girişinde değil, bir deneme sürümünde değil. Bu anahtar bir ihlal listesinde görünürse, kasasındaki her üretilmiş parola değerini yitirir.
Üzerine ikinci bir faktör ekleyin
Güçlü ve benzersiz parolalar çevrimdışı kırmayı yener. Yenemedikleri şey iyi kurulmuş bir oltalama sayfasıdır. En azından e-posta ve finansal hesaplar için iki aşamalı doğrulamayı açın — sunuluyorsa passkey ya da donanım anahtarı, değilse uygulama tabanlı kodlar — böylece ele geçirilen bir parola tek başına yetmez.
İyi bir üretici farklı ne yapar
Oyuncak bir üreticiyle güvenli bir üretici arasındaki fark, rastgeleliğin nereden geldiğidir. Math.random() zamanla tohumlanan sahte rastgele bir üreteçtir; hızlıdır, sırlar için tasarlanmamıştır ve çıktısının yeterince gözlenmesi durumunda iç durumu yeniden kurulabilir — rastgele parola öngörülebilir hâle gelir. Tarayıcılar ise işletim sisteminin kriptografik rastgeleliğiyle beslenen crypto.getRandomValues() sunar: bu iş için uygun olan tek kaynak.
Kaynak hikâyenin yarısıdır. Örnekleme tekdüze olmalıdır: bir rastgele sayıyı karakter kümesinin uzunluğuna göre modulo almak, çıktıyı saptırmanın klasik yoludur; ciddi üreticiler reddetme (rejection) örneklemesi kullanır. Karakter kümesi de dayanabildiğiniz kadar geniş olmalıdır, çünkü eklediğiniz her sınıf bedava kazandığınız bitlerdir; 1/l ve 0/O gibi belirsiz karakterler ise güç için değil, okunabilirlik için çıkarılır.
Güçlü bir üretici başka hiçbir şey de yapmaz: telemetri yok, sunucu günlüğüne yazılan kopya yok, benim için hatırla yok. Bir parola tam olarak tek bir yerde var olmalıdır — birkaç saniyeliğine panonuzda, sonra kasada.
Convrs'te güçlü parolalar üretin
Convrs'ün parola üreticisi tamamen tarayıcınızda çalışır: uzunluğu seçin, istediğiniz karakter sınıflarını açın ve tek tıkla birden fazla parola üretin. Rastgelelik tarayıcının kriptografik API'sinden gelir, hesabın tamamı cihazınızda kalır ve hiçbir şey aktarılmaz, günlüğe yazılmaz ya da saklanmaz — parolanızın tek kopyası, sizin kopyaladığınız kopyadır.