Şifreler Nasıl Kırılır? Parolalar Neden Hızlı Düşer
Şifreler nasıl kırılır, neden bazıları saniyeler içinde düşer? Hash, tuzlama, brute force ve sözlük saldırısını öğren, kırılmayan şifreyi kur.
Şifreler nasıl kırılır sorusunun kısa cevabı şu: saldırgan şifreni tahmin etmez, sızmış bir veritabanındaki şifre özetlerini ele geçirir ve milyarlarca tahmini kendi bilgisayarında dener. Kısa, tahmin edilebilir ya da başka sitede de kullanılmış şifreler bu denemede hızla düşer. Uzun, rastgele ve yavaş bir özet fonksiyonuyla saklanan şifre ise pratikte kırılamaz hâle gelir.
Şifreler nasıl kırılır, saldırgan neyi ele geçirir?
Şifre kırma iki farklı ortamda olur. Hangisinde olduğu, saldırganın hızını belirler.
| Tür | Nasıl olur | Sınırı ne |
|---|---|---|
| Çevrim içi tahmin | Saldırgan giriş ekranına şifre dener | Sitenin deneme sınırı, kilitleme ve iki adımlı doğrulama |
| Çevrim dışı kırma | Sızan veritabanındaki şifre özetleri saldırganın bilgisayarında denenir | Yalnız donanımın gücü ve özet fonksiyonunun yavaşlığı |
| Kimlik bilgisi doldurma | Başka sitede sızmış e-posta ve şifre çifti doğrudan denenir | Her hesapta farklı şifre kullanılması |
Çevrim içi tahmin yavaştır. NIST, doğrulayıcıların art arda en çok 100 başarısız denemeye izin vermesini şart koşar. Asıl tehlike çevrim dışı kırmadır. Veritabanı bir kez sızdığında saldırgan istediği kadar deneme yapar ve sitenin hiçbir haberi olmaz.
Kimlik bilgisi doldurma ise kırma bile gerektirmez. Bir sitede sızan şifren, aynı şifreyi kullandığın her hesabı açar. Sızıntıda geçip geçmediğini şifre sızıntısı kontrol rehberiyle öğrenebilirsin.
Sistemler şifreni nasıl saklar?
İyi tasarlanmış bir sistem şifreni olduğu gibi saklamaz. Şifreyi tek yönlü bir fonksiyondan geçirir ve çıkan özeti, yani hash değerini saklar. Girişte yazdığın şifrenin özeti yeniden hesaplanır ve kayıtlı özetle karşılaştırılır.
Tek yönlü olmak, özetten şifreye doğrudan dönülemeyeceği anlamına gelir. Ama saldırgan geri dönmeye çalışmaz. Olası şifreleri tek tek özetler ve sonucu çalınan özetle karşılaştırır. Eşleşme bulduğu anda şifren ortaya çıkar. Özetin nasıl çalıştığını ve MD5 ile SHA farkını hashing nedir yazısında anlattık.
Brute force nedir, sözlük saldırısından farkı ne?
Saldırgan tahminlerini rastgele seçmez. Yöntemler en olası şifreden en zora doğru sıralanır:
- Sözlük saldırısı: Önceki sızıntılardan derlenmiş milyonlarca gerçek şifre denenir. "123456", "qwerty" ya da bir takım adı ilk dakikada düşer.
- Kurallı sözlük: Aynı liste, insanların sık yaptığı değişikliklerle genişletilir: sona yıl eklemek, ilk harfi büyütmek, "a" yerine "@" yazmak.
- Brute force (kaba kuvvet): Belirli uzunluktaki bütün karakter birleşimleri sırayla denenir. Yalnız kısa şifrelerde pratiktir.
- Parola püskürtme: Az sayıda yaygın şifre, çok sayıda hesaba denenir. Hesap kilitleme sınırına takılmamak için kullanılır.
Bu saldırıların giriş ekranına karşı nasıl yürütüldüğünü ve savunulduğunu Hydra ve brute-force yazısında bulabilirsin. Başkasına ait bir sisteme izinsiz şifre denemek suçtur. Bu teknikleri yalnız kendi laboratuvarında ya da izinli ortamlarda öğren.
Uzunluk neden karmaşıklıktan daha önemli?
Her eklenen karakter, olası birleşim sayısını çarpar. Aşağıdaki tabloda bir varsayım kullandık: hızlı ve tuzsuz bir özet fonksiyonuna karşı saniyede 10 milyar tahmin yapan bir saldırgan. Süreler, bütün olasılıkları denemek için gereken en uzun süredir ve yalnız rastgele seçilmiş şifreler için geçerlidir.
| Şifre | Olası birleşim | Bütün olasılıkları denemek |
|---|---|---|
| 8 küçük harf | yaklaşık 2,1 × 10¹¹ | yaklaşık 21 saniye |
| 8 karakter, tüm klavye | yaklaşık 6,6 × 10¹⁵ | yaklaşık 8 gün |
| 12 küçük harf | yaklaşık 9,5 × 10¹⁶ | yaklaşık 110 gün |
| 5 rastgele kelime (7.776 kelimelik listeden) | yaklaşık 2,8 × 10¹⁹ | yaklaşık 90 yıl |
| 15 küçük harf | yaklaşık 1,7 × 10²¹ | yaklaşık 5.300 yıl |
Tablo iki şeyi gösterir. Birincisi, uzunluk karmaşıklıktan çok daha fazla korur. İkincisi, bu hesap yalnız rastgele şifreler için geçerlidir. İnsanın seçtiği "Galatasaray1905*" gibi bir şifre on altı karakter olsa da sözlükte ve kurallarda saniyeler içinde bulunur.
NIST'in güncel rehberi de bu yüzden tek başına kullanılan şifreler için en az 15 karakter ister ve karakter türü karıştırma zorunluluğunu yasaklar.
Tablodaki süreler en kötü saklama yöntemi için hesaplandı. Şifre Argon2id ya da bcrypt gibi yavaş bir fonksiyonla saklanıyorsa her tahmin bilerek pahalı hâle gelir. Saldırganın saniyedeki deneme sayısı birkaç kat değil, büyüklük mertebeleriyle düşer ve aynı şifre çok daha uzun süre dayanır.
Tuzlama ve yavaş özet fonksiyonları neyi değiştirir?
Şifrenin kırılma hızını kullanıcı kadar onu saklayan sistem de belirler.
| Saklama yöntemi | Ne olur | Sızıntıda sonuç |
|---|---|---|
| Düz metin | Şifre olduğu gibi tutulur | Hemen okunur |
| Tuzsuz hızlı özet (MD5, SHA-256) | Aynı şifre aynı özeti üretir | Hazır tablolar ve hızlı donanımla toplu kırılır |
| Tuzlu hızlı özet | Her kayda rastgele tuz eklenir | Hazır tablolar işe yaramaz, deneme hâlâ hızlı |
| Tuzlu yavaş özet (Argon2id, scrypt, bcrypt) | Her deneme bilerek pahalı yapılır | Deneme maliyeti katlanarak artar |
OWASP'ın parola saklama rehberi, SHA-256 gibi hızlı özet fonksiyonlarının parola için uygun olmadığını yazar, çünkü grafik işlemciler bu hesaplamayı çok ucuza yapar. Önerilen ilk seçenek Argon2id'dir: en az 19 MiB bellek, 2 yineleme ve 1 paralellik derecesi. Eski sistemlerde bcrypt kullanılıyorsa iş faktörü en az 10 olmalıdır. bcrypt çoğu uygulamada 72 baytı aşan girdiyi dikkate almaz. FIPS uyumu gerekiyorsa PBKDF2-HMAC-SHA256 için 600.000 yineleme önerilir.
NIST de şifrelerin tuzlanıp uygun bir parola özetleme yöntemiyle saklanmasını ve tuzun en az 32 bit olmasını şart koşar. Bu işi uygulamalı görmek istersen laboratuvarda bir veritabanı kaydındaki şifrenin gerçek hâlini inceleyebilirsin.
Geliştiriciysen şifreleri nasıl saklamalısın?
Kendi uygulamanda kullanıcı şifresi tutuyorsan kırılma hızının büyük kısmı senin kararlarına bağlıdır. NIST ve OWASP rehberlerinden çıkan kısa kontrol listesi:
- Şifreyi asla geri açılabilir biçimde şifreleme ve düz metin tutma. Tuzlu, yavaş bir özet kullan. Argon2id ilk tercihtir.
- Kendi özetleme yöntemini icat etme. Dilinin olgun bir kütüphanesini kullan.
- Yeni şifreleri sızmış ve yaygın şifreler listesiyle karşılaştır, listedeyse reddet.
- En az 64 karakterlik şifreye izin ver, girilen şifreyi kırpma.
- Başarısız denemeleri sınırla ve şüpheli girişleri günlüğe yaz. Şifrenin kendisini hiçbir günlüğe yazma.
- Eski ve hızlı özetlerle saklanan kayıtları, kullanıcı bir sonraki girişini yaptığında modern yönteme taşı.
Şifreni kırılmaktan nasıl korursun?
Sistemin şifreni nasıl sakladığını seçemezsin. Ama kendi payını tamamen kontrol edebilirsin:
- Her hesaba ayrı şifre ver. Kimlik bilgisi doldurmayı tek başına durdurur.
- Uzun ve rastgele şifre kullan. Parola yöneticisinin ürettiği 20 karakterlik rastgele bir şifre ya da birbiriyle ilgisiz beş kelime yeterlidir. Yöneticileri parola yöneticisi rehberinde karşılaştırdık.
- İki adımlı doğrulamayı aç. Şifren kırılsa bile ikinci adımı geçemeyen kişi giremez.
- Destekleyen hesaplarda passkey kullan. Passkey'de kırılacak bir şifre özeti yoktur.
- Sızıntı uyarılarını takip et. Şifren bir sızıntıda çıkarsa o şifreyi her yerde değiştir.
Şifreyi takvime göre değiştirmek bu listede yok. NIST bunu artık yasaklıyor. Nedenini ve hangi durumda değiştirmen gerektiğini şifre ne sıklıkla değiştirilmeli yazısında anlattık.
Bir şirketin veritabanı sızdıysa şirketin de yükümlülükleri vardır. Türkiye'de veri sorumlusu ihlali öğrendikten sonra gecikmeksizin ve en geç 72 saat içinde Kurul'a bildirir. Ayrıntıları KVKK veri ihlali bildirimi yazısında bulabilirsin.
Kaynaklar
Sık sorulan sorular
Brute force nedir?
Brute force, yani kaba kuvvet saldırısı, bir şifreyi bulmak için olası bütün karakter birleşimlerini sırayla denemektir. Kısa şifrelerde hızlı sonuç verir, uzunluk arttıkça gereken süre katlanarak büyür. Gerçek saldırılarda genellikle önce sızmış şifre listeleri ve onların türevleri denenir. Başkasına ait sisteme izinsiz denemek suçtur.
Hash ile şifreleme aynı şey mi?
Değil. Şifrelemede veri anahtarla geri açılabilir. Hash ise tek yönlü bir özettir ve geri çevrilmesi amaçlanmaz. Bu yüzden iyi tasarlanmış bir sistem şifreni saklamaz, onun tuzlanmış özetini saklar. Girişte yazdığın şifrenin özeti yeniden hesaplanır ve kayıtlı özetle karşılaştırılır. Şifreni unutursan sistem eskisini söyleyemez, yenisini belirlemeni ister.
Tuz (salt) şifremi nasıl korur?
Tuz, her şifreye özetlenmeden önce eklenen rastgele bir değerdir. Aynı şifreyi kullanan iki kişinin kaydı bu sayede farklı özet üretir. Saldırgan hazır özet tablolarını kullanamaz ve her kaydı ayrı ayrı denemek zorunda kalır. NIST, tuzun en az 32 bit olmasını şart koşar. Tuzun gizli olması gerekmez, benzersiz olması yeter.
Kimlik bilgisi doldurma (credential stuffing) nedir?
Bir sitenin sızıntısından çıkan e-posta ve şifre çiftlerinin, otomatik araçlarla başka sitelerde denenmesidir. Şifre kırmaya gerek kalmaz, çünkü kullanıcı aynı şifreyi birçok yerde kullanmıştır. En etkili korunma her hesaba ayrı şifre vermek ve iki adımlı doğrulama açmaktır. Hizmet sağlayıcılar da sızmış şifreleri kayıt sırasında reddetmelidir.
Şifremi düzenli olarak değiştirmem kırılmasını önler mi?
Önlemez. Sızan bir şifre genellikle hemen denenir, aylar sonra yapılan değişim zararı geri almaz. NIST güncel rehberinde takvime bağlı zorunlu değişimi yasaklar ve değişimi ele geçirilme kanıtına bağlar. Kırılmayı asıl önleyen şey uzun, rastgele ve yalnız o hesaba ait bir şifre ile iki adımlı doğrulamadır.
- parola kırma
- hash
- tuzlama
- brute force
- Argon2
- parola güvenliği