(57)【要約】【課題】  改竄内容の検証が可能で、特定のファイルシステムに限らず論理構造を持って書き込む任意のアプリケーションに適用可能で、スタンドアロン環境で使用可能で、データサイズが巨大になっても性能劣化しない改竄検出方法を実現する。【解決手段】  ディスク装置に書き込んだデータを論理構造を表現するメタ情報とコンテンツ部分に分ける。ステップ１３０でメタ情報の時間遷移を解析し、ステップ１４０、１５０でコンテンツの時間遷移を解析する。このように二段階の解析を行うことで、ファイルシステムであればファイルの置き換えとファイルのコンテンツの書き換えを検出可能で、改竄内容を検証できる。さらにディスク装置の各ブロックにホストから参照のみ可能で更新をディスク装置が行うフラグ領域を設けることで、不正なアクセスパスを用いて改竄した場合でも検出が可能になる。【選択図】  図１
2005346564.tif 000002
【特許請求の範囲】
【請求項１】
記憶媒体と、ホストとの間でコマンドやデータの送受信を行い前記記憶媒体に対して書き込みまたは読み出し制御を行う制御部とを備えるディスク装置の制御方法において、
前記制御部が、
前記記憶媒体にデータを書き込む単位ごとに、ホストから参照のみ可能で前記制御部のみが書き込み可能なフラグ領域を設けるステップ、
前記ディスク装置の内部情報に基づいた情報を生成するステップ、
前記生成した情報を前記フラグ領域に書き込むステップ、
を実行することを特徴とするディスク装置の制御方法。
【請求項２】
請求項１記載のディスク装置の制御方法において、
前記制御部が、
ホストからの書き込みコマンドを受信するステップ、
前記内部情報に基づいた情報を生成するステップとして、前記書き込みコマンドの実行に伴い変化する情報を生成するステップ、
を実行することを特徴とするディスク装置の制御方法。
【請求項３】
請求項１記載のディスク装置の制御方法において、
前記制御部が、
ホストからの読み出しコマンドを受信するステップ、
前記内部情報に基づいて情報を生成するステップとして、前記読み出しコマンドの実行に伴い変化する情報を生成するステップ、
を実行することを特徴とするディスク装置の制御方法。
【請求項４】
請求項２記載のディスク装置の制御方法において、
前記書き込みコマンドの実行に伴い変化する情報として、ディスク装置の総稼働時間を用いること、
を特徴とするディスク装置の制御方法。
【請求項５】
請求項２記載のディスク装置の制御方法において、
前記書き込みコマンドの実行に伴い変化する情報として、ディスク装置の総書き込みコマンド発行数を用いること、
を特徴とするディスク装置の制御方法。
【請求項６】
請求項２記載のディスク装置の制御方法において、
前記書き込みコマンドの実行に伴い変化する情報として、前記記憶媒体上の各データ書き込み単位ごと算出する書き込みコマンド発行数を用いること、
を特徴とするディスク装置の制御方法。
【請求項７】
記憶媒体と、ホストとの間でコマンドやデータの送受信を行い、前記ホストからのコマンドに応じて前記記憶媒体に対して既存のデータを上書きしないように記憶媒体上の未使用領域に新規データを記録する書き出し制御または読み出し制御を行う制御部を備えるディスク装置において、
前記制御部が、
ディスク装置に記録したデータの論理構造を設定するステップ、
前記設定した論理構造を基に、前記ディスク装置に記録したデータの中からデータの論理構造の情報であるメタ情報の記録を特定するステップ、
前記特定したメタ情報の初期状態から最新状態へと至るメタ情報の時間遷移を解析するステップ、
前記解析したメタ情報の時間遷移の各段階において、前記メタ情報が指定するデータのコンテンツの初期状態から最新状態へと至る時間遷移を解析するステップ、
を実行することを特徴とする改竄検出方法。
【請求項８】
請求項７記載の改竄検出方法において、
前記制御部が、
前記メタ情報の時間遷移の解析結果から、最新状態から初期状態へと至る逆向きの時間遷移を生成するステップ、
前記コンテンツの時間遷移の解析結果から、最新状態から初期状態へと至る逆向きの時間遷移を生成するステップ、
を実行することを特徴とする改竄検出方法。
【請求項９】
請求項７記載の改竄検出方法において、
前記制御部が、
解析結果の保存用領域を確保するステップ、
現在の解析処理の状態を前記保存領域に保存するステップ、
改竄検出を開始する時に前記保存用領域を確認し、前記解析処理の状態が保存されている場合には前記解析処理の状態を読み込むステップ、
前記解析処理の状態を読み込んだ場合には前記解析処理の状態を保存した時の続きから、前記解析処理の状態を読み込まなかった場合には最初から解析処理を開始するステップ、
を実行することを特徴とする改竄検出方法。
【請求項１０】
請求項７記載の改竄検出方法において、
前記制御部が、
前記メタ情報の指定するデータのコンテンツを前記ディスク装置が記録する記憶媒体上の領域について、最小の管理単位ごとに前記コンテンツの識別子を前記記憶媒体のフラグ領域に記録するステップ、
を実行することを特徴とする改竄検出方法。
【請求項１１】
請求項７記載の改竄検出方法において、
前記制御部が、
前記メタ情報の時間遷移の解析結果と前記コンテンツの時間遷移の解析結果とから、前記ディスク装置の記憶媒体上でメタ情報とコンテンツとが整合性を持って記録されている前記記憶媒体上のアドレスを特定するステップと、
前記特定した記憶媒体上のアドレスに対応したフラグ領域に整合性を持ってメタ情報とコンテンツとが記録されていることを示すチェックポイントを記録するステップ、
を実行することを特徴とする改竄検出方法。
【請求項１２】
請求項７記載の改竄検出方法において、
前記制御部が、
コンソールに入力されたコンテンツの識別子を受信するステップ、
前記メタ情報の時間遷移の解析結果から前記識別子を検索し、コンテンツの置き換えが発生していないか確認するステップ、
コンテンツの置き換えが発生している場合に、コンテンツの置き換えのイベントが発生していることを示す情報を前記コンソールに出力するステップ、
前記コンテンツの時間遷移の解析結果から前記識別子を検索し、コンテンツの書き換えが発生していないか確認するステップ、
コンテンツの書き換えが発生している場合に、コンテンツの書き換えのイベントが発生していることを示す情報を前記コンソールに出力するステップ、
を実行することを特徴とした改竄検出方法。
【請求項１３】
請求項１２記載の改竄検出方法において、
前記制御部が、
前記コンソールに出力した前記コンテンツの置き換えのイベントが発生したことを示す情報もしくは前記コンテンツの書き換えのイベントが発生したことを示す情報の中から、前記コンソールに入力された任意の二つのイベントを受信するステップ、
受信した前記二つのイベントが指示するそれぞれのメタ情報の差分を算出し、前記コンソールに出力するステップ、
受信した前記二つのイベントが指示するそれぞれのコンテンツの差分を算出し、前記コンソールに出力するステップ、
を実行することを特徴とした改竄検出方法。
【請求項１４】
請求項１２記載の改竄検出方法において、
前記制御部が、
前記コンソールに出力した前記コンテンツの置き換えのイベントが発生したことを示す情報もしくは前記コンテンツの書き換えのイベントが発生したことを示す情報の中から、前記コンソールに入力された任意の一つのイベントを受信するステップ、
受信した前記イベントが指示するコンテンツの無効化をするステップ、
を実行することを特徴とした改竄検出方法。
【請求項１５】
請求項１４記載の改竄検出方法において、
前記制御部が、
受信した前記イベントの発生時点以降に前記ディスク装置に記録された、前記イベントが指示するコンテンツ識別子と同一の識別子を持つメタ情報とコンテンツとを無効化するステップ、
を実行することを特徴とした改竄検出方法。
【請求項１６】
請求項１４記載の改竄検出方法において、
前記制御部が、
受信した前記イベント発生時点以降に前記ディスク装置に記録された、全てのメタ情報とコンテンツとを無効化するステップ、
を実行することを特徴とした改竄検出方法。
【請求項１７】
請求項７記載の改竄検出方法において、前記ディスク装置は、前記記憶媒体にデータを書き込む単位ごとに、ホストから参照のみ可能で前記制御部のみが書き込み可能なフラグ領域を設けるフラグ領域生成手段、書き込みコマンドの実行に伴い変化するディスク装置の内部状態に基づいた内部状態情報を生成する内部状態情報生成手段、前記内部状態情報生成手段が生成した内部状態情報を前記フラグ領域生成手段が設けた前記フラグ領域に書き込む内部状態情報書き込み手段、を備え、
前記制御部が、
前記メタ情報の時間遷移の解析結果と前記フラグ領域に格納された情報との整合性を検査するステップ、
前記コンテンツの時間遷移の解析結果と前記フラグ領域に格納された情報との整合性を検査するステップ、
を実行することを特徴とした改竄検出方法。
【請求項１８】
請求項１記載のディスク装置の制御方法において、
前記制御部が、
前記記憶媒体を定期的にスキャンするステップを実行し、
前記ディスク装置の内部情報に基づいた情報として前記スキャンのステップにより読み出した情報を用いること、
を特徴とするディスク装置の制御方法。
【請求項１９】
記憶媒体と、ホストとの間でコマンドやデータの送受信を行い、前記記憶媒体に対して書き込みまたは読み出し制御を行う制御部とを備えるディスク装置に対して、ホストが既存のデータを上書きしないように記憶媒体上の未使用領域に新規データを記録するディスク装置への書き込み方法において、
前記ディスク装置にデータを書き込んだ第一のホストもしくは前記ディスク装置に対してデータを書き込んでいない第二のホストもしくは前記ディスク装置の管理用コンソールが、
前記ディスク装置に記録したデータの論理構造を設定するステップ、
前記設定した論理構造を基に、前記ディスク装置に記録したデータの中からデータの論理構造の情報であるメタ情報の記録を特定するステップ、
前記特定したメタ情報の初期状態から最新状態へと至るメタ情報の時間遷移を解析するステップ、
前記解析したメタ情報の時間遷移の各段階において、前記メタ情報が指定するデータのコンテンツの初期状態から最新状態へといたる時間遷移を解析するステップ、
を実行することを特徴とする改竄検出方法。
【請求項２０】
請求項１９記載の改竄検出方法において、
前記ディスク装置にデータを書き込んだ第一のホストもしくは前記ディスク装置に対してデータを書き込んでいない第二のホストもしくは前記ディスク装置の管理用コンソールが、
前記メタ情報の時間遷移の解析結果から、最新状態から初期状態へと至る逆向きの時間遷移を生成するステップ、
前記コンテンツの時間遷移の解析結果から、最新状態から初期状態へと至る逆向きの時間遷移を生成するステップ、
を実行することを特徴とする改竄検出方法。
【請求項２１】
請求項１９記載の改竄検出方法において、
前記ディスク装置にデータを書き込んだ第一のホストもしくは前記ディスク装置に対してデータを書き込んでいない第二のホストもしくは前記ディスク装置の管理用コンソールが、
解析結果の保存用領域を確保するステップ、
現在の解析処理の状態を前記保存領域に保存するステップ、
改竄検出を開始する時に前記保存用領域を確認し、前記解析処理の状態が保存されている場合には前記解析処理の状態を読み込むステップ、
前記解析処理の状態を読み込んだ場合には前記解析処理の状態を保存した時の続きから、前記解析処理の状態を読み込まなかった場合には最初から解析処理を開始するステップ、
を実行することを特徴とする改竄検出方法。
【請求項２２】
請求項１９記載の改竄検出方法において、
前記ディスク装置にデータを書き込んだ第一のホストもしくは前記ディスク装置に対してデータを書き込んでいない第二のホストもしくは前記ディスク装置の管理用コンソールが、
前記メタ情報の指定するデータのコンテンツを前記ディスク装置が記録する記憶媒体上の領域について、最小の管理単位ごとに前記コンテンツの識別子を前記記憶媒体のフラグ領域に記録するステップ、
を実行することを特徴とする改竄検出方法。
【請求項２３】
請求項１９記載の改竄検出方法において、
前記ディスク装置にデータを書き込んだ第一のホストもしくは前記ディスク装置に対してデータを書き込んでいない第二のホストもしくは前記ディスク装置の管理用コンソールが、
前記メタ情報の時間遷移の解析結果と前記コンテンツの時間遷移の解析結果とから、前記ディスク装置の記憶媒体上でメタ情報とコンテンツとが整合性を持って記録されている前記記憶媒体上のアドレスを特定するステップと、
前記特定した記憶媒体上のアドレスに対応したフラグ領域に整合性を持ってメタ情報とコンテンツとが記録されていることを示すチェックポイントを記録するステップ、
を実行することを特徴とする改竄検出方法。
【請求項２４】
請求項１９記載の改竄検出方法において、
前記ディスク装置にデータを書き込んだ第一のホストもしくは前記ディスク装置に対してデータを書き込んでいない第二のホストもしくは前記ディスク装置の管理用コンソールが、
コンソールに入力されたコンテンツの識別子を受信するステップ、
前記メタ情報の時間遷移の解析結果から前記識別子を検索し、コンテンツの置き換えが発生していないか確認するステップ、
コンテンツの置き換えが発生している場合に、コンテンツの置き換えのイベントが発生していることを示す情報を前記コンソールに出力するステップ、
前記コンテンツの時間遷移の解析結果から前記識別子を検索し、コンテンツの書き換えが発生していないか確認するステップ、
コンテンツの書き換えが発生している場合に、コンテンツの書き換えのイベントが発生していることを示す情報を前記コンソールに出力するステップ、
を実行することを特徴とした改竄検出方法。
【請求項２５】
請求項２４記載の改竄検出方法において、
前記ディスク装置にデータを書き込んだ第一のホストもしくは前記ディスク装置に対してデータを書き込んでいない第二のホストもしくは前記ディスク装置の管理用コンソールが、
前記コンソールに出力した前記コンテンツの置き換えのイベントが発生したことを示す情報もしくは前記コンテンツの書き換えのイベントが発生したことを示す情報の中から、前記コンソールに入力された任意の二つのイベントを受信するステップ、
受信した前記二つのイベントが指示するそれぞれのメタ情報の差分を算出し、前記コンソールに出力するステップ、
受信した前記二つのイベントが指示するそれぞれのコンテンツの差分を算出し、前記コンソールに出力するステップ、
を実行することを特徴とした改竄検出方法。
【請求項２６】
請求項２４記載の改竄検出方法において、
前記ディスク装置にデータを書き込んだ第一のホストもしくは前記ディスク装置に対してデータを書き込んでいない第二のホストもしくは前記ディスク装置の管理用コンソールが、
前記コンソールに出力した前記コンテンツの置き換えのイベントが発生したことを示す情報もしくは前記コンテンツの書き換えのイベントが発生したことを示す情報の中から、前記コンソールに入力された任意の一つのイベントを受信するステップ、
受信した前記イベントが指示するコンテンツの無効化をするステップ、
を実行することを特徴とした改竄検出方法。
【請求項２７】
請求項２６記載の改竄検出方法において、
前記ディスク装置にデータを書き込んだ第一のホストもしくは前記ディスク装置に対してデータを書き込んでいない第二のホストもしくは前記ディスク装置の管理用コンソールが、
受信した前記イベントの発生時点以降に前記ディスク装置に記録された、前記イベントが指示するコンテンツ識別子と同一の識別子を持つメタ情報とコンテンツとを無効化するステップ、
を実行することを特徴とした改竄検出方法。
【請求項２８】
請求項２６記載の改竄検出方法において、
前記ディスク装置にデータを書き込んだ第一のホストもしくは前記ディスク装置に対してデータを書き込んでいない第二のホストもしくは前記ディスク装置の管理用コンソールが、
受信した前記イベント発生時点以降に前記ディスク装置に記録された、全てのメタ情報とコンテンツとを無効化するステップ、
を実行することを特徴とした改竄検出方法。
【請求項２９】
記憶媒体と、ホストとの間でコマンドやデータの送受信を行い、前記ホストからのコマンドに応じて前記記憶媒体に対して書き出しまたは読み出し制御を行う制御部とを有するディスク装置において、
前記記憶媒体にデータを書き込む単位ごとに、ホストから参照のみ可能で前記制御部のみが書き込み可能なフラグ領域を設けるフラグ領域生成手段、
ディスク装置の内部状態に基づいた内部状態情報を生成する内部状態情報生成手段、
前記内部状態情報生成手段が生成した内部状態情報を前記フラグ領域生成手段が設けた前記フラグ領域に書き込む内部状態情報書き込み手段、
を備えることを特徴とするディスク装置。
【請求項３０】
請求項２９記載のディスク装置において、
前記内部状態情報生成手段が、書き込みコマンドの実行に伴い変化する状態を前記内部状態として用いること、
を特徴とするディスク装置。
【請求項３１】
請求項２９記載のディスク装置において、
前記内部状態情報生成手段が、読み出しコマンドの実行に伴い変化する状態を前記内部状態として用いること、
を特徴とするディスク装置。
【請求項３２】
請求項３０記載のディスク装置において、
前記書き込みコマンドの実行に伴い変化する状態として、ディスク装置の総稼働時間を用いること、
を特徴とするディスク装置。
【請求項３３】
請求項３０記載のディスク装置において、
前記書き込みコマンドの実行に伴い変化する状態として、ディスク装置の総書き込みコマンド発行数を用いること、
を特徴とするディスク装置。
【請求項３４】
請求項３０記載のディスク装置において、
前記書き込みコマンドの実行に伴い変化する状態として、前記記憶媒体上の各データ書き込み単位ごとに算出する書き込みコマンド発行数を用いること、
を特徴とするディスク装置。
【請求項３５】
請求項２９記載のディスク装置において、
前記記憶媒体を定期的にスキャンするスキャン手段を備え、
前記内部状態情報生成手段が、前記スキャン手段により変化する状態を前記内部状態として用いること、
を特徴とするディスク装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はディスク装置及びディスク装置の制御方法並びに改竄検出方法に関し、特にホストからは書き込みができず参照のみ可能なフラグ領域を持つディスク装置の制御方法と、ディスク装置に記録されたデータをメタ情報の時間遷移の解析とコンテンツの時間遷移の解析との二段階で解析し改竄を検出する改竄検出方法に関する。
【背景技術】
【０００２】
各種アプリケーションソフトウェアの普及により、ユーザの作成する書類の電子データ化が進んでいる。紙とは異なり、電子データでは容易に変更が可能なため、書類の電子データ化を進めることで業務効率の向上が期待できる。しかし裁判などで電子データを証拠として採用するためには、作成時期や内容が改竄されていないことが要求される。このため、電子データについての完全性の確認もしくは改竄検出が必要になってきた。
【０００３】
ディスク装置に記録した電子データの従来の改竄検出には、大きく分けて（１）ディスク装置内部で改竄検出情報を生成する方法と、（２）ディスク装置外部の情報を使い改竄検出情報を生成する方法との二通りがある。前者の方法として特開平１０−２８３２６２号公報に記載の「ファイルシステムおよびプログラム記憶媒体」が提案されており、後者の方法として特開平１１−２６１５５０号公報に記載の「電子文書の改竄防止システム及び方法」が提案されている。
【０００４】
特開平１０−２８３２６２号公報では、ファイル改竄の有無を検出できる新たなファイルシステムを提案している。このファイルシステムではファイルの新規作成と更新の際に以下のように動作する。新規ファイル作成時に、ファイルのチェックサム、作成日付、作成者情報などを含む認証ファイルを作成する。既存ファイルの更新時に、更新後のチェックサム、更新日付、更新者情報などを認証ファイルに追加する。このファイルシステムによりホストがディスク装置に書き込みを行うことにより、ファイルに更新を行うごとに認証ファイルに更新後のチェックサムや更新日付が追加されるため、ファイルへの改竄の有無を検出できる。
【０００５】
特開平１１−２６１５５０号公報では、電子文書の認証データを外部認証者が作成する改竄検出方法を提案している。この手法では、当事者が電子文書の特徴を抽出した特徴データを抽出して第一の暗号化鍵で暗号化した後、外部認証者が暗号化した特徴データに少なくとも日付を含んだ外部認証データを付加して第二の暗号化鍵で暗号化した暗号化データを電子文書の認証データにする。当事者には認証データを作成することができないため、電子文書と認証データとを比較することにより、改竄の有無を検出できる。
【特許文献１】特開平１０−２８３２６２号公報
【特許文献２】特開平１１−２６１５５０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかし、これらのファイルシステムをベースにチェックサムや特徴抽出を用いた改竄検出方法にはそれぞれ以下のような問題がある。
【０００７】
特開平１０−２８３２６２号公報には以下のような問題点がある。（１）新しいファイルシステムの提案であり、既存のファイルシステムには適用することができない。（２）改竄の有無を検出できるが、変更箇所と変更内容について知ることができない。（３）オリジナルのファイルの名前を変えてバックアップとして保存しておき、更新後のファイルを新規ファイルとして作成するアプリケーションを使ってファイルを編集する場合、認証ファイルに更新に関する情報が残らない。（４）アクセスログなど定期的に大きくなるファイルの場合には、ファイルサイズが大きくなるに従いチェックサム生成に要する時間が長くなるとともに、チェックサムなどを記録する副ファイルの容量が膨大になる。（５）コンピュータの時刻を変更可能な権限を持つ管理者や認証ファイルの管理権限を持つ管理者が改竄を行った場合、改竄を検出できない。（６）ファイルシステムを通してディスク装置に書き込む正規のアクセスパスではなく、ブロックデバイスに直接コマンドを発行して書き込む不正規なアクセスパスでファイルと認証ファイルに整合性を持たせて書き込んだ場合には、改竄を検出できない。（７）ブロックデバイスに直接アクセスするデータベースなどのアプリケーションには適用できない。
【０００８】
特開平１１−２６１５５０号公報には以下のような問題点がある。（１）改竄の有無を検出できるが、変更箇所と変更内容を知ることができない。（２）外部認証者と通信できないネットワーク的に孤立した環境では使えない。（３）アクセスログなど定期的に大きくなるファイルの場合には、ファイルサイズが大きくなるに従い、認証のための処理の負荷が重くなる。（４）ブロックデバイスに直接アクセスするデータベースなどのアプリケーションには適用できない。
【０００９】
本発明の第一の目的は、ディスク装置の記憶媒体の最小の書き込み単位ごとにホストから書き込めず参照のみ可能なフラグ領域の作成が可能なディスク装置の制御方法を提供することである。
【００１０】
本発明の第二の目的は、既存のデータを上書きしないように記憶媒体上の未使用領域に新規データを記録するディスク装置に記録したデータを、メタ情報の時間遷移の解析と、メタ情報の時間遷移の各段階でメタ情報が指定するコンテンツの時間遷移の解析とにより改竄検出を行う、改竄検出方法を提供することである。
【００１１】
本発明の第三の目的は、改竄検出結果を時間の順方向ならびに逆方向の両方から参照可能な改竄検出方法を提供することである。
【００１２】
本発明の第四の目的は、改竄検出の中断と再開が可能な改竄検出方法を提供することである。
【００１３】
本発明の第五の目的は、コンテンツを記録した記憶媒体のフラグ領域にコンテンツの識別子を書き込み可能な改竄検出方法を提供することである。
【００１４】
本発明の第六の目的は、メタ情報とコンテンツとが整合性を持って記録されている記憶媒体上のアドレスに対応したフラグ領域にチェックポイントを記録可能な改竄検出方法を提供することである。
【００１５】
本発明の第七の目的は、コンテンツの識別子を指定して改竄の有無を確認可能な改竄検出方法を提供することである。
【００１６】
本発明の第八の目的は、改竄が行われている場合に改竄前後のコンテンツの差分を出力可能な改竄検出方法を提供することである。
【００１７】
本発明の第九の目的は、改竄が行われている場合にデータ無効化が可能な改竄検出方法を提供することである。
【００１８】
本発明の第十の目的は、ホストから書き込めず参照のみ可能なディスク装置の記憶媒体上のフラグ領域の情報と、メタ情報の時間遷移とコンテンツの時間遷移との整合性の検査が可能な改竄検出方法を提供することである。
【課題を解決するための手段】
【００１９】
本発明のディスク装置及びディスク装置制御方法並びに改竄検出方法は、前記目的を達成するため以下の手段を有する。
【００２０】
制御部が、記憶媒体にデータを書き込む単位ごとに、ホストから参照のみ可能で制御部のみが書き込み可能なフラグ領域を設けるステップ、ディスク装置の内部情報に基づいた情報を生成するステップ、生成した情報をフラグ領域に書き込むステップ、を実行する。
【００２１】
制御部が、ホストからの書き込みコマンドを受信するステップ、内部情報に基づいた情報を生成するステップとして、書き込みコマンドの実行に伴い変化する情報を生成するステップ、を実行する。
【００２２】
制御部が、ホストからの読み出しコマンドを受信するステップ、内部情報に基づいて情報を生成するステップとして、読み出しコマンドの実行に伴い変化する情報を生成するステップ、を実行する。
【００２３】
書き込みコマンドの実行に伴い変化する情報として、ディスク装置の総稼働時間、ディスク装置の総書き込みコマンド発行数、あるいは記憶媒体上の各データ書き込み単位ごと算出する書き込みコマンド発行数を用いる。
【００２４】
ディスク装置の制御部、ディスク装置にデータを書き込んだ第一のホストもしくはディスク装置に対してデータを書き込んでいない第二のホストもしくはディスク装置の管理用コンソールが、ディスク装置に記録したデータの論理構造を設定するステップ、設定した論理構造を基に、ディスク装置に記録したデータの中からデータの論理構造の情報であるメタ情報を記録を特定するステップ、特定したメタ情報の初期状態から最新状態へと至るメタ情報の時間遷移を解析するステップ、解析したメタ情報の時間遷移の各段階において、メタ情報が指定するデータのコンテンツの初期状態から最新状態へと至る時間遷移を解析するステップ、を実行する。
【００２５】
メタ情報の時間遷移の解析結果から、最新状態から初期状態へと至る逆向きの時間遷移を生成するステップ、コンテンツの時間遷移の解析結果から、最新状態から初期状態へと至る逆向きの時間遷移を生成するステップ、を実行する。
【００２６】
解析結果の保存用領域を確保するステップ、現在の解析処理の状態を保存領域に保存するステップ、改竄検出を開始する時に保存用領域を確認し、解析処理の状態が保存されている場合には解析処理の状態を読み込むステップ、解析処理の状態を読み込んだ場合には解析処理の状態を保存した時の続きから、解析処理の状態を読み込まなかった場合には最初から解析処理を開始するステップ、を実行する。
【００２７】
メタ情報の指定するデータのコンテンツをディスク装置が記録する記憶媒体上の領域について、最小の管理単位ごとにコンテンツの識別子を記憶媒体のフラグ領域に記録するステップ、を実行する。
【００２８】
メタ情報の時間遷移の解析結果とコンテンツの時間遷移の解析結果とから、ディスク装置の記憶媒体上でメタ情報とコンテンツとが整合性を持って記録されている記憶媒体上のアドレスを特定するステップと、特定した記憶媒体上のアドレスに対応したフラグ領域に整合性を持ってメタ情報とコンテンツとが記録されていることを示すチェックポイントを記録するステップ、を実行する。
【００２９】
コンソールにユーザが入力したコンテンツの識別子を受信するステップ、メタ情報の時間遷移の解析結果から識別子を検索し、コンテンツの置き換えが発生していないか確認するステップ、コンテンツの置き換えが発生している場合に、コンテンツの置き換えのイベントが発生していることを示す情報をコンソールに出力するステップ、コンテンツの時間遷移の解析結果から前記識別子を検索し、コンテンツの書き換えが発生していないか確認するステップ、コンテンツの書き換えが発生している場合に、コンテンツの書き換えのイベントが発生していることを示す情報をコンソールに出力するステップ、を実行する。
【００３０】
コンソールに出力したコンテンツの置き換えのイベントが発生したことを示す情報もしくはコンテンツの書き換えのイベントが発生したことを示す情報の中から、コンソールに入力された任意の二つのイベントを受信するステップ、受信した二つのイベントが指示するそれぞれのメタ情報の差分を計算し、コンソールに出力するステップ、受信した二つのイベントが指示するそれぞれのコンテンツの差分を算出し、コンソールに出力するステップ、を実行する。
【００３１】
コンソールに出力したコンテンツの置き換えのイベントが発生したことを示す情報もしくはコンテンツの書き換えのイベントが発生したことを示す情報の中から、コンソールに入力された任意の一つのイベントを受信するステップ、受信したイベントが指示するコンテンツの無効化をするステップ、を実行する。
【００３２】
受信したイベントの発生時点以降にディスク装置に記録された、イベントが指示するコンテンツ識別子と同一の識別子を持つメタ情報とコンテンツとを無効化するステップ、を実行する。
【００３３】
受信したイベント発生時点以降にディスク装置に記録された、全てのメタ情報とコンテンツとを無効化するステップ、を実行する。
【００３４】
メタ情報の時間遷移の解析結果とフラグ領域に格納された情報との整合性を検査するステップ、コンテンツの時間遷移の解析結果とフラグ領域に格納された情報との整合性を検査するステップ、を実行する。
【００３５】
記憶媒体を定期的にスキャンするステップを実行し、ディスク装置の内部情報に基づいた情報としてスキャンのステップにより読み出した情報を用いる。
【００３６】
記憶媒体と、ホストとの間でコマンドやデータの送受信を行い、ホストからのコマンドに応じて記憶媒体に対して書き出しまたは読み出し制御を行う制御部とを有するディスク装置において、記憶媒体にデータを書き込む単位ごとに、ホストから参照のみ可能で制御部のみが書き込み可能なフラグ領域を設けるフラグ領域生成手段、ディスク装置の内部状態に基づいた内部状態情報を生成する内部状態情報生成手段、内部状態情報生成手段が生成した内部状態情報をフラグ領域生成手段が設けたフラグ領域に書き込む内部状態情報書き込み手段、を備える。
【００３７】
内部状態情報生成手段は、書き込みコマンドの実行に伴い変化する状態、あるいは読み出しコマンドの実行に伴い変化する状態を前記内部状態として用いる。書き込みコマンドの実行に伴い変化する状態として、ディスク装置の総稼働時間、ディスク装置の総書き込みコマンド発行数、あるいは記憶媒体上の各データ書き込み単位ごとに算出する書き込みコマンド発行数を用いる。
【００３８】
記憶媒体を定期的にスキャンするスキャン手段を備え、内部状態情報生成手段が、スキャン手段により変化する状態を前記内部状態として用いる。
【発明の効果】
【００３９】
本発明により以下の効果がある。
外部認証機関が不要なので、スタンドアロン環境でも改竄検出を適用できる効果がある。
【００４０】
ディスク装置から管理情報部分のデータを読み出すだけで改竄検出できるので、読み出すデータ量が少なくなる分だけ改竄検出に要する時間を短縮できる効果がある。
【００４１】
改竄検出処理の中断と再開の機能により、既に改竄検出した領域に対して改竄検出を繰り返す必要がなくなるため、処理を高速化できる効果がある。
【００４２】
あるファイルが改竄されている場合、最新の状態から以前の状態へと遡って変更点を調べることで、短時間に改竄の有無を確認できる効果がある。
【００４３】
ファイルのコンテンツを記録したブロックの書き込み履歴を追跡することで、ファイルシステムを経由せずホストから直接ブロックデバイス用のコマンドを発行してディスク装置に書き込むことでファイルを改竄する場合であっても検出できる効果がある。
【００４４】
論理構造を持ってディスク装置に書き込むアプリケーションであれば、ファイルシステムに限らず任意のアプリケーションについて改竄検出を適用可能である効果がある。
【００４５】
ディレクトリ操作の履歴により操作を参照してからファイル操作の履歴を参照することにより、ファイルを置き換えた場合であってもファイルの更新内容を追跡できる効果がある。
【００４６】
データ改竄が発生した以前のディスク装置の状態でファイルシステムの整合性の取れた状態を特定することにより、必要最小限のデータを無効化するだけでデータ改竄が発生した以前のディスク装置の状態に戻すとともにファイルシステムの整合性を保持できる効果がある。
【発明を実施するための最良の形態】
【００４７】
発明の実施例について図面を参照して説明する。なお、同一の参照番号は同一の構成要素を示す。
【実施例１】
【００４８】
図１は、本発明の第一の実施例による書き込み履歴追跡方法のＰＡＤ図である。図1において、１００は本発明による改竄検出方法の第一の実施例による書き込み履歴追跡方法のＰＡＤ図、１１０は前回行なった解析結果が存在しているかを検査するステップ、１１１は前回の解析結果を読み込むステップ、１１２は前回の解析の続きから解析を再開するのに必要な解析復帰情報を読み込むステップ、１１３はディスク装置に記録したデータのデータ構造を読み込むステップ、１１４は書き込み履歴追跡用の解析プログラムを設定するステップ、１１５はディスク装置の先頭にシークするステップ、１１６は解析結果の保存場所を確保するステップ、１１７は解析結果を書き込むステップ、１１８は次回の解析の際に今回の解析の続きから再開するのに必要な解析復帰情報を書き込むステップ、１１９はエラーを記録するステップ、１２０は解析のためディスク装置に書き込み済みのブロックの物理ブロックアドレス（ＰＢＡ）の範囲でループするステップ、１２１は解析対象のブロックがディレクトリ操作であるかを検査するステップ、１２２は解析対象のブロックがファイル操作であるかを検査するステップ、１２３は解析対象のブロックがブロック操作であるかを検査するステップ、１３０はディレクトリ操作である場合のサブルーチン、１４０はファイル操作である場合のサブルーチン、１５０はブロック操作である場合のサブルーチン、である。
【００４９】
図２は、本発明の第一の実施例によるサブルーチン１３０のＰＡＤ図である。図２において、２００は本発明による改竄検出方法の第一の実施例によるサブルーチン１３０のＰＡＤ図、２０１は解析対象のブロックに記録されたディレクトリのメタ情報の更新前後の状態を比較するステップ、２０２は次のブロックにシークするステップ、２１０はファイル作成であるかを判定するステップ、２１１は解析対象のファイル名と同一のファイル名が過去に存在していないか検索するステップ、２１２は検索の結果から同一のファイル名が存在するかを判定するステップ、２１３は解析結果を保存するディレクトリ状態遷移リポジトリのファイルエントリの項目に追加するステップ、２１４はファイルエントリに逆向きの参照を追加するステップ、２１５はディレクトリ状態遷移リポジトリに新規ファイルエントリを作成するステップ、２２０はファイル削除であるかを判定するステップ、２２１はディレクトリ状態遷移リポジトリのファイルエントリにファイルを削除したことを追加するステップ、２３０はファイル名変更であるかを判定するステップ、２３１はディレクトリ状態遷移リポジトリのファイルエントリにファイル名を変更したことを追加するステップ、である。
【００５０】
図３は、本発明の第一の実施例によるサブルーチン１４０のＰＡＤ図である。図３において、３００は本発明による改竄検出方法の第一の実施例によるサブルーチン１４０のＰＡＤ図、３０１は解析対象のブロックに記録されたファイルのメタ情報の更新前後の状態を比較するステップ、３１０はファイルのメタ情報を更新しているかを検査するステップ、３１１はファイル状態遷移リポジトリのファイルエントリにメタ情報の更新を追加するステップ、３１２はメタ情報内の論理ブロックアドレス（ＬＢＡ）をファイルを特定できないＬＢＡ状態遷移リポジトリから検索するステップ、３１３はメタ情報内のＬＢＡがファイルを特定できないＬＢＡ状態遷移リポジトリに登録済みであるかを判定するステップ、３１４はファイルを特定できないＬＢＡ状態遷移リポジトリからファイル状態遷移リポジトリ中のファイルエントリ内のＬＢＡ状態遷移リポジトリにＬＢＡのエントリを移動するステップ、３１５はファイルの末尾を保存するブロックのＬＢＡがファイルを特定できないＬＢＡ状態遷移リポジトリからファイル状態遷移リポジトリ中のファイルエントリ内のＬＢＡ状態遷移リポジトリに移動した中に含まれているか検索するステップ、３１６はファイルの末尾を保存するブロックのＬＢＡがファイルを特定できないＬＢＡ状態遷移リポジトリからファイル状態遷移リポジトリ中のファイルエントリ内のＬＢＡ状態遷移リポジトリに移動した中に含まれているかを判定するステップ、３１７はファイルを構成する最後のブロックの管理領域に整合性フラグを追加するステップ、３１８はメタ情報とフラグ領域の情報との整合性を検査するステップ、である。
【００５１】
図４は、本発明の第一の実施例によるサブルーチン１５０のＰＡＤ図である。図４において、４００は本発明による改竄検出方法の第一の実施例によるサブルーチン１５０のＰＡＤ図、４０１は解析対象のブロックのＬＢＡがファイル状態遷移リポジトリ中のファイルエントリ内のＬＢＡ状態遷移リポジトリにないか検索するステップ、４１０は解析対象のブロックのＬＢＡがファイル状態遷移リポジトリ中のファイルエントリ内のＬＢＡ状態遷移リポジトリに登録済みであるかを判断するステップ、４１１はファイル状態遷移のエントリ中のＬＢＡ状態遷移リポジトリに検索対象のブロックの情報を追加するステップ、４１２はメタ情報とフラグ領域の情報との整合性を検査するステップ、４１３はファイル状態遷移リポジトリ中のＬＢＡ状態遷移リポジトリについて逆向きの参照を追加するステップ、４１４は解析対象のブロックがファイルのコンテンツを記録する最後のブロックかどうかを判断するステップ、４１５はファイルを構成する最後のブロックの管理領域に整合性フラグを追加するステップ、４１６はファイルを特定できないＬＢＡ状態遷移リポジトリに新規エントリを追加するステップ、である。
【００５２】
図５は、本発明の第一の実施例によるファイルの改竄検出方法のＰＡＤ図である。図５において、５００は本発明によるディスク装置の制御方法および改竄検出方法の第一の実施例によるファイルの改竄検出方法のＰＡＤ図、５０１はパス名を指定するステップ、５１０はディレクトリ状態遷移リポジトリのメタ情報の更新履歴を逆順でループするステップ、５１１は指定したパス名かどうかを判定するステップ、５１２はメタ情報の更新履歴から操作内容を読み出すステップ、５１３は読み出した操作内容をコンソールに出力するステップ、５２０は読み出したメタ情報の操作内容がある限りループするステップ、５２７は今回と前回とのファイルレベルでの差分を抽出するステップ、５２８は抽出したファイルの差分をコンソールに出力するステップ、５３１はメタ情報の更新履歴の整合性を読み出すステップ、５３２はメタ情報の更新履歴の整合性をコンソールに出力するステップ、５３３はファイルの更新の整合性を読み出すステップ、５３４はファイルの更新の整合性をコンソールに出力するステップ、である。
【００５３】
図６は、本発明の第一の実施例によるコンソールの表示部である。図６において、６００は本発明によるディスク装置の制御方法および改竄検出方法の第一の実施例によるコンソールの表示部、６０１はパス名の入力部、６０２はパス名に対応した解析結果表示の指示ボタン、６０３はメタ情報の差分表示部、６０４はファイルの差分表示部、６０５はデータ無効化の指示ボタン、６１０はディレクトリ操作表示部、６１１はディレクトリ操作の種別表示部、６１２はディレクトリ操作の整合性表示部、６１３はディレクトリ操作の選択、６２０はファイルのコンテンツを記録したブロックの表示部、６２１はファイルのコンテンツを記録したブロックのＬＢＡの表示部、６２２はファイルのコンテンツを記録したブロックの整合性表示部、である。
【００５４】
図７は、本発明の第一の実施例によるハードウェアのブロック図である。図７において、７００はホストのブロック図、７０１は主記憶、７０２は追記書き制御プログラム、７０３は改竄検出プログラム、７０４はプロセッサ、７０５はディスクインタフェース、７１０はディスク装置のブロック図、７１１はフラッシュロム、７１２は主記憶、７１３はキャッシュメモリ、７１４はマイクロプロセッサ（ＭＰＵ）、７１５はハードディスクコントローラ（ＨＤＣ）およびＳＣＳＩプロトコルコントローラ（ＳＰＣ）、７１６はサーボコントローラ、７１７はリードライトチャネル、である。
【００５５】
図８は、本発明の第一の実施例によるディスク装置内の記憶媒体の記録フォーマットである。図８において、８００は従来技術による記録フォーマット、８０１はユーザデータ、８０２は誤り訂正符号、８１０は本発明による記録フォーマット、８１１はフラグ領域、である。
【００５６】
図９は、本発明の第一の実施例によるフラグ領域８１１のデータ構造である。図９において、９０１はディスク装置７１０の総稼働時間、９０２はディスク装置７１０の総書き込みコマンド発行数、９０３は対象セクタへの書き込みコマンド発行数、９１０は総稼働時間９０１のみを含んだ場合のフラグ領域８１１のデータ構造、９２０は総書き込み回数９０２のみを含んだ場合のフラグ領域８１１のデータ構造、９３０は総稼働時間９０１と総書き込み回数９０２とを含んだ場合のフラグ領域８１１のデータ構造、９４０は総稼働時間９０１と総書き込み回数９０２と書き込み回数９０３とを含んだ場合のフラグ領域８１１のデータ構造、である。
【００５７】
図１０は、本発明の第一の実施例によるディレクトリ状態遷移リポジトリである。
図１８は、本発明の第一の実施例によるディレクトリのメタ情報を記録したブロックのデータ構造である。図１８において、１８０１はファイル名またはディレクトリ名、１８０２はファイルもしくはディレクトリのｉｎｏｄｅ番号、１８００はファイルが一つだけ存在する状態、１８１０はファイル名を変更した状態、１８２０はファイルを一つ追加した状態、１８３０はファイルを一つ削除した状態、である。
【００５８】
図１９は、本発明の第一の実施例によるファイルのメタ情報のデータ構造と記憶媒体のブロックである。図１９において、１９００は初期状態、１９０１はファイルの種別とアクセスモードの情報、１９０２はファイルの所有者情報、１９０３はファイルのタイムスタンプ、１９０４はファイルのサイズ、１９０５はファイルのコンテンツを記録したブロックのインデックス番号、１９０６はファイルを記録するのに用いた総ブロック数、１９０７はｉｎｏｄｅのデータ構造、１９１１はファイルのｉｎｏｄｅを記録したブロック、１９１２はファイルのコンテンツを記録したブロック、１９１３はファイルのコンテンツを更新したブロック、１９１０はブロック変更後の状態、である。
【００５９】
図２０は、本発明の第一の実施例によるディレクトリ状態遷移リポジトリのデータ構造である。図２０において、２０００はディレクトリ状態遷移リポジトリ、２００１は解析対象のファイルまたはディレクトリのメタ情報を記録したブロックのフラグ領域の値の欄、２００２は対象となるファイルの存在するディレクトリ名の欄、２００３は対象となるファイルのファイル名の欄、２００４はファイルタイプ欄、２００５は操作種別欄、２００６はファイルのｉｎｏｄｅ番号欄、２００７は備考欄、２０１１は新規にファイルをディレクトリに追加したエントリ、２０１２はファイル名を変更したエントリ、２０１３は過去に存在したファイルと同名のファイル名をディレクトリに追加したエントリ、２０１４は新規にディレクトリをディレクトリに追加したエントリ、２０１５はディレクトリからファイルを消去したエントリ、２０１６はディレクトリからファイルを消去したエントリ、２０１７は過去に存在したファイルと同名のファイルをディレクトリに追加したエントリ、である。
【００６０】
図２１は、本発明の第一の実施例によるファイル状態遷移リポジトリのデータ構造である。図２１において、２１００はファイル状態遷移リポジトリ、２１０１はファイルのメタ情報を記録したブロックのフラグ領域の値の欄、２１０２は操作種別欄、２１０３はファイルのタイムスタンプ欄、２１０４はファイルのコンテンツを記録するブロックのインデックス番号欄、２１０５は備考欄、２１１１は新規にファイルを作成したエントリ、２１１２はファイル名を変更したエントリ、２１１３は過去に存在したファイルと同名のファイルを作成したエントリ、２１１４はファイルにコンテンツを記録したブロックを追加したエントリ、２１１５はファイルの属性情報を変更したエントリ、２１１６はファイルのコンテンツを記録したブロックを追加したエントリ、２１１７はファイルを削除したエントリ、２１１８は他のファイルのファイル名を過去に存在したファイルのファイル名に変更したエントリ、２１１９はファイルのコンテンツを記録したブロックを変更したエントリ、である。
【００６１】
図２２は、本発明の第一の実施例によるファイル状態遷移リポジトリのファイルエントリ内のＬＢＡ状態遷移リポジトリのデータ構造である。図２２において、２２００はＬＢＡ状態遷移リポジトリ、２２０１はファイルのコンテンツを記録したブロックのインデックス番号欄、２２０２はブロックのインデックス番号に対応したセクタのＬＢＡの欄、２２０３はブロック番号２０４を記録するセクタのＬＢＡのエントリ、２２０４はブロック番号２５１を記録するセクタのＬＢＡのエントリ、２２０５はブロック番号５１６を記録するセクタのＬＢＡのエントリ、２２０６はブロック番号５３８を記録するセクタのＬＢＡのエントリ、２２０７はブロック番号６２１を記録するセクタのＬＢＡのエントリ、２２０８はブロック番号６２２を記録するセクタのＬＢＡのエントリ、２２０９はブロック番号６２３を記録するセクタのＬＢＡのエントリ、２２１０はブロック番号６２４を記録するセクタのＬＢＡのエントリ、２２１１はブロック番号６２５を記録するセクタのＬＢＡのエントリ、２２１２はブロック番号９６１を記録するセクタのＬＢＡのエントリ、である。
【００６２】
図２３は、本発明の第一の実施例によるコンソール表示部の表示例である。図２３において、２３００はコンソールの表示例、２３０１は整合性に問題があるエントリ、２３０２は選択したメタ情報のエントリ、２３０３は整合性に問題があるＬＢＡのエントリ、である。
【００６３】
本実施例では、ディスク装置システムに書かれたデータを、（１）ファイルやディレクトリの作成、消去、名称変更などによるファイルシステムの時間遷移、（２）ファイルのコンテンツを構成するディスク装置上のブロックへの書き込みの時間遷移、の二種類の方法で分析しデータ改竄の有無を検出する所に特徴がある。
【００６４】
図７により、本発明の第一の実施例の概要を説明する。
ホスト７００はプロセッサ７０４、主記憶７０１、ディスクインタフェース７０５からなる。プロセッサ７０４は主記憶７０１上の追記書き制御プログラム７０２によって、ユーザから書き込み要求を受けたデータを既存のデータを上書きしないようにディスクインタフェース７０５を通してディスク装置７１０に対して書き込みコマンドを発行する。このようにディスク装置に書き込んだデータに対してプロセッサ７０４は主記憶７０１上の改竄検出プログラム７０３により改竄の有無を検査する。改竄検出プログラム７０３は図１から図５のアルゴリズムによりデータの時間遷移を解析し、図６のコンソールにより改竄検出結果をユーザに出力する。
【００６５】
ディスク装置７１０の制御プログラムはフラッシュロム７１１に格納されている。ＭＰＵ７１４に電源を投入すると、ＭＰＵ７１４は制御プログラムをフラッシュロム７１１から読み出して主記憶７１２に展開する。この制御プログラムは図８に示すフラグ領域に書き込むデータの生成も行う。
【００６６】
ホストからのコマンドの受信や応答の送信はＨＤＣ／ＳＰＣ７１５が行う。ＳＰＣはＳＣＳＩプロトコルにおけるコマンドやデータの送受信を行う。ＳＰＣでの処理の終了後、ＭＰＵ７１４に処理が移る。
【００６７】
ＭＰＵ７１４では主記憶７１２中の制御プログラムに応じてＨＤＤの記憶媒体にアクセスするために必要な処理を行う。ホストから受信したＷＲＩＴＥデータやＨＤＤの記憶媒体から読み出したＲＥＡＤデータはキャッシュメモリ７１３に保存する。主記憶７１２には、図８のフラグ領域に書き込むデータの生成に必要な変数も保存する。
【００６８】
ＭＰＵ７１４での処理の終了後、ＨＤＣに処理が移る。ＨＤＣではＭＰＵ７１４で変換した物理ブロックアドレスに従いサーボコントローラ７１６に命令を送りＨＤＤのヘッドを制御する。ヘッドの制御後、ＨＤＣはリードライトチャネル７１７に命令を送り記憶媒体へのデータのＷＲＩＴＥや記憶媒体からのデータのＲＥＡＤを行う。ＷＲＩＴＥを行う場合には、キャッシュメモリ７１３に保存したＷＲＩＴＥデータの他に主記憶７１２に保存している変数から生成したフラグ領域用のデータも併せて記憶媒体中に記録する。
【００６９】
ホストからの指示ではなくディスク装置の内部状態に基づいた情報をフラグ領域に書き込むためには、ディスク装置内部に（１）記憶媒体上にフラグ領域を確保するフラグ領域生成手段、（２）内部状態からフラグ領域に書き込む情報を生成する内部状態情報生成手段、（３）内部状態情報生成手段が生成した情報を実際にフラグに書き込む内部状態情報書き込み手段が必要になる。
【００７０】
フラグ領域を図８のようにユーザデータの直後に設ける場合には記憶媒体上の記録フォーマットを変更する必要がある。記録フォーマットを管理するのはＨＤＣであるため、フラグ領域生成手段は７１５のＨＤＣ部分になる。
【００７１】
内部状態情報を生成するためには、ディスク装置内部の情報を収集し必要に応じて演算を行うプロセッサが必要である。また生成した内部状態情報を後から参照するためにはメモリに保存しておく必要がある。このため、内部情報生成手段はマイクロプロセッサ７１５および主記憶７１２になる。
【００７２】
内部状態情報をディスク装置の記憶媒体に書き込むには、書き込みヘッドを制御してデータバッファに書き込んだ内部状態情報を記録媒体に書き込む処理を実行する必要がある。データバッファであるキャッシュメモリ７１３に内部状態情報を書き込むのはマイクロプロセッサ７１５である。ヘッド制御を行うのはサーボコントローラ７１６、記憶媒体への書き込みを実行するのはリードライトチャネル７１７である。このため、内部状態情報書き込み手段はマイクロプロセッサ７１５、キャッシュメモリ７１３、サーボコントローラ７１６、リードライトチャネル７１７になる。
【００７３】
ブロックインタフェースにより書き込みと読み出しを行なうディスク装置では、ディスク装置に書かれたデータ構造を理解しているのは、そのデータを書き込んだホストのみである。このためディスク装置のデータ改竄の有無を検出するためには、ディスク装置に全ての書き込み履歴を保存した上でホストが書き込んだデータ構造を理解した解析プログラムを用いて改竄検出を行う必要がある。
【００７４】
ディスク装置に全ての書き込み履歴を保存するためには、既存のデータを上書きせずに未使用領域にデータを書き込む追記制御によりディスク装置中の記憶媒体にデータを書き込む必要がある。このような追記制御にはディスク装置側で行う場合とホスト側で行う場合との二通りがある。
【００７５】
ディスク装置側で行う場合には、ホストが既存のデータを上書きするように書き込みコマンドを発行してもディスク装置側で確実に書き込み履歴を保存できるメリットがある。しかしホストが追記書きを意識せずにディスク装置に書き込むと、ディスク装置側でのアドレス変換処理などのためアクセス性能が劣化するデメリットがある。
【００７６】
ホスト側で行う場合には、アクセス性能の劣化がないメリットがある。しかしディスク装置に対して上書きが可能なので容易にデータを改竄できるデメリットがある。
【００７７】
本発明の実施例では、ホストが追記制御をしてディスク装置書き込むが、ディスク装置側でもデータの上書きを検出可能にすることで、特開平１１−２６１５５０号公報のように外部認証者を使わずとも改竄検出が可能になる効果がある。さらにディスク装置に書き込むデータフォーマットをファイルシステムに限定しないので、特開平１０−２８３２６２号公報と異なり特殊なファイルシステム以外の任意のアプリケーションについても改竄検出が可能になる効果がある。また、本発明の方式はホストが追記制御をしてディスク装置に書き込む場合の他に、ディスク装置が追記制御をして書き込む場合にも容易に適用可能である。
【００７８】
また本実施例ではファイルシステムにおける改竄検出方法について説明するが、論理構造を持って記録したデータであればデータベースなどファイルシステム以外の任意のデータについても適用できる。
【００７９】
図１から図４を用いて、ファイルシステムの改竄検出に必要となる書き込み履歴の追跡方法について説明する。追記制御によりディスク装置に書き込んだデータを書き込んだ順番に従って書き込み履歴の追跡と改竄検出を行なう場合、解析を完了した論理ブロックアドレス（ＬＢＡ）の値と解析結果を保存しておくと、前回行なった解析の続きから解析を再開できる。またこのような解析の中断と再開を実現すると、新規にディスク装置に記録されたコンテンツについてのみ解析を行なえば良くなるため、解析時間を短縮できる効果がある。
【００８０】
このような解析の中断と再開を行なうため、ステップ１１０ではディスク装置７１０の記憶媒体上に確保した改竄検出専用の作業領域中に前回の解析結果が保存されていないか検査する。保存されている場合には１１１に進み、保存されていない場合には１１３に進む。ステップ１１１では前回の解析結果を読み込み、ステップ１１２では解析を再開するのに必要な解析復帰情報を読み込み、前回の解析の続きのＬＢＡにヘッドをシークする。ここでは解析復帰情報として、少なくとも解析プログラムの設定と解析を完了したＬＢＡの値を含む。
【００８１】
解析結果が保存されていない場合、一度も解析プログラムを実行していないことを意味する。そこでステップ１１３、１１４、１１５により解析プログラムの設定を行なう。解析プログラムはデータフォーマット即ちディスク装置７１０に保存しているファイルシステムごとに必要になる。各ファイルシステムごとに個別に解析プログラムを用意するのは非常に工数がかかるため、解析プログラムを、（１）ファイルシステムのデータ構造の定義部分、（２）データ構造の定義に基づいた検索部分、の二つに分け、定義部分をファイルシステムごとに用意し検索部分を共通化する。ステップ１１３ではディスク装置７１０上の解析対象のボリュームに記録したファイルシステムのデータ構造を主記憶７０１上の解析プログラム７０３用のパラメータ領域に読み込ませる。ステップ１１４では解析プログラムに対してステップ１１３で読み込んだデータ構造を入力する。そしてステップ１１５では解析対象のボリュームの先頭にシークする。
【００８２】
ステップ１２０のループでは、ディスク装置に書き込み済みのブロックのＬＢＡの範囲でループし、解析対象のブロックがディレクトリ操作、ファイル操作、ブロック操作のいずれであるかに応じた解析を行なう。ファイルシステムを経由したブロックへの書き込みは、（１）ファイルやディレクトリの作成や消去に代表されるディレクトリ操作、（２）ファイルのメタ情報の更新であるファイル操作、（３）それら以外のブロックへの書き込みであるブロック操作、の三つに分類できる。あるブロックへの書き込みがこれら三つのどれに相当するかは、ステップ１１３で読み込んだデータ構造により一意に特定できる。ステップ１２１では解析対象のブロックへの書き込みがディレクトリ操作かどうかを検査する。ディレクトリ操作である場合にはステップ１３０のサブルーチンへと進む。ステップ１２２では解析対象のブロックへの書き込みがファイル操作かどうかを検査する。ファイル操作である場合にはステップ１４０のサブルーチンへと進む。ステップ１２３では解析対象のブロックがブロック操作かどうかを検査する。ブロック操作である場合にはステップ１５０のサブルーチンへと進む。最後にこれらのどれにも当てはまらない場合には、何らかのエラーが発生したことを意味するので、ステップ１１９に進みエラーを記録する。ステップ１２０のループにより、書き込み済みの全てのＬＢＡについて解析が終了した後、ステップ１１６、１１７、１１８に進み解析結果の保存と、解析の再開に必要な情報を保存する。
【００８３】
ステップ１１６でディスク装置７１０の記憶媒体上に確保した改竄検出専用の作業領域に解析結果の保存場所を確保し、ステップ１１７に進む。ステップ１１７ではステップ１２０のループにより解析したボリュームの解析結果をステップ１１６で確保した作業領域内の保存場所に保存し、ステップ１１８に進む。ステップ１１８では次回に解析を行なう際に今回解析が終了したＬＢＡから解析を再開するのに必要な情報をステップ１１６で確保した管理領域内の保存場所に保存する。ここで保存する解析の再開に必要な情報として、少なくともステップ１１４で解析プログラムに設定した内容と、ステップ１２０のループで解析を完了したＬＢＡの値とを保存する。
【００８４】
ステップ１３０のサブルーチンではファイルシステムへのファイルもしくはディレクトリの作成、削除、名前の変更など、ディレクトリ構造の変更について検査する。ディレクトリ構造にどのような変化が生じたかを調べるには、ディレクトリエントリの管理情報であるメタ情報を記録するブロックに対してホストがどのような更新を指示したかを調べる必要がある。追記制御によって書き込んだディスク装置では変更内容が全て記録されるため、変更前後の内容を比較することによりどのような操作を行ったかを検出できる。そして変更を検出すると、ディレクトリの状態変化を管理するディレクトリ遷移リポジトリに変更内容を記録する。
【００８５】
ステップ１４０とステップ１５０ではファイルのコンテンツへの変更について検査する。コンテンツを記録したブロックの変遷をファイル状態遷移リポジトリに記録する。
【００８６】
テキストエディタと RCS (Revision Control System) とによりファイルを操作するプログラム開発の場合を例にして、ディレクトリ状態遷移リポジトリについて説明する。図１０にディレクトリ状態遷移リポジトリの時間発展を示す。ここで図の上から下方向が時間の流れを示し、実線の矢印が改竄検出アルゴリズムから検出可能なディレクトリ操作のイベント、破線の矢印が使用するアプリケーションから判断可能なディレクトリ操作のイベントである。
【００８７】
テキストエディタでファイル foo.c を初めて保存した段階でfoo.c のエントリに CREATE のイベントが登録される。次に foo.c を更新して保存する場合、Emacs などのテキストエディタでは古いファイルを foo.c~ にファイル名を変更し新規にファイルを保存する。このため、foo.c~ のエントリが新規に作られ、foo.c から RENAME されたイベントが記録される。次に foo.c を更新する際には、既にあるfoo.c~ を一旦削除した後に foo.c を foo.c~ に名前を変更し、foo.c を保存する。このためリポジトリには、foo.c~ の REMOVE のイベントが記録され、foo.c の RENAME により foo.c~ の CREATE のイベントが記録される。
【００８８】
プログラム開発では RCS によりファイルのバージョン管理を行う。RCS ではチェックインの操作によりファイルを履歴を記録した RCS ファイルに格納しオリジナルのファイルを削除する。引き続きファイルを編集する場合には、RCS ファイルからチェックアウトの操作によりファイルを取り出す。チェックインの操作によりリポジトリでは foo.c,v のエントリに CREATE のイベントが登録され、foo.c のエントリにREMOVE のイベントが記録される。チェックアウトの操作では、ファイルを取り出したユーザ名、取り出した時刻などの情報を RCS ファイルに記録する。ファイルの書き込み中に事故でファイルを壊さないように、オリジナルのファイルを別名で保存しておき新規ファイルに書き込み、正常に書き込めたことを確認した後に保存しておいたファイルを消去する。このためリポジトリには、foo.c,v の RENAME により foo.c,v~ の CREATE のイベントが記録され、foo.c,v の CREATE のイベントが記録された後に foo.c,v~ の REMOVE のイベントが記録され、foo.c の CREATE のイベントが記録される。
【００８９】
図１８と図１９とにより、ファイルシステムのディスク装置の記憶媒体におけるデータフォーマットを説明する。図１８はディレクトリのメタ情報を記録したディスク装置の記憶媒体のブロックのデータフォーマットである。このデータフォーマットは、ディレクトリ上のファイルやディレクトリの名前１８０１と、これらのファイルやディレクトリに対応したメタ情報を保存するｉｎｏｄｅ番号１８０２とのペアを一つのエントリにした構造になっている。
【００９０】
１８００はディレクトリ上にファイル foo.c が一つだけ存在する初期状態である。１８１０は foo.c を foo.c~ へとファイル名を変更した状態である。ファイル名を変更してもファイルの実態が変わらないので、ファイルのメタ情報であるｉｎｏｄｅへのインデックスであるｉｎｏｄｅ番号は変わらない。１８２０はディレクトリ上にファイル foo.c を追加した状態である。ファイル名は１８００と同じであるが、ファイルの実態が異なるので１８００の foo.c とは異なる新しいｉｎｏｄｅ番号になる。１８３０はディレクトリから foo.c~ を削除した状態である。
【００９１】
図１９はファイルのメタ情報のデータ構造と記憶媒体のブロックである。１９１１はファイルのｉｎｏｄｅを記録したブロックである。ブロックのユーザデータ８０１にｉｎｏｄｅが格納されている。ｉｎｏｄｅのデータ構造を１９０７に示す。１９００と１９１０とはそれぞれファイルのコンテンツの更新前後の状態を示す。１９１１から１９１３のブロックにはそれぞれフラグ領域８１１がついている。
【００９２】
１９０１はファイル、ディレクトリ、シンボリックリンクなどのファイル種別と読み出し、書き込み、実行の許可についてのアクセスモードの情報である。１９０２はファイル所有者の情報である。１９０３はタイムスタンプである。タイムスタンプにはファイルの最新の読み出し時刻、書き込み時刻、ｉｎｏｄｅの最新の更新時刻の三種類が記録されている。１９０４はファイルのサイズである。１９０５はファイルのコンテンツを記録したブロックのインデックス番号である。インデックス番号によりファイルのコンテンツを記録したブロック１９１２を特定できる。１９０６はファイルのコンテンツを記録するのに用いた総ブロックである。
【００９３】
ファイルのコンテンツを更新するには、１９１３のようにコンテンツを記録したブロックを更新する。ブロックのインデックス番号が変わったり、コンテンツを記録するブロックを追加した場合には、１９０５のブロックのインデックス番号を更新する。ファイルを更新するとタイムスタンプ１９０３のファイルの更新時刻を更新する。またｉｎｏｄｅを更新した時刻も同様に更新する。
【００９４】
なお、ｉｎｏｄｅ番号に対応した情報がどのブロックに格納されるかは、ファイルシステムの構造により定められている。また同様にブロックのインデックス番号がＨＤＤのどのセクタに対応するかについてもファイルシステムの構造により定められている。
【００９５】
図２０はディレクトリ状態遷移リポジトリのデータ構造である。図２０では２００１のフラグ領域の値によりソートした結果を示している。図１８と図１９のメタ情報を記録したブロックの解析から、解析対象のディレクトリ２００２に、どのようなファイル名２００３とファイルやディレクトリの種別２００４の対象について、どのような操作２００５を行ったかを一つのエントリとして記録する。各エントリにはファイルまたはディレクトリのメタ情報（ｉｎｏｄｅ）を記録したブロックのフラグ領域８１１の値２００１と、ファイル名２００３のファイルまたはディレクトリのｉｎｏｄｅ番号２００６とを記録し、さらに解析時に分かった項目を備考２００７として記録している。ディレクトリ２００２とファイル名２００３とにより、ファイルシステム内の任意のファイルまたはディレクトリを特定できる。
【００９６】
例えば２０１１はこれまでディレクトリ状態遷移リポジトリに存在しない新規ファイルなので、操作２００５に CREATE、備考２００７に new file と記述する。同様に２０１４では新規ディレクトリなので CREATE、new dir と記述する。２０１２のエントリはファイル名を変更する場合である。ファイル名を変更する場合にはｉｎｏｄｅ番号が変わらないのでどのファイル名からどのファイル名に変更したかを検出できる。２０１２では foo.c から foo.c~ に変更しているので、操作２００５に RENAME、備考２００７に SRC foo.c と記述する。２０１５はファイルを削除する場合であり、操作２００５に REMOVE を記述する。
【００９７】
図２１はファイル状態遷移リポジトリのデータ構造である。図２０の /src/foo.c についてのファイルの状態遷移を示す。２１１１のエントリは２０１１のエントリに対応し、 /src/foo.c を新規に作成したエントリである。フラグ２１０１はファイルのメタ情報（ｉｎｏｄｅ）を記録したブロックのフラグ領域８１１の値である。２１０３はファイルのメタ情報のタイムスタンプ１９０３の値である。図２１ではスペース関係でファイルの更新時刻のみ示しているが、本来は１９０３の全てのタイムスタンプ情報を含んでいる。２１０４はファイルのコンテンツを記録したブロックのインデックス番号１９０５の値である。備考２１０５には新規作成であるため new file と記述してある。
【００９８】
２１１２のエントリは２１０２のエントリに対応したエントリであり、/src/foo.c を /src/foo.c~ に変更した状態を示している。操作種別２１０２は RENAME になり、備考２１０５には変更後のファイル名を DST foo.c~ と記述する。２１１３のエントリは２０１３のエントリに対応したエントリであり、/src/foo.c というファイル名で新規にファイルを作成した状態を示す。２１１４のエントリはファイルのコンテンツを記録したブロックを追加した状態を示す。操作２１０２、タイムスタンプ２１０３、ブロックのインデックス番号２１０４にはそれぞれ、UPDATE、ファイルの更新時刻、追加したブロックのインデックス番号を記述する。備考２１０５にはブロックの追加を表す ADD BLK を記述する。２１１６のエントリはファイルの属性情報、例えばアクセスモード、を変更した状態を示す。操作２１０２、備考２１０５にはそれぞれ UPDATE、MOD ATTR を記述する。タイムスタンプ２１０３にはファイルの更新時刻部分しか表示していないため、エントリ２１１４とエントリ２１１５とで時刻が変わっていないが、エントリ２１１５ではｉｎｏｄｅの更新時刻が更新されている。エントリ２１１７はファイルを削除した状態を示す。操作２１０２に REMOVE を記述する。エントリ２１１８は/src/baz.c を /src/foo.c に変更した状態を示す。操作２１０２と備考２１０５にそれぞれ RENAME、SRC baz.c を記述する。エントリ２１１９はファイルのコンテンツを記録したブロックを置き換えた状態を示す。操作２１０２、備考２１０５にそれぞれ UPDATE、MOD BLK を記述する。ブロック２１０４には置き換わった後のブロックのインデックス番号を記述する。
【００９９】
エントリ２１１７と２１１８とから、タイムスタンプ２１０３が変わらずにファイルが置き換わっているので、ファイルの置き換えによる改竄が行われた可能性があるのが分かる。同様にエントリ２１１７とエントリ２１１８とから、ファイルのコンテンツを記録したブロックの置き換えによる改竄が行われた可能性があるのが分かる。
【０１００】
図２２はファイル状態遷移リポジトリ内のＬＢＡ状態遷移リポジトリのデータ構造である。図２２は図２１のファイル状態遷移リポジトリと対応している。２２０１はブロックのインデックス番号であり、２２０２はインデックス番号に対応したＨＤＤのセクタのＬＢＡである。一つのブロックが四つのセクタに対応している。２２０２にはＬＢＡの他に各ＬＢＡのフラグ領域８１１の値も記述している。
【０１０１】
図２１がファイルのメタ情報レベルの解析結果であるのに対して図２２はＨＤＤのＬＢＡレベルの解析結果である。このため、ファイルシステムを経由せず直接ＨＤＤのセクタを書き換えた場合であっても改竄を検出できる。例えばエントリ２２１２見ると、ブロックを構成する四つのセクタの一つであるＬＢＡ３０７８のフラグ領域８１１の値が残りの三つのセクタの場合と連続性がないため、ＬＢＡ３０７８に改竄が行われた可能性があるのが分かる。
【０１０２】
図２１ではエントリ２２１２でブロック番号９６１の改竄後の状態しか表示していないが、改竄検出を定期的に実行し、図２０のディレクトリ状態遷移リポジトリ、図２１のファイル状態遷移リポジトリ、図２２のファイル内のＬＢＡ状態遷移リポジトリを保存しておくことで、ＬＢＡの改竄前後の両方の状態をリポジトリに記録することが可能になる。
【０１０３】
ステップ２０１ではメタ情報の変更前後の状態を比較する。ディレクトリのメタ情報はディレクトリの識別子により識別できる。そこで解析対象と同一の識別子を持ち前回記録したメタ情報を検索し比較を実行する。このような比較は追記書き制御によりディスク装置にデータを書き込んでいることにより可能になる。この比較により変更点を抽出した後、ステップ２１０に進む。ステップ２１０では、ステップ２０１で抽出した結果を判定し、ファイルが新規作成されている場合にはステップ２１１に進む。ステップ２１０の終了後ステップ２２０に進む。
【０１０４】
前述したように、アプリケーションでデータをファイルに保存する場合には、既存のファイルの名前を変更してバックアップとして残し、新規にファイルを作成する場合がある。ファイルの改竄検出のためには、同一ファイル名を持つファイルについてファイルの更新を追跡する必要がある。ステップ２１１では、このようなデータ更新方法を追跡するために、ディレクトリ状態遷移リポジトリのファイルエントリから過去に同一のファイル名が存在したかどうか検索する。検索終了後ステップ２１２に進む。ステップ２１２ではステップ２１１の検索結果を判定し、同一ファイル名が存在した場合にはステップ２１３に進み、存在しなかった場合にはステップ２１５に進む。ステップ２１３ではディレクトリ状態遷移リポジトリの既存のファイル遷移のエントリに新規ファイルを作成した状態を追加する。例えばファイルＡのファイル遷移エントリが、「新規作成→Ａ．ＢＡＣＫＵＰにファイル名変更」となっている場合、このエントリに新規作成の状態を追加し、「新規作成→Ａ．ＢＡＣＫＵＰにファイル名変更→新規作成」とする。ディスク装置に書き込まれた順番でブロックの解析を行なうとディレクトリ状態遷移リポジトリのファイルエントリにおいてファイルの更新順番でしか辿れなくなる。しかし、あるファイルについて改竄の有無を調べたい場合には、最新の状態から以前の状態に辿れた方が便利である。そこで、ステップ２１４では、ステップ２１３で登録した状態から以前の状態への逆向きの参照を追加する。ステップ２１５では、ディレクトリ状態遷移リポジトリに新規ファイル用のファイルエントリを作成し、ファイルの新規作成の状態を追加する。
【０１０５】
ステップ２２０では、ステップ２０１で比較した結果を判定し、ファイルが削除されている場合にはステップ２２１に進む。ステップ２２０の終了後ステップ２３０に進む。ステップ２２１では、ファイル遷移にファイルが消去された状態を追加し、ステップ２１４に進む。ステップ２１４ではファイル遷移のファイルが消去された状態から以前の状態への逆向きの参照を追加する。
【０１０６】
ステップ２３０では、ステップ２０１で比較した結果を判定し、ファイル名が変更されている場合にはステップ２１１に進む。ステップ２１１では、ディレクトリ状態遷移リポジトリのファイルエントリから過去に同一のファイル名が存在したかどうかを検索する。検索終了後ステップ２１２に進む。ステップ２１２ではステップ２１１の検索結果を判定し、同一ファイル名が存在した場合にはステップ２３１に進み、存在しなかった場合にはステップ２１５に進む。ステップ２３１では既存のファイル遷移のエントリに他のファイルからファイル名を変更した状態を追加する。ステップ２１４ではステップ２３１で登録した状態から以前の状態に対する逆向きの参照を追加する。ステップ２１５では、ディレクトリ状態遷移リポジトリに新規ファイル用のファイルエントリを作成し、他のファイルからファイル名を変更した状態を追加する。ステップ２３０の終了後ステップ２０２に進む。ステップ２０２では次のブロックにシークする。
【０１０７】
ステップ１４０のサブルーチンではファイルの修正時刻やファイルのコンテンツを保存するブロックのＬＢＡの値などのファイルの管理情報であるメタ情報の変更について検査する。ステップ１３０のサブルーチンの場合と同様に、メタ情報を記録するブロックの更新前後の内容を比較してどのような更新がされたかを特定する。ステップ３０１ではファイルのメタ情報の更新前後の状態を比較する。ファイルのメタ情報はファイルの識別子により区別できる。そこで解析対象と同一の識別子を持ち前回記録したメタ情報を検索し比較を実行する。このような比較は追記書き制御によりディスク装置にデータを書き込んでいることにより可能になる。ステップ３０１の終了後ステップ３１０に進む。ステップ３１０では、ステップ３０１で抽出した変更点を判定し、ファイルのメタ情報を更新している場合にはステップ３１１に進む。ステップ３１１では、メタ情報を構成する修正時刻やファイルのコンテンツを保存するブロックのＬＢＡの値などの情報の変更点を、ファイル状態遷移リポジトリのファイルエントリの新たな状態として追加する。
【０１０８】
ファイルのメタ情報はファイルへのアクセスのたびに更新される情報なので、ファイルシステムの性能向上のために通常はホストのメモリ上にキャッシュしており、ファイルのコンテンツをブロックに保存した段階ではキャッシュ上のメタ情報がブロックに反映されていない可能性がある。このため、追記書き制御によりディスク装置に書き込まれた順番にブロックの内容を解析すると、どのファイルのコンテンツを保存したブロックか判断できない場合がある。本実施例では、メタ情報からＬＢＡがどのファイルのコンテンツを記録しているかを特定できるかどうかでＬＢＡを管理するリポジトリを二種類用意する。
【０１０９】
メタ情報からどのファイルのコンテンツかを特定できるＬＢＡの場合には、ファイル状態遷移リポジトリ中のＬＢＡ状態遷移リポジトリで管理する。コンテンツへの更新が発生するごとに使用するＬＢＡがどのように変化するかをファイル状態遷移リポジトリ中のＬＢＡ状態遷移リポジトリに登録する。特定できないＬＢＡの場合には、ファイルを特定できないＬＢＡのみを管理するＬＢＡ状態遷移リポジトリにＬＢＡを登録しておき、後述するようにどのファイルのコンテンツを記録したＬＢＡかを特定できた段階で、ファイル状態遷移リポジトリ中のＬＢＡ状態遷移リポジトリにＬＢＡのエントリを移動する。
【０１１０】
ステップ３１１の終了後ステップ３１２ではメタ情報内のＬＢＡがファイルを特定できないＬＢＡ状態遷移リポジトリに記録したＬＢＡの中に存在しないか検索する。ステップ３１２の終了後ステップ３１３に進み、そのようなＬＢＡを発見できたか判断する。発見した場合ステップ３１４に進む。ステップ３１４では発見したＬＢＡのエントリをファイルを特定できないＬＢＡ状態遷移リポジトリからファイル遷移リポジトリ中のＬＢＡ状態遷移リポジトリに移動する。ステップ３１４の終了後ステップ３１５に進む。ステップ３１５では移動したＬＢＡの中にファイルの終端を記録したＬＢＡが存在しないか検索する。ステップ３１５の終了後ステップ３１６に進む。ステップ３１６では検索の結果ファイルの終端を記録したＬＢＡが存在したかを判断し、存在していた場合にはステップ３１７に進む。ステップ３１７では、ファイルの終端のブロックの管理領域にファイルを構成する最後のブロックであることを示す整合性フラグを追加する。このようにファイル毎にどのブロックがファイルの終端であるかを識別することにより、ディスク装置において、整合性を保った状態でファイルへの書き込みを無効化できる。
【０１１１】
ステップ３１３の終了後ステップ３１８に進む。ステップ３１８では、ステップ３１１で追加したメタ情報とブロックのフラグ領域８１１に記録された情報とを使い、メタ情報の解析から明らかになった更新順序とブロックの実際の更新順序とを比較して整合性がとれているかを検証する。検証結果はファイル状態遷移リポジトリに記録する。
【０１１２】
本発明によるディスク装置では、ブロックのフラグ領域８１１に保持する情報をホストは参照できるが更新できない。保持する情報の例を図９に示す。９１０の場合には、フラグ領域にディスク装置がブロックに書き込んだ時の時刻を４バイトの整数として書き込む。ここでの時刻はグリニッジ標準時など現実世界と同期した時刻の他に初めてパワーオンをしてからの累積稼働時刻などでも良い。９２０の場合には、フラグ領域にブロックに書き込んだ時の総書き込みコマンド発行数を４バイトの整数として書き込む。この値はディスク装置が初めてパワーオンしてからの累積して計算した総書き込みコマンド発行数である。一つのブロックのユーザデータ８０１のサイズが５１２バイトであれば、４バイトの整数により最大２Ｔバイトの書き込みまで計算できる。９３０の場合には、時刻と総書き込みコマンド発行数の両方を書き込む。９４０の場合には、９３０に加えて該当するブロックへの書き込みコマンド発行数を２バイトの整数で書き込む。
【０１１３】
これらフラグ領域８１１に記録された情報はホストからは更新できず参照しかできないため、メタ情報とフラグ領域の情報との整合性を検査することで、不正にデータを改竄したかどうかを検証できる。
【０１１４】
ステップ３１８の終了後ステップ２１４に進む。ステップ２１４では、ステップ３１１で登録した状態から以前の状態への逆向きの参照を追加する。ステップ３１０の終了後ステップ２０２に進む。ステップ２０２では次のブロックにシークする。
【０１１５】
ステップ１５０のサブルーチンでは個々のブロックへの変更について検査する。ホストからファイルシステムを使ってのディスク装置への書き込みでは、ファイルのコンテンツを保存するＬＢＡの値をファイルのメタ情報の中に記録する。このためファイルのメタ情報を参照すると、どのＬＢＡがどのファイルに対応するかを特定できる。ファイルにアクセスする毎にメタ情報の中のアクセス時間属性が更新するが、この更新を毎回ディスク装置に反映するとファイルシステムの性能が大幅に低下するため、ホスト側でメタ情報の更新をある程度キャッシュしてからディスク装置に保存する。このため、追記書き制御によりディスク装置に書き込まれた順番にブロックの解析をして行くと、解析対象のブロックがどのファイルのコンテンツを記録しているか判定できない場合がある。そこで本実施例では、解析対象のブロックをホストが書き込む際に指定したＬＢＡがどのファイルのコンテンツを記録しているか特定できる場合には該当するファイルのファイル状態遷移リポジトリ内のＬＢＡ遷移リポジトリにブロックの書き込み状態を追加し、そうでない場合にはファイル状態遷移リポジトリと独立に作られたファイルを特定できないＬＢＡ用のＬＢＡ状態遷移リポジトリにエントリを作成し、ブロックの書き込み状態を追加する。
【０１１６】
ステップ４０１では、ファイル状態遷移リポジトリに登録された各ファイルのエントリ中のＬＢＡ状態遷移リポジトリから解析対象のブロックが登録されているかを検索するステップである。ステップ４０１の終了後ステップ４１０に進む。ステップ４１０では、ステップ４０１の検索結果を判定し、登録済みの場合にはステップ４１１に進み、登録済みでない場合にはステップ４１６に進む。
【０１１７】
ステップ４１１では、ファイル状態遷移リポジトリのファイルエントリ中のＬＢＡ状態遷移リポジトリの解析対象ブロック用のＬＢＡエントリに、解析対象ブロックのフラグ領域８１１から読み出した情報を追加し、ステップ４１２に進む。
【０１１８】
ステップ４１２ではメタ情報から特定したファイルの更新順序とステップ４１１で登録したフラグ領域８１１から読み出した情報との整合性を検査し、ＬＢＡ状態遷移リポジトリに検査結果を登録する。例えばファイルＡとファイルＢとの更新の場合に、メタ情報に書かれた情報ではファイルＡ、ファイルＢの順番にディスク装置に書かれたことになっていても、フラグ領域８１１の情報からはファイルＢ、ファイルＡの順番に更新されていることが分かると、ファイルＡは不正な手段で改竄されていることが分かる。ステップ４１２の終了後ステップ４１３に進む。
【０１１９】
ステップ４１３では、ステップ４１１で追加した状態から以前の状態への逆向き参照を追加し、ステップ４１４に進む。
【０１２０】
ステップ４１４では解析対象のブロックがファイルの終端を記録しているかどうか判断し、記録している場合にはステップ４１５に進む。ステップ４１５では、解析対象のブロックの管理領域にファイルを構成する最後のブロックであることを示す整合性フラグを追加する。このようにファイル毎にどのブロックがファイルの終端であるかを識別することにより、ディスク装置において、整合性を保った状態でファイルへの書き込みを無効化できる。
【０１２１】
ステップ４１６では、エントリをファイルを特定できないＬＢＡ状態遷移遷移リポジトリに解析対象ブロックの新規エントリを追加し、解析対象ブロックのフラグ領域８１１の情報を読み出して登録する。
【０１２２】
このように、メタ情報に登録されていないＬＢＡについてファイルを特定できないＬＢＡ状態遷移リポジトリに収集することにより、メタ情報の記録に先立ってファイルのコンテンツを保存する場合でも追跡可能になる。
【０１２３】
ステップ４１０の終了後ステップ２０２に進む。ステップ２０２では次のブロックにシークする。
【０１２４】
次に図５と図６を用いて特定のファイルの改竄検出方法について説明する。図１から図４により説明した書き込み履歴の追跡方法でディレクトリ操作とファイル操作に分けて追記書き制御によりディスク装置に書き込んだデータを解析したのに対応し、ファイルの改竄検出においてもディレクトリ操作とファイル操作の二つのレベルで改竄検出を行なう。つまり、ディレクトリ操作レベルの改竄検出ではファイルの置き換えのチェックを行ない、ファイル操作レベルの改竄検出ではファイルのコンテンツを記録したデータブロックの書き換えのチェックを行なう。改竄の有無を判断するのに必要な全てのデータを図１から図４の書き込み履歴追跡方法で収集済みであるため、図５と図６では改竄検出の対象となるファイルの指定と、履歴追跡の解析結果からの改竄内容の読み出しとコンソールへの出力を行なう。
【０１２５】
ユーザがコンソールのパス名入力部６０１に改竄検出の対象となるパス名を入力して解析結果表示の指示ボタン６０２を押すと、改竄検出方法のステップ５０１において、ユーザの指定したパス名が入力される。ステップ５０１の終了後ステップ５１０に進む。
【０１２６】
ステップ５１０では書き込み履歴追跡方法１００の解析結果をファイルの最新の状態から以前の状態へと逆順でループし、ステップ５１１を実行する。あるファイルが改竄されている場合、最新の状態から以前の状態へと遡って変更点を調べることで、短時間に改竄の有無を確認できる効果がある。ステップ５１１では、現在処理中のディレクトリ操作の履歴がステップ５０１で指定したパス名と一致するかどうかを判定する。一致する場合にはステップ５１２に進む。ステップ５１２では、サブルーチン１３０で解析したディレクトリ状態遷移リポジトリの指定したファイルのエントリからファイルへの操作内容を読み出す。ここで読み出す操作内容は、ファイル作成、ファイル削除、ファイル名変更などである。ステップ５１２の終了後ステップ５１３に進む。ステップ５１３では読み出した操作内容をコンソールに出力する。ステップ５１３の終了後ステップ５３１に進む。ステップ５３１では同じくディレクトリ状態遷移リポジトリからメタ情報への更新の整合性の情報を読み出し、ステップ５３２に進む。ステップ５３２では読み出した整合性の情報をコンソールに出力する。
【０１２７】
ステップ５１０のループの終了後ステップ５２０のループに進む。
ステップ５２０のループでは、ステップ５１０のループで読み出した操作内容ごとにファイルのコンテンツを読み出す。ステップ５２０のループは、ステップ５１０で読み出した操作内容がある限り、ステップ５２７、ステップ５２８、ステップ５３３、ステップ５３４を実行する。
【０１２８】
古いファイルを削除して新しいファイルに置き換えた場合でも、追記書き込み制御プログラム７０２により新旧の両ファイルのコンテンツを追跡できる。そこでステップ５２７では、この機能を使い新旧のファイルをファイルレベルで差分を抽出する。ステップ５２７の終了後ステップ５２８に進む。ステップ５２８では、ステップ５２７で抽出した差分をコンソールに出力する。ステップ５２８の終了後ステップ５３３に進む。ステップ５３３では、ファイル状態遷移リポジトリ内のＬＢＡ状態遷移リポジトリからファイルのコンテンツを記録したブロックの整合性の情報を読み出し、ステップ５３４に進む。ステップ５３４では読み出した整合性の情報をコンソールに出力する。
【０１２９】
本実施例ではホストが追記制御プログラム７０２によりディスク装置７１０上に全ての書き込み履歴を保存する。ホスト上のユーザがホストからの正常なアクセスパスを用いてディスク装置７１０上のデータを改竄すると改竄履歴が全てディスク装置上に残される。この場合にはメタ情報の更新履歴とコンテンツの更新履歴とから改竄内容を含めて改竄を検出できる。正常なアクセスパスを用いずにディスク装置７１０上のデータを改竄するとフラグ領域８１１の情報とメタ情報やコンテンツとの整合性の検査により改竄を検出できる。例えば整合性の検査は以下のように行う。ファイルＡとファイルＢがディスク装置７１０に記録され、メタ情報の解析結果からはファイルＡがファイルＢよりも一月前に書かれていなければならない場合に実際にはファイルＡがファイルＢよりも後に書かれているのであれば、ファイルＡは改竄されていると分かる。仮にディスク装置７１０のデータを丸ごと全て複製し複製の途中でデータを変更する場合でも、フラグ領域８１１の情報から短時間にバースト的に書き込んでいることが分かるためディスク装置７１０の複製を検出できる。
【０１３０】
メタ情報やコンテンツの整合性と差分の情報を表示するため、コンソールにはメタ情報とコンテンツのそれぞれについて整合性表示部と差分表示部分がある。  メタ情報の差分表示部６０３はステップ５１３のコンソールへの出力結果を表示する。どのディレクトリ操作の差分を表示するかをディレクトリ操作表示部６１０で指示する。ディレクトリ操作表示部６１０にはディレクトリ操作の種別表示部６１１、整合性情報表示部６１２とがある。ユーザは６１１のディレクトリ操作の内容を見て６１３でディレクトリ操作を一つ選択すると、その操作と一つ前との操作のメタ情報の差分を６０３に表示する。また、この選択に応じてディレクトリ操作の前後でのファイルレベルでの差分を６０５に表示する。また、６１３でディレクトリ操作の選択を行うとファイルのコンテンツを記録したブロックの表示部６２０にコンテンツを記録した個々のブロックについての整合性情報を表示する。
【０１３１】
そして、もしもデータ改竄を発見した場合には、戻したい状態に６１３で選択した後にデータ無効化ボタン６０５を使うことにより、コンソールから追記書き込み制御プログラム７０２に対してデータ無効化の指示を送る。追記書き込み制御プログラム７０２では６１３で選択した状態以降に書き込まれた全ての書き込みを無効化する。
【０１３２】
図２３によりコンソール表示の具体例について説明する。エントリ２１１８、２１１９がそれぞれ２３０１、２３０２に対応している。エントリ２１１８、２１１９ではファイル更新時刻のタイムスタンプが更新されないにも関わらずファイルの内容が書き換わっているため、２３０１と２３０２ではディレクトリ操作の整合性表示部６１２には NG が表示される。２３０２を選択することにより、メタ情報の差分表示部６０３には整合性が取れていない原因である、タイムスタンプに更新がないことと、ブロックが変更されたことを表示する。ブロックのＬＢＡ表示部６２１にはエントリ２２１２でＬＢＡ３０７８のフラグ領域８１１の情報がブロックを構成する残り三つのＬＢＡのフラグ領域８１１の値と連続性がないため、整合性に問題があるとして２３０３でブロックの整合性表示部６２２に NG を表示している。ファイル差分表示部６０４には２３０１と２３０２との差分、つまりブロック６２３がブロック９６１に変わったことによる差分を表示する。
【０１３３】
本発明の実施例では、ディレクトリ操作についてはファイル作成、ファイル削除、ファイル名変更だけを対象とし、ファイル操作についてはメタ情報へのファイルを記録するブロックの追加のみを扱っているが、その他の操作、例えばファイルへのアクセス時間などの各種属性情報の変更にも容易に拡張可能である。
【０１３４】
本実施例ではファイルシステムを例に本発明の方式を説明しているが、ファイルシステムの他にもデータベースなど何らかのデータ構造を持ってディスク装置にデータを保存する任意の記録方式についても容易に本方式を適用できる。
【０１３５】
ホストを経由した正常なアクセスパスでの書き込みの場合には、特開平１０−２８３２６２号公報では改竄の有無しか検出できないのに対して、本発明では改竄内容まで検証できる。またホストを経由しない不正なアクセスパスでの書き込みの場合には、特開平１０−２８３２６２号公報では改竄の有無すら検出できないのに対して、本発明では改竄の有無を検出できる。
【０１３６】
本発明では、改竄検出のためにファイルのメタ情報とフラグ領域８１１の部分だけを読み出せば良い。例えばコンテンツを４ＫＢごとに４Ｂのメタ情報で管理している場合には、メタ情報のサイズはコンテンツのサイズの１／１０００になるので、特開平１１−２６１５５０号公報の場合と比較して改竄検出に要する時間が最大で１／１０００になる。
【０１３７】
また特開平１１−２６１５５０号公報では外部の認証機関が必須なのに対して、本発明はスタンドアロンな環境にも適用できる。
【実施例２】
【０１３８】
図１１は、本発明の第二の実施例による書き込み履歴追跡方法のＰＡＤ図である。図１１において、１１００は本発明によるディスク装置の制御方法および改竄検出方法の第二の実施例による書き込み履歴追跡方法のＰＡＤ図、１１１０は前回行なった解析結果が存在しているかを検査するステップ、１１１１は前回の解析結果を読み込むステップ、１１１２は前回の解析の続きから解析を再開するのに必要な解析復帰情報を読み込むステップ、１１１３はディスク装置に記録したデータのデータ構造を読み込むステップ、１１１４は書き込み履歴追跡用の解析プログラムを設定するステップ、１１１５はディスク装置の先頭にシークするステップ、１１１６は解析結果の保存場所を確保するステップ、１１１７は解析結果を書き込むステップ、１１１８は次回の解析の際に今回の解析の続きから再開するのに必要な解析復帰情報を書き込むステップ、１１１９はエラーを記録するステップ、１１２０は解析のためディスク装置に書き込み済みのブロックの物理ブロックアドレス（ＰＢＡ）の範囲でループするステップ、１１２１は解析対象のブロックがディレクトリ操作であるかを検査するステップ、１１２２は解析対象のブロックがファイル操作であるかを検査するステップ、１１２３は解析対象のブロックがブロック操作であるかを検査するステップ、１１３０はディレクトリ操作である場合のサブルーチン、１１４０はファイル操作である場合のサブルーチン、１１５０はブロック操作である場合のサブルーチン、である。
【０１３９】
図１２は、本発明の第二の実施例によるサブルーチン１１３０のＰＡＤ図である。図１２において、１２００は本発明によるディスク装置の制御方法および改竄検出方法の第二の実施例によるサブルーチン１１３０のＰＡＤ図、１２０１は解析対象のブロックの論理ブロックアドレス（ＬＢＡ）と、同一のＬＢＡを指定して前回書かれたのブロック、もしくは解析対象のブロックに記録したメタ情報に対応したディレクトリ名と同一のディレクトリ名に対応したメタ情報を前回記録したブロックとを比較するステップ、１２０２は次のブロックにシークするステップ、１２１０はファイル作成であるかを判定するステップ、１２１１は解析対象のファイル名と同一のファイル名が過去に存在していないか検索するステップ、１２１２は検索の結果から同一のファイル名が存在するかを判定するステップ、１２１３は解析結果を保存するディレクトリ状態遷移リポジトリのファイルエントリに追加するステップ、１２１４はファイルエントリに逆向きの参照を追加するステップ、１２１５はディレクトリ状態遷移リポジトリに新規にファイルエントリを作成するステップ、１２２０はファイル削除であるかを判定するステップ、１２２１はディレクトリ状態遷移リポジトリのファイルエントリにファイルを削除したことを追加するステップ、１２３０はファイル名変更であるかを判定するステップ、１２３１はディレクトリ状態遷移リポジトリのファイルエントリにファイル名を変更したことを追加するステップ、である。
【０１４０】
図１３は、本発明の第二の実施例によるサブルーチン１１４０のＰＡＤ図である。図１３において、１３００は本発明によるディスク装置の制御方法および改竄検出方法の第二の実施例によるサブルーチン１１４０のＰＡＤ図、１３０１は解析対象のブロックのＬＢＡの前回の状態と比較するステップ、１３１０はファイルのメタ情報を更新しているかを検査するステップ、１３１１はファイル状態遷移リポジトリのファイルエントリにメタ情報の更新を追加するステップ、１３１２はメタ情報内の論理ブロックアドレス（ＬＢＡ）をファイル状態遷移リポジトリ中のファイルエントリ内のＬＢＡ状態遷移リポジトリから検索するステップ、１３１３はメタ情報内のＬＢＡがファイル状態遷移リポジトリ中のファイルエントリ内のＬＢＡ状態遷移リポジトリに登録済みであるかを判定するステップ、１３１４はファイルを特定できないＬＢＡ状態遷移リポジトリからファイル状態遷移リポジトリ中のファイルエントリ内のＬＢＡ状態遷移リポジトリへとＬＢＡのエントリを移動するステップ、１３１５はファイルの末尾を保存するブロックのＬＢＡがファイルを特定できないＬＢＡ状態遷移リポジトリからファイル状態遷移リポジトリ中のファイルエントリ内のＬＢＡ状態遷移リポジトリに移動したＬＢＡエントリに含まれているか検索するステップ、１３１６はファイルの末尾を保存するブロックのＬＢＡがファイルを特定できないＬＢＡ状態遷移リポジトリからファイル状態遷移リポジトリ中のファイルエントリ内のＬＢＡ状態遷移リポジトリへと移動したＬＢＡエントリに含まれているかを判定するステップ、１３１７はファイルを構成する最後のブロックの管理領域に整合性フラグを追加するステップ、である。
【０１４１】
図１４は、本発明の第二の実施例によるサブルーチン１１５０のＰＡＤ図である。図１４において、１４００は本発明によるディスク装置の制御方法および改竄検出方法の第二の実施例によるサブルーチン１１５０のＰＡＤ図、１４０１は解析対象のブロックのＬＢＡをファイル状態遷移リポジトリ中のファイルエントリ内のＬＢＡ状態遷移リポジトリから検索するステップ、１４１０は解析対象のブロックのＬＢＡがファイル状態遷移リポジトリ中のファイルエントリ内のＬＢＡ状態遷移リポジトリに登録済みであるかを判断するステップ、１４１１はファイル状態遷移リポジトリ中のファイルエントリ内のＬＢＡ状態遷移リポジトリに検索対象のブロックの情報を追加するステップ、１４１２はファイル状態遷移リポジトリ中のファイルエントリ内のＬＢＡ状態遷移リポジトリのＬＢＡエントリについて逆向きの参照を追加するステップ、１４１３は解析対象のブロックの管理領域にファイル識別子の情報を追加するステップ、１４１４は解析対象のブロックがファイルのコンテンツを記録する最後のブロックかどうかを判断するステップ、１４１５はファイルを構成する最後のブロックの管理領域に整合性フラグを追加するステップ、１４２０は解析対象のブロックのＬＢＡが初めて出るＬＢＡであるかを判定するステップ、１４２１はファイルを特定できないＬＢＡ状態遷移リポジトリに新規エントリを作成するステップ、１４２２はファイルを特定できないＬＢＡ状態遷移リポジトリのＬＢＡエントリに追加するステップ、１４２３はファイルを特定できないＬＢＡ状態遷移リポジトリのＬＢＡエントリの逆向きの参照を追加するステップ、である。
【０１４２】
図１５は、本発明の第二の実施例によるファイルの改竄検出方法のＰＡＤ図である。図１５において、１５００は本発明によるディスク装置の制御方法および改竄検出方法の第二の実施例によるファイルの改竄検出方法のＰＡＤ図、１５０１はパス名を設定するステップ、１５１０はディレクトリ操作の履歴を逆順でループするステップ、１５１１は指定したパス名かどうかを判定するステップ、１５１２はディレクトリ操作の履歴から操作内容を読み出すステップ、１５１３は読み出した操作内容をコンソールに出力するステップ、１５２０は読み出したディレクトリ操作内容がある限りループするステップ、１５２１はファイルエントリが指定するファイルのコンテンツを記録するブロックについてループするステップ、１５２２は同一のＬＢＡを持つブロックを逆順でループするステップ、１５２３はブロックの内容を記憶媒体から読み出すステップ、１５２４は前回同一のＬＢＡで書き込んだブロックの内容を記憶媒体から読み出すステップ、１５２５は今回のブロックと前回のブロックとの差分を抽出するステップ、１５２６は抽出したブロックの差分をコンソールに出力するステップ、１５２７は今回と前回とのファイルレベルでの差分を抽出するステップ、１５２８は抽出したファイルの差分をコンソールに出力するステップ、である。
【０１４３】
図１６は、本発明の第二の実施例によるコンソールの表示部である。図１６において、１６００は本発明によるディスク装置の制御方法および改竄検出方法の第二の実施例によるコンソールの表示部、１６０１はパス名の入力部、１６０２はパス名に対応した解析結果表示の指示ボタン、１６０３はメタ情報の差分表示部、１６０４はブロックの差分表示部、１６０５はファイルの差分表示部、１６０６はブロック選択クリアボタン、１６０７はデータ無効化の指示ボタン、１６１０はディレクトリ操作表示部、１６１１はディレクトリ操作の種別表示部、１６１２はディレクトリ操作の外部時間表示部、１６１３はディレクトリ操作の内部時間表示部、１６１４はディレクトリ操作の選択、１６２０はファイルのコンテンツを記録したブロックの表示部、１６２１はファイルのコンテンツを記録したブロックのＬＢＡの表示部、１６２２はフィルのコンテンツを記録したブロックのＬＢＡの時間遷移表示部、１６２３はファイルを構成するブロックのＬＢＡの選択、である。
【０１４４】
図１７は、本発明の第二の実施例によるシステム構成図である。図１７において、１７００は本発明によるディスク装置の制御方法および改竄検出方法の第二の実施例によるシステム構成、１７０１はホスト、１７０２はコンソール、１７０３はホストからディスク装置へのブロックインタフェースによるアクセス、１７０４はコンソールからディスク装置への管理インタフェースによるアクセス、１７１０はディスク装置、１７１１はディスク装置のコントローラ、１７１２はディスク装置の記憶媒体、である。
【０１４５】
図２４は、本発明の第二の実施例によるファイル状態遷移リポジトリのファイルエントリ内のＬＢＡ状態遷移リポジトリのデータ構造である。図２４において、２４００はＬＢＡ状態遷移リポジトリ、２４０１はファイルのコンテンツを記録したブロックのインデックス番号欄、２４０２はブロックのインデックス番号に対応したＬＢＡおよびＰＢＡの欄、２４０３はブロック番号２０４を記録するセクタのＬＢＡとＰＢＡのエントリ、２４０４はブロック番号２５１を記録するセクタのＬＢＡとＰＢＡのエントリ、２４０５はブロック番号５１６を記録するセクタのＬＢＡとＰＢＡのエントリ、２４０６はブロック番号５３８を記録するセクタのＬＢＡとＰＢＡのエントリ、２４０７はブロック番号６２１を記録するセクタのＬＢＡとＰＢＡのエントリ、２４０８はブロック番号６２２を記録するセクタのＬＢＡとＰＢＡのエントリ、２４０９はブロック番号６２３を記録するセクタのＬＢＡとＰＢＡのエントリ、２４１０はブロック番号６２４を記録するセクタのＬＢＡとＰＢＡのエントリ、２４１１はブロック番号６２５を記録するセクタのＬＢＡとＰＢＡのエントリ、２４１２はブロック番号９６１を記録するセクタのＬＢＡとＰＢＡのエントリ、２４１３はブロック番号９６１を記録するセクタのＬＢＡとＰＢＡのエントリ、である。
【０１４６】
図２５は、本発明の第二の実施例によるコンソール表示部の表示例である。図２５において、２５００はコンソールの表示例、２５０１は選択したメタ情報のエントリ、２５０２は整合性に問題のあるＬＢＡのエントリ、である。
【０１４７】
第一の実施例ではホストが追記書き制御を行って書き込んだディスク装置の改竄検出を行うのに対して、第二の実施例ではディスク装置自身が追記書き制御を行い、このディスク装置について改竄検出を行う。
【０１４８】
第二の実施例ではホストはディスク装置に対して論理ブロックアドレス（ＬＢＡ）を指定してデータの読み書きを行うＳＣＳＩに代表される通常のブロックアクセスを行うのに対して、ディスク装置では同一のＬＢＡを指定しても同一の物理ブロックアドレス（ＰＢＡ）に書き込まないように、ディスク装置内のＬＢＡとＰＢＡとの対応を動的に変更して既存のデータを上書きしないように記憶媒体に書き込み、読み出し時には最新のＬＢＡとＰＢＡの対応から必要なデータを記憶媒体から読み出す。
【０１４９】
ブロックインタフェースにより書き込みと読み出しを行なうディスク装置では、ディスク装置に書かれたデータ構造を理解しているのは、そのデータを書き込んだホストのみである。このためディスク装置のデータ改竄の有無を検出するためには、ディスク装置でＬＢＡとＰＢＡとの対応を動的に変更して追記式に書き込むことで全ての書き込み履歴を保存し、ＬＢＡとＰＢＡとの対応とホストが書き込んだデータ構造との両方を理解する解析プログラムを用いて書き込み履歴を解析する必要がある。
【０１５０】
一般的にサービスプロセッサ以外のホストからディスク装置の管理情報へアクセスできるパスを設けるのはセキュリティの観点上好ましくない。このためセキュリティの観点からはディスク装置のコントローラもしくはサービスプロセッサの上で解析プログラムを実行するのが望ましい。しかしＨＤＤ単体で追記書き制御を実装している場合など、解析プログラムを実行するのに十分なプロセッサリソースがない場合には、ディスク装置の管理情報などにアクセス可能なパスを設け、ディスク装置を接続しているホスト上で解析プログラムを実行する必要がある。
【０１５１】
本実施例では、図１７に示すように追記式に記録するディスク装置１７１０のコントローラ１７１１において解析プログラムを実行する。ディスク装置１７１０はコントローラ１７１１と記憶媒体１７１２とからなる。ホスト１７０１がブロックインタフェースによるアクセス１７０３でコントローラ１７１１に書きコマンドを発行すると、コントローラ１７１１が記憶媒体１７１２に追記式に記録する。管理インタフェースによるアクセス１７０４で、管理コンソール１７０２からディスク装置１７１０のコントローラ１７１１に対して、解析プログラムへのパラメータ設定、改竄検出の実行の指示を行ない、検出結果を出力する。
【０１５２】
また本実施例ではファイルシステムにおける改竄検出方法について説明するが、論理構造を持って記録したデータであればデータベースなどファイルシステム以外の任意のデータについても適用できる。
【０１５３】
図１１から図１４を用いてファイルシステムの改竄検出に必要となる書き込み履歴の追跡方法について説明する。ディスク装置に追記式に書き込まれたデータを書き込まれた順番に従って書き込み履歴の追跡と改竄検出を行なう場合、解析を完了した物理ブロックアドレス（ＰＢＡ）の値と解析結果を保存しておくと、前回行なった解析の続きから解析を再開できる。またこのような解析の中断と再開を実現すると、新規にディスク装置に記録されたコンテンツについてのみ解析を行なえば良くなるため、解析時間を短縮できる効果がある。
【０１５４】
このような解析の再開を行なうため、ステップ１１１０ではディスク装置１７１０の管理領域に前回の解析結果が保存されていないか検査する。保存されている場合には１１１１に進み、保存されていない場合には１１１３に進む。ステップ１１１１では前回の解析結果を読み込み、ステップ１１１２では解析を再開するのに必要な解析復帰情報を読み込み、前回の解析の続きのＰＢＡにヘッドをシークする。ここでは解析復帰情報として、少なくとも解析プログラムの設定と解析を完了したＰＢＡの値を含む。
【０１５５】
解析結果が保存されていない場合、一度も解析プログラムを実行していないことを意味する。そこでステップ１１１３、１１１４、１１１５により解析プログラムの設定を行なう。解析プログラムはデータフォーマット即ちディスク装置１７１０に保存しているファイルシステムごとに必要になる。各ファイルシステムごとに個別に解析プログラムを用意するのは非常に工数がかかるため、解析プログラムを、（１）ファイルシステムのデータ構造の定義部分、（２）データ構造の定義に基づいた検索部分、の二つに分け、定義部分をファイルシステムごとに用意し検索部分を共通化する。ステップ１１１３ではディスク装置上の解析対象のボリュームに記録したファイルシステムのデータ構造をコンソール１７０２からコントローラ１７１１に読み込ませる。ステップ１１１４では解析プログラムに対してステップ１１１３で読み込んだデータ構造を入力する。そしてステップ１１１５では解析対象のボリュームの先頭にシークする。
【０１５６】
ステップ１１２０のループでは、ディスク装置に書き込み済みのブロックのＰＢＡの範囲でループし、解析対象のブロックがディレクトリ操作、ファイル操作、ブロック操作のいずれであるかに応じた解析を行なう。ファイルシステムを経由したブロックへの書き込みは、（１）ファイルやディレクトリの作成や消去に代表されるディレクトリ操作、（２）ファイルのメタ情報の更新であるファイル操作、（３）それら以外のブロックへの書き込みであるブロック操作、の三つに分類できる。あるブロックへの書き込みがこれら三つのどれに相当するかは、ステップ１１１３で読み込んだデータ構造により一意に特定できる。ステップ１１２１では解析対象のブロックへの書き込みがディレクトリ操作かどうかを検査する。ディレクトリ操作である場合にはステップ１１３０のサブルーチンへと進む。ステップ１１２２では解析対象のブロックへの書き込みがファイル操作かどうかを検査する。ファイル操作である場合にはステップ１１４０のサブルーチンへと進む。ステップ１１２３では解析対象のブロックがブロック操作かどうかを検査する。ブロック操作である場合にはステップ１１５０のサブルーチンへと進む。最後にこれらのどれにも当てはまらない場合には、何らかのエラーが発生したことを意味するので、ステップ１１１９に進みエラーを記録する。ステップ１１２０のループにより、書き込み済みの全てのＰＢＡについて解析が終了した後、ステップ１１１６、１１１７、１１１８に進み解析結果の保存と、解析の再開に必要な情報を保存する。
【０１５７】
ステップ１１１６でディスク装置の管理領域に解析結果の保存場所を確保し、ステップ１１１７に進む。ステップ１１１７ではステップ１１２０のループにより解析したボリュームの解析結果をステップ１１１６で確保した管理領域内の保存場所に保存し、ステップ１１１８に進む。ステップ１１１８では次回に解析を行なう際に今回解析が終了したＰＢＡから解析を再開するのに必要な情報をステップ１１１６で確保した管理領域内の保存場所に保存する。ここで保存する解析の再開に必要な情報として、少なくともステップ１１１４で解析プログラムに設定した内容と、ステップ１１２０のループで解析を完了したＰＢＡの値とを保存する。
【０１５８】
ステップ１１３０のサブルーチンではファイルシステムへのファイルもしくはディレクトリの作成、削除、名前の変更など、ディレクトリ構造の変更について検査する。ディレクトリ構造にどのような変化が生じたかを調べるには、ディレクトリエントリの管理情報であるメタ情報を記録するブロックに対してホストがどのような更新を指示したかを調べる必要がある。ホストが同一のＬＢＡを指定してディスク装置に対して書き込みコマンドを発行しても、それぞれ異なるＰＢＡに対して書き込みが実行される追記書き制御では、同一ＬＢＡに書き込んだ前後でブロックの内容を比較できるため、ディスク装置側でディレクトリに対してどのような操作を行なったか検出できる。そして変更を検出すると、第一の実施例の場合と同様にディスク装置の状態変化を管理するディレクトリ状態遷移リポジトリとファイル状態遷移リポジトリのエントリに変更内容をそれぞれ記録する。例えばディレクトリＤｉｒに対してファイルＡを新規作成する場合、ディレクトリ状態遷移リポジトリのディレクトリＤｉｒのエントリにファイルＡを作成した状態を追加し、ファイルＡのエントリを新規作成し、ファイルが新規作成された状態を追加する。
【０１５９】
ディレクトリ名の変更やファイルシステムによるブロックの配置最適化などにより、ディレクトリのメタ情報が同一のＬＢＡに記憶されるとは限らない。そこでステップ１２０１では最初に解析対象のブロックと同一のＬＢＡでホストから前回書き込まれたブロックとの比較を試み、この時前回書き込まれたブロックに記録された内容が同一ディレクトリ名に対応した前回のメタ情報ではない場合には、前回同一のディレクトリ名を持つディレクトリのメタ情報を検索して比較する。このようなブロックの過去の状態との比較は、ディスク装置が過去の書き込み履歴を保存していることにより可能となる。この比較により変更点を抽出した後、ステップ１２１０に進む。ステップ１２１０では、ステップ１２０１で抽出した結果を判定し、ファイルが新規作成されている場合にはステップ１２１１に進む。ステップ１２１０の終了後ステップ１２２０に進む。
【０１６０】
アプリケーションでデータをファイルに保存する場合には、既存のファイルの名前を変更してバックアップとして残し、新規にファイルを作成する場合がある。ファイルの改竄検出のためには、同一ファイル名を持つファイルについてファイルの更新を追跡する必要がある。ステップ１２１１では、このようなデータ更新方法を追跡するために、ディレクトリ状態遷移リポジトリのファイルエントリから過去に同一のファイル名が存在したかどうか検索する。検索終了後ステップ１２１２に進む。ステップ１２１２ではステップ１２１１の検索結果を判定し、同一ファイル名が存在した場合にはステップ１２１３に進み、存在しなかった場合にはステップ１２１５に進む。ステップ１２１３ではディレクトリ状態遷移リポジトリの既存のファイルエントリに新規ファイルを作成した状態を追加する。例えばディレクトリ状態遷移リポジトリ中のファイルＡのエントリが、「新規作成→Ａ．ＢＡＣＫＵＰにファイル名変更」となっている場合、このエントリに新規作成の状態を追加し、「新規作成→Ａ．ＢＡＣＫＵＰにファイル名変更→新規作成」とする。ディスク装置に書き込まれた順番でブロックの解析を行なうとディレクトリ状態遷移リポジトリのファイルエントリにおいてファイルの更新順番でしか辿れなくなる。しかし、あるファイルについて改竄の有無を調べたい場合には、最新の状態から以前の状態に辿れた方が便利である。そこで、ステップ１２１４では、ステップ１２１３で登録した状態から以前の状態への逆向きの参照を追加する。ステップ１２１５では、ディレクトリ状態遷移リポジトリに新規ファイル用のファイルエントリを作成し、ファイルの新規作成の状態を追加する。
【０１６１】
ステップ１２２０では、ステップ１２０１で比較した結果を判定し、ファイルが削除されている場合にはステップ１２２１に進む。ステップ１２２０の終了後ステップ１２３０に進む。ステップ１２２１では、ディレクトリ状態遷移リポジトリ中のファイルエントリにファイルが消去された状態を追加し、ステップ１２１４に進む。ステップ１２１４ではディレクトリ状態遷移リポジトリ中のファイルエントリが消去された状態から以前の状態への逆向きの参照を追加する。
【０１６２】
ステップ１２３０では、ステップ１２０１で比較した結果を判定し、ファイル名が変更されている場合にはステップ１２１１に進む。ステップ１２１１では、ディレクトリ状態遷移リポジトリ中のファイルエントリから過去に同一のファイル名が存在したかどうかを検索する。検索終了後ステップ１２１２に進む。ステップ１２１２ではステップ１２１１の検索結果を判定し、同一ファイル名が存在した場合にはステップ１２３１に進み、存在しなかった場合にはステップ１２１５に進む。ステップ１２３１では既存のファイルエントリに他のファイルからファイル名を変更した状態を追加する。ステップ１２１４ではステップ１２３１で登録した状態から以前の状態に対する逆向きの参照を追加する。ステップ１２１５では、ディレクトリ状態遷移リポジトリに新規ファイル用のファイルエントリを作成し、他のファイルからファイル名を変更した状態を追加する。ステップ１２３０の終了後ステップ１２０２に進む。ステップ１２０２では次のブロックにシークする。
【０１６３】
ステップ１１４０のサブルーチンではファイルの修正時刻やファイルのコンテンツを保存するブロックのＬＢＡの値などのファイルの管理情報であるメタ情報の変更について検査する。ステップ１１３０のサブルーチンの場合と同様に、メタ情報を記録するブロックの更新前後の内容を比較してどのような更新がされたかを特定する。ファイルの置き換えやファイルシステムによるブロックの配置最適化などのため、同一のファイル名を持つファイルのメタ情報が同一のＬＢＡ上に記録されるとは限らない。そこでステップ１３０１ではステップ１２０１と同様に最初に解析対象のブロックと同一のＬＢＡでホストから前回書き込まれたブロックとの比較を試み、この時前回書き込まれたブロックに記録された内容が同一ファイル名に対応した前回のメタ情報ではない場合には、前回同一のファイル名を持つファイルのメタ情報を検索して比較する。ステップ１２０１の終了後ステップ１３１０に進む。ステップ１３１０では、ステップ１２０１で抽出した変更点を判定し、ファイルのメタ情報を更新している場合にはステップ１３１１に進む。ステップ１３１１では、メタ情報を構成する修正時刻やファイルのコンテンツを保存するブロックのＬＢＡの値などの情報の変更点を、ファイル状態遷移リポジトリのファイルエントリの新たな状態として追加する。
【０１６４】
ファイルのコンテンツの更新を検査するためには、メタ情報内のＬＢＡの値の遷移と、同一ＬＢＡへの書き込みの両方を追跡し、個々のブロックがどのファイルのコンテンツを記録しているかを特定する必要がある。ファイルのメタ情報はファイルへのアクセスのたびに更新される情報なので、ファイルシステムの性能向上のために通常はホストのメモリ上にキャッシュしており、ファイルのコンテンツをブロックに保存した段階ではキャッシュ上のメタ情報がブロックに反映されていない可能性がある。このため、追記書き制御により書き込んだディスク装置においてディスク装置に書き込んだ順番にブロックの内容を解析すると、どのファイルのコンテンツを保存したブロックか判断できない場合がある。本実施例では後述するようにこのようなブロックをファイルを特定できないＬＢＡ状態遷移リポジトリに個々のＬＢＡのエントリを作成して管理する。そしてメタ情報が保存された段階でどのファイルのコンテンツを保存しているかを特定し、ファイル状態遷移リポジトリ中のファイルエントリ内のＬＢＡ状態遷移リポジトリに該当するＬＢＡのエントリを移す。
【０１６５】
ステップ１３１１の終了後ステップ１３１２ではメタ情報内のＬＢＡがファイルを特定できないリポジトリＬＢＡ状態遷移リポジトリ中のＬＢＡエントリに存在しないか検索する。ステップ１３１２の終了後ステップ１３１３に進み、そのようなＬＢＡが発見できたか判断する。発見した場合ステップ１３１４に進む。ステップ１３１４では発見したＬＢＡのエントリをファイルを特定できないＬＢＡ状態遷移リポジトリからファイル状態遷移リポジトリ中のＬＢＡ状態遷移リポジトリに移動する。ステップ１３１４の終了後ステップ１３１５に進む。ステップ１３１５では移動したＬＢＡの中にファイルの終端を記録したＬＢＡが存在しないか検索する。ステップ１３１５の終了後ステップ１３１６に進む。ステップ１３１６では検索の結果ファイルの終端を記録したＬＢＡが存在したかを判断し、存在していた場合にはステップ１３１７に進む。ステップ１３１７では、ファイルの終端のブロックの管理領域にファイルを構成する最後のブロックであることを示す整合性フラグを追加する。このようにファイル毎にどのブロックがファイルの終端であるかを識別することにより、ディスク装置において、整合性を保った状態でファイルへの書き込みを無効化できる。
【０１６６】
ステップ１３１３の終了後ステップ１２１４に進む。ステップ１２１４では、ステップ１３１１で登録した状態から以前の状態への逆向きの参照を追加する。ステップ１３１０の終了後ステップ１２０２に進む。ステップ１２０２では次のブロックにシークする。
【０１６７】
ステップ１１５０のサブルーチンでは個々のブロックへの変更について検査する。ファイルシステムからファイルシステムによる書き込みでは、ファイルのコンテンツを保存するＬＢＡの値をファイルのメタ情報の中に記録する。このためファイルのメタ情報を参照すると、どのＬＢＡがどのファイルに対応するかを特定できる。ファイルにアクセスする毎にメタ情報の中のアクセス時間属性が更新するが、この更新を毎回ディスク装置に反映するとファイルシステムの性能が大幅に低下するため、ホスト側でメタ情報の更新をある程度キャッシュしてからディスク装置に保存する。このため、ディスク装置に書き込まれた順番にブロックの解析をして行くと、解析対象のブロックがどのファイルのコンテンツを記録しているか判定できない場合がある。そこで本実施例では、解析対象のブロックをホストが書き込む際に指定したＬＢＡがどのファイルのコンテンツを記録しているか特定できる場合には該当するファイル状態遷移リポジトリ中の該当ファイルのエントリ内のＬＢＡ状態遷移リポジトリにブロックの書き込み状態を追加し、そうでない場合には個々のファイルを特定できないＬＢＡ状態遷移リポジトリ中に新規ＬＢＡエントリを作成しブロックの書き込み状態を追加する。
【０１６８】
ステップ１４０１では、解析対象のブロックをホストが書き込む際に指定したＬＢＡの値をファイル状態遷移リポジトリ中のファイルエントリのＬＢＡ状態遷移リポジトリから検索するステップである。ステップ１４０１の終了後ステップ１４１０に進む。ステップ１４１０では、ステップ１４０１の検索結果を判定し、ファイル状態遷移リポジトリ中のファイルエントリ内のＬＢＡ状態遷移リポジトリの中で該当するＬＢＡを発見した場合にはステップ１４１１に進み、発見しなかった場合にはステップ１４２０に進む。ステップ１４１１では、ファイル状態遷移リポジトリ中のファイルエントリ内のＬＢＡ状態遷移リポジトリのＬＢＡエントリに解析対象のブロックの物理ブロックアドレス（ＰＢＡ）の値の状態を追加し、ステップ１４１２に進む。ステップ１４１２では、ステップ１４１１で追加した状態から以前の状態への逆向き参照を追加し、ステップ１４１３に進む。ステップ１４０１で解析対象のブロックがどのファイルのコンテンツを記録しているか検索した結果を再利用可能にするため、ステップ１４１３で解析対象のブロックの管理領域にファイルの識別子を追加する。ステップ１４１３の終了後ステップ１４１４に進む。ステップ１４１４では解析対象のブロックがファイルの終端を記録しているかどうか判断し、記録している場合にはステップ１４１５に進む。ステップ１４１５では、解析対象のブロックの管理領域にファイルを構成する最後のブロックであることを示す整合性フラグを追加する。このようにファイル毎にどのブロックがファイルの終端であるかを識別することにより、ディスク装置において、整合性を保った状態でファイルへの書き込みを無効化できる。
【０１６９】
ステップ１４２０では、解析対象のブロックに対応したＬＢＡがファイルを特定できないＬＢＡ状態遷移リポジトリ中のＬＢＡエントリに登録済みかどうかを判断する。登録済みない場合、つまり新規ＬＢＡの場合にはステップ１４２１に進み、登録済みの場合にはステップ１４２２に進む。ステップ１４２１では、解析対象のブロックをホストが書き込む際に指定したＬＢＡの値に対応したＬＢＡエントリをファイルを特定できないＬＢＡ状態遷移リポジトリに追加し、ブロックに新規に書き込んだ状態を追加する。ステップ１４２２では、ファイルを特定できないＬＢＡ状態遷移リポジトリの既存のＬＢＡエントリの履歴にブロックを書き換えた状態を追加する。ステップ１４２３では、ステップ１４２２で追加した状態から以前の状態への逆向き参照を追加する。このように、メタ情報に登録されていないＬＢＡへの更新履歴をファイルを特定できないＬＢＡ状態遷移リポジトリ中のＬＢＡエントリとして収集することにより、メタ情報の記録に先立ってファイルのコンテンツを保存する場合や、ファイルシステムを経由しない不正な場合に付いてもブロックへの書き込みを追跡可能になる。
【０１７０】
ステップ１４１０の終了後ステップ１２０２に進む。ステップ１２０２では次のブロックにシークする。
【０１７１】
次に図１５と図１６を用いて特定のファイルの改竄検出方法について説明する。図１１から図１４により説明した書き込み履歴の追跡方法でディレクトリ操作とファイル操作に分けてディスク装置に書き込まれたデータを解析したのに対応し、ファイルの改竄検出においてもディレクトリ操作とファイル操作の二つのレベルで改竄検出を行なう。つまり、ディレクトリ操作レベルの改竄検出ではファイルの置き換えのチェックを行ない、ファイル操作レベルの改竄検出ではファイルのコンテンツを記録したデータブロックの書き換えのチェックを行なう。改竄の有無を判断するのに必要な全てのデータを図１から図４の書き込み履歴追跡方法で収集済みであるため、図５と図６では改竄検出の対象となるファイルの指定と、履歴追跡の解析結果からの改竄内容の読み出しとコンソールへの出力を行なう。
【０１７２】
ユーザがコンソールのパス名入力部１６０１に改竄検出の対象となるパス名を入力して解析結果表示の指示ボタン１６０２を押すと、改竄検出方法のステップ１５０１において、ユーザの指定したパス名が入力される。ステップ１５０１の終了後ステップ１５１０に進む。
【０１７３】
ステップ１５１０では書き込み履歴追跡方法１１００の解析結果をファイルの最新の状態から以前の状態へと逆順でループし、ステップ１５１１を実行する。あるファイルが改竄されている場合、最新の状態から以前の状態へと遡って変更点を調べることで、短時間に改竄の有無を確認できる効果がある。ステップ１５１１では、現在処理中のディレクトリ操作の履歴がステップ１５０１で指定したパス名と一致するかどうかを判定する。一致する場合にはステップ１５１２に進む。ステップ１５１２では、サブルーチン１１３０で解析したディレクトリ操作の履歴から指定したファイルへの操作内容を読み出す。ここで読み出す操作内容は、ファイル作成、ファイル削除、ファイル名変更などである。ステップ１５１２の終了後ステップ１５１３に進む。ステップ１５１３では読み出した操作内容をコンソールに出力する。ステップ１５１０のループの終了後ステップ１５２０のループに進む。
【０１７４】
ステップ１５２０のループでは、ステップ１５１０のループで読み出した操作内容ごとにファイルのコンテンツを記録したブロックの書き込み履歴を読み出す。このようにファイルのコンテンツを記録したブロックの書き込み履歴を追跡することで、ファイルシステムを経由せずホストから直接ブロックデバイス用のコマンドを発行してディスク装置に書き込むことでファイルを改竄する場合であっても検出できる効果がある。ステップ１５２０のループは、ステップ１５１０で読み出した操作内容がある限りステップ１５２１、ステップ１５２７、ステップ１５２８を実行する。
【０１７５】
ステップ１５２１では、ファイルエントリが指定するブロックについてループする。ステップ１５２０とステップ１５２１との関係は以下のようになる。ステップ１５２０ではアプリケーションがファイルを保存する場合に古いファイルの名前を変更した後に新しいファイルを保存した場合に古いファイルから新しいファイルへと追跡する。これに対しステップ１５２１では古いファイルと新しいファイルのそれぞれにおいてファイルのコンテンツを記録する個々のブロックについての書き換えを追跡する。このように、ディレクトリ状態遷移リポジトリに記録されたディレクトリ操作の履歴により操作を参照してから、ファイル状態遷移リポジトリに記録されたファイル操作の履歴を参照することにより、ファイルを置き換えた場合であってもファイルの更新内容を追跡できる効果がある。ステップ１５２１はステップ１５２２のループを実行する。
【０１７６】
ステップ１５２２はホストが同一のＬＢＡを指定して書き込んだブロックを最新の状態から以前の状態へと逆順でループして、ステップ１５２３、１５２４、１５２５、１５２６を実行する。ステップ１５２３では、解析対象のブロックを読み出し、ステップ１５２４に進む。ステップ１５２４では、解析対象のブロックと同一のＬＢＡにより前回書き込んだブロックの内容を読み出し、ステップ１５２５に進む。ステップ１５２５では、読み出したこれら二つのブロックの差分を抽出し、ステップ１５２６に進む。ステップ１５２６では、抽出した差分をコンソールに出力する。
【０１７７】
ステップ１５２１のループの終了後ステップ１５２７に進む。古いファイルを削除して新しいファイルに置き換えた場合でも、書き込み履歴追跡方法１１００では新旧の両ファイルにおいてどのブロックにファイルのコンテンツを保存しているかを追跡できる。そこでステップ１５２７では、この機能を使い新旧のファイルをファイルレベルで差分を抽出する。ステップ１５２７の終了後ステップ１５２８に進む。ステップ１５２８では、ステップ１５２７で抽出した差分をコンソールに出力する。
【０１７８】
これらの差分の抽出結果などを表示するため、コンソールには差分の表示部分の他に複数の差分のうちどの部分の差分を表示するかの選択部分がある。メタ情報の差分表示部１６０３はステップ１５１３のコンソールへの出力結果を表示する。どのディレクトリ操作の差分を表示するかをディレクトリ操作表示部１６１０で指示する。ディレクトリ操作表示部１６１０にはディレクトリ操作の種別表示部１６１０、ディレクトリ操作の外部時間表示部１６１２、ディレクトリ操作の内部時間表示部１６１３の三つの表示部がある。これらはそれぞれ、サブルーチン１３０で特定した操作の種別、メタ情報内部に記録されたホストがディスク装置に伝えたディレクトリ操作の時間、ディスク装置が管理するメタ情報を記録するブロックに書き込みを行なった時間、を表示する。ユーザは１６１１のディレクトリ操作の内容を見て１６１４で操作を選択すると、その操作と一つ前との操作のメタ情報の差分を１６０３に表示する。また、この１６１４の選択に応じてディレクトリ操作の前後でのファイルレベルでの差分を６０４に表示する。
【０１７９】
１６１４でディレクトリ操作の選択を行なうとファイルのコンテンツを記録したブロックの表示部１６２０にファイルを構成する個々のブロックについてホストが指定したＬＢＡとディスク装置上に保存された際の物理ブロックアドレス（ＰＢＡ）が表示される。ＬＢＡはファイルのコンテンツを記録したブロックのＬＢＡの表示部に表示される。ファイルのコンテンツを複数のブロックを利用して保存している場合には１６２１において保存しているブロック数だけの行数を使い表示する。ホストが同一のＬＢＡに対して複数の書き込みを行なった場合には、各書き込みを行なった際のＰＢＡを１６２２のファイルのコンテンツを記録したブロックのＬＢＡの時間遷移表示部に表示する。１６２２では右側に行くほど新しい書き込みになる。ブロック単位でデータが改竄されていないか確認するためには、１６２３のファイルを構成するブロックのＬＢＡの選択により、選択しているブロックを変更する。１６１４でディレクトリ操作を選択した段階では１６２２では最新の書き込みを選択した状態になっている。ここで１６２３であるブロックを選択すると、直前に選択しているブロックとの差分をブロックの差分表示部１６０４に表示する。１６０６のブロック選択クリアボタンにより１６２３の選択内容を一つ前の状態に戻すことができる。そして、もしもデータ改竄を発見した場合には、戻したい状態に１６２３で選択した後にデータ無効化ボタン１６０７を使うことにより、コンソールからディスク装置に対してデータ無効化の指示を送る。追記書き制御によりデータを書き込むディスク装置では、１６２３の選択により選ばれたＰＢＡよりも下位のアドレスでステップ１３１７で整合性フラグのついたＰＢＡの最上位アドレスから書き込み済みのＰＢＡ最上位アドレスまでの範囲のデータを無効化する。
【０１８０】
このようにデータ改竄が発生した以前のディスク装置の状態でファイルシステムの整合性の取れた状態を特定することにより、必要最小限のデータを無効化するだけでデータ改竄が発生した以前のディスク装置の状態に戻すとともにファイルシステムの整合性を保持できる効果がある。
【０１８１】
図２４と図２５とによりコンソール表示の具体例について説明する。図２４はファイル状態遷移リポジトリ内のＬＢＡ状態遷移リポジトリのデータ構造である。ディレクトリ状態遷移リポジトリのデータ構造とファイル状態遷移リポジトリのデータ構造とは、ＰＢＡの情報が追加される点を除き第一の実施例の場合と同じであるため省略する。
【０１８２】
図２４では図２２と異なり各ＬＢＡのフラグ領域の値ではなくＰＢＡの値を記述している。実施例２ではディスク装置が追記書き制御を行うので、エントリ２４１２、２４１３のように同じＬＢＡである３０７８に書き込んだ場合に、それぞれ異なるＰＢＡである８１９４と１８９６４に書き込まれる。
【０１８３】
図２５はコンソール表示の具体例である。内部時間１６１３はディスク装置内で管理している時間で、外部時間１６１２はファイルシステムがファイルを書き込んだ際のタイムスタンプである。２５０１では内部時間が進んでいるが外部時間が進んでおらず改竄されている可能性がある。２５０１を選択すると、メタ情報の差分表示部１６０３に２５０１の直前のエントリとのメタ情報の差分を表示し、１６２０にコンテンツを記録したブロックのＬＢＡを表示する。
【０１８４】
メタ情報の差分表示部１６０３にはメタ情報の差分であるタイムスタンプの更新なしの情報と、コンテンツを記録するブロックの変更の情報を表示する。
【０１８５】
エントリ２４１２、２４１３よりＬＢＡ３０７８のＰＢＡが８１９４から１８９６４になっていることから、ブロックのＬＢＡ表示部１６２０のＬＢＡが３０７８のエントリには８１９４と１８９６４の二つのＰＢＡが表示される。１６２３のようにそれぞれのＬＢＡについて一つのＰＢＡを選択すると、ブロック差分表示部１６０４とファイル差分表示部１６０５に直前の選択との差分を表示する。図２５では２５０２のＬＢＡが３０７８であるＰＢＡの８１９４と１８９６４との差分を表示している。
【０１８６】
本発明の実施例では、ディレクトリ操作についてはファイル作成、ファイル削除、ファイル名変更だけを対象とし、ファイル操作についてはメタ情報へのファイルを記録するブロックの追加のみを扱っているが、その他の操作、例えばファイルへのアクセス時間などの各種属性情報の変更にも容易に拡張可能である。
【０１８７】
本実施例ではファイルシステムを例に本発明の方式を説明しているが、ファイルシステムの他にもデータベースなど何らかのデータ構造を持ってディスク装置にデータを保存する任意の記録方式についても容易に本方式を適用できる。
【０１８８】
また、本実施例ではディスク装置のコントローラもしくはサービスプロセッサ上で解析プログラムを実行することを想定しているが、もちろん実施例はこれに限らない。ディスク装置内の書き込み履歴などの管理情報にアクセスできるのであれば、ディスク装置に接続しているホスト上で解析プログラムを実行するのも容易である。さらに、本実施例ではディスク装置が大型ディスクアレイとして実装されていることを想定しているが、ディスク装置が単体のＨＤＤに実装されている場合であっても同様に適用可能である。
【０１８９】
追記書き制御により書き込む方式は物理ブロックアドレス順に書き込む方式に限らない。解析などを行なう場合に書き込み順番を特定できる任意の書き込み方式の追記書き制御方式に対しても容易に本方式を適用可能である。
【図面の簡単な説明】
【０１９０】
【図１】本発明の第一の実施例による書き込み履歴追跡方法のＰＡＤ図。
【図２】本発明の第一の実施例によるサブルーチン１３０のＰＡＤ図。
【図３】本発明の第一の実施例によるサブルーチン１４０のＰＡＤ図。
【図４】本発明の第一の実施例によるサブルーチン１５０のＰＡＤ図。
【図５】本発明の第一の実施例によるファイルの改竄検出方法のＰＡＤ図。
【図６】本発明の第一の実施例によるコンソールの表示部を示す図。
【図７】本発明の第一の実施例によるハードウェアのブロック図。
【図８】本発明の第一の実施例によるディスク装置内の記憶媒体の記録フォーマットを示す図。
【図９】本発明の第一の実施例によるフラグ領域のデータ構造を示す図。
【図１０】本発明の第一の実施例によるディレクトリ状態遷移リポジトリを示す図。
【図１１】本発明の第二の実施例による書き込み履歴追跡方法のＰＡＤ図。
【図１２】本発明の第二の実施例によるサブルーチン１１３０のＰＡＤ図。
【図１３】本発明の第二の実施例によるサブルーチン１１４０のＰＡＤ図。
【図１４】本発明の第二の実施例によるサブルーチン１１５０のＰＡＤ図。
【図１５】本発明の第二の実施例によるファイルの改竄検出方法のＰＡＤ図。
【図１６】本発明の第二の実施例によるコンソールの表示部を示す図。
【図１７】本発明の第二の実施例によるシステム構成例を示す図。
【図１８】の第一の実施例によるディレクトリのメタ情報を記録したブロックのデータ構造を示す図。
【図１９】本発明の第一の実施例によるファイルのメタ情報のデータ構造と記憶媒体のブロックを示す図。
【図２０】本発明の第一の実施例によるディレクトリ状態遷移リポジトリのデータ構造を示す図。
【図２１】本発明の第一の実施例によるファイル状態遷移リポジトリのデータ構造を示す図。
【図２２】本発明の第一の実施例によるファイル状態遷移リポジトリのファイルエントリ内のＬＢＡ状態遷移リポジトリのデータ構造を示す図。
【図２３】本発明の第一の実施例によるコンソール表示部の表示例を示す図。
【図２４】本発明の第二の実施例によるファイル状態遷移リポジトリのファイルエントリ内のＬＢＡ状態遷移リポジトリのデータ構造を示す図。
【図２５】本発明の第二の実施例によるコンソール表示部の表示例を示す図。
【符号の説明】
【０１９１】
６０１ パス名の入力部
６０２ パス名に対応した解析結果表示の指示ボタン
６０３ メタ情報の差分表示部
６０４ ファイルの差分表示部
６０５ データ無効化の指示ボタン
６１０ ディレクトリ操作表示部
６１１ ディレクトリ操作の種別表示部
６１２ ディレクトリ操作の整合性表示部
６１３ ディレクトリ操作の選択
６２０ ファイルのコンテンツを記録したブロックの表示部
６２１ ファイルのコンテンツを記録したブロックのＬＢＡの表示部
６２２ ファイルのコンテンツを記録したブロックの整合性表示部
７００ ホストのブロック図
７０１ 主記憶
７０２ 追記書き制御プログラム
７０３ 改竄検出プログラム
７０４ プロセッサ
７０５ ディスクインタフェース
７１０ ディスク装置のブロック図
７１１ フラッシュロム
７１２ 主記憶
７１３ キャッシュメモリ
７１４ マイクロプロセッサ（ＭＰＵ）
７１５ ハードディスクコントローラ（ＨＤＣ）およびＳＣＳＩプロトコルコントローラ（ＳＰＣ）
７１６ サーボコントローラ
７１７ リードライトチャネル
８００ 従来技術による記録フォーマット
８１０ 本発明による記録フォーマット
１６０１ パス名の入力部
１６０２ パス名に対応した解析結果表示の指示ボタン
１６０３ メタ情報の差分表示部
１６０４ ブロックの差分表示部
１６０５ ファイルの差分表示部
１６０６ ブロック選択クリアボタン
１６０７ データ無効化の指示ボタン
１６１０ ディレクトリ操作表示部
１６１１ ディレクトリ操作の種別表示部
１６１２ ディレクトリ操作の外部時間表示部
１６１３ ディレクトリ操作の内部時間表示部
１６１４ ディレクトリ操作の選択
１６２０ ファイルのコンテンツを記録したブロックの表示部
１６２１ ファイルのコンテンツを記録したブロックのＬＢＡの表示部
１６２２ フィルのコンテンツを記録したブロックのＬＢＡの時間遷移表示部
１６２３ ファイルを構成するブロックのＬＢＡの選択
１７０１ ホスト
１７０２ コンソール
１７１０ ディスク装置
１７１１ ディスク装置のコントローラ
１７１２ ディスク装置の記憶媒体
２０００ ディレクトリ状態遷移リポジトリ
２１００ ファイル状態遷移リポジトリ
２２００ ＬＢＡ状態遷移リポジトリ
２３００ コンソールの表示例
２４００ ＬＢＡ状態遷移リポジトリ
【図１】
2005346564.tif 000003
【図２】
2005346564.tif 000004
【図３】
2005346564.tif 000005
【図４】
2005346564.tif 000006
【図５】
2005346564.tif 000007
【図６】
2005346564.tif 000008
【図７】
2005346564.tif 000009
【図８】
2005346564.tif 000010
【図９】
2005346564.tif 000011
【図１０】
2005346564.tif 000012
【図１１】
2005346564.tif 000013
【図１２】
2005346564.tif 000014
【図１３】
2005346564.tif 000015
【図１４】
2005346564.tif 000016
【図１５】
2005346564.tif 000017
【図１６】
2005346564.tif 000018
【図１７】
2005346564.tif 000019
【図１８】
2005346564.tif 000020
【図１９】
2005346564.tif 000021
【図２０】
2005346564.tif 000022
【図２１】
2005346564.tif 000023
【図２２】
2005346564.tif 000024
【図２３】
2005346564.tif 000025
【図２４】
2005346564.tif 000026
【図２５】
2005346564.tif 000027