この質問を受けましたが、適切な方法を説明している記事が見つかりませんでした。代わりに、私は独自の方法を考え出しました (以下の回答を参照してください)。しかし、私が単に破るほど頭が良くない方法を思いついただけの可能性もあります。だから私はあなたにこの質問を渡します:
Alice と Bob は、電子メールでボード ゲームをしたいと考えています。彼らは、カンニングをさせない方法でサイコロを振る方法を見つける必要があります。
そうするための良いアルゴリズムは何ですか。
この質問を受けましたが、適切な方法を説明している記事が見つかりませんでした。代わりに、私は独自の方法を考え出しました (以下の回答を参照してください)。しかし、私が単に破るほど頭が良くない方法を思いついただけの可能性もあります。だから私はあなたにこの質問を渡します:
Alice と Bob は、電子メールでボード ゲームをしたいと考えています。彼らは、カンニングをさせない方法でサイコロを振る方法を見つける必要があります。
そうするための良いアルゴリズムは何ですか。
これは、暗号化における古典的な問題です。
そのような論文の 1 つ: Coin Flipping by Telephone .
明らかにいくつかの不可能な結果もあります。
たとえば、この論文の [C86] を参照してください: http://www.cs.columbia.edu/~dglasner/MyPapers/coin-cut.pdf
それが役立つことを願っています。
アリスとボブは、選んだ番号を明らかにする前に、番号を選んだという証拠をお互いに送信できる必要があります。次に、彼らが選んだ数字を証明と照らし合わせて検証する必要があります。最後に、両方の数値を、それぞれが結果を完全に制御できないような方法で結合する必要があります。
以下では、またはのcrypto_function
ようなものにすることができます:sha1sum
md5sum
ステップ 1 :
以下の可能な値の範囲をcrypto_function
十分に大きくする必要がありました
Ra1
、BobRa2
に送信します。Ra1
Rb1
、アリスRb2
に送信します。Rb1
ステップ 2 :
Hx
値が修正されたという証明を作成しますVx
が、その証明からこの値を推測することを防ぎます
Va
(0<= Va
<=5) を選択し、文字列を構成して、ボブSa="Va Ra2 Rb1"
に a を送信します。Ha=crypto_hash(Sa)
Vb
(0<= Vb
<=5) を選択し、文字列を構成して、AliceSb="Vb Rb2 Ra1"
に送信します。Hb=crypto_hash(Sb)
ステップ 3 :
望ましい結果を生み出すV
Sa
が Bob に送信します。ボブ から計算Ha
し、ステップ 2Sa
と比較します。次に、 から を取り出し、値を計算します。Ha
Va
Sa
V=(Va+Vb)%6+1
Sb
はアリスに送信します。アリス から計算Hb
して、ステップ 2Sb
と比較します。次に から を取り出し、値 を計算します。Hb
Vb
Sb
V=(Vb+Va)%6+1
更新:
@ Moronによって提案された電話によるコイン投げに基づいて、アルゴリズムは次のようになります。
ボブは乱数R
と値を選び0 <= Vb <= 5
、ハッシュを計算し、H=crypto_hash("Vb R")
それをアリスに送信します。
アリスは値を選択し、0 <= Va <= 5
それをボブに送信します。
BobはVb
andR
を Alice に送信します。ボブは計算しますV=(Va+Vb)%6+1
アリスは検証しH=crypto_hash("Vb R")
ます。アリスが計算するV=(Va+Vb)%6+1
...次の場合は気分が良くなりますが:
0. Alice は乱数を選び、Q
それを Bob に送信します。
そして、ハッシュされる文字列は then になり"Vb Q R"
ます。
郵便でプレイされるゲームは、電子メールであるかどうかに関係なく、公開されている (疑似) 乱数を使用していました。これは通常、株式上場の特定の位置 (特定の株ではありません) の株価上場の最下位桁です。これは予測できず、イベント後に検証可能でした。プレイヤーは、サイコロを振る前に、株式上場のどのポジション (通常は営業終了時) を次のサイコロに使用するかの詳細を交換します。
http://rpglibrary.org/software/securediceのような信頼できるサード パーティを使用して、オンラインで検証可能なシリアル番号とハッシュを含むサイコロのロールを電子メールで送信できます。
Alice と Bob は、Diffie-Hellman などを使用して 2 つのセッション キーに同意しSa
ますSb
。各セッション キーは、乱数ジェネレーターのシードでありRa
、Rb
.
RNG は、サイコロを振るたびに 1 回限りのパッドとして使用されます。Alice が転がりたい場合は、シーケンスの i 番目の乱数をとりRa[i]
ますi
。Alice は と の両方を Bob に送信i
しRa[i]
ます。Bob はi
、自分の のコピーを使用して確認できますRa
。
これにより、アリスi
は、ボブが検証できる一連の値を使用する必要があるため、正直に保つことができます。
私が尋ねた同様の質問に対する回答を受け取りました.Rのサイコロを作るにはどうすればよいですか? 応答は、「親密なダイス」のプログラムに加えて、R のプログラムでした。Alice と Bob がどちらのサイコロに興味を持っているかはわかりませんが、リモート デスクトップに加えて R を使用することをお勧めします。これにより、各プレイヤーは相手が不正を行っていないことを確認できます。
コードの書き方がわからないので、受け取った応答をコピーして貼り付けました。
統計プログラム R でサイコロを作りたい場合は、ここからダウンロードして開始します: http://cran.r-project.org/。
通常のサイコロを作成するには、次のスクリプトを使用します。 #Dice roll function RollDie = function(n) sample(1:6,n,replace=T) #use Die RollDie(n)
#If you'd like to spice things up a bit and make a dice for safe and consensual adult
#activities then use the following series of scripts:
#Creating the function, use this script:
#Intimate dice function
Actions= c("kiss","lick","suck","bite",
"spank","blow", "stroke",
"tickle","pinch",
"torment")
Body= c("lips","arms","chest","thighs",
"neck","ear", "wrist",
"navel","nipples",
"the good stuff")
Action= function(n) sample(Actions[1:10],n,replace=T)
Area= function(n) sample(Body[1:10],n,replace=T)
Action(1)
Area(1)
#If you'd like the dice saved to the R global environment so you can be ready for when
the mood is right use the following script:
#Save the following script as yourfile.R in something like this location "C:\\Documents
and Settings\\yourfile.R"
#Intimate dice
Action(1)
Area(1)
#yes
#Now create the following function to save to R's global environment with the following:
#Run all
source("C:\\Documents and Settings\\yourfile.R",echo=T)
hi<-function(){source("C:\\Documents and Settings\\yourfile.R",echo=T)}
#ok
#close and save your R workspace
#upon opening run the following function:
hi()
#If this has been done properly then you should see something along the lines of this:
#Intimate dice
Action(1)
[1] "bite"
Area(1)
[1] "ear"
#yes
#Here's to one more reason for celebrating math & science
サイコロを振って他のプレイヤーに転送するための電子メールをそれぞれが送信する自動化されたサードパーティ サーバーをセットアップしますか?
そうでなければ、このゲームをプレイするにはあまりにも多くの作業が必要であり、私はやめました!