(57)【要約】【課題】データの改ざん箇所を特定することができるデータ改ざん検知技術を提供する。【解決手段】データ改ざん検知システムは、データを記憶する第一記憶部と、データのn行目のm個の単位データを用いて行方向第一検証情報y[n]を生成し、データのm列目のn個の単位データを用いて列方向第一検証情報x[m]を生成する第一検証情報生成部と、行方向第一検証情報y[n]及び列方向第一検証情報x[m]を記憶する第二記憶部と、第一記憶部から読み込んだデータのn行目のm個の単位データを用いて行方向第二検証情報y’[n]を生成し、第一記憶部から読み込んだデータのm列目のn個の単位データを用いて列方向第二検証情報x’[m]を生成する第二検証情報生成部と、第二記憶部から読み込んだ行方向第一検証情報y[n]及び列方向第一検証情報x[m]が、それぞれ行方向第二検証情報y’[n]及び列方向第二検証情報x’[m]に一致するかどうかを検証する検証部と、を備える。【選択図】図１
2014089580.tif 000002
【特許請求の範囲】
【請求項１】
N,Mを２以上の所定の整数とし、n=1,…,Nとし、m=1,…,Mとし、データはn行×m列に分割されているn×m個の単位データで構成されているとして、上記データを記憶する第一記憶部と、
上記データのn行目のm個の単位データを用いて行方向第一検証情報y[n]を生成し、上記データのm列目のn個の単位データを用いて列方向第一検証情報x[m]を生成する第一検証情報生成部と、
上記行方向第一検証情報y[n]及び上記列方向第一検証情報x[m]を記憶する第二記憶部と、
上記第一記憶部から読み込んだデータのn行目のm個の単位データを用いて行方向第二検証情報y’[n]を生成し、上記第一記憶部から読み込んだデータのm列目のn個の単位データを用いて列方向第二検証情報x’[m]を生成する第二検証情報生成部と、
上記第二記憶部から読み込んだ上記行方向第一検証情報y[n]及び上記列方向第一検証情報x[m]が、それぞれ上記行方向第二検証情報y’[n]及び上記列方向第二検証情報x’[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]を用いて統合行方向第一検証情報を生成し、上記生成した列方向第一検証情報x[m][m=1,・・・,M]を用いて統合列方向第一検証情報を生成し、上記統合行方向第一検証情報及び統合列方向第一検証情報を用いて統合第一検証情報を生成し、
上記第二検証情報生成部は、更に、上記生成した行方向第二検証情報y’[n][n=1,・・・,N]を用いて統合行方向第二検証情報を生成し、上記生成した列方向第二検証情報x’[m][m=1,・・・,M]を用いて統合列方向第二検証情報を生成し、上記統合行方向第二検証情報及び統合列方向第二検証情報を用いて統合第二検証情報を生成し、
上記検証部は、更に、上記統合第一検証情報が、上記統合第二検証情報に一致するかどうかを検証する、
データ改ざん検知システム。
【請求項４】
請求項１から３の何れかのデータ改ざん検知システムであって、
上記行方向第一検証情報y[n]及び上記列方向第一検証情報x[m]を生成した時刻についての情報である時刻情報を上記行方向第一検証情報y[n]及び上記列方向第一検証情報x[m]に付加する時刻情報付加部を更に含む、
データ改ざん検知システム。
【請求項５】
請求項１から４の何れかのデータ改ざん検知システムであって、
n#,m#をそれぞれn,mより小さい整数として、
上記第一検証情報生成部は、上記データのn行目のm個の単位データのみならず行方向第一検証情報y[n#]を更に用いて行方向第一検証情報y[n]を生成し、上記データのm列目のn個の単位データのみならず列方向第一検証情報x[m#]を用いて列方向第一検証情報x[m]を生成し、
上記第二検証情報生成部は、上記データのn行目のm個の単位データのみならず行方向第二検証情報y’[n#]を更に用いて行方向第二検証情報y’[n]を生成し、上記データのm列目のn個の単位データのみならず列方向第二検証情報x’[m#]を用いて列方向第二検証情報x’[m]を生成する、
データ改ざん検知システム。
【請求項６】
第一記憶部には、N,Mを２以上の所定の整数とし、n=1,…,Nとし、m=1,…,Mとし、データはn行×m列に分割されているn×m個の単位データで構成されているとして、上記データを記憶されており、
第一検証情報生成部が、上記データのn行目のm個の単位データを用いて行方向第一検証情報y[n]を生成し、上記データのm列目のn個の単位データを用いて列方向第一検証情報x[m]を生成し、上記行方向第一検証情報y[n]及び上記列方向第一検証情報x[m]を第二記憶部に記憶させる第一検証情報生成ステップと、
第二検証情報生成部が、上記第一記憶部から読み込んだデータのn行目のm個の単位データを用いて行方向第二検証情報y’[n]を生成し、上記第一記憶部から読み込んだデータのm列目のn個の単位データを用いて列方向第二検証情報x’[m]を生成する第二検証情報生成ステップと、
検証部が、上記第二記憶部から読み込んだ上記行方向第一検証情報y[n]及び上記列方向第一検証情報x[m]が、それぞれ上記行方向第二検証情報y’[n]及び上記列方向第二検証情報x’[m]に一致するかどうかを検証する検証ステップと、
を含むデータ改ざん検知方法。
【請求項７】
請求項１から５の何れかのデータ改ざん検知システムとしてコンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、セキュリティ技術に関する。特に、システムで利用するデータの偽造、削除、改ざん等を検知し、改ざんが行われたデータに関して証拠性のある個所を特定する技術に関する。
【背景技術】
【０００２】
企業情報システム、医療システム[HER: Electric Health Record]及び物流管理システム等において、システムから収集されるデータを分析することによってシステムが正しく運用されているか客観的に評価するために、システムから出力されるデータを収集することが重要な役割を果たすようになってきている．
このため、システムから収集されるデータの変更や改ざんは、システム運用上重大な脅威となるため、収集されたデータの完全性を確保することが重要な課題となっている．
システムから出力されるデータはリアルタイム的に大量に次々と発生するため、システムから出力されたデータが変更又は改ざんされた場合に、データの変更又は改ざんを確実に検出できるようにする技術が求められている。
【０００３】
システムから出力されるデータとして例えばログ情報がある。ログ情報の改ざん、削除の防止や検知を行うために、ログ情報そのものの暗号化や、ログ情報そのものを複数の媒体に退避する方法がとられている。しかし今日、ログ情報は、リアルタイム的に大量に次々と発生するためこのような方法は非効率となっており、ログ情報の改ざん検知可能で、情報量的に効率的で証拠性の高いログ情報の保存方法が求められている。
【０００４】
例えば、特許文献１では、電子署名を用いてログ情報とリンクハッシュを用いてログ情報のハッシュチェーンを用いて電子署名回数を減らし、かつ改竄検知を行えるようにしている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開第２００８／０２６２３８号パンフレット
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１に記載された技術では、改ざんが行われた場合、改ざんが行われたデータ全体の証拠性がなくなり、たとえその中に改ざんされていない情報が含まれていたとしても、どこが改ざんされ、どこが改ざんされていないか信憑性が失われ，その情報が利用できなくなってしまう。ここでは、改ざんされた情報の中でも信頼できる情報が残っている場合、残った情報量を証拠性情報残存率という。
【０００７】
この発明は、証拠性情報残存率が高くデータの改ざん箇所を特定することができるデータ改ざん検知装置、方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
この発明の一態様によるデータ改ざん検知システムは、N,Mを２以上の所定の整数とし、n=1,…,Nとし、m=1,…,Mとし、データはn行×m列に分割されているn×m個の単位データで構成されているとして、データを記憶する第一記憶部と、データのn行目のm個の単位データを用いて行方向第一検証情報y[n]を生成し、データのm列目のn個の単位データを用いて列方向第一検証情報x[m]を生成する第一検証情報生成部と、行方向第一検証情報y[n]及び列方向第一検証情報x[m]を記憶する第二記憶部と、第一記憶部から読み込んだデータのn行目のm個の単位データを用いて行方向第二検証情報y’[n]を生成し、第一記憶部から読み込んだデータのm列目のn個の単位データを用いて列方向第二検証情報x’[m]を生成する第二検証情報生成部と、第二記憶部から読み込んだ行方向第一検証情報y[n]及び列方向第一検証情報x[m]が、それぞれ行方向第二検証情報y’[n]及び列方向第二検証情報x’[m]に一致するかどうかを検証する検証部と、を備える。
【発明の効果】
【０００９】
データの証拠性情報残存率が高い。また、データの改ざん箇所を特定することができる。
【図面の簡単な説明】
【００１０】
【図１】データ改ざん検知システムの例を説明するためのブロック図。
【図２】データ改ざん検知方法の例を説明するためのフローチャート。
【図３】検証情報の生成の例を説明するための図。
【図４】行方向の検証の例を説明するためのフローチャート。
【図５】列方向の検証の例を説明するためのフローチャート。
【図６】データの改ざん箇所の特定の例を説明するための図。
【図７】データの改ざん箇所の特定の例を説明するための図。
【図８】行方向の検証情報の生成の例を説明するための図。
【図９】列方向の検証情報の生成の例を説明するための図。
【図１０】検証結果を表示する画面の例を示す図。
【図１１】検証情報の生成の例を説明するための図。
【図１２】他の検証方法の例を説明するための図。
【図１３】他の検証方法の例を説明するための図。
【図１４】他の検証方法の例を説明するための図。
【図１５】検証情報の木構造の例を説明するための図。
【図１６】検証情報を木構造とした場合の検証の例を説明するための図。
【発明を実施するための形態】
【００１１】
以下、図面を参照して、データ改ざん検知装置及び方法の実施形態を説明する。
【００１２】
データ改ざん検知装置は、図１に示すように、データ発生部１及びデータ処理装置２を含み、この例ではＴＳＡサーバ３２を更に含む。データ処理装置２は、データ収集部２１、検証情報生成部２２、第一記憶部２３、第二記憶部２４及び検証部２５を含み、この例ではＴＳＡクライアント部３１を更に含む。検証情報生成部２２は、第一検証情報生成部２２１及び第二検証情報生成部２２２を更に含む。ＴＳＡクライアント部３１及びＴＳＡサーバ３２は、時刻情報付加部３を構成する。なお、ＴＳＡは、Time Stamp Authorityの略称である。
【００１３】
データ発生部１は、データ改ざん検知の対象となるデータを発生させる。データ発生部１とデータ処理装置２とは、インターネット、イーサネット（登録商標）、専用線、システムバス等によって接続されており、データ発生部１で発生したデータは、データ処理装置２に送信される。データ発生部１は、例えばログサーバである。データ発生部１は、ＰＣ、携帯電話、スマートフォン等の情報端末であってもよい。
【００１４】
データ処理装置２のデータ収集部２１は、受信したデータを検証情報生成部２２を介して第一記憶部２３に記憶させる。もちろん、データ収集部２１は、検証情報生成部２２を介さずに直接第一記憶部２３に受信したデータを記憶させてもよい。
【００１５】
第一記憶部２３に記憶されるデータは、例えば図３に示すようなログデータである。ログデータは、項目部と、データ部とから構成される。項目部は、ログデータの日付及びユーザ名等のログデータの内容を示す項目から構成される。データ部は、ログデータが実際に生成された日付、時刻、ユーザ名等が記載されている。
【００１６】
N,Mを２以上の所定の整数とし、n=1,…,Nとし、m=1,…,Mとし、データは、n行×m列に分割されているn×m個の単位データで構成されている。図３の例では、データ部がn×m個の単位データで構成されている。
【００１７】
検証情報生成部２２の第一検証情報生成部２２１は、上記データのn行目のm個の単位データを用いて行方向第一検証情報y[n]を生成し、上記データのm列目のn個の単位データを用いて列方向第一検証情報x[m]を生成する（図２のステップＳ１）。
【００１８】
データ発生部１から受信したデータが、例えば、いわゆるSyslogのようなログ形式であれば１行単位ごと、XML,JSONのようなデータフォーマット形式であれば１オブジェクト単位ごとに行方向第一検証情報が生成される。
【００１９】
図３の例では、第一検証情報生成部２２１は、まず、データの１行目のm個の単位データを用いて行方向第一検証情報y[1]を生成し、データの２行目のm個の単位データを用いて行方向第一検証情報y[2]を生成し、・・・、データのN行目のm個の単位データを用いて行方向第一検証情報y[N]を生成する。つぎに、第一検証情報生成部２２１は、データの１列目のn個の単位データを用いて列方向第一検証情報x[m]を生成し、データの２列目のn個の単位データを用いて列方向第一検証情報x[2]を生成し、・・・、データのM列目のn個の単位データを用いて列方向第一検証情報x[M]を生成する。
【００２０】
第一検証情報生成部２２１は、例えば、nをn=1,・・・,Nの各整数として、データのn行目のm個の単位データを所定の第一関数に入力した場合の出力値を行方向第一検証情報y[n]とし、mをm=1,・・・,Mの各整数として、データのm列目のn個の単位データを所定の第二関数に入力した場合の出力値を列方向第一検証情報x[m]とする。第一関数及び第二関数は、例えばハッシュ関数又は数の入力を乗算する関数である。
【００２１】
この例では、第一検証情報生成部２２１は、更に、行方向第一検証情報y[n][n=1,・・・,N]を用いて統合行方向第一検証情報を生成し、生成した列方向第一検証情報x[m][m=1,・・・,M]を用いて統合列方向第一検証情報を生成し、統合行方向第一検証情報及び統合列方向第一検証情報を用いて統合第一検証情報を生成する。
【００２２】
第一検証情報生成部２２１は、例えば、行方向第一検証情報y[n][n=1,・・・,N]を所定の第三関数に入力した場合の出力値を統合行方向第一検証情報とし、列方向第一検証情報x[m][m=1,・・・,M]を所定の第四関数に入力した場合の出力値を統合列方向第一検証情報とし、統合行方向第一検証情報及び統合列方向第一検証情報を所定の第五関数に入力した場合の出力値を統合第一検証情報とする。
【００２３】
第三関数、第四関数及び第五関数は、例えばハッシュ関数又は複数の入力を乗算する関数である。
【００２４】
第一関数から第五関数をハッシュ関数とした場合には、図１１に例示するように、行方向第一検証情報y[n]及び列方向第一検証情報x[m]はハッシュ値となるため、統合行方向第一検証情報をハッシュチェーン値hy[N]及び統合列方向第一検証情報をハッシュチェーン値hx[M]と表現し、統合第一検証情報をルートハッシュ値Hrootと表現する。
【００２５】
生成された、行方向第一検証情報y[n]、列方向第一検証情報x[m]、統合行方向第一検証情報及び統合列方向第一検証情報は、第二記憶部に記憶される。統合第一検証情報は、ＴＳＡクライアント部３１に送信される。
【００２６】
ＴＳＡクライアント部３１は、統合第一検証情報を含むＴＳＡ要求を生成して、ＴＳＡサーバ３２に送信する。
【００２７】
ＴＳＡサーバ３２は、受信したＴＳＡ要求に含まれる統合第一検証情報に時刻情報を付加して、時刻情報が付加された第一検証情報をＴＳＡサーバ３２の秘密鍵で署名して、ＴＳＡ応答を生成する。ＴＳＡサーバ３２は、生成したＴＳＡ応答をＴＳＡクライアント部３１に送信する。
【００２８】
ＴＳＡクライアント部３１は、ＴＳＡ応答を受信して、第二記憶部２４に記憶させる。
【００２９】
以下、第一記憶部２３に記憶されているデータの改ざん箇所を検知する方法について説明する。
【００３０】
検証情報生成部２２の第二検証情報生成部２２２は、任意のタイミングにおいて、第一記憶部２３から読み込んだデータのn行目のm個の単位データを用いて行方向第二検証情報y’[n]を生成し、第一記憶部２３から読み込んだデータのm列目のn個の単位データを用いて列方向第二検証情報x’[m]を生成する（ステップＳ２）。
【００３１】
任意のタイミングとは、例えば、（１）ある一定の任意の時間経過した定時的な場合、（２）データが一定量蓄積された定量的な場合、（３）外部からシステムへの侵入が検知された場合、（４）データへのアクセス権所有者がシステムにログイン/ログアウトした場合、（５）システム管理者がシステムにログイン/ログアウトした場合である。
【００３２】
第二検証情報生成部２２２は、具体的には、まず、データの１行目のm個の単位データを用いて行方向第二検証情報y’[1]を生成し、データの２行目のm個の単位データを用いて行方向第二検証情報y’[2]を生成し、・・・、データのN行目のm個の単位データを用いて行方向第二検証情報y’[N]を生成する。つぎに、第二検証情報生成部２２２は、データの１列目のn個の単位データを用いて列方向第二検証情報x’[m]を生成し、データの２列目のn個の単位データを用いて列方向第二検証情報x’[2]を生成し、・・・、データのM列目のn個の単位データを用いて列方向第二検証情報x’[M]を生成する。
【００３３】
第二検証情報生成部２２２は、例えば、nをn=1,・・・,Nの各整数として、データのn行目のm個の単位データを所定の第一関数に入力した場合の出力値を行方向第二検証情報y’[n]とし、mをm=1,・・・,Mの各整数として、データのm列目のn個の単位データを所定の第二関数に入力した場合の出力値を列方向第二検証情報x’[m]とする。
【００３４】
この例では、第二検証情報生成部２２２は、更に、行方向第二検証情報y’[n][n=1,・・・,N]を用いて統合行方向第二検証情報を生成し、生成した列方向第二検証情報x’[m][m=1,・・・,M]を用いて統合列方向第二検証情報を生成し、統合行方向第二検証情報及び統合列方向第二検証情報を用いて統合第二検証情報を生成する。
【００３５】
第二検証情報生成部２２２は、例えば、行方向第二検証情報y’[n][n=1,・・・,N]を所定の第三関数に入力した場合の出力値を統合行方向第二検証情報とし、列方向第二検証情報x’[m][m=1,・・・,M]を所定の第四関数に入力した場合の出力値を統合列方向第二検証情報とし、統合行方向第二検証情報及び統合列方向第二検証情報を所定の第五関数に入力した場合の出力値を統合第二検証情報とする。
【００３６】
生成された、行方向第二検証情報y[n]、列方向第二検証情報x[m]、統合行方向第二検証情報、統合列方向第二検証情報及び統合第二検証情報は、検証部２５に送信される。
【００３７】
まず、ＴＳＡクライアント部３１は、第二記憶部２４から読み込んだＴＳＡ応答をＴＳＡサーバ３２の公開鍵を用いて復号し、統合第一検証情報を生成する。生成した統合第一検証情報は、検証部２５に送信される。
【００３８】
検証部２５は、この例ではまず、ＴＳＡクライアント部３１が生成した統合第一検証情報が、第二検証情報生成部２２２が生成した統合第二検証情報に一致するかどうかを検証する（図２のステップＳ３、図４のステップｙ１、図５のステップｘ１）。
【００３９】
統合第一検証情報と統合第二検証情報が一致する場合には、ＴＳＡ要求を復号したときに得られた時刻情報が示す時刻において、データが存在し、そのデータが改ざんされていないことが証明される。
【００４０】
統合第一検証情報と統合第二検証情報が一致しない場合には、データが変更又は改ざんされたことが証明される。この場合、検証部２５は、以下に述べる、行方向のデータの改ざんの検知、及び、列方向のデータの改ざんの検知を行う。
【００４１】
まず、行方向のデータの改ざんの検知について説明する。
【００４２】
検証部２５は、統合第一検証情報と統合第二検証情報が一致しない場合には、第二記憶部２４から読み込んだ統合行方向第一検証情報が、第二検証情報生成部２２２が生成した統合行方向第二検証情報に一致するかどうかを検証する（ステップｙ１）。
【００４３】
統合行方向第一検証情報と統合行方向第二検証情報とが一致する場合には、統合第一検証情報と統合第二検証情報が一致していないにもかかわらず、統合行方向第一検証情報と統合行方向第二検証情報とが一致することはシステム設計上あり得ないため、この場合はシステムに不具合などが生じたことになるため、システムユーザに対してエラーを上げる（ステップｙ２）。統合行方向第一検証情報と統合行方向第二検証情報とが一致しない場合には、ステップｙ４に進む。
【００４４】
システムユーザに対してエラーを上げる手段としては、GUI画面にアラーム表示するなど周知の方法で構わない。
【００４５】
検証部２５は、行方向第一検証情報y[1]が、行方向第二検証情報y’[1]に一致するかどうかを検証する（ステップｙ４）。一致しない場合には、検証部２５はその検証結果を記憶する（ステップｙ５）。
【００４６】
検証部２５は、行方向第一検証情報y[2]が、行方向第二検証情報y’[2]に一致するかどうかを検証する（ステップｙ６）。一致しない場合には、検証部２５はその検証結果を記憶する（ステップｙ７）。
【００４７】
検証部２５は、行方向第一検証情報y[3]が、行方向第二検証情報y’[3]に一致するかどうかを検証する（ステップｙ８）。一致しない場合には、検証部２５はその検証結果を記憶する（ステップｙ９）。
【００４８】
以下、同様にして、nをn=4,・・・,Nの各整数として、検証部２５は、行方向第一検証情報y[n]が、行方向第二検証情報y’[n]に一致するかどうかを検証し、一致しない場合には、検証部２５はその検証結果を記憶する。
【００４９】
検証部２５は、このようにして、第二記憶部２４から読み込んだ行方向第一検証情報y[n]が、第二検証情報生成部２２２が生成した行方向第二検証情報y’[n]に一致するかどうかを検証する。
【００５０】
つぎに、列方向のデータの改ざんの検知について説明する。
【００５１】
検証部２５は、統合第一検証情報と統合第二検証情報が一致しない場合には、第二記憶部２４から読み込んだ統合列方向第一検証情報が、第二検証情報生成部２２２が生成した統合列方向第二検証情報に一致するかどうかを検証する（ステップｘ２）。
【００５２】
統合列方向第一検証情報と統合列方向第二検証情報とが一致する場合には、統合第一検証情報と統合第二検証情報が一致していないにもかかわらず、統合列方向第一検証情報と統合列方向第二検証情報とが一致することはシステム設計上あり得ないため、この場合はシステムに具合などが生じたことになるため、システムユーザに対してエラーを上げる（ステップｘ３）。統合列方向第一検証情報と統合列方向第二検証情報とが一致しない場合には、ステップｘ４に進む。
【００５３】
システムユーザに対してエラーを上げる手段としては、GUI画面にアラーム表示するなど周知の方法で構わない。
【００５４】
検証部２５は、列方向第一検証情報x[1]が、列方向第二検証情報x’[1]に一致するかどうかを検証する（ステップｘ４）。一致しない場合には、検証部２５はその検証結果を記憶する（ステップｘ５）。
【００５５】
検証部２５は、列方向第一検証情報x[2]が、列方向第二検証情報x’[2]に一致するかどうかを検証する（ステップｘ６）。一致しない場合には、検証部２５はその検証結果を記憶する（ステップｘ７）。
【００５６】
検証部２５は、列方向第一検証情報x[3]が、列方向第二検証情報x’[3]に一致するかどうかを検証する（ステップｘ８）。一致しない場合には、検証部２５はその検証結果を記憶する（ステップｘ９）。
【００５７】
以下、同様にして、mをm=4,・・・,Mの各整数として、検証部２５は、列方向第一検証情報x[m]が、列方向第二検証情報x’[m]に一致するかどうかを検証し、一致しない場合には、検証部２５はその検証結果を記憶する。
【００５８】
検証部２５は、このようにして、第二記憶部２４から読み込んだ列方向第一検証情報x[m]が、第二検証情報生成部２２２が生成した列方向第二検証情報x’[m]に一致するかどうかを検証する。
【００５９】
検証部２５は記憶した検証結果に基づいて、データが改ざんされた箇所の特定を行うことができる。例えば、図６のように、y[3]≠y’[3]かつx[2]＝x’[2]であり、それ以外の部分では一致した場合、３行目の２列目の単位データに改ざん又は変更があったことがわかる。また、例えば、図７のように、y[3]≠y’[3]かつy[N-1]≠y’[N-1]かつx[2]＝x’[2]かつx[4]＝x’[4]であり、それ以外の部分では一致した場合、３行目の２列目の単位データ、３行目の４列目の単位データ、Ｎ−１行目の２列目の単位データ及びＮ−１行目の４列目の単位データに改ざん又は変更があったことがわかる。
【００６０】
［他の検証方法］
図１３及び図１４に例示するように、検証を行ってもよい。図１３及び図１４では、行方向第一検証交点情報y+(2),y+(3),…,y+(N)、行方向第二検証交点情報y+’(2),y+’(3),…,y+’(N)、列方向第一検証交点情報x+(2),x+(3),…,x+(M)、行方向第二検証交点情報x+’(2),x+’(3),…,x+’(M)を更に用いて検証を行う。
【００６１】
n=2,3,…,Nとして、行方向第一検証交点情報y+(n)は、y+(n-1)及びy(n)を所定の第十関数に入力したときの出力値とし、行方向第二検証交点情報y+’(n)は、y+’(n-1)及びy’(n)を所定の第十関数に入力したときの出力値とする。ここで、y+(1)=y(1),y+’(1)=y’(1)とする。
【００６２】
同様に、m=2,3,…,Mとして、列方向第一検証交点情報x+(m)は、x+(m-1)及びx(n)を所定の第十一関数に入力したときの出力値とし、列方向第二検証交点情報x+’(m)は、x+’(m-1)及びy’(m)を所定の第十一関数に入力したときの出力値とする。ここで、x+(1)=x(1),x+’(1)=x’(1)とする。
【００６３】
第十関数及び第十一関数は、例えばハッシュ関数又は数の入力を乗算する関数である。
【００６４】
図１３においては、ステップｙ２の後に、n=N,N-1,…,2として、y+[n]=y+’[n]を検証する、y+[n]=y+’[n]である場合は終了し、y+[n]=y+’[n]でない場合はy[n-1]=y’[n-1]を検証し、y[n-1]=y’[n-1]である場合にはエラーを上げて終了し、y[n-1]=y’[n-1]でない場合には比較結果を記録する。ただし、n=2の場合には、y+[1]=y+’[1]の検証は行わず、y[1]=y’[1]の検証を行う。
【００６５】
図１４においては、ステップｘ２の後に、m=M,M-1,…,2として、x+[m]=x+’[m]を検証する、x+[m]=x+’[m]である場合は終了し、x+[m]=x+’[m]でない場合はx[m-1]=x’[m-1]を検証し、x[m-1]=x’[m-1]である場合にはエラーを上げて終了し、x[m-1]=x’[m-1]でない場合には比較結果を記録する。ただし、n=2の場合には、x+[1]=x+’[1]の検証は行わず、x[1]=x’[1]の検証を行う。
【００６６】
［変形例等］
n#,m#をそれぞれn,mより小さい整数として、第一検証情報生成部２２１は、データのn行目のm個の単位データのみならず行方向第一検証情報y[n#]を更に用いて行方向第一検証情報y[n]を生成し、データのm列目のn個の単位データのみならず列方向第一検証情報x[m#]を用いて列方向第一検証情報x[m]を生成してもよい。
【００６７】
例えば、図８に示すように、n>2の場合には、データのn行目のm個の単位データと、既に計算されたy[n-1]とからy[n]を計算してもよい。図８の例では、n>2の場合には、データのn行目のm個の単位データを所定の第六関数に入力した場合の出力値y*[n]と、既に計算されたy[n-1]とを、所定の第七関数に入力した場合の出力値をy[n]としている。第六関数及び第七関数は、例えばハッシュ関数又は数の入力を乗算する関数である。n=1の場合には、y*[1]をy[1]とする。
【００６８】
また、図９に示すように、m>2の場合には、データのm列目のn個の単位データと、既に計算されたx[m-1]とからx[m]を計算してもよい。図９の例では、m>2の場合には、データのm列目のn個の単位データを所定の第八関数に入力した場合の出力値x*[n]と、既に計算されたx[m-1]とを、所定の第九関数に入力した場合の出力値をx[m]としている。第八関数及び第九関数は、例えばハッシュ関数又は数の入力を乗算する関数である。m=1の場合には、x*[1]をx[1]とする。
【００６９】
同様にして、n#,m#をそれぞれn,mより小さい整数として、第二検証情報生成部２２２は、データのn行目のm個の単位データのみならず行方向第二検証情報y[n#]を更に用いて行方向第二検証情報y’[n]を生成し、データのm列目のn個の単位データのみならず列方向第二検証情報x’[m#]を用いて列方向第二検証情報x’[m]を生成してもよい。ただし、nをn=1,・・・,Nの各整数として、第一検証情報生成部２２１がy[n]を生成した方法と同じ方法で第二検証情報生成部２２２がy’[n]を生成するものとし、第一検証情報生成部２２１がx[m]を生成した方法と同じ方法で第二検証情報生成部２２２がx’[m]を生成するものとする。
【００７０】
このようにして、既に計算された行方向第一検証情報を用いて行方向第一検証情報を計算し、既に計算された行方向第二検証情報を用いて行方向第二検証情報を計算する場合、検証部２５はn=1,・・・,Nの各整数nについて降順にy[n]とy’[n]とが一致しているかを順次検証する。同様にして、このように、既に計算された列方向第一検証情報を用いて列方向第一検証情報を計算し、既に計算された列方向第二検証情報を用いて列方向第二検証情報を計算する場合、検証部２５はm=1,・・・,Mの各整数mについて降順にx[m]とx’[m]とが一致しているかを順次検証する。
【００７１】
第一検証情報生成部２２１は、統合第一検証情報を生成しなくてもよい。この場合、第二検証情報生成部２２２も統合第二検証情報を生成しなくてもよく、検証部２５は統合第一検証情報と統合第二検証情報とが一致しているかどうかの検証を行わない。
【００７２】
第一検証情報生成部２２１は、統合行方向第一検証情報及び統合列方向第一検証情報を生成しなくてもよい。この場合、第二検証情報生成部２２２も統合行方向第二検証情報及び統合列方向第二検証情報を生成しなくてもよく、検証部２５は統合行方向第一検証情報及び統合列方向第一検証情報がそれぞれ統合行方向第二検証情報及び統合列方向第二検証情報と一致しているかどうかの検証を行わない。
【００７３】
第一検証情報生成部２２１は、n=1,・・・,Nの一部のnについてのy[n]のみを計算してもよい。この場合、第二検証情報生成部２２２は、n=1,・・・,Nの上記同じ一部のnについてのy’[n]のみを計算する。同様に、第一検証情報生成部２２１は、m=1,・・・,Mの一部のmについてのx[m]のみを計算してもよい。この場合、第二検証情報生成部２２２は、m=1,・・・,Mの上記同じ一部のmについてのx’[m]のみを計算する。
【００７４】
第一検出情報生成部２２１は、図１１及び図１５に例えば示すように、隣接する同階層のノードの第一検証情報を用いてその同階層よりも１つ上の階層のノードの第一検証情報を生成することを繰り返すことにより、第一検証情報の木構造を生成してもよい。最下位の階層のノードの第一検証情報は、列方向第一検証情報及び行方向第一検証情報である。
【００７５】
同様に、第二検出情報生成部２２２は、図１１及び図１５に例えば示すように、隣接する同階層のノードの第二検証情報を用いてその同階層よりも１つ上の階層のノードの第二検証情報を生成することを繰り返すことにより、第二検証情報の木構造を生成してもよい。最下位の階層のノードの第二検証情報は、列方向第二検証情報及び行方向第二検証情報である。
【００７６】
図１５において、ノードrootの第一検証情報は統合第一検証情報に対応し、ノードxrootの第一検証情報は統合列方向第一検証情報に対応している。それ以外のノードの第一検証情報は、x数字で表す。また、ノードroot’の第二検証情報は統合列方向第二検証情報に対応し、ノードxroot’の第二検証情報は統合列方向第二検証情報に対応している。それ以外のノードの第二検証情報は、x’数字で表す。
【００７７】
この場合、検証部２５は、図１６に例えば示すように、最上位の階層から最下位の階層に向かって順に、第一検証情報と第二検証情報とが一致するかどうかを確認してもよい。具体的には、検証部２５は、第一検証情報と第二検証情報とが一致しないノードの子ノードの第一検証情報と第二検証情報とが一致するか確認することを繰り返してもよい。
【００７８】
このように、検証情報に木構造を用いることにより、検証の際の計算量を削減することができるというメリットがある。
【００７９】
図１５の例では、ノードx3に誤りがあるため、ノードx34、ノードx14、ノードxroot、
ノードrootのそれぞれで第一検証情報と第二検証情報とが一致しないことになる。
【００８０】
上記装置及び方法において説明した処理は、記載の順に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。
【００８１】
また、データ処理装置２における処理手段をコンピュータによって実現する場合、データ処理装置２が有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、データ処理装置２装置における処理手段がコンピュータ上で実現される。
【００８２】
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等どのようなものでもよい。
【００８３】
また、各処理手段は、コンピュータ上で所定のプログラムを実行させることにより構成することにしてもよいし、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。
【００８４】
その他、この発明の趣旨を逸脱しない範囲で適宜変更が可能であることはいうまでもない。
【符号の説明】
【００８５】
１      データ発生部
２      データ処理装置
２１    データ収集部
２２１  第一検証情報生成部
２２２  第二検証情報生成部
２２    検証情報生成部
２３    第一記憶部
２４    第二記憶部
２５    検証部
３      時刻情報付加部
３１    ＴＳＡクライアント部
３２    ＴＳＡサーバ
【図１】
2014089580.tif 000003
【図２】
2014089580.tif 000004
【図３】
2014089580.tif 000005
【図４】
2014089580.tif 000006
【図５】
2014089580.tif 000007
【図６】
2014089580.tif 000008
【図７】
2014089580.tif 000009
【図８】
2014089580.tif 000010
【図９】
2014089580.tif 000011
【図１０】
2014089580.tif 000012
【図１１】
2014089580.tif 000013
【図１２】
2014089580.tif 000014
【図１３】
2014089580.tif 000015
【図１４】
2014089580.tif 000016
【図１５】
2014089580.tif 000017
【図１６】
2014089580.tif 000018