(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024147286
(43)【公開日】2024-10-16
(54)【発明の名称】データ管理装置およびデータ管理方法
(51)【国際特許分類】
H04L 9/32 20060101AFI20241008BHJP
G06F 21/62 20130101ALI20241008BHJP
G06F 21/64 20130101ALI20241008BHJP
【FI】
H04L9/32 200Z
G06F21/62
G06F21/64
【審査請求】未請求
【請求項の数】11
【出願形態】OL
(21)【出願番号】P 2023060208
(22)【出願日】2023-04-03
(71)【出願人】
【識別番号】000003207
【氏名又は名称】トヨタ自動車株式会社
(71)【出願人】
【識別番号】519026250
【氏名又は名称】株式会社Scalar
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】山室 直樹
(72)【発明者】
【氏名】松本 茂樹
(72)【発明者】
【氏名】中西 陽平
(72)【発明者】
【氏名】熊澤 良哉
(72)【発明者】
【氏名】深津 航
(57)【要約】
【課題】複数の台帳を含む分散型台帳が用いられる場合にデータの順序性を効率的に証明する。
【解決手段】クライアントサーバ3は、分散型台帳6が格納されたストレージ36を備える。分散型台帳6は、ファイルから各々が生成される少なくとも1つのハッシュ値が時系列に格納された複数の証拠チェーン63X,63Y,63Zと、確定時刻を各々が証明するための少なくとも1つのタイムスタンプトークンが時系列に格納されたタイムスタンプチェーン64とを含む。クライアントサーバ3は、さらに、タイムスタンプチェーンを更新する更新処理を繰り返し実行するプロセッサ31を備える。更新処理は、更新処理の前回実行時から、ファイルの変更に伴いハッシュ値が変更された少なくとも1つの証拠チェーンを特定し、少なくとも1つの証拠チェーンの各々の終端ハッシュ値に基づいて生成される終端値に対して、タイムスタンプトークンを取得する処理を含む。
【選択図】
図28
【特許請求の範囲】
【請求項1】
分散型台帳が格納された記憶装置を備え、
前記分散型台帳は、
ファイルから各々が生成される少なくとも1つのハッシュ値が時系列に格納された複数の証拠チェーンと、
確定時刻を各々が証明するための少なくとも1つのタイムスタンプトークンが時系列に格納されたタイムスタンプチェーンとを含み、さらに、
前記タイムスタンプチェーンを更新する更新処理を繰り返し実行するプロセッサを備え、
前記更新処理は、
前記複数の証拠チェーンの中から、前記更新処理の前回実行時から、前記ファイルの変更に伴いハッシュ値が変更された少なくとも1つの証拠チェーンを特定し、
前記少なくとも1つの証拠チェーンの各々の終端ハッシュ値に基づいて生成される終端値に対して、タイムスタンプトークンを取得する処理を含む、データ管理装置。
【請求項2】
前記プロセッサは、前記終端値の生成に際して、前記更新処理の前回実行時から変更されていない前記終端ハッシュ値を用いない、請求項1に記載のデータ管理装置。
【請求項3】
前記プロセッサは、予め定められた期間が経過するごとに前記更新処理を実行する、請求項1に記載のデータ管理装置。
【請求項4】
前記プロセッサは、第1検証処理~第3検証処理を実行するように構成され、
前記第1検証処理は、前記少なくとも1つのハッシュ値から生成される少なくとも1つのファイルが改ざんされたかどうかを検証する処理であり、
前記第2検証処理は、前記少なくとも1つのタイムスタンプトークンにより証明されりる少なくとも1つの確定時刻が改ざんされたかどうかを検証する処理であり、
前記第3検証処理は、前記少なくとも1つのファイルおよび前記少なくとも1つの確定時刻の順序性を検証する処理である、請求項1~3のいずれか1項に記載のデータ管理装置。
【請求項5】
前記プロセッサは、入力装置に対するユーザの操作に従って、前記第1検証処理~前記第3検証処理のうちの少なくとも1つの処理を実行する、請求項4に記載のデータ管理装置。
【請求項6】
前記プロセッサは、前記入力装置に対して第1ユーザ操作が行われた場合、前記少なくとも1つのファイルおよび前記少なくとも1つの確定時刻のうち、前記ユーザにより選択された一部に対して、前記第1検証処理~前記第3検証処理を実行する、請求項5に記載のデータ管理装置。
【請求項7】
前記プロセッサは、前記ユーザにより2以上のファイルが選択された場合に、少なくとも、最も古いファイルと、前記最も古いファイルの直前の確定時刻と、最も新しいファイルと、前記最も新しいファイルの直後の確定時刻とを検証の対象とする、請求項6に記載のデータ管理装置。
【請求項8】
前記プロセッサは、前記2以上のファイルの間に他の確定時刻が存在する場合に、前記他の確定時刻をさらに検証の対象とする、請求項7に記載のデータ管理装置。
【請求項9】
前記プロセッサは、前記入力装置に対して第2ユーザ操作が行われた場合、前記少なくとも1つのファイルおよび前記少なくとも1つの確定時刻の全部に対して、前記第1検証処理~前記第3検証処理を実行する、請求項5に記載のデータ管理装置。
【請求項10】
前記プロセッサは、前記入力装置に対して第3ユーザ操作が行われた場合、前記第3検証処理を実行する一方で、前記第1検証処理および前記第2検証処理を非実行とする、請求項5に記載のデータ管理装置。
【請求項11】
分散型台帳を用いたデータ管理方法であって、
前記分散型台帳は、
ファイルから各々が生成される少なくとも1つのハッシュ値が時系列に格納された複数の証拠チェーンと、
確定時刻を各々が証明するための少なくとも1つのタイムスタンプトークンが時系列に格納されたタイムスタンプチェーンとを含み、
前記データ管理方法は、
前記複数の証拠チェーンの中から、前記タイムスタンプチェーンを更新する更新処理の前回実行時から、前記ファイルの変更に伴いハッシュ値が変更された少なくとも1つの証拠チェーンを特定するステップと、
前記少なくとも1つの証拠チェーンの各々の終端ハッシュ値に基づいて生成される終端値に対して、タイムスタンプトークンを取得するステップとを含む、データ管理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、データ管理装置およびデータ管理方法に関し、より特定的には、分散型台帳技術(DLT:Distributed Ledger Technology)を用いるデータ管理装置およびデータ管理方法に関する。
【背景技術】
【0002】
特許第6694204号公報(特許文献1)は、分散型台帳技術が適用されたデータ管理システムを開示する。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
分散型台帳技術を用いてデータ(ファイルおよび確定時刻)を管理するデータ管理装置またはデータ管理方法が提案されている。複数の台帳(後述するチェーン)を含む分散型台帳が用いられる場合に、データの順序性の証明を効率的に行う要望が存在する。
【0005】
本開示は上記課題を解決するためになされたものであり、本開示の目的の1つは、複数の台帳を含む分散型台帳が用いられる場合にデータの順序性を効率的に証明することである。
【課題を解決するための手段】
【0006】
(1)本開示の第1局面に係るデータ管理装置は、分散型台帳が格納された記憶装置を備える。分散型台帳は、ファイルから各々が生成される少なくとも1つのハッシュ値が時系列に格納された複数の証拠チェーンと、確定時刻を各々が証明するための少なくとも1つのタイムスタンプトークンが時系列に格納されたタイムスタンプチェーンとを含む。データ管理装置は、さらに、タイムスタンプチェーンを更新する更新処理を繰り返し実行するプロセッサを備える。更新処理は、複数の証拠チェーンの中から、更新処理の前回実行時から、ファイルの変更に伴いハッシュ値が変更された少なくとも1つの証拠チェーンを特定し、少なくとも1つの証拠チェーンの各々の終端ハッシュ値に基づいて生成される終端値に対して、タイムスタンプトークンを取得する処理を含む。
【0007】
(2)プロセッサは、終端値の生成に際して、更新処理の前回実行時から変更されていない終端ハッシュ値を用いない。
【0008】
上記(1),(2)の構成においては、更新処理の前回実行時からファイルが変更された証拠チェーンについてタイムスタンプトークンが取得され、ファイルが変更されていない証拠チェーンについてはタイムスタンプトークンは取得されない。これにより、ファイルが変更されていない証拠チェーンについてのタイムスタンプトークンの取得コストが低減される。よって、上記(1),(2)の構成によれば、ファイルおよび確定時刻の順序性を効率的に証明できる。
【0009】
(3)プロセッサは、予め定められた期間が経過するごとに更新処理を実行する。
【0010】
上記(3)の構成においては、更新処理が定期的に実行される。これにより、いずれかのファイルが変更される度に更新処理が実行される場合と比べて、証明コストを低減できる。また、更新処理が不定期に実行される場合と比べて、長期的に着実な検証が可能になる。
【0011】
(4)プロセッサは、第1検証処理~第3検証処理を実行するように構成されている。第1検証処理は、少なくとも1つのハッシュ値から生成される少なくとも1つのファイルが改ざんされたかどうかを検証する処理である。第2検証処理は、少なくとも1つのタイムスタンプトークンにより証明されりる少なくとも1つの確定時刻が改ざんされたかどうかを検証する処理である。第3検証処理は、少なくとも1つのファイルおよび少なくとも1つの確定時刻の順序性を検証する処理である。
【0012】
上記(4)の構成においては、第1検証処理によりファイルの完全性(ファイルが改ざんされたかどうか)を検証可能である。第2検証処理により確定時刻の完全性(確定時刻が改ざんされたかどうか)を検証可能である。第3検証処理により分散型台帳におけるファイルおよび確定時刻の順序性を検証可能である。よって、上記(4)の構成によれば、ファイルおよび確定時刻が適切に管理されているかどうかを検証できる。
【0013】
(5)プロセッサは、入力装置に対するユーザの操作に従って、第1検証処理~第3検証処理のうちの少なくとも1つの処理を実行する。
【0014】
上記(5)の構成においては、第1検証処理~第3検証処理のうちの少なくとも1つの処理がユーザの操作に従って実行される。よって、上記(5)の構成によれば、ユーザが要求する検証をユーザ所望のタイミングで行うことができる。
【0015】
(6)プロセッサは、入力装置に対して第1ユーザ操作が行われた場合、少なくとも1つのファイルおよび少なくとも1つの確定時刻のうち、ユーザにより選択された一部に対して、第1検証処理~第3検証処理を実行する。
【0016】
上記(6)の構成においては、第1ユーザ操作が行われた場合に、ユーザにより選択された一部のファイルおよび/または一部の確定時刻に検証対象が限定される。これにより、全てのファイルおよび全ての確定時刻を検証対象とする場合と比べて、検証コスト(工数、時間、システム負荷など)が低減される。よって、上記(6)の構成によれば、ファイルおよび確定時刻が適切に管理されているかどうかを効率的に検証できる。
【0017】
(7)プロセッサは、ユーザにより2以上のファイルが選択された場合に、少なくとも、最も古いファイルと、最も古いファイルの直前の確定時刻と、最も新しいファイルと、最も新しいファイルの直後の確定時刻とを検証の対象とする。
【0018】
上記(7)の構成においては、最も古いファイルの直前の確定時刻と、最も新しいファイルの直後の確定時刻とが検証の対象とされる。これにより、上記直前の確定時刻および上記直後の確定時刻に、ユーザにより選択された2以上のファイルのうち、どのファイルが存在しており、どのファイルが存在していなかったかを証明できる。言い換えると、ユーザにより選択された2以上のファイルが上記直前の確定時刻と上記直後の確定時刻との間に分散型台帳に格納されたものであることを証明できる。よって、上記(7)の構成によれば、ファイルおよび確定時刻の順序性を簡易なユーザ操作で効果的に検証できる。
【0019】
(8)プロセッサは、2以上のファイルの間に他の確定時刻が存在する場合に、他の確定時刻をさらに検証の対象とする。
【0020】
上記(8)の構成においては、2以上のファイルの間に存在する他の確定時刻も検証される。これにより、当該他の確定時刻に、どのファイルが存在しており、どのファイルが存在していなかったかも証明できる。よって、上記(8)の構成によれば、ファイルおよび確定時刻の順序性を、より詳細に検証できる。
【0021】
(9)プロセッサは、入力装置に対して第2ユーザ操作が行われた場合、少なくとも1つのファイルおよび少なくとも1つの確定時刻の全部に対して、第1検証処理~第3検証処理を実行する。
【0022】
上記(9)の構成においては、第2ユーザ操作が行われた場合に、全てのファイルの完全性および全ての確定時刻の完全性が検証される。よって、上記(9)の構成によれば、ファイルおよび確定時刻の完全性を徹底的に検証できる。
【0023】
(10)プロセッサは、入力装置に対して第3ユーザ操作が行われた場合、第3検証処理を実行する一方で、第1検証処理および第2検証処理を非実行とする。
【0024】
上記(10)の構成においては、第3ユーザ操作が行われた場合に、ファイルおよび確定時刻の順序性が選択的に検証される。よって、上記(10)の構成によれば、ファイルおよび確定時刻の完全性の検証が要求されない場合に、ファイルおよび確定時刻の順序性を効率的に検証できる。
【0025】
(11)本開示の第2局面に係るデータ管理方法は、分散型台帳を用いる。分散型台帳は、ファイルから各々が生成される少なくとも1つのハッシュ値が時系列に格納された複数の証拠チェーンと、確定時刻を各々が証明するための少なくとも1つのタイムスタンプトークンが時系列に格納されたタイムスタンプチェーンとを含む。データ管理方法は、複数の証拠チェーンの中から、更新処理の前回実行時から、ファイルの変更に伴いハッシュ値が変更された少なくとも1つの証拠チェーンを特定するステップと、少なくとも1つの証拠チェーンの各々の終端ハッシュ値に基づいて生成される終端値に対して、タイムスタンプトークンを取得するステップとを含む。
【0026】
上記(11)の方法によれば、上記(1)の構成と同様に、複数の台帳を含む分散型台帳が用いられる場合にデータの順序性を効率的に証明できる。
【発明の効果】
【0027】
本開示によれば、複数の台帳を含む分散型台帳が用いられる場合にデータの順序性を効率的に証明できる。
【図面の簡単な説明】
【0028】
【
図1】本開示の実施の形態1に係るデータ管理システムの全体構成の一例を示す図である。
【
図2】クライアントサーバの構成の一例を示す図である。
【
図3】分散型台帳のデータ構造の一例を示す図である。
【
図4】証拠チェーンおよびタイムスタンプチェーンにおけるレコード間の関係を説明するための概念図である。
【
図5】クライアントサーバのプロセッサが有する主要な機能に関する機能ブロック図である。
【
図12】実施の形態1における検証処理全体の処理手順を示すフローチャートである。
【
図13】ユーザが検証機能を選択するためのユーザインターフェイスの一例を示す図である。
【
図14】「全ファイルを検証」が選択された場合に検証結果が表示されるユーザインターフェイスの一例を示す図である。
【
図15】「全ファイルを検証」が選択された場合の第3ボックスにおける検証結果の表示の一例を示す図である。
【
図16】「選択されたファイルを検証」が選択された場合に検証処理の開始前に表示されるUIの一例を示す図である。
【
図17】ファイル選択ボックスにおける表示の一例を示す図である。
【
図18】「選択されたファイルを検証」が選択された場合に検証結果が表示されるUIの一例を示す図である。
【
図19】「選択されたファイルを検証」が選択された場合の第3ボックスにおける検証結果の詳細の表示の一例を示す図である。
【
図20】ファイル選択ボックスにおける表示の他の一例を示す図である。
【
図21】「選択されたファイルを検証」が選択された場合の第3ボックスにおける検証結果の詳細の表示の他の一例を示す図である。
【
図22】「順序性のみ検証」が選択された場合に検証処理の開始前に表示されるユーザインターフェイスの一例を示す図である。
【
図23】「順序性のみ検証」が選択された場合に検証結果が表示されるユーザインターフェイスの一例を示す図である。
【
図24】「順序性のみ検証」が選択された場合の第3ボックスにおける検証結果の詳細の表示の一例を示す図である。
【
図25】実施の形態2における分散型台帳のデータ構造の一例を示す図である。
【
図26】実施の形態2において証拠チェーンおよびタイムスタンプチェーンに格納されたレコード間の関係を説明するための概念図である。
【
図27】実施の形態2におけるレコード作成部の機能ブロック図である。
【
図28】実施の形態2におけるタイムスタンプチェーンの更新処理の処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【0029】
以下、本開示の実施の形態について、図面を参照しながら詳細に説明する。図中同一または相当部分には同一符号を付して、その説明は繰り返さない。
【0030】
[実施の形態1]
<システム構成>
図1は、本開示の実施の形態1に係るデータ管理システムの全体構成の一例を示す図である。データ管理システム1は、分散型台帳技術を用いてデータを管理するシステムである。データ管理システム1により管理されるデータは、ファイルおよび確定時刻である。ファイルの種類およびデータ形式は特に限定されない。ファイルは、車両(または車両の構成部品)の設計データであってもよいし、車両の制御プログラムであってもよいし、車両の仕様または開発ノウハウが記載された文書ファイルであってもよい。確定時刻とは、時刻認証局(TSA:Time Stamp Authority)から取得されるタイムスタンプトークンにより証明される時刻(典型的には年・月・日・時・分・秒を含む時刻)である。確定時刻を確定日付と呼んでもよい。
【0031】
データ管理システム1は、たとえば、プラットフォームサーバ2と、複数のクライアントサーバ3A~3Dとを備える。この例では4台のクライアントサーバがデータ管理システム1に含まれる例について説明する。しかし、クライアントサーバの台数は2以上であればよい。
【0032】
プラットフォームサーバ2はネットワークNWを管理する。ネットワークNWは、たとえば複数の企業間に形成されたコンソーシアムネットワークである。プラットフォームサーバ2は、クライアントサーバからのネットワークNWへの参加申請を受け付ける。プラットフォームサーバ2は、プラットフォームサーバ2の管理者による操作に基づき、または所定の条件の判定結果に基づき、クライアントサーバのネットワークNWへの参加を許可する。
【0033】
4台のクライアントサーバ3A~3Dは、企業A~Dにそれぞれ帰属するサーバである。クライアントサーバ3A~3Dには分散型台帳基盤のソフトウェアが導入されている。分散型台帳基盤のソフトウェアが機能することにより、クライアントサーバ3A~3Dの各々がノードとして機能する。以下では、企業Aに帰属するクライアントサーバ3Aについて代表的に説明するが、他の企業B~Dに帰属するクライアントサーバ3B~3Dも同様の構成および機能を有する。なお、クライアントサーバ3A~3Dの各々は、本開示に係る「データ管理装置」に相当する。
【0034】
クライアントサーバ3Aは、時刻認証局41Aと、ユーザ端末42Aと、データベース43Aとに通信可能に接続されている。
【0035】
時刻認証局41Aは、申請者であるクライアントサーバ3Aからのタイムスタンプ発行要求に応答してタイムスタンプトークンを発行する。タイムスタンプトークンとは、申請者から受信したファイル(実施の形態1では後述のレコードハッシュ値)に、国際標準時に追跡性がある時刻源に基づく時刻情報を結合させたものである。時刻認証局41Aは、公的な証明書を発行可能なパブリック認証局であることが好ましい。クライアントサーバ3A~3Dの一部または全部の間で時刻認証局が共通であってもよい。
【0036】
ユーザ端末42Aは、ユーザ(たとえば企業Aの従業員)に貸与された情報処理端末であって、PC(Personal Computer)、スマートフォン、タブレットなどである。ユーザ端末42Aは、クライアントサーバ3Aの入力装置34および/または出力装置35(
図2参照)として機能する。
【0037】
データベース43Aは、書き換え可能な記憶装置であって、HDD(Hard Disk Drive)、SSD(Solid State Drive)、フラッシュメモリなどである。ユーザがクライアントサーバ3Aの入力装置34(
図2参照)またはユーザ端末42Aに対してファイルまたは確定時刻の登録および/または更新を要求する操作を行うと、クライアントサーバ3Aは、当該操作に応答して制御信号をデータベース43Aに出力する。データベース43Aは、クライアントサーバ3Aからの制御信号に従ってファイルまたは確定時刻を記憶(登録および/または更新)する。クライアントサーバ3A~3Dの一部または全部の間でデータベースが共有されていてもよい。
【0038】
図2は、クライアントサーバ3Aの構成の一例を示す図である。
図1および
図2を参照して、クライアントサーバ3Aは、プロセッサ31と、メモリ32と、通信装置33と、入力装置34と、出力装置35と、ストレージ36とを備える。クライアントサーバ3Aの構成要素はバス37により互いに通信可能に接続されている。
【0039】
プロセッサ31は、CPU(Central Processing Unit)、MPU(Micro-Processing Unit)などの演算処理装置である。メモリ32は、ROM(Read Only Memory)と、RAM(Random Access Memory)とを含む。メモリ32には、OS(Operating System)を含むシステムプログラムと、制御演算に必要なコンピュータ読み取り可能なコードを含む制御プログラムとが格納されている。プロセッサ31は、システムプログラムおよび制御プログラムを読み出してメモリ32に展開して実行することで様々な処理を実現する。プロセッサ31は、後に詳しく説明するが、ファイルまたは確定時刻をデータベース43に記憶させたり、時刻認証局41Aからタイムスタンプトークンを取得したり、分散型台帳を更新するためのトランザクションデータを生成したりする。
【0040】
なお、
図2にはクライアントサーバ3Aが1つのプロセッサのみを含む例を示すが、クライアントサーバ3Aが複数のプロセッサを含んでもよい。すなわち、クライアントサーバ3Aは1以上のプロセッサを含む。メモリ32およびストレージ36についても同様である。本明細書において、「プロセッサ」は、ストアードプログラム方式で処理を実行する狭義のプロセッサに限られず、ASIC(Application Specific Integrated Circuit)、FPGA(Field-Programmable Gate Array)などのハードワイヤード回路を含み得る。そのため、「プロセッサ」との用語は、コンピュータ読み取り可能なコードおよび/またはハードワイヤード回路によってあらかじめ処理が定義された処理回路(processing circuitry)と読み替えることもできる。
【0041】
通信装置33は、クライアントサーバ3Aの外部機器と通信する。外部機器は、プラットフォームサーバ2、他のクライアントサーバ3B~3D、時刻認証局41A、ユーザ端末42A、データベース43Aなどを含む。
【0042】
入力装置34は、ユーザによる操作を受け付け可能な装置であって、マウス、キーボード、タッチパネルなどである。出力装置35は、ユーザに情報を提供可能な装置であって、典型的にはディスプレイである。
【0043】
ストレージ36は、書き換え可能な記憶装置であって、HDD、SSD、フラッシュメモリなどである。ストレージ36は、秘密鍵51と、複数の公開鍵52と、分散型台帳6とを記憶している。
【0044】
秘密鍵51は、企業Aが管理する秘密鍵である。複数の公開鍵52は企業B~Dの公開鍵を含む。複数の公開鍵52は、企業A自身の公開鍵を含んでもよい。たとえば、クライアントサーバ3AがネットワークNWに最初に参加するにあたり、プロセッサ31は、秘密鍵および公開鍵を生成する。そして、プロセッサ31は、生成された公開鍵を認証局(図示せず)に送信して認証を受ける。認証局は、公開鍵の情報を含めた電子証明書を発行する。プロセッサ31は、認証を受けた公開鍵に対応する秘密鍵51をストレージ36に記憶させる。また、プロセッサ31は、認証を受けた公開鍵(電子証明書)62を、他の企業B~Dのクライアントサーバ3B~3Dに送信する。クライアントサーバ3B~3Dの各々も同様に、自身の公開鍵を自身以外のクライアントサーバに送信する。
【0045】
分散型台帳6は複数の台帳を含む。各台帳はチェーン構造(より詳細には有向無閉路グラフ(DAG:Directed Acyclic Graph)構造)を有するため、以下、台帳を「チェーン」とも称する。実施の形態1では、予め定められた対象ごと(たとえば車両ごと、構成部品ごと、制御プログラムごと、仕様書ごと)に後述する2種類のチェーンが準備される。クライアントサーバ3は、ファイルおよび/または確定時刻をデータベース43に記憶させるのに伴い、当該ファイルおよび/または確定時刻に関する情報を上記2種類のチェーンに格納する。
【0046】
以下、クライアントサーバ3A~3Dを特に区別しない場合には、参照符号にA~Dを付さず、「クライアントサーバ3」と記載する。時刻認証局、ユーザ端末およびデータベースについても同様である。
【0047】
<分散型台帳>
図3は、分散型台帳6のデータ構造の一例を示す図である。分散型台帳6は、たとえば、複数の証拠チェーン61と、複数のタイムスタンプチェーン62とを含む。紙面の都合上、
図3には2種類のチェーンが1つずつ図示されている。実施の形態1では、1つの証拠チェーン61と1つのタイムスタンプチェーン62とが互いに関連付けられている。ただし、後に実施の形態2にて説明するように、複数の証拠チェーン61が1つのタイムスタンプチェーン62に関連付けられていてもよい。
【0048】
証拠チェーン61は、ファイルに関するレコードが時系列に格納された台帳である。
図3に示す例では、証拠チェーン61は5つのレコードR11~R15を含む。各レコードは、キー(Key)と、世代(Age)と、データ(Data)と、ナンス値(Nonce)と、電子署名(Sig)と、前レコードハッシュ値(Prev-RH)と、レコードハッシュ値(RH)とを含む。
【0049】
キーは、証拠チェーン61を識別するための識別情報(ID)である。対象(車両、構成部品、制御プログラム、仕様書など)の識別情報をキーとして用いてもよい。この例では証拠チェーン61にKey=k1が割り当てられている。これにより、Key=k1であるレコードが証拠チェーン61に格納される。
【0050】
世代は、レコードの順序を示す情報である。最初のレコードの世代は1である。そして、ファイルおよび/または確定時刻が更新されてレコードが追加される度に世代がインクリメントされる。以下、最初(最古)のレコードを「始端レコード」とも称する。最後(最新)のレコードを「終端レコード」とも称する。
【0051】
証拠チェーン61におけるデータは、ファイルから生成されるハッシュ値(以下「ファイルハッシュ値」とも記載する)である。ファイルが更新されると、更新されたファイルをハッシュ関数を用いてハッシュ化することによりハッシュ値が生成される。そして、生成されたハッシュ値がファイルハッシュ値として格納される。この例では、5つのレコードR11~R15にファイルハッシュ値FH1~FH5がそれぞれ格納されている。なお、ファイルハッシュ値は、本開示に係る「ハッシュ値」に相当する。
【0052】
ナンス値は、トランザクションデータの番号を示す値である。ナンス値は、たとえば、ファイルが更新された場合にファイルハッシュ値を証拠チェーン61に格納する処理の番号として用いられる。
【0053】
電子署名は、トランザクションデータを発行したクライアントサーバ3の本人確認のための情報である。電子署名は、たとえば、トランザクションデータを発行したクライアントサーバ3の秘密鍵51によりファイルハッシュ値を暗号化することで作成される。
【0054】
前レコードハッシュ値は、当該レコードの1つ前の世代のレコード(言い換えると親レコード)のレコードハッシュ値である。
【0055】
レコードハッシュ値は、当該レコードのハッシュ値である。レコードハッシュ値は、レコードハッシュ値以外のレコードの情報(Key、Age、Data、Nonce、SigおよびPrev-RHなど)をハッシュ関数を用いてハッシュ化することにより生成される。
【0056】
証拠チェーン61の終端レコード(Age=6のレコード)R15のレコードハッシュ値は「h5」である。終端レコードR15の前レコードハッシュ値は、親レコード(Age=5のレコード)R14のレコードハッシュ値の「h4」である。レコードR14の前レコードハッシュ値は、親レコード(Age=3のレコード)R13のレコードハッシュ値の「h3」である。このように、証拠チェーン61では、複数のレコードの各々が当該レコードの親レコードのレコードハッシュ値(前レコードハッシュ値)を含むことによって複数のレコードが連鎖されている。
【0057】
タイムスタンプチェーン62は、確定時刻に関するレコードが時系列に格納された台帳である。
図3に示す例では、タイムスタンプチェーン62は4つのレコードR21~R24を含む。各レコードは、証拠チェーンのレコードと同様に、キーと、世代と、データと、ナンス値と、電子署名と、前レコードハッシュ値と、レコードハッシュ値とを含む。
【0058】
証拠チェーン61におけるデータがファイルハッシュ値であるのに対して、タイムスタンプチェーン62におけるデータは、タイムスタンプトークンまたは終端ハッシュ値(End-RH)である。詳細は後述するが、タイムスタンプトークンの取得を要求するユーザ操作に応答して、証拠チェーン61の終端ハッシュ値に対するタイムスタンプトークンが時刻認証局41から取得される。この例では、2つのレコードR22,R24にタイムスタンプトークンTS1,TS2がそれぞれ格納されている。
【0059】
終端ハッシュ値は、タイムスタンプトークンの取得を要求するユーザ操作が行われた時点での証拠チェーン61の終端レコードのレコードハッシュ値である。この例では、レコードR21には、証拠チェーン61のレコードR13のレコードハッシュ値である「h3」が終端ハッシュ値として格納されている。レコードR23には、証拠チェーン61のレコードR15のレコードハッシュ値である「h5」が終端ハッシュ値として格納されている。
【0060】
タイムスタンプチェーン62に含まれる上記以外の情報は、証拠チェーン61の対応する情報と同様であるため、詳細な説明は繰り返さない。
【0061】
図4は、証拠チェーン61およびタイムスタンプチェーン62に格納されたレコード間の関係を説明するための概念図である。以下、
図3および
図4の両方を参照しながら時系列に説明する。
【0062】
≪証拠チェーンのAge=1≫
まず、ファイルPがユーザ操作に従ってデータベース43に登録される。クライアントサーバ3Aは、第1世代(Age=1)のレコードR11を証拠チェーン61に追加するためのトランザクションデータを生成する。レコードR11は、ファイルPのハッシュ化により生成されるファイルハッシュ値FH1と、レコードハッシュ値h1とを含む。
【0063】
クライアントサーバ3Aは、生成されたトランザクションデータをネットワークNWに送信する。当該トランザクションデータを実行する処理(トランザクション処理)がクライアントサーバ3A~3Dにおいて実行されることにより、クライアントサーバ3A~3Dの各々の証拠チェーン61にレコードR11が追加される。これらの処理は後続の世代においても同様であるため、説明は繰り返さない。
【0064】
≪証拠チェーンのAge=2≫
ファイルQがユーザ操作に従ってデータベース43に登録されると、クライアントサーバ3Aは、第2世代(Age=2)のレコードR12を証拠チェーン61に追加するためのトランザクションデータを生成する。レコードR12は、ファイルQに関するファイルハッシュ値FH2と、前レコードハッシュ値h1と、レコードハッシュ値h2とを含む。
【0065】
≪証拠チェーンのAge=3≫
ファイルRがユーザ操作に従ってデータベース43に登録されると、クライアントサーバ3Aは、第3世代(Age=3)のレコードR13を証拠チェーン61に追加するためのトランザクションデータを生成する。レコードR13は、ファイルRに関するファイルハッシュ値FH3と、前レコードハッシュ値h2と、レコードハッシュ値h3とを含む。
【0066】
≪タイムスタンプチェーンのAge=1≫
レコードR13が証拠チェーン61の終端レコードである時点で、レコードR13に確定時刻を付与するための操作をユーザが入力装置34(ユーザ端末42Aであってもよい)に対して行ったと想定する。クライアントサーバ3Aは、ユーザ操作に応答して、第1世代(Age=1)のレコードR21をタイムスタンプチェーン62に追加するためのトランザクションデータを生成する。レコードR21は、終端ハッシュ値(証拠チェーン61の終端レコードであるレコードR13のレコードハッシュ値)h3と、レコードハッシュ値H1とを含む。
【0067】
≪タイムスタンプチェーンのAge=2≫
クライアントサーバ3Aは、親レコードR21のレコードハッシュ値(前レコードハッシュ値)H1に対するタイムスタンプトークンTS1を時刻認証局41Aから取得する。クライアントサーバ3Aは、第2世代(Age=2)のレコードR22をタイムスタンプチェーン62に追加するためのトランザクションデータを生成する。レコードR22は、タイムスタンプトークンTS1と、前レコードハッシュ値H1と、レコードハッシュ値H2とを含む。
【0068】
≪証拠チェーンのAge=4≫
ファイルPがユーザ操作に従ってファイルP’へと更新されると、クライアントサーバ3Aは、第4世代(Age=4)のレコードR14を証拠チェーン61に追加するためのトランザクションデータを生成する。レコードR14は、更新されたファイルP’に関するファイルハッシュ値FH4と、前レコードハッシュ値h3と、レコードハッシュ値h4とを含む。
【0069】
≪証拠チェーンのAge=5≫
ファイルSがユーザ操作に従ってデータベース43に登録されると、クライアントサーバ3Aは、第5世代(Age=5)のレコードR15を証拠チェーン61に追加するためのトランザクションデータを生成する。レコードR15は、ファイルSに関するファイルハッシュ値FH5と、前レコードハッシュ値h4と、レコードハッシュ値h5とを含む。
【0070】
≪タイムスタンプチェーンのAge=3≫
レコードR15が証拠チェーン61の終端レコードである時点で、レコードR15に確定時刻を付与するための操作をユーザが入力装置34に対して行ったと想定する。クライアントサーバ3Aは、ユーザ操作に応答して、第3世代(Age=3)のレコードR23をタイムスタンプチェーン62に追加するためのトランザクションデータを生成する。レコードR23は、終端ハッシュ値(証拠チェーン61の終端レコードであるレコードR15のレコードハッシュ値)h5と、前レコードハッシュ値H2と、レコードハッシュ値H3とを含む。
【0071】
≪タイムスタンプチェーンのAge=4≫
クライアントサーバ3Aは、前コレードハッシュ値H2に対するタイムスタンプトークンTS2を時刻認証局41Aから取得する。クライアントサーバ3Aは、第4世代(Age=4)のレコードR24をタイムスタンプチェーン62に追加するためのトランザクションデータを生成する。レコードR24は、タイムスタンプトークンTS2と、前レコードハッシュ値H3と、レコードハッシュ値H4とを含む。
【0072】
本実施の形態においては、証拠チェーン61およびタイムスタンプチェーン62のいずれにおいても、複数のレコードの各々(ただし、始端レコードを除く)が前レコードハッシュ値を含むことによって全てのレコードが連鎖されている。そのため、いずれかのレコード(特に当該レコード内のファイルハッシュ値またはタイムスタンプトークン)を改ざんするには、当該レコード以降に追加された全てのレコードを改ざんしなければならない。しかし、そのような改ざんは現実的には困難である。よって、本実施の形態によれば、ファイルが改ざんされていないこと(ファイルの完全性)を証明できるとともに、確定時刻が改ざんされていないこと(確定時刻の完全性)を証明できる。なお、本明細書における「改ざん」との用語は、ファイルおよび確定時刻(タイムスタンプトークン)の「破損」または「削除」を含む。
【0073】
また、証拠チェーン61において全てのレコードが連鎖されていることによって、証拠チェーン61に格納された全レコードの順番が一意に特定される。よって、本実施の形態によれば、複数のファイルの時間的な並び(ファイルの順序性)を証明できる。
【0074】
加えて、本実施の形態においては、証拠チェーン61の終端ハッシュ値を含むタイムスタンプチェーン62のレコードのレコードハッシュ値に対してタイムスタンプトークンが取得される。これにより、タイムスタンプトークンにより証明される確定時刻に、どのファイルが存在しており、どのファイルが存在していなかったかを証明できる。
図3および
図4に示す例では、レコードR13の終端ハッシュ値h3を含むレコードR21のレコードハッシュ値H1に対してタイムスタンプトークンTS1を取得することで、タイムスタンプトークンTS1により証明される確定時刻にファイルR(および先行するファイルP,Q)が存在していたことを証明できるとともに、タイムスタンプトークンTS1により証明される確定時刻には後続のファイルP’Sが存在していなかったこと(言い換えると、タイムスタンプトークンTS1により証明される時刻よりも後にファイルP’Sが登録または更新されたこと)を証明できる。また、レコードR15の終端ハッシュ値h5を含むレコードR23のレコードハッシュ値H3に対してタイムスタンプトークンTS2を取得することで、タイムスタンプトークンTS2により証明される確定時刻にファイルS(および先行するファイルP,Q,R,P’)が存在していたことを証明できる。
【0075】
<機能ブロック>
図5は、クライアントサーバ3のプロセッサ31が有する主要な機能に関する機能ブロック図である。プロセッサ31は、ファイル登録部71と、確定時刻付与部72と、チェーン更新部73と、ファイル検証部74と、確定時刻検証部75と、順序性検証部76とを含む。各機能ブロックは、メモリ32に記憶されたプログラムをプロセッサ31が実行することにより実現される。各機能ブロックは専用のハードウェア(電子回路)により実現されてもよい。以下、これらの機能ブロックについて順に説明する。
【0076】
≪ファイルの登録≫
図6は、ファイル登録部71の機能ブロック図である。ファイル登録部71は、ファイルをデータベース43に登録(または更新)するユーザ操作に従って、ファイルハッシュ値を含むレコードを証拠チェーン61に追加するためのトランザクションデータを生成する。ファイル登録部71は、ファイルハッシュ生成部711と、ナンス生成部712と、電子署名部713と、トランザクションデータ生成部714と、トランザクションデータ送信部715とを含む。
【0077】
なお、入力装置34またはユーザ端末42に対するユーザ操作に伴い要求が発生する。この要求は、レコードが追加される証拠チェーン61を特定するためのIDであるキーを含む。図示しないが、各機能ブロックは、先行するブロックから当該キーを受けるとともに、後続するブロックに当該キーを出力する。これにより、当該キーにより特定される証拠チェーン61を対象に処理が実行される。
【0078】
ファイルハッシュ生成部711は、要求を受けると、データベース43からファイルを読み出す。ファイルハッシュ生成部711は、ファイルをハッシュ関数を用いてハッシュ化することでファイルハッシュ値(FH)を生成する。ファイルハッシュ生成部711は、ファイルハッシュ値を電子署名部713およびトランザクションデータ生成部714に出力する。
【0079】
ナンス生成部712は、要求を受けると、ナンス値(Nonce)を生成する。ナンス生成部712は、ナンス値をトランザクションデータ生成部714に出力する。図示しないが、電子署名の作成にナンス値が用いられる場合には、ナンス生成部712は、ナンス値を電子署名部713に出力してもよい。
【0080】
電子署名部713は、ストレージ36から秘密鍵51を読み出す。電子署名部713は、ファイルハッシュ生成部711からのファイルハッシュ値を秘密鍵51により暗号化することで電子署名(Sig)を作成する。電子署名部713は、ナンス生成部712からのナンス値を秘密鍵51により暗号化することで電子署名を作成してもよい。電子署名部713は、ファイルハッシュ値およびナンス値を秘密鍵51により暗号化することで電子署名を作成してもよい。電子署名部713は、電子署名をトランザクションデータ生成部714に出力する。
【0081】
トランザクションデータ生成部714は、証拠チェーン61に新たに追加するレコードの世代を算出する。この例では、トランザクションデータ生成部714は、証拠チェーン61にキーを照会することで証拠チェーン61の終端レコード(すなわち親レコード)の世代を取得する。あるいは、トランザクションデータ生成部714は、証拠チェーン61に関連付けられたタイムスタンプチェーン62の終端レコードの世代を取得する。そして、トランザクションデータ生成部714は、取得した終端レコードの世代を1だけインクリメントすることで、新たに追加するレコードの世代を算出する。
【0082】
トランザクションデータ生成部714は、証拠チェーン61の親レコードのレコードハッシュ値を前レコードハッシュ値(Prev-RH)として取得する(図示せず)。トランザクションデータ生成部714は、キー、世代、ファイルハッシュ値、ナンス値、電子署名および前レコードハッシュ値をハッシュ化することでレコードハッシュ値(RH)を算出する。そして、トランザクションデータ生成部714は、キー、世代、ファイルハッシュ値、ナンス値、電子署名、前レコードハッシュ値およびレコードハッシュ値を含むトランザクションデータ(tx)を生成する。トランザクションデータは、トランザクションデータの送信元のクライアントサーバ3を特定するための送信者情報をさらに含むことが望ましい。トランザクションデータ生成部714は、トランザクションデータをネットワークNWへ向けてブロードキャストする時刻情報をトランザクションデータに含めてもよい。トランザクションデータ生成部714は、トランザクションデータをトランザクションデータ送信部715に出力する。
【0083】
トランザクションデータ送信部715は、トランザクションデータを送信するための制御信号を通信装置33に出力する。これにより、トランザクションデータが通信装置33を介してネットワークNWにブロードキャストされる。
【0084】
≪確定時刻の取得≫
図7は、確定時刻付与部72の機能ブロック図である。確定時刻付与部72は、ユーザ操作に従って確定時刻をデータベース43に記憶させる。加えて、確定時刻付与部72は、上記ユーザ操作に従って、タイムスタンプトークンを含むレコードをタイムスタンプチェーン62に追加するためのトランザクションデータを生成する。確定時刻付与部72は、終端ハッシュ取得部721と、ナンス生成部722と、タイムスタンプトークン取得部723と、電子署名部724と、トランザクションデータ生成部725と、トランザクションデータ送信部726とを含む。
【0085】
なお、入力装置34またはユーザ端末42に対するユーザ操作に伴い要求が発生する。この要求は、確定時刻を付与する対象となる証拠チェーン61を特定するためのIDである第1キーと、レコードを追加する対象となるタイムスタンプチェーン62を特定するためのIDである第2キーとを含む。各機能ブロックは、第1キーにより特定される証拠チェーン61と、第2キーにより特定されるタイムスタンプチェーン62とを対象に処理を実行する。
【0086】
終端ハッシュ取得部721は、要求を受けると、証拠チェーン61の終端レコードに対応するトランザクションデータを取り出す。終端ハッシュ取得部721は、取り出されたトランザクションデータから証拠チェーン61の終端ハッシュ値(終端レコードのレコードハッシュ値)(End-RH)を取得する。終端ハッシュ取得部721は、終端ハッシュ値をタイムスタンプトークン取得部723およびトランザクションデータ生成部725に出力する。
【0087】
ナンス生成部722は、要求を受けると、ナンス値(Nonce)を生成する。ナンス生成部722は、ナンス値をトランザクションデータ生成部725に出力する。図示しないが、電子署名の作成にナンス値が用いられる場合には、ナンス生成部722は、ナンス値を電子署名部724に出力してもよい。
【0088】
タイムスタンプトークン取得部723は、終端ハッシュ取得部721からの終端ハッシュ値に対するタイムスタンプトークン(TS)を取得する。より具体的には、タイムスタンプトークン取得部723は、終端ハッシュ値を通信装置33を介して時刻認証局41に送信する。時刻認証局41は、終端ハッシュ値の送信元のクライアントサーバ3にタイムスタンプトークンを返す。これにより、タイムスタンプトークンが取得される。タイムスタンプトークン取得部723は、タイムスタンプトークンを確定時刻としてデータベース43(ストレージ36であってもよい)に記憶させる。加えて、タイムスタンプトークン取得部723は、タイムスタンプトークンを電子署名部724およびトランザクションデータ生成部725に出力する。
【0089】
電子署名部724は、ストレージ36から秘密鍵51を読み出す。電子署名部724は、タイムスタンプトークン取得部723からのタイムスタンプトークンを秘密鍵51により暗号化することで電子署名(Sig)を作成する。電子署名部724は、ナンス生成部722からのナンス値を秘密鍵51により暗号化することで電子署名を作成してもよい。電子署名部724は、タイムスタンプトークンおよびナンス値を秘密鍵51により暗号化することで電子署名を作成してもよい。電子署名部724は、電子署名をトランザクションデータ生成部725に出力する。
【0090】
トランザクションデータ生成部725は、タイムスタンプチェーン62に新たに追加するレコードの世代を算出する。この算出手法は、トランザクションデータ生成部714(
図6参照)による算出手法と同様であるため、説明は繰り返さない。
【0091】
トランザクションデータ生成部725は、タイムスタンプチェーン62の親レコードのレコードハッシュ値を前レコードハッシュ値(Prev-RH)として取得する(図示せず)。トランザクションデータ生成部725は、キー、世代、データ(終端ハッシュ値またはタイムスタンプトークン)、ナンス値、電子署名および前レコードハッシュ値をハッシュ化することでレコードハッシュ値(RH)を算出する。そして、トランザクションデータ生成部725は、キー、世代、タイムスタンプトークン、ナンス値、電子署名、終端ハッシュ値、前レコードハッシュ値およびレコードハッシュ値を含むトランザクションデータ(TX)を生成する。トランザクションデータは送信者情報をさらに含むことが望ましい。トランザクションデータ生成部725は、トランザクションデータをトランザクションデータ送信部726に出力する。
【0092】
トランザクションデータ送信部726は、トランザクションデータを送信するための制御信号を通信装置33に出力する。これにより、トランザクションデータが通信装置33を介してネットワークNWにブロードキャストされる。
【0093】
≪チューンの更新≫
図8は、チェーン更新部73の機能ブロック図である。チェーン更新部73は、トランザクション処理により証拠チェーン61またはタイムスタンプチェーン62に新たなレコードを追加することによって、証拠チェーン61またはタイムスタンプチェーン62を更新する。ここでは証拠チェーン61を例に説明するが、実施の形態1ではタイムスタンプチェーン62についても同様である。チェーン更新部73は、トランザクションデータ取得部731と、署名検証部732と、レコード作成部733と、更新部734と、通知部735とを含む。
【0094】
トランザクションデータ取得部731は、ネットワークNWからトランザクションデータ(tx)を取得する。トランザクションデータ取得部731は、トランザクションデータを署名検証部732に出力する。
【0095】
署名検証部732は、トランザクションデータに含まれる電子署名の有効性を検証する。前述のとおり、電子署名は、送信元のクライアントサーバ3の秘密鍵51を用いてファイルハッシュ値が暗号化されたものである。まず、署名検証部732は、トランザクションデータに含まれる送信者情報に基づいて、当該トランザクションデータの送信元のクライアントサーバ3を特定する。そして、署名検証部732は、複数の公開鍵52のうち、特定されたクライアントサーバ3の公開鍵をストレージ36から読み出す。署名検証部732は、公開鍵を用いて、トランザクションデータに含まれる電子署名を復号する。署名検証部732は、復号した値と、トランザクションデータに含まれているファイルハッシュ値とを比較する。両者が一致した場合、署名検証部732は、電子署名の有効性を認め、その結果をレコード作成部733に出力する。
【0096】
レコード作成部733は、電子署名の有効性が認められた場合に、トランザクションデータに基づいて、証拠チェーン61に追加するレコードを作成する。より具体的には、レコード作成部733は、トランザクションデータからキー、世代、ファイルハッシュ値、ナンス値、電子署名、前レコードハッシュ値およびレコードハッシュ値を取得し、これらの情報を含むレコードを作成する。レコード作成部733は、レコードを更新部734に出力する。
【0097】
更新部734は証拠チェーン61を更新する。より具体的には、更新部734は、レコード作成部733からのレコードのキーを参照し、当該レコードを追加すべき証拠チェーン61を特定する。そして、更新部734は、当該レコードを、特定された証拠チェーン61に追加する。更新部734は、証拠チェーン61の更新が完了すると、その旨を通知部735に出力する。
【0098】
通知部735は、トランザクション処理の完了を通知するための制御信号を通信装置33に出力する。これにより、トランザクション処理の完了がトランザクションデータの送信元のクライアントサーバ3に通知される。
【0099】
≪ファイルの完全性の検証≫
図9は、ファイル検証部74の機能ブロック図である。ファイル検証部74は、レコードが証拠チェーン61に格納されたファイルの完全性(当該ファイルが改ざんされていないこと)を検証する。検証対象は、証拠チェーン61内の全てのファイルであってもよいし、ユーザにより選択された一部のファイルであってもよい。ファイル検証部74は、ファイル取得部741と、ファイルハッシュ取得部742と、検証処理部743と、出力部744とを含む。
【0100】
ファイル取得部741は、検証対象のファイルを選択するユーザ操作を入力装置34(ユーザ端末42であってもよい)から受ける。ユーザは、たとえば、まず証拠チェーン61を特定する。その上で、ユーザは、レコードがその証拠チェーンに格納された複数のファイルの全てを検証対象として特定してもよい。あるいは、ユーザは、複数のファイルのうちの一部を検証対象として特定してもよい。これにより、検証対象のファイルが選択される。ファイル取得部741は、選択されたファイルをデータベース43から取得し、取得されたファイルを検証処理部743に出力する。
【0101】
ファイルハッシュ取得部742は、ユーザにより選択されたファイルについて、ストレージ36内の証拠チェーン61に格納された対応するファイルハッシュ値(FH)を取得する。ファイルハッシュ取得部742は、ファイルハッシュ値を検証処理部743に出力する。
【0102】
検証処理部743は、ファイル取得部741からのファイルと、ファイルハッシュ取得部742からのファイルハッシュ値とが整合するかどうかに基づいて、当該ファイルの改ざんの有無を判定する。より具体的には、検証処理部743は、ファイル取得部741からのファイルをハッシュ関数を用いてハッシュ化する。そして、検証処理部743は、ファイルごとに、ハッシュ化により得られたファイルハッシュ値と、ファイルハッシュ取得部742からのファイルハッシュ値とを比較する。検証処理部743は、あるファイルについて、2つのファイルハッシュ値が互いに一致した場合には、当該ファイルは改ざんされていないと判定する(改ざん非検知)。一方、検証処理部743は、他のファイルについて、2つのファイルハッシュ値が一致しない場合には、当該ファイルは改ざんされた可能性があると判定する(改ざん検知)。検証処理部743は、検証結果(ファイルごとの改ざん検知/改ざん非検知、どのファイルが改ざんされているかなど)を出力部744に出力する。
【0103】
出力部744は、検証処理部743による検証結果を出力装置35(ユーザ端末42であってもよい)に出力する。これにより、ユーザにより選択された1以上のファイルについて、ユーザが検証結果を確認できる。
【0104】
≪確定時刻の完全性の検証≫
図10は、確定時刻検証部75の機能ブロック図である。確定時刻検証部75は、タイムスタンプトークンにより証明される確定時刻の完全性(当該確定時刻が改ざんされていないこと)を検証する。検証対象は、タイムスタンプチェーン62内の全ての確定時刻であってもよいし、ユーザにより選択された一部の確定時刻であってもよい。確定時刻検証部75は、確定時刻取得部751と、タイムスタンプトークン取得部752と、検証処理部753と、出力部754とを含む。
【0105】
確定時刻取得部751は、検証対象の確定時刻を選択するユーザ操作を入力装置34(ユーザ端末42であってもよい)から受ける。ユーザは、たとえば、まずタイムスタンプチェーン62を特定する。その上で、ユーザは、そのタイムスタンプチェーンに含まれる複数の確定時刻の全てを検証対象として特定してもよい。あるいは、ユーザは、複数の確定時刻のうちの一部を検証対象として特定してもよい。これにより、検証対象の確定時刻が選択される。後述するように、ファイルを選択するユーザ操作に従って、検証対象の確定時刻が自動で選択されてもよい。確定時刻取得部751は、選択された確定時刻をデータベース43から取得し、取得された確定時刻を検証処理部753に出力する。
【0106】
タイムスタンプトークン取得部752は、ユーザにより選択された確定時刻について、ストレージ36内のタイムスタンプチェーン62に格納された対応するタイムスタンプトークン(TS)を取得する。タイムスタンプトークン取得部752は、タイムスタンプトークンを検証処理部753に出力する。
【0107】
検証処理部753は、確定時刻取得部751(データベース43)からの確定時刻と、タイムスタンプトークン取得部752(タイムスタンプチェーン62)からのタイムスタンプトークンとが整合するかどうかに基づいて、当該確定時刻の改ざんの有無を判定する。より具体的には、検証処理部753は、確定時刻取得部751からの確定時刻と、タイムスタンプトークン取得部752からのタイムスタンプトークンとを比較する。検証処理部753は、ある確定時刻と、その確定時刻に対応するタイムスタンプトークンとが互いに一致した場合には、当該確定時刻は改ざんされていないと判定する(改ざん非検知)。一方、検証処理部753は、他の確定時刻と、その確定時刻に対応するタイムスタンプトークンとが一致しない場合には、当該確定時刻は改ざんされた可能性があると判定する(改ざん検知)。検証処理部753は、検証結果(確定時刻ごとの改ざん検知/改ざん非検知、どの確定時刻が改ざんされているかなど)を出力部754に出力する。
【0108】
出力部754は、検証処理部753による検証結果を出力装置35(ユーザ端末42であってもよい)に出力する。これにより、ユーザにより選択された1以上の確定時刻について、ユーザが検証結果を確認できる。
【0109】
≪順序性の検証≫
図11は、順序性検証部76の機能ブロック図である。順序性検証部76は、レコードが証拠チェーン61に格納されたファイル、および/またはタイムスタンプチェーン62により証明される確定時刻の順序性(ファイルおよび/または確定時刻がどのような時間的な並びであるか)を検証する。順序性検証部76は、終端ハッシュ取得部761と、前レコードハッシュ取得部762と、レコードハッシュ取得部763と、検証処理部764と、出力部765とを含む。
【0110】
まず、入力装置34(ユーザ端末42であってもよい)に対して、ユーザが検証対象とするファイルおよび/または確定時刻を選択する操作を行う。この選択の仕方は
図9および
図10にて説明した仕方と同様である。以下では複数のファイルおよび複数の確定時刻が選択された状況を例に説明する。終端ハッシュ取得部761、前レコードハッシュ取得部762およびレコードハッシュ取得部763の各々は、どのファイルおよびどの確定時刻がユーザにより選択されたかを受ける。
【0111】
終端ハッシュ取得部761は、タイムスタンプチェーン62から、選択された複数の確定時刻の各々に対応するレコードの終端ハッシュ値(End-RH)を取得する。確定時刻取得部751は、終端ハッシュ値を検証処理部764に出力する。
【0112】
前レコードハッシュ取得部762は、証拠チェーン61から、選択された複数のファイルの各々に対応するレコードの前レコードハッシュ値(Prev-RH)を取得するとともに、タイムスタンプチェーン62から、選択された複数の確定時刻の各々に対応するレコードの前レコードハッシュ値を取得する。前レコードハッシュ取得部762は、前レコードハッシュ値を検証処理部764に出力する。
【0113】
レコードハッシュ取得部763は、証拠チェーン61から、選択された複数のファイルの各々に対応するレコードのレコードハッシュ値(RH)を取得するとともに、タイムスタンプチェーン62から、選択された複数の確定時刻の各々に対応するレコードのレコードハッシュ値を取得する。レコードハッシュ取得部763は、レコードハッシュ値を検証処理部764に出力する。
【0114】
検証処理部764は、終端ハッシュ取得部761からの終端ハッシュ値と、前レコードハッシュ取得部762からの前レコードハッシュ値と、レコードハッシュ取得部763からのレコードハッシュ値とに基づいて、選択された複数のファイルおよび複数の確定時刻の時間的な並び(前後関係)を検証する。
図3および
図4にて説明したように、前レコードハッシュ値とレコードハッシュ値とに基づいて、同じチェーン内でのレコードの並び(親子関係)を特定できる。また、終端ハッシュ値とレコードハッシュ値とに基づいて、異なるチェーン間でのレコードの並びを特定できる。したがって、検証処理部764は、複数のファイルおよび複数の確定時刻の順序を特定可能である。検証処理部764は、検証結果(複数のファイルおよび複数の確定時刻の時間的な並び)を出力部765に出力する。
【0115】
出力部765は、検証処理部764による検証結果を出力装置35(ユーザ端末42であってもよい)に出力する。これにより、ユーザにより選択された1以上のファイルおよび/または1以上の確定時刻について、ユーザが検証結果を確認できる。
【0116】
なお、ここでは、複数のファイルおよび複数の確定時刻が選択された状況を例に説明した。複数のファイルのみが選択され、確定時刻が選択されなくてもよい。あるいは、複数の確定時刻のみが選択され、ファイルが選択されなくてもよい。これらの場合にも全てのレコードの順序を特定可能であることが当業者であれば上記説明により容易に理解される。
【0117】
<処理フロー>
図12は、実施の形態1における検証処理全体の処理手順の一例を示すフローチャートである。このフローチャートに示される処理は、予め定められた条件の成立時(たとえば予め定められた周期ごと)にメインルーチンから呼び出されて実行される。各ステップは、クライアントサーバ3(プロセッサ31)によるソフトウェア処理により実現されるが、クライアントサーバ3内に配置されたハードウェア(電気回路)により実現されてもよい。以下、ステップをSと略す。後述する実施の形態2におけるフローチャートに関しても同様である。
【0118】
S11において、クライアントサーバ3は、検証機能を選択するユーザ操作を入力装置34またはユーザ端末42が受け付けたかどうかを判定する。
【0119】
図13は、ユーザが検証機能を選択するためのユーザインターフェイス(UI:User Interface)の一例を示す図である。このUIは、出力装置35またはユーザ端末42に表示される。
【0120】
UIは、たとえば、選択可能な証拠チェーンを示すナビゲーションリスト81と、ユーザにより選択された証拠チェーンを示すフィールド82とを有する。この例では「証拠チェーンX」が選択されている。UIは、たとえば3つのタブ831~833をさらに有する。タブ831は、ファイル一覧を表示するためのタブである。タブ832は、履歴を表示するためのタブである。タブ833は、ファイル共有のためのタブである。
【0121】
履歴を表示するためのタブ832が選択された場合、3種類の検証機能の中からいずれか1つを選択するための3つのボタン841~843が表示される。ボタン841は「全ファイルを検証」ボタンである。ボタン842は「選択ファイルを検証」ボタンである。ボタン843は「順序性のみ検証」ボタンである。
図13ではボタン841の操作により「全ファイルを検証」が選択されている。
【0122】
図12および
図13を参照して、入力装置34またはユーザ端末42がユーザ操作(より具体的にはボタン841~843のうちのいずれかに対する操作)を受け付けていない場合(S11においてNO)、クライアントサーバ3は、以降の処理を実行することなく処理をメインルーチンに戻す。
【0123】
入力装置34またはユーザ端末42が上記ユーザ操作を受け付けた場合(S11においてYES)、クライアントサーバ3は、処理をS12に進め、ユーザにより操作されたボタンがボタン841~843のうちのどのボタンかを判定する。
【0124】
全ファイルの検証を指示するボタン841が操作された場合(S12において「全ファイルを検証」)、クライアントサーバ3は、全ファイルに対するファイル検証処理(S131)と、全確定時刻に対する確定時刻検証(S132)と、順序性検証処理(S133)とを実行する。これらの処理の実行順序は任意である。ファイル検証処理、確定時刻検証および順序性検証処理は、それぞれ、ファイル検証部74(
図9参照)、確定時刻検証部75(
図10参照)および順序性検証部76(
図11参照)により実現される。
【0125】
3つの検証処理の実行後、クライアントサーバ3は、検証処理が完了したことをユーザに通知する(S16)。クライアントサーバ3は、検証処理が完了した旨のメッセージを出力装置35(ユーザ端末42であってもよい)に表示してもよいし、検証処理が完了した旨のメールをユーザ端末42に送信してもよい。そして、クライアントサーバ3は、検証結果を出力装置35(ユーザ端末42であってもよい)に表示する(S17)。
【0126】
S12に戻り、選択されたファイルの検証を指示するボタン842が操作された場合(S12において「選択されたファイルを検証」)、クライアントサーバ3は、選択されたファイルに対するファイル検証処理(S141)と、選択された確定時刻に対する確定時刻検証(S142)とを実行する。その後、クライアントサーバ3は、検証完了をユーザに通知し(S16)、検証結果を出力装置35(ユーザ端末42であってもよい)に表示する(S17)。
【0127】
順序性のみの検証を指示するボタン843が操作された場合(S12において「順序性のみ検証」)、クライアントサーバ3は、順序性検証処理(S151)を実行する。その後、クライアントサーバ3は、検証完了をユーザに通知し(S16)、検証結果を出力装置35またはユーザ端末42に表示する(S17)。
【0128】
なお、ファイル検証処理、確定時刻検証および順序性検証処理は、本開示に係る「第1検証処理」~「第3検証処理」にそれぞれ相当する。選択されたファイルの検証を指示するボタン842の操作は、本開示に係る「第1ユーザ操作」に相当する。全ファイルの検証を指示するボタン841の操作は、本開示に係る「第2ユーザ操作」に相当する。順序性のみの検証を指示するボタン843の操作は、本開示に係る「第3ユーザ操作」に相当する。
【0129】
<検証結果の表示>
以下、「全ファイルを検証」、「選択されたファイルを検証」および「順序性のみ検証」のうちのどれが選択されたかに応じて、検証結果が表示されるUIがどのように異なるかについて説明する。
【0130】
≪全ファイルを検証≫
図14は、「全ファイルを検証」が選択された場合に検証結果が表示されるUIの一例を示す図である。検証処理が完了すると、「検証が完了しました」との通知85とともに、第1ボックス861、第2ボックス862および第3ボックス863が表示される。
【0131】
第1ボックス861は検証結果のまとめ(結論)を示す。たとえば、いずれかのレコード(ファイルまたは確定時刻)に改ざんが発見された場合、「改ざんが見つかりました」とのメッセージが第1ボックス861に表示される。一方、どのレコードにも改ざんが発見されなかった場合、
図14に示すように、「改ざんは見つかりませんでした」とのメッセージが第1ボックス861に表示される。
【0132】
第2ボックス862は、検証処理の対象とした証拠チェーンを示す。
図14に示す例では「証拠チェーンX」が第2ボックス862に表示されている。
【0133】
第3ボックス863は、検証結果の詳細を図解して示す。
図3および
図4に説明したように、ファイルの世代と確定時刻の世代とは別々のチェーンで互いに独立に管理されている。以降の検証結果の説明では、ファイルの世代にAを付し、確定時刻の世代にBを付すことで両者を区別する。しかし、この区別は混同を避けて理解を容易にするためのものであり、必須ではない。
【0134】
図15は、「全ファイルを検証」が選択された場合の第3ボックス863における検証結果の表示の一例を示す図である。ここでは3以上のファイルが選択された状況を想定する。この場合、たとえば、始端レコードの検証結果を示すセクション911と、終端レコードの検証結果を示すセクション913とが表示される。
図15に示す例では、セクション911は、確定時刻検証処理によるAge=1Bの確定時刻の改ざんの有無の検証結果を示す。セクション913は、ファイル検証処理によるAge=8Aのファイルの改ざんの有無の検証結果を示す。
【0135】
一方、始端レコードと終端レコードとの間のレコードについては、検証結果(Age=1A~2Bのファイルまたは確定時刻の改ざんの有無)を含まないブランクのセクション912が表示される。すなわち、始端レコードと終端レコードとの間のレコードについては表示が省略される。ユーザがセクション912内の詳細表示ボタン914を選択すると、中間のレコードの検証結果を示すセクション912A~912Hが表示される。セクション911,912A~912H,913におけるファイルおよび確定時刻の並びは、順序性検証処理の結果に基づく時系列である。このように、始端レコードと終端レコードとの間のレコードについては表示を省略して全体をシンプルな表示とすることで、ユーザが検証結果の概要を把握しやすくなる。なお、選択されたファイルが1個または2個のみの場合には中間のセクション912は表示されない。
【0136】
「全ファイルを検証」では、全てのファイルおよび全ての確定時刻についての検証結果が表示される。したがって、「全ファイルを検証」は、ユーザ間でトラブル(改ざんの疑義)が発生した場合などに特に有効である。あるユーザが他のユーザに全ての検証結果を提示することで当該他のユーザを納得させることができるためである。
【0137】
図15に示す例では、両端のセクション911,913のサイズが中間のセクション912A~912Hのサイズよりも大きい。このように、始端レコードの検証結果を示すセクションおよび終端レコードの検証結果を示すセクションを、始端レコードと終端レコードとの間のレコードの検証結果を示すセクションよりも大きく表示することが望ましい。これにより、始端レコードおよび終端レコードに関する検証結果をユーザが容易に確認できる。
【0138】
また、ファイルの改ざんの有無の検証結果を示すセクションと、確定時刻の改ざんの有無の検証結果を示すセクションとの間で表示の仕方を異ならせることが望ましい。
図15ではハッチングの有無により表示の仕方の違いが表現されている。これにより、ファイルの改ざんの有無の検証結果と、確定時刻の改ざんの有無の検証結果とをユーザが容易に区別できる。
【0139】
特に、確定時刻の改ざんの有無の検証結果を示すセクションが、ファイルの改ざんの有無の検証結果を示すセクションよりも強調して表示されるようにすることが望ましい。これにより、ユーザが確定時刻に関する検証結果をファイルに関する検証結果から容易に区別して確認できる。これは、一般に、確定時刻の付与数の方がファイルの登録数よりも少ないにもかかわらず、確定時刻がトラブルの解決に資することが多いためである。
【0140】
強調表示の手法としては様々な公知の手法を採用し得る。たとえば、両セクション間で互いに異なる色を使用してもよい。色の組み合わせ(暖色/寒色、進出色/後退色、膨張色/収縮色など)に基づく特性を利用して確定時刻の改ざんの有無の検証結果を強調表示できる。また、確定時刻の改ざんの有無の検証結果を示すセクションを濃い色で表示する一方で、ファイルの改ざんの有無の検証結果を示すセクションを淡い色で表示してもよい。同じ系統の色であっても濃い色は強調の度合いが強く、淡い色は強調の度合いが弱い。あるいは、確定時刻の改ざんの有無の検証結果を示すセクションを、ファイルの改ざんの有無の検証結果を示すセクションよりも大きく表示してもよい。確定時刻の改ざんの有無の検証結果を示すセクションのみに枠を追加してもよい。確定時刻の改ざんの有無の検証結果を示すセクションのみを点滅させてもよい。
【0141】
さらに、
図15に示す例では確定時刻として、年・月・日・時・分・秒が表示されている。しかし、その一部だけが表示されるようにユーザが選択可能であってもよい。ユーザ操作に応じて、たとえば、年だけが表示されてもよいし、年月だけが表示されてもよいし、年月日だけが表示されてもよい。時間的な粒度をユーザが適宜選択できるようにすることで、必要な粒度の確定時刻をユーザが容易に確認することが可能になる。
【0142】
≪選択されたファイルを検証≫
図16は、「選択されたファイルを検証」が選択された場合に検証処理の開始前に表示されるUIの一例を示す図である。「選択ファイルを検証」を指示するボタン842が操作された場合、ユーザが検証対象のファイルを選択するためのファイル選択ボックス844が表示される。
【0143】
図17は、ファイル選択ボックス844における表示の一例(第1例)を示す図である。ファイル選択ボックス844には、選択された証拠チェーン61にファイルハッシュ値が格納されたファイルの名前と、関連する確定時刻とが、たとえば昇順または降順(
図17では降順)に表示される。ユーザがファイルの名前の横のチェックボックスにチェックを入れることでファイルが選択される。本実施の形態では、選択されたファイルに応じて確定時刻が自動で選択される。
【0144】
図17に示した例では、Age=17Aのファイルと、Age=16Aのファイルとがユーザにより選択されている。この場合、ユーザにより選択された複数のファイルのうち、最も新しいAge=17Aのファイルの直後のAge=4Bの確定時刻と、最も古いAge=16Aのファイルの直前のAge=3Bの確定時刻とが自動で選択される。なお、最新ファイルの「直後」の確定時刻とは、ファイルおよび確定時刻の時間的な並びにおいて、最新ファイルよりも後であり、かつ最新ファイルに最も近い確定時刻である。最古ファイルの「直前」の確定時刻とは、ファイルおよび確定時刻の時間的な並びにおいて、最古ファイルよりも前であり、かつ最新ファイルに最も近い確定時刻である。
【0145】
図18は、「選択されたファイルを検証」が選択された場合に検証結果が表示されるUIの一例を示す図である。「全ファイルを検証」が選択された場合(
図14参照)と同様に、検証結果の詳細が第3ボックス863に図解して表示される。
【0146】
図19は、「選択されたファイルを検証」が選択された場合の第3ボックス863における検証結果の詳細の表示の一例を示す図である。
図17にて説明したようにファイルが選択された場合、
図19に示すように少なくとも4つのセクション921~924が表示される。
【0147】
セクション921は、自動で選択されたAge=4Bの確定時刻についての確定時刻検証処理による検証結果を示す。セクション922は、ユーザにより選択されたAge=17Aのファイルについてのファイル検証処理による検証結果を示す。セクション923は、ユーザにより選択されたAge=16Aのファイルについてのファイル検証処理による検証結果を示す。セクション924は、自動で選択されたAge=3Bの確定時刻についての確定時刻検証処理による検証結果を示す。
【0148】
このように、
図17に示した例では、ユーザにより選択されたAge=16Aのファイルと、同じくユーザにより選択されたAge=17Aのファイルと、最古のファイルの直前のAge=3Bの確定時刻と、最新のファイルの直後のAge=4Bの確定時刻とが検証の対象とされる(
図19参照)。これにより、Age=16AのファイルとAge=17Aのファイルとが、Age=3Bの確定時刻とAge=4Bの確定時刻との間に分散型台帳6(証拠チェーン61)に格納されたことを証明できる。よって、本実施の形態によれば、ファイルおよび確定時刻の順序性を簡易なユーザ操作で効果的に検証できる。なお、
図17では2つのファイルが選択される例について説明したが、3以上のファイルが選択されてもよい。
【0149】
図20は、ファイル選択ボックス844における表示の他の一例(第2例)を示す図である。
図20に示す例では、Age=16Aのファイルと、Age=15Aのファイルとがユーザにより選択されている。この場合、最古ファイルの直前のAge=2Bの確定時刻と、最新ファイルの直後のAge=4Bの確定時刻とが自動で選択される。それに加えて、最新ファイルと最古ファイルとの間に挟まれたAge=3Bの確定時刻も自動で選択される。
【0150】
図21は、「選択されたファイルを検証」が選択された場合の第3ボックス863における検証結果の詳細の表示の他の一例を示す図である。
図20にて説明したようにファイルが選択された場合、
図21に示すように少なくとも5つのセクション931~935が表示される。
【0151】
セクション931は、自動で選択されたAge=4Bの確定時刻についての確定時刻検証処理による検証結果を示す。セクション932は、ユーザにより選択されたAge=16Aのファイルについてのファイル検証処理による検証結果を示す。セクション933は、自動で選択されたAge=3Bの確定時刻についての確定時刻検証処理による検証結果を示す。セクション934は、ユーザにより選択されたAge=15Aのファイルについてのファイル検証処理による検証結果を示す。セクション935は、自動で選択されたAge=2Bの確定時刻についての確定時刻検証処理による検証結果を示す。
【0152】
「選択されたファイルを検証」では、ユーザにより選択されたファイル(およびそれに基づいて自動で選択された確定時刻)についての検証結果が表示される。言い換えれば、「選択されたファイルを検証」では、選択されなかったファイル(およびそれに基づいて自動で選択される確定時刻)についての検証は非実行となる。そのため、「選択されたファイルを検証」の所要時間は「全ファイルを検証」の所要時間よりも短い。したがって、「選択されたファイルを検証」は、トラブル(改ざんの疑義)の対象となり得るファイルまたは確定時刻の範囲が予めが絞られている場合などに特に有効である。
【0153】
図20に示した例では、Age=15AのファイルとAge=16Aのファイルとの間にAge=3Bの確定時刻が存在する。この場合に、
図21に示すように、Age=15AのファイルとAge=3Bの確定時刻との時間的な並びが証明されるとともに、Age=16AのファイルとAge=3Bの確定時刻との時間的な並びが証明される。よって、本実施の形態によれば、ファイルおよび確定時刻の順序性を、より詳細に検証できる。
【0154】
≪順序性のみ検証≫
図22は、「順序性のみ検証」が選択された場合に検証処理の開始前に表示されるUIの一例を示す図である。「順序性のみ検証」を指示するボタン843が操作された場合、レコードが該当の証拠チェーンに格納された全てのファイル(およびそれに伴う全ての確定時刻)の順序性が検証される。一方で、ファイルおよび確定時刻の完全性は検証されない。
【0155】
図23は、「順序性のみ検証」が選択された場合に検証結果が表示されるUIの一例を示す図である。「全ファイルを検証」または「選択されたファイルを検証」が選択された場合(
図14および
図18参照)と同様に、検証結果の詳細が第3ボックス863に図解して表示される。
【0156】
図24は、「順序性のみ検証」が選択された場合の第3ボックス863における検証結果の詳細の表示の一例を示す図である。
図15と同じ例を用いて説明すると、始端レコードの検証結果を示すセクション941と、中間のレコードの検証結果を示すセクション942A~942Hと、終端レコードの検証結果を示すセクション943とが、順序性検証処理の結果に基づく時系列に表示される。一方で、各セクションには、「改ざんが見つかりました」または「改ざんは見つかりませんでした」とのメッセージは表示されない。
【0157】
以上のように、実施の形態1において、クライアントサーバ3は、ファイル検証処理と確定時刻検証処理と順序性検証処理とを実行するように構成されている。ファイル検証処理によりファイルの完全性(ファイルが改ざんされたかどうか)を検証可能である。確定時刻検証処理により確定時刻の完全性(確定時刻が改ざんされたかどうか)を検証可能である。順序性検証処理により分散型台帳6におけるファイルおよび確定時刻の順序性を検証可能である。よって、実施の形態1によれば、ファイルおよび確定時刻が適切に管理されているかどうかを検証できる。
【0158】
クライアントサーバ3は、「全ファイルを検証」と「選択されたファイルを検証」と「順序性のみ検証」との中から、いずれか1つをユーザが選択可能に構成されている。これにより、ユーザが要求する検証をユーザ所望のタイミングで行うことができる。
【0159】
「全ファイルを検証」が選択された場合、全てのファイルの完全性および全ての確定時刻の完全性が検証される。これにより、ファイルおよび確定時刻の完全性を徹底的に検証できる。「選択されたファイルを検証」が選択された場合、ユーザにより選択された一部のファイルおよび/または一部の確定時刻に検証対象が限定される。これにより、検証コスト(工数、時間、システム負荷など)を適宜低減できる。「順序性のみ検証」が選択された場合、ファイルおよび確定時刻の順序性が選択的に検証される。これにより、完全性の検証が要求されない場合に順序性を効率的に検証できる。
【0160】
[実施の形態2]
実施の形態1では、1つの証拠チェーン61に対して1つのタイムスタンプチェーン62が関連付けられる例について説明した(
図4参照)。実施の形態2においては、複数の証拠チェーンに対して1つのタイムスタンプチェーンが関連付けられる例について説明する。実施の形態2に係るデータ管理システムおよびクライアントサーバの構成は、実施の形態1に係るデータ管理システム1およびクライアントサーバ3の構成(
図1および
図2参照)と同等である。
【0161】
<分散型台帳>
図25は、実施の形態2における分散型台帳6のデータ構造の一例を示す図である。この例では、3つの証拠チェーン63X,63Y,63Zと1つのタイムスタンプチェーン64とが互いに関連付けられている。証拠チェーン63X,63Y,63Zの各々は、実施の形態1にて説明した証拠チェーン61(
図3参照)と同様である。以下、簡単のため、証拠チェーン63X,63Y,63Zをそれぞれ証拠チェーンX,Y,Zとも記載する。
【0162】
タイムスタンプチェーン64は、この例では8つのレコードR41~R48を含む。各レコードは、実施の形態1におけるタイムスタンプチェーン62(
図3参照)に格納されるレコードと同様に、キー(Key)と、世代(Age)と、データ(Data)と、ナンス値(Nonce)と、電子署名(Sig)と、前レコードハッシュ値(Prev-RH)と、レコードハッシュ値(RH)とを含む。タイムスタンプチェーン64は、終端ハッシュ値として、3つの証拠チェーンX,Y,Zのうちの1つ、2つまたは3つの証拠チェーンの終端ハッシュ値が格納される点において、タイムスタンプチェーン62と異なる(レコードR41,R43,R45,R47)。タイムスタンプチェーン64に含まれる上記以外の情報は、タイムスタンプチェーン62の対応する情報と同様である。
【0163】
図26は、実施の形態2において証拠チェーンX,Y,Zおよびタイムスタンプチェーン64に格納されたレコード間の関係を説明するための概念図である。実施の形態2では、タイムスタンプチェーン64を更新する更新処理が繰り返し実行される。更新処理は、予め定められた期間が経過するごとに実行され得る。この例では1日に1回ずつ更新処理が実行される。
【0164】
一方、証拠チェーンX,Y,Zが毎日更新されるとは必ずしも限らない。そのため、実施の形態2では、証拠チェーンX,Y,Zのうち、更新処理の前回実行時(すなわち前日)から更新された証拠チェーンに関する情報のみがタイムスタンプチェーン64に格納される。以下、各日においてタイムスタンプチェーン64がどのように更新されるかについて、
図25および
図26を参照しながら説明する。なお、
図26では、レコードにデータ(Data)として格納されるファイルハッシュ値(FH)、終端ハッシュ値(h)、タイムスタンプトークン(TS)が図示される一方で、紙面が煩雑になるのを避けるため、前レコードハッシュ値およびレコードハッシュ値の図示が省略されている。
【0165】
≪第N日≫
第N日には証拠チェーンX,Zのみが更新されたとする。証拠チェーンXには、新たなファイルハッシュ値FHx(N)と、ファイルハッシュ値FHx(N)に基づいて生成される証拠チェーンXの終端ハッシュ値hx(N)とが格納されている。証拠チェーンZには同様に、新たなファイルハッシュ値FHz(N)と、ファイルハッシュ値FHz(N)に基づいて生成される証拠チェーンZの終端ハッシュ値hz(N)とが格納されている。
【0166】
クライアントサーバ3は、第N日における証拠チェーンXの終端ハッシュ値hx(N)と、第N日における証拠チェーンZの終端ハッシュ値hz(N)とを、その時点でのタイムスタンプチェーン64の終端レコードR41に格納する。さらに、クライアントサーバ3は、終端ハッシュ値hx(N)および終端ハッシュ値hz(N)(ならびに終端レコードR41に格納される他の情報(世代、ナンス値、電子署名等))に基づいて終端ハッシュ値H(N)を生成し、生成された終端ハッシュ値H(N)をレコードハッシュ値としてレコードR41に格納する。なお、終端ハッシュ値H(N)は、本開示に係る「終端値」の一例である。
【0167】
加えて、クライアントサーバ3は、終端ハッシュ値H(N)に対するタイムスタンプトークンTS(N)を時刻認証局41から取得する。クライアントサーバ3は、タイムスタンプトークンTS(N)と、前レコードハッシュ値H(N)と、レコードハッシュ値H(N+1)とをレコードR42に格納する。
【0168】
≪第(N+1)日≫
第(N+1)日には証拠チェーンY,Zのみが更新されたとする。証拠チェーンYには、新たなファイルハッシュ値FHy(N+1)と、ファイルハッシュ値FHy(N+1)に基づいて生成される証拠チェーンYの終端ハッシュ値hy(N+1)とが格納されている。証拠チェーンZには、新たなファイルハッシュ値FHz(N+1)と、ファイルハッシュ値FHz(N+1)に基づいて生成される証拠チェーンZの終端ハッシュ値hz(N+1)とが格納されている。
【0169】
クライアントサーバ3は、第(N+1)日における証拠チェーンYの終端ハッシュ値hy(N+1)と、第(N+1)日における証拠チェーンZの終端ハッシュ値hz(N+1)とを、その時点でのタイムスタンプチェーン64の終端レコードR43に格納する。さらに、クライアントサーバ3は、終端ハッシュ値hy(N+1)および終端ハッシュ値hz(N+1)(ならびに終端レコードR43に格納される他の情報)に基づいて、タイムスタンプチェーン64の終端ハッシュ値H(N+2)を生成し、生成された終端ハッシュ値H(N+2)をレコードハッシュ値としてレコードR43に格納する。
【0170】
加えて、クライアントサーバ3は、終端ハッシュ値H(N+2)に対するタイムスタンプトークンTS(N+1)を時刻認証局41から取得する。クライアントサーバ3は、タイムスタンプトークンTS(N+1)と、前レコードハッシュ値H(N+2)と、レコードハッシュ値H(N+3)とをレコードR44に格納する。
【0171】
≪第(N+2)日および第(N+3)日≫
第(N+2)日および第(N+3)日については第(N+1)日と同様であるため、詳細な説明は繰り返さない。
【0172】
<機能ブロック>
実施の形態2におけるクライアントサーバ3(プロセッサ31)は、実施の形態1と同様に、トランザクション処理によりタイムスタンプチェーン64に新たなレコードを追加することによってタイムスタンプチェーン64を更新するチェーン更新部を有する。実施の形態2におけるチェーン更新部は、実施の形態1におけるチェーン更新部73(
図8参照)とは異なるレコード作成部を含む。
【0173】
図27は、実施の形態2におけるレコード作成部733Aの機能ブロック図である。レコード作成部733Aは、たとえば予め定められた期間(この例では1日)ごとに、タイムスタンプチェーン64に追加されるレコードを作成する。レコード作成部733Aは、リスト管理部771と、終端ハッシュ取得部772と、終端ハッシュ生成部773と、タイムスタンプトークン取得部774と、統合部775とを含む。
【0174】
リスト管理部771は、更新処理の前回実行時から今回実行時までの間にどの証拠チェーンが更新されたかが記録されるリストを管理する。リスト管理部771は、いずれかの証拠チェーンが更新される度に、更新された証拠チェーンをリストに追加する。リスト管理部771は、リストによる管理情報を終端ハッシュ取得部772に出力する。
【0175】
終端ハッシュ取得部772は、リストによる管理情報に従って、更新処理の前回実行時から今回実行時までの間に更新された証拠チェーンの終端ハッシュ値(hx、hyおよびhzのうちの少なくとも1つ)をEnd-RHとして取得する。終端ハッシュ取得部772は、証拠チェーンの終端ハッシュ値を終端ハッシュ生成部773に出力する。
【0176】
終端ハッシュ生成部773は、証拠チェーンの終端ハッシュ値(End-RH)に基づいて、タイムスタンプチェーン64の終端ハッシュ値(RH)を生成する。終端ハッシュ生成部773は、終端ハッシュ取得部772からの終端ハッシュ値をハッシュ化することでタイムスタンプチェーン64の終端ハッシュ値を生成してもよい。終端ハッシュ生成部773は、タイムスタンプチェーン64の終端ハッシュ値をタイムスタンプトークン取得部774および統合部775に出力する。
【0177】
タイムスタンプトークン取得部774は、終端ハッシュ生成部773からの終端ハッシュ値を含むタイムスタンプチェーン64のレコードのレコードハッシュ値に対するタイムスタンプトークン(TS)を時刻認証局41から取得する。タイムスタンプトークン取得部723は、タイムスタンプトークンを確定時刻としてデータベース43(ストレージ36であってもよい)に記憶させる(図示せず)。加えて、タイムスタンプトークン取得部723は、タイムスタンプトークンを統合部775に出力する。
【0178】
統合部775は、各種情報を統合することでレコードを作成する。具体的には、統合部775は、タイムスタンプチェーン64の終端ハッシュ値またはタイムスタンプトークンと、他の情報(世代(Age)、ナンス値(Nonce)、電子署名(Sig)、前レコードハッシュ値(Prev-RH))とを統合することによってレコードを作成する。統合部775は、レコードを更新部734(
図8参照)に出力する。
【0179】
<処理フロー>
図28は、実施の形態2におけるタイムスタンプチェーン64の更新処理の処理手順の一例を示すフローチャートである。S21において、クライアントサーバ3は、更新処理の前回実行時から予め定められた期間が経過したかどうかを判定する。予め定められた期間が経過していない場合(S21においてNO)、クライアントサーバ3は処理をメインルーチンに戻す。予め定められた期間が経過すると(S22においてYES)、クライアントサーバ3は処理をS22に進める。
【0180】
S22において、クライアントサーバ3は、たとえば前述のリストを参照することによって、更新処理の前回実行時から今回実行時までの間に更新された証拠チェーンが存在するかどうかを判定する。更新された証拠チェーンが存在しない場合(S22においてNO)、クライアントサーバ3は処理をメインルーチンに戻す。更新された証拠チェーンが存在する場合(S22においてYES)、クライアントサーバ3は処理をS23に進める。
【0181】
S23において、クライアントサーバ3は、更新処理の前回実行時から今回実行時までの間に更新された証拠チェーンの終端ハッシュ値を取得する。
【0182】
S24において、クライアントサーバ3は、証拠チェーンの終端ハッシュ値に基づいて、タイムスタンプチェーン64のレコードハッシュ値(その時点での終端ハッシュ値)を生成する。そして、クライアントサーバ3は、証拠チェーンの終端ハッシュ値と、タイムスタンプチェーン64の終端ハッシュ値とを含む第1のレコード(
図25および
図26の例ではR41,R43,R45,R47)を作成する。
【0183】
S25において、クライアントサーバ3は、タイムスタンプチェーン64の終端ハッシュ値(第1のレコードのレコードハッシュ値)に対するタイムスタンプトークンを時刻認証局41から取得する。
【0184】
S26において、クライアントサーバ3は、タイムスタンプトークンと他の情報とに基づいて、レコードハッシュ値を生成する。そして、クライアントサーバ3は、タイムスタンプトークンと、前レコードハッシュ値(第1のレコードのレコードハッシュ値)と、生成されたレコードハッシュ値とを含む第2のレコード(
図25および
図26の例ではR42,R44,R46,R48)を作成する。
【0185】
S27において、クライアントサーバ3は、新たに作成された2つのレコードを追加することよってタイムスタンプチェーン64を更新する。
【0186】
実施の形態2においても実施の形態1と同様に、クライアントサーバ3は、ファイル検証処理と確定時刻検証処理と順序性検証処理とを実行するように構成されている。これらの検証処理は実施の形態1と同様であるため、詳細な説明は繰り返さない。実施の形態2によっても、ファイルおよび確定時刻が適切に管理されているかどうかを検証できる。
【0187】
さらに、実施の形態2では、更新処理の前回実行時からファイル(ファイルハッシュ値)が変更された証拠チェーンについてタイムスタンプトークンが取得される一方で、ファイルが変更されていない証拠チェーンについてはタイムスタンプトークンは取得されない。これにより、全ての証拠チェーンについてタイムスタンプトークンを取得する場合と比べて、またはファイルが変更される度にタイムスタンプトークンを取得する場合と比べて、タイムスタンプトークンの取得コスト(工数、時間、システム負荷など)を低減できる。よって、実施の形態2によれば、ファイルおよび確定時刻が適切に管理されているかどうかを効率的に検証できる。
【0188】
加えて、実施の形態2では、更新処理が定期的に(
図26に示す例では1日1回ずつ)実行される。これにより、ファイルが変更される度に更新処理が実行される場合と比べて、検証コストを低減できる。また、更新処理が不定期に実行される場合と比べて、長期的に着実な検証が可能になる。
【0189】
今回開示された実施の形態は、全ての点で例示であって制限的なものではないと考えられるべきである。本開示の範囲は、上記した実施の形態の説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内での全ての変更が含まれることが意図される。
【符号の説明】
【0190】
1 データ管理システム、2 プラットフォームサーバ、3,3A~3D クライアントサーバ、31 プロセッサ、32 メモリ、33 通信装置、34 入力装置、35 出力装置、36 ストレージ、37 バス、41,41A~41D 時刻認証局、42,42A~42D ユーザ端末、43,43A~43D データベース、51 秘密鍵、52 公開鍵、6 分散型台帳、61 証拠チェーン、62 タイムスタンプチェーン、71 ファイル登録部、711 ファイルハッシュ生成部、712 ナンス生成部、713 電子署名部、714 トランザクションデータ生成部、715 トランザクションデータ送信部、72 確定時刻付与部、721 終端ハッシュ取得部、722 ナンス生成部、723 タイムスタンプトークン取得部、724 電子署名部、725 トランザクションデータ生成部、726 トランザクションデータ送信部、73 チェーン更新部、731 トランザクションデータ取得部、732 署名検証部、733,733A レコード作成部、734 更新部、735 通知部、74 ファイル検証部、741 ファイル取得部、742 ファイルハッシュ取得部、743 検証処理部、744 出力部、75 確定時刻検証部、751 確定時刻取得部、752 タイムスタンプトークン取得部、753 検証処理部、754 出力部、76 順序性検証部、761 終端ハッシュ取得部、762 前レコードハッシュ取得部、763 レコードハッシュ取得部、764 検証処理部、765 出力部、771 リスト管理部、772 終端ハッシュ取得部、773 終端ハッシュ生成部、774 タイムスタンプトークン取得部、775 統合部。