2010-05-20 19 views
6

Bir web uygulamasında en güvenli (ama yine de yapılabilir) şifre yönetimi yolunu arıyorum.WebApp Şifre Yönetimi - Hashing, Tuzlama, vb

Şu anda parolayı karma olarak kaydediyorum. Uygulamanın DB hesabı saklı yordamların dışlanması ile sınırlıdır ve kullanıcı adı ve karma şifresini 1 (doğru) veya 0 (yanlış) döndüren saklı bir yordama vererek kullanıcıları doğrularım.

Bu nedenle, uygulamanın DB hesabınız olsa bile, parolayı sunucudan alma şansınız yok. Thats bu çözüm hakkında ne sevdiğimi. Ancak bunu kullanmak için, müşterinin şifresini web üzerinden ya da en azından yakalanabilecek bir statik karmaşa göndermesi gerekir.

  • İstemci sunucunun ister tuz için:

    Yani böyle bir el sıkışma kullanma fikri geldi.
  • İstemciye rastgele tuz verilir ve bu tek istemci için sunucuda depolanır. onun aynı sonra istemci

bu el sıkışma kullanarak kontrol etmek mümkün kılar eğer

  • Müşteri Hash (tuz + şifre) yapar ve bu karma sunucuya döndürür
  • Sunucu Hash (tuz + şifre) ve kontrolleri yapar şifre kendisini göndermeden veya statik bir karma göndermeden. Sadece dinamik tuzlanmış bir karma, kullanıcı her defasında farklı olan farklı => Son derece güvenli.

    Ancak bu el sıkışması için şifreye veya en azından şifreli parolaya DB'den ihtiyacım var. Ancak bu, birilerinin en azından karma şifresini almasını ve uygulamayı dışarıda kullanmasını sağlar.

    Ne tercih edersiniz? DB'nin içinde parola tutmak ve orada herhangi bir şey yapmak (güvenli sunucu), veya DB'den çıkar ve bunu dışarıda yap (güvenli iletim)? peşin

    sayesinde, gerçekten sorunu çözmez Marks

  • cevap

    3

    Sizin çözüm önerisi. Sunucu yine de şifreyi bilmek zorundadır, bu yüzden ilk etapta kaçınmak istediğiniz şey olan düz bir noktaya aktarılması gerekiyordu. Böylelikle her seferinde tekrar gönderilen şifreden kaçınıyorsunuz, ancak birisi ilk kez transfer edildiyse mi?

    Sanırım tekerleği yeniden icat etmemelisin :-) Tüm bağlantılar için SSL kullan ve sonra ilk çözümlerin iyi çalışıyor. Hatta müşteri tarafında karma işlemi gerçekleştirebilirsiniz, bu nedenle sadece karma kanalın güvenli kanal üzerinden gönderilir. Sunucunuz asla şifreyi bilmeyecek ve buna gerek yok.

    +1

    Kabul edildi, SSL yeterince güvenli olmalıdır. MD5 bu günlerden şüphelenmesine rağmen, veritabanında da şifreler kesinlikle yok, bu yüzden bunu yapmak için daha güvenli bir karma algoritma kullanabiliyordum. Önerilen el sıkışma da şüpheli MS-CHAP benzer. –

    +0

    Haklısınız, ancak parola kullanıcının bu yüzlerce veya binlerce kez oturum açtığında, bu tek seferde algılanır daha az olası olduğunu düşünüyorum. Benim bağlantım SSL nether daha az, ben sadece bazı ekstra güvenlik istedim . Şu anda SHA1 hash'ında yerleşik FormsAuthentications kullanıyordum, ama başka bir yerde SHA-256'ya ihtiyacım var, bu yüzden buna geçeceğim. GetUser saklı yordamını döndürmelidir saklı yordamını düşünüyorsunuz? Ya da yerine null döndürün? – Marks

    +1

    "Güvenlik" hakkında konuştuğunuzda, daima en kötü durum senaryosunu üstlenirsiniz. Saldırganın her zaman mevcut olduğunu ve sisteminizdeki her zayıflığın maksimum etkinlikle kullanıldığını varsayarsınız.Bu anlamda, şifrenizi bir ya da yüz kez okuyabildiği fark etmez, gerçeği okuyabilir. Müşterileriniz, "bu kadar büyük olasılıkla bir saldırgan şifrenizi okuyamaz" dediğini duymak istemiyor. :-) Saklı yordamınız ister hash ister "null" olursa olsun, sunucu başka yollarla korunmalıdır. uzaktan erişimi engellemek için (güvenlik duvarı, güvenlik yamaları ...) –