Tüm yazılar

#siber güvenlik#şifre güvenliği#veri sızıntısı

Şifreniz Sızdı mı? Şifrenizi Kimseye Söylemeden Öğrenmenin Yolu

"123456" 210 milyon, "galatasaray" 298 bin kez sızmış. Şifrenizi kimseye göndermeden sızıp sızmadığını nasıl öğrenirsiniz ve siteler şifreleri nasıl saklamalı?

Şifreniz Sızdı mı? Şifrenizi Kimseye Söylemeden Öğrenmenin Yolu
İçindekiler 8

"123456" şifresi, bilinen veri sızıntılarında tam 210.461.208 kez görülmüş. "galatasaray" 298.542 kez, "fenerbahce" 246.005 kez, "besiktas" 121.469 kez. Şifreniz sızdı mı diye merak ediyorsanız işin ilginç yanı şu: bunu şifrenizi hiçbir siteye göndermeden öğrenebilirsiniz. Bu yazıda o matematiksel hileyi, kendi bilgisayarınızda çalıştırabileceğiniz bir kontrolü ve sitelerin şifrenizi aslında nasıl saklaması gerektiğini anlatıyoruz.

Kısaca:

  • Have I Been Pwned'ın Pwned Passwords servisi, sızıntılarda görülen yüz milyonlarca şifreyi ücretsiz sorgulatıyor.
  • Şifrenizin kendisini değil, özetinin (hash) yalnızca ilk 5 karakterini gönderirsiniz; buna k-anonimlik denir.
  • İyi bir site şifrenizi düz metin olarak değil, Argon2id gibi yavaş bir algoritmayla tuzlanmış özet olarak saklar.
  • NIST'in güncel kuralları: tek başına kullanılan şifre en az 15 karakter, zorla periyodik değişim yok, sızmış şifreler reddedilir.

En çok sızan şifreler hangileri?

Aşağıdaki sayıları bu yazıyı hazırlarken (30 Eylül 2026) Pwned Passwords servisinden kendimiz sorguladık. Sayı, o şifrenin bilinen sızıntı verilerinde kaç kez geçtiğini gösteriyor:

Şifre Sızıntılarda görülme sayısı
123456 210.461.208
123456789 81.108.282
12345678 70.606.130
password 52.372.427
qwerty 30.812.897
asdasd 3.129.629
galatasaray 298.542
fenerbahce 246.005
besiktas 121.469
sifre123 34.364

Bu listede bir şifre görüyorsanız, saldırganların deneme listelerinin en başında olduğunu bilin. Saldırganlar şifreleri tek tek tahmin etmez; önce bu tür sızmış listeleri dener. Takım adı, doğum yılı ve klavye dizileri (asdasd, qwerty) bu yüzden saniyeler içinde düşer.

Şifreniz sızdı mı, göndermeden nasıl kontrol edilir?

İlk bakışta bir paradoks gibi görünüyor: bir servisin şifrenizi sızıntı listesinde bulabilmesi için onu bilmesi gerekmez mi? Gerekmiyor. Yöntem üç adımdan oluşuyor.

1. Şifrenin özetini alırsınız. Özet (hash), bir veriyi sabit uzunlukta bir parmak izine çeviren tek yönlü bir fonksiyondur. password kelimesinin SHA-1 özeti şudur:

5BAA61E4C9B93F3F0682250B6CF8331B7EE68FD8

Özetten şifreye geri dönmenin doğrudan bir yolu yoktur; ama aynı şifre her zaman aynı özeti verir.

2. Özetin yalnızca ilk 5 karakterini gönderirsiniz. Yukarıdaki örnekte bu 5BAA6. Servise sadece "5BAA6 ile başlayan özetleri ver" dersiniz.

3. Karşılaştırmayı kendi bilgisayarınızda yaparsınız. Servis, 5BAA6 ile başlayan tüm özetlerin geri kalanını ve her birinin kaç kez görüldüğünü döndürür. Bizim denemelerimizde her istek yaklaşık 2.000 satır getirdi. Listede kendi özetinizin geri kalanını (1E4C9B93F3F...) ararsınız.

Servis tarafında durum şu: 5 karakterlik bir önek, yaklaşık 2.000 farklı şifreyle eşleşir. Hangisini sorduğunuzu bilemez; üstelik sizin şifreniz o listede hiç olmayabilir. Buna k-anonimlik denir: sorgunuz, binlerce başka olasılığın arasında kaybolur.

Have I Been Pwned bir adım daha ileri gidiyor. İsteğe Add-Padding: true başlığı eklerseniz, cevaba sayısı 0 olan sahte satırlar eklenir; kodunuz bunları görmezden gelir. Böylece ağı izleyen biri, cevabın boyutuna bakarak hangi öneki sorduğunuzu da tahmin edemez.

Kendi bilgisayarınızda deneyin

Şifreniz sızdı mı sorusunu kendiniz cevaplamak için aşağıdaki Python kodu yeterli; yukarıdaki üç adımı birebir uygular. Ek bir kütüphane gerekmez, API anahtarı da istemez. Şifreyi yazarken ekranda görünmez ve şifrenin kendisi bilgisayarınızdan hiç çıkmaz:

import getpass, hashlib, urllib.request

sifre = getpass.getpass("Şifre: ")  # yazarken ekranda görünmez
ozet = hashlib.sha1(sifre.encode("utf-8")).hexdigest().upper()
onek, sonek = ozet[:5], ozet[5:]

istek = urllib.request.Request(
    "https://api.pwnedpasswords.com/range/" + onek,
    headers={"User-Agent": "sifre-kontrol", "Add-Padding": "true"},
)
cevap = urllib.request.urlopen(istek).read().decode()

for satir in cevap.splitlines():
    s, adet = satir.split(":")
    if s == sonek and int(adet) > 0:
        print(f"Bu şifre {int(adet):,} kez sızıntıda görülmüş. Hemen değiştirin!")
        break
else:
    print("Bu şifre bilinen sızıntılarda yok.")

Kodu kontrol.py olarak kaydedip python kontrol.py ile çalıştırabilirsiniz. "Sızıntılarda yok" sonucu şifrenin güçlü olduğu anlamına gelmez; sadece bilinen listelerde bulunmadığını gösterir.

Siteler şifrenizi nasıl saklamalı?

Sızıntı haberlerinde asıl kritik soru, sızan verinin içinde şifrelerin hangi halde olduğudur. Üç seviye var:

  • Düz metin: Şifre olduğu gibi veritabanında durur. Veritabanı sızdığı an bütün şifreler okunur. Kabul edilemez.
  • Hızlı özet (MD5, SHA-1, SHA-256): Şifre özetlenmiştir ama bu algoritmalar hız için tasarlanmıştır. OWASP'ın ifadesiyle hızlı özetler, saldırganın çok kısa sürede çok sayıda tahmin denemesine izin verir. Yukarıdaki sızmış şifre listesi, bu tür özetleri çözmenin en kısa yoludur.
  • Yavaş, tuzlanmış özet (Argon2id, scrypt, bcrypt): Her şifreye rastgele bir tuz (salt) eklenir ve özetleme bilerek yavaş, hatta bellek yoğun yapılır. Aynı şifreyi kullanan iki kullanıcının özeti bile farklı çıkar; hazır tablolar (rainbow table) işe yaramaz ve her tahmin saldırgana pahalıya patlar.

OWASP'ın şifre saklama rehberi bugün şu ayarları öneriyor:

Algoritma Önerilen en düşük ayar Ne zaman
Argon2id 19 MiB bellek, 2 iterasyon, 1 paralellik İlk tercih
scrypt N=2^17, r=8, p=1 Argon2id yoksa
bcrypt İş faktörü 10 ve üzeri, en fazla 72 bayt şifre Eski sistemler
PBKDF2 HMAC-SHA-256 ile 600.000 ve üzeri iterasyon FIPS-140 uyumu gerekiyorsa

Buradaki ince nokta, SHA-256 gibi "güvenli" diye bilinen bir algoritmanın bile şifre saklamak için yanlış araç olması. Özetleme algoritmasının güçlü olması yetmez; yavaş olması gerekir.

Şifre kuralları değişti: NIST ne diyor?

"En az bir büyük harf, bir rakam, bir özel karakter ve her 90 günde bir değiştir." Bu kurallar yıllarca standart gibi uygulandı. ABD Ulusal Standartlar ve Teknoloji Enstitüsü'nün (NIST) dijital kimlik rehberi SP 800-63B'nin güncel sürümü ise bunların çoğunu tersine çeviriyor:

  • Uzunluk esas: Tek başına kullanılan şifreler en az 15 karakter olmalı. Çok faktörlü doğrulamanın parçası olan şifrelerde alt sınır 8 karakter.
  • Uzun şifreye izin: Sistemler en az 64 karakterlik şifreleri kabul etmeli.
  • Karakter zorunluluğu yok: "Büyük harf, rakam, sembol karıştır" gibi kompozisyon kuralları dayatılmamalı.
  • Zorla periyodik değişim yok: Kullanıcıdan belirli aralıklarla şifre değiştirmesi istenmemeli; ancak şifrenin ele geçirildiğine dair kanıt varsa değişim zorunlu.
  • Sızmış şifreler reddedilmeli: Yeni şifre, bilinen sızmış ve yaygın şifrelerden oluşan bir listeyle karşılaştırılmalı ve oradaysa reddedilip nedeni kullanıcıya söylenmeli.

Son madde, yazının başındaki k-anonimlik yöntemini doğrudan kayıt formlarına taşıyor. Kullanıcı "galatasaray" yazdığında sistem bunu kabul etmek yerine "bu şifre sızıntılarda 298 bin kez görülmüş" diyebilir.

Kendinizi korumak için ne yapmalısınız?

  1. Şifre yöneticisi kullanın. Her site için farklı, uzun ve rastgele şifreyi ezberlemeniz gerekmez; yönetici sizin yerinize üretir ve hatırlar.
  2. Uzun parola cümleleri seçin. Rastgele seçilmiş birkaç kelimeden oluşan 15+ karakterlik bir ifade, kısa ve karmaşık bir şifreden hem daha güçlü hem daha akılda kalıcıdır.
  3. Şifreleri tekrar kullanmayın. Bir sitedeki sızıntı, aynı şifreyi kullandığınız diğer hesapları da açar.
  4. İki adımlı doğrulamayı açın. Şifreniz sızsa bile ikinci faktör olmadan hesaba girilemez.
  5. E-postanızı da kontrol edin. Have I Been Pwned'ın ana sayfasında e-posta adresinizin hangi sızıntılarda yer aldığını görebilirsiniz.

Sıkça sorulan sorular

Şifremi Have I Been Pwned'a yazmak güvenli mi?

Pwned Passwords sayfası ve API, şifrenizin kendisini değil SHA-1 özetinin ilk 5 karakterini gönderir. Servis, sorduğunuz şifreyi bu önekle eşleşen binlerce olasılıktan ayırt edemez. Yine de içiniz rahat etmiyorsa yukarıdaki Python kodunu okuyup kendi bilgisayarınızda çalıştırabilirsiniz.

Şifrem listede yoksa güvende miyim?

Tam olarak değil. Liste yalnızca bilinen sızıntıları kapsar. Kısa ya da tahmin edilebilir bir şifre (isim, doğum tarihi) listede olmasa da kısa sürede kırılabilir. Uzunluk ve benzersizlik hâlâ en önemli iki kural.

SHA-1 kırılmadı mı, neden hâlâ kullanılıyor?

SHA-1 çakışma saldırılarına karşı artık güvenli sayılmıyor ve şifre saklamak için kesinlikle kullanılmamalı. Pwned Passwords'ta ise SHA-1 yalnızca şifreyi gizleyerek aramak için bir "adres" işlevi görüyor; bu kullanımda çakışma saldırısının bir önemi yok.

Şifremi düzenli olarak değiştirmeli miyim?

NIST'in güncel rehberine göre hayır; zorla periyodik değişim, insanları tahmin edilebilir küçük değişikliklere (Sifre2025! → Sifre2026!) itiyor. Şifrenizi, sızdığını ya da ele geçirildiğini düşündüğünüzde hemen değiştirin.

Bir sızıntının hasarını belirleyen şey, çoğu zaman sızıntının kendisi değil, şifrelerin nasıl saklandığıdır. Kullanıcı verisini doğru yöntemlerle koruyan bir web uygulaması geliştirmek istiyorsanız web uygulama geliştirme sayfamızdan bize ulaşabilirsiniz.

Kaynaklar

Kaynak: haveibeenpwned.com

PaylaşLinkedInXWhatsApp
Bu konuda yardıma mı ihtiyacınız var?

Yazıda anlattıklarımızı kendi projenize uygulamak isterseniz birlikte bakalım.

Bize yazın
YE

EngerekTech’in kurucusu. İşletmeler için web, mobil ve kurumsal yazılım geliştiriyor; Angular, Spring Boot ve Flutter ile çalışıyor, KPSS Düello ve Kelime Kavanozu uygulamalarını geliştirdi. Blogda yapay zekâ araçlarını ve yazılım geliştirmeyi kendi projelerinde kullandığı haliyle anlatıyor.