このページ
サイコロ(暗号化版)
このページ
概要
このページでは、「ダイス」と呼ばれるゲームについて説明しています。このゲームは、賭けや取引に暗号通貨を使用するインターネットカジノでよくプレイされます。このゲームは6面ダイスとは全く関係ありませんが、勝敗は0から10,000までの乱数によって決まります。また、「ダイス」という名前だけが付く他のゲームと混同しないようご注意ください。
ルール
- ゲームの名前とは反対に、勝ち負けは 0 から 10,000 までの間でランダムに選択された整数に基づきます。
- プレイヤーは勝利ゴールまたは勝利オッズ(たとえば 2 対 1)を決定できます。
- 勝利の目標は、指定されたしきい値よりも高い数字、または別のしきい値よりも低い数字を「ロール」することです。
- プレイヤーが賭けの 1 つの要素 (勝利ゴールまたはオッズ) を調整すると、勝利オッズが勝利の確率に反比例するように他の要素も調整され、すべての可能な賭けにおいて同じハウス アドバンテージが確保されます。
例
あるゲームの還元率が99%に設定されているとします。プレイヤーが勝利オッズを2対1に設定すると、ゲームは勝利確率を0.99/2 = 49.5%に調整します。この目標を達成するための目標は以下のとおりです。
- 5050以上
- 4950未満
プレイヤーは、これらの目標のうちどれを好むかを切り替えることができます。
プレイヤーが勝利オッズを3対1に調整したとします。すると、ゲームは勝利の確率を0.99/3 = 33%に調整します。この目標を達成するゴールは以下のとおりです。
- 6700以上
- 3300未満
勝利点が整数の場合、引き分けがどのように扱われるか分かりません。引き分けで押した場合のハウスエッジは、引き分けで負けた場合に比べて0.01%少なくなります。
次の表は、1 対 2 で支払われるベットのプレイヤーへの返還率 (RTP) に応じた勝利ゴールを示しています。たとえば、勝利ゴールが 4975 未満の場合、プレイヤーへの返還率は 99.5% になります。
プレイヤーガイドに戻る
戻る プレイヤーへ | 確率 勝利 | 下 | 以上 |
---|---|---|---|
99.5% | 49.75% | 4,975 | 5,025 |
99.4% | 49.70% | 4,970 | 5,030 |
99.3% | 49.65% | 4,965 | 5,035 |
99.2% | 49.60% | 4,960 | 5,040 |
99.1% | 49.55% | 4,955 | 5,045 |
99.0% | 49.50% | 4,950 | 5,050 |
98.9% | 49.45% | 4,945 | 5,055 |
98.8% | 49.40% | 4,940 | 5,060 |
98.7% | 49.35% | 4,935 | 5,065 |
98.6% | 49.30% | 4,930 | 5,070 |
98.5% | 49.25% | 4,925 | 5,075 |
上の画像では、1倍の配当が2倍になる賭けは49,600未満と53,999以上の賭けです。上の表は、この結果が99.2%であることを示しています。これは2*(49600/100000) = 99.2%と簡単に計算できます。
証明可能公平
エイミーとボブが、信頼関係を持たずに遠隔でじゃんけんをしたいとします。どうすればできるでしょうか?
動きを暗号化すれば簡単に実現できます。miniwebtool.com のようなオンライン暗号化プログラムが数多くあります。例えば、エイミーがハサミで勝負したいとします。「ハサミ」を暗号化すると、ハッシュと呼ばれる以下の暗号化メッセージが得られます。
17f174ce4953e98e7418d22b29f7569505e4bcc39859e7825500d43a5ec1b87d d521d508d6ece5397021013c0c561bcd9ba947f1f40ac1a2f3a670b485b0aff6
ボブが自分の番を打つ前に、エイミーはそれをボブに送ることで、自分の番が予め決まっていたことを証明できます。例えば、ボブが自分の番を「パー」と宣言したとします。エイミーは勝利を宣言し、ボブに「チョキ」というメッセージを暗号化するように指示することで、そのハッシュがエイミーが自分の番の前に送ったハッシュと全く同じであることを証明できます。
しかし、ボブは結果が3つしかないことを知っているので、「はさみ」をハッシュプログラムに通し、上記のハッシュ値になることを知りながら、石を選ぶかもしれません。これを防ぐため、エイミーはボブがハッシュを解読できないように、ランダムな文字列でも良いので、別のテキストを追加する必要があります。例えば、「b980Cql98lbaj -- はさみ」を暗号化すると、次のような異なるハッシュが得られます。
5e4c68f7b35503c79b1aa31df87c6043bd30a1cff28b8431394cbbb829c90d4d51dec1b25ac5be44873572dbabd735c41006c83aff59ce06d3efe86513a57108
ハッシュには0から9、そしてaからfの文字の16文字しか使えないことに注意してください。ハッシュ全体は実際には数値であり、10進数ではなく16進数(16進数)で表されます。
「おそらく公平」なゲームでも概念は同じです。ただし、プレイヤーが賭けの結果にも影響を与えることができるようにすることで、セキュリティがさらに強化されます。そうでなければ、カジノは不正行為を行う可能性があります。例えば、プレイヤーがサイコロで通常「オーバー」に賭けていることに気づき、たとえ暗号化されていても低い数字をゲーム結果として提示するなどです。
仕組みは、簡単な英語で説明すると次のようになります。
- カジノはランダムな文字列 (シードと呼ばれる) を選択し、それをハッシュに暗号化して、そのハッシュをプレイヤーに提供し、カジノの結果への貢献が運命づけられていたことを証明します。
- プレイヤーは自分のシードを選択します。
- プレイヤーは賭けをします。
- 2 つの文字列が結合されます (順序は問いません)。
- ステップ 5 からの結合された文字列はハッシュに暗号化されます。
- ハッシュの一部は 16 進数から 10 進数に変換されます。
- 6の結果の一部、おそらく最後の6桁が、0から999,999までの数字にマッピングされます。これがゲームの結果となります。
- ベットの終了時に、カジノは独自のシードを公開します。プレイヤーはベットを行う前に、それが提供されたハッシュに暗号化されているかどうかを確認できます。これにより、プレイヤーが独自のシードを選択した時点で、結果が予め決定されていたことが示されます。
これらすべてにもかかわらず、カジノは依然として不正行為をすることができます。その方法の一つとして、デフォルトのプレイヤーシードを利用することが挙げられます。プレイヤーが「Fair Gaming」画面を開くと、デフォルトのプレイヤーシードが表示されます。プレイヤーはクリックして別のシードを選択したり、独自のシードを入力したりできますが、多くのプレイヤーが気にすることはないと思われます。不正行為を行うカジノは、デフォルトのプレイヤーシードとカジノシードを慎重に選び、組み合わせてハッシュ化し、プレイヤーが負けになるようにします。
カジノが不正行為をするもう一つの方法は、ハッシュ値が負けになるカジノシードを選択することです。たとえ、賭け前にプレイヤーに提示された結果とハッシュ値が一致していなくてもです。これはまさに私がWixiplayでプレイしたときに起こったことです。もしカジノ側がシード値とハッシュ値の不一致に気づいたら、どうすればいいでしょうか?不正行為を非難しても、彼らは何も言わずに否定するか、非難を無視するでしょう。私がWixiplayに騙されたとき、最初は無視されました。その後、キュラソーゲーミングコントロールボードに苦情を申し立てましたが、返信すらありませんでした。
公正なカジノ
ボーナスコード
ゲーム成果プログラム
ゲームの結果が公平かどうかを判断するために、上記のような手順をすべて踏むのはかなり時間がかかります。このプロセスを簡素化するために、プレイヤーとカジノのシード値の両方が与えられた場合にゲームの結果を簡単に判断できるPHPプログラムを作成しました。このプログラムは、ゲームの結果が以下のように決定される場合にのみ動作します。
- サーバー シードとクライアント シードを結合します。最初にサーバー シードを使用します。
- 手順 1 の文字列の SHA-512 ハッシュを生成します。
- ハッシュの最初の 5 文字を 16 進数から 10 進数に変換します。
- 手順 3 の結果が 999,999 を超える場合は、ハッシュ内を 5 つ進めて手順 3 に戻ります。それ以外の場合は、手順 5 に進みます。
- ステップ 3 の最後の 5 桁を取得します。これがゲームの結果になります。
このスクリプトはCrypto.Gamesのダイスゲームで動作します。他のカジノでは、ランダムな6桁の数字を異なる方法で決定したり、SHA-512以外のハッシュプログラムを使用したりする場合があります。
私のプログラムを使用するには、このPHPサンドボックスにアクセスし、上部のコメントに記載されている入力タイミングの指示に従って「コードを実行」をクリックしてください。ゲームの結果と正当なサーバーシードの確認は、コードの下の「結果」ボックスに表示されます。
バックアップとして、下のボタンをクリックすると私のコードが表示されます。
[spoiler=ダイスの公正なゲーム規定]
// Crypto.Games 用のダイスゲーム変換 // 使用するには、5 行目にクライアント シード、6 行目にサーバー シード、7 行目に次のサーバー シードのハッシュを入力します。 $client_seed = "f0g9s8f7g097sdfg098sd7f0g87s0fg897"; $server_seed = "SxG74IkdDRmWh0jT015TCA01fUoCA0lI2N3KxS8L"; $next_hash = "1c42ef7fcbb94c2841d4ee88467c13813c30f5f774260f1a308b960884a7fd8b"; $server_seed_hash = ハッシュ('sha256'、"$server_seed"); $combined_seed = $server_seed.$client_seed; echo "結合シード = $combined_seed\n"; $combined_hash = ハッシュ('sha512'、$combined_seed); echo "結合されたシードのハッシュ = $combined_hash\n"; $位置=0; $first_five=substr($combined_hash、$position、5); // echo "位置 $position = $first_five から始まる最初の 5 文字\n"; する { $hex_to_dec=hexdec($first_five); $位置+=5; } $hex_to_dec > 999999 の間; // echo "10進数に変換されました = $hex_to_dec\n"; $mod5=$hex_to_dec%100000; echo "\nゲーム結果 = $mod5\n"; ($server_seed_hash == $next_hash) の場合 { echo "サーバーシードが一致しました。\n"; } それ以外 { echo "サーバーシードが一致しません!\n"; echo "サーバーシード =\t$server_seed\n"; echo "サーバーシードハッシュ=\t$server_seed_hash\n"; echo "次のハッシュとされるもの=\t$next_hash\n"; } // 手順 // 1. サーバー シードとクライアント シードを結合します。最初にサーバー シードを使用します。 // 2. 手順 1 の文字列の SHA-512 ハッシュを生成します。 // 3. ハッシュの最初の 5 文字を 16 進数から 10 進数に変換します。 // 4. 手順 3 の結果が 999,999 を超える場合は、ハッシュ内を 5 つ進めて手順 3 に戻ります。それ以外の場合は、手順 5 に進みます。 // 5. 手順 3 の最後の 5 桁を取得します。これがゲームの結果になります。 ?>[/ネタバレ]
公正なゲームプレイに関する最終アドバイス
ゲームの結果が公正かどうか確認する手間を省きたいのであれば、少なくとも確認しているという姿勢を見せることで、カジノ側の誠実さを保ってください。「公正なゲーム」をクリックして結果を確認すれば、カジノ側はそれを認識します。もしカジノ側が不正行為をする傾向があるなら、常識的に考えて、結果を確認していない顧客を騙す可能性が高いでしょう。
「公正なゲーミング」をクリックする場合は、クライアントシードのどこかに少なくとも数文字のランダムな文字列を追加してください。これにより、カジノ側が望む結果につながるボーナスクライアントシードが提供されることを防ぐことができます。
もしカジノで不正行為を見つけたら、証拠を送ってください。確認させていただき、他のプレイヤーにそのカジノでプレイしないよう警告します。そのプレイヤーを私のカジノブラックリストに追加します。