Protocol-Design

網路上的剪刀石頭布,如何防止作弊伺服器?

  • January 27, 2015

我正在嘗試設計加密協議來與兩方玩 Rock-Paper-Scissors,既不信任對方,也不信任他們用於通信的伺服器,因此遊戲“可證明是公平的”。

所以有愛麗絲和鮑勃。他們互不相識,他們來到伺服器匹配對方,伺服器提示他們打賭。

  1. 愛麗絲來到伺服器並存了一些錢
  2. Bob 來到伺服器並獨立於 Alice 存入一些錢
  3. Alice 想出了她的賭注(比如'rock'),但告訴伺服器HMAC('rock', 'some_random_secret')而不是純文字,以防止伺服器實現總是獲勝的機器人。
  4. Bob 告訴伺服器HMAC('paper', 'secret string by bob')
  5. 現在伺服器有兩個承諾,並將它們發布給各方,所以 Alice 得到 Bob 的承諾,Bob 得到 Alice 的承諾。伺服器不知道實際動作。
  6. 現在伺服器期望 Alice 和 Bob 公開他們的選擇和秘密,並根據公開的選擇,將底池支付給獲勝者(減去一些伺服器版稅),或者如果平局只是返還錢款。

現在這是一個有問題的案例:假設沒有 Bob,只有伺服器偽裝成 Bob。

  1. 愛麗絲將她的賭注存入清算賬戶,並發送她的“搖滾”動作的偽鮑勃承諾。
  2. 伺服器用一些隨機移動的許可來響應 Alice。
  3. 愛麗絲向伺服器披露了她的舉動的明文。
  4. 現在伺服器檢查它自己的動作是否獲勝——如果是,伺服器聲稱勝利並獲得愛麗絲存入的錢,為愛麗絲提供證據。如果伺服器似乎輸了,它只是假裝偽 Bob 由於連接問題或其他原因離開了遊戲,取消了交易並退還了 Alice 的錢。

真正的 Bob 不可能這樣作弊,因為當 Bob 得到 Alice 明文時,他已經發送了自己的明文,所以伺服器知道誰贏了誰沒有。

我一直在考慮如果第二方在合理的時間內沒有用明文響應(或者提供的明文不評估之前給出的承諾)超時完成交易,但在欺騙伺服器的情況下,可以假裝伺服器剛剛沒有’ t 收到 Alice 的明文讓她總是輸。

是否存在對此的解決方案,或者這更像是“鴿子棋”?如何說服 Alice 和 Bob 伺服器都是公平的?

如果他們不信任伺服器,他們肯定不應該匯款。“受信任”第三方用於解決參與者互不信任的問題。因此,根據定義,您的問題只能在一定程度上得到緩解,而不是完全解決。

我不確定您所說的“可證明公平”是什麼意思。如果伺服器不能證明他不能作弊,那就不能證明是公平的。

做到這一點的一種方法是,如果有人出於任何原因離開遊戲,則將賭注獎勵給剩餘的玩家。現在,如果伺服器決定通過無響應來保留資金,Alice 將知道將來不要信任該伺服器,而不是繼續虧錢給它。

另一種方法是在遊戲開始前與 Bob 進行通信,並在伺服器上隨機達成一致。現在,伺服器盜用 Alice 的機率等於 Bob 與該伺服器串通的機率。

最後,剪刀石頭布不依賴於伺服器的某些輸入,因此伺服器無法提前證明公平性。

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