Ana içeriğe geç

bcrypt

Okunuşu
bi-kript
Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/bcrypt

Kısaca

bcrypt, rastgele bir salt ekleyen ve kasıtlı olarak yavaş çalışan bir parola hashleme fonksiyonudur; böylece çalınan hash'leri tahminle kırmak çok pahalıdır.

bcrypt nedir?

bcrypt, Niels Provos ve David Mazières'in 1999'da yayımladığı, Blowfish şifreleme algoritmasına dayanan ve parola saklamak için tasarlanmış bir hash fonksiyonudur. Her parola için rastgele 128 bitlik bir salt üretir ve $2b$12$ gibi bir önekle başlayıp salt ve hash ile devam eden, sürümü, maliyet faktörünü, salt'ı ve sonucu birlikte kaydeden 60 karakterlik tek bir dize döndürür. PHP'nin password_hash fonksiyonunun varsayılan algoritmasıdır ve neredeyse her dilde kullanılabilir.

SHA-256 gibi sıradan hash'ler hızlı olacak şekilde tasarlanır; bu yüzden çalınmış bir veritabanına ve bir GPU'ya sahip saldırgan saniyede milyarlarca parola tahmini deneyebilir. bcrypt ise kasıtlı olarak yavaştır: maliyet faktörü her hash'in ne kadar iş gerektireceğini belirler ve faktördeki her 1 artış bu işi ikiye katlar; böylece bir giriş saniyenin küçük bir kesrini alırken milyonlarca tahmin çok pahalı hâle gelir. Bu, dönmesi bir saniye süren bir kilide benzer: sahibi için sorun değildir, binlerce anahtar deneyen bir hırsız içinse felç edicidir. Rastgele salt da aynı parolaların farklı hash'ler üretmesini sağlar; böylece önceden hesaplanmış tablolar işe yaramaz ve her hesaba ayrı ayrı saldırmak gerekir.

Pratikte kayıt sırasında kütüphanenin hash fonksiyonunu, girişte ise salt'ı ve maliyeti saklanan dizeden okuyan karşılaştırma fonksiyonunu çağırırsınız; donanım hızlandıkça maliyeti artırır ve her parolayı sahibinin bir sonraki girişinde yeniden hash'lersiniz. OWASP en az 10 maliyet önerir; bcrypt bir parolanın yalnızca ilk 72 baytını kullandığından bazı kütüphaneler daha uzun girdileri reddeder. 2015'teki Password Hashing Competition'ı kazanan Argon2id, bellek açısından da zorlayıcı (memory-hard) olduğu ve bu sayede GPU'larla ve özel donanımla yapılan saldırıları pahalılaştırdığı için artık yeni sistemlerde genellikle önerilen seçenektir. bcrypt ise yaygın biçimde kullanılmaya devam eder ve hâlâ kabul edilebilir sayılır.

bcrypt sıklıkla genel amaçlı hashleme ve şifrelemeyle karıştırılır. SHA-256 ve MD5, sağlama toplamları (checksum) ve imzalar için kullanılan hızlı hash'lerdir; salt eklense bile parolaları saklamak için tek başlarına asla kullanılmamalıdır. Şifreleme bir anahtarla geri çevrilebilir; bcrypt hash'i ise parolaya geri döndürülemez, yalnızca bir tahmin aynı şekilde hash'lenerek denetlenebilir.

Önemli noktalar

  • bcrypt, parola saklamak için tasarlanmış yavaş ve salt'lı bir hash'tir.
  • Maliyet faktörü her adımda işi ikiye katlar ve zamanla artırılabilir.
  • Sürüm, maliyet, salt ve hash 60 karakterlik tek bir dizede birlikte saklanır.
  • Bir parolanın yalnızca ilk 72 baytı kullanılır.
  • Argon2id daha yeni öneridir; bcrypt en az 10 maliyetle kabul edilebilir olmaya devam eder.

Örnek

bcrypt ile parola hash'lemek ve denetlemek (Python)python
import bcrypt

password = "correct horse battery staple".encode()

# At sign-up: the random salt and the cost are stored inside the result
hashed = bcrypt.hashpw(password, bcrypt.gensalt(rounds=12))
print(hashed)  # b'$2b$12$...' (60 characters: version, cost, salt, hash)

# At login: re-hashes the attempt with the stored salt and cost, then compares
print(bcrypt.checkpw(password, hashed))        # True
print(bcrypt.checkpw(b"wrong guess", hashed))  # False

Sık sorulan sorular

bcrypt hâlâ güvenli mi?

Evet. En az 10 maliyet faktörüyle hâlâ kabul edilebilir sayılır ve milyonlarca hesabı korur. Yeni sistemler için genellikle Argon2id önerilir; çünkü her tahmin ayrıca büyük miktarda bellek gerektirir ve bu, GPU'lardaki saldırıları yavaşlatır.

bcrypt ile SHA-256 arasındaki fark nedir?

SHA-256, sağlama toplamları, imzalar ve veri bütünlüğü için kullanılan hızlı ve genel amaçlı bir hash'tir. bcrypt ise salt'ı içinde gelen, kasıtlı olarak yavaş bir parola hash'idir; bu yüzden saldırganlar çalınmış hash'lere karşı saniyede çok daha az tahmin deneyebilir.

bcrypt hash'i çözülebilir mi?

Hayır. bcrypt tek yönlüdür. Bir girişi denetlemek için kütüphane, girilen parolayı hash'in içinde saklanan salt ve maliyetle yeniden hash'ler ve iki sonucu karşılaştırır.

İlgili sayfalar

Kaynaklar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar