初めに、一実施形態の概要について説明する。なお、この概要に付記した図面参照符号は、理解を助けるための一例として各要素に便宜上付記したものであり、この概要の記載はなんらの限定を意図するものではない。
一実施形態に係る乱数生成システムは、端末101と、端末101用の乱数を生成する、乱数生成装置102と、を含む。乱数生成装置102は、初期乱数の封印値を生成する。端末101は、初期乱数の封印値が生成された後に、ユーザ乱数を生成する。乱数生成装置102は、初期乱数、ユーザ乱数及び少なくとも端末101が使用する乱数の生成に関する序数に基づく値をハッシュ関数に入力し、ハッシュ関数の出力結果に基づき乱数を生成する。
上記乱数生成システムでは、乱数生成装置102は、端末101用の乱数の生成に先だって、初期乱数を生成する。また、端末101は、初期乱数の封印値が生成されたことに応じて、ユーザ乱数を生成し、乱数生成装置102に提供する。乱数生成装置102は、先に生成した初期乱数、ユーザ乱数及び乱数の生成に関する序数を用いて、端末101用の乱数を生成する。乱数生成装置102による乱数の生成には、乱数生成装置102及び端末101が互いに操作することができない初期乱数とユーザ乱数が必要となるので、端末101を操作するユーザにとって公平な乱数が生成される。また、乱数生成装置102は、初期乱数、ユーザ乱数及び乱数の生成に関する序数に基づく値をハッシュ関数に入力してその結果により乱数を生成することで、迅速な乱数生成が実現できる。即ち、乱数生成装置102は一回のハッシュ関数の利用により乱数を生成しており、処理負荷の高いハッシュ関数の呼び出しが制限されている(特許文献1の技術と比較して減少している)。その結果、迅速に乱数が生成できる。
以下に具体的な実施の形態について、図面を参照してさらに詳しく説明する。なお、各実施形態において同一構成要素には同一の符号を付し、その説明を省略する。
[第1の実施形態]
第1の実施形態について、図面を用いてより詳細に説明する。
[システム構成概略]
図2は、第1の実施形態に係るゲームシステムの構成の一例を示す図である。図2を参照すると、ゲームシステムは、ゲームサーバ10と、端末20-1~20-n(nは正の整数、以下同じ)と、データ管理システム30と、を含んで構成される。ゲームサーバ10、端末20-1~20-n及びデータ管理システム30のそれぞれは、インターネット等のネットワークを介して相互に接続されている。なお、以降の説明において、端末20-1~20-nを区別する特段の理由が無い場合には単に「端末20」と表記する。
なお、ゲームシステムを例に取り第1の実施形態の説明を行うが、以下に説明する公正な乱数生成の手法は、他のシステムに適用できることは勿論である。例えば、当該手法は、電子的に抽選を行う電子抽選システムの乱数生成に適用されてもよい。
ゲームサーバ10は、ユーザにオンラインゲームを提供する装置である。具体的には、ゲームサーバ10は、ユーザを認証する処理(ログイン/ログアウト処理)、ゲーム進行に係る処理(ゲーム進行処理)等を行う。なお、第1の実施形態にて想定するオンラインゲームは、ゲームサーバ10がゲームの進行を担うタイプのゲーム(例えば、ロールプレイングゲーム)を想定する。つまり、ゲームサーバ10は、端末20用の乱数を生成する乱数生成装置として動作する。
端末20は、オンラインゲームをプレイするユーザが使用する装置である。例えば、パーソナルコンピュータやスマートフォン等の情報処理装置が、上記端末に相当する。
データ管理システム30は、オンラインゲームの運営会社から独立した立場の機関等が運営するシステムである。データ管理システム30は、外部(第3者)に対し、データの書き込み及び読み出しの可能な電子掲示板を提供するシステムである。データ管理システム30は、所謂、ブロックチェーンにより各種情報を管理する。
データ管理システム30は、所定の手数料を支払うことで、どのような主体でも情報を追記できると共に、書き込まれた情報を読み出すことができ、且つ、一度書き込まれた情報は消去されたり改ざんされたりすることのない電子掲示板を提供する。より正確には、データ管理システム30は、外部装置からは電子掲示板のように扱うことのできるデータ入出力に係るインターフェイスを提供するシステムである。なお、以降の説明において、データ管理システム30はゲームサーバ10の運営会社等から独立した機関等により運営、管理されることを前提とするが、データ管理システム30によるデータ管理の正当性が確保される場合には、ゲームサーバ10等の運営会社が上記電子掲示板を提供してもよい。勿論、この場合には、ゲームサーバ10等は手数料の支払いを必要とすることなく、電子掲示板を利用できる。
図2に示すゲームシステムでは、ゲームの進行に必要なデータ(より正確には、後述する初期乱数を封印した封印データ)の授受を、データ管理システム30が提供する電子掲示板を介して行う。なお、上述のように、データ管理システム30は、第3者に電子掲示板を提供するシステムであるため、当該電子掲示板には上記封印データとは無関係なデータ(例えば、商品の売上データ等)が混在することとなる。
データ管理システム30は、複数の管理サーバ40-1~40-4から構成されている。なお、図2の例示は、データ管理システム30を構成する管理サーバの台数を4台に限定する趣旨ではない。データ管理システム30は2台以上の管理サーバを含んで構成されていればよい。
データ管理システム30をなす複数の管理サーバ40は、図2に示すように、相互に直接接続されている。即ち、データ管理システム30は、P2P(Peer to Peer)接続された複数の管理サーバ40を含んで構成される。
データ管理システム30では、P2P接続された複数の管理サーバ40それぞれが、外部から受信したデータ(乱数データや売上データ等)を管理するための台帳(以下、データ管理台帳と表記する)を有する。データ管理システム30は、当該データ管理台帳を複数の管理サーバ40に分散して共有し、管理する。
以降の説明において、データ管理システム30とその外部とのデータの授受は、データ管理システム30と、ゲームサーバ10及び端末20の間に限って説明する。但し、実際には、データ管理システム30は、汎用的な電子掲示板を広く第3者に提供するものであるため、ゲームサーバ10等以外との間でもデータの授受が行われる。
[システム動作概略]
次に、図面を参照しつつ、第1の実施形態に係るゲームシステムの動作概略を説明する。図3は、第1の実施形態に係るゲームシステムの動作概略の一例を示すシーケンス図である。
ゲームサーバ10の提供するオンラインゲームのプレイを希望するユーザは、端末20を操作して、例えば、ゲームサーバ10の運営会社が用意するWEB(ウェブ)ページにアクセスし、ユーザ登録(アカウント登録)を行う(ステップS01)。アカウント登録を終えると、ユーザは、ゲームサーバ10にログインするための認証情報(ID(Identifier)、パスワード)を取得する。
また、上記IDやパスワードに係る情報は、ゲームサーバ10が参照可能となるように配置される。例えば、アカウント登録処理が終了すると上記情報がゲームサーバ10に送信され、ゲームサーバ10の内部記憶装置に格納される。あるいは、ゲームサーバ10がアクセス可能なデータベースに上記情報(ID、パスワード)が格納されていてもよい。
ユーザは、上記取得した認証情報(IDとパスワードの組み合わせ)をゲームサーバ10に提供して、ゲームサーバ10にログインする(ステップS02)。
ゲームサーバ10は、ユーザから提供された認証情報を用いてユーザ認証を行い、正当なユーザであることが確認できた場合に、ゲームを開始する(ステップS03)。
なお、オンラインゲームにおける、サーバ(ゲームサーバ10)とクライアント(端末20)の間の情報のやり取りには種々の形態が考えられるが、本願開示においてはどのような形態であってもよい。例えば、端末20にゲーム専用のアプリケーションをインストールすることなく、HTML(Hyper Text Markup Language)ソースでの汎用処理によりオンラインゲームを提供する形態であってもよいし、端末20に専用のアプリケーションをインストールする形態であってもよい。
ゲームサーバ10は、ゲームの進行中に乱数の生成が必要か否かを判定する(ステップS04)。
乱数の生成が必要な場合(ステップS04、Yes分岐)、ゲームサーバ10は乱数生成に係る処理を起動する(ステップS05)。その際、ゲームサーバ10、端末20及びデータ管理システム30の間で乱数生成に必要な情報のやり取りが行われ、ゲームの進行に必要な乱数が生成される。ステップS05の乱数生成に係る処理の詳細は後述する。
ゲームサーバ10は、ゲーム終了のために設けられた種々の条件(例えば、タイムオーバ等の条件)を確認することで、ゲームが終了したか否かを判定する(ステップS06)。ゲームが続行している間(ステップS06、No分岐)は、乱数生成の要否が確認され(ステップS04)、乱数の生成が必要な場合には乱数が生成され続ける。ゲームサーバ10は、ゲームが終了したと判定した場合(ステップS06、Yes分岐)には、その旨を端末20に通知する(ステップS07)。
当該通知を受けた端末20は、ゲームをプレイしている最中に用いられた乱数(ゲームサーバ10が生成した乱数)が公平なものであるか否かを検証する(ステップS08)。端末20は、データ管理システム30が提供する電子掲示板から、乱数の公平性検証のために必要な封印データを取得し、当該データを用いて乱数の公平性を検証する。端末20による乱数の公平性検証に係る処理の詳細は後述する。
検証の結果、ゲームサーバ10による乱数生成の公正性に疑義が有る場合には、ユーザは、例えば、ゲームサーバ10の運営会社にその旨を伝える(抗議する)等の行動を取ることができる。
なお、図3の説明では、端末20によるゲームサーバ10からのログアウトについて記載していないが、ユーザは、ゲームを続行する意思のない場合に、ゲームサーバ10からログアウトする。
[ハードウェア構成]
次に、第1の実施形態に係るゲームシステムを構成する各種装置のハードウェア構成を説明する。図4は、第1の実施形態に係るゲームサーバ10のハードウェア構成の一例を示すブロック図である。
ゲームサーバ10は、情報処理装置(コンピュータ)により構成可能であり、図4に例示する構成を備える。例えば、ゲームサーバ10は、内部バスにより相互に接続される、CPU(Central Processing Unit)11、メモリ12、入出力インターフェイス13及び通信手段であるNIC(Network Interface Card)14等を備える。
但し、図4に示す構成は、ゲームサーバ10のハードウェア構成を限定する趣旨ではない。ゲームサーバ10は、図示しないハードウェアを含んでもよいし、必要に応じて入出力インターフェイス13を備えていなくともよい。また、ゲームサーバ10に含まれるCPU等の数も図4の例示に限定する趣旨ではなく、例えば、複数のCPUがゲームサーバ10に含まれていてもよい。
メモリ12は、RAM(Random Access Memory)、ROM(Read Only Memory)、補助記憶装置(ハードディスク等)である。
入出力インターフェイス13は、図示しない表示装置や入力装置のインターフェイスとなる手段である。表示装置は、例えば、液晶ディスプレイ等である。入力装置は、例えば、キーボードやマウス等のユーザ操作を受け付ける装置である。
ゲームサーバ10の機能は、後述する各種処理モジュールにより実現される。当該処理モジュールは、例えば、メモリ12に格納されたプログラムをCPU11が実行することで実現される。また、そのプログラムは、ネットワークを介してダウンロードするか、あるいは、プログラムを記憶した記憶媒体を用いて、更新することができる。さらに、上記処理モジュールは、半導体チップにより実現されてもよい。即ち、上記処理モジュールが行う機能を何らかのハードウェア、及び/又は、ソフトウェアで実行する手段があればよい。
なお、端末20や管理サーバ40もゲームサーバ10と同様に情報処理装置により構成可能であり、その基本的なハードウェア構成はゲームサーバ10と相違する点は無いので説明を省略する。
[ゲームサーバ]
次に、ゲームサーバ10の詳細について説明する。
図5は、第1の実施形態に係るゲームサーバ10の処理構成の一例を示すブロック図である。図5を参照すると、ゲームサーバ10は、通信制御部201と、記憶部202と、ゲーム実行制御部203と、を含んで構成される。
通信制御部201は、他の装置との間の通信を実現する手段である。通信制御部201は、他の装置から受信したメッセージ(パケット)を各処理モジュール部に振り分ける、又は、各処理モジュールから取得したメッセージを他の装置に送信する手段でもある。
記憶部202は、例えば、ゲーム実行制御部203の処理等に必要なデータを記憶する。
ゲーム実行制御部203は、ゲーム進行に関する制御、管理を担う手段である。ゲーム実行制御部203は、ユーザ認証部211と、第1の乱数生成部212と、第2の乱数生成部213という3つのサブモジュールを含んで構成される。
ユーザ認証部211は、ユーザがゲームサーバ10にログインする際、又は、ゲームサーバ10からログアウトする際に起動するサブモジュールである。なお、ユーザ認証の方式はどのようなものであっても良い。例えば、上述のようにパスワードを用いた認証方式でもよいし、ユーザの生体情報(指紋情報等)を用いた生体認証であってもよい。ユーザ認証部211は、端末20から提供されるデータ(被認証データ)とデータベース等に格納されたデータ(照合データ)を比較することで、端末20を利用するユーザの認証を行う。
ゲーム実行制御部203は、ユーザ認証部211による認証結果に応じて、当該ユーザにオンラインゲームを提供する、又は、当該ユーザによるオンラインゲームのプレイを拒絶する。
第1の乱数生成部212及び第2の乱数生成部213は、ゲーム実行制御部203が乱数生成の必要があると判断した際に起動するサブモジュールである。なお、後述するように、1人のユーザに関して、乱数は既に生成された乱数を用いて生成される。つまり、ユーザごとに乱数の生成を管理する必要があるため、以降の説明ではサフィックスjを用いてユーザを区別する。
乱数の生成処理が始まると、第1の乱数生成部212は、ユーザj用の初期乱数sjを生成する。
次に、第1の乱数生成部212は、当該初期乱数sjを封印する。より具体的には、第1の乱数生成部212は、初期乱数sjのハッシュ値H(sj)を計算する。
その後、第1の乱数生成部212は、初期乱数sjの封印値(即ち、ハッシュ値H(sj))とハッシュ値の計算に利用したハッシュ関数をデータ管理システム30に送信し、これらの情報(ハッシュ値、ハッシュ関数)を電子掲示板に書き込むように依頼する。
また、第1の乱数生成部212は、計算したハッシュ値H(sj)を電子掲示板に書き込んだ旨をユーザjが使用する端末20に送信する。その際、端末20がハッシュ値H(sj)等をデータ管理システム30から取得できるように、トランザクションIDも併せて通知される。なお、トランザクションIDとは、ゲームサーバ10がデータを電子掲示板に書き込んだ際にデータ管理システムから通知される識別子であって、封印データが書き込まれたトランザクションを特定する識別子である。
ゲームサーバ10から上記通知を受け取った端末20は、電子掲示板からハッシュ値H(sj)を取得する。端末20は、自身(ユーザj)向けのハッシュ値H(sj)が電子掲示板に書き込まれていることを確認すると、乱数rjを生成し、当該乱数rjをゲームサーバ10に送信する。なお、以降の説明において、端末20が生成した乱数をユーザ乱数と表記する。
第2の乱数生成部213は、ユーザjに適用する(ユーザjがプレイするゲームに使用する)乱数を生成する。具体的には、第2の乱数生成部213は、ユーザ乱数rjを受け取ると、初期乱数sj、ユーザ乱数rj、乱数の生成に関する序数i用いて、下記の式(1)により乱数xjを計算する。
xj(i)=Hash(sj||rj||i) mod m ・・・(1)
なお、式(1)において、記号「||」は連結を示し、iは正の整数(i≧1)であって、以降の説明でも同様とする。また、xj及びyjに続いて記載された括弧書きの数字は、乱数の生成順を示す。例えば、最初に生成された乱数xjはxj(1)と表記される(i=1)。
また、mは生成した乱数xjの範囲を決めるための定数である。例えば、乱数xjの範囲を0~5の整数とする場合、mには「6」が設定される。また、乱数xjをサイコロの目の代わりに利用するような場合には、式(1)により計算された値に「1」を加えればよい。
上記説明したように、第2の乱数生成部213は、ユーザjのユーザ乱数rj、当該ユーザj向けの初期乱数sj、乱数の生成に関する序数iをハッシュ関数に入力し、ハッシュ値を計算することでユーザj向けの乱数xjを生成する。即ち、第2の乱数生成部213は、初期乱数sj、ユーザ乱数rj及び乱数の生成に関する序数iに基づき、少なくとも端末20が使用する乱数を生成する。その際、ハッシュ関数への入力は、初期乱数sj、ユーザ乱数rj及び乱数生成に関する序数iを連結した値が用いられる。
ゲーム実行制御部203は、乱数xjを使用した後に当該乱数xjを端末20(ユーザj)に通知する。なお、乱数xjが端末20に通知されるタイミングは、乱数xjの使用後であれば、任意のタイミングとすることができる。例えば、ゲームの進行中に逐次使用された乱数xjが通知されてもよいし、ゲーム終了後に、使用された乱数xjが一括して端末20に通知されてもよい。
また、ゲーム実行制御部203は、図3のステップS08における「乱数の公平性検証」までの任意のタイミングで、式(1)にて使用したハッシュ関数の種類を、端末20に通知する。例えば、初回の乱数通知(乱数xj(1)の通知)の際やゲーム終了後に、式(1)にて使用したハッシュ関数の種類を端末20に通知する。さらに、ゲーム実行制御部203は、ユーザjによるゲームが終了した場合(即ち、これ以上の乱数生成が不要となった場合)、先に生成した初期乱数sjを端末20(ユーザj)に通知する。つまり、ゲーム実行制御部203は、端末20に対する乱数生成が不要となった後、初期乱数の封印を端末20に開封する。
なお、上記説明では、第1の乱数生成部212が使用したハッシュ関数を電子掲示板に書き込み、第2の乱数生成部213が使用したハッシュ関数を端末20に通知することを説明した。しかし、ゲームサーバ10と端末20の間で、使用するハッシュ関数に関する合意があれば、上記の様な電子掲示板への書き込みや端末20への通知は不要である。
第1の乱数生成部212や第2の乱数生成部213が使用するハッシュ関数として、例えば、SHA-2(Secure Hash Algorithm 2)やKeccak(ケチャック)といったハッシュ関数が利用できる。また、第1の乱数生成部212が使用するハッシュ関数(初期乱数sjのハッシュ値を計算するハッシュ関数)と第2の乱数生成部213が使用するハッシュ関数(式(1)にて使用されるハッシュ関数)は同じであっても良いし、異なるものであってもよい。
ここで、ハッシュ関数には、ハッシュ値から元のデータを復元することができないという一方向性、違うデータから同じハッシュ値を生成することができないという衝突困難性、同じデータからは同じハッシュ値が生成されるという決定性、計算されるハッシュ値に偏りがない一様性等の性質がある。第1の乱数生成部212による初期乱数sjのハッシュ値計算は、ゲームの進行中に初期乱数sjをゲームサーバ10以外の主体に対して隠蔽(封印)し、且つ、初期乱数sjのハッシュ値の計算後に初期乱数sjが変更されていないことを担保するために行われる。つまり、第1の乱数生成部212によるハッシュ値計算は、ハッシュ関数の持つ性質のうち、一方向性と衝突困難性を主として利用している。対して、第2の乱数生成部213におけるハッシュ関数は、ランダムな数値が生成可能、且つ、乱数生成の過程が再現可能な関数として使用されている。つまり、第2の乱数生成部213によるハッシュ値計算は、ハッシュ関数の持つ性質のうち、決定性と一様性を主として利用している。従って、第1の乱数生成部212と第2の乱数生成部213では、ハッシュ関数に求める性質が異なっており、各目的に適したハッシュ関数の使い分けがなされてもよい。
また、上記第1の乱数生成部212によるハッシュ値計算を鑑みれば、第1の乱数生成部212が、初期乱数を封印する際に利用する関数は、ハッシュ関数のみならず、コミットメント関数と呼ばれる、「データを封印(秘匿)」する機能と、「データを開封(変更されていないことを検証)」する機能があるもので代用することができる。
[端末]
次に、端末20の詳細について説明する。
図6は、第1の実施形態に係る端末20の処理構成の一例を示すブロック図である。図6を参照すると、端末20は、通信制御部301と、記憶部302と、ゲーム実行部303と、を含んで構成される。
通信制御部301は、他の装置との間の通信を実現する手段である。通信制御部301は、他の装置から受信したメッセージ(パケット)を各処理モジュール部に振り分ける、又は、各処理モジュールから取得したメッセージを他の装置に送信する手段でもある。
記憶部302は、例えば、ゲーム実行部303の処理等に必要なデータを記憶する。
ゲーム実行部303は、ユーザによるゲームプレイを実現する手段である。より具体的には、ゲーム実行部303は、キーボードやマウス等の入力手段によりユーザの操作を入力する。ゲーム実行部303は、ユーザの操作に応じた情報をゲームサーバ10に送信する。例えば、ユーザがゲームサーバ10にログインする場合には、認証情報(例えば、IDとパスワードの組み合わせ)がゲームサーバ10に送信される。また、ユーザがゲームをプレイしている間は、ユーザによるキー操作等に係る情報がゲームサーバ10に送信される。
ゲーム実行部303は、乱数生成部311と乱数検証部312の2つのサブモジュールを含んで構成される。
乱数生成部311は、ゲームサーバ10により初期乱数の封印値(初期乱数のハッシュ値)が生成された後に、ユーザ乱数を生成する手段である。より具体的には、乱数生成部311は、初期乱数sjのハッシュ値H(sj)が電子掲示板に書き込まれたことに応じて、ユーザ乱数を生成する。乱数生成部311は、ゲームサーバ10からハッシュ値H(sj)を電子掲示板に書き込んだ旨の通知を受けた場合に起動する。この場合、乱数生成部311は、ゲームサーバ10から通知されたトランザクションIDをデータ管理システム30に提示し、ゲームサーバ10が電子掲示板に書き込んだハッシュ値H(sj)を取得する。その後、乱数生成部311は、ユーザ乱数rjを生成し、生成したユーザ乱数rjをゲームサーバ10に送信する。なお、乱数生成部311によるユーザ乱数rjの生成には、ハッシュ関数を初めとした種々の関数や方法を用いることができる。
乱数検証部312は、ゲームサーバ10がゲームの進行に使用した一連の乱数xj(xj(1)、xj(2)、・・・)が公平なものであるか否かを検証する手段である。より具体的には、乱数検証部312は、電子掲示板に書き込まれた初期乱数sjのハッシュ値H(sj)を取得し、取得したハッシュ値H(sj)と、ゲームサーバ10により開封された初期乱数sjと、乱数の生成に関する序数(i)と、使用された乱数として通知された乱数xjと、に基づき、ゲームサーバ10による乱数生成の公正性を検証する。
乱数検証部312は、2段階の検証を行うことで、乱数xjの公平性を確認する。
第1の検証は、上記の式(1)にて使用される初期乱数sjが端末20から提供されるユーザ乱数rjの取得前に生成された値から変更されていないことの検証である。
第2の検証は、ゲームサーバ10が、式(1)に従って乱数xjを生成している(ゲームサーバ10が恣意的に乱数xjを決定していない)ことの検証である。
乱数検証部312は、電子掲示板から取得したハッシュ値H(sj)と、ゲーム終了後にゲームサーバ10により開封された初期乱数sjを用いて計算したハッシュ値H’(sj)と、を比較し、第1の検証を行う。比較の結果、2つのハッシュ値が一致すれば、乱数検証部312は、ゲームサーバ10による乱数生成は公正である可能性があり、第2の検証を行う。
対して、2つのハッシュ値が不一致であれば、乱数検証部312は、ゲームサーバ10による乱数生成は不公正(ゲームサーバ10による乱数生成は不当、不適切)と判定する。
乱数検証部312は、式(1)に従って乱数xj’(i)を生成し、当該乱数xj’(i)とゲームサーバ10から通知された乱数xj(i)を比較することで、第2の検証を行う。
ここで、上記式(1)によれば、乱数xjの生成に必要な情報は、初期乱数sj、ユーザ乱数rj、乱数の生成回数(序数i)である。2つの乱数のうち、ユーザ乱数rjは、自装置にて生成している情報であるので、乱数検証部312は当然に把握可能である。また、初期乱数sjは、ゲーム終了後にゲームサーバ10から取得できる情報である。さらに、上述のように、式(1)にて使用されたハッシュ関数はゲームサーバ10から端末20に通知されている。
また、ゲームサーバ10がゲームの進行に使用した乱数xj(i)は、逐次、端末20に通知されている。従って、端末20は、乱数の生成回数(序数j)も当然に把握可能な情報である。以上の情報を用いて、乱数検証部312は、2つの乱数(初期乱数sj、ユーザ乱数rj)等に式(1)を適用することで、各回の乱数xj’(i)を生成することができる。
乱数検証部312は、2つの乱数(xj’(i)、xj(i))の一致、不一致を確認することで、ゲームサーバ10が、乱数xj(i)を恣意的に変更しておらず、当初に生成された初期乱数sjと端末20が提示したユーザ乱数rjを使用して一連の乱数xj(i)を生成していることが検証できる。
上記2つの乱数xj’(i)とxj(i)が一致していれば、乱数検証部312は、ゲームサーバ10による乱数生成は公正(ゲームサーバ10による乱数生成は正当、適切)であると判定する。一方、2つの乱数xj’(i)とxj(i)に相違する点があれば、乱数検証部312は、ゲームサーバ10による乱数生成は不公正と判定する。
乱数検証部312は、必要に応じて、上記判定結果をユーザに通知する。具体的には、乱数検証部312は、液晶パネル等の表示部に、検証結果を表示する等の処置を行う。
次に、図面を参照し、ゲームサーバ10による乱数生成と端末20による乱数検証の動作について説明する。
図7は、第1の実施形態に係るゲームシステムの動作の一例を示すシーケンス図である。図7には、主にゲームサーバ10による乱数生成に係る動作が記載されている。
ステップS101において、ゲームサーバ10は、初期乱数sjを生成する。
ゲームサーバ10は、初期乱数sjのハッシュ値H(sj)を生成する(ステップS102)。
ゲームサーバ10は、生成したハッシュ値H(sj)をデータ管理システム30に送信する(ステップS103)。つまり、ゲームサーバ10は、生成したハッシュ値H(sj)を電子掲示板に書き込む。
データ管理システム30によるハッシュ値H(sj)の電子掲示板への書き込み(ステップS104)が完了すると、ゲームサーバ10は、ハッシュ値H(sj)を電子掲示板に書き込んだ旨を端末20に通知する(ステップS105)。
端末20は、上記ゲームサーバ10からの通知を取得すると、電子掲示板からハッシュ値H(sj)を読み出す(ステップS106)。
その後、端末20は、ユーザ乱数rjを生成し、当該乱数をゲームサーバ10に送信する(ステップS107)。
ユーザ乱数rjを取得したゲームサーバ10は、上述の式(1)に従い、乱数xj(1)を生成する(ステップS108-1)。
ゲームサーバ10は、生成した乱数xj(1)をゲームの進行に使用し、使用した乱数xj(1)を端末20に通知する(ステップS109-1)。
ゲームサーバ10は、ゲームの進行と共に更なる乱数の生成が必要となると、上述の式(1)に従って乱数を生成する処理(ステップS108-i)と、当該乱数を通知する処理(ステップS109-i)を繰り返す。
その後、ゲームが終了すると(ステップS110)、ゲームサーバ10は、ステップS101にて生成した初期乱数sjを端末20に開封する(ステップS111)。
ステップS112において、端末20は、ゲームサーバ10により生成された乱数xjの公平性を検証する。
図8は、端末20による乱数xjの公平性検証に係る動作の一例を示すフローチャートである。
初めに、端末20は、電子掲示板から取得したハッシュ値H(sj)と、ゲームサーバ10から開封された初期乱数sjを用いて計算したハッシュ値H’(sj)を比較し、第1の検証を行う(ステップS201)。
2つのハッシュ値が一致しなければ(ステップS201、No分岐)、ゲームサーバ10による乱数生成は不公正であると判定される(ステップS204)。
2つのハッシュ値が一致した場合(ステップS201、Yes分岐)、第2の検証が実行される。
端末20は、式(1)に従って生成した乱数xj’(i)と、ゲームサーバ10から通知された乱数xj(i)を比較し、第2の検証を行う(ステップS202)。
2つの乱数が一致しなければ(ステップS202、No分岐)、ゲームサーバ10による乱数生成は不公正であると判定される(ステップS204)。2つの乱数が一致すれば(ステップS202、Yes分岐)、ゲームサーバ10による乱数生成は公正であると判定される(ステップS203)。
[管理サーバ]
次に、データ管理システム30をなす管理サーバ40の詳細について説明する。
図9は、第1の実施形態に係る管理サーバ40の処理構成の一例を示すブロック図である。図9を参照すると、管理サーバ40は、通信制御部401と、記憶部402と、台帳管理部403と、を含んで構成される。
通信制御部401は、他の装置との間の通信を実現する手段である。通信制御部401は、他の装置から受信したメッセージ(パケット)を各処理モジュール部に振り分ける、又は、各処理モジュールから取得したメッセージを他の装置に送信する手段でもある。
記憶部402は、各処理モジュールの処理に必要な情報を記憶する手段である。記憶部402には、データを一時的に記憶する一時記憶領域とデータ管理台帳を記憶する領域が含まれる。
台帳管理部403は、電子掲示板へのゲームサーバ10や端末20からのアクセス要求を処理する手段である。具体的には、例えば、ゲームサーバ10から電子掲示板への封印データ(ハッシュ値)の書き込み要求を受け付けると、記憶部402に格納されているデータ管理台帳に封印データを追記する。また、台帳管理部403は、外部装置(例えば、端末20)から電子掲示板の読み出しに係る要求を受け付けると、当該要求に付随するトランザクションIDをキーとしてデータ管理台帳を検索し、当該IDが付されたデータ(封印データ)を抽出する。台帳管理部403は、抽出した封印データを外部装置に送信する。
台帳管理部403は、ブロック生成部411とブロック検証部412の2つのサブモジュールを有する。
ブロック生成部411は、データ管理台帳を他の管理サーバ40にて共有し、管理するためのブロックを生成する。
台帳管理部403は、ゲームサーバ10から封印データを取得すると、当該取得した封印データを記憶部402の一時記憶領域に保存する。その後、ブロック生成部411は、直前に生成されたブロックのヘッダと、当該一時記憶領域に保存されたデータ(例えば、封印データや売上データ;データ管理台帳への追記データ)から、「正当性保証データ」を生成する。例えば、ブロック生成部411は、追記データ、前ブロックのヘッダ及び正当性保証データのハッシュ値を計算すると、当該計算されたハッシュ値を所定の規則に適合するものにする値(所謂、ノンス値又はナンス値)を正当性保証データとして生成する。また、正当性保証データには、ブロックを生成した管理サーバ40の電子署名が含まれる。
ブロック生成部411は、直前に生成されたブロックのヘッダと上記の正当性保証データからなるヘッダを有するブロックを生成する。具体的には、図10に示すようなブロックが生成される。
ブロック生成部411によるブロック生成が終了すると、当該ブロックはデータ管理台帳に追記される。また、ブロック生成部411は、生成したブロックを、通信制御部401を介して他の管理サーバ40に配布(送信)する。
他の管理サーバ40から上記ブロックを受信した管理サーバ40の通信制御部401は、取得したブロックをブロック検証部412に引き渡す。
ブロック検証部412は、自装置の記憶部402に格納されているデータ管理台帳(ブロック)に基づき、他の管理サーバ40が送信するブロックの正当性を検証する手段である。具体的には、ブロックを受信した管理サーバ40のブロック検証部412は、当該受信したブロックの正当性を、ブロックを送信した管理サーバ40が生成したブロックと自装置(ブロックを受信した管理サーバ40)が管理している直前に生成されたブロックのヘッダを用いて検証する。
初めに、ブロック検証部412は、受信したブロックに含まれる正当性保証データに送信元となる管理サーバ40の電子署名が付与されていることを確認し、受信したブロックに記載された「前ブロックのヘッダ」を自身が管理するデータ管理台帳に基づき特定する。その後、ブロック検証部412は、受信したブロック内の追記データと前ブロックのヘッダを入力として、ヘッダ内の正当性保証データの整合がとれているか否か(正当性保証データが所定の規則に適合するか否か)を確認する。
ブロック検証部412は、正当性保証データの整合性が確認できれば、他の管理サーバ40が送信するブロックは正当であると判定する。一方、正当性保証データの整合性が確認できなければ、ブロック検証部412は、他の管理サーバ40が送信するブロックは不当であると判定する。
ブロック検証部412が、他の管理サーバ40が送信するブロックが正当であると判定した場合には、台帳管理部403は、記憶部402のデータ管理台帳を更新する(追記データを含むブロックを追記する)。つまり、ブロック検証部412は、他の管理サーバ40の台帳へのデータの追記を、自装置の台帳に反映する処理を行う。なお、ブロック検証部412は、他の管理サーバ40が送信するブロックが不当であると判定した場合には、当該ブロックを破棄する。
また、ブロック検証部412は、検証結果(受信したブロックは正当、不当)に関する情報を、ブロックを送信してきた管理サーバ40に通知する。
管理サーバ40の動作をまとめると図11に示すシーケンス図のとおりとなる。なお、図11には、管理サーバ40-1がゲームサーバ10から封印データを取得し、当該データをデータ管理台帳に追記する場合を示す。
管理サーバ40-1は、ゲームサーバ10から封印データを取得すると(ステップS201)、当該データを自装置の記憶部402の一時記憶領域に複製する(ステップS202)。
その後、一時記憶領域に複製されたデータが所定量蓄積される等の条件により、管理サーバ40-1は、一時記憶領域に記憶されたデータに基づき、上述のブロックを生成する(ステップS203)。その後、管理サーバ40-1は、生成したブロックを他の管理サーバ40-2~40-4に向けて送信する(ステップS204)。
ブロックを受信した管理サーバ40-2~40-4のそれぞれは、管理サーバ40-1が生成したブロックを個別に検証する(ステップS205)。管理サーバ40-2~40-4のそれぞれは、ブロックの正当性が確認できた場合に自装置のデータ管理台帳を更新する(ステップS206)。
このように、データ管理システム30をなす複数の管理サーバ40のうちの少なくとも1つの管理サーバ40によるデータ管理台帳へのデータの追記は、他の管理サーバ40のデータ管理台帳に反映される。
なお、他の管理サーバ40から送信されたブロックの正当性が確認できない場合には、当該ブロックを破棄すると共に、管理サーバ40はその旨を、ブロックを送信する管理サーバ40に通知する。当該通知を受けた管理サーバ40の台帳管理部403は、ブロック送信前のデータ管理台帳の状態を取り戻す。
以上のように、第1の実施形態に係るゲームサーバ10は、乱数xjの生成に先立ち、初期乱数sjを生成し、そのハッシュ値H(sj)を電子掲示板に書き込む。また、ユーザjは、ハッシュ値H(sj)が電子掲示板に書き込まれたことに応じて、ユーザ乱数rjを生成し、ゲームサーバ10に提供する。ゲームサーバ10は、先に生成した初期乱数sj、ユーザjから提供されたユーザ乱数rj、乱数の生成に関する序数i用いて、乱数xjを生成する。このように、乱数xjの生成には、ゲームサーバ10及びユーザjが互いに操作することができない初期乱数sjとユーザ乱数rjが必要となるので、公平な乱数xjが生成される。また、ゲームサーバ10は、一度のハッシュ関数読み出しにより乱数xjを生成している(式(1)参照)。その結果、処理負荷の高いハッシュ関数の利用が制限され、迅速に乱数xjが生成される。
ゲームサーバ10は、初期乱数sjを生成する前にユーザ乱数rjを知ることができない。また、ゲームサーバ10は、自身が影響を及ぼすことのできない電子掲示板にハッシュ値H(sj)を書き込んでいるため、ハッシュ値H(sj)の書き込み後は、初期乱数sjを変更することができない。そのため、ゲームサーバ10は、ユーザ乱数rjの取得後に初期乱数sjを変更すること等により、乱数xjの生成を操作することはできない。
ユーザjは、電子掲示板に書き込まれたハッシュ値H(sj)から初期乱数sjを得ることはできないので、乱数xjの生成を操作することができない。
ゲームサーバ10と端末20間のデータの授受(ハッシュ値H(sj)の授受)は、ブロックチェーンによりデータが管理される電子掲示板を利用するので、ハッシュ値H(sj)を改ざんすることは非常に困難である。さらに、電子掲示板に書き込むのは、ハッシュ値H(sj)とハッシュ関数という少量のデータに限られ、電子掲示板の利用に関する手数料を少額に抑えることができる。
[第1の実施形態の変形例]
第1の実施形態の変形例について説明する。
第1の実施形態では、電子掲示板に書き込まれるデータを封印データ(初期乱数のハッシュ値)に限っている。第1の実施形態に係る変形例では、当該封印データに限らず、端末20が生成するユーザ乱数、ゲームサーバ10がゲームの進行と共に生成し、使用する乱数も電子掲示板に書き込まれる場合について説明する。
上記説明したように、第1の実施形態では、封印データ以外のデータ(ユーザ乱数r、乱数x)は、端末20とゲームサーバ10の間で授受が行われている。当該データの授受が電子掲示板を介して行われることで、ゲームサーバ10による乱数生成の公正性検証が端末20以外の装置(即ち、第3者)が行うことができる。
例えば、図12に示すように、上記端末20の一機能として説明した「乱数検証部」と同等の機能を有する検証装置50がシステムに含まれていてもよい。例えば、検証装置50は、裁判所等の機関に設置される装置であり、ユーザに対して提供されるサービス(例えば、オンラインゲームや電子抽選)の正当性を監視する。
以上のように、端末20が、ユーザ乱数を電子掲示板に書き込み、ゲームサーバ10(乱数生成装置)が、ゲームの進行に使用した乱数を電子掲示板に書き込んでもよい。その場合、当事者(端末20のユーザ)以外の第3者が、電子掲示板に書き込まれた、初期乱数の封印値、使用された乱数及びユーザ乱数を用いて、ゲームサーバ10による乱数生成の公正性を検証することができる。
[第2の実施形態]
続いて、第2の実施形態について図面を参照して詳細に説明する。
第1の実施形態では、謂わば、ゲームサーバ10とユーザが対戦するタイプのゲームを例にとり、公正な乱数生成方法を説明した。第2の実施形態では、ユーザ同士が対戦するフィールドをゲームサーバ10aが提供するタイプのゲームにおける公正な乱数生成方法を説明する。
第2の実施形態では、上記のようなゲームとして、「バックギャモン」を例に取り公正な乱数生成方法を説明する。なお、バックギャモンの詳細なルールの説明は省略するが、2人のユーザが交互にサイコロを振り、出た目の数字に応じて駒を動かすゲームである。第2の実施形態に係るゲームサーバ10aは、上記サイコロの目の選択に、後述する乱数生成を利用する。
なお、ゲームシステムの構成、各装置のハードウェア構成、処理構成は第1の実施形態と同様とすることが可能であるので、これらの説明は省略する。
第1及び第2の実施形態の相違点は、ゲームサーバ10aにおける乱数生成方法と、生成した乱数を2人のユーザ(複数のユーザ)に提供する点である。
図13は、第2の実施形態に係るゲームシステムの動作の一例を示すシーケンス図である。なお、図13は、ユーザj1とユーザj2が対戦するものとする。また、ゲームの開始に先立ち、ユーザj1とユーザj2はそれぞれアカウントの登録が完了しているものとする。
初めに、2人のユーザは、ゲームサーバ10aにログインし、ゲームを開始する(ステップS301)。
ゲームが開始され、乱数の発生(サイコロの目)が必要となると、図13のステップS302以降の処理が実行される。
ステップS302において、ゲームサーバ10aの第1の乱数生成部212は、ユーザj1用の初期乱数sj1を生成し、そのハッシュ値H(sj1)を電子掲示板に書き込む。また、ゲームサーバ10aは、当該書き込みに関する通知をユーザj1(端末20)に行う。
当該通知を受けた端末20(ユーザj1が操作する端末20)の乱数生成部311は、電子掲示板へのハッシュ値H(sj1)の書き込みを確認した後、ユーザ乱数rj1を生成し、ゲームサーバ10aに送信する(ステップS303)。
同様に、ゲームサーバ10aは、ユーザj2用の初期乱数sj2を生成し、ハッシュ値H(sj2)を電子掲示板に書き込む(ステップS304)。また、ユーザj2の端末20は、ユーザ乱数rj2を生成し、ゲームサーバ10aに送信する(ステップS305)。
2人のユーザからユーザ乱数rj1、rj2を受け取ったゲームサーバ10aの第2の乱数生成部213は、下記の式(2)により乱数xjを生成する。
xj(i)=Hash(sj1||sj2||rj1||rj2||i) mod m ・・・(2)
初回の乱数生成時には、式(2)により、乱数xj(1)が得られる(ステップS306-1)。生成された乱数xj(1)は、2人のユーザj1、j2に通知される(ステップS307-1)。その後、ゲームサーバ10aは、乱数xj(1)を先攻のユーザに適用する(ステップS308-1)。例えば、ゲームサーバ10aは、乱数xj(1)をサイコロの目(1~6)に変換し、先攻のユーザに通知する。通知を受けたユーザは、サイコロの目に応じて駒を動かし、ゲームを進める。
後攻のユーザに関する乱数xj(2)の生成も、式(2)に従って行われる(ステップS306-2)。生成された乱数xj(2)は、2人のユーザj1、j2に通知される(ステップS307-2)。その後、ゲームサーバ10aは、乱数xj(2)を後攻のユーザに適用する(ステップS308-2)。
上記のような、乱数生成、乱数通知、ユーザへの適用を繰り返しつつ、ゲームが終了する(ステップS309)。
ゲームが終了すると、ゲームサーバ10aは、初期乱数とユーザ乱数を、ユーザj1、j2に通知する(ステップS310)。具体的には、ゲームサーバ10aは、ユーザj1に対して、少なくとも、封印された初期乱数sj1、sj2を開封すると共にユーザ乱数rj2を通知する。同様に、ゲームサーバ10aは、ユーザj2に対して、少なくとも、封印された初期乱数sj1、sj2を開封すると共にユーザ乱数rj1を通知する。
通知を受けた各ユーザは、乱数xjの公平性を検証する(ステップS311、S312)。ユーザj1とユーザj2における乱数の公平性検証は同様の処理とすることができるので、ユーザj1における公平性検証に限って説明する。
第2の実施形態における乱数の公平性検証も、第1の実施形態と基本的には同じであり、2段階の検証により行われる。
第1の検証では、ステップS310にて得られた初期乱数sj1、sj2が、ユーザ乱数rj1、rj2の送信後に変更されたものではないことを検証する。具体的には、ユーザj1(端末20)は、初期乱数sj1、sj2のハッシュ値を計算し、当該ハッシュ値と電子掲示板から取得したハッシュ値がそれぞれ一致するか否かにより第1の検証を行う。
その後、ユーザj1は、ゲームの進行と共にゲームサーバ10aから通知された乱数xj(xj(1)、xj(2)、・・・)とゲームサーバ10aから通知された乱数(初期乱数、ユーザ乱数)に式(2)を適用することで得られる乱数xj’(xj’(1)、xj’(2)、・・・)を比較することで、第2の検証を行う。
なお、上記説明は、2人のユーザが対戦する場合の乱数生成について説明したが、3人以上のユーザが対戦する場合であっても、式(2)を適宜拡張することで、対応可能なことは当業者にとって明らかである。
以上のように、第2の実施形態では、ゲームサーバ10aは、複数のユーザそれぞれに対して生成した初期乱数と複数のユーザそれぞれから取得したユーザ乱数を用いて、乱数を生成する。その際、ゲームサーバ10aは、初期乱数の生成前にユーザ乱数を知ることができず、また、一度初期乱数を生成した後は当該乱数を変更することはできないため、乱数を操作することができない。このように、複数のユーザを対象とするゲームにおいて使用される乱数を、各ユーザ用に生成された初期乱数と各ユーザが個別に生成したユーザ乱数を用いて生成することができる。また、ゲームサーバ10aによる乱数生成の公正性を、各ユーザが検証することができる。
[第2の実施形態の変形例]
第2の実施形態の変形例について説明する。
上記第2の実施形態では、ゲームサーバ10aが2人のユーザj1、j2を対等に扱う限りにおいては公正な乱数の生成が行われる。しかし、例えば、ゲームサーバ10aとユーザj2(ユーザj2が操作する端末20)が共謀することで、ユーザj1に対して不利な(不公平な)乱数が生成される余地がある。具体的には、ゲームサーバ10aは、図13のステップS303により生成されたユーザ乱数rj1を取得した後に、ユーザj2用の初期乱数sj2を生成している。しかし、例えば、ゲームサーバ10aとユーザj2が結託することで、ゲームサーバ10aが初期乱数sj2を生成する前にユーザj2がユーザ乱数rj2を生成し、ゲームサーバ10aに提供することもできる。その結果、ゲームサーバ10aは、式(2)に示すハッシュ値yjを計算する際、ユーザj2にとって有利な結果が得られるように、初期乱数sj2を選択できる余地がある。
第2の実施形態の変形例では、ゲームサーバとユーザが結託することで、上記のような他のユーザに対して不公正な乱数生成を防止するシステムを提供する。
図14を参照しつつ、第2の実施形態とその変形例の相違点を中心に説明する。
ステップS403において、ユーザj1は、ユーザ乱数rj1を生成する。その後、ユーザj1は、当該ユーザ乱数rj1のハッシュ値H(rj1)をゲームサーバ10bに送信する(ステップS404)。
ステップS405において、ゲームサーバ10bは、ユーザj2用の初期乱数sj2を生成し、ハッシュ値H(sj2)を生成する。当該ハッシュ値H(sj2)は電子掲示板に書き込まれる。その後、ゲームサーバ10bは、ユーザ乱数rj1のハッシュ値H(rj1)をユーザj2に送信する(ステップS406)。
ステップS407において、ユーザj2は、ユーザ乱数rj2を生成し、当該生成したユーザ乱数rj2をゲームサーバ10bに送信する。
ステップS408において、ゲームサーバ10bは、ユーザj1にユーザ乱数rj2を送信する。
ステップS409において、上記送信を受けたユーザj1は、ユーザ乱数rj1の封印をゲームサーバ10bに開封する。
ゲームサーバ10bは、当該開封が正しいことを確認して、ゲームを開始する。つまり、ゲームサーバ10bは、初期乱数sj1、sj2及びユーザ乱数rj1、rj2を利用し、乱数xjを適宜生成する(ステップS410)。
このように、ユーザj2用の初期乱数sj2を生成する前に、ユーザj1はユーザ乱数rj1を生成するが、当該乱数の生成をした旨の通知はハッシュ値H(rj1)がゲームサーバ10bに送信されることで行われている。その後、ユーザj2に関する乱数(初期乱数sj2、ユーザ乱数rj2)の生成が行われ、ユーザj1からハッシュ値H(rj1)の開封が行われる。従って、ゲームサーバ10bは、ユーザj2用の初期乱数sjsを生成する前に、ユーザj1が生成したユーザ乱数rj1を知ることができない。その結果、例えば、ユーザj2とゲームサーバ10bが共謀し、ユーザj2に有利となるように(ユーザj1に不公平な)乱数xjが生成されることはない。
なお、図14のステップS407では、ユーザj2が生成したユーザ乱数rj2のハッシュ値H(rj2)はゲームサーバ10bに向けて送信されておらず、ユーザ乱数rj2がゲームサーバ10bに送信されている。ユーザj1に関しては、ハッシュ値H(rj1)が初めに送信されることの均衡から、ユーザj2のユーザ乱数rj2のハッシュ値H(rj2)をゲームサーバ10bに送信することも可能である。具体的には、図15に示す手順とすることができる。
具体的には、ユーザj2は、ユーザ乱数rj2を生成(ステップS507)した後、そのハッシュ値H(rj2)を計算して、当該ハッシュ値をゲームサーバ10bに送信する(ステップS508)。
その後、ゲームサーバ10bは、ユーザj1にユーザ乱数rj2のハッシュ値H(rj2)を送信する(ステップS509)。当該ハッシュ値を受信したユーザj1は、封印されたユーザ乱数rj1をゲームサーバ10bに開封する(ステップS510)。あるいは、後述するステップS512にて、ユーザj2がユーザ乱数rj1の開封が正しいことを確認する場合には、ユーザj1は、ユーザ乱数rj1をユーザj2にも開封する。
その後、ゲームサーバ10bは、ユーザj1による開封が正しいことを確認した後、ユーザ乱数rj1をユーザj2に送信する(ステップS511)。
ユーザj2は、必要に応じて、受信したユーザ乱数rj1のハッシュ値が正しいこと(ユーザj1による封印されたユーザ乱数rj1の開封が正しいこと)を確認した後、封印されたユーザ乱数rj2をゲームサーバ10bに開封する(ステップS512)。
ゲームサーバ10bは、ユーザj2による開封が正しいことを確認した後、乱数xjを生成する(ステップS513)。
なお、図14、図15に示す第2の実施形態に係る変形例において、ユーザj1、j2(各ユーザが使用する端末20)とゲームサーバ10bの間の情報授受は、電子掲示板を介して行われてもよいことは勿論である。また、ユーザj1、j2において行う乱数の公平性検証動作は、第2の実施形態と同様とすることができる。
第1及び第2の実施形態にて説明したゲームシステムの構成(図2)は例示であって、システムの構成を限定する趣旨ではない。例えば、ゲームサーバ10は、ゲームの遂行を担う装置と乱数の生成を担う装置(乱数生成装置)に分離されていてもよい。あるいは、ゲームサーバ10に、ユーザのアカウント登録機能が含まれていてもよい。
上記実施形態では、ゲームの進行に使用される乱数の生成は、ゲームサーバ10と端末20の間で閉じた処理となっているが、乱数生成の過程の一部をユーザに開放してもよい。例えば、図7のステップS107や図13のステップS303、S305にて、ユーザ乱数の生成が行われるが、その際の乱数生成にユーザの選択を反映させてもよい。例えば、端末20は、図16に示すような乱数選択画面を液晶パネル等に表示し、ユーザのアイコン選択動作を受け付ける。図16において、各アイコンにはランダムな数値が割り当てられている。端末20は、ユーザが選択したアイコン(選択肢)に割り当てられた数値を利用して、ユーザ乱数を生成してもよい。例えば、端末20は、アイコンの選択により定まるランダムな数値と、ユーザのIDと、現在時刻と、を連結することでユーザ乱数としてもよい。当該構成により、アイコンの選択と乱数生成をシームレスに行うことができる。なお、ユーザが乱数の生成に関与できるようにすることは、第1の実施形態だけでなく、第2の実施形態でも可能である。
上記実施形態では、端末20は、ゲームサーバ10による乱数生成の検証を行うものとして説明したが、端末20による乱数検証の可否をユーザが選択出来るようにしてもよい。例えば、端末20の表示画面に「検証可能乱数の使用要否」を尋ねるメッセージと選択肢(選択ボタン)を表示し、ユーザが「検証可能乱数を使用する」ことを選択した場合に、図8を用いて説明したような乱数の検証が行われてもよい。
上記実施形態では、式(1)や式(2)を利用して乱数xjを生成しているが、式(1)や(2)は例示であって乱数xjの生成方法を限定する趣旨ではない。例えば、式(1)では、初期乱数sj、ユーザ乱数rj及び乱数の生成に関する序数iに基づく値をハッシュ関数に入力し、ハッシュ関数の出力結果に基づき乱数を生成している。このような計算だとハッシュ関数の種類によっては、計算結果に偏りが生じる可能性がある。上記3つの入力情報のうち、同じゲームの最中(同じユーザjに向けた乱数)の生成では、初期乱数sj、ユーザ乱数rjは固定され、変わるのは序数iに限られる。すると、連結データの大半が変わらず一部だけが変わることになる。このような入力データ(連結データ)を用いて何回も乱数xjが生成されると、端末20は次の乱数xjの値を予測できる可能性がある。このような不都合を回避するため、下記の式(3)や(4)に示すように、ハッシュ関数に入力する連結データを工夫してもよい。
xj(i)=Hash(i||sj||rj||i) mod m ・・・(3)
xj(i)=Hash(i||sj||i||rj||i) mod m ・・・(4)
式(3)では、序数iにより初期乱数sjとユーザ乱数rjを挟み、式(4)では、序数iと乱数(初期乱数sj、ユーザ乱数rj)を交互に配置している。このように序数iを分散してハッシュ関数に入力する連結データを生成することにより、生成される乱数xjの偏りをなくすことができる(低減することができる)。つまり、乱数の生成の度に値が変化する乱数の生成に関する序数iが2回以上用いられてハッシュ関数への入力値(連結データ)が生成されてもよい。
あるいは、乱数xjの偏りをなくすことを目的として、初期乱数sjやユーザ乱数rjを所定の関数に入力し、当該関数の出力結果を用いてハッシュ関数に入力する連結データを生成してもよい。即ち、ハッシュ関数に入力する連結データ(ハッシュ関数への入力値)の生成には、初期乱数sjより導出された値、ユーザ乱数rjより導出された値及び乱数生成に関する序数iより導出された値の少なくとも1つが含まれていてもよい。換言するならば、初期乱数sj、ユーザ乱数rj、序数iを基礎とする情報(乱数や序数そのもの又は関数等の出力結果)を用いて乱数が生成されてもよい。例えば、式(5)に示す方法により乱数xjを生成してもよい。
xj(i)=Hash(f(sj)||f(rj)||i) mod m ・・・(5)
また、上記関数f()はハッシュ関数を用いてもよい。
なお、上記式(3)~(5)では、序数iそのものを乱数xjの生成に利用しているが、序数iを所定の関数に入力しその結果を乱数xjの生成に利用してもよい。
このように、ハッシュ関数への入力は、初期乱数sjより導出された値、ユーザ乱数rjより導出された値及び乱数生成に関する序数iより導出された値の少なくとも1つを含んでもよい。
コンピュータの記憶部に、上述したコンピュータプログラムをインストールすることにより、コンピュータを乱数生成装置として機能させることができる。さらにまた、上述したコンピュータプログラムをコンピュータに実行させることにより、コンピュータにより乱数生成方法を実行することができる。
また、上述の説明で用いた複数のフローチャートでは、複数の工程(処理)が順番に記載されているが、各実施形態で実行される工程の実行順序は、その記載の順番に制限されない。各実施形態では、例えば各処理を並行して実行する等、図示される工程の順番を内容的に支障のない範囲で変更することができる。また、上述の各実施形態は、内容が相反しない範囲で組み合わせることができる。
なお、引用した上記の特許文献の開示は、本書に引用をもって繰り込むものとする。本発明の全開示(請求の範囲を含む)の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の全開示の枠内において種々の開示要素(各請求項の各要素、各実施形態ないし実施例の各要素、各図面の各要素等を含む)の多様な組み合わせ、ないし、選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。