2010-11-18 17 views
1

プロジェクトをgithubに公開する準備をしています。私のプロジェクトでは、ログイン認証のために、私は文字列を取り、強くPasswordとして、それを入力します。オープンソースプロジェクトでのパスワードの塩化

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

明らかに、塩は、公的に閲覧可能であるならば、塩の無価値。

オープンソースプロジェクトで他の人がパスワードを暗号化しても、塩フレーズを安全に隠しておくことはできますか?

塩はファイルシステムのどこかに存在し、アプリケーションの起動時に読み込まれるべきですか?合理的な解決策のようだが、実際にgithubをソース管理に使用し、新しいバージョンがリリースされたときにgithubにダンプするのではなく、そのファイルはまだ一般公開されている。

答えて

5

明らかに、塩は 公に閲覧可能であるならば、塩の 無価値。

あなたは、暗黙のセキュリティに頼るのではなく、が潜在的に攻撃者に知られているであると仮定する必要があります。

あなたが間違えているのは、システム全体で1つの共有塩を使用していることです。それぞれのユーザーに対して別個の疑似ランダム塩を使用し、そのユーザーのパスワードハッシュでその塩を保存する必要があります。

シンプルな塩漬けハッシュではなく、PBKDF2またはbcryptのようなシステムを使用することもお勧めします。

4

まず、塩は秘密である必要はありません。彼らはランダムである必要があります。塩は、攻撃者が既にデータベース(およびしばしばファイルシステム)を侵害している状況を想定しています。つまり、ハッシュされたパスワードと塩にアクセスできます。しかしながら、塩はまだであり、平文パスワードを得るために必要な労力が大幅に増加する。

さらに重要なのは、ログイン塩はランダムと、ユーザーごとのことshould。ユーザーが作成されたときにランダムな値を生成します。 2つの塩(1つのユーザーと1つのインストール)を使用する場合は、セットアップスクリプトでランダムな値を生成します。

最後に、これはオープンソース/独占的な問題ではありません。そのようなハードコーディングされた値は、プロプライエタリなソフトウェアから容易にリバースエンジニアリングすることができます。

関連する問題