web-dev-qa-db-ja.com

MD5はパスワードハッシュ関数としてどの程度弱いのですか?

教授は今日、MD5は弱いと語った。私は彼の一連の考えを理解していますが、長い(本当に長い)動的な塩と静的なコショウを使用する場合、IMHO MD5は良い方法だと指摘しました。

彼は私をじっと見つめ、ノーと言った!

私見任意のディクショナリでmd5ハッシュを「ブルートフォース」する可能性はさらに簡単です。動的/さまざまなソルトを使用する場合、O(2 ^ n)の複雑度との一致を取得するのが難しくなり、ソルトされたパスワードハッシュの前後にペッパーを使用すると、100%安全ではありませんが、それを計算するのに長い時間がかかります。

16
Alex Tape

MD5には、メッセージダイジェストアルゴリズムとして使用できなくなる、多くの既知の暗号化の弱点がありますが、これらすべてがパスワードハッシュのコンテキストに当てはまるわけではありません。しかし、これらが存在しないと仮定した場合でも、MD5は、1つの単純な理由により、依然としてパスワードハッシュアルゴリズムとしては不適切です速すぎる

攻撃者がハッシュされたパスワードを取得したシナリオでは、各パスワードとペッパーのソルトも取得したと想定する必要があります。

コショウを使用する唯一の理由は、データベースごとに異なるテーブルが必要になるため、攻撃前に事前計算されたRainbowテーブルを使用できないためです。ソルトを使用する唯一の理由は、2つの異なるアカウントの同じパスワードは異なるハッシュを持つため、パスワードデータベース全体に同じRainbowテーブルを使用できないためです。

コショウと塩の長さはそれほど重要ではありません。それらの唯一の目的は、各値が一意であることを確認することです。長さが長くなっても、攻撃が著しく難しくなるわけではありません(ハッシュするデータが増えますが、それはせいぜい直線的な増加です)。

要するに、攻撃者がすべてのアカウントの正しいハッシュを見つけるために可能なすべてのパスワードを総当たりにする必要があることを確認するために必要なのは、短いソルトだけです。

そして、それがMD5の弱点が出てくるところです。それは高速でメモリ節約アルゴリズムです。これは、攻撃者が1秒間に多数のパスワードのハッシュを計算できることを意味します。数千ドルの価値がある特殊なハードウェア(FPGAアレイやASICなど)を使用すると、特定のソルトで可能なすべての8文字のパスワードのハッシュを数時間で計算できます。

セキュリティを高めるには、bcryptなどの低速のアルゴリズムを使用します。これは、システムがユーザーを認証するためにさらに多くのCPUサイクルを必要とすることを意味しますが、攻撃者がパスワードデータベースを取得した場合、それを総当たりにするために攻撃者がはるかに多くの処理能力を必要とするため、通常、見返りは価値があります。

31
Philipp

MD5を使用する際の危険の深刻さは、MD5の使用目的によって異なりますが、MD5を使用する説得力のある理由はありません。

MD5が使用されている場合、署名によって提供される保護を回避することが可能であり、今後もmore可能になるため、MD5を署名に使用しないでください。

一方、目的が1と0のより一貫した分布を得るために ホワイトニング ランダムデータである場合、MD5はこれまでと同じように優れています。 これはセキュリティ上重要な操作ではないことに注意してください;ターゲットがないため、攻撃ベクトルはありません。アルゴリズムの知識によって得られるものも失われるものもありません。単純に、入力が真にランダムであるため、出力が真にランダムになる単純な変換です。

これらの両極端の中間のどこかに、他のすべての操作があります。あなたがやっていることの感度と暗号ハッシュの不可逆性への依存が高まるにつれて、MD5を使用する際の危険性も高まります。

しかし、MD5を使用しない最大の理由は、トリプルDESを使用しない最大の理由と同じです。より優れたオプションがあり、古いアルゴリズムを使用する利点はありません。 MD5は死んでいます。特定の限られた状況では役立ちますが、セキュリティが重要な場所で誤って使用しないように、完全に回避することをお勧めします。

13
tylerl