Protocol-Design
這個方案是可證明公平的隨機數生成嗎?
我想出了一種在客戶端和伺服器之間生成隨機數的方法,我希望它是公平的:
- 客戶端和伺服器提前決定一個範圍, $ 0 $ 槽 $ n-1 $ .
- 伺服器生成一個 $ 256 $ 位隨機數 $ m $ (在範圍內 $ 0 $ 到 $ \operatorname{floor}(\frac{2^{256} }{ n}) · n $ ) 並使用 SHA-256 對其進行散列以給出 $ m’ $ . $ m’ $ 然後發送給客戶端。
- 客戶端生成一個 $ 256 $ 位隨機數 $ o $ (如上)並將其發送到伺服器。
- 伺服器現在可以計算一個公平的隨機數 $ p = m + o \pmod n $ .
- 伺服器發送 $ m $ 和 $ p $ 給客戶。
- 客戶現在可以檢查 $ \operatorname{SHA256}(m) = m’ $ 和 $ p = o + m \pmod n $ .
我忽略了什麼嗎?
是的,你的方案很好。
Nitpick:我認為您的意思是您的目標是在範圍內生成一個隨機數 $ 0\ldots n-1 $ (不是 $ 0\ldots n $ )。此外,為避免偏見,您需要生成 $ m $ 作為範圍內的隨機數 $ 0 \ldots (\lfloor 2^{256}/n \rfloor \cdot n)-1 $ (不是 $ 0\ldots \lfloor 2^{256}/n \rfloor \cdot n $ ).
這個問題被稱為安全的硬幣翻轉,之前已經進行了深入的研究。有關解決方案和分析,請查看本網站上的以下問題: