web-dev-qa-db-ja.com

ハッシュ関数と暗号化ハッシュ関数の違いは何ですか?

つまり、「現在の技術で機能を逆転させるのはどれほど難しいのか」ということですか?

または、それらを異なるものにする数学的概念または特性はありますか?

「関数を元に戻すのがいかに難しいか」という問題であれば、技術の進歩に伴い、一部の暗号化ハッシュ関数は暗号化されて単なるハッシュ関数ではなくなったと言うのは正しいのでしょうか。これはMD5に何が起こったのですか?

56
Mr.Eddart

すべての暗号化ハッシュ関数はハッシュ関数です。ただし、すべてのハッシュ関数が暗号ハッシュであるとは限りません。

暗号化ハッシュ関数は、いくつかのセキュリティプロパティを保証することを目的としています。最も重要なことは、衝突やプリイメージを見つけるのが難しく、出力がランダムに見えることです。 (さらにいくつかのプロパティがあり、「ハード」はこのコンテキストでは境界を明確に定義していますが、ここでは重要ではありません。)

非暗号化ハッシュ関数は、悪意のない入力の衝突を回避しようとするだけです。データ(CRC)の偶発的な変更を検出することを目的とするものもあれば、衝突をできるだけ少なくしてオブジェクトをハッシュテーブルの異なるバケットに入れようとするものもあります。

弱い保証と引き換えに、通常は(はるかに)高速です。

MD5はセキュリティを提供することを目的としているため、私はまだMD5を暗号化ハッシュ関数と呼んでいます。しかし、それは壊れているため、暗号ハッシュとして使用できなくなりました。一方、暗号化されていないハッシュ関数を使用している場合、そもそも安全性を確保しようとしたことがないため、実際には「壊れた」とは言えません。

62
CodesInChaos

暗号的に安全なハッシュ関数が強く必要とするいくつかのプロパティがありますが、非暗号的に安全なハッシュ関数にはそれほど強くは必要ありません。

  • プリイメージ耐性(ハッシュhの場合)ハッシュするとmとなるメッセージhを見つけるのは難しいはずです
  • 弱い衝突抵抗(メッセージm1別のメッセージを見つけるのは難しいはずですm2 そのため m1およびm2同じハッシュを生成)
  • 強い衝突抵抗(メッセージを見つけるのは難しいはずですm1およびm2同じハッシュを生成する)

これらの点で、多くのdifficultが表示されます。これは、定量的な指標ではなく、定性的な指標です。ここでの最良の答えは実現可能性です:何かが実現可能になり、それらのラインが時間とともに移動するとき、あいまいな線があります(計算機能がムーアの法則に従って指数関数的に増大するので、いったん困難な問題が携帯電話で解決できるようになると)。

一般に、difficultは、ある目標を達成するための時間がNP完了であると想定することをお勧めします。つまり、ハッシュの長さを長くすると、ハッシュを解除するのに必要な時間が大幅に長くなります。

もう1つのポイントは、暗号で保護されたハッシュアルゴリズムは、一部のアプリケーションでは役立ちますが、他のアプリケーションでは役に立たない場合があることです。これは、攻撃者のモデル、保護する情報の性質、およびパフォーマンス要件などに依存します(原則として、ハッシュの暗号化プロパティが優れているほど、実行時の動作が悪くなります)。

21
jupp0r