警告:この投稿は2010年に作成されて以来、GPUはブルートフォースパスワードハッシュに広く導入されています。手頃な価格のGPUは、1秒あたり100億のMD5を実行できます。これは、完全にランダムな8文字の英数字のパスワード(62文字の可能性がある)でさえ、6時間でブルートフォース攻撃を受ける可能性があることを意味します。SHA-1はわずかに遅いだけで、1日かかります。ユーザーのパスワードははるかに弱く、(ソルトを使用しても)1秒あたり数千のパスワードの割合で低下します。ハッシュ関数は高速になるように設計されています。これはパスワードには必要ありません。scrypt、bcrypt、またはPBKDF-2を使用してください。
MD5は、1996年に脆弱であることが判明したため、暗号化の目的で使用することはできません。SHA-1は一般的に使用される代替品ですが、同様の問題があります。ハッシュ関数のSHA-2ファミリーは、SHA-1の現在の代替品です。SHA-2のメンバーは、個別にSHA-224、SHA-256、SHA-384、およびSHA-512と呼ばれます。
現在、いくつかのハッシュ関数が競合して、次の標準化された暗号化ハッシュアルゴリズムであるSHA-3になります。勝者は2012年に選ばれます。これらのどれもまだ使用されるべきではありません!
パスワードハッシュについては、 bcryptのようなものの使用を検討することもできます。これは、大規模なブルートフォース攻撃を実行不可能にするのに十分な速度になるように設計されています。速度を自分で調整できるので、コンピューターが高速になっているときに速度を遅くすることができます。
警告: bcryptは、古い双方向暗号化アルゴリズムであるBlowfishに基づいており、現在、より優れた代替手段が存在します。bcryptの暗号化ハッシュ特性が完全に理解されているとは思いません。私が間違っている場合、誰かが私を訂正します。暗号化の観点からbcryptのプロパティ(速度の遅さ以外)について説明している信頼できる情報源を見つけたことがありません。
公開鍵暗号やデジタル署名よりもパスワードハッシュの方が、衝突のリスクがそれほど重要ではないことは、多少安心できるかもしれません。今日MD5を使用することは、SSLにとってはひどい考えですが、パスワードハッシュにとっては同様に悲惨なことではありません。ただし、選択肢がある場合は、より強力なものを選択してください。
優れたハッシュ関数を使用するだけでは、パスワードを保護するのに十分ではありません。長くて暗号的にランダムなソルトと一緒にパスワードをハッシュする必要があります。また、可能であれば、ユーザーがより強力なパスワードを選択したり、フレーズを渡したりできるようにする必要があります。常に長いほど良いです。