web-dev-qa-db-ja.com

MD5は安全ではないと考えられていますか?

md5の悪用に関するこれらすべての記事がオンラインで流通した後、別のハッシュアルゴリズムへの切り替えを検討しています。私の知る限り、これは常に多くのDBAの間で選択されたアルゴリズムでした。 (SHA1、SHA256、SHA384、SHA512)の代わりにMD5を使用することはそれだけのメリットですか、それとも純粋なパフォーマンスの問題ですか?

他にどのようなハッシュをお勧めしますか(プラットフォームとしてデータバインドアプリケーションを考慮に入れて)?現在、ソルトハッシュを使用しています(MD5ソルトハッシュ)。 md5ファイルハッシュとパスワードハッシュの両方を同様に検討してください。

89
Tawfik Khalifeh

パスワードのMD5

パスワードにsalted md5を使用することは悪い考えです。 MD5の暗号の弱点のためではなく、高速であるためです。これは、攻撃者が単一のGPUで1秒あたり billions の候補パスワードを試行できることを意味します。

使用する必要があるのは、scrypt、bcrypt、PBKDF2などの意図的に遅いハッシュ構造です。単純なソルト処理されたSHA-2は、ほとんどの汎用ハッシュと同様に高速なので、十分ではありません。チェックアウト パスワードを安全にハッシュする方法? 何を使用すべきかについての詳細を確認してください。

ファイルの整合性のためのMD5

ファイルの整合性のためにMD5を使用することは、実際の使用シナリオに応じて、実際的な問題である場合とそうでない場合があります。

MD5に対する攻撃は衝突攻撃であり、プリイメージ攻撃ではありません。これは、攻撃者が両方のファイルを制御できる場合、同じハッシュで2つのファイルを生成できることを意味します。しかし、影響を受けなかった既存のファイルのハッシュと一致させることはできません。

攻撃がアプリケーションに適用されるかどうかはわかりませんが、個人的にはそうではないと思われても、移行を開始します。何かを見落とすのは簡単すぎる。転ばぬ先の杖。

このコンテキストでの最良のソリューションは、現時点ではSHA-2(SHA-256)です。 SHA-3が標準化されたら、それも良い選択です。

108
CodesInChaos

@CodesInChaosの回答を完了するために、MD5はTraditionのためによく使用され、パフォーマンスのためではありません。データベースを扱う人は、セキュリティを扱う人と同じではありません。彼らはしばしば弱いアルゴリズムの使用に問題がないことを確認します(たとえば、MySQLがパスワードのハッシュに使用していた アルゴリズムのジョーク を参照してください)。彼らはMD5を使用していて、MD5を使用するのに慣れているため、彼らはMD5を使用しています。

パフォーマンスは、測定よりもはるかに頻繁に議論されます。しかし、論理的には、測定するものがない場合、パフォーマンスの問題は発生しません。基本的なCPUの1つのコアを使用して、MD5で毎秒400 MB以上、SHA-1で300 MB /秒、SHA-256で150 MB /秒にハッシュできます。一方、まともなハードディスクでは、さらに低いレートでデータが生成されるため(100〜120 MB/sが一般的です)、ハッシュ関数がボトルネックになることはほとんどありません。したがって、データベースのハッシュに比べてパフォーマンスの問題はありません。

ハッシュ関数の通常の推奨事項は次のとおりです。

  1. しないでください。基本的な暗号アルゴリズムではなく、いくつかのアルゴリズムをまとめてプロトコルを使用して、いくつかのセキュリティ機能(機密性と整合性を備えたデータの転送など)をまとめて提供する必要があります。

  2. 本当に、それをしないでください。パスワード(より正確には、パスワード検証トークン)を保存する場合は、ハッシュ関数とソルトのカスタムミックスを作成しないでください。このような用途のために特別に研究された構造を使用してください。 これは通常bcryptまたはPBKDF2を意味します

  3. ハッシュ関数が実際に機能する場合は、SHA-256を使用します。 SHA-256に関する重大な問題(おそらくそのパフォーマンス)が正しく検出および測定された場合にのみ、他の関数の使用を検討してください。

35
Thomas Pornin

現在、ソルトハッシュを使用しています(MD5ソルトハッシュ)。

MD5ハッシュをソルトしている場合は、MD5を使用したくありません。 PBKDF2またはbcryptを使用する必要があるようです。

私の知る限り、これは常に多くのDBAの間で選択されたアルゴリズムでした。

それは説得力のある理由ではありません。

私は、一般的なテクノロジーで少なくとも5年遅れている多くのDBA(バージョン管理、すべてに対してフォーマットされていないPerlスクリプトなどを使用していない)と協力してきました。彼らは特に悪いDBAだったかもしれませんが、変更しないという非常に保守的な考え方が備わっていると思います。

6
Bradley Kreider

すでに与えられた回答(そのほとんどは優れています)を補足するために、データ侵害(Ashley Madison)が原因でパスワードテーブル全体がリークされるという現実の例があります。彼らはランダムなソルトでbcryptを使用してパスワードをハッシュしました。セキュリティ研究者は、これらのハッシュを取得して、総当たりにすることを決定しました。 これが結果でした

これらすべての結果として、bcryptは少なくとも2つの理由でAshley Madisonのダンプをクラックしようとする人にHerculeanの要求を課しています。まず、4,096回のハッシュ反復には膨大な計算能力が必要です。ピアースの場合、bcryptは彼の4つのGPUクラッキングリグの速度を毎秒156推測程度に制限しました。第2に、bcryptハッシュはソルト処理されているため、彼のリグは各ハッシュの平文を一度にすべてではなく、一度に推測する必要があります。

「そうです、毎秒156回のハッシュです」とピアースは書いている。 「MD5パスワードを解読することに慣れている人にとって、これはかなりがっかりするように見えますが、bcryptなので、取得できるものを使用します。」

ピアースは4,000点を超えると諦めた。ピアスの限られたプールで600万回すべてのハッシュをロックユーのパスワードに対して実行するには、なんと19,493年かかると彼は見積もっている。 Ashley Madisonのダンプに合計3,600万件のハッシュ化されたパスワードがあった場合、その作業を完了するには116,958年かかりました。

結局のところ、彼が解読できたのは、途方もなく単純な、または一般的なパスワード(「123456」など)だけでした。

4
Machavity

簡単に言えば、Rainbowテーブルのため、今ではかなり安全ではありません。Rainbowテーブルは、MD5ハッシュとそれに対応する文字列のリストです。だから基本的に私はSHA1などの他の選択肢を検討します

0
Shane

はいMD5は安全ではなく、SHA-1も安全ではありません。ダイジェストのサイズが問題になる場合は、SHA-256を使用することをお勧めします。 BINARYカラムに格納すると、CHARに格納する場合よりもスペースが少なくてすみます。正しく行われていることを確認してください。 MD5はSHA-256よりも約2.3倍高速です。その他のベンチマークは http://www.cryptopp.com/benchmarks.html にあります

0
Matrix