私はファイル暗号化のための簡単なプログラムを書いています。主に学術的な演習としてですが、将来の深刻な使用のために使用される可能性があります。面倒な作業はすべてサードパーティのライブラリを使用して行われますが、暗号化を行わない人にとっては、安全な方法でそれらをまとめることは依然として非常に困難です。基本的に、私はほぼすべてが私が思うように機能している。
128ビットのキー長の暗号化に128ビットのAESを使用しています。ユーザーが可変長のパスワードを入力できるようにしたいので、MD5でパスワードをハッシュしてから、そのハッシュをキーとして使用することにしました。これは許容できると思いました。キーは常に秘密であると想定されているため、衝突攻撃について心配する必要はありません。
これを実装したので、これが悪い考えであることを示すいくつかの記事に出くわしました。私の質問は:なぜですか?適切なパスワードが選択された場合、暗号はそれ自体で十分に強力であり、並外れた(現在は実行不可能な)ブルートフォース攻撃を除いて、キーを明らかにすることはありません。キーを生成するためにPBKDF2のようなものを使用する必要がありますか、それとも最も極端な暗号化アプリケーションを除くすべてのアプリケーションにとってそれはやり過ぎですか?