Collision-Resistance

對於小於 32 字節的數據,確定不存在衝突嗎?

  • October 15, 2019

我不是在談論是否可以找到碰撞,甚至只是存在。

關鍵是因為它比散列的長度短(因為我說的是keccak256),通常每個可能的數據都有一個散列值。我的意思是在這種情況下,可能的雜湊值比輸入數據的可能值要多

是這樣嗎?或者例如,2 個不同的 16 字節長的數字可以共享相同的散列嗎?

你要問的是:

我們知道肯定存在兩個 33 字節的字元串 $ m \ne m’ $ 這樣 $ H(m) = H(m’) $ , 什麼時候 $ H $ 是(比如說)SHAKE128-256,因為只有 $ 2^{256} $ 不同的可能輸出 $ H $ 和 $ 2^{262} $ 不同的可能 33 字節消息。

是否存在兩個 <32 字節的字元串,比如 16 字節的字元串, $ m \ne m’ $ 這樣 $ H(m) = H(m’) $ ?

假設雜湊函式的輸出 $ H $ 是 $ h $ 位長,假設輸入是 $ t $ 位長。如果我們建模 $ H $ 作為一個統一的隨機函式,然後每個輸出不同的消息 $ m_1, m_2, \dotsc, m_n $ 是一個獨立的隨機變數 $ H(m_1), H(m_2), \dotsc, H(m_n) $ 上均勻分佈 $ h $ 位字元串。在這種情況下,我們想知道是否有任何碰撞 $ H $ 在 $ n = 2^t $ 不同的消息。

根據生日悖論,碰撞的機率隨消息的數量呈二次方增長:最多為 $ n^2!/2^h = 2^{2t}!/2^h $ ; 當然,這個界限不是很有幫助,如果 $ t \geq h/2 $ ,但碰撞的機率迅速收斂到 $ 1 $ 作為 $ t $ 超過 $ h/2 $ . 所以,大約有 50-50 的機率有兩個 16 字節的輸入在(比如) SHAKE128-256 下發生衝突——但除非你找到一些驚人的 SHA-3 密碼分析,否則我們永遠不會知道這兩個輸入是什麼,如果他們根本存在。對於同一 codomain 的任何其他完整散列函式也是如此,例如 SHA-256。

將抽象散列函式視為從任意輸入到有限輸出的黑盒映射。

由於可能的輸入數量是無限的,如果您假設函式近似於輸入到輸出的穩定(因為它是散列)、隨機(加密)映射,則每個輸出值必須有無限數量的衝突 ( infinite input space / finite output space)

它們只是隨機分佈的,平均2 ^ $output_bits相距(遠)。請注意,要做到這一點,輸入的大小無關緊要。只是它是一個接受任何輸入並產生有界輸出的函式。

一個完美的散列函式可能對輸出長度正好的輸入具有 1:1 映射;一旦輸入值的數量變得重要,使用任何實際的雜湊函式,應該注意“生日問題”,因為雖然任何一對項目碰撞的機會很小,但隨著項目數量的增加,可能發生碰撞的對的數量增長,因此任何*n!衝突的機率迅速接近 1。在您的範例中,16 個字節是很多.n

如果輸入比輸出短,那麼額外的輸出空間從何而來?由於我們只有一個輸入,因此答案必須來自輸入或函式內部(常數)。

實際上,雜湊實現將類似的短輸入與填充和輸入長度本身混合在一起,以區別於01010000 0101特定加密原語指定的標準介面的一部分。

*是的; 為此,身份f(x) = x是一個“完美”的散列函式(沒有衝突),但存在一些保密缺陷。

引用自:https://crypto.stackexchange.com/questions/75053