(57)【要約】      （修正有）【課題】ブロックチェーンに含まれる関連性のあるトランザクション同士をトレースすること。【解決手段】検出装置１００ａは、第１イベントに対応する第１トランザクションを生成してブロックチェーンに登録し、第１イベント情報と第１トランザクションの識別情報とを第１テーブルに登録する。検出装置１００ａは、第１イベントより前に発生した第２イベント情報と、第１トランザクションの識別情報を対応付けて第２テーブルに登録する。検出装置１００ａは、第２イベント情報と第１テーブルとを基に、第２イベント発生時に登録した第２トランザクションの識別情報を特定し、特定した識別情報と第２イベント情報を第１トランザクションに登録する。検出装置１００ａは、第３イベントのトレース要求があると、ブロックチェーンに登録された複数のトランザクションと、第１テーブルと第２テーブルとを基に、第３イベントに関連するトランザクションを検出する。【選択図】図８
2020160983.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
第１イベントが発生した場合、前記第１イベントに対応する第１トランザクションを生成してブロックチェーンに登録し、
前記第１イベントに関する第１イベント情報と、前記第１トランザクションの識別情報とを対応付けて第１テーブルに登録し、
前記第１イベントより前に発生した第２イベントに関する第２イベント情報と、前記第１トランザクションの識別情報とを対応付けて第２テーブルに登録し、
前記第２イベント情報と、前記第１テーブルとを基にして、前記第２イベント情報に対応する第２イベントが発生した際に登録された第２トランザクションの識別情報を特定し、特定した識別情報と前記第２イベント情報とを前記第１トランザクションに登録し、
第３イベントのトレース要求を受け付けた場合に、前記ブロックチェーンに登録された複数のトランザクションと、前記第１テーブルと、前記第２テーブルとを基にして、前記第３イベントに関連するトランザクションを検出する
処理を実行させることを特徴とする検出プログラム。
【請求項２】
前記検出する処理は、前記第３イベントに関する第３イベント情報と、前記第１テーブルとを基にして、前記第３イベント情報に対応する識別情報を有するトランザクションを特定し、特定したトランザクションに登録されたイベント情報と、前記第３イベント情報が一致する場合に、特定したトランザクションと、特定したトランザクションに登録された識別情報に対応するトランザクションとを関連付けることを特徴とする請求項１に記載の検出プログラム。
【請求項３】
前記検出する処理は、前記第３イベントに関する第３イベント情報と、前記第２テーブルとを基にして、前記第３イベント情報に対応する識別情報を有する第３トランザクションを特定し、前記第３トランザクションに登録された識別情報と、前記第１テーブルに登録された前記第３イベント情報に対応する識別情報とが一致する場合に、前記第３トランザクションと、前記第３トランザクションに登録された識別情報に対応する第４トランザクションとを関連付けることを特徴とする請求項１または２に記載の検出プログラム。
【請求項４】
前記検出する処理は、前記第３トランザクションに登録されたイベント情報と、前記第２テーブルとを基にして、前記第３トランザクションに登録されたイベント情報に対応する識別情報を有する第５トランザクションを特定し、前記第５トランザクションに登録された識別情報が、前記第３トランザクションを識別する識別情報である場合に、前記第３トランザクションと前記第５トランザクションとを関連付けることを特徴とする請求項３に記載の検出プログラム。
【請求項５】
前記検出する処理は、前記第３トランザクション、前記第４トランザクション、前記第５トランザクションの順に、関連付けを行うことを特徴とする請求項４に記載の検出プログラム。
【請求項６】
コンピュータが実行する検出方法であって、
第１イベントが発生した場合、前記第１イベントに対応する第１トランザクションを生成してブロックチェーンに登録し、
前記第１イベントに関する第１イベント情報と、前記第１トランザクションの識別情報とを対応付けて第１テーブルに登録し、
前記第１イベントより前に発生した第２イベントに関する第２イベント情報と、前記第１トランザクションの識別情報とを対応付けて第２テーブルに登録し、
前記第２イベント情報と、前記第１テーブルとを基にして、前記第２イベント情報に対応する第２イベントが発生した際に登録された第２トランザクションの識別情報を特定し、特定した識別情報と前記第２イベント情報とを前記第１トランザクションに登録し、
第３イベントのトレース要求を受け付けた場合に、前記ブロックチェーンに登録された複数のトランザクションと、前記第１テーブルと、前記第２テーブルとを基にして、前記第３イベントに関連するトランザクションを検出する
処理を実行することを特徴とする検出方法。
【請求項７】
第１イベントが発生した場合、前記第１イベントに対応する第１トランザクションを生成してブロックチェーンに登録し、前記第１イベントに関する第１イベント情報と、前記第１トランザクションの識別情報とを対応付けて第１テーブルに登録し、前記第１イベントより前に発生した第２イベントに関する第２イベント情報と、前記第１トランザクションの識別情報とを対応付けて第２テーブルに登録し、前記第２イベント情報と、前記第１テーブルとを基にして、前記第２イベント情報に対応する第２イベントが発生した際に登録された第２トランザクションの識別情報を特定し、特定した識別情報と前記第２イベント情報とを前記第１トランザクションに登録する登録部と、
第３イベントのトレース要求を受け付けた場合に、前記ブロックチェーンに登録された複数のトランザクションと、前記第１テーブルと、前記第２テーブルとを基にして、前記第３イベントに関連するトランザクションを検出する検出部と
を有することを特徴とする検出装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、検出プログラム等に関する。
【背景技術】
【０００２】
従来、ブロックチェーンを利用して、各種のサービスが行われている。ブロックチェーンは、ブロックと呼ばれるデータの単位を生成し、生成した順にブロックを連結していくことによりデータを保管するデータベースである。
【０００３】
ブロックチェーンを用いた契約に関する技術として、スマートコントラクトがある。スマートコントラクトに基づいて契約を行うと、契約を結んだユーザ同士の取引を自動化することができる。ユーザ同士の取引情報は、トランザクションとして、ブロックチェーンのブロックに登録される。このような用途にブロックチェーンを用いる場合、ブロックチェーンが改竄されていないことを保証する仕組みが求められる。
【０００４】
ブロックチェーンの改竄検知を目的として、所定のデータに対する参照要求を受け付けた場合、所定のデータに関するハッシュ値を算出し、算出したハッシュ値が、ブロックチェーンに記録されたダイジェストと一致するか否かを判定する従来技術がある。ハッシュ値と、ダイジェストとが一致している場合、ブロックチェーンが改竄されていないことを意味する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１７−２０７９７９号公報
【特許文献２】特開２０１７−２０４７０６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した従来技術では、ブロックチェーンに含まれる関連性のあるトランザクション同士をトレースすることができないという問題がある。
【０００７】
たとえば、従来技術では、ブロックチェーンの改竄を検知することは可能であるが、ユーザ同士のある取引に続いて、どのような取引が関連して行われたのかを検出することは難しい。なお、取引情報が生成される度に、関連する取引のトランザクションを対応付ける情報をそのまま登録していくと、ブロックチェーンのデータ量が肥大化する。
【０００８】
１つの側面では、本発明は、ブロックチェーンに含まれる関連性のあるトランザクション同士をトレースすることができる検出プログラム、検出方法および検出装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
第１の案では、コンピュータが次の処理を実行する。コンピュータは、第１イベントが発生した場合、第１イベントに対応する第１トランザクションを生成してブロックチェーンに登録する。コンピュータは、第１イベントに関する第１イベント情報と、第１トランザクションの識別情報とを対応付けて第１テーブルに登録する。コンピュータは、第１イベントより前に発生した第２イベントに関する第２イベント情報と、第１トランザクションの識別情報とを対応付けて第２テーブルに登録する。コンピュータは、第２イベント情報と、第１テーブルとを基にして、第２イベント情報に対応する第２イベントが発生した際に登録された第２トランザクションの識別情報を特定し、特定した識別情報と第２イベント情報とを第１トランザクションに登録する。コンピュータは、第３イベントのトレース要求を受け付けた場合に、ブロックチェーンに登録された複数のトランザクションと、第１テーブルと、第２テーブルとを基にして、第３イベントに関連するトランザクションを検出する。
【発明の効果】
【００１０】
ブロックチェーンに含まれる関連性のあるトランザクション同士をトレースすることができる。
【図面の簡単な説明】
【００１１】
【図１】図１は、登録処理を説明するための図（１）である。
【図２】図２は、登録処理を説明するための図（２）である。
【図３】図３は、登録処理を説明するための図（３）である。
【図４】図４は、トランザクションを上り方向にトレースする処理を説明する図である。
【図５】図５は、トランザクションを下り方向にトレースする処理を説明するための図（１）である。
【図６】図６は、トランザクションを下り方向にトレースする処理を説明するための図（２）である。
【図７】図７は、本実施例に係るシステムの構成を示す図である。
【図８】図８は、本実施例に係る検出装置の構成を示す機能ブロック図である。
【図９】図９は、ブロックチェーンのデータ構造の一例を示す図である。
【図１０】図１０は、参照先情報のデータ構造の一例を示す図である。
【図１１】図１１は、参照元情報のデータ構造の一例を示す図である。
【図１２】図１２は、本実施例に係る登録処理を示すフローチャートである。
【図１３】図１３は、本実施例に係る上り方向にトレースする検出処理を示すフローチャートである。
【図１４】図１４は、本実施例に係る下り方向にトレースする検出処理を示すフローチャートである。
【図１５】図１５は、本実施例に係る検出装置と同様の機能を実現するコンピュータのハードウェア構成の一例を示す図である。
【発明を実施するための形態】
【００１２】
以下に、本願の開示する検出プログラム、検出方法および検出装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例】
【００１３】
本実施例に係る検出装置は、たとえば、「登録処理」と、「検出処理」とを実行する。登録処理は、ユーザが取引を行った場合に、取引の情報をトランザクションとして、ブロックチェーンに登録する処理である。検出処理は、ユーザに指定されたトランザクションに関連するトランザクションを検出してトレースする処理である。
【００１４】
検出装置が実行する登録処理の一例について説明する。図１〜図３は、登録処理を説明するための図である。ここでは、各ユーザは、端末装置を操作して、検出装置にアクセスし、取引Ａ、取引Ｂ、取引Ｃを順に行うものとする。取引は「イベント」の一例である。
【００１５】
図１について説明する。ユーザ（Ｋｅｎ）が「取引Ａ」を行う場合において、画面１０Ａが端末装置に表示される。たとえば、取引Ａを、深層学習で利用する教師データを登録する取引とする。ユーザ（Ｋｅｎ）は、画面１０Ａを参照し、端末装置を操作して、ユーザＩＤ「US001」と、リソースＩＤ「data0001」を入力する。ユーザＩＤは、ユーザ（Ｋｅｎ）を一意に識別する情報である。リソースＩＤは、教師データを一意に識別する情報である。
【００１６】
検出装置は、ブロックチェーン１４０ａを有しており、ブロックチェーン１４０ａは、ワールドステート１４０ｂと分かれている。ブロックチェーン１４０ａには、ブロック（１）が含まれる。ブロック（１）には、直前ブロック（図示略）のハッシュ値と、トランザクションＴｘ１，Ｔｘ２が既に登録されているものとする。検出装置は、端末装置から取引Ａに関する情報の入力を受け付けると、トランザクションＴｘ３を生成する。検出装置は、ブロック（１）に登録するトランザクションが溜まった場合に、各トランザクションを、ブロック（１）に登録する。
【００１７】
トランザクションＴｘ３には、領域Ｔｘ３−ａと、領域Ｔｘ３−ｂとが含まれ、それぞれ分かれている。検出装置は、画面１０Ａで入力されたユーザＩＤ「US001」およびリソースＩＤ「data0001」を、領域Ｔｘ３−ａに登録する。検出装置は、「取引Ａ」が最初の取引であるため、元トランザクションＩＤ「ＮＵＬＬ」を、領域Ｔｘ３−ｂに登録する。検出装置は、画面１０Ａで入力されたユーザＩＤ「US001」およびリソースＩＤ「data0001」を組み合わせたキー「US001+data0001」を、領域Ｔｘ３−ｂに登録する。なお、検出装置は、元データが「無」である場合に、元トランザクションＩＤを「ＮＵＬＬ」に設定してもよい。このキー「US001+data0001」は、取引の対象と取引を行ったユーザとを識別可能な取引の情報といえる。以下に説明する、他のユーザＩＤと、他のリソースＩＤとを組み合わせたキーも、取引の対象と取引を行ったユーザとを識別可能な取引の情報である。
【００１８】
検出装置は、ワールドステート１４０ｂを有しており、ワールドステート１４０ｂには、参照先情報１４１と、参照元情報１４２とを有する。参照先情報１４１は、取引の情報と、取引の情報が記録されたトランザクションとを対応付ける情報である。たとえば、取引Ａの情報は、画面１０Ａで入力されたユーザＩＤ「US001」およびリソースＩＤ「data0001」を組み合わせた情報「US001+data0001」となる。取引Ａの情報は、トランザクションＴｘ３としてブロックチェーン１４０ａに登録されたため、検出装置は、参照先情報１４１に「US001+data0001」と「Ｔｘ３」とを対応付けたレコードを登録する。
【００１９】
参照元情報１４２は、ある取引を行う場合に参照した、参照元の取引の情報と、現在の取引の情報が記録されたトランザクションとを対応付ける情報である。取引Ａについては、参照元の取引の情報がないため、参照元情報１４２には、何も登録されない。
【００２０】
図２の説明に移行する。たとえば、検出装置は、ブロックチェーン１４０ａにおいて、ブロック（１）にブロック（２）を接続し、ブロック（１）のハッシュ値を、ブロック（２）に登録する。また、トランザクションＴｘ４がブロック（２）に登録されているものとする。ブロック（１）のハッシュ値を、ブロック（２）に登録することで、ブロック（１）のトランザクションＴｘ１〜Ｔｘ３の改竄を抑止する。
【００２１】
ユーザ（Ｍｉｋｅ）が「取引Ｂ」を行う場合において、画面１０Ｂが端末装置に表示される。たとえば、取引Ｂを、取引Ａで登録された教師データを購入する取引とする。ユーザ（Ｍｉｋｅ）は、画面１０Ｂを参照し、端末装置を操作して、ユーザＩＤ「US002」と、リソースＩＤ「data0001」を入力する。
【００２２】
また、ユーザ（Ｍｉｋｅ）は、購入対象となる元データの情報を、画面１０Ｂに入力する。元データの情報には、元データに対応するユーザを一意に識別する元ユーザＩＤと、元データを一意に識別する元リソースＩＤとが含まれる。ユーザ（Ｍｉｋｅ）は、取引Ａで登録された教師データを購入する場合、元ユーザＩＤ「US001」および元リソースＩＤ「data0001」を、画面１０Ｂに入力する。
【００２３】
検出装置は、端末装置から取引Ｂに関する情報の入力を受け付けると、トランザクションＴｘ５を生成して、ブロック（２）に登録する。トランザクションＴｘ５には、領域Ｔｘ５−ａと、領域Ｔｘ５−ｂとが含まれる。検出装置は、画面１０Ｂで入力されたユーザＩＤ「US002」およびリソースＩＤ「data0001」を、領域Ｔｘ５−ａに登録する。また、検出装置は、画面１０Ｂで入力された元ユーザＩＤ「US001」および元リソースＩＤ「data0001」を、領域Ｔｘ５−ａに登録する。
【００２４】
検出装置は、画面１０Ｂの元ユーザＩＤ「US001」と、元リソースＩＤ「data0001」とを組み合わせたキー「US001+data0001」を生成し、生成したキーによって、参照先情報１４１を検索し、トランザクションＩＤ「Ｔｘ３」を検出する。検出装置は、検出したトランザクションＩＤ「Ｔｘ３」を、領域Ｔｘ５−ｂの元トランザクションＩＤに登録する。また、検出装置は、画面１０ＢのユーザＩＤ「US002」およびリソースＩＤ「data0001」を組み合わせたキー「US002+data0001」を、領域Ｔｘ５−ｂに登録する。
【００２５】
検出装置は、取引Ｂの情報を、取引Ｂの情報が記録されたトランザクションと対応付けて、参照先情報１４１に登録する。取引Ｂの情報は、画面１０Ｂで入力されたユーザＩＤ「US002」およびリソースＩＤ「data0001」を組み合わせた情報「US002+data0001」である。取引Ｂの情報は、トランザクションＴｘ５としてブロックチェーン１４０ａに登録されたため、検出装置は、参照先情報１４１に「US002+data0001」と「Ｔｘ５」とを対応付けたレコードを登録する。
【００２６】
取引Ｂは、取引Ａの情報を参照元とする取引である。取引Ａの情報は「US001+data0001」であり、現在の取引Ｂの情報が記録されたトランザクションＩＤは「Ｔｘ５」である。たとえば、検出装置は、参照元の取引（取引Ａ）の情報として、画面１０Ｂに入力された元ユーザＩＤ、元リソースＩＤを利用する。検出装置は、参照元の取引Ａの情報「US001+data0001」と、トランザクションＩＤ「Ｔｘ５」とを対応付けて参照元情報１４２に登録する。
【００２７】
なお、説明を省略するが、検出装置は、ブロックチェーン１４０ａにトランザクションＴｘ５を登録した後に、他の取引情報によって、トランザクションＴｘ６、Ｔｘ７が溜まった場合に、ブロックチェーン１４０ａにブロック（２）を登録する。
【００２８】
図３の説明に移行する。たとえば、検出装置は、ブロックチェーン１４０ａにおいて、ブロック（２）にブロック（３）を接続し、ブロック（２）のハッシュ値を、ブロック（３）に登録する。ブロック（２）のハッシュ値を、ブロック（３）に登録することで、ブロック（２）のトランザクションＴｘ４〜Ｔｘ７の改竄を抑止する。
【００２９】
ユーザ（Ｍｉｋｅ）が「取引Ｃ」を行う場合において、画面１０Ｃが端末装置に表示される。たとえば、取引Ｃを、取引Ｂで購入した教師データを用いて、学習モデルを生成する取引とする。ユーザ（Ｍｉｋｅ）は、画面１０Ｃを参照し、端末装置を操作して、ユーザＩＤ「US002」と、リソースＩＤ「mdl0001」を入力する。リソースＩＤ「mdl0001」は、学習モデルを一意に識別する情報である。
【００３０】
また、ユーザ（Ｍｉｋｅ）は、学習モデルの学習で利用した元データの情報を、画面１０Ｃに入力する。ユーザ（Ｍｉｋｅ）は、取引Ｂで購入した教師データを利用する場合、端末装置を操作して、元ユーザＩＤ「US002」および元リソースＩＤ「data0001」を、画面１０Ｃに入力する。
【００３１】
検出装置は、端末装置から取引Ｃに関する情報の入力を受け付けると、トランザクションＴｘ９を生成して、ブロック（３）に登録する。トランザクションＴｘ９には、領域Ｔｘ９−ａと、領域Ｔｘ９−ｂとが含まれる。検出装置は、画面１０Ｃで入力されたユーザＩＤ「US002」およびリソースＩＤ「mdl0001」を、領域Ｔｘ９−ａに登録する。検出装置は、画面１０Ｃで入力された元ユーザＩＤ「US001」および元リソースＩＤ「data0001」を、領域Ｔｘ９−ａに登録する。
【００３２】
検出装置は、画面１０Ｃの元ユーザＩＤ「US002」と、元リソースＩＤ「data0001」とを組み合わせたキー「US002+data0001」を生成し、生成したキーによって、参照先情報１４１を検索し、トランザクションＩＤ「Ｔｘ５」を検出する。検出装置は、検出したトランザクションＩＤ「Ｔｘ５」を、領域Ｔｘ９−ｂの元トランザクションＩＤに登録する。また、検出装置は、画面１０ＣのユーザＩＤ「US002」およびリソースＩＤ「mdl0001」を組み合わせたキー「US002+mdl0001」を、領域Ｔｘ９−ｂに登録する。
【００３３】
検出装置は、取引Ｃの情報を、取引Ｃの情報が記録されたトランザクションと対応付けて、参照先情報１４１に登録する。取引Ｃの情報は、画面１０Ｃで入力されたユーザＩＤ「US002」およびリソースＩＤ「mdl0001」を組み合わせた情報「US002+mdl0001」である。取引Ｃの情報は、トランザクションＴｘ９としてブロックチェーン１４０ａに登録されたため、検出装置は、参照先情報１４１に「US002+mdl0001」と「Ｔｘ９」とを対応付けたレコードを登録する。
【００３４】
取引Ｃは、取引Ｂの情報を参照元とする取引である。取引Ｂの情報は「US002+data0001」であり、現在の取引Ｃの情報が記録されたトランザクションＩＤは「Ｔｘ９」である。たとえば、検出装置は、参照元の取引（取引Ｂ）の情報として、画面１０Ｃに入力された元ユーザＩＤおよび元リソースＩＤを利用する。検出装置は、参照元の取引Ｂの情報「US001+data0001」と、トランザクションＩＤ「Ｔｘ９」とを対応付けて参照元情報１４２に登録する。
【００３５】
なお、説明を省略するが、検出装置は、ブロックチェーン１４０ａにトランザクションＴｘ９を登録した後に、他の取引情報によって、トランザクションＴｘ１０が溜まった場合に、ブロックチェーン１４０ａにブロック（３）を登録する。また、検出装置は、ブロック（３）のハッシュ値を算出し、算出したハッシュ値を後続のブロックに登録することで、トランザクションＴｘ８〜Ｔｘ１０の改竄を抑止する。
【００３６】
次に、検出装置が実行する検出処理の一例について説明する。図４では、トランザクションを上り方向にトレースする処理を説明する図である。図５、図６は、トランザクションを下り方向にトレースする処理を説明するための図である。
【００３７】
図４について説明する。たとえば、ユーザは、端末装置を操作して、検索キーとなるユーザＩＤ「US002」およびリソースＩＤ「mdl0001」を入力し、トレース要求を行う。検出装置は、端末装置から、トレース要求を受け付けると、検索キー「US002+mdl0001」と、参照先情報１４１とを比較して、トランザクションＩＤ「Ｔｘ９」を検出する。
【００３８】
検出装置は、ブロックチェーン１４０ａに含まれるトランザクションＴｘ９の領域Ｔｘ９−ｂを参照する。検出装置は、参照先情報１４１に記録されたキー「US002+mdl0001」と、領域Ｔｘ９−ｂのキーとが一致するか否かを判定する。検出装置は、参照先情報１４１に記録されたキー「US002+mdl0001」と、領域Ｔｘ９−ｂのキーとが一致しない場合には、参照先情報１４１が改竄していると判定し、トレース処理を終了する。
【００３９】
検出装置は、参照先情報１４１に記録されたキー「US002+mdl0001」と、領域Ｔｘ９−ｂのキーとが一致する場合には、トレース処理を継続する。検出装置は、領域Ｔｘ９−ｂの元トランザクションＩＤ「Ｔｘ５」を基にして、トランザクションＴｘ５を特定する。検出装置は、トランザクションＴｘ５の領域Ｔｘ５−ｂを参照し、元トランザクションＩＤ「Ｔｘ３」を基にして、トランザクションＴｘ３を特定する。検出装置は、トランザクションＴｘ３の領域Ｔｘ３−ｂの元トランザクションＩＤが「ＮＵＬＬ」であるため、トレース処理を終了する。
【００４０】
検出装置は、上記処理を実行することで、トランザクションＴｘ９を起点とした上り方向のトランザクションのつながりを検出することができる。検出装置は、上り方向のトランザクションのトレース結果を、端末装置に送信する。上り方向のトランザクションのトレース結果は、トランザクションＴｘ９、Ｔｘ５、Ｔｘ３となる。
【００４１】
図５について説明する。たとえば、ユーザは、端末装置を操作して、検索キーとなるユーザＩＤ「US0001」およびリソースＩＤ「data0001」を入力し、トレース要求を行う。検出装置は、端末装置から、トレース要求を受け付けると、検索キー「US001+data0001」と、参照先情報１４１とを比較して、トランザクションＩＤ「Ｔｘ３」を特定する（ステップＳ１０）。
【００４２】
一方、検出装置は、検索キー「US001+data0001」と、参照元情報１４２とを比較して、トランザクションＩＤ「Ｔｘ５」を特定する（ステップＳ１１）。
【００４３】
検出装置は、ステップＳ１１で特定したトランザクションＴｘ５の領域Ｔｘ５−ｂの元トランザクションＩＤ「Ｔｘ３」と、ステップＳ１０で特定したトランザクションＩＤとを比較して、一致するか否かを判定する。検出装置は、領域Ｔｘ５−ｂの元トランザクションＩＤと、ステップＳ１０で特定したトランザクションとが一致しない場合には、参照先情報１４１または参照元情報１４２が改竄されていると判定し、トレース処理を終了する。
【００４４】
検出装置は、領域Ｔｘ５−ｂの元トランザクションＩＤ「Ｔｘ３」と、ステップＳ１０で特定したトランザクションＩＤとが一致する場合には、トランザクションＴｘ３から、トランザクションＴｘ５への関連を特定する。
【００４５】
続いて、図６について説明する。検出装置は、トランザクションＴｘ３からトランザクションＴｘ５への関連を特定すると、トランザクションＴｘ５の領域Ｔｘ５−ｂを参照する（ステップＳ２０）。検出装置は、領域Ｔｘ５−ｂのキー「US002+data0001」と、参照元情報１４２とを比較して、トランザクションＩＤ「Ｔｘ９」を特定する（ステップＳ２１）。
【００４６】
検出装置は、ステップＳ２１で特定したトランザクションＴｘ９の領域Ｔｘ９−ｂの元トランザクションＩＤ「Ｔｘ５」と、ステップＳ２０で参照したトランザクションのＩＤとを比較して、一致するか否かを判定する（ステップＳ２２）。検出装置は、ステップＳ２１で特定したトランザクションＴｘ９の領域Ｔｘ９−ｂの元トランザクションＩＤ「Ｔｘ５」と、ステップＳ２０で参照したトランザクションのＩＤとが一致しない場合には、参照元情報１４２が改竄されていると判定し、トレース処理を終了する。
【００４７】
検出装置は、ステップＳ２１で特定したトランザクションＴｘ９の領域Ｔｘ９−ｂの元トランザクションＩＤ「Ｔｘ５」と、ステップＳ２０で参照したトランザクションのＩＤとが一致する場合には、トランザクションＴｘ５から、トランザクションＴｘ９への関連を特定する。
【００４８】
検出装置は、上記処理を実行することで、トランザクションＴｘ３を起点とした下り方向のトランザクションのつながりを検出することができる。検出装置は、下り方向のトランザクションのトレース結果を、端末装置に送信する。下り方向のトランザクションのトレース結果は、トランザクションＴｘ３、Ｔｘ５、Ｔｘ９となる。
【００４９】
上記のように、本実施例に係る検出装置は、取引が発生する度に、取引の情報、取引時に参照した以前の取引の情報、以前の取引で生成したトランザクションの情報をブロックチェーン１４０ａ、ワールドステート１４０ｂにそれぞれ登録する。検出装置は、トレースを行う場合に、ブロックチェーン１４０ａ、ワールドステート１４０ｂに登録した情報を用いて、関連性のあるトランザクションを検出する。これによって、ブロックチェーンに含まれる関連性のあるトランザクション同士をトレースすることができる。
【００５０】
次に、図１〜図６で説明した端末装置および検出装置を含むシステムの一例について説明する。図７は、本実施例に係るシステムの構成を示す図である。図７に示すように、このシステムは、端末装置２０ａ，２０ｂ，２０ｃと、検出装置１００ａ，１００ｂ，１００ｃ，１００ｄを有する。検出装置１００ａ〜１００ｄは、それぞれ相互に接続される。端末装置２０ａ〜２０ｃと、検出装置１００ａ〜１００ｄは、ネットワーク５０を介して接続される。以下の説明では、特に区別する場合を除いて、端末装置２０ａ〜２０ｃをまとめて、端末装置２０と表記する。検出装置１００ａ〜１００ｄをまとめて、検出装置１００と表記する。
【００５１】
端末装置２０は、各取引を行うユーザが使用する端末装置である。たとえば、端末装置２０は、ユーザの操作により、取引が発生した旨の情報を受け付けると、図１〜図３に示した画面１０Ａ〜１０Ｃ等を表示する。ユーザは、端末装置２０を操作して、ユーザＩＤ、リソースＩＤ、元ユーザＩＤ、元リソースＩＤ等を入力する。端末装置２０は、ユーザから入力された情報を、検出装置１００に送信する。ユーザＩＤとリソースＩＤとの組、元ユーザＩＤと元リソースＩＤとの組は、それぞれイベント情報に対応する。
【００５２】
また、ユーザは、トランザクションのトレースを行う場合には、端末装置２０を操作して、トレース要求に関する各種の情報を入力する。端末装置２０は、トレース要求の情報を、検出装置１００に送信する。トレース要求の情報には、検索キーとなるユーザＩＤと、リソースＩＤとが含まれる。また、トレース要求の情報には、上りのトレースを行うのか、下りのトレースを行うのかを示す情報が含まれる。
【００５３】
検出装置１００は、取引が発生する度に、取引の情報、取引時に参照した以前の取引の情報、以前の取引で生成したトランザクションの情報をブロックチェーン１４０ａ、ワールドステート１４０ｂにそれぞれ登録する。検出装置１００は、トレース要求の情報を受信した場合、ブロックチェーン１４０ａ、ワールドステート１４０ｂに登録した情報を用いて、関連性のあるトランザクションを検出する。
【００５４】
続いて、本実施例に係る検出装置１００の構成の一例について説明する。ここでは一例として、検出装置１００ａの構成について説明するが、検出装置１００ｂ〜１００ｄの構成は、検出装置１００ａと同様である。
【００５５】
図８は、本実施例に係る検出装置の構成を示す機能ブロック図である。図８に示すように、この検出装置１００ａは、通信部１１０と、記憶部１４０と、制御部１５０とを有する。図示を省略するが、検出装置１００は、各種の情報を入力する入力装置、各種の情報を表示する表示装置に接続されていてもよい。
【００５６】
通信部１１０は、ネットワーク５０を介して、端末装置２０とデータ通信を実行する処理部である。後述する制御部１５０は、通信部１１０を介して、端末装置２０とデータをやり取りする。通信部１１０は、通信装置に対応する。
【００５７】
記憶部１４０は、ブロックチェーン１４０ａと、ワールドステート１４０ｂとを有する。記憶部１４０は、ＲＡＭ（Random  Access  Memory）、フラッシュメモリ（Flash  Memory）などの半導体メモリ素子や、ＨＤＤ（Hard  Disk  Drive）などの記憶装置に対応する。
【００５８】
ブロックチェーン１４０ａは、複数のブロックが連結したデータベースである。図９は、ブロックチェーンのデータ構造の一例を示す図である。図９に示すように、ブロックチェーン１４０ａは、ブロックＩＤと、ブロック情報とを対応付ける。ブロックＩＤは、ブロックを一意に識別する情報である。ブロック情報は、ブロックＩＤに識別されるブロックの情報である。
【００５９】
ブロックチェーン１４０ａの各ブロック情報には、ハッシュ値、トランザクションＩＤ、トランザクション情報が含まれる。ハッシュ値は、直前のブロック情報のハッシュ値である。トランザクションＩＤは、トランザクションを一意に識別する情報である。トランザクション情報は、トランザクションＩＤに識別されるトランザクションの情報である。
【００６０】
ブロックチェーン１４０ａの各トランザクション情報には、ユーザＩＤ、リソースＩＤ、元トランザクションＩＤ、キーが含まれる。ユーザＩＤ、リソースＩＤは、取引が発生した場合に、端末装置の画面に入力される情報である。元トランザクションＩＤは、上り方向のトランザクションを一意に識別する情報である。キーは、ユーザＩＤと、リソースＩＤとを組み合わせた情報である。このキーは、取引の対象と取引を行ったユーザとを識別可能な取引の情報といえる。
【００６１】
ワールドステート１４０ｂは、参照先情報１４１と、参照元情報１４２とを有する。参照先情報１４１は、「第１テーブル」に対応し、参照元情報１４２は、「第２テーブル」に対応する。図１０は、参照先情報のデータ構造の一例を示す図である。図１０に示すように、この参照先情報１４１は、参照先キーと、トランザクションＩＤとを対応付ける。参照先キーは、取引が発生した際に画面に入力されるユーザＩＤと、リソースＩＤとを組み合わせた情報である。トランザクションＩＤは、取引に対応するトランザクションを一意に識別する情報である。
【００６２】
図１１は、参照元情報のデータ構造の一例を示す図である。図１１に示すように、この参照元情報１４２は、参照元キーと、トランザクションＩＤとを対応付ける。参照元キーは、ある参照元の取引を参照した取引が発生した際に画面に入力される元ユーザＩＤと、元リソースＩＤとを組み合わせた情報である。トランザクションＩＤは、取引に対応するトランザクションを一意に識別する情報である。
【００６３】
図８の説明に移行する。制御部１５０は、登録部１５０ａ、検出部１５０ｂ、同期部１５０ｃを有する。制御部１５０は、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）などによって実現できる。また、制御部１５０は、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）などのハードワイヤードロジックによっても実現できる。
【００６４】
登録部１５０ａは、図１〜図３で説明した登録処理を実行する処理部である。まず、最初の取引が発生した場合の、登録部１５０ａの処理について説明する。登録部１５０ａは、最初の取引が発生した場合、端末装置２０の画面に入力されたユーザＩＤと、リソースＩＤとを取得し、トランザクションを生成する。登録部１５０ａは、生成したトランザクションのトランザクションＩＤと、トランザクション情報を、ブロックチェーン１４０ａのブロック情報に登録する。登録部１５０ａは、トランザクション情報として、ユーザＩＤ、リソースＩＤ、元トランザクション「ＮＵＬＬ」、ユーザＩＤおよびリソースＩＤを組み合わせたキーを登録する。
【００６５】
また、登録部１５０ａは、ユーザＩＤと、リソースＩＤとを組み合わせたキー（参照先キー）と、生成したトランザクションＩＤとを、参照先情報１４１に登録する。
【００６６】
たとえば、図１で説明したように、登録部１５０ａは、画面１０Ａに入力されたユーザＩＤ「US001」と、リソースＩＤ「data0001」とを取得すると、トランザクションＴｘ３を生成する。登録部１５０ａは、トランザクションＴｘ３の情報として、ユーザＩＤ「US001」と、リソースＩＤ「data0001」と、元トランザクション「ＮＵＬＬ」、キー「US001+data0001」を登録する。このキー「US001+data0001」は、取引の対象「data0001」と取引を行ったユーザ「US001」とを識別可能な取引の情報といえる。
【００６７】
登録部１５０ａは、参照先キー「US001+data0001」と、トランザクションＩＤ「Ｔｘ３」とを対応付けて、参照先情報１４１に登録する。
【００６８】
続いて、先の取引を参照する取引が発生した場合の、登録部１５０ａの処理について説明する。登録部１５０ａは、端末装置２０の画面に入力されたユーザＩＤと、リソースＩＤと、元ユーザＩＤと、元リソースＩＤとを取得し、トランザクションを生成する。登録部１５０ａは、生成したトランザクションのトランザクションＩＤと、トランザクション情報を、ブロックチェーン１４０ａのブロック情報に登録する。登録部１５０ａは、トランザクション情報として、ユーザＩＤと、リソースＩＤと、ユーザＩＤおよびリソースＩＤを組み合わせたキーとを登録する。
【００６９】
登録部１５０ａは、ユーザＩＤと、リソースＩＤとを組み合わせたキー（参照先キー）と、生成したトランザクションＩＤとを、参照先情報１４１に登録する。また、登録部１５０ａは、元ユーザＩＤと、元リソースＩＤとを組み合わせたキー（参照元キー）と、生成したトランザクションＩＤとを、参照元情報１４２に登録する。
【００７０】
登録部１５０ａは、元ユーザＩＤと、元リソースＩＤとを組み合わせたキーと、参照先情報１４１とを基にして、トランザクションＩＤを特定し、特定したトランザクションＩＤを、元トランザクションＩＤとして、トランザクション情報に登録する。
【００７１】
たとえば、図２で説明したように、登録部１５０ａは、画面１０Ｂに入力されたユーザＩＤ「US002」と、リソースＩＤ「data0001」と、元ユーザＩＤ「US001」と、元リソースＩＤ「data0001」とを取得すると、トランザクションＴｘ５を生成する。登録部１５０ａは、トランザクションＴｘ５の情報として、ユーザＩＤ「US002」と、リソースＩＤ「data0001」と、キー「US002+data0001」を登録する。
【００７２】
登録部１５０ａは、ユーザＩＤ「US002」と、リソースＩＤ「data0001」とを組み合わせた参照先キー「US002+data0001」と、トランザクションＩＤ「Ｔｘ５」とを対応付けて、参照先情報１４１に登録する。登録部１５０ａは、元ユーザＩＤ「US001」と、元リソースＩＤ「data0001」とを組み合わせた参照元キー「US001+data0001」と、トランザクションＩＤ「Ｔｘ５」とを対応付けて、参照元情報１４２に登録する。
【００７３】
登録部１５０ａは、元ユーザＩＤ「US001」と、元リソースＩＤ「data0001」とを組み合わせたキー「US001+data0001」と、参照先情報１４１とを比較して、トランザクションＩＤ「Ｔｘ３」を特定する。登録部１５０ａは、特定したトランザクションＩＤ「Ｔｘ３」を、元トランザクションＩＤとして、トランザクションＴｘ５に登録する。
【００７４】
登録部１５０ａは、新たな取引が発生する度に、画面に入力された情報を基にして、上記の処理を繰り返し実行する。
【００７５】
ところで、登録部１５０ａは、一定時間毎に、ブロック情報を生成し、ブロックチェーン１４０ａに登録する。登録部１５０ａは、直前のブロック情報のハッシュ値を算出し、算出したハッシュ値を、生成したブロック情報に登録する。
【００７６】
検出部１５０ｂは、図４〜図７で説明した検出処理を実行する処理部である。まず、検出部１５０ｂが、上り方向にトランザクションをトレースする処理について説明する。検出部１５０ｂは、端末装置２０から、トレース要求の情報を取得し、トレース要求の情報に含まれる検索キーと、参照先情報１４１とを基にして、検索キーに対応するトランザクションＩＤを特定する。
【００７７】
検出部１５０ｂは、特定したトランザクションＩＤのトランザクション（現在のトランザクション）に登録されたキーと、検索キーとが一致するか否かを判定する。検出部１５０ｂは、トランザクションに登録されたキーと、検索キーとが一致しない場合には、現在のトランザクションが改竄されていると判定し、トランザクションが改竄されている旨の情報を、端末装置２０に送信する。
【００７８】
一方、検出部１５０ｂは、現在のトランザクションに登録されたキーと、検索キーとが一致する場合、トランザクションが改竄されていないと判定する。検出部１５０ｂは、トランザクションが改竄されていない場合には、現在のトランザクションに登録された元トランザクションＩＤに対応するトランザクションと、現在のトランザクションとを関連付ける。また、検出部１５０ｂは、元トランザクションＩＤのトランザクションを特定し、更に、特定したトランザクションに登録された元トランザクションＩＤのトランザクションを辿る処理を繰り返し実行することで、各トランザクションを関連付ける。
【００７９】
たとえば、図４で説明したように、検出部１５０ｂは、検索キー「US002+mdl001」を受け付けると、検索キーと、参照先情報１４１とを比較して、トランザクションＩＤ「Ｔｘ９」を特定する。検出部１５０ｂは、トランザクションＴｘ９のキー「US002+mdl001」と、検索キー「US002+mdl001」とが一致するため、トランザクションＴｘ９が改竄されていないと判定する。検出部１５０ｂは、トランザクションＴｘ９の元トランザクションＩＤ「Ｔｘ５」を基にして、トランザクションＴｘ９とトランザクションＴｘ５とを関連付ける。検出部１５０ｂは、トランザクションＴｘも元トランザクションＩＤ「Ｔｘ３」を基にして、トランザクションＴｘ５と、トランザクションＴｘ３とを関連付ける。
【００８０】
検出部１５０ｂは、上記処理を実行することで、トランザクションＴｘ９を起点とした上り方向のトランザクションのつながりを検出することができる。検出部１５０ｂは、上り方向のトランザクションのトレース結果を、端末装置に送信する。上り方向のトランザクションのトレース結果は、トランザクションＴｘ９、Ｔｘ５、Ｔｘ３となる。
【００８１】
次に、検出部１５０ｂが、下り方向にトランザクションをトレースする処理について説明する。検出部１５０ｂは、端末装置２０から、トレース要求の情報を取得し、トレース要求の情報に含まれる検索キーと、参照先情報１４１とを基にして、検索キーに対応するトランザクションＩＤ（参照先ＩＤ）を特定する。
【００８２】
検出部１５０ｂは、検索キーと、参照元情報１４２とを基にして、検索キーに対応するトランザクションＩＤ（参照元ＩＤ）を特定し、参照元ＩＤのトランザクション（現在のトランザクション）に登録された元トランザクションＩＤを特定する。検出部１５０ｂは、参照先ＩＤと、元トランザクションＩＤとが一致するか否かを判定する。
【００８３】
検出部１５０ｂは、参照先ＩＤと、元トランザクションＩＤとが一致しない場合には、現在のトランザクションが改竄されていると判定し、トランザクションが改竄されている旨の情報を、端末装置２０に送信する。
【００８４】
一方、検出部１５０ｂは、参照先ＩＤと、元トランザクションＩＤとが一致する場合には、現在のトランザクションが改竄されていないと判定する。検出部１５０ｂは、参照元ＩＤのトランザクションと、参照先ＩＤのトランザクションとを関連付ける。
【００８５】
たとえば、図５で説明したように、検出部１５０ｂは、検索キー「US001+data0001」を受け付けると、検索キーと、参照先情報１４１とを比較して、参照先ＩＤ「Ｔｘ３」を特定する。検出部１５０ｂは、検索キーと、参照元情報１４２とを比較して、参照元ＩＤ「Ｔｘ５」を特定する。検出部１５０ｂは、参照元ＩＤ「Ｔｘ５」のトランザクションＴｘ５の元トランザクションＩＤ「Ｔｘ３」が、参照先ＩＤ「Ｔｘ３」と一致するため、トランザクションＴｘ５が改竄されていないと判定する。検出部１５０ｂは、参照元ＩＤ「Ｔｘ５」のトランザクションと、参照先ＩＤ「Ｔｘ３」のトランザクションとを関連付ける。
【００８６】
続いて、検出部１５０ｂは、参照元ＩＤのトランザクションに登録されたキーと、参照元情報１４２とを基にして、トランザクションＩＤ（次の参照元ＩＤ）を特定する。検出部１５０ｂは、参照元ＩＤのトランザクションに格納されたトランザクションＩＤが、一つ前の参照元ＩＤと一致するか否かを判定する。検出部１５０ｂは、参照元ＩＤのトランザクションに格納されたトランザクションＩＤが、一つ前の参照元ＩＤと一致しない場合には、参照元ＩＤのトランザクションが改竄されていると判定し、トランザクションが改竄されている旨の情報を、端末装置２０に送信する。
【００８７】
一方、検出部１５０ｂは、参照元ＩＤのトランザクションに格納されたトランザクションＩＤが、一つ前の参照元ＩＤと一致する場合には、トランザクションが改竄されていないと判定する。検出部１５０ｂは、参照元ＩＤのトランザクションと、一つ前の参照元ＩＤのトランザクションとを関連付ける。検出部１５０ｂは、上記の処理を繰り返し実行する。
【００８８】
たとえば、図６で説明したように、検出部１５０ｂは、トランザクションＴｘ５の元トランザクションＩＤ「Ｔｘ３」と、参照元情報１４２とを基にして、次の参照元ＩＤ「Ｔｘ９」を特定する。検出部１５０ｂは、参照元ＩＤ「Ｔｘ９」のトランザクションＴｘの元トランザクションＩＤ「Ｔｘ」が、一つ前の参照元ＩＤ「Ｔｘ５」と一致しているため、トランザクションＴｘ９が改竄されていないと判定する。検出部１５０ｂは、トランザクションＴｘ５と、トランザクションＴｘ９とを関連付ける。
【００８９】
検出部１５０ｂは、上記処理を実行することで、トランザクションＴｘ３を起点とした下り方向のトランザクションのつながりを検出することができる。検出部１５０ｂは、下り方向のトランザクションのトレース結果を、端末装置２０に送信する。下り方向のトランザクションのトレース結果は、トランザクションＴｘ３、Ｔｘ５、Ｔｘ９となる。
【００９０】
同期部１５０ｃは、検出装置１００ａに接続された検出装置１００ｂ〜１００ｄとの間で、記憶部１４０に登録されたブロックチェーン１４０ａ、ワールドステート１４０ｂの同期処理を実行する処理部である。同期部１５０ｃは、定期的に同期処理を実行してもよいし、ブロックチェーン１４０ａが更新された際に、同期処理を行ってもよい。
【００９１】
次に、本実施例に係る検出装置１００の処理手順の一例について説明する。図１２は、本実施例に係る登録処理を示すフローチャートである。検出装置１００は、トランザクションごとに図１２に示す処理を行う。Ｎ個の取引を関連付ける場合、登録処理をＮ回実行する。図１２に示すように、検出装置１００の登録部１５０ａは、次の取引が発生した場合に、端末装置２０の画面に入力されたユーザＩＤとリソースＩＤとの組、元ユーザＩＤと元リソースＩＤとの組を取得する（ステップＳ１０１）。登録部１５０ａは、トランザクションを生成し、トランザクションにキー（ユーザＩＤ＋リソースＩＤ）を登録する（ステップＳ１０２）。
【００９２】
登録部１５０ａは、キー（ユーザＩＤ＋リソースＩＤ）と参照先情報１４１とを基にして、元トランザクションＩＤを特定し、トランザクションに登録する（ステップＳ１０３）。登録部１５０ａは、参照元情報１４２に、キー（元ユーザＩＤ＋元リソースＩＤ）とトランザクションＩＤとを対応付けて登録する（ステップＳ１０４）。
【００９３】
図１３は、本実施例に係る上り方向にトレースする検出処理を示すフローチャートである。図１３に示すように、検出装置１００の検出部１５０ｂは、端末装置２０から、上りのトレース要求を受け付ける（ステップＳ２０１）。検出部１５０ｂは、検索キーと、参照先情報１４１とを基にして、トランザクションＩＤを特定する（ステップＳ２０２）。
【００９４】
検出部１５０ｂは、トランザクションＩＤに対応するトランザクションに登録されたキーと、検索キーとが一致するか否かを判定する（ステップＳ２０３）。検出部１５０ｂは、キーと検索キーとが一致しない場合には（ステップＳ２０４，Ｎｏ）、トランザクションが改竄されていると判定し（ステップＳ２０５）、ステップＳ２１１に移行する。
【００９５】
一方、検出部１５０ｂは、キーと検索キーとが一致する場合には（ステップＳ２０４，Ｙｅｓ）、ステップＳ２０６に移行する。検出部１５０ｂは、現在のトランザクションの元トランザクションＩＤを特定する（ステップＳ２０６）。検出部１５０ｂは、現在のトランザクションと、元トランザクションＩＤのトランザクションとを関連付ける（ステップＳ２０７）。
【００９６】
検出部１５０ｂは、元トランザクションＩＤのトランザクションを現在のトランザクションに設定する（ステップＳ２０８）。検出部１５０ｂは、現在のトランザクションの元トランザクションＩＤが「ＮＵＬＬ」か否かを判定する（ステップＳ２０９）。検出部１５０ｂは、元トランザクションＩＤが「ＮＵＬＬ」でない場合には（ステップＳ２１０，Ｎｏ）、ステップＳ２０６に移行する。
【００９７】
検出部１５０ｂは、元トランザクションＩＤが「ＮＵＬＬ」である場合には（ステップＳ２１０，Ｙｅｓ）、検出結果を端末装置２０に出力する（ステップＳ２１１）。
【００９８】
図１４は、本実施例に係る下り方向にトレースする検出処理を示すフローチャートである。図１４に示すように、検出装置１００の検出部１５０ｂは、端末装置２０から、下りのトレース要求を受け付ける（ステップＳ３０１）。検出部１５０ｂは、検索キーと、参照先情報１４１とを基にして、トランザクションＩＤ（参照先ＩＤ）を特定する（ステップＳ３０２）。
【００９９】
検出部１５０ｂは、検索キーと、参照元情報１４２とを基にして、トランザクションＩＤ（参照元ＩＤ）を特定する（ステップＳ３０３）。検出部１５０ｂは、参照元ＩＤに対応するトランザクションに登録された元トランザクションＩＤと、参照先ＩＤとが一致するか否かを判定する（ステップＳ３０４）。検出部１５０ｂは、元トランザクションＩＤと、参照先ＩＤとが一致しない場合には（ステップＳ３０５，Ｎｏ）、トランザクションが改竄されていると判定する（ステップＳ３０６）。
【０１００】
一方、検出部１５０ｂは、元トランザクションＩＤと、参照先ＩＤとが一致する場合には（ステップＳ３０５，Ｙｅｓ）、ステップＳ３０７に移行する。検出部１５０ｂは、参照元ＩＤのトランザクションと、参照先ＩＤのトランザクションとを関連付ける（ステップＳ３０７）。
【０１０１】
検出部１５０ｂは、参照元ＩＤのトランザクションに登録されたキーと、参照元情報１４２とを基にして、トランザクションＩＤ（次の参照元ＩＤ）を特定する（ステップＳ３０８）。検出部１５０ｂは、参照元ＩＤに対応するトランザクションの元トランザクションＩＤと、一つ前の参照元ＩＤとが一致するか否かを判定する（ステップＳ３０９）。
【０１０２】
検出部１５０ｂは、元トランザクションＩＤと、一つ前の参照元ＩＤとが一致しない場合には（ステップＳ３１０，Ｎｏ）、ステップＳ３０６に移行する。検出部１５０ｂは、元トランザクションＩＤと、一つ前の参照元ＩＤとが一致する場合には（ステップＳ３１０，Ｙｅｓ）、現在の参照元ＩＤに対応するトランザクションと、一つ前の参照元ＩＤに対応するトランザクションとを関連付ける（ステップＳ３１１）。
【０１０３】
検出部１５０ｂは、現在の参照元ＩＤのトランザクションに登録されたキーが、参照元情報１４２に登録されているか否かを判定する（ステップＳ３１２）。検出部１５０ｂは、現在の参照元ＩＤのトランザクションに登録されたキーが、参照元情報１４２に登録されている場合には（ステップＳ３１３，Ｙｅｓ）、ステップＳ３０８に移行する。
【０１０４】
一方、検出部１５０ｂは、現在の参照元ＩＤのトランザクションに登録されたキーが、参照元情報１４２に登録されていない場合には（ステップＳ３１３，Ｎｏ）、検出結果を端末装置２０に出力する（ステップＳ３１４）。
【０１０５】
次に、本実施例に係る検出装置１００の効果について説明する。検出装置１００は、取引が発生する度に、発生した取引の情報、参照された以前の取引の情報、以前の取引のトランザクションＩＤをブロックチェーン１４０ａ、ワールドステート１４０ｂに登録する。検出装置１００は、トレース要求を受け付けると、ブロックチェーン１４０ａ、ワールドステート１４０ｂを基にして、検索キーに対応するトランザクションに関連するトランザクションを検出し、トレースを行う。これによって、ブロックチェーン１４０ａに含まれる関連性のあるトランザクション同士をトレースすることができる。
【０１０６】
検出装置１００は、トレース要求を受け付けた場合、検索キーと参照先情報１４１とを基にしてトランザクションＩＤを特定する。検出装置１００は、トランザクションＩＤに対応するトランザクションに登録されたキーと、検索キーとが一致する場合に、トランザクションと、トランザクションに登録された元トランザクションＩＤのトランザクションとを関連付ける。これによって、改竄を保証したトランザクションを、上り方向にトレースした結果を検出することができる。
【０１０７】
検出装置１００は、トレース要求を受け付けた場合、検索キーと参照元情報１４２とを基にして、参照元ＩＤを特定し、参照元ＩＤのトランザクションに登録された元トランザクションＩＤを特定する。検出装置１００は、元トランザクションＩＤと、検索キーと参照先情報１４１とから特定される参照先ＩＤとが一致する場合、参照元ＩＤのトランザクションと、参照先ＩＤのトランザクションとを関連付ける。これによって、改竄を保証したトランザクションを、下り方向にトレースした結果を検出することができる。
【０１０８】
検出装置１００は、参照元ＩＤのトランザクションに格納されたトランザクションＩＤが、一つ前の参照元ＩＤと一致する場合には、トランザクションが改竄されていないと判定する。そして、検出装置１００は、参照元ＩＤのトランザクションと、一つ前の参照元ＩＤのトランザクションとを関連付ける。これによって、改竄を保証したトランザクションを、下り方向にトレースした結果を検出することができる。
【０１０９】
検出装置１００は、トレースするための情報として、トランザクション、参照先情報１４１、参照元情報１４２に、ユーザＩＤ、リソースＩＤ、トランザクションＩＤを登録するのみであるため、データサイズを小さくすることができる。また、トレースするための情報が小さいため、検出装置１００が走査する情報量を削減でき、処理速度の向上、リアルタイム性の向上を図ることができる。
【０１１０】
次に、本実施例に示した検出装置１００と同様の機能を実現するコンピュータのハードウェア構成の一例について説明する。図１５は、本実施例に係る検出装置と同様の機能を実現するコンピュータのハードウェア構成の一例を示す図である。
【０１１１】
図１５に示すように、コンピュータ３００は、各種演算処理を実行するＣＰＵ３０１と、ユーザからのデータの入力を受け付ける入力装置３０２と、ディスプレイ３０３とを有する。また、コンピュータ３００は、記憶媒体からプログラム等を読み取る読み取り装置３０４と、有線または無線ネットワークを介して、外部装置等との間でデータの授受を行うインタフェース装置３０５とを有する。コンピュータ３００は、各種情報を一時記憶するＲＡＭ３０６と、ハードディスク装置３０７とを有する。そして、各装置３０１〜３０７は、バス３０８に接続される。
【０１１２】
ハードディスク装置３０７は、登録プログラム３０７ａ、検出プログラム３０７ｂ、同期プログラム３０７ｃを有する。ＣＰＵ３０１は、登録プログラム３０７ａ、検出プログラム３０７ｂ、同期プログラム３０７ｃを読み出してＲＡＭ３０６に展開する。
【０１１３】
登録プログラム３０７ａは、登録プロセス３０６ａとして機能する。検出プログラム３０７ｂは、検出プロセス３０６ｂとして機能する。同期プログラム３０７ｃは、同期プロセス３０６ｃとして機能する。
【０１１４】
登録プロセス３０６ａの処理は、登録部１５０ａの処理に対応する。検出プロセス３０６ｂの処理は、検出部１５０ｂの処理に対応する。同期プロセス３０６ｃの処理は、同期部１５０ｃの処理に対応する。
【０１１５】
なお、各プログラム３０７ａ〜３０７ｃついては、必ずしも最初からハードディスク装置３０７に記憶させておかなくてもよい。例えば、コンピュータ３００に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」に各プログラムを記憶させておく。そして、コンピュータ３００が各プログラム３０７ａ〜３０７ｃを読み出して実行するようにしてもよい。
【０１１６】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１１７】
（付記１）コンピュータに、
第１イベントが発生した場合、前記第１イベントに対応する第１トランザクションを生成してブロックチェーンに登録し、
前記第１イベントに関する第１イベント情報と、前記第１トランザクションの識別情報とを対応付けて第１テーブルに登録し、
前記第１イベントより前に発生した第２イベントに関する第２イベント情報と、前記第１トランザクションの識別情報とを対応付けて第２テーブルに登録し、
前記第２イベント情報と、前記第１テーブルとを基にして、前記第２イベント情報に対応する第２イベントが発生した際に登録された第２トランザクションの識別情報を特定し、特定した識別情報と前記第２イベント情報とを前記第１トランザクションに登録し、
第３イベントのトレース要求を受け付けた場合に、前記ブロックチェーンに登録された複数のトランザクションと、前記第１テーブルと、前記第２テーブルとを基にして、前記第３イベントに関連するトランザクションを検出する
処理を実行させることを特徴とする検出プログラム。
【０１１８】
（付記２）前記検出する処理は、前記第３イベントに関する第３イベント情報と、前記第１テーブルとを基にして、前記第３イベント情報に対応する識別情報を有するトランザクションを特定し、特定したトランザクションに登録されたイベント情報と、前記第３イベント情報が一致する場合に、特定したトランザクションと、特定したトランザクションに登録された識別情報に対応するトランザクションとを関連付けることを特徴とする付記１に記載の検出プログラム。
【０１１９】
（付記３）前記検出する処理は、前記第３イベントに関する第３イベント情報と、前記第２テーブルとを基にして、前記第３イベント情報に対応する識別情報を有する第３トランザクションを特定し、前記第３トランザクションに登録された識別情報と、前記第１テーブルに登録された前記第３イベント情報に対応する識別情報とが一致する場合に、前記第３トランザクションと、前記第３トランザクションに登録された識別情報に対応する第４トランザクションとを関連付けることを特徴とする付記１または２に記載の検出プログラム。
【０１２０】
（付記４）前記検出する処理は、前記第３トランザクションに登録されたイベント情報と、前記第２テーブルとを基にして、前記第３トランザクションに登録されたイベント情報に対応する識別情報を有する第５トランザクションを特定し、前記第５トランザクションに登録された識別情報が、前記第３トランザクションを識別する識別情報である場合に、前記第３トランザクションと前記第５トランザクションとを関連付けることを特徴とする付記３に記載の検出プログラム。
【０１２１】
（付記５）前記検出する処理は、前記第３トランザクション、前記第４トランザクション、前記第５トランザクションの順に、関連付けを行うことを特徴とする付記４に記載の検出プログラム。
【０１２２】
（付記６）コンピュータが実行する検出方法であって、
第１イベントが発生した場合、前記第１イベントに対応する第１トランザクションを生成してブロックチェーンに登録し、
前記第１イベントに関する第１イベント情報と、前記第１トランザクションの識別情報とを対応付けて第１テーブルに登録し、
前記第１イベントより前に発生した第２イベントに関する第２イベント情報と、前記第１トランザクションの識別情報とを対応付けて第２テーブルに登録し、
前記第２イベント情報と、前記第１テーブルとを基にして、前記第２イベント情報に対応する第２イベントが発生した際に登録された第２トランザクションの識別情報を特定し、特定した識別情報と前記第２イベント情報とを前記第１トランザクションに登録し、
第３イベントのトレース要求を受け付けた場合に、前記ブロックチェーンに登録された複数のトランザクションと、前記第１テーブルと、前記第２テーブルとを基にして、前記第３イベントに関連するトランザクションを検出する
処理を実行することを特徴とする検出方法。
【０１２３】
（付記７）前記検出する処理は、前記第３イベントに関する第３イベント情報と、前記第１テーブルとを基にして、前記第３イベント情報に対応する識別情報を有するトランザクションを特定し、特定したトランザクションに登録されたイベント情報と、前記第３イベント情報が一致する場合に、特定したトランザクションと、特定したトランザクションに登録された識別情報に対応するトランザクションとを関連付けることを特徴とする付記６に記載の検出方法。
【０１２４】
（付記８）前記検出する処理は、前記第３イベントに関する第３イベント情報と、前記第２テーブルとを基にして、前記第３イベント情報に対応する識別情報を有する第３トランザクションを特定し、前記第３トランザクションに登録された識別情報と、前記第１テーブルに登録された前記第３イベント情報に対応する識別情報とが一致する場合に、前記第３トランザクションと、前記第３トランザクションに登録された識別情報に対応する第４トランザクションとを関連付けることを特徴とする付記６または７に記載の検出方法。
【０１２５】
（付記９）前記検出する処理は、前記第３トランザクションに登録されたイベント情報と、前記第２テーブルとを基にして、前記第３トランザクションに登録されたイベント情報に対応する識別情報を有する第５トランザクションを特定し、前記第５トランザクションに登録された識別情報が、前記第３トランザクションを識別する識別情報である場合に、前記第３トランザクションと前記第５トランザクションとを関連付けることを特徴とする付記８に記載の検出方法。
【０１２６】
（付記１０）前記検出する処理は、前記第３トランザクション、前記第４トランザクション、前記第５トランザクションの順に、関連付けを行うことを特徴とする付記９に記載の検出方法。
【０１２７】
（付記１１）第１イベントが発生した場合、前記第１イベントに対応する第１トランザクションを生成してブロックチェーンに登録し、前記第１イベントに関する第１イベント情報と、前記第１トランザクションの識別情報とを対応付けて第１テーブルに登録し、前記第１イベントより前に発生した第２イベントに関する第２イベント情報と、前記第１トランザクションの識別情報とを対応付けて第２テーブルに登録し、前記第２イベント情報と、前記第１テーブルとを基にして、前記第２イベント情報に対応する第２イベントが発生した際に登録された第２トランザクションの識別情報を特定し、特定した識別情報と前記第２イベント情報とを前記第１トランザクションに登録する登録部と、
第３イベントのトレース要求を受け付けた場合に、前記ブロックチェーンに登録された複数のトランザクションと、前記第１テーブルと、前記第２テーブルとを基にして、前記第３イベントに関連するトランザクションを検出する検出部と
を有することを特徴とする検出装置。
【０１２８】
（付記１２）前記検出部は、前記第３イベントに関する第３イベント情報と、前記第１テーブルとを基にして、前記第３イベント情報に対応する識別情報を有するトランザクションを特定し、特定したトランザクションに登録されたイベント情報と、前記第３イベント情報が一致する場合に、特定したトランザクションと、特定したトランザクションに登録された識別情報に対応するトランザクションとを関連付けることを特徴とする付記１１に記載の検出装置。
【０１２９】
（付記１３）前記検出部は、前記第３イベントに関する第３イベント情報と、前記第２テーブルとを基にして、前記第３イベント情報に対応する識別情報を有する第３トランザクションを特定し、前記第３トランザクションに登録された識別情報と、前記第１テーブルに登録された前記第３イベント情報に対応する識別情報とが一致する場合に、前記第３トランザクションと、前記第３トランザクションに登録された識別情報に対応する第４トランザクションとを関連付けることを特徴とする付記１１または１２に記載の検出装置。
【０１３０】
（付記１４）前記検出部は、前記第３トランザクションに登録されたイベント情報と、前記第２テーブルとを基にして、前記第３トランザクションに登録されたイベント情報に対応する識別情報を有する第５トランザクションを特定し、前記第５トランザクションに登録された識別情報が、前記第３トランザクションを識別する識別情報である場合に、前記第３トランザクションと前記第５トランザクションとを関連付けることを特徴とする付記１３に記載の検出装置。
【０１３１】
（付記１５）前記検出する処理は、前記第３トランザクション、前記第４トランザクション、前記第５トランザクションの順に、関連付けを行うことを特徴とする付記１４に記載の検出装置。
【符号の説明】
【０１３２】
２０ａ，２０ｂ，２０ｃ，２０ｄ  端末装置
５０    ネットワーク
１００ａ，１００ｂ，１００ｃ，１００ｄ  検出装置
１１０    通信部
１４０    記憶部
１４０ａ  ブロックチェーン
１４０ｂ  ワールドステート
１４１    参照先情報
１４２    参照元情報
１５０    制御部
１５０ａ  登録部
１５０ｂ  検出部
１５０ｃ  同期部
【図１】
2020160983.tif 000003
【図２】
2020160983.tif 000004
【図３】
2020160983.tif 000005
【図４】
2020160983.tif 000006
【図５】
2020160983.tif 000007
【図６】
2020160983.tif 000008
【図７】
2020160983.tif 000009
【図８】
2020160983.tif 000010
【図９】
2020160983.tif 000011
【図１０】
2020160983.tif 000012
【図１１】
2020160983.tif 000013
【図１２】
2020160983.tif 000014
【図１３】
2020160983.tif 000015
【図１４】
2020160983.tif 000016
【図１５】
2020160983.tif 000017