Hash

是否有一個簡單的雜湊函式可以在沒有電腦的情況下計算?

  • May 21, 2020

我正在尋找一個可以手動計算的雜湊函式(在合理的時間內)。該函式至少應該有點安全:不應該有簡單的方法來找到碰撞(手動)。例如,一個簡單的交叉求和不符合這個標準,因為一個人可以很容易地構造一個與另一個具有相同散列的數字。

有(簡單的)功能嗎?我對此很感興趣,因為我在學校的 CS 課上介紹了承諾計劃。

好吧,取決於什麼是合理的以及您可以手動可靠地計算什麼,您可能能夠計算中等規模組中的模指數(例如 $ Z_n $ 對於中度 $ n $ )。我認為通過重複平方求冪是可行的。

可能更實用的是類似 MD5 的臨時混淆擴散原語。您需要使輸入足夠大,以使手動進行詳盡搜尋不切實際(我認為應該使用 32 位?),然後製作一個足夠簡單的圓形函式,可以手動計算,但具有良好的經驗碰撞-反抗。最後應用 Merkle-Damgaard 進行“幾”輪。

我希望這與隨機的加密同學一起工作得很好。如果你在和 Adi Shamir 比賽,你可能會被搞砸。

**編輯:**對於面對面的承諾方案,您可以完全擺脫散列函式。只需在折疊的紙上寫一串隨機位,然後將其交給您的合作夥伴以送出這些位。但更有趣的場景是通過監獄牆、電話或網際網路進行此操作……那麼你真的需要一些數學知識。

讓我們以監獄牆為例:你想向另一個囚犯承諾一個整數 $ x $ 而且您沒有計算資源,但可以通過敲擊進行通信(沒有紙)。這就是我要做的:選擇一個 64 位數字 $ x $ 你想承諾。確保你不能考慮它(它可能是素數,但手動驗證素數會很乏味)。然後選擇另一個更大的 64 位數字 $ y $ 這也很難手工計算。

現在計算 $ p=xy $ (簡單)並發送 $ p $ 給你的朋友。如果 $ x $ 和 $ y $ 兩者都很難考慮, $ p $ 也是,所以他無法提取 $ x $ 或者 $ y $ 從 $ p $ . 現在為了揭示,你發送 $ x $ 和 $ y $ ; 他證實 $ p = xy $ 然後 $ x $ 是較小的整數。

重要的是兩者都是 64 位(或兩者大小相同),以防止您更改為 $ x’ $ 在送出之後 $ p = x’ (k y) $ . 這不會發生,如果 $ x $ 和 $ y $ 當然是素數,但是大素數不容易手動生成。

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