Protocol-Design
兩個(或更多)方如何共享並就一個共同的隨機種子達成一致?
我真的不知道如何稱呼這個簡單的問題:兩方(或多方)需要建立一個通用(非秘密)值以用作確定性 RNG 的種子。唯一的要求是每一方都可以確定種子是真的隨機的。
我的想法如下:
- 每一方產生一個隨機值 $ x_i $ ,
- 發送它的雜湊 $ h(x_i) $ 對其他人,
- 並等待所有其他方的雜湊。
- 然後每一方發送其原始值 $ x_i $ 對其他人,
- 等待所有值,
- 並驗證它們。
- 最後,每一方計算種子為 $ \mathop\oplus\limits_i x_i $
我知道發明協議應該留給專家,但是,我很好奇這是否可行,以及為此需要什麼。我看到生成的值必須足夠長以避免暴力破解並且 $ h $ 必須是抗碰撞的。
這幾乎是共享隨機數生成(生成、送出、發布)的教科書實現。所以,是的,它是安全的。但這僅適用於大隨機數,這是一個允許任意大小整數的小調整:
如果你需要一個 $ n $ -每個人都應該生成的位隨機數 $ n $ - 位隨機數 - 這與交易所本身的安全級別無關。然後大家也生成第二個隨機數 $ m $ ,它很大(例如,256 位)以防止暴力破解,並發布 $ H(n || m) $ . 然後在每個人都承諾之後,每個人都會發布他們的 $ m $ 和 $ n $ , 但只使用 $ n $ 對於 XOR 和。
我建議您對承諾使用 256 位雜湊。
謹防 MITM 和重放攻擊的各種令人討厭的行為,確保您通過經過身份驗證的渠道執行所有這些操作。