2010-11-18 25 views
1

Github'da herkese açık bir proje hazırlıyorum. Projemde, giriş kimlik doğrulaması için, ben bir dize alıp kuvvetle Password şekilde yazın:Açık kaynak projelerinde tuzlama şifreleri

// Stripped down here on SO for brevity 
public class Password 
{ 
    private const string salt = "sealab2021"; 

    public Password(string password) 
    { 
     this.saltedPasswordHash = new MD5Hash(password + this.salt).ToString(); 
    } 

    public string SaltedHash { get; private set; } 
} 

Açıkçası, tuz herkes tarafından görüntülenebilir ise, tuz en değersiz.

kişi açık kaynak projelerde tuz şifreleri ne yaparlar ve hala güvenli bir gizli tuz ifadesini tutmak? Tuz dosya sisteminde yerde var mıdır ve uygulama başladığında yüklenecek

? Makul bir çözüm gibi görünüyor, ama eğer github'u kaynak kontrolü için kullanacaksam ve yeni sürümler piyasaya sürüldüğünde sadece github'a dökülemeyecekse, o dosya hala halkın erişimine açık olacak.

cevap

5

Açıkçası, tuz herkes tarafından görüntülenebilir ise, tuz en değersiz.

Doğru değil. tuzunun, güvenlikten geçerek gizliliğe güvenmek yerine, bir saldırganın potansiyel olarak bildiği olduğunu varsaymalısınız.

Hatan Eğer tüm sistem için tek bir paylaşımlı tuz kullanıyoruz olmasıdır. Her kullanıcı için ayrı, sözde rasgele bir tuz kullanmalı ve ardından bu tuzu o kullanıcı için parola karmasıyla saklamanız gerekir.

Ayrıca basit bir tuzlanmış karma yerine PBKDF2 veya bcrypt gibi bir sistem kullanmanızı öneririz.

4

Birincisi, tuzlar gizli olması gerekmez. Rastgele olmaları gerekiyor. Bir tuz, saldırganın veritabanını (ve genellikle dosya sistemini) tehlikeye atmış olduğu durumlar içindir. Bu, karma şifrelere ve tuzlara erişimleri olduğu anlamına gelir. Bununla birlikte, hala tuzları düz metin şifresini elde etmek için gereken çabayı büyük ölçüde artırmaktadır.

Daha da önemlisi, giriş tuzları rastgele ve shouldkullanıcı başına. Kullanıcı oluşturulduğunda rastgele bir değer oluşturun. İki tuz (kullanıcı başına ve kullanıcı başına bir tane) kullanmak isterseniz, kurulum komut dosyasında rasgele bir değer oluşturun.

Son olarak, bu bir açık kaynak/tescilli sorun değildir. Bu gibi kodlanmış değerler, patentli yazılımlardan kolaylıkla tersine mühendislikle üretilebilir.

İlgili konular