Bir tuz oluşturmak için bu 3 yöntemin avantajları / dezavantajları nelerdir?
$salt = md5($password);
$salt = sha1(md5($password));
$salt = generate_random_number();
Bilgisayar hash:
$hash = sha1($salt + $password);
Bu soruyu cevaplamak için tuzlar ne için olduğunu bilmek önemlidir.
Tuzları önceden hesaplanmış tablolar ile saldırılara karşı tasarlanmıştır. Örnek gökkuşağı tabloları için. Gökkuşağı tabloları belli bir uzunluğa kadar tüm olası şifre varyasyonları ile büyük tablolardır. (Akıllı bellek / zaman dengeyi kullanma.)
Saldırgan tek a single şifre kırmak istiyorsa, bu bir avantaj sunmuyoruz.
Yukarıdaki deyimi doğru değilse
Gökkuşağı tabloları kullanarak Saldırganlar genellikle mümkün olduğunca çok sayıda hesaplarını kırmak istiyorum.
Üçte dışında, bütün yöntemleri insecure. Diğer yöntemlerden birini kullanarak saldırganın bir gökkuşağı tablo for your whole database hesaplamak için izin olmasıdır.
Tuz parolası bağlıdır çünkü. Bu hala bir saldırganın 100 en yaygın kullanıcı adları için bir gökkuşağı tablo oluşturmak için izin verecek, ya da adı üzerinde bağımlı yapmayın.
Gökkuşağı tabloları düşünmek yararlı bir yolu, tek bir girişi olan herhangi bir tek yönlü (veya "trapdoor") fonksiyonu için inşa edilebilir olmasıdır. Tüm şifreler için aynı işlevi, F, kullanmak Yani, eğer: hash = F (şifre). F MD5 veya SHA1 ya da her neyse olabilir.
Şimdi tuzların bakalım. Bir tuzlu fonksiyonu G, hash = G (tuz, şifre) kullanın. Veritabanındaki tüm şifreleri aynı tuz kullanırsanız, G (şifre) = F ("tuzlu", password), yani orada tek bir giriş fonksiyonu bir fonksiyon G, inşa edebilir, ve böylece bir gökkuşağı tablosu oluşturabilirsiniz .
Tuz şifre bağlıdır ne olur? Tuz = I (şifre), biz J (parolası) inşa edebilirsiniz Say = G (I (şifre), password), tek bir giriş işlevi, yani gökkuşağı tabloları inşa edilebilir.
Yani, her şifre kendi tuzu olması gerekir. Bu zaman içinde tüm şifreleri çatlak bir saldırganın alacağını anlamına gelir, onlar sadece bir çatlak olabilir.
İlk iki yöntem değersizdir. Tuzlama bütün mesele aynı parola her zaman aynı şifreli / karma dize neden olmamasıdır.
Eğer sadece şifre "tuz" bağımlı yaparsanız, aynı parola her zaman aynı karma neden olur. Yani temelde Sonuç tuzsuz biraz farklı bir hash fonksiyonu kullanmak istiyorum aynıdır.
Üçüncü yöntem, aynı şifre ile iki kullanıcılar genellikle farklı bir tuz alacak ve şifre karma sürümü hem de kullanıcılar için farklı bakacağız. Bu ikisi aynı parolaya sahip olduğunuzu sağlamalarının tarafından söylemek zor olacaktır.
Eğer hash hesaplamak nerede Peki kesinlikle, sadece bir tuzlama yöntemi var konuşma. İlk üç satır bir tuz üretme farklı yolları vardır.
Yani tuz şifreleri keşfetme precomputed arama tabloları durdurmak için vardır. Bu, tercihen, düz metin karma olmak için benzersiz bir sabit değer saklanan birisi olmalıdır.
En güvenli daha sonra şifre tarafı boyunca depolanan bir tuzunu üretmek için bir kriptografik açıdan emin rasgele sayı üreteci kullanmak olacaktır.
Eğer şifre MD5 bir tuz yarattı eğer o zaman bunu her zaman hesaplamak için düşünmüyorsanız, precomputed arama tabloları savunmasız bir tuzsuz karma demektir karma ve tuzlanmış şifre değer, yanında saklanan olurdu hangi küçük bir performans isabet. Onlar uzunluğu sabit olarak MD5 hash değerleri sonlu bir numara var gibi bir MD5 hash bir SHA hash alarak size, düz metin değerlerinin olasılığını azaltarak ediyoruz. Bu bir gökkuşağı tablo arama gerçekten rasgele tuzu daha büyük bir başarı şansı olabilir anlamına gelecektir.
Yani rasgele tuz lütfen kullanın.