2010-11-18 5 views
1

Ich bereite ein Projekt öffentlich auf github vor. In meinem Projekt, für Login-Authentifizierung, nehme ich einen String und es stark geben als Password:Passwörter in Open-Source-Projekten sammeln

// 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; } 
} 

Selbstverständlich, wenn das Salz öffentlich sichtbar ist, wertlos das Salz der.

Was tun andere Leute, um Passwörter in Open-Source-Projekten zu salzen und die Salzphrase trotzdem sicher versteckt zu halten?

Sollte das Salz irgendwo im Dateisystem existieren und geladen werden, wenn die Anwendung startet? Scheint wie eine vernünftige Lösung, aber wenn ich Github tatsächlich für die Quellcodeverwaltung verwende und nicht nur Dumps zu Github mache, wenn neue Versionen veröffentlicht werden, wird diese Datei weiterhin für die Öffentlichkeit zugänglich sein.

Antwort

5

Selbstverständlich, wenn das Salz öffentlich sichtbar, das wertlos Salz.

Nicht wahr. Sie sollten davon ausgehen, dass das Salz potenziell einem Angreifer bekannt ist, anstatt sich auf Sicherheit durch Obskurität zu verlassen.

Ihr Fehler ist, dass Sie ein einziges, gemeinsames Salz für das gesamte System verwenden. Sie sollten für jeden Benutzer ein separates, pseudozufälliges Salz verwenden und dieses Salz dann mit dem Kennwort-Hash für diesen Benutzer speichern.

Ich würde auch empfehlen, ein System wie PBKDF2 oder bcrypt anstelle eines einfachen gesalzenen Hash zu verwenden.

4

Erstens, Salze müssen nicht geheim sein. Sie müssen zufällig sein. Ein Salz ist für Situationen gedacht, in denen der Angreifer bereits die Datenbank (und oft auch das Dateisystem) kompromittiert hat. Das bedeutet, dass sie Zugriff auf die Hash Passwörter und Salze haben. Allerdings erhöhen die Salze immer noch erheblich den Aufwand, um das Klartextkennwort zu erhalten.

Noch wichtiger ist, Login Salze should zufällig sein und pro Benutzer. Generieren Sie einen zufälligen Wert, wenn der Benutzer erstellt wird. Wenn Sie zwei Salze (einen pro Benutzer und einen pro Installation) verwenden möchten, generieren Sie einen zufälligen Wert in einem Setup-Skript.

Schließlich ist dies kein Open Source/proprietäres Problem. Solche fest codierten Werte können leicht aus proprietärer Software reverse-engineered werden.