(57)【特許請求の範囲】
【請求項１】
特定の電子データが存在していたことを証明するための存在証明方法であって、  存在証明の登録対象となる電子データを登録する際に、コンピュータが、  前記電子データの内容に基づき決定されるバイト配列を有するトランザクションを生成して、当該トランザクションをデジタル署名した上で、ブロックチェーンが存在するネットワークにブロードキャストするステップと、  前記バイト配列と前記トランザクションに対応するトランザクション識別子とを関連付けて記憶するステップとを含み、  電子データの存在証明を検証する際に、コンピュータが、  前記トランザクション識別子をキーに前記ネットワーク上に存在する前記ブロックチェーンを検索して、前記トランザクション識別子に対応するトランザクションの有無を判定するステップと、  前記判定の結果が有の場合に、前記トランザクション識別子に対応する前記トランザクションからバイト配列を抽出するステップとを含み、  前記抽出されたバイト配列が検証を行う前記電子データのバイト配列と一致することにより前記電子データの存在が証明されることを特徴とする存在証明方法。
【請求項２】
前記バイト配列は、前記電子データの種別に応じてハッシュ値又はバイナリ表現のいずれかであることを特徴とする請求項１に記載の存在証明方法。
【請求項３】
前記バイト配列は、前記トランザクションのスクリプトに記述されていることを特徴とする請求項１又は２に記載の存在証明方法。
【請求項４】
前記ネットワークは、仮想通貨ネットワークであることを特徴とする請求項１乃至３のいずれかに記載の存在証明方法。
【請求項５】
前記ブロードキャストされるトランザクションは、前記電子データの登録者によって指定された仮想通貨アドレスを送り先とすることを特徴とする請求項４に記載の存在証明方法。
【請求項６】
コンピュータに、特定の電子データが存在していたことを証明するための存在証明方法を実行させるためのプログラムであって、前記存在証明方法は、  存在証明の登録対象となる電子データを登録する際に、コンピュータが、  前記電子データの内容に基づき決定されるバイト配列を有するトランザクションを生成して、当該トランザクションをデジタル署名した上で、ブロックチェーンが存在するネットワークにブロードキャストするステップと、  前記バイト配列と前記トランザクションに対応するトランザクション識別子とを関連付けて記憶するステップとを含み、  電子データの存在証明を検証する際に、コンピュータが、  前記トランザクション識別子をキーに前記ネットワーク上に存在する前記ブロックチェーンを検索して、前記トランザクション識別子に対応するトランザクションの有無を判定するステップと、  前記判定の結果が有の場合に、前記トランザクション識別子に対応する前記トランザクションからバイト配列を抽出するステップとを含み、  前記抽出されたバイト配列が検証を行う前記電子データのバイト配列と一致することにより前記電子データの存在が証明されることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、特定の電子データが特定の時点で存在していたことを証明する存在証明プログラムおよび存在証明サーバに関する。
【背景技術】
【０００２】
従来より、特定の電子データが特定の時点で存在していたことを証明する様々な証明手法が提案されている。例えば、特許文献１には、タイムスタンプ局装置から送信されたタイムスタンプデータに基づいて証明対象データの証明を可能にするタイムスタンプ更新装置が開示されている。具体的には、証明対象データが入力されると、証明対象データから算出されたハッシュ値がタイムスタンプ局装置に送信され、タイムスタンプ局装置から受信したタイムスタンプデータが証明対象データと関連づけて記憶される。そして、証明対象データに関連づけられたタイムスタンプデータの有効期間の論理和が算出され、検証時から遡れる期間が、証明対象データの存在証明可能な期間として出力される。
【０００３】
また、特許文献２には、ネットワーク上において、電子メール等のデータを正確な時刻情報を利用してやり取りすることのできるデータ送受信システムが開示されている。具体的には、認証局は、認証メールサーバに対し、高精度な時刻情報を含む電子消印が発行できることを認証する。電子メールの送信側の認証メールサーバは、送信者が送信する電子メールに、高精度な時刻情報が埋め込まれた電子消印を押印する。このとき、認証メールサーバで時刻情報が付与された電子消印のデータは、所定の電子消印発行プログラムによって改ざんができないようになっており、さらに暗号化して受信側メールサーバに転送される。
【０００４】
さらに、特許文献３には、 オリジナル文書が特定の日付に特定の格納場所に存在したことを証明する存在証明プログラムが開示されている。具体的には、まず、登録者は、文書の複製物をコンテンツとして予め保存しておく。文書存在証明サーバは、登録者からの要求に応じて、指定されたＵＲＬによって文書を取得し、登録日付、文書ＵＲＬ及び文書の内容からハッシュを生成し、そのリンクを登録ＤＢに登録し、登録者にハッシュＵＲＬを通知する。この通知を受けた登録者は、ハッシュＵＲＬを含む存在確認ページを作成してＨＴＭＬファイルに保存する。コンテンツ及びＨＴＭＬファイルの複製物を取得した閲覧者は、コンテンツ及び存在確認ページ中の登録日付、文書ＵＲＬに基づいてハッシュを生成し、文書存在証明サーバから取得したハッシュと比較してオリジナル文書の存在を検証する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−０５５６３４号公報
【特許文献２】特開２００２−１１６６９５号公報
【特許文献３】特開平１１−１７５５１２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明は、特定の電子データが特定の時点で存在していたことを高い堅牢性で証明する新規な存在証明手法を提供することである。
【課題を解決するための手段】
【０００７】
かかる課題を解決すべく、第１の発明は、特定の電子データがトランザクション発生時に存在していたことを証明する存在証明プログラムを提供する。この存在証明プログラムは、存在証明の登録対象となる電子データの内容に基づき一義的に決定されるバイト配列をスクリプト中に埋め込んだトランザクションを生成し、このトランザクションを公開鍵暗号を使ってデジタル署名した上で、ブロックチェーンが存在するＰ２Ｐネットワークにブロードキャストする第１のステップと、トランザクションに固有のトランザクション識別子と、バイト配列とを関連付けて管理データベースに記憶する第２のステップと、トランザクション識別子をキーに、Ｐ２Ｐネットワーク上のブロックチェーンを検索して、トランザクション識別子に対応するトランザクションを特定し、このトランザクションに埋め込まれたバイト配列を抽出する第３のステップを有する処理をコンピュータに実行させる。
【０００８】
ここで、第１の発明において、存在証明の検証対象となる電子データのバイト配列をキーとして、管理データベースを検索し、バイト配列に関連付けられたトランザクション識別子を特定する第４のステップをさらに有することが好ましい。
【０００９】
第１の発明において、上記第１のステップは、電子データを登録しようとする者によって指定された仮想通貨アドレスを仮想通貨の送り先としたトランザクションを生成するステップを含んでいてもよい。
【００１０】
第１の発明において、上記バイト配列は、電子データがファイルの場合、このファイルのハッシュ値であって、電子データがテキストメッセージの場合、このテキストメッセージのバイナリ表現であることが好ましい。
【００１１】
第１の発明において、上記電子データはファイルであって、上記第１のステップは、このファイルを暗号化した上で、このファイルのハッシュ値であるバイト配列と関連付けて記憶するステップを含むことが好ましい。
【００１２】
第２の発明は、ネットワークを介してクライアントに接続され、特定の電子データがトランザクション発生時に存在していたことを証明する存在証明サーバを提供する。この存在証明サーバは、データ送受部と、データ登録部と、データ検索部とを有する。データ送受部は、クライアントから送信され、かつ、存在証明の登録対象となる電子データを受け付ける。データ登録部は、電子データの内容に基づき一義的に決定されるバイト配列をスクリプト中に埋め込んだトランザクションを生成し、このトランザクションを公開鍵暗号を使ってデジタル署名した上で、ブロックチェーンが存在するＰ２Ｐネットワークにブロードキャストする。また、データ登録部は、トランザクションに固有のトランザクション識別子と、バイト配列とを対応付けて管理データベースに登録する。データ検索部は、トランザクション識別子をキーに、Ｐ２Ｐネットワーク上のブロックチェーンを検索して、トランザクション識別子に対応するトランザクションを特定し、このトランザクションに埋め込まれたバイト配列を抽出する。
【００１３】
ここで、第２の発明において、データ検索部は、存在証明の検証対象となる電子データのバイト配列をキーとして、管理データベースを検索し、バイト配列に関連付けられたトランザクション識別子を抽出することが好ましい。
【発明の効果】
【００１４】
ビットコイン（bitcoin）やその派生通貨を含む仮想通貨では、公開鍵暗号方式と、分散型暗号化データベースであるブロックチェーンとが用いられており、これらの技術によって、仮想通貨が誰から誰に渡ったかを示すトランザクション（取引）が高い堅牢性で保証される。本発明は、このような堅牢性を電子データの存在証明に利用するものであって、電子データの内容に基づき一義的に決定されるバイト配列を埋め込んだトランザクションを生成し、これを、ブロックチェーンが存在するＰ２Ｐネットワークにブロードキャストする。これによって、Ｐ２Ｐネットワーク上に存在するブロックチェーンに、バイト配列が埋め込まれたトランザクションが取り込まれる。電子データの存在証明を検証する場合、トランザクション識別子をキーにブロックチェーンを検索し、ヒットしたトランザクション中に埋め込まれたバイト配列を抽出することによって、電子データがトランザクション発生時に存在していたことの可否を高い堅牢性で検証・証明することができる。
【図面の簡単な説明】
【００１５】
【図１】本実施形態に係る存在証明サーバのブロック構成図
【図２】存在証明の登録対象となるファイルの入力画面例
【図３】存在証明の登録対象となるテキストメッセージの入力画面例
【図４】電子データの登録ルーチンのフローチャート
【図５】トランザクションの概念図
【図６】トランザクションにおけるデータ構造の説明図
【図７】バイト配列を埋め込んだトランザクションのスクリプトの一例を示す図
【図８】ブロックチェーン２１の説明図
【図９】電子データを入力としてトランザクション識別子を検索する検索ルーチンのフローチャート
【図１０】ブロックチェーンの検索ルーチンのフローチャート
【図１１】電子データの存在証明の説明図
【発明を実施するための形態】
【００１６】
図１は、本実施形態に係る存在証明サーバのブロック構成図である。この存在証明サーバ１は、インターネット等のネットワークを介して、仮想通貨の利用者が操作するクライアント１０および仮想通貨ネットワーク２０に接続されている。仮想通貨ネットワーク２０は、Ｐ２Ｐ（ peer to peer）ネットワークであって、多数の端末間で通信を行う際、対等の者（Peer）同士が通信をするアーキテクチャが採用されている。また、仮想通貨ネットワーク２０上には、後述するように、分散型暗号化データベースの一種であるブロックチェーン２１が存在する。証明証明サーバ１は、電子データの存在証明機能、すなわち、特定の電子データが特定の時点で存在していたことを証明する機能を有している。本実施形態において、存在証明の対象となる電子データとしては、所定の文字数以下のテキストメッセージ（文字列）、および、ドキュメント、静止画、動画といったファイルの２種類が存在する。このような電子データの存在証明機能を実現するために、存在証明サーバ１は、データ送受部２と、データ登録部３と、データ検索部４と、管理データベース５と、ファイル記憶部６とを有している。
【００１７】
データ送受部２は、存在証明サーバ１とクライアント１０との間におけるデータの送受を司るインターフェースであり、特に、存在証明の登録対象や検証対象となる電子データをクライアント１０から受信する（受け付ける）と共に、登録結果や検索結果をクライアント１０に送信する。
【００１８】
データ登録部３は、受け付けた電子データに基づき、この電子データの内容によって一義的に決定されるバイト配列ＢＡ（後述するハッシュ値やバイナリ表現）を生成し、このバイト配列ＢＡをスクリプト中に埋め込んだトランザクションを生成する。そして、データ登録部３は、このトランザクションを公開鍵暗号方式を用いてデジタル署名した上で、ブロックチェーン２１に取り込むために、仮想通貨ネットワーク２０にブロードキャストする。また、データ登録部３は、トランザクションに固有のトランザクション識別子ＴｒＩＤと、バイト配列ＢＡとを対応付けて管理データベース５に登録・記憶する。さらに、データ登録部３は、クライアント１０から受け付けた電子データがファイルの場合（テキストメッセージを除く。）、このファイルを、バイト配列ＢＡ（ファイルのハッシュ値）と関連付けて、ファイル記憶部６に記憶・保存する。
【００１９】
データ検索部４は、電子データの存在証明を検証する際、トランザクション識別子ＴｒＩＤをキーにブロックチェーン２１を検索して、トランザクション識別子ＴｘＩＤに対応するトランザクションを特定し、このトランザクションに埋め込まれたバイト配列ＢＡを抽出する。また、データ検索部４は、この検索の前処理として必要に応じて、存在証明の検証対象となる電子データのバイト配列ＢＡをキーとして、管理データベース５を検索し、このバイト配列ＢＡに関連付けられたトランザクション識別子ＴｘＩＤを抽出する。
【００２０】
なお、本実施形態では、電子データの存在証明機能のみに着目しているが、ビットコインやその派生通貨を含む仮想通貨の取引や管理を行うプラットフォームの一機能として、電子データの存在証明サービスを提供してもよい。
【００２１】
図２は、存在証明の登録対象となるファイルの入力画面例である。クライアント１０を操作するユーザは、図示された入力画面の指示に従い、仮想通貨の送り先となる仮想通貨アドレスおよびパスワードを入力すると共に、アップロードするファイルを選択する。また、図３は、存在証明の登録対象となるテキストメッセージの入力画面例である。ユーザは、入力画面例の書き込みの指示「Write a Message」に従い、図２に示したファイルの選択の代わりに、アップロードするテキストメッセージを同指示の下欄のボックスに入力する。これらユーザによるファイル選択及び送信アイコンの選択や、テキストメッセージの入力及び書き込みアイコン（図３の「Write Forever」）を受け、当該ファイル・テキストメッセージのデータがクライアント１０から存在証明サーバ１に送信され、存在証明サーバ１側のデータ登録部３にて受け付けられる。これら図２及び図３に示す入力画面は、存在証明サーバ１からクライアント１０に処理の都度提供され、あるいは予め提供されたアプリケーションにより実行され得る。
【００２２】
図４は、電子データの登録ルーチンのフローチャートである。この登録ルーチンは、存在証明の登録対象となる電子データがデータ送受部１によって受け付けられた場合に、データ登録部２によって実行される。
【００２３】
まず、ステップ１において、登録対象となる電子データの種別が判定される。電子データの種別がファイルの場合、ファイルのハッシュ値が例えばＳＨＡ２５６を用いて生成される（ステップ２）。ハッシュ値は、同じ入力値からは必ず同一値が出力される一方、少しでも異なる入力値からはまったく違う値が出力されるといった特徴を有する。また、ハッシュ関数は、不可逆な一方向関数を含むため、出力されたハッシュ値から入力値を割り出すことはできない。このような特徴から、ハッシュ値は、ファイルの改ざんを検出する用途で広く利用されている。本実施形態において、ファイルの内容から一義的に決定されるハッシュ値は、存在証明の登録対象となるファイルを特徴付けるバイト配列ＢＡとされる。
【００２４】
ステップ３において、ファイルは、暗号化された上で、このファイルのバイト配列ＢＡ（ハッシュ値）と関連付けてファイル記憶部６に格納される。ファイルを暗号化する理由は、もっぱら、第三者に対してファイルの内容を秘匿することにあるから、秘匿性が要求されないのであれば、平文のままファイルをファイル記憶部６に格納してもよい。
【００２５】
一方、電子データの種別がテキストメッセージの場合、ステップ１からステップ４に進み、テキストメッセージのバイナリ表現（例えば、ＵＴＦ−８でエンコードした値）がバイト配列ＢＡとされる。いうまでもなく、このバイナリ表現も、テキストメッセージの内容から一義的に決定されるものである。
【００２６】
ステップ３またはステップ４に続くステップ５において、電子データを登録しようとする者によって指定された仮想通貨アドレスを仮想通貨の送り先として、バイト配列ＢＡが埋め込まれたトランザクションが生成される。ここで、図５に基づき、ビットコインにおけるトランザクションの概念について説明する。ビットコインにおいて、通貨は取引履歴、すなわち、通貨が今まで経てきた全取引のまとまりとして表現される。それぞれのトランザクション（通貨の取引）では、前のトランザクションのハッシュ値や、新たな所有者の公開鍵を含み、元の所有者の暗号鍵によってデジタル署名されている。全てのトランザクションに関する情報は、Ｐ２Ｐネットワーク全体で共有される。このようにトランザクションを表現することで、元の所有者の許可なく、通貨を本人以外が勝手に譲渡することはできず、また、第三者は、通貨の譲渡を客観的に確認できるといった利点を有する。
【００２７】
図６は、トランザクションにおけるデータ構造の説明図である。トランザクションのデータ構造は、「出力 (出金する通貨)」と、「入力 (入金に用いる通貨)」とを有している。送金には、相手に渡す通貨（額面）および宛先が必要であるが、それらを表現したものが出力である。自分に宛てられた通貨を使う (=誰かに送金する) ためには、過去のトランザクションの出力を参照しなければならず、それが今回のトランザクションにおける入力に相当する。一つのトランザクションにおいて、出力および入力はそれぞれ複数指定できる。任意の額の送金を行うためには、過去の自分宛のトランザクションの出力を集め、これから行う取引の入力として指定する必要がある。
【００２８】
図７は、バイト配列ＢＡを埋め込んだトランザクションのスクリプトの一例を示す図である。ビットコインでは、ビットコイン・スクリプトによってトランザクションが記述される。同図に示したトランザクションは、過去に利用者Ａから自分宛に送金されたビットコインを用いて、利用者Ｂ宛てに所定の額面の通貨を送金することを意味している。トランザクションには、そのトランザクション固有のトランザクション識別子ＴｘＩＤが付されており、通常、トランザクションのハッシュ値が用いられる。上述したように、「OutputScript」には複数の出力が指定できるところ、「出力２」は、入力のデジタル署名を検証する通常の記述であるのに対し、「出力１」は、バイト配列ＢＡを付加するための記述である。ビットコイン・スクリプトでは、「OP_RETRUN」というコードが用意されており、これは、一般的なプログラミングのreturnと同様、そこに来るとスクリプトをストップし、その出力の参照を許さない、とするものである。そして、「OP_RETRUN」に続き、「OP_PUSHDATA」を用いてバイト配列ＢＡを付加すれば、デジタル署名に悪影響を及ぼすことなく、「出力１」をバイト配列ＢＡの記述欄として利用することができる。以上のような「OP_RETRUN」の特性を活かして、データ登録部３は、通常のスクリプトの記述にステップ２，４で特定されたバイト配列ＢＡを自動的に付加することによって、バイト配列ＢＡが埋め込まれたトランザクションを生成する。なお、「OP_PUSHDATA」を用いて付加できるバイト配列ＢＡのバイト数には上限がある関係上、ファイルについてはハッシュ値を用い、テキストメッセージについては上限値を超えないことが条件となる。
【００２９】
再び図４を参照して、ステップ６において、ステップ５で生成されたトランザクションが公開鍵暗号を使ってデジタル署名され、そのハッシュ値がトランザクション識別子ＴｘＩＤ、すなわち、トランザクションを一義的に特定するための固有の値として採番される。ステップ７において、ステップ２またはステップ４で特定されたバイト配列ＢＡと、ステップ６で採番されたトランザクション識別子ＴｘＩＤとが関連付けて、管理データベース５に登録される。また、電子データの検証時に、バイト配列ＢＡがハッシュ値およびバイナリ表現のいずれであるかを判別するために、バイト配列ＢＡの種別も併せて管理データベース５に記憶される。
【００３０】
ステップ８において、バイト配列ＢＡが埋め込まれたトランザクション（ステップ５）が、Ｐ２Ｐネットワークである仮想通貨ネットワーク２０にブロードキャストされる。ここで、ブロードキャストとは、トランザクションを仮想通貨ネットワーク２０に接続された複数のユーザに送信することをいう。ブロードキャストされたトランザクションは、通常のトランザクションと同様、仮想通貨ネットワーク２０全体で共有され、採掘者（マイナー）と呼ばれるネットワークノードによって、ブロックチェーン２１中に取り込まれる。これは、配列ＢＡが埋め込まれたトランザクションが、ブロックチェーン２１という極めて堅牢な分散型暗号化データベースに登録されることを意味する。
【００３１】
図８は、ブロックチェーン２１の説明図である。ブロックチェーン２１は、ビットコインおよびその派生通貨で採用されている二重譲渡を防ぐ仕組みである。二重譲渡とは、元の通貨の持ち主が二人以上の相手に、全く同じ通貨を譲渡することである。通貨として用いるためには、どちらの譲渡のみをネットワーク全体で正しい取引として決定する必要がある。一般には、時系列的に後のトランザクションを無効とみなすのが自然だが、これらの取引はＰ２Ｐネットワーク上でなされるので、ネットワーク全体として見たとき、どちらが先に行われた取引であるかということを確実には決定できない。しかしながら、ここで重要なのは、ネットワーク全体で特定のどちらか一方のみを一貫して正しい取引であると決定できることであって、矛盾する二つの取引のあるとき、厳密にどちらの取引が先になされたかというのは、あまり重要でない。ブロックチェーン（Block Chain; ブロック鎖）において、それぞれのブロック（Block）は、多数のトランザクションと、ナンス（Nonce）と呼ばれる特別な値と、直前のブロックのハッシュとを有している。ブロックに含まれたトランザクション（取引）のみを「正しい取引」と認めることにする。そして、ネットワーク全体で「唯一のブロックの鎖」を持つようにする。これによって、一貫した取引履歴をネットワーク全体で共有できる、というのがブロックチェーンの仕組みである。
【００３２】
そして、ステップ９において、電子データの登録が完了した旨の通知をクライアント１０に送信することによって、本ルーチンを抜ける。
【００３３】
図９は、電子データを入力としてトランザクション識別子を検索する検索ルーチンのフローチャートである。この検索ルーチンは、存在証明の検証対象となる電子データがデータ送受部１によって受け付けられ、これを入力としてトランザクション識別子ＴｘＩＤを検索する場合に、データ検索部４によって実行される。
【００３４】
まず、ステップ１１において、検索対象となる電子データの種別が判定される。電子データの種別がファイルの場合、ファイルのハッシュ値が、登録時と同じハッシュ関数（例えばＳＨＡ２５６）を用いて生成される（ステップ１２）。そして、このハッシュ値は、存在証明の検証対象となるファイルを特徴付けるバイト配列ＢＡとされる。
【００３５】
一方、電子データの種別がテキストメッセージの場合、ステップ１１からステップ１３に進み、テキストメッセージのバイナリ表現（例えば、ＵＴＦ−８でエンコードした値）がバイト配列ＢＡとされる。
【００３６】
ステップ１２またはステップ１３に続くステップ１４において、バイト配列ＢＡをキーに管理データベース５が検索され、このバイト配列ＢＡに関連付けられたトランザクション識別子ＴｘＩＤが特定される。そして、ステップ１５において、このトランザクション識別子ＴｘＩＤが検索結果としてクライアント１０に通知されて、本ルーチンを抜ける。
【００３７】
図１０は、ブロックチェーン２１の検索ルーチンのフローチャートである。この検索ルーチンは、トランザクション識別子ＴｘＩＤをキーにブロックチェーン２１を検索し、トランザクション中に埋め込まれたバイト配列ＢＡを抽出する場合に、データ検索部４によって実行される。
【００３８】
まず、ステップ１７において、トランザクション識別子ＴｘＩＤをキーとして、仮想通貨ネットワーク２０上に存在するブロックチェーン２１が検索される。ブロックチェーン２１において、トランザクション識別子ＴｘＩＤに対応するトランザクションが存在する場合には、ステップ１８の肯定判定を経てステップ１９に進む。一方、ブロックチェーン２１において、トランザクション識別子ＴｘＩＤに対応するトランザクションが存在しない場合には、ステップ１８の否定判定を経てステップ２４に進み、クライアント１０にエラーを送信して、本ルーチンを抜ける。
【００３９】
ステップ１９において、トランザクション識別子ＴｘＩＤに対応するトランザクションに記述されたバイト配列ＢＡが抽出・取得される。つぎに、ステップ２０において、電子データの種別が判定される。電子データの種別がファイルの場合には、ステップ２２に進み、バイト配列ＢＡをキーにファイル記憶部６が検索される。そして、ステップ２２において、検索結果をクライアント１０に送信して、本ルーチンを抜ける。
【００４０】
この検索結果は、電子データの存在証明の可否のみならず、存在を証明できる場合には、ファイルの名称およびトランザクション発生時の提示を含んでいてもよい。ここで、「トランザクション発生時」とは、厳密には、仮想通貨ネットワーク２０にアップロードされたトランザクションを含む新たなブロックがブロックチェーン２１中に取り込まれた日時であって、この日時はブロックチェーン２１を検索することによって、随時、特定可能である。これにより、トランザクションに埋め込まれたバイト配列ＢＡ（ハッシュ値）がトランザクション発生時に存在していたことが保証される。上述したように、バイト配列ＢＡであるハッシュ値は、ファイルから一義的に決定される値であるから、存在証明の検証対象となるファイルのハッシュ値ＢＡと、トランザクションから抽出されたバイト配列ＢＡとが一致するということは、すなわち、検証対象となるファイルと同一内容のものがトランザクションの発生時に存在していたことを意味する。なお、検索結果の形態としては様々なものが考えられ、例えば、存在証明サーバ１側において、存在証明の検証対象となるファイルのバイト配列ＢＡと、トランザクションから抽出されたバイト配列ＢＡとを比較して、存在証明の可否を明示的に判断・通知してもよいし、あるいは、トランザクションから抽出されたバイト配列ＢＡをクライアント１０に通知して、存在証明の可否の判断についてはユーザに委ねてもよい。
【００４１】
一方、電子データの種別がテキストメッセージの場合には、ステップ２０からステップ２３に進み、バイト配列ＢＡがデコードされてテキストメッセージが復元される。そして、このテキストメッセージをクライアント１０に送信して、本ルーチンを抜ける。これにより、そのテキストメッセージがトランザクション発生時に存在していたことが証明される。
【００４２】
このように、本実施形態によれば、ファイルやテキストメッセージといった電子データがトランザクション発生時に存在していたことの可否を高い堅牢性で検証・証明することができる。この点を詳述すると、図１１に示すように、まず、バイト配列ＢＡが埋め込まれたトランザクションＢが仮想通貨ネットワーク２０上にアップロードされ、これによって、このトランザクションがブロックチェーン２１に取り込まれる。バイト配列ＢＡは、ファイルの場合はファイルのハッシュ値、テキストメッセージの場合はテキストメッセージのバイナリ表現であって、いずれも、電子データから一義的に決定される固有値である。ビットコインでは、第三者による改変や二重譲渡を防止するための仕組みとして、公開鍵暗号技術および分散型暗号化データベース技術が採用されており、これによって、仮想通貨が誰から誰に渡ったかを示すトランザクションが高い堅牢性で保証されている。
【００４３】
一方、電子データの検証時においては、存在証明サーバ１側に記憶されているトランザクション識別子ＴｘＩＤ＝Ｂを検索キーとして、ブロックチェーン２１を検索することによって、多数のトランザクションの中からトランザクションＢが特定される。そして、このトランザクションＢに埋め込まれたバイト配列ＢＡを取得・抽出することによって、電子データがトランザクション発生時に存在していたことの検証・証明が可能になる。すなわち、電子データがファイルの場合には、検証対象となるファイルのバイト配列ＢＡと、ブロックチェーン２１から取得・抽出されたバイト配列ＢＡとが一致することをもって、検証対象となるファイルと同一内容のものがトランザクション発生時に存在していたことが証明される。また、電子データがテキストメッセージの場合には、ブロックチェーン２１から取得・抽出されたバイト配列ＢＡ（デコードされたテキストメッセージ）自体がトランザクション発生時に存在していたことが証明される。
【００４４】
以上のことから、電子データの存在証明という観点でいえば、仮想通貨ネットワーク２０上のブロックチェーン２１は、一般的な意味でいう仮想通貨の取引履歴というよりも、むしろ、存在証明用のデータベースとして捉えることができ、また、このデータベースを構成する１つのトランザクションは、存在証明に必要なデータ（バイト配列ＢＡ）が記述された１つのレコードとして捉えることができる。そこで、本明細書では、「ブロックチェーン」および「トランザクション」という用語を、そのような拡張的な意味で用いることとする。
【００４５】
なお、上述した実施形態では、仮想通貨の典型であるビットコインを例に説明したが、本発明は、これに限定されるものではなく、以下の２要件を満たす派生通貨等に対して、広く適用可能である。
（１）Ｐ２Ｐネットワーク上にブロックチェーンが存在すること
（２）個々のトランザクションが公開鍵暗号方式を用いてデジタル署名されること
【００４６】
また、上述した実施形態では、存在証明の対象となる電子データとして、テキストメッセージおよびファイルの２種類を取り扱う例について説明したが、いずれか一方のみを取り扱うようにしてもよい。
【００４７】
さらに、上述した実施形態では、図６、図９および図１０に示したフローチャートを有するプログラムが存在証明サーバ１にインストールされている例について説明したが、このプログラムを利用者が操作するコンピュータにインストールすることによって、電子データの登録および検証を利用者自身が直接行うようにしてもよい。
【符号の説明】
【００４８】
１  存在証明サーバ
２  データ送受部
３  データ登録部
４  データ検索部
５  管理データベース
６  ファイル記憶部
１０  クライアント
２０  仮想通貨ネットワーク
２１  ブロックチェーン
【図１】
0006608256.tif 000002
【図２】
0006608256.tif 000003
【図３】
0006608256.tif 000004
【図４】
0006608256.tif 000005
【図５】
0006608256.tif 000006
【図６】
0006608256.tif 000007
【図７】
0006608256.tif 000008
【図８】
0006608256.tif 000009
【図９】
0006608256.tif 000010
【図１０】
0006608256.tif 000011
【図１１】
0006608256.tif 000012