web-dev-qa-db-ja.com

PBKDF2とSHA256を使用してパスフレーズからAES暗号化キーを生成する利点は何ですか?

私はパスフレーズを使用してディスク上のデータを暗号化する2つの同等のソフトウェアを見ています。 1つはPBKDF2を使用してパスフレーズから暗号化キーを生成し、もう1つは2ラウンドのSHA256を使用します。違いは何ですか?どちらが優先されますか?

82
Andrey Fedorov

違いは次のとおりです。

  • PBKDF2 仕様が遅い
  • SHA256は優れたハッシュ関数です。設計上、遅くはありません

したがって、誰かが多くの異なる可能なパスフレーズを試してみる場合、たとえば辞書全体、次に数字が追加された各単語、次に大文字が異なる各単語、次に2つの辞書単語などの場合、このプロセスはPBKDF2ではるかに遅くなります。 。

しかし、パスフレーズが本当に安全であり、それが非常に長く、かなりランダムで、体系的な列挙プロセスの範囲外である場合、攻撃者がパスフレーズを破ろうとするためにより多くのリソースを費やす可能性がある(ただし、彼らはもっとあきらめることにしました)。

93
curiousguy

PBKDF2、bcrypt、scryptなどのパスワードハッシュアルゴリズムは、パスワードで使用するためのものであり、意図的に低速です。暗号化ハッシュアルゴリズムは高速です。ほとんどの状況では高速が適切ですが、ここではそうではありません。アルゴリズムを遅くする(通常は反復による)と、攻撃者の仕事がはるかに困難になります。また、パスワードハッシュはソルト値を各ハッシュに追加して一意にし、攻撃者が複数のハッシュを同時に攻撃できないようにします。

攻撃者は、ディクショナリ攻撃やブルートフォース攻撃を実行してパスワードを回復し、ハッシュしてパスワードを推測し、格納されているパスワードと比較して一致するかどうかを判断します。通常の暗号化ハッシュ関数(MD5、SHA256など)を使用すると、攻撃者は1秒あたり数十億のパスワードを推測できます。 PBKDF2、bcrypt、またはscryptを使用すると、攻撃者は1秒あたり数千回しか推測できません(構成によってはそれ以下)。

つまり、通常のハッシュ関数の代わりにPBKDF2、bcrypt、またはscryptを使用すると、すべてのパスワードがより強力になります。

さらに、PBKDF2、bcrypt、およびscryptはすべて、大きなランダムな「塩」値を使用して、各ユーザーのパスワードが一意にハッシュされるようにします。 100個のパスワードハッシュを攻撃すると、1個のハッシュを攻撃するよりも100倍時間がかかります。 100万回の攻撃には100万倍の時間がかかります。SHA256を使用すると、攻撃者は数千または数百万のハッシュを、ほとんど速度を落とさずに同時にクラックしようと試みることができます。

パスワードには、通常の暗号化ハッシュではなく、常にパスワードハッシュまたは「キー導出式」を使用する必要があります。 SHAまたはMD5のようなものでハッシュされている場合、専用のクラッキング作業に耐えるのに十分強いパスワードを選択するのは非常に困難です。PBKDF2、bcrypt、またはscryptでは、パスワードはできるだけ短くすることができます7または8文字ですが、MD5またはSHAでは、少なくとも13〜14文字である必要があります。

52

上記の良い答えがありますが、当面の理由は、sha256がソルト化されておらず、2ラウンドが計算上4桁のパスワードが弱いのと同じようにかなり弱いということです。

  • 最新のGPUセットアップでは、無塩の4桁のsha256ハッシュ(ミリ秒単位)をすべて簡単に計算できます
10
Bradley Kreider