【実施例1】
【0012】
図1は、実施例1にかかる文書ファイル管理システム10の構成を示すブロック図である。文書ファイル管理システム10は、管理サーバ100と、情報端末装置200−1〜n(以下、情報端末装置200と示す)と、ブロックチェーンネットワーク300とを備える。管理サーバ100と情報端末装置200、ブロックチェーンネットワーク300は、
図1に示すように、ネットワークNを介して互いに通信可能に接続する。ネットワークNは、インターネット、イントラネット、LAN(Local Area Network)やVPN(Virtual Private Network)、移動体通信網等の任意の通信ネットワークおよびそれらの組合せであり、その一部または全部が有線または無線であってもよい。
【0013】
管理サーバ100は、情報端末装置200から受信した文書ファイルに関する情報をブロックチェーンネットワーク300に登録するとともに、文書ファイルの改ざんの有無および文書ファイルが最新のバージョンであるか否か、登録対象の文書ファイルの登録可否等をブロックチェーンネットワーク300を用いて判断するサーバである。管理サーバ100は、送受信部101と、ID取得部102と、ハッシュ値算出部103と、ブロックチェーン登録部104と、ハッシュ値取得部105と、改ざん判断部106と、バージョン判断部107と、を備える。
【0014】
送受信部101は、情報端末装置200から送信された文書ファイルおよび登録要求を受信する。送受信部101は、受信した文書ファイルに関する情報をブロックチェーンネットワーク300に送信する。送受信部101は、情報端末装置200から送信された文書ファイルおよび様々の確認要求を受信し、確認結果を情報端末装置200に送信する。
【0015】
ID取得部102は、文書登録要求とともに受信した文書ファイルに文書ファイルIDが格納されていれば、文書ファイルIDを取得する。またID取得部102は、文書ファイルに文書ファイルIDが格納されていなければ、文書ファイルIDを生成し、生成した文書ファイルIDを文書ファイルに格納する。文書ファイルIDは、文書ファイルを一意に識別する情報であり、文書ファイルを一意に識別できれば、文書名等であってもよい。
【0016】
ハッシュ値算出部103は、文書ファイルのハッシュ値を算出する。ハッシュ値算出部103は、文書ファイルの先頭からファイルサイズまでのハッシュ値を算出する。ここで、文書ファイルは、一例としてPDFファイルであり、最初に作成した元文書に対し編集した際の更新内容を増分更新として更新順に追記し1つの文書ファイルとする。なお文書ファイルは、更新内容を文書ファイルに追記することができれば、PDFファイル以外であってもよい。本実施例では、文書ファイルがPDFファイルの場合を中心に説明する。
【0017】
ブロックチェーン登録部104は、登録要求された文書ファイル(文書ファイルIDを含む文書ファイル)の文書ファイルIDとハッシュ値、バージョン情報、ファイルサイズ等をブロックチェーンネットワーク300に送信し、ブロックチェーンネットワーク300内のブロックに文書ファイルIDとハッシュ値、バージョン情報、ファイルサイズ、登録日時等を記憶する。なお、登録日時は、ブロックをブロックチェーンネットワーク300に格納する際に自動的に記録される。ブロックチェーンネットワーク300には、登録要求された文書ファイルの文書ファイルIDとハッシュ値、バージョン情報、ファイルサイズ、登録日時等を記憶したブロックが登録順に格納されている。
【0018】
ハッシュ値取得部105は、文書ファイルに格納された文書ファイルIDを取得し、取得した文書ファイルIDをブロックチェーンネットワーク300に送信することによって、ブロックチェーンネットワーク300の文書ファイルIDが一致するブロックからハッシュ値を取得する。ハッシュ値取得部105は、ハッシュ値に加え、ブロックに記憶するファイルサイズ、バージョン情報、登録日時等を取得する。ハッシュ値取得部105は、同一の文書ファイルIDを記憶するブロックが複数格納されている場合は、ブロックごとの、複数のハッシュ値、ファイルサイズ、バージョン情報、登録日時等を取得する。
【0019】
改ざん判断部106は、文書ファイルから算出したハッシュ値とハッシュ値取得部105によって取得したハッシュ値の比較結果に基づき改ざんの有無を判断する。改ざん判断部106は、文書ファイルから算出したハッシュ値とハッシュ値取得部105によって取得したハッシュ値が一致する場合は改ざんがないと判断し、ハッシュ値が一致しない場合は改ざんがあると判断する。
【0020】
バージョン判断部107は、ブロックチェーンネットワーク300のブロックに記憶する、1つの文書ファイルのバージョンごとに異なるハッシュ値、ファイルサイズ、バージョン情報に基づいて、検証対象である文書ファイルのバージョン情報と、ブロックチェーンネットワーク300に登録されていない更新がなされているか否か、検証対象である文書ファイルが最新のバージョンであるか否か等を判断する。
【0021】
情報端末装置200は、文書ファイルの改ざんやバージョンを管理したいユーザが操作するパーソナルコンピュータ、タブレット端末、スマートフォン等であり、情報端末装置200から管理サーバ100に対し様々なリクエストを送信し、リクエストに対するレスポンスを受信し表示する。
【0022】
ブロックチェーンネットワーク300は、いわゆる分散型台帳技術を用いたシステムであり、本実施例では、文書ファイルIDと文書ファイルのハッシュ値、さらに文書ファイルのファイルサイズ、バージョン情報等をブロックチェーンネットワーク300に送信することによって、登録順にブロックに記憶される。またブロックチェーンネットワーク300に文書ファイルIDを送信することによって、ブロックに記憶した文書ファイルのハッシュ値、さらに文書ファイルのファイルサイズ、バージョン情報、登録日時等をブロックごとに取得する。
【0023】
上述のように構成された文書ファイル管理システム10で実行する文書ファイル登録処理について説明する。
図2は、管理サーバ100と情報端末装置200が実行する文書ファイル登録処理手順を示すフローチャートである。
【0024】
情報端末装置200は、文書ファイルの登録を受付ける(ステップS201)。情報端末装置200は、文書ファイルおよび文書登録要求を管理サーバ100に送信する(ステップS202)。
【0025】
管理サーバ100において、送受信部101は、文書ファイルおよび文書登録要求を受信する(ステップS203)。ID取得部102は、文書ファイルに文書ファイルIDが格納されているか否かを判断する(ステップS204)。文書ファイルに文書ファイルIDが格納されていると判断した場合(ステップS204:Yes)、ID取得部102は、文書ファイルから文書ファイルIDを取得する(ステップS205)。
【0026】
文書ファイルに文書ファイルIDが格納されていないと判断した場合(ステップS204:No)、ID取得部102は、文書ファイルIDを生成する(ステップS206)。ID取得部102は、文書ファイルIDを文書ファイルに格納する(ステップS207)。ハッシュ値算出部103は、文書ファイルのハッシュ値を算出する(ステップS208)。送受信部101は、文書ファイルの文書ファイルIDとハッシュ値をブロックチェーンネットワーク300に送信する(ステップS209)。これにより、文書ファイルIDとハッシュ値は、ブロックチェーンネットワーク300のブロックに記憶される。なお文書ファイルIDとハッシュ値に加え、ファイルサイズ、バージョン情報等をブロックチェーンネットワーク300に送信し、ブロックチェーンネットワーク300のブロックに記憶してもよい。送受信部101は、ID取得部102によって文書ファイルIDを生成したか否かを判断する(ステップS210)。文書ファイルIDを生成していないと判断した場合(ステップS210:No)、処理を終了する。文書ファイルIDを生成したと判断した場合(ステップS210:Yes)、送受信部101は、文書ファイルを情報端末装置200に送信する(ステップS211)。
【0027】
情報端末装置200は、文書ファイルを受信する(ステップS212)。情報端末装置200は、文書ファイルを格納する(ステップS213)。より具体的には、情報端末装置200は、管理サーバ100に送信した文書ファイルを管理サーバ100から受信した文書ファイルに置換える。これにより、当初文書ファイルIDを保持していなかった文書ファイルであっても、ブロックチェーンネットワーク300のブロックに記憶した情報と、情報端末装置200に格納する文書ファイルを文書ファイルIDで紐付けすることができる。
【0028】
このように、文書ファイルに文書ファイルIDを含むとともに、文書ファイルに関する情報を文書ファイルIDに対応付けてブロックチェーンネットワーク300のブロックに記憶させることによって、文書ファイル自体からブロックチェーンネットワーク300を検索する際のキーとなる文書ファイルIDを取得することができるため、文書ファイルと文書ファイルIDを関連付ける仕組み(例えばデータベース等)を設ける必要もなく、文書ファイルのみでブロックチェーンネットワーク300に記憶する文書ファイルに関する情報を参照することができる。
【0029】
また文書ファイルに関する情報としてバージョン情報をブロックに記憶することにより、文書ファイルに複数のバージョンが存在する場合であっても、バージョンごとにブロックチェーンネットワーク300のブロックに文書ファイルに関する情報を記憶することができ、文書ファイルのバージョンごとのハッシュ値を保持することができる。
【0030】
次に文書ファイル管理システム10で実行する文書ファイル改ざん確認処理について説明する。
図3は、管理サーバ100と情報端末装置200が実行する文書ファイル改ざん確認処理手順を示すフローチャートである。
【0031】
情報端末装置200は、検証対象である文書ファイルを受付ける(ステップS301)。例えば文書ファイルの一覧から選択によって文書ファイルを受付けてもよい。情報端末装置200は、文書ファイルと改ざん確認要求を管理サーバ100に送信する(ステップS302)。
【0032】
管理サーバ100の送受信部101は、文書ファイルと改ざん確認要求を情報端末装置200から受信する(ステップS303)。ハッシュ値算出部103は、受信した文書ファイルのハッシュ値を算出する(ステップS304)。ID取得部102は、文書ファイルから文書ファイルIDを取得する(ステップS305)。ハッシュ値取得部105は、文書ファイルIDに対応するハッシュ値をブロックチェーンネットワーク300から取得する(ステップS306)。なお改ざん確認処理において、バージョンが異なる文書ファイルがブロックチェーンネットワーク300に記憶されている場合は、文書ファイルから取得した文書ファイルIDを記憶するブロックのうち、ブロックチェーンネットワーク300に最も新しく登録されたブロック(以下、最新ブロックという)に含まれるハッシュ値と比較することによって改ざんの有無を確認することができる。
【0033】
改ざん判断部106は、ハッシュ値算出部103によって算出した文書ファイルのハッシュ値と、ブロックチェーンネットワーク300から取得したハッシュ値との比較結果に基づき文書ファイルが改ざんされているか否かを判断する(ステップS307)。
【0034】
より具体的には、改ざん判断部106は、検証対象の文書ファイルのハッシュ値とブロックチェーンネットワーク300に記憶されたハッシュ値が一致する場合は、検証対象の文書ファイルは、ブロックチェーンネットワーク300にハッシュ値が記憶された文書ファイルから改ざんされていないと判断する。改ざん判断部106は、検証対象の文書ファイルのハッシュ値とブロックチェーンネットワーク300に記憶された文書ファイルのハッシュ値が一致しない場合は、検証対象の文書ファイルはブロックチェーンネットワーク300にハッシュ値が記憶された文書ファイルから改ざんされていると判断する。
【0035】
送受信部101は、改ざん判断部106による改ざんに関する判断結果を情報端末装置200に送信する(ステップS308)。
【0036】
情報端末装置200は、改ざんに関する判断結果を管理サーバ100から受信する(ステップS309)。情報端末装置200は、改ざんに関する判断結果を表示部に表示する(ステップS310)。
【0037】
このように、ユーザが入手した文書ファイルを管理サーバ100に送信することによって文書ファイルの内容が改ざんされているか否かを判断することができる。また文書ファイルの改ざんの有無をブロックチェーンネットワーク300のブロックに記憶した文書ファイルに関する情報を用いて判断することができるため、電子署名システム等を利用することなく改ざんの有無を判断することができる。なお文書ファイルは、更新内容を増分更新として追記できる旨を上述したが、改ざん確認の対象とする文書ファイルは、更新内容を追記しない文書ファイルでもよい。
【0038】
上述した処理において、検証対象の文書ファイルが改ざんされていないと判断した場合に、ブロックチェーンネットワーク300のブロックに自動的に記録された登録日時を取得することにより、登録日時に文書ファイルが存在したことを証明することもできる。
【0039】
次に文書ファイル管理システム10で実行する文書ファイルバージョン確認処理について説明する。
図4は、管理サーバ100と情報端末装置200が実行する文書ファイルバージョン確認処理手順を示すフローチャートである。
【0040】
情報端末装置200は、検証対象である文書ファイルを受付ける(ステップS401)。例えば文書ファイルの一覧から選択によって文書ファイルを受付けるとともに、バージョン確認のメニューを選択してもよい。情報端末装置200は、文書ファイルとバージョン確認要求を管理サーバ100に送信する(ステップS402)。
【0041】
管理サーバ100の送受信部101は、文書ファイルとバージョン確認要求を情報端末装置200から受信する(ステップS403)。ID取得部102は、文書ファイルから文書ファイルIDを取得する(ステップS404)。ハッシュ値取得部105は、文書ファイルIDに対応するハッシュ値とファイルサイズ、バージョン情報をブロックチェーンネットワーク300から取得する(ステップS405)。なおバージョン確認処理においては、バージョンが異なる複数の文書ファイルに関する情報がブロックチェーンネットワーク300に記憶されていることが想定されるため、文書ファイルIDに対応する、複数のハッシュ値とファイルサイズ、バージョン情報が取得される。バージョン判断部107は、バージョン判断処理を実行する(ステップS406)。詳細は、
図5と
図7を参照して後述する。送受信部101は、文書ファイルのバージョンに関する判断結果を情報端末装置200に送信する(ステップS407)。
【0042】
情報端末装置200は、文書ファイルのバージョンに関する判断結果を管理サーバ100から受信する(ステップS408)。情報端末装置200は、文書ファイルのバージョンに関する判断結果を表示部に表示する(ステップS409)。
【0043】
次に、管理サーバ100で実行するバージョン判断処理について説明する。
図5は、管理サーバ100が実行するバージョン判断処理手順を示すフローチャートである。
【0044】
バージョン判断部107は、検証対象である文書ファイルのファイルサイズを取得する(ステップS501)。バージョン判断部107は、ブロックチェーンネットワーク300から取得した文書ファイルIDに対応するデータのうち、文書ファイルのファイルサイズと一致するデータがあるか否かを判断する(ステップS502)。
図6は、検証対象の文書ファイルのハッシュ値とブロックチェーンネットワークのブロックに記憶されている文書ファイルのハッシュ値のイメージの一例を示す説明図である。
図6に示す例では、ブロックチェーンネットワーク300に記憶されているブロックから3つのバージョンのデータであるハッシュ値、ファイルサイズ、バージョン情報を取得し、そのうちのファイルサイズが一致するデータがあるか否かを判断する。
図6に示す場合は、一致するデータはない。
【0045】
文書ファイルのファイルサイズと一致するデータがあると判断した場合(ステップS502:Yes)、バージョン判断部107は、ハッシュ値が一致するか否かを判断する(ステップS503)。ハッシュ値が一致すると判断した場合(ステップS503:Yes)、バージョン判断部107は、検証対象の文書ファイルのバージョン情報と未登録の更新がされていない旨を判断する(ステップS504)。検証対象の文書ファイルのバージョンは、ファイルサイズが一致し、かつ、ハッシュ値が一致するデータのバーション情報であると判断でき、またブロックチェーンネットワーク300に記憶したデータのファイルサイズが一致することから、バージョン情報に対応する文書ファイルにさらに追加したデータがない、すなわちブロックチェーンネットワーク300に登録されていない更新内容の追記はないと判断することができる。ハッシュ値が一致しないと判断した場合(ステップS503:No)、ステップS505に進む。
【0046】
文書ファイルのファイルサイズと一致するデータがないと判断した場合(ステップS502:No)、すなわちブロックチェーンネットワーク300に登録されていない更新内容の追記があると判断した場合、バージョン判断部107は、文書ファイルのファイルサイズより次に小さいファイルサイズのデータを選択する(ステップS505)。
図6に示す例では、バージョン情報が“バージョン2”のデータが選択される。
【0047】
ハッシュ値算出部103は、文書ファイルの先頭からファイルサイズまでのデータのハッシュ値を算出する(ステップS506)。
図6に示す例では、検証対象の文書ファイルの先頭から“バージョン2”のファイルサイズである“サイズ2”まで、すなわち元文書+更新1までのデータのハッシュ値を算出する。バージョン判断部107は、選択されたデータのハッシュ値と、算出したハッシュ値が一致するか否かを判断する(ステップS507)。ハッシュ値が一致すると判断した場合(ステップS507:Yes)、バージョン判断部107は、検証対象の文書ファイルのバージョン情報と未登録の更新がされている旨を判断する(ステップS508)。検証対象の文書ファイルのバージョンは、ハッシュ値が一致するデータのバーション情報であると判断でき、またブロックチェーンネットワーク300に記憶したデータのファイルサイズが一致しないことから、ブロックチェーンネットワーク300に登録されていない更新内容の追記はあると判断することができる。
【0048】
ハッシュ値が一致しないと判断した場合(ステップS507:No)、バージョン判断部107は、ブロックチェーンネットワーク300から取得した文書ファイルIDに対応するデータがあるか否かを判断する(ステップS509)。データがあると判断した場合(ステップS509:Yes)、ステップS505に戻り、次の処理を実行する。データがないと判断した場合(ステップS509:No)、処理を終了する。
【0049】
このように、ユーザが入手した文書ファイルを管理サーバ100に送信することによって、検証対象の文書ファイルのバージョン情報と、検証対象の文書ファイルに未登録の更新がされているのか否かを確認することができる。また文書ファイルの文書ファイルのバージョンに関する情報をブロックチェーンネットワーク300のブロックに記憶するため、電子署名システム等を利用することなくバージョンを管理することができる。
【0050】
ブロックチェーンネットワーク300のブロックに文書ファイルに関する情報を記憶した登録日時は、ブロックチェーンネットワーク300のブロックに自動的に記録されるため、各バージョンの文書ファイルが存在した日時を証明することもできる。
【0051】
図5で説明したバージョン判断処理に代えて、さらに検証対象の文書ファイルが最新のバージョンであるか否かの判断を加えた、管理サーバ100で実行するバージョン判断処理について説明する。
図7は、管理サーバ100が実行するバージョン判断処理手順を示すフローチャートである。
【0052】
バージョン判断部107は、検証対象である文書ファイルのファイルサイズを取得する(ステップS701)。バージョン判断部107は、検証対象である文書ファイルのファイルサイズと、ブロックチェーンネットワーク300から取得した文書ファイルIDを記憶するブロックのうち、最新ブロックに記憶された文書ファイルのファイルサイズが一致するか否かを判断する(ステップS702)。
【0053】
検証対象である文書ファイルのファイルサイズが最新ブロックに記憶された文書ファイルのファイルサイズと一致すると判断した場合(ステップS702:Yes)、バージョン判断部107は、検証対象である文書ファイルのハッシュ値と、最新ブロックに記憶されたハッシュ値が一致するか否かを判断する(ステップS703)。ハッシュ値が一致すると判断した場合(ステップS703:Yes)、バージョン判断部107は、検証対象の文書ファイルが最新バージョンであり、改ざんなしと判断する(ステップS704)。バージョン判断部107は、検証対象の文書ファイルのバージョンとして、最新ブロックに記憶するバージョン情報を取得する(ステップS705)。バージョン判断部107は、検証対象の文書ファイルに未登録の更新なしと判断する(ステップS706)。検証対象である文書ファイルのハッシュ値と最新ブロックに記憶されたハッシュ値が一致しないと判断した場合(ステップS703:No)、バージョン判断部107は、検証対象の文書ファイルに改ざんありと判断する(ステップS707)。
【0054】
検証対象である文書ファイルのファイルサイズが最新ブロックに記憶された文書ファイルのファイルサイズと一致しないと判断した場合(ステップS702:No)、バージョン判断部107は、検証対象の文書ファイルが最新バージョンでないと判断する(ステップS708)。バージョン判断部107は、次に新しいブロックがあるか否かを判断する(ステップS709)。より具体的には、バージョン判断部107は、現在取得しているブロックの次に新しいブロックに記憶するハッシュ値、ファイルサイズ、バージョン情報、登録日時等を取得しているか否かを判断する。
【0055】
次に新しいブロックがあると判断した場合(ステップS709:Yes)、バージョン判断部107は、次に新しいブロックに記憶されたファイルサイズを取得する(ステップS710)。バージョン判断部107は、検証対象の文書ファイルのファイルサイズと次に新しいブロックに記憶されたファイルサイズが一致するか否かを判断する(ステップS711)。検証対象の文書ファイルのファイルサイズと次に新しいブロックに記憶されたファイルサイズが一致しないと判断した場合(ステップS711:No)、ハッシュ値算出部103は、文書ファイルの先頭から、次に新しいブロックに記憶されたファイルサイズまでのハッシュ値を算出する(ステップS712)。バージョン判断部107は、次に新しいブロックに記憶されたハッシュ値と、算出されたハッシュ値が一致するか否かを判断する(ステップS713)。次に新しいブロックに含まれるハッシュ値と、算出されたハッシュ値が一致しないと判断した場合(ステップS713:No)、ステップS709に戻る。
【0056】
次に新しいブロックに記憶されたハッシュ値と、算出されたハッシュ値が一致すると判断した場合(ステップS713:Yes)、バージョン判断部107は、検証対象の文書ファイルのバージョンとして、次に新しいブロックに記憶されたバージョン情報を取得する(ステップS714)。バージョン判断部107は、検証対象の文書ファイルには未登録の更新ありと判断する(ステップS715)。
【0057】
検証対象の文書ファイルのファイルサイズと次に新しいブロックに記憶されたファイルサイズが一致すると判断した場合(ステップS711:Yes)、バージョン判断部107は、検証対象である文書ファイルのハッシュ値と、次に新しいブロックに記憶されたハッシュ値が一致するか否かを判断する(ステップS716)。ハッシュ値が一致すると判断した場合(ステップS716:Yes)、バージョン判断部107は、検証対象の文書ファイルのバージョンとして、次に新しいブロックに記憶されたバージョン情報を取得する(ステップS717)。バージョン判断部107は、検証対象の文書ファイルには未登録の更新なしと判断する(ステップS718)。ハッシュ値が一致しないと判断した場合(ステップS716:No)、バージョン判断部107は、検証対象の文書ファイルに改ざんありと判断する(ステップS719)。
【0058】
次に新しいブロックがないと判断した場合(ステップS709:No)、バージョン判断部107は、検証対象の文書ファイルに一致するバージョン情報はないと判断する(ステップS720)。
【0059】
このように、検証対象の文書ファイルのファイルサイズやハッシュ値を、ブロックチェーンネットワーク300に記憶した最新ブロックから順に検証していくことによって、検証対象の文書ファイルのバージョン情報、未登録の更新の有無に加え、検証対象の文書ファイルが最新のバージョンであるか否かを判断することができる。
【0060】
次に、検証対象の文書ファイルが最新バージョンか否かを確認する処理について説明する。
図8は、管理サーバ100と情報端末装置200が実行する、文書ファイルの最新バージョン確認処理手順を示すフローチャートである。
【0061】
情報端末装置200は、検証対象である文書ファイルを受付ける(ステップS801)。例えば文書ファイルの一覧から選択によって文書ファイルを受付けるとともに、最新バージョン確認のメニューを選択してもよい。情報端末装置200は、文書ファイルと最新バージョン確認要求を管理サーバ100に送信する(ステップS802)。
【0062】
管理サーバ100の送受信部101は、文書ファイルと最新バージョン確認要求を情報端末装置200から受信する(ステップS803)。ID取得部102は、文書ファイルから文書ファイルIDを取得する(ステップS804)。ハッシュ値取得部105は、ブロックチェーンネットワーク300に格納された、文書ファイルの文書ファイルIDを記憶する最新ブロックからバージョン情報、ファイルサイズ、登録日時を取得する(ステップS805)。バージョン判断部107は、最新バージョン判断処理を実行する(ステップS806)。詳細は、
図9を参照して後述する。送受信部101は、文書ファイルが最新バージョンであるか否かの判断結果を情報端末装置200に送信する(ステップS807)。
【0063】
情報端末装置200は、文書ファイルが最新バーションであるか否かの判断結果を管理サーバ100から受信する(ステップS808)。情報端末装置200は、判断結果を表示部に表示する(ステップS809)。
【0064】
次に、管理サーバ100で実行する最新バージョン判断処理について説明する。
図9は、管理サーバ100が実行する最新バージョン判断処理手順を示すフローチャートである。
【0065】
ハッシュ値算出部103は、検証対象である文書ファイルのハッシュ値を算出する(ステップS901)。ハッシュ値取得部105は、検証対象である文書ファイルの文書ファイルIDとハッシュ値が一致するブロックをブロックチェーンネットワーク300から取得する(ステップS902)。なお検証対象である文書ファイルのハッシュ値に代えて、検証対象である文書ファイルのファイルサイズとし、検証対象である文書ファイルの文書ファイルIDとファイルサイズが一致するブロックをブロックチェーンネットワーク300から取得してもよい。バージョン判断部107は、検証対象である文書ファイルの文書ファイルIDとハッシュ値が一致するブロックが取得できたか否かを判断する(ステップS903)。
【0066】
検証対象である文書ファイルの文書ファイルIDとハッシュ値が一致するブロックが取得できたと判断した場合(ステップS903:Yes)、ハッシュ値取得部105は、取得したブロックに記憶するバージョン情報、ファイルサイズ、登録日時を取得する(ステップS904)。
【0067】
バージョン判断部107は、最新ブロックに記憶するバージョン情報と、取得したブロックに記憶するバーション情報が一致するか否かを判断する(ステップS905)。最新ブロックに記憶するバージョン情報と、取得したブロックに記憶するバーション情報が一致すると判断した場合(ステップS905:Yes)、バージョン判断部107は、最新ブロックに記憶するファイルサイズと、取得したブロックに記憶するファイルサイズが一致するか否かを判断する(ステップS906)。バージョン判断部107は、最新ブロックに記憶するファイルサイズと、取得したブロックに記憶するファイルサイズが一致すると判断した場合(ステップS906:Yes)、バージョン判断部107は、最新ブロックに記憶する登録日時と、取得したブロックに記憶する登録日時が一致するか否かを判断する(ステップS907)。最新ブロックに記憶する登録日時と、取得したブロックに記憶する登録日時が一致すると判断した場合(ステップS907:Yes)、バージョン判断部107は、検証対象の文書ファイルが最新バージョンであると判断する(ステップS908)。
【0068】
最新ブロックに記憶するバージョン情報と、取得したブロックに記憶するバーション情報が一致しないと判断した場合(ステップS905:No)、または、最新ブロックに記憶するファイルサイズと、取得したブロックに記憶するファイルサイズが一致しないと判断した場合(ステップS906:No)、または、最新ブロックに記憶する登録日時と、取得したブロックに記憶する登録日時が一致しないと判断した場合(ステップS907:No)、検証対象の文書ファイルは最新バーションでないと判断する(ステップS909)。
【0069】
検証対象である文書ファイルの文書ファイルIDとハッシュ値が一致するブロックが取得できない、すなわち検証対象である文書ファイルに関する情報がブロックチェーンネットワーク300に登録されていないと判断した場合(ステップS903:No)、検証対象の文書ファイルは最新バーションでないと判断する(ステップS910)。
【0070】
なお、上述した処理では、最新ブロックに記憶するバージョン情報と、取得したブロックに記憶するバーション情報が一致するか否かの判断(ステップS905)、最新ブロックに記憶するファイルサイズと、取得したブロックに記憶するファイルサイズが一致するか否かの判断(ステップS906)、最新ブロックに記憶する登録日時と、取得したブロックに記憶する登録日時が一致するか否かの判断(ステップS907)のすべてが一致する場合に、検証対象の文書ファイルが最新バージョンであると判断したが、それらの判断のうちのいずれか1つ、または、いずれか2つの組合せの判断で一致する場合に、検証対象の文書ファイルが最新バージョンであると判断してもよい。
【0071】
このように、ユーザが入手した文書ファイルを管理サーバ100に送信するだけで、ブロックチェーンネットワーク300のブロックに記憶された最新のバージョンの文書ファイルであるか否かを判断することができる。また検証対象の文書ファイルのバージョンに関する情報をブロックチェーンネットワーク300のブロックに記憶するため、バージョンを管理するための複雑な仕組みを構築する必要なく、検証対象の文書ファイルが最新のバージョンであるか否かを簡便な仕組みで判断することができる。
【実施例2】
【0072】
次に、文書ファイル(より具体的には、文書ファイルに関する情報)をブロックチェーンネットワーク300に登録する際に、登録対象の文書ファイルは登録可であるか否かを判断する処理について説明する。
図10は、実施例2にかかる文書ファイル管理システム20の構成を示すブロック図である。文書ファイル管理システム20は、管理サーバ400と、情報端末装置200と、ブロックチェーンネットワーク300とを備え、管理サーバ400と、情報端末装置200と、ブロックチェーンネットワーク300とを通信ネットワークNを介して通信可能に接続する。
【0073】
管理サーバ400は、情報端末装置200から受信した文書ファイルに関する情報をブロックチェーンネットワーク300に登録可か不可かを判断するサーバである。管理サーバ400は、送受信部101と、ID取得部102と、ハッシュ値算出部103と、ブロックチェーン登録部104と、ハッシュ値取得部105と、改ざん判断部106と、バージョン判断部107と、ファイルサイズ判断部408と、登録可否判断部409と、を備える。本実施例では、実施例1と同一の符号を付した各部は、実施例1と同様の機能、構成であるため、上述した説明を参照し、以下実施例1と異なる点を中心に説明する。
【0074】
ファイルサイズ判断部408は、登録対象である文書ファイルのファイルサイズが、ハッシュ値取得部105によって取得した最新ブロックに記憶するファイルサイズより大きいか否かを判断する。
【0075】
登録可否判断部409は、登録対象である文書ファイルのファイルサイズが、最新のブロックに記憶するファイルサイズより大きいか否かの判断、登録対象である文書ファイルのファイルサイズが、最新のブロックに記憶するファイルサイズに一致するか否かの判断、登録対象である文書ファイルのハッシュ値が最新のブロックに記憶するハッシュ値に一致するか否かの判断に基づき、登録対象である文書ファイルの登録可否を判断する。
【0076】
図11は、管理サーバ400と情報端末装置200が実行する文書ファイル登録可否判断処理手順を示すフローチャートである。
【0077】
情報端末装置200は、文書ファイルの登録を受付ける(ステップS1101)。情報端末装置200は、文書ファイルおよび文書登録要求を管理サーバ400に送信する(ステップS1102)。
【0078】
管理サーバ400において、送受信部101は、文書ファイルおよび文書登録要求を受信する(ステップS1103)。ID取得部102は、文書ファイルに文書ファイルIDが格納されているか否かを判断する(ステップS1104)。文書ファイルに文書ファイルIDが格納されていないと判断した場合(ステップS1104:No)、ID取得部102は、文書ファイルIDを生成する(ステップS1105)。ID取得部102は、文書ファイルIDを文書ファイルに格納する(ステップS1106)。
【0079】
文書ファイルに文書ファイルIDが格納されていると判断した場合(ステップS1104:Yes)、ID取得部102は、文書ファイルから文書ファイルIDを取得する(ステップS1107)。次に、文書ファイル登録可否判断処理を実行する(ステップS1108)。文書ファイル登録可否判断処理の詳細は、
図12を用いて後述する。文書ファイル登録可否判断処理に基づき、文書ファイルが登録可か否かを判断する(ステップS1109)。文書ファイルが登録可と判断した場合(ステップS1109:Yes)、ステップS1111に進む。文書ファイルが登録不可と判断した場合(ステップS1109:No)、送受信部101は、文書ファイルが登録不可である旨のメッセージを情報端末装置200に送信する(ステップS1110)。
【0080】
ハッシュ値算出部103は、文書ファイルのハッシュ値を算出する(ステップS1111)。送受信部101は、文書ファイルの文書ファイルIDとハッシュ値をブロックチェーンネットワーク300に送信する(ステップS1112)。これにより、登録可である文書ファイルの文書ファイルIDとハッシュ値は、ブロックチェーンネットワーク300のブロックに記憶される。なお文書ファイルIDとハッシュ値に加え、ファイルサイズ、バージョン情報等をブロックチェーンネットワーク300に送信し、ブロックチェーンネットワーク300のブロックに記憶してもよい。送受信部101は、ID取得部102によって文書ファイルIDを生成したか否かを判断する(ステップS1113)。文書ファイルIDを生成していないと判断した場合(ステップS1113:No)、処理を終了する。文書ファイルIDを生成したと判断した場合(ステップS1113:Yes)、送受信部101は、文書ファイルIDを記憶した文書ファイルを情報端末装置200に送信する(ステップS1114)。
【0081】
情報端末装置200は、文書ファイルIDを記憶した文書ファイルを受信する(ステップS1115)。情報端末装置200は、文書ファイルIDを記憶した文書ファイルを格納する(ステップS1116)。より具体的には、情報端末装置200は、管理サーバ400に送信した文書ファイルを管理サーバ400から受信した文書ファイルに置換える。これにより、当初文書ファイルIDを保持していなかった文書ファイルを文書ファイルIDを記憶した文書ファイルに置換えることができ、ブロックチェーンネットワーク300のブロックに記憶した文書ファイルに関する情報と、情報端末装置200に格納する文書ファイルを文書ファイルIDで紐付けすることができる。
【0082】
次に、管理サーバ400で実行する、文書ファイルの登録可否判断処理を説明する。
図12は、管理サーバ400が実行する文書ファイルの登録可否判断処理手順を示すフローチャートである。
【0083】
ハッシュ値取得部105は、登録対象である文書ファイルの文書ファイルIDが一致する最新ブロックをブロックチェーンネットワーク300から取得する(ステップS1201)。ハッシュ値取得部105は、最新ブロックに記憶するファイルサイズを取得する(ステップS1202)。
【0084】
バージョン判断部107は、最新ブロックに記憶するファイルサイズと、登録対象である文書ファイルのファイルサイズが一致するか否かを判断する(ステップS1203)。最新ブロックに記憶するファイルサイズと、登録対象である文書ファイルのファイルサイズが一致しないと判断した場合(ステップS1203:No)、ファイルサイズ判断部408は、登録対象である文書ファイルのファイルサイズが最新ブロックに記憶するファイルサイズより大きいか否かを判断する(ステップS1204)。
【0085】
登録対象である文書ファイルのファイルサイズが最新ブロックに記憶するファイルサイズより大きいと判断した場合(ステップS1204:Yes)、ハッシュ値算出部103は、登録対象である文書ファイルの先頭から、最新ブロックに記憶するファイルサイズまでのハッシュ値を算出する(ステップS1205)。バージョン判断部107は、算出したハッシュ値と、最新ブロックに記憶するハッシュ値が一致するか否かを判断する(ステップS1206)。算出したハッシュ値と、最新ブロックに記憶するハッシュ値が一致すると判断した場合(ステップS1206:Yes)、登録可否判断部409は、登録対象である文書ファイルは登録可と判断する(ステップS1207)。算出したハッシュ値と、最新ブロックに記憶するハッシュ値が一致しないと判断した場合(ステップS1206:No)、登録可否判断部409は、登録対象である文書ファイルに改ざんあり、登録対象である文書ファイルは登録不可と判断する(ステップS1208)。
【0086】
登録対象である文書ファイルのファイルサイズが最新ブロックに記憶するファイルサイズより大きくないと判断した場合(ステップS1204:No)、登録可否判断部409は、登録対象である文書ファイルは登録不可と判断する(ステップS1209)。
【0087】
最新ブロックに記憶するファイルサイズと、登録対象である文書ファイルのファイルサイズが一致すると判断した場合(ステップS1203:Yes)、ハッシュ値算出部103は、登録対象である文書ファイルのハッシュ値を算出する(ステップS1210)。バージョン判断部107は、算出したハッシュ値と、最新ブロックに記憶するハッシュ値が一致するか否かを判断する(ステップS1211)。算出したハッシュ値と、最新ブロックに記憶するハッシュ値が一致すると判断した場合(ステップS1211:Yes)、登録可否判断部409は、登録対象である文書ファイルは既に登録済みであり、登録不可と判断する(ステップS1212)。算出したハッシュ値と、最新ブロックに記憶するハッシュ値が一致しないと判断した場合(ステップS1211:No)、登録可否判断部409は、登録対象である文書ファイルは改ざんあり、登録不可と判断する(ステップS1213)。
【0088】
このように、文書ファイルに関する情報をブロックチェーンネットワーク300に登録して管理する場合に、新たな文書ファイル、または、既にブロックチェーンネットワーク300に記憶する各バージョンに対応するブロックのなかから最新ブロックに対応する文書ファイルに更新内容を追加するような文書ファイル以外の文書ファイルは、登録不可と判断し登録しないことによって、ブロックチェーンネットワーク300によって、分岐するバージョンが存在しないように文書ファイルを管理することができる。例えば、
図6の元文書の文書ファイル、元文書+更新1の文書ファイル、元文書+更新1+更新2の文書ファイルに関する情報が登録されている場合、元文書+更新1+更新3の文書ファイルに関する情報をブロックチェーンネットワーク300に登録しようとした場合には登録不可と判断され、文書ファイルに関する情報は登録されない。
【0089】
上述した実施例にかかる管理サーバ100、情報端末装置200、管理サーバ400のハードウェア構成は、CPU(Central Processing Unit)、ROM(Read Only Memory)やRAM(Random Access Memory)、HDD(Hard Disk Drive)等の外部記憶装置、通信制御装置等を備えた通常のコンピュータであり、ROMやRAM、HDD等に記憶されたプログラムをCPUが読み出し動作させることによって、上述した構成や機能を実現する。
【0090】
管理サーバ100、情報端末装置200、管理サーバ400で動作するプログラムは、インターネット等のネットワークに接続されたコンピュータ上に格納しておき、ネットワーク経由でダウンロードさせることにより提供したり、インストール可能な形式又は実行可能な形式のファイルでCD−ROM、DVD、USBメモリ、SDカード等のコンピュータで読取り可能な記録媒体に記録し提供してもよい。また、上述した機能や処理を実現するプログラムは、API(Application Programming Interface)やSaaS(Software as a Service)、クラウドコンピューティングという利用形態で提供してもよい。
【0091】
なお、本発明は、上述した実施例そのままに限定されるものではなく、必ずしも物理的に図示のように構成されている必要はない。また、本発明は、実施例で説明した構成要素の全部または一部を、各種の負荷や使用状況などに応じ、任意の単位で機能的または物理的に分割、統合、入替、変形または削除して構成することができる。