(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-11-13
(45)【発行日】2023-11-21
(54)【発明の名称】検証方法、検証装置及び検証プログラム
(51)【国際特許分類】
G06F 21/64 20130101AFI20231114BHJP
G06Q 20/06 20120101ALI20231114BHJP
【FI】
G06F21/64
G06Q20/06
(21)【出願番号】P 2020005200
(22)【出願日】2020-01-16
【審査請求日】2022-09-08
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(72)【発明者】
【氏名】竹内 琢磨
(72)【発明者】
【氏名】米倉 裕貴
(72)【発明者】
【氏名】藤本 真吾
(72)【発明者】
【氏名】森永 正信
【審査官】上島 拓也
(56)【参考文献】
【文献】特開2018-128723(JP,A)
【文献】米国特許出願公開第2019/0228468(US,A1)
【文献】米国特許出願公開第2020/0007313(US,A1)
【文献】国際公開第2019/143979(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 21/64
G06Q 20/06
(57)【特許請求の範囲】
【請求項1】
ブロックチェーンに格納された取引データの検証実績データから、前記取引データの検証に用いられた検証ポリシーに含まれる複数の関数それぞれの入力値及び出力値を取得し、
取得した前記入力値及び前記出力値のうち、前記複数の関数に含まれる1以上の関数の集合である第1の関数の入力値及び出力値による前記第1の関数の検証要求をブロックチェーンネットワークに含まれる第1のノードに送信するとともに、取得した前記入力値及び前記出力値のうち、前記複数の関数に含まれる1以上の関数の集合である第2の関数の入力値及び出力値による前記第2の関数の検証要求を前記ブロックチェーンネットワークに含まれる第2のノードに送信することで、前記検証ポリシーの検証を複数のノードに検証させる、
処理をコンピュータが実行することを特徴とする検証方法。
【請求項2】
前記検証させる処理は、前記第1の関数と前記第1の関数の入力値及び出力値とを前記第1のノードに送信し、前記第2の関数と前記第2の関数の入力値及び出力値とを前記第2のノードに送信する、
ことを特徴とする請求項1記載の検証方法。
【請求項3】
ブロックチェーンに格納された取引データの検証実績データから、前記取引データの検証に用いられた検証ポリシー
の各部分に対する入力値を取得し、
前記部分ごとに取得した前記入力値を、ブロックチェーンネットワークに含まれるノード
のうち前記部分ごとに異なるノードに、前記検証ポリシーの
前記部分の検証要求ととも
に送信する、
処理をコンピュータが実行することを特徴とする検証方法。
【請求項4】
ブロックチェーンに格納された取引データの検証実績データから、前記取引データの検証に用いられた検証ポリシーに含まれる複数の関数それぞれの入力値及び出力値を取得する取得部と、
取得した前記入力値及び前記出力値のうち、前記複数の関数に含まれる1以上の関数の集合である第1の関数の入力値及び出力値による前記第1の関数の検証要求をブロックチェーンネットワークに含まれる第1のノードに送信するとともに、取得した前記入力値及び前記出力値のうち、前記複数の関数に含まれる1以上の関数の集合である第2の関数の入力値及び出力値による前記第2の関数の検証要求を前記ブロックチェーンネットワークに含まれる第2のノードに送信することで、前記検証ポリシーの検証を複数のノードに検証させる送信部と、
を有することを特徴とする検証装置。
【請求項5】
ブロックチェーンに格納された取引データの検証実績データから、前記取引データの検証に用いられた検証ポリシー
の各部分に対する入力値を取得する取得部と、
前記部分ごとに取得した前記入力値を、ブロックチェーンネットワークに含まれるノード
のうち前記部分ごとに異なるノードに、前記検証ポリシーの
前記部分の検証要求ととも
に送信する送信部と、
を有することを特徴とする検証装置。
【請求項6】
ブロックチェーンに格納された取引データの検証実績データから、前記取引データの検証に用いられた検証ポリシーに含まれる複数の関数それぞれの入力値及び出力値を取得し、
取得した前記入力値及び前記出力値のうち、前記複数の関数に含まれる1以上の関数の集合である第1の関数の入力値及び出力値による前記第1の関数の検証要求をブロックチェーンネットワークに含まれる第1のノードに送信するとともに、取得した前記入力値及び前記出力値のうち、前記複数の関数に含まれる1以上の関数の集合である第2の関数の入力値及び出力値による前記第2の関数の検証要求を前記ブロックチェーンネットワークに含まれる第2のノードに送信することで、前記検証ポリシーの検証を複数のノードに検証させる、
処理をコンピュータに実行させることを特徴とする検証プログラム。
【請求項7】
ブロックチェーンに格納された取引データの検証実績データから、前記取引データの検証に用いられた検証ポリシー
の各部分に対する入力値を取得し、
前記部分ごとに取得した前記入力値を、ブロックチェーンネットワークに含まれるノード
のうち前記部分ごとに異なるノードに、前記検証ポリシーの
前記部分の検証要求ととも
に送信する、
処理をコンピュータに実行させることを特徴とする検証プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、検証方法、検証装置及び検証プログラムに関する。
【背景技術】
【0002】
ブロックチェーンは原則として、各取引について、多数のノードによる検証をベースとして、中央機関不在の信頼性を保っている。BitcoinやEthereumに代表されるパブリックブロックチェーンは、参加するプレイヤーの非中央集権的な運用を可能としているが、各取引は仮想通貨と紐づいており、金銭面でブロックチェーンネットワークの参加に対するインセンティブを確保している。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、コンソーシアムブロックチェーンの場合、そもそも仮想通貨自体をデフォルトで備えてないプログラムもあり、ノードとして参加するためのインセンティブを確保できない。上記したように、ブロックチェーンの信頼性は、多数のノードによる検証をベースとしているため、多数のノードの参加を確保することは、ブロックチェーンの信頼性の確保にとって非常に重要である。
【0005】
そこで、一側面では、ブロックチェーンネットワークへの参加意欲を増進させることを目的とする。
【課題を解決するための手段】
【0006】
一つの態様では、ブロックチェーンに格納された取引データの検証実績データから、前記取引データの検証に用いられた検証ポリシーに含まれる複数の関数それぞれの入力値及び出力値を取得し、取得した前記入力値及び前記出力値のうち、前記複数の関数に含まれる1以上の関数の集合である第1の関数の入力値及び出力値による前記第1の関数の検証要求をブロックチェーンネットワークに含まれる第1のノードに送信するとともに、取得した前記入力値及び前記出力値のうち、前記複数の関数に含まれる1以上の関数の集合である第2の関数の入力値及び出力値による前記第2の関数の検証要求を前記ブロックチェーンネットワークに含まれる第2のノードに送信することで、前記検証ポリシーの検証を複数のノードに検証させる、処理をコンピュータが実行する。
【発明の効果】
【0007】
一側面として、ブロックチェーンネットワークへの参加意欲を増進させることができる。
【図面の簡単な説明】
【0008】
【
図1】本発明の実施の形態における取引管理システム1の構成例を示す図である。
【
図2】本発明の実施の形態における各ピア10のハードウェア構成例を示す図である。
【
図3】本発明の実施の形態における各ピア10の機能構成例を示す図である。
【
図4】固有ポリシーの登録時に実行される処理手順の一例を説明するためのシーケンス図である。
【
図5】固有ポリシーのポリシーグラフへの変換例を示す図である。
【
図7】固有ポリシーの検証対象となる取引の発生時に実行される処理手順の一例を説明するためのシーケンス図である。
【
図8】固有ポリシーの検証処理の処理手順の一例を説明するためのシーケンス図である。
【
図9】秘匿構造データの部分グラフへの分割例を示す図である。
【発明を実施するための形態】
【0009】
以下、図面に基づいて本発明の実施の形態を説明する。
図1は、本発明の実施の形態における取引管理システム1の構成例を示す図である。
図1において、複数のユーザ端末20は、インターネット等のネットワークを介して取引管理システム1に接続される。
【0010】
ユーザ端末20は、各種の取引の当事者が利用する端末である。例えば、PC(Personal Computer)、スマートフォン又はタブレット端末等がユーザ端末20として利用されてもよい。
【0011】
取引管理システム1は、ユーザ端末20間で行われる取引を管理するP2Pネットワーク(ブロックチェーンネットワーク)であり、分散型台帳技術が適用された複数のコンピュータ又は情報処理装置であるノードの集合を含む。本実施の形態では、便宜上、各ノードをピア(Peer)10という。各ピア10は、ブロックチェーンネットワークによって接続され、共通の台帳情報を分散して管理する記憶部(以下、「台帳」という。)を有する。台帳には、取引の履歴を示すブロックチェーンが記録される。
図1において、ブロックチェーンC1は、各ピア10が有する台帳に記憶されている、ピア10間において共通のブロックチェーンを示す。なお、
図1では、便宜上、4つのピア10が取引管理システム1に含まれる例が示されているが、ピア10の数は、4つに限定されない。
【0012】
図2は、本発明の実施の形態における各ピア10のハードウェア構成例を示す図である。
図2に示されるように、ピア10は、それぞれバスBで相互に接続されているドライブ装置100、補助記憶装置102、メモリ装置103、CPU104、及びインタフェース装置105等を有する。
【0013】
ピア10での処理を実現するプログラムは、記録媒体101によって提供される。プログラムを記録した記録媒体101がドライブ装置100にセットされると、プログラムが記録媒体101からドライブ装置100を介して補助記憶装置102にインストールされる。但し、プログラムのインストールは必ずしも記録媒体101より行う必要はなく、ネットワークを介して他のコンピュータよりダウンロードするようにしてもよい。補助記憶装置102は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
【0014】
メモリ装置103は、プログラムの起動指示があった場合に、補助記憶装置102からプログラムを読み出して格納する。CPU104は、メモリ装置103に格納されたプログラムに従ってピア10に係る機能を実行する。インタフェース装置105は、ネットワークに接続するためのインタフェースとして用いられる。
【0015】
なお、記録媒体101の一例としては、CD-ROM、DVDディスク、又はUSBメモリ等の可搬型の記録媒体が挙げられる。また、補助記憶装置102の一例としては、HDD(Hard Disk Drive)又はフラッシュメモリ等が挙げられる。記録媒体101及び補助記憶装置102のいずれについても、コンピュータ読み取り可能な記録媒体に相当する。
【0016】
図3は、本発明の実施の形態における各ピア10の機能構成例を示す図である。
図3において、ピア10は、通信部11、ポリシー登録部12、取引検証判定部13及び固有ポリシー検証部14等を有する。これら各部は、ピア10にインストールされた1以上のプログラムが、CPU104に実行させる処理により実現される。ピア10は、また、ポリシーDB15及び検証実績データDB16等のデータベース(記憶部)を利用する。これら各記憶部は、例えば、補助記憶装置102、又はピア10にネットワークを介して接続可能な記憶装置等を用いて実現可能である。
【0017】
通信部11は、ユーザ端末20又は他のピア10との通信を行う。また、或るピア10の通信部11は、取引データをブロックチェーンC1へ記録する。ポリシー登録部12は、取引の検証ポリシーであって、各ピア10に固有のポリシー(以下「固有ポリシー」という。)の入力を受け付け、入力された固有ポリシーをポリシーDB15に登録する。すなわち、本実施の形態では、取引の検証ポリシーとして全ピア10において共通のポリシー(以下「共通ポリシー」という。)とは別に、ピア10ごとに個別の固有ポリシーの設定が可能とされる。
【0018】
取引検証判定部13は、取引の検証要求に応じ、当該ピア10の共通ポリシー及び固有ポリシーに基づいて、当該取引の検証を行う。後述されるように、固有ポリシーは、1以上の関数の集合として表現可能であり、当該固有ポリシーに対して入力値が入力されると、当該固有ポリシーが含む関数に基づく出力値を出力する。取引検証判定部13は、検証時において固有ポリシーを構成する各関数に入力された入力値及び当該関数からの出力値を検証対象の取引の識別情報(以下「取引ID」という。)に関連付けたデータを、検証実績データとして検証実績データDB16に格納(記録)する。取引検証判定部13は、また、固有ポリシーの各関数への入力値及び各関数からの出力値のそれぞれのハッシュ値をブロックチェーンC1(台帳)に記録する。
【0019】
固有ポリシー検証部14は、各ピア10の固有ポリシーの検証に関する処理を行う。固有ポリシーの検証とは、各ピア10の固有ポリシーが他のポリシーに対して無断で変更されていないことの確認することをいう。
【0020】
以下、取引管理システム1において実行される処理手順について説明する。
図4は、固有ポリシーの登録時に実行される処理手順の一例を説明するためのシーケンス図である。
図4では、ピア10aにおいて、固有ポリシーが登録される例を示す。他のピア10に対して固有ポリシーが登録される場合には、
図4において、当該他のピア10とピア10aとが置き換えられた処理手順が実行されればよい。
【0021】
ステップS101において、ポリシー登録部12aは、例えば、ピア10aの管理者からピア10aの固有ポリシー(以下、「対象固有ポリシー」という。)の入力を受け付け、対象固有ポリシーをポリシーDB15aに登録する。続いて、ポリシー登録部12aは、対象固有ポリシーを、関数に相当する部品と関数に対する入力値又は出力値が構成する木構造を有するグラフデータ(以下、「ポリシーグラフ」という。)に変換する(S102)。すなわち、対象固有ポリシーに対するポリシーグラフが生成される。
【0022】
図5は、固有ポリシーのポリシーグラフへの変換例を示す図である。
図5では、固有ポリシーp1の内容が、「位置センサAと位置センサBの距離が20m以上あり,温度センサCの値が10℃未満ならyes」である例が示されている。この場合、固有ポリシーp1を表現するポリシーグラフは、例えば、
図5のポリシーグラフg1の通りとなる。ポリシーグラフg1において、関数に対応するノードは、関数の内容を示す情報と、関数の識別情報(以下「関数ID」という。)とを含む。関数の子ノードは、関数に対する入力値に対応し、入力値に該当する値が何であるのかを示す情報(以下「入力値情報」という。)を含む。なお、関数に対する入力値は、より下位のノードの関数の出力値である場合もあり、このような入力値は、
図5において「中間出力値」として表記されている。関数の親ノードは、関数からの出力値に対応し、出力値に該当する値が何であるのかを示す情報(以下「出力値情報」という。)を含む。なお、最上位の関数から出力値は、固有ポリシー全体の出力値に該当し、このような出力値は、
図5において「最終出力値」として表記されている。最終出力値は、yes又はnoである。yesは検証に成功したこと(取引が当該固有ポリシーに適合していること)を示し、noは検証に失敗したこと(取引が当該固有ポリシーに適合していないこと)を示す。なお、ポリシーグラフg1において、各ノードには識別情報が付与されている。以下、各ノードの識別情報を「ノードID」という。
【0023】
以下、固有ポリシーp1が対象固有ポリシーであるとする。なお、固有ポリシーp1に対応付けられて、ポリシーグラフg1がポリシーDB15に登録されてもよい。
【0024】
続いて、ポリシー登録部12aは、ポリシーグラフg1に含まれる関数ごとに、当該関数のハッシュ値(以下「関数ハッシュ値」という。)を計算する(S103)。関数ハッシュ値は、例えば、ピア10aが保有する秘密鍵に対応付く公開鍵によって各関数を暗号化することで計算されてもよい。例えば、ピア10aと他のピア10が保有する共通鍵によって各関数を暗号化することで計算されてもよい。
【0025】
続いて、ポリシー登録部12aは、ポリシーグラフg1において、各ピア10の具体的な内容(入力値情報、中間出力値情報、関数等)が隠蔽又は秘匿(すなわち当該内容が欠落)されたグラフの構造データ(以下「秘匿構造データ」という。)を生成する(S104)。
【0026】
図6は、秘匿構造データの一例を示す図である。
図6において、秘匿構造データd1は、ポリシーグラフg1に対応する秘匿構造データである。
【0027】
図6に示されるように、秘匿構造データd1は、ポリシーグラフg1の各ノードの内容の種別を示すデータ(以下「ノード種別」という。)である。その結果として、ポリシーグラフg1の各ピア10が含む具体的な情報が欠落している(隠蔽されている)。ここで、ノード種別とは、「入力値」、「関数」、「中間出力値」及び「最終出力値」である。したがって、秘匿構造データd1は、「入力値」、「関数」、「中間出力値」及び「最終出力値」の関係を示すデータであるといえる。また、秘匿構造データd1における各ノードは、ポリシーグラフg1において対応するノードと同一のノードIDを含む。したがって、秘匿構造データd1は、ノードごとに、ノードID及びノードを含み、ノード間の接続関係を示す情報を含むデータであるといえる。なお、ノードIDにノード種別が含まれてもよい。
【0028】
続いて、ポリシー登録部12aは、秘匿構造データd1及び関数ハッシュ値群(ステップS103において計算された関数ハッシュ値の集合)を含む取引データ(以下「対象取引データ」という。)の検証要求を取引管理システム1の各ピア10へ送信する(S105)。対象取引データにおいては、各関数ハッシュ値が、秘匿構造データd1に含まれるノードのうちのいずれのノードに対応するのかを判別可能とするため情報が含まれる。例えば、各関数ハッシュ値がノードIDに対応付けられて対象取引データに含まれてもよい。なお、各ピア10には、ピア10aが含まれてもよい。この点については、他のシーケンス図でも同様である。
【0029】
各ピア10の通信部11が当該検証要求を受信すると、各ピア10の取引検証判定部13は、当該検証要求に含まれている対象取引データについて、共通ポリシーに基づく検証(以下「共通検証」という。)を実行する(S106)。例えば、秘匿構造データd1及び関数ハッシュ値群を含む取引データに対する共通ポリシーとしては、秘匿構造データd1が所定の構造に従っており、関数ハッシュ値群がノードIDに対応付けられて含まれていることを確認することであってもよい。
【0030】
続いて、各ピア10の通信部11は、共通検証の検証結果を含む回答をピア10xへ送信する(S107)。ピア10xは、ステップS106及びS107を実行した各ピア10のうちのいずれかの1つのピア10(例えば、或る計算処理の処理結果が最も良かったピア10)であってもよいし、予め決められた1つのピア10であってもよい。予め決められた1つのピア10は、当該各ピア10とは異なる特別なピア10(ブロックチェーンC1への書き込みを担うピア)であってもよい。この場合、ピア10xには、検証結果と共に対象取引データが送信されればよい。何がピア10xであるかについては、以降のシーケンス図においても同様である。検証結果は、対象取引データが共通ポリシーに従っており対象取引データを承認するか(OK)又は対象取引データが共通ポリシーに従っておらず対象取引データを承認しないか(NG)を示す情報である。
【0031】
ピア10xの通信部11xが、各ピア10からの当該回答を受信すると、ピア10xの取引検証判定部13xは、各ピア10からの当該回答に基づいて、対象取引データの検証結果を判定する(S108)。例えば、各ピア10による全ての検証結果がOKである場合に、対象取引データはOKであると判定されてもよいし、他の方法(例えば、多数決等)に基づいて、対象取引データのOK/NGが判定されてもよい。判定結果がOKである場合、通信部11xは、対象取引データ(すなわち、秘匿構造データd1及び関数ハッシュ値群)をブロックチェーンC1へ格納する(S109)。すなわち、対象取引データが台帳xに登録され、台帳xへの登録結果が他の各ピア10の台帳にも反映される。
【0032】
図7は、固有ポリシーの検証対象となる取引の発生時に実行される処理手順の一例を説明するためのシーケンス図である。
【0033】
例えば、ピア10aの通信部11aが、ユーザ端末20から或る取引の実行要求を受信すると(S201)、当該取引の内容を示すデータ(以下「対象取引データ」という。)を生成する(S202)。続いて、通信部11aは、対象取引データの検証要求を各ピア10へ送信する(S203)。
【0034】
各ピア10の通信部11が当該検証要求を受信すると、各ピア10の取引検証判定部13は、当該検証要求に含まれている対象取引データについて、共通検証を実行する(S204)。続いて、当該各ピア10の取引検証判定部13は、対象取引データについて、当該各ピア10の固有ポリシーに基づく検証(以下「固有検証」という。)を実行する(S205)。具体的には、取引検証判定部13は、当該各ピア10の固有ポリシーに対して入力値を入力し、当該固有ポリシーの最終出力値を得る。ここで、固有ポリシーに対する入力値は、必ずしも対象取引データに含まれている値に限られない。例えば、或るピア10が固有に保持している情報(例えば、何らかの値のリスト等)と、対象取引データに含まれている値とが比較又は照合するといった関数が固有ポリシーに含まれる場合、当該固有に保持している情報も固有ポリシーに対する入力値とされる。
【0035】
なお、各ピア10の固有ポリシーは、各ピア10に関して
図4のステップS101が実行されることで各ピア10のポリシーDB15に記憶されている。また、各ピア10の固有ポリシーは、各ピア10に固有の内容であるため、ピア10間で異なる。したがって、固有検証においては、対象取引データについて各ピア10において異なる検証が行われる。続いて、当該各ピア10の通信部11は、固有検証の検証結果(最終出力値であるyes又はno)を含む回答をピア10xへ送信する(S206)。
【0036】
ピア10xの通信部11xが、各ピア10からの回答を受信すると、ピア10xの取引検証判定部13xは、各ピア10からの回答に基づいて、対象取引データの検証結果を判定する(S207)。例えば、各ピア10による全ての検証結果がyesである場合に、対象取引データはOKであると判定されてもよいし、他の方法(例えば、多数決等)に基づいて、対象取引データのOK/NGが判定されてもよい。判定結果がOKである場合、通信部11xは、対象取引データをブロックチェーンC1へ格納する(S208)。この際、通信部11xは、各ピア10からの検証結果(yes又はno)も対象取引データと共にブロックチェーンC1へ登録する。すなわち、対象取引データ及び各検証結果が台帳xに登録され、台帳xへの登録結果が他の各ピア10の台帳にも反映される。
【0037】
一方、対象取引データの検証を行った各ピア10の取引検証判定部13は、ステップS206に続いて、ステップS205の固有検証において用いた固有ポリシーに含まれる各関数の入力値及び当該入力値のノードID、並びに各関数からの出力値及び当該出力値のノードIDを対象取引データの取引IDに関連付けたデータを検証実績データとして検証実績データDB16に保存する(S209)。続いて、各ピア10の取引検証判定部13は、検証実績データに含めた当該各入力値及び当該各出力値のそれぞれについてハッシュ値を計算する(S210)。例えば、各ピア10が保有する秘密鍵に対応付けられた公開鍵によって入力値又は出力値が暗号化されることでハッシュ値が計算されてもよい。例えば、各ピア10同士が保有する共通鍵によって入力値又は出力値が暗号化されることでハッシュ値が計算されてもよい。但し、固有ポリシーの最終出力値に該当する出力値については、ブロックチェーンC1に格納されているため、ハッシュ値の計算対象から除外されてもよい。
【0038】
続いて、各ピア10の通信部11は、対象取引データの取引ID及び当該ハッシュ値群を含む取引データの検証要求を各ピア10に送信する(S211)。すなわち、固有検証を行った各ピア10から各ピア10に対して取引データの検証要求が送信される。したがって、ステップS211では、複数の取引データのそれぞれについて各ピア10から検証要求が送信される。以下、便宜上、当該複数の取引データのうちの1つの取引データ(以下「対象取引データ」という。)に着目してステップS212以降を説明するが、ステップS212以降は、各取引データについて実行される。なお、各取引データにおいて、各ハッシュ値は、秘匿構造データにおけるノードのノードIDに対応づけられる。
【0039】
ステップS212において、各ピア10の通信部11が対象取引データを受信すると、当該各ピア10の取引検証判定部13は、対象取引データについて、共通検証を実行する(S212)。例えば、対象取引データに取引IDと、ノードIDに対応付けられたハッシュ値群とが含まれていることが検証されてもよい。続いて、当該各ピア10の通信部11は、共通検証の検証結果を含む回答をピア10xへ送信する(S213)。ピア10xが当該各ピア10に含まれない場合、対象取引データもピア10xへ送信される。
【0040】
ピア10xの通信部11xが、各ピア10からの回答を受信すると、ピア10xの取引検証判定部13xは、各ピア10からの回答に基づいて、対象取引データの検証結果を判定する(S214)。例えば、各ピア10による全ての検証結果がOKである場合に、対象取引データはOKであると判定されてもよいし、他の方法(例えば、多数決等)に基づいて、対象取引データのOK/NGが判定されてもよい。判定結果がOKである場合、通信部11xは、対象取引データ(すなわち、取引IDと、ノードIDに対応付けられたハッシュ値群)をブロックチェーンC1へ格納する(S215)。すなわち、対象取引データが台帳xに登録され、台帳xへの登録結果が他の各ピア10の台帳にも反映される。
【0041】
図8は、固有ポリシーの検証処理の処理手順の一例を説明するためのシーケンス図である。
図8では、ピア10aの固有ポリシーが検証対象である例を示す(以下、ピア10aの固有ポリシーを「対象固有ポリシー」という。)。他のピア10の固有ポリシーが検証対象とされる場合には、
図8において、当該他のピア10とピア10aとが置き換えられた処理手順が実行されればよい。なお、
図8の処理手順は、例えば、ピア10aが自発的に開始してもよいし、他のピア10からの要求に応じて開始されてもよい。
【0042】
ステップS301において、固有ポリシー検証部14aは、対象固有ポリシーについてブロックチェーンC1に登録された秘匿構造データd1を複数の部分グラフに分割する。部分グラフへの分割は、例えば、1以上の関数の集合ごとに行われてもよい。
【0043】
図9は、秘匿構造データの部分グラフへの分割例を示す図である。
図9には、
図6に示した秘匿構造データd1が部分グラフsg1~sg5の5つの部分グラフに分割された例が示されている。
図9では、各部分グラフが1つの関数を含む例が示されている。すなわち、
図9において、各部分グラフは、1つの関数のノードIDと当該関数への入力値のノードIDと、当該関数からの出力値のノードIDとを含むグラフである。なお、
図9において、部分グラフsg3の関数の入力値は、部分グラフsg1の中間出力値でもあり、当該関数の出力値は、部分グラフsg5の入力値でもある。同様に、部分グラフsg4の関数の入力値は、部分グラフsg2の中間出力値でもあり、当該関数の出力値は、部分グラフsg5の入力値でもある。
【0044】
続いて、固有ポリシー検証部14aは、部分グラフごとに、当該部分グラフの検証要求先を決定する(S302)。1つの部分グラフの検証要求先は1つのピア10であってもよいし、複数のピア10であってもよい。但し、1つのピア10が複数の部分グラフの検証要求先とされるのは好ましくない。固有ポリシーの秘匿の観点から、各部分グラフの検証要求先が相互に異なることが望ましい。
【0045】
続いて、固有ポリシー検証部14aは、部分グラフごとに、検証に用いる過去の取引(以下「検証用取引」という。)の取引IDに関連付けられて検証実績データDB16に記憶されている検証実績データから、検証用取引に関する当該部分グラフへの入力値及び当該部分グラフからの出力値の生の値(実際の値)を取得すると共に、当該部分グラフに含まれる関数の具体的な内容をポリシーDB15から取得する(S303)。該当する入力値、出力値及び関数は、該当する検証実績データに含まれているそれぞれのノードIDに基づいて取得可能である。すなわち、ポリシーDB15では、固有ポリシーを構成する関数に対してノードIDが関連付けられていてもよい。以下、検証用取引の取引IDと、1つの部分グラフに関する入力値及び出力値の生の値、並びに関数の具体的な内容と、それぞれのノードIDとを含むデータを「検証用データ」という。
【0046】
ここで、検証用取引とは、基本的には、過去の取引のうちのいずれでもよく、1つ又は複数でもよい。例えば、「過去の一定期間内の全取引」が検証用取引とされてもよい。又は、過去の取引のうちの1つ又は複数の取引がランダムに選択されてもよい。但し、検証対象の固有ポリシーがピア10aの固有ポリシーであることに鑑みると、検証用取引をピア10aが選択可能であるのは好ましくない。したがって、過去の取引のうちのいずれの取引を検証用取引とするかについては、ピア10間の合意によって選択されたり、検証の要求元となったピア10によって選択されたりしてもよい。
【0047】
続いて、固有ポリシー検証部14aは、部分グラフごとに、当該部分グラフの検証要求先のピア10が保有する秘密鍵に対応付けられた公開鍵を用いて、当該部分グラフの検証用データを暗号化する(S304)。また、例えば、ピア10aと検証要求先のピア10が共通して保有する共通鍵を用いて、当該部分グラフの検証用データを暗号化してもよい。検証用データには、固有ポリシーへの入力値が含まれる。当該入力値の中には、ピア10aが公開したくない情報も含まれうる。検証用データが暗号化されることで、斯かる情報の漏洩の可能性を低減することができる。以下、暗号化された検証用データを「暗号化検証用データ」という。続いて、通信部11aは、部分グラフごとに、当該部分グラフの暗号化検証用データを、当該部分グラフの検証要求先へ送信する(S305)。したがって、複数のピア10に対して異なる部分グラフの暗号化検証用データが送信される。
【0048】
検証要求先の各ピア10の通信部11が当該ピア10宛の暗号化検証用データを受信すると、各ピア10の固有ポリシー検証部14は、当該ピア10が保有する秘密鍵を用いて当該ピア10の通信部11によって受信された暗号化検証用データを復号する(S306)。その結果、各ピア10において、当該ピア10が検証要求先である部分グラフの検証用データ(検証用取引の取引ID、入力値ID及びそのノードID、関数及びそのノードID、出力値及びそのノードID)が得られる。
【0049】
続いて、当該各ピア10の固有ポリシー検証部14は、検証用データの正当性を判定する(S307)。具体的には、当該正当性の判定は、検証用データに含まれる入力値、関数及び出力値が正しく対応しているか否かの判定(以下「第1判定」という。)と、そもそも入力値、関数及び出力値が正しいか(実際に過去の取引の検証に用いられたものであるか)否かの判定(以下「第2判定」という。)とを含む。
【0050】
第1判定において、固有ポリシー検証部14は、検証用データの入力値を検証用データの関数に入力することで当該関数から出力される値が、検証用データの出力値と一致するか否かを判定する。すなわち、固有ポリシー検証部14は、比較した値が一致していれば、検証用データの入力値、関数及び出力値が正しく対応していると判定する(この場合の判定結果を「OK」という。)。一方、固有ポリシー検証部14は、比較した値が異なっていれば、検証用データの入力値、関数及び出力値が正しく対応していないと判定する(この場合の判定結果を「NG」という。)。
【0051】
また、第2判定において、固有ポリシー検証部14は、検証用データに含まれている各入力値、各関数、各出力値のハッシュ値を計算する。例えば、ピア10aの公開鍵によって各値を暗号化することでハッシュ値が計算されてもよい。例えば、ピア10aと他のピア10が保有する共通鍵によって各値を暗号化することで計算されてもよい。固有ポリシー検証部14は、また、各入力値及び各出力値のそれぞれについて検証用データに含まれているノードIDと、検証用データに含まれている取引IDとに基づいて、検証用データの各入力値及び各出力値に関してブロックチェーンC1に格納されているハッシュ値を取得する。また、固有ポリシー検証部14は、各関数について検証用データに含まれているノードIDに基づいて、検証用データの各関数に関してブロックチェーンC1に格納されているハッシュ値を取得する。固有ポリシー検証部14は、自らが計算したハッシュ値群と、ブロックチェーンC1から取得されたハッシュ値群とが一致すれば、検証用データの入力値、関数及び出力値は正しいと判定する(この場合の判定結果を「OK」という。)。一方、自らが計算したハッシュ値群と、ブロックチェーンC1から取得されたハッシュ値群とが一致しない場合、固有ポリシー検証部14は、検証用データの入力値、関数及び出力値は正しくないと判定する(この場合の判定結果を「NG」という。)。なお、最終出力値については、ブロックチェーンC1に格納されているため、第2判定は行われなくてもよい。
【0052】
第1判定及び第2判定の判定結果がOKである場合、固有ポリシー検証部14は、検証用データの正当性の判定結果をOKとし、そうでない場合、固有ポリシー検証部14は、検証用データの正当性の判定結果をNGとする。
【0053】
続いて、各ピア10の通信部11は、当該各ピア10の固有ポリシー検証部14による判定結果をピア10xへ送信する(S308)。
【0054】
ピア10xの通信部11xによって各ピア10の判定結果が受信されると、ピア10xの固有ポリシー検証部14xは、各ピア10からの判定結果に基づいて、対象固有ポリシーの検証結果を判定する(S309)。例えば、他ピア10による全ての判定結果がOKである場合に、対象ポリシーは正当である(検証結果はOKである)と判定されてもよいし、そうでない場合に、対象ポリシーは不正である(検証結果はNGである(他のピア10に無断で変更されている))と判定されてもよい。続いて、ピア10xの通信部11xは、固有ポリシー検証部14xによる判定結果をブロックチェーンC1へ格納する(S310)。
【0055】
なお、上記では、固有ポリシーの内容がセンサデータに関するものである例について示したが(
図5参照)、その他の固有ポリシーの例について以下に記す。
【0056】
[固有ポリシーの具体例1:銀行取引の場合]
銀行の預金取引に対して本実施の形態を適用する場合について述べる。特に、「送金額が送金者の預金残高を超えてないか」等の表面的な取引検証だけでなく、ブロックチェーンネットワークの参加者(ピア10)が各々の固有なロジック(固有ポリシー)で送金の可否を検証する場合を考える。
【0057】
検証に利用する入力値の例としては以下の通りである。
(1)送金者の1週間以内の送金回数
(2)送金者の1週間以内の合計送金金額
(3)送金する通貨のドル比率レート値
(4)送金者の所属する企業の株価変動比率
この場合、各ピア10の固有ポリシーとして以下のポリシー1及びポリシー2が一例として挙げられる。
【0058】
[ポリシー1]
(送金回数≦10 and 合計送金金額<500000) or レート値<2.5 ならば、送金取引の検証結果をOKとし、そうでなければ当該検証結果をNGとする。
【0059】
[ポリシー2]
(合計送金金額<100000 or レート値<1.5) and 0.8<企業株価変動率<1.2 ならば、送金取引の検証結果をOKとし、そうでなければ当該検証結果をNGとする。
【0060】
[固有ポリシーの具体例2:サプライチェーンの場合]
サプライチェーンにおける配送システムに対して本実施の形態を適用する場合について述べる。前述の具体例1と同様に、ブロックチェーンネットワークの参加者(ピア10)が各々の固有なロジック(固有ポリシー)で送金の可否を検証する場合を考える。
【0061】
検証に利用する入力値の例としては以下の通りである:
(1)各配送業者A、B、C、Dの工数見積もり値
(2)各配送業者A、B、C、Dの配送品質の見積もり値
(3)当日の天候(晴れ:1,曇り:2,雨:3,その他:4)
この場合、各ピア10の固有ポリシーとして以下のポリシー1及びポリシー2が一例として挙げられる。
【0062】
[ポリシー1]
(配送業者Aの工数≧3 or 配送業者Bの工数≧4) and 天候<3 ならば、配送の取引の検証結果をOKとし、そうでなければ当該検証結果をNGとする。
【0063】
[ポリシー2]
((配送業者Bの工数≧2 and 配送業者Bの品質値≧5) or 配送業者Cの工数≧5) and 天候<2 ならば、配送の取引の検証結果をOKとし、そうでなければ当該検証結果をNGとする。
【0064】
上述したように、本実施の形態によれば、各ピア10は検証ポリシーとして共通ポリシーとは別に固有ポリシーを用いることができる。したがって、各参加者(ピア10)は、自らの意図を取引データの検証に反映させることができる。例えば、各ピア10が企業であれば、各企業は自社にとって都合の良い検証ポリシーを取引データの検証に用いることができる。その結果、ブロックチェーンネットワークへの参加意欲を増進させることができる。
【0065】
また、本実施の形態では、検証ポリシーの部分ごと(関数ごと)に別のピア10によって当該部分の検証が行われる。その結果、各ピア10が取引の検証に固有ポリシーを用いた場合であっても、当該固有ポリシーが各ピア10の都合によって不正に(他ピア10に無断で)変更されるのを防ぐことができる。したがって、各ピア10が固有ポリシーを用いること(取引の検証ポリシーの多角化)を可能とすることができ、固有ポリシーを用いることができるということで、ブロックチェーンネットワークへの参加意欲を増進させることができる。
【0066】
また、固有ポリシーは、ピア10にとって非公開にしたい情報である可能性が有るところ、本実施の形態では、固有ポリシーの各検証要求先に対して公開されるのは、当該固有ポリシーの一部分である。したがって、或るピア10に対して固有ポリシーの全部が公開されるのを回避することができる。
【0067】
すなわち、ピア10ごとに検証ポリシーが異なるブロックチェーンネットワークを構築する際、固有ポリシーの正当性(変更されていないこと)の保証が必要となるが、或るピア10の固有ポリシーを他のピア10が検証を要求する際に、当該固有ポリシーの生の値を公開したくない。すなわち、「あるピア10の固有ポリシーの生の値を他のピア10に晒さない」、「固有ポリシーが正しいことを他のピア10が検証可能とする」という、相反する要求を本実施の形態によれば満たすことができる。
【0068】
なお、本実施の形態において、ピア10は、検証装置の一例である。固有ポリシー検証部14は、取得部及び検証部の一例である。通信部11は、送信部の一例である。ピア10が保有する秘密鍵に対応付く公開鍵又は各ピア10が保有する共通鍵は、暗号鍵の一例である。
【0069】
以上、本発明の実施の形態について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【0070】
以上の説明に関し、更に以下の項を開示する。
(付記1)
ブロックチェーンに格納された取引データの検証実績データから、前記取引データの検証に用いられた検証ポリシーに含まれる複数の関数それぞれの入力値及び出力値を取得し、
取得した前記入力値及び前記出力値のうち、前記複数の関数に含まれる1以上の関数の集合である第1の関数の入力値及び出力値による前記第1の関数の検証要求をブロックチェーンネットワークに含まれる第1のノードに送信するとともに、取得した前記入力値及び前記出力値のうち、前記複数の関数に含まれる1以上の関数の集合である第2の関数の入力値及び出力値による前記第2の関数の検証要求を前記ブロックチェーンネットワークに含まれる第2のノードに送信することで、前記検証ポリシーの検証を複数のノードに検証させる、
処理をコンピュータが実行することを特徴とする検証方法。
(付記2)
前記検証させる処理は、前記第1の関数と前記第1の関数の入力値及び出力値とを前記第1のノードに送信し、前記第2の関数と前記第2の関数の入力値及び出力値とを前記第2のノードに送信する、
ことを特徴とする付記1記載の検証方法。
(付記3)
ブロックチェーンに格納された取引データの検証実績データから、前記取引データの検証に用いられた検証ポリシーの入力値を取得し、
取得した前記入力値を、ブロックチェーンネットワークに含まれるノードが保有する暗号鍵により暗号化して、前記検証ポリシーの検証要求とともに前記ノードに送信する、
処理をコンピュータが実行することを特徴とする検証方法。
(付記4)
ブロックチェーンネットワークに含まれるノードとしてのコンピュータが、
他のノードの異なる検証ポリシーを用いて取引データを検証し、
前記取引データの検証結果を送信する、
処理を実行することを特徴とする検証方法。
(付記5)
ブロックチェーンに格納された取引データの検証実績データから、前記取引データの検証に用いられた検証ポリシーに含まれる複数の関数それぞれの入力値及び出力値を取得する取得部と、
取得した前記入力値及び前記出力値のうち、前記複数の関数に含まれる1以上の関数の集合である第1の関数の入力値及び出力値による前記第1の関数の検証要求をブロックチェーンネットワークに含まれる第1のノードに送信するとともに、取得した前記入力値及び前記出力値のうち、前記複数の関数に含まれる1以上の関数の集合である第2の関数の入力値及び出力値による前記第2の関数の検証要求を前記ブロックチェーンネットワークに含まれる第2のノードに送信することで、前記検証ポリシーの検証を複数のノードに検証させる送信部と、
を有することを特徴とする検証装置。
(付記6)
前記送信部は、前記第1の関数と前記第1の関数の入力値及び出力値とを前記第1のノードに送信し、前記第2の関数と前記第2の関数の入力値及び出力値とを前記第2のノードに送信する、
ことを特徴とする付記5記載の検証装置。
(付記7)
ブロックチェーンに格納された取引データの検証実績データから、前記取引データの検証に用いられた検証ポリシーの入力値を取得する取得部と、
取得した前記入力値を、ブロックチェーンネットワークに含まれるノードが保有する暗号鍵により暗号化して、前記検証ポリシーの検証要求とともに前記ノードに送信する送信部と、
を有することを特徴とする検証装置。
(付記8)
ブロックチェーンネットワークに含まれるノードとしての検証装置であって、
他のノードの異なる検証ポリシーを用いて取引データを検証する検証部と、
前記取引データの検証結果を送信する送信部と、
を有することを特徴とする検証装置。
(付記9)
ブロックチェーンに格納された取引データの検証実績データから、前記取引データの検証に用いられた検証ポリシーに含まれる複数の関数それぞれの入力値及び出力値を取得し、
取得した前記入力値及び前記出力値のうち、前記複数の関数に含まれる1以上の関数の集合である第1の関数の入力値及び出力値による前記第1の関数の検証要求をブロックチェーンネットワークに含まれる第1のノードに送信するとともに、取得した前記入力値及び前記出力値のうち、前記複数の関数に含まれる1以上の関数の集合である第2の関数の入力値及び出力値による前記第2の関数の検証要求を前記ブロックチェーンネットワークに含まれる第2のノードに送信することで、前記検証ポリシーの検証を複数のノードに検証させる、
処理をコンピュータに実行させることを特徴とする検証プログラム。
(付記10)
前記検証させる処理は、前記第1の関数と前記第1の関数の入力値及び出力値とを前記第1のノードに送信し、前記第2の関数と前記第2の関数の入力値及び出力値とを前記第2のノードに送信する、
ことを特徴とする付記9記載の検証プログラム。
(付記11)
ブロックチェーンに格納された取引データの検証実績データから、前記取引データの検証に用いられた検証ポリシーの入力値を取得し、
取得した前記入力値を、ブロックチェーンネットワークに含まれるノードが保有する暗号鍵により暗号化して、前記検証ポリシーの検証要求とともに前記ノードに送信する、
処理をコンピュータに実行させることを特徴とする検証プログラム。
(付記12)
ブロックチェーンネットワークに含まれるノードとしてのコンピュータに、
他のノードの異なる検証ポリシーを用いて取引データを検証し、
前記取引データの検証結果を送信する、
処理を実行させることを特徴とする検証プログラム。
【符号の説明】
【0071】
1 取引管理システム
10 ピア
11 通信部
12 ポリシー登録部
13 取引検証判定部
14 固有ポリシー検証部
15 ポリシーDB
16 検証実績データDB
20 ユーザ端末
100 ドライブ装置
101 記録媒体
102 補助記憶装置
103 メモリ装置
104 CPU
105 インタフェース装置
B バス
C1 ブロックチェーン