Rustサイトのプロバブリーフェアの仕組みと、ロールの確認方法
サーバーシードのハッシュ、クライアントシード、ナンス、HMAC-SHA256を平易な言葉で説明します。再現できる具体例と、Rustスキンサイトで任意のロールを確認する手順つきです。
ランキングに入っている10サイトはすべて、ゲームをプロバブリーフェアと表示しています。この言葉には正確な意味があり、その裏にある確認は、無料のハッシュツールか数行のコードで自分で実行できます。実際にやってみるプレイヤーは、ごくわずかです。このガイドでは、この仕組みが何を証明し、何を証明しないのか、そしてロールを最初から最後まで検証する方法を説明します。
要点はこうです。ベットの前に、サイトは秘密の値を固定し、そのフィンガープリントを見せます。そこに自分の入力を加えます。ベットが終わると、サイトは秘密を公開し、フィンガープリントが一致すること、そしてすべての結果が入力から導かれることを確認できます。数字が合えば、サイトはベットを見たあとで結果を変えることはできなかったということです。
プロバブリーフェアが解決する問題
スキンサイトでは、すべての結果をサーバーが決めます。ケースを開けるときも、コインを投げるときも、クラッシュの倍率を待つときも、見ているのは、自分では調べられないマシンで生成された数字のアニメーションです。何らかの証明がなければ、ベット額が大きいときに、運営者がひそかにロールを自分に不利にずらしていないと信じるしかありません。
ライセンスを受けたオンラインカジノは、通常、規制当局と、乱数生成器に対する第三者の監査で、これに答えています。スキンサイトの多くは、代わりに暗号技術の手法に頼ります。これにはプレイヤーにとって大きな利点があります。監査人を信じる必要がなく、自分のコンピューターで計算を繰り返せるのです。
この考え方は、コミットメント方式と呼ばれます。サイトが秘密をカードに書き、封筒に封をして、ゲームが始まる前にその封筒を渡してくると想像してください。サイトは、あとでカードをすり替えることはできず、自分は、封筒を早く開けて読むことはできません。
3つの入力:サーバーシード、クライアントシード、ナンス
Rustサイトのほぼすべてのプロバブリーフェアのシステムは、同じ材料を使います。ラベルはサイトによって少し違いますが、役割は同じです。
サーバーシード
サイトが生成する、長いランダムな文字列です。プレイ中は秘密のままです。知っている人は、すべての結果を予測できてしまうからです。代わりに見えるのは、通常SHA-256で生成されたハッシュです。ハッシュは一方向のフィンガープリントです。同じ入力なら必ず同じ64文字の出力になり、入力の1文字を変えると出力はまったく変わり、ハッシュからシードへ逆算する現実的な方法はありません。
クライアントシード
自分の側から来る文字列です。サイトがデフォルトのものを生成し、ほとんどのサイトでは、公正性または設定のパネルで編集できます。役割は、サイトが、特にあなたにとって不利なサーバーシードを選ぶのを防ぐことです。サイトは、あなたが何を入力するか知る前に自分のシードにコミットしているので、両者を合わせて調整する手段がありません。
ナンス
0または1から始まり、同じシードのペアでベットするたびに1ずつ増えていくカウンターです。1組のサーバーシードとクライアントシードを数百回のベットで使い回しても、毎回新しい結果が得られます。
結果を確認したいときは、サイトにシードのローテーションを依頼します。サイトは古いサーバーシードを平文で公開し、新しいシードのハッシュを見せて、ナンスをリセットします。古いシードで遊んだものは、すべて検証できるようになります。
入力が結果になる仕組み
最も一般的なレシピは、HMAC-SHA256です。HMACは、秘密鍵とメッセージを組み合わせてハッシュを生成する標準的な方法です。Rustサイトの多くでは、サーバーシードが鍵になり、メッセージはクライアントシードとナンスをつなげたもので、clientseed:nonceのようにコロンで区切られることが多いです。ラウンド番号やゲームIDを加えるサイトもあるため、正確な式は、必ずサイト自身の公正性のページで読んでください。
出力は、64文字の16進数の文字列です。サイトは、その一部を0から1の間の数字に変換します。典型的な方法は、最初の16進数の8文字(32ビット)を取り、整数に変換して、4,294,967,296(2の32乗)で割るものです。その小数が、ゲームに対応づけられます。
- ダイスとアップグレーダー:100を掛けて0.00から99.99のロールを出し、ターゲットと比べる。
- ルーレット:ホイールのスロット数を掛けて、切り捨てると、スロットが決まる。
- ケース:ケース内のチケットの総数を掛ける。チケットの1%を持つスキンは、ロールの1%で当たる。
- クラッシュ:その数字を、ハウスエッジを組み込んだ式に入れて倍率に変える。式と、それがキャッシュアウトのターゲットに意味することは、クラッシュ攻略ガイドで説明しています。
再現できる具体例
下のシードはこの例のために作ったもので、HMAC-SHA256の計算ツールで、こちらの計算を確認できます。
- サーバーシード:example-server-seed-01。そのSHA-256ハッシュはa5275da7ccca3f73で始まります。これが、プレイする前にサイトが見せるハッシュです。
- クライアントシード:my-own-client-seed。ナンス:1。したがってメッセージはmy-own-client-seed:1です。
- サーバーシードを鍵、そのメッセージを入力としてHMAC-SHA256を計算すると、4cdcf221で始まる結果が出ます。
- 16進数の4cdcf221は、10進数で1,289,548,321です。これを4,294,967,296で割ると、約0.30025です。
- 0から100のダイスの尺度では、ロールは30.02です。15スロットのルーレットのホイールでは、0.30025に15を掛けて約4.5、切り捨ててスロット4です(最初のスロットを0と数えます)。
同じシードでナンスを2にすると、まったく違うハッシュが出て、6486ccbdで始まり、約0.3927になります。最初のロールからは、2番目について何も分かりません。この独立性が肝心なところです。ベット履歴に読み取れるパターンはなく、各結果が新しいハッシュだからです。
ロールを自分で検証する手順
最初の完全な確認には時間がかかります。その後は、コピーと貼り付けの数分で済みます。結果が本当に大事になる前に手順を知っておくために、最初は少額の残高でやってみてください。
- ベットする前に、公正性のパネルを開きます。通常は、ゲーム画面、フッター、プロフィール設定からリンクされています。ハッシュ化されたサーバーシードを、スマートフォンのメモやスクリーンショットなど、サイトの外に保存します。
- 自分のクライアントシードを設定します。デフォルトを、自分で入力したものに置き換えます。キーボードを適当に叩いてかまいません。覚えやすくする必要はありません。
- プレイして、気になるベットを控えます。各ベットに表示されるナンスを書き留めるか、あとでベット履歴から探します。
- シードをローテーションします。サイトが古いサーバーシードを公開するので、コピーします。
- コミットメントを確認します。公開されたサーバーシードを、任意のSHA-256ツールに通します。出力は、手順1で保存したハッシュと、1文字ずつ一致しなければなりません。
- ロールを再計算します。公開されたサーバーシード、クライアントシード、ナンスでHMAC-SHA256を使い、サイトが公開している変換を適用します。PHPならhash_hmacを1回呼ぶだけで、Pythonのhmacモジュールでも数行で同じことができます。
- 比較します。計算した数字が、履歴に記録された結果になっていなければなりません。
ほとんどのサイトには、シードを貼り付ける内蔵の検証ツールもあります。便利ですが、運営者自身のコードで動いています。サイトにまったく依存しない確認のために、少なくとも1回は、独立したツールか自分のスクリプトを使ってください。
共有ゲームは少し仕組みが違う
ダイス、アップグレーダー、ソロのケースオープニングなどの1人用モードは、個人のシードのペアで動かせます。ジャックポット、コインフリップ、ケースバトル、ルーレットのラウンド、クラッシュのように、多くのプレイヤーが1つの結果を共有するゲームでは、1人のクライアントシードが全員の結果を決めることはできません。サイトは、いくつかの一般的な方法で対処しています。
- ハッシュチェーン。クラッシュでよく使われます。サイトが事前に長いハッシュの鎖を作り、各ラウンドのハッシュは、次のラウンドのハッシュのSHA-256になっています。最初のラウンドが始まる前にチェーンの最後のハッシュを公開し、公開された各ラウンドが前のラウンドにハッシュで戻ることを確認できます。チェーン内のすべての結果は、誰かがベットする前に固定されていました。
- サイトの外部の公開シード。サイトは自分のサーバーシードにコミットし、そこに、誰も事前に知りえない値を混ぜます。たとえば、公開ブロックチェーンの将来のブロックのハッシュです。そのブロックはサイトがコミットした時点では存在していなかったので、サイトはそれに合わせてシードを調整できません。
- ラウンドごとのコミットメント。ジャックポットとコインフリップでは、ラウンドの開始時にハッシュ化されたシードが表示され、終了時に平文のシードと当選チケットが表示されます。
確認の考え方は、どれも同じです。ラウンドの前に公開されていたコミットメントを見つけ、公開された値がそれに一致することを確認し、結果を再計算します。共有ポットで当選チケットがどう勝者になるかは、コインフリップとジャックポットのオッズのガイドをご覧ください。ケースバトルは両方の方法を組み合わせており、ケースバトル解説で扱っています。
プロバブリーフェアが証明しないこと
検証されたロールが証明するのは、ごく狭いことだけです。結果は、ベットの前にサイトがコミットした入力から来た、ということです。それは役に立ちますが、プレイヤーはバッジが保証する以上のものを読み取りがちです。
- ハウスエッジについては何も言いません。エッジの大きいクラッシュでも、完全にプロバブリーフェアでありえます。エッジは、乱数を倍率や勝つ確率に変える、公開された式の中にあります。公正とは、サイトが自分のルールに従ったという意味であり、そのルールは長い目で見ればサイトに有利なままです。
- 価格は確認しません。ケースがスキンに、Steamコミュニティマーケットでの売値よりはるかに高い価値を付けていても、ロールは公正なまま、ケースはコスパが悪いということがありえます。アイテムの価格設定が、実際のオッズをひそかにどうずらすかは、アップグレーダーのガイドで見せています。
- 出金はカバーしません。サイトは、完璧なシードを運営しながら、出金を遅らせたり、アカウントを凍結したり、規約を書き換えたりできます。公正性がサイトの評価方法で、出金スピードや信頼性と並ぶ入力のひとつにすぎないのは、そのためです。
- 誰かが確認して初めて機能します。誰も比較しないコミットメントは、ページ上の文字列にすぎません。
公正性のページの危険信号
シードの検証は、サイトをテストするときの定番の手順です。次のようなことがあると、私たちは疑います。軽いものから重いものへの、おおよその順です。
| 見えるもの | 意味すること | 対処 |
|---|---|---|
| クライアントシードを変更するオプションがない | サイトが、個人のロールへの入力をすべて握っている | 1人用モードをより慎重に扱う |
| 検証ボタンはあるが、式が公開されていない | サイト自身のコードでしか結果を確認できない | 多めに入金する前に、サポートに正確な式を尋ねる |
| サーバーシードのハッシュが、ベットしたあとで初めて表示される | 本当のコミットメントがない | そのゲームをプロバブリーフェアとして扱わない |
| 古いサーバーシードが公開されることがない | 何も検証できない | 同上 |
| 公開されたシードが、保存したコミットメントにハッシュで一致しない | シードが変更されたか、ページが壊れている | 遊ぶのをやめ、すべてのスクリーンショットを撮って、サポートに連絡する |
最後の行に当たったら、証拠を保管してください。保存したハッシュ、公開されたシード、ベットID、各ベットの時刻です。1回の不一致は表示のバグかもしれませんが、これは、まさに私たちがサイトを再チェックする、信頼できるプレイヤー報告にあたるものです。
普通のプレイヤーにとっての妥当な手順
すべてのベットを検証する必要はありません。軽い手順で、セッションを宿題にせずに、ほとんどの問題を見つけられます。
- 新しいサイトで遊び始めるたびに、新しいクライアントシードを設定する。
- 遊ぶ前に、ハッシュ化されたサーバーシードのスクリーンショットを撮る。
- セッションのあとでローテーションし、コミットメントを確認する。SHA-256の計算1回で済みます。
- 最も重要だった1、2回の結果を再計算する。たとえば、アップグレーダーの大きな負けや、勝てたはずだと確信したバトルです。
- ときどき、サイトの検証ツールではなく、独立したツールで完全な確認を繰り返す。
きれいに検証できたということは、被っている損失が、公開された計算が予測するとおりのもので、それ以上ではないということです。エッジはすべてのロールに残っています。実践的な次の一歩は、その期待される損失のうち、娯楽のためにどれだけ払ってよいかを、あらかじめ決めることです。簡単な上限と、守るのに役立つツールは、責任あるギャンブルのページで解説しています。
よくある質問
プロバブリーフェアのサイトでも、不正はできますか?
コミットされた結果を、ハッシュの確認を失敗させずに変えることはできません。ただし、プロバブリーフェアが対象とするのはロールの生成方法だけなので、高いハウスエッジを設定したり、ケースのアイテムを割高に評価したり、出金を遅らせたりすることは可能です。
クライアントシードは変更しなければいけませんか?
必須ではありませんが、変更すべきです。サーバーシードのハッシュが表示されたあとで自分で選んだクライアントシードなら、サイトはあなたの入力を見越して自分のシードを選ぶことができません。
なぜサイトは、遊ぶ前にサーバーシードをそのまま見せないのですか?
サーバーシードとクライアントシードの両方を知っている人は、今後のすべての結果を計算できてしまいます。ハッシュなら、将来のロールを明かさずに、サイトが自分のシードにコミットできます。
ロールの検証には、どのツールを使えますか?
SHA-256とHMAC-SHA256の計算ができるものなら何でも使えます。無料のオンラインツールや、PHP、Python、JavaScriptの組み込み関数も含まれます。手軽さにはサイトの検証ツール、本当に意味のある確認には独立したツールを使ってください。
この用途にSHA-256は十分に安全ですか?
はい。広く使われている標準で、ビットコインのマイニングにも使われており、逆算したり、同じハッシュになる別のシードを見つけたりする現実的な方法は知られていません。
続きを読む
関連ガイド
Rustギャンブルのボーナス、無料ケース、プロモコードの本当の価値
無料ケースの価値はトップアイテムではなく平均の排出で決まり、無料残高の価値は賭け条件を越えて残る分で決まります。コードを入力する前に、Rustサイトのよくあるボーナスに値段を付ける方法を紹介します。
Rustケースバトル解説:モード、オッズ、公平なバトルの選び方
ケースバトルは、中のケースのハウスエッジを変えません。変わるのは、勝ち負けの振れ幅です。各形式の仕組み、背後にある計算、参加する価値のあるバトルの見分け方を解説します。
責任あるスキンギャンブル:上限、危険なサイン、相談先
スキンだと、本物のお金を使っている感覚を見失いやすくなります。このガイドでは、危険なサイン、実際に守れる上限、自己排除とブロックツール、今日連絡できる無料の相談窓口を紹介します。