Araç hakkında
Parolalar neden SHA-256 ile değil, yavaş bir fonksiyonla saklanır?
SHA-256 gibi genel hash fonksiyonları hızlı olacak şekilde tasarlanmıştır; tek bir ekran kartı saniyede milyarlarca SHA-256 hesaplayabilir. Veritabanı sızdığında saldırgan her aday parolayı bu hızla deneyebilir. Parola hashleme fonksiyonları ise ayarlanabilir bir maliyetle bilinçli olarak yavaştır ve her parolaya ayrı rastgele salt ekler; böylece aynı parolalar farklı hash üretir ve önceden hesaplanmış tablolar işe yaramaz.
bcrypt hash’inin yapısı
bcrypt, Blowfish şifresinin pahalı anahtar hazırlama adımını 2^maliyet kez tekrarlar. Araç maliyet 12 kullanır; maliyeti bir artırmak süreyi iki katına çıkarır. Çıktı 60 karakterlik tek bir dizedir:
$2b$12$ R9h/cIPz0gi.URNNX3kh2O PST9/PgBkqquzi.Ss7KIUgO2t0jWMUW
│ │ └ 22 karakter salt └ 31 karakter hash
│ └ maliyet (2¹² tur)
└ sürümSalt ve maliyet dizenin içinde olduğu için veritabanında ayrı sütun gerekmez; doğrulama için yalnız bu dizeyi saklamanız yeterlidir.
72 bayt sınırı
bcrypt girdinin yalnız ilk 72 baytını kullanır. Türkçe karakterler UTF-8’de 2 bayt, emojiler 4 bayt tuttuğundan 72 bayt 72 karakterden az olabilir. Araç sessizce kesmek yerine sınırı aşan girdide hata verir. Daha uzun parolaları desteklemesi gereken yeni sistemlerde Argon2id kullanın.
Sık sorulan sorular
Hangi maliyeti seçmeliyim?
OWASP en az 10 önerir. Sunucunuzda tek doğrulamanın 100–300 ms sürdüğü en yüksek değeri seçin ve donanım hızlandıkça artırın. Bu araç sabit olarak 12 kullanır.
$2a$, $2b$ ve $2y$ arasındaki fark nedir?
Bunlar farklı uygulamalardaki hata düzeltmelerini işaretleyen sürüm önekleridir. Güncel kütüphaneler $2b$ üretir; doğrulayıcı $2a$ ve $2b$ biçimlerini kabul eder.