Olası Kopya:
Hangi şifre karma yöntemini kullanmalıyım?
Yığın taşması ve diğer sitelerdeki veritabanlarında parola güvenliği hakkında bir sürü harika mesaj var ve tamamen yeni olduğum için son günlerde bu konuda daha fazla bilgi edinmeye çalışarak saatler geçirdim. Bununla birlikte, o kadar çok farklı öneri ve en iyi uygulama var ki, hala çok karıştım ...
Ayrıca, 2007-2010 vb hala birçok eski mesajları vardır Ben ne kadar hızlı şeyler değiştiğini gördüğüm gibi ben bu önermek gibi hala kullanmak için yaygın olup olmadığından emin değilim. Bu yüzden, gönderilerde bulduğum şeyi özetlemek ve sonra bulduğum bu yöntemin iyi bir uygulama olup olmadığını sormak istedim ...
Yani, bu bir rehber değil, ama bir özet, çok çok temel olduğunu biliyorum ve hatalar varsa lütfen beni düzeltin!
Peki, SHA256, SHA512 kullanıp kullanmayacağınız konusunda farklı görüşler var mı? Hash_hmac kullanmalı mısınız? Bazıları evet der: ( http://rdist.root.org/2009/10/29/stop-using-unsafe-keyed-hashes-use-hmac/ ) bazıları kütüphanelerin sadece güvenli bir şekilde ... ve sonra bir veya iki kez bir kütüphanede bcrypt veya kabarcık balık olarak kitaplığı kullanmamayı okudum ??
Bir kütüphane kullanmak gerçekten gerekli mi yoksa örn. yeterince böyle bir yöntem:
function hash_password($password, $nonce) {
for ($i = 0; $i < 5000; $i++) {
$hashed_pass = hash_hmac('sha512', $hashed_pass . $nonce . $password, $site_key);
}
return $hashed_pass;
}
Birçok insan kendi algo'yu icat etmediğini söylüyor, bu yüzden sadece kendi icat ettiği herhangi bir şeyi kullanmaktan biraz korkuyorum.
Tahmin etmenin zor olduğunu tahmin edebiliyorum, ancak günümüzde kullanılan bir yöntem ne kadar süre yeterince güvenli kabul edilebilir?
GÜNCELLEME: Bu nedenle, tüm harika geri bildirimleriniz için teşekkür ederiz. Bir ana nokta eksik, gördüğüm gibi ve birçoğunuzun söylediği gibi: şifre güvenliği, yani güçlü bir şifre temeldir. Sanırım mesajı aldım, tekrar teşekkürler! :)
GÜNCELLEME 2: Sadece tamamlamak için, rastgele bir tuz oluşturmak için kullandığım http://www.lateralcode.com/creating-a-random-string-with-php/ kodunu buldum :
function Rand_string( $length ) {
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!§$%&/().-:;_#+*[]{}=";
$size = strlen( $chars );
for( $i = 0; $i < $length; $i++ ) {
$str .= $chars[ Rand( 0, $size - 1 ) ];
}
return $str;
}
$random_salt= Rand_string(20);
Genel bilgi:
Güzel bir soru ama söyleyebileceğim tek şey tamamen kullanıma bağlı. Sadece küçük bir web sitesi için kullanırsanız, sadece "script kiddies" sizi ziyaret yüksek şans var, bu durumda tuz ile basit bir SHA1 bugün de yeterli. Bu durumda, 5-8-10 yıl veya daha da fazlası tamamen iyidir, script çocukları kolayca giremeyeceklerini görürlerse gerçekten içine girmezler. Sitenize herhangi bir nedenle (parasal site vb.) Saldırılacaksa, mevcut en yeni işlevleri kullanmalısınız. Bu durumda resmi olmayan ancak önceden taşınmış bir işlevi kullanmak için "risk" bile alıyorum. Şu anda bir SHA3 yarışması var, içinde yüksek paraya sahip olacak websties için, bunların 5 yarışmacısından birini kullanardım.
Önemli olduğunu söylediğim noktalar:
1. rastgele bir tuz, hatta 20 karakter kullanın. Şifreleri kırmak çok daha zorlaşır ve kırılabilir olsalar bile, değerinde olmak çok fazla zaman alır.
2. SHA-1, SHA-2 veya WHIRLPOOL kullanın. İyi tuz ile MD5 de iyidir, ama yine de bunları öneririm.
. Kullanıcıların şifreleri önemsizse harika bir şifreleme kullanabilirsiniz. Sözlük olmayan, büyük harfli uzun parolalar, küçük harfler, sayılar ve semboller kullandıklarından emin olmalısınız, aksi takdirde kaba kuvvetle kolayca kırılabilir. Her yıl şifre değiştirmek zorunda kalabileceklerini düşünebilirsiniz.
Koda:
Birçok kez döngü yapmak yararlı olabilir, ancak 5000'in gerekli olduğunu düşünmüyorum. Normal güvenlik için 3 iyidir, ya da 100, belki 1000 işe yarayabilir, ancak bence 5000 çok fazla. SHA-256 iyidir, ancak bunun için özel olarak geliştirilmiş bir algoritma kullanabilirsiniz, yorumlara bakın.
Sadece küçük bir şeyi unuttun:
Parlak konunuzun tamamını fazla kilolu sadece 2 kelime.
Gerçekten Stackoverflow üzerinde bunu veya bu karma algoritmayı ve rastgele tuzları kullanmanızı söyleyen yüzlerce konu var.
Ve çok azı, zayıf şifre ile tüm sekiz maddelik liste korumanızın, 2048 bayt uzun tuzlu ekstra güvenli hmac-chmak-bumblemak karmalarının birkaç saniye içinde kırılacağını açıklıyor.
Hatırlayamayan fakir kullanıcılar için $#%H4df84a$%#R
şifreler - bir şifre değil, bir parola kullanın.
Is it a good day today, Winkie?
Farklı harfleri ve önerilen karmaşıklığın şifresini kullanır ancak hatırlaması daha kolaydır.
Tabii ki ifade "Joe" veya "123" gibi yaygın şifreler kadar yaygın olmamalıdır.
“Günaydın”, “Aman Tanrım! Kenny'yi öldürdüler!” ifadelerden kaçınılmalıdır.
Ama biraz kişilik ekleyerek sorun olmaz:Oh My God! They moved Cthulhu!
yeterince görünüyor
Bahsedilmesi gereken bir diğer şey, sunucu ve tarayıcı arasında güvenli bir iletişim
Onsuz, iletişimde yer alan yönlendiricilerin herhangi birinde basit bir şifre kolayca "koklanabilir".
SSH veya Özet yetkilendirme uygulamasının uygulanması daha az önemli değildir.
İyi bir karmaya sahip genel amaçlı bir karma işlevi (MD5, SHA1, SHA256), mevcut bilgi işlem gücü göz önüne alındığında, çoğu küçük web sitesi için yeterince güvenli olabilir. Bununla birlikte, Moore yasası yakın gelecekte iyi şifrelerin bile kaba kuvvet saldırılarına maruz kalmasını sağlayacaktır. Sorun, karma işlevlerin çok hızlı bir şekilde hesaplanabilmesidir. En iyi çözüm, çok sayıda yineleme ile bcrypt veya PBKDF2 kullanmaktır. Bcrypt vs PBKDF2http://security.stackexchange.com adresinde tartışıldı.
Bazı insanlar bunun çoğu site için aşırıya kaçtığını düşünebilir, ancak parolaların her zaman yeniden kullanıldığını ve parola depolamanın genellikle bir sorun olana kadar değiştirmeyeceğiniz bir şey olduğunu unutmayın.
Öneriler:
hash_hmac()
işlevi iyi bir seçim olacaktır, daha zayıf bir karma algoritmanın sorunlarının üstesinden bile gelebilir. Tek sorun, da hızlı olmasıdır. Bu, yeterli işlemci gücü (bulut) ile farklı Rainbow tablolarının oluşturulması mümkün hale gelir, yineleme nedeni budur. Bu yüksek güvenliğe ihtiyacınız varsa, yinelemelerinizin ihtiyaç duyduğu zamanı ölçebilir ve ardından belirli bir süre için gereken yineleme sayısını hesaplayabilirsiniz.
Düzenle:
Yineleme bu sorunu çözebilir, mevcut karmaları geçersiz kılmadan daha sonra yineleme sayısını artırabilecek şekilde yapılmalıdır. Bu, gelecekteki yeni donanıma uyum sağlamak için gereklidir, ancak karma parametrelerini karma ile birlikte depolamayı gerektirir.
Bcrypt karma algoritması bu talepleri karşılamak için tasarlanmıştır, nasıl kullanılacağına dair küçük bir örnek yazdım bcrypt PHP 5. , yorum yapmaya çalıştım, böylece bir neler olduğunu anlayın.