(57)【要約】  ログへの署名を行いつつ、検知できない改竄（書き換え、挿入、削除など）を防ぎ、改竄された場合、その箇所を限定できるログ出力装置及びプログラムを提供する。ログ出力装置が、データ部とハッシュ部で構成されるログレコードを形成し、ディスクに出力し、ハッシュ部は、データ部のハッシュ（データハッシュ）と、一つ前のレコードのハッシュ部のハッシュ（リンクハッシュ）を合わせたものとし、ハッシュチェーンの一部のレコードにのみ署名を付け、レコードをディスクに出力するタイミングで、該レコードのハッシュ部のコピーをプロセスメモリ上にも保持し、次のレコード出力時に、ディスク上の最新レコードのハッシュ部と、プロセスメモリ上に保持しているハッシュ部を比較し、一致すればディスク上のレコードが改竄されていないと判断し、一致しない場合は改竄されたと判断する。
2008026238.tif 000002
【特許請求の範囲】
【請求項１】
第一の記憶装置と第二の記憶装置とを用い、逐次出力されるデータにハッシュ値を付加し、ハッシュ値が付加されたデータを前記第二の記憶装置に格納するデータ処理システムであって、
前記第二の記憶装置にデータが格納される度に、前記第二の記憶装置に格納される格納データに付加されている、前記格納データから生成された第一のハッシュ値と前記格納データの前に格納されたデータのハッシュ値から生成された第二のハッシュ値とを複製し、第一のハッシュ値と第二のハッシュ値の複製を前記第一の記憶装置に格納するハッシュ値複製格納部と、
新たなデータが出力された際に、前記第二の記憶装置に最後に格納された最後尾データに付加されている最後尾の第一のハッシュ値及び第二のハッシュ値と、前記第一の記憶装置に格納されている前記最後尾の第一のハッシュ値及び第二のハッシュ値の複製とを比較するハッシュ値比較部と、
前記ハッシュ値比較部により前記最後尾の第一のハッシュ値及び第二のハッシュ値と前記最後尾の第一のハッシュ値及び第二のハッシュ値の複製とが一致すると判断された場合に、前記新たなデータから新たな第一のハッシュ値を生成するとともに、前記最後尾の第一のハッシュ値及び第二のハッシュ値から新たな第二のハッシュ値を生成するハッシュ値生成部と、
前記ハッシュ値生成部により生成された前記新たな第一のハッシュ値と前記新たな第二のハッシュ値とを前記新たなデータに付加し、前記新たな第一のハッシュ値と前記新たな第二のハッシュ値とが付加された前記新たなデータを前記第二の記憶装置に格納するデータ格納部とを有することを特徴とするデータ処理システム。
【請求項２】
前記ハッシュ値生成部は、
前記ハッシュ値比較部により前記最後尾の第一のハッシュ値及び第二のハッシュ値と前記最後尾の第一のハッシュ値及び第二のハッシュ値の複製とが一致しないと判断された場合に、前記新たなデータから新たな第一のハッシュ値を生成するとともに、前記最後尾の第一のハッシュ値及び第二のハッシュ値以外の値から新たな第二のハッシュ値を生成することを特徴とする請求項１に記載のデータ処理システム。
【請求項３】
前記データ処理システムは、更に、
前記ハッシュ値比較部により前記最後尾の第一のハッシュ値及び第二のハッシュ値と前記最後尾の第一のハッシュ値及び第二のハッシュ値の複製とが一致しないと判断された場合に、前記最後尾データにおける改竄を通知する改竄検出レポートを生成する改竄検出レポート生成部を有することを特徴とする請求項１に記載のデータ処理システム。
【請求項４】
前記ハッシュ値複製格納部は、
前記第一の記憶装置として、耐タンパー装置に前記第一のハッシュ値と第二のハッシュ値の複製を格納することを特徴とする請求項１に記載のデータ処理システム。
【請求項５】
前記データ処理システムは、更に、
複数のデータの中の特定のデータに対して署名を生成し、生成した署名を前記特定のデータにのみ付加する署名生成部を有することを特徴とする請求項１に記載のデータ処理システム。
【請求項６】
前記署名生成部は、
一定のデータ間隔ごとに、署名を生成することを特徴とする請求項５に記載のデータ処理システム。
【請求項７】
前記署名生成部は、
一定の時間間隔ごとに、署名を生成することを特徴とする請求項５に記載のデータ処理システム。
【請求項８】
前記署名生成部は、
前記データ処理システムを利用するアプリケーションプログラムからの指示に基づき、署名を生成することを特徴とする請求項５に記載のデータ処理システム。
【請求項９】
前記署名生成部は、
前記データ処理システムの外部から前記第二の記憶装置に格納されているデータに対する転送要求があった際に、署名を生成することを特徴とする請求項５に記載のデータ処理システム。
【請求項１０】
前記署名生成部は、
前記データ処理システムを利用する利用者からの指示に基づき、署名を生成することを特徴とする請求項５に記載のデータ処理システム。
【請求項１１】
前記署名生成部は、
前記データ処理システムのＩＤＳ（侵入検知システム）／ＩＰＳ（侵入防止システム）が不正侵入を検知した際に、署名を生成することを特徴とする請求項５に記載のデータ処理システム。
【請求項１２】
前記署名生成部は、
前記データ処理システムが稼動を終了する際に、最後に出力されたデータに対する署名を生成することを特徴とする請求項５に記載のデータ処理システム。
【請求項１３】
前記データ処理システムは、更に、
前記データ処理システムの起動時に、前記第二の記憶装置に格納されているデータを検査し、署名が付加されている最後のデータより後に格納されたデータが存在する場合に、署名が付加されている最後のデータより後に格納されたデータが存在することを通知するアラートを生成するデータ検査部とを有することを特徴とする請求項１２に記載のデータ処理システム。
【請求項１４】
前記ハッシュ値生成部は、
複数個の第一のハッシュ値から上位ハッシュ値を生成し、複数個の上位ハッシュ値から更なる上位ハッシュ値を生成して、複数階層にわたる上位ハッシュ値を生成することを特徴とする請求項１に記載のデータ処理システム。
【請求項１５】
前記データ処理システムは、
前記ハッシュ値生成部により生成された上位ハッシュ値のうち最上位の上位ハッシュ値を用いて署名を生成する署名生成部を有することを特徴とする請求項１４に記載のデータ処理システム。
【請求項１６】
第一の記憶装置と第二の記憶装置とを用い、逐次出力されるデータにハッシュ値を付加し、ハッシュ値が付加されたデータを前記第二の記憶装置に格納するデータ処理方法であって、
前記第二の記憶装置にデータが格納される度に、前記第二の記憶装置に格納される格納データに付加されている、前記格納データから生成された第一のハッシュ値と前記格納データの前に格納されたデータのハッシュ値から生成された第二のハッシュ値とを複製し、第一のハッシュ値と第二のハッシュ値の複製を前記第一の記憶装置に格納し、
新たなデータが出力された際に、前記第二の記憶装置に最後に格納された最後尾データに付加されている最後尾の第一のハッシュ値及び第二のハッシュ値と、前記第一の記憶装置に格納されている前記最後尾の第一のハッシュ値及び第二のハッシュ値の複製とを比較し、
前記最後尾の第一のハッシュ値及び第二のハッシュ値と前記最後尾の第一のハッシュ値及び第二のハッシュ値の複製とが一致すると判断された場合に、前記新たなデータから新たな第一のハッシュ値を生成するとともに、前記最後尾の第一のハッシュ値及び第二のハッシュ値から新たな第二のハッシュ値を生成し、
生成した前記新たな第一のハッシュ値と前記新たな第二のハッシュ値とを前記新たなデータに付加し、前記新たな第一のハッシュ値と前記新たな第二のハッシュ値とが付加された前記新たなデータを前記第二の記憶装置に格納することを特徴とするデータ処理方法。
【請求項１７】
第一の記憶装置と第二の記憶装置とを有するコンピュータに、逐次出力されるデータにハッシュ値を付加させ、ハッシュ値が付加されたデータを前記第二の記憶装置に格納させるプログラムであって、
前記第二の記憶装置にデータが格納される度に、前記第二の記憶装置に格納される格納データに付加されている、前記格納データから生成された第一のハッシュ値と前記格納データの前に格納されたデータのハッシュ値から生成された第二のハッシュ値とを複製し、第一のハッシュ値と第二のハッシュ値の複製を前記第一の記憶装置に格納するハッシュ値複製格納処理と、
新たなデータが出力された際に、前記第二の記憶装置に最後に格納された最後尾データに付加されている最後尾の第一のハッシュ値及び第二のハッシュ値と、前記第一の記憶装置に格納されている前記最後尾の第一のハッシュ値及び第二のハッシュ値の複製とを比較するハッシュ値比較処理と、
前記ハッシュ値比較処理により前記最後尾の第一のハッシュ値及び第二のハッシュ値と前記最後尾の第一のハッシュ値及び第二のハッシュ値の複製とが一致すると判断された場合に、前記新たなデータから新たな第一のハッシュ値を生成するとともに、前記最後尾の第一のハッシュ値及び第二のハッシュ値から新たな第二のハッシュ値を生成するハッシュ値生成処理と、
前記ハッシュ値生成処理により生成された前記新たな第一のハッシュ値と前記新たな第二のハッシュ値とを前記新たなデータに付加し、前記新たな第一のハッシュ値と前記新たな第二のハッシュ値とが付加された前記新たなデータを前記第二の記憶装置に格納するデータ格納処理とをコンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、例えばコンテンツ流通システムや企業情報システムにおけるログに関し、特にログデータに署名を付与することにより、検知できない改竄（書き換え、不正レコード挿入、削除など）を防ぎ、ログの完全性を確保するための技術に関する。
【背景技術】
【０００２】
今日、コンテンツ流通システムや企業情報システムにおいて、システムに属する機器や装置から出力される「ログ」が重要な役割を果たすようになってきている。
例えば、コンテンツ流通システムでは、コンテンツホルダがコンテンツプロバイダ（配信業者）に許可した許諾の範囲で（許可した販売量、販売価格などで）コンテンツの販売が行われているかを、コンテンツプロバイダが配備展開するコンテンツ配信システムのログを元にコンテンツホルダが検証することが行われている、或いは今後行われようとしている。
また、デジタル映画を映画館に供給するスタジオが許諾した範囲で（許可した上映期間・上映回数で）映画を上映しているかを、映画館システムのログを元にスタジオが検証することが行われている、或いは今後行われようとしている。【０００３】
一方、企業情報システムにおいては、顧客名簿や企業機密の情報漏洩といったセキュリティ問題が発生した場合に、予めシステムから収集し保存しておいたログを分析することで原因を追究したり、また、情報システムが正しく運用されていることを客観的に示す監査などの目的のためにもログが用いられてきている。【０００４】
このように、あらゆるシステムにおいて、ログが重要な役割を果たすようになってきた今日、ログデータの改竄はシステム運用上重大な脅威となり、その完全性の確保（改竄されていないことの証明）が重要な課題となってきている。【０００５】
このような背景の下、ログの完全性確保に向けて、大きく２つのアプローチがある。
１．ログの改竄そのものを防止する。
２．ログが改竄された場合、それを確実に検知できるようにする。
このうち、本書で説明する発明は、上記の２を主な目的としたものである。また、同様の目的を持つ先行技術について、以下に説明する。【０００６】
例えば、特許文献１は、アクセスログなど時系列に発生するデータごとにハッシュ・署名をつけて保存するデータ記憶処理方法を開示している。その際、該当データと一つ前のデータのハッシュを合成したデータのハッシュを取り、それに署名を付けるハッシュチェーン構成を採っている。【０００７】
しかしながら、この先行技術では、各レコード全てに署名を付けており、署名（秘密鍵演算）処理は計算量が多いため（概ねハッシュ計算の１００−１０００倍）、レコードが頻発するような状況下では処理負荷が高くなり、実用に向かないという問題点がある。さらに、各レコードに署名が付与される分、全体のサイズが大きくなるという問題点もある（署名にＲＳＡ（登録商標）（Ｒｉｖｅｓｔ  Ｓｈａｍｉｒ  Ａｄｌｅｍａｎ）２０４８ビット鍵を用いた場合、各レコードごとに２５６バイト、Ｂａｓｅ６４変換すると約３４２バイト、サイズが大きくなる）。【０００８】
これに対し、非特許文献１は、同じくログへの署名付与にハッシュチェーンを用いる構成を開示・推奨している。この先行技術では、ハッシュチェーンの最後のハッシュにのみ署名を付けた構成図を開示しており、署名負荷やログサイズを低減できる可能性に言及しているが、動的に変化するログデータに対し、どのようなタイミングで署名を付与するか、また署名で守られていないデータをどのように検知できない改竄から守るかなど、具体的な実装方式には一切触れられておらず、アイデアのメリットを具体的に享受することができない。【０００９】
また、特許文献２は、ログではないが、署名対象データを分割し、各々のハッシュを算出し、それらを階層構造にした上で、最上位のハッシュに署名を付けることで、データの改竄検知が行えるアイデアが開示されている。【００１０】
しかしながら、この先行技術では、ある程度ログが蓄積された最終段階でのみ署名を付けており、そこに至るまでの間にデータが改竄されても改竄に気付くことができないという問題がある（ログというデータの性格上、最後だけではなく、逐次署名を付けていく必要がある）。
【特許文献１】特開２００３−１４３１３９号公報
【特許文献２】特開２００１−５１９９３０号公報
【非特許文献１】Ｄｉｇｉｔａｌ  Ｃｉｎｅｍａ  Ｓｙｓｔｅｍ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ  Ｖ１．０  Ｐ．１１６−１１７，Ｊｕｌｙ  ２０，  ２００５  Ｄｉｇｉｔａｌ  Ｃｉｎｅｍａ  Ｉｎｉｔｉａｔｉｖｅｓ，  ＬＬＣ，  ｈｔｔｐ：／／ｗｗｗ．ｄｃｉｍｏｖｉｅｓ．ｃｏｍ／
【発明の開示】
【発明が解決しようとする課題】
【００１１】
本発明は、上記のような課題を解決することを主な目的とするとともに、更に、データが改竄された場合、改竄を検知できるだけでなく、改竄された箇所をできるだけ限定する機能も同時に合わせ持つ、データ処理システム、データ処理方法及びプログラムを得ることを主な目的とする。
【課題を解決するための手段】
【００１２】
この発明に係るデータ処理システムは、第一の記憶装置と第二の記憶装置とを用い、逐次出力されるデータにハッシュ値を付加し、ハッシュ値が付加されたデータを前記第二の記憶装置に格納するデータ処理システムであって、
前記第二の記憶装置にデータが格納される度に、前記第二の記憶装置に格納される格納データに付加されている、前記格納データから生成された第一のハッシュ値と前記格納データの前に格納されたデータのハッシュ値から生成された第二のハッシュ値とを複製し、第一のハッシュ値と第二のハッシュ値の複製を前記第一の記憶装置に格納するハッシュ値複製格納部と、
新たなデータが出力された際に、前記第二の記憶装置に最後に格納された最後尾データに付加されている最後尾の第一のハッシュ値及び第二のハッシュ値と、前記第一の記憶装置に格納されている前記最後尾の第一のハッシュ値及び第二のハッシュ値の複製とを比較するハッシュ値比較部と、
前記ハッシュ値比較部により前記最後尾の第一のハッシュ値及び第二のハッシュ値と前記最後尾の第一のハッシュ値及び第二のハッシュ値の複製とが一致すると判断された場合に、前記新たなデータから新たな第一のハッシュ値を生成するとともに、前記最後尾の第一のハッシュ値及び第二のハッシュ値から新たな第二のハッシュ値を生成するハッシュ値生成部と、
前記ハッシュ値生成部により生成された前記新たな第一のハッシュ値と前記新たな第二のハッシュ値とを前記新たなデータに付加し、前記新たな第一のハッシュ値と前記新たな第二のハッシュ値とが付加された前記新たなデータを前記第二の記憶装置に格納するデータ格納部とを有することを特徴とする。【００１３】
前記ハッシュ値生成部は、
前記ハッシュ値比較部により前記最後尾の第一のハッシュ値及び第二のハッシュ値と前記最後尾の第一のハッシュ値及び第二のハッシュ値の複製とが一致しないと判断された場合に、前記新たなデータから新たな第一のハッシュ値を生成するとともに、前記最後尾の第一のハッシュ値及び第二のハッシュ値以外の値から新たな第二のハッシュ値を生成することを特徴とする。【００１４】
前記データ処理システムは、更に、
前記ハッシュ値比較部により前記最後尾の第一のハッシュ値及び第二のハッシュ値と前記最後尾の第一のハッシュ値及び第二のハッシュ値の複製とが一致しないと判断された場合に、前記最後尾データにおける改竄を通知する改竄検出レポートを生成する改竄検出レポート生成部を有することを特徴とする。【００１５】
前記ハッシュ値複製格納部は、
前記第一の記憶装置として、耐タンパー装置に前記第一のハッシュ値と第二のハッシュ値の複製を格納することを特徴とする。【００１６】
前記データ処理システムは、更に、
複数のデータの中の特定のデータに対して署名を生成し、生成した署名を前記特定のデータにのみ付加する署名生成部を有することを特徴とする。【００１７】
前記署名生成部は、
一定のデータ間隔ごとに、署名を生成することを特徴とする。【００１８】
前記署名生成部は、
一定の時間間隔ごとに、署名を生成することを特徴とする。【００１９】
前記署名生成部は、
前記データ処理システムを利用するアプリケーションプログラムからの指示に基づき、署名を生成することを特徴とする。【００２０】
前記署名生成部は、
前記データ処理システムの外部から前記第二の記憶装置に格納されているデータに対する転送要求があった際に、署名を生成することを特徴とする。【００２１】
前記署名生成部は、
前記データ処理システムを利用する利用者からの指示に基づき、署名を生成することを特徴とする。【００２２】
前記署名生成部は、
前記データ処理システムのＩＤＳ（侵入検知システム）／ＩＰＳ（侵入防止システム）が不正侵入を検知した際に、署名を生成することを特徴とする。【００２３】
前記署名生成部は、
前記データ処理システムが稼動を終了する際に、最後に出力されたデータに対する署名を生成することを特徴とする。【００２４】
前記データ処理システムは、更に、
前記データ処理システムの起動時に、前記第二の記憶装置に格納されているデータを検査し、署名が付加されている最後のデータより後に格納されたデータが存在する場合に、署名が付加されている最後のデータより後に格納されたデータが存在することを通知するアラートを生成するデータ検査部とを有することを特徴とする。【００２５】
前記ハッシュ値生成部は、
複数個の第一のハッシュ値から上位ハッシュ値を生成し、複数個の上位ハッシュ値から更なる上位ハッシュ値を生成して、複数階層にわたる上位ハッシュ値を生成することを特徴とする。【００２６】
前記データ処理システムは、
前記ハッシュ値生成部により生成された上位ハッシュ値のうち最上位の上位ハッシュ値を用いて署名を生成する署名生成部を有することを特徴とする。【００２７】
この発明に係るデータ処理方法は、第一の記憶装置と第二の記憶装置とを用い、逐次出力されるデータにハッシュ値を付加し、ハッシュ値が付加されたデータを前記第二の記憶装置に格納するデータ処理方法であって、
前記第二の記憶装置にデータが格納される度に、前記第二の記憶装置に格納される格納データに付加されている、前記格納データから生成された第一のハッシュ値と前記格納データの前に格納されたデータのハッシュ値から生成された第二のハッシュ値とを複製し、第一のハッシュ値と第二のハッシュ値の複製を前記第一の記憶装置に格納し、
新たなデータが出力された際に、前記第二の記憶装置に最後に格納された最後尾データに付加されている最後尾の第一のハッシュ値及び第二のハッシュ値と、前記第一の記憶装置に格納されている前記最後尾の第一のハッシュ値及び第二のハッシュ値の複製とを比較し、
前記最後尾の第一のハッシュ値及び第二のハッシュ値と前記最後尾の第一のハッシュ値及び第二のハッシュ値の複製とが一致すると判断された場合に、前記新たなデータから新たな第一のハッシュ値を生成するとともに、前記最後尾の第一のハッシュ値及び第二のハッシュ値から新たな第二のハッシュ値を生成し、
生成した前記新たな第一のハッシュ値と前記新たな第二のハッシュ値とを前記新たなデータに付加し、前記新たな第一のハッシュ値と前記新たな第二のハッシュ値とが付加された前記新たなデータを前記第二の記憶装置に格納することを特徴とする。【００２８】
この発明に係るプログラムは、第一の記憶装置と第二の記憶装置とを有するコンピュータに、逐次出力されるデータにハッシュ値を付加させ、ハッシュ値が付加されたデータを前記第二の記憶装置に格納させるプログラムであって、
前記第二の記憶装置にデータが格納される度に、前記第二の記憶装置に格納される格納データに付加されている、前記格納データから生成された第一のハッシュ値と前記格納データの前に格納されたデータのハッシュ値から生成された第二のハッシュ値とを複製し、第一のハッシュ値と第二のハッシュ値の複製を前記第一の記憶装置に格納するハッシュ値複製格納処理と、
新たなデータが出力された際に、前記第二の記憶装置に最後に格納された最後尾データに付加されている最後尾の第一のハッシュ値及び第二のハッシュ値と、前記第一の記憶装置に格納されている前記最後尾の第一のハッシュ値及び第二のハッシュ値の複製とを比較するハッシュ値比較処理と、
前記ハッシュ値比較処理により前記最後尾の第一のハッシュ値及び第二のハッシュ値と前記最後尾の第一のハッシュ値及び第二のハッシュ値の複製とが一致すると判断された場合に、前記新たなデータから新たな第一のハッシュ値を生成するとともに、前記最後尾の第一のハッシュ値及び第二のハッシュ値から新たな第二のハッシュ値を生成するハッシュ値生成処理と、
前記ハッシュ値生成処理により生成された前記新たな第一のハッシュ値と前記新たな第二のハッシュ値とを前記新たなデータに付加し、前記新たな第一のハッシュ値と前記新たな第二のハッシュ値とが付加された前記新たなデータを前記第二の記憶装置に格納するデータ格納処理とをコンピュータに実行させることを特徴とする。
【発明の効果】
【００２９】
このように、この発明によれば、第二の記憶装置に格納される格納データの第一のハッシュ値と第二のハッシュ値の複製を第一の記憶装置に格納し、新たなデータが出力された際に、第二の記憶装置に格納されている最後尾の第一のハッシュ値及び第二のハッシュ値と第一の記憶装置に格納されている最後尾の第一のハッシュ値及び第二のハッシュ値の複製とを比較することにより改竄を検知することができ、第二の記憶装置に格納される全データに対して署名を付与する必要がなくなり、署名処理負荷を低減し、署名によるデータ量の増大も防ぐことができる。【００３０】
さらには、本発明は、従来技術が持つ問題を解決しつつ、検知不能な改竄を防ぎ、改竄された場合、改竄された可能性のある箇所をできるだけ限定する機能を同時に合わせ持つという効果も奏するものである。
【発明を実施するための最良の形態】
【００３１】
実施の形態１．
（ログ出力装置及びログ出力プログラムの基本構成と、一定行数間隔、一定時間間隔による署名付与）【００３２】
（ログの形式とハッシュチェーンの形成）
図１は、この発明の実施の形態１によるログ出力装置におけるログの形式を示すブロック図である。
ディスク１はログを記録・保持する。
ログレコード１０（以下、単にレコードともいう）は、データ部１１とハッシュ部１２から構成されている。ここで、データ部１１はログメッセージ本体である。
ハッシュ部１２は、さらにデータ部１１のハッシュ値であるデータハッシュ（ＤＨ）１３と、一つ前のレコード１０のハッシュ部１２の更なるハッシュ値であるリンクハッシュ（ＬＨ）１４から構成されている（ただし、最初のレコードについては、データハッシュのハッシュをリンクハッシュとする）。
データハッシュ（ＤＨ）１３は、第一のハッシュ値の例であり、リンクハッシュ（ＬＨ）１４は、第二のハッシュ値の例である。
レコード１０のうち、ハッシュ部１２の署名を計算し、それをハッシュ部１２の後ろに署名（ＳＩＧ）１５として付与したレコードが署名レコード２０である。【００３３】
最初のレコードから署名レコード２０まで、リンクハッシュ（ＬＨ）１４のリンク群（ハッシュチェーン）でつながれたレコード群が署名ブロック１（２）及び署名ブロック２（３）である。最後のブロックＮ（４）は、まだ署名が付けられていない未署名状態であることを示している。
また、ブロック間でもハッシュチェーンはつながっている。図１では、署名ブロック２（３）の最初のレコードのリンクハッシュ（ＬＨ）１４は署名ブロック１（２）の最後のレコードのハッシュ部１２に連結している。
このようにして生成したログを、他のシステムに転送する場合は、転送先でログの完全性（改竄されていないこと）を検証できるよう、最新レコードに署名が付いた状態で送るようにすれば、一度に複数の署名ブロックを送ってもよい。【００３４】
以上のようにログを構成することで、署名対象は最終レコードのハッシュ部１２とすることができることから、署名付与時にログ全体を読み込んでハッシュを取る必要が無いというメリットが得られる。【００３５】
（ログ出力装置の構成例）
図２は、この発明の実施の形態１によるログ出力装置の構成例を示すブロック図である。【００３６】
ログ出力装置１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、メモリ、ディスクや、キーボード／マウスのような入力機器、ディスプレイのような出力機器から構成される一般的なコンピュータを想定している。【００３７】
ログ出力装置１００は、ログ出力処理部１０１を有している。ログ出力処理部１０１は、データ処理システムの例である。ログ出力処理部１０１は、例えば、メモリに常駐するログ出力常駐プログラムにより実現することができる。
ログ出力処理部１０１は、各種アプリケーションプログラム１１１（以下、単に、アプリケーションともいう）が出力するログをそれがリンクするログ出力ライブラリ１１０を介して、例えばプロセス間通信などにより受信し、署名付きログをディスク１１２に出力する。【００３８】
また、ログ出力装置１００は、最新ハッシュ記憶部１０２を備えている。最新ハッシュ記憶部１０２は、例えばプロセスメモリ上に最新のハッシュ値を記憶するためのメモリ領域を確保することで実現できる。
最新ハッシュ記憶部１０２は、ログとしてディスク１１２に出力された最新レコードのハッシュ部１２（データハッシュ（ＤＨ）１３及びリンクハッシュ（ＬＨ）１４の両者）のコピーを保持するように構成されている。
最新ハッシュ記憶部１０２（プロセスメモリ）は第一の記憶装置の例であり、ディスク１１２は、第二の記憶装置の例である。【００３９】
また、ログ出力装置１００は、署名要求部１０３を備えている。署名要求部１０３は、外部或いはログ出力装置１００内部からの署名要求を受け付け、ログ出力処理部１０１内の署名生成部１０１３（後述）に署名要求を出力することにより、ディスク１１２上のログの最新レコードに署名が付与される。
署名要求部１０３は具体的には、ＵＮＩＸ（登録商標）プログラムにおけるシグナルハンドラなどの機構により実現することもできるし、ログ出力ライブラリ１１０からの明示的な署名要求や、タイマーを保持し、自身で署名生成のタイミングを与えることなども可能である。【００４０】
ログ出力装置１００は、自身で公開鍵ペアを保有しており、各々秘密鍵保持部１０４、公開鍵保持部１０５に保持している。また、オプションで耐タンパー装置１０６を備えてもよく、その場合、最新ハッシュ記憶部１０２及び秘密鍵保持部１０４を、耐タンパー装置１０６の中に備える構成を取ってもよい。【００４１】
次に、図３にログ出力処理部１０１（データ処理システム）の内部構成例について説明する。【００４２】
ハッシュ値複製格納部１０１５は、ディスク１１２（第二の記憶装置）にレコードが格納される度に、格納されるレコードに付加されている、当該レコードのデータ部１１から生成されたデータハッシュ（ＤＨ）１３（第一のハッシュ値）と当該レコードの前に格納されたレコードのハッシュ部１２から生成されたリンクハッシュ（ＬＨ）１４（第二のハッシュ値）を複製し、データハッシュ（ＤＨ）１３及びリンクハッシュ（ＬＨ）１４の複製を最新ハッシュ記憶部１０２（第一の記憶装置）に格納する。【００４３】
ハッシュ値比較部１０１１は、新たなデータ（データ部１１）が出力された際に、ディスク１１２に最後に格納された最後尾データに付加されている最後尾のハッシュ部１２（データハッシュ（ＤＨ）１３及びリンクハッシュ（ＬＨ）１４）と、最新ハッシュ記憶部１０２に格納されている最後尾のハッシュ部１２の複製とを比較する。【００４４】
ハッシュ値生成部１０１２は、ハッシュ値比較部１０１１により最後尾のハッシュ部１２と最後尾のハッシュ部１２の複製とが一致すると判断された場合に、新たなデータ（データ部１１）から新たなデータハッシュ（ＤＨ）１３を生成するとともに、最後尾のハッシュ部１２から新たなリンクハッシュ（ＬＨ）１４を生成する。【００４５】
署名生成部１０１３は、署名要求部１０３からの署名要求に基づき、複数のデータのうちの特定のデータ（最後尾のデータ）に対して署名を生成し、生成した署名を当該特定のデータに付加する。署名生成部１０１３は、例えば、一定のデータ間隔ごとに、署名を生成するようにしてもいいし、一定の時間間隔ごとに、署名を生成するようにしてもよい。【００４６】
データ格納部１０１４は、ハッシュ値生成部１０１２により生成された新たなデータハッシュ（ＤＨ）１３とリンクハッシュ（ＬＨ）１４をハッシュ部１２として新たなデータ（データ部１１）に付加し、データハッシュ（ＤＨ）１３とリンクハッシュ（ＬＨ）１４が付加された後のレコード１０をディスク１１２（第二の記憶装置）に格納する。
また、データ格納部１０１４は、署名生成部１０１３により署名が生成された場合は、署名が付加された署名レコード２０をディスク１１２に格納する。【００４７】
改竄検出レポート生成部１０１６は、ハッシュ値比較部１０１１により最後尾のハッシュ部１２と最後尾のハッシュ部１２の複製とが一致しないと判断された場合に、最後尾データにおける改竄を通知する改竄検出レポートを生成する。【００４８】
なお、ハッシュ値比較部１０１１により最後尾のハッシュ部１２と最後尾のハッシュ部１２の複製とが一致しないと判断された場合は、改竄検出レポート生成部１０１６により改竄検出レポートの生成とともに、ハッシュ値生成部１０１２は、新たなデータから新たなデータハッシュ（ＤＨ）１３を生成するとともに、最後尾のハッシュ部１２以外の値から新たなリンクハッシュ（ＬＨ）１４を生成するようにしてもよい。この場合、新たなデータは、改竄のあった最後尾データとリンクしないことになる。【００４９】
（ログ出力装置のハードウェア構成例）
次に、ログ出力処理部１０１を含むログ出力装置１００のハードウェア構成例について説明する。
前述のように、ログ出力装置１００は、一般的なコンピュータで構成することができ、例えば、図１０に示すハードウェア構成とすることができる。
なお、図１０の構成は、あくまでもログ出力装置１００のハードウェア構成の一例を示すものであり、ログ出力装置１００のハードウェア構成は図１０に記載の構成に限らず、他の構成であってもよい。【００５０】
図１０において、ログ出力装置１００は、プログラムを実行するＣＰＵ９１１（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう）を備えている。
ＣＰＵ９１１は、バス９１２を介して、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）９１３、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）９１４、通信ボード９１５、表示装置９０１、キーボード９０２、マウス９０３、磁気ディスク装置９２０と接続され、これらのハードウェアデバイスを制御する。
更に、ＣＰＵ９１１は、ＦＤＤ９０４（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ  Ｄｒｉｖｅ）、コンパクトディスク装置９０５（ＣＤＤ）、プリンタ装置９０６、スキャナ装置９０７と接続していてもよい。また、磁気ディスク装置９２０の代わりに、光ディスク装置、メモリカード読み書き装置などの記憶装置でもよい。
ＲＡＭ９１４は、揮発性メモリの一例である。ＲＯＭ９１３、ＦＤＤ９０４、ＣＤＤ９０５、磁気ディスク装置９２０の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置あるいは記憶部の一例である。
通信ボード９１５、キーボード９０２、スキャナ装置９０７、ＦＤＤ９０４などは、入力部、入力装置の一例である。
また、通信ボード９１５、表示装置９０１、プリンタ装置９０６などは、出力部、出力装置の一例である。【００５１】
通信ボード９１５は、ネットワークを介してログの転送先であるログ収集管理システムと接続されていてもよい。例えば、通信ボード９１５は、ＬＡＮ（ローカルエリアネットワーク）、インターネット、ＷＡＮ（ワイドエリアネットワーク）などに接続されていても構わない。
磁気ディスク装置９２０には、オペレーティングシステム９２１（ＯＳ）、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。プログラム群９２３のプログラムは、ＣＰＵ９１１、オペレーティングシステム９２１、ウィンドウシステム９２２により実行される。
また、磁気ディスク装置９２０に、図１及び図２に示した署名付きログが格納されるようにしてもよい。【００５２】
上記プログラム群９２３には、本実施の形態及び以下に述べる実施の形態の説明においてログ出力処理部１０１及びその内部構成として説明している機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ９１１により読み出され実行される。
ファイル群９２４には、以下に述べる説明において、「−の判定」、「−の計算」、「−の比較」、「−の評価」、「−の生成」等として説明している処理の結果を示す情報やデータや信号値や変数値やパラメータが、「−ファイル」や「−データベース」の各項目として記憶されている。「−ファイル」や「−データベース」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリになどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示などのＣＰＵの動作に用いられる。抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示のＣＰＵの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリ、レジスタ、キャッシュメモリ、バッファメモリ等に一時的に記憶される。
また、以下で説明するフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号値は、ＲＡＭ９１４のメモリ、ＦＤＤ９０４のフレキシブルディスク、ＣＤＤ９０５のコンパクトディスク、磁気ディスク装置９２０の磁気ディスク、その他光ディスク、ミニディスク、ＤＶＤ等の記録媒体に記録される。また、データや信号は、バス９１２や信号線やケーブルその他の伝送媒体によりオンライン伝送される。【００５３】
また、本実施の形態及び以下に述べる実施の形態の説明においてログ出力処理部１０１及びその内部構成として説明しているものは、「−回路」、「−装置」、「−機器」、「手段」であってもよく、また、「−ステップ」、「−手順」、「−処理」であってもよい。
すなわち、ログ出力処理部１０１及びその内部構成として説明しているものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、ＤＶＤ等の記録媒体に記憶される。
プログラムはＣＰＵ９１１により読み出され、ＣＰＵ９１１により実行される。すなわち、プログラムは、本実施の形態及び以下に述べる実施の形態のログ出力処理部１０１及びその内部構成としてコンピュータを機能させるものである。あるいは、本実施の形態及び以下に述べる実施の形態のログ出力処理部１０１及びその内部構成の手順や方法をコンピュータに実行させるものである。【００５４】
このように、本実施の形態及び以下に述べる実施の形態に示すログ出力装置１００は、処理装置たるＣＰＵ、記憶装置たるメモリ、磁気ディスク等、入力装置たるキーボード、マウス、通信ボード等、出力装置たる表示装置、通信ボード等を備えるコンピュータであり、上記したようにログ出力処理部１０１及びその内部構成として示された機能をこれら処理装置、記憶装置、入力装置、出力装置を用いて実現するものである。【００５５】
（ログ出力時の動作）
次に、ログ出力時の動作について述べる。
図５は、その時のログ出力処理部１０１の動作（データ処理方法）の例を示すフローチャートである。【００５６】
ログ出力処理を開始すると、ログ出力処理部１０１のハッシュ値比較部１０１１が、まず、ステップＳＴ３０１にて、ディスク１１２の最新レコードのハッシュ部１２、つまりディスク１１２に最後に格納された最後尾データに付加されている最後尾のハッシュ部１２を読み込む。
次にステップＳＴ３０２にて、ハッシュ値比較部１０１１は、最新ハッシュ記憶部１０２（プロセスメモリ）上に保持している最後尾のハッシュ部１２のコピー値と比較する。
ステップＳＴ３０３において、不一致の場合は、ハッシュ値比較部１０１１はディスク上のログが改竄されたものと判断し、ステップＳＴ３１２にて改竄検出レポート生成部１０１６が改竄検出レポートを生成し、データ格納部１０１４が改竄検出レポートをディスク１１２に出力し、ログ出力処理を終了する。
一方、ステップＳＴ３０３において、最後尾のハッシュ部１２とそのコピーとが一致していた場合は、ステップＳＴ３０４にて、ハッシュ値生成部１０１２が、該当データのデータ部１１からデータハッシュ（ＤＨ）１３を計算する。
次にステップＳＴ３０５にて、ハッシュ値生成部１０１２が、最新ハッシュ記憶部１０２（プロセスメモリ）上に保持している最後尾のハッシュ部１２のコピーよりリンクハッシュ（ＬＨ）１４を計算し、ステップＳＴ３０６でデータハッシュとリンクハッシュを合わせて、ハッシュ部１２を生成する。
そして、ステップＳＴ３０７にて、データ格納部１０１４が、データ部１１とハッシュ部１２を合わせてレコード１０を生成する。【００５７】
ここで、ステップＳＴ３０８にて、署名生成部１０１３が、署名要求部１０３からの署名要求があるか否かを判定し、署名要求がある場合は、さらにステップＳＴ３０９にてハッシュ部１２の署名１５を計算し、署名１５をレコード１０に付加し、署名要求がない場合は特になにもしない。【００５８】
以上、生成したレコードをステップＳＴ３１０にてデータ格納部１０１４がディスク１１２に出力し、ステップＳＴ３１１にて、ハッシュ値複製格納部１０１５がステップＳＴ３０４−３０６において生成されたハッシュ部１２のコピーを生成し、当該コピーを最新ハッシュ記憶部１０２（プロセスメモリ）上に保持する。
以上でログ出力処理は終了である。【００５９】
以上のように動作することで、ディスク上に出力されたログにハッシュチェーンを形成することができる。【００６０】
また、署名で守られていないブロックが改竄されてしまうとそれを検知できなくなるが、上で示した通り、プロセスメモリ上に最後尾レコードのハッシュ部１２（ＤＨとＬＨを合わせたもの）を保持し、ディスクへのレコード書き出し時に随時比較するよう構成したことにより、署名で守られていないブロックの改竄も検知することができる。【００６１】
さらに、プロセスメモリ上に保持するハッシュ部１２のコピーを、耐タンパー装置１０６に保持するよう構成することにより、検知できない改竄をより精度高く防ぐことができる。すなわち、ディスク上の最後尾レコードのハッシュ部１２と、プロセスメモリ上に保持したハッシュを同時に改竄されてしまうことを防ぐことができるのである。【００６２】
また、図７に示すように、ステップＳＴ３０３において、不一致の場合は、改竄検出レポート生成部１０１６が改竄検出レポートを生成し（ステップＳＴ３１２）、データ格納部１０１４が改竄検出レポートをディスク１１２に出力した後（ＳＴ３１３）、ハッシュ値生成部１０１２が、ログ出力データのデータ部１１からデータハッシュ（ＤＨ）１３を生成するとともに（ステップＳＴ３１４）、このデータハッシュ（ＤＨ）１３からリンクハッシュ（ＬＨ）１４を生成する（ステップＳＴ３１５）。このようにすれば、新たなデータと改竄されている最後尾データとを切り離し、当該新たなデータから新たなハッシュチェーンを形成することができる。【００６３】
また、本実施の形態に係る構成のメリットを特許文献１に照らして説明する。
本実施の形態に記載のアイデアも、特許文献１のアイデアも、ディスク上のログは、データ部１１とハッシュ部１２に分けることができ、どちらも改竄対象になり得る。従って、両アイデアともハッシュ部１２のコピーをメモリ上に持つ構成を取っているが、特許文献１では本実施の形態の構成によるデータハッシュ（ＤＨ）１３相当のみメモリ上に保持し、リンクハッシュ（ＬＨ）１４に相当する部分はメモリ上に保持していない。
代わりに、特許文献１では、ディスク上のレコードに署名を付けることにより、リンクハッシュ部になされる可能性のある、検知できない改竄を防いでいる訳である。このような構成を取り続ける限り、ディスク上の毎レコードに署名を付けざるを得ず、冒頭で指摘した署名処理負荷という問題点から逃れることができないのである。【００６４】
一方、本実施の形態では、リンクハッシュ（ＬＨ）１４もメモリ上に保持する構成としているため、検知できない改竄の防止をディスク上の全レコードへの署名に頼る必要がなく、部分的に署名することが可能という大きな効果を生み出すことに成功しているのである。
このように、本実施の形態では、リンクハッシュの改竄の有無を検証し、リンクハッシュに改竄がなければ、ハッシュチェーンが正当であることが確認できる。【００６５】
（署名付与時の動作）
次に、署名付与時の動作（ログ出力処理と独立に署名を付与する場合の動作）について述べる。
図６は、その時のログ出力処理部１０１の動作例を示すフローチャートである。
署名処理を開始すると、まず、ステップＳＴ４０１にて、ハッシュ値比較部１０１１が、ディスク上の最新レコードを読み込む。次にステップＳＴ４０２にて、読み込んだ最新レコードが署名済か否かを判定し、既に署名済の場合は署名処理を行う必要がないため、終了する。
署名がなされていない場合は、ステップＳＴ４０３にて、ハッシュ値比較部１０１１は、読み込んだレコードのハッシュ部１２とプロセスメモリ上に保持している最新レコードのハッシュ部１２とを比較する。
ステップＳＴ４０４にて、一致していない場合は、ハッシュ値比較部１０１１は、ディスク上のログレコードが改竄されたと判断し、ステップ４０７にて、改竄検出レポート生成部１０１６が改竄検出レポートを生成するとともに、データ格納部１０１４が改竄検出レポートをディスクに出力し、署名処理を終了する。
ステップＳＴ４０４において一致していた場合は、ステップＳＴ４０５にて、署名生成部１０１３が、ハッシュ部１２の署名を計算する。
次に、ステップＳＴ４０６にて、署名生成部１０１３が、ディスク上の最新レコードに署名を付け加え、署名処理を終了する。【００６６】
以上のように構成することで、ログをディスクに出力するタイミング以外においても、ログ出力処理部１０１が署名要求を受けた任意のタイミングで署名を付与することができる。【００６７】
（一定行数間隔による署名付与）
以上に説明した構成・動作に基づき、ログ出力処理部１０１の署名生成部１０１３は一定行数間隔（一定のデータ間隔）にてログに署名を付けることができる。
なお、ログ出力処理部１０１の内部に、図示しないレコード出力回数カウンタを設け、一定回数に達したら自身で署名生成部１０１３に署名要求を出し、ディスク上に書き出したレコードに署名を付与するように構成することで、これを実現することができる。所定の行数間隔は、同じく図示しない設定ファイルなどに指定し、ログ出力処理部１０１が起動時にそれを読み込むよう構成することができる。【００６８】
これにより、ログの署名による処理負荷、ログサイズの低減を図り、かつ、検知できない改竄の無いログを出力することができる。【００６９】
（一定時間間隔による署名付与）
以上に説明した構成・動作に基づき、ログ出力処理部１０１の署名生成部１０１３は一定時間間隔にてログに署名を付けることができる。
ログ出力処理部１０１の内部に、図示しないタイマーを設け、前回署名時から一定時間経過したら自身で署名生成部１０１３に署名要求を出し、ディスク上の最新レコードに署名を付与するように構成することで、これを実現することができる。所定の時間間隔は、同じく図示しない設定ファイルなどに指定し、ログ出力処理部１０１が起動時にそれを読み込むよう構成することができる。【００７０】
これにより、ログの署名による処理負荷、ログサイズの低減を図り、かつ、検知できない改竄の無いログを出力することができる。【００７１】
（ログの完全性検証（正常時））
図４は、図１で説明した形式で出力されたログの、ログ検証手段（例えば、ログ転送先のログ収集管理システムに搭載されたログ検証プログラム）による検証手順を示すフローチャートである。【００７２】
検証処理を開始すると、ステップＳＴ２０１にて、ログの中から最新レコード（ログの最後のレコード）を読み込む。
ステップＳＴ２０２にて署名レコードか否かを判定し（通常は最新レコードが署名レコードになるようにしてログを検証する）、署名レコードの場合は、ステップＳＴ２０６に進む。署名レコードでない場合の処理は後述する。
ステップＳＴ２０６にて、ログ出力装置の公開鍵で署名を復号し、ステップＳＴ２０７にて復号した署名とレコードのハッシュ部１２を比較する。
ステップＳＴ２０８にて一致している場合はステップＳＴ２１２に進む。一致しない場合の処理は後述する。
ステップＳＴ２１２では、データ部１１の検証を行うために、データ部１１のハッシュを計算し、ハッシュ部１２のデータハッシュ（ＤＨ）１３との比較を行う。ステップＳＴ２１３にて一致している場合はＳＴ２１５に進む。一致しない場合の処理は後述する。
ステップＳＴ２１５では、一つ前のレコードとのリンクの検証を行うため、一つ前のレコードを読み込む。
ステップＳＴ２１６にて一つ前のレコードが無い場合は、検証処理は終了である。
ステップＳＴ２１６にて一つ前のレコードがある場合は、ステップＳＴ２１７にて、今読み込んだレコードを検証対象にし、ステップＳＴ２１８にて、検証対象レコードのハッシュ部１２のハッシュを計算し、一つ前の検証対象レコードのハッシュ部１２のリンクハッシュ（ＬＨ）１４と比較する。ステップＳＴ２１８にて再度一致を確認する。
以上の処理をステップＳＴ２１６にてレコードが無いと判定されるまで繰り返すことにより、ログの検証を行うことができる。【００７３】
（ログの完全性検証（最新レコードが署名レコードでないケース））
ステップＳＴ２０２にて最新レコードが署名レコードでないと判定した場合、ステップＳＴ２１９にて、該当レコードは信用できないと判定する。
次に、最新の署名レコードを探すために、ステップＳＴ２０３にて次の（一つ前の）レコードを読む。
ステップＳＴ２０４にてレコードの有無を判定し、レコードがあった場合は再びステップＳＴ２０２にて署名レコードか否かを判定する。この処理を繰り返すことで、最新の署名レコードを探す。
この処理の過程で、ステップＳＴ２０４にて署名レコードが無いと判定した場合は、ステップＳＴ２０５にて、ログ自体が検証不能と判断し、検証処理を終了する。【００７４】
（ログの完全性検証（ハッシュ部が改竄されたケース））
ステップＳＴ２０８にて、ハッシュ部１２が、復号した署名、または一つ前の検証対象レコードのリンクハッシュ（ＬＨ）１４と一致しない場合、ステップＳＴ２０９にて、該当署名ブロックの中で、検証対象レコードを含む、それより古いレコードは全て信用できないと判断し、ステップＳＴ２１０にて次の署名（ブロック）までログをサーチする。
ステップＳＴ２１１にて署名レコードがあると判定した場合は、そのレコードから再度ステップＳＴ２０６より検証処理を継続する。署名レコードが無いと判定した場合は、検証処理は終了である。【００７５】
（ログの完全性検証（データ部が改竄されたケース））
ステップＳＴ２１３にて、データ部１１のハッシュとデータハッシュ（ＤＨ）１３が一致しない場合、ステップＳＴ２１４にて該当レコードのデータ部１１が改竄されていると判定し、次にステップＳＴ２１５に戻り、一つ前のレコードから再び検証処理を継続する。【００７６】
以上、本実施の形態では、ログのように時間軸に沿って逐次出力されるデータに対し、そのデータ（メッセージ）本体に該当するデータ部と、新たに付加するハッシュ部から構成されるレコードを形成し、ディスクに出力するログ出力装置について説明した。
そして、上記ログ出力装置において、ハッシュ部は、データ部のハッシュ（以降、データハッシュ”ＤＨ”と呼ぶ）と、一つ前のレコードのハッシュ部のハッシュ（以降、リンクハッシュ”ＬＨ”と呼ぶ）を合わせたものから成り（一つ前のレコードが無い場合は、ＤＨのハッシュをＬＨとする）、さらにハッシュ部のリンクから成るハッシュチェーンが形成されることを説明した。
また、上記ログ出力装置は、ハッシュチェーンの一部のレコードにのみ署名を付けることを説明した。
また、上記ログ出力装置は、データが出力されたタイミングで、該データのＤＨとＬＨを計算してハッシュ部を生成することによりレコードを形成し、それをディスクに出力するとともに、生成したハッシュ部（ＤＨ、ＬＨ両方を含む）のコピーをプロセスメモリ上に保持することを説明した。
また、上記ログ出力装置は、次のデータが出力された場合、ディスク上の最新レコードのハッシュ部と、プロセスメモリ上に保持しているハッシュ部を比較し、一致すればディスク上のレコードが改竄されていないと判断し、さらにハッシュチェーンでリンクされたレコードをディスクに出力し、一致しない場合は改竄されたと判断し、改竄を検出したことをレコードに記録するとともに、次のデータは前のレコードとリンクせず、一つ前のレコードが無いものとして新たにレコードを生成、記録することを説明した。【００７７】
また、本実施の形態では、ハッシュ部のコピーをプロセスメモリ上ではなく、プログラムが動作する機器に搭載された耐タンパー装置内に保持するログ出力装置について説明した。【００７８】
更に、本実施の形態では、一定ログレコード出力行数ごとに、ディスク上の最新レコードのハッシュ部に署名を付けるログ出力装置について説明した。【００７９】
また、本実施の形態では、一定時間間隔ごとに、ディスク上の最新レコードのハッシュ部に署名を付けるログ出力装置について説明した。【００８０】
実施の形態２．
（アプリケーション指示及び、外部からのログ転送要求に基づく署名付与）
本実施の形態では、ディスク上のログに署名を付けるタイミングとして、アプリケーション１１１による指示時、及び外部からのログ転送要求時を利用した実施の形態について述べる。
なお、ログ出力装置、ログ出力処理部１０１、ログ形式などの構成は、実施の形態１に記載のものと全て同じであるため、本実施の形態での記載は省略する。【００８１】
（アプリケーション指示による署名付与）
実施の形態１に説明した構成・動作に基づき、ログ出力処理部１０１の署名生成部１０１３は、アプリケーション１１１が指示するタイミングにてログに署名を付けることができる。【００８２】
アプリケーション１１１が、リンクするログ出力ライブラリ１１０に対し、ログ出力を要求するとともに、出力後署名も同時に付けるようにログ出力処理部１０１に指示するように構成することで、これを実現することができる。署名要求の指示は、ログ出力ライブラリ１１０が提供するログ出力ＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）に、署名要求の有無を入力とする引数を追加するよう構成することができる。【００８３】
これにより、例えば、ある業務アプリケーションの一つの処理単位を論理的な検証対象ログとした場合、アプリケーションが処理終了をログに記録する時に署名も付けるよう指示することで、論理的な検証対象ログの最後のレコードに署名を付与することができる。【００８４】
（外部からのログ転送要求による署名付与）
実施の形態１に説明した構成・動作に基づき、ログ出力処理部１０１の署名生成部１０１３は、外部（例えば、ログ収集管理システム）からのログ転送要求があったタイミングにてログに署名を付けることができる。【００８５】
図示しない外部のログ収集管理システムからログ転送要求を署名要求部１０３で受けるように構成することで、これを実現することができる。署名要求部１０３は、ログ転送要求を例えばシグナルの形で受信するよう構成することができる。【００８６】
これにより、ログ収集管理システムは、ログ出力装置１００から受信したログの最後のレコードに署名が付いているので、全てのレコードについて完全性を確認することができる。【００８７】
本実施の形態では、アプリケーションの指示するタイミングで、ディスク上の最新レコードのハッシュ部に署名を付けるログ出力装置について説明した。【００８８】
また、本実施の形態では、外部からのログ転送要求時に、ディスク上の最新レコードのハッシュ部に署名を付けるログ出力装置について説明した。【００８９】
実施の形態３．
（管理者やオペレータの指示に基づく署名付与）
本実施の形態では、管理者やオペレータによる指示があった場合に、ディスク上のログに署名を付けることを想定した実施の形態について述べる。
なお、ログ出力装置、ログ出力処理部１０１、ログ形式などの構成は、実施の形態１に記載のものと全て同じであるため、本実施の形態での記載は省略する。【００９０】
実施の形態１に説明した構成・動作に基づき、ログ出力処理部１０１の署名生成部１０１３は、管理者やオペレータ（ログ出力装置１００の利用者）からの署名要求があったタイミングにてログに署名を付けることができる。
管理者やオペレータからの署名要求を署名要求部１０３で受けるように構成することで、これを実現することができる。
これにより、定期的な、或いは定型業務的なログ収集タイミング以外に、管理者・オペレータが必要とするイレギュラーなタイミングにおいても、全レコードについて完全性の検証が可能なログを得ることができる。【００９１】
以上のように、本実施の形態では、管理者・オペレータの指示するタイミングで、ディスク上の最新レコードのハッシュ部に署名を付けるログ出力装置について説明した。【００９２】
実施の形態４．
（ＩＤＳ／ＩＰＳが侵入を検知したタイミングに基づく署名付与）
本実施の形態では、ログ出力装置１００に併設されたＩＤＳ（侵入検知システム）や、ＩＰＳ（侵入防止システム）が侵入を検知したタイミングで、ディスク上のログに署名を付ける実施の形態について述べる。
なお、ログ出力装置、ログ出力処理部１０１、ログ形式などの構成は、実施の形態１に記載のものと全て同じであるため、本実施の形態での記載は省略する。【００９３】
ＩＤＳ／ＩＰＳによる侵入検知イベントを、ログ出力装置の署名要求部１０３で受けるように構成することで、署名生成部１０１３は、侵入検知イベントがあったときに署名を生成することができる。
これにより、ログ出力装置にセキュリティ上の脅威が及ぶ前に、ログに署名を付けることができる。【００９４】
以上のように、本実施の形態では、システムに併設のＩＤＳ（侵入検知システム）／ＩＰＳ（侵入防止システム）が侵入を検知したタイミングで、ディスク上の最新レコードのハッシュ部に署名を付けるログ出力装置について説明した。【００９５】
実施の形態５．
（ログ出力処理部１０１起動／終了時の動作）
本実施の形態では、ログ出力処理部１０１が、起動／終了時にディスク上のログに対して行う動作について、その実施の形態を述べる。【００９６】
本実施の形態に係るログ出力装置１００では、ログ出力処理部１０１の内部構成を、例えば、図８に示すようにする。
図８において、署名生成部１０１３は、実施の形態１に示したものと同様の機能を有するが、本実施の形態では、ログ出力処理部１０１が稼動を終了する際に、最後に出力されたデータに対する署名を生成する。
そして、データ検査部１０１７は、ログ出力処理部１０１の起動時に、ディスク１１２に格納されているデータを検査し、署名が付加されている最後のデータより後に格納されたデータが存在する場合に、署名が付加されている最後のデータより後に格納されたデータが存在することを通知するアラートを生成する。署名が付加されている最後のデータより後に格納されたデータは、改竄されている可能性があるデータと考えられるからである。
図８において、署名生成部１０１３及びデータ検査部１０１７以外は、図３に示したものと同様である。
また、ログ形式は、実施の形態１に記載のものと同じである。【００９７】
（ログ出力処理部１０１終了時の動作）
ログ出力処理部１０１の署名生成部１０１３は、稼動終了時（ログ出力処理部１０１をプログラムで構成する場合は、プログラム終了時）に、ディスク１１２上の最新のログレコード（最後にディスク１１２に格納されたレコード）に署名を付与するように構成する。
ＵＮＩＸ（登録商標）においては、プロセス終了時にＳＩＧＴＥＲＭシグナルを受けることが一般的であるため、ＳＩＧＴＥＲＭシグナルハンドラの中にこのような処理を含めるよう構成することで、具体的に実現することができる。【００９８】
これにより、ログ出力装置１００が停止中であっても、稼動停止の時間帯に、署名で守られないレコードがディスク上に放置されるケースを無くすことができる。【００９９】
（ログ出力処理部１０１起動時の動作）
ログ出力処理部１０１のデータ検査部１０１７は、ログ出力処理部１０１の起動時（ログ出力処理部１０１をプログラムで構成する場合は、プログラム起動時）に、ディスク１１２上の最新ログレコードを参照し、署名が付与されていない場合、最後の署名の後に記録されたログレコードは信用できない（ログ内に署名レコードが一つも無い場合は、ログ全てが信用できない）旨のアラートをログに記録するよう構成する。【０１００】
これにより、署名が付けられていない状態で改竄されたログを信用してしまうケースを防ぐことができる。【０１０１】
以上のように、本実施の形態では、稼動終了時に、ディスク上の最後のログレコードに署名を付けるログ出力装置について説明した。
また、本実施の形態では、起動時に、ディスク上の最後のログレコードに署名が付与されていない場合、最後の署名の後に記録されたレコードは信用できないことをログに記録するログ出力装置について説明した。【０１０２】
実施の形態６．
（ハッシュツリーとの組み合わせによる、改竄された可能性のある箇所の限定）
本実施の形態では、ディスク上のログが改竄された場合、改竄された可能性のある場所をできるだけ限定するための実施の形態について述べる。
ハッシュチェーンを用いたログの検証方法は、実施の形態１や図４に示した通り、レコードのハッシュ部１２が改竄されてしまうと、同一署名ブロックの中で、その該当レコードより古いレコードは、実際に改竄されていなくても、検証できないため、信用できないと判定せざるを得ない。
従って、検知できない改竄を防ぐという第一の目的は達成しているものの、署名レコード或いはその近傍のレコードのハッシュ部１２が改竄されると、ログ全体或いは大部分が信用できない場合がある。
本実施の形態では、レコードをハッシュチェーンのみならず、ハッシュツリーと呼ばれるリンク方法も同時に組み合わせてリンクすることにより、ログが改竄された場合、改竄された可能性のある範囲をできるだけ限定することができる構成について説明する。【０１０３】
（ハッシュツリーの構造）
図９は、複数ログレコードからなる署名ブロック２に、ハッシュツリーを施した状態を示す図である。ハッシュチェーンも同時に形成されているが、図が煩雑になるため、ハッシュツリーによるリンク構成のみ示している。
一段目のデータハッシュ（ＤＨ１）５０は、各レコードのデータ部１１のハッシュである。さらに一段目のデータハッシュ（ＤＨ１）５０を一定個数（図では３個）合わせたデータのハッシュを取ったものが、二段目のデータハッシュ（ＤＨ２）５１である。
同様に、二段目のデータハッシュ（ＤＨ２）５１を一定個数（図では同じく３個）合わせたデータのハッシュを取ったものが、三段目のデータハッシュ（ＤＨ３）５２である。
図９では、三段目のデータハッシュまでしか図示していないが、レコードが増えるにつれ、四段目、五段目のデータハッシュが必要となることは言うまでも無い。【０１０４】
なお、署名を付ける場合は、最上段のデータハッシュ群を合わせたものに対して署名を付けるよう構成する。また、図９に示すレコードの下から２つ分のように、一定個数（図では３個）に達しない半端なレコードが存在する場合は、一定個数に達していなくとも一つ上位のデータハッシュを生成し、署名６０を付ける際に、最上段のデータハッシュ群に加え、半端なレコードをまとめたハッシュも加えた上で署名を付けるように構成する。【０１０５】
本実施の形態におけるログ出力装置１００の構成は図２に示したものと同様であり、また、ログ出力処理部１０１の構成も図３に示したものと同様である。
但し、本実施の形態では、ログ出力処理部１０１のハッシュ値生成部１０１２は、図９に示すように、複数個のデータハッシュ（ＤＨ）（第一のハッシュ値）から上位のデータハッシュ（ＤＨ）（上位ハッシュ値）を生成し、複数個の上位のデータハッシュ（ＤＨ）から更なる上位のデータハッシュ（更なる上位ハッシュ値）を生成して、複数階層にわたる上位のデータハッシュ（ＤＨ）を生成する。
また、本実施の形態では、ログ出力処理部１０１の署名生成部１０１３は、ハッシュ値生成部１０１２により生成された上位のデータハッシュ（ＤＨ）のうち最上位のデータハッシュ（ＤＨ）を用いて署名を生成する。【０１０６】
（ハッシュツリーの検証）
次に、上記構造で作成されたハッシュツリーの検証について説明する。
まず、ログ出力装置１００からログを取得したログ収集管理システムでは、ログ出力装置１００の公開鍵で署名を復号し、最上位ノードのハッシュ群を合わせたものと比較する。つまり、最上位のデータハッシュ群を合わせたものと復号した署名から抽出されたデータハッシュとを比較する。両者が一致すれば、さらに各々の最上位ノードのデータハッシュを、一段下のノードのハッシュ群を合わせたもののハッシュと比較する。このような比較を最下段のノードに達するまで繰り返し、全て一致していれば、ハッシュ部分の改竄がないことを証明できる。
次に、各レコードごとにデータ部１１のハッシュを計算し、各々対応する一段目のデータハッシュと比較することにより、データ部１１の改竄の有無を検知することができる。
ここで、ハッシュ部分に改竄があると、改竄があったノードの下位にぶら下がるレコード群のデータは、全て信用できないことになる。
例えば、図９で三段目のデータハッシュのうち一番上にあるものが正しいものの（三段目のデータハッシュと復号した署名から抽出されたデータハッシュとが一致するものの）、それに対応する二段目のデータハッシュ群を合わせたもののハッシュと一致しない場合、それ以下のノード（図９では上から９レコード分）は、信用できないことになる。【０１０７】
（ハッシュチェーンとハッシュツリーを組み合わせることによる効果）
以上説明したハッシュチェーンとハッシュツリーを組み合わせることによる効果を、以下に説明する。
ハッシュチェーンのみでは、先に述べた通り、署名レコード或いはその近傍のレコードのハッシュ部１２が改竄されると、信用できないレコードが大部分を占めてしまうという問題があることに触れたが、このような場合でも、ハッシュツリーのハッシュ部（ハッシュツリーのハッシュ部とは、ＤＨ１、ＤＨ２、ＤＨ３をいう）が改竄されていなければ、全レコードの検証を行うことができる。その逆（ハッシュツリーのハッシュ部の一部が改竄されていても、ハッシュチェーンのハッシュ部（ハッシュチェーンのハッシュ部とはＤＨ１及びＬＨをいう）が改竄されていない）の場合でも、全レコードの検証を行うことができる。
また、ハッシュツリーのハッシュ部とハッシュチェーンのハッシュ部が同時に改竄されていたとしても、それがツリーの下位に近い方であれば、検証できる範囲は広く残されており、ハッシュチェーンで検証できない部分を検証可能とすることができるという効果を得ることができる。【０１０８】
以上のように、本実施の形態では、ハッシュチェーンのみならず、ハッシュを階層的にもリンクしながらディスクにレコードを出力し、署名のタイミングで、ツリーの最上位ノードのハッシュ群にも署名を付けるログ出力装置について説明した。【０１０９】
なお、以上の実施の形態１−６に示したログ出力装置１００、ログ出力処理部１０１は、例えば、コンテンツ流通システムや、企業情報システムにおいて求められるログの完全性確保を、現実的な処理負荷、データ量で実現することを目的とした用途に有用である。【０１１０】
なお、以上の実施の形態１−６では、ログデータを例にして説明したが、ログデータに限らず、逐次出力されるデータであれば実施の形態１−６に示したログ出力装置は適用可能である。
【図面の簡単な説明】
【０１１１】
【図１】この発明の実施の形態１−５によるログ出力装置が出力するログの形式を示すブロック図。
【図２】この発明の実施の形態１−５によるログ出力装置の構成例を示すブロック図。
【図３】この発明の実施の形態１によるログ出力処理部の内部構成例を示すブロック図。
【図４】図１の形式で出力されたログの完全性を検証するためのフローチャート図。
【図５】実施の形態１によるログ出力処理部１０１のログ出力時の動作例を示すフローチャート図。
【図６】実施の形態１によるログ出力処理部１０１の署名付与時の動作例を示すフローチャート図。
【図７】実施の形態１によるログ出力処理部１０１のログ出力時の動作例を示すフローチャート図。
【図８】この発明の実施の形態５によるログ出力処理部の内部構成例を示すブロック図。
【図９】この発明の実施の形態６によるログ出力装置が出力するログの形式を示すブロック図。
【図１０】この発明の実施の形態１−６によるログ出力装置のハードウェア構成例を示すブロック図。
【符号の説明】
【０１１２】
１００  ログ出力装置、１０１  ログ出力処理部、１０２  最新ハッシュ記憶部、１０３  署名要求部、１０４  秘密鍵保持部、１０５  公開鍵保持部、１０６  耐タンパー装置、１１０  ログ出力ライブラリ、１１１  アプリケーション、１０１１  ハッシュ値比較部、１０１２  ハッシュ値生成部、１０１３  署名生成部、１０１４  データ格納部、１０１５  ハッシュ値複製格納部、１０１６  改竄検出レポート生成部、１０１７  データ検査部。
【図１】
2008026238.tif 000003
【図２】
2008026238.tif 000004
【図３】
2008026238.tif 000005
【図４】
2008026238.tif 000006
【図５】
2008026238.tif 000007
【図６】
2008026238.tif 000008
【図７】
2008026238.tif 000009
【図８】
2008026238.tif 000010
【図９】
2008026238.tif 000011
【図１０】
2008026238.tif 000012
【国際調査報告】
2008026238.tif 000013
2008026238.tif 000014
2008026238.tif 000015
2008026238.tif 000016