以下、図面を参照しつつ、本発明の様々な実施形態について説明する。ただし、本発明の技術的範囲はそれらの実施形態に限定されず、特許請求の範囲に記載された発明とその均等物に及ぶ点に留意されたい。
図1は、第1の実施形態に従った情報処理システム1の処理の一例を示す模式図である。
情報処理システム1は、寄付者から特定の団体への寄付を管理するシステムである。情報処理システム1は、寄付者装置2、窓口ノード3、複数の団体ノード4及び金融機関サーバ5等を有する。寄付者装置2は、寄付者が使用するコンピュータである。窓口ノード3及び複数の団体ノード4のそれぞれは、金融機関の管理者及び各団体の管理者が使用するコンピュータである。金融機関サーバ5は、金融機関が提供するサーバである。なお、窓口ノード3は、第1コンピュータの一例であり、複数の団体ノード4は、複数の第2コンピュータの一例である。
各ノードは、それぞれデータグループを共有して記憶する。データグループは、例えばブロックチェーンである。ブロックチェーンは、複数のブロックを時系列順につなげたデータである。各ブロックには取引情報が含まれ、あるノードは、自ノードが記憶するブロック内に新たなデータを追加すると、そのデータを、P2Pネットワークを介して他のノードにブロードキャストする。
図1に示す例では、まず、寄付者装置2は、寄付者から特定の団体への寄付データが入力された場合、寄付データの管理を要求するための寄付要求信号をその特定の団体の団体ノード4に送信する(1)。寄付データには、寄付者、被寄付者、寄付額等の情報が含まれる。特定の団体の団体ノード4は、寄付者装置2から寄付要求信号を受信すると、寄付者の銀行口座から特定の団体の銀行口座に寄付額の入金がされたかの確認を要求するための入金確認信号を窓口ノード3に送信する(2)。窓口ノード3は、特定の団体の団体ノード4から入金確認信号を受信すると、特定の団体の金融機関における取引に関する取引情報の取得を要求するための取引情報要求信号を金融機関サーバ5に送信する(3)。金融機関サーバ5は、窓口ノード3から取引情報要求信号を受信すると、取引情報を通知するための取引情報通知信号を窓口ノード3に送信する(4)。取引情報には、金融機関における取引毎に取引番号、取引日時、振込元、振込先、取引金額、口座残高等の情報が含まれる。取引情報通知信号には、取引情報が含まれる。
窓口ノード3は、金融機関サーバ5から取引情報通知信号を受信すると、取引情報通知信号に含まれる取引情報を自ノードが記憶しているブロックに記憶する。窓口ノード3は、取引情報を暗号化して第1暗号値を生成し(5)、第1暗号値をブロックに記憶する。窓口ノード3は、更新した取引情報及び第1暗号値を各ノードにブロードキャストするとともに、複数の団体ノードに取引情報の正当性の検証を要求する検証要求信号を送信する(6)。
一方、取引情報を受信した各ノードは、受信した取引情報及び第1暗号値を自ノードが記憶しているブロックに記憶する。また、各団体ノード4は、窓口ノード3から検証要求信号を受信すると、自ノードが記憶しているブロックに記憶された第1暗号値を復号する(7)。各団体ノード4は、復号した第1復号値と、自ノードが記憶しているブロックに記憶された取引情報とを比較することにより、取引情報の正当性を検証する(8)。第1復号値と取引情報とが一致した場合、各団体ノード4は、検証が成功したことを示す検証成功信号を窓口ノード3に送信する(9)。
窓口ノード3は、各団体ノード4から検証成功信号を受信すると、各団体ノード4から受信した検証成功信号の数が所定数以上であるか否かを判定する(10)。これにより、窓口ノード3は、取引情報が正当であるか否かを判定する。
このように、窓口ノード3は、取引情報の正当性について複数の団体ノードに検証を要求し、各団体ノードから受信した検証成功信号の数に基づいて、取引情報の正当性を判定する。情報処理システム1は、複数の団体ノードの検証結果に基づいて取引情報の正当性を判定するため、取引情報の信頼性を向上させることができる。
図2は、情報処理システム1の概略構成の一例を示す。
情報処理システム1は、寄付者装置2と、窓口ノード3と、複数の団体ノード4と、金融機関サーバ5と、募金ノード6と、マイニングノード7と、被送金者装置8とを有する。情報処理システム1では、窓口ノード3、複数の団体ノード4、募金ノード6及びマイニングノード7は、それぞれネットワーク9を介して相互に通信可能に接続され、P2Pネットワークを形成する。また、窓口ノード3は、ネットワーク9を介して金融機関サーバ5と通信可能に接続される。寄付者装置2及び被送金者装置8は、それぞれネットワーク9を介して各団体ノード4に接続されている。
寄付者装置2は、寄付者が使用するコンピュータであり、例えばパーソナルコンピュータである。
金融機関サーバ5は、金融機関が提供するサーバである。
募金ノード6は、情報処理システム1で使用される暗号通貨を管理するコンピュータである。
被送金者装置8は、寄付者により寄付された寄付金を受け取る被送金者が使用するコンピュータであり、例えばパーソナルコンピュータである。
図3は、窓口ノード3の概略構成の一例を示す図である。
窓口ノード3は、金融機関の管理者が使用するコンピュータである。窓口ノード3は、第1記憶部31と、第1通信部32と、第1処理部33とを有する。
第1記憶部31は、例えば、半導体メモリ、磁気ディスク装置、及び光ディスク装置の内の少なくとも一つを有する。第1記憶部31は、第1処理部33による処理に用いられるプログラム(ドライバプログラム、オペレーティングシステムプログラム、アプリケーションプログラム等)、データ等を記憶する。コンピュータプログラムは、例えばCD−ROM(compact disk read only memory)、DVD−ROM(digital versatile disk read only memory)等のコンピュータ読み取り可能な可搬型記録媒体から、公知のセットアッププログラム等を用いて第1記憶部31にインストールされてもよい。また、コンピュータプログラムは、クラウドサービスから提供され、インストールされてもよい。第1記憶部31は、データとして、情報処理システム1で共有されるブロックチェーン、ブロックチェーンに含まれる各データが格納されたアドレスを示すアドレステーブル及び窓口ノード3の秘密鍵等を記憶する。
第1通信部32は、窓口ノード3をネットワーク9に接続するための通信インターフェース回路を有する。第1通信部32は、外部の各装置から受信したデータを第1処理部33に供給し、第1処理部33から受信したデータを外部の各装置に送信する。
第1処理部33は、一又は複数個のプロセッサ又はその周辺回路を有する。第1処理部33は、窓口ノード3の全体的な動作を統括的に制御するものであり、例えば、CPU(Central Processing Unit)である。第1処理部33は、窓口ノード3の各種処理が第1記憶部31に記憶されているプログラム等に応じて適切な手順で実行されるように、第1通信部32等の動作を制御する。また、第1処理部33は、複数のプログラムを並列に実行できる。
第1処理部33は、第1暗号値生成部331と、第1送信部332と、判定部333とを有する。第1処理部33が有するこれらの各部は、第1処理部33が有するプロセッサ上で実行されるプログラムによって実装される機能モジュールである。あるいは、これらの各部は、独立した集積回路、マイクロプロセッサ又はファームウェアとして窓口ノード3に実装されてもよい。
図4は、第1記憶部31に記憶されるブロックチェーンに含まれるブロックのデータ構造の一例を示す図である。
図4に示すように、ブロックチェーンは、複数のブロックがチェーン状につながれることにより形成される。各ブロックには、ハッシュ、オブジェクト及びトランザクション等が含まれる。ハッシュは、1つ前のブロックについて算出されたハッシュ値である。オブジェクトは、団体オブジェクト、寄付オブジェクト、入出金オブジェクト及び暗号通貨オブジェクト等の各種オブジェクトを含む。各オブジェクトの詳細については後述する。トランザクションには、各オブジェクトに含まれるデータを識別するための識別情報と、ノードの公開鍵とが関連付けて記憶される。
図5(a)〜(d)は、各ブロックに含まれるオブジェクトのデータ構造の一例を示す図である。
図5(a)〜(d)に示すように、各オブジェクトには、メソッドとデータとが含まれる。メソッドは、第1処理部33に特定の処理を実行させるためのプログラムである。データには、メソッドの実行により取得された実行結果等が記憶される。
図5(a)は、団体オブジェクトのデータ構造の一例を示す図である。
団体オブジェクトには、団体メソッド及び複数の団体データが含まれる。団体メソッドは、各団体ノードのアドレスを取得するためのプログラムである。各団体データには、各団体ノードのアドレスが含まれる。
図5(b)は、寄付オブジェクトのデータ構造の一例を示す図である。
寄付オブジェクトには、寄付メソッド及び複数の寄付データが含まれる。寄付メソッドは、寄付データを管理するためのプログラムである。寄付データには、寄付者、被寄付者、寄付額及び暗号通貨情報等を示す情報が含まれる。暗号通貨情報には、暗号通貨の発行額又は廃棄額が含まれる。
図5(c)は、入出金オブジェクトのデータ構造の一例を示す図である。
入出金オブジェクトには、入出金メソッド及び複数の入出金データが含まれる。入出金メソッドは、入出金データを管理するためのプログラムである。入出金データには、入出金予定情報、取引情報、入出金確認情報、第1暗号値、選出団体ノードアドレス、第2暗号値、タイムスタンプの日時、検証結果及び暗号通貨情報等の各情報が含まれる。入出金確認情報は、特定の団体の銀行口座において入出金がされたことを示す情報である。選出団体ノードアドレスは、窓口ノード3により選出された団体ノードのアドレスである。タイムスタンプは、窓口ノード3の合意確認処理の実行により取引情報が正当であると判定された時刻を示す文字列である。検証結果は、後述する合意確認処理における判定結果である。
図5(d)は、暗号通貨オブジェクトのデータ構造の一例を示す図である。
暗号通貨オブジェクトには、暗号通貨オブジェクト及び複数の暗号通貨データが含まれる。暗号通貨メソッドは、暗号通貨データを管理するためのプログラムである。暗号通貨データには、暗号通貨情報が含まれる。
図6は、第1記憶部31に記憶されるブロックチェーンに含まれる特定のデータが格納されたアドレスを示すアドレステーブルである。
図6に示すように、アドレステーブルには、データ毎に、各データを示すデータ識別情報と、各データのデータ領域のアドレスとが関連付けて記憶されている。
図7は、団体ノード4の概略構成の一例を示す図である。
団体ノード4は、団体の管理者が使用するコンピュータである。団体ノード4は、第2記憶部41と、第2通信部42と、第2処理部43とを有する。
第2記憶部41は、例えば、半導体メモリ、磁気ディスク装置、及び光ディスク装置の内の少なくとも一つを有する。第2記憶部41は、第2処理部43による処理に用いられるプログラム、データ等を記憶する。コンピュータプログラムは、例えばCD−ROM、DVD−ROM等のコンピュータ読み取り可能な可搬型記録媒体から、公知のセットアッププログラム等を用いて第2記憶部41にインストールされてもよい。また、コンピュータプログラムは、クラウドサービスから提供され、インストールされてもよい。第2記憶部41は、データとして、情報処理システム1で共有される図4、5(a)〜(d)に示したブロックチェーン及びブロックチェーンに含まれる各データと、図6に示したアドレステーブル等を記憶する。
第2通信部42は、団体ノード4をネットワーク9に接続するための通信インターフェース回路を有する。第2通信部42は、外部の各装置から受信したデータを第2処理部43に供給し、第2処理部43から受信したデータを外部の各装置に送信する。
第2処理部43は、一又は複数個のプロセッサ又はその周辺回路を有する。第2処理部43は、団体ノード4の全体的な動作を統括的に制御するものであり、例えば、CPUである。第2処理部43は、団体ノード4の各種処理が第2記憶部41に記憶されているプログラム等に応じて適切な手順で実行されるように、第2通信部42等の動作を制御する。また、第2処理部43は、複数のプログラムを並列に実行できる。
第2処理部43は、検証実行部431と、第2暗号値生成部432と、第2送信部433とを有する。第2処理部43が有するこれらの各部は、第2処理部43が有するプロセッサ上で実行されるプログラムによって実装される機能モジュールである。あるいは、これらの各部は、独立した集積回路、マイクロプロセッサ又はファームウェアとして団体ノード4に実装されてもよい。
図8は、マイニングノード7の概略構成の一例を示す図である。
マイニングノード7は、マイニングを実行してブロックを生成するコンピュータである。マイニングノード7は、第3記憶部71と、第3通信部72と、第3処理部73とを有する。
第3記憶部71は、例えば、半導体メモリ、磁気ディスク装置、及び光ディスク装置の内の少なくとも一つを有する。第3記憶部71は、第3処理部73による処理に用いられるプログラム、データ等を記憶する。コンピュータプログラムは、例えばCD−ROM、DVD−ROM等のコンピュータ読み取り可能な可搬型記録媒体から、公知のセットアッププログラム等を用いて第3記憶部71にインストールされてもよい。また、コンピュータプログラムは、クラウドサービスから提供され、インストールされてもよい。第3記憶部71は、データとして、情報処理システム1で共有される図4、5(a)〜(d)に示したブロックチェーン及びブロックチェーンに含まれる各データと、図6に示したアドレステーブル等を記憶する。
第3通信部72は、マイニングノード7をネットワーク9に接続するための通信インターフェース回路を有する。第3通信部72は、外部の各装置から受信したデータを第3処理部73に供給し、第3処理部73から受信したデータを外部の各装置に送信する。
第3処理部73は、一又は複数個のプロセッサ又はその周辺回路を有する。第3処理部73は、マイニングノード7の全体的な動作を統括的に制御するものであり、例えば、CPUである。第3処理部73は、マイニングノード7の各種処理が第3記憶部71に記憶されているプログラム等に応じて適切な手順で実行されるように、第3通信部72等の動作を制御する。
図9は、ブロック生成処理のフローチャートである。
以下に説明するブロック生成処理は、マイニングノード7の第3記憶部71に記憶されているプログラムに基づいて、主に第3処理部73により、マイニングノード7の各要素と協働して実行される。
最初に、第3処理部73は、第3記憶部71に記憶されているブロックチェーンの最後尾のブロックについて、ブロック内のデータサイズが所定値以上か否かを判定する(ステップS101)。
次に、ブロック内のデータサイズが所定値以上であった場合(ステップS101:YES)、第3処理部73は、新たなブロックを生成し(ステップS102)、処理をステップS101に戻す。第3処理部73は、新たなブロックを生成するためにマイニングを実行する。第3処理部73は、取引情報等を含む1つ前のブロックについて、ナンス(任意の値)を加えて、ハッシュ値を算出する。第3処理部73は、Proof Of Work(PoW)によりハッシュ値を算出する。なお、第3処理部73は、Proof Of Stake(PoS)又はProof Of Importance(PoI)等によりハッシュ値を算出してもよい。第3処理部73は、ナンスを変えながらハッシュ値を算出し、所定の条件に合致したハッシュ値を算出した場合、その算出されたハッシュ値を他のノードにブロードキャストし、そのハッシュ値が正しいことについての検証を他のノードに要求する。他のノードによりそのハッシュ値が正しいことが検証された場合、そのハッシュ値を含む新たなブロックが生成される。マイニングの実行は、例えば、イーサリアム等の分散型アプリケーション・プラットフォームを用いて実現される。なお、マイニングの実行は、上記の例に限定されず、公知の任意の合意形成アルゴリズムを用いて実現されてもよい。
一方、ブロック内のデータサイズが所定値以上でなかった場合(ステップS101:NO)、第3処理部73は、ブロックが生成されてから一定時間が経過しているか否かを判定する(ステップS103)。
一定時間が経過していた場合(ステップS102:YES)、第3処理部73は、新たなブロックを生成し(ステップS103)、処理をステップS101に戻す。
一定時間が経過していない場合(ステップS102:NO)、第3処理部73は、処理をステップS101に戻す。
図10は、情報処理システム1による暗号通貨発行処理の一例を説明するための動作シーケンスの一例である。
以下に説明する動作シーケンスは、予め第1記憶部31及び第2記憶部41に記憶されているプログラムに基づいて、主に第1処理部33及び第2処理部43により、窓口ノード3及び団体ノード4の各要素と協働して実行される。なお、以下に説明する動作シーケンスは、ブロックチェーン内のオブジェクトに予め記録されているメソッドに従って、実行される。
最初に、寄付者から被寄付者である特定の団体への寄付データが入力された場合、寄付者装置2は、寄付データの管理を要求するための寄付要求信号を特定の団体ノード4に送信する(ステップS201)。寄付者により入力される寄付データには、寄付者、被寄付者、寄付額等の情報が含まれる。寄付要求信号には、入力された各情報が含まれる。
次に、特定の団体の団体ノード4の第2処理部43は、第2通信部42を介して寄付要求信号を受信すると、寄付オブジェクトに寄付データを生成し(ステップS202)、寄付要求信号に含まれる各情報を、生成した寄付データのデータ領域に書込む。第2処理部43は、生成した寄付データを第2通信部42を介して各ノードにブロードキャストし、各ノードは、受信した寄付データを各ノードが記憶しているブロックチェーンに記憶する。
次に、第2処理部43は、寄付者の銀行口座から特定の団体の銀行口座に寄付額の入金がされたかの確認を要求するための入金確認信号を第2通信部42を介して窓口ノード3に送信する(ステップS203)。入金確認信号には、寄付者、被寄付者、寄付額等の情報が含まれる。
次に、窓口ノード3の第1処理部33は、第1通信部32を介して入金確認信号を受信すると、入出金オブジェクトに入出金データを生成し(ステップS204)、入金確認信号に含まれる各情報を生成した入出金データのデータ領域に書込む。
入金確認信号に含まれる寄付者、被寄付者及び寄付額を示す各情報は、それぞれ、入出金予定情報において入金者、被入金者及び入金予定額として書込まれる。また、第1処理部33は、生成した入出金データの識別情報とアドレスを関連付けてアドレステーブルに書き込む。さらに、第1処理部33は、生成した入出金データの識別情報と、窓口ノード3の公開鍵を関連付けてトランザクションとして記憶する。第1処理部33は、生成した入出金データ及びトランザクションを第1通信部32を介して各ノードにブロードキャストする。各ノードは、受信した入出金データ及びトランザクションを各ノードが記憶しているブロックチェーンに記憶するとともに、各ノードが記憶しているアドレステーブルを更新する。
次に、第1処理部33は、第1通信部32を介して金融機関サーバ5に取引情報要求信号を送信する(ステップS205)。取引情報要求信号には、被入金者を示す情報が含まれる。
次に、金融機関サーバ5は、取引情報要求信号を受信すると、受信した取引情報要求信号において指定された被入金者に関する取引情報を抽出し、抽出した取引情報を含む取引情報通知信号を窓口ノード3に送信する(ステップS206)。取引情報には、被入金者の金融機関における各取引毎の取引番号、取引日時、振込元、振込先、取引金額、口座残高等の情報が含まれる。
次に、窓口ノード3の第1処理部33は、取引情報通知信号を第1通信部32を介して受信すると、取引情報通知信号に含まれる取引情報をステップS204で生成した入出金データのデータ領域に書込む(ステップS207)。
第1処理部33は、取引情報に基づいて、寄付者の銀行口座から特定の団体の銀行口座に寄付額が入金されたか否かを判定する。第1処理部33は、入出金データとして記憶されている入出金予定情報と、取引情報通知信号に含まれる取引情報とを比較する。第1処理部33は、入出金予定情報に含まれる入金者、被入金者及び入金予定額と、取引情報に含まれる振込元、振込先及び取引金額とがそれぞれ一致した場合に、入金されたと判定する。第1処理部33は、入金されたと判定した場合、入出金データのデータ領域に、寄付者の銀行口座から特定の団体の銀行口座に寄付額の入金がされたことを示す入出金確認情報を書込む。第1処理部33は、更新された入出金データを第1通信部32を介して各ノードにブロードキャストし、各ノードは、受信した入出金データを各ノードが記憶しているブロックチェーンに記憶する。なお、寄付者の銀行口座から特定の団体の銀行口座に寄付額が入金されていないと判定した場合、第1処理部33は、一定期間、再度ステップS205〜S207の処理を繰り返してもよい。
次に、第1暗号値生成部331は、後述するステップS210の検証処理において使用する第1暗号値を生成するための暗号値生成処理を実行する(ステップS208)。暗号値生成処理の詳細については後述する。
次に、第1送信部332は、生成した第1暗号値の検証処理を要求する検証要求信号を第1通信部32を介して複数の団体ノード4のそれぞれに送信する(ステップS209)。検証要求信号には、第1暗号値及び対応する入出金データの識別情報が含まれる。
検証要求信号が送信される複数の団体ノード4は、例えば、比例分配法等により選出される。各団体ノード4には、法人格の有無又は団体の所在地等の属性が予め設定され、第1送信部332は、各属性を有する団体ノード4が選出される比率が、各属性を有する団体ノード4が存在する比率と同一になるように、団体ノードを選出する。第1送信部332は、比例分配法を用いて団体ノード4を選出することにより、検証者として選出される団体に偏りが生じることを防止できる。
次に、各団体ノード4の検証実行部431は、検証要求信号を受信した場合、第1暗号値の検証処理を実行する(ステップS210)。検証処理は、第1暗号値を復号した第1復号値と、各団体ノード4がブロックチェーンに記憶している取引情報とを比較することにより実行される。検証処理の詳細については後述する。
各団体ノード4の第2送信部433は、検証処理において第1復号値と、各団体ノード4がブロックチェーンに記憶している取引情報が一致した場合、検証が成功したことを示す検証成功信号を第2通信部42を介して窓口ノード3に送信する(ステップS211)。検証成功信号には、検証処理において生成された第2暗号値及び検証した入出金データの識別情報等が含まれる。
次に、窓口ノード3の第1処理部33が第1通信部32を介して各団体ノード4から検証成功信号を受信すると、判定部333は、合意確認処理を実行する(ステップS212)。なお、判定部333は、各団体ノード4から検証成功信号を受信するたびに合意確認処理を実行する。合意確認処理の詳細については後述する。判定部333は、合意確認処理の実行により取引情報が正当であると判定した場合、検証成功信号において指定された入出金データのデータ領域に取引情報の正当性が証明されたことを示すタイムスタンプを記憶する。また、判定部333は、合意確認処理における検証結果を、対応する入出金データのデータ領域に書込む。判定部333は、更新された入出金データを第1通信部32を介して各ノードにブロードキャストし、各ノードは、受信した入出金データを各ノードが記憶しているブロックチェーンに記憶する。
以下のステップS213〜S218の処理は、ステップS207で寄付者の銀行口座から特定の団体の銀行口座に寄付額が入金されたと判定された場合に限り実行される。
判定部333は、合意確認処理において取引情報が正当であると判定した場合、第1通信部32を介して募金ノード6に暗号通貨の発行信号を送信する(ステップS213)。発行信号は、暗号通貨の発行を要求する信号であり、発行信号には、入金された寄付額と同額の取引金額及び対応する入出金データの識別情報等の各情報が含まれる。
次に、募金ノード6は、窓口ノード3から発行信号を受信すると、発行信号に含まれる取引金額に相当する暗号通貨の発行額を算出する。暗号通貨の発行額は、固定レート又は取引所若しくは販売所等のレートを適用して算出される。募金ノード6は、暗号通貨データを生成し(ステップS214)、生成した暗号通貨データのデータ領域に、暗号通貨情報として、算出した発行額を示す情報を書き込む。募金ノード6は、生成した暗号通貨データを各ノードにブロードキャストし、各ノードは、受信した暗号通貨データを各ノードが記憶しているブロックチェーンに記憶する。
次に、募金ノード6は、発行結果信号を窓口ノード3に送信する(ステップS215)。発行結果信号には、暗号通貨情報及び発行信号に含まれていた入出金データの識別情報等が含まれる。
次に、窓口ノード3の第1処理部33は、第1通信部32を介して発行結果信号を受信すると、発行結果信号において指定された入出金データのデータ領域に暗号通貨情報を書込む(ステップS216)。第1処理部33は、第1通信部32を介して更新した入出金データを各ノードにブロードキャストし、各ノードは、受信した入出金データを各ノードが記憶しているブロックチェーンに記憶する。
次に、第1処理部33は、第1通信部32を介して入金結果信号を特定の団体ノード4に送信する(ステップS217)。入金結果信号は、寄付者の銀行口座から特定の団体の銀行口座に寄付額の入金がされ、暗号通貨が発行されたことを示し、入金結果信号には、暗号通貨情報等が含まれる。
次に、特定の団体ノード4の第2処理部43は、第2通信部42を介して入金結果信号を受信すると、入金結果信号に含まれる暗号通貨情報を、ステップS202で生成していた寄付データのデータ領域に書込む(ステップS218)。以上により、暗号通貨の発行処理は終了する。
図11は、暗号値の生成処理の動作の例を示すフローチャートである。暗号値の生成処理は、図10に示す動作シーケンスのステップS208において、窓口ノード3により実行される。
最初に、第1暗号値生成部331は、図10のステップS204で生成した入出金データに含まれる取引情報から最新の口座残高及びその直前の口座残高を取得する(ステップS301)。
次に、第1暗号値生成部331は、最新の口座残高と直前の口座残高との差分値を算出する(ステップS302)。
次に、第1暗号値生成部331は、窓口ノード3の秘密鍵で差分値を暗号化することにより、第1暗号値を生成する(ステップS303)。即ち、第1暗号値は、取引情報を暗号化した値である。
第1暗号値生成部331は、第一暗号値を図10のステップS204で生成した入出金データに書込み(ステップS304)、一連のステップを終了する。なお、第1暗号値生成部331は、更新された入出金データを第1通信部32を介して各ノードにブロードキャストし、各ノードは、受信した入出金データを各ノードが記憶しているブロックチェーンに記憶する。
図12は、検証処理の動作の例を示すフローチャートである。検証処理は、図10に示す動作シーケンスのステップS210において、各団体ノード4により実行される。
最初に、検証実行部431は、自ノードが記憶しているトランザクションから、受信した検証要求信号に含まれる入出金データの識別情報に関連付けられている公開鍵を取得する(ステップS401)。この公開鍵は、その入出金データを生成した窓口ノード3の公開鍵である。
次に、検証実行部431は、受信した検証要求信号に含まれる第1暗号値を取得した公開鍵で復号する(ステップS402)。
次に、検証実行部431は、自ノードが記憶している入出金オブジェクトから、受信した検証要求信号において指定された入出金データを抽出し、抽出した入出金データに含まれる取引情報から最新の口座残高及びその直前の口座残高を取得する(ステップS403)。
次に、検証実行部431は、最新の口座残高と直前の口座残高との差分値を算出する(ステップS404)。
次に、検証実行部431は、算出した差分値が第1復号値と一致するか否かを判定する(ステップS405)。
差分値と第1復号値が一致した場合(ステップS405:YES)、検証実行部431は、差分値、入出金データの識別情報及び団体ノードアドレスを窓口ノード3の公開鍵で暗号化し、第2暗号値を生成する(ステップS406)。
次に、検証実行部431は、検証要求信号において指定された入出金データのデータ領域に第2暗号値を書込み(ステップS407)、一連のステップを終了する。この場合、図10のステップS211において、検証成功信号が送信される。
一方、差分値と第1復号値とが一致しない場合(ステップS405:NO)、検証実行部431は、特に処理を行わず、一連のステップを終了する。この場合、図10のステップS211において、検証成功信号は送信されない。
図13は、合意確認処理の動作の例を示すフローチャートである。合意確認処理は、図10に示す動作シーケンスのステップS212において、窓口ノード3により実行される。
最初に、判定部333は、受信した検証成功信号から第2暗号値を取得する(ステップS501)。
次に、判定部333は、窓口ノード3の秘密鍵で第2暗号値を復号し、第2復号値を生成する(ステップS502)。第2暗号値を復号した第2復号値は、最新の口座残高と直前の口座残高との差分値、入出金データの識別情報及び団体ノードアドレスである。
判定部333は、受信した検証成功信号において指定された入出金データを抽出し、抽出した取引情報から最新の口座残高及びその直前の口座残高を取得する(ステップS503)。
次に、判定部333は、最新の口座残高と直前の口座残高との差分値を算出する(ステップS504)。
次に、判定部333は、算出した差分値が第2復号値に含まれる差分値と一致するか否かを判定する(ステップS505)。
算出した差分値が第2復号値に含まれる差分値と一致した場合(ステップS505:YES)、判定部333は、正しい検証成功信号を受信した数を示すカウンタをインクリメントする(ステップS506)。なお、判定部333は、第2復号値に含まれる入出金データの識別情報が、検証成功信号に含まれる入出金データの識別情報と一致し、且つ第2復号値に含まれる団体ノードアドレスが検証成功信号を送信した団体ノードのアドレスである場合に限り、カウンタをインクリメントしてもよい。これにより、検証が成功したことの信頼性をより向上させることができる。
算出した差分値が第2復号値に含まれる差分値と一致しない場合(ステップS505:NO)、判定部333は、特に処理を行わず、一連のステップを終了する。
次に、判定部333は、カウンタが所定値以上であるか否かを判定する(S507)。
カウンタが所定値以上である場合(ステップS506:YES)、判定部333は、取引情報が正当であると判定し(ステップS507)、一連のステップを終了する。この場合、図10のステップS213において、発行信号が送信される。
一方、カウンタが所定値未満である場合(ステップS507:NO)、判定部333は、特に処理を行わず、一連のステップを終了する。この場合は、まだ発行信号は送信されない。なお、判定部333は、検証要求信号を送信してから一定期間経過しても、カウンタが所定値以上にならない場合、取引情報が正当でないと判定する。判定部333は、取引情報が正当でないと判定し、取引情報が正当でない旨を複数の団体ノード4のそれぞれに通知してもよい。
このように、窓口ノード3の判定部333は、各団体ノード4の検証実行部431により暗号化された情報を用いて、検証が成功したか否かを判定することにより、検証が成功したことの信頼性を向上させることができる。なお、検証実行部431は第2暗号値を生成せず、判定部333は、ステップS501〜S505の処理を省略して、検証成功信号を受信した場合にカウンタをインクリメントしてもよい。この場合、検証実行部431は検証処理を短時間に実行し、判定部333は合意確認処理を短時間に実行することができる。
以上説明したように、窓口ノード3は、取引情報の正当性について複数の団体ノードに検証を要求し、各団体ノードから受信した検証成功信号の数に基づいて、取引情報の正当性を判定する。情報処理システム1は、複数の団体ノードの検証結果に基づいて取引情報の正当性を判定するため、取引情報の信頼性を向上させることができる。
また、情報処理システム1は、マイニングノード7によるブロック単位でのマイニングによる検証に加えて、複数の団体ノード4によるデータ単位での検証を二重に実行する。情報処理システム1は、ブロック単位でのマイニングによる検証と、ブロック内の特定のデータについての検証をそれぞれ実行するため、個別のデータの信頼性を向上させることができる。また、P2Pネットワークへの参加が制限されていないブロックチェーンにおいて、悪意を持ったノードの管理者により取引の記録が改ざんされた場合であっても、情報処理システム1は、改ざんされたことを適切に検出することができる。
また、情報処理システム1は、取引情報の検証をコンピュータの処理により自動的に実行する。これにより、情報処理システム1は、取引情報の改ざん及び人為的ミスによる取引情報の不整合を防ぐことができ、取引情報の信頼性を向上させることができる。
また、情報処理システム1は、適切に検証された信頼性の高い取引情報に基づいて、暗号通貨を発行することができ、暗号通貨自体の信頼性を向上させることもできる。
また、既存の暗号通貨基盤では、寄付者による金融機関口座への入金確認は、取引所又は販売所等のサービス提供者によって行われており、時間を要する場合があった。そのため、寄付者が、法定通貨を金融機関口座に入金してから暗号通貨が発行されるまでの間に、法定通貨及び暗号通貨の価値が大きく変動する可能性があった。一方、情報処理システム1は、寄付者により寄付データが入力されてから暗号通貨が発行されるまでの一連の処理を自動で行うため、法定通貨及び暗号通貨の価値の変動リスクを抑えることができる。
また、情報処理システム1は、既存のブロックチェーン基盤上で実現されるため、容易に実装することができる。
(第2の実施形態)
本実施形態では、情報処理システム1は、暗号通貨の発行処理に代えて、暗号通貨の廃棄処理を実行する。第2の実施形態における情報処理システム1の構成は、第1の実施形態における情報処理システム1と同様であるため、詳細な説明を省略し、第1の実施形態と異なる点についてのみ説明する。
図14は、各ノードの記憶部に記憶される送金オブジェクトのデータ構造の一例を示す図である。
送金オブジェクトには、送金メソッド及び複数の送金データが含まれる。送金メソッドは、送金データを管理するプログラムである。送金データには、被送金者、送金者、送金額及び暗号通貨情報の情報等が含まれる。
図15は、情報処理システム1による暗号通貨廃棄処理の一例を説明するための動作シーケンスの一例である。
以下に説明する動作シーケンスは、予め第1記憶部31及び第2記憶部41に記憶されているプログラムに基づいて、主に第1処理部33及び第2処理部43により、窓口ノード3及び団体ノード4の各要素と協働して実行される。なお、以下に説明する動作シーケンスは、ブロックチェーン内のオブジェクトに予め記録されているメソッドに従って、実行される。
最初に、送金者である特定の団体から被送金者への送金データが入力された場合、被送金者装置8は、送金データの管理を要求するための送金要求信号を特定の団体の団体ノード4に送信する(ステップS601)。被送金者により入力される送金データには、被送金者、送金者、送金額等の情報が含まれる。送金要求信号には、入力された各情報が含まれる。
次に、特定の団体の団体ノード4の第2処理部43は、第2通信部42を介して送金要求信号を受信すると、送金オブジェクトに送金データを生成し(ステップS602)、送金要求信号に含まれる各情報を、生成した送金データのデータ領域に書込む。第2処理部43は、生成した送金データを第2通信部42を介して各ノードにブロードキャストし、各ノードは、受信した送金データを各ノードが記憶しているブロックチェーンに記憶する。
次に、第2処理部43は、特定の団体の銀行口座から被送金者の銀行口座に送金額の出金がされたかの確認を要求するための出金確認信号を第2通信部42を介して窓口ノード3に送信する(ステップS603)。出金確認信号には、被送金者、送金者、送金額等の情報が含まれる。
次に、窓口ノード3の第1処理部33は、第1通信部32を介して出金確認信号を受信すると、入出金オブジェクトに入出金データを生成し(ステップS604)、出金確認信号に含まれる各情報を生成した入出金データのデータ領域に書込む。
出金確認信号に含まれる被送金者、送金者及び送金額を示す各情報は、それぞれ、入出金予定情報において出金者、被出金者及び出金予定額として書込まれる。窓口ノード3及び他の各ノードは、図10のステップS204と同様にして、生成された入出金データ及びトランザクションを共有する。
次に、第1処理部33は、第1通信部32を介して金融機関サーバ5に取引情報要求信号を送信する(ステップS605)。取引情報要求信号には、出金者を示す情報が含まれる。
次に、金融機関サーバ5は、取引情報要求信号を受信すると、受信した取引情報要求信号において指定された出金者に関する取引情報を抽出し、抽出した取引情報含む取引情報通知信号を窓口ノード3に送信する(ステップS606)。取引情報には、出金者の金融機関における各取引毎の取引番号、取引日時、取引金額、振込元、振込先、口座残高が含まれる。
次に、窓口ノード3の第1処理部33は、取引情報通知信号を第1通信部32を介して受信すると、取引情報通知信号に含まれる取引情報をステップS604で生成した入出金データのデータ領域に書込む(ステップS607)。
第1処理部33は、図10のステップS607と同様にして、取引情報に基づいて、送金者の銀行口座から被送金者の銀行口座に送金額が出金されたか否かを判定する。第1処理部33は、出金されたと判定した場合、入出金データのデータ領域に、送金者の銀行口座から被送金者の銀行口座に送金額の出金がされたことを示す入出金確認情報を書込む。窓口ノード3及び他の各ノードは、図10のステップS207と同様にして、更新された入出金データを共有する。なお、送金者の銀行口座から被送金者の銀行口座に送金額が出金されていないと判定した場合、第1処理部33は、一定期間、再度ステップS605〜S607の処理を繰り返してもよい。
ステップS608〜S612の各処理については、図10のステップS208〜S212の各処理と同様であるため、説明を省略する。
以下のステップS613〜S618の処理は、ステップS607で送金者の銀行口座から被送金者の銀行口座に送金額が出金されたと判定された場合に限り実行される。
判定部333は、合意確認処理において取引情報が正当であると判定した場合、第1通信部32を介して募金ノード6に暗号通貨の廃棄信号を送信する(ステップS613)。廃棄信号は、暗号通貨の廃棄を要求する信号であり、廃棄信号には、取引金額及び対応する入出金データの識別情報が含まれる。
次に、募金ノード6は、窓口ノード3から廃棄信号を受信すると、廃棄信号に含まれる取引金額に相当する暗号通貨の廃棄額を算出する。暗号通貨の廃棄額は、固定レート又は取引所若しくは販売所等のレートを適用して算出される。募金ノード6は、暗号通貨データを生成し(ステップS614)、生成した暗号通貨データのデータ領域に、暗号通貨情報として、算出した廃棄額を示す情報を書き込む。募金ノード6及び他の各ノードは、図10のステップS614と同様にして、生成された暗号通貨データを共有する。
次に、募金ノード6は、廃棄結果信号を窓口ノード3に送信する(ステップS615)。廃棄結果信号には、暗号通貨情報及び廃棄信号に含まれていた入出金データの識別情報等が含まれる。
次に、窓口ノード3の第1処理部33は、第1通信部32を介して廃棄結果信号を受信すると、廃棄結果信号において指定された入出金データのデータ領域に暗号通貨情報を書込む(ステップS616)。窓口ノード3及び他の各ノードは、図10のステップS616と同様にして、更新された入出金データを共有する。
次に、第1処理部33は、第1通信部32を介して出金結果信号を特定の団体ノード4に送信する(ステップS617)。出金結果信号は、送金者の銀行口座から被送金者の銀行口座に送金額の出金がされ、暗号通貨が廃棄されたことを示し、出金結果信号には、暗号通貨情報等が含まれる。
次に、特定の団体ノード4の第2処理部43は、第2通信部42を介して出金結果信号を受信すると、出金結果信号に含まれる暗号通貨情報を、ステップS602で生成していた送金データのデータ領域に書込む(ステップS618)。以上により、暗号通貨の廃棄処理は終了する。
以上説明したように、情報処理システム1は、暗号通貨の廃棄処理においても、複数の団体ノードの検証結果に基づいて取引情報の正当性を判定するため、取引情報の信頼性を向上させることができる。また、情報処理システム1は、適切に検証された信頼性の高い取引情報に基づいて、暗号通貨を廃棄することができ、暗号通貨自体の信頼性を向上させることもできる。また、情報処理システム1は、被送金者により送金データが入力されてから暗号通貨が廃棄されるまでの一連の処理を自動で行うため、法定通貨及び暗号通貨の価値の変動リスクを抑えることができる。
(第3の実施形態)
本実施形態では、情報処理システム1は、暗号通貨の発行処理に代えて、残高確認処理を実行する。第3の実施形態における情報処理システム1の構成は、第1の実施形態における情報処理システム1と同様であるため、詳細な説明を省略し、第1の実施形態と異なる点についてのみ説明する。
図16は、各ノードの記憶部に記憶される残高確認オブジェクトのデータ構造の一例を示す図である。
残高確認オブジェクトには、残高確認メソッド及び複数の残高確認データが含まれる。残高確認メソッドは、残高確認データを管理するプログラムである。残高確認データには、残高確認結果が含まれる。残高確認データには、取引情報、残高確認結果、残高の差分値、第1暗号値、選出団体ノードアドレス、第2暗号値、タイムスタンプの日時及び検証結果等の各情報が含まれる。
図17は、残高確認処理の一例を説明するための動作シーケンスの一例である。
以下に説明する動作シーケンスは、予め第1記憶部31及び第2記憶部41に記憶されているプログラムに基づいて、主に第1処理部33及び第2処理部43により、窓口ノード3及び団体ノード4の各要素と協働して実行される。なお、以下に説明する動作シーケンスは、ブロックチェーン内のオブジェクトに予め記録されているメソッドに従って、実行される。また、以下に説明する動作シーケンスは、窓口ノード3により定期的に又は任意のタイミングで実行される。
最初に、窓口ノード3の第1処理部33は、自ノードが記憶している入出金オブジェクトから、入出金確認情報が記憶されていない入出金データ、即ち未だ入金又は出金されていない入出金データを抽出し、抽出した入出金データに対応する残高確認データを生成する(ステップS701)。また、第1処理部33は、生成した残高確認データの識別情報とアドレスを関連付けてアドレステーブルに書込む。第1処理部33は、生成した残高確認データの識別情報と、窓口ノード3の公開鍵を関連付けてトランザクションとして記憶する。第1処理部33は、生成した残高確認データ及びトランザクションを第1通信部32を介して各ノードにブロードキャストし、各ノードは、受信した残高確認データ及びトランザクションを各ノードが記憶しているブロックチェーンに記憶するとともに、各ノードが記憶しているアドレステーブルを更新する。
次に、第1処理部33は、第1通信部32を介して金融機関サーバ5に取引情報要求信号を送信する(ステップS702)。取引情報要求信号には、残高確認処理の対象となる団体(即ち、抽出した入出金データの入出金予定情報における被入金者又は出金者)を示す情報が含まれる。
次に、金融機関サーバ5は、取引情報要求信号を受信すると、受信した取引情報要求信号において指定された団体に関する取引情報を抽出し、抽出した取引情報を含む取引情報通知信号を窓口ノード3に送信する(ステップS703)。取引情報には、その団体の金融機関における各取引の取引番号、取引日時、振込元、振込先、取引金額、口座残高等の情報が含まれる。
次に、窓口ノード3の第1処理部33は、取引情報通知信号を第1通信部32を介して受信すると、取引情報通知信号に含まれる取引情報をステップS701で生成した残高確認データのデータ領域に書込む(ステップS704)。次に、第1処理部33は、金融機関サーバ5から受信した取引情報通知信号から、取引情報に含まれる口座残高を取得する。第1処理部33は、ステップS701において抽出した入出金データから取引情報に含まれる口座残高及び入出金予定情報に含まれる入金予定額又は出金予定額を取得する。
入金予定額が0でない場合、第1処理部33は、入出金データから取得した口座残高に入金予定額を加算した加算値が金融機関サーバ5から受信した取引情報通知信号に含まれる口座残高と一致するか否かを判定する。第1処理部33は、各値が一致する場合、団体の口座に入金予定額が入金されたと判定し、各値が一致しない場合、入金予定額がまだ入金されていないと判定する。
一方、出金予定額が0でない場合、第1処理部33は、入出金データから取得した口座残高から出金予定額を減算した減算値が金融機関サーバ5から受信した取引情報通知信号に含まれる口座残高と一致するか否かを判定する。第1処理部33は、各値が一致する場合、団体の口座から出金予定額が出金されたと判定し、各値が一致しない場合、出金予定額がまだ出金されていないと判定する。
第1処理部33は、判定結果を残高確認結果としてステップS701で生成した残高確認データのデータ領域に書込む。第1処理部33は、更新された残高確認データを第1通信部32を介して各ノードにブロードキャストし、各ノードは、受信した入出金データを各ノードが記憶しているブロックチェーンに記憶する。
なお、ステップS705〜S709の各処理については、第1の実施形態で説明したステップS208〜S212の各処理と同様であるため、説明を省略する。但し、ステップS705〜S709及び図11〜13の各フローチャートの処理において、入出金データの代わりに、残高確認データが用いられる。
また、ステップS710において、窓口ノード3の判定部333は、合意確認処理における検証結果を、対応する残高確認データのデータ領域に書込む。判定部333は、更新された残高確認データを第1通信部32を介して各ノードにブロードキャストし、各ノードは、受信した残高確認データを各ノードが記憶しているブロックチェーンに記憶する。これにより、判定部333は、図13のステップS506において、取引情報が正当でないと判定した場合、取引情報が正当でない旨を複数の団体ノード4に通知する。
なお、ステップS704の処理で、団体の銀行口座に入金予定額が入金されたと判定された場合、情報処理システム1は、図10に示したステップS213〜S218の各処理を実行し、暗号通貨を発行する。一方、ステップS704の処理で、団体の銀行口座から出金予定額が出金されたと判定された場合、情報処理システム1は、図15に示したステップS613〜S618の各処理を実行し、暗号通貨を廃棄する。
以上説明したように、残高確認処理においても、情報処理システム1は、複数の団体ノードの検証結果に基づいて取引情報の正当性を判定するので、取引情報の信頼性を向上させることができる。