(57)【要約】  生成された乱数の公正性を検証可能とする乱数生成システムを提供する。乱数生成システムは、端末と、少なくとも端末が使用する乱数を生成する、乱数生成サーバと、を含む。乱数生成サーバと端末は、乱数の生成前に、乱数の生成に必要なデータを送受信する。乱数生成サーバは、少なくとも送受信されたデータに基づいて乱数を生成する。乱数の使用後に、乱数生成サーバは署名付きのサーバ検証データを、端末は署名付きのユーザ検証データを、それぞれ電子掲示板に書き込む。サーバ検証データは、乱数生成サーバが乱数の生成前から乱数の使用後までの間で少なくとも乱数の生成に必要なデータを正当に扱っているか否かを検証可能なデータである。ユーザ検証データは、端末が乱数の生成前から乱数の使用後までの間で少なくとも乱数の生成に必要なデータを正当に扱っているか否かを検証可能なデータである。
2020144864.tif 000002
【特許請求の範囲】
【請求項１】
端末と、
少なくとも前記端末が使用する乱数を生成する、乱数生成サーバと、
を含み、
前記乱数の生成前に、前記乱数生成サーバと前記端末は、前記乱数の生成に必要なデータを送受信し、
前記乱数生成サーバは少なくとも前記送受信されたデータに基づいて前記乱数を生成し、
前記乱数の使用後に、前記乱数生成サーバは署名付きのサーバ検証データを、前記端末は署名付きのユーザ検証データを、それぞれ電子掲示板に書き込み、
前記サーバ検証データは、前記乱数生成サーバが前記乱数の生成前から前記乱数の使用後までの間で少なくとも前記乱数の生成に必要なデータを正当に扱っているか否かを検証可能なデータであり、
前記ユーザ検証データは、前記端末が前記乱数の生成前から前記乱数の使用後までの間で少なくとも前記乱数の生成に必要なデータを正当に扱っているか否かを検証可能なデータである、乱数生成システム。
【請求項２】
前記乱数の生成前に、
前記乱数生成サーバはサーバ乱数を生成すると共に、前記サーバ乱数の封印値を前記端末に送信し、
前記端末はユーザ乱数を生成すると共に、前記ユーザ乱数の封印値を前記乱数生成サーバに送信し、
前記乱数生成サーバは、少なくとも前記ユーザ乱数の封印値及び前記サーバ乱数の封印値を含む情報の署名を前記端末に送信する、請求項１に記載の乱数生成システム。
【請求項３】
前記乱数生成サーバは、少なくとも前記送信されたユーザ乱数と前記サーバ乱数に基づいて前記乱数を生成すると共に、署名付きの前記生成した乱数を前記端末に送信し、
前記端末は、前記乱数の署名が正当である場合に、前記送信された乱数を使用する、請求項２に記載の乱数生成システム。
【請求項４】
前記サーバ検証データ及び前記ユーザ検証データを用いて、前記乱数の正当性を検証する、検証マシンをさらに含む、請求項１乃至３のいずれか一項に記載の乱数生成システム。
【請求項５】
前記検証マシンは、前記サーバ検証データ及び前記ユーザ検証データのそれぞれを前記電子掲示板から読み出し、
前記読み出したサーバ検証データ及び前記ユーザ検証データそれぞれの署名を検証する、請求項４に記載の乱数生成システム。
【請求項６】
前記検証マシンは、前記サーバ検証データ及び／又は前記ユーザ検証データに対し、データの生成主体が前記乱数の生成前から前記乱数の使用後までの間で少なくとも前記乱数の生成に必要なデータを正当に扱っているか否かを判定する一貫性テストを実施し、前記一貫性テストの結果に基づき、前記乱数生成サーバ又は前記端末のいずれが不正行為者であるか判定する、請求項５に記載の乱数生成システム。
【請求項７】
前記検証マシンは、
前記サーバ検証データの署名及び前記ユーザ乱数の封印値の署名のいずれか一方が正当ではない場合に、前記サーバ検証データに一貫性がないと判定し、
前記ユーザ検証データの署名、少なくとも前記サーバ乱数の封印値及び前記ユーザ乱数の封印値を含む情報の署名及び前記乱数生成サーバにより生成された乱数の署名のうち少なくとも１つが正当ではない場合に、前記ユーザ検証データに一貫性がないと判定する、請求項６に記載の乱数生成システム。
【請求項８】
前記検証マシンは、前記ユーザ検証データに一貫性がなければ前記ユーザ検証データを電子掲示板に書き込んだ端末を不正行為者と判定する、請求項７に記載の乱数生成システム。
【請求項９】
前記検証マシンは、前記サーバ検証データに一貫性がなければ前記乱数生成サーバを不正行為者と判定する、請求項８に記載の乱数生成システム。
【請求項１０】
前記検証マシンは、同一の前記乱数の使用機会に関し、
一貫性のある複数の前記サーバ検証データが存在する場合、及び、一貫性のある複数の前記ユーザ検証データが存在する場合のいずれの場合においても前記乱数生成サーバを不正行為者と判定する、請求項９に記載の乱数生成システム。
【請求項１１】
前記検証マシンは、
一貫性のある前記サーバ検証データが不存在、且つ、前記ユーザ検証データに一貫性がある場合に、前記乱数生成サーバを不正行為者と判定し、
一貫性のある前記ユーザ検証データが不存在、且つ、前記サーバ検証データに一貫性がある場合に、前記端末を不正行為者と判定する、請求項１０に記載の乱数生成システム。
【請求項１２】
前記検証マシンは、
検証対象となっている、前記サーバ検証データ及び前記ユーザ検証データが存在せず、且つ、前記検証対象となっている前記乱数の使用機会よりも後に生成された前記サーバ検証データ及び／又は前記ユーザ検証データが存在する場合に、前記乱数生成サーバを不正行為者と判定する、請求項１１に記載の乱数生成システム。
【請求項１３】
複数の前記端末のそれぞれが前記ユーザ検証データを電子掲示板に書き込んだ場合、
前記検証マシンは、
前記複数のユーザ検証データそれぞれに含まれるデータに矛盾がないか否かを検証し、矛盾がある場合には前記乱数生成サーバを不正行為者と判定する、請求項１２に記載の乱数生成システム。
【請求項１４】
前記検証マシンは、
前記ユーザ検証データと前記サーバ検証データそれぞれに含まれるデータに矛盾がないか否かを検証し、矛盾がある場合には前記乱数生成サーバを不正行為者と判定する、請求項１３に記載の乱数生成システム。
【請求項１５】
前記検証マシンは、
前記サーバ検証データ及び前記ユーザ検証データに含まれるデータを用いて前記乱数生成サーバによる乱数の生成に関する正当性を検証し、乱数の生成が不当であれば前記乱数生成サーバを不正行為者と判定する、請求項１４に記載の乱数生成システム。
【請求項１６】
端末と、
少なくとも前記端末が使用する乱数を生成する、乱数生成サーバと、
を含むシステムにおいて、
前記乱数の生成前に、前記乱数生成サーバと前記端末が、前記乱数の生成に必要なデータを送受信するステップと、
前記乱数生成サーバは少なくとも前記送受信されたデータに基づいて前記乱数を生成するステップと、
前記乱数の使用後に、前記乱数生成サーバは署名付きのサーバ検証データを、前記端末は署名付きのユーザ検証データを、それぞれ電子掲示板に書き込むステップと、
を含み、
前記サーバ検証データは、前記乱数生成サーバが前記乱数の生成前から前記乱数の使用後までの間で少なくとも前記乱数の生成に必要なデータを正当に扱っているか否かを検証可能なデータであり、
前記ユーザ検証データは、前記端末が前記乱数の生成前から前記乱数の使用後までの間で少なくとも前記乱数の生成に必要なデータを正当に扱っているか否かを検証可能なデータである、乱数生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、乱数生成システム及び乱数生成方法に関する。
【背景技術】
【０００２】
ネットワーク技術、情報処理技術の進展に伴い、ネットワークを介して種々のサービス（オンラインサービスとも称される）が提供されている。上記サービスの一例として、オンラインゲームが存在する。オンラインゲームには様々な形態が存在し、例えば、ゲームサーバがゲームの進行を担うタイプのオンラインゲーム（例えば、ロールプレイングゲーム）や、ユーザ同士が対戦するフィールドをゲームサーバが提供するタイプのオンラインゲーム（例えば、チェス等のボードゲーム）が存在する。【０００３】
また、ゲームの娯楽的要素を高める等を目的として、ゲームサーバが乱数を生成することがある（特許文献１参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１８−５０９７３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
なお、上記先行技術文献の開示を、本書に引用をもって繰り込むものとする。以下の分析は、本発明者らによってなされたものである。【０００６】
上述のように、サーバ及び少なくとも一人以上のユーザ間で利用される乱数が生成されることがある。その際、サーバが当該乱数を単独で決定すると、サーバが不正行為を行う余地を残す。具体的には、サーバ及びユーザにとって真に公正は乱数ではなく、サーバにとって都合の良い乱数が生成される可能性がある。【０００７】
このような問題に対処するため、特許文献１では、サーバとユーザのそれぞれが秘密裏にゲームに使用する乱数の種（sseed、useed）を生成する。また、サーバが生成した初期乱数（サーバ乱数）の封印値（何らかのコミットメント方式のコミットメントプロトコルによって生成された）が電子掲示板に登録される。当該電子掲示板は、ブロックチェーンの技術を基礎として構成されており、信頼性の高い掲示板である。特許文献１では、サーバが上記封印値を電子掲示板に書き込んだ後に、各ユーザはユーザ乱数をサーバに開示する。サーバは、２種類の乱数（初期乱数、ユーザ乱数）を利用して乱数を生成する。その結果、サーバによる恣意的な乱数生成が防止される。なお、特許文献１では、コミットメント方式として乱数のハッシュ値を用いた場合を例示している。この点、本願開示でも同様であり、コミットメント方式として乱数のハッシュ値を用いた場合を説明する。【０００８】
特許文献１に開示された技術では以下のような問題がある。【０００９】
第１に、特許文献１では、ブロックチェーン技術を利用した電子掲示板に情報を書き込むため、書き込まれた情報が承認されるには相応の時間（例えば、数分間）が必要となる。その結果、サーバが乱数を生成する際、ハッシュ値を電子掲示板に書き込むが、ユーザは当該書き込まれたハッシュ値を即座に読み出すことができない。そのため、サーバが電子掲示板にサーバ乱数（乱数生成の種）のハッシュ値（封印値）以外の値を電子掲示板に書き込むという不正が可能となる。【００１０】
第２に、サーバが上記不正を行った場合、第３者からは本当の不正行為者を見つけ出すことができないという問題が起きる。即ち、第３者からみれば、上記サーバの不正行為が本当にサーバによる不正行為なのか、サーバは不正行為を行っていないにも関わらず、ユーザが「サーバが不正行為を行った」と事実とは異なるでたらめを主張しているのか区別がつかない。【００１１】
本発明は、生成された乱数の公正性を検証可能とすることに寄与する、乱数生成システム及び乱数生成方法を提供することを主たる目的とする。
【課題を解決するための手段】
【００１２】
本発明乃至開示の第１の視点によれば、端末と、少なくとも前記端末が使用する乱数を生成する、乱数生成サーバと、を含み、前記乱数の生成前に、前記乱数生成サーバと前記端末は、前記乱数の生成に必要なデータを送受信し、前記乱数生成サーバは少なくとも前記送受信されたデータに基づいて前記乱数を生成し、前記乱数の使用後に、前記乱数生成サーバは署名付きのサーバ検証データを、前記端末は署名付きのユーザ検証データを、それぞれ電子掲示板に書き込み、前記サーバ検証データは、前記乱数生成サーバが前記乱数の生成前から前記乱数の使用後までの間で少なくとも前記乱数の生成に必要なデータを正当に扱っているか否かを検証可能なデータであり、前記ユーザ検証データは、前記端末が前記乱数の生成前から前記乱数の使用後までの間で少なくとも前記乱数の生成に必要なデータを正当に扱っているか否かを検証可能なデータである、乱数生成システムが提供される。【００１３】
本発明乃至開示の第２の視点によれば、端末と、少なくとも前記端末が使用する乱数を生成する、乱数生成サーバと、を含むシステムにおいて、前記乱数の生成前に、前記乱数生成サーバと前記端末が、前記乱数の生成に必要なデータを送受信するステップと、前記乱数生成サーバは少なくとも前記送受信されたデータに基づいて前記乱数を生成するステップと、前記乱数の使用後に、前記乱数生成サーバは署名付きのサーバ検証データを、前記端末は署名付きのユーザ検証データを、それぞれ電子掲示板に書き込むステップと、を含み、前記サーバ検証データは、前記乱数生成サーバが前記乱数の生成前から前記乱数の使用後までの間で少なくとも前記乱数の生成に必要なデータを正当に扱っているか否かを検証可能なデータであり、前記ユーザ検証データは、前記端末が前記乱数の生成前から前記乱数の使用後までの間で少なくとも前記乱数の生成に必要なデータを正当に扱っているか否かを検証可能なデータである、乱数生成方法が提供される。
【発明の効果】
【００１４】
本発明乃至開示の各視点によれば、生成された乱数の公正性を検証可能とすることに寄与する、乱数生成システム及び乱数生成方法が、提供される。
【図面の簡単な説明】
【００１５】
【図１】一実施形態の概要を説明するための図である。
【図２】第１の実施形態に係るゲームシステムの構成の一例を示す図である。
【図３】第１の実施形態に係るゲームシステムの動作概略の一例を示すシーケンス図である。
【図４】第１の実施形態に係るゲームサーバの処理構成の一例を示すブロック図である。
【図５】第１の実施形態に係る端末の処理構成の一例を示すブロック図である。
【図６】第１の実施形態に係る検証マシンの処理構成の一例を示すブロック図である。
【図７】第１の実施形態に係る管理サーバの処理構成の一例を示すブロック図である。
【図８】第１の実施形態に係る管理サーバが生成するブロックの一例を示す図である。
【図９】第１の実施形態に係る管理サーバの動作の一例を示すシーケンス図である。
【図１０】第１の実施形態に係るゲームシステムにおけるゲーム開始処理の動作の一例を示すシーケンス図である。
【図１１】第１の実施形態に係るゲームシステムにおけるゲーム乱数生成及び当該乱数の受け入れ動作の一例を示すシーケンス図である。
【図１２】第１の実施形態に係る検証マシンの動作の一例を示すフローチャートである。
【図１３】検証マシンによる一貫性テストの結果に基づく検証動作の一例を示すフローチャートである。
【図１４】第１の実施形態に係る検証マシンのハードウェア構成の一例を示すブロック図である。
【図１５】検証マシンによる一貫性テストの結果に基づく検証動作の一例を示すフローチャートである。
【発明を実施するための形態】
【００１６】
初めに、一実施形態の概要について説明する。なお、この概要に付記した図面参照符号は、理解を助けるための一例として各要素に便宜上付記したものであり、この概要の記載はなんらの限定を意図するものではない。また、各図におけるブロック間の接続線は、双方向及び単方向の双方を含む。一方向矢印については、主たる信号（データ）の流れを模式的に示すものであり、双方向性を排除するものではない。さらに、本願開示に示す回路図、ブロック図、内部構成図、接続図などにおいて、明示は省略するが、入力ポート及び出力ポートが各接続線の入力端及び出力端のそれぞれに存在する。入出力インターフェイスも同様である。
【００１７】
一実施形態に係る乱数生成システムは、端末１０１と、少なくとも端末１０１が使用する乱数を生成する、乱数生成サーバ１０２と、を含む（図１参照）。乱数生成サーバ１０２と端末１０１は、乱数の生成前に、乱数の生成に必要なデータを送受信する。乱数生成サーバ１０２は、少なくとも送受信されたデータに基づいて乱数を生成する。乱数の使用後に、乱数生成サーバ１０２は署名付きのサーバ検証データを、端末１０１は署名付きのユーザ検証データを、それぞれ電子掲示板に書き込む。サーバ検証データは、乱数生成サーバ１０２が乱数の生成前から乱数の使用後までの間で少なくとも乱数の生成に必要なデータを正当に扱っているか否かを検証可能なデータである。ユーザ検証データは、端末１０１が乱数の生成前から乱数の使用後までの間で少なくとも乱数の生成に必要なデータを正当に扱っているか否かを検証可能なデータである。
【００１８】
上記乱数生成システムでは、乱数の使用開始前（例えば、ゲームの開始前）に端末１０１が使用する乱数（ゲーム乱数）の生成に必要なデータを送受信する。当該乱数の生成に必要なデータには、当該乱数の生成の際に用いられる種となるサーバ乱数、ユーザ乱数が含まれる。上記乱数生成システムでは、乱数の生成前にこれらの種を予め生成し、サーバ乱数やユーザ乱数のハッシュ値を互いに送受信することでこれらの乱数の不正（改ざん等）を検知可能とする。乱数生成サーバ１０２は、乱数が必要となると、予め生成された種（サーバ乱数、ユーザ乱数）を用いて乱数（ゲーム乱数）を生成し、署名を付してユーザに配布する。乱数の生成が終了すると、乱数生成サーバ１０２と端末１０１のそれぞれは、互いに乱数に関する情報を正当に扱っていたか否かを検証可能なデータ（検証データ）を電子掲示板に登録する。このように、上記乱数生成システムでは、乱数の生成前から乱数の使用終了までの間に電子掲示板を用いることなく、互いに必要なデータの送受信を行う。そのため、特許文献１にて問題となる状況（サーバが乱数を生成する際、ハッシュ値を電子掲示板に書き込むが、ユーザは当該書き込まれたハッシュ値を即座に読み出すことができない）が発生しない。その結果、特許文献１の技術で懸念された乱数生成サーバ１０２による不正行為が防止される。また、上記乱数生成システムでは、当事者（端末１０１、乱数生成サーバ１０２）が乱数に関する情報、データを正当に扱っていたか否かを検証可能なデータを電子掲示板に書き込む。その結果、当事者だけでなく第３者が、上記検証可能なデータを解析することで、「乱数」に関する不正行為が行われたか否かを検証できる。また、当該解析により、不正行為者を特定することもできる。
【００１９】
以下に具体的な実施の形態について、図面を参照してさらに詳しく説明する。なお、各実施形態において同一構成要素には同一の符号を付し、その説明を省略する。
【００２０】
［第１の実施形態］
第１の実施形態について、図面を用いてより詳細に説明する。
【００２１】
［システム構成概略］
図２は、第１の実施形態に係るゲームシステムの構成の一例を示す図である。図２を参照すると、ゲームシステムは、ゲームサーバ１０と、複数の端末２０と、検証マシン３０と、データ管理システム４０と、を含んで構成される。ゲームサーバ１０、端末２０、検証マシン３０及びデータ管理システム４０のそれぞれは、インターネット等のネットワークを介して相互に接続されている。
【００２２】
なお、図２に示す構成は例示であって、システムの構成を限定する趣旨ではないことは勿論である。例えば、図２には２台の端末２０を図示しているが、システムには１台以上の端末が含まれていればよい。
【００２３】
ゲームシステムを例に取り第１の実施形態の説明を行うが、以下に説明する公正な乱数の生成手法や乱数に関する検証手法は、他のシステムに適用できることは勿論である。例えば、当該手法は、電子的に抽選を行う電子抽選システムの乱数生成に適用されてもよい。即ち、本願開示は、図１に示すような公正な乱数を生成する乱数生成システム、及び／又は、乱数の公平性を検証する乱数検証システムに関する。なお、乱数を使用するのは少なくとも１台以上の端末２０である。また、図２では、２台の端末２０を図示し、これらの端末２０には同じ符号を付しているが、ゲームシステムに含まれる端末２０は、後述する乱数に関する機能以外については同じ機能を有していても異なる機能を有していてもよい。
【００２４】
ゲームサーバ１０は、ユーザにオンラインゲームを提供する装置である。具体的には、ゲームサーバ１０は、ユーザを認証する処理（ログイン／ログアウト処理）、ゲーム進行に係る処理（ゲーム進行処理）等を行う。
【００２５】
第１の実施形態にて想定するオンラインゲームは、ユーザ同士が対戦するフィールドをゲームサーバ１０が提供するタイプのゲームを想定する。第１の実施形態では、上記のようなゲームとして、「バックギャモン」を例に取り公正な乱数生成手法及びその検証方法を説明する。なお、バックギャモンの詳細なルールの説明は省略するが、２人のユーザが交互にサイコロを振り、出た目の数字に応じて駒を動かすゲームである。
【００２６】
第１の実施形態に係るゲームサーバ１０は、上記サイコロの目の選択に、後述するゲーム乱数を利用する。つまり、ゲームサーバ１０は、端末２０用の乱数を生成する乱数生成サーバ（乱数生成装置）として動作する。
【００２７】
端末２０は、オンラインゲームをプレイするユーザが使用する装置である。例えば、パーソナルコンピュータやスマートフォン等の情報処理装置が、上記端末に相当する。なお、本書において、特段の釈明がなく「ユーザ」と記載した場合は、ユーザが操作する端末２０を示す。
【００２８】
検証マシン３０は、ゲームシステムにおける乱数の正当性を検証する装置である。より具体的には、検証マシン３０は、ゲームサーバ１０及び端末２０によるゲーム終了後に、上記乱数生成や乱数の使用が公正（正当）なものであったか否かを検証する。検証マシン３０は、乱数生成に不正があったのであれば、当該不正を行った主体（ゲームサーバ１０、各端末２０）を特定する。検証マシン３０のより詳細な説明は後述する。
【００２９】
データ管理システム４０は、オンラインゲームの運営会社から独立した立場の機関等が運営するシステムである。データ管理システム４０は、外部（第３者）に対し、データの書き込み及び読み出しの可能な電子掲示板を提供するシステムである。データ管理システム４０は、所謂、ブロックチェーンにより各種情報を管理する。
【００３０】
データ管理システム４０は、所定の手数料を支払うことで、どのような主体でも情報を追記できると共に、書き込まれた情報を読み出すことができ、且つ、一度書き込まれた情報は消去されたり改ざんされたりすることのない電子掲示板を提供する。より正確には、データ管理システム４０は、外部装置からは電子掲示板のように扱うことのできるデータ入出力に係るインターフェイスを提供するシステムである。なお、本願開示では、ブロックチェーン技術を用いた電子掲示板を例に取り以下の説明を行うが、電子掲示板の実現に用いる技術をブロックチェーンに限定する趣旨ではない。即ち、本願開示の「電子掲示板」はシステムに含まれるゲームサーバ１０、端末２０、検証マシン３０がデータの書き込み及びデータの閲覧を自由にでき、且つ、一度書き込んだデータを削除することが困難なデータベースであればどのようなものであってもよい。換言すれば、例えば、ブロックチェーンをベースにした分散管理台帳システムは上記要件を満たしているので本願開示の「電子掲示板」として用いる事ができる。
【００３１】
なお、以降の説明において、データ管理システム４０はゲームサーバ１０の運営会社等から独立した機関等により運営、管理されることを前提とするが、データ管理システム４０によるデータ管理の正当性が確保される場合には、ゲームサーバ１０等の運営会社が上記電子掲示板を提供してもよい。勿論、この場合には、ゲームサーバ１０等は手数料の支払いを必要とすることなく、電子掲示板を利用できる。
【００３２】
データ管理システム４０は、複数の管理サーバ５０−１〜５０−４から構成されている。図２の例示は、データ管理システム４０を構成する管理サーバの台数を４台に限定する趣旨ではない。データ管理システム４０は２台以上の管理サーバを含んで構成されていればよい。
【００３３】
データ管理システム４０をなす複数の管理サーバ５０は、図２に示すように、相互に直接接続されている。即ち、データ管理システム４０は、Ｐ２Ｐ（Peer to Peer）接続された複数の管理サーバ５０を含んで構成される。
【００３４】
データ管理システム４０では、Ｐ２Ｐ接続された複数の管理サーバ５０それぞれが、外部から受信したデータ（乱数データや売上データ等）を管理するための台帳（以下、データ管理台帳と表記する）を有する。データ管理システム４０は、当該データ管理台帳を複数の管理サーバ５０に分散して共有し、管理する。
【００３５】
以降の説明において、データ管理システム４０とその外部とのデータの授受は、データ管理システム４０と、ゲームサーバ１０及び端末２０の間に限って説明する。但し、実際には、データ管理システム４０は、汎用的な電子掲示板を広く第３者に提供するものであるため、ゲームサーバ１０等以外との間でもデータの授受が行われる。
【００３６】
また、以降の説明において、ゲームサーバ１０や端末２０が、データ管理システム４０が提供する電子掲示板にデータを書き込むことを単に「電子掲示板に書き込む」と表記する。同様に、ゲームサーバ１０や端末２０が、データ管理システム４０が提供する電子掲示板からデータを読み出すことを単に「電子掲示板から読み出す」と表記する。
【００３７】
［システム動作概略］
次に、図面を参照しつつ、第１の実施形態に係るゲームシステムの動作概略を説明する。図３は、第１の実施形態に係るゲームシステムの動作概略の一例を示すシーケンス図である。
【００３８】
ゲームサーバ１０の提供するオンラインゲームのプレイを希望するユーザは、端末２０を操作して、例えば、ゲームサーバ１０の運営会社が用意するＷＥＢ（ウェブ）ページにアクセスし、ユーザ登録（アカウント登録）を行う（ステップＳ０１）。アカウント登録を終えると、ユーザは、ゲームサーバ１０にログインするための認証情報（ユーザ名、パスワード）を取得する。
【００３９】
また、上記ユーザ名やパスワードに係る情報は、ゲームサーバ１０が参照可能となるように配置される。例えば、アカウント登録処理が終了すると上記情報がゲームサーバ１０に送信され、ゲームサーバ１０の内部記憶装置に格納される。あるいは、ゲームサーバ１０がアクセス可能なデータベースに上記情報（ユーザ名、パスワード）が格納されていてもよい。
【００４０】
ユーザは、上記取得した認証情報（ユーザ名とパスワードの組み合わせ）をゲームサーバ１０に提供して、ゲームサーバ１０にログインする（ステップＳ０２）。
【００４１】
ゲームサーバ１０は、ユーザから提供された認証情報を用いてユーザ認証を行い、正当なユーザであることが確認できた場合に、当該ユーザを受け入れる。ゲームサーバ１０は、正当なユーザに対して、ゲームのなかで各ユーザを一意に識別するためのユーザ識別子（ＩＤ；Identifier）を通知する。なお、ゲームサーバ１０のサーバ識別子ＳＩＤも予め定められており、各ユーザに通知される。
【００４２】
ゲームの開始時に、ゲームサーバ１０と端末２０は、ゲームを開始するための事前処理（ゲーム開始処理；ステップＳ０３）を実行する。具体的には、乱数の生成前に、ゲームサーバと１０と端末２０は、乱数の生成に必要なデータの送受信や、取得したデータの検証等を行う。ゲーム開始処理の詳細は後述する。
【００４３】
なお、オンラインゲームにおける、サーバ（ゲームサーバ１０）とクライアント（端末２０）の間の情報のやり取りには種々の形態が考えられるが、本願開示においてはどのような形態であってもよい。例えば、端末２０にゲーム専用のアプリケーションをインストールすることなく、ＨＴＭＬ（Hyper Text Markup Language）ソースでの汎用処理によりオンラインゲームを提供する形態であってもよいし、端末２０に専用のアプリケーションをインストールする形態であってもよい。
【００４４】
ゲームサーバ１０は、ゲームの進行中に乱数の生成が必要か否かを判定する（ステップＳ０４）。なお、以降の説明において、ゲームの進行に使用される乱数を「ゲーム乱数」と表記する。
【００４５】
ゲーム乱数の生成が必要な場合（ステップＳ０４、Ｙｅｓ分岐）、ゲームサーバ１０は乱数生成に係る処理を実行する（ステップＳ０５）。その際、ゲームサーバ１０は、少なくとも上記端末２０との間で送受信されたデータに基づいてゲーム乱数を生成し、当該生成したゲーム乱数に署名を付して各ユーザ（端末２０）に送信する。
【００４６】
各ユーザは、取得したゲーム乱数の正当性を検証し、正当であればゲームの進行に使用する（ステップＳ０６）。なお、ゲーム乱数はゲームに参加する各ユーザに共通する乱数である。即ち、同じゲームに参加している各ユーザは、同じゲーム乱数を用いてゲームを行う。ステップＳ０５、Ｓ０６に係る処理の詳細は後述する。
【００４７】
ゲームサーバ１０は、ゲーム終了のために設けられた種々の条件（例えば、タイムオーバ等の条件）を確認することで、ゲームが終了したか否かを判定する（ステップＳ０７）。
【００４８】
ゲームが続行している間（ステップＳ０７、Ｎｏ分岐）は、ゲーム乱数生成の要否が確認され（ステップＳ０４）、ゲーム乱数の生成が必要な場合には当該乱数が生成され続ける。ゲームサーバ１０は、ゲームが終了したと判定した場合（ステップＳ０７、Ｙｅｓ分岐）には、その旨を端末２０に通知する（ステップＳ０８）。
【００４９】
ゲームが終了した旨を端末２０に通知した後、ゲームサーバ１０は、ゲーム乱数に関する検証を可能とする署名付きのデータを電子掲示板に書き込む（ステップＳ０９）。ゲームサーバ１０が電子掲示板に書き込むデータを「サーバ検証データ」と表記する。サーバ検証データの詳細は後述する。
【００５０】
ゲームが終了した旨の通知を受信したユーザ（端末２０）は、ゲーム乱数に関する検証を可能とする署名付きのデータを電子掲示板に書き込む（ステップＳ１０）。端末２０が電子掲示板に書き込むデータを「ユーザ検証データ」と表記する。ユーザ検証データの詳細は後述する。
【００５１】
このように、端末２０によるゲーム乱数の使用後に、ゲームサーバ１０は署名付きのサーバ検証データを、端末２０は署名付きのユーザ検証データを、それぞれ電子掲示板に書き込む。２つの検証データが電子掲示板に書き込まれることで、ゲームの当事者（ゲームサーバ１０、端末２０）だけでなく第３者である検証マシン３０が、ゲーム乱数の生成、使用が正当であったか否かを検証可能となる。つまり、ゲームサーバ１０や端末２０が「検証マシン」として振る舞ってもよい。
【００５２】
このように、ゲームサーバ１０及び端末２０は、ゲームの終了後に検証データを電子掲示板に書き込み、検証マシン３０は、当該検証データを用いてゲーム乱数に関する検証を行う（ステップＳ１１）。検証マシン３０による検証動作の詳細は後述する。検証マシン３０は、ゲーム乱数に関する検証の結果、ゲームサーバ１０や端末２０により不正行為が存在すると判断した場合には、例えば、その旨をゲームサーバ１０の運営会社等に伝える（抗議する）等の行動を取ることができる。
【００５３】
図３に示すように、第１の実施形態に係るゲームシステムでは、ゲームの進行に必要なデータの授受はゲームサーバ１０と端末２０の間で直接、送受信される。但し、ゲームサーバ１０と端末２０におけるデータの送受信は、電子掲示板以外の他のサーバ等を経由して間接的に行われても良い。換言すれば、追記データの承認に時間を要するブロックチェーン技術を基礎とするような電子掲示板を経由せず、データの送受信が即座（リアルタイム）に完了するのであればゲームサーバ１０と端末２０の間のデータ送受信はどのような形態であってもよい。このように、第１の実施形態では、ゲームの開始からゲームの終了までの間に、ゲームサーバ１０や端末２０が電子掲示板に何らかのデータを書き込むことはない。
【００５４】
図３の説明では、端末２０によるゲームサーバ１０からのログアウトについて記載していないが、ユーザは、ゲームを続行する意思のない場合等に、ゲームサーバ１０からログアウトする。
【００５５】
［ゲームサーバ］
次に、ゲームサーバ１０の詳細について説明する。
【００５６】
図４は、第１の実施形態に係るゲームサーバ１０の処理構成の一例を示すブロック図である。図４を参照すると、ゲームサーバ１０は、通信制御部２０１と、記憶部２０２と、ゲーム実行制御部２０３と、を含んで構成される。
【００５７】
通信制御部２０１は、他の装置との間の通信を実現する手段である。通信制御部２０１は、他の装置から受信したメッセージ（パケット）を各処理モジュール部に振り分ける、又は、各処理モジュールから取得したメッセージを他の装置に送信する手段でもある。
【００５８】
記憶部２０２は、例えば、ゲーム実行制御部２０３の処理等に必要なデータを記憶する。
【００５９】
ゲーム実行制御部２０３は、ゲーム進行に関する制御、管理を担う手段である。ゲーム実行制御部２０３は、ユーザ認証部２１１、乱数管理部２１２という２つのサブモジュールを含んで構成される。
【００６０】
ユーザ認証部２１１は、ユーザがゲームサーバ１０にログインする際、又は、ゲームサーバ１０からログアウトする際に起動するサブモジュールである。なお、ユーザ認証の方式はどのようなものであっても良い。例えば、上述のようにパスワードを用いた認証方式でもよいし、ユーザの生体情報（指紋情報等）を用いた生体認証であってもよい。
【００６１】
ユーザ認証部２１１は、端末２０から提供されるデータ（被認証データ）とデータベース等に格納されたデータ（照合データ）を比較することで、端末２０を利用するユーザの認証を行う。
【００６２】
ゲーム実行制御部２０３は、ユーザ認証部２１１による認証結果に応じて、当該ユーザにオンラインゲームを提供する、又は、当該ユーザによるオンラインゲームのプレイを拒絶する。
【００６３】
乱数管理部２１２は、ゲームの進行に伴う乱数を管理するサブモジュールである。ゲームサーバ１０による乱数に関わる処理は、乱数管理部２１２により実行される。乱数管理部２１２の動作は、ゲームサーバ１０の動作として後述する。
【００６４】
［端末］
次に、端末２０の詳細について説明する。
【００６５】
図５は、第１の実施形態に係る端末２０の処理構成の一例を示すブロック図である。図５を参照すると、端末２０は、通信制御部３０１と、記憶部３０２と、ゲーム実行部３０３と、を含んで構成される。
【００６６】
通信制御部３０１は、他の装置との間の通信を実現する手段である。通信制御部３０１は、他の装置から受信したメッセージ（パケット）を各処理モジュール部に振り分ける、又は、各処理モジュールから取得したメッセージを他の装置に送信する手段でもある。
【００６７】
記憶部３０２は、例えば、ゲーム実行部３０３の処理等に必要なデータを記憶する。
【００６８】
ゲーム実行部３０３は、ユーザによるゲームプレイを実現する手段である。より具体的には、ゲーム実行部３０３は、キーボードやマウス等の入力手段によりユーザの操作を入力する。ゲーム実行部３０３は、ユーザの操作に応じた情報をゲームサーバ１０に送信する。例えば、ユーザがゲームサーバ１０にログインする場合には、認証情報（例えば、ユーザ名とパスワードの組み合わせ）がゲームサーバ１０に送信される。また、ユーザがゲームをプレイしている間は、ユーザによるキー操作等に係る情報がゲームサーバ１０に送信される。
【００６９】
ゲーム実行部３０３は、乱数管理部３１１というサブモジュールを含んで構成される。乱数管理部３１１は、ゲームの進行に伴う乱数を管理するサブモジュールである。端末２０による乱数に関わる処理は、乱数管理部３１１により実行される。乱数管理部３１１の動作は、端末２０の動作として後述する。
【００７０】
［検証マシン］
次に、検証マシン３０の詳細について説明する。
【００７１】
図６は、第１の実施形態に係る検証マシン３０の処理構成の一例を示すブロック図である。図６を参照すると、検証マシン３０は、通信制御部４０１と、記憶部４０２と、乱数検証部４０３と、を含んで構成される。
【００７２】
通信制御部４０１は、他の装置との間の通信を実現する手段である。通信制御部４０１は、他の装置から受信したメッセージ（パケット）を各処理モジュール部に振り分ける、又は、各処理モジュールから取得したメッセージを他の装置に送信する手段でもある。
【００７３】
記憶部４０２は、例えば、乱数検証部４０３の処理等に必要なデータを記憶する。
【００７４】
乱数検証部４０３は、電子掲示板に書き込まれた検証データ及びその署名を用いて、ゲーム乱数の公正性を検証する手段である。検証マシン３０による乱数の正当性に関わる処理は、乱数検証部４０３により実行される。
【００７５】
乱数検証部４０３は、一貫性検証部４１１というサブモジュールを含んで構成される。一貫性検証部４１１は、電子掲示板から取得した検証データ及びその署名に関する一貫性テストを実行する手段である。なお、一貫性検証部４１１の詳細は後述する。
【００７６】
［管理サーバ］
次に、データ管理システム４０をなす管理サーバ５０の詳細について説明する。
【００７７】
図７は、第１の実施形態に係る管理サーバ５０の処理構成の一例を示すブロック図である。図７を参照すると、管理サーバ５０は、通信制御部５０１と、記憶部５０２と、台帳管理部５０３と、を含んで構成される。
【００７８】
通信制御部５０１は、他の装置との間の通信を実現する手段である。通信制御部５０１は、他の装置から受信したメッセージ（パケット）を各処理モジュール部に振り分ける、又は、各処理モジュールから取得したメッセージを他の装置に送信する手段でもある。
【００７９】
記憶部５０２は、各処理モジュールの処理に必要な情報を記憶する手段である。記憶部５０２には、データを一時的に記憶する一時記憶領域とデータ管理台帳を記憶する領域が含まれる。
【００８０】
台帳管理部５０３は、電子掲示板へのゲームサーバ１０や端末２０からのアクセス要求を処理する手段である。具体的には、例えば、ゲームサーバ１０から電子掲示板へのサーバ検証データの書き込み要求を受け付けると、記憶部５０２に格納されているデータ管理台帳に当該データを追記する。また、台帳管理部５０３は、外部装置（例えば、検証マシン３０）から電子掲示板の読み出しに係る要求を受け付けると、当該要求に付随するトランザクションＩＤをキーとしてデータ管理台帳を検索し、当該ＩＤが付されたデータ（検証データ）を抽出する。台帳管理部５０３は、抽出した検証データを外部装置に送信する。
【００８１】
台帳管理部５０３は、ブロック生成部５１１とブロック検証部５１２の２つのサブモジュールを有する。
【００８２】
ブロック生成部５１１は、データ管理台帳を他の管理サーバ５０にて共有し、管理するためのブロックを生成する。
【００８３】
台帳管理部５０３は、ゲームサーバ１０からサーバ検証データを取得すると、当該取得したサーバ検証データを記憶部５０２の一時記憶領域に保存する。その後、ブロック生成部５１１は、直前に生成されたブロックのヘッダと、当該一時記憶領域に保存されたデータ（例えば、検証データや売上データ；データ管理台帳への追記データ）から、「正当性保証データ」を生成する。
【００８４】
例えば、ブロック生成部５１１は、追記データ、前ブロックのヘッダ及び正当性保証データのハッシュ値を計算すると、当該計算されたハッシュ値を所定の規則に適合するものにする値（所謂、ノンス値又はナンス値）を正当性保証データとして生成する。また、正当性保証データには、ブロックを生成した管理サーバ５０の電子署名が含まれる。
【００８５】
ブロック生成部５１１は、直前に生成されたブロックのヘッダと上記の正当性保証データからなるヘッダを有するブロックを生成する。具体的には、図８に示すようなブロックが生成される。
【００８６】
ブロック生成部５１１によるブロック生成が終了すると、当該ブロックはデータ管理台帳に追記される。また、ブロック生成部５１１は、生成したブロックを、通信制御部５０１を介して他の管理サーバ５０に配布（送信）する。
【００８７】
他の管理サーバ５０から上記ブロックを受信した管理サーバ５０の通信制御部５０１は、取得したブロックをブロック検証部５１２に引き渡す。
【００８８】
ブロック検証部５１２は、自装置の記憶部５０２に格納されているデータ管理台帳（ブロック）に基づき、他の管理サーバ５０が送信するブロックの正当性を検証する手段である。具体的には、ブロックを受信した管理サーバ５０のブロック検証部５１２は、当該受信したブロックの正当性を、ブロックを送信した管理サーバ５０が生成したブロックと自装置（ブロックを受信した管理サーバ５０）が管理している直前に生成されたブロックのヘッダを用いて検証する。
【００８９】
初めに、ブロック検証部５１２は、受信したブロックに含まれる正当性保証データに送信元となる管理サーバ５０の電子署名が付与されていることを確認し、受信したブロックに記載された「前ブロックのヘッダ」を自身が管理するデータ管理台帳に基づき特定する。その後、ブロック検証部５１２は、受信したブロック内の追記データと前ブロックのヘッダを入力として、ヘッダ内の正当性保証データの整合がとれているか否か（正当性保証データが所定の規則に適合するか否か）を確認する。
【００９０】
ブロック検証部５１２は、正当性保証データの整合性が確認できれば、他の管理サーバ５０が送信するブロックは正当であると判定する。一方、正当性保証データの整合性が確認できなければ、ブロック検証部５１２は、他の管理サーバ５０が送信するブロックは不当であると判定する。
【００９１】
ブロック検証部５１２が、他の管理サーバ５０が送信するブロックが正当であると判定した場合には、台帳管理部５０３は、記憶部５０２のデータ管理台帳を更新する（追記データを含むブロックを追記する）。つまり、ブロック検証部５１２は、他の管理サーバ５０の台帳へのデータの追記を、自装置の台帳に反映する処理を行う。なお、ブロック検証部５１２は、他の管理サーバ５０が送信するブロックが不当であると判定した場合には、当該ブロックを破棄する。
【００９２】
また、ブロック検証部５１２は、検証結果（受信したブロックは正当、不当）に関する情報を、ブロックを送信してきた管理サーバ５０に通知する。
【００９３】
管理サーバ５０の動作をまとめると図９に示すシーケンス図のとおりとなる。なお、図９には、管理サーバ５０−１がゲームサーバ１０からサーバ検証データを取得し、当該データをデータ管理台帳に追記する場合を示す。
【００９４】
管理サーバ５０−１は、ゲームサーバ１０からサーバ検証データを取得すると（ステップＳ１０１）、当該データを自装置の記憶部５０２の一時記憶領域に複製する（ステップＳ１０２）。
【００９５】
その後、一時記憶領域に複製されたデータが所定量蓄積される等の条件により、管理サーバ５０−１は、一時記憶領域に記憶されたデータに基づき、上述のブロックを生成する（ステップＳ１０３）。
【００９６】
その後、管理サーバ５０−１は、生成したブロックを他の管理サーバ５０−２〜５０−４に向けて送信する（ステップＳ１０４）。
【００９７】
ブロックを受信した管理サーバ５０−２〜５０−４のそれぞれは、管理サーバ５０−１が生成したブロックを個別に検証する（ステップＳ１０５）。
【００９８】
管理サーバ５０−２〜５０−４のそれぞれは、ブロックの正当性が確認できた場合に自装置のデータ管理台帳を更新する（ステップＳ１０６）。
【００９９】
このように、データ管理システム４０をなす複数の管理サーバ５０のうちの少なくとも１つの管理サーバ５０によるデータ管理台帳へのデータの追記は、他の管理サーバ５０のデータ管理台帳に反映される。
【０１００】
なお、他の管理サーバ５０から送信されたブロックの正当性が確認できない場合には、当該ブロックを破棄すると共に、管理サーバ５０はその旨を、ブロックを送信する管理サーバ５０に通知する。当該通知を受けた管理サーバ５０の台帳管理部５０３は、ブロック送信前のデータ管理台帳の状態を取り戻す。
【０１０１】
次に、図３に示すステップＳ０３の動作について説明する。
【０１０２】
上述のように、ゲームサーバ１０と端末２０は、ゲームの開始前に事前処理を行う。以下、当該事前処理（ゲーム開始処理）の詳細について説明する。
【０１０３】
図１０は、第１の実施形態に係るゲームシステムにおけるゲーム開始処理の動作の一例を示すシーケンス図である。
【０１０４】
ゲームサーバ１０は、ゲームＩＤ（gid）を生成する（ステップＳ２０１）。ゲームＩＤは、ユーザ（端末２０）が参加するゲームの識別子である。ゲームサーバ１０は、様々なユーザと複数のゲームを行う。ゲームサーバ１０は、当該複数のゲームを区別するために上記ゲームＩＤを使用する。つまり、ゲームサーバ１０は、ゲームＩＤ（gid）によりゲーム乱数の使用機会を管理する。同じゲームＩＤ（gid）はゲーム乱数の同じ使用機会（ゲーム）を意味する。即ち、本願開示において、ゲームＩＤは「乱数生成セッション」を識別する識別子として機能する（ゲームＩＤは乱数生成セッションＩＤである）。
【０１０５】
ゲームサーバ１０は、新たなゲームを開始するごとにゲームＩＤをインクリメントすることでゲームＩＤの重複を回避する。上述のように、ゲームサーバ１０は、ゲームの開始ごとにゲームＩＤをインクリメントする（下記式（１）参照）。
［式１］
2020144864.tif 000003
【０１０６】
ゲームサーバ１０は、サーバ乱数を生成する（ステップＳ２０２）。ゲームサーバ１０は、λビットの乱数をサーバ乱数sseedとして生成する（下記式（２）参照）。サーバ乱数sseedは、後述するゲーム乱数の基礎（種）となる乱数の１つである。
［式２］
2020144864.tif 000004
【０１０７】
ゲームサーバ１０は、上記サーバ乱数sseedのハッシュ値（封印値）を生成する（ステップＳ２０３）。ゲームサーバ１０は、下記の式（３）によりサーバ乱数のハッシュ値comsseedを生成する。
［式３］
2020144864.tif 000005
【０１０８】
なお、本願開示にて使用可能なハッシュ関数（Ｈａｓｈ）として、例えば、ＳＨＡ−２（Secure Hash Algorithm 2）やＫｅｃｃａｋ（ケチャック）といったハッシュ関数が利用できる。また、式（３）等で使用されるハッシュ関数の性質を鑑みれば、サーバ乱数sseed等を封印する際に利用する関数は、ハッシュ関数のみならず、コミットメント関数と呼ばれる、「データを封印（秘匿）」する機能と、「データを開封（変更されていないことを検証）」する機能があるもので代用することができる。
【０１０９】
また、以降の説明では、ゲームサーバ１０と端末２０で同じハッシュ関数を使用することを前提とする。そのため、ゲームサーバ１０と端末２０のそれぞれに使用する共通して使用するハッシュ関数を設定しておく。但し、ゲームサーバ１０と端末２０は、互いに異なるハッシュ関数を用いてもよく、この場合は、自身が使用するハッシュ関数と相手が使用するハッシュ関数の情報をゲームサーバ１０、端末２０に設定しておく。あるいは、ゲームサーバ１０と端末２０が使用するハッシュ関数に関する情報交換を行い互いに使用するハッシュ関数を通知してもよい。
【０１１０】
ここで、ゲームに参加するユーザの数をｎ（ｎは正の整数、以下同じ）とする。以下の説明では、ゲームに参加するユーザのユーザＩＤを、サフィックスｉ（ｉ＝１〜ｎ）を用いて表記する。ユーザｉに対応するユーザＩＤはＩＤｉであり、全ユーザのユーザＩＤは、（ＩＤ１、ＩＤ２、・・・、ＩＤｎ）と表記できる。
【０１１１】
ゲームサーバ１０は、ゲームＩＤ（gid）、ゲームに参加する全ユーザのＩＤ（ＩＤ１、ＩＤ２、・・・、ＩＤｎ）、上記サーバ乱数のハッシュ値comsseedをゲームに参加する各ユーザ（端末２０）に送信する（ステップＳ２０４）。各ユーザがゲームサーバ１０にログインする際に各ユーザに対して付与されたユーザＩＤが、ゲームサーバ１０から他のユーザ（端末２０）にも通知される。
【０１１２】
上記ゲームサーバ１０の動作に並行して、端末２０は、ユーザ乱数を生成する（ステップＳ３０１）。端末２０は、λビットの乱数をユーザ乱数useedとして生成する（下記式（４）参照）。 ユーザ乱数useedは、後述するゲーム乱数の基礎（種）となる乱数の１つである。
［式４］
2020144864.tif 000006
【０１１３】
各端末２０は、上記ユーザ乱数useedのハッシュ値を生成する（ステップＳ３０２）。各端末２０は、下記の式（５）によりユーザ乱数のハッシュ値comuseedを生成する。
［式５］
2020144864.tif 000007
【０１１４】
各端末２０は、上記ユーザ乱数のハッシュ値comuseedをゲームサーバ１０に送信する（ステップＳ３０３）。
【０１１５】
ゲームサーバ１０は、ゲームに参加する全てのユーザからユーザ乱数のハッシュ値comuseedi〜comuseednを取得すると、全ハッシュ値（サーバ乱数のハッシュ値comsseed、ユーザ乱数のハッシュ値comuseedi〜comuseedn）を含む情報の署名を生成する（ステップＳ２０５）。具体的には、ゲームサーバ１０は、下記の式（６）により当該署名sigidcomseedsを生成する。
［式６］
2020144864.tif 000008
【０１１６】
なお、「Ｓｉｇ」は署名を生成する関数を示す（以下、同じ）。
【０１１７】
式（６）に示すように、ゲームサーバ１０は、ゲームＩＤ（gid）、ユーザ識別子（ＩＤ１〜ＩＤｎ）、サーバ乱数のハッシュ値comsseed、ユーザ乱数のハッシュ値（comuseedi〜comuseedn）を連結し、当該連結データのハッシュ値を計算する。その後、ゲームサーバ１０は、計算したハッシュ値を自身（ゲームサーバ１０）の秘密鍵ｓｓｋで暗号化し、署名を生成する。
【０１１８】
なお、以降の説明おいて、式（６）により生成される署名を「全ハッシュ値の署名」と表記する。また、署名の生成や検証に必要な鍵（秘密鍵、公開鍵）は予め生成され、ゲームサーバ１０や端末２０に配布、公開されているものとする。
【０１１９】
ゲームサーバ１０は、全ハッシュ値の署名sigidcomseedsと、各端末２０から取得したユーザ乱数のハッシュ値comuseedi〜comuseednを各端末２０に送信する（ステップＳ２０６）。
【０１２０】
各端末２０は、全ハッシュ値の署名sigidcomseedsの検証を行う（ステップＳ３０４）。具体的には、各端末２０は、下記の式（７）によりゲームサーバ１０が生成した全ハッシュ値の署名に対応するダイジェストを生成する。
［式７］
2020144864.tif 000009
【０１２１】
なお、式（７）において、ｉｄｓは、全ユーザのユーザＩＤ（ＩＤ１、・・・、ＩＤｎ）の総称である（ｉｄｓ ←（ＩＤ１、・・・、ＩＤｎ））。また、comseedsは、サーバ乱数のハッシュ値、ユーザ乱数のハッシュ値の総称である（comseeds ←（comsseed、comuseedi、・・・、comuseedn））。
【０１２２】
次に、各端末２０は、全ハッシュ値の署名sigidcomseedsをゲームサーバ１０の公開鍵ｓｐｋを用いて復号する（ダイジェストを生成する）。各端末２０は、上記生成したダイジェストと復号したダイジェストを比較し、両者が一致するか否かにより全ハッシュ値sigidcomseedsの署名を検証する。上記検証の動作をまとめると、下記の式（８）のとおりとなる。
［式８］
2020144864.tif 000010
【０１２３】
なお、「Ｖｅｒ」は署名を検証する関数を示す（以下、同じ）。
【０１２４】
署名が不当であれば（ステップＳ３０５、Ｎｏ分岐）、各端末２０は、ゲームを終了（中断）する。
【０１２５】
署名が正当であれば（ステップＳ３０５、Ｙｅｓ分岐）、各端末２０は、先に生成したユーザ乱数useedの署名を生成する（ステップＳ３０６）。具体的には、各端末２０は、下記の式（９）によりユーザ乱数の署名siguseedを生成する。
［式９］
2020144864.tif 000011
【０１２６】
なお、式（９）において、ｕｓｋｉは、ユーザｉの秘密鍵である。各端末２０は、自身のユーザ乱数と対応する署名（ユーザ乱数の署名siguseed）をゲームサーバ１０に送信する（ステップＳ３０７）。
【０１２７】
このように、ユーザ（端末２０）が、全ハッシュ値の署名sigidcomseedsの検証を行うことで、ユーザは、少なくともサーバ乱数のハッシュ値comsseedと自身のユーザ乱数のハッシュ値comuseedが用いられて全ハッシュ値の署名が生成されていることが確認できる。
【０１２８】
ゲームサーバ１０は、全ユーザ（端末２０）からユーザ乱数等を取得すると、２つの検証を行う（ステップＳ２０７、Ｓ２０８）。
【０１２９】
はじめに、ゲームサーバ１０は、各ユーザについて、取得したユーザ乱数の署名siguseedの検証を行う（ステップＳ２０７）。具体的には、ゲームサーバ１０は、下記の式（１０）によりユーザ乱数の署名を検証する。
［式１０］
2020144864.tif 000012
【０１３０】
式（１０）において、ｕｐｋkは、ユーザkの公開鍵である（ｋ＝１〜ｎ）。
【０１３１】
次に、ゲームサーバ１０は、各端末２０からステップＳ３０３にて取得したユーザ乱数のハッシュ値comuseedと、ステップＳ３０７にて取得したユーザ乱数useedから生成したハッシュ値（Hash(useed)）と、が一致するか否かによりユーザ乱数の検証を行う（ステップＳ２０８）。具体的には、ゲームサーバ１０は、下記の式（１１）によりユーザ乱数を検証する。
［式１１］
2020144864.tif 000013
【０１３２】
ゲームサーバ１０は、ユーザ乱数のハッシュ値comuseedとユーザ乱数useedから生成したハッシュ値（Hash(useed)）が一致すれば、ユーザ乱数は「正当」と判定する。対して、ゲームサーバ１０は、ユーザ乱数のハッシュ値comuseedとユーザ乱数useedから生成したハッシュ値（Hash(useed)）が不一致であれば、ユーザ乱数は「不当」と判定する。
【０１３３】
ゲームサーバ１０は、２つの検証において共に「正当」の結果が得られない場合（ステップＳ２０９、Ｎｏ分岐）、ゲームを終了（中断）する。つまり、ゲームサーバ１０は、全ユーザ（ユーザＩＤ１〜ユーザＩＤｎ）のうちいずれかのユーザであるユーザｋの署名が不当であり、且つ、ユーザ乱数及びそのハッシュ値が不整合であれば、ゲームを停止する。
【０１３４】
ゲームサーバ１０は、２つの検証において共に「正当」の結果が得られた場合（ステップＳ２０９、Ｙｅｓ分岐）、ゲーム開始処理（ゲームの開始に先立つ事前処理）を終了し、ゲームを開始する。
【０１３５】
このように、ゲームシステムでは、ゲーム乱数の生成前に、ゲームサーバ１０がサーバ乱数を生成すると共に、サーバ乱数の封印値を端末２０に送信する。また、端末２０はユーザ乱数を生成すると共に、ユーザ乱数の封印値をゲームサーバ１０に送信する。さらに、ゲームサーバ１０は、少なくともユーザ乱数の封印値及びサーバ乱数の封印値を含む情報の署名（全ハッシュ値の署名）を端末２０に送信する。端末２０は、当該署名の検証に成功すると、署名付きのユーザ乱数をゲームサーバ１０に送信する。ゲームサーバ１０は、ユーザ乱数の署名を検証しユーザ乱数の送信主体の正当性を確認する。また、ゲームサーバ１０は、取得したユーザ乱数からハッシュ値を計算し、先に取得した対応するハッシュ値と比較することでユーザが当初に生成したユーザ乱数（図１０のステップＳ３０１で生成された乱数）が改ざんされていないことを確認する。
【０１３６】
続いて、図３に示すステップＳ０５、Ｓ０６の動作について説明する。上述のように、ゲームサーバ１０は、ゲームの進行と共にゲーム乱数を生成する。当該ゲーム乱数は、各端末２０にて使用される。以下、ゲームサーバ１０によるゲーム乱数の生成と端末２０によるゲーム乱数の受け入れについて説明する。
【０１３７】
図１１は、第１の実施形態に係るゲームシステムにおけるゲーム乱数生成及び当該乱数の受け入れ動作の一例を示すシーケンス図である。
【０１３８】
ゲームサーバ１０は、同一のゲームＩＤ（gid）におけるｊ番目（ｊは正の整数、以下同じ）のゲーム乱数ｒ［ｊ］を下記の式（１２）により生成する（ステップＳ４０１）。
［式１２］
2020144864.tif 000014
【０１３９】
次に、ゲームサーバ１０は、生成したゲーム乱数ｒ［ｊ］の署名を下記の式（１３）により生成する（ステップＳ４０２）。
［式１３］
2020144864.tif 000015
【０１４０】
ゲームサーバ１０は、ゲームＩＤ（gid）、ゲーム乱数の序数（ｊ）、ゲーム乱数（ｒ［ｊ］）を連結し、当該連結データのハッシュ値を自身の秘密鍵ｓｓｋで暗号化することで、ゲーム乱数ｒ［ｊ］の署名ｓｓｉｇｒ［ｊ］を生成する。
【０１４１】
ゲームサーバ１０は、ゲームＩＤ（gid）、ゲーム乱数ｒ［ｊ］、ゲーム乱数の署名ｓｓｉｇｒ［ｊ］を各端末２０に送信する（ステップＳ４０３）。
【０１４２】
各端末２０は、取得したゲーム乱数の署名を検証する（ステップＳ５０１）。具体的には、各端末２０は、下記の式（１４）によりゲーム乱数ｒ［ｊ］の署名を検証する。
［式１４］
2020144864.tif 000016
【０１４３】
署名が正当でなければ（ステップＳ５０２、Ｎｏ分岐）、各端末２０はゲームを終了する。署名が正当であれば（ステップＳ５０２、Ｙｅｓ分岐）、各端末２０はゲーム乱数ｒ［ｊ］を使用する（ステップＳ５０３）。
【０１４４】
このように、ゲームサーバ１０は、少なくとも送信されたユーザ乱数とサーバ乱数に基づいてゲーム乱数を生成すると共に、署名付きのゲーム乱数を端末に送信する。端末２０は、ゲーム乱数の署名が正当である場合に、送信されたゲーム乱数を使用する。端末２０は、ゲーム乱数ｒ［ｊ］の署名を検証することで、当該乱数が改ざんされていないこと、当該乱数の送信主体が正当であること、を検証する。
【０１４５】
続いて、図３に示すステップＳ０９やステップＳ１０にて電子掲示板（データ管理システム４０）に書き込まれるデータについて説明する。
【０１４６】
ゲームサーバ１０は、下記の式（１５）により表現されるサーバ検証データsoutputを生成する。
［式１５］
2020144864.tif 000017
【０１４７】
式（１５）を参照すると、サーバ検証データsoutputには、ゲームＩＤ（gid）と、サーバＩＤ（ＳＩＤ）と、サーバ乱数sseedと、ユーザ乱数useedk及び対応する署名siguseedk（但し、ｋ∈｛1、・・・ｎ｝）が含まれる。
【０１４８】
また、ゲームサーバ１０は、下記の式（１６）によりサーバ検証データsoutputの署名sigsoutputを生成する。
［式１６］
2020144864.tif 000018
【０１４９】
各端末２０は、下記の式（１７）により表現されるユーザ検証データuoutputを生成する。
［式１７］
2020144864.tif 000019
【０１５０】
式（１７）を参照すると、ユーザ検証データuoutputには、ゲームＩＤ（gid）と、自身のユーザＩＤ（ＩＤi）と、自身のユーザＩＤを含む全ユーザＩＤ（ＩＤ１・・・ＩＤｎ）と、全ハッシュ値comseedsと、全ハッシュ値の署名sigidcomseedsと、ゲーム乱数ｒ［ｊ］及び対応する署名ｓｓｉｇｒ［ｊ］（但し、ｊ∈｛1、・・・、max｝）が含まれる。式（１７）に記載した「ｍａｘ」は、ゲームサーバ１０が一回のゲーム（同一のゲームＩＤ）で生成したゲーム乱数の数である。
【０１５１】
また、各端末２０は、下記の式（１８）によりユーザ検証データuoutputの署名siguoutputを生成する。
［式１８］
2020144864.tif 000020
【０１５２】
サーバ検証データ及びその署名とユーザ検証データ及びその署名は、ゲームが終了するとデータ管理システム４０に書き込まれる（図１０のステップＳ０９、ステップＳ１０）。
【０１５３】
次に、検証マシン３０の動作について説明する。
【０１５４】
検証マシン３０は、ゲームシステムおける乱数生成が公正に行われたのか否かを判定する。また、検証マシン３０は、乱数生成に不正があったのであれば、当該不正を行った主体（ゲームサーバ１０、各端末２０）を特定する。具体的には、検証マシン３０は、図１２に示すように、５段階の検証によりゲームシステムにおける乱数生成が公正であったか否かを判定する。
【０１５５】
以下、図１２に示す５段階の検証を中心に検証マシン３０の動作についてその詳細を説明する。
【０１５６】
［検証データの読み出し］
検証マシン３０は、ゲーム乱数を検証する際、電子掲示板から検証対象となる検証データ及びその署名を読み出す。具体的には、検証マシン３０は、検証の対象となるゲームＩＤ（gid）を有するサーバ検証データ及び対応する署名、ユーザ検証データ及び対応する署名のそれぞれを電子掲示板から読み出す。検証マシン３０は、当該読み出したデータに基づき乱数生成における不正の有無と、不正があった場合のその行為者（不正行為者）を特定する。なお、検証対象となるゲームＩＤ（gid）は、例えば、システム管理者が検証マシン３０に入力する。
【０１５７】
［検証データの署名の検証］
検証マシン３０は、上記読み出した検証データ（サーバ検証データ、ユーザ検証データ）に対応する署名の検証を行う（図１２のステップＳ１１）。
【０１５８】
検証マシン３０は、当該署名の検証を行うことで、ゲームの参加者（当事者）以外の第３者が電子掲示板に書き込んだ検証データを排除する。例えば、検証マシン３０は、検証データの署名を検証することで、ゲームサーバ１０になりすました第３者が書き込んだサーバ検証データのような不正なデータを排除する。
【０１５９】
［一貫性テストに基づく検証］
検証マシン３０は、検証データ及びその署名を用いて、一貫性テストの結果に基づく検証を行う（図１２のステップＳ１２）。
【０１６０】
一貫性テストとは、検証データ（サーバ検証データ、ユーザ検証データ）の生成主体が乱数の生成前から乱数の使用後までの間で乱数の生成に必要なデータを正当に扱っているか否かを判定するテストである。換言すれば、一貫性テストは、ゲームサーバ１０や端末２０が、ゲーム乱数の生成、検証に関し、必要なデータ（例えば、ユーザ乱数、サーバ乱数、全ハッシュ値の署名等）の取り扱いに関して一貫性を有しているか否かを判定するテストである。即ち、ゲーム開始時、ゲーム中（ゲーム乱数生成時）、ゲーム終了時の各ステージにおいて、ゲーム乱数に関するデータの取り扱いが一貫している（ステージによって取り扱いを変えない、又は、意図的にデータを入れ替えない）ことを検証するためのテストが一貫性テストである。
【０１６１】
図１３は、検証マシン３０による一貫性テストの結果に基づく検証動作の一例を示すフローチャートである。ゲーム乱数に不正が行われた場合、検証マシン３０は、一貫性テストの結果に基づき、ゲームサーバ１０又は端末２０のいずれが不正行為者であるか判定する。即ち、検証マシン３０は、一貫性テストに失敗した場合にゲーム乱数に関して何らかの不正が存在すると判断し、不正行為者を特定する。
【０１６２】
はじめに、検証マシン３０は、ユーザ検証データの一貫性の有無を確認する（ステップＳ６０１）。具体的には、検証マシン３０は、電子掲示板から取得した各ユーザ検証データ及び対応する署名のそれぞれを入力パラメータとし、一貫性検証部４１１を起動する。一貫性検証部４１１は、取得したユーザ検証データ及びその署名の一貫性を判定し、その結果（一貫性あり、一貫性なし）を出力する。
【０１６３】
一貫性検証部４１１は、３つの署名（ユーザ検証データuoutputの署名siguoutput、全ハッシュ値の署名sigidcomseeds及びゲーム乱数の署名ssigr[j]）が全て正当であれば、判定対象のユーザ検証データは「一貫性あり」と判定する。対して、一貫性検証部４１１は、上記３つの署名のうち少なくとも１つが不当であれば、判定対象のユーザ検証データは「一貫性なし」と判定する。
【０１６４】
上記全ハッシュ値の署名sigidcomseeds及びゲーム乱数の署名ssigr[j]は、一貫性検証対象のユーザ検証データuoutputに含まれる署名である。
【０１６５】
ここで、実際には、一貫性テストの結果に基づく検証（図１２のステップＳ１２）の前に、ユーザ検証データの署名が検証（同図のステップＳ１１）されているので、ユーザ検証データの署名は正当であることが確認されている。従って、実質的には、一貫性検証部４１１は、署名の正当性が検証されたユーザ検証データuoutputに含まれる２つの署名（全ハッシュ値の署名sigidcomseeds、ゲーム乱数の署名ssigr[j]）のそれぞれが正当であれば「一貫性あり」と判定し、いずれかの署名が不当であれば「一貫性なし」と判定する。
【０１６６】
検証マシン３０は、ユーザ検証データに一貫性がなければ、当該ユーザ検証データを電子掲示板に書き込んだユーザ（端末２０）が不正行為者であると判定する（ステップＳ６０１、Ｎｏ分岐）。
【０１６７】
その理由は、以下のとおりである。全ハッシュ値の署名sigidcomseedsは、ゲーム開始処理にてその正当性が検証されている（図１０のステップＳ３０５）。また、ゲーム乱数の署名ssigr[j]は、ゲーム中にその正当性が検証されている（図１１のステップＳ５０２）。いずれの検証においても署名が「不当」であれば、ゲームは中断され、本来、ユーザ検証データuoutputが電子掲示板に書き込まれることがない。
【０１６８】
従って、不当な署名がユーザ検証データuoutputに含まれたという事実は、当該ユーザ検証データを作成したユーザが必要な検証（図１０のステップＳ３０５、図１１のステップＳ５０２）を怠ったか、意図的に正当な署名を不当な署名に入れ替えたことを意味する。即ち、ユーザ検証データに一貫性がなければ、ユーザが不正行為者となる。
【０１６９】
次に、検証マシン３０は、サーバ検証データの一貫性の有無を確認する（ステップＳ６０１、Ｙｅｓ分岐；ステップＳ６０２）。
【０１７０】
具体的には、検証マシン３０は、電子掲示板から取得したサーバ検証データ及び対応する署名のそれぞれを入力パラメータとし、一貫性検証部４１１を起動する。一貫性検証部４１１は、取得したサーバ検証データ及びその署名の一貫性を判定しその結果（一貫性あり、一貫性なし）を出力する。
【０１７１】
一貫性検証部４１１は、２つの署名（サーバ検証データsoutputの署名sigsoutput、各ユーザに関するユーザ乱数のハッシュ値の署名siguseedi）が正当である場合に、判定対象のサーバ検証データは「一貫性あり」と判定する。
【０１７２】
対して、一貫性検証部４１１は、上記２つの署名のいずれかが不当な場合に、判定対象のサーバ検証データは「一貫性なし」と判定する。
【０１７３】
なお、上記各ユーザに関するユーザ乱数のハッシュ値の署名siguseedは、一貫性テストの対象となっているサーバ検証データsoutputに含まれる署名である。
【０１７４】
ここで、実際には、一貫性テストに基づく検証（図１２のステップＳ１２）の前に、サーバ検証データの署名が検証（同図のステップＳ１１）されているので、サーバ検証データの署名は正当であることが確認されている。従って、実質的には、一貫性検証部４１１は、署名の正当性が検証されたサーバ検証データsoutputに含まれるユーザ乱数の署名siguseedが正当であれば、「一貫性あり」と判定する。
【０１７５】
検証マシン３０は、サーバ検証データに一貫性がなければ、サーバ検証データを電子掲示板に書き込んだゲームサーバ１０が不正行為者であると判定する（ステップＳ６０２、Ｎｏ分岐）。
【０１７６】
その理由は、以下のとおりである。ユーザ乱数の署名siguseedは、ゲーム開始処理にてゲームサーバ１０が正当性を検証する署名である（図１０のステップＳ２０７）。当該署名が不当であれば、ゲームは中断する（ステップＳ２０９、Ｎｏ分岐）。従って、ゲームが続き当該ゲームが終了した際に生成されたサーバ検証データsoutputに含まれるユーザ乱数の署名siguseedが不当であることは、ゲームサーバ１０が当該署名の検証を怠っているか、当該署名を生成時の署名から別の署名に入れ替えていることを意味する。即ち、サーバ検証データに一貫性がなければ、ゲームサーバ１０が不正行為者となる。
【０１７７】
次に、検証マシン３０は、一貫性のあるサーバ検証データが複数存在するか否かを判定する（ステップＳ６０２、Ｙｅｓ分岐；ステップＳ６０３）。
【０１７８】
具体的には、検証マシン３０は、同じゲームＩＤ（gid）とサーバＩＤ（sid）を持つ複数のサーバ検証データsoutputが電子掲示板に書き込まれていたか否かを判定する。同じゲームＩＤ（gid）とサーバＩＤ（sid）を持つ複数のサーバ検証データsoutputが電子掲示板に書き込まれていれば、検証マシン３０は、ゲームサーバ１０が不正行為者であると判定する。
【０１７９】
本来、ゲームＩＤ（gid）は、ゲーム開始時処理にその値がインクリメントされ（図１０のステップＳ２０１）、ゲームが異なると異なるゲームＩＤ（gid）が付与される。また、一回のゲームが終了すると１個のサーバ検証データsoutputが電子掲示板に書き込まれるのが原則である。
【０１８０】
従って、同じゲームＩＤ（gid）を含む複数のサーバ検証データsoutputが電子掲示板に書き込まれたという事実は、ゲームサーバ１０が適切にゲームＩＤ（gid）を管理、使用していないことを示す。そのため、検証マシン３０は、ゲームサーバ１０が不正行為者であると判定する（ステップＳ６０３、Ｎｏ分岐）。
【０１８１】
次に、検証マシン３０は、同一のユーザに関して一貫性のあるユーザ検証データが複数存在するか否かを判定する（ステップＳ６０３、Ｙｅｓ分岐；ステップＳ６０４）。
【０１８２】
具体的には、検証マシン３０は、同じゲームＩＤ（gid）とユーザＩＤを持つ複数のユーザ検証データuoutputが電子掲示板に書き込まれていたか否かを判定する。同じゲームＩＤ（gid）と同じユーザＩＤを持つ複数のユーザ検証データuoutputが電子掲示板に書き込まれていれば、検証マシン３０は、ゲームサーバ１０が不正行為者であると判定する（ステップＳ６０４、Ｎｏ分岐）。
【０１８３】
サーバ検証データと同様に、ユーザ検証データに関しても同一のユーザに関して１つのユーザ検証データが電子掲示板に書き込まれるのが原則である。ここで、ゲームＩＤ（gid）を決定しているのは、ゲームサーバ１０である。従って、上記状況（同じゲームＩＤ（gid）とユーザＩＤを持つ複数のユーザ検証データuoutputが存在）を作り出しているのはゲームサーバ１０である。即ち、ゲームＩＤ（gid）を管理しているのはゲームサーバ１０であるので、同一ユーザに関する、ゲームＩＤ（gid）が重複する複数のユーザ検証データが存在すれば、ゲームサーバ１０が不正行為者となる。
【０１８４】
このように、検証マシン３０は、同一の前記乱数の使用機会（同じゲームＩＤ）に関し、一貫性のある複数のサーバ検証データが存在する場合（ステップＳ６０３）、及び、一貫性のある複数のユーザ検証データが存在する場合（ステップＳ６０４）のいずれの場合においてもゲームサーバ１０を不正行為者と判定する。
【０１８５】
次に、検証マシン３０は、一貫性のあるサーバ検証データが電子掲示板に不存在、且つ、各ユーザのユーザ検証データには一貫性があるか否かを判定する（ステップＳ６０５）。
【０１８６】
具体的には、指定されたゲームＩＤ（gid）を持つサーバ検証データが電子掲示板から取得できないが、当該ゲームＩＤ（gid）を持つユーザ検証データが電子掲示板から取得できるような状況が上記判定の対象である。
【０１８７】
この場合、検証マシン３０は、ゲームサーバ１０が不正行為者であると判定する（ステップＳ６０５、Ｎｏ分岐）。ゲームサーバ１０は、ゲーム終了の際に、一貫性のあるサーバ検証データを電子掲示板に書き込む義務がある。従って、一貫性のあるサーバ検証データが電子掲示板から得られないという事実は、ゲームサーバ１０が義務に反した不正行為者であることを示す。なお、一貫性のあるユーザ検証データは電子掲示板に書き込まれているので、ゲームは正常に終了していることを意味する（図３のステップＳ０８）。
【０１８８】
次に、検証マシン３０は、一貫性のあるユーザ検証データが電子掲示板に不存在、且つ、サーバ検証データには一貫性があるか否かを判定する（ステップＳ６０５、Ｙｅｓ分岐；ステップＳ６０６）。
【０１８９】
具体的には、指定されたゲームＩＤ（gid）を持つ、ゲームに参加した全ユーザのうち少なくとも１以上のユーザ検証データが電子掲示板から取得できず、当該ゲームＩＤ（gid）を持つサーバ検証データが電子掲示板から取得できるような状況が上記判定の対象である。
【０１９０】
例えば、ゲームに参加したユーザの数が１０（ｎ＝１０）である場合を考える。この場合、１０個の一貫性のあるユーザ検証データと１個の一貫性のあるサーバ検証データが電子掲示板に書き込まれている必要がある。しかし、サーバ検証データに問題はないが、例えば、９個の一貫性のあるユーザ検証データしか電子掲示板から得られないような状況が上記判定の対象となる。
【０１９１】
なお、ゲームに参加したユーザの数は、サーバ検証データsoutputに含まれるユーザ乱数useedi及びその署名siguseediの組み合わせの数から得られる。
【０１９２】
上記状況に該当すれば、検証マシン３０は、一貫性のあるユーザ検証データを電子掲示板に書き込んでいないユーザを不正行為者とする（ステップＳ６０６、Ｎｏ分岐）。ユーザは、ゲーム終了の際に、一貫性のあるユーザ検証データを電子掲示板に書き込む義務がある。従って、一貫性のあるユーザ検証データが電子掲示板から得られないという事実は、当該ユーザが義務に反した不正行為者であることを示す。
【０１９３】
次に、検証マシン３０は、指定されたゲームＩＤ（gid）を含む検証データ（サーバ検証データ、ユーザ検証データ）を電子掲示板から取得することができないが、当該指定されたゲームＩＤ（gid）よりも値の大きい検証データを持つ検証データが電子掲示板に書き込まれているか否かを判定する（ステップＳ６０６、Ｙｅｓ分岐；ステップＳ６０７）。
【０１９４】
この場合、ゲームサーバ１０が不正行為者となる。上述のように、ゲームＩＤ（gid）を管理するのはゲームサーバ１０である。また、ゲームサーバ１０は、新たなゲームを開始する度に、直前のゲームにて使用していたゲームＩＤ（gid）をインクリメントして当該新たなゲーム用のゲームＩＤ（gid）を生成する。
【０１９５】
従って、検証対象となるゲームＩＤ（gid）よりも値の大きいゲームＩＤ（gid）を含む検証データが電子掲示板に書き込まれていれば、ゲームサーバ１０はゲームＩＤ（gid）を適切に管理していないことになる。よって、ゲームサーバ１０が不正行為者と判定される。
【０１９６】
このように、検証対象となっている、サーバ検証データ及びユーザ検証データが存在せず、且つ、検証対象となっている乱数の使用機会よりも後に生成されたサーバ検証データ、ユーザ検証データが存在する場合、検証マシン３０は、ゲームサーバ１０を不正行為者と判定する。
【０１９７】
［ユーザ間の検証データに関する検証］
図１２に示すように、一貫性テストに基づく検証が終了すると、検証マシン３０は、各ユーザにより電子掲示板に書き込まれたユーザ検証データ間の検証を行う（ステップＳ１３）。
【０１９８】
具体的には、検証マシン３０は、ユーザｐが電子掲示板に書き込んだユーザ検証データuoutputpとユーザｑが電子掲示板に書き込んだユーザ検証データuoutputqの間に矛盾がないか否かを検証する。
【０１９９】
なお、以降の説明において、特定のユーザが電子掲示板に書き込んだユーザ検証データの各要素を示す場合に、当該ユーザのＩＤにユーザを特定するサフィックスを付し、ピリオドの後に続けて要素を表記するものとする。例えば、ユーザｑのユーザ検証データuoutputqの全ハッシュ値comseedsは、IDq.comseedsと表記する。
【０２００】
また、ゲームサーバ１０が電子掲示板に書き込んだサーバ検証データの各要素は、サーバＩＤ（ＳＩＤ）と各要素をピリオドで連結することで表記する。例えば、ゲームサーバ１０のサーバ検証データsoutputのサーバ乱数sseedは、SID.sseedと表記する。
【０２０１】
検証マシン３０は、各ユーザが電子掲示板に書き込んだユーザ検証データuoutputに矛盾がないか否かを下記の式（１９）により検証する。
［式１９］
2020144864.tif 000021
【０２０２】
検証マシン３０は、上記式（１９）の左辺と右辺が一致すれば、各ユーザが電子掲示板に書き込んだユーザ検証データuoutputに矛盾がないと判定する。検証マシン３０は、上記式（１９）の左辺と右辺が一致しなければ、各ユーザが電子掲示板に書き込んだユーザ検証データuoutputに矛盾があると判定する。
【０２０３】
式（１９）を参照すると、各ユーザのユーザ検証データに含まれる、ユーザＩＤ及びサーバ乱数のハッシュ値comsseedが一致するか否かが判定されている。各ユーザが電子掲示板に書き込んだユーザ検証データに矛盾があれば、検証マシン３０は、ゲームサーバ１０が不正行為者であると判断する。
【０２０４】
本来、ゲームサーバ１０は、ゲームに参加している全ユーザに同じデータを送信する義務がある。従って、各ユーザのユーザ検証データに矛盾が存在すれば、ゲームサーバ１０がユーザごとに異なるデータを送信していることを意味する。即ち、ゲームサーバ１０は、各ユーザに対して、所謂、「ビサンチン攻撃」を行っていることになる。即ち、検証マシン３０は、複数のユーザ検証データそれぞれに含まれるデータに矛盾がないか否かを検証し、矛盾がある場合にはゲームサーバ１０を不正行為者と判定する。
【０２０５】
［サーバとユーザ間の検証データに関する検証］
続いて、検証マシン３０による「サーバとユーザ間の検証データに関する検証」を説明する（図１２のステップＳ１４）。検証マシン３０は、サーバ検証データsoutputと各ユーザのユーザ検証データuoutputの間に矛盾がないかを検証する。
【０２０６】
具体的には、検証マシン３０は、サーバ検証データsoutputとユーザ検証データuoutput間の矛盾がないか否かを下記の式（２０）により検証する。
［式２０］
2020144864.tif 000022
【０２０７】
検証マシン３０は、上記式（２０）の左辺と右辺が一致すれば、サーバ検証データとユーザ検証データの間の矛盾がないと判定する。検証マシン３０は、上記式（２０）の左辺と右辺が一致しなければ、サーバ検証データとユーザ検証データの間の矛盾があると判定する。
【０２０８】
式（２０）を参照すると、各ユーザ検証データに含まれる乱数（サーバ乱数、ユーザ乱数）のハッシュ値とサーバ検証データに含まれる乱数（サーバ乱数、ユーザ乱数）から生成されるハッシュ値が一致するか否かが判定される。
【０２０９】
ここで、ユーザ検証データには全ハッシュ値の署名sigidcomseeds含まれ、当該署名はユーザ検証データの一貫性テストの結果から正当であることが保証されている。従って、ユーザ検証データに含まれる乱数のハッシュ値と、サーバ検証データに含まれる乱数から生成したハッシュ値が一致しないのであれば、ゲームサーバ１０が全ハッシュ値comseedsの署名生成に用いた乱数とは異なる乱数をサーバ検証データとして電子掲示板に書き込んだことを意味する。よって、ゲームサーバ１０が不正行為者となる。
【０２１０】
このように、検証マシン３０は、ユーザ検証データとサーバ検証データそれぞれに含まれるデータに矛盾がないか否かを検証し、矛盾がある場合にはゲームサーバ１０を不正行為者と判定する。
【０２１１】
［ゲームサーバによる乱数生成の検証］
続いて、検証マシン３０による「ゲームサーバによる乱数生成の検証」を説明する（図１２のステップＳ１５）。検証マシン３０は、同一のゲーム中に生成された各ゲーム乱数ｒ［ｊ］であって、各ユーザ検証データuoutputに含まれるゲーム乱数ｒ［ｊ］が、サーバ検証データに含まれる乱数（サーバ乱数、ユーザ乱数）から生成されるゲーム乱数に一致するか否かを検証する。
【０２１２】
具体的には、検証マシン３０は、下記の式（２１）により上記検証を行う。
［式２１］
2020144864.tif 000023
【０２１３】
検証マシン３０は、上記式（２１）の左辺と右辺が一致すれば、ゲームサーバ１０による乱数生成は正当であると判定する。検証マシン３０は、上記式（２１）の左辺と右辺が一致しなければ、ゲームサーバ１０による乱数生成は不当であると判定する。
【０２１４】
ここで、各ユーザ検証データに含まれるゲーム乱数の署名ssigr[j]やサーバ検証データに含まれるユーザ乱数の署名siguseedの正当性は２つの検証データの一貫性テストにより正当であることが保証されている。従って、各ユーザに提供されたゲーム乱数ｒ［ｊ］が、ゲーム開始時に生成された乱数（サーバ乱数、ユーザ乱数）から生成されるゲーム乱数ｒ［ｊ］に一致しないのであれば、ゲームサーバ１０がハッシュ値や乱数の署名を検証していないか、意図的にこれらのデータを置換していることを示す。よって、ゲームサーバ１０が不正行為者となる。
【０２１５】
このように、検証マシン３０は、サーバ検証データ及びユーザ検証データに含まれるデータを用いてゲームサーバ１０による乱数の生成に関する正当性を検証し、乱数の生成が不当であればゲームサーバを不正行為者と判定する。
【０２１６】
図１２に示す５段階の検証が正常に終了した場合、検証マシン３０はゲームシステムにおける乱数生成は公正であったと判断する。なお、図１２に示す検証であっても、システム参加者の全員（ゲームサーバ１０、端末２０）が結託し、ゲーム乱数の生成に対して不正を行った場合には、当該不正の検出や不正行為者の特定は不可能である。しかし、上記のような状況は、もはや不正の検出や不正行為者の特定を行う意味がない状況である。
【０２１７】
［ハードウェア構成］
次に、第１の実施形態に係るゲームシステムを構成する各種装置のハードウェア構成を説明する。図１４は、第１の実施形態に係る検証マシン３０のハードウェア構成の一例を示すブロック図である。
【０２１８】
検証マシン３０は、情報処理装置（コンピュータ）により構成可能であり、図１４に例示する構成を備える。例えば、検証マシン３０は、内部バスにより相互に接続される、ＣＰＵ（Central Processing Unit）３１、メモリ３２、入出力インターフェイス３３及び通信手段であるＮＩＣ（Network Interface Card）３４等を備える。
【０２１９】
但し、図１４に示す構成は、検証マシン３０のハードウェア構成を限定する趣旨ではない。検証マシン３０は、図示しないハードウェアを含んでもよいし、必要に応じて入出力インターフェイス３３を備えていなくともよい。また、検証マシン３０に含まれるＣＰＵ等の数も図１４の例示に限定する趣旨ではなく、例えば、複数のＣＰＵが検証マシン３０に含まれていてもよい。
【０２２０】
メモリ３２は、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）、補助記憶装置（ハードディスク等）である。
【０２２１】
入出力インターフェイス３３は、図示しない表示装置や入力装置のインターフェイスとなる手段である。表示装置は、例えば、液晶ディスプレイ等である。入力装置は、例えば、キーボードやマウス等のユーザ操作を受け付ける装置である。
【０２２２】
検証マシン３０の機能は、後述する各種処理モジュールにより実現される。当該処理モジュールは、例えば、メモリ３２に格納されたプログラムをＣＰＵ３１が実行することで実現される。また、そのプログラムは、ネットワークを介してダウンロードするか、あるいは、プログラムを記憶した記憶媒体を用いて、更新することができる。さらに、上記処理モジュールは、半導体チップにより実現されてもよい。即ち、上記処理モジュールが行う機能を何らかのハードウェア、及び／又は、ソフトウェアで実行する手段があればよい。
【０２２３】
なお、ゲームサーバ１０、端末２０や管理サーバ５０も検証マシン３０と同様に情報処理装置により構成可能であり、その基本的なハードウェア構成は検証マシン３０と相違する点は無いので説明を省略する。
【０２２４】
以上のように、第１の実施形態では、ゲームサーバ１０と端末２０のそれぞれが、検証データ（サーバ検証データ、ユーザ検証データ）を電子掲示板に書き込む。サーバ検証データは、ゲームサーバ１０がゲーム乱数の生成前から当該乱数の使用後までの間で少なくともゲーム乱数の生成に必要なデータを正当に扱っているか否かを検証可能なデータである。また、ユーザ検証データは、端末２０がゲーム乱数の生成前から当該乱数の使用後までの間で少なくともゲーム乱数の生成に必要なデータを正当に扱っているか否かを検証可能なデータである。このようなデータを電子掲示板にゲーム乱数の使用後に書き込むことで、ゲームシステムの当事者（ゲームサーバ１０、端末２０）だけでなく第３者が、ゲーム乱数の生成が正当であったか否かを検証できる。また、検証者（例えば、検証マシン３０）は、図１２や図１３を用いて説明した検証データの解析により不正が行われたときの不正行為者を特定することができる。
【０２２５】
［変形例］
なお、第１の実施形態にて説明したゲームシステムの構成、動作等は例示であって、システムの構成等を限定する趣旨ではない。例えば、上記実施形態では、検証マシン３０をゲームサーバ１０、端末２０とは別装置として説明したが、検証マシン３０の機能がこれらの装置に組み込まれていてもよい。
【０２２６】
上記実施形態で説明したゲーム乱数やハッシュ値の計算方法は例示であって、上記説明した内容に限定する趣旨ではない。例えば、式（１２）においてゲーム乱数を生成する際、ゲームＩＤ（gid）もハッシュ関数に入力してもよい。
【０２２７】
上記実施形態では、ブロックチェーン技術に基づく信頼性の高い電子掲示板（一度書き込まれた情報は消去されたり改ざんされたりすることのない電子掲示板）を検証データの登録先としている。しかし、上記電子掲示板と同様の性質を持つ掲示板や装置（サーバ）であれば、任意の情報保持手段を検証データの登録先として使用することができる。
【０２２８】
コンピュータの記憶部に、上述したコンピュータプログラムをインストールすることにより、コンピュータを検証マシン３０として機能させることができる。さらにまた、上述したコンピュータプログラムをコンピュータに実行させることにより、コンピュータにより乱数検証方法を実行することができる。なお、上記プログラムは、コンピュータが読み取り可能な記憶媒体に記録することができる。記憶媒体は、半導体メモリ、ハードディスク、磁気記録媒体、光記録媒体等の非トランジェント（non-transient）なものとすることができる。本発明は、コンピュータプログラム製品として具現することも可能である。
【０２２９】
また、上述の説明で用いたシーケンス図、フローチャートでは、複数の工程（処理）が順番に記載されているが、実施形態で実行される工程の実行順序は、その記載の順番に制限されない。実施形態では、例えば各処理を並行して実行する等、図示される工程の順番を内容的に支障のない範囲で変更することができる。
【０２３０】
例えば、図１３に示す「一貫性テストに基づく検証」において検証マシン３０による検証の順序を変更してもよい。具体的には、図１５に示すように、ステップＳ６０７の動作をステップＳ６０１の前に実行してもよい。
【０２３１】
例えば、検証マシン３０は、検証対象として与えられたゲームＩＤ（gid）に対し、同じゲームＩＤ（gid）の検証データ及びその署名を電子掲示板から読み出す。検証マシン３０は、サーバ検証データsoutput及びユーザ検証データuoutputそれぞれの署名を検証する（図１２のステップＳ１１）。検証マシン３０は、検証に失敗したデータを廃棄し、正しいデータを残して、次のステップである一貫性テストに基づく検証に進む（ステップＳ１２）。一方、検証対象として与えられたゲームＩＤ（gid）を持つ検証データが発見できない、又は、署名の検証の結果、正しいデータが残らない場合に、検証マシン３０は、図１５に示すステップＳ６００を実行する。ステップＳ６００では、検証マシン３０は、指定されたゲームＩＤ（gid）よりも値が大きいゲームＩＤ（gid）であって、正しいサーバの署名付きのサーバ検証データあるいはユーザ検証データが電子掲示板に存在するか否かを確認する。このようなデータが存在した場合に、検証マシン３０は、ゲームサーバ１０が不正行為者と判定する。
【０２３２】
なお、引用した上記の特許文献の開示は、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の全開示の枠内において種々の開示要素（各請求項の各要素、各実施形態ないし実施例の各要素、各図面の各要素等を含む）の多様な組み合わせ、ないし、選択（部分的削除を含む）が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。
【符号の説明】
【０２３３】
１０  ゲームサーバ
２０、１０１  端末
３０  検証マシン
３１  ＣＰＵ（Central Processing Unit）
３２  メモリ
３３  入出力インターフェイス
３４  ＮＩＣ（Network Interface Card）
４０  データ管理システム
５０、５０−１〜５０−４  管理サーバ
１０２  乱数生成サーバ
２０１、３０１、４０１、５０１  通信制御部
２０２、３０２、４０２、５０２  記憶部
２０３  ゲーム実行制御部
２１１  ユーザ認証部
２１２、３１１  乱数管理部
３０３  ゲーム実行部
４０３  乱数検証部
４１１  一貫性検証部
５０３  台帳管理部
５１１  ブロック生成部
５１２  ブロック検証部
【図１】
2020144864.tif 000024
【図２】
2020144864.tif 000025
【図３】
2020144864.tif 000026
【図４】
2020144864.tif 000027
【図５】
2020144864.tif 000028
【図６】
2020144864.tif 000029
【図７】
2020144864.tif 000030
【図８】
2020144864.tif 000031
【図９】
2020144864.tif 000032
【図１０】
2020144864.tif 000033
【図１１】
2020144864.tif 000034
【図１２】
2020144864.tif 000035
【図１３】
2020144864.tif 000036
【図１４】
2020144864.tif 000037
【図１５】
2020144864.tif 000038
【国際調査報告】
2020144864.tif 000039
2020144864.tif 000040
2020144864.tif 000041
2020144864.tif 000042