web-dev-qa-db-ja.com

比較的(マシンに依存しない)ハッシュアルゴリズムを速度で比較するテーブルはありますか

私が理解している限り*、パスワード/ソルトハッシュアルゴリズムを選択する際の主要な基準の1つは、その速度です。ブルートフォース攻撃を防ぐには、遅いアルゴリズムの方が優れています(また、レインボーテーブルを生成することが非現実的になります)

私が正しく理解していると仮定すると、それらのアルゴリズムのマシンに依存しない相対的なベンチマークがあり、速度でソートされているテーブルはありますか?

例えば.

  • MD5
  • SHA-1
  • SHA-256
  • PBKDF2
  • bcrypt

例えば理論的にbcryptがSHA-1よりx倍遅い場合、SHA-1のx回の反復は同等と見なされますか? (少なくともハッシュ化およびソルト化されたパスワードに関連するブルートフォース攻撃防止のため)

*私はセキュリティに不慣れです。このサイトを穏やかにしてください。

7
Eran Medan

PBKDF2とbcryptは「反復回数」で構成されています。つまり、必要なだけ遅くすることができます。したがって、それらの速度を示す表はありません。代わりに、何をする必要があるかは、関数に割り当てる時間を決定して(たとえば、サーバーで0.05かかるようにする)、反復回数を設定することです。それに応じて。これはサーバーの計算能力に大きく依存するため、これはターゲットハードウェアのmeasureの問題です。

他の関数については、多くのプラットフォームでの多くのハッシュ関数のパフォーマンス測定のために このサイト で非常に多くのデータを見つけることができます(これらのプラットフォームはすべてサーバー、デスクトップシステム、または最悪のスマートフォン-小さな組み込みシステムは対象外です)。全体像は次のとおりです。

  • パフォーマンスはハードウェアに大きく依存します。
  • パフォーマンスは実装に大きく依存します。
  • 現在定義されているすべてのハッシュ関数は速すぎて、パスワードハッシュだけでは不十分です。数千回または数百万回の反復による何らかの減速が必要です。

PBKDF2は反復を適切に追加しますが、GPUを使用することで、並列攻撃のコンテキストではさらに高速化できます。したがって、GPUに対応していない関数を使用することをお勧めします。これは、現時点ではbcryptを意味します(scryptは信頼できるほど古くなると、Nice候補になります)。詳細は this answer を参照してください。

8
Thomas Pornin

正確な測定を行うには、目的のハードウェアと目的のソフトウェアを使用してベンチマークを行う必要があります。実装によって大きな違いが生じます。さらに、一部のハードウェアは、特定のアルゴリズムの組み込みの加速を行うことができます。

OpenSSLを使用するつもりなら、ベンチマークスイートが組み込まれているので幸運です。

$ openssl speed md5 sha1 sha256
Doing md5 for 3s on 16 size blocks: 4595381 md5's in 3.00s
Doing md5 for 3s on 64 size blocks: 3732906 md5's in 3.00s
....
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md5              24508.70k    79635.33k   227390.21k   419190.78k   557154.30k
sha1             21918.90k    68573.48k   164350.12k   256347.14k   305924.78k
sha256           20979.09k    52742.04k   100939.52k   130634.07k   142630.91k
12
tylerl

このようなテーブルは、ハッシュパスワードに最適なハッシュアルゴリズムを見つけるのに役立ちません。 BcryptやPBKDF2のような鍵導出関数の考え方は、必要な時間は構成可能で適応可能であることです

つまり、コスト要因を使用して、パスワードをハッシュするために実行する反復の回数を決定します。この値を調整して、サーバーの速度が低下しすぎないようにしますが、ブルートフォース攻撃を阻止できます。

許可された時間を自分で決定する必要があるため、どのハッシュ関数を(時間に関して)使用するかはそれほど重要ではありません。しかし、違いを生むことができるのは、ハッシュ関数がGPUにどれだけうまく実装できるかです。これが Hashcatツール2012 の表です。 GPUで無効にしようとするアルゴリズムの1つはScryptです。Bcryptも確かに良い選択です。

4
martinstoeckli

短い答え:

  • SHA-1は根本的に壊れているので使用しないでください。
  • MD5は弱く、塩でやや強い。
  • SHA-256は[〜#〜] ok [〜#〜]でパスワードを保存しますが、ソルトを使用します。
  • lotには、bcryptとPBKDF2のどちらが「最高」かという議論があります。
    • bcryptファンはPBKDF2を並列化できるため、ブルートフォースをより速く実行できると主張しています。
    • PBKDF2のファンは、bcryptのフグの使用は脆弱性について十分に研究されておらず、Xセキュリティ組織の今週の「公式」に受け入れられていないため、bfishの使用が「弱まる」と主張しています。
    • それから、それはすべてささいな名前呼び出しと「あなたのお母さんはとても太っている...」ジョークに降ります。

要点は、PBKDF2またはbcryptのいずれかを使用すると、作業係数のあるハッシュ関数を使用していない他の誰よりも1マイル先に位置するということです。

3
Sammitch

はい、パスワードのハッシュにはより遅いアルゴリズムが必要です。 BcryptとPBKDF2はどちらもこの目的に最適です。ここに 2つの大きな比較があります

マシンに依存しない質問に答えるのは難しいですが、Javaのデスクトップ/サーバーアプリケーションを使用したハッシュに主に興味があると思います。一部の人々は、専用のGPU、FPGA、またはASICハードウェアで猛烈な速度で言及したハッシュアルゴリズムのいくつかを実行しています。BcryptとScryptの幸運なケースは、低速メモリを使用するように設計されていたということです。 GPUスタイルの最適化に抵抗します。

PBKDF2も良好で、NISTはPBKDF2のパスワードハッシュを承認しています。また、.NETの実装はFIPSに準拠しています。そのため、速度だけを考慮する必要はありません。

この現在の質問ではおそらく必要ないかもしれませんが、将来の参照のために、アルゴリズムを比較するために crypto.SE サイトにも興味があるかもしれません。ハッシュを生成するハードウェアによって異なります。たとえば、これは scrypt について説明するリンクです。

これらの質問のいくつかは以前に尋ねられているため、それらの質問を検索してリンクし、不足している知識に基づいて質問することをお勧めします。もう一度言いますが、Security.SEはインテリジェントで親しみやすいグループです。

3

次の答えは、特定の質問「これらのアルゴリズムのマシンに依存しない相対的なベンチマークがあり、速度で並べ替えられたテーブルはありますか?」に対するものです。

異なるアルゴリズムの相対速度は、使用するマシンによって異なるため、このようなテーブルは存在しない可能性があります。一部のアルゴリズム(DESなど)は、ハードウェアでは高速になり、ソフトウェアでは低速になるように設計されています。他のアルゴリズム(AESなど)は、ソフトウェアで高速になるように設計されています。

攻撃者が使用する可能性のあるマシンにはさまざまな種類があります。 PCは最も簡単に使用できますが、通常はパフォーマンスが最も低くなります。深刻なクラッカーはGPUを使用する可能性がはるかに高くなります。政府などの資金のある組織は、おそらくFPGAファームを使用します。

GPU(最も可能性の高い攻撃者)を使用するクラッカーに焦点を当てたとしても、異なるハッシュ関数の相対的なパフォーマンスにはGPU間の違いがあります。これは、GPUタイプ(CUDAまたはOpenCL)とメモリサイズの変化によるものです(一部のハッシュ関数は他のものよりもメモリ集約型です)。 Ivan Golubevは 素晴らしい表 を維持しており、市場に出回っているほぼすべてのGPUのパフォーマンスを、bcryptやscryptではなく、いくつかのハッシュ関数(MD5、SHA1など)と比較しています。

3