私が理解している限り*、パスワード/ソルトハッシュアルゴリズムを選択する際の主要な基準の1つは、その速度です。ブルートフォース攻撃を防ぐには、遅いアルゴリズムの方が優れています(また、レインボーテーブルを生成することが非現実的になります)
私が正しく理解していると仮定すると、それらのアルゴリズムのマシンに依存しない相対的なベンチマークがあり、速度でソートされているテーブルはありますか?
例えば.
例えば理論的にbcryptがSHA-1よりx倍遅い場合、SHA-1のx回の反復は同等と見なされますか? (少なくともハッシュ化およびソルト化されたパスワードに関連するブルートフォース攻撃防止のため)
*私はセキュリティに不慣れです。このサイトを穏やかにしてください。
PBKDF2とbcryptは「反復回数」で構成されています。つまり、必要なだけ遅くすることができます。したがって、それらの速度を示す表はありません。代わりに、何をする必要があるかは、関数に割り当てる時間を決定して(たとえば、サーバーで0.05秒かかるようにする)、反復回数を設定することです。それに応じて。これはサーバーの計算能力に大きく依存するため、これはターゲットハードウェアのmeasureの問題です。
他の関数については、多くのプラットフォームでの多くのハッシュ関数のパフォーマンス測定のために このサイト で非常に多くのデータを見つけることができます(これらのプラットフォームはすべてサーバー、デスクトップシステム、または最悪のスマートフォン-小さな組み込みシステムは対象外です)。全体像は次のとおりです。
PBKDF2は反復を適切に追加しますが、GPUを使用することで、並列攻撃のコンテキストではさらに高速化できます。したがって、GPUに対応していない関数を使用することをお勧めします。これは、現時点ではbcryptを意味します(scryptは信頼できるほど古くなると、Nice候補になります)。詳細は this answer を参照してください。
正確な測定を行うには、目的のハードウェアと目的のソフトウェアを使用してベンチマークを行う必要があります。実装によって大きな違いが生じます。さらに、一部のハードウェアは、特定のアルゴリズムの組み込みの加速を行うことができます。
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
このようなテーブルは、ハッシュパスワードに最適なハッシュアルゴリズムを見つけるのに役立ちません。 BcryptやPBKDF2のような鍵導出関数の考え方は、必要な時間は構成可能で適応可能であることです。
つまり、コスト要因を使用して、パスワードをハッシュするために実行する反復の回数を決定します。この値を調整して、サーバーの速度が低下しすぎないようにしますが、ブルートフォース攻撃を阻止できます。
許可された時間を自分で決定する必要があるため、どのハッシュ関数を(時間に関して)使用するかはそれほど重要ではありません。しかし、違いを生むことができるのは、ハッシュ関数がGPUにどれだけうまく実装できるかです。これが Hashcatツール2012 の表です。 GPUで無効にしようとするアルゴリズムの1つはScryptです。Bcryptも確かに良い選択です。
短い答え:
要点は、PBKDF2またはbcryptのいずれかを使用すると、作業係数のあるハッシュ関数を使用していない他の誰よりも1マイル先に位置するということです。
はい、パスワードのハッシュにはより遅いアルゴリズムが必要です。 BcryptとPBKDF2はどちらもこの目的に最適です。ここに 2つの大きな比較があります
マシンに依存しない質問に答えるのは難しいですが、Javaのデスクトップ/サーバーアプリケーションを使用したハッシュに主に興味があると思います。一部の人々は、専用のGPU、FPGA、またはASICハードウェアで猛烈な速度で言及したハッシュアルゴリズムのいくつかを実行しています。BcryptとScryptの幸運なケースは、低速メモリを使用するように設計されていたということです。 GPUスタイルの最適化に抵抗します。
PBKDF2も良好で、NISTはPBKDF2のパスワードハッシュを承認しています。また、.NETの実装はFIPSに準拠しています。そのため、速度だけを考慮する必要はありません。
この現在の質問ではおそらく必要ないかもしれませんが、将来の参照のために、アルゴリズムを比較するために crypto.SE サイトにも興味があるかもしれません。ハッシュを生成するハードウェアによって異なります。たとえば、これは scrypt について説明するリンクです。
これらの質問のいくつかは以前に尋ねられているため、それらの質問を検索してリンクし、不足している知識に基づいて質問することをお勧めします。もう一度言いますが、Security.SEはインテリジェントで親しみやすいグループです。
次の答えは、特定の質問「これらのアルゴリズムのマシンに依存しない相対的なベンチマークがあり、速度で並べ替えられたテーブルはありますか?」に対するものです。
異なるアルゴリズムの相対速度は、使用するマシンによって異なるため、このようなテーブルは存在しない可能性があります。一部のアルゴリズム(DESなど)は、ハードウェアでは高速になり、ソフトウェアでは低速になるように設計されています。他のアルゴリズム(AESなど)は、ソフトウェアで高速になるように設計されています。
攻撃者が使用する可能性のあるマシンにはさまざまな種類があります。 PCは最も簡単に使用できますが、通常はパフォーマンスが最も低くなります。深刻なクラッカーはGPUを使用する可能性がはるかに高くなります。政府などの資金のある組織は、おそらくFPGAファームを使用します。
GPU(最も可能性の高い攻撃者)を使用するクラッカーに焦点を当てたとしても、異なるハッシュ関数の相対的なパフォーマンスにはGPU間の違いがあります。これは、GPUタイプ(CUDAまたはOpenCL)とメモリサイズの変化によるものです(一部のハッシュ関数は他のものよりもメモリ集約型です)。 Ivan Golubevは 素晴らしい表 を維持しており、市場に出回っているほぼすべてのGPUのパフォーマンスを、bcryptやscryptではなく、いくつかのハッシュ関数(MD5、SHA1など)と比較しています。