collision)とは、2つの異なるデータからハッシュ関数などで生成したハッシュ値など(チェックサム・フィンガープリント・メッセージダイジェストなど)の値が同じ値(シノニム)になることである。概要[編集]ほとんどの分野において、衝突は一般に望ましくない結果ではある。ここでは「望ましくなさ」と呼ぶが、その「望ましくなさ」はその応用の目的によって異なる。鳩の巣原理により、ある集合全体からその集合より小さい集合への写像では必ず衝突が発生するが、メッセージダイジェストなどではその確率が十分に低いかどうかが問題となる。相同DNA配列や、ほぼ同じ内容の音声ファイルなど、よく似たデータを同一視するためにハッシュ関数とフィンガープリントを使用する場合、ハッシュ関数は似たデータに対して似た結果を出し、あるいは衝突を発生する(確率ができる限り大きくなる)ように設計される。これは一般と逆に必要な場合には衝突が望まれる例である。ビットの化けや抜けや混入をチェックするチェックサムなどはよく似た入力に対して、可能であれば十分に異なるハッシュ値を生成することが望まれ、衝突を発生させる確率ができる限り小さくなるように設計される。一方で全く異なるデータ間での衝突については通常は意識されない。いった誤り検出訂正の類はハッシュとは別とすることもある。ハッシュテーブルにおいて、衝突はルックアップ処理のコストを増加させる。いった応用には関数の計算量と結果の品質のどちらを重視するか等のトレードオフもある。ハッシュテーブルを実装するいくつかの技法との相性、あるいは入力に現れる値が完全にランダムか何らかの性質があるのか、といった考慮すべき要素もある。入力に現れうる値が予め全て既知なのであれば完全ハッシュ関数といったものもある。プロキシサーバやファイルのバックアップシステムにおいて不要なファイルの保存や転送を省略するためにはフィンガープリントが使用されるが、ここでの衝突は、単に本来ならば必要なかったはずの転送が必要になったというような結果であれば問題ないが、場合によっては不適切な処理やデータ消失の原因になりうる。暗号学的ハッシュ関数などを使うとかなり低い確率になるかもしれないが、それでもその可能性を考慮すべきかは難しい所である。暗号分野の応用では衝突が致命的なものもあり、暗号学的ハッシュ関数と呼ばれる特別な一分野としてさかんに研究されている。いった術語が定義されており、暗号学的ハッシュ関数はこれらについて、目的に応じて必要な強度を満たしていることが求められる。ハッシュ関数の結果[編集]あるデータに対して何らかの変換関数(ハッシュ関数という)を適用して、そのデータに対するレコード位置(アドレスなどでもよい)を対応させることにする。このとき、別々のデータに対して同じレコード位置が対応する場合、「シノニムが生じる」などという。データ「1,5,7,12,13」があり、データ値に対応するレコード位置を求める関数を「データ値を11で割った余り」ということにする。2この例でデータとレコード位置を表にすると上の通りである。データが1と12のどちらもレコード位置が1になってしまっている。これを「データ1と12で(レコード位置の)シノニムが生じる」などという言い方をする。(日時は個人設定で未設定ならばUTC)。表示-継承ライセンスの下で利用可能です。追加の条件が適用される場合があります。詳細は利用規約を参照してください。Cookieに関する声明モバイルビュ。