如果兩個輸入串的hash函數的值一樣,則稱這兩個串是一個碰撞(Collision)。既然是把任意長度的字符串變成固定長度的字符串,所以必有一個輸出串對應無窮多個輸入串,碰撞是必然存在的。
一個優良的hash函數 f 應當滿足以下三個條件:
(1)對於任意y,尋找x,使得f(x)=y,在計算上是不可行的。
(2)給定x1∈A,找x2∈B,,使得f(x1)=f(x2),在計算上是不可能的,這也就是弱無碰撞性。
(3)尋找x1,x2,使得f(x1)=f(x2),在計算上也是不可行的,這也就是強無碰撞性。
這樣就稱為安全保密的Hash函數,除了枚舉外不可能有別的更快的方法。如第3條,根據生日定理,要想找到這樣的x1,x2,理論上需要大約2^(n/2)的枚舉次數。
因為前兩條都能被破壞的hash函數太弱而被拋棄,幾乎所有的hash函數的破解,都是指的破壞上面的第3條性質,即找到一個碰撞。在密碼學上還有一個概念是理論破解,指的是提出一個算法,使得可以用低於理論值得枚舉次數找到碰撞。