Hash
沒有雪崩效應但碰撞很少的雜湊函式
我正在尋找具有以下屬性的雜湊函式:
- 雪崩效應低,類似的文件應該得到類似的輸出
- 碰撞次數少(如果我在一個文件中有 010000,而在另一個文件中有 099999 + 1,則雜湊應該不同並且不應輕易碰撞)
案例是“暴力破解”由函式散列的文件,所以我給出一個 0*10000 的輸入文件,然後暴力破解輸入文件。
通過減少雪崩效應,我希望我可以通過分析差異來加快這個過程(
fc5e038d38a57032085441e7fe7010b0
是原始文件的輸出雜湊,當我的蠻力接近原始文件時,雜湊應該有越來越少的差異fc5e038d38a57032085441e7XXXXXXX
)這在數學上是否可能?具有這些屬性的雜湊不會導致大量衝突,尤其是當我暴力破解它時?
當然。碰撞的機率取決於:
- 消息中的符號是如何分佈的:消息有特定的結構嗎?某些元素是否比其他元素更頻繁地出現?
- 雜湊碼有多長。
- 雜湊碼算法本身的結構:它是否比其他的更頻繁地產生一些雜湊碼?
如果所有符號均等分佈且算法產生的散列碼也均等分佈,則衝突僅取決於散列碼長度。如果雜湊碼長度為 512 位,則衝突機率(具有上述假設)為 $ 2^{-512} $ .
符合您要求的最簡單的功能如下:
hash(M) = M mod 2^512
如果完全符合您的要求。要計算它,您只需要消息的最後 64 個字節。這意味著它非常快。並且碰撞率與 SHA-512 相同。
如果它非常快,為什麼沒有人使用它?即因為您的要求:如果沒有雪崩效應。散列碼通常用於檢測消息中的變化。如果沒有雪崩效應,則不會檢測到更改(在我的範例中,僅在消息的最後 64 個字節中檢測到更改,而不是在前面的字節中)。我想知道你會出於什麼目的使用這樣的雜湊碼。
暴力破解:如果排除雪崩效應,則意味著您將僅使用一小部分消息來創建雜湊碼。這意味著攻擊者也只會將一小部分消息視為暴力破解。意味著,蠻力將非常容易。