web-dev-qa-db-ja.com

ハッシュにPBKDF2を使用しても安全ですか?

パスワードのハッシュを生成するためにPBKDF2を使用することが安全であるかどうかについていくつかの意見を得たいと思います。私の目的では、ハッシュ自体がホワイトハウスのTwitterページに投稿される(つまり、公開される)と想定したいと思います。

大量のSHA-256反復を使用した方がよいでしょうか(100,000 PBKDF2反復の代わりとして)? PBKD2を逆転させる攻撃はありますか?

これは私が使用しているコードです:

        string salt = Utility.RandString(32);
        // convert to byte[] and store in both forms
        this.Salt = salt;
        this.BSalt = Utility.ToByteArray(salt);
        // generate the password hash
        Rfc2898DeriveBytes preHash = new Rfc2898DeriveBytes(this.Password,  this.BSalt, 100000);
        byte[] byteHash = preHash.GetBytes(32);
        this.Hash = Convert.ToBase64String(byteHash);
15
Razick

簡単に言えば、PBKDF2はパスワードハッシュに対して適切で安全であると考えられています。 GPUを使用して効率的に実装できるため、期待するほど良くはありません。いくつかの議論については this answer を参照してください(および主題についての詳細は that one を参照してください)。

areいくつかの議論の余地がある点、特にPBKDF2は Key Derivation Function であるように設計されているが、これは同じ種類ではないハッシュ関数としての動物。しかし、それを使って愚かなことをしない限り、パスワードハッシュにも非常に便利です(つまり、少なくとも80ビットの出力を維持し、十分に高い反復回数を使用し、理想的にはできるだけ高くします)。ハードウェアで許容できるため)。

独自のハッシュ関数を作成しようとしないでください。特に、特定の構造が安全であるかどうかを評価することがほぼ不可能であるため、これらのことを正しく行うのは驚くほど困難です。 PBKDF2を使用します。本当にSHA-256(またはSHA-512)が必要な場合は、PBKDF2withSHA-256を使用します。PBKDF2は構成可能な構成で、従来通りSHA-1を使用するように構成されていますが、SHA-256またはSHA-512でも同様に機能します。

17
Tom Leek

良いものもありますが、いいKDFだと思います。

パスワードエントロピー自体は非常に重要です。

http://arstechnica.com/security/2013/05/how-crackers-make-minced-meat-out-of-your-passwords/

パスワードを覚えている場合は、パスワードの理論的な強度を下げる特別なショートカット手法を使用できます。エントロピーの計算に関しては、基本的に単語を1つの文字と考えてください。

コストが非常に高いKDFの6文字のパスワードでも、すぐに解読されます。

2
Andrew Hoffman