通常のRNGの問題点
一般的なオンラインスロットでは、乱数生成器(RNG)はオペレーターのサーバー上にあります。プレイヤーは結果だけを見ます。誠実なオペレーターであっても、この特定のスピンが不正ではなかったことを特定のプレイヤーに証明することはできません。証明書と評判に頼るしかありません。
プロバブリーフェアはこのギャップを埋めます。オペレーターは事前に秘密を「ロックイン」し、ゲーム後にそれを公開するため、誰でも結果を独立して再計算できます。
コミット・リビール方式
一連のスピンの前に、サーバーはserverSeedを生成し、そのハッシュのみを公開します — SHA-256(serverSeed)。これは「コミット」です:サーバーは自身を拘束しましたが、シード自体はまだ明かされておらず、後から変更することはできません。
プレイヤーは自身のclientSeedを追加します — いつでも変更可能です。各スピンにはnonceカウンターで番号が振られます。結果は3つの値から決定論的に計算されます:serverSeed + clientSeed + nonce。
serverSeedが変更される(ローテーション)と、古いserverSeedが公開されます — 「reveal」。プレイヤーは、SHA-256(公開されたシード)が事前に公開されたハッシュと一致することを検証し、過去のすべてのスピンを再計算します。
なぜHMAC-SHA256なのか
3つのシードから、HMAC-SHA256を介してランダムバイトのストリームが生成されます — 暗号学的に安全な関数です:結果を知っていてもserverSeedを逆算することは不可能であり、シードの1ビットを変えるだけで結果が完全に変わります。
重要な詳細は「モジュロバイアス」が存在しないことです。乱数をリールサイズで割った余りを単純に取ると、頻出シンボルにわずかに多くの重みが付与されます。正しい実装では棄却サンプリングを使用します。範囲の「不均一な裾」からの値は破棄され、分布は厳密に一様に保たれます。
スピンの検証方法
当社のエンジンでは、すべてのスピンにフェアネスパネルがあります。nonce、clientSeed、ゲーム前のhash(serverSeed)、そしてラウンド後に公開されるserverSeedです。/api/fair/verifyエンドポイントはこれらの値から結果を独立して再計算します。ゲームで見たのと同じ結果が得られます。
これが「プロバブリーフェア」の意味です:信じるのではなく、検証する。同じメカニズムがMegawaysモードやカスケードテーマでも機能します。