web-dev-qa-db-ja.com

Webでの使用に最適なハッシュアルゴリズムはどれですか。

私はここに新しく、ウェブ上でどのハッシュアルゴリズムを使用するか、そしてその理由の概要を探してサイトを探し回っています。

SHA-256や他のSHA-2ファミリーのアルゴリズムが、MD5や古いハッシュテクニックのような衝突がないため、これらのアルゴリズムが最適であるというのはコンセンサスのようです。セキュリティ以外にも、実装の容易さや実行速度などの理由により、SHA-2ファミリーのテクニックがWebでサポートされていないのではないかと思います。

TLS/HTTPSによるSSL証明書の暗号化によってすでに保護されているWebサイトでは、データ(つまりパスワード)はすでに暗号化されています(Heartbleedの最近の問題は別として)。安全性よりも実装が簡単なアルゴリズムが優先されたのでしょうか? MD5をWebで使用すること、つまりパスワードハッシュに使用することはまだ大雑把に思われます。

Webに最適なハッシュアルゴリズムとその理由

2
JHS

どのアルゴリズムが最適かは、それを何に使用するかによって異なります。たとえば、ランダムなデータ破損を見つけようとしている場合は、CRC-32のような盲目的に高速なアルゴリズムが理想的です。一方、パスワードハッシュを保護する場合は、bcryptのような本質的に遅いアルゴリズムが必要です。悪意のある改ざんからデータ転送を保護するには、SHA-256などの高速で暗号的に安全なアルゴリズムが必要です。そして最後に、他の誰かのソフトウェアと相互運用する必要がある場合、彼らが期待しているハッシュ関数を使用します。

5
Mark

疑わしい場合は、SHA-256を使用してください。これは、一般的なハッシュ関数が必要な場合のデフォルトの回答です;ハッシュpasswordsなどの特殊なケースでは、状況は different です:MD5またはSHA-1を使用したくないまたはパスワードにはSHA-2またはSHA-3ですが、bcryptのようなものです。

SSLは長い歴史を持つ展開された標準であり、通常はSHA-1を使用します。これで結構です。 SHA-1には衝突に対する理論的な弱点がありますが、SSLでのSHA-1の使用方法には衝突は問題ありません(これは [〜#〜] hmac [〜#〜]の一部として使用されます =、衝突よりもプレイメージの抵抗に作用します)。 SHA-256はSSLで使用できますが、 最新の標準(TLS 1.2) でのみ使用できます。

3
Thomas Pornin