Salting
- Türkçe karşılığı
- tuzlama
- Okunuşu
- solting
Günlük kullanımda çoğunlukla İngilizcesi tercih edilir.
Kısaca
Salting, hash'lemeden önce her parolaya benzersiz bir rastgele değer eklemektir; böylece aynı parolalar farklı hash'ler üretir ve kırılmaya karşı dirençli olur.
Salting nedir?
Salt, her parola için ayrı ayrı üretilen, genellikle 16 bayt veya daha uzun rastgele bir dizedir. Parola hash'lenmeden önce salt onunla birleştirilir ve salt, ortaya çıkan hash'in yanında veritabanında saklanır. Kullanıcı giriş yaptığında sunucu saklanan salt'ı alır, yazılan parolayla birleştirir, sonucu hash'ler ve saklanan hash'le karşılaştırır.
Salting, saldırganların bir parola veritabanını çaldıktan sonra kullandığı iki kestirmeyi boşa çıkarır. Salt olmadan password123 seçen herkesin hash'i aynıdır; biri kırılınca hepsi kırılır ve saldırganlar, yaygın parolalar için önceden hesaplanmış devasa hash listeleri olan rainbow table'ları kullanarak parolaları anında bulabilir. Kullanıcı başına benzersiz bir salt ile her hash farklıdır ve her parolaya ayrı ayrı saldırmak gerekir.
Salt'ı her yemeğe eklenen benzersiz bir baharat olarak düşünün: iki aşçı aynı malzemelerle başlayabilir ama ortaya çıkan yemekler farklı tat verir; bu yüzden birini tatmak diğeri hakkında hiçbir şey söylemez. Salt bir sır değildir ve gizlenmesi gerekmez; tek görevi her hash'i benzersiz kılmaktır.
Salting sıklıkla, veritabanının dışında, örneğin bir secrets manager'da tutulan tek bir gizli değeri ek katman olarak ekleyen peppering ile karıştırılır. Pratikte nadiren elle salt eklersiniz; çünkü Argon2id, bcrypt ve scrypt gibi parola hashleme algoritmaları salt'ı otomatik üretir ve hash dizesinin içinde saklar. Salting tek başına yeterli değildir; çünkü SHA-256 gibi hızlı hash'ler yine de hızla kaba kuvvetle kırılabilir, bu yüzden onu her zaman bu kasıtlı yavaş algoritmalardan biriyle birlikte kullanın.
Önemli noktalar
- Salt, hash'lemeden önce her parolaya eklenen benzersiz bir rastgele değerdir.
- Salt'lar, aynı parolaların farklı hash'ler üretmesini sağlar.
- Salting, rainbow table'ları boşa çıkarır ve saldırganı her hash'i ayrı kırmaya zorlar.
- Salt'lar hash'le birlikte saklanır ve gizli olmaları gerekmez.
- Argon2id, bcrypt ve scrypt salting'i otomatik yapar.
Örnek
import { randomBytes, scryptSync, timingSafeEqual } from "node:crypto";
// Manual salting shown for clarity; bcrypt and Argon2 libraries do this for you
// Registration: a new random salt for every password
const salt = randomBytes(16).toString("hex");
const hash = scryptSync(password, salt, 64).toString("hex");
await db.users.save({ email, salt, hash }); // the salt is stored, not secret
// Login: repeat the hash with the stored salt and compare in constant time
const attempt = scryptSync(loginPassword, user.salt, 64);
const ok = timingSafeEqual(attempt, Buffer.from(user.hash, "hex"));Sık sorulan sorular
Salt'ın gizli olması gerekir mi?
Hayır. Sunucunun girişleri doğrulamak için ihtiyaç duyduğu salt, hash'in yanında düz biçimde saklanır. Amacı her hash'i benzersiz kılmaktır, bilgiyi gizlemek değil.
Salt ile pepper arasındaki fark nedir?
Salt her parola için benzersizdir ve hash'le birlikte veritabanında saklanır. Pepper ise tüm parolaların paylaştığı ve veritabanının dışında tutulan tek bir gizli değerdir; böylece çalınmış bir veritabanı tek başına kırmaya başlamak için yeterli olmaz.
bcrypt salt kullanır mı?
Evet. bcrypt rastgele bir salt'ı otomatik üretir ve döndürdüğü hash dizesinin içine gömer; yani yalnızca o tek dizeyi saklarsınız. Çoğu Argon2id kütüphanesi de aynı şekilde çalışır.
İlgili sayfalar
- HashingGüvenlik, s. 12Hashing, bir girdiyi tek yönlü bir fonksiyonla sabit uzunlukta bir değere dönüştürmektir; veri bütünlüğünü doğrulamaya ve parolaları güvenle saklamaya yarar.
- Kimlik DoğrulamaGüvenlik, s. 19Kimlik doğrulama, bir kullanıcının, cihazın veya servisin gerçekten iddia ettiği kişi olduğunu, örneğin parola ya da passkey kontrol ederek doğrulama işlemidir.
- ŞifrelemeGüvenlik, s. 42Şifreleme, veriyi bir anahtarla karıştırarak yalnızca doğru anahtara sahip olanın onu özgün ve okunabilir hâline geri çevirebilmesini sağlama işlemidir.
- VeritabanıVeritabanları, s. 37Veritabanı, bilgisayarda düzenli biçimde saklanan ve uygulamaların verimlice kaydedip arayıp güncelleyebildiği, bir yazılımla yönetilen veri topluluğudur.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin