Parolalar veritabanında nasıl saklanmalıdır? bcrypt ve Argon2 neden tercih edilir?

Cevap

Parolalar asla düz metin veya geri çözülebilir şifreleme ile saklanmaz. Tek yönlü, yavaş ve salt'lı bir hash fonksiyonu kullanılır.

Neden MD5 / SHA-256 yetmez?

Bu fonksiyonlar hız için tasarlanmıştır. Bir GPU saniyede milyarlarca SHA-256 hesaplayabilir; sızan bir veritabanında kaba kuvvet ve sözlük saldırısı çok hızlı olur.

Doğru yaklaşım

  • Salt: her kullanıcıya özel rastgele değer. Aynı parolalar farklı hash üretir, rainbow table işe yaramaz. bcrypt ve Argon2 salt'ı hash'in içinde saklar.
  • Maliyet (work factor): hash'i kasıtlı olarak yavaşlatır (ör. ~100–300 ms). Donanım geliştikçe artırılabilir.
  • Argon2id: güncel öneri; CPU yanında bellek maliyeti de olduğundan GPU/ASIC saldırılarına daha dayanıklı. bcrypt hâlâ güvenli ve yaygın.
import bcrypt from "bcrypt";

const hash = await bcrypt.hash(password, 12); // cost = 12
// kayıt: users.password_hash = hash

const ok = await bcrypt.compare(girilenParola, user.password_hash);

Ek noktalar

  • Karşılaştırma kütüphanenin compare fonksiyonuyla yapılır (sabit zamanlı).
  • İsteğe bağlı pepper: uygulama sırrı olarak ayrı saklanan ek gizli değer.
  • Giriş denemelerine rate limit ve hesap kilitleme eklenir.
  • bcrypt girdiyi 72 byte ile sınırlar; çok uzun parolalarda bu bilinmelidir.
  1. CORS nedir? Neden CORS hatası alırız?OrtaWeb GüvenliğiFull Stack
  2. XSS ve CSRF saldırıları nedir, nasıl korunulur?ZorWeb GüvenliğiFull Stack
  3. Authentication ile authorization arasındaki fark nedir?KolayWeb GüvenliğiFull Stack
  4. Güvenli cookie ayarları nelerdir? Session hijacking nasıl önlenir?OrtaWeb GüvenliğiFull Stack
  5. Content Security Policy (CSP) nedir ve nasıl yapılandırılır?ZorWeb GüvenliğiFull Stack
  6. OWASP Top 10 nedir? En önemli maddelerini özetleyin.OrtaWeb GüvenliğiFull Stack

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle