(57)【要約】【課題】ユーザにとって公平な乱数を生成する乱数生成システムを提供する。【解決手段】乱数生成システムは、端末と、端末用の乱数を生成する、乱数生成装置と、を含む。乱数生成装置は、初期乱数の封印値を生成する。端末は、初期乱数の封印値が生成された後に、ユーザ乱数を生成する。乱数生成装置は、少なくともユーザ乱数と初期乱数に基づき乱数を生成する。乱数生成システムは、電子掲示板を提供する、データ管理システムをさらに含んでもよい。乱数生成装置は、封印値を前記電子掲示板に書き込み、端末は、封印値が電子掲示板に書き込まれたことに応じて、ユーザ乱数を生成してもよい。【選択図】図１
2018050973.tif 000002
【特許請求の範囲】
【請求項１】
端末と、
前記端末用の乱数を生成する、乱数生成装置と、
を含み、
前記乱数生成装置は、初期乱数の封印値を生成し、
前記端末は、前記初期乱数の封印値が生成された後に、ユーザ乱数を生成し、
前記乱数生成装置は、少なくとも前記ユーザ乱数と前記初期乱数に基づき乱数を生成する、乱数生成システム。
【請求項２】
電子掲示板を提供する、データ管理システムをさらに含み、
前記乱数生成装置は、前記封印値を前記電子掲示板に書き込み、
前記端末は、前記封印値が前記電子掲示板に書き込まれたことに応じて、前記ユーザ乱数を生成する、請求項１の乱数生成システム。
【請求項３】
前記乱数生成装置は、先の乱数の生成過程における中間結果を次の乱数の生成に用いる、請求項２の乱数生成システム。
【請求項４】
前記乱数生成装置は、前記生成された乱数を使用した後に、前記使用された乱数を前記端末に通知する、請求項３の乱数生成システム。
【請求項５】
前記乱数生成装置は、前記端末に対する乱数生成が不要となった後、前記初期乱数の封印を前記端末に開封する、請求項４の乱数生成システム。
【請求項６】
前記端末は、前記電子掲示板に書き込まれた前記初期乱数の封印値を取得し、前記取得した封印値と、前記開封された初期乱数と、前記使用された乱数として通知された乱数と、に基づき、前記乱数生成装置による乱数生成の公正性を検証する、請求項５の乱数生成システム。
【請求項７】
前記端末は、前記開封された初期乱数の封印値を計算し、前記計算した封印値と前記電子掲示板から取得した封印値が不一致の場合は、前記乱数生成装置による乱数生成は不公正であると判定する、請求項６の乱数生成システム。
【請求項８】
前記端末は、前記計算した封印値と前記電子掲示板から取得した封印値が一致し、且つ、前記使用された乱数として通知された乱数と前記開封された初期乱数と前記ユーザ乱数から生成した乱数が一致する場合に、前記乱数生成装置による乱数生成は公正であると判定する、請求項７の乱数生成システム。
【請求項９】
前記乱数生成装置は、
前記ユーザ乱数と前記初期乱数の連結結果について第１のハッシュ値を計算し、前記第１のハッシュ値を前記端末用の初回の乱数とし、
前記第１のハッシュ値のハッシュ値を第２のハッシュ値として生成し、前記第２のハッシュ値と前記ユーザ乱数の連結結果のハッシュ値を２回目の乱数とする、請求項１乃至８のいずれか一項に記載の乱数生成システム。
【請求項１０】
前記端末は、前記ユーザ乱数を前記電子掲示板に書き込み、
前記乱数生成装置は、前記生成された乱数を使用した後に、前記使用された乱数を前記電子掲示板に書き込む、請求項２の乱数生成システム。
【請求項１１】
前記電子掲示板に書き込まれた、前記初期乱数の封印値、前記使用された乱数及び前記ユーザ乱数を用いて、前記乱数生成装置による乱数生成の公正性を検証する、検証装置をさらに含む、請求項１０の乱数生成システム。
【請求項１２】
複数の前記端末を含み、
前記乱数生成装置は、前記複数の端末それぞれについて前記初期乱数を生成し、
前記複数の端末のそれぞれは、前記ユーザ乱数を生成し、
前記乱数生成装置は、少なくとも前記複数の初期乱数と前記複数のユーザ乱数に基づき、乱数を生成する、請求項１乃至１１のいずれか一項に記載の乱数生成システム。
【請求項１３】
第１及び第２の前記端末を含み、
前記乱数生成装置は、前記第１の端末についての第１の前記初期乱数を生成し、
前記第１の端末は、第１の前記ユーザ乱数を生成すると共に、前記第１のユーザ乱数の封印値を前記乱数生成装置に送信し、
前記乱数生成装置は、前記第１のユーザ乱数の封印値を受信した後、前記第２の端末についての第２の前記初期乱数を生成すると共に、前記第１のユーザ乱数の封印値を前記第２の端末に送信し、
前記第２の端末は、前記第１のユーザ乱数の封印値を受信した後に、第２の前記ユーザ乱数を生成すると共に、前記生成された第２のユーザ乱数を前記乱数生成装置に送信し、
前記乱数生成装置は、前記第２のユーザ乱数を前記第１の端末に送信し、
前記第１の端末は、前記第２のユーザ乱数を受信した後に、前記第１のユーザ乱数の封印を前記乱数生成装置に開封し、
前記乱数生成装置は、少なくとも、前記第１及び第２の初期乱数と前記第１及び第２のユーザ乱数に基づき、乱数を生成する、請求項１２の乱数生成システム。
【請求項１４】
第１及び第２の前記端末を含み、
前記乱数生成装置は、前記第１の端末についての第１の前記初期乱数を生成し、
前記第１の端末は、第１の前記ユーザ乱数を生成すると共に、前記第１のユーザ乱数の封印値を前記乱数生成装置に送信し、
前記乱数生成装置は、前記第１のユーザ乱数の封印値を受信した後、前記第２の端末についての第２の前記初期乱数を生成すると共に、前記第１のユーザ乱数の封印値を前記第２の端末に送信し、
前記第２の端末は、前記第１のユーザ乱数の封印値を受信した後に、第２の前記ユーザ乱数を生成すると共に、前記生成された第２のユーザ乱数の封印値を前記乱数生成装置に送信し、
前記乱数生成装置は、前記第２のユーザ乱数の封印値を前記第１の端末に送信し、
前記第１の端末は、前記第２のユーザ乱数の封印値を受信した後に、前記第１のユーザ乱数の封印を前記乱数生成装置に開封し、
前記乱数生成装置は、前記第１のユーザ乱数の開封後、前記第１のユーザ乱数を前記第２の端末に送信し、
前記第２の端末は、前記第１のユーザ乱数を受信した後に、前記第２のユーザ乱数の封印を前記乱数生成装置に開封し、
前記乱数生成装置は、少なくとも、前記第１及び第２の初期乱数と前記第１及び第２のユーザ乱数に基づき、乱数を生成する、請求項１２の乱数生成システム。
【請求項１５】
前記端末は、ユーザの選択した選択肢に関連付けられた数値を利用し、前記ユーザ乱数を生成する、請求項１乃至１４のいずれか一項に記載の乱数生成システム。
【請求項１６】
初期乱数を生成し、前記初期乱数の封印値を生成する、第１の乱数生成部と、
前記初期乱数の封印値が生成された後に端末が生成したユーザ乱数と、前記初期乱数と、に基づき乱数を生成する、第２の乱数生成部と、
を備える、乱数生成装置。
【請求項１７】
端末と、
前記端末用の乱数を生成する、乱数生成装置と、
を含むシステムにおいて、
前記乱数生成装置が、初期乱数の封印値を生成するステップと、
前記端末が、前記初期乱数の封印値が生成された後に、ユーザ乱数を生成するステップと、
前記乱数生成装置が、少なくとも前記ユーザ乱数と前記初期乱数に基づき乱数を生成するステップと、
を含む、乱数生成方法。
【請求項１８】
初期乱数を生成し、前記初期乱数の封印値を生成する処理と、
前記初期乱数の封印値が生成された後に端末が生成したユーザ乱数と、前記初期乱数と、に基づき乱数を生成する処理と、
をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、乱数生成システム、乱数生成装置、乱数生成方法及びプログラムに関する。
【背景技術】
【０００２】
ネットワーク技術、情報処理技術の進展に伴い、ネットワークを介して種々のサービス（オンラインサービスとも称される）が提供されている。上記サービスの一例として、オンラインゲームが存在する。オンラインゲームには様々な形態が存在し、例えば、ゲームサーバがゲームの進行を担うタイプのオンラインゲーム（例えば、ロールプレイングゲーム）や、ユーザ同士が対戦するフィールドをゲームサーバが提供するタイプのオンラインゲーム（例えば、チェス等のボードゲーム）が存在する。
【０００３】
また、ゲームの娯楽的要素を高める等を目的として、ゲームサーバが乱数を生成することがある。例えば、特許文献１では、ゲームの進行を生成した乱数により決定している（段落［００４２］、［００４６］）。また、特許文献２には、ゲームの中で使用するアイテムの抽選処理に乱数を使用することが記載されている（段落［０２１７］）。
【０００４】
なお、ゲーム以外にも、乱数を用いるオンラインサービスが存在する。例えば、電子抽選では乱数を用いて、当選者を決定する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１５−０５８０４４号公報
【特許文献２】特開２０１３−１９８５９１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
なお、上記先行技術文献の各開示を、本書に引用をもって繰り込むものとする。以下の分析は、本発明者らによってなされたものである。
【０００７】
上述のように、オンラインサービスでは、生成された乱数をサービス遂行の一要素として扱うことがある。その結果、例えば、オンラインゲームでは、生成された乱数がゲームの進行に大きな影響を及ぼすことがある。例えば、ロールプレイングゲームのモンスターに与えられるダメージが乱数により決定されている場合に、当該モンスターを倒せるか否かは乱数に大きく依存することになる。
【０００８】
首尾良くモンスターを倒せた場合には、ユーザが当該結果に対して不満を覚えることはないと考えられるが、モンスターを倒せない場合に、ユーザが「サーバに有利なように乱数を生成しているのではないか」と考える可能性がある。さらに、乱数を用いた抽選によりアイテムの取得可否が定まるようなゲームの場合には、上記疑念がより大きくなることも予想される。このように、乱数を使用するオンラインサービスでは、サーバが乱数を管理する以上、ユーザは、公平な乱数が使用されていないと疑念を持つ可能性がある。
【０００９】
本発明は、ユーザにとって公平な乱数を生成する、乱数生成システム、乱数生成装置、乱数生成方法及びプログラムを、提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明の第１の視点によれば、端末と、前記端末用の乱数を生成する、乱数生成装置と、を含み、前記乱数生成装置は、初期乱数の封印値を生成し、前記端末は、前記初期乱数の封印値が生成された後に、ユーザ乱数を生成し、前記乱数生成装置は、少なくとも前記ユーザ乱数と前記初期乱数に基づき乱数を生成する、乱数生成システムが提供される。
【００１１】
本発明の第２の視点によれば、初期乱数を生成し、前記初期乱数の封印値を生成する、第１の乱数生成部と、前記初期乱数の封印値が生成された後に端末が生成したユーザ乱数と、前記初期乱数と、に基づき乱数を生成する、第２の乱数生成部と、を備える、乱数生成装置が提供される。
【００１２】
本発明の第３の視点によれば、端末と、前記端末用の乱数を生成する、乱数生成装置と、を含むシステムにおいて、前記乱数生成装置が、初期乱数の封印値を生成するステップと、前記端末が、前記初期乱数の封印値が生成された後に、ユーザ乱数を生成するステップと、前記乱数生成装置が、少なくとも前記ユーザ乱数と前記初期乱数に基づき乱数を生成するステップと、を含む、乱数生成方法が提供される。
【００１３】
本発明の第４の視点によれば、初期乱数を生成し、前記初期乱数の封印値を生成する処理と、前記初期乱数の封印値が生成された後に端末が生成したユーザ乱数と、前記初期乱数と、に基づき乱数を生成する処理と、をコンピュータに実行させるプログラムが提供される。
なお、このプログラムは、コンピュータが読み取り可能な記憶媒体に記録することができる。記憶媒体は、半導体メモリ、ハードディスク、磁気記録媒体、光記録媒体等の非トランジェント（non-transient）なものとすることができる。本発明は、コンピュータプログラム製品として具現することも可能である。
【発明の効果】
【００１４】
本発明の各視点によれば、ユーザにとって公平な乱数を生成することに寄与する、乱数生成システム、乱数生成装置、乱数生成方法及びプログラムが、提供される。
【図面の簡単な説明】
【００１５】
【図１】一実施形態の概要を説明するための図である。
【図２】第１の実施形態に係るゲームシステムの構成の一例を示す図である。
【図３】第１の実施形態に係るゲームシステムの動作概略の一例を示すシーケンス図である。
【図４】第１の実施形態に係るゲームサーバのハードウェア構成の一例を示すブロック図である。
【図５】第１の実施形態に係るゲームサーバの処理構成の一例を示すブロック図である。
【図６】第１の実施形態に係る端末の処理構成の一例を示すブロック図である。
【図７】第１の実施形態に係るゲームシステムの動作の一例を示すシーケンス図である。
【図８】端末による乱数の公平性検証に係る動作の一例を示すフローチャートである。
【図９】第１の実施形態に係る管理サーバの処理構成の一例を示すブロック図である。
【図１０】第１の実施形態に係る管理サーバが生成するブロックの一例を示す図である。
【図１１】第１の実施形態に係る管理サーバの動作の一例を示すシーケンス図である。
【図１２】第１の実施形態の変形例に係るゲームシステムの構成の一例を示す図である。
【図１３】第２の実施形態に係るゲームシステムの動作の一例を示すシーケンス図である。
【図１４】第２の実施形態の変形例に係るゲームシステムの動作の一例を示すシーケンス図である。
【図１５】第２の実施形態の変形例に係るゲームシステムの動作の一例を示すシーケンス図である。
【図１６】乱数の生成にユーザが関与する場合の表示画面の一例を示す図である。
【発明を実施するための形態】
【００１６】
初めに、一実施形態の概要について説明する。なお、この概要に付記した図面参照符号は、理解を助けるための一例として各要素に便宜上付記したものであり、この概要の記載はなんらの限定を意図するものではない。
【００１７】
一実施形態に係る乱数生成システムは、端末１０１と、端末１０１用の乱数を生成する、乱数生成装置１０２と、を含む。乱数生成装置１０２は、初期乱数の封印値を生成する。端末１０１は、初期乱数の封印値が生成された後に、ユーザ乱数を生成する。乱数生成装置１０２は、少なくともユーザ乱数と初期乱数に基づき乱数を生成する。
【００１８】
上記乱数生成システムでは、乱数生成装置１０２は、端末１０１用の乱数の生成に先だって、初期乱数を生成する。また、端末１０１は、初期乱数の封印値が生成されたことに応じて、ユーザ乱数を生成し、乱数生成装置１０２に提供する。乱数生成装置１０２は、先に生成した初期乱数とユーザ乱数を用いて、端末１０１用の乱数を生成する。乱数生成装置１０２による乱数の生成には、乱数生成装置１０２及び端末１０１が互いに操作することができない初期乱数とユーザ乱数が必要となるので、端末１０１を操作するユーザにとって公平な乱数が生成される。
【００１９】
以下に具体的な実施の形態について、図面を参照してさらに詳しく説明する。なお、各実施形態において同一構成要素には同一の符号を付し、その説明を省略する。
【００２０】
［第１の実施形態］
第１の実施形態について、図面を用いてより詳細に説明する。
【００２１】
［システム構成概略］
図２は、第１の実施形態に係るゲームシステムの構成の一例を示す図である。図２を参照すると、ゲームシステムは、ゲームサーバ１０と、端末２０−１〜２０−ｎ（ｎは正の整数、以下同じ）と、データ管理システム３０と、を含んで構成される。ゲームサーバ１０、端末２０−１〜２０−ｎ及びデータ管理システム３０のそれぞれは、インターネット等のネットワークを介して相互に接続されている。なお、以降の説明において、端末２０−１〜２０−ｎを区別する特段の理由が無い場合には単に「端末２０」と表記する。
【００２２】
なお、ゲームシステムを例に取り第１の実施形態の説明を行うが、以下に説明する公正な乱数生成の手法は、他のシステムに適用できることは勿論である。例えば、当該手法は、電子的に抽選を行う電子抽選システムの乱数生成に適用されてもよい。
【００２３】
ゲームサーバ１０は、ユーザにオンラインゲームを提供する装置である。具体的には、ゲームサーバ１０は、ユーザを認証する処理（ログイン／ログアウト処理）、ゲーム進行に係る処理（ゲーム進行処理）等を行う。なお、第１の実施形態にて想定するオンラインゲームは、ゲームサーバ１０がゲームの進行を担うタイプのゲーム（例えば、ロールプレイングゲーム）を想定する。つまり、ゲームサーバ１０は、端末２０用の乱数を生成する乱数生成装置として動作する。
【００２４】
端末２０は、オンラインゲームをプレイするユーザが使用する装置である。例えば、パーソナルコンピュータやスマートフォン等の情報処理装置が、上記端末に相当する。
【００２５】
データ管理システム３０は、オンラインゲームの運営会社から独立した立場の機関等が運営するシステムである。データ管理システム３０は、外部（第３者）に対し、データの書き込み及び読み出しの可能な電子掲示板を提供するシステムである。データ管理システム３０は、所謂、ブロックチェーンにより各種情報を管理する。
【００２６】
データ管理システム３０は、所定の手数料を支払うことで、どのような主体でも情報を追記できると共に、書き込まれた情報を読み出すことができ、且つ、一度書き込まれた情報は消去されたり改ざんされたりすることのない電子掲示板を提供する。より正確には、データ管理システム３０は、外部装置からは電子掲示板のように扱うことのできるデータ入出力に係るインターフェイスを提供するシステムである。なお、以降の説明において、データ管理システム３０はゲームサーバ１０の運営会社等から独立した機関等により運営、管理されることを前提とするが、データ管理システム３０によるデータ管理の正当性が確保される場合には、ゲームサーバ１０等の運営会社が上記電子掲示板を提供してもよい。勿論、この場合には、ゲームサーバ１０等は手数料の支払いを必要とすることなく、電子掲示板を利用できる。
【００２７】
図２に示すゲームシステムでは、ゲームの進行に必要なデータ（より正確には、後述する初期乱数を封印した封印データ）の授受を、データ管理システム３０が提供する電子掲示板を介して行う。なお、上述のように、データ管理システム３０は、第３者に電子掲示板を提供するシステムであるため、当該電子掲示板には上記封印データとは無関係なデータ（例えば、商品の売上データ等）が混在することとなる。
【００２８】
データ管理システム３０は、複数の管理サーバ４０−１〜４０−４から構成されている。なお、図２の例示は、データ管理システム３０を構成する管理サーバの台数を４台に限定する趣旨ではない。データ管理システム３０は２台以上の管理サーバを含んで構成されていればよい。
【００２９】
データ管理システム３０をなす複数の管理サーバ４０は、図２に示すように、相互に直接接続されている。即ち、データ管理システム３０は、Ｐ２Ｐ（Peer to Peer）接続された複数の管理サーバ４０を含んで構成される。
【００３０】
データ管理システム３０では、Ｐ２Ｐ接続された複数の管理サーバ４０それぞれが、外部から受信したデータ（乱数データや売上データ等）を管理するための台帳（以下、データ管理台帳と表記する）を有する。データ管理システム３０は、当該データ管理台帳を複数の管理サーバ４０に分散して共有し、管理する。
【００３１】
以降の説明において、データ管理システム３０とその外部とのデータの授受は、データ管理システム３０と、ゲームサーバ１０及び端末２０の間に限って説明する。但し、実際には、データ管理システム３０は、汎用的な電子掲示板を広く第３者に提供するものであるため、ゲームサーバ１０等以外との間でもデータの授受が行われる。
【００３２】
［システム動作概略］
次に、図面を参照しつつ、第１の実施形態に係るゲームシステムの動作概略を説明する。図３は、第１の実施形態に係るゲームシステムの動作概略の一例を示すシーケンス図である。
【００３３】
ゲームサーバ１０の提供するオンラインゲームのプレイを希望するユーザは、端末２０を操作して、例えば、ゲームサーバ１０の運営会社が用意するＷＥＢ（ウェブ）ページにアクセスし、ユーザ登録（アカウント登録）を行う（ステップＳ０１）。アカウント登録を終えると、ユーザは、ゲームサーバ１０にログインするための認証情報（ＩＤ（Identifier）、パスワード）を取得する。
【００３４】
また、上記ＩＤやパスワードに係る情報は、ゲームサーバ１０が参照可能となるように配置される。例えば、アカウント登録処理が終了すると上記情報がゲームサーバ１０に送信され、ゲームサーバ１０の内部記憶装置に格納される。あるいは、ゲームサーバ１０がアクセス可能なデータベースに上記情報（ＩＤ、パスワード）が格納されていてもよい。
【００３５】
ユーザは、上記取得した認証情報（ＩＤとパスワードの組み合わせ）をゲームサーバ１０に提供して、ゲームサーバ１０にログインする（ステップＳ０２）。
【００３６】
ゲームサーバ１０は、ユーザから提供された認証情報を用いてユーザ認証を行い、正当なユーザであることが確認できた場合に、ゲームを開始する（ステップＳ０３）。
【００３７】
なお、オンラインゲームにおける、サーバ（ゲームサーバ１０）とクライアント（端末２０）の間の情報のやり取りには種々の形態が考えられるが、本願開示においてはどのような形態であってもよい。例えば、端末２０にゲーム専用のアプリケーションをインストールすることなく、ＨＴＭＬ（Hyper Text Markup Language）ソースでの汎用処理によりオンラインゲームを提供する形態であってもよいし、端末２０に専用のアプリケーションをインストールする形態であってもよい。
【００３８】
ゲームサーバ１０は、ゲームの進行中に乱数の生成が必要か否かを判定する（ステップＳ０４）。
【００３９】
乱数の生成が必要な場合（ステップＳ０４、Ｙｅｓ分岐）、ゲームサーバ１０は乱数生成に係る処理を起動する（ステップＳ０５）。その際、ゲームサーバ１０、端末２０及びデータ管理システム３０の間で乱数生成に必要な情報のやり取りが行われ、ゲームの進行に必要な乱数が生成される。ステップＳ０５の乱数生成に係る処理の詳細は後述する。
【００４０】
ゲームサーバ１０は、ゲーム終了のために設けられた種々の条件（例えば、タイムオーバ等の条件）を確認することで、ゲームが終了したか否かを判定する（ステップＳ０６）。ゲームが続行している間（ステップＳ０６、Ｎｏ分岐）は、乱数生成の要否が確認され（ステップＳ０４）、乱数の生成が必要な場合には乱数が生成され続ける。ゲームサーバ１０は、ゲームが終了したと判定した場合（ステップＳ０６、Ｙｅｓ分岐）には、その旨を端末２０に通知する（ステップＳ０７）。
【００４１】
当該通知を受けた端末２０は、ゲームをプレイしている最中に用いられた乱数（ゲームサーバ１０が生成した乱数）が公平なものであるか否かを検証する（ステップＳ０８）。端末２０は、データ管理システム３０が提供する電子掲示板から、乱数の公平性検証のために必要な封印データを取得し、当該データを用いて乱数の公平性を検証する。端末２０による乱数の公平性検証に係る処理の詳細は後述する。
【００４２】
検証の結果、ゲームサーバ１０による乱数生成の公正性に疑義が有る場合には、ユーザは、例えば、ゲームサーバ１０の運営会社にその旨を伝える（抗議する）等の行動を取ることができる。
【００４３】
なお、図３の説明では、端末２０によるゲームサーバ１０からのログアウトについて記載していないが、ユーザは、ゲームを続行する意思のない場合に、ゲームサーバ１０からログアウトする。
【００４４】
［ハードウェア構成］
次に、第１の実施形態に係るゲームシステムを構成する各種装置のハードウェア構成を説明する。図４は、第１の実施形態に係るゲームサーバ１０のハードウェア構成の一例を示すブロック図である。
【００４５】
ゲームサーバ１０は、情報処理装置（コンピュータ）により構成可能であり、図４に例示する構成を備える。例えば、ゲームサーバ１０は、内部バスにより相互に接続される、ＣＰＵ（Central Processing Unit）１１、メモリ１２、入出力インターフェイス１３及び通信手段であるＮＩＣ（Network Interface Card）１４等を備える。
【００４６】
但し、図４に示す構成は、ゲームサーバ１０のハードウェア構成を限定する趣旨ではない。ゲームサーバ１０は、図示しないハードウェアを含んでもよいし、必要に応じて入出力インターフェイス１３を備えていなくともよい。また、ゲームサーバ１０に含まれるＣＰＵ等の数も図４の例示に限定する趣旨ではなく、例えば、複数のＣＰＵがゲームサーバ１０に含まれていてもよい。
【００４７】
メモリ１２は、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）、補助記憶装置（ハードディスク等）である。
【００４８】
入出力インターフェイス１３は、図示しない表示装置や入力装置のインターフェイスとなる手段である。表示装置は、例えば、液晶ディスプレイ等である。入力装置は、例えば、キーボードやマウス等のユーザ操作を受け付ける装置である。
【００４９】
ゲームサーバ１０の機能は、後述する各種処理モジュールにより実現される。当該処理モジュールは、例えば、メモリ１２に格納されたプログラムをＣＰＵ１１が実行することで実現される。また、そのプログラムは、ネットワークを介してダウンロードするか、あるいは、プログラムを記憶した記憶媒体を用いて、更新することができる。さらに、上記処理モジュールは、半導体チップにより実現されてもよい。即ち、上記処理モジュールが行う機能を何らかのハードウェア、及び／又は、ソフトウェアで実行する手段があればよい。
【００５０】
なお、端末２０や管理サーバ４０もゲームサーバ１０と同様に情報処理装置により構成可能であり、その基本的なハードウェア構成はゲームサーバ１０と相違する点は無いので説明を省略する。
【００５１】
［ゲームサーバ］
次に、ゲームサーバ１０の詳細について説明する。
【００５２】
図５は、第１の実施形態に係るゲームサーバ１０の処理構成の一例を示すブロック図である。図５を参照すると、ゲームサーバ１０は、通信制御部２０１と、記憶部２０２と、ゲーム実行制御部２０３と、を含んで構成される。
【００５３】
通信制御部２０１は、他の装置との間の通信を実現する手段である。通信制御部２０１は、他の装置から受信したメッセージ（パケット）を各処理モジュール部に振り分ける、又は、各処理モジュールから取得したメッセージを他の装置に送信する手段でもある。
【００５４】
記憶部２０２は、例えば、ゲーム実行制御部２０３の処理等に必要なデータを記憶する。
【００５５】
ゲーム実行制御部２０３は、ゲーム進行に関する制御、管理を担う手段である。ゲーム実行制御部２０３は、ユーザ認証部２１１と、第１の乱数生成部２１２と、第２の乱数生成部２１３という３つのサブモジュールを含んで構成される。
【００５６】
ユーザ認証部２１１は、ユーザがゲームサーバ１０にログインする際、又は、ゲームサーバ１０からログアウトする際に起動するサブモジュールである。なお、ユーザ認証の方式はどのようなものであっても良い。例えば、上述のようにパスワードを用いた認証方式でもよいし、ユーザの生体情報（指紋情報等）を用いた生体認証であってもよい。ユーザ認証部２１１は、端末２０から提供されるデータ（被認証データ）とデータベース等に格納されたデータ（照合データ）を比較することで、端末２０を利用するユーザの認証を行う。
【００５７】
ゲーム実行制御部２０３は、ユーザ認証部２１１による認証結果に応じて、当該ユーザにオンラインゲームを提供する、又は、当該ユーザによるオンラインゲームのプレイを拒絶する。
【００５８】
第１の乱数生成部２１２及び第２の乱数生成部２１３は、ゲーム実行制御部２０３が乱数生成の必要があると判断した際に起動するサブモジュールである。なお、後述するように、１人のユーザに関して、乱数は既に生成された乱数を用いて生成される。つまり、ユーザごとに乱数の生成を管理する必要があるため、以降の説明ではサフィックスｊを用いてユーザを区別する。
【００５９】
乱数の生成処理が始まると、第１の乱数生成部２１２は、ユーザｊ用の初期乱数ｓｊを生成する。
【００６０】
次に、第１の乱数生成部２１２は、当該初期乱数ｓｊを封印する。より具体的には、第１の乱数生成部２１２は、初期乱数ｓｊのハッシュ値Ｈ（ｓｊ）を計算する。
【００６１】
その後、第１の乱数生成部２１２は、初期乱数ｓｊの封印値（即ち、ハッシュ値Ｈ（ｓｊ））とハッシュ値の計算に利用したハッシュ関数をデータ管理システム３０に送信し、これらの情報（ハッシュ値、ハッシュ関数）を電子掲示板に書き込むように依頼する。
【００６２】
また、第１の乱数生成部２１２は、計算したハッシュ値Ｈ（ｓｊ）を電子掲示板に書き込んだ旨をユーザｊが使用する端末２０に送信する。その際、端末２０がハッシュ値Ｈ（ｓｊ）等をデータ管理システム３０から取得できるように、トランザクションＩＤも併せて通知される。なお、トランザクションＩＤとは、ゲームサーバ１０がデータを電子掲示板に書き込んだ際にデータ管理システムから通知される識別子であって、封印データが書き込まれたトランザクションを特定する識別子である。
【００６３】
ゲームサーバ１０から上記通知を受け取った端末２０は、電子掲示板からハッシュ値Ｈ（ｓｊ）を取得する。端末２０は、自身（ユーザｊ）向けのハッシュ値Ｈ（ｓｊ）が電子掲示板に書き込まれていることを確認すると、乱数ｒｊを生成し、当該乱数ｒｊをゲームサーバ１０に送信する。なお、以降の説明において、端末２０が生成した乱数をユーザ乱数と表記する。
【００６４】
第２の乱数生成部２１３は、ユーザｊに適用する（ユーザｊがプレイするゲームに使用する）乱数を生成する。具体的には、第２の乱数生成部２１３は、ユーザ乱数ｒｊを受け取ると、初期乱数ｓｊとユーザ乱数ｒｊを用いて、下記の式（１）によりハッシュ値ｙｊを計算する。
ｙｊ（０）＝Ｈａｓｈ（ｒｊ||ｓｊ）、ｙｊ（ｉ）＝Ｈａｓｈ（ｙｊ（ｉ−１））  ・・・（１）
【００６５】
次に、第２の乱数生成部２１３は、計算したハッシュ値ｙｊを用いて、下記の式（２）により乱数ｘｊを生成する。
ｘｊ（０）＝Ｈａｓｈ（ｒｊ||ｙｊ（０））、ｘｊ（ｉ）＝Ｈａｓｈ（ｒｊ||ｙｊ（ｉ））  ・・・（２）
【００６６】
なお、式（１）及び（２）において、記号「||」は連結を示し、ｉは１以上の整数であって、以降の説明でも同様とする。また、ｘｊ及びｙｊに続いて記載された括弧書きの数字は、乱数の生成順を示す。例えば、最初に生成された乱数ｘｊはｘｊ（０）と表記し、次に生成された乱数ｘｊはｘｊ（１）と表記する。
【００６７】
なお、ユーザｊ用の乱数ｘｊが過去に生成されたことが無い場合（最初に乱数ｘｊを生成する場合）には、式（１）のハッシュ値ｙｊ（０）とユーザ乱数ｒｊが使用され、そのハッシュ値を計算することで初回の乱数ｘｊ（０）が得られる。乱数ｘｊ（０）がゲームの進行に使用され、その後ゲームの進行が進み、同じユーザｊについて次の乱数ｘｊ（１）の生成が必要となると、上記式（１）により  ｙｊ（１）＝Ｈａｓｈ（ｙｊ（０））が計算される。このハッシュ値ｙｊ（１）とユーザｊから取得したユーザ乱数ｒｊを用いて、式（２）により、乱数ｘｊ（１）＝Ｈａｓｈ（ｒｊ||ｙｊ（１））が計算される。このように、第２の乱数生成部２１３は、ユーザ乱数ｒｊと初期乱数ｓｊの連結結果について第１のハッシュ値を計算し、第１のハッシュ値を端末２０用の初回の乱数ｘｊ（０）とする。その後、２回目の乱数生成が必要となると、第２の乱数生成部２１３は、第１のハッシュ値のハッシュ値を第２のハッシュ値として生成し、第２のハッシュ値とユーザ乱数ｒｊの連結結果のハッシュ値を２回目の乱数ｘｊ（１）とする。
【００６８】
上記説明したように、第２の乱数生成部２１３は、同一のユーザｊについて生成された先のハッシュ値ｙｊ（ｉ−１）に基づき、ハッシュ値ｙｊ（ｉ）を計算し、且つ、計算されたハッシュ値ｙｊ（ｉ）とユーザ乱数ｒｊにより乱数ｘｊを生成する。即ち、第２の乱数生成部２１３は、先の乱数の生成過程における中間結果（ハッシュ値ｙｊ）を次の乱数の生成に用いつつ、乱数ｘｊを繰り返し生成していく。
【００６９】
ゲーム実行制御部２０３は、乱数ｘｊを使用した後に当該乱数ｘｊを端末２０（ユーザｊ）に通知する。なお、乱数ｘｊが端末２０に通知されるタイミングは、乱数ｘｊの使用後であれば、任意のタイミングとすることができる。例えば、ゲームの進行中に逐次使用された乱数ｘｊが通知されてもよいし、ゲーム終了後に、使用された乱数ｘｊが一括して端末２０に通知されてもよい。なお、乱数ｘｊは端末２０（ユーザｊ）に通知するが、乱数ｘｊの生成過程における中間結果（ハッシュ値ｙｊ）は端末２０に通知しない。当該中間結果を端末２０に通知してしまうと、端末２０は、当該中間結果から次の乱数発生を予測できるためである。
【００７０】
また、ゲーム実行制御部２０３は、図３のステップＳ０８における「乱数の公平性検証」までの任意のタイミングで、式（１）及び（２）にて使用したハッシュ関数の種類を、端末２０に通知する。例えば、初回の乱数通知（乱数ｘｊ（０）の通知）の際やゲーム終了後に、式（１）及び（２）にて使用したハッシュ関数の種類を端末２０に通知する。さらに、ゲーム実行制御部２０３は、ユーザｊによるゲームが終了した場合（即ち、これ以上の乱数生成が不要となった場合）、先に生成した初期乱数ｓｊを端末２０（ユーザｊ）に通知する。つまり、ゲーム実行制御部２０３は、端末２０に対する乱数生成が不要となった後、初期乱数の封印を端末２０に開封する。
【００７１】
なお、上記説明では、第１の乱数生成部２１２が使用したハッシュ関数を電子掲示板に書き込み、第２の乱数生成部２１３が使用したハッシュ関数を端末２０に通知することを説明した。しかし、ゲームサーバ１０と端末２０の間で、使用するハッシュ関数に関する合意があれば、上記の様な電子掲示板への書き込みや端末２０への通知は不要である。
【００７２】
第１の乱数生成部２１２や第２の乱数生成部２１３が使用するハッシュ関数として、例えば、ＳＨＡ−２（Secure Hash Algorithm 2）やＫｅｃｃａｋ（ケチャック）といったハッシュ関数が利用できる。また、第１の乱数生成部２１２が使用するハッシュ関数（初期乱数ｓｊのハッシュ値を計算するハッシュ関数）と第２の乱数生成部２１３が使用するハッシュ関数（式（１）及び（２）にて使用されるハッシュ関数）は同じであっても良いし、異なるものであってもよい。
【００７３】
ここで、ハッシュ関数には、ハッシュ値から元のデータを復元することができないという一方向性、違うデータから同じハッシュ値を生成することができないという衝突困難性、同じデータからは同じハッシュ値が生成されるという決定性、計算されるハッシュ値に偏りがない一様性等の性質がある。第１の乱数生成部２１２による初期乱数ｓｊのハッシュ値計算は、ゲームの進行中に初期乱数ｓｊをゲームサーバ１０以外の主体に対して隠蔽（封印）し、且つ、初期乱数ｓｊのハッシュ値の計算後に初期乱数ｓｊが変更されていないことを担保するために行われる。つまり、第１の乱数生成部２１２によるハッシュ値計算は、ハッシュ関数の持つ性質のうち、一方向性と衝突困難性を主として利用している。対して、第２の乱数生成部２１３におけるハッシュ関数は、ランダムな数値が生成可能、且つ、乱数生成の過程が再現可能な関数として使用されている。つまり、第２の乱数生成部２１３によるハッシュ値計算は、ハッシュ関数の持つ性質のうち、決定性と一様性を主として利用している。従って、第１の乱数生成部２１２と第２の乱数生成部２１３では、ハッシュ関数に求める性質が異なっており、各目的に適したハッシュ関数の使い分けがなされてもよい。
【００７４】
また、上記第１の乱数生成部２１２によるハッシュ値計算を鑑みれば、第１の乱数生成部２１２が、初期乱数を封印する際に利用する関数は、ハッシュ関数のみならず、コミットメント関数と呼ばれる、「データを封印（秘匿）」する機能と、「データを開封（変更されていないことを検証）」する機能があるもので代用することができる。
【００７５】
［端末］
次に、端末２０の詳細について説明する。
【００７６】
図６は、第１の実施形態に係る端末２０の処理構成の一例を示すブロック図である。図６を参照すると、端末２０は、通信制御部３０１と、記憶部３０２と、ゲーム実行部３０３と、を含んで構成される。
【００７７】
通信制御部３０１は、他の装置との間の通信を実現する手段である。通信制御部３０１は、他の装置から受信したメッセージ（パケット）を各処理モジュール部に振り分ける、又は、各処理モジュールから取得したメッセージを他の装置に送信する手段でもある。
【００７８】
記憶部３０２は、例えば、ゲーム実行部３０３の処理等に必要なデータを記憶する。
【００７９】
ゲーム実行部３０３は、ユーザによるゲームプレイを実現する手段である。より具体的には、ゲーム実行部３０３は、キーボードやマウス等の入力手段によりユーザの操作を入力する。ゲーム実行部３０３は、ユーザの操作に応じた情報をゲームサーバ１０に送信する。例えば、ユーザがゲームサーバ１０にログインする場合には、認証情報（例えば、ＩＤとパスワードの組み合わせ）がゲームサーバ１０に送信される。また、ユーザがゲームをプレイしている間は、ユーザによるキー操作等に係る情報がゲームサーバ１０に送信される。
【００８０】
ゲーム実行部３０３は、乱数生成部３１１と乱数検証部３１２の２つのサブモジュールを含んで構成される。
【００８１】
乱数生成部３１１は、ゲームサーバ１０により初期乱数の封印値（初期乱数のハッシュ値）が生成された後に、ユーザ乱数を生成する手段である。より具体的には、乱数生成部３１１は、初期乱数ｓｊのハッシュ値Ｈ（ｓｊ）が電子掲示板に書き込まれたことに応じて、ユーザ乱数を生成する。乱数生成部３１１は、ゲームサーバ１０からハッシュ値Ｈ（ｓｊ）を電子掲示板に書き込んだ旨の通知を受けた場合に起動する。この場合、乱数生成部３１１は、ゲームサーバ１０から通知されたトランザクションＩＤをデータ管理システム３０に提示し、ゲームサーバ１０が電子掲示板に書き込んだハッシュ値Ｈ（ｓｊ）を取得する。その後、乱数生成部３１１は、ユーザ乱数ｒｊを生成し、生成したユーザ乱数ｒｊをゲームサーバ１０に送信する。なお、乱数生成部３１１によるユーザ乱数ｒｊの生成には、ハッシュ関数を初めとした種々の関数や方法を用いることができる。
【００８２】
乱数検証部３１２は、ゲームサーバ１０がゲームの進行に使用した一連の乱数ｘｊ（ｘｊ（０）、ｘｊ（１）、・・・）が公平なものであるか否かを検証する手段である。より具体的には、乱数検証部３１２は、電子掲示板に書き込まれた初期乱数ｓｊのハッシュ値Ｈ（ｓｊ）を取得し、取得したハッシュ値Ｈ（ｓｊ）と、ゲームサーバ１０により開封された初期乱数ｓｊと、使用された乱数として通知された乱数ｘｊと、に基づき、ゲームサーバ１０による乱数生成の公正性を検証する。
【００８３】
乱数検証部３１２は、２段階の検証を行うことで、乱数ｘｊの公平性を確認する。
【００８４】
第１の検証は、上記の式（１）及び（２）にて使用される初期乱数ｓｊが端末２０から提供されるユーザ乱数ｒｊの取得前に生成された値から変更されていないことの検証である。
【００８５】
第２の検証は、ゲームサーバ１０が、式（１）及び（２）に従って乱数ｘｊを生成している（ゲームサーバ１０が恣意的に乱数ｘｊを決定していない）ことの検証である。
【００８６】
乱数検証部３１２は、電子掲示板から取得したハッシュ値Ｈ（ｓｊ）と、ゲーム終了後にゲームサーバ１０により開封された初期乱数ｓｊを用いて計算したハッシュ値Ｈ’（ｓｊ）と、を比較し、第１の検証を行う。比較の結果、２つのハッシュ値が一致すれば、乱数検証部３１２は、ゲームサーバ１０による乱数生成は公正である可能性があり、第２の検証を行う。
【００８７】
対して、２つのハッシュ値が不一致であれば、乱数検証部３１２は、ゲームサーバ１０による乱数生成は不公正（ゲームサーバ１０による乱数生成は不当、不適切）と判定する。
【００８８】
乱数検証部３１２は、式（１）及び（２）に従って乱数ｘｊ’（ｉ）を生成し、当該乱数ｘｊ’（ｉ）とゲームサーバ１０から通知された乱数ｘｊ（ｉ）を比較することで、第２の検証を行う。
【００８９】
ここで、上記式（１）、（２）によれば、乱数ｘｊの生成に必要な情報は、初期乱数ｓｊ、ユーザ乱数ｒｊである。２つの乱数のうち、ユーザ乱数ｒｊは、自装置にて生成している情報であるので、乱数検証部３１２は当然に把握可能である。また、初期乱数ｓｊは、ゲーム終了後にゲームサーバ１０から取得できる情報である。さらに、上述のように、式（１）、（２）にて使用されたハッシュ関数はゲームサーバ１０から端末２０に通知されている。従って、乱数検証部３１２は、２つの乱数（初期乱数ｓｊ、ユーザ乱数ｒｊ）に式（１）、（２）を適用することで、各回の乱数ｘｊ’（ｉ）を生成することができる。
【００９０】
なお、ゲームサーバ１０がゲームの進行に使用した乱数ｘｊ（ｉ）は、逐次、端末２０に通知されている。
【００９１】
乱数検証部３１２は、２つの乱数（ｘｊ’（ｉ）、ｘｊ（ｉ））の一致、不一致を確認することで、ゲームサーバ１０が、乱数ｘｊ（ｉ）を恣意的に変更しておらず、当初に生成された初期乱数ｓｊと端末２０が提示したユーザ乱数ｒｊを使用して一連の乱数ｘｊ（ｉ）を生成していることが検証できる。
【００９２】
上記２つの乱数ｘｊ’（ｉ）とｘｊ（ｉ）が一致していれば、乱数検証部３１２は、ゲームサーバ１０による乱数生成は公正（ゲームサーバ１０による乱数生成は正当、適切）であると判定する。一方、２つの乱数ｘｊ’（ｉ）とｘｊ（ｉ）に相違する点があれば、乱数検証部３１２は、ゲームサーバ１０による乱数生成は不公正と判定する。
【００９３】
乱数検証部３１２は、必要に応じて、上記判定結果をユーザに通知する。具体的には、乱数検証部３１２は、液晶パネル等の表示部に、検証結果を表示する等の処置を行う。
【００９４】
次に、図面を参照し、ゲームサーバ１０による乱数生成と端末２０による乱数検証の動作について説明する。
【００９５】
図７は、第１の実施形態に係るゲームシステムの動作の一例を示すシーケンス図である。図７には、主にゲームサーバ１０による乱数生成に係る動作が記載されている。
【００９６】
ステップＳ１０１において、ゲームサーバ１０は、初期乱数ｓｊを生成する。
【００９７】
ゲームサーバ１０は、初期乱数ｓｊのハッシュ値Ｈ（ｓｊ）を生成する（ステップＳ１０２）。
【００９８】
ゲームサーバ１０は、生成したハッシュ値Ｈ（ｓｊ）をデータ管理システム３０に送信する（ステップＳ１０３）。つまり、ゲームサーバ１０は、生成したハッシュ値Ｈ（ｓｊ）を電子掲示板に書き込む。
【００９９】
データ管理システム３０によるハッシュ値Ｈ（ｓｊ）の電子掲示板への書き込み（ステップＳ１０４）が完了すると、ゲームサーバ１０は、ハッシュ値Ｈ（ｓｊ）を電子掲示板に書き込んだ旨を端末２０に通知する（ステップＳ１０５）。
【０１００】
端末２０は、上記ゲームサーバ１０からの通知を取得すると、電子掲示板からハッシュ値Ｈ（ｓｊ）を読み出す（ステップＳ１０６）。
【０１０１】
その後、端末２０は、ユーザ乱数ｒｊを生成し、当該乱数をゲームサーバ１０に送信する（ステップＳ１０７）。
【０１０２】
ユーザ乱数ｒｊを取得したゲームサーバ１０は、上述の式（１）、（２）に従い、乱数ｘｊ（０）を生成する（ステップＳ１０８−０）。
【０１０３】
ゲームサーバ１０は、生成した乱数ｘｊ（０）をゲームの進行に使用し、使用した乱数ｘｊ（０）を端末２０に通知する（ステップＳ１０９−０）。
【０１０４】
ゲームサーバ１０は、ゲームの進行と共に更なる乱数の生成が必要となると、上述の式（１）、（２）に従って乱数を生成する処理（ステップＳ１０８−ｉ）と、当該乱数を通知する処理（ステップＳ１０９−ｉ）を繰り返す。
【０１０５】
その後、ゲームが終了すると（ステップＳ１１０）、ゲームサーバ１０は、ステップＳ１０１にて生成した初期乱数ｓｊを端末２０に開封する（ステップＳ１１１）。
【０１０６】
ステップＳ１１２において、端末２０は、ゲームサーバ１０により生成された乱数ｘｊの公平性を検証する。
【０１０７】
図８は、端末２０による乱数ｘｊの公平性検証に係る動作の一例を示すフローチャートである。
【０１０８】
初めに、端末２０は、電子掲示板から取得したハッシュ値Ｈ（ｓｊ）と、ゲームサーバ１０から開封された初期乱数ｓｊを用いて計算したハッシュ値Ｈ’（ｓｊ）を比較し、第１の検証を行う（ステップＳ２０１）。
【０１０９】
２つのハッシュ値が一致しなければ（ステップＳ２０１、Ｎｏ分岐）、ゲームサーバ１０による乱数生成は不公正であると判定される（ステップＳ２０４）。
【０１１０】
２つのハッシュ値が一致した場合（ステップＳ２０１、Ｙｅｓ分岐）、第２の検証が実行される。
【０１１１】
端末２０は、式（１）及び（２）に従って生成した乱数ｘｊ’（ｉ）と、ゲームサーバ１０から通知された乱数ｘｊ（ｉ）を比較し、第２の検証を行う（ステップＳ２０２）。
【０１１２】
２つの乱数が一致しなければ（ステップＳ２０２、Ｎｏ分岐）、ゲームサーバ１０による乱数生成は不公正であると判定される（ステップＳ２０４）。２つの乱数が一致すれば（ステップＳ２０２、Ｙｅｓ分岐）、ゲームサーバ１０による乱数生成は公正であると判定される（ステップＳ２０３）。
【０１１３】
［管理サーバ］
次に、データ管理システム３０をなす管理サーバ４０の詳細について説明する。
【０１１４】
図９は、第１の実施形態に係る管理サーバ４０の処理構成の一例を示すブロック図である。図９を参照すると、管理サーバ４０は、通信制御部４０１と、記憶部４０２と、台帳管理部４０３と、を含んで構成される。
【０１１５】
通信制御部４０１は、他の装置との間の通信を実現する手段である。通信制御部４０１は、他の装置から受信したメッセージ（パケット）を各処理モジュール部に振り分ける、又は、各処理モジュールから取得したメッセージを他の装置に送信する手段でもある。
【０１１６】
記憶部４０２は、各処理モジュールの処理に必要な情報を記憶する手段である。記憶部４０２には、データを一時的に記憶する一時記憶領域とデータ管理台帳を記憶する領域が含まれる。
【０１１７】
台帳管理部４０３は、電子掲示板へのゲームサーバ１０や端末２０からのアクセス要求を処理する手段である。具体的には、例えば、ゲームサーバ１０から電子掲示板への封印データ（ハッシュ値）の書き込み要求を受け付けると、記憶部４０２に格納されているデータ管理台帳に封印データを追記する。また、台帳管理部４０３は、外部装置（例えば、端末２０）から電子掲示板の読み出しに係る要求を受け付けると、当該要求に付随するトランザクションＩＤをキーとしてデータ管理台帳を検索し、当該ＩＤが付されたデータ（封印データ）を抽出する。台帳管理部４０３は、抽出した封印データを外部装置に送信する。
【０１１８】
台帳管理部４０３は、ブロック生成部４１１とブロック検証部４１２の２つのサブモジュールを有する。
【０１１９】
ブロック生成部４１１は、データ管理台帳を他の管理サーバ４０にて共有し、管理するためのブロックを生成する。
【０１２０】
台帳管理部４０３は、ゲームサーバ１０から封印データを取得すると、当該取得した封印データを記憶部４０２の一時記憶領域に保存する。その後、ブロック生成部４１１は、直前に生成されたブロックのヘッダと、当該一時記憶領域に保存されたデータ（例えば、封印データや売上データ；データ管理台帳への追記データ）から、「正当性保証データ」を生成する。例えば、ブロック生成部４１１は、追記データ、前ブロックのヘッダ及び正当性保証データのハッシュ値を計算すると、当該計算されたハッシュ値を所定の規則に適合するものにする値（所謂、ノンス値又はナンス値）を正当性保証データとして生成する。また、正当性保証データには、ブロックを生成した管理サーバ４０の電子署名が含まれる。
【０１２１】
ブロック生成部４１１は、直前に生成されたブロックのヘッダと上記の正当性保証データからなるヘッダを有するブロックを生成する。具体的には、図１０に示すようなブロックが生成される。
【０１２２】
ブロック生成部４１１によるブロック生成が終了すると、当該ブロックはデータ管理台帳に追記される。また、ブロック生成部４１１は、生成したブロックを、通信制御部４０１を介して他の管理サーバ４０に配布（送信）する。
【０１２３】
他の管理サーバ４０から上記ブロックを受信した管理サーバ４０の通信制御部４０１は、取得したブロックをブロック検証部４１２に引き渡す。
【０１２４】
ブロック検証部４１２は、自装置の記憶部４０２に格納されているデータ管理台帳（ブロック）に基づき、他の管理サーバ４０が送信するブロックの正当性を検証する手段である。具体的には、ブロックを受信した管理サーバ４０のブロック検証部４１２は、当該受信したブロックの正当性を、ブロックを送信した管理サーバ４０が生成したブロックと自装置（ブロックを受信した管理サーバ４０）が管理している直前に生成されたブロックのヘッダを用いて検証する。
【０１２５】
初めに、ブロック検証部４１２は、受信したブロックに含まれる正当性保証データに送信元となる管理サーバ４０の電子署名が付与されていることを確認し、受信したブロックに記載された「前ブロックのヘッダ」を自身が管理するデータ管理台帳に基づき特定する。その後、ブロック検証部４１２は、受信したブロック内の追記データと前ブロックのヘッダを入力として、ヘッダ内の正当性保証データの整合がとれているか否か（正当性保証データが所定の規則に適合するか否か）を確認する。
【０１２６】
ブロック検証部４１２は、正当性保証データの整合性が確認できれば、他の管理サーバ４０が送信するブロックは正当であると判定する。一方、正当性保証データの整合性が確認できなければ、ブロック検証部４１２は、他の管理サーバ４０が送信するブロックは不当であると判定する。
【０１２７】
ブロック検証部４１２が、他の管理サーバ４０が送信するブロックが正当であると判定した場合には、台帳管理部４０３は、記憶部４０２のデータ管理台帳を更新する（追記データを含むブロックを追記する）。つまり、ブロック検証部４１２は、他の管理サーバ４０の台帳へのデータの追記を、自装置の台帳に反映する処理を行う。なお、ブロック検証部４１２は、他の管理サーバ４０が送信するブロックが不当であると判定した場合には、当該ブロックを破棄する。
【０１２８】
また、ブロック検証部４１２は、検証結果（受信したブロックは正当、不当）に関する情報を、ブロックを送信してきた管理サーバ４０に通知する。
【０１２９】
管理サーバ４０の動作をまとめると図１１に示すシーケンス図のとおりとなる。なお、図１１には、管理サーバ４０−１がゲームサーバ１０から封印データを取得し、当該データをデータ管理台帳に追記する場合を示す。
【０１３０】
管理サーバ４０−１は、ゲームサーバ１０から封印データを取得すると（ステップＳ２０１）、当該データを自装置の記憶部４０２の一時記憶領域に複製する（ステップＳ２０２）。
【０１３１】
その後、一時記憶領域に複製されたデータが所定量蓄積される等の条件により、管理サーバ４０−１は、一時記憶領域に記憶されたデータに基づき、上述のブロックを生成する（ステップＳ２０３）。その後、管理サーバ４０−１は、生成したブロックを他の管理サーバ４０−２〜４０−４に向けて送信する（ステップＳ２０４）。
【０１３２】
ブロックを受信した管理サーバ４０−２〜４０−４のそれぞれは、管理サーバ４０−１が生成したブロックを個別に検証する（ステップＳ２０５）。管理サーバ４０−２〜４０−４のそれぞれは、ブロックの正当性が確認できた場合に自装置のデータ管理台帳を更新する（ステップＳ２０６）。
【０１３３】
このように、データ管理システム３０をなす複数の管理サーバ４０のうちの少なくとも１つの管理サーバ４０によるデータ管理台帳へのデータの追記は、他の管理サーバ４０のデータ管理台帳に反映される。
【０１３４】
なお、他の管理サーバ４０から送信されたブロックの正当性が確認できない場合には、当該ブロックを破棄すると共に、管理サーバ４０はその旨を、ブロックを送信する管理サーバ４０に通知する。当該通知を受けた管理サーバ４０の台帳管理部４０３は、ブロック送信前のデータ管理台帳の状態を取り戻す。
【０１３５】
以上のように、第１の実施形態に係るゲームサーバ１０は、乱数ｘｊの生成に先立ち、初期乱数ｓｊを生成し、そのハッシュ値Ｈ（ｓｊ）を電子掲示板に書き込む。また、ユーザｊは、ハッシュ値Ｈ（ｓｊ）が電子掲示板に書き込まれたことに応じて、ユーザ乱数ｒｊを生成し、ゲームサーバ１０に提供する。ゲームサーバ１０は、先に生成した初期乱数ｓｊとユーザｊから提供されたユーザ乱数ｒｊを用いて、乱数ｘｊを生成する。このように、乱数ｘｊの生成には、ゲームサーバ１０及びユーザｊが互いに操作することができない初期乱数ｓｊとユーザ乱数ｒｊが必要となるので、公平な乱数ｘｊが生成される。
【０１３６】
ゲームサーバ１０は、初期乱数ｓｊを生成する前にユーザ乱数ｒｊを知ることができない。また、ゲームサーバ１０は、自身が影響を及ぼすことのできない電子掲示板にハッシュ値Ｈ（ｓｊ）を書き込んでいるため、ハッシュ値Ｈ（ｓｊ）の書き込み後は、初期乱数ｓｊを変更することができない。そのため、ゲームサーバ１０は、ユーザ乱数ｒｊの取得後に初期乱数ｓｊを変更すること等により、乱数ｘｊの生成を操作することはできない。
【０１３７】
ユーザｊは、電子掲示板に書き込まれたハッシュ値Ｈ（ｓｊ）から初期乱数ｓｊを得ることはできないので、乱数ｘｊの生成を操作することができない。さらに、ユーザｊは、ゲームの進行中に、乱数ｘｊの生成過程における中間結果（ハッシュ値ｙｊ（ｉ））を知ることができないため、乱数ｘｊ（ｉ）に基づき乱数ｘｊ（ｉ＋１）を推測することもできない。
【０１３８】
ゲームサーバ１０と端末２０間のデータの授受（ハッシュ値Ｈ（ｓｊ）の授受）は、ブロックチェーンによりデータが管理される電子掲示板を利用するので、ハッシュ値Ｈ（ｓｊ）を改ざんすることは非常に困難である。さらに、電子掲示板に書き込むのは、ハッシュ値Ｈ（ｓｊ）とハッシュ関数という少量のデータに限られ、電子掲示板の利用に関する手数料を少額に抑えることができる。
【０１３９】
さらにまた、繰り返し乱数を生成させる必要がある場合であっても、先の乱数ｘｊ（ｉ−１）の生成過程における中間結果に応じて、乱数ｘｊ（ｉ）が生成されるので、ゲームサーバ１０と端末２０の間で特別な情報のやり取りは不要である。そのため、ゲームサーバ１０と端末２０間の通信が増加することもない。
【０１４０】
［第１の実施形態の変形例］
第１の実施形態の変形例について説明する。
【０１４１】
第１の実施形態では、電子掲示板に書き込まれるデータを封印データ（初期乱数のハッシュ値）に限っている。第１の実施形態に係る変形例では、当該封印データに限らず、端末２０が生成するユーザ乱数、ゲームサーバ１０がゲームの進行と共に生成し、使用する乱数も電子掲示板に書き込まれる場合について説明する。
【０１４２】
上記説明したように、第１の実施形態では、封印データ以外のデータ（ユーザ乱数ｒ、乱数ｘ）は、端末２０とゲームサーバ１０の間で授受が行われている。当該データの授受が電子掲示板を介して行われることで、ゲームサーバ１０による乱数生成の公正性検証が端末２０以外の装置（即ち、第３者）が行うことができる。
【０１４３】
例えば、図１２に示すように、上記端末２０の一機能として説明した「乱数検証部」と同等の機能を有する検証装置５０がシステムに含まれていてもよい。例えば、検証装置５０は、裁判所等の機関に設置される装置であり、ユーザに対して提供されるサービス（例えば、オンラインゲームや電子抽選）の正当性を監視する。
【０１４４】
以上のように、端末２０が、ユーザ乱数を電子掲示板に書き込み、ゲームサーバ１０（乱数生成装置）が、ゲームの進行に使用した乱数を電子掲示板に書き込んでもよい。その場合、当事者（端末２０のユーザ）以外の第３者が、電子掲示板に書き込まれた、初期乱数の封印値、使用された乱数及びユーザ乱数を用いて、ゲームサーバ１０による乱数生成の公正性を検証することができる。
【０１４５】
［第２の実施形態］
続いて、第２の実施形態について図面を参照して詳細に説明する。
【０１４６】
第１の実施形態では、謂わば、ゲームサーバ１０とユーザが対戦するタイプのゲームを例にとり、公正な乱数生成方法を説明した。第２の実施形態では、ユーザ同士が対戦するフィールドをゲームサーバ１０ａが提供するタイプのゲームにおける公正な乱数生成方法を説明する。
【０１４７】
第２の実施形態では、上記のようなゲームとして、「バックギャモン」を例に取り公正な乱数生成方法を説明する。なお、バックギャモンの詳細なルールの説明は省略するが、２人のユーザが交互にサイコロを振り、出た目の数字に応じて駒を動かすゲームである。第２の実施形態に係るゲームサーバ１０ａは、上記サイコロの目の選択に、後述する乱数生成を利用する。
【０１４８】
なお、ゲームシステムの構成、各装置のハードウェア構成、処理構成は第１の実施形態と同様とすることが可能であるので、これらの説明は省略する。
【０１４９】
第１及び第２の実施形態の相違点は、ゲームサーバ１０ａにおける乱数生成方法と、生成した乱数を２人のユーザ（複数のユーザ）に提供する点である。
【０１５０】
図１３は、第２の実施形態に係るゲームシステムの動作の一例を示すシーケンス図である。なお、図１３は、ユーザｊ１とユーザｊ２が対戦するものとする。また、ゲームの開始に先立ち、ユーザｊ１とユーザｊ２はそれぞれアカウントの登録が完了しているものとする。
【０１５１】
初めに、２人のユーザは、ゲームサーバ１０ａにログインし、ゲームを開始する（ステップＳ３０１）。
【０１５２】
ゲームが開始され、乱数の発生（サイコロの目）が必要となると、図１３のステップＳ３０２以降の処理が実行される。
【０１５３】
ステップＳ３０２において、ゲームサーバ１０ａの第１の乱数生成部２１２は、ユーザｊ１用の初期乱数ｓｊ１を生成し、そのハッシュ値Ｈ（ｓｊ１）を電子掲示板に書き込む。また、ゲームサーバ１０ａは、当該書き込みに関する通知をユーザｊ１（端末２０）に行う。
【０１５４】
当該通知を受けた端末２０（ユーザｊ１が操作する端末２０）の乱数生成部３１１は、電子掲示板へのハッシュ値Ｈ（ｓｊ１）の書き込みを確認した後、ユーザ乱数ｒｊ１を生成し、ゲームサーバ１０ａに送信する（ステップＳ３０３）。
【０１５５】
同様に、ゲームサーバ１０ａは、ユーザｊ２用の初期乱数ｓｊ２を生成し、ハッシュ値Ｈ（ｓｊ２）を電子掲示板に書き込む（ステップＳ３０４）。また、ユーザｊ２の端末２０は、ユーザ乱数ｒｊ２を生成し、ゲームサーバ１０ａに送信する（ステップＳ３０５）。
【０１５６】
２人のユーザからユーザ乱数ｒｊ１、ｒｊ２を受け取ったゲームサーバ１０ａの第２の乱数生成部２１３は、下記の式（３）によりハッシュ値ｙｊを計算する。
ｙｊ（０）＝Ｈａｓｈ（ｒｊ１||ｒｊ２||ｓｊ１||ｓｊ２）、ｙｊ（ｉ）＝Ｈａｓｈ（ｙｊ（ｉ−１））  ・・・（３）
【０１５７】
次に、ゲームサーバ１０ａは、計算したハッシュ値ｙｊを用いて、下記の式（４）により乱数ｘｊを生成する。
ｘｊ（０）＝Ｈａｓｈ（ｒｊ１||ｒｊ２||ｙｊ（０））、ｘｊ（ｉ）＝Ｈａｓｈ（ｒｊ１||ｒｊ２｜｜ｙｊ（ｉ））  ・・・（４）
【０１５８】
初回の乱数生成時には、式（３）により、２つの初期乱数ｓｊ１、ｓｊ２と２つのユーザ乱数ｒｊ１、ｒｊ２によりハッシュ値ｙｊ（０）が計算される。その後、２つのユーザ乱数ｒｊ１、ｒｊ２とハッシュ値ｙｊ（０）のハッシュ値が計算され、乱数ｘｊ（０）が得られる（ステップＳ３０６−０）。生成された乱数ｘｊ（０）は、２人のユーザｊ１、ｊ２に通知される（ステップＳ３０７−０）。その後、ゲームサーバ１０ａは、乱数ｘｊ（０）を先攻のユーザに適用する（ステップＳ３０８−０）。例えば、ゲームサーバ１０ａは、乱数ｘｊ（０）をサイコロの目（１〜６）に変換し、先攻のユーザに通知する。通知を受けたユーザは、サイコロの目に応じて駒を動かし、ゲームを進める。
【０１５９】
後攻のユーザに関する乱数ｘｊ（１）の生成も、式（３）及び（４）に従って行われる（ステップＳ３０６−１）。生成された乱数ｘｊ（１）は、２人のユーザｊ１、ｊ２に通知される（ステップＳ３０７−１）。その後、ゲームサーバ１０ａは、乱数ｘｊ（１）を後攻のユーザに適用する（ステップＳ３０８−１）。
【０１６０】
上記のような、乱数生成、乱数通知、ユーザへの適用を繰り返しつつ、ゲームが終了する（ステップＳ３０９）。
【０１６１】
ゲームが終了すると、ゲームサーバ１０ａは、初期乱数とユーザ乱数を、ユーザｊ１、ｊ２に通知する（ステップＳ３１０）。具体的には、ゲームサーバ１０ａは、ユーザｊ１に対して、少なくとも、封印された初期乱数ｓｊ１、ｓｊ２を開封すると共にユーザ乱数ｒｊ２を通知する。同様に、ゲームサーバ１０ａは、ユーザｊ２に対して、少なくとも、封印された初期乱数ｓｊ１、ｓｊ２を開封すると共にユーザ乱数ｒｊ１を通知する。
【０１６２】
通知を受けた各ユーザは、乱数ｘｊの公平性を検証する（ステップＳ３１１、Ｓ３１２）。ユーザｊ１とユーザｊ２における乱数の公平性検証は同様の処理とすることができるので、ユーザｊ１における公平性検証について説明する。
【０１６３】
第２の実施形態における乱数の公平性検証も、第１の実施形態と基本的には同じであり、２段階の検証により行われる。
【０１６４】
第１の検証では、ステップＳ３１０にて得られた初期乱数ｓｊ１、ｓｊ２が、ユーザ乱数ｒｊ１、ｒｊ２の送信後に変更されたものではないことを検証する。具体的には、ユーザｊ１（端末２０）は、初期乱数ｓｊ１、ｓｊ２のハッシュ値を計算し、当該ハッシュ値と電子掲示板から取得したハッシュ値がそれぞれ一致するか否かにより第１の検証を行う。
【０１６５】
その後、ユーザｊ１は、ゲームの進行と共にゲームサーバ１０ａから通知された乱数ｘｊ（ｘｊ（０）、ｘｊ（１）、・・・）とゲームサーバ１０ａから通知された乱数（初期乱数、ユーザ乱数）に式（３）、（４）を適用することで得られる乱数ｘｊ’（ｘｊ’（０）、ｘｊ’（１）、・・・）を比較することで、第２の検証を行う。
【０１６６】
なお、上記説明は、２人のユーザが対戦する場合の乱数生成について説明したが、３人以上のユーザが対戦する場合であっても、式（３）及び（４）を適宜拡張することで、対応可能なことは当業者にとって明らかである。
【０１６７】
以上のように、第２の実施形態では、ゲームサーバ１０ａは、複数のユーザそれぞれに対して生成した初期乱数と複数のユーザそれぞれから取得したユーザ乱数を用いて、乱数を生成する。その際、ゲームサーバ１０ａは、初期乱数の生成前にユーザ乱数を知ることができず、また、一度初期乱数を生成した後は当該乱数を変更することはできないため、乱数を操作することができない。このように、複数のユーザを対象とするゲームにおいて使用される乱数を、各ユーザ用に生成された初期乱数と各ユーザが個別に生成したユーザ乱数を用いて生成することができる。また、ゲームサーバ１０ａによる乱数生成の公正性を、各ユーザが検証することができる。
【０１６８】
［第２の実施形態の変形例］
第２の実施形態の変形例について説明する。
【０１６９】
上記第２の実施形態では、ゲームサーバ１０ａが２人のユーザｊ１、ｊ２を対等に扱う限りにおいては公正な乱数の生成が行われる。しかし、例えば、ゲームサーバ１０ａとユーザｊ２（ユーザｊ２が操作する端末２０）が共謀することで、ユーザｊ１に対して不利な（不公平な）乱数が生成される余地がある。具体的には、ゲームサーバ１０ａは、図１３のステップＳ３０３により生成されたユーザ乱数ｒｊ１を取得した後に、ユーザｊ２用の初期乱数ｓｊ２を生成している。しかし、例えば、ゲームサーバ１０ａとユーザｊ２が結託することで、ゲームサーバ１０ａが初期乱数ｓｊ２を生成する前にユーザｊ２がユーザ乱数ｒｊ２を生成し、ゲームサーバ１０ａに提供することもできる。その結果、ゲームサーバ１０ａは、式（３）に示すハッシュ値ｙｊを計算する際、ユーザｊ２にとって有利な結果が得られるように、初期乱数ｓｊ２を選択できる余地がある。
【０１７０】
第２の実施形態の変形例では、ゲームサーバとユーザが結託することで、上記のような他のユーザに対して不公正な乱数生成を防止するシステムを提供する。
【０１７１】
図１４を参照しつつ、第２の実施形態とその変形例の相違点を中心に説明する。
【０１７２】
ステップＳ４０３において、ユーザｊ１は、ユーザ乱数ｒｊ１を生成する。その後、ユーザｊ１は、当該ユーザ乱数ｒｊ１のハッシュ値Ｈ（ｒｊ１）をゲームサーバ１０ｂに送信する（ステップＳ４０４）。
【０１７３】
ステップＳ４０５において、ゲームサーバ１０ｂは、ユーザｊ２用の初期乱数ｓｊ２を生成し、ハッシュ値Ｈ（ｓｊ２）を生成する。当該ハッシュ値Ｈ（ｓｊ２）は電子掲示板に書き込まれる。その後、ゲームサーバ１０ｂは、ユーザ乱数ｒｊ１のハッシュ値Ｈ（ｒｊ１）をユーザｊ２に送信する（ステップＳ４０６）。
【０１７４】
ステップＳ４０７において、ユーザｊ２は、ユーザ乱数ｒｊ２を生成し、当該生成したユーザ乱数ｒｊ２をゲームサーバ１０ｂに送信する。
【０１７５】
ステップＳ４０８において、ゲームサーバ１０ｂは、ユーザｊ１にユーザ乱数ｒｊ２を送信する。
【０１７６】
ステップＳ４０９において、上記送信を受けたユーザｊ１は、ユーザ乱数ｒｊ１の封印をゲームサーバ１０ｂに開封する。
【０１７７】
ゲームサーバ１０ｂは、当該開封が正しいことを確認して、ゲームを開始する。つまり、ゲームサーバ１０ｂは、初期乱数ｓｊ１、ｓｊ２及びユーザ乱数ｒｊ１、ｒｊ２を利用し、乱数ｘｊを適宜生成する（ステップＳ４１０）。
【０１７８】
このように、ユーザｊ２用の初期乱数ｓｊ２を生成する前に、ユーザｊ１はユーザ乱数ｒｊ１を生成するが、当該乱数の生成をした旨の通知はハッシュ値Ｈ（ｒｊ１）がゲームサーバ１０ｂに送信されることで行われている。その後、ユーザｊ２に関する乱数（初期乱数ｓｊ２、ユーザ乱数ｒｊ２）の生成が行われ、ユーザｊ１からハッシュ値Ｈ（ｒｊ１）の開封が行われる。従って、ゲームサーバ１０ｂは、ユーザｊ２用の初期乱数ｓｊｓを生成する前に、ユーザｊ１が生成したユーザ乱数ｒｊ１を知ることができない。その結果、例えば、ユーザｊ２とゲームサーバ１０ｂが共謀し、ユーザｊ２に有利となるように（ユーザｊ１に不公平な）乱数ｘｊが生成されることはない。
【０１７９】
なお、図１４のステップＳ４０７では、ユーザｊ２が生成したユーザ乱数ｒｊ２のハッシュ値Ｈ（ｒｊ２）はゲームサーバ１０ｂに向けて送信されておらず、ユーザ乱数ｒｊ２がゲームサーバ１０ｂに送信されている。ユーザｊ１に関しては、ハッシュ値Ｈ（ｒｊ１）が初めに送信されることの均衡から、ユーザｊ２のユーザ乱数ｒｊ２のハッシュ値Ｈ（ｒｊ２）をゲームサーバ１０ｂに送信することも可能である。具体的には、図１５に示す手順とすることができる。
【０１８０】
具体的には、ユーザｊ２は、ユーザ乱数ｒｊ２を生成（ステップＳ５０７）した後、そのハッシュ値Ｈ（ｒｊ２）を計算して、当該ハッシュ値をゲームサーバ１０ｂに送信する（ステップＳ５０８）。
【０１８１】
その後、ゲームサーバ１０ｂは、ユーザｊ１にユーザ乱数ｒｊ２のハッシュ値Ｈ（ｒｊ２）を送信する（ステップＳ５０９）。当該ハッシュ値を受信したユーザｊ１は、封印されたユーザ乱数ｒｊ１をゲームサーバ１０ｂに開封する（ステップＳ５１０）。あるいは、後述するステップＳ５１２にて、ユーザｊ２がユーザ乱数ｒｊ１の開封が正しいことを確認する場合には、ユーザｊ１は、ユーザ乱数ｒｊ１をユーザｊ２にも開封する
【０１８２】
その後、ゲームサーバ１０ｂは、ユーザｊ１による開封が正しいことを確認した後、ユーザ乱数ｒｊ１をユーザｊ２に送信する（ステップＳ５１１）。
【０１８３】
ユーザｊ２は、必要に応じて、受信したユーザ乱数ｒｊ１のハッシュ値が正しいこと（ユーザｊ１による封印されたユーザ乱数ｒｊ１の開封が正しいこと）を確認した後、封印されたユーザ乱数ｒｊ２をゲームサーバ１０ｂに開封する（ステップＳ５１２）。
【０１８４】
ゲームサーバ１０ｂは、ユーザｊ２による開封が正しいことを確認した後、乱数ｘｊを生成する（ステップＳ５１３）。
【０１８５】
なお、図１４、図１５に示す第２の実施形態に係る変形例において、ユーザｊ１、ｊ２（各ユーザが使用する端末２０）とゲームサーバ１０ｂの間の情報授受は、電子掲示板を介して行われてもよいことは勿論である。また、ユーザｊ１、ｊ２において行う乱数の公平性検証動作は、第２の実施形態と同様とすることができる。
【０１８６】
第１及び第２の実施形態にて説明したゲームシステムの構成（図２）は例示であって、システムの構成を限定する趣旨ではない。例えば、ゲームサーバ１０は、ゲームの遂行を担う装置と乱数の生成を担う装置（乱数生成装置）に分離されていてもよい。あるいは、ゲームサーバ１０に、ユーザのアカウント登録機能が含まれていてもよい。
【０１８７】
上記実施形態では、ゲームの進行に使用される乱数の生成は、ゲームサーバ１０と端末２０の間で閉じた処理となっているが、乱数生成の過程の一部をユーザに開放してもよい。例えば、図７のステップＳ１０７や図１３のステップＳ３０３、Ｓ３０５にて、ユーザ乱数の生成が行われるが、その際の乱数生成にユーザの選択を反映させてもよい。例えば、端末２０は、図１６に示すような乱数選択画面を液晶パネル等に表示し、ユーザのアイコン選択動作を受け付ける。図１６において、各アイコンにはランダムな数値が割り当てられている。端末２０は、ユーザが選択したアイコン（選択肢）に割り当てられた数値を利用して、ユーザ乱数を生成してもよい。例えば、端末２０は、アイコンの選択により定まるランダムな数値と、ユーザのＩＤと、現在時刻と、を連結することでユーザ乱数としてもよい。当該構成により、アイコンの選択と乱数生成をシームレスに行うことができる。なお、ユーザが乱数の生成に関与できるようにすることは、第１の実施形態だけでなく、第２の実施形態でも可能である。
【０１８８】
上記実施形態では、端末２０は、ゲームサーバ１０による乱数生成の検証を行うものとして説明したが、端末２０による乱数検証の可否をユーザが選択出来るようにしてもよい。例えば、端末２０の表示画面に「検証可能乱数の使用要否」を尋ねるメッセージと選択肢（選択ボタン）を表示し、ユーザが「検証可能乱数を使用する」ことを選択した場合に、図８を用いて説明したような乱数の検証が行われてもよい。
【０１８９】
コンピュータの記憶部に、上述したコンピュータプログラムをインストールすることにより、コンピュータを乱数生成装置として機能させることができる。さらにまた、上述したコンピュータプログラムをコンピュータに実行させることにより、コンピュータにより乱数生成方法を実行することができる。
【０１９０】
また、上述の説明で用いた複数のフローチャートでは、複数の工程（処理）が順番に記載されているが、各実施形態で実行される工程の実行順序は、その記載の順番に制限されない。各実施形態では、例えば各処理を並行して実行する等、図示される工程の順番を内容的に支障のない範囲で変更することができる。また、上述の各実施形態は、内容が相反しない範囲で組み合わせることができる。
【０１９１】
上記の実施形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限られない。
［付記１］
上述の第１の視点に係る乱数生成システムのとおりである。
［付記２］
電子掲示板を提供する、データ管理システムをさらに含み、
前記乱数生成装置は、前記封印値を前記電子掲示板に書き込み、
前記端末は、前記封印値が前記電子掲示板に書き込まれたことに応じて、前記ユーザ乱数を生成する、付記１の乱数生成システム。
［付記３］
前記乱数生成装置は、先の乱数の生成過程における中間結果を次の乱数の生成に用いる、付記２の乱数生成システム。
［付記４］
前記乱数生成装置は、前記生成された乱数を使用した後に、前記使用された乱数を前記端末に通知する、付記３の乱数生成システム。
［付記５］
前記乱数生成装置は、前記端末に対する乱数生成が不要となった後、前記初期乱数の封印を前記端末に開封する、付記４の乱数生成システム。
［付記６］
前記端末は、前記電子掲示板に書き込まれた前記初期乱数の封印値を取得し、前記取得した封印値と、前記開封された初期乱数と、前記使用された乱数として通知された乱数と、に基づき、前記乱数生成装置による乱数生成の公正性を検証する、付記５の乱数生成システム。
［付記７］
前記端末は、前記開封された初期乱数の封印値を計算し、前記計算した封印値と前記電子掲示板から取得した封印値が不一致の場合は、前記乱数生成装置による乱数生成は不公正であると判定する、付記６の乱数生成システム。
［付記８］
前記端末は、前記計算した封印値と前記電子掲示板から取得した封印値が一致し、且つ、前記使用された乱数として通知された乱数と前記開封された初期乱数と前記ユーザ乱数から生成した乱数が一致する場合に、前記乱数生成装置による乱数生成は公正であると判定する、付記７の乱数生成システム。
［付記９］
前記乱数生成装置は、
前記ユーザ乱数と前記初期乱数の連結結果について第１のハッシュ値を計算し、前記第１のハッシュ値を前記端末用の初回の乱数とし、
前記第１のハッシュ値のハッシュ値を第２のハッシュ値として生成し、前記第２のハッシュ値と前記ユーザ乱数の連結結果のハッシュ値を２回目の乱数とする、付記１乃至８のいずれか一に記載の乱数生成システム。
［付記１０］
前記端末は、前記ユーザ乱数を前記電子掲示板に書き込み、
前記乱数生成装置は、前記生成された乱数を使用した後に、前記使用された乱数を前記電子掲示板に書き込む、付記２の乱数生成システム。
［付記１１］
前記電子掲示板に書き込まれた、前記初期乱数の封印値、前記使用された乱数及び前記ユーザ乱数を用いて、前記乱数生成装置による乱数生成の公正性を検証する、検証装置をさらに含む、付記１０の乱数生成システム。
［付記１２］
複数の前記端末を含み、
前記乱数生成装置は、前記複数の端末それぞれについて前記初期乱数を生成し、
前記複数の端末のそれぞれは、前記ユーザ乱数を生成し、
前記乱数生成装置は、少なくとも前記複数の初期乱数と前記複数のユーザ乱数に基づき、乱数を生成する、付記１乃至１１のいずれか一に記載の乱数生成システム。
［付記１３］
第１及び第２の前記端末を含み、
前記乱数生成装置は、前記第１の端末についての第１の前記初期乱数を生成し、
前記第１の端末は、第１の前記ユーザ乱数を生成すると共に、前記第１のユーザ乱数の封印値を前記乱数生成装置に送信し、
前記乱数生成装置は、前記第１のユーザ乱数の封印値を受信した後、前記第２の端末についての第２の前記初期乱数を生成すると共に、前記第１のユーザ乱数の封印値を前記第２の端末に送信し、
前記第２の端末は、前記第１のユーザ乱数の封印値を受信した後に、第２の前記ユーザ乱数を生成すると共に、前記生成された第２のユーザ乱数を前記乱数生成装置に送信し、
前記乱数生成装置は、前記第２のユーザ乱数を前記第１の端末に送信し、
前記第１の端末は、前記第２のユーザ乱数を受信した後に、前記第１のユーザ乱数の封印を前記乱数生成装置に開封し、
前記乱数生成装置は、少なくとも、前記第１及び第２の初期乱数と前記第１及び第２のユーザ乱数に基づき、乱数を生成する、付記１２の乱数生成システム。
［付記１４］
第１及び第２の前記端末を含み、
前記乱数生成装置は、前記第１の端末についての第１の前記初期乱数を生成し、
前記第１の端末は、第１の前記ユーザ乱数を生成すると共に、前記第１のユーザ乱数の封印値を前記乱数生成装置に送信し、
前記乱数生成装置は、前記第１のユーザ乱数の封印値を受信した後、前記第２の端末についての第２の前記初期乱数を生成すると共に、前記第１のユーザ乱数の封印値を前記第２の端末に送信し、
前記第２の端末は、前記第１のユーザ乱数の封印値を受信した後に、第２の前記ユーザ乱数を生成すると共に、前記生成された第２のユーザ乱数の封印値を前記乱数生成装置に送信し、
前記乱数生成装置は、前記第２のユーザ乱数の封印値を前記第１の端末に送信し、
前記第１の端末は、前記第２のユーザ乱数の封印値を受信した後に、前記第１のユーザ乱数の封印を前記乱数生成装置に開封し、
前記乱数生成装置は、前記第１のユーザ乱数の開封後、前記第１のユーザ乱数を前記第２の端末に送信し、
前記第２の端末は、前記第１のユーザ乱数を受信した後に、前記第２のユーザ乱数の封印を前記乱数生成装置に開封し、
前記乱数生成装置は、少なくとも、前記第１及び第２の初期乱数と前記第１及び第２のユーザ乱数に基づき、乱数を生成する、付記１２の乱数生成システム。
［付記１５］
前記端末は、ユーザの選択した選択肢に関連付けられた数値を利用し、前記ユーザ乱数を生成する、付記１乃至１４のいずれか一に記載の乱数生成システム。
［付記１６］
上述の第２の視点に係る乱数生成装置のとおりである。
［付記１７］
上述の第３の視点に係る乱数生成方法のとおりである。
［付記１８］
上述の第４の視点に係るプログラムのとおりである。
なお、付記１６〜１８の形態は、付記１の形態と同様に、付記２の形態〜付記１５の形態に展開することが可能である。
【０１９２】
なお、引用した上記の特許文献等の各開示は、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の全開示の枠内において種々の開示要素（各請求項の各要素、各実施形態ないし実施例の各要素、各図面の各要素等を含む）の多様な組み合わせ、ないし、選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。
【符号の説明】
【０１９３】
１０、１０ａ、１０ｂ  ゲームサーバ
１１  ＣＰＵ（Central Processing Unit）
１２  メモリ
１３  入出力インターフェイス
１４  ＮＩＣ（Network Interface Card）
２０、２０−１〜２０−ｎ、１０１  端末
３０  データ管理システム
４０、４０−１〜４０−４  管理サーバ
５０  検証装置
１０２  乱数生成装置
２０１、３０１、４０１  通信制御部
２０２、３０２、４０２  記憶部
２０３  ゲーム実行制御部
２１１  ユーザ認証部
２１２  第１の乱数生成部
２１３  第２の乱数生成部
３０３  ゲーム実行部
３１１  乱数生成部
３１２  乱数検証部
４０３  台帳管理部
４１１  ブロック生成部
４１２  ブロック検証部
【図１】
2018050973.tif 000003
【図２】
2018050973.tif 000004
【図３】
2018050973.tif 000005
【図４】
2018050973.tif 000006
【図５】
2018050973.tif 000007
【図６】
2018050973.tif 000008
【図７】
2018050973.tif 000009
【図８】
2018050973.tif 000010
【図９】
2018050973.tif 000011
【図１０】
2018050973.tif 000012
【図１１】
2018050973.tif 000013
【図１２】
2018050973.tif 000014
【図１３】
2018050973.tif 000015
【図１４】
2018050973.tif 000016
【図１５】
2018050973.tif 000017
【図１６】
2018050973.tif 000018