(これがよく知られている場合は申し訳ありません。)エージェントjが確率p iでアイテムを取得できるように、エージェントのいずれかにアイテムを渡したいと思います。すべてのエージェント(およびすべてのオブザーバー)がランダム描画が実際に公正であると確信できるようにするための暗号化(またはその他の)ツールはありますか?
(これがよく知られている場合は申し訳ありません。)エージェントjが確率p iでアイテムを取得できるように、エージェントのいずれかにアイテムを渡したいと思います。すべてのエージェント(およびすべてのオブザーバー)がランダム描画が実際に公正であると確信できるようにするための暗号化(またはその他の)ツールはありますか?
回答:
私が問題を正しく理解しているなら、それはコインを公開することに相当するように思えます。ビットコミットメントを想定している場合、これを行う方法はたくさんあるようです。1つの例は、各当事者が0からk − 1の間のランダムな整数を生成し、ビットコミットメントを使用してそのビット文字列に公的にコミットすることです。その後、各エージェントがコミットすると、全員が秘密の整数を公開します。勝ったエージェントは、kを法とする整数の合計によってインデックス付けされたエージェントです。エージェントが1人でも正直であれば、フリップはランダムでなければなりません。
もちろん、これに関する1つの問題は、ビットコミットメントが必要なことです。ビットコミットメントの情報理論的スキームは、古典的コンピューティングと量子コンピューティングの両方で不可能です(ただし、エイドリアンケントは最近、相対性理論を利用したスキームを提案しました)。ただし、安全なビットコミットメントは、計算上の仮定で実現できます。
他のユーザーがほのめかしているように、これは暗号学でよく研究されている問題です。これは「コインフリッピング」と呼ばれ、マルチパーティ計算の特殊なケースです。
実際にどのプロトコルがジョブを実行するかは、コンテキストに大きく依存します。
それがいかに微妙かを示すために、使用するコミットメントスキームが順応性がある場合、別のレスポンダーが提案する「誰もがランダムな値をコミットする」プロトコルは安全ではありません。脆弱性のないコミットメントスキームは安全なプロトコルを提供しますが、設計が少し複雑です。
注:以下のコメントをお読みください。このプロトコルには問題があるようです。
任意のエージェントは、自分のベクトルを一様にランダムに選択することにより、選択した乱数が一様にランダムに来たことを確認できます。オブザーバーが納得するためには、少なくとも1人のエージェントがプロトコルに従っていることを信頼する必要がありますが、もし誰も従わなかった場合、公正な宝くじを最初から望んでいなかったと思います。
受動的なオブザーバーは、図面がステージングされていないことを確認できません。擬似ランダムプロセスへの入力を選択して、目的の結果を得ることができます。
ただし、オブザーバーがランダムであることがわかっている乱数を提供でき、他のエージェントが入力を後で変更しないことを確認できる場合(入力で自分の効果を補償できるため)、結果が実際にランダムであると確信できます。
これには、数学的に安全であることが証明されていないコミットメントスキームが必要ですが、実際にはセキュアハッシュ(SHA3など)を使用して実現できます。
この例を考えてみましょう:
実装例を作成しました。ここでライブで見ることができます:https : //mrogalski.eu/cl/またはGitHubのソースを確認してください。