這種散列功能會屬於預映像抗性或抗碰撞性嗎?
我了解雜湊函式主要有三個安全要求,抗前像性、抗前像性和抗碰撞性。
我需要寫一個散列函式,它允許使用者辨識原始散列項是否相同,但我有點困惑這屬於哪個安全功能。我知道最好沒有散列項創建相同的摘要,但在這種情況下它是一個要求。
這是否屬於預圖像阻力,因為通常這是添加隨機鹽的時候?還是簡單的抗碰撞?由於抗碰撞性阻止散列值等於相同的值。
我有點困惑,因為我不希望不同的輸入等於相同的輸出,只有相同的輸出。
我不希望不同的輸入等於相同的輸出,只有相同的輸出。
這幾乎是碰撞阻力的定義:
如果很難找到散列到相同輸出的兩個輸入,則散列函式 H 是抗碰撞的;也就是說,兩個輸入 a 和 b 使得 H(a) = H(b),並且 a ≠ b。
當然,沒有雜湊函式可以保證相同的雜湊值意味著相同的輸入。考慮將高達 2 GB 的文件散列成 256 位散列字元串的情況。所以有 $ 2^{8000000000} $ 可能的輸入,只有 $ 2^{256} $ 可能的輸出。許多可能的文件將映射到每個雜湊字元串。
因此,您永遠無法保證相同的散列意味著相同的輸入,但您可以放心,使用良好的加密散列函式,攻擊者在計算上是不可行的輸入並找到具有相同雜湊值的第二個輸入(第二個原像電阻)。
您正在考慮的屬性只是作為數學函式的屬性:如果 $ x = y $ 然後 $ f(x) = f(y) $ .
經常使用不具有此屬性的虛假“函式”(嚇人的引號;常式或過程會更好的詞)的電腦專家有時將真正的數學函式稱為**確定性函式。隨著最近函式式程式的流行,您還會看到它們被稱為純函式。
您提到了加鹽,這是一種實現在技術上通常稱為隨機或機率散列的機制。在理論處理中,隨機散列通常被建模為從大量隨機選取的確定性散列函式中隨機選取一個確定性散列函式。但在實踐中,隨機散列通常是通過將不同的隨機鹽與消息一起輸入相同的確定性散列函式來實現的。
最常用的加密雜湊函式(如 SHA-256、SHA-3 和 Blake2)都是確定性的,因此它們可以輕鬆滿足您的要求。