(57)【要約】      （修正有）【課題】文書全体についてのハッシュ関数等を用いた演算を行うことなく、変更有無、および、変更箇所の検出を行う変更検出プログラム、変更検出方法及び変更検出装置を提供する。【解決手段】変更検出装置１００は、記憶部１４０の文書に基づき、インデックス情報を生成する。変更検出装置１００は、文書を特定する情報に対応付けられたインデックス情報を取得する。変更検出装置１００は、生成したインデックス情報と、取得したインデックス情報との比較結果に基づき、取得した文書に対して行われた変更の有無を判定する。変更検出装置１００は、変更が有る場合には、生成したインデックス情報と、取得したインデックス情報との比較結果に基づき、取得した文書における変更の箇所を検出する。【選択図】図４
2019082967.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
記憶部に記憶された文書を取得し、
取得した前記文書に基づき、前記文書に含まれる単語、文字又は符号のいずれかの情報の前記文書における出現位置を該情報に対応付けるインデックス情報を生成し、
文書を特定する情報に対応付けて記憶部に記憶されたインデックス情報を参照して、取得した前記文書を特定する情報に対応付けられたインデックス情報を取得し、
生成した前記インデックス情報と、取得した前記インデックス情報との比較結果に基づき、取得した前記文書に対して行われた変更の有無を判定し、
前記変更が有る場合には、生成した前記インデックス情報と、取得した前記インデックス情報との比較結果に基づき、取得した前記文書における前記変更の箇所を検出する、
処理を実行させることを特徴とする変更検出プログラム。
【請求項２】
前記記憶部に記憶された前記インデックス情報は、生成した前記インデックス情報とは別に、取得した前記文書を特定する情報により特定される文書を基に生成されたインデックス情報である、
ことを特徴とする請求項１に記載の変更検出プログラム。
【請求項３】
前記インデックス情報を生成する処理は、取得した前記文書を符号化した符号化文書を生成し、前記符号化文書に含まれる符号と符号の位置とを対応づけることで、前記インデックス情報を生成することを特徴とする請求項１または２に記載の変更検出プログラム。
【請求項４】
前記判定する処理は、生成した前記インデックス情報と、取得した前記インデックス情報とが一致しない場合に、取得した前記インデックス情報のハッシュ値を算出し、取得した前記インデックス情報の前記ハッシュ値と、生成した前記インデックス情報のハッシュ値との比較結果を基にして、前記変更があるか否かを判定することを特徴とする請求項１、２または３に記載の変更検出プログラム。
【請求項５】
前記インデックス情報を生成する処理は、動的辞書を更に用いて、取得した前記文書を符号化することで、符号化文書を生成することを特徴とする請求項１から４のいずれか一つに記載の変更検出プログラム。
【請求項６】
コンピュータが実行する変更検出方法であって、
記憶部に記憶された文書を取得し、
取得した前記文書に基づき、前記文書に含まれる単語、文字又は符号のいずれかの情報の前記文書における出現位置を該情報に対応付けるインデックス情報を生成し、
文書を特定する情報に対応付けて記憶部に記憶されたインデックス情報を参照して、取得した前記文書を特定する情報に対応付けられたインデックス情報を取得し、
生成した前記インデックス情報と、取得した前記インデックス情報との比較結果に基づき、取得した前記文書に対して行われた変更の有無を判定し、
前記変更が有る場合には、生成した前記インデックス情報と、取得した前記インデックス情報との比較結果に基づき、取得した前記文書における前記変更の箇所を検出する、
処理を実行することを特徴とする変更検出方法。
【請求項７】
記憶部に記憶された文書を取得し、取得した前記文書に基づき、前記文書に含まれる単語、文字又は符号のいずれかの情報の前記文書における出現位置を該情報に対応付けるインデックス情報を生成する生成部と、
文書を特定する情報に対応付けて記憶部に記憶されたインデックス情報を参照して、取得した前記文書を特定する情報に対応付けられたインデックス情報を取得し、
生成した前記インデックス情報と、取得した前記インデックス情報との比較結果に基づき、取得した前記文書に対して行われた変更の有無を判定し、
前記変更が有る場合には、生成した前記インデックス情報と、取得した前記インデックス情報との比較結果に基づき、取得した前記文書における前記変更の箇所を検出する判定部と
を有することを特徴とする変更検出装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、変更検出プログラム等に関する。
【背景技術】
【０００２】
従来、検証対象となる文書について、変更の有無を判定する場合には、ハッシュ関数が用いられている。例えば、従来技術では、原本の文書全体のハッシュ値と、検証対象となる文書全体のハッシュ値とを比較し、各ハッシュ値が異なる場合に、検証対象となる文書のいずれかの部分に変更があると判定する。また、従来技術では、文書に変更があると判定した後に、変更された文書の変更箇所を特定する処理を実行する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００７−０５２６９８号公報
【特許文献２】特開２０１３−１２５４４５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上述した従来技術では、文書全体についてのハッシュ関数等を用いた演算を行うことなく、変更有無、および、変更箇所の検出を行うことができないという問題がある。
【０００５】
従来技術のように、文書全体についてハッシュ関数を用いると、文書のサイズに応じた計算量が必要となる。また、ハッシュ値の比較により変更有りと判定した場合には、別途、他の方法により変更箇所を特定することになり、計算コストが大きくなる。
【０００６】
なお、従来の転置インデックスでは、転置インデックスのサイズを抑制するために、ストップワード（stop  word）を除外する処理を行っている。このため、文書が変更されても、文書と転置インデックスとの間に齟齬が生じるとは限らず、必ずしも、変更を検知することができない。
【０００７】
１つの側面では、本発明は、文書に対して行われた変更有無、および、変更箇所の検出を行うことができる変更検出プログラム、変更検出方法および変更検出装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
第１の案では、コンピュータに次の処理を実行させる。コンピュータは、記憶部に記憶された文書を取得する。コンピュータは、取得した文書に基づき、文書に含まれる単語、文字又は符号のいずれかの情報の文書における出現位置を該情報に対応付けるインデックス情報を生成する。コンピュータは、文書を特定する情報に対応付けて記憶部に記憶されたインデックス情報を参照して、取得した文書を特定する情報に対応付けられたインデックス情報を取得する。コンピュータは、生成したインデックス情報と、取得したインデックス情報との比較結果に基づき、取得した文書に対して行われた変更の有無を判定する。コンピュータは、変更が有る場合には、生成したインデックス情報と、取得したインデックス情報との比較結果に基づき、取得した文書における変更の箇所を検出する。
【発明の効果】
【０００９】
文書全体についてのハッシュ関数等を用いた演算を行うことなく、変更有無、および、変更箇所の検出を行うことができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、本実施例に係る変更検出装置の処理を説明するための図である。
【図２】図２は、本実施例に係るファイルのデータ構造の一例を示す図である。
【図３】図３は、本実施例に係る動的辞書のデータ構造の一例を示す図である。
【図４】図４は、本実施例に係る変更検出装置の構成を示す機能ブロック図である。
【図５】図５は、インデックスのデータ構造の一例を示す図である。
【図６】図６は、生成部がインデックスを生成する処理の一例を説明するための図である。
【図７】図７は、判定部の処理を説明するための図である。
【図８】図８は、本実施例に係る変更検出装置の処理手順を示すフローチャートである。
【図９】図９は、変更検出装置と同様の機能を実現するコンピュータのハードウェア構成の一例を示す図である。
【発明を実施するための形態】
【００１１】
以下に、本願の開示する変更検出プログラム、変更検出方法および変更検出装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例】
【００１２】
図１は、本実施例に係る変更検出装置の処理を説明するための図である。前提として、例えば、第１の外部装置がファイルＦ１を生成し、ネットワークを介して第２の外部装置に送信する。たとえば、変更検出装置は、第２の外部装置に到達するまでに、ファイルＦ１を取得し、ファイルＦ１が変更（改竄）されているか否かを判定する。第１の外部装置および第２の外部装置の図示を省略する。たとえば、変更検出装置が、第１の外部装置からファイルＦ１を受信した段階では改竄されていなくても、変更検出装置が、ファイルＦ１を保持している間に、マルチウェアなどにより改竄される場合がある。
【００１３】
図１に示すように、変更検出装置が、第２の外部装置から取得するファイルＦ１には、文書データ１と、第１のインデックス２ａと、第１のハッシュ値３ａとが含まれる。
【００１４】
文書データ１は、複数の文字列（単語）からなる文書のデータである。
【００１５】
第１のインデックス２ａは、文書データ１を符号化した場合における符号と、符号の出現位置とを対応づけた転置インデックスである。
【００１６】
変更検出装置は、ファイルＦ１を受信した際に、第１のインデックス２ａ、第１のハッシュ値３ａを生成する。変更検出装置が、第１のインデックス２ａを生成する処理の一例について説明する。変更検出装置は、文書データ１を、所定の符号化方法で符号化することで、符号化データを生成する。例えば、所定の符号化方法は、静的辞書および動的辞書を用いて単語単位で符号化を行う方法である。静的辞書は、出現頻度の高い単語と符号とを対応付けた情報である。変更検出装置は、符号化の対象となる単語が、静的辞書に存在する場合には、静的辞書に登録された符号と単語との関係から、単語を符号化する。
【００１７】
一方、変更検出装置は、符号化の対象となる単語が、静的辞書に存在しない場合には、かかる単語を動的辞書に登録して、動的符号を割り当てることで、符号化を行う。例えば、動的符号は、単語の出現に応じて割り当てられるものである。
【００１８】
変更検出装置は、文書データ１の符号化データを走査し、符号と、符号の出現位置とを対応づけることで、第１のインデックス２ａを生成する。変更検出装置は、予め、第１のインデックス２ａを算出しておくものとする。
【００１９】
第１のハッシュ値３ａは、第１のインデックス２ａを、所定のハッシュ関数に入力することで算出されるハッシュ値である。例えば、所定のハッシュ関数は、ＭＤ５（Message  Digest  Algorithm  5）等のハッシュ関数に対応する。第１のハッシュ値３ａは、予め（ファイルＦ１の受信時等に）、変更検出装置により算出される。
【００２０】
続いて、変更検出装置の変更検出時の処理の一例について説明する。たとえば、変更検出装置は、ファイルＦ１を第２の外部装置に送信するタイミング等に、変更検出の処理を実行してもよい。まず、変更検出装置は、ステップＳ１０の処理を実行する。変更検出装置は、ファイルＦ１に含まれる文書データ１を基にして、第２のインデックス２ｂを新たに生成する。変更検出装置が、第２のインデックス２ｂを新たに生成する処理は、上記の第１のインデックス２ａ、第１のハッシュ値３ａを生成するタイミングとは異なるタイミングである。たとえば、変更検出装置は、文書データ１を所定の符号化方法で符号化することで、符号化データを生成し、符号化データに含まれる符号と、符号の出現位置とを対応付けた第２のインデックス（転置インデックス）２ｂを生成する。
【００２１】
変更検出装置は、ファイルＦ１に含まれる第１のインデックス２ａ（予め算出しておいたインデックス）と、新たに算出した第２のインデックス２ｂとを比較する。変更検出装置は、第１のインデックス２ａと、第２のインデックス２ｂとが「不一致」となる場合には、第１のインデックス２ａの符号と符号の位置とが、符号化データに対応していないことを意味するので、符号化データ（文書データ１）が変更されていると判定する。また、変更検出装置は、第１のインデックス２ａと、第２のインデックス２ｂとの相違部分に基づいて、文書データ１の変更箇所を判定する。また、第２のインデックス２ｂは、第１のインデックス２ａを生成する際に用いた符号化方法で符号化されたものと同様の符号化データに対して生成されるものである。
【００２２】
変更検出装置は、ステップＳ１０の処理において、第１のインデックス２ａと、第２のインデックス２ｂとが「一致」する場合には、ステップＳ１１の処理に移行する。例えば、文書データ１が変更されており、さらに、変更された文書データ１に合わせて、第１のインデックス２ａが変更されている場合には、第１のインデックス２ａと第２のインデックス２ｂとの比較によって、変更を検出することができないためである。
【００２３】
ステップＳ１１の処理について説明する。変更検出装置は、第２のインデックス２ｂを、所定のハッシュ関数に入力することで、第２のハッシュ値３ｂを算出する。変更検出装置が利用する所定のハッシュ関数は、変更検出装置が、第１のハッシュ値３ａを算出した場合に利用したハッシュ関数と同一であるものとする。
【００２４】
変更検出装置は、第１のハッシュ値３ａと、第２のハッシュ値３ｂとを比較する。変更検出装置は、第１のハッシュ値３ａと、第２のハッシュ値３ｂとが「不一致」となる場合には、文書データ１および第１のインデックス２ａが変更されていると判定する。一方、変更検出装置は、第１のハッシュ値３ａと、第２のハッシュ値３ｂとが「一致」する場合には、文書データ１が変更されていないと判定する。
【００２５】
上記のように、変更検出装置は、第１のインデックス２ａおよび第２のインデックス２ｂの比較結果を基にして、文書データ１の変更有無および変更箇所を特定する。このため、従来技術のように、文書データ１全体に対するハッシュ値を演算しなくても、変更有無を特定でき、さらに、変更箇所を特定することができる。たとえば、変更検出装置の記憶部に記憶した文書データ１が、マルチウェアなどにより改竄されたことを検出することができる。
【００２６】
また、第１のインデックス２ａおよび第２のインデックス２ｂが一致する場合でも次のケースがある。すなわち、文書データ１が変更されており、さらに、変更された文書データ１に合わせて、第１のインデックス２ａが変更されている場合には、第１のインデックス２ａと第２のインデックス２ｂとの比較によって、変更を検出することができない。この問題に対応するべく、変更検出装置は、第２のインデックス２ｂを基にして、第２のハッシュ値３ｂを演算し、第１のハッシュ値３ａと第２のハッシュ値３ｂとの比較により、変更を検出する。第２のハッシュ値３ｂは、文書データ１全体のハッシュ値ではなく、第２のインデックス２ｂのハッシュ値であるため、計算量を削減しつつ、変更を検出することができる。
【００２７】
図２は、本実施例に係るファイルのデータ構造の一例を示す図である。図１で説明したように、ファイルＦ１は、第１の外部装置により生成され、第２の外部装置に送信されるものとする。図２に示すように、ファイルＦ１は、ヘッダ部１０ａと、データ領域１０ｂと、トレーラ部１０ｃとを有する。ヘッダ部１０ａは、文書データに含まれる単語の出現頻度の情報等が含まれる。データ領域１０ｂは、文書データ１を格納する領域である。
【００２８】
トレーラ部１０ｃは、動的辞書１１と、第１のインデックス２ａと、第１のハッシュ値３ａとを有する。動的辞書１１は、文書データ１を符号化する場合に用いられる辞書である。
【００２９】
図３は、本実施例に係る動的辞書のデータ構造の一例を示す図である。図３に示すように、動的辞書１１は、動的ビットフィルタＤ１と、動的辞書部Ｄ２と、バッファＤ３とを有する。
【００３０】
動的ビットフィルタＤ１は、２グラムと、ビットマップと、第１ポインタとを有する。動的辞書部Ｄ２は、動的符号と、第２ポインタと、連鎖領域とを対応付ける。バッファＤ３は、動的符号により符号化される前の単語を格納する。
【００３１】
動的ビットフィルタＤ１の２グラムは、２文字の文字列（あるいは２つの単語）を示す情報である。ビットマップは、２グラムの文字列に対応するビットマップを示す。例えば、「ａａ」に対応するビットマップは「０＿０＿０＿０＿０」となる。第１ポインタは、ビットマップに対応する動的符号の位置を示すポインタである。
【００３２】
例えば、動的辞書１１に登録する単語が「able△」である場合には、２グラム「ab」、「bl」、「le」、「e△」に対応するビットマップをそれぞれ組み合わせる。ビットマップの各桁において、すべてのビットマップの値が０となっている場合には、組み合わせたビットマップの該当する桁を「０」とする。これに対して、「１」が一つでも含まれる場合には該当する桁を「１」に設定することで、ビットマップを組み合わせる。
【００３３】
例えば、「ab」のビットマップが「１＿０＿０＿０＿０」、「bl」のビットマップが「０＿１＿０＿０＿０」、「le」のビットマップが「０＿０＿１＿０＿０」、「e△」のビットマップが「０＿０＿０＿１＿０」とする。この場合には、各ビットマップを組み合わせたビットマップは「１＿１＿１＿１＿０」となる。
【００３４】
動的辞書部Ｄ２の動的符号は、バッファＤ３に格納された単語に割り当てられた符号である。第２ポインタは、動的符号に対応する単語が格納されたバッファＤ３の位置を示す情報である。例えば、動的符号「Ａ０００ｈ」に対応する第２ポインタは、バッファＤ３に格納された「Mickey」の先頭位置を示す。すなわち、単語「Mickey」は、動的符号「Ａ０００ｈ」に動的符号化されていることを意味する。
【００３５】
動的辞書部Ｄ２の連鎖領域は、該当する文字列等がビットフィルタのポインタから連鎖しているか否かを示す情報である。該当する文字列等が連鎖していない場合には、連鎖領域に「ＮＵＬＬ」が設定される。
【００３６】
図４は、本実施例に係る変更検出装置の構成を示す機能ブロック図である。図４に示すように、この変更検出装置１００は、通信部１１０と、入力部１２０と、表示部１３０と、記憶部１４０と、制御部１５０とを有する。
【００３７】
通信部１１０は、第１の外部装置、第２の外部装置、その他の外部装置との間で、ネットワークを介してデータ通信を実行する通信装置である。後述する制御部１５０は、通信部１１０を介して、第１の外部装置、第２の外部装置、その他の外部装置とデータをやり取りする。
【００３８】
入力部１２０は、変更検出装置１００に各種のデータを入力するための入力装置である。入力部１２０は、例えば、キーボードやマウス、タッチパネル等の入力装置に対応する。
【００３９】
表示部１３０は、制御部１５０から出力するデータを表示する表示装置である。表示部１３０は、液晶ディスプレイやタッチパネル等に対応する。
【００４０】
記憶部１４０は、ファイルＦ１と、符号化データ１４１と、第２のインデックス２ｂと、第２のハッシュ値３ｂとを有する。記憶部１４０は、ＲＡＭ（Random  Access  Memory）、ＲＯＭ（Read  Only  Memory）、フラッシュメモリ（Flash  Memory）などの半導体メモリ素子や、ＨＤＤ（Hard  Disk  Drive）などの記憶装置に対応する。
【００４１】
ファイルＦ１は、第１の外部装置により生成され、第１の外部装置から第２の外部装置に送信された符号化ファイルである。ファイルＦ１に関する説明は、図２で説明したファイルＦ１に関する説明と同様である。
【００４２】
符号化データ１４１は、変更検出装置１００は、所定の符号化方法により、文書データ１を符号化することで生成されるデータである。
【００４３】
第２のインデックス２ｂは、ファイルＦ１の文書データ１を符号化した符号化データ１４１を基にして、変更検出装置１００が新たに生成する転置インデックスである。図５は、インデックスのデータ構造の一例を示す図である。ここでは、インデックスとして、第２のインデックス２ｂのデータ構造について説明する。なお、文書データ１に変更がなければ、第１のインデックス２ａと、第２のインデックス２ｂとは同一のインデックスとなる。
【００４４】
図５に示すように、この第２のインデックス２ｂは、符号化データ１４１に含まれる符号と、オフセットとを対応付ける。符号は、静的辞書により符号化された静的符号、または、動的辞書１１により符号化された動的符号に対応する。オフセットは、符号化データ１４１上の該当する符号の位置を示すものである。
【００４５】
一例として、符号「Ａ０００ｈ」について説明する。図５において、符号「Ａ０００ｈ」に対応するフラグ「１」が、オフセット「５９」の位置に立っている。このため、符号「Ａ０００ｈ」が、符号化データ１４１に含まれる符号のうち、先頭から５９番目に位置する符号であることを示す。なお、順番をカウントする場合には、１つの単語に対応する符号をひとくくりとする。
【００４６】
第２のハッシュ値３ｂは、第２のインデックス２ｂを、所定のハッシュ関数に入力することで算出されるハッシュ値である。所定のハッシュ関数は、第１の外部装置が第１のハッシュ値３ａを算出する場合に用いたハッシュ関数と同一である。
【００４７】
図４の説明に戻る。制御部１５０は、受信部１５１、生成部１５２、判定部１５３、通知部１５４を有する。制御部１５０は、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）などによって実現できる。また、制御部１５０は、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）などのハードワイヤードロジックによっても実現できる。
【００４８】
受信部１５１は、第２の外部装置から、変更検出の対象として、ファイルＦ１を受信する処理部である。受信部１５１は、受信したファイルＦ１を、記憶部１４０に格納する。
【００４９】
生成部１５２は、ファイルＦ１のデータ領域１０ｂに格納された文書データ１を基にして、符号化データ１４１を生成し、符号化データ１４１を基にして、第２のインデックス２ｂを生成する処理部である。なお、生成部１５２が、第１のインデックス２ａ、第１のハッシュ値３ａを算出する処理は、後述する第２のインデックス２ｂ、第２のハッシュ値３ｂを生成する処理と同様である。なお、生成部１５２は、先に、第１のインデックス２ａ、第１のハッシュ値３ａを生成しておくものとする。また、生成部１５２は、第１のインデックス２ａ、第１のハッシュ値３ａを生成した場合でも、符号化前の文書データ１を残しておくものとする。
【００５０】
生成部１５２が、文書データ１を符号化する処理の一例について説明する。生成部１５２は、静的辞書および動的辞書１１を用いて、文書データ１を符号化する。たとえば、生成部１５２は、文書データ１の文字列（単語）と、静的辞書の単語とを比較し、静的辞書にヒットする文字列に付いては、ヒットした文字列に対応づけられた符号によって、該当する文字列を置き換える処理を行う。また、生成部１５２は、静的辞書にヒットしない文字列については、動的辞書１１と、文字列との比較を行い、動的辞書１１に登録された該当文字列に対応する動的符号によって、該当文字列を置き換える処理を行う。生成部１５２は、上記処理を行うことで、符号化データ１４１を生成する。
【００５１】
生成部１５２が、符号化データ１４１を基にして、第２のインデックス２ｂを生成する処理について説明する。例えば、生成部１５２は、符号化データ１４１を走査し、各符号の位置（オフセット）を特定する。生成部１５２は、符号と、オフセットとを対応付けることで、第２のインデックス２ｂを生成する。
【００５２】
図６は、生成部がインデックスを生成する処理の一例を説明するための図である。ここでは一例として、文書データ１を符号化した符号化データを、符号化データ１４１とする。生成部１５２が符号化データ１４１を参照すると、符号「Ａ０００ｈ」が「５９」番目に位置し、符号「Ａ１００ｈ」が「３１」番目に位置する。また、符号「Ａ２００ｈ」が「１２」番目に位置し、符号「Ａ３００ｈ」が「４」番目に位置する。
【００５３】
この場合には、生成部１５２は、第２のインデックス２ｂに符号「Ａ０００ｈ」を登録し、この符号「Ａ０００ｈ」に対応するオフセット「５９」にフラグ「１」を設定する。生成部１５２は、第２のインデックス２ｂに符号「Ａ１００ｈ」を登録し、この符号「Ａ１００ｈ」に対応するオフセット「３１」にフラグ「１」を設定する。生成部１５２は、第２のインデックス２ｂに符号「Ａ２００ｈ」を登録し、この符号「Ａ２００ｈ」に対応するオフセット「１２」にフラグ「１」を設定する。生成部１５２は、第２のインデックス２ｂに符号「Ａ３００ｈ」を登録し、この符号「Ａ３００ｈ」に対応するオフセット「４」にフラグ「１」を設定する。
【００５４】
判定部１５３は、第１のインデックス２ａと、第２のインデックス２ｂとを比較して、文書データ１の変更有無および変更箇所を判定する処理部である。判定部１５３は、判定結果を、通知部１５４に出力する。以下において、判定部１５３が実行する第１処理と、第２処理とを説明する。
【００５５】
判定部１５３が実行する第１処理について説明する。判定部１５３は、ファイルＦ１のトレーラ部１０ｃに格納された第１のインデックス２ａを取得する。判定部１５３は、取得した第１のインデックス２ａと、第２のインデックス２ｂとを比較する。
【００５６】
図７は、判定部の処理を説明するための図である。図７に示す例では、第１のインデックス２ａと、第２のインデックス２ｂとを比較すると、第１のインデックス２ａと第２のインデックス２ｂとが「不一致」となる。具体的には、第２のインデックス２ｂには、符号「Ａ１００ｈ」のオフセット「３１」にフラグ「１」が設定されているが、第１のインデックス２ａには、符号「Ａ１００ｈ」のオフセット「３１」にフラグが設定されていない。このため、判定部１５３は、符号化データ１４１が「変更されている」と判定する。具体的には、変更前の符号化データ１４１’のオフセット「３１」に存在していた符号が、「Ａ１００ｈ」に変更されていると判定する。
【００５７】
また、判定部１５３は、変更されているオフセットの位置を基にして、文書データ１の変更箇所を検出する。たとえば、判定部１５３は、文書データ１と、符号化データ１４１とを比較し、変更されているオフセットの位置の符号に対応する文字列の位置を、文書データ１上において特定し、変更箇所として検出する。
【００５８】
一方、判定部１５３は、第１のインデックス２ａと、第２のインデックス２ｂとが「一致」する場合には、第２処理に移行する。
【００５９】
判定部１５３が実行する第２処理について説明する。判定部１５３は、ファイルＦ１のトレーラ部１０ｃに格納された第１のハッシュ値３ａを取得する。また、判定部１５３は、第２のインデックス２ｂを所定のハッシュ関数に入力することで、第２のハッシュ値３ｂを算出し、記憶部１４０に格納する。
【００６０】
判定部１５３は、第１のハッシュ値３ａと第２のハッシュ値３ｂとを比較し、「一致」する場合には、文書データ１に変更はないと判定する。これに対して、判定部１５３は、第１のハッシュ値３ａと第２のハッシュ値３ｂとが「不一致」となる場合には、文書データ１および第１のインデックス２ａに変更があると判定する。
【００６１】
通知部１５４は、判定部１５３の判定結果を表示部１３０に表示させる処理部である。また、通知部１５４は、判定部１５３の判定結果を、第２の外部装置に通知しても良い。
【００６２】
次に、本実施例に係る変更検出装置１００の処理手順について説明する。図８は、本実施例に係る変更検出装置の処理手順を示すフローチャートである。図８に示すように、変更検出装置１００の受信部１５１は、第２の外部装置からファイルＦ１を受信し、ファイルＦ１を記憶部１４０に格納する（ステップＳ１０１）。
【００６３】
変更検出装置１００の生成部１５２は、ファイルＦ１に含まれる文書データ１を符号化して符号化データ１４１を生成し、第１のインデックス２ａおよび第１のハッシュ値３ａを算出する（ステップＳ１０２）。生成部１５２は、再度、ファイルＦ１に含まれる文書データを符号化し、符号化データ１４１を基にして、第２のインデックス２ｂを新たに生成する（ステップＳ１０３）。たとえば、生成部１５２は、ファイルＦ１の情報を、第２の外部装置に送信するタイミングにおいて、ステップＳ１０３以降の処理を行う。
【００６４】
変更検出装置１００の判定部１５３は、第１のインデックス２ａと第２のインデックス２ｂとを比較する（ステップＳ１０４）。判定部１５３は、第１のインデックス２ａと第２のインデックス２ｂとが一致する場合には（ステップＳ１０５，Ｙｅｓ）、ステップＳ１０９に移行する。判定部１５３は、第１のインデックス２ａと第２のインデックス２ｂとが一致しない場合には（ステップＳ１０５，Ｎｏ）、ステップＳ１０６に移行する。
【００６５】
判定部１５３は、文書データ１に変更があると判定する（ステップＳ１０６）。判定部１５３は、比較結果を基にして、変更箇所を特定する（ステップＳ１０７）。変更検出装置１００の通知部１５４は、変更箇所を通知する（ステップＳ１０８）。
【００６６】
判定部１５３は、第２のインデックス２ｂを基にして、第２のハッシュ値３ｂを演算する（ステップＳ１０９）。判定部１５３は、第１のハッシュ値３ａと第２のハッシュ値３ｂとを比較する（ステップＳ１１０）。判定部１５３は、第１のハッシュ値３ａと第２のハッシュ値３ｂとが一致する場合には（ステップＳ１１１，Ｙｅｓ）、変更なしと判定し（ステップＳ１１２）、ステップＳ１１４に移行する。
【００６７】
一方、判定部１５３は、第１のハッシュ値３ａと第２のハッシュ値３ｂとが一致しない場合には（ステップＳ１１１，Ｎｏ）、文書データ１および第１のインデックス２ａに変更があると判定する（ステップＳ１１３）。通知部１５４は、判定結果を通知する（ステップＳ１１４）。
【００６８】
次に、本実施例に係る変更検出装置１００の効果について説明する。変更検出装置１００は、文書データ１が変更されているか否かを判定する場合に、文書データ１を符号化した符号化データ１４１から第２のインデックス２ｂを生成し、第１のインデックス２ａと第２のインデックス２ｂとの比較結果に基づいて、文書データ１が変更されているか否かを判定する。このため、従来技術のように、文書データ１全体に対するハッシュ値を演算しなくても、変更有無を特定できる。
【００６９】
また、第１のインデックス２ａおよび第２のインデックス２ｂは、文書データ１を符号化した符号化データ１４１に含まれる符号それぞれの位置に関する情報を有している。このため、変更検出装置１００は、第１のインデックス２ａおよび第２のインデックス２ｂを比較することで、文書データ１全体に対するハッシュ値を演算しなくても、変更有無および変更箇所を特定できる。
【００７０】
なお、第１のインデックス２ａおよび第２のインデックス２ｂが一致する場合でも次のケースがある。すなわち、文書データ１が変更されており、さらに、変更された文書データ１に対応する符号化データ１４１に合わせて、第１のインデックス２ａが変更されている場合には、第１のインデックス２ａと第２のインデックス２ｂとの比較によって、変更を検出することができない。この問題に対応するべく、変更検出装置１００は、第２のインデックス２ｂを基にして、第２のハッシュ値３ｂを演算し、第１のハッシュ値３ａと第２のハッシュ値３ｂとの比較により、変更を検出する。第２のハッシュ値３ｂは、符号化データ１全体のハッシュ値ではなく、第２のインデックス２ｂのハッシュ値であるため、計算量を削減しつつ、変更を検出することができる。
【００７１】
ところで、第１の外部装置が、ファイルＦ１を生成した場合に、ファイルＦ１のトレーラ部１０ｃに格納した動的辞書１１の情報を、変更検出装置１００に通知しておいても良い。変更検出装置１００は、第２の外部装置から取得したファイルＦ１のトレーラ部１０ｃに格納された動的辞書１１の情報と、第１の外部装置から受信しておいた動的辞書１１の情報とを比較して、動的辞書１１に変更が存在するか否かを更に判定しても良い。変更検出装置１００は、上記処理を実行することで、動的辞書の改竄を効率的に検出することができる。
【００７２】
次に、上記実施例に示した変更検出装置１００と同様の機能を実現するコンピュータのハードウェア構成の一例について説明する。図９は、変更検出装置と同様の機能を実現するコンピュータのハードウェア構成の一例を示す図である。
【００７３】
図９に示すように、コンピュータ２００は、各種演算処理を実行するＣＰＵ２０１と、ユーザからのデータの入力を受け付ける入力装置２０２と、ディスプレイ２０３とを有する。また、コンピュータ２００は、記憶媒体からプログラム等を読み取る読み取り装置２０４と、ネットワークを介して他のコンピュータとの間でデータの授受を行うインターフェース装置２０５とを有する。また、コンピュータ２００は、各種情報を一時記憶するＲＡＭ２０６と、ハードディスク装置２０７とを有する。そして、各装置２０１〜２０７は、バス２０８に接続される。
【００７４】
ハードディスク装置２０７は、生成プログラム２０７ａ、判定プログラム２０７ｂを有する。ＣＰＵ２０１は、生成プログラム２０７ａ、判定プログラム２０７ｂを読み出してＲＡＭ２０６に展開する。
【００７５】
生成プログラム２０７ａは、生成プロセス２０６ａとして機能する。判定プログラム２０７ｂは、判定プロセス２０６ｂとして機能する。生成プロセス２０６ａの処理は、生成部１５２の処理に対応する。判定プロセス２０６ｂの処理は、判定部１５３の処理に対応する。
【００７６】
なお、各プログラム２０７ａ，２０７ｂについては、必ずしも最初からハードディスク装置２０７に記憶させておかなくても良い。例えば、コンピュータ２００に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」に各プログラムを記憶させておく。そして、コンピュータ２００が各プログラム２０７ａ，２０７ｂを読み出して実行するようにしても良い。なお、実施例では、第１のインデックス及び第２のインデックスを転置インデックスとしていたが、本発明は、これに限定されるものではない。転置インデックスの代わりに、インデックスを用いても良い。
【００７７】
また、本実施例では一例として、変更検出装置１００が、第１のインデックス２ａおよび第１のハッシュ値３ａを生成していたが、これに限定されるものではなく、第１の外部装置が生成してもよい。変更検出装置１００は、第１の外部装置からファイルＦ１を受信した際に、第２のインデックス２ｂを生成して、上記の変更検出の処理を実行することで、第１の外部装置から、変更検出装置１００に送信されるまでの間に、ファイルＦ１が改竄されているか否かを判定することができる。
【００７８】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００７９】
（付記１）コンピュータに、
記憶部に記憶された文書を取得し、
取得した前記文書に基づき、前記文書に含まれる単語、文字又は符号のいずれかの情報の前記文書における出現位置を該情報に対応付けるインデックス情報を生成し、
文書を特定する情報に対応付けて記憶部に記憶されたインデックス情報を参照して、取得した前記文書を特定する情報に対応付けられたインデックス情報を取得し、
生成した前記インデックス情報と、取得した前記インデックス情報との比較結果に基づき、取得した前記文書に対して行われた変更の有無を判定し、
前記変更が有る場合には、生成した前記インデックス情報と、取得した前記インデックス情報との比較結果に基づき、取得した前記文書における前記変更の箇所を検出する、
処理を実行させることを特徴とする変更検出プログラム。
【００８０】
（付記２）前記記憶部に記憶された前記インデックス情報は、生成した前記インデックス情報とは別に、取得した前記文書を特定する情報により特定される文書を基に生成されたインデックス情報である、
ことを特徴とする付記１に記載の変更検出プログラム。
【００８１】
（付記３）前記インデックス情報を生成する処理は、取得した前記文書を符号化した符号化文書を生成し、前記符号化文書に含まれる符号と符号の位置とを対応づけることで、前記インデックス情報を生成することを特徴とする付記１または２に記載の変更検出プログラム。
【００８２】
（付記４）前記判定する処理は、生成した前記インデックス情報と、取得した前記インデックス情報とが一致しない場合に、取得した前記インデックス情報のハッシュ値を算出し、取得した前記インデックス情報の前記ハッシュ値と、生成した前記インデックス情報のハッシュ値との比較結果を基にして、前記変更があるか否かを判定することを特徴とする付記１、２または３に記載の変更検出プログラム。
【００８３】
（付記５）前記インデックス情報を生成する処理は、動的辞書を更に用いて、取得した前記文書を符号化することで、符号化文書を生成することを特徴とする付記１から４のいずれか一つに記載の変更検出プログラム。
【００８４】
（付記６）コンピュータが実行する変更検出方法であって、
記憶部に記憶された文書を取得し、
取得した前記文書に基づき、前記文書に含まれる単語、文字又は符号のいずれかの情報の前記文書における出現位置を該情報に対応付けるインデックス情報を生成し、
文書を特定する情報に対応付けて記憶部に記憶されたインデックス情報を参照して、取得した前記文書を特定する情報に対応付けられたインデックス情報を取得し、
生成した前記インデックス情報と、取得した前記インデックス情報との比較結果に基づき、取得した前記文書に対して行われた変更の有無を判定し、
前記変更が有る場合には、生成した前記インデックス情報と、取得した前記インデックス情報との比較結果に基づき、取得した前記文書における前記変更の箇所を検出する、
処理を実行することを特徴とする変更検出方法。
【００８５】
（付記７）前記記憶部に記憶された前記インデックス情報は、生成した前記インデックス情報とは別に、取得した前記文書を特定する情報により特定される文書を基に生成されたインデックス情報である、
ことを特徴とする付記６に記載の変更検出方法。
【００８６】
（付記８）前記インデックス情報を生成する処理は、取得した前記文書を符号化した符号化文書を生成し、前記符号化文書に含まれる符号と符号の位置とを対応づけることで、前記インデックス情報を生成することを特徴とする付記６または７に記載の変更検出方法。
【００８７】
（付記９）前記判定する処理は、生成した前記インデックス情報と、取得した前記インデックス情報とが一致しない場合に、取得した前記インデックス情報のハッシュ値を算出し、取得した前記インデックス情報の前記ハッシュ値と、生成した前記インデックス情報のハッシュ値との比較結果を基にして、前記変更があるか否かを判定することを特徴とする付記６、７または８に記載の変更検出方法。
【００８８】
（付記１０）前記インデックス情報を生成する処理は、動的辞書を更に用いて、取得した前記文書を符号化することで、符号化文書を生成することを特徴とする付記６から９のいずれか一つに記載の変更検出方法。
【００８９】
（付記１１）記憶部に記憶された文書を取得し、取得した前記文書に基づき、前記文書に含まれる単語、文字又は符号のいずれかの情報の前記文書における出現位置を該情報に対応付けるインデックス情報を生成する生成部と、
文書を特定する情報に対応付けて記憶部に記憶されたインデックス情報を参照して、取得した前記文書を特定する情報に対応付けられたインデックス情報を取得し、
生成した前記インデックス情報と、取得した前記インデックス情報との比較結果に基づき、取得した前記文書に対して行われた変更の有無を判定し、
前記変更が有る場合には、生成した前記インデックス情報と、取得した前記インデックス情報との比較結果に基づき、取得した前記文書における前記変更の箇所を検出する判定部と
を有することを特徴とする変更検出装置。
【００９０】
（付記１２）前記記憶部に記憶された前記インデックス情報は、生成した前記インデックス情報とは別に、取得した前記文書を特定する情報により特定される文書を基に生成されたインデックス情報である、ことを特徴とする付記１１に記載の変更検出装置。
【００９１】
（付記１３）前記生成部は、取得した前記文書を符号化した符号化文書を生成し、前記符号化文書に含まれる符号と符号の位置とを対応づけることで、前記インデックス情報を生成することを特徴とする付記１１または１２に記載の変更検出装置。
【００９２】
（付記１４）前記判定部は、生成した前記インデックス情報と、取得した前記インデックス情報とが一致しない場合に、取得した前記インデックス情報のハッシュ値を算出し、取得した前記インデックス情報の前記ハッシュ値と、生成した前記インデックス情報のハッシュ値との比較結果を基にして、前記変更があるか否かを判定することを特徴とする付記１１、１２または１３に記載の変更検出装置。
【００９３】
（付記１５）前記生成部は、動的辞書を更に用いて、取得した前記文書を符号化することで、符号化文書を生成することを特徴とする付記１１から１４のいずれか一つに記載の変更検出装置。
【符号の説明】
【００９４】
１００  変更検出装置
１１０  通信部
１２０  入力部
１３０  表示部
１４０  記憶部
１５０  制御部
【図１】
2019082967.tif 000003
【図２】
2019082967.tif 000004
【図３】
2019082967.tif 000005
【図４】
2019082967.tif 000006
【図５】
2019082967.tif 000007
【図６】
2019082967.tif 000008
【図７】
2019082967.tif 000009
【図８】
2019082967.tif 000010
【図９】
2019082967.tif 000011