Bunu biraz farklı bir şekilde ele alacağım.
Ben her zaman tuzlu şifre karma ile karıştırılmış tuz saklıyorum.
Örneğin, tuzun ilk yarısını şifrenin tuzlu karmasından önce ve tuzun son yarısını şifrenin tuzlu karmasından sonra koyacağım. Uygulama bu tasarımın farkındadır, bu nedenle bu verileri alabilir ve tuz ve tuzlu parola karmasını elde edebilir.
Bu yaklaşımın mantığı:
Parola / sağlama verisi tehlikeye girerse ve bir saldırganın eline geçerse, saldırgan tuzun verilere bakmasının ne olduğunu bilemez. Bu şekilde bir saldırgan, karma ile eşleşen bir parola almak için pratik olarak kaba-kuvvet saldırısı gerçekleştiremez, çünkü başlamak için hash'ı bilmiyor ve verilerin hangi bölümlerinin tuzun parçaları olduğunu bilmiyor ya da tuzlu parola karmasının bazı bölümleri ( uygulamanızın kimlik doğrulama mantığını bilmediği sürece ).
Tuzlu parola karması olduğu gibi depolanırsa, tuzlanmış ve karıklandığında tuzlu parola karmasıyla aynı verileri üreten bir parola elde etmek için kaba kuvvet saldırısı gerçekleştirilebilir.
Ancak, örneğin, tuzlu parola karması olduğu gibi depolanmış olsa da, saldırganın bu ilk baytın atılması gerektiğini bilmediği sürece, tek bir rastgele baytla önceden bekletilmiş olsa bile, bu da zorluğu artıracaktır. saldırı. Uygulamanız, kullanıcı kimliğinizi doğrulamak için kullanıldığında verilerin ilk baytını atmayı bilir.
Bunun sonucu ..
1) Kimlik doğrulama uygulamanızın kullandığı verileri kesinlikle tam biçiminde saklamayın.
2) Mümkünse, ek güvenlik için kimlik doğrulama mantığınızı gizli tutun.
Bir adım daha ileri git ..
Uygulamanızın kimlik doğrulama mantığını gizli tutamazsanız - birçok kişi verilerinizin veritabanında nasıl saklandığını bilir. Tuzlu parola karmasını tuzla karıştırmaya karar verdiğinizi varsayalım, tuzun bir kısmı tuzlu parola karmasını önler ve diğer tuzu ekler.
Rastgele tuz üretirken, tuzunuzun şifre oranından önce / sonra saklayacağınız tuz miktarını da rastgele bir şekilde belirleyebilirsiniz.
Örneğin, 512 baytlık rastgele bir tuz üretiyorsunuz. Tuzu şifrenize ekler ve tuzlu şifrenizin SHA-512 karmasını elde edersiniz. Ayrıca rastgele bir tamsayı 200 de oluşturursunuz. Daha sonra tuzun ilk 200 baytını, ardından tuzlu parola karmasını ve ardından tuzun geri kalanını depolarsınız.
Bir kullanıcının şifre girişinin kimliğini doğrularken, uygulamanız dize üzerinden geçer ve verilerin ilk 1 baytının tuzun ilk 1 baytı ve ardından tuzlanmış karma olduğunu varsayar. Bu geçiş başarısız olacaktır. Uygulama, verilerin ilk 2 baytını tuzun ilk 2 baytı olarak kullanmaya devam edecek ve tuzun ilk 200 baytı olarak ilk 200 bayt kullanıldıktan sonra pozitif bir sonuç bulunana kadar tekrarlanacaktır. Şifre yanlışsa, uygulama hiçbiri bulununcaya kadar tüm permütasyonları denemeye devam edecektir.
Bu yaklaşımın artıları:
Artan güvenlik - kimlik doğrulama mantığınız bilinse bile, derleme zamanında kesin mantık bilinmiyor. Kesin mantık bilgisine rağmen, kaba kuvvet saldırısı yapmak neredeyse imkansızdır. Artan tuz uzunlukları güvenliği daha da artıracaktır.
Bu yaklaşımın eksileri:
Tam mantık çalışma zamanında çıkarıldığı için, bu yaklaşım çok CPU yoğundur. Tuzun uzunluğu ne kadar uzun olursa, bu yaklaşım o kadar fazla CPU yoğunluklu olur.
Yanlış şifrelerin doğrulanması en yüksek CPU maliyetini içerir. Bu, meşru taleplere karşı üretken olabilir, ancak saldırganlara karşı güvenliği artırır.
Bu yaklaşım çeşitli şekillerde uygulanabilir ve değişken genişlikli tuzlar ve / veya tuzlu parola karmaları kullanılarak daha da güvenli hale getirilebilir.