(57)【要約】【課題】証拠性情報残存率を正確に算出する。【解決手段】第一記憶部２３にデータが記憶されている。変換値生成部２２１は行方向変換値Cy[n]及び列方向変換値Cx[n][m]を生成する。第一検証情報生成部２２２は行方向第一検証情報y[n]及び列方向第一検証情報x[m]を生成する。第二検証情報生成部２２３は行方向第二検証情報y’[n]及び列方向第二検証情報x’[m]を生成する。検証部２５は行方向第一検証情報y[n]、列方向第一検証情報x[m]、行方向第二検証情報y’[n]、列方向第二検証情報x’[m]を用いてデータの改ざん箇所を特定する。復元部は特定された改ざん箇所それぞれについて、行方向変換値Cy[n]を用いて生成した行方向復元値Ey[n][m]が列方向変換値Cx[n][m]を用いて生成した列方向復元値Ex[n][m]に一致するかどうかを検証する。【選択図】図１
2014207607.tif 000002
【特許請求の範囲】
【請求項１】
N,Mを２以上の所定の整数とし、n=1,…,Nとし、m=1,…,Mとし、N行×M列に分割されているN×M個のデータブロックで構成されているデータを記憶する第一記憶部と、
上記データのn行目のM個のデータブロックを用いて行方向変換値Cy[n]を生成し、上記データのn行目のm列目のデータブロックを用いて列方向変換値Cx[n][m]を生成する変換値生成部と、
上記データのn行目のM個のデータブロックを用いて行方向第一検証情報y[n]を生成し、上記データのm列目のN個のデータブロックを用いて列方向第一検証情報x[m]を生成する第一検証情報生成部と、
上記行方向変換値Cy[n]と上記列方向変換値Cx[n][m]と上記行方向第一検証情報y[n]と上記列方向第一検証情報x[m]とを記憶する第二記憶部と、
上記第一記憶部から読み込んだデータのn行目のM個のデータブロックを用いて行方向第二検証情報y’[n]を生成し、上記第一記憶部から読み込んだデータのm列目のN個のデータブロックを用いて列方向第二検証情報x’[m]を生成する第二検証情報生成部と、
上記第二記憶部から読み込んだ上記行方向第一検証情報y[n]及び上記列方向第一検証情報x[m]が、それぞれ上記行方向第二検証情報y’[n]及び上記列方向第二検証情報x’[m]に一致するかどうかを検証することで上記データの改ざん箇所を特定する検証部と、
特定された改ざん箇所それぞれについて、上記行方向変換値Cy[n]を用いてn行目のm列目のデータブロックを復元した行方向復元値Ey[n][m]が、上記列方向変換値Cx[n][m]を用いてn行目のm列目のデータブロックを復元した列方向復元値Ex[n][m]に一致するかどうかを検証する復元部と、
を含むデータ改ざん復元システム。
【請求項２】
請求項１に記載のデータ改ざん復元システムであって、
上記第一検証情報生成部は、更に、上記生成した行方向第一検証情報y[n]（n=1,…,N）を用いて統合行方向第一検証情報を生成し、上記生成した列方向第一検証情報x[m]（m=1,…,M）を用いて統合列方向第一検証情報を生成し、上記統合行方向第一検証情報及び上記統合列方向第一検証情報を用いて統合第一検証情報を生成し、
上記第二検証情報生成部は、更に、上記生成した行方向第二検証情報y[n]（n=1,…,N）を用いて統合行方向第二検証情報を生成し、上記生成した列方向第二検証情報x[m]（m=1,…,M）を用いて統合列方向第二検証情報を生成し、上記統合行方向第二検証情報及び上記統合列方向第二検証情報を用いて統合第二検証情報を生成し、
上記検証部は、更に、上記統合第一検証情報が上記統合第二検証情報に一致するかどうかを検証する
データ改ざん復元システム。
【請求項３】
請求項１又は２に記載のデータ改ざん復元システムであって、
上記第一検証情報生成部は、更に、上記生成した行方向第一検証情報y[n]（n=1,…,N）を用いて行方向第一検証交点情報Hy[n]（n=2,…,N）を生成し、上記生成した列方向第一検証情報x[m]（m=1,…,M）を用いて列方向第一検証交点情報Hx[m]（m=2,…,M）を生成し、
上記第二検証情報生成部は、更に、上記生成した行方向第二検証情報y’[n]（n=1,…,N）を用いて行方向第二検証交点情報H’y[n]（n=2,…,N）を生成し、上記生成した列方向第二検証情報x’[m]（m=1,…,M）を用いて列方向第二検証交点情報H’x[m]（m=2,…,M）を生成し、
上記検証部は、更に、上記行方向第一検証交点情報Hy[n]及び上記列方向第一検証交点情報Hx[m]が、上記行方向第二検証交点情報H’y[n]及び上記列方向第二検証交点情報H’x[m]に一致するかどうかを検証する
データ改ざん復元システム。
【請求項４】
請求項１から３のいずれかに記載のデータ改ざん復元システムであって、
上記変換値生成部は、n-1行目の行方向変換値Cy[n-1]とn行目のM個のデータブロックとの排他的論理和を計算することで上記行方向変換値Cy[n]を生成し、n行目のm-1列目の列方向変換値Cx[n][m-1]とn行目のm列目のデータブロックとの排他的論理和を計算することで上記列方向変換値Cx[n][m]を生成し、
上記復元部は、n-1行目の行方向変換値Cy[n-1]とn行目の行方向変換値Cy[n]との排他的論理和を計算することで上記行方向復元値Ey[n][m]を生成し、n行目のm-1列目の列方向変換値Cx[n][m-1]とn行目のm列目の列方向変換値Cx[n][m]との排他的論理和を計算することで上記列方向復元値Ex[n][m]を生成する
データ改ざん復元システム。
【請求項５】
請求項１から４のいずれかに記載のデータ改ざん復元システムであって、
上記行方向第一検証情報y[n]及び上記列方向第一検証情報x[m]を生成した時刻についての情報である時刻情報を上記行方向第一検証情報y[n]及び上記列方向第一検証情報x[m]に付加する時刻情報付加部を更に含む、
データ改ざん復元システム。
【請求項６】
N,Mを２以上の所定の整数とし、n=1,…,Nとし、m=1,…,Mとし、データがN行×M列に分割されているN×M個のデータブロックで構成されているとして、
変換値生成部が、上記データのn行目のM個のデータブロックを用いて行方向変換値Cy[n]を生成し、上記データのn行目のm列目のデータブロックを用いて列方向変換値Cx[n][m]を生成する変換値生成ステップと、
第一検証情報生成部が、上記データのn行目のM個のデータブロックを用いて行方向第一検証情報y[n]を生成し、上記データのm列目のN個のデータブロックを用いて列方向第一検証情報x[m]を生成する第一検証情報生成ステップと、
第二検証情報生成部が、上記データのn行目のM個のデータブロックを用いて行方向第二検証情報y’[n]を生成し、上記データのm列目のN個のデータブロックを用いて列方向第二検証情報x’[m]を生成する第二検証情報生成ステップと、
検証部が、上記行方向第一検証情報y[n]及び上記列方向第一検証情報x[m]が、それぞれ上記行方向第二検証情報y’[n]及び上記列方向第二検証情報x’[m]に一致するかどうかを検証することで上記データの改ざん箇所を特定する検証ステップと、
復元部が、特定された改ざん箇所それぞれについて、上記行方向変換値Cy[n]を用いてn行目のm列目のデータブロックを復元した行方向復元値Ey[n][m]が、上記列方向変換値Cx[n][m]を用いてn行目のm列目のデータブロックを復元した列方向復元値Ex[n][m]に一致するかどうかを検証する復元部ステップと、
を含むデータ改ざん復元方法。
【請求項７】
請求項１から５のいずれかに記載のデータ改ざん復元システムとしてコンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、セキュリティ技術に関する。特に、システムで利用するデータの偽造、削除、改ざん等を検知し、改ざんが行われたデータに対して誤りを訂正し、証拠性を高めるようにする技術に関する。
【背景技術】
【０００２】
企業情報システム、医療システム（EHR: Electric Health Record）、物流管理システム等において、システムから収集されるデータを分析することによってシステムが正しく運用されているか客観的に評価するために、システムから出力されるデータを収集することが重要な役割を果たすようになってきている。
【０００３】
このため、システムから収集されるデータの変更や改ざんは、システム運用上重大な脅威となるため、収集されたデータの完全性を確保することが重要な課題となっている。
【０００４】
システムから出力されるデータはリアルタイム的に大量に次々と発生するため、システムから出力されたデータが変更又は改ざんされた場合に、データの変更又は改ざんを確実に検出できるようにする技術が求められている。
【０００５】
システムから出力されるデータとして、例えばログ情報がある。ログ情報の改ざん、削除の防止やそれらの検知を行うために、ログ情報そのものの暗号化や、ログ情報そのものを複数の媒体に退避する方法がとられている。
【０００６】
しかし今日、ログ情報はリアルタイム的に大量に次々と発生するため、このような方法は非効率となっており、ログ情報の改ざん検知が可能であり、情報量的に効率的で証拠性の高いログ情報の復元方法が求められている。
【０００７】
例えば、特許文献１では、ログ情報からリンクハッシュを用いたハッシュチェーンを行方向に生成し、これを用いてデータの偽造、削除、改ざん等を検知し、改ざんが行われたデータに関して証拠性のある個所を特定するようにしている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】国際公開第２００８／０２６２３８号パンフレット
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、特許文献１に記載された技術では、行方向のみのハッシュチェーンを用いているため、改ざん箇所が増加すると行方向に含まれる非改ざん箇所まで余計に改ざん箇所として検知してしまう。その結果、証拠性情報残存率に大きく誤差が生じてしまう。ここで、証拠性情報残存率とは、改ざんされた情報の中でも信頼できる情報が残っている場合の残った情報量である。
【００１０】
この発明の目的は、証拠性情報残存率を正確に算出することができるデータ改ざん復元技術を提供することである。
【課題を解決するための手段】
【００１１】
上記の課題を解決するために、この発明の一態様によるデータ改ざん復元システムは、N,Mを２以上の所定の整数とし、n=1,…,Nとし、m=1,…,Mとし、N行×M列に分割されているN×M個のデータブロックで構成されているデータを記憶する第一記憶部と、データのn行目のM個のデータブロックを用いて行方向変換値Cy[n]を生成し、データのn行目のm列目のデータブロックを用いて列方向変換値Cx[n][m]を生成する変換値生成部と、データのn行目のM個のデータブロックを用いて行方向第一検証情報y[n]を生成し、データのm列目のN個のデータブロックを用いて列方向第一検証情報x[m]を生成する第一検証情報生成部と、行方向変換値Cy[n]と列方向変換値Cx[n][m]と行方向第一検証情報y[n]と列方向第一検証情報x[m]とを記憶する第二記憶部と、第一記憶部から読み込んだデータのn行目のM個のデータブロックを用いて行方向第二検証情報y’[n]を生成し、第一記憶部から読み込んだデータのm列目のN個のデータブロックを用いて列方向第二検証情報x’[m]を生成する第二検証情報生成部と、第二記憶部から読み込んだ行方向第一検証情報y’[n]及び列方向第一検証情報x[m]が、それぞれ行方向第二検証情報y’[n]及び列方向第二検証情報x’[m]に一致するかどうかを検証することでデータの改ざん箇所を特定する検証部と、特定された改ざん箇所それぞれについて、行方向変換値Cy[n]を用いてn行目のm列目のデータブロックを復元した行方向復元値Ey[n][m]が、列方向変換値Cx[n][m]を用いてn行目のm列目のデータブロックを復元した列方向復元値Ex[n][m]に一致するかどうかを検証する復元部と、を含む。
【発明の効果】
【００１２】
この発明のデータ改ざん復元技術によれば、改ざんされたデータの改ざん箇所を特定して復元することで、証拠性情報残存率を正確に算出することができる。
【図面の簡単な説明】
【００１３】
【図１】データ改ざん復元システムの機能構成を例示する図。
【図２】データ改ざん復元方法の処理フローを例示する図。
【図３】行方向の変換値及び検証情報の生成方法を例示する図。
【図４】列方向の変換値及び検証情報の生成方法を例示する図。
【図５】検証交点情報及び統合検証情報の生成方法を例示する図。
【図６】行方向の改ざん箇所を特定する処理フローを例示する図。
【図７】列方向の改ざん箇所を特定する処理フローを例示する図。
【図８】データの改ざん箇所の特定方法を例示する図。
【図９】データの改ざん箇所の特定方法を例示する図。
【発明を実施するための形態】
【００１４】
以下、この発明の実施の形態について詳細に説明する。なお、図面中において同じ機能を有する構成部には同じ番号を付し、重複説明を省略する。
【００１５】
［実施形態］
図１を参照して、実施形態のデータ改ざん復元システムの機能構成例を説明する。データ改ざん復元システムは、データ発生部１及びデータ処理装置２を含み、この例ではＴＳＡサーバ３２を更に含む。データ処理装置２は、データ収集部２１、検証情報生成部２２、第一記憶部２３、第二記憶部２４、検証部２５及び復元部２６を含み、この例ではＴＳＡクライアント部３１を更に含む。検証情報生成部２２は、変換値生成部２２１、第一検証情報生成部２２２及び第二検証情報生成部２２３を更に含む。ＴＳＡクライアント部３１及びＴＳＡサーバ３２は、時刻情報付加部３を構成する。なお、ＴＳＡは、Time Stamping Authorityの略称であり、タイムスタンプ認証プロトコルにおける時刻認証局である。
【００１６】
図２を参照して、データ改ざん復元システムの実行するデータ改ざん復元処理の動作例を、実際に行われる手続きの順に従って説明する。
【００１７】
データ発生部１は、データ改ざん復元処理の対象となるデータを発生させる（ステップＳ１）。データ発生部１とデータ処理装置２とは、インターネット、イーサネット（登録商標）、専用線、システムバス等によって接続されており、データ発生部１で発生したデータは、データ処理装置２に送信される。データ発生部１は、例えばログサーバである。データ発生部１は、ＰＣ、携帯電話、スマートフォン等の情報端末であってもよい。
【００１８】
データ処理装置２のデータ収集部２１は、データ発生部１から受信したデータを、検証情報生成部２２を介して第一記憶部２３に記憶させる（ステップＳ２１）。もちろん、データ収集部２１は、データ発生部１から受信したデータを、検証情報生成部２２を介さずに直接第一記憶部２３に記憶させてもよい。
【００１９】
第一記憶部２３に記憶されるデータは、N,Mを２以上の所定の整数とし、n=1,…,Nとし、m=1,…,Mとし、N行×M列に分割されているN×M個のデータブロックで構成されている。データブロックのデータ長は処理対象とするデータの性質等を鑑みて任意のサイズに設計することができる。
【００２０】
検証情報生成部２２の変換値生成部２２１は、データ発生部１から受信したデータのn行目のM個のデータブロックを用いて行方向変換値Cy[n]を生成し、データ発生部１から受信したデータのn行目のm列目のデータブロックを用いて列方向変換値Cx[n][m]を生成する（ステップＳ２２１）。
【００２１】
変換値生成部２２１は、まず、図３に示すように、データの行方向のデータ長と同じサイズの乱数Iを生成する。変換値生成部２２１は、逐一ランダムに乱数Iを生成してもよいし、事前に生成されメモリ等の記憶部に格納されている複数個の値から所定の規則に従って乱数Iを選択してもよい。
【００２２】
変換値生成部２２１は、乱数Iとデータの１行目のM個のデータブロックとの排他的論理和を計算することで行方向変換値Cy[1]を生成し、行方向変換値Cy[1]とデータの２行目のM個のデータブロックとの排他的論理和を計算することで行方向変換値Cy[2]を生成し、・・・、行方向変換値Cy[N-1]とデータのN行目のM個のデータブロックとの排他的論理和を計算することで行方向変換値Cy[N]を生成する。
【００２３】
変換値生成部２２１は、つぎに、図４に示すように、データブロックのデータ長と同じサイズのN個の乱数I[1],…,I[N]を生成する。変換値生成部２２１は、逐一ランダムにN個の乱数I[1],…,I[N]を生成してもよいし、事前に生成されいずれかの記憶部に格納されている複数個の値から所定の規則に従ってN個の乱数I[1],…,I[N]を選択してもよい。
【００２４】
変換値生成部２２１は、乱数I[1]とデータの１行目の１列目のデータブロックとの排他的論理和を計算することで列方向変換値Cx[1][1]を生成し、列方向変換値Cx[1][1]とデータの１行目の２列目のデータブロックとの排他的論理和を計算することで列方向変換値Cx[1][2]を生成し、・・・、列方向変換値Cx[1][M-1]とデータの１行目のM列目のデータブロックとの排他的論理和を計算することで列方向変換値Cx[1][M]を生成する。
【００２５】
変換値生成部２２１は、同様に、m=2,…,Nについて、乱数I[n]とデータのn行目の１列目のデータブロックとの排他的論理和を計算することで列方向変換値Cx[n][1]を生成し、列方向変換値Cx[n][1]とデータのn行目の２列目のデータブロックとの排他的論理和を計算することで列方向変換値Cx[n][2]を生成し、・・・、列方向変換値Cx[n][M-1]とデータのn行目のM列目のデータブロックとの排他的論理和を計算することで列方向変換値Cx[n][M]を生成する。
【００２６】
変換値生成部２２１は、生成した行方向変換値Cy[n]と列方向変換値Cx[n][m]とを第二記憶部に記憶させる。
【００２７】
検証情報生成部２２の第一検証情報生成部２２２は、データ発生部１から受信したデータのn行目のM個のデータブロックを用いて行方向第一検証情報y[n]を生成し、データ発生部１から受信したデータのm列目のN個のデータブロックを用いて列方向第一検証情報x[m]を生成する（ステップＳ２２２）。
【００２８】
第一検証情報生成部２２２は、まず、図３に示すように、データの１行目のM個のデータブロックを用いて行方向第一検証情報y[1]を生成し、データの２行目のM個のデータブロックを用いて行方向第一検証情報y[2]を生成し、・・・、データのN行目のM個のデータブロックを用いて行方向第一検証情報y[N]を生成する。
【００２９】
第一検証情報生成部２２２は、例えば、nをn=1,…,Nの各整数として、データのn行目のM個のデータブロックを所定の第一関数に入力した場合の出力値を行方向第一検証情報y[n]とする。第一関数は、例えばハッシュ関数又は数の入力を乗算する関数である。
【００３０】
この例では、第一検証情報生成部２２２は、更に、生成した行方向第一検証情報y[n]（n=1,…,N）を用いて行方向第一検証交点情報Hy[n]（n=2,…,N）を生成し、これらを用いて統合行方向第一検証情報Hyを生成する。
【００３１】
第一検証情報生成部２２２は、図３に示すように、行方向第一検証情報y[1]及び行方向第一検証情報y[2]を用いて行方向第一検証交点情報Hy[2]を生成し、行方向第一検証交点情報Hy[2]及び行方向第一検証情報y[3]を用いて行方向第一検証交点情報Hy[3]を生成し、・・・、行方向第一検証交点情報Hy[N-1]及び行方向第一検証情報y[N]を用いて行方向第一検証交点情報Hy[N]を生成する。そして、生成した行方向第一検証交点情報Hy[n]（n=2,…,N）を用いて統合行方向第一検証情報Hyを生成する。
【００３２】
第一検証情報生成部２２２は、例えば、nをn=1,…,Nの各整数として、行方向第一検証交点情報Hy[n-1]及び行方向第一検証情報y[n]を所定の第二関数に入力した場合の出力値を行方向第一検証交点情報Hy[n]とする。そして、第一検証情報生成部２２２は、例えば、行方向第一検証交点情報Hy[n]（n=2,…,N）を所定の第三関数に入力した場合の出力値を統合行方向第一検証情報Hyとする。第二関数は、例えばハッシュ関数又は数の入力を乗算する関数である。第三関数は、例えばハッシュ関数又は複数の入力を乗算する関数である。
【００３３】
第一検証情報生成部２２２は、つぎに、図４に示すように、データの１列目のN個のデータブロックを用いて列方向第一検証情報x[1]を生成し、データの２列目のN個のデータブロックを用いて列方向第一検証情報x[2]を生成し、・・・、データのM列目のN個のデータブロックを用いて列方向第一検証情報x[M]を生成する。
【００３４】
第一検証情報生成部２２２は、例えば、mをm=1,…,Mの各整数として、データのm列目のN個のデータブロックを所定の第四関数に入力した場合の出力値を列方向第一検証情報x[m]とする。第四関数は、例えばハッシュ関数又は数の入力を乗算する関数である。
【００３５】
この例では、第一検証情報生成部２２２は、更に、生成した列方向第一検証情報x[m]（m=1,…,M）を用いて列方向第一検証交点情報Hx[m]（m=2,…,M）を生成し、統合列方向第一検証情報Hxを生成する。
【００３６】
第一検証情報生成部２２２は、図４に示すように、列方向第一検証情報x[1]及び列方向第一検証情報x[2]を用いて列方向第一検証交点情報Hx[2]を生成し、列方向第一検証交点情報Hx[2]及び列方向第一検証情報x[3]を用いて列方向第一検証交点情報Hx[3]を生成し、・・・、列方向第一検証交点情報Hx[M-1]及び列方向第一検証情報x[M]を用いて列方向第一検証交点情報Hx[M]を生成する。そして、生成した列方向第一検証交点情報Hx[m]（m=2,…,M）を用いて統合列方向第一検証情報Hxを生成する。
【００３７】
第一検証情報生成部２２２は、例えば、mをm=1,…,Mの各整数として、列方向第一検証交点情報Hx[m-1]及び列方向第一検証情報x[m]を所定の第五関数に入力した場合の出力値を列方向第一検証交点情報Hx[m]とする。そして、第一検証情報生成部２２２は、例えば、列方向第一検証交点情報Hx[m]（m=2,…,M）を所定の第六関数に入力した場合の出力値を統合列方向第一検証情報Hxとする。第五関数は、例えばハッシュ関数又は数の入力を乗算する関数である。第六関数は、例えばハッシュ関数又は複数の入力を乗算する関数である。
【００３８】
第一検証情報生成部２２２は、最後に、生成した統合行方向第一検証情報Hy及び統合列方向第一検証情報Hxを用いて統合第一検証情報Hrootを生成する。
【００３９】
第一検証情報生成部２２２は、例えば、統合行方向第一検証情報Hy及び統合列方向第一検証情報Hxを所定の第七関数に入力した場合の出力値を統合第位置検証情報Hrootとする。第七関数は、例えばハッシュ関数又は数の入力を乗算する関数である。
【００４０】
図５に、第一検証情報生成部２２２が、行方向第一検証情報y[n]、行方向第一検証交点情報Hy[n]、統合行方向第一検証情報Hy、列方向第一検証情報x[m]、列方向第一検証交点情報Hx[m]、統合列方向第一検証情報Hx及び統合第一検証情報Hrootを生成する具体例を示す。この例では、データはN行×M列に分割されているN×M個のデータブロックから構成されており、hを任意のハッシュ関数とし、nをn=1,…,Nの各整数とし、mをm=1,…,Mの各整数とし、データのn行目のm列目のデータブロックをD[n][m]とし、データのn行目のM個のデータブロックをDy[n]={D[n][1],D[n][2],…,D[n][M]}とし、データのm列目のN個のデータブロックをDx[m]={D[1][m],D[2][m],…,D[N][m]}とする。第一検証情報生成部２２２は、行方向第一検証情報y[n]を、y[n]=h(Dy[n])として求め、行方向第一検証交点情報Hy[n]を、Hy[n]=h(Hy[n-1]|Hy[n])として求め、統合行方向第一検証情報Hyを、N-1番目の行方向第一検証交点情報Hy[N]とする。また、列方向第一検証情報x[m]を、x[m]=h(Dx[m])として求め、列方向第一検証交点情報Hx[m]を、Hx[m]=h(Hx[m-1]|Hx[m])として求め、統合列方向第一検証情報Hxを、M-1番目の列方向第一検証交点情報Hx[M]とする。そして、統合第一検証情報Hrootを、Hroot=h(Hy|Hx)として求める。ここで、「|（パイプ記号）」は連結操作を表す演算子である。
【００４１】
第一検証情報生成部２２２は、生成した行方向第一検証情報y[n]、列方向第一検証情報x[m]、行方向第一検証交点情報Hy[n]、列方向第一検証交点情報Hx[m]、統合行方向第一検証情報Hy、統合列方向第一検証情報Hx及び統合第一検証情報Hrootを第二記憶部に記憶させる。統合第一検証情報Hrootは、ＴＳＡクライアント部３１に送信される。
【００４２】
ＴＳＡクライアント部３１は、統合第一検証情報Hrootを含むタイムスタンプ要求（ＴＳＡ要求）を生成して、ＴＳＡサーバ３２に送信する（ステップＳ３１）。
【００４３】
ＴＳＡサーバ３２は、受信したＴＳＡ要求に含まれる統合第一検証情報Hrootに時刻情報を付加して、時刻情報が付加された第一検証情報HrootをＴＳＡサーバ３２の秘密鍵で署名して、タイムスタンプ応答（ＴＳＡ応答）を生成する。ＴＳＡサーバ３２は、生成したＴＳＡ応答をＴＳＡクライアント部３１に送信する（ステップＳ３２）。
【００４４】
ＴＳＡクライアント部３１は、ＴＳＡ応答を受信して、第二記憶部２４に記憶させる。
【００４５】
ＴＳＡクライアント部３１とＴＳＡサーバ３２とでＴＳＡ要求及びＴＳＡ応答を送受信する詳細な手順は、例えば、「“Internet X.509 Public Key Infrastructure Time-Stamp Protocol (TSP)”、［online］、［平成25年4月3日検索］、インターネット<URL:http://www.ietf.org/rfc/rfc3161.txt>（参照文献１）」に記載されている。
【００４６】
以下、第一記憶部２３に記憶されているデータの改ざん箇所を検知する方法について説明する。
【００４７】
検証情報生成部２２の第二検証情報生成部２２３は、任意のタイミングにおいて、第一記憶部２３から読み込んだデータのn行目のM個のデータブロックを用いて行方向第二検証情報y’[n]を生成し、第一記憶部２３から読み込んだデータのm列目のN個のデータブロックを用いて列方向第二検証情報x’[m]を生成する（ステップＳ２２３）。
【００４８】
任意のタイミングとは、例えば、（１）ある一定の任意の時間が経過した定時的な場合、（２）データが一定量蓄積された定量的な場合、（３）外部からシステムへの侵入が検知された場合、（４）データへのアクセス権所有者がシステムにログイン／ログアウトした場合、（５）システム管理者がシステムにログイン／ログアウトした場合、等である。
【００４９】
第二検証情報生成部２２３は、まず、データの１行目のM個のデータブロックを用いて行方向第二検証情報y’[1]を生成し、データの２行目のM個のデータブロックを用いて行方向第二検証情報y’[2]を生成し、・・・、データのN行目のM個のデータブロックを用いて行方向第二検証情報y’[N]を生成する。
【００５０】
第二検証情報生成部２２３は、例えば、nをn=1,…,Nの各整数として、データのn行目のM個のデータブロックを上述の第一関数に入力した場合の出力値を行方向第二検証情報y’[n]とする。
【００５１】
この例では、第二検証情報生成部２２３は、更に、生成した行方向第二検証情報y’[n]（n=1,…,N）を用いて行方向第二検証交点情報H’y[n]（n=2,…,N）を生成し、これらを用いて統合行方向第二検証情報H’yを生成する。
【００５２】
第二検証情報生成部２２３は、行方向第二検証情報y’[1]及び行方向第二検証情報y’[2]を用いて行方向第二検証交点情報H’y[2]を生成し、行方向第二検証交点情報H’y[2]及び行方向第二検証情報y’[3]を用いて行方向第二検証交点情報H’y[3]を生成し、・・・、行方向第二検証交点情報H’y[N-1]及び行方向第二検証情報y’[N]を用いて行方向第二検証交点情報H’y[N]を生成する。そして、生成した行方向第二検証交点情報H’y[n]（n=2,…,N）を用いて統合行方向第二検証情報H’yを生成する。
【００５３】
第二検証情報生成部２２３は、例えば、nをn=1,…,Nの各整数として、行方向第二検証交点情報H’y[n-1]及び行方向第二検証情報y’[n]を上述の第二関数に入力した場合の出力値を行方向第二検証交点情報H’y[n]とする。そして、第二検証情報生成部２２３は、例えば、行方向第二検証交点情報H’y[n]（n=2,…,N）を上述の第三関数に入力した場合の出力値を統合行方向第二検証情報H’yとする。
【００５４】
第二検証情報生成部２２３は、つぎに、データの１列目のN個のデータブロックを用いて列方向第二検証情報x’[1]を生成し、データの２列目のN個のデータブロックを用いて列方向第二検証情報x’[2]を生成し、・・・、データのM列目のN個のデータブロックを用いて列方向第二検証情報x’[M]を生成する。
【００５５】
第二検証情報生成部２２３は、例えば、mをm=1,…,Mの各整数として、データのm列目のN個のデータブロックを上述の第四関数に入力した場合の出力値を列方向第二検証情報x’[m]とする。
【００５６】
この例では、第二検証情報生成部２２３は、更に、生成した列方向第二検証情報x’[m]（m=1,…,M）を用いて列方向第二検証交点情報H’x[m]（m=2,…,M）を生成し、統合列方向第二検証情報H’xを生成する。
【００５７】
第二検証情報生成部２２３は、列方向第二検証情報x’[1]及び列方向第二検証情報x’[2]を用いて列方向第二検証交点情報H’x[2]を生成し、列方向第二検証交点情報H’x[2]及び列方向第二検証情報x’[3]を用いて列方向第二検証交点情報H’x[3]を生成し、・・・、列方向第二検証交点情報H’x[M-1]及び列方向第二検証情報x’[M]を用いて列方向第二検証交点情報H’x[M]を生成する。そして、生成した列方向第二検証交点情報H’x[m]（m=2,…,M）を用いて統合列方向第二検証情報H’xを生成する。
【００５８】
第二検証情報生成部２２３は、例えば、mをm=1,…,Mの各整数として、列方向第二検証交点情報Hx[m-1]及び列方向第二検証情報x[m]を上述の第五関数に入力した場合の出力値を列方向第二検証交点情報H’x[m]とする。そして、第二検証情報生成部２２３は、例えば、列方向第二検証交点情報H’x[m]（m=2,…,M）を所定の第六関数に入力した場合の出力値を統合列方向第二検証情報H’xとする。
【００５９】
第二検証情報生成部２２３は、最後に、生成した統合行方向第二検証情報H’y及び統合列方向第二検証情報H’xを用いて統合第二検証情報H’rootを生成する。
【００６０】
第二検証情報生成部２２３は、例えば、統合行方向第二検証情報H’y及び統合列方向第二検証情報H’xを上述の第七関数に入力した場合の出力値を統合第二検証情報H’rootとする。
【００６１】
生成された行方向第二検証情報y’[n]、列方向第二検証情報x’[m]、行方向第二検証交点情報Hy’[n]、列方向第二検証交点情報x’[m]、統合行方向第二検証情報H’y、統合列方向第二検証情報H’x及び統合第二検証情報H’rootは、検証部２５に送信される。
【００６２】
また、ＴＳＡクライアント部３１は、第二記憶部２４から読み込んだＴＳＡ応答をＴＳＡサーバ３２の公開鍵を用いて復号し、統合第一検証情報Hrootを生成する。生成した統合第一検証情報Hrootは、検証部２５に送信される。
【００６３】
検証部２５は、この例ではまず、ＴＳＡクライアント部３１が生成した統合第一検証情報Hrootが、第二検証情報生成部２２３が生成した統合第二検証情報H’rootに一致するかどうかを検証する（図２のステップＳ２５、図６のステップｙ１、図７のステップｘ１）。統合第一検証情報Hrootが統合第二検証情報H’rootに一致する場合には、ＴＳＡ要求を復号したときに得られた時刻情報が示す時刻において、データが存在し、そのデータが改ざんされていないことが証明される。統合第一検証情報Hrootが統合第二検証情報H’rootに一致しない場合には、データが変更又は改ざんされたことが証明される。この場合、検証部２５は、以下に述べる、行方向のデータの改ざんの検知及び列方向のデータの改ざんの検知を行う。
【００６４】
以下、図６を参照して、行方向のデータの改ざんの検知について説明する。
【００６５】
検証部２５は、統合第一検証情報Hrootが、統合第二検証情報H’rootに一致するかどうかを検証する（ステップｙ１）。統合第一検証情報Hrootが統合第二検証情報H’rootに一致しない場合には、第二記憶部２４から読み込んだ統合行方向第一検証情報Hyが、第二検証情報生成部２２３が生成した統合行方向第二検証情報H’yに一致するかどうかを検証する（ステップｙ２）。
【００６６】
統合第一検証情報Hrootが統合第二検証情報H’rootに一致していないにもかかわらず、統合行方向第一検証情報Hyが統合行方向第二検証情報H’yに一致することはシステム設計上あり得ない。統合行方向第一検証情報Hyが統合行方向第二検証情報H’yに一致する場合には、システムに不具合などが生じたことが原因と考えられるため、システムユーザに対してエラーを上げる（ステップｙ３）。システムユーザに対してエラーを上げる手段としては、GUI画面にアラーム表示するなど周知の方法で構わない。
【００６７】
統合行方向第一検証情報Hyが統合行方向第二検証情報H’yに一致しない場合には、ステップｙ４に進む。
【００６８】
検証部２５は、行方向第一検証情報y[N]が、行方向第二検証情報y’[N]に一致するかどうかを検証する（ステップｙ４）。一致しない場合には、検証部２５はその比較結果を記憶する（ステップｙ５）。
【００６９】
検証部２５は、行方向第一検証交点情報Hy[N-1]が行方向第二検証交点情報H’y[N-1]に一致するかどうかを検証する（ステップｙ６）。一致する場合には、以降のデータに改ざんはないことを示しているため、行方向の改ざんを検知する処理を終了する。一致しない場合には、行方向第一検証情報y[N-1]が、行方向第二検証情報y’[N-1]に一致するかどうかを検証する（ステップｙ７）。一致しない場合には、検証部２５はその比較結果を記憶する（ステップｙ８）。
【００７０】
検証部２５は、同様にして、n=N-2,…,1について、行方向第一検証交点情報Hy[n]が行方向第二検証交点情報H’y[n]に一致するかどうかを検証する。行方向第一検証交点情報Hy[n]が行方向第二検証交点情報H’y[n]に一致する場合には、行方向の改ざんを検知する処理を終了する。行方向第一検証交点情報Hy[n]が行方向第二検証交点情報H’y[n]に一致しない場合には、更に、行方向第一検証情報y[n]が行方向第二検証情報y’[n]に一致するかどうかを検証する。行方向第一検証情報y[n]が行方向第二検証情報y’[n]に一致しない場合には検証部２５はその比較結果を記憶する。
【００７１】
検証部２５は、このようにして、第二記憶部２４から読み込んだ行方向第一検証情報y[n]が、第二検証情報生成部２２３が生成した行方向第二検証情報y’[n]に一致するかどうかを検証する。
【００７２】
以下、図７を参照して、列方向のデータの改ざんの検知について説明する。
【００７３】
検証部２５は、統合第一検証情報Hrootが、統合第二検証情報H’rootに一致するかどうかを検証する（ステップｘ１）。統合第一検証情報Hrootが統合第二検証情報H’rootに一致しない場合には、第二記憶部２４から読み込んだ統合列方向第一検証情報Hxが、第二検証情報生成部２２３が生成した統合列方向第二検証情報H’xに一致するかどうかを検証する（ステップｘ２）。
【００７４】
統合第一検証情報Hrootが統合第二検証情報H’rootに一致していないにもかかわらず、統合列方向第一検証情報Hxが統合列方向第二検証情報H’xに一致することはシステム設計上あり得ない。統合列方向第一検証情報Hxが統合列方向第二検証情報H’xに一致する場合には、システムに不具合などが生じたことが原因と考えられるため、システムユーザに対してエラーを上げる（ステップｘ３）。
【００７５】
統合列方向第一検証情報Hxが統合列方向第二検証情報H’xに一致しない場合には、ステップｘ４に進む。
【００７６】
検証部２５は、列方向第一検証情報x[M]が、列方向第二検証情報x’[M]に一致するかどうかを検証する（ステップｘ４）。一致しない場合には、検証部２５はその比較結果を記憶する（ステップｘ５）。
【００７７】
検証部２５は、列方向第一検証交点情報Hx[M-1]が、列方向第二検証交点情報H’x[M-1]に一致するかどうかを検証する（ステップｘ６）。一致する場合には、以降のデータに改ざんはないことを表しているため、列方向の改ざんを検知する処理を終了する。一致しない場合には、列方向第一検証情報x[M-1]が、列方向第二検証情報x’[M-1]に一致するかどうかを検証する（ステップｘ７）。一致しない場合には、検証部２５はその比較結果を記憶する（ステップｙ８）。
【００７８】
検証部２５は、同様にして、m=M-2,…,1について、列方向第一検証交点情報Hx[m]が列方向第二検証交点情報Hx’[m]に一致するかどうかを検証する。列方向第一検証交点情報Hx[m]が列方向第二検証交点情報H’x[m]に一致する場合には、列方向の改ざんを検知する処理を終了する。列方向第一検証交点情報Hx[m]が列方向第二検証交点情報H’x[m]に一致しない場合には、更に、列方向第一検証情報x[m]が列方向第二検証情報x’[m]に一致するかどうかを検証する。列方向第一検証情報x[m]が列方向第二検証情報x’[m]に一致しない場合には検証部２５はその比較結果を記憶する。
【００７９】
検証部２５は、このようにして、第二記憶部２４から読み込んだ列方向第一検証情報x[m]が、第二検証情報生成部２２３が生成した列方向第二検証情報x’[m]に一致するかどうかを検証する。各検証情報の比較結果の集合である検証結果は復元部２６に送信される。
【００８０】
復元部２６は、検証結果に基づいてデータが改ざんされた可能性がある箇所それぞれについて、行方向変換値から復元した行方向復元値が列方向変換値から復元した列方向復元値に一致するかどうかを検証する（ステップＳ２６）。
【００８１】
復元部２６は、例えば、検証結果がn行目のm列目のデータブロックが改ざんされた可能性があることを示しているとして、行方向変換値Cy[n-1]と行方向変換値Cy[n]との排他的論理和を計算することで行方向復元値Ey[n][m]を生成し、列方向変換値Cx[n][m-1]と列方向変換値Cx[n][m]との排他的論理和を計算することで列方向復元値Ex[n][m]を生成する。このとき、n-1行目のm列目のデータブロックが改ざんされた可能性がある場合、もしくはn行目のm-1列目のデータブロックが改ざんされた可能性がある場合には、先に、n-1行目のm列目のデータブロックもしくはn行目のm-1列目のデータブロックを復元しなければならない。したがって、検証結果が複数のデータブロックが改ざんされたことを示している場合には、n及びmの値が小さいデータブロックから順番に復元していけばよい。
【００８２】
復元部２６は、生成した行方向復元値Ey[n][m]が列方向変換値Cx[n][m]に一致するかどうか検証し、一致する場合には、そのデータブロックが改ざんされていたものとしてn行目のm列目のデータブロックを列方向変換値Cx[n][m]もしくは列方向復元値Ex[n][m]で更新する。一致しない場合には、そのデータブロックは実際には改ざんされていなかったことを表しているため、n行目のm列目のデータブロックを元に戻す。
【００８３】
復元部２６は、同様に、検証結果からデータが改ざんされた可能性が示されている全てのデータブロックについて、行方向変換値及び列方向変換値を用いたデータブロックの復元を行い、そのデータブロックが実際に改ざんされていたか否かを検証する。
【００８４】
以下、復元部２６の処理により、証拠性情報残存率を正確に算出することができる理由について説明する。
【００８５】
復元部２６は検証部２５の生成した検証結果に基づいてデータが改ざんされた可能性がある箇所の特定を行うことができる。例えば、図８に示すように、y[5]≠y’[5]かつx[4]＝x’[4]であり、それ以外の部分では一致した場合、５行目の４列目のデータブロックに改ざん又は変更があったことがわかる。また、例えば、図９に示すように、y[2]≠y’[2]かつy[4]≠y’[4]かつx[2]＝x’[2]かつx[5]＝x’[5]であり、それ以外の部分では一致した場合、２行目の２列目のデータブロック、２行目の４列目のデータブロック、５行目の２列目のデータブロック及び５行目の４列目のデータブロックに改ざん又は変更があった可能性があることがわかる。
【００８６】
このとき、複数のデータブロックに改ざんがあった場合には、実際に改ざんが行われた箇所のみを特定することができない。具体的には、i個のデータブロックが改ざんされた場合、i2個のデータブロックが改ざん箇所として特定されてしまう。例えば、図９の例において、太線で囲われた２行目の２列目のデータブロック及び５行目の４列目のデータブロックの２つのデータブロックのみが改ざんされていた場合には、一点鎖線で囲われた２行目の４列目のデータブロック及び５行目の２列目のデータブロックは実際には改ざんされていないにも関わらず改ざんされた可能性があるとして特定されてしまう。これにより改ざんされた情報の中で信頼できる情報の割合を示す証拠性情報残存率が実際よりも低く算出されてしまう。
【００８７】
復元部２６により特定された改ざん箇所それぞれについて行方向変換値Cy[n]及び列方向変換値Cx[n][m]を用いて復元した値を確認することで、実際に改ざんされた箇所のみを改ざんされたデータブロックとして特定することができる。これにより、改ざんされたデータブロックの数をより正確に把握することができる。したがって、証拠性情報残存率を正確に算出することが可能になる。
【００８８】
［プログラム、記録媒体］
この発明は上述の実施形態に限定されるものではなく、この発明の趣旨を逸脱しない範囲で適宜変更が可能であることはいうまでもない。上記実施例において説明した各種の処理は、記載の順に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。
【００８９】
また、上記実施形態で説明した各装置における各種の処理機能をコンピュータによって実現する場合、各装置が有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、上記各装置における各種の処理機能がコンピュータ上で実現される。
【００９０】
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等どのようなものでもよい。
【００９１】
また、このプログラムの流通は、例えば、そのプログラムを記録したＤＶＤ、ＣＤ−ＲＯＭ等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としてもよい。
【００９２】
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の記憶装置に格納する。そして、処理の実行時、このコンピュータは、自己の記録媒体に格納されたプログラムを読み取り、読み取ったプログラムに従った処理を実行する。また、このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよく、さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。また、サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるＡＳＰ（Application Service Provider）型のサービスによって、上述の処理を実行する構成としてもよい。なお、本形態におけるプログラムには、電子計算機による処理の用に供する情報であってプログラムに準ずるもの（コンピュータに対する直接の指令ではないがコンピュータの処理を規定する性質を有するデータ等）を含むものとする。
【００９３】
また、この形態では、コンピュータ上で所定のプログラムを実行させることにより、本装置を構成することとしたが、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。
【符号の説明】
【００９４】
１  データ発生部
２  データ処理装置
２１  データ収集部
２２１  変換値生成部
２２２  第一検証情報生成部
２２３  第二検証情報生成部
２２  検証情報生成部
２３  第一記憶部
２４  第二記憶部
２５  検証部
２６  復元部
３  時刻情報付加部
３１  ＴＳＡクライアント部
３２  ＴＳＡサーバ
【図１】
2014207607.tif 000003
【図２】
2014207607.tif 000004
【図３】
2014207607.tif 000005
【図４】
2014207607.tif 000006
【図５】
2014207607.tif 000007
【図６】
2014207607.tif 000008
【図７】
2014207607.tif 000009
【図８】
2014207607.tif 000010
【図９】
2014207607.tif 000011