Bir parola kullanarak diskteki verileri şifreleyen iki karşılaştırılabilir yazılım parçasına bakıyorum. Biri şifre anahtarından şifreleme anahtarı oluşturmak için PBKDF2'yi kullanırken diğeri iki tur SHA256 kullanır. Fark ne? Biri diğerine tercih edilir mi?
Fark şudur:
Birisi bir çok farklı olası parola denemek istiyorsa, tüm sözlüğü söyleyin, sonra bir Word eklenmiş bir rakam, daha sonra her bir kelime büyük/küçük harf, sonra iki sözlük kelime, vb. Sonra bu işlem PBKDF2 ile çok daha yavaş olurdu .
Ancak parolanız gerçekten güvenliyse, bu çok uzun, oldukça rasgele ve herhangi bir sistematik numaralandırma işleminin erişemeyeceği durumlarda, bir saldırganın parolanızı kırmaya çalışmak için daha fazla kaynak harcayacağı (veya belki de daha az daha erken vazgeçmeye karar verirler).
PBKDF2, bcrypt ve scrypt gibi parola karma algoritmaları parolalarla kullanım içindir ve amaçlı olarak yavaştır. Şifreleme karma algoritmaları hızlıdır. Hızlı çoğu durumda iyidir, ama burada değil. Algoritmayı yavaşlatma (genellikle yineleme ile) saldırganın işini daha da zorlaştırır. Parola karmaları ayrıca, saldırganın aynı anda birden fazla karmaya saldıramaması için her karmaya tuz değeri ekler.
Saldırganlar, şifreleri tahmin ederek tahmin ettikleri ve eşleşip eşleşmediklerini belirlemek için saklanan şifreyle karşılaştırarak sözlük ve kaba kuvvet saldırıları gerçekleştirerek şifreleri kurtarmaya çalışacaktır. Düzenli şifreleme karma işlevleriyle (örneğin MD5, SHA256), bir saldırgan saniyede milyarlarca parolayı tahmin edebilir. PBKDF2, bcrypt veya scrypt ile, saldırgan saniyede sadece birkaç bin tahmin yapabilir (veya yapılandırmaya bağlı olarak daha az).
Bu, normal bir karma işlevi yerine PBKDF2, bcrypt veya scrypt kullanıldığında her parolanın çok daha güçlü olduğu anlamına gelir.
Ayrıca, PBKDF2, bcrypt ve scrypt öğelerinin tümü, her kullanıcının parolasının benzersiz bir şekilde karıştırıldığından emin olmak için büyük rasgele "tuz" değerleri kullanır. 100 şifre karmasına saldırmak, bir karmaya saldırmaktan 100 kat daha uzun sürecektir. Bir milyona saldırmak, milyonlarca kez daha uzun sürecektir, vb. SHA256 ile, saldırgan çok az yavaşlama ile aynı anda binlerce veya milyonlarca hashı kırmaya çalışabilir.
Parolalar için her zaman sıradan bir şifreleme karması yerine bir parola karması veya "anahtar türetme formülü" kullanmalısınız. SHA veya MD5 gibi bir şeye sahipse, özel bir çatlama çabasına dayanacak kadar güçlü parolaları seçmek çok zordur. PBKDF2, bcrypt veya scrypt gibi parolalar kısa olabilir 7 veya 8 karakter ancak MD5 veya SHA ile en az 13-14 karakter olmalıdır.
Yukarıda iyi cevaplar var, ancak bunun asıl nedeni, sha256'nın tuzlu olmaması ve iki turun hesaplamalı olarak zayıf olduğu gibi iki turun zavallı zayıf olması: