Bcrypt Nedir? Şifreler İçin Güvenli Hash Algoritması Nasıl Çalışır?

Bcrypt, parola güvenliğini sağlamak amacıyla tasarlanan bir hash fonksiyonudur. Şifreleri düz metin halinde depolamak yerine karmaşık bir şifreli forma dönüştürerek veritabanında saklar. Yavaş hesaplama ve salt (tuz) ekleme sayesinde brute-force saldırılarına karşı dirençlidir.

5 dk okuma
Bcrypt

Bcrypt, parolaları şifreleyerek güvenli bir şekilde depolayan kriptografik bir hash algoritmasıdır. 1999 yılında tasarlanmış olan Bcrypt, web uygulamalarında kullanıcı parolalarını korumak için en yaygın kullanılan yöntemlerden biridir. Hem başlangıç programcıları hem de geniş ölçekli kurumsal sistemlerde standart olarak tercih edilir.

Bcrypt Nasıl Çalışır?

Bcrypt, Blowfish şifrelemesi algoritmasına dayanan bir hash işlevidir. Bir parolanın hash değerini oluştururken birden fazla adım takip eder:

  • Salt Oluşturma: Bcrypt, rastgele bir "salt" (tuz) değeri üretir. Bu, aynı parolaya sahip iki kullanıcının bile farklı hash değerlere sahip olmasını sağlar.
  • Hash Hesaplama: Parola ve salt birleştirilerek Blowfish algoritmasıyla işlenir. Bu işlem amaçlı olarak yavaş ve kaynak yoğundur.
  • Tur Sayısı (Cost Factor): Bcrypt, işlemi belirli sayıda (varsayılan 10-12 tur) tekrar eder. Bu, hash oluşturma işlemini daha güvenli hale getirir.
  • Sonuç Depolama: Elde edilen hash, salt ve tur sayısı bilgisiyle birlikte veritabanında saklanır.

Parola kontrol etmek gerektiğinde, girilen parola aynı salt ve tur sayısıyla hash'lenip, depolanan değerle karşılaştırılır. Eğer eşleşirse, kimlik doğrulama başarılı olur.

Bcrypt'in Avantajları

  • Yavaş Hesaplama: Amaçlı olarak yavaş olması, brute-force saldırılarını pratik olmaz hale getirir.
  • Yerleşik Salt: Her parola için otomatik olarak benzersiz bir salt üretilir, rainbow table saldırılarını önler.
  • Uyarlanabilir Karmaşıklık: Cost factor arttırılarak, bilgisayarlar daha hızlı hale geldikçe algoritmanın güvenliği korumaya devam edilir.
  • Geniş Uyumluluk: Neredeyse tüm programlama dillerinde ve çerçevelerinde Bcrypt kütüphanesi mevcuttur.
  • Basit Entegrasyon: Tek bir fonksiyonla parola hash'leyebilir ve doğrulayabilirsiniz.

Bcrypt'in Dezavantajları

  • Yavaş Hız: Performans açısından önemli olan senaryolarda sorun yaratabilir.
  • 72 Karakter Sınırı: Bcrypt, parolanın ilk 72 karakterini işler; daha uzun parolalar kısaltılır.
  • Eski Tasarım: Günümüz standartlarına göre, Argon2 gibi daha yeni algoritmaların bazı avantajları vardır.
  • Blowfish Sınırlaması: Blowfish şifresinin kendisi 2038 yılı civarında güvenlik sorunlarına açık olabilir (teorik).

Bcrypt Nerede Kullanılır?

"Bcrypt, parolaları bulut uygulamalarından mobil uygulamalara kadar korumak için endüstri standardı haline gelmiştir."

  • Web Uygulamaları: Django, Rails, Spring Boot gibi framework'lerde kullanıcı kayıt ve giriş işlemleri.
  • Mobil Uygulamalar: iOS ve Android uygulamalarında backend kimlik doğrulaması.
  • E-Commerce Platformları: Müşteri hesaplarının korunması.
  • Sosyal Medya Ağları: Milyonlarca kullanıcının parolasını güvence altına alma.
  • Kurumsal Sistemler: İnsan kaynakları, muhasebe gibi hassas uygulamalarda kimlik yönetimi.
  • API Sunucuları: Token tabanlı kimlik doğrulama öncesi parola doğrulaması.

Bcrypt ve Diğer Hash Algoritmaları Karşılaştırması

Algoritma Hız Güvenlik Kullanım Alanı Durum
MD5 Çok Hızlı Düşük Dosya kontrol değerleri Parolalar için kullanılmaz
SHA-1 Hızlı Düşük Dijital imzalar Parolalar için güvenli değil
SHA-256 Hızlı Orta Blockchain, dosya bütünlüğü Parola başına salt gerekir
Bcrypt Yavaş (amaçlı) Yüksek Parola depolama Güncel ve önerilen
Scrypt Çok Yavaş Çok Yüksek Parola depolama, kripto Bcrypt'ten daha güvenli
Argon2 Çok Yavaş Çok Yüksek Parola depolama Yeni ve en güvenli seçenek

Bcrypt'in Tarihçesi

Bcrypt algoritması 1999 yılında Niels Provos ve David Mazières tarafından tasarlanmıştır. OpenBSD işletim sistemi için geliştirilmiş olan bu algoritma, hızlı artan bilgisayar gücüne karşı parola güvenliğini sağlamak amacıyla oluşturulmuştur. O zamandan bu yana, web geliştirme endüstrisinin de benimsenmesiyle küresel olarak yaygınlaşmıştır. Günümüzde, OWASP (Open Web Application Security Project) gibi uluslararası güvenlik kuruluşları tarafından da önerilmektedir.

Bcrypt Kullanırken Önemli Noktalar

  • Yeterli Cost Factor Seçin: En az 10 veya daha yüksek bir cost factor kullanın. Sistem yavaşlıysa, 12'ye kadar çıkarabilirsiniz.
  • Hiçbir Zaman Salt Eklemeyin: Bcrypt, salt'ı otomatik olarak yönetir. Manuel salt eklemeye gerek yoktur.
  • Parolaları Hiçbir Zaman Şifrelemede Bağlayın: Hash algoritmaları tersine çevrilemez olmalıdır; şifreleme (reversible) kullanmayın.
  • Güncellemeleri İzleyin: Bcrypt'in yeni sürümlerini ve güvenlik güncellemelerini takip edin.
  • Argon2'yi de Düşünün: Yeni projeler için, Bcrypt yerine Argon2 tercih etmeyi değerlendirin.

Bcrypt Uygulaması Örnekleri

Python'da (bcrypt kütüphanesiyle):

Parola hash'leme: hashed = bcrypt.hashpw(password.encode(), bcrypt.gensalt(10))

Parola doğrulama: bcrypt.checkpw(password.encode(), hashed)

Node.js'de (bcryptjs kütüphanesiyle):

Parola hash'leme: const hash = await bcrypt.hash(password, 10);

Parola doğrulama: const isValid = await bcrypt.compare(password, hash);

PHP'de:

Parola hash'leme: $hash = password_hash($password, PASSWORD_BCRYPT);

Parola doğrulama: password_verify($password, $hash)

Bcrypt parolalarını tamamen şifreler mi?+
Hayır, Bcrypt hash algoritmasıdır, şifreleme algoritması değildir. Parolaları hash fonksiyonuyla dönüştürür ve bu işlem geri döndürülemez. Şifreleme aksine, hash'lenmiş parolaları asla orijinal parolaya çeviremezsiniz. Bu, güvenlik açısından daha iyidir çünkü veritabanı sızmış olsa bile parolalar kurtarılamaz.
Bcrypt'in 72 karakter sınırı nedir?+
Bcrypt, parolanın yalnızca ilk 72 karakterini işler ve daha uzun parolaları kısaltır. Bu, genellikle uygulamada sorun olmasa da, çok uzun parolalarda güvenlik açısı düşük kalabilir. Bu sınırı aşmak istiyorsanız, parolayı önceden hash'leyerek (örneğin SHA-256 ile) Bcrypt'e gönderebilirsiniz.
Bcrypt ne kadar hızlı parola doğrular?+
Bcrypt'in hızı, seçilen cost factor'e bağlıdır. Varsayılan cost factor 10 ile, bir parolayı hash'lemek ve doğrulamak yaklaşık 100-200 milisaniye sürer. Cost factor 12 ise 400-600 milisaniye alabilir. Bu yavaşlık, brute-force saldırılarını pratik olmaz hale getirmek için amaçlıdır ve çoğu uygulamada fark edilmez.

B harfindeki diğer terimler