應用密碼學
碰撞抗性
碰撞是指兩個不同的訊息被磨成完全相同的雜湊值。由於輸出長度固定而輸入無限,碰撞必然存在;碰撞抗性意謂著沒有人能在實務上找出這樣一對訊息,即使可以自由選擇兩個訊息也辦不到。
其成本由生日界決定。由於攻擊者掌控兩個輸入,對 n 位元的輸出只需約 2^(n/2) 次雜湊運算——這正是生日悖論那套違反直覺的數學,23 個人就足以出現生日相同。因此 SHA-256 的 256 位元輸出只提供約 128 位元的碰撞安全性,而非 256。這正是為何雜湊長度要設為目標安全等級的兩倍。
區塊鏈假設一個雜湊值恰好對應唯一的內容。默克爾根、區塊雜湊、交易 ID 與承諾都會在你能造出兩個同雜湊物件時崩潰:你可以先給驗證者看一個區塊(或葉節點、交易),事後再換上碰撞的雙胞胎,擊潰不可竄改性。這並非空談——MD5 早已被攻破,而真實的 SHA-1 碰撞(2017 年 SHAttered 的兩份 PDF)以約 2^63 的工作量被製造出來,這正是兩者都被禁用於新協議設計的原因。
碰撞抗性嚴格強於第二原像抗性(能找到第二原像的人就找到了碰撞),但它本身並不保證第一原像抗性。
另見