web-dev-qa-db-ja.com

なぜ8msがハッシュの目標なのですか?

私は現在、PHPで小さなプロジェクトを開発しています。これにはユーザー認証が含まれるため、ハッシュに関してどのようなオプションがあるかを調査しています。 PBKDF2は、主にその反復的な性質、ハッシュアルゴリズムによる柔軟性、および拡張性のために解決しました。

私が読んでいるのは、8ms(または0.008秒)がハッシュを生成するための目標の1つだということです。なぜこの特定の値が目標なのですか?ハッシュの生成に時間がかかる理由は理解できますが、具体的にはなぜ8msなのですか?それは単に、所要時間とセキュリティのバランスが取れた値なのか、それとももっと具体的な理由があるのか​​。

理論的

たとえば、SHA256で6文字のキー長で6400回の反復が可能なサーバーがあり、ソルトはX文字で、パスワードはY文字で9ミリ秒未満です。それが「恐れ」であるかどうかはわかりませんが、すべてのインテントの目的でソルトおよびハッシュされているにもかかわらず、反復回数が少なく、キーの長さが非常に短いため、これは十分とは言えません。安全なアルゴリズムを目的としています。私のシステムの9msは、ハッシュの「クラッキング」専用のシステムでは大幅に少なくなります。繰り返しになりますが、これらの値は単なる理論上のものです。過度に調べないでください。

したがって、キーの長さが60で64000回の反復に行くと想定します。これは計算に約90ミリ秒かかります。反復回数が多いため、出力キーの長さと生成にかかる時間。

さらに言えば、元の環境で実行した場合、「8msルール」よりも約91%長くかかるにもかかわらず、計算対象のシステムに関係なく、後者のハッシュの計算に(最初のハッシュと比較して)10倍長くかかります。

では、この8ミリ秒の値はどこから来たもので、どのような根拠で正確に推奨されているのでしょうか。 8msは環境の計算時間に基づいていますか、それとも他の手段(GPUで実行されている専用のハッシュアプ​​リケーションなど)を通じて計算されていますか?

8ms推奨ソース#1

8ms推奨ソース#2

5
Scott P

「8ミリ秒ルール」はありません。 Thomas Porninが説明 (最初のリンク)であった方程式があります。この例では、32ビットのパスワード品質と、ハッシュシステムのクラックに使用するハッシュシステムとして200倍のコンピューティングリソースを持つ攻撃者を示しています。ハッシュの実行に8msかかった場合、タスクは1か月で完了します。パスワードの強さ、攻撃者のリソース、リソースへの献身についての想定を調整して、ニーズに合わせる必要があります。

7
Jeff Ferland