(57)【特許請求の範囲】
【請求項１】
データを順序づけて記憶するデータ記憶部と、
前記データ記憶部に新たに記憶させる挿入データと、前記データ記憶部に記憶させる際の前記挿入データの挿入位置を示す挿入位置情報とを入力する入力部と、
データｎ（ｎの値は１以上であって、４ｎが前記データ記憶部内のデータの総数未満となる範囲の任意の値）個を抽出個数とし、前記データ記憶部に記憶されているデータのデータ順序に従い、前記挿入位置から前方に前記抽出個数分の範囲内にあるデータ及び前記挿入位置から後方に前記抽出個数分の範囲内にあるデータを１次隣接データとして抽出し、前記挿入データ及び前記１次隣接データ又は前記挿入データ及び前記１次隣接データの各々から派生するデータを用いて、前記挿入データ及び前記１次隣接データの範囲でのデータ順序の改竄を検知可能な順序改竄検知ハッシュ値を算出する順序改竄検知ハッシュ値算出部とを有し、
前記データ記憶部は、
前記順序改竄検知ハッシュ値算出部により算出された順序改竄検知ハッシュ値と前記挿入データとを対応づけて前記挿入位置において記憶することを特徴とするデータ処理装置。
【請求項２】
前記順序改竄検知ハッシュ値算出部は、
前記挿入データ単体にハッシュ演算を行って得られた単体ハッシュ値を取得するとともに、１次隣接データごとに、１次隣接データ単体にハッシュ演算を行って得られた単体ハッシュ値を取得し、取得した各データの単体ハッシュ値を用いて順序改竄検知ハッシュ値を算出することを特徴とする請求項１に記載のデータ処理装置。
【請求項３】
前記順序改竄検知ハッシュ値算出部は、
１次隣接データごとに１次隣接データの位置から前記抽出個数分の範囲内にあるデータを２次隣接データとして抽出し、１次隣接データ及び２次隣接データ又は１次隣接データ及び２次隣接データの各々から派生するデータを用いて、１次隣接データ及び２次隣接データの範囲でのデータ順序の改竄を検知可能な順序改竄検知ハッシュ値を１次隣接データごとに算出し、
前記データ記憶部は、
前記順序改竄検知ハッシュ値算出部により算出された順序改竄検知ハッシュ値を対応する１次隣接データに対応づけて記憶することを特徴とする請求項１又は２に記載のデータ処理装置。
【請求項４】
前記順序改竄検知ハッシュ値算出部は、
１次隣接データの位置から前方に前記抽出個数分の範囲内にあるデータ及び１次隣接データの位置から後方に前記抽出個数分の範囲内にあるデータを２次隣接データとして抽出することを特徴とする請求項３に記載のデータ処理装置。
【請求項５】
前記順序改竄検知ハッシュ値算出部は、
１次隣接データごとに、１次隣接データ単体にハッシュ演算を行って得られた単体ハッシュ値を取得するとともに、２次隣接データごとに、２次隣接データ単体にハッシュ演算を行って得られた単体ハッシュ値を取得し、取得した各データの単体ハッシュ値を用いて１次隣接データごとの順序改竄検知ハッシュ値を算出することを特徴とする請求項３又は４に記載のデータ処理装置。
【請求項６】
前記順序改竄検知ハッシュ値算出部は、
１次隣接データの位置から抽出個数分の範囲内に前記挿入位置が含まれる場合に前記挿入データを２次隣接データとして抽出することを特徴とする請求項３〜５のいずれかに記載のデータ処理装置。
【請求項７】
前記入力部は、
削除対象となる削除対象データの位置である削除位置を示す削除位置情報を入力し、
前記順序改竄検知ハッシュ値算出部は、
前記削除対象データを除いたデータ順序に従い、前記削除位置から前記抽出個数分の範囲内にあるデータを１次隣接データとして抽出するとともに、１次隣接データごとに１次隣接データの位置から前記抽出個数分の範囲内にあるデータを２次隣接データとして抽出し、１次隣接データ及び２次隣接データ又は１次隣接データ及び２次隣接データの各々から派生するデータを用いて、１次隣接データ及び２次隣接データの範囲でのデータ順序の改竄を検知可能な順序改竄検知ハッシュ値を１次隣接データごとに算出し、
前記データ記憶部は、
前記削除対象データを削除するとともに、前記順序改竄検知ハッシュ値算出部により算出された順序改竄検知ハッシュ値を対応する１次隣接データに対応づけて記憶することを特徴とする請求項１〜６のいずれかに記載のデータ処理装置。
【請求項８】
前記順序改竄検知ハッシュ値算出部は、
１次隣接データの位置から前方に前記抽出個数分の範囲内にあるデータ及び１次隣接データの位置から後方に前記抽出個数分の範囲内にあるデータを２次隣接データとして抽出することを特徴とする請求項７に記載のデータ処理装置。
【請求項９】
前記順序改竄検知ハッシュ値算出部は、
１次隣接データごとに、１次隣接データ単体にハッシュ演算を行って得られた単体ハッシュ値を取得するとともに、２次隣接データごとに、２次隣接データ単体にハッシュ演算を行って得られた単体ハッシュ値を取得し、取得した各データの単体ハッシュ値を用いて１次隣接データごとの順序改竄検知ハッシュ値を算出することを特徴とする請求項７又は８に記載のデータ処理装置。
【請求項１０】
前記データ記憶部は、
データと前記順序改竄検知ハッシュ値算出部により算出された順序改竄検知ハッシュ値とを対応づけて記憶しており、
前記順序改竄検知ハッシュ値算出部によりいずれかのデータが１次隣接データとして抽出され当該データに対して新たな順序改竄検知ハッシュ値が算出された場合に、当該データに対して記憶している順序改竄検知ハッシュ値を新たに算出された順序改竄検知ハッシュ値に更新することを特徴とする請求項３〜９のいずれかに記載のデータ処理装置。
【請求項１１】
前記順序改竄検知ハッシュ値算出部は、
取得した各データの単体ハッシュ値と乱数を用いて順序改竄検知ハッシュ値を算出することを特徴とする請求項２、５及び９のいずれかに記載のデータ処理装置。
【請求項１２】
前記データ記憶部は、
データと当該データの単体ハッシュ値とを対応づけて記憶しており、
前記データ処理装置は、更に、
前記入力部から前記挿入データを取得し、前記挿入データの単体ハッシュ値を算出する単体ハッシュ値算出部を有し、
前記順序改竄検知ハッシュ値算出部は、
前記単体ハッシュ値算出部から前記挿入データの単体ハッシュ値を取得し、前記データ記憶部から１次隣接データの単体ハッシュ値を取得することを特徴とする請求項２に記載のデータ処理装置。
【請求項１３】
前記データ処理装置は、更に、
前記データ記憶部よりも高速で動作し、前記データ記憶部に記憶されている最後尾のデータの単体ハッシュ値を少なくとも記憶する一時記憶部を有し、
前記順序改竄検知ハッシュ値算出部は、
前記挿入位置が前記データ記憶部に記憶されている最後尾のデータの後である場合に、前記一時記憶部に記憶されている単体ハッシュ値を取得することを特徴とする請求項２又は５に記載のデータ処理装置。
【請求項１４】
前記順序改竄検知ハッシュ値算出部は、
前記挿入データ単体に乱数を付加してハッシュ演算を行って得られた単体ハッシュ値を取得するとともに、１次隣接データ単体に乱数を付加してハッシュ演算を行って得られた単体ハッシュ値を取得し、取得した各データの単体ハッシュ値を用いて順序改竄検知ハッシュ値を算出することを特徴とする請求項１に記載のデータ処理装置。
【請求項１５】
前記順序改竄検知ハッシュ値算出部は、
１次隣接データごとに、１次隣接データ単体に乱数を付加してハッシュ演算を行って得られた単体ハッシュ値を取得するとともに、２次隣接データごとに、２次隣接データ単体に乱数を付加してハッシュ演算を行って得られた単体ハッシュ値を取得し、取得した各データの単体ハッシュ値を用いて１次隣接データごとの順序改竄検知ハッシュ値を算出することを特徴とする請求項３、４、７及び８のいずれかに記載のデータ処理装置。
【請求項１６】
前記データ記憶部は、
データと前記順序改竄検知ハッシュ値算出部により算出された順序改竄検知ハッシュ値とを対応づけて記憶しており、
前記入力部は、
データ順序の改竄有無の検証が行われる位置を検証位置として示す検証位置情報を入力し、
前記データ処理装置は、更に、
前記検証位置に位置するデータに対応づけられている順序改竄検知ハッシュ値と、前記検証位置から前記抽出個数分の範囲内にあるデータに対応づけられている順序改竄検知ハッシュ値とを取得し、取得した順序改竄検知ハッシュ値を用いてデータ順序の改竄の有無を検証する順序改竄検証部を有することを特徴とする請求項１〜１５のいずれかに記載のデータ処理装置。
【請求項１７】
前記順序改竄検証部は、
順序改竄検知ハッシュ値ごとに、順序改竄検知ハッシュ値に対応づけられているデータ単体にハッシュ演算を行って得られた単体ハッシュ値を取得するとともに、当該データの位置から前記抽出個数分の範囲内にある各データの単体にハッシュ演算を行って得られた単体ハッシュ値を取得し、取得した単体ハッシュ値を用いて検査用のハッシュ値を算出し、算出した検査用のハッシュ値と、照合の対象となる順序改竄検知ハッシュ値とを照合してデータ順序の改竄の有無を検証することを特徴とする請求項１６に記載のデータ処理装置。
【請求項１８】
前記順序改竄検証部は、
取得した順序改竄検知ハッシュ値を順次照合の対象とし、照合の対象とした順序改竄検知ハッシュ値に対応づけられているデータ単体に乱数を付加してハッシュ演算を行って得られた単体ハッシュ値を取得するとともに、当該データの位置から前記抽出個数分の範囲内にある各データの単体に乱数を付加してハッシュ演算を行って得られた単体ハッシュ値を取得し、取得した単体ハッシュ値を用いて検査用のハッシュ値を算出し、算出した検査用のハッシュ値と照合の対象とした順序改竄検知ハッシュ値とを照合してデータ順序の改竄の有無を検証することを特徴とする請求項１６に記載のデータ処理装置。
【請求項１９】
前記順序改竄検証部は、
取得した単体ハッシュ値に乱数を付加して検査用のハッシュ値を算出することを特徴とする請求項１７又は１８に記載のデータ処理装置。
【請求項２０】
前記データ記憶部は、
データと当該データの単体ハッシュ値とを対応づけて記憶しており、
前記データ処理装置は、更に、
前記データ記憶部から順序改竄検知ハッシュ値に対応づけられているデータと当該データの単体ハッシュ値を取得するとともに、順序改竄検知ハッシュ値に対応づけられているデータから単体ハッシュ値を算出し、算出した単体ハッシュ値と前記データ記憶部から取得した単体ハッシュ値とを照合してデータ単体における改竄の有無を検証する単体ハッシュ値検証部とを有することを特徴とする請求項１７〜１９のいずれかに記載のデータ処理装置。
【請求項２１】
データを順序づけて記憶するデータ記憶部を有するコンピュータが、前記データ記憶部に新たに記憶させる挿入データと、前記データ記憶部に記憶させる際の前記挿入データの挿入位置を示す挿入位置情報とを入力する入力ステップと、
前記コンピュータが、データｎ（ｎの値は１以上であって、４ｎが前記データ記憶部内のデータの総数未満となる範囲の任意の値）個を抽出個数とし、前記データ記憶部に記憶されているデータのデータ順序に従い、前記挿入位置から前方に前記抽出個数分の範囲内にあるデータ及び前記挿入位置から後方に前記抽出個数分の範囲内にあるデータを１次隣接データとして抽出し、前記挿入データ及び前記１次隣接データ又は前記挿入データ及び前記１次隣接データの各々から派生するデータを用いて、前記挿入データ及び前記１次隣接データの範囲でのデータ順序の改竄を検知可能な順序改竄検知ハッシュ値を算出する順序改竄検知ハッシュ値算出ステップと、
前記コンピュータが、前記順序改竄検知ハッシュ値算出ステップにより算出された順序改竄検知ハッシュ値と前記挿入データとを対応づけて前記データ記憶部の前記挿入位置に格納するデータ格納ステップとを有することを特徴とするデータ処理方法。
【請求項２２】
データを順序づけて記憶するデータ記憶部を有するコンピュータに、
前記データ記憶部に新たに記憶させる挿入データと、前記データ記憶部に記憶させる際の前記挿入データの挿入位置を示す挿入位置情報とを入力する入力処理と、
データｎ（ｎの値は１以上であって、４ｎが前記データ記憶部内のデータの総数未満となる範囲の任意の値）個を抽出個数とし、前記データ記憶部に記憶されているデータのデータ順序に従い、前記挿入位置から前方に前記抽出個数分の範囲内にあるデータ及び前記挿入位置から後方に前記抽出個数分の範囲内にあるデータを１次隣接データとして抽出し、前記挿入データ及び前記１次隣接データ又は前記挿入データ及び前記１次隣接データの各々から派生するデータを用いて、前記挿入データ及び前記１次隣接データの範囲でのデータ順序の改竄を検知可能な順序改竄検知ハッシュ値を算出する順序改竄検知ハッシュ値算出処理と、
前記順序改竄検知ハッシュ値算出処理により算出された順序改竄検知ハッシュ値と前記挿入データとを対応づけて前記データ記憶部の前記挿入位置に格納するデータ格納処理と実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データの改竄を防止するための技術に関し、特にイベントログの改竄を防止する技術に関する。
【背景技術】
【０００２】
ビルの入退場や映像監視、端末ログインなどにおいて、犯罪や情報漏洩が発生した場合に備え、その原因追究を行うために、入退場イベントや監視映像、ログインイベントを記録する必要がある。
これらのイベント情報は、当然ながら改竄されてはならない。
また、イベント情報に個人情報を含む場合は、不用意に第三者に開示されてはならない。
【０００３】
記録したイベントが改竄されているか否かをチェックするために、ハッシュ値による検証を行う場合がある。
ハッシュとは、任意長のイベント情報から固定長のダイジェスト値を求める演算であり、イベント情報とそのハッシュ値を保存し、参照時にイベント情報からハッシュ値を求め、保存しているハッシュ値との比較を行う。
イベント情報が改竄されると、ハッシュ値が異なるため、改竄が検出できる。
【０００４】
イベント情報の改竄には、イベント情報本体のデータの改竄だけでなく、イベント情報本体の消去や偽イベントの挿入といった操作もある。
従来、これに対処するにはタイムスタンプを用いる方法（非特許文献１）や連続するイベント情報全体のハッシュチェーンを求める方法（非特許文献１）、イベント情報にノード情報を付けて連接する方法（特許文献１）がある。
【特許文献１】特開２００６−３４３７９０号公報
【非特許文献１】ブルース・シュナイア著「暗号技術大全」ｐｐ．８７
【発明の開示】
【発明が解決しようとする課題】
【０００５】
イベント情報にタイムスタンプを用いる方法では、時刻の正確な同期が必要となる。
ネットワークに接続されている場合は、ＮＴＰ（Ｎｅｔｗｏｒｋ  Ｔｉｍｅ  Ｐｒｏｔｏｃｏｌ）プロトコルにより同期は可能であるが、ネットワークに接続できない環境の場合は時刻の同期がとれないという課題がある。
また、ＮＴＰは認証機能を有していないため、ＮＴＰサーバになりすまして攻撃対象の時刻を改変する事が可能であるという課題がある。
【０００６】
連続するイベント情報全体のハッシュを求める方法では、欠落したイベント情報を後から挿入する場合に、全イベント情報のハッシュ値に対するハッシュチェーンを再計算せねばならず、演算コストがかかるという課題がある。
【０００７】
イベント情報にノード情報を付けて連接する方法では、イベント情報に、イベントの前後関係を記憶するノード情報をつけて、ノードをたどれるようにすることで、イベントの連続性を保証している。この方法の場合、イベント情報以外に、イベント情報のノード番号やノードの相対関係を示す情報、挿入・削除を示す情報などを、すべてのイベント情報に付加する必要があり、蓄積すべきデータサイズが増大するという課題がある。
また、ノードの挿入を繰り返すと、多くの相対関係を記録せねばならず、ノードサイズが増大するという課題がある。
【０００８】
本発明は、これらの課題を解決することを主な目的の一つとしており、正確に同期した時計を用いず、イベントの連続性を検証可能であり、イベントの挿入・削除が可能であり、かつイベントの挿入・削除を繰り返しても、蓄積すべき情報量が増えないデータ改竄防止技術、データ改竄検証技術を実現することを主な目的とする。
【課題を解決するための手段】
【０００９】
本発明に係るデータ処理装置は、
データを順序づけて記憶するデータ記憶部と、
前記データ記憶部に新たに記憶させる挿入データと、前記データ記憶部に記憶させる際の前記挿入データの挿入位置を示す挿入位置情報とを入力する入力部と、
データｎ（ｎ≧１）個を抽出個数とし、前記データ記憶部に記憶されているデータのデータ順序に従い、前記挿入位置から前記抽出個数分の範囲内にあるデータを１次隣接データとして抽出し、前記挿入データ及び前記１次隣接データ又は前記挿入データ及び前記１次隣接データの各々から派生するデータを用いて、前記挿入データ及び前記１次隣接データの範囲でのデータ順序の改竄を検知可能な順序改竄検知ハッシュ値を算出する順序改竄検知ハッシュ値算出部とを有し、
前記データ記憶部は、
前記順序改竄検知ハッシュ値算出部により算出された順序改竄検知ハッシュ値と前記挿入データとを対応づけて前記挿入位置において記憶することを特徴とする。
【発明の効果】
【００１０】
本発明によれば、挿入対象データ及び１次隣接データ間の範囲内でのデータ順序の改竄を検知可能な順序改竄検知ハッシュ値を挿入対象データと１次隣接データに基づいて計算することができ、データ間の相対関係を示す情報、挿入・削除を示す情報などを付加する必要がない。
また、データ挿入時には、挿入対象データの順序改竄検知ハッシュ値の計算とともに、１次隣接データについて順序改竄検知ハッシュ値を再計算するだけで足りる。つまり、データ挿入時は、最大で２ｎ＋１個の順序改竄検知ハッシュ値を計算するのみで足り、蓄積されているデータの先頭からハッシュチェーンを再計算する場合に比べて計算負荷、計算時間を大幅に削減することができ、各種リソースを効率的に活用することができる。
【発明を実施するための最良の形態】
【００１１】
実施の形態１．
図１は、本実施の形態に係るイベントログ管理装置１の構成例を示すブロック図である。
イベントログ管理装置１は、データ処理装置の例である。
【００１２】
図１に示すイベントログ管理装置１において、入力部１１は、挿入対象のイベント情報（挿入データ）や挿入対象のイベント情報の挿入位置を示す挿入位置情報等を入力する。
イベント情報とは、例えば、入退場イベントや監視映像、ログインイベント等が示される情報である。また、その他に、センサで測定した温度、湿度、気圧、速度、高度等のイベントや、コンピュータにおけるＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）イベント、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）使用率、メモリ使用率、ネットワークにおけるパケット流量等のイベントが示される情報でもよい。
また、後述するように、蓄積イベントリスト記憶部１３はイベント情報を順序づけて記憶するが、挿入位置情報とは、蓄積イベントリスト記憶部１３における記憶順序において挿入対象のイベント情報を挿入する位置を特定する情報である。
【００１３】
イベント蓄積部１２は、蓄積イベントリスト記憶部１３から挿入位置付近のイベントリストを取得する。イベントリストとは、複数行のレコードから構成され、各レコードには、イベント情報、単体ハッシュ及びハッシュチェーン（連続性ハッシュ値ともいう）の組が含まれる。また、イベントリストとは、蓄積イベントリスト記憶部１３に記憶されている蓄積イベントリストの一部である。
また、イベント蓄積部１２は、入力部１１により入力された挿入対象のイベント情報、挿入対象の単体ハッシュ値及びハッシュチェーンの組を蓄積イベントリスト記憶部１３に格納する。
【００１４】
蓄積イベントリスト記憶部１３は、イベント情報を単体ハッシュ値及びハッシュチェーンとともに順序づけて記憶する。蓄積イベントリスト記憶部１３は、データ記憶部の例である。
イベント情報には、図３に示すように、単体ハッシュ値とハッシュチェーンが付加される。
そして、イベント情報、単体ハッシュ値、ハッシュチェーンの組の配列がインベントリストである。
詳細は、後述するが、単体ハッシュ値とはイベント情報単体での改竄を検知するための値である。
単体ハッシュ値は、イベント情報単体にハッシュ演算を行って得られる値である。
ハッシュチェーン（連続性ハッシュ値）とはイベント情報間の順序（連鎖関係）の改竄を検知するための値である。ハッシュチェーンは、挿入対象のイベント情報及び挿入位置の前後のイベント情報の単体ハッシュ値に対してハッシュ演算を行って得られる値である。また、ハッシュチェーンは、順序改竄検知ハッシュ値の例である。
イベントリストにおいてイベント情報は所定の順序に従って配列される。そして、挿入位置情報は、イベントリストの配置順序においてどの位置に挿入対象のイベント情報を挿入するかを指定する。
蓄積イベントリスト記憶部１３に蓄積されているイベントリストを蓄積イベントリストという。蓄積イベントリストは、データベースやファイル等、所定の形式で蓄積イベントリスト記憶部１３に蓄積されている。
【００１５】
また、イベントログ管理装置１の構成要素のうち、入力部１１、イベント蓄積部１２及び蓄積イベントリスト記憶部１３以外の要素は、イベント情報挿入機構１００、改竄検知機構３００、イベント情報削除機構５００の３つの機能に分類される。
イベント情報挿入機構１００には、単体ハッシュ値計算部１０１、連続性ハッシュ値計算部１０３及びイベント挿入部１０４が含まれる。
改竄検知機構３００には、イベント抽出部３０１、単体ハッシュ検証部３０２及び連続性ハッシュ値検証部３０３が含まれる。
イベント情報削除機構５００には、連続性ハッシュ値再計算部５０１及びイベント削除部５０２が含まれる。
【００１６】
イベント情報挿入機構１００に含まれる各要素間及び入力部１１、イベント蓄積部１２及び蓄積イベントリスト記憶部１３との関係は、図２に示す通りである。なお、単体ハッシュ値計算部１０１、連続性ハッシュ値計算部１０３及びイベント挿入部１０４の詳細は、図２を参照しながら後述する。
また、改竄検知機構３００に含まれる各要素間及び入力部１１、イベント蓄積部１２及び蓄積イベントリスト記憶部１３との関係は、図４に示す通りである。イベント抽出部３０１、単体ハッシュ検証部３０２及び連続性ハッシュ値検証部３０３の詳細は、図４を参照しながら後述する。
また、イベント情報削除機構５００に含まれる各要素間及び入力部１１、イベント蓄積部１２及び蓄積イベントリスト記憶部１３との関係は、図６に示す通りである。連続性ハッシュ値再計算部５０１及びイベント削除部５０２の詳細は、図６を参照しながら後述する。
【００１７】
また、図１では、一つのイベントログ管理装置１にイベント情報挿入機構１００、改竄検知機構３００、イベント情報削除機構５００の３つの機能が存在している例を示しているが、イベント情報挿入機構１００、改竄検知機構３００、イベント情報削除機構５００の各機能がそれぞれ別のコンピュータに配置されていてもよい。
【００１８】
次に、図２を参照して、イベント情報挿入機構１００に含まれる単体ハッシュ値計算部１０１、連続性ハッシュ値計算部１０３及びイベント挿入部１０４を説明する。
【００１９】
単体ハッシュ値計算部１０１は、入力部１１からイベント情報１０５（挿入データ）を取得し、イベント情報１０５の単体ハッシュ値１０９を求める。単体ハッシュ値計算部１０１は、単体ハッシュ値算出部の例である。
ハッシュ値計算にはＭＤ５（Ｍｅｓｓａｇｅ  Ｄｉｇｅｓｔ  Ａｌｇｏｒｉｔｈｍ  ５）やＳＨＡ１（Ｓｅｃｕｒｅ  Ｈａｓｈ  Ａｌｇｏｒｉｔｈｍ  １）等の暗号ハッシュを用いる。また、前記ハッシュ計算に秘密の情報（鍵）がないと計算できないＨＭＡＣ（Ｋｅｙｅｄ−Ｈａｓｈｉｎｇ  ｆｏｒ  Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  ｃｏｄｅ）やＣＭＡＣ（Ｃｉｐｈｅｒ−ｂａｓｅｄ  Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  ｃｏｄｅ）、公開鍵暗号を用いる電子署名を用いてもよい。イベント情報１０５の単体ハッシュ値は以下の式１となる。
ただし、Ｈａｓｈ（）はハッシュ計算を示す。
【００２０】
単体ハッシュ値１０９＝Ｈａｓｈ（イベント情報１０５）・・・（式１）
【００２１】
式１の代わりに式２を用いてもよい。
ただし、｜はデータの連接を示し、Ｒｎｄは乱数を示す。乱数とハッシュ値、イベント情報との連接順は任意でよいが、検証側と同じである必要がある。
【００２２】
単体ハッシュ値１０９＝Ｒｎｄ｜Ｈａｓｈ（イベント情報１０５｜Ｒｎｄ）・・・（式２）
【００２３】
また、イベント情報１０５の改竄を、ハッシュを用いなくても検知可能であれば、イベント情報１０５をそのまま出力してもよい。ハッシュを用いなくてもイベント情報１０５の改竄が検知可能な場合とは、例えば、イベント情報の性質・内容から判断して改竄が明らかに分かるような場合である。
計算結果（単体ハッシュ値１０９）は連続性ハッシュ値計算部１０３に送られる。
【００２４】
イベント蓄積部１２は挿入位置情報１０６を入力とし、蓄積イベントリスト記憶部１３に蓄積されている蓄積イベントリストのうち挿入位置付近のイベントリスト１０８を連続性ハッシュ値計算部１０３及びイベント挿入部１０４に出力する。
蓄積イベントリストは、データベースやファイル等、所定の形式で蓄積イベントリスト記憶部１３に蓄積されている。
イベントリスト１０８は、蓄積イベントリストの一部であり、挿入位置情報１０６に示される挿入位置が含まれるイベントリストである。
イベントリスト１０８には、具体的には、挿入位置の前２ｎ（ｎ≧１）個分のイベント情報及び挿入位置の後ろ２ｎ個分のイベント情報が含まれる。
蓄積イベントリストに挿入位置の前後２ｎ（ｎ≧１）個分のイベントがない場合は、そのまま出力する。
【００２５】
追記のように頻繁に発生する操作のために、イベント蓄積部１２は蓄積イベントリストにおける最終位置の前ｎ個分のイベント情報、単体ハッシュ値、ハッシュチェーンの組を一時記憶部（不図示）に記憶させていてもよい。
または、最終位置の前ｎ個分の単体ハッシュ値のみを一時記憶部に記憶させていてもよい。
一時記憶部は、いわゆるキャッシュメモリにより構成され、蓄積イベントリスト記憶部１３よりも高速に動作可能である。
そして、挿入位置が蓄積イベントリスト記憶部１３に記憶されている蓄積イベントリストの最後尾のデータの後である場合は、イベント蓄積部１２は一時記憶部に記憶されているｎ個分のイベント情報、単体ハッシュ値、ハッシュチェーンの組又はｎ個分の単体ハッシュ値のみを取得し、連続性ハッシュ値計算部１０３にｎ個分のイベント情報、単体ハッシュ値、ハッシュチェーンの組又はｎ個分の単体ハッシュ値のみを出力する。
【００２６】
イベント挿入部１０４はイベント情報１０５と、イベント情報１０５の単体ハッシュ値１０９、連続性ハッシュ値１１０をイベントリスト１０８に追加する。
単体ハッシュ値１０９は、単体ハッシュ値計算部１０１により生成されたものであり、連続性ハッシュ値１１０は、後述する連続性ハッシュ値計算部１０３により生成されたものである。
後述するように、連続性ハッシュ値計算部１０３は、イベント情報１０５の連続性ハッシュ値１１０を計算するだけでなく、イベント情報１０５の挿入位置の前ｎ個及び後ろｎ個のイベント情報の連続性ハッシュ値も再計算するが、イベント挿入部１０４は、これら前ｎ個及び後ろｎ個のイベント情報の連続性ハッシュ値を再計算された連続性ハッシュ値に更新する。
イベント情報１０５、単体ハッシュ値１０９、連続性ハッシュ値１１０が追加され、また、前ｎ個及び後ろｎ個分の連続性ハッシュ値が更新された後のイベントリストを追加後イベントリスト１１１という。
【００２７】
イベント蓄積部１２は追加後イベントリスト１１１をデータベースやファイル等、所定の形式で蓄積イベントリスト記憶部１３に格納する。
また、イベント蓄積部１２は、一時記憶部（図２に不図示）に保持している情報（最後尾から前ｎ個のイベント情報のハッシュチェーン）に変更があれば追加後イベンリスト１１１の内容に基づき更新する。
【００２８】
連続性ハッシュ値計算部１０３はイベントリスト１０８とイベント情報の単体ハッシュ値１０９から連続性ハッシュ値１１０を計算する。連続性ハッシュ値計算部１０３は、順序改竄検知ハッシュ値算出部の例である。
ここで、位置ｋの単体ハッシュ値をＲＨａｓｈ＿（ｋ）、ハッシュチェーンをＳＨａｓｈ＿（ｋ）と表記する。
連続性ハッシュ値計算部１０３は、−ｎ≦ｍ≦ｎを満たす全てのｍについて、以下の式３を計算する。
ただし、Ｈａｓｈ（）はハッシュ計算を示し、｜はデータの連接を示す。
式３で、ＲＨａｓｈ＿（ｋ＋ｍ−ｎ）がイベントリスト１０８に存在しない場合は連接しない。
また、ｍ≠０で、ＳＨａｓｈ＿（ｋ＋ｍ）がイベントリスト１０８に存在しなければ、ＳＨａｓｈ＿（ｋ＋ｍ）を計算しない。
式３で得られたＳＨａｓｈ＿（ｋ＋ｍ）  （−ｎ≦ｍ≦ｎ）を連続性ハッシュ値１１０として出力する。
【００２９】
ＳＨａｓｈ＿（ｋ＋ｍ）＝
Ｈａｓｈ（ＲＨａｓｈ＿（ｋ＋ｍ−ｎ）｜…｜ＲＨａｓｈ＿（ｋ＋ｍ−１）｜ＲＨａｓｈ＿（ｋ＋ｍ）｜ＲＨａｓｈ＿（ｋ＋ｍ＋１）｜…｜ＲＨａｓｈ＿（ｋ＋ｍ＋ｎ））・・・（式３）
【００３０】
換言すれば、連続性ハッシュ値計算部１０３は、データｎ（ｎ≧１）個を抽出個数とし、蓄積イベントリスト記憶部１３に記憶されているデータ、すなわち蓄積イベントリストのデータ順序に従い、挿入位置から抽出個数分の範囲内（前ｎ個分、後ろｎ個分）にあるイベント情報を１次隣接データとして抽出し、挿入対象のイベント情報１０５及び１次隣接データ（挿入位置から前ｎ個、後ろｎ個の範囲にあるイベント情報）、またはイベント情報１０５及び１次隣接データの各々から派生するデータを用いて、イベント情報１０５及び１次隣接データの範囲でのデータ順序の改竄を検知可能な連続性ハッシュ値（順序改竄検知ハッシュ値）を算出する。
イベント情報１０５及び１次隣接データの各々から派生するデータとは、具体的には、イベント情報１０５の単体ハッシュ値１０９と、１次隣接データの各々の単体ハッシュ値である。
【００３１】
更に、連続性ハッシュ値計算部１０３は、１次隣接データごとに１次隣接データの位置から抽出個数分の範囲内（前ｎ個分、後ろｎ個分）にあるイベント情報を２次隣接データとして抽出し、１次隣接データ及び２次隣接データ（各１次隣接データから前ｎ個、後ろｎ個の範囲にあるイベント情報）、または１次隣接データ及び２次隣接データの各々から派生するデータを用いて、１次隣接データ及び２次隣接データの範囲でのデータ順序の改竄を検知可能な連続性ハッシュ値（順序改竄検知ハッシュ値）を１次隣接データごとに算出する。
１次隣接データ及び２次隣接データの各々から派生するデータとは、具体的には、１次隣接データの各々の単体ハッシュ値と、２次隣接データの各々の単体ハッシュ値である。
【００３２】
そして、蓄積イベントリスト記憶部１３は、追加後イベントリスト１１１を記憶するが、追加後イベントリスト１１１は、イベント情報１０５、単体ハッシュ値１０９、連続性ハッシュ値１１０の組が挿入位置に挿入されているイベントリストである。このため、蓄積イベントリスト記憶部１３は、追加後イベントリスト１１１を記憶することで、連続性ハッシュ値計算部１０３により算出された連続性ハッシュ値１１０とイベント情報１０５を対応づけて挿入位置において記憶することになる。
同様に、追加後イベントリスト１１１は、１次隣接データ（挿入位置からｎ個前、ｎ個後ろの範囲にあるイベント情報）の連続性ハッシュ値が更新されているイベントリストである。このため、蓄積イベントリスト記憶部１３は、追加後イベントリスト１１１を記憶することで、連続性ハッシュ値計算部１０３により算出された連続性ハッシュ値を対応する１次隣接データに対応づけて記憶することになる。
【００３３】
ここで、連続性ハッシュ値計算部１０３の動作を図３に示すイベントリストを例に示す。
以下では、ｎ＝１を例にして説明する。
なお、図３では図示していないが、イベントリストには、挿入位置情報１０６に示される挿入位置を連続性ハッシュ値計算部１０３が判別できるように、レコード番号等のデータの順序を示す情報が付加されており、連続性ハッシュ値計算部１０３はこのレコード番号等を参照して挿入位置を判断する。
【００３４】
挿入位置２２０にイベント情報１０５を挿入する場合、以下の式４、５に従い、ハッシュチェーン２１９、２１３を計算する。ハッシュチェーン２１９、２１３を連続性ハッシュ値１１０としてイベント挿入部１０４に出力する。
【００３５】
ハッシュチェーン２１９＝Ｈａｓｈ（単体ハッシュ値１０９｜単体ハッシュ値２０７）・・・（式４）
ハッシュチェーン２１３＝Ｈａｓｈ（単体ハッシュ値１０９｜単体ハッシュ値２０７｜単体ハッシュ値２０８）・・・（式５）
【００３６】
つまり、ｎ＝１なので、連続性ハッシュ値計算部１０３は、挿入位置２２０の１個前のイベント情報と１個後ろのイベント情報を１次隣接データとするが、挿入位置２２０の１個前のイベント情報は存在しないので、１個後ろのイベント情報２０１のみを１次隣接データとして抽出する。
そして、連続性ハッシュ値計算部１０３は、イベント情報１０５の単体ハッシュ値１０９と１次隣接データであるイベント情報２０１の単体ハッシュ値２０７を用いて、上記の式４によりハッシュチェーン２１９を計算する。
また、連続性ハッシュ値計算部１０３は、１次隣接データであるイベント情報２０１の１個前のイベント情報と１個後ろのイベント情報を２次隣接データとして抽出する。
図３の例では、イベント情報１０５とイベント情報２０２が２次隣接データとして抽出される。
このように、連続性ハッシュ値計算部１０３は、１次隣接データの位置から抽出個数分の範囲内に挿入位置が含まれる場合は挿入対象のイベント情報も２次隣接データとして抽出する。
そして、連続性ハッシュ値計算部１０３は、２次隣接データであるイベント情報１０５の単体ハッシュ値１０９とイベント情報２０２の単体ハッシュ値２０８と、１次隣接データあるイベント情報２０１の単体ハッシュ値２０７を用いて、上記の式５によりハッシュチェーン２１３を計算する。
【００３７】
挿入位置２２１に挿入する場合、式６、７、８に従い、ハッシュチェーン２１９、２１４、２１５を計算する。ハッシュチェーン２１９、２１４、２１５を連続性ハッシュ値１１０としてイベント挿入部１０４に出力する。
【００３８】
ハッシュチェーン２１９＝Ｈａｓｈ（単体ハッシュ値２０８｜単体ハッシュ値１０９｜単体ハッシュ値２０９）・・・（式６）
ハッシュチェーン２１４＝Ｈａｓｈ（単体ハッシュ値２０７｜単体ハッシュ値２０８｜単体ハッシュ値１０９）・・・（式７）
ハッシュチェーン２１５＝Ｈａｓｈ（単体ハッシュ値１０９｜単体ハッシュ値２０９｜単体ハッシュ値２１０）・・・（式８）
【００３９】
連続性ハッシュ値計算部１０３は、挿入位置２２１の１個前のイベント情報２０２と１個後ろのイベント情報２０３を１次隣接データとして抽出する。
そして、連続性ハッシュ値計算部１０３は、イベント情報１０５の単体ハッシュ値１０９と１次隣接データであるイベント情報２０２の単体ハッシュ値２０８とイベント情報２０３の単体ハッシュ値２０９を用いて、上記の式６によりハッシュチェーン２１９を計算する。
また、連続性ハッシュ値計算部１０３は、１次隣接データであるイベント情報２０２の１個前のイベント情報２０１と１個後ろのイベント情報１０５を２次隣接データとして抽出する。
そして、連続性ハッシュ値計算部１０３は、２次隣接データであるイベント情報２０１の単体ハッシュ値２０７とイベント情報１０５の単体ハッシュ値１０９と、１次隣接データあるイベント情報２０２の単体ハッシュ値２０８を用いて、上記の式７によりハッシュチェーン２１４を計算する。
更に、連続性ハッシュ値計算部１０３は、１次隣接データであるイベント情報２０３の１個前のイベント情報１０５と１個後ろのイベント情報２０４を２次隣接データとして抽出する。
そして、連続性ハッシュ値計算部１０３は、２次隣接データであるイベント情報１０５の単体ハッシュ値１０９とイベント情報２０４の単体ハッシュ値２１０と、１次隣接データあるイベント情報２０３の単体ハッシュ値２０９を用いて、上記の式８によりハッシュチェーン２１５を計算する。
【００４０】
挿入位置２２２に挿入する場合、式９、１０に従い、ハッシュチェーン２１９、２１８を計算する。ハッシュチェーン２１９、２１８を連続性ハッシュ値１１０としてイベント挿入部１０４に出力する。
【００４１】
ハッシュチェーン２１９＝Ｈａｓｈ（単体ハッシュ値２１２｜単体ハッシュ値１０９）・・・（式９）
ハッシュチェーン２１８＝Ｈａｓｈ（単体ハッシュ値２１１｜単体ハッシュ値２１２｜単体ハッシュ値１０９）・・・（式１０）
【００４２】
連続性ハッシュ値計算部１０３は、挿入位置２２２の１個前のイベント情報と１個後ろのイベント情報を１次隣接データとするが、挿入位置２２２の１個後ろのイベント情報は存在しないので、１個前のイベント情報２０６のみを１次隣接データとして抽出する。
そして、連続性ハッシュ値計算部１０３は、イベント情報１０５の単体ハッシュ値１０９と１次隣接データであるイベント情報２０６の単体ハッシュ値２１２を用いて、上記の式９によりハッシュチェーン２１９を計算する。
また、連続性ハッシュ値計算部１０３は、１次隣接データであるイベント情報２０６の１個前のイベント情報と１個後ろのイベント情報を２次隣接データとして抽出する。
図３の例では、イベント情報２０５とイベント情報１０５が２次隣接データとして抽出される。
このように、連続性ハッシュ値計算部１０３は、１次隣接データの位置から抽出個数分の範囲内に挿入位置が含まれる場合は挿入対象のイベント情報も２次隣接データとして抽出する。
そして、連続性ハッシュ値計算部１０３は、２次隣接データであるイベント情報２０５の単体ハッシュ値２１１とイベント情報１０５の単体ハッシュ値１０９と、１次隣接データあるイベント情報２０６の単体ハッシュ値２１２を用いて、上記の式１０によりハッシュチェーン２１８を計算する。
【００４３】
挿入位置２２３に挿入する場合、式１１に従い、ハッシュチェーン２１９を計算する。ハッシュチェーン２１９を連続性ハッシュ値１１０としてイベント挿入部１０４に出力する。
【００４４】
ハッシュチェーン２１９＝Ｈａｓｈ（単体ハッシュ値１０９）・・・（式１１）
【００４５】
連続性ハッシュ値計算部１０３は、挿入位置２２３の１個前のイベント情報と１個後ろのイベント情報を１次隣接データとするが、挿入位置の１個前も１個後ろもイベント情報は存在しないので、１次隣接データは存在しない。
この場合は、連続性ハッシュ値計算部１０３は、イベント情報１０５の単体ハッシュ値１０９のみを用いて、上記の式１１によりハッシュチェーン２１９を計算する。
また、１次隣接データが存在しないので、２次隣接データも存在せず、連続性ハッシュ値計算部１０３は、ハッシュチェーン２１９のみを計算する。
【００４６】
挿入位置２２０、２２１、２２２にイベント情報１０５を挿入する場合は、１次隣接データのハッシュチェーンが再計算されるため、イベント挿入部１０４は、再計算されたハッシュチェーン、つまり、イベントリスト１０８のハッシュチェーンＳＨａｓｈ＿（ｋ＋ｍ）  （ｍ≠０）を上書きする。
そして、追加後のイベントリストを追加後イベントリスト１１１として出力し、イベント蓄積部１２に出力する。
【００４７】
以上の説明では、ｎ＝１の例を説明したが、ｎの値は２以上であってもよい。
ｎの値は、要求されるセキュリティ強度及びイベント情報の挿入時の連続性ハッシュ値の計算効率により決定される。
但し、ｎの値が大きすぎると、連続性ハッシュ値の計算において過度な時間及び負荷が生じるため、ｎの値を例えば１０以下とすることが考えられる。
【００４８】
図８は、イベント情報の挿入時の各要素の動作例を示すフローチャート図である。
以下、図８を用いて各要素の動作を説明する。
【００４９】
先ず、入力部１１が、挿入対象のイベント情報１０５及び挿入位置情報１０６を入力する（Ｓ８０１）（入力ステップ）。
そして、入力部１１は、単体ハッシュ値計算部１０１にイベント情報１０５を出力し、連続性ハッシュ値計算部１０３に挿入位置情報１０６を出力し、イベント挿入部１０４にイベント情報１０５及び挿入位置情報１０６を出力し、また、イベント蓄積部１２に挿入位置情報を出力する。
【００５０】
次に、イベント蓄積部１２が挿入位置情報１０６に示される挿入位置から少なくとも前２ｎ個分のレコード、少なくとも後ろ２ｎ個のレコードを蓄積イベントリスト記憶部１３の蓄積イベントリストから抽出し、イベントリスト１０８を生成し（Ｓ８０２）、連続性ハッシュ値計算部１０３及びイベント挿入部１０４に出力する。
【００５１】
次に、連続性ハッシュ値計算部１０３がイベントリスト１０８を取得し、挿入位置に基づき、イベントリスト１０８において１次隣接データ及び２次隣接データを特定し、それぞれの単体ハッシュ値を取得する（Ｓ８０３）（順序改竄検知ハッシュ値算出ステップ）。
【００５２】
また、単体ハッシュ値計算部１０１がイベント情報１０５から単体ハッシュ値を計算し（Ｓ８０４）、単体ハッシュ値１０９として連続性ハッシュ値計算部１０３に出力する。
また、単体ハッシュ値計算部１０１は、単体ハッシュ値１０９をイベント挿入部１０４にも出力する。
【００５３】
なお、Ｓ８０３の処理とＳ８０４の処理の順序は逆でもよいし、同時進行でもよい。
【００５４】
連続性ハッシュ値計算部１０３は、単体ハッシュ値計算部１０１からイベント情報１０５の単体ハッシュ値１０９を取得し、挿入対象のイベント情報１０５、１次隣接データごとに、単体ハッシュ値を用いてハッシュチェーンを計算する（Ｓ８０５）（順序改竄検知ハッシュ値算出ステップ）。
その後、連続性ハッシュ値計算部１０３は、挿入対象のイベント情報１０５のハッシュチェーン１１０及び１次隣接データの各々の再計算後のハッシュチェーンをイベント挿入部１０４に出力する。
【００５５】
次に、イベント挿入部１０４が、連続性ハッシュ値計算部１０３から、挿入対象のイベント情報１０５のハッシュチェーン１１０及び１次隣接データの各々の再計算後のハッシュチェーンを受信し、イベントリスト１０８に、イベント情報１０５、単体ハッシュ値１０９、ハッシュチェーン１１０を挿入位置に書き込むとともに、１次隣接データの再計算されたハッシュチェーンを書き込み（上書きし）、追加後イベントリスト１１１をイベント蓄積部１２に出力する（Ｓ８０６）。
図２の例では、イベント挿入部１０４は、イベント情報１０５を入力部１１から受信し、単体ハッシュ値１０９を単体ハッシュ値計算部１０１から受信することになっているが、連続性ハッシュ値計算部１０３からイベント情報１０５及び単体ハッシュ値１０９も受信するようにしてもよい。
【００５６】
次に、イベント蓄積部１２が追加後イベントリスト１１１をイベント挿入部１０４から受信し、追加後イベントリスト１１１を蓄積イベントリストに上書きして蓄積イベントリスト記憶部１３に格納する（Ｓ８０７）（データ格納ステップ）。
【００５７】
なお、図２及び図８の説明では、イベント挿入部１０４が、イベントリスト１０８にイベント情報１０５、単体ハッシュ値１０９、ハッシュチェーン１１０を書き込むとともに、１次隣接データの再計算されたハッシュチェーンを書き込み（上書きし）、追加後イベントリスト１１１とする例を説明したが、連続性ハッシュ値計算部１０３が追加後イベントリスト１１１を生成するようにしてもよい。
連続性ハッシュ値計算部１０３は、イベント情報１０５、単体ハッシュ値１０９、イベントリスト１０８、挿入位置情報１０６を入力し、また、イベント情報１０５のハッシュチェーン１１０及び１次隣接データの再計算ハッシュチェーンを計算するので、これらを用いて追加後イベントリスト１１１を生成することができ、追加後イベントリスト１１１をイベント蓄積部１２に出力することができる。
なお、連続性ハッシュ値計算部１０３が追加後イベントリスト１１１を生成する場合は、イベント挿入部１０４を省略することができる。
【００５８】
次に、図４を参照して、改竄検知機構３００に含まれるイベント抽出部３０１、単体ハッシュ検証部３０２及び連続性ハッシュ値検証部３０３を説明する。
【００５９】
改竄検知においては、入力部１１は、データ順序の改竄有無の検証が行われる位置を検証位置として示す検証位置情報３０５を入力し、検証位置情報３０５をイベント蓄積部１２及びイベント抽出部３０１に出力する。
【００６０】
イベント蓄積部１２は、検証位置情報３０５に基づき蓄積イベントリストから、イベントリスト３０６を出力する。
イベントリスト３０６は、検証位置情報３０５で示される検証位置にあるイベント情報、単体ハッシュ値、ハッシュチェーンの組と、その前ｎ個分及び後ろｎ個分のイベント情報、単体ハッシュ値、ハッシュチェーンの組を含む。ｎの値は挿入時と同じである。
該当する位置のイベント情報、単体ハッシュ値、ハッシュチェーンの組が存在しない場合は、それを含まずにイベントリスト３０６を生成する。
【００６１】
イベント抽出部３０１は検証位置情報３０５とイベントリスト３０６から該当するイベント情報３０８（検証位置にあるイベント情報）、イベント情報３０８の単体ハッシュ値３０７、イベント情報３０８のハッシュチェーン３０９、イベント情報３０８の前ｎ個の単体ハッシュ値及び後ろｎ個の単体ハッシュ値３１０をイベントリスト３０６より抽出する。ｎの値は挿入時と同じである。
そして、イベント抽出部３０１は、イベント情報３０８とイベント情報３０８の単体ハッシュ値３０７を単体ハッシュ検証部３０２に出力し、イベント情報３０８の単体ハッシュ値３０７、イベント情報３０８の前後の単体ハッシュ値３１０、イベント情報のハッシュチェーン３０９を連続性ハッシュ値検証部３０３に出力する。
【００６２】
単体ハッシュ検証部３０２は、イベント情報３０８のハッシュ値を求め、イベント抽出部３０１から取得したイベント情報３０８の単体ハッシュ値３０７と比較し、その結果を単体ハッシュ検証結果３１１として出力する。
前述の式１を用いた場合は、下記の式１２によりＲｈａｓｈを計算する。
Ｒｈａｓｈとイベント情報３０８の単体ハッシュ値３０７が一致したらＴｒｕｅとし、一致しない場合はＦａｌｓｅとする。
前述の式２を用いた場合は、下記の式１３によりＲｈａｓｈを計算する。
そして、結果を単体ハッシュ検証結果３１１として出力する。
【００６３】
Ｒｈａｓｈ＝Ｈａｓｈ（イベント情報３０６）・・・（式１２）
Ｒｈａｓｈ＝Ｈａｓｈ（イベント情報３０６｜単体ハッシュ値３０７の乱数成分）・・・（式１３）
【００６４】
連続性ハッシュ値検証部３０３は、イベント抽出部３０１から取得したイベント情報３０８の単体ハッシュ値３０７とイベント情報３０８前後の単体ハッシュ値３１０から式１４を用いてＳＨａｓｈを求め、イベント抽出部３０１から取得したイベント情報３０８のハッシュチェーン３０９と比較し、その結果を連続性ハッシュ値検証結果３１２として出力する。
連続性ハッシュ値検証部３０３は、順序改竄検知部の例である。
式１４で、イベントの位置情報３０４の示すイベントリストの位置をｋとする。一致したらＴｒｕｅ、一致しなければＦａｌｓｅとする。結果を連続性ハッシュ値検証結果３１２として出力する。
【００６５】
ＳＨａｓｈ＝Ｈａｓｈ（ＲＨａｓｈ＿（ｋ−ｎ）｜…｜ＲＨａｓｈ＿（ｋ−１）｜ＲＨａｓｈ＿（ｋ）｜ＲＨａｓｈ＿（ｋ＋１）｜…｜ＲＨａｓｈ＿（ｋ＋ｎ））・・・（式１４）
【００６６】
次に、連続性ハッシュ値検証部３０３の動作を図５に示すイベントリストを例に示す。
ここでは、ｎ＝１として説明する。
【００６７】
検証位置４１９のイベントの連続性を検証する場合、式１５に従い、一時ハッシュＳｈａｓｈを計算する。
Ｓｈａｓｈとハッシュチェーン４１３とが一致した場合はＴｒｕｅとし、一致しない場合はＦａｌｓｅとする。
【００６８】
Ｓｈａｓｈ＝Ｈａｓｈ（単体ハッシュ値４０７｜単体ハッシュ値４０８）・・・（式１５）
【００６９】
つまり、この場合は、検証位置４１９の１個前のレコードが存在しないため、連続性ハッシュ値検証部３０３は検証位置４１９の１個後ろのレコードにある単体ハッシュ値４０８を取得し、検証位置４１９にある単体ハッシュ値４０７とともに式１５により一時ハッシュＳｈａｓｈを計算する。
【００７０】
検証位置４２０のイベントの連続性を検証する場合、式１６に従い、一時ハッシュＳｈａｓｈを計算する。
Ｓｈａｓｈとハッシュチェーン４１５とが一致した場合はＴｒｕｅとし、一致しない場合はＦａｌｓｅとする。
【００７１】
Ｓｈａｓｈ＝Ｈａｓｈ（単体ハッシュ値４０８｜単体ハッシュ値４０９｜単体ハッシュ値４１０）・・・（式１６）
【００７２】
つまり、この場合は、検証位置４２０の１個前にも１個後ろにもレコードが存在するため、連続性ハッシュ値検証部３０３は検証位置４１９の１個前のレコードにある単体ハッシュ値４０８と１個後ろのレコードにある単体ハッシュ値４１０を取得し、検証位置４２０にある単体ハッシュ値４０９とともに式１６により一時ハッシュＳｈａｓｈを計算する。
【００７３】
検証位置４２１のイベントの連続性を検証する場合、式１７に従い、一時ハッシュＳｈａｓｈを計算する。
Ｓｈａｓｈとハッシュチェーン４１８とが一致した場合はＴｒｕｅとし、一致しない場合はＦａｌｓｅとする。
【００７４】
Ｓｈａｓｈ＝Ｈａｓｈ（単体ハッシュ値４１１｜単体ハッシュ値４１２）・・・（式１７）
【００７５】
つまり、この場合は、検証位置４２１の１個後ろのレコードが存在しないため、連続性ハッシュ値検証部３０３は検証位置４２１の１個前のレコードにある単体ハッシュ値４１１を取得し、検証位置４２１にある単体ハッシュ値４１２とともに式１７により一時ハッシュＳｈａｓｈを計算する。
【００７６】
図９は、イベント情報の順序の改竄有無の検証時の各要素の動作例を示すフローチャート図である。
以下、図９を用いて各要素の動作を説明する。
【００７７】
先ず、入力部１１が、検証位置情報３０５を入力し（Ｓ９０１）、検証位置情報３０５をイベント蓄積部１２及びイベント抽出部３０１に出力する。
【００７８】
次に、イベント蓄積部１２は、検証位置情報３０５に基づき蓄積イベントリストから、イベントリスト３０６を生成し、イベント抽出部３０１に出力する（Ｓ９０２）。
イベントリスト３０６は、前述したように、検証位置情報３０５で示される検証位置にあるイベント情報、単体ハッシュ値、ハッシュチェーンの組と、その前ｎ個分及び後ろｎ個分のイベント情報、単体ハッシュ値、ハッシュチェーンの組を含む。ｎの値は挿入時と同じである。
また、イベント抽出部３０１が、検証位置情報３０５とイベントリスト３０６から該当するイベント情報３０８、イベント情報３０８の単体ハッシュ値３０７、イベント情報３０８のハッシュチェーン３０９、イベント情報３０８の前ｎ個の単体ハッシュ値及び後ろｎ個の単体ハッシュ値３１０をイベントリスト３０６より抽出し、イベント情報３０８とイベント情報３０８の単体ハッシュ値３０７を単体ハッシュ検証部３０２に出力し、イベント情報３０８の単体ハッシュ値３０７、イベント情報３０８の前後の単体ハッシュ値３１０、イベント情報のハッシュチェーン３０９を連続性ハッシュ値検証部３０３に出力する。
その後、単体ハッシュ検証部３０２による単体ハッシュ値の検証及び連続性ハッシュ値検証部３０３によるハッシュチェーンの検証が並行して行われる。
【００７９】
単体ハッシュ検証部３０２では、イベント情報３０８とイベント情報３０８の単体ハッシュ値３０７をイベント抽出部３０１から取得し（Ｓ９０３）、イベント情報３０８の単体ハッシュ値を計算し（Ｓ９０４）、イベント抽出部３０１から取得したイベント情報３０８の単体ハッシュ値３０７とＳ９０４で計算した単体ハッシュ値を比較し、その結果を単体ハッシュ検証結果３１１として出力する（Ｓ９０６）。
２つの単体ハッシュ値が同じ値であれば、イベント情報３０８の改竄が行われていないことになり、２つの単体ハッシュ値の値が異なっていれば、イベント情報３０８の改竄が行われたことになる。
【００８０】
連続性ハッシュ値検証部３０３は、イベント抽出部３０１からイベント情報３０８の単体ハッシュ値３０７、イベント情報３０８の前後の単体ハッシュ値３１０、イベント情報のハッシュチェーン３０９を取得し（Ｓ９０７）、イベント情報３０８の単体ハッシュ値３０７とイベント情報３０８前後の単体ハッシュ値３１０から一時ハッシュを計算し（Ｓ９０８）、一時ハッシュとイベント抽出部３０１から取得したイベント情報３０８のハッシュチェーン３０９とを比較し（Ｓ９０９）、その結果を連続性ハッシュ値検証結果３１２として出力する（Ｓ９１０）。
２つのハッシュチェーンが同じ値であれば、イベント情報３０８の前後においてイベント情報の順序（連続性）の改竄（不正なイベント情報の挿入、削除、順序の入れ替え等）が行われていないことになり、２つのハッシュチェーンの値が異なっていれば、イベント情報３０８の前後においてイベント情報の順序（連続性）の改竄が行われたことになる。
【００８１】
次に、図６を参照して、イベント情報削除機構５００に含まれる連続性ハッシュ値再計算部５０１及びイベント削除部５０２を説明する。
【００８２】
イベント情報の削除では、入力部１１が、削除対象となるイベント情報（削除対象データ）の位置である削除位置を示す削除位置情報５０４を入力し、イベント蓄積部１２、連続性ハッシュ値再計算部５０１及びイベント削除部５０２に削除位置情報５０４を出力する。
【００８３】
イベント蓄積部１２は、削除位置情報５０４を入力し、削除位置に基づき蓄積イベントリストから、イベントリスト５０５を出力する。
イベントリスト５０５は削除位置にあるイベント情報のレコードとその前２ｎ個分のイベント情報のレコード及び後ろ２ｎ個分のイベント情報のレコードを含む。
ｎの値は挿入時と同値とする。
【００８４】
イベント削除部５０２は、削除位置情報５０４から、再計算後イベントリスト５０６の当該イベント情報のレコード（削除対象のイベント情報、単体ハッシュ値、ハッシュチェーンの組）を削除して、削除後イベントリスト５０７を出力する。
【００８５】
イベント蓄積部１２は削除後イベントリスト５０７をデータベースやファイル等、所定の形式で蓄積イベントリスト記憶部１３に格納する。
また、前述した一時記憶部に最後尾からｎ個分のイベント情報を記憶させている場合に、一時記憶部に記憶させている内容に変更があれば更新する。
【００８６】
連続性ハッシュ値再計算部５０１は、削除位置情報５０４、イベントリスト５０５を入力し、削除位置情報５０４が示す位置の前後ｎ（ｎ≧１）個分のハッシュチェーンを再計算する。
結果を再計算後イベントリスト５０６として出力する。
連続性ハッシュ値再計算部５０１は、順序改竄検知ハッシュ値算出部の例である。
【００８７】
連続性ハッシュ値再計算部５０１は、削除対象のイベント情報（削除対象データ）を除いたデータ順序に従い、削除位置から抽出個数分の範囲内（前ｎ個、後ろｎ個の範囲）にあるイベント情報を１次隣接データとして抽出するとともに、１次隣接データごとに１次隣接データの位置から抽出個数分の範囲内（前ｎ個、後ろｎ個の範囲）にあるイベント情報を２次隣接データとして抽出し、１次隣接データ及び２次隣接データ又は１次隣接データ及び２次隣接データの各々から派生するデータを用いて、１次隣接データ及び２次隣接データの範囲でのデータ順序の改竄を検知可能な順序改竄検知ハッシュ値を１次隣接データごとに算出する。
１次隣接データ及び２次隣接データの各々から派生するデータとは、具体的には、１次隣接データの各々の単体ハッシュ値と、２次隣接データの各々の単体ハッシュ値である。
【００８８】
そして、蓄積イベントリスト記憶部１３は、削除後イベントリスト５０７を記憶するが、削除後イベントリスト５０７は、削除対象のイベント情報のレコードが削除され、また削除対象のイベント情報の前後のイベント情報（１次隣接データ）の再計算後のハッシュチェーンが示されているイベントリストである。
このため、蓄積イベントリスト記憶部１３は、削除後イベントリスト５０７を記憶することで、削除対象のイベント情報を削除するとともに、連続性ハッシュ値再計算部５０１により算出されたハッシュチェーンを対応する１次隣接データに対応づけて記憶することになる。
【００８９】
次に、連続性ハッシュ値再計算部５０１の動作について、図７を用いて説明する。
ここでは、ｎ＝１として説明する。
なお、図７では図示していないが、イベントリストには、削除位置情報５０４に示される削除位置を連続性ハッシュ値再計算部５０１が判別できるように、レコード番号等のデータの順序を示す情報が付加されており、連続性ハッシュ値再計算部５０１はこのレコード番号等を参照して削除位置を判断する。
【００９０】
削除位置６１９のイベントを削除する場合、式１６に従い、ハッシュチェーン６１４を計算し、イベントリスト５０５を書き換える。
結果を再計算後イベントリスト５０６として出力する。ただし、Ｈａｓｈ（）はハッシュ計算を示し、｜はデータの連接を示す。
【００９１】
ハッシュチェーン６１４＝Ｈａｓｈ（単体ハッシュ値６０８｜単体ハッシュ値６０９）・・・（式１６）
【００９２】
ｎ＝１なので、連続性ハッシュ値再計算部５０１は、削除位置６１９の１個前のイベント情報と１個後ろのイベント情報を１次隣接データとするが、削除位置の１個前のイベント情報は存在しないので、１個後ろのイベント情報６０２のみを１次隣接データとして抽出する。
また、連続性ハッシュ値再計算部５０１は、１次隣接データであるイベント情報６０２の１個前のイベント情報と１個後ろのイベント情報を２次隣接データとして抽出する。
図７の例では、イベント情報６０１とイベント情報６０３が対応するが、イベント情報６０１は削除対象なので、イベント情報６０３のみが２次隣接データとして抽出される。
そして、連続性ハッシュ値再計算部５０１は、２次隣接データであるイベント情報６０３の単体ハッシュ値６０９と１次隣接データあるイベント情報６０２の単体ハッシュ値６０８を用いて、上記の式１６によりハッシュチェーン６１４を再計算する。
【００９３】
削除位置６２０のイベントを削除する場合は、式１７、１８に従い、ハッシュチェーン６１４、６１６を計算し、イベントリスト５０５を書き換える。結果を再計算後イベントリスト５０６として出力する。
【００９４】
ハッシュチェーン６１４＝Ｈａｓｈ（単体ハッシュ値６０７｜単体ハッシュ値６０８｜単体ハッシュ値６１０）・・・（式１７）
ハッシュチェーン６１６＝Ｈａｓｈ（単体ハッシュ値６０８｜単体ハッシュ値６１０｜単体ハッシュ値６１１）・・・（式１８）
【００９５】
連続性ハッシュ値再計算部５０１は、削除位置６２０の１個前のイベント情報６０２と１個後ろのイベント情報６０４を１次隣接データとして抽出する。
また、連続性ハッシュ値再計算部５０１は、削除対象のイベント情報６０３を除いた順序において、１次隣接データであるイベント情報６０２の１個前のイベント情報と１個後ろのイベント情報を２次隣接データとして抽出する。
図７の例では、イベント情報６０１とイベント情報６０４が２次隣接データとして抽出される。
そして、連続性ハッシュ値再計算部５０１は、２次隣接データであるイベント情報６０１の単体ハッシュ値６０７及びイベント情報６０４の単体ハッシュ値６１０と１次隣接データあるイベント情報６０２の単体ハッシュ値６０８を用いて、上記の式１７によりハッシュチェーン６１４を再計算する。
また、連続性ハッシュ値再計算部５０１は、削除対象のイベント情報６０３を除いた順序において、１次隣接データであるイベント情報６０４の１個前のイベント情報と１個後ろのイベント情報を２次隣接データとして抽出する。
図７の例では、イベント情報６０２とイベント情報６０５が２次隣接データとして抽出される。
そして、連続性ハッシュ値再計算部５０１は、２次隣接データであるイベント情報６０２の単体ハッシュ値６０８及びイベント情報６０５の単体ハッシュ値６１１と１次隣接データあるイベント情報６０４の単体ハッシュ値６１０を用いて、上記の式１８によりハッシュチェーン６１６を再計算する。
【００９６】
削除位置６２１のイベントを削除する場合、式１９に従い、ハッシュチェーン６１７を計算し、イベントリスト５０５を書き換える。結果を再計算後イベントリスト５０６として出力する。
【００９７】
ハッシュチェーン６１７＝Ｈａｓｈ（単体ハッシュ値６１０｜単体ハッシュ値６１１）・・・（式１９）
【００９８】
連続性ハッシュ値再計算部５０１は、削除位置６２１の１個前のイベント情報と１個後ろのイベント情報を１次隣接データとするが、削除位置の１個後ろのイベント情報は存在しないので、１個前のイベント情報６０５のみを１次隣接データとして抽出する。
また、連続性ハッシュ値再計算部５０１は、１次隣接データであるイベント情報６０５の１個前のイベント情報と１個後ろのイベント情報を２次隣接データとして抽出する。
図７の例では、イベント情報６０４のみが２次隣接データとして抽出される。
そして、連続性ハッシュ値再計算部５０１は、２次隣接データであるイベント情報６０４の単体ハッシュ値６１０と１次隣接データあるイベント情報６０５の単体ハッシュ値６１１を用いて、上記の式１９によりハッシュチェーン６１７を再計算する。
【００９９】
図１０は、イベント情報の削除時の各要素の動作例を示すフローチャート図である。
以下、図１０を用いて各要素の動作を説明する。
【０１００】
先ず、入力部１１が、削除位置情報５０４を入力し（Ｓ１００１）、イベント蓄積部１２、連続性ハッシュ値再計算部５０１及びイベント削除部５０２に削除位置情報５０４を出力する。
【０１０１】
次に、イベント蓄積部１２が、削除位置情報５０４を入力し、削除位置に基づき蓄積イベントリストから、イベントリスト５０５を生成する（Ｓ１００２）。
イベントリスト５０５は削除位置にあるイベント情報のレコードとその前２ｎ個分のイベント情報のレコード及び後ろ２ｎ個分のイベント情報のレコードを含む。
そして、イベント蓄積部１２は、イベントリスト５０５を連続性ハッシュ値再計算部５０１に出力する。
【０１０２】
次に、連続性ハッシュ値再計算部５０１はイベント蓄積部１２からイベントリスト５０５を取得するとともに、イベントリスト５０５上で１次隣接データ及び２次隣接データを特定し、それぞれの単体ハッシュ値を取得する（Ｓ１００３）。
【０１０３】
次に、連続性ハッシュ値再計算部５０１は、１次隣接データごとに単体ハッシュ値を用いてハッシュチェーンを再計算し、再計算ハッシュチェーンを該当する箇所に書き込む（上書きする）（Ｓ１００４）。
そして、連続性ハッシュ値再計算部５０１は、再計算ハッシュチェーンが書き込まれたイベントリストを再計算後イベントリスト５０６としてイベント削除部５０２に出力する。
【０１０４】
イベント削除部５０２は、連続性ハッシュ値再計算部５０１から再計算後イベントリスト５０６を取得し、削除位置情報５０３から、再計算後イベントリスト５０６の削除対象のイベント情報のレコード（イベント情報、単体ハッシュ値、ハッシュチェーンの組）を削除して、削除後イベントリスト５０７を出力する（Ｓ１００５）。
【０１０５】
最後に、イベント蓄積部１２が、削除後イベントリスト５０７をイベント削除部５０２から取得し、蓄積イベントリスト記憶部１３に格納する（Ｓ１００６）。
【０１０６】
なお、図６及び図１０の説明では、イベント削除部５０２が、再計算後イベントリスト５０６から削除対象のイベント情報のレコードを削除して、削除後イベントリスト５０７とする例を説明したが、連続性ハッシュ値再計算部５０１が削除後イベントリスト５０７を生成するようにしてもよい。
連続性ハッシュ値再計算部５０１は、イベントリスト５０５、削除位置情報５０４を入力するので、削除対象のイベント情報を判断できる。このため、連続性ハッシュ値再計算部５０１は、削除対象のイベント情報のレコードを削除することも可能である。
なお、連続性ハッシュ値再計算部５０１が削除後イベントリスト５０７を生成する場合は、イベント削除部５０２を省略することができる。
【０１０７】
ここで、本実施の形態の効果について述べる。
イベント情報本体の改竄は、当該イベント情報の単体ハッシュ値を検証することで、検証可能である。
【０１０８】
また、イベント情報（及びその単体ハッシュ値、ハッシュチェーン）が不正に挿入された場合、挿入されたと推定される位置前後のイベント情報のハッシュチェーンを検証することで、不正挿入を検証可能である。
【０１０９】
また、イベント情報（及びその単体ハッシュ値、ハッシュチェーン）が不正に削除された場合、削除されたと推定される位置前後のイベント情報のハッシュチェーンを検証することで、不正削除を検証可能である。
【０１１０】
あるイベント情報とその単体ハッシュ値が、別のイベント情報とその単体ハッシュ値と入れ替えら得た場合、不正に入れ替えられたと推定される位置のハッシュチェーンを検証することで、不正な入れ替えを検証可能である。
【０１１１】
さらに、１つのイベントの保持に必要な情報は、単体ハッシュ値とハッシュチェーンのみであり、これ以上の情報を保持する必要がないため、蓄積すべき情報量は増大しない。
【０１１２】
また、イベント情報を挿入する場合は、挿入するイベント情報についてのハッシュチェーンを計算し、また、１次隣接データのハッシュチェーンを再計算するだけで足り、蓄積イベントリストの先頭からハッシュチェーンを再計算する必要がない。
つまり、本実施の形態によれば、イベント情報挿入時は、最大で２ｎ＋１個のハッシュチェーンを計算するのみであり、蓄積イベントリストの先頭からハッシュチェーンを再計算する場合に比べて計算負荷、計算時間を大幅に削減することができ、各種リソースを効率的に活用することができる。
【０１１３】
また、同様に、イベント情報を削除する場合も、１次隣接データのハッシュチェーンを再計算するだけで足り、蓄積イベントリストの先頭からハッシュチェーンを再計算する必要がない。
つまり、本実施の形態によれば、イベント情報削除時は、最大で２ｎ個のハッシュチェーンを計算するのみであり、蓄積イベントリストの先頭からハッシュチェーンを再計算する場合に比べて計算負荷、計算時間を大幅に削減することができ、各種リソースを効率的に活用することができる。
【０１１４】
実施の形態２．
実施の形態１では、連続性ハッシュ値の計算時の入力は、単体ハッシュ値のみであったが、本実施の形態では単体ハッシュ値に加え、乱数も用いて連続性ハッシュ値を計算する場合について述べる。
【０１１５】
イベント情報の挿入時のデータフロー及び動作は図２及び図８と同じである。
実施の形態１との違いは連続性ハッシュ値計算部１０３の計算方法である。
【０１１６】
連続性ハッシュ値計算部１０３は、イベントリスト１０８とイベント情報の単体ハッシュ値１０９から連続性ハッシュ値１１０を計算する。
位置ｋの単体ハッシュ値をＲＨａｓｈ＿（ｋ）、ハッシュチェーンをＳＨａｓｈ＿（ｋ）と表記する。
−ｎ≦ｍ≦ｎを満たす全てのｍについて、式２０を計算する。
ただし、Ｈａｓｈ（）はハッシュ計算を示し、｜はデータの連接を示す。Ｒｎｄは乱数を示す。
乱数の連接順は任意でよいが、検証側と同じである必要がある。
式３で、ＲＨａｓｈ＿（ｋ＋ｍ−ｎ）がイベントリスト１０８に存在しない場合は連接しない。
また、ｍ≠０で、ＳＨａｓｈ＿（ｋ＋ｍ）がイベントリスト１０８に存在しなければ、ＳＨａｓｈ＿（ｋ＋ｍ）を計算しない。
式２０で得られたＳＨａｓｈ＿（ｋ＋ｍ）  （−ｎ≦ｍ≦ｎ）を連続性ハッシュ値１１０として出力する。
【０１１７】
ＳＨａｓｈ＿（ｋ＋ｍ）＝Ｒｎｄ｜Ｈａｓｈ（ＲＨａｓｈ＿（ｋ＋ｍ−ｎ）｜…｜ＲＨａｓｈ＿（ｋ＋ｍ−１）｜ＲＨａｓｈ＿（ｋ＋ｍ）｜ＲＨａｓｈ＿（ｋ＋ｍ＋１）｜…｜ＲＨａｓｈ＿（ｋ＋ｍ＋ｎ）｜Ｒｎｄ）・・・（式２０）
【０１１８】
連続性ハッシュ値計算部１０３の動作を図３に示すイベントリストを例に示す。ｎ＝１とする。
【０１１９】
挿入位置２２０に挿入する場合、式２１、２２に従い、ハッシュチェーン２１９、２１３を計算する。
ハッシュチェーン２１９、２１３を連続性ハッシュ値１１０として出力する。
【０１２０】
ハッシュチェーン２１９＝Ｒｎｄ｜Ｈａｓｈ（単体ハッシュ値１０９｜単体ハッシュ値２０７｜Ｒｎｄ）・・・（式２１）
ハッシュチェーン２１３＝Ｒｎｄ｜Ｈａｓｈ（単体ハッシュ値１０９｜単体ハッシュ値２０７｜単体ハッシュ値２０８｜Ｒｎｄ）・・・（式２２）
【０１２１】
挿入位置２２１に挿入する場合、式２３、２４、２５に従い、ハッシュチェーン２１９、２１４、２１５を計算する。
ハッシュチェーン２１９、２１４、２１５を連続性ハッシュ値１１０として出力する。
ハッシュチェーン２１９＝Ｒｎｄ｜Ｈａｓｈ（単体ハッシュ値２０８｜単体ハッシュ値１０９｜単体ハッシュ値２０９｜Ｒｎｄ）・・・（式２３）
ハッシュチェーン２１４＝Ｒｎｄ｜Ｈａｓｈ（単体ハッシュ値２０７｜単体ハッシュ値２０８｜単体ハッシュ値１０９｜Ｒｎｄ）・・・（式２４）
ハッシュチェーン２１５＝Ｒｎｄ｜Ｈａｓｈ（単体ハッシュ値１０９｜単体ハッシュ値２０９｜単体ハッシュ値２１０｜Ｒｎｄ）・・・（式２５）
【０１２２】
挿入位置２２２に挿入する場合、式２６、２７に従い、ハッシュチェーン２１８、２１９を計算する。
ハッシュチェーン２１８、２１９を連続性ハッシュ値１１０として出力する。
【０１２３】
ハッシュチェーン２１９＝Ｒｎｄ｜Ｈａｓｈ（単体ハッシュ値２１２｜単体ハッシュ値１０９｜Ｒｎｄ）・・・（式２６）
ハッシュチェーン２１８＝Ｒｎｄ｜Ｈａｓｈ（単体ハッシュ値２１１｜単体ハッシュ値２１２｜単体ハッシュ値１０９｜Ｒｎｄ）・・・（式２７）
【０１２４】
挿入位置２２３に挿入する場合、式２８に従い、ハッシュチェーン２１９を計算する。
ハッシュチェーン２１９を連続性ハッシュ値１１０として出力する。
【０１２５】
ハッシュチェーン２１９＝Ｒｎｄ｜Ｈａｓｈ（単体ハッシュ値１０９｜Ｒｎｄ）・・・（式２８）
【０１２６】
このように、１次隣接データ、２次隣接データの抽出方法は同じであるが、ハッシュチェーンの計算に乱数を付加している点が、実施の形態１との違いである。
【０１２７】
図５にイベントの改竄検知を行う構成図を示す。
処理フローは図９と同様である。
実施の形態１との違いは連続性ハッシュ値検証部３０３の計算方法である。
【０１２８】
連続性ハッシュ値検証部３０３は、イベント情報３０８の単体ハッシュ値３０７とイベント情報３０８前後の単体ハッシュ値３１０から式２９を用いてＳＨａｓｈを求め、イベント情報３０８のハッシュチェーン３０９のハッシュ成分と比較し、その結果を連続性ハッシュ値検証結果３１２として出力する。
式２９で、イベントの位置情報３０４の示すイベントリストの位置をｋとする。
一致したらＴｒｕｅ、一致しなければＦａｌｓｅとする。結果を連続性ハッシュ値検証結果３１２として出力する。
【０１２９】
ＳＨａｓｈ＝Ｈａｓｈ（ＲＨａｓｈ＿（ｋ−ｎ）｜…｜ＲＨａｓｈ＿（ｋ−１）｜ＲＨａｓｈ＿（ｋ）｜ＲＨａｓｈ＿（ｋ＋１）｜…｜ＲＨａｓｈ＿（ｋ＋ｎ）｜ハッシュチェーン３０９の乱数成分）・・・（式２９）
【０１３０】
連続性ハッシュ値検証部３０３の動作を図５に示すイベントリストを例に示す。ｎ＝１とする。
【０１３１】
検証位置４１９のイベントの連続性を検証する場合、式３０に従い、一時ハッシュＳｈａｓｈを計算する。
Ｓｈａｓｈとハッシュチェーン４１３のハッシュ成分とが一致した場合はＴｒｕｅとし、一致しない場合はＦａｌｓｅとする。
【０１３２】
Ｓｈａｓｈ＝Ｈａｓｈ（単体ハッシュ値４０７｜単体ハッシュ値４０８｜ハッシュチェーン４１３の乱数成分）・・・（式３０）
【０１３３】
検証位置４２０のイベントの連続性を検証する場合、式３１に従い、一時ハッシュＳｈａｓｈを計算する。
Ｓｈａｓｈとハッシュチェーン４１５のハッシュ成分とが一致した場合はＴｒｕｅとし、一致しない場合はＦａｌｓｅとする。
【０１３４】
Ｓｈａｓｈ＝Ｈａｓｈ（単体ハッシュ値４０８｜単体ハッシュ値４０９｜単体ハッシュ値４１０｜ハッシュチェーン４１５の乱数成分）・・・（式３１）
【０１３５】
検証位置４２１のイベントの連続性を検証する場合、式３２に従い、一時ハッシュＳｈａｓｈを計算する。
Ｓｈａｓｈとハッシュチェーン４１８のハッシュ成分とが一致した場合はＴｒｕｅとし、一致しない場合はＦａｌｓｅとする。
【０１３６】
Ｓｈａｓｈ＝Ｈａｓｈ（単体ハッシュ値４１１｜単体ハッシュ値４１２｜ハッシュチェーン４１８の乱数成分）・・・（式３２）
【０１３７】
図６にイベントの削除を行う構成図を示す。
処理フローは図１０と同様である。
実施の形態１との違いは連続性ハッシュ値再計算部５０１の計算方法である。
【０１３８】
連続性ハッシュ値再計算部５０１は、削除位置情報５０３、イベントリスト５０５を入力し、削除位置情報５０３が示す位置の前後ｎ（ｎ≧１）個分のハッシュチェーンを再計算する。
結果を再計算後イベントリスト５０６として出力する。
【０１３９】
連続性ハッシュ値再計算部５０１の動作について、図７を用いて説明する。
説明ではｎ＝１とする。
【０１４０】
削除位置６１９のイベントを削除する場合、式３３に従い、ハッシュチェーン６１４を計算し、イベントリスト５０５を書き換える。
結果を再計算後イベントリスト５０６として出力する。ただし、Ｈａｓｈ（）はハッシュ計算を示し、｜はデータの連接を示す。Ｒｎｄは乱数を示す。
ハッシュチェーン６１４＝Ｒｎｄ｜Ｈａｓｈ（単体ハッシュ値６０８｜単体ハッシュ値６０９｜Ｒｎｄ）・・・（式３３）
【０１４１】
削除位置６２０のイベントを削除する場合、式３４、３５に従い、ハッシュチェーン６１４、６１６を計算し、イベントリスト５０５を書き換える。結果を再計算後イベントリスト５０６として出力する。
【０１４２】
ハッシュチェーン６１４＝Ｒｎｄ｜Ｈａｓｈ（単体ハッシュ値６０７｜単体ハッシュ値６０８｜単体ハッシュ値６１０｜Ｒｎｄ）・・・（式３４）
ハッシュチェーン６１６＝Ｒｎｄ｜Ｈａｓｈ（単体ハッシュ値６０８｜単体ハッシュ値６１０｜単体ハッシュ値６１１｜Ｒｎｄ）・・・（式３５）
【０１４３】
削除位置６２１のイベントを削除する場合、式３６に従い、ハッシュチェーン６１７を計算し、イベントリスト５０５を書き換える。結果を再計算後イベントリスト５０６として出力する。
【０１４４】
ハッシュチェーン６１７＝Ｒｎｄ｜Ｈａｓｈ（単体ハッシュ値６１０｜単体ハッシュ値６１１｜Ｒｎｄ）・・・（式３６）
【０１４５】
このように、１次隣接データ、２次隣接データの抽出方法は同じであるが、ハッシュチェーンの計算に乱数を付加している点が、実施の形態１との違いである。
【０１４６】
本実施の形態の効果について述べる。改竄等に対する効果は実施の形態１と同じである。
本実施の形態では、乱数を変えることで、イベントが同じ値でも、異なるハッシュ値を生成できる。
【０１４７】
ここで、実施の形態１及び実施の形態２に係るイベントログ管理装置の特徴を以下にて再言する。
【０１４８】
実施の形態１及び実施の形態２では、イベントログを収集・蓄積する装置であって、イベントログを収集する手段と、前記イベントログ単体のハッシュ値（単体ハッシュ値）を求める手段と、前記イベントログの単体ハッシュ値と、前記イベントが発生する前または後１つ以上のイベントログの単体ハッシュ値とを用いて前記イベントログの連続性を検証するハッシュ値（ハッシュチェーン）を計算する手段と、前記イベントが発生する前または後１つ以上のイベントログのハッシュチェーンを再計算する手段とを備えたイベントログ管理装置について説明した。
【０１４９】
実施の形態１及び実施の形態２では、前記イベントログの単体ハッシュ値を求める手段において、イベントログ本体と乱数から単体ハッシュ値を計算し、前記乱数と前記単体ハッシュ値を連接したデータを前記イベントログとともに蓄積することを特徴としたイベントログ管理装置について説明した。
【０１５０】
実施の形態１及び実施の形態２では、前記イベントログのハッシュチェーンを求める手段において、前記イベントが発生する前または後１つ以上のイベントログの単体ハッシュ値と乱数からハッシュチェーンを計算し、前記乱数と前記ハッシュチェーンを連接したデータを前記イベントログとともに蓄積することを特徴としたイベントログ管理装置について説明した。
【０１５１】
実施の形態１及び実施の形態２では、イベントログを蓄えたリストと、イベントログの挿入位置を示す情報から、前記イベントログを挿入する位置の前後１つ以上のイベントログの単体ハッシュ値とハッシュチェーンを抽出する手段をさらに備えたイベントログ管理装置について説明した。
【０１５２】
実施の形態１及び実施の形態２では、イベントログを蓄えたリストと、イベントログの挿入位置を示す情報から、前記イベントログを挿入する位置の前後１つ以上のイベントログの単体ハッシュ値とハッシュチェーンを抽出する手段において、イベントログの最終位置の１つ以上前のイベントログの単体ハッシュ値とハッシュチェーンを一時記憶に蓄える手段をさらに備えたイベントログ管理装置について説明した。
【０１５３】
実施の形態１及び実施の形態２では、前記イベントログを蓄えたリストと、前記イベントログの挿入位置を示す情報から、前記イベントログと、前記イベントログの単体ハッシュ値と、前記イベントログのハッシュチェーンと、前記イベントが発生する前または後１つ以上のイベントログのハッシュチェーンを、前記イベントログを蓄えたリストに挿入または上書きする手段をさらに備えたイベントログ管理装置について説明した。
【０１５４】
実施の形態１及び実施の形態２では、前記イベントログを蓄えたリストに蓄えられたイベントを参照する手段と、前記参照されたイベントに対応するハッシュ値を求める手段と、前記参照されたイベントの前または後１つ以上のイベントのハッシュ値を求める手段と、前記参照されたイベントに対応するハッシュ値と、前記参照されたイベントの前または後１つ以上のイベントのハッシュ値からハッシュ値を計算する手段と、前記参照されたイベントに対応するハッシュ値と、前記参照されたイベントの前または後１つ以上のイベントのハッシュ値から求めたハッシュ値を、前記イベントログを蓄えたリストから抽出する手段と、前記求めたハッシュ値と前記抽出したハッシュ値とを比較する手段とを備えたイベントログ管理装置について説明した。
【０１５５】
実施の形態１及び実施の形態２では、前記イベントログを蓄えたリストと、イベントログの削除位置を示す情報から、削除位置前後のイベントログのハッシュチェーンを計算し、前記ハッシュチェーンを用いて前記イベントリストを更新し、前記イベントログの削除位置にあたるイベントを削除することをさらに備えたイベントログ管理装置について説明した。
【０１５６】
最後に、実施の形態１、２に示したイベントログ管理装置１のハードウェア構成例について説明する。
図１１は、実施の形態１、２に示すイベントログ管理装置１のハードウェア資源の一例を示す図である。
なお、図１１の構成は、あくまでもイベントログ管理装置１のハードウェア構成の一例を示すものであり、イベントログ管理装置１のハードウェア構成は図１１に記載の構成に限らず、他の構成であってもよい。
【０１５７】
図１１において、イベントログ管理装置１は、プログラムを実行するＣＰＵ９１１（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう）を備えている。
ＣＰＵ９１１は、バス９１２を介して、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）９１３、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）９１４、通信ボード９１５、表示装置９０１、キーボード９０２、マウス９０３、磁気ディスク装置９２０と接続され、これらのハードウェアデバイスを制御する。
更に、ＣＰＵ９１１は、ＦＤＤ９０４（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ  Ｄｒｉｖｅ）、コンパクトディスク装置９０５（ＣＤＤ）、プリンタ装置９０６、スキャナ装置９０７と接続していてもよい。また、磁気ディスク装置９２０の代わりに、光ディスク装置、メモリカード（登録商標）読み書き装置などの記憶装置でもよい。
ＲＡＭ９１４は、揮発性メモリの一例である。ＲＯＭ９１３、ＦＤＤ９０４、ＣＤＤ９０５、磁気ディスク装置９２０の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置の一例である。蓄積イベントリスト記憶部１３はこれら記憶装置により実現される。
通信ボード９１５、キーボード９０２、マウス９０３、スキャナ装置９０７、ＦＤＤ９０４などは、入力装置の一例である。
また、通信ボード９１５、表示装置９０１、プリンタ装置９０６などは、出力装置の一例である。
【０１５８】
通信ボード９１５は、ネットワークに接続されている。例えば、通信ボード９１５は、ＬＡＮ（ローカルエリアネットワーク）、インターネット、ＷＡＮ（ワイドエリアネットワーク）などに接続されていても構わない。
【０１５９】
磁気ディスク装置９２０には、オペレーティングシステム９２１（ＯＳ）、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。
プログラム群９２３のプログラムは、ＣＰＵ９１１がオペレーティングシステム９２１、ウィンドウシステム９２２を利用しながら実行する。
【０１６０】
また、ＲＡＭ９１４には、ＣＰＵ９１１に実行させるオペレーティングシステム９２１のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。
また、ＲＡＭ９１４には、ＣＰＵ９１１による処理に必要な各種データが格納される。
【０１６１】
また、ＲＯＭ９１３には、ＢＩＯＳ（Ｂａｓｉｃ  Ｉｎｐｕｔ  Ｏｕｔｐｕｔ  Ｓｙｓｔｅｍ）プログラムが格納され、磁気ディスク装置９２０にはブートプログラムが格納されている。
イベントログ管理装置１の起動時には、ＲＯＭ９１３のＢＩＯＳプログラム及び磁気ディスク装置９２０のブートプログラムが実行され、ＢＩＯＳプログラム及びブートプログラムによりオペレーティングシステム９２１が起動される。
【０１６２】
上記プログラム群９２３には、実施の形態１、２の説明において「〜部」、「〜手段」として説明している機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ９１１により読み出され実行される。
【０１６３】
ファイル群９２４には、実施の形態１、２の説明において、「〜の判断」、「〜の計算」、「〜の比較」、「〜の評価」、「〜の更新」、「〜の設定」、「〜の抽出」、「〜の生成」、「〜の選択」等として説明している処理の結果を示す情報やデータや信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」の各項目として記憶されている。
「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示などのＣＰＵの動作に用いられる。
抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示のＣＰＵの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリ、レジスタ、キャッシュメモリ、バッファメモリ等に一時的に記憶される。
また、実施の形態１、２で説明しているフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号値は、ＲＡＭ９１４のメモリ、ＦＤＤ９０４のフレキシブルディスク、ＣＤＤ９０５のコンパクトディスク、磁気ディスク装置９２０の磁気ディスク、その他光ディスク、ミニディスク、ＤＶＤ等の記録媒体に記録される。また、データや信号は、バス９１２や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【０１６４】
また、実施の形態１、２の説明において「〜部」、「〜手段」として説明しているものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」、「〜手段」として説明しているものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、ＤＶＤ等の記録媒体に記憶される。プログラムはＣＰＵ９１１により読み出され、ＣＰＵ９１１により実行される。すなわち、プログラムは、実施の形態１、２の「〜部」、「〜手段」としてコンピュータを機能させるものである。あるいは、実施の形態１、２の「〜部」、「〜手段」の手順や方法をコンピュータに実行させるものである。
【０１６５】
このように、実施の形態１、２に示すイベントログ管理装置１は、処理装置たるＣＰＵ、記憶装置たるメモリ、磁気ディスク等、入力装置たるキーボード、マウス、通信ボード等、出力装置たる表示装置、通信ボード等を備えるコンピュータであり、上記したように「〜部」、「〜手段」として示された機能をこれら処理装置、記憶装置、入力装置、出力装置を用いて実現するものである。
【図面の簡単な説明】
【０１６６】
【図１】実施の形態１、２に係るイベントログ管理装置の構成例を示す図。
【図２】実施の形態１に係るイベント情報挿入時のデータフロー例を示す図。
【図３】実施の形態１に係るイベント情報挿入時のハッシュチェーンの生成例を説明する図。
【図４】実施の形態１に係る改竄検証時のデータフロー例を示す図。
【図５】実施の形態１に係る改竄検証時のハッシュチェーンの生成例を説明する図。
【図６】実施の形態１に係るイベント情報削除時のデータフロー例を示す図。
【図７】実施の形態１に係るイベント情報削除時のハッシュチェーンの生成例を説明する図。
【図８】実施の形態１に係るイベント情報挿入時の動作例を示すフローチャート図。
【図９】実施の形態１に係る改竄検証時の動作例を示すフローチャート図。
【図１０】実施の形態１に係るイベント情報削除時の動作例を示すフローチャート図。
【図１１】実施の形態１、２に係るイベントログ管理装置のハードウェア構成例を示す図。
【符号の説明】
【０１６７】
１  イベントログ管理装置、１１  入力部、１２  イベント蓄積部、１３  蓄積イベントリスト記憶部、１００  イベント情報挿入機構、１０１  単体ハッシュ値計算部、１０３  連続性ハッシュ値計算部、１０４  イベント挿入部、３００  改竄検知機構、３０１  イベント抽出部、３０２  単体ハッシュ検証部、３０３  連続性ハッシュ値検証部、５００  イベント情報削除機構、５０１  連続性ハッシュ値再計算部、５０２  イベント削除部。
【図１】
0005014081.tif 000002
【図２】
0005014081.tif 000003
【図３】
0005014081.tif 000004
【図４】
0005014081.tif 000005
【図５】
0005014081.tif 000006
【図６】
0005014081.tif 000007
【図７】
0005014081.tif 000008
【図８】
0005014081.tif 000009
【図９】
0005014081.tif 000010
【図１０】
0005014081.tif 000011
【図１１】
0005014081.tif 000012