是否有一個單射函式將一大組整數映射到一個較小的集合,同時“衝突感知”
考慮兩組:
“大集合”包含之間的所有整數 $ 0 $ 和 $ 2^{160} $ 恰好一次。
“小集合”包含之間的所有整數 $ 0 $ 和 $ 2^{32} $ 恰好一次。
鑑於“大集合”中的成員數量大於“小集合”中的成員數量,不可能存在單射函式 $ f(n_b) = n_s $ 將任何輸入映射為“大集合”的成員 $ n_b $ 到屬於“小集合”成員的輸出 $ n_s $ . 如果那個函式 $ f $ 存在,這將是問題的答案。
出於實際原因,我們假設仍然存在具有實用功能的構造/算法 $ f_p $ 其中所有輸入的結果 $ f_p(n_b) $ 是“小集合”的成員,每個 $ n_b $ 指向一個不同的 $ n_s $ .
由於缺乏對密碼學概念的理解,我將此屬性稱為“碰撞感知”。例如,為了實現這種結構,假設儲存容量大小為 $ 2^{256} $ (256位無符號整數),有沒有函式 $ f_p $ 或任何算法 $ n_b $ 要麼返回一個“碰撞”(“碰撞感知”)或一個不同的成員 $ n_s $ ?
關於什麼:-$$ n_s = \mathcal{H}(n_b) & (2^{32} - 1) $$ 在哪裡 $ n_b \in N_b $ , ETC? $ \mathcal{H} $ 可以是您選擇的雜湊函式。由於這是一個加密網站,我建議使用 SHA-256。 $ & $ 表示按位與,但可以用適當位數的右移或左移替換(在 SHA-256 的情況下為 128)。也許太慢了(?)
加密雜湊函式是滿射的,這意味著它們的輸出偶爾會發生衝突。如果截斷,碰撞率將大大增加 $ \mathcal{H} $ 到 32 位。鴿子洞原理的效果更是如此。所以你已經設置了 $ N_b $ 填充均勻分佈的數字,給出 $ n_b \to n_s $ 從域到共域。
我不了解乙太坊,但 160 看起來很像 SHA-1 的輸出。如果是這樣,只需將帳戶/地址截斷為 32 位,因為它已經均勻分佈。
如果我理解要求,那麼您所要求的不是根據正常定義的“功能”。聽起來你想要一些 $ f $ 給定一系列輸入 $ {x_i} $ 將返回確定性值 $ y_i $ 或者如果它已經返回一個錯誤符號 $ y_i $ . 但是假設 $ x_k $ 是第一個返回錯誤的輸入。如果你打電話會發生什麼 $ f $ 序列從 $ x_k $ ? 我想你會希望它不返回錯誤,所以值 $ f(x_k) $ 沒有很好的定義。
數學上解決這個問題的方法是改變 $ f $ 接受一個序列。但實際上,這可能意味著讓您的系統記錄所有被呼叫的輸入。你會發現,如果你這樣做,你還不如回去 $ 0, …, n-1 $ 對於第一個不同的輸入,以及以下所有內容的錯誤。