暗号学的ハッシュ関数
原像計算困難性 (preimage resistance) ハッシュ値 h が与えられたとき、そこから h = hash(m) となるような任意のメッセージ m を探すことが困難でなければならない。これは一方向性関数の原像計算困難性に関連している。この特性がない関数は(第1)原像攻撃に対して脆弱である。 第2原像計算困難性 入力 m1 が与えられたとき、h = hash(m1) = hash(m2) となる(すなわち、衝突する)ような別の入力 m2(m1とは異なる入力)を見つけることが困難でなければならない。これを「弱衝突耐性」ともいう。この特性がない関数は、第2原像攻撃に対して脆弱である。(第1)原像攻撃と異なり、h を単純に固定するのではなく m1 のハッシュ値となるように固定する。
この場合には、ハッシュ値のハッシュ値を何度も求める「ストレッチング」などの技法を用いるか、そういった目的に適するように設計された特別な鍵導出関数、たとえばbcryptを用いる。通常のハッシュ関数として、ハッシュテーブルのインデックス、フィンガープリント、重複データの検出、ファイルの一意な識別、データの誤りを検出するチェックサムなどにも利用できるが、通常のハッシュ関数と比べて計算が重い点で、必ずしも適していない。
なお「(事実上)」とは、探索しなければならない対象が数え上げ可能なために総当たり攻撃ができるため、実際には探索の計算に必要な時間が現実的に十分に長いかどうか、という意味だからである。理想的には一方向性関数であれば良いのだが、一方向性であるという保証のある(一方向性であると証明された)ハッシュ関数はまだ得られておらず、そもそも数理的にそれが存在するか否かもわかっていない。現状では、構成法が広く暗号研究者に知られていて攻撃法が研究されており、かつ、効果的・効率的な攻撃法が発見されていないハッシュ関数であれば安全であろう、とみなされて運用されている。もし理想的なハッシュ関数があったとしたなら、暗号学的には、総当たり攻撃(および誕生日攻撃)以外には攻撃法が無いということになる。