bcrypt'in 72 bayt sınırı dile göre farklı işler. Düz Latin harfleri UTF-8'de 1 bayt kaplarken, Türkçeye özgü ğ, ı, ş, ç, ö, ü harfleri 2 bayt kaplar. Bu yüzden bu harfleri sıkça içeren bir Türkçe parola — mesela "çöşğüıİĞÜŞÖÇ" gibi karakterlerin yoğun geçtiği bir parola — 72 karaktere değil, harf karışımına bağlı olarak daha az karaktere ulaştığında sınıra dayanabilir; sıradan bir İngilizce parolanın aksine, Türkçe karakter yoğunluğu gerçek sınırı biraz aşağı çeker.
Hız parola güvenliğine neden zarar verir
Bir saldırgan bir parola hash'leri veritabanını çalarsa, orijinal parolayı kaba kuvvetle kurtarmaya çalışır. SHA-256 gibi hızlı bir fonksiyonla, modern donanım saniyede milyarlarca kombinasyonu kontrol edebilir. Bcrypt kasıtlı olarak tek bir hash'lemeyi yaklaşık 100 milisaniye sürdürür, bu da kaba kuvveti büyüklük mertebeleri kadar daha yavaş ve pahalı hale getirir.
Cost factor nedir
Bcrypt'in "cost" parametresi iç round sayısını 2'nin kuvveti olarak belirler (2^cost, genellikle 10-12). Bunu bir artırmak hash'leme süresini yaklaşık iki katına çıkarır — ve saldırganın toplam kaba kuvvet maliyetini de aynı oranda ikiye katlar.
Yerleşik tuz (salt)
Bcrypt her parola için otomatik olarak benzersiz rastgele bir tuz oluşturur ve doğrudan sonuca gömer — ayrıca saklanacak bir şey yoktur. İki aynı parola farklı hash'ler üretir, ve yaygın parolalar için önceden hesaplanmış tablolar (rainbow table) işe yaramaz hale gelir — her hash'e ayrı ayrı saldırmak gerekir.
Bu neden gereklidir
- Kullanıcı parolalarını bir uygulamanın veritabanında doğru şekilde saklamak.
- SHA-256 veya MD5'in parola hash'leme için neden kötü bir seçim olduğunu anlamak.
- Bcrypt kullanan bir kimlik doğrulama sistemini test etmek veya taşımak.
Gizli bir sınır: 72 bayt
Bcrypt bir parolanın yalnızca ilk 72 baytını işler — bundan fazlası uyarı olmadan basitçe atılır. Türkçe karakter içermeyen parolalar için bu sınır 72 karaktere denk gelirken, ğ/ı/ş/ç/ö/ü gibi 2 baytlık harfler arttıkça karakter cinsinden sınır biraz düşer — kayıt formunda maksimum parola uzunluğunu belirlerken akılda tutmakta fayda var.