特許第6859645号(P6859645)IP Force 特許公報掲載プロジェクト 2015.5.11 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 日本電気株式会社の特許一覧
特許6859645乱数生成システム、乱数生成装置、乱数生成方法及びプログラム
<>
  • 特許6859645-乱数生成システム、乱数生成装置、乱数生成方法及びプログラム 図000002
  • 特許6859645-乱数生成システム、乱数生成装置、乱数生成方法及びプログラム 図000003
  • 特許6859645-乱数生成システム、乱数生成装置、乱数生成方法及びプログラム 図000004
  • 特許6859645-乱数生成システム、乱数生成装置、乱数生成方法及びプログラム 図000005
  • 特許6859645-乱数生成システム、乱数生成装置、乱数生成方法及びプログラム 図000006
  • 特許6859645-乱数生成システム、乱数生成装置、乱数生成方法及びプログラム 図000007
  • 特許6859645-乱数生成システム、乱数生成装置、乱数生成方法及びプログラム 図000008
  • 特許6859645-乱数生成システム、乱数生成装置、乱数生成方法及びプログラム 図000009
  • 特許6859645-乱数生成システム、乱数生成装置、乱数生成方法及びプログラム 図000010
  • 特許6859645-乱数生成システム、乱数生成装置、乱数生成方法及びプログラム 図000011
  • 特許6859645-乱数生成システム、乱数生成装置、乱数生成方法及びプログラム 図000012
  • 特許6859645-乱数生成システム、乱数生成装置、乱数生成方法及びプログラム 図000013
  • 特許6859645-乱数生成システム、乱数生成装置、乱数生成方法及びプログラム 図000014
  • 特許6859645-乱数生成システム、乱数生成装置、乱数生成方法及びプログラム 図000015
  • 特許6859645-乱数生成システム、乱数生成装置、乱数生成方法及びプログラム 図000016
  • 特許6859645-乱数生成システム、乱数生成装置、乱数生成方法及びプログラム 図000017
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6859645
(24)【登録日】2021年3月30日
(45)【発行日】2021年4月14日
(54)【発明の名称】乱数生成システム、乱数生成装置、乱数生成方法及びプログラム
(51)【国際特許分類】
   G06F 7/58 20060101AFI20210405BHJP
   A63F 7/02 20060101ALI20210405BHJP
【FI】
   G06F7/58
   A63F7/02 326Z
   A63F7/02 334
【請求項の数】7
【全頁数】32
(21)【出願番号】特願2016-190730(P2016-190730)
(22)【出願日】2016年9月29日
(65)【公開番号】特開2018-50973(P2018-50973A)
(43)【公開日】2018年4月5日
【審査請求日】2019年8月5日
【前置審査】
(73)【特許権者】
【識別番号】000004237
【氏名又は名称】日本電気株式会社
(74)【代理人】
【識別番号】100080816
【弁理士】
【氏名又は名称】加藤 朝道
(74)【代理人】
【識別番号】100098648
【弁理士】
【氏名又は名称】内田 潔人
(72)【発明者】
【氏名】佐古 和恵
【審査官】 白石 圭吾
(56)【参考文献】
【文献】 特開平10−207971(JP,A)
【文献】 特表2016−505887(JP,A)
【文献】 特表2014−521132(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 7/58
A63F 7/02
(57)【特許請求の範囲】
【請求項1】
第1及び第2の端末と、
前記第1及び第2の端末用の乱数を生成する、乱数生成装置と、
ブロックチェーンにより各種情報を管理する電子掲示板を提供する、二以上の管理サーバからなるデータ管理システムと、
を含み、
前記管理サーバは、
他の装置との間と通信を行う通信制御部と、
記憶部と、
電子掲示板へのアクセス要求を処理する台帳管理部と、
を含み、
前記台帳管理部は、さらに、
データ管理台帳を他の管理サーバにて共有するためのブロックを生成するブロック生成部と、
記憶部に格納されているデータ管理台帳(ブロック)に基づいて、他の管理サーバが送信するブロックの正当性を検証するブロック検証部と、
を含み、
前記乱数生成装置は、前記第1の端末についての第1の初期乱数を生成すると共に、
前記第1の初期乱数の封印値を生成し、
前記封印値を前記電子掲示板に書き込み、
前記第1の端末は、第1のユーザ乱数を生成すると共に、前記第1のユーザ乱数の封印値を前記乱数生成装置に送信し、
前記乱数生成装置は、前記第1のユーザ乱数の封印値を受信した後、前記第2の端末についての第2の初期乱数を生成すると共に、前記第2の初期乱数の封印値を生成し、
前記封印値を前記電子掲示板に書き込み、
前記第1のユーザ乱数の封印値を前記第2の端末に送信し、
前記第2の端末は、前記第1のユーザ乱数の封印値を受信した後に、第2のユーザ乱数を生成すると共に、前記生成された第2のユーザ乱数を前記乱数生成装置に送信し、
前記乱数生成装置は、前記第2のユーザ乱数を前記第1の端末に送信し、
前記第1の端末は、前記第2のユーザ乱数を受信した後に、前記第1のユーザ乱数の封印を前記乱数生成装置に開封し、
前記乱数生成装置は、少なくとも、前記第1及び第2の初期乱数と前記第1及び第2のユーザ乱数に基づき、乱数を生成する、乱数生成システム。
【請求項2】
第1及び第2の端末と、
前記第1及び第2の端末用の乱数を生成する、乱数生成装置と、
ブロックチェーンにより各種情報を管理する電子掲示板を提供する、二以上の管理サーバからなるデータ管理システムと、
を含み、
前記管理サーバは、
他の装置との間と通信を行う通信制御部と、
記憶部と、
電子掲示板へのアクセス要求を処理する台帳管理部と、
を含み、
前記台帳管理部は、さらに、
データ管理台帳を他の管理サーバにて共有するためのブロックを生成するブロック生成部と、
記憶部に格納されているデータ管理台帳(ブロック)に基づいて、他の管理サーバが送信するブロックの正当性を検証するブロック検証部と、
を含み、
前記乱数生成装置は、前記第1の端末についての第1の初期乱数を生成すると共に、
前記第1の初期乱数の封印値を生成し、
前記封印値を前記電子掲示板に書き込み、
前記第1の端末は、第1のユーザ乱数を生成すると共に、前記第1のユーザ乱数の封印値を前記乱数生成装置に送信し、
前記乱数生成装置は、前記第1のユーザ乱数の封印値を受信した後、前記第2の端末についての第2の初期乱数を生成すると共に、
前記第2の初期乱数の封印値を生成し、
前記封印値を前記電子掲示板に書き込み、
前記第1のユーザ乱数の封印値を前記第2の端末に送信し、
前記第2の端末は、前記第1のユーザ乱数の封印値を受信した後に、第2のユーザ乱数を生成すると共に、前記生成された第2のユーザ乱数の封印値を前記乱数生成装置に送信し、
前記乱数生成装置は、前記第2のユーザ乱数の封印値を前記第1の端末に送信し、
前記第1の端末は、前記第2のユーザ乱数の封印値を受信した後に、前記第1のユーザ乱数の封印を前記乱数生成装置に開封し、
前記乱数生成装置は、前記第1のユーザ乱数の開封後、前記第1のユーザ乱数を前記第2の端末に送信し、
前記第2の端末は、前記第1のユーザ乱数を受信した後に、前記第2のユーザ乱数の封印を前記乱数生成装置に開封し、
前記乱数生成装置は、少なくとも、前記第1及び第2の初期乱数と前記第1及び第2のユーザ乱数に基づき、乱数を生成する、乱数生成システム。
【請求項3】
前記第1及び第2の端末は、ユーザの選択した選択肢に関連付けられた数値を利用し、前記第1及び第2のユーザ乱数を生成する、請求項1または2に記載の乱数生成システム。
【請求項4】
第1及び第2の端末と、
ブロックチェーンにより各種情報を管理する電子掲示板を提供する、二以上の管理サーバからなるデータ管理システムと、
前記第1及び第2の端末用の乱数を生成する、乱数生成装置と、
を含むシステムにおいて、
前記管理サーバが、他の装置との間と通信を行うステップと、
前記管理サーバが、電子掲示板へのアクセス要求を処理するステップと、
前記管理サーバが、データ管理台帳を他の管理サーバにて共有するためのブロックを生成するステップと、
前記管理サーバが、記憶部に格納されているデータ管理台帳(ブロック)に基づいて、他の管理サーバが送信するブロックの正当性を検証するステップと、
前記乱数生成装置は、前記第1の端末についての第1の初期乱数を生成するステップと、
前記第1の初期乱数の封印値を生成するステップと、
前記封印値を前記電子掲示板に書き込むステップと、
前記第1の端末は、第1のユーザ乱数を生成するステップと、
前記第1のユーザ乱数の封印値を前記乱数生成装置に送信するステップと、
前記乱数生成装置は、前記第1のユーザ乱数の封印値を受信した後、前記第2の端末についての第2の初期乱数を生成するステップと、
前記第2の初期乱数の封印値を生成するステップと、
前記封印値を前記電子掲示板に書き込むステップと、
前記第1のユーザ乱数の封印値を前記第2の端末に送信するステップと、
前記第2の端末は、前記第1のユーザ乱数の封印値を受信した後に、第2のユーザ乱数を生成するステップと、
前記生成された第2のユーザ乱数を前記乱数生成装置に送信するステップと、
前記乱数生成装置は、前記第2のユーザ乱数を前記第1の端末に送信するステップと、
前記第1の端末は、前記第2のユーザ乱数を受信した後に、前記第1のユーザ乱数の封印を前記乱数生成装置に開封するステップと、
前記乱数生成装置は、少なくとも、前記第1及び第2の初期乱数と前記第1及び第2のユーザ乱数に基づき、乱数を生成するステップと、からなる乱数生成方法。
【請求項5】
第1及び第2の端末と、
ブロックチェーンにより各種情報を管理する電子掲示板を提供する、二以上の管理サーバからなるデータ管理システムと、
前記第1及び第2の端末用の乱数を生成する、乱数生成装置と、
を含むシステムにおいて、
前記管理サーバが、他の装置との間と通信を行うステップと、
前記管理サーバが、電子掲示板へのアクセス要求を処理するステップと、
前記管理サーバが、データ管理台帳を他の管理サーバにて共有するためのブロックを生成するステップと、
前記管理サーバが、記憶部に格納されているデータ管理台帳(ブロック)に基づいて、他の管理サーバが送信するブロックの正当性を検証するステップと、
前記乱数生成装置は、前記第1の端末についての第1の初期乱数を生成するステップと、
前記乱数生成装置は、前記第1の初期乱数の封印値を生成するステップと、
前記封印値を前記電子掲示板に書き込むステップと、
前記第1の端末は、第1のユーザ乱数を生成するステップと、
前記第1のユーザ乱数の封印値を前記乱数生成装置に送信するステップと、
前記乱数生成装置は、前記第1のユーザ乱数の封印値を受信した後、前記第2の端末についての第2の初期乱数を生成するステップと、
前記第2の初期乱数の封印値を生成するステップと、
前記封印値を前記電子掲示板に書き込むステップと、
前記第1のユーザ乱数の封印値を前記第2の端末に送信するステップと、
前記第2の端末は、前記第1のユーザ乱数の封印値を受信した後に、第2のユーザ乱数を生成するステップと、
前記生成された第2のユーザ乱数の封印値を前記乱数生成装置に送信するステップと、
前記乱数生成装置は、前記第2のユーザ乱数の封印値を前記第1の端末に送信するステップと、
前記第1の端末は、前記第2のユーザ乱数の封印値を受信した後に、前記第1のユーザ乱数の封印を前記乱数生成装置に開封するステップと、
前記乱数生成装置は、前記第1のユーザ乱数の開封後、前記第1のユーザ乱数を前記第2の端末に送信するステップと、
前記第2の端末は、前記第1のユーザ乱数を受信した後に、前記第2のユーザ乱数の封印を前記乱数生成装置に開封するステップと、
前記乱数生成装置は、少なくとも、前記第1及び第2の初期乱数と前記第1及び第2のユーザ乱数に基づき、乱数を生成するステップと、からなる乱数生成方法。
【請求項6】
第1及び第2の端末と、
ブロックチェーンにより各種情報を管理する電子掲示板を提供する、二以上の管理サーバからなるデータ管理システムと、
前記第1及び第2の端末用の乱数を生成する、乱数生成装置と、
を含むシステムにおいて、
前記管理サーバが、他の装置との間と通信を行う処理と、
前記管理サーバが、電子掲示板へのアクセス要求を処理する処理と、
前記管理サーバが、データ管理台帳を他の管理サーバにて共有するためのブロックを生成する処理と、
前記管理サーバが、記憶部に格納されているデータ管理台帳(ブロック)に基づいて、他の管理サーバが送信するブロックの正当性を検証する処理と、
前記乱数生成装置は、前記第1の端末についての第1の初期乱数を生成する処理と、
前記第1の初期乱数の封印値を生成する処理と、
前記封印値を前記電子掲示板に書き込む処理と、
前記第1の端末は、第1のユーザ乱数を生成する処理と、
前記第1のユーザ乱数の封印値を前記乱数生成装置に送信する処理と、
前記乱数生成装置は、前記第1のユーザ乱数の封印値を受信した後、前記第2の端末についての第2の初期乱数を生成する処理と、
前記第2の初期乱数の封印値を生成する処理と、
前記封印値を前記電子掲示板に書き込む処理と、
前記第1のユーザ乱数の封印値を前記第2の端末に送信する処理と、
前記第2の端末は、前記第1のユーザ乱数の封印値を受信した後に、第2のユーザ乱数を生成する処理と、
前記生成された第2のユーザ乱数を前記乱数生成装置に送信する処理と、
前記乱数生成装置は、前記第2のユーザ乱数を前記第1の端末に送信する処理と、
前記第1の端末は、前記第2のユーザ乱数を受信した後に、前記第1のユーザ乱数の封印を前記乱数生成装置に開封する処理と、
前記乱数生成装置は、少なくとも、前記第1及び第2の初期乱数と前記第1及び第2のユーザ乱数に基づき、乱数を生成する処理と、を計算機に実行させるためのプログラム。
【請求項7】
第1及び第2の端末と、
ブロックチェーンにより各種情報を管理する電子掲示板を提供する、二以上の管理サーバからなるデータ管理システムと、
前記第1及び第2の端末用の乱数を生成する、乱数生成装置と、
を含むシステムにおいて、
前記管理サーバが、他の装置との間と通信を行う処理と、
前記管理サーバが、電子掲示板へのアクセス要求を処理する処理と、
前記管理サーバが、データ管理台帳を他の管理サーバにて共有するためのブロックを生成する処理と、
前記管理サーバが、記憶部に格納されているデータ管理台帳(ブロック)に基づいて、他の管理サーバが送信するブロックの正当性を検証する処理と、
前記乱数生成装置は、前記第1の端末についての第1の初期乱数を生成する処理と、
前記乱数生成装置は、前記第1の初期乱数の封印値を生成する処理と、
前記封印値を前記電子掲示板に書き込む処理と、
前記第1の端末は、第1のユーザ乱数を生成する処理と、
前記第1のユーザ乱数の封印値を前記乱数生成装置に送信する処理と、
前記乱数生成装置は、前記第1のユーザ乱数の封印値を受信した後、前記第2の端末についての第2の初期乱数を生成する処理と、
前記第2の初期乱数の封印値を生成する処理と、
前記封印値を前記電子掲示板に書き込む処理と、
前記第1のユーザ乱数の封印値を前記第2の端末に送信する処理と、
前記第2の端末は、前記第1のユーザ乱数の封印値を受信した後に、第2のユーザ乱数を生成する処理と、
前記生成された第2のユーザ乱数の封印値を前記乱数生成装置に送信する処理と、
前記乱数生成装置は、前記第2のユーザ乱数の封印値を前記第1の端末に送信する処理と、
前記第1の端末は、前記第2のユーザ乱数の封印値を受信した後に、前記第1のユーザ乱数の封印を前記乱数生成装置に開封する処理と、
前記乱数生成装置は、前記第1のユーザ乱数の開封後、前記第1のユーザ乱数を前記第2の端末に送信する処理と、
前記第2の端末は、前記第1のユーザ乱数を受信した後に、前記第2のユーザ乱数の封印を前記乱数生成装置に開封する処理と、
前記乱数生成装置は、少なくとも、前記第1及び第2の初期乱数と前記第1及び第2のユーザ乱数に基づき、乱数を生成する処理と、を計算機に実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、乱数生成システム、乱数生成装置、乱数生成方法及びプログラムに関する。
【背景技術】
【0002】
ネットワーク技術、情報処理技術の進展に伴い、ネットワークを介して種々のサービス(オンラインサービスとも称される)が提供されている。上記サービスの一例として、オンラインゲームが存在する。オンラインゲームには様々な形態が存在し、例えば、ゲームサーバがゲームの進行を担うタイプのオンラインゲーム(例えば、ロールプレイングゲーム)や、ユーザ同士が対戦するフィールドをゲームサーバが提供するタイプのオンラインゲーム(例えば、チェス等のボードゲーム)が存在する。
【0003】
また、ゲームの娯楽的要素を高める等を目的として、ゲームサーバが乱数を生成することがある。例えば、特許文献1では、ゲームの進行を生成した乱数により決定している(段落[0042]、[0046])。また、特許文献2には、ゲームの中で使用するアイテムの抽選処理に乱数を使用することが記載されている(段落[0217])。
【0004】
なお、ゲーム以外にも、乱数を用いるオンラインサービスが存在する。例えば、電子抽選では乱数を用いて、当選者を決定する。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2015−058044号公報
【特許文献2】特開2013−198591号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
なお、上記先行技術文献の各開示を、本書に引用をもって繰り込むものとする。以下の分析は、本発明者らによってなされたものである。
【0007】
上述のように、オンラインサービスでは、生成された乱数をサービス遂行の一要素として扱うことがある。その結果、例えば、オンラインゲームでは、生成された乱数がゲームの進行に大きな影響を及ぼすことがある。例えば、ロールプレイングゲームのモンスターに与えられるダメージが乱数により決定されている場合に、当該モンスターを倒せるか否かは乱数に大きく依存することになる。
【0008】
首尾良くモンスターを倒せた場合には、ユーザが当該結果に対して不満を覚えることはないと考えられるが、モンスターを倒せない場合に、ユーザが「サーバに有利なように乱数を生成しているのではないか」と考える可能性がある。さらに、乱数を用いた抽選によりアイテムの取得可否が定まるようなゲームの場合には、上記疑念がより大きくなることも予想される。このように、乱数を使用するオンラインサービスでは、サーバが乱数を管理する以上、ユーザは、公平な乱数が使用されていないと疑念を持つ可能性がある。
【0009】
本発明は、ユーザにとって公平な乱数を生成する、乱数生成システム、乱数生成装置、乱数生成方法及びプログラムを、提供することを目的とする。
【課題を解決するための手段】
【0010】
本発明の第1の視点によれば、端末と、前記端末用の乱数を生成する、乱数生成装置と、を含み、前記乱数生成装置は、初期乱数の封印値を生成し、前記端末は、前記初期乱数の封印値が生成された後に、ユーザ乱数を生成し、前記乱数生成装置は、少なくとも前記ユーザ乱数と前記初期乱数に基づき乱数を生成する、乱数生成システムが提供される。
【0011】
本発明の第2の視点によれば、初期乱数を生成し、前記初期乱数の封印値を生成する、第1の乱数生成部と、前記初期乱数の封印値が生成された後に端末が生成したユーザ乱数と、前記初期乱数と、に基づき乱数を生成する、第2の乱数生成部と、を備える、乱数生成装置が提供される。
【0012】
本発明の第3の視点によれば、端末と、前記端末用の乱数を生成する、乱数生成装置と、を含むシステムにおいて、前記乱数生成装置が、初期乱数の封印値を生成するステップと、前記端末が、前記初期乱数の封印値が生成された後に、ユーザ乱数を生成するステップと、前記乱数生成装置が、少なくとも前記ユーザ乱数と前記初期乱数に基づき乱数を生成するステップと、を含む、乱数生成方法が提供される。
【0013】
本発明の第4の視点によれば、初期乱数を生成し、前記初期乱数の封印値を生成する処理と、前記初期乱数の封印値が生成された後に端末が生成したユーザ乱数と、前記初期乱数と、に基づき乱数を生成する処理と、をコンピュータに実行させるプログラムが提供される。
なお、このプログラムは、コンピュータが読み取り可能な記憶媒体に記録することができる。記憶媒体は、半導体メモリ、ハードディスク、磁気記録媒体、光記録媒体等の非トランジェント(non-transient)なものとすることができる。本発明は、コンピュータプログラム製品として具現することも可能である。
【発明の効果】
【0014】
本発明の各視点によれば、ユーザにとって公平な乱数を生成することに寄与する、乱数生成システム、乱数生成装置、乱数生成方法及びプログラムが、提供される。
【図面の簡単な説明】
【0015】
図1】一実施形態の概要を説明するための図である。
図2】第1の実施形態に係るゲームシステムの構成の一例を示す図である。
図3】第1の実施形態に係るゲームシステムの動作概略の一例を示すシーケンス図である。
図4】第1の実施形態に係るゲームサーバのハードウェア構成の一例を示すブロック図である。
図5】第1の実施形態に係るゲームサーバの処理構成の一例を示すブロック図である。
図6】第1の実施形態に係る端末の処理構成の一例を示すブロック図である。
図7】第1の実施形態に係るゲームシステムの動作の一例を示すシーケンス図である。
図8】端末による乱数の公平性検証に係る動作の一例を示すフローチャートである。
図9】第1の実施形態に係る管理サーバの処理構成の一例を示すブロック図である。
図10】第1の実施形態に係る管理サーバが生成するブロックの一例を示す図である。
図11】第1の実施形態に係る管理サーバの動作の一例を示すシーケンス図である。
図12】第1の実施形態の変形例に係るゲームシステムの構成の一例を示す図である。
図13】第2の実施形態に係るゲームシステムの動作の一例を示すシーケンス図である。
図14】第2の実施形態の変形例に係るゲームシステムの動作の一例を示すシーケンス図である。
図15】第2の実施形態の変形例に係るゲームシステムの動作の一例を示すシーケンス図である。
図16】乱数の生成にユーザが関与する場合の表示画面の一例を示す図である。
【発明を実施するための形態】
【0016】
初めに、一実施形態の概要について説明する。なお、この概要に付記した図面参照符号は、理解を助けるための一例として各要素に便宜上付記したものであり、この概要の記載はなんらの限定を意図するものではない。
【0017】
一実施形態に係る乱数生成システムは、端末101と、端末101用の乱数を生成する、乱数生成装置102と、を含む。乱数生成装置102は、初期乱数の封印値を生成する。端末101は、初期乱数の封印値が生成された後に、ユーザ乱数を生成する。乱数生成装置102は、少なくともユーザ乱数と初期乱数に基づき乱数を生成する。
【0018】
上記乱数生成システムでは、乱数生成装置102は、端末101用の乱数の生成に先だって、初期乱数を生成する。また、端末101は、初期乱数の封印値が生成されたことに応じて、ユーザ乱数を生成し、乱数生成装置102に提供する。乱数生成装置102は、先に生成した初期乱数とユーザ乱数を用いて、端末101用の乱数を生成する。乱数生成装置102による乱数の生成には、乱数生成装置102及び端末101が互いに操作することができない初期乱数とユーザ乱数が必要となるので、端末101を操作するユーザにとって公平な乱数が生成される。
【0019】
以下に具体的な実施の形態について、図面を参照してさらに詳しく説明する。なお、各実施形態において同一構成要素には同一の符号を付し、その説明を省略する。
【0020】
[第1の実施形態]
第1の実施形態について、図面を用いてより詳細に説明する。
【0021】
[システム構成概略]
図2は、第1の実施形態に係るゲームシステムの構成の一例を示す図である。図2を参照すると、ゲームシステムは、ゲームサーバ10と、端末20−1〜20−n(nは正の整数、以下同じ)と、データ管理システム30と、を含んで構成される。ゲームサーバ10、端末20−1〜20−n及びデータ管理システム30のそれぞれは、インターネット等のネットワークを介して相互に接続されている。なお、以降の説明において、端末20−1〜20−nを区別する特段の理由が無い場合には単に「端末20」と表記する。
【0022】
なお、ゲームシステムを例に取り第1の実施形態の説明を行うが、以下に説明する公正な乱数生成の手法は、他のシステムに適用できることは勿論である。例えば、当該手法は、電子的に抽選を行う電子抽選システムの乱数生成に適用されてもよい。
【0023】
ゲームサーバ10は、ユーザにオンラインゲームを提供する装置である。具体的には、ゲームサーバ10は、ユーザを認証する処理(ログイン/ログアウト処理)、ゲーム進行に係る処理(ゲーム進行処理)等を行う。なお、第1の実施形態にて想定するオンラインゲームは、ゲームサーバ10がゲームの進行を担うタイプのゲーム(例えば、ロールプレイングゲーム)を想定する。つまり、ゲームサーバ10は、端末20用の乱数を生成する乱数生成装置として動作する。
【0024】
端末20は、オンラインゲームをプレイするユーザが使用する装置である。例えば、パーソナルコンピュータやスマートフォン等の情報処理装置が、上記端末に相当する。
【0025】
データ管理システム30は、オンラインゲームの運営会社から独立した立場の機関等が運営するシステムである。データ管理システム30は、外部(第3者)に対し、データの書き込み及び読み出しの可能な電子掲示板を提供するシステムである。データ管理システム30は、所謂、ブロックチェーンにより各種情報を管理する。
【0026】
データ管理システム30は、所定の手数料を支払うことで、どのような主体でも情報を追記できると共に、書き込まれた情報を読み出すことができ、且つ、一度書き込まれた情報は消去されたり改ざんされたりすることのない電子掲示板を提供する。より正確には、データ管理システム30は、外部装置からは電子掲示板のように扱うことのできるデータ入出力に係るインターフェイスを提供するシステムである。なお、以降の説明において、データ管理システム30はゲームサーバ10の運営会社等から独立した機関等により運営、管理されることを前提とするが、データ管理システム30によるデータ管理の正当性が確保される場合には、ゲームサーバ10等の運営会社が上記電子掲示板を提供してもよい。勿論、この場合には、ゲームサーバ10等は手数料の支払いを必要とすることなく、電子掲示板を利用できる。
【0027】
図2に示すゲームシステムでは、ゲームの進行に必要なデータ(より正確には、後述する初期乱数を封印した封印データ)の授受を、データ管理システム30が提供する電子掲示板を介して行う。なお、上述のように、データ管理システム30は、第3者に電子掲示板を提供するシステムであるため、当該電子掲示板には上記封印データとは無関係なデータ(例えば、商品の売上データ等)が混在することとなる。
【0028】
データ管理システム30は、複数の管理サーバ40−1〜40−4から構成されている。なお、図2の例示は、データ管理システム30を構成する管理サーバの台数を4台に限定する趣旨ではない。データ管理システム30は2台以上の管理サーバを含んで構成されていればよい。
【0029】
データ管理システム30をなす複数の管理サーバ40は、図2に示すように、相互に直接接続されている。即ち、データ管理システム30は、P2P(Peer to Peer)接続された複数の管理サーバ40を含んで構成される。
【0030】
データ管理システム30では、P2P接続された複数の管理サーバ40それぞれが、外部から受信したデータ(乱数データや売上データ等)を管理するための台帳(以下、データ管理台帳と表記する)を有する。データ管理システム30は、当該データ管理台帳を複数の管理サーバ40に分散して共有し、管理する。
【0031】
以降の説明において、データ管理システム30とその外部とのデータの授受は、データ管理システム30と、ゲームサーバ10及び端末20の間に限って説明する。但し、実際には、データ管理システム30は、汎用的な電子掲示板を広く第3者に提供するものであるため、ゲームサーバ10等以外との間でもデータの授受が行われる。
【0032】
[システム動作概略]
次に、図面を参照しつつ、第1の実施形態に係るゲームシステムの動作概略を説明する。図3は、第1の実施形態に係るゲームシステムの動作概略の一例を示すシーケンス図である。
【0033】
ゲームサーバ10の提供するオンラインゲームのプレイを希望するユーザは、端末20を操作して、例えば、ゲームサーバ10の運営会社が用意するWEB(ウェブ)ページにアクセスし、ユーザ登録(アカウント登録)を行う(ステップS01)。アカウント登録を終えると、ユーザは、ゲームサーバ10にログインするための認証情報(ID(Identifier)、パスワード)を取得する。
【0034】
また、上記IDやパスワードに係る情報は、ゲームサーバ10が参照可能となるように配置される。例えば、アカウント登録処理が終了すると上記情報がゲームサーバ10に送信され、ゲームサーバ10の内部記憶装置に格納される。あるいは、ゲームサーバ10がアクセス可能なデータベースに上記情報(ID、パスワード)が格納されていてもよい。
【0035】
ユーザは、上記取得した認証情報(IDとパスワードの組み合わせ)をゲームサーバ10に提供して、ゲームサーバ10にログインする(ステップS02)。
【0036】
ゲームサーバ10は、ユーザから提供された認証情報を用いてユーザ認証を行い、正当なユーザであることが確認できた場合に、ゲームを開始する(ステップS03)。
【0037】
なお、オンラインゲームにおける、サーバ(ゲームサーバ10)とクライアント(端末20)の間の情報のやり取りには種々の形態が考えられるが、本願開示においてはどのような形態であってもよい。例えば、端末20にゲーム専用のアプリケーションをインストールすることなく、HTML(Hyper Text Markup Language)ソースでの汎用処理によりオンラインゲームを提供する形態であってもよいし、端末20に専用のアプリケーションをインストールする形態であってもよい。
【0038】
ゲームサーバ10は、ゲームの進行中に乱数の生成が必要か否かを判定する(ステップS04)。
【0039】
乱数の生成が必要な場合(ステップS04、Yes分岐)、ゲームサーバ10は乱数生成に係る処理を起動する(ステップS05)。その際、ゲームサーバ10、端末20及びデータ管理システム30の間で乱数生成に必要な情報のやり取りが行われ、ゲームの進行に必要な乱数が生成される。ステップS05の乱数生成に係る処理の詳細は後述する。
【0040】
ゲームサーバ10は、ゲーム終了のために設けられた種々の条件(例えば、タイムオーバ等の条件)を確認することで、ゲームが終了したか否かを判定する(ステップS06)。ゲームが続行している間(ステップS06、No分岐)は、乱数生成の要否が確認され(ステップS04)、乱数の生成が必要な場合には乱数が生成され続ける。ゲームサーバ10は、ゲームが終了したと判定した場合(ステップS06、Yes分岐)には、その旨を端末20に通知する(ステップS07)。
【0041】
当該通知を受けた端末20は、ゲームをプレイしている最中に用いられた乱数(ゲームサーバ10が生成した乱数)が公平なものであるか否かを検証する(ステップS08)。端末20は、データ管理システム30が提供する電子掲示板から、乱数の公平性検証のために必要な封印データを取得し、当該データを用いて乱数の公平性を検証する。端末20による乱数の公平性検証に係る処理の詳細は後述する。
【0042】
検証の結果、ゲームサーバ10による乱数生成の公正性に疑義が有る場合には、ユーザは、例えば、ゲームサーバ10の運営会社にその旨を伝える(抗議する)等の行動を取ることができる。
【0043】
なお、図3の説明では、端末20によるゲームサーバ10からのログアウトについて記載していないが、ユーザは、ゲームを続行する意思のない場合に、ゲームサーバ10からログアウトする。
【0044】
[ハードウェア構成]
次に、第1の実施形態に係るゲームシステムを構成する各種装置のハードウェア構成を説明する。図4は、第1の実施形態に係るゲームサーバ10のハードウェア構成の一例を示すブロック図である。
【0045】
ゲームサーバ10は、情報処理装置(コンピュータ)により構成可能であり、図4に例示する構成を備える。例えば、ゲームサーバ10は、内部バスにより相互に接続される、CPU(Central Processing Unit)11、メモリ12、入出力インターフェイス13及び通信手段であるNIC(Network Interface Card)14等を備える。
【0046】
但し、図4に示す構成は、ゲームサーバ10のハードウェア構成を限定する趣旨ではない。ゲームサーバ10は、図示しないハードウェアを含んでもよいし、必要に応じて入出力インターフェイス13を備えていなくともよい。また、ゲームサーバ10に含まれるCPU等の数も図4の例示に限定する趣旨ではなく、例えば、複数のCPUがゲームサーバ10に含まれていてもよい。
【0047】
メモリ12は、RAM(Random Access Memory)、ROM(Read Only Memory)、補助記憶装置(ハードディスク等)である。
【0048】
入出力インターフェイス13は、図示しない表示装置や入力装置のインターフェイスとなる手段である。表示装置は、例えば、液晶ディスプレイ等である。入力装置は、例えば、キーボードやマウス等のユーザ操作を受け付ける装置である。
【0049】
ゲームサーバ10の機能は、後述する各種処理モジュールにより実現される。当該処理モジュールは、例えば、メモリ12に格納されたプログラムをCPU11が実行することで実現される。また、そのプログラムは、ネットワークを介してダウンロードするか、あるいは、プログラムを記憶した記憶媒体を用いて、更新することができる。さらに、上記処理モジュールは、半導体チップにより実現されてもよい。即ち、上記処理モジュールが行う機能を何らかのハードウェア、及び/又は、ソフトウェアで実行する手段があればよい。
【0050】
なお、端末20や管理サーバ40もゲームサーバ10と同様に情報処理装置により構成可能であり、その基本的なハードウェア構成はゲームサーバ10と相違する点は無いので説明を省略する。
【0051】
[ゲームサーバ]
次に、ゲームサーバ10の詳細について説明する。
【0052】
図5は、第1の実施形態に係るゲームサーバ10の処理構成の一例を示すブロック図である。図5を参照すると、ゲームサーバ10は、通信制御部201と、記憶部202と、ゲーム実行制御部203と、を含んで構成される。
【0053】
通信制御部201は、他の装置との間の通信を実現する手段である。通信制御部201は、他の装置から受信したメッセージ(パケット)を各処理モジュール部に振り分ける、又は、各処理モジュールから取得したメッセージを他の装置に送信する手段でもある。
【0054】
記憶部202は、例えば、ゲーム実行制御部203の処理等に必要なデータを記憶する。
【0055】
ゲーム実行制御部203は、ゲーム進行に関する制御、管理を担う手段である。ゲーム実行制御部203は、ユーザ認証部211と、第1の乱数生成部212と、第2の乱数生成部213という3つのサブモジュールを含んで構成される。
【0056】
ユーザ認証部211は、ユーザがゲームサーバ10にログインする際、又は、ゲームサーバ10からログアウトする際に起動するサブモジュールである。なお、ユーザ認証の方式はどのようなものであっても良い。例えば、上述のようにパスワードを用いた認証方式でもよいし、ユーザの生体情報(指紋情報等)を用いた生体認証であってもよい。ユーザ認証部211は、端末20から提供されるデータ(被認証データ)とデータベース等に格納されたデータ(照合データ)を比較することで、端末20を利用するユーザの認証を行う。
【0057】
ゲーム実行制御部203は、ユーザ認証部211による認証結果に応じて、当該ユーザにオンラインゲームを提供する、又は、当該ユーザによるオンラインゲームのプレイを拒絶する。
【0058】
第1の乱数生成部212及び第2の乱数生成部213は、ゲーム実行制御部203が乱数生成の必要があると判断した際に起動するサブモジュールである。なお、後述するように、1人のユーザに関して、乱数は既に生成された乱数を用いて生成される。つまり、ユーザごとに乱数の生成を管理する必要があるため、以降の説明ではサフィックスjを用いてユーザを区別する。
【0059】
乱数の生成処理が始まると、第1の乱数生成部212は、ユーザj用の初期乱数sを生成する。
【0060】
次に、第1の乱数生成部212は、当該初期乱数sを封印する。より具体的には、第1の乱数生成部212は、初期乱数sのハッシュ値H(s)を計算する。
【0061】
その後、第1の乱数生成部212は、初期乱数sの封印値(即ち、ハッシュ値H(s))とハッシュ値の計算に利用したハッシュ関数をデータ管理システム30に送信し、これらの情報(ハッシュ値、ハッシュ関数)を電子掲示板に書き込むように依頼する。
【0062】
また、第1の乱数生成部212は、計算したハッシュ値H(s)を電子掲示板に書き込んだ旨をユーザjが使用する端末20に送信する。その際、端末20がハッシュ値H(s)等をデータ管理システム30から取得できるように、トランザクションIDも併せて通知される。なお、トランザクションIDとは、ゲームサーバ10がデータを電子掲示板に書き込んだ際にデータ管理システムから通知される識別子であって、封印データが書き込まれたトランザクションを特定する識別子である。
【0063】
ゲームサーバ10から上記通知を受け取った端末20は、電子掲示板からハッシュ値H(s)を取得する。端末20は、自身(ユーザj)向けのハッシュ値H(s)が電子掲示板に書き込まれていることを確認すると、乱数rを生成し、当該乱数rをゲームサーバ10に送信する。なお、以降の説明において、端末20が生成した乱数をユーザ乱数と表記する。
【0064】
第2の乱数生成部213は、ユーザjに適用する(ユーザjがプレイするゲームに使用する)乱数を生成する。具体的には、第2の乱数生成部213は、ユーザ乱数rを受け取ると、初期乱数sとユーザ乱数rを用いて、下記の式(1)によりハッシュ値yを計算する。

(0)=Hash(r||s)、y(i)=Hash(y(i−1)) ・・・(1)
【0065】
次に、第2の乱数生成部213は、計算したハッシュ値yを用いて、下記の式(2)により乱数xを生成する。

(0)=Hash(r||y(0))、x(i)=Hash(r||y(i)) ・・・(2)
【0066】
なお、式(1)及び(2)において、記号「||」は連結を示し、iは1以上の整数であって、以降の説明でも同様とする。また、x及びyに続いて記載された括弧書きの数字は、乱数の生成順を示す。例えば、最初に生成された乱数xはx(0)と表記し、次に生成された乱数xはx(1)と表記する。
【0067】
なお、ユーザj用の乱数xが過去に生成されたことが無い場合(最初に乱数xを生成する場合)には、式(1)のハッシュ値y(0)とユーザ乱数rが使用され、そのハッシュ値を計算することで初回の乱数x(0)が得られる。乱数x(0)がゲームの進行に使用され、その後ゲームの進行が進み、同じユーザjについて次の乱数x(1)の生成が必要となると、上記式(1)により y(1)=Hash(y(0))が計算される。このハッシュ値y(1)とユーザjから取得したユーザ乱数rを用いて、式(2)により、乱数x(1)=Hash(r||y(1))が計算される。このように、第2の乱数生成部213は、ユーザ乱数rと初期乱数sの連結結果について第1のハッシュ値を計算し、第1のハッシュ値を端末20用の初回の乱数x(0)とする。その後、2回目の乱数生成が必要となると、第2の乱数生成部213は、第1のハッシュ値のハッシュ値を第2のハッシュ値として生成し、第2のハッシュ値とユーザ乱数rの連結結果のハッシュ値を2回目の乱数x(1)とする。
【0068】
上記説明したように、第2の乱数生成部213は、同一のユーザjについて生成された先のハッシュ値y(i−1)に基づき、ハッシュ値y(i)を計算し、且つ、計算されたハッシュ値y(i)とユーザ乱数rにより乱数xを生成する。即ち、第2の乱数生成部213は、先の乱数の生成過程における中間結果(ハッシュ値y)を次の乱数の生成に用いつつ、乱数xを繰り返し生成していく。
【0069】
ゲーム実行制御部203は、乱数xを使用した後に当該乱数xを端末20(ユーザj)に通知する。なお、乱数xが端末20に通知されるタイミングは、乱数xの使用後であれば、任意のタイミングとすることができる。例えば、ゲームの進行中に逐次使用された乱数xが通知されてもよいし、ゲーム終了後に、使用された乱数xが一括して端末20に通知されてもよい。なお、乱数xは端末20(ユーザj)に通知するが、乱数xの生成過程における中間結果(ハッシュ値y)は端末20に通知しない。当該中間結果を端末20に通知してしまうと、端末20は、当該中間結果から次の乱数発生を予測できるためである。
【0070】
また、ゲーム実行制御部203は、図3のステップS08における「乱数の公平性検証」までの任意のタイミングで、式(1)及び(2)にて使用したハッシュ関数の種類を、端末20に通知する。例えば、初回の乱数通知(乱数x(0)の通知)の際やゲーム終了後に、式(1)及び(2)にて使用したハッシュ関数の種類を端末20に通知する。さらに、ゲーム実行制御部203は、ユーザjによるゲームが終了した場合(即ち、これ以上の乱数生成が不要となった場合)、先に生成した初期乱数sを端末20(ユーザj)に通知する。つまり、ゲーム実行制御部203は、端末20に対する乱数生成が不要となった後、初期乱数の封印を端末20に開封する。
【0071】
なお、上記説明では、第1の乱数生成部212が使用したハッシュ関数を電子掲示板に書き込み、第2の乱数生成部213が使用したハッシュ関数を端末20に通知することを説明した。しかし、ゲームサーバ10と端末20の間で、使用するハッシュ関数に関する合意があれば、上記の様な電子掲示板への書き込みや端末20への通知は不要である。
【0072】
第1の乱数生成部212や第2の乱数生成部213が使用するハッシュ関数として、例えば、SHA−2(Secure Hash Algorithm 2)やKeccak(ケチャック)といったハッシュ関数が利用できる。また、第1の乱数生成部212が使用するハッシュ関数(初期乱数sのハッシュ値を計算するハッシュ関数)と第2の乱数生成部213が使用するハッシュ関数(式(1)及び(2)にて使用されるハッシュ関数)は同じであっても良いし、異なるものであってもよい。
【0073】
ここで、ハッシュ関数には、ハッシュ値から元のデータを復元することができないという一方向性、違うデータから同じハッシュ値を生成することができないという衝突困難性、同じデータからは同じハッシュ値が生成されるという決定性、計算されるハッシュ値に偏りがない一様性等の性質がある。第1の乱数生成部212による初期乱数sのハッシュ値計算は、ゲームの進行中に初期乱数sをゲームサーバ10以外の主体に対して隠蔽(封印)し、且つ、初期乱数sのハッシュ値の計算後に初期乱数sが変更されていないことを担保するために行われる。つまり、第1の乱数生成部212によるハッシュ値計算は、ハッシュ関数の持つ性質のうち、一方向性と衝突困難性を主として利用している。対して、第2の乱数生成部213におけるハッシュ関数は、ランダムな数値が生成可能、且つ、乱数生成の過程が再現可能な関数として使用されている。つまり、第2の乱数生成部213によるハッシュ値計算は、ハッシュ関数の持つ性質のうち、決定性と一様性を主として利用している。従って、第1の乱数生成部212と第2の乱数生成部213では、ハッシュ関数に求める性質が異なっており、各目的に適したハッシュ関数の使い分けがなされてもよい。
【0074】
また、上記第1の乱数生成部212によるハッシュ値計算を鑑みれば、第1の乱数生成部212が、初期乱数を封印する際に利用する関数は、ハッシュ関数のみならず、コミットメント関数と呼ばれる、「データを封印(秘匿)」する機能と、「データを開封(変更されていないことを検証)」する機能があるもので代用することができる。
【0075】
[端末]
次に、端末20の詳細について説明する。
【0076】
図6は、第1の実施形態に係る端末20の処理構成の一例を示すブロック図である。図6を参照すると、端末20は、通信制御部301と、記憶部302と、ゲーム実行部303と、を含んで構成される。
【0077】
通信制御部301は、他の装置との間の通信を実現する手段である。通信制御部301は、他の装置から受信したメッセージ(パケット)を各処理モジュール部に振り分ける、又は、各処理モジュールから取得したメッセージを他の装置に送信する手段でもある。
【0078】
記憶部302は、例えば、ゲーム実行部303の処理等に必要なデータを記憶する。
【0079】
ゲーム実行部303は、ユーザによるゲームプレイを実現する手段である。より具体的には、ゲーム実行部303は、キーボードやマウス等の入力手段によりユーザの操作を入力する。ゲーム実行部303は、ユーザの操作に応じた情報をゲームサーバ10に送信する。例えば、ユーザがゲームサーバ10にログインする場合には、認証情報(例えば、IDとパスワードの組み合わせ)がゲームサーバ10に送信される。また、ユーザがゲームをプレイしている間は、ユーザによるキー操作等に係る情報がゲームサーバ10に送信される。
【0080】
ゲーム実行部303は、乱数生成部311と乱数検証部312の2つのサブモジュールを含んで構成される。
【0081】
乱数生成部311は、ゲームサーバ10により初期乱数の封印値(初期乱数のハッシュ値)が生成された後に、ユーザ乱数を生成する手段である。より具体的には、乱数生成部311は、初期乱数sのハッシュ値H(s)が電子掲示板に書き込まれたことに応じて、ユーザ乱数を生成する。乱数生成部311は、ゲームサーバ10からハッシュ値H(s)を電子掲示板に書き込んだ旨の通知を受けた場合に起動する。この場合、乱数生成部311は、ゲームサーバ10から通知されたトランザクションIDをデータ管理システム30に提示し、ゲームサーバ10が電子掲示板に書き込んだハッシュ値H(s)を取得する。その後、乱数生成部311は、ユーザ乱数rを生成し、生成したユーザ乱数rをゲームサーバ10に送信する。なお、乱数生成部311によるユーザ乱数rの生成には、ハッシュ関数を初めとした種々の関数や方法を用いることができる。
【0082】
乱数検証部312は、ゲームサーバ10がゲームの進行に使用した一連の乱数x(x(0)、x(1)、・・・)が公平なものであるか否かを検証する手段である。より具体的には、乱数検証部312は、電子掲示板に書き込まれた初期乱数sのハッシュ値H(s)を取得し、取得したハッシュ値H(s)と、ゲームサーバ10により開封された初期乱数sと、使用された乱数として通知された乱数xと、に基づき、ゲームサーバ10による乱数生成の公正性を検証する。
【0083】
乱数検証部312は、2段階の検証を行うことで、乱数xの公平性を確認する。
【0084】
第1の検証は、上記の式(1)及び(2)にて使用される初期乱数sが端末20から提供されるユーザ乱数rの取得前に生成された値から変更されていないことの検証である。
【0085】
第2の検証は、ゲームサーバ10が、式(1)及び(2)に従って乱数xを生成している(ゲームサーバ10が恣意的に乱数xを決定していない)ことの検証である。
【0086】
乱数検証部312は、電子掲示板から取得したハッシュ値H(s)と、ゲーム終了後にゲームサーバ10により開封された初期乱数sを用いて計算したハッシュ値H’(s)と、を比較し、第1の検証を行う。比較の結果、2つのハッシュ値が一致すれば、乱数検証部312は、ゲームサーバ10による乱数生成は公正である可能性があり、第2の検証を行う。
【0087】
対して、2つのハッシュ値が不一致であれば、乱数検証部312は、ゲームサーバ10による乱数生成は不公正(ゲームサーバ10による乱数生成は不当、不適切)と判定する。
【0088】
乱数検証部312は、式(1)及び(2)に従って乱数x’(i)を生成し、当該乱数x’(i)とゲームサーバ10から通知された乱数x(i)を比較することで、第2の検証を行う。
【0089】
ここで、上記式(1)、(2)によれば、乱数xの生成に必要な情報は、初期乱数s、ユーザ乱数rである。2つの乱数のうち、ユーザ乱数rは、自装置にて生成している情報であるので、乱数検証部312は当然に把握可能である。また、初期乱数sは、ゲーム終了後にゲームサーバ10から取得できる情報である。さらに、上述のように、式(1)、(2)にて使用されたハッシュ関数はゲームサーバ10から端末20に通知されている。従って、乱数検証部312は、2つの乱数(初期乱数s、ユーザ乱数r)に式(1)、(2)を適用することで、各回の乱数x’(i)を生成することができる。
【0090】
なお、ゲームサーバ10がゲームの進行に使用した乱数x(i)は、逐次、端末20に通知されている。
【0091】
乱数検証部312は、2つの乱数(x’(i)、x(i))の一致、不一致を確認することで、ゲームサーバ10が、乱数x(i)を恣意的に変更しておらず、当初に生成された初期乱数sと端末20が提示したユーザ乱数rを使用して一連の乱数x(i)を生成していることが検証できる。
【0092】
上記2つの乱数x’(i)とx(i)が一致していれば、乱数検証部312は、ゲームサーバ10による乱数生成は公正(ゲームサーバ10による乱数生成は正当、適切)であると判定する。一方、2つの乱数x’(i)とx(i)に相違する点があれば、乱数検証部312は、ゲームサーバ10による乱数生成は不公正と判定する。
【0093】
乱数検証部312は、必要に応じて、上記判定結果をユーザに通知する。具体的には、乱数検証部312は、液晶パネル等の表示部に、検証結果を表示する等の処置を行う。
【0094】
次に、図面を参照し、ゲームサーバ10による乱数生成と端末20による乱数検証の動作について説明する。
【0095】
図7は、第1の実施形態に係るゲームシステムの動作の一例を示すシーケンス図である。図7には、主にゲームサーバ10による乱数生成に係る動作が記載されている。
【0096】
ステップS101において、ゲームサーバ10は、初期乱数sを生成する。
【0097】
ゲームサーバ10は、初期乱数sのハッシュ値H(s)を生成する(ステップS102)。
【0098】
ゲームサーバ10は、生成したハッシュ値H(s)をデータ管理システム30に送信する(ステップS103)。つまり、ゲームサーバ10は、生成したハッシュ値H(s)を電子掲示板に書き込む。
【0099】
データ管理システム30によるハッシュ値H(s)の電子掲示板への書き込み(ステップS104)が完了すると、ゲームサーバ10は、ハッシュ値H(s)を電子掲示板に書き込んだ旨を端末20に通知する(ステップS105)。
【0100】
端末20は、上記ゲームサーバ10からの通知を取得すると、電子掲示板からハッシュ値H(s)を読み出す(ステップS106)。
【0101】
その後、端末20は、ユーザ乱数rを生成し、当該乱数をゲームサーバ10に送信する(ステップS107)。
【0102】
ユーザ乱数rを取得したゲームサーバ10は、上述の式(1)、(2)に従い、乱数x(0)を生成する(ステップS108−0)。
【0103】
ゲームサーバ10は、生成した乱数x(0)をゲームの進行に使用し、使用した乱数x(0)を端末20に通知する(ステップS109−0)。
【0104】
ゲームサーバ10は、ゲームの進行と共に更なる乱数の生成が必要となると、上述の式(1)、(2)に従って乱数を生成する処理(ステップS108−i)と、当該乱数を通知する処理(ステップS109−i)を繰り返す。
【0105】
その後、ゲームが終了すると(ステップS110)、ゲームサーバ10は、ステップS101にて生成した初期乱数sを端末20に開封する(ステップS111)。
【0106】
ステップS112において、端末20は、ゲームサーバ10により生成された乱数xの公平性を検証する。
【0107】
図8は、端末20による乱数xの公平性検証に係る動作の一例を示すフローチャートである。
【0108】
初めに、端末20は、電子掲示板から取得したハッシュ値H(s)と、ゲームサーバ10から開封された初期乱数sを用いて計算したハッシュ値H’(s)を比較し、第1の検証を行う(ステップS201)。
【0109】
2つのハッシュ値が一致しなければ(ステップS201、No分岐)、ゲームサーバ10による乱数生成は不公正であると判定される(ステップS204)。
【0110】
2つのハッシュ値が一致した場合(ステップS201、Yes分岐)、第2の検証が実行される。
【0111】
端末20は、式(1)及び(2)に従って生成した乱数x’(i)と、ゲームサーバ10から通知された乱数x(i)を比較し、第2の検証を行う(ステップS202)。
【0112】
2つの乱数が一致しなければ(ステップS202、No分岐)、ゲームサーバ10による乱数生成は不公正であると判定される(ステップS204)。2つの乱数が一致すれば(ステップS202、Yes分岐)、ゲームサーバ10による乱数生成は公正であると判定される(ステップS203)。
【0113】
[管理サーバ]
次に、データ管理システム30をなす管理サーバ40の詳細について説明する。
【0114】
図9は、第1の実施形態に係る管理サーバ40の処理構成の一例を示すブロック図である。図9を参照すると、管理サーバ40は、通信制御部401と、記憶部402と、台帳管理部403と、を含んで構成される。
【0115】
通信制御部401は、他の装置との間の通信を実現する手段である。通信制御部401は、他の装置から受信したメッセージ(パケット)を各処理モジュール部に振り分ける、又は、各処理モジュールから取得したメッセージを他の装置に送信する手段でもある。
【0116】
記憶部402は、各処理モジュールの処理に必要な情報を記憶する手段である。記憶部402には、データを一時的に記憶する一時記憶領域とデータ管理台帳を記憶する領域が含まれる。
【0117】
台帳管理部403は、電子掲示板へのゲームサーバ10や端末20からのアクセス要求を処理する手段である。具体的には、例えば、ゲームサーバ10から電子掲示板への封印データ(ハッシュ値)の書き込み要求を受け付けると、記憶部402に格納されているデータ管理台帳に封印データを追記する。また、台帳管理部403は、外部装置(例えば、端末20)から電子掲示板の読み出しに係る要求を受け付けると、当該要求に付随するトランザクションIDをキーとしてデータ管理台帳を検索し、当該IDが付されたデータ(封印データ)を抽出する。台帳管理部403は、抽出した封印データを外部装置に送信する。
【0118】
台帳管理部403は、ブロック生成部411とブロック検証部412の2つのサブモジュールを有する。
【0119】
ブロック生成部411は、データ管理台帳を他の管理サーバ40にて共有し、管理するためのブロックを生成する。
【0120】
台帳管理部403は、ゲームサーバ10から封印データを取得すると、当該取得した封印データを記憶部402の一時記憶領域に保存する。その後、ブロック生成部411は、直前に生成されたブロックのヘッダと、当該一時記憶領域に保存されたデータ(例えば、封印データや売上データ;データ管理台帳への追記データ)から、「正当性保証データ」を生成する。例えば、ブロック生成部411は、追記データ、前ブロックのヘッダ及び正当性保証データのハッシュ値を計算すると、当該計算されたハッシュ値を所定の規則に適合するものにする値(所謂、ノンス値又はナンス値)を正当性保証データとして生成する。また、正当性保証データには、ブロックを生成した管理サーバ40の電子署名が含まれる。
【0121】
ブロック生成部411は、直前に生成されたブロックのヘッダと上記の正当性保証データからなるヘッダを有するブロックを生成する。具体的には、図10に示すようなブロックが生成される。
【0122】
ブロック生成部411によるブロック生成が終了すると、当該ブロックはデータ管理台帳に追記される。また、ブロック生成部411は、生成したブロックを、通信制御部401を介して他の管理サーバ40に配布(送信)する。
【0123】
他の管理サーバ40から上記ブロックを受信した管理サーバ40の通信制御部401は、取得したブロックをブロック検証部412に引き渡す。
【0124】
ブロック検証部412は、自装置の記憶部402に格納されているデータ管理台帳(ブロック)に基づき、他の管理サーバ40が送信するブロックの正当性を検証する手段である。具体的には、ブロックを受信した管理サーバ40のブロック検証部412は、当該受信したブロックの正当性を、ブロックを送信した管理サーバ40が生成したブロックと自装置(ブロックを受信した管理サーバ40)が管理している直前に生成されたブロックのヘッダを用いて検証する。
【0125】
初めに、ブロック検証部412は、受信したブロックに含まれる正当性保証データに送信元となる管理サーバ40の電子署名が付与されていることを確認し、受信したブロックに記載された「前ブロックのヘッダ」を自身が管理するデータ管理台帳に基づき特定する。その後、ブロック検証部412は、受信したブロック内の追記データと前ブロックのヘッダを入力として、ヘッダ内の正当性保証データの整合がとれているか否か(正当性保証データが所定の規則に適合するか否か)を確認する。
【0126】
ブロック検証部412は、正当性保証データの整合性が確認できれば、他の管理サーバ40が送信するブロックは正当であると判定する。一方、正当性保証データの整合性が確認できなければ、ブロック検証部412は、他の管理サーバ40が送信するブロックは不当であると判定する。
【0127】
ブロック検証部412が、他の管理サーバ40が送信するブロックが正当であると判定した場合には、台帳管理部403は、記憶部402のデータ管理台帳を更新する(追記データを含むブロックを追記する)。つまり、ブロック検証部412は、他の管理サーバ40の台帳へのデータの追記を、自装置の台帳に反映する処理を行う。なお、ブロック検証部412は、他の管理サーバ40が送信するブロックが不当であると判定した場合には、当該ブロックを破棄する。
【0128】
また、ブロック検証部412は、検証結果(受信したブロックは正当、不当)に関する情報を、ブロックを送信してきた管理サーバ40に通知する。
【0129】
管理サーバ40の動作をまとめると図11に示すシーケンス図のとおりとなる。なお、図11には、管理サーバ40−1がゲームサーバ10から封印データを取得し、当該データをデータ管理台帳に追記する場合を示す。
【0130】
管理サーバ40−1は、ゲームサーバ10から封印データを取得すると(ステップS201)、当該データを自装置の記憶部402の一時記憶領域に複製する(ステップS202)。
【0131】
その後、一時記憶領域に複製されたデータが所定量蓄積される等の条件により、管理サーバ40−1は、一時記憶領域に記憶されたデータに基づき、上述のブロックを生成する(ステップS203)。その後、管理サーバ40−1は、生成したブロックを他の管理サーバ40−2〜40−4に向けて送信する(ステップS204)。
【0132】
ブロックを受信した管理サーバ40−2〜40−4のそれぞれは、管理サーバ40−1が生成したブロックを個別に検証する(ステップS205)。管理サーバ40−2〜40−4のそれぞれは、ブロックの正当性が確認できた場合に自装置のデータ管理台帳を更新する(ステップS206)。
【0133】
このように、データ管理システム30をなす複数の管理サーバ40のうちの少なくとも1つの管理サーバ40によるデータ管理台帳へのデータの追記は、他の管理サーバ40のデータ管理台帳に反映される。
【0134】
なお、他の管理サーバ40から送信されたブロックの正当性が確認できない場合には、当該ブロックを破棄すると共に、管理サーバ40はその旨を、ブロックを送信する管理サーバ40に通知する。当該通知を受けた管理サーバ40の台帳管理部403は、ブロック送信前のデータ管理台帳の状態を取り戻す。
【0135】
以上のように、第1の実施形態に係るゲームサーバ10は、乱数xの生成に先立ち、初期乱数sを生成し、そのハッシュ値H(s)を電子掲示板に書き込む。また、ユーザjは、ハッシュ値H(s)が電子掲示板に書き込まれたことに応じて、ユーザ乱数rを生成し、ゲームサーバ10に提供する。ゲームサーバ10は、先に生成した初期乱数sとユーザjから提供されたユーザ乱数rを用いて、乱数xを生成する。このように、乱数xの生成には、ゲームサーバ10及びユーザjが互いに操作することができない初期乱数sとユーザ乱数rが必要となるので、公平な乱数xが生成される。
【0136】
ゲームサーバ10は、初期乱数sを生成する前にユーザ乱数rを知ることができない。また、ゲームサーバ10は、自身が影響を及ぼすことのできない電子掲示板にハッシュ値H(s)を書き込んでいるため、ハッシュ値H(s)の書き込み後は、初期乱数sを変更することができない。そのため、ゲームサーバ10は、ユーザ乱数rの取得後に初期乱数sを変更すること等により、乱数xの生成を操作することはできない。
【0137】
ユーザjは、電子掲示板に書き込まれたハッシュ値H(s)から初期乱数sを得ることはできないので、乱数xの生成を操作することができない。さらに、ユーザjは、ゲームの進行中に、乱数xの生成過程における中間結果(ハッシュ値y(i))を知ることができないため、乱数x(i)に基づき乱数x(i+1)を推測することもできない。
【0138】
ゲームサーバ10と端末20間のデータの授受(ハッシュ値H(s)の授受)は、ブロックチェーンによりデータが管理される電子掲示板を利用するので、ハッシュ値H(s)を改ざんすることは非常に困難である。さらに、電子掲示板に書き込むのは、ハッシュ値H(s)とハッシュ関数という少量のデータに限られ、電子掲示板の利用に関する手数料を少額に抑えることができる。
【0139】
さらにまた、繰り返し乱数を生成させる必要がある場合であっても、先の乱数x(i−1)の生成過程における中間結果に応じて、乱数x(i)が生成されるので、ゲームサーバ10と端末20の間で特別な情報のやり取りは不要である。そのため、ゲームサーバ10と端末20間の通信が増加することもない。
【0140】
[第1の実施形態の変形例]
第1の実施形態の変形例について説明する。
【0141】
第1の実施形態では、電子掲示板に書き込まれるデータを封印データ(初期乱数のハッシュ値)に限っている。第1の実施形態に係る変形例では、当該封印データに限らず、端末20が生成するユーザ乱数、ゲームサーバ10がゲームの進行と共に生成し、使用する乱数も電子掲示板に書き込まれる場合について説明する。
【0142】
上記説明したように、第1の実施形態では、封印データ以外のデータ(ユーザ乱数r、乱数x)は、端末20とゲームサーバ10の間で授受が行われている。当該データの授受が電子掲示板を介して行われることで、ゲームサーバ10による乱数生成の公正性検証が端末20以外の装置(即ち、第3者)が行うことができる。
【0143】
例えば、図12に示すように、上記端末20の一機能として説明した「乱数検証部」と同等の機能を有する検証装置50がシステムに含まれていてもよい。例えば、検証装置50は、裁判所等の機関に設置される装置であり、ユーザに対して提供されるサービス(例えば、オンラインゲームや電子抽選)の正当性を監視する。
【0144】
以上のように、端末20が、ユーザ乱数を電子掲示板に書き込み、ゲームサーバ10(乱数生成装置)が、ゲームの進行に使用した乱数を電子掲示板に書き込んでもよい。その場合、当事者(端末20のユーザ)以外の第3者が、電子掲示板に書き込まれた、初期乱数の封印値、使用された乱数及びユーザ乱数を用いて、ゲームサーバ10による乱数生成の公正性を検証することができる。
【0145】
[第2の実施形態]
続いて、第2の実施形態について図面を参照して詳細に説明する。
【0146】
第1の実施形態では、謂わば、ゲームサーバ10とユーザが対戦するタイプのゲームを例にとり、公正な乱数生成方法を説明した。第2の実施形態では、ユーザ同士が対戦するフィールドをゲームサーバ10aが提供するタイプのゲームにおける公正な乱数生成方法を説明する。
【0147】
第2の実施形態では、上記のようなゲームとして、「バックギャモン」を例に取り公正な乱数生成方法を説明する。なお、バックギャモンの詳細なルールの説明は省略するが、2人のユーザが交互にサイコロを振り、出た目の数字に応じて駒を動かすゲームである。第2の実施形態に係るゲームサーバ10aは、上記サイコロの目の選択に、後述する乱数生成を利用する。
【0148】
なお、ゲームシステムの構成、各装置のハードウェア構成、処理構成は第1の実施形態と同様とすることが可能であるので、これらの説明は省略する。
【0149】
第1及び第2の実施形態の相違点は、ゲームサーバ10aにおける乱数生成方法と、生成した乱数を2人のユーザ(複数のユーザ)に提供する点である。
【0150】
図13は、第2の実施形態に係るゲームシステムの動作の一例を示すシーケンス図である。なお、図13は、ユーザj1とユーザj2が対戦するものとする。また、ゲームの開始に先立ち、ユーザj1とユーザj2はそれぞれアカウントの登録が完了しているものとする。
【0151】
初めに、2人のユーザは、ゲームサーバ10aにログインし、ゲームを開始する(ステップS301)。
【0152】
ゲームが開始され、乱数の発生(サイコロの目)が必要となると、図13のステップS302以降の処理が実行される。
【0153】
ステップS302において、ゲームサーバ10aの第1の乱数生成部212は、ユーザj1用の初期乱数sj1を生成し、そのハッシュ値H(sj1)を電子掲示板に書き込む。また、ゲームサーバ10aは、当該書き込みに関する通知をユーザj1(端末20)に行う。
【0154】
当該通知を受けた端末20(ユーザj1が操作する端末20)の乱数生成部311は、電子掲示板へのハッシュ値H(sj1)の書き込みを確認した後、ユーザ乱数rj1を生成し、ゲームサーバ10aに送信する(ステップS303)。
【0155】
同様に、ゲームサーバ10aは、ユーザj2用の初期乱数sj2を生成し、ハッシュ値H(sj2)を電子掲示板に書き込む(ステップS304)。また、ユーザj2の端末20は、ユーザ乱数rj2を生成し、ゲームサーバ10aに送信する(ステップS305)。
【0156】
2人のユーザからユーザ乱数rj1、rj2を受け取ったゲームサーバ10aの第2の乱数生成部213は、下記の式(3)によりハッシュ値yを計算する。

(0)=Hash(rj1||rj2||sj1||sj2)、y(i)=Hash(y(i−1)) ・・・(3)
【0157】
次に、ゲームサーバ10aは、計算したハッシュ値yを用いて、下記の式(4)により乱数xを生成する。

(0)=Hash(rj1||rj2||y(0))、x(i)=Hash(rj1||rj2||y(i)) ・・・(4)
【0158】
初回の乱数生成時には、式(3)により、2つの初期乱数sj1、sj2と2つのユーザ乱数rj1、rj2によりハッシュ値y(0)が計算される。その後、2つのユーザ乱数rj1、rj2とハッシュ値y(0)のハッシュ値が計算され、乱数x(0)が得られる(ステップS306−0)。生成された乱数x(0)は、2人のユーザj1、j2に通知される(ステップS307−0)。その後、ゲームサーバ10aは、乱数x(0)を先攻のユーザに適用する(ステップS308−0)。例えば、ゲームサーバ10aは、乱数x(0)をサイコロの目(1〜6)に変換し、先攻のユーザに通知する。通知を受けたユーザは、サイコロの目に応じて駒を動かし、ゲームを進める。
【0159】
後攻のユーザに関する乱数x(1)の生成も、式(3)及び(4)に従って行われる(ステップS306−1)。生成された乱数x(1)は、2人のユーザj1、j2に通知される(ステップS307−1)。その後、ゲームサーバ10aは、乱数x(1)を後攻のユーザに適用する(ステップS308−1)。
【0160】
上記のような、乱数生成、乱数通知、ユーザへの適用を繰り返しつつ、ゲームが終了する(ステップS309)。
【0161】
ゲームが終了すると、ゲームサーバ10aは、初期乱数とユーザ乱数を、ユーザj1、j2に通知する(ステップS310)。具体的には、ゲームサーバ10aは、ユーザj1に対して、少なくとも、封印された初期乱数sj1、sj2を開封すると共にユーザ乱数rj2を通知する。同様に、ゲームサーバ10aは、ユーザj2に対して、少なくとも、封印された初期乱数sj1、sj2を開封すると共にユーザ乱数rj1を通知する。
【0162】
通知を受けた各ユーザは、乱数xの公平性を検証する(ステップS311、S312)。ユーザj1とユーザj2における乱数の公平性検証は同様の処理とすることができるので、ユーザj1における公平性検証について説明する。
【0163】
第2の実施形態における乱数の公平性検証も、第1の実施形態と基本的には同じであり、2段階の検証により行われる。
【0164】
第1の検証では、ステップS310にて得られた初期乱数sj1、sj2が、ユーザ乱数rj1、rj2の送信後に変更されたものではないことを検証する。具体的には、ユーザj1(端末20)は、初期乱数sj1、sj2のハッシュ値を計算し、当該ハッシュ値と電子掲示板から取得したハッシュ値がそれぞれ一致するか否かにより第1の検証を行う。
【0165】
その後、ユーザj1は、ゲームの進行と共にゲームサーバ10aから通知された乱数x(x(0)、x(1)、・・・)とゲームサーバ10aから通知された乱数(初期乱数、ユーザ乱数)に式(3)、(4)を適用することで得られる乱数x’(x’(0)、x’(1)、・・・)を比較することで、第2の検証を行う。
【0166】
なお、上記説明は、2人のユーザが対戦する場合の乱数生成について説明したが、3人以上のユーザが対戦する場合であっても、式(3)及び(4)を適宜拡張することで、対応可能なことは当業者にとって明らかである。
【0167】
以上のように、第2の実施形態では、ゲームサーバ10aは、複数のユーザそれぞれに対して生成した初期乱数と複数のユーザそれぞれから取得したユーザ乱数を用いて、乱数を生成する。その際、ゲームサーバ10aは、初期乱数の生成前にユーザ乱数を知ることができず、また、一度初期乱数を生成した後は当該乱数を変更することはできないため、乱数を操作することができない。このように、複数のユーザを対象とするゲームにおいて使用される乱数を、各ユーザ用に生成された初期乱数と各ユーザが個別に生成したユーザ乱数を用いて生成することができる。また、ゲームサーバ10aによる乱数生成の公正性を、各ユーザが検証することができる。
【0168】
[第2の実施形態の変形例]
第2の実施形態の変形例について説明する。
【0169】
上記第2の実施形態では、ゲームサーバ10aが2人のユーザj1、j2を対等に扱う限りにおいては公正な乱数の生成が行われる。しかし、例えば、ゲームサーバ10aとユーザj2(ユーザj2が操作する端末20)が共謀することで、ユーザj1に対して不利な(不公平な)乱数が生成される余地がある。具体的には、ゲームサーバ10aは、図13のステップS303により生成されたユーザ乱数rj1を取得した後に、ユーザj2用の初期乱数sj2を生成している。しかし、例えば、ゲームサーバ10aとユーザj2が結託することで、ゲームサーバ10aが初期乱数sj2を生成する前にユーザj2がユーザ乱数rj2を生成し、ゲームサーバ10aに提供することもできる。その結果、ゲームサーバ10aは、式(3)に示すハッシュ値yを計算する際、ユーザj2にとって有利な結果が得られるように、初期乱数sj2を選択できる余地がある。
【0170】
第2の実施形態の変形例では、ゲームサーバとユーザが結託することで、上記のような他のユーザに対して不公正な乱数生成を防止するシステムを提供する。
【0171】
図14を参照しつつ、第2の実施形態とその変形例の相違点を中心に説明する。
【0172】
ステップS403において、ユーザj1は、ユーザ乱数rj1を生成する。その後、ユーザj1は、当該ユーザ乱数rj1のハッシュ値H(rj1)をゲームサーバ10bに送信する(ステップS404)。
【0173】
ステップS405において、ゲームサーバ10bは、ユーザj2用の初期乱数sj2を生成し、ハッシュ値H(sj2)を生成する。当該ハッシュ値H(sj2)は電子掲示板に書き込まれる。その後、ゲームサーバ10bは、ユーザ乱数rj1のハッシュ値H(rj1)をユーザj2に送信する(ステップS406)。
【0174】
ステップS407において、ユーザj2は、ユーザ乱数rj2を生成し、当該生成したユーザ乱数rj2をゲームサーバ10bに送信する。
【0175】
ステップS408において、ゲームサーバ10bは、ユーザj1にユーザ乱数rj2を送信する。
【0176】
ステップS409において、上記送信を受けたユーザj1は、ユーザ乱数rj1の封印をゲームサーバ10bに開封する。
【0177】
ゲームサーバ10bは、当該開封が正しいことを確認して、ゲームを開始する。つまり、ゲームサーバ10bは、初期乱数sj1、sj2及びユーザ乱数rj1、rj2を利用し、乱数xを適宜生成する(ステップS410)。
【0178】
このように、ユーザj2用の初期乱数sj2を生成する前に、ユーザj1はユーザ乱数rj1を生成するが、当該乱数の生成をした旨の通知はハッシュ値H(rj1)がゲームサーバ10bに送信されることで行われている。その後、ユーザj2に関する乱数(初期乱数sj2、ユーザ乱数rj2)の生成が行われ、ユーザj1からハッシュ値H(rj1)の開封が行われる。従って、ゲームサーバ10bは、ユーザj2用の初期乱数sjsを生成する前に、ユーザj1が生成したユーザ乱数rj1を知ることができない。その結果、例えば、ユーザj2とゲームサーバ10bが共謀し、ユーザj2に有利となるように(ユーザj1に不公平な)乱数xが生成されることはない。
【0179】
なお、図14のステップS407では、ユーザj2が生成したユーザ乱数rj2のハッシュ値H(rj2)はゲームサーバ10bに向けて送信されておらず、ユーザ乱数rj2がゲームサーバ10bに送信されている。ユーザj1に関しては、ハッシュ値H(rj1)が初めに送信されることの均衡から、ユーザj2のユーザ乱数rj2のハッシュ値H(rj2)をゲームサーバ10bに送信することも可能である。具体的には、図15に示す手順とすることができる。
【0180】
具体的には、ユーザj2は、ユーザ乱数rj2を生成(ステップS507)した後、そのハッシュ値H(rj2)を計算して、当該ハッシュ値をゲームサーバ10bに送信する(ステップS508)。
【0181】
その後、ゲームサーバ10bは、ユーザj1にユーザ乱数rj2のハッシュ値H(rj2)を送信する(ステップS509)。当該ハッシュ値を受信したユーザj1は、封印されたユーザ乱数rj1をゲームサーバ10bに開封する(ステップS510)。あるいは、後述するステップS512にて、ユーザj2がユーザ乱数rj1の開封が正しいことを確認する場合には、ユーザj1は、ユーザ乱数rj1をユーザj2にも開封する
【0182】
その後、ゲームサーバ10bは、ユーザj1による開封が正しいことを確認した後、ユーザ乱数rj1をユーザj2に送信する(ステップS511)。
【0183】
ユーザj2は、必要に応じて、受信したユーザ乱数rj1のハッシュ値が正しいこと(ユーザj1による封印されたユーザ乱数rj1の開封が正しいこと)を確認した後、封印されたユーザ乱数rj2をゲームサーバ10bに開封する(ステップS512)。
【0184】
ゲームサーバ10bは、ユーザj2による開封が正しいことを確認した後、乱数xを生成する(ステップS513)。
【0185】
なお、図14図15に示す第2の実施形態に係る変形例において、ユーザj1、j2(各ユーザが使用する端末20)とゲームサーバ10bの間の情報授受は、電子掲示板を介して行われてもよいことは勿論である。また、ユーザj1、j2において行う乱数の公平性検証動作は、第2の実施形態と同様とすることができる。
【0186】
第1及び第2の実施形態にて説明したゲームシステムの構成(図2)は例示であって、システムの構成を限定する趣旨ではない。例えば、ゲームサーバ10は、ゲームの遂行を担う装置と乱数の生成を担う装置(乱数生成装置)に分離されていてもよい。あるいは、ゲームサーバ10に、ユーザのアカウント登録機能が含まれていてもよい。
【0187】
上記実施形態では、ゲームの進行に使用される乱数の生成は、ゲームサーバ10と端末20の間で閉じた処理となっているが、乱数生成の過程の一部をユーザに開放してもよい。例えば、図7のステップS107や図13のステップS303、S305にて、ユーザ乱数の生成が行われるが、その際の乱数生成にユーザの選択を反映させてもよい。例えば、端末20は、図16に示すような乱数選択画面を液晶パネル等に表示し、ユーザのアイコン選択動作を受け付ける。図16において、各アイコンにはランダムな数値が割り当てられている。端末20は、ユーザが選択したアイコン(選択肢)に割り当てられた数値を利用して、ユーザ乱数を生成してもよい。例えば、端末20は、アイコンの選択により定まるランダムな数値と、ユーザのIDと、現在時刻と、を連結することでユーザ乱数としてもよい。当該構成により、アイコンの選択と乱数生成をシームレスに行うことができる。なお、ユーザが乱数の生成に関与できるようにすることは、第1の実施形態だけでなく、第2の実施形態でも可能である。
【0188】
上記実施形態では、端末20は、ゲームサーバ10による乱数生成の検証を行うものとして説明したが、端末20による乱数検証の可否をユーザが選択出来るようにしてもよい。例えば、端末20の表示画面に「検証可能乱数の使用要否」を尋ねるメッセージと選択肢(選択ボタン)を表示し、ユーザが「検証可能乱数を使用する」ことを選択した場合に、図8を用いて説明したような乱数の検証が行われてもよい。
【0189】
コンピュータの記憶部に、上述したコンピュータプログラムをインストールすることにより、コンピュータを乱数生成装置として機能させることができる。さらにまた、上述したコンピュータプログラムをコンピュータに実行させることにより、コンピュータにより乱数生成方法を実行することができる。
【0190】
また、上述の説明で用いた複数のフローチャートでは、複数の工程(処理)が順番に記載されているが、各実施形態で実行される工程の実行順序は、その記載の順番に制限されない。各実施形態では、例えば各処理を並行して実行する等、図示される工程の順番を内容的に支障のない範囲で変更することができる。また、上述の各実施形態は、内容が相反しない範囲で組み合わせることができる。
【0191】
上記の実施形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限られない。
[付記1]
上述の第1の視点に係る乱数生成システムのとおりである。
[付記2]
電子掲示板を提供する、データ管理システムをさらに含み、
前記乱数生成装置は、前記封印値を前記電子掲示板に書き込み、
前記端末は、前記封印値が前記電子掲示板に書き込まれたことに応じて、前記ユーザ乱数を生成する、付記1の乱数生成システム。
[付記3]
前記乱数生成装置は、先の乱数の生成過程における中間結果を次の乱数の生成に用いる、付記2の乱数生成システム。
[付記4]
前記乱数生成装置は、前記生成された乱数を使用した後に、前記使用された乱数を前記端末に通知する、付記3の乱数生成システム。
[付記5]
前記乱数生成装置は、前記端末に対する乱数生成が不要となった後、前記初期乱数の封印を前記端末に開封する、付記4の乱数生成システム。
[付記6]
前記端末は、前記電子掲示板に書き込まれた前記初期乱数の封印値を取得し、前記取得した封印値と、前記開封された初期乱数と、前記使用された乱数として通知された乱数と、に基づき、前記乱数生成装置による乱数生成の公正性を検証する、付記5の乱数生成システム。
[付記7]
前記端末は、前記開封された初期乱数の封印値を計算し、前記計算した封印値と前記電子掲示板から取得した封印値が不一致の場合は、前記乱数生成装置による乱数生成は不公正であると判定する、付記6の乱数生成システム。
[付記8]
前記端末は、前記計算した封印値と前記電子掲示板から取得した封印値が一致し、且つ、前記使用された乱数として通知された乱数と前記開封された初期乱数と前記ユーザ乱数から生成した乱数が一致する場合に、前記乱数生成装置による乱数生成は公正であると判定する、付記7の乱数生成システム。
[付記9]
前記乱数生成装置は、
前記ユーザ乱数と前記初期乱数の連結結果について第1のハッシュ値を計算し、前記第1のハッシュ値を前記端末用の初回の乱数とし、
前記第1のハッシュ値のハッシュ値を第2のハッシュ値として生成し、前記第2のハッシュ値と前記ユーザ乱数の連結結果のハッシュ値を2回目の乱数とする、付記1乃至8のいずれか一に記載の乱数生成システム。
[付記10]
前記端末は、前記ユーザ乱数を前記電子掲示板に書き込み、
前記乱数生成装置は、前記生成された乱数を使用した後に、前記使用された乱数を前記電子掲示板に書き込む、付記2の乱数生成システム。
[付記11]
前記電子掲示板に書き込まれた、前記初期乱数の封印値、前記使用された乱数及び前記ユーザ乱数を用いて、前記乱数生成装置による乱数生成の公正性を検証する、検証装置をさらに含む、付記10の乱数生成システム。
[付記12]
複数の前記端末を含み、
前記乱数生成装置は、前記複数の端末それぞれについて前記初期乱数を生成し、
前記複数の端末のそれぞれは、前記ユーザ乱数を生成し、
前記乱数生成装置は、少なくとも前記複数の初期乱数と前記複数のユーザ乱数に基づき、乱数を生成する、付記1乃至11のいずれか一に記載の乱数生成システム。
[付記13]
第1及び第2の前記端末を含み、
前記乱数生成装置は、前記第1の端末についての第1の前記初期乱数を生成し、
前記第1の端末は、第1の前記ユーザ乱数を生成すると共に、前記第1のユーザ乱数の封印値を前記乱数生成装置に送信し、
前記乱数生成装置は、前記第1のユーザ乱数の封印値を受信した後、前記第2の端末についての第2の前記初期乱数を生成すると共に、前記第1のユーザ乱数の封印値を前記第2の端末に送信し、
前記第2の端末は、前記第1のユーザ乱数の封印値を受信した後に、第2の前記ユーザ乱数を生成すると共に、前記生成された第2のユーザ乱数を前記乱数生成装置に送信し、
前記乱数生成装置は、前記第2のユーザ乱数を前記第1の端末に送信し、
前記第1の端末は、前記第2のユーザ乱数を受信した後に、前記第1のユーザ乱数の封印を前記乱数生成装置に開封し、
前記乱数生成装置は、少なくとも、前記第1及び第2の初期乱数と前記第1及び第2のユーザ乱数に基づき、乱数を生成する、付記12の乱数生成システム。
[付記14]
第1及び第2の前記端末を含み、
前記乱数生成装置は、前記第1の端末についての第1の前記初期乱数を生成し、
前記第1の端末は、第1の前記ユーザ乱数を生成すると共に、前記第1のユーザ乱数の封印値を前記乱数生成装置に送信し、
前記乱数生成装置は、前記第1のユーザ乱数の封印値を受信した後、前記第2の端末についての第2の前記初期乱数を生成すると共に、前記第1のユーザ乱数の封印値を前記第2の端末に送信し、
前記第2の端末は、前記第1のユーザ乱数の封印値を受信した後に、第2の前記ユーザ乱数を生成すると共に、前記生成された第2のユーザ乱数の封印値を前記乱数生成装置に送信し、
前記乱数生成装置は、前記第2のユーザ乱数の封印値を前記第1の端末に送信し、
前記第1の端末は、前記第2のユーザ乱数の封印値を受信した後に、前記第1のユーザ乱数の封印を前記乱数生成装置に開封し、
前記乱数生成装置は、前記第1のユーザ乱数の開封後、前記第1のユーザ乱数を前記第2の端末に送信し、
前記第2の端末は、前記第1のユーザ乱数を受信した後に、前記第2のユーザ乱数の封印を前記乱数生成装置に開封し、
前記乱数生成装置は、少なくとも、前記第1及び第2の初期乱数と前記第1及び第2のユーザ乱数に基づき、乱数を生成する、付記12の乱数生成システム。
[付記15]
前記端末は、ユーザの選択した選択肢に関連付けられた数値を利用し、前記ユーザ乱数を生成する、付記1乃至14のいずれか一に記載の乱数生成システム。
[付記16]
上述の第2の視点に係る乱数生成装置のとおりである。
[付記17]
上述の第3の視点に係る乱数生成方法のとおりである。
[付記18]
上述の第4の視点に係るプログラムのとおりである。
なお、付記16〜18の形態は、付記1の形態と同様に、付記2の形態〜付記15の形態に展開することが可能である。
【0192】
なお、引用した上記の特許文献等の各開示は、本書に引用をもって繰り込むものとする。本発明の全開示(請求の範囲を含む)の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の全開示の枠内において種々の開示要素(各請求項の各要素、各実施形態ないし実施例の各要素、各図面の各要素等を含む)の多様な組み合わせ、ないし、選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。
【符号の説明】
【0193】
10、10a、10b ゲームサーバ
11 CPU(Central Processing Unit)
12 メモリ
13 入出力インターフェイス
14 NIC(Network Interface Card)
20、20−1〜20−n、101 端末
30 データ管理システム
40、40−1〜40−4 管理サーバ
50 検証装置
102 乱数生成装置
201、301、401 通信制御部
202、302、402 記憶部
203 ゲーム実行制御部
211 ユーザ認証部
212 第1の乱数生成部
213 第2の乱数生成部
303 ゲーム実行部
311 乱数生成部
312 乱数検証部
403 台帳管理部
411 ブロック生成部
412 ブロック検証部
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16