(57)【特許請求の範囲】
【請求項１】
所定の一方向ハッシュ関数を用いて、対象ディスクに格納されるデータのハッシュ値を生成するハッシュ値生成プログラムにおいて、
コンピュータを、
前記対象ディスクを固定長のセグメントに分割するセグメント分割手段、
前記セグメント分割手段によって分割された前記セグメントごとに、前記セグメントの全データ列に前記一方向ハッシュ関数を適用して、セグメント別ハッシュ値を算出する第１のハッシュ値算出手段、
前記第１のハッシュ値算出手段によって算出された前記セグメント別ハッシュ値を前記対象ディスクに格納されるデータのデータ順に応じたセグメント順に並べ、前記セグメント別ハッシュ値に前記一方向ハッシュ関数を適用して全体のハッシュ値を算出する第２のハッシュ値算出手段、
所定のタイミングで前記第２のハッシュ値算出手段によって算出された前記全体のハッシュ値と、必要に応じて前記セグメントのサイズと前記一方向ハッシュ関数とを保存しておき、以後の処理において検証の必要がある場合は、保存された前記セグメントのサイズと前記一方向ハッシュ関数を用いて前記第１のハッシュ値算出手段及び前記第２のハッシュ値算出手段とによって前記全体のハッシュ値を再度算出し、保存された前記全体のハッシュ値と照合して一致しているかどうかを検証する検証手段、
として機能させることを特徴とするハッシュ値生成プログラム。
【請求項２】
前記第１のハッシュ値算出手段として、
分割された前記セグメントを並列に動作可能な複数のハッシュ値計算手段に割り当て、割り当てた前記セグメントの全体データ列に対する前記セグメント別ハッシュ値を前記ハッシュ値計算手段に算出させる、
処理を実行させることを特徴とする請求項１記載のハッシュ値生成プログラム。
【請求項３】
仮想の論理ディスクのデータがセグメント単位で複数のストレージモジュールに分散格納されるストレージシステムを管理するストレージ管理プログラムにおいて、
コンピュータを、
前記セグメント単位を固定長とし、前記ストレージモジュールごとに具備される前記ストレージモジュールが分散格納する前記セグメントの全データ列に一方向ハッシュ関数を適用して、セグメント別ハッシュ値を算出させる第１のハッシュ値算出手段を制御し、前記第１のハッシュ値算出手段に前記セグメント別ハッシュ値を算出させる制御手段、
前記ストレージモジュールの前記第１のハッシュ値算出手段によって算出された前記セグメント別ハッシュ値を取得し、前記セグメント別ハッシュ値を前記論理ディスクのデータのデータ順に応じたセグメント順に並べ、前記一方向ハッシュ関数を適用して前記論理ディスク全体のハッシュ値を算出する第２のハッシュ値算出手段、
として機能させ、
前記制御手段は、前記論理ディスクのメタ情報として記述されるデータ定義に基づき、前記ストレージモジュールに割り当てられた前記セグメントを検索し、前記第１のハッシュ値算出手段に検索された前記セグメントのハッシュ計算を指示する、
ことを特徴とするストレージ管理プログラム。
【請求項４】
前記制御手段として、
前記ストレージモジュールの前記第１のハッシュ値算出手段に対して、順次計算指示を行って、複数の前記ストレージモジュールの前記第１のハッシュ値算出手段を並列動作させる、
処理を実行させることを特徴とする請求項３記載のストレージ管理プログラム。
【請求項５】
前記制御手段として、
前記第２のハッシュ値算出手段により算出されたハッシュ値と、前記セグメントのサイズと、適用された前記一方向ハッシュ関数とを、ネットワークを介して接続する外部装置から参照可能とする、
処理を実行させることを特徴とする請求項３記載のストレージ管理プログラム。
【請求項６】
前記制御手段として、ネットワークを介して接続する外部装置から要求があった場合は、要求のあった前記論理ディスクに対応する前記ストレージモジュールの前記第１のハッシュ値算出手段と、前記第２のハッシュ値算出手段を制御して要求された前記論理ディスク全体のハッシュ値を算出させ、要求した前記外部装置に算出された前記論理ディスク全体のハッシュ値を送信する、
処理を実行させることを特徴とする請求項３記載のストレージ管理プログラム。
【請求項７】
仮想の論理ディスクのデータがセグメント単位で複数のストレージモジュールに分散格納されるストレージシステムを管理するストレージ管理プログラムにおいて、
コンピュータを、
前記セグメント単位を固定長とし、前記ストレージモジュールごとに具備される前記ストレージモジュールが分散格納する前記セグメントの全データ列に一方向ハッシュ関数を適用して、セグメント別ハッシュ値を算出させる第１のハッシュ値算出手段を制御し、前記第１のハッシュ値算出手段に前記セグメント別ハッシュ値を算出させる制御手段、
前記ストレージモジュールの前記第１のハッシュ値算出手段によって算出された前記セグメント別ハッシュ値を取得し、前記セグメント別ハッシュ値を前記論理ディスクのデータのデータ順に応じたセグメント順に並べ、前記一方向ハッシュ関数を適用して前記論理ディスク全体のハッシュ値を算出する第２のハッシュ値算出手段、
所定のタイミングで前記第２のハッシュ値算出手段によって算出された前記全体のハッシュ値と、必要に応じて前記セグメントのサイズと前記一方向ハッシュ関数とを保存しておき、以後の処理において検証の必要がある場合には、前記制御手段に指示して、再度ハッシュ計算を実行させ、再度算出された前記全体のハッシュ値と、保存しておいた前記全体のハッシュ値とを照合し、一致しているかどうかを検証する検証手段、
として機能させることを特徴とするストレージ管理プログラム。
【請求項８】
記憶装置に記憶された記憶データを所定長のデータに分割して得られる複数の分割データのそれぞれについて所定の一方向ハッシュ関数を適用して、前記複数の分割データのそれぞれについてのハッシュ値を算出し、算出した前記複数の分割データのそれぞれについてのハッシュ値を所定の順に配置して得られるデータについて前記所定の一方向ハッシュ関数を適用して算出した第１のハッシュ値を記憶手段に記憶させ、
前記記憶装置に記憶された前記記憶データに変更がなされたか否かを判定する際に、判定対象の記憶データを前記所定長のデータに分割して得られた複数の分割データのそれぞれについて前記所定の一方向ハッシュ関数を適用して、前記複数の分割データのそれぞれについてのハッシュ値を算出し、算出した前記複数の分割データのそれぞれについてのハッシュ値を前記所定の順に配置して得られるデータについて前記所定の一方向ハッシュ関数を適用して算出した第２のハッシュ値と、前記記憶手段に記憶させた前記第１のハッシュ値とが一致するか否か判定することで、前記記憶データに変更がなされたか否かの判定を行う、
処理をコンピュータに実行させることを特徴とする判定プログラム。
【請求項９】
記憶装置に記憶された記憶データを所定長のデータに分割して得られる複数の分割データのそれぞれについて所定の一方向ハッシュ関数を適用して、前記複数の分割データのそれぞれについてのハッシュ値を算出し、算出した前記複数の分割データのそれぞれについてのハッシュ値を所定の順に配置して得られるデータについて前記所定の一方向ハッシュ関数を適用して算出した第１のハッシュ値を記憶する記憶手段と、
前記記憶装置に記憶された前記記憶データに変更がなされたか否かを判定する際に、判定対象の記憶データを前記所定長のデータに分割して得られた複数の分割データのそれぞれについて前記所定の一方向ハッシュ関数を適用して、前記複数の分割データのそれぞれについてのハッシュ値を算出し、算出した前記複数の分割データのそれぞれについてのハッシュ値を前記所定の順に配置して得られるデータについて前記所定の一方向ハッシュ関数を適用して算出した第２のハッシュ値と、前記記憶手段に記憶された前記第１のハッシュ値とが一致するか否か判定することで、前記記憶データに変更がなされたか否かの判定を行う検証手段と、
を備えたことを特徴とするデータ変更検証装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はハッシュ値生成プログラム、ストレージ管理プログラム、判定プログラム及びデータ変更検証装置に関し、特に所定の一方向ハッシュ関数を用いて、対象ディスクに格納されるデータのハッシュ値を生成するハッシュ値生成プログラムと、仮想の論理ディスクのデータをストレージに格納し、このハッシュ値を用いてデータを管理するストレージ管理プログラム及びストレージシステムとに関する。
【背景技術】
【０００２】
従来、ストレージシステムは、ｅ−文書法準拠文書、電子メールアーカイブ、映像データ、研究開発実験データ、医療カルテなど、様々な場所で大量に発生するデータを蓄積するとともに、その運用管理を行ってきた。近年、利用範囲の拡大や情報量の増大が続いており、記憶容量の大容量化とともに、安定したサービスの提供や信頼性、セキュリティへの対応が求められている。
【０００３】
図９は、従来のストレージシステムの構成の一例を示した概略図である。
図の例のストレージシステムは、各々が独立して入出力処理を行って自装置内のストレージにデータを格納するモジュール１（９２０）、モジュール２（９３０）、及びモジュール３（９４０）が、ネットワーク９１０を介して接続している。このような構成のストレージシステムでは、実際には、モジュール１（９２０）、モジュール２（９３０）、及びモジュール３（９３０）に分散配置されるデータを、仮想的な論理ディスク９００としてユーザに提供する。図の例では、ユーザに提供される論理ディスク９００は、５つのセグメントＳ１、Ｓ２、Ｓ３、Ｓ４、Ｓ５に分割され、モジュール１（９２０）のＳ１領域（９２１）とＳ５領域（９２２）、モジュール２（９３０）のＳ２領域（９３１）とＳ４領域（９３２）、及びモジュール３（９４０）のＳ３領域（９４１）に分散して格納される。
【０００４】
このようなプロセッサと外部記憶装置から成る処理装置をネットワーク上に階層的に配置した環境において、データの入出力処理の効率化を図るため、データベースのテーブルをユーザが指定した方法で分割して配置することによって、データの均一な分配と、分割方式に応じたデータ検索を可能とするシステムが提案されている（たとえば、特許文献１参照）。
【０００５】
また、データベースのテーブルを特定フィールドのインデックスを用いてブロックに分割し、各ブロックのテーブルを転置ファイルとして構成するシステムも提案されている（たとえば、特許文献２参照）。
【特許文献１】特開２０００−３４７９１１号公報（段落番号〔００２９〕〜〔００３９〕、第５〜９図）
【特許文献２】特開２００１−４３２３７号公報（段落番号〔００２７〕〜〔００２８〕、第９図）
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ところで、ストレージシステムに格納される情報の中には、たとえば、一定期間の保管が義務付けられているｅ−文書法準拠文書など、読み出すことは許可しても書き込みを許可しないという使い方（以下、リード・オンリーとする）がされるものがある。ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）やＤＶＤ−ＲＯＭ（Digital Versatile Disc Read Only Memory）など、物理的に書き込みができない媒体であれば無改ざんを保証する必要はない。しかしながら、ストレージシステムは、ハードディスク装置（Hard Disk Drive）などで構成されており、システム的に書き込みを禁止することはできるが、物理的には書き換えが可能である。したがって、無改ざんの証明が必要になる。
【０００７】
無改ざんの証明では、まず、データを保管する際などに、論理ディスク９００の全データ（Ｘ）に対し、ハッシュ関数Ｈによる演算を行ってハッシュ値Ｈ［Ｘ］を算出しておく。算出したハッシュ値Ｈ［Ｘ］は、記憶装置に保存しておく。また、ハッシュ値とハッシュ関数を公開しておいてもよい。そして、監査時、あるいは、データを利用する場合などに、その時点の論理ディスク９００の全データ（Ｘ’）に対し、一方向性ハッシュ関数（Ｈ）による演算を行って、ハッシュ値Ｈ（Ｘ’）を算出する。こうして得られたハッシュ値Ｈ（Ｘ’）と、保管前に算出しておいたハッシュ値Ｈ［Ｘ］とを照合する。Ｈ［Ｘ］＝Ｈ（Ｘ’）であれば、Ｘ＝Ｘ’（無改ざん）を証明することができる。処理は、データを利用するサーバなどの他装置が、公開されたハッシュ値とハッシュ関数を用いて行ってもよい。
【０００８】
上述のように、ストレージシステムでは、データの大容量化が進んでおり、特許文献１及び特許文献２に記載されているように、データの入出力処理の効率化のための手法が提案されてきた。しかしながら、ハッシュ値の算出は、論理ディスク９００の全データを対象とし、一括して計算が行われてきた。このため、データの大容量化に伴って処理時間が増大し、運用上問題となっていた。
【０００９】
なお、分散配置されるストレージの論理ディスク９００ばかりでなく、１台のストレージに全データが格納される場合でも同様であり、データサイズによっては、ハッシュ値生成に要する時間が運用上問題となっていた。
【００１０】
本発明はこのような点に鑑みてなされたものであり、ハッシュ値算出の処理時間の短縮が可能なハッシュ値生成プログラム、ストレージ管理プログラム、判定プログラム及びデータ変更検証装置を提供することを目的とする。
【課題を解決するための手段】
【００１１】
所定の一方向ハッシュ関数を用いて、対象ディスクに格納されるデータのハッシュ値を生成するハッシュ値生成プログラムにおいて、コンピュータを、前記対象ディスクを固定長のセグメントに分割するセグメント分割手段、前記セグメント分割手段によって分割された前記セグメントごとに、前記セグメントの全データ列に前記一方向ハッシュ関数を適用して、セグメント別ハッシュ値を算出する第１のハッシュ値算出手段、前記第１のハッシュ値算出手段によって算出された前記セグメント別ハッシュ値を前記対象ディスクに格納されるデータのデータ順に応じたセグメント順に並べ、前記セグメント別ハッシュ値に前記一方向ハッシュ関数を適用して全体のハッシュ値を算出する第２のハッシュ値算出手段、所定のタイミングで前記第２のハッシュ値算出手段によって算出された前記全体のハッシュ値と、必要に応じて前記セグメントのサイズと前記一方向ハッシュ関数とを保存しておき、以後の処理において検証の必要がある場合は、保存された前記セグメントのサイズと前記一方向ハッシュ関数を用いて前記第１のハッシュ値算出手段及び前記第２のハッシュ値算出手段とによって前記全体のハッシュ値を再度算出し、保存された前記全体のハッシュ値と照合して一致しているかどうかを検証する検証手段、として機能させることを特徴とするハッシュ値生成プログラムが提供される。
【００１２】
また、仮想の論理ディスクのデータがセグメント単位で複数のストレージモジュールに分散格納されるストレージシステムを管理するストレージ管理プログラムにおいて、コンピュータを、前記セグメント単位を固定長とし、前記ストレージモジュールごとに具備される前記ストレージモジュールが分散格納する前記セグメントの全データ列に一方向ハッシュ関数を適用して、セグメント別ハッシュ値を算出させる第１のハッシュ値算出手段を制御し、前記第１のハッシュ値算出手段に前記セグメント別ハッシュ値を算出させる制御手段、前記ストレージモジュールの前記第１のハッシュ値算出手段によって算出された前記セグメント別ハッシュ値を取得し、前記セグメント別ハッシュ値を前記論理ディスクのデータのデータ順に応じたセグメント順に並べ、前記一方向ハッシュ関数を適用して前記論理ディスク全体のハッシュ値を算出する第２のハッシュ値算出手段、として機能させ、前記制御手段は、前記論理ディスクのメタ情報として記述されるデータ定義に基づき、前記ストレージモジュールに割り当てられた前記セグメントを検索し、前記第１のハッシュ値算出手段に検索された前記セグメントのハッシュ計算を指示する、ことを特徴とするストレージ管理プログラムが提供される。
【００１３】
また、仮想の論理ディスクのデータがセグメント単位で複数のストレージモジュールに分散格納されるストレージシステムを管理するストレージ管理プログラムにおいて、コンピュータを、前記セグメント単位を固定長とし、前記ストレージモジュールごとに具備される前記ストレージモジュールが分散格納する前記セグメントの全データ列に一方向ハッシュ関数を適用して、セグメント別ハッシュ値を算出させる第１のハッシュ値算出手段を制御し、前記第１のハッシュ値算出手段に前記セグメント別ハッシュ値を算出させる制御手段、前記ストレージモジュールの前記第１のハッシュ値算出手段によって算出された前記セグメント別ハッシュ値を取得し、前記セグメント別ハッシュ値を前記論理ディスクのデータのデータ順に応じたセグメント順に並べ、前記一方向ハッシュ関数を適用して前記論理ディスク全体のハッシュ値を算出する第２のハッシュ値算出手段、所定のタイミングで前記第２のハッシュ値算出手段によって算出された前記全体のハッシュ値と、必要に応じて前記セグメントのサイズと前記一方向ハッシュ関数とを保存しておき、以後の処理において検証の必要がある場合には、前記制御手段に指示して、再度ハッシュ計算を実行させ、再度算出された前記全体のハッシュ値と、保存しておいた前記全体のハッシュ値とを照合し、一致しているかどうかを検証する検証手段、として機能させることを特徴とするストレージ管理プログラムが提供される。
【００１４】
また、記憶装置に記憶された記憶データを所定長のデータに分割して得られる複数の分割データのそれぞれについて所定の一方向ハッシュ関数を適用して、前記複数の分割データのそれぞれについてのハッシュ値を算出し、算出した前記複数の分割データのそれぞれについてのハッシュ値を所定の順に配置して得られるデータについて前記所定の一方向ハッシュ関数を適用して算出した第１のハッシュ値を記憶手段に記憶させ、前記記憶装置に記憶された前記記憶データに変更がなされたか否かを判定する際に、判定対象の記憶データを前記所定長のデータに分割して得られた複数の分割データのそれぞれについて前記所定の一方向ハッシュ関数を適用して、前記複数の分割データのそれぞれについてのハッシュ値を算出し、算出した前記複数の分割データのそれぞれについてのハッシュ値を前記所定の順に配置して得られるデータについて前記所定の一方向ハッシュ関数を適用して算出した第２のハッシュ値と、前記記憶手段に記憶させた前記第１のハッシュ値とが一致するか否か判定することで、前記記憶データに変更がなされたか否かの判定を行う、処理をコンピュータに実行させることを特徴とする判定プログラムが提供される。
【００１５】
また、記憶装置に記憶された記憶データを所定長のデータに分割して得られる複数の分割データのそれぞれについて所定の一方向ハッシュ関数を適用して、前記複数の分割データのそれぞれについてのハッシュ値を算出し、算出した前記複数の分割データのそれぞれについてのハッシュ値を所定の順に配置して得られるデータについて前記所定の一方向ハッシュ関数を適用して算出した第１のハッシュ値を記憶する記憶手段と、前記記憶装置に記憶された前記記憶データに変更がなされたか否かを判定する際に、判定対象の記憶データを前記所定長のデータに分割して得られた複数の分割データのそれぞれについて前記所定の一方向ハッシュ関数を適用して、前記複数の分割データのそれぞれについてのハッシュ値を算出し、算出した前記複数の分割データのそれぞれについてのハッシュ値を前記所定の順に配置して得られるデータについて前記所定の一方向ハッシュ関数を適用して算出した第２のハッシュ値と、前記記憶手段に記憶された前記第１のハッシュ値とが一致するか否か判定することで、前記記憶データに変更がなされたか否かの判定を行う検証手段と、を備えたことを特徴とするデータ変更検証装置が提供される。
【発明の効果】
【００１６】
本発明では、対象ディスクを固定長のセグメントに分割し、分割したセグメントごとに一方向ハッシュ関数をその全データ列に適用してセグメント別ハッシュ値を算出し、セグメント別ハッシュ値を対象ディスクのデータ順に応じて並べ、再度一方向ハッシュ関数を適用して全体のハッシュ値を算出する。たとえば、セグメント別ハッシュ値の算出を並列に動作が可能なハッシュ値計算手段で実行すれば、ハッシュ値算出に要する時間を短縮することができる。特に、対象ディスクのデータサイズが増大した場合であっても、並列計算を行うため、全体の処理速度を低下させることがない。
【発明を実施するための最良の形態】
【００１７】
以下、本発明の実施の形態を図面を参照して説明する。まず、実施の形態に適用される発明の概念について説明し、その後、実施の形態の具体的な内容を説明する。
図１は、実施の形態に適用される発明の概念図である。
【００１８】
本発明に係るハッシュ値生成装置１は、対象ディスク２をセグメントに分割するセグメント分割手段１ａ、セグメント別のハッシュ値を算出する第１のハッシュ値算出手段１ｂ、全体のハッシュ値を算出する第２のハッシュ値算出手段１ｃ、及びハッシュ値を用いた検証を行う検証手段１ｄを具備し、対象ディスク２に格納されるデータに対して、一方向性ハッシュ関数（以下、一方向性ハッシュ関数を単にハッシュ関数と表記する）に基づくハッシュ値３ａを生成する。各処理手段は、コンピュータが、ハッシュ値生成プログラムを実行することにより実現する。
【００１９】
なお、一方向性ハッシュ関数Ｈ［Ｘ］とは、
１．あるｘに対して、Ｈ［ｘ］＝Ｈ［ｙ］を満たすｙ（ｘ≠ｙ）を発見することが困難、
２．Ｈ［ｘ］＝Ｈ［ｙ］を満たすｘ，ｙ（ｘ≠ｙ）を発見することが困難、
３．Ｈ［ｘ］からｘを逆算することが極めて困難、
を満たす関数をいう。一方向性ハッシュ関数として、いくつかの関数が知られており、本発明では、適用するシステムに応じて、そのうちの任意の一方向性ハッシュ関数を選択する。
【００２０】
セグメント分割手段１ａは、対象ディスク２を固定長のｎ個（ｎは任意の整数）のセグメントに分割し、第１のハッシュ値算出手段１ｂへ通知する。なお、対象ディスク２は、ハッシュ値算出対象のデータを格納するメモリ領域が設定される記憶装置であり、物理的なメモリ、もしくは仮想的なメモリ機構によって生成される仮想メモリで構成される。
【００２１】
第１のハッシュ値算出手段１ｂは、並列に動作可能な計算部１（１１ｂ）、計算部２（１２ｂ）、・・・、計算部ｍ（１３ｂ）を具備する。なお、ｍは任意の整数であり、セグメント数ｎと同じ値である必要はない。計算部は、各々指定されたセグメントのデータ列に対し、共通のハッシュ関数Ｈ［Ｘ］を用いて計算を行い、セグメント別ハッシュ値Ｈ［Ｓ］を生成する。どのセグメントのデータをどの計算部が実行するかは、図示しない制御部が判断し、計算部には、たとえば、セグメントまたはセグメントの開始アドレスと、データサイズが指示される。指示を受けた計算部は、対象のセグメントデータ列を読み出し、セグメント別ハッシュ値を算出する。図の例では、計算部１（１１ｂ）には、まず、セグメントＳ１（２１）に対する計算が指示されてＨ［Ｓ１］３１が生成される。続いて、セグメントＳ２（２２）に対する計算が指示され、Ｈ［Ｓ２］３２が生成される。指示は、一括して行われ、指示を解釈した計算部１（１１ｂ）が処理を順次実行するとしてもよい。同様に、計算部２（１２ｂ）には、セグメントＳ３（２３）に対する計算指示が行われ、Ｈ［Ｓ３］３３が生成される。また、計算部ｍ（１３ｂ）にはセグメントＳｎ（２４）に対する計算指示が行われ、Ｈ［Ｓｎ］３４が生成される。制御部は、セグメント分割手段１ａ、または第１のハッシュ値算出手段１ｂなど、ハッシュ値生成装置１内に任意に設けられる。生成したセグメント別ハッシュ値Ｈ［Ｓ１］３１、Ｈ［Ｓ２］３２、Ｈ［Ｓ３］３３、・・・、Ｈ［Ｓｎ］３４は、第２のハッシュ値算出手段１ｃへ出力する。
【００２２】
第２のハッシュ値算出手段１ｃは、第１のハッシュ値算出手段１ｂが算出したセグメント別ハッシュ値Ｈ［Ｓ］を、対象ディスク２に格納されるデータのデータ順に並べる。図の例では、セグメント別ハッシュ値Ｈ［Ｓ１］３１、Ｈ［Ｓ２］３２、Ｈ［Ｓ３］３３、・・・、Ｈ［Ｓｎ］３４の順に並べられる。こうして並べられたセグメント別ハッシュ値Ｈ［Ｓ］に対し、再度ハッシュ関数を用いて計算を行い、全体のハッシュ値を得る。図の例では、セグメント別ハッシュ値Ｈ［Ｓ１］３１、Ｈ［Ｓ２］３２、Ｈ［Ｓ３］３３、・・・、Ｈ［Ｓｎ］３４から、全体のハッシュ値Ｈ［Ｈ［Ｓ１］、・・・、Ｈ［Ｓｎ］］３ａを得る。
【００２３】
このように、第１のハッシュ値算出手段１ｂ及び第２のハッシュ値算出手段１ｃとの２段階のハッシュ演算によって得られる全体のハッシュ値（ＨＨ［Ｘ］とする）は、従来の対象ディスク２全体のデータ列に対してハッシュ関数を適用して得られるハッシュ値（Ｈ［Ｘ］とする）と値が異なるが、一方向性は保持される。また、セグメントサイズを固定とし、上記のような２段階のハッシュ演算を行った場合のハッシュ値ＨＨ［Ｘ］は、データが改ざんされていなければ、常に同じ値となる。したがって、セグメントサイズを固定長とすれば、ＨＨ［Ｘ］をＨ［Ｘ］と同様に取り扱うことができる。そこで、データ登録時に算出したＨＨ［Ｘ］と、監査時に算出したＨＨ［Ｘ’］とを照合し、ＨＨ［Ｘ］＝ＨＨ［Ｘ’］であれば、Ｘ＝Ｘ’であること、すなわち、無改ざんを証明することができる。
【００２４】
検証手段１ｄは、所定のタイミング、たとえば、対象ディスク２にデータが登録された時点や対象ディスク２への書き込みを不可とした時点などに、第１のハッシュ値算出手段１ｂ及び第２のハッシュ値算出手段によって算出された全体のハッシュ値を記憶手段に保存しておく。この保存したハッシュ値を、Ｈ［Ｈ［Ｓ”１］、・・・、Ｈ［Ｓ”ｎ］］３ｂとしておく。このとき、必要であれば、算出時のセグメントのサイズとハッシュ関数とも記憶手段にともに保存しておく。そして、これ以降の任意の時点、たとえば、監査要求時など、検証の必要が生じた場合は、対象ディスク２について、セグメント分割手段１ａ、第１のハッシュ値算出手段１ｂ、及び第２のハッシュ値算出手段１ｃを用いて、対象ディスク２の全体のハッシュ値３ａを算出する。必要であれば、記憶しておいたハッシュ関数と、セグメントのサイズを参照して計算を行う。そして、得られた全体のハッシュ値３ａと、記憶手段に格納しておいた全体のハッシュ値３ｂとを照合し、一致しているかどうかを検証する。一致している場合は、対象ディスク２は、全体のハッシュ値３ｂを登録した時点と同じ、すなわち、無改ざんであることが証明される。不一致の場合は、対象ディスク２は、改ざんされたことがわかる。
【００２５】
このような構成のハッシュ値生成装置１の動作について説明する。
ハッシュ値生成装置１に対して対象ディスク２が指示されると、セグメント分割手段１ａが対象ディスク２を固定長のセグメントに分割する。第１のハッシュ値算出手段１ｂは、並列に動作する計算部１（１１ｂ）、計算部２（１２ｂ）、・・・計算部ｍ（１３ｂ）が、それぞれ割り当てられたセグメントのデータ列Ｓ１（２１）、Ｓ２（２２）、Ｓ３（２３）、・・・、Ｓｎ（２４）を読み出し、ハッシュ関数Ｈ［Ｘ］を適用してセグメント別ハッシュ値Ｈ［Ｓ１］３１、Ｈ［Ｓ２］３２、Ｈ［Ｓ３］３３、・・・、Ｈ［Ｓｎ］３４を算出する。そして、第２のハッシュ値算出手段１ｃは、第１のハッシュ値算出手段１ｂが算出したセグメント別ハッシュ値Ｈ［Ｓ１］３１、Ｈ［Ｓ２］３２、Ｈ［Ｓ３］３３、・・・、Ｈ［Ｓｎ］３４に対して再度ハッシュ関数を適用し、全体のハッシュ値Ｈ［Ｈ［Ｓ１］、・・・、Ｈ［Ｓｎ］］３ａを算出する。検証手段１ｄは、所定のタイミングで算出された全体のハッシュ値Ｈ［Ｈ［Ｓ１］、・・・、Ｈ［Ｓｎ］］３ａを記憶手段に記憶しておく。これを全体のハッシュ値（保存データ）Ｈ［Ｈ［Ｓ”１］、・・・、Ｈ［Ｓ”ｎ］］３ｂとする。また、必要に応じて、適用したハッシュ関数と分割されたセグメントのセグメントサイズも保存しておく。そして、以降の任意の時点で対象ディスク２の検証が必要となった場合は、同一のセグメントサイズとハッシュ関数で再度算出された対象ディスク２の全体のハッシュ値３ａと、保存されていた全体のハッシュ値３ｂとを照合し、一致しているかどうかを判定する。一致している場合には、対象ディスク２は、全体のハッシュ値３ｂを保存した時点のデータと同一であることが証明される。一致していない場合は、対象ディスク２は書き換えられていることがわかる。
【００２６】
このように、第１のハッシュ値算出手段１ｂにおいて、複数の計算部でセグメントごとに並列計算を行うため、対象ディスク２全体のデータ列に対してハッシュ計算を行う場合に比べ、高速に処理を行うことが可能となる。
【００２７】
また、所定のタイミングで対象ディスク２のハッシュ値を算出して保存しておき、以降の任意の時点で検証が必要な場合に再度ハッシュ値を算出して照合すれば、対象ディスク２が無改ざんであるかどうかが検証できる。
【００２８】
なお、上記の説明では、第１のハッシュ値算出手段１ｂによるセグメント別ハッシュ値を並列に動作可能な複数の計算部で並列計算するとしたが、１つのプロセッサでセグメントごとに順次ハッシュ値を算出するとしても、同じＨＨ［Ｘ］を得ることができる。したがって、複数の並列動作可能な計算部を有しない装置、たとえば、データ利用側のホストコンピュータにおいてもＨＨ［Ｘ］を算出し、利用することができる。
【００２９】
ところで、ユーザに提供する仮想的な論理ディスクのデータを複数のモジュールに分散格納するストレージシステムでは、既に論理ディスクがセグメントに分割され、各々のモジュールにセグメントが割り当てられる構成となっている。そこで、このようなストレージシステムに本発明を適用する場合には、セグメントサイズを固定とすれば、セグメント分割手段１ａは、省略できる。また、第１のハッシュ値算出手段１ｂを構成する計算部は、モジュールごとに設ければよく、本発明を容易に適用することができる。以下、実施の形態を、論理ディスクに格納されるデータを複数のモジュールに分散格納するストレージシステムに適用した場合を例に図面を参照して詳細に説明する。
【００３０】
図２は、本発明の実施の形態のストレージシステムの構成を示した構成図である。
本発明の実施の形態のストレージシステム１００は、様々なデータの保管管理を行っており、ネットワーク３００を介して接続するサーバＡ（２０１）、サーバＢ（２０２）、ＰＣ（Personal Computer）２０３などからの要求に応じて格納するデータの提供などのサービスを行う。ストレージシステム１００には、サーバＡ（２０１）、サーバＢ（２０２）、及びＰＣ２０３に対し、それぞれが使用可能な論理ディスク４００が用意されており、サーバＡ（２０１）、サーバＢ（２０２）、及びＰＣ２０３は、この論理ディスク４００に対してアクセス要求を行う。論理ディスク４００は、ユーザに提供するメモリ空間を、仮想的なメモリ機構によって生成した仮想的なメモリ領域である。
【００３１】
ストレージシステム１００は、全体の管理を行うストレージ管理装置１１０と、独立して動作可能なストレージモジュール１（１２０）、ストレージモジュール２（１３０）、ストレージモジュール３（１４０）、ストレージモジュール４（１５０）、・・・、ストレージモジュールｎ（１６０）とを具備する。
【００３２】
ストレージモジュール１（１２０）、ストレージモジュール２（１３０）、ストレージモジュール３（１４０）、ストレージモジュール４（１５０）、・・・、ストレージモジュールｎ（１６０）は、それぞれ記憶装置１２１、１３１、１４１、１５１、・・・、１６１と、プロセッサを具備する。以下、特に限定する必要がない場合は、ストレージモジュール、記憶装置と表記する。各ストレージモジュールは、論理ディスク４００のデータを固定長のセグメント単位で格納するとともに、ストレージ管理装置１１０に従って、または、自律的にデータの入出力処理を行う。また、ストレージ管理装置１１０とは、所定のネットワーク（図示せず）を介して接続しており、ストレージ管理装置１１０の要求するタイミングで、セグメント別ハッシュ値の算出処理を実行する。図の例では、論理ディスク４００は、Ｓ１からＳ５の５つのセグメントに分割され、セグメントごとに、いずれか選択されたストレージモジュールの記憶装置に格納される。
【００３３】
ストレージ管理装置１１０は、ストレージモジュールを管理しており、各ストレージモジュールに格納されるデータの運用管理とともに、障害の監視や定期的な監査などを行う。処理の詳細は後述する。
【００３４】
ここで、ストレージ管理装置１１０のハードウェア構成について説明する。図３は、本実施の形態のストレージ管理装置のハードウェア構成例を示すブロック図である。
ストレージ管理装置１１０は、ＣＰＵ（Central Processing Unit）１１１によって装置全体が制御されている。ＣＰＵ１１１には、バス１１７を介してＲＡＭ（Random Access Memory）１１２、ＨＤＤ（Hard Disk Drive）１１３、グラフィック処理装置１１４、入力インタフェース１１５、通信インタフェース１１６が接続されている。
【００３５】
ＲＡＭ１１２には、ＣＰＵ１１１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１１２には、ＣＰＵ１１１による処理に必要な各種データが格納される。ＨＤＤ１１３には、ＯＳやアプリケーションのプログラムが格納される。グラフィック処理装置１１４には、モニタ１１８が接続されており、ＣＰＵ１１１からの命令に従って画像をモニタ１１８の画面に表示させる。入力インタフェース１１５には、キーボード１１９ａやマウス１１９ｂが接続されており、キーボード１１９ａやマウス１１９ｂから送られてくる信号を、バス１１７を介してＣＰＵ１１１に送信する。通信インタフェース１１６は、ネットワーク３００に接続されており、ネットワーク３００を介してサーバＡ（２０１）、Ｂ（２０２）やＰＣ２０３との間でデータの送受信を行う。
【００３６】
このようなハードウェア構成によって、本実施の形態の処理機能を実現することができる。なお、図３では、モニタ１１８、キーボード１１９ａ、マウス１１９ｂが直接ストレージ管理装置１１０に接続するとしたが、ストレージ管理装置１１０が、モニタ１１８、キーボード１１９ａ、マウス１１９ｂを具備する通信端末とネットワーク３００を介して接続する構成としてもよい。この場合、たとえば、通信端末のマウス１１９ｂまたはキーボード１１９ａからの入力指示をネットワーク３００経由で取得して処理を行い、ネットワーク３００経由で出力する処理結果が通信端末のモニタ１１８に表示される。
【００３７】
次に、ストレージシステム１００のソフトウェア構成について説明する。
図４は、本実施の形態のストレージシステムのソフトウェア構成例を示す図である。
なお、図４では、ハッシュ算出処理に関連するモジュールのみを表記しており、各ストレージモジュールに分散して格納されるデータの入出力処理を実行する入出力処理モジュールを省略している。データの入出力処理は、たとえば、ストレージ管理装置１１０によって各モジュールへデータの読み書き制御が行われ、各モジュールは指示に従って入出力処理を行うとしてもよい。また、各ストレージモジュールが自律的に入出力処理を実行するとしてもよい。
【００３８】
以下、ハッシュ値算出処理に関連するモジュールについて説明する。
ストレージシステムは、ハッシュ計算制御モジュール５０１と検証モジュール５０２とを有するストレージ管理装置１１０、計算処理モジュール５０３とストレージ１２１とを有するストレージモジュール１（１２０）、計算処理モジュール５０４とストレージ１３１とを有するストレージモジュール２（１３０）、及び計算処理モジュール５０５とストレージ１４１とを有するストレージモジュール３（１４０）を具備する。
【００３９】
ハッシュ計算制御モジュール５０１は、ハッシュ値計算の制御と、論理ディスク４００全体のハッシュ値算出を行う第２のハッシュ値算出手段としての処理を行う。具体的には、ハッシュ計算開始時に、論理ディスク４００のメタ情報を参照して、ストレージモジュール１（１２０）、ストレージモジュール２（１３０）、及びストレージモジュール３（１４０）に対し、それぞれが格納するセグメントごとのハッシュ値を算出するように指示を行う。そして、指示に従ってストレージモジュール１（１２０）、ストレージモジュール２（１３０）、及びストレージモジュール３（１４０）が算出したセグメント別ハッシュ値を受け取り、論理ディスク４００のデータのデータ順に応じたセグメント順でセグメント別ハッシュ値を並べ、再度ハッシュ関数を適用して論理ディスク４００全体のハッシュ値を算出する。
【００４０】
検証モジュール５０２は、検証手段としての処理を行う。具体的には、論理ディスク４００へのデータ書き込みを禁止する時点など、所定のタイミングで、ハッシュ計算制御モジュール５０１に、ハッシュ計算を指示する。そして、ハッシュ計算制御モジュール５０１から取得した論理ディスク４００のハッシュ値を、セグメントサイズとハッシュ関数とともに保存しておく。なお、これらの値を公開し、サーバＡ（２０１）、サーバＢ（２０２）、ＰＣ（２０３）などが利用できるようにしておいてもよい。そして、監査要求を受けたとき、もしくは、所定の監視タイミングでハッシュ計算制御モジュール５０１に対し、論理ディスク４００のハッシュ値算出を指示する。必要であれば、セグメントサイズとハッシュ関数を提供する。ハッシュ計算制御モジュール５０１から再度計算された論理ディスク４００のハッシュ値を取得すると、取得した現時のハッシュ値と、保存しておいたハッシュ値とを比較し、一致しているかどうかによって、改ざんが行われたかどうかを検証する。
【００４１】
ストレージモジュール１（１２０）は、ストレージ１２１に、論理ディスク４００のセグメントＳ１を格納するＳ１領域１２２とセグメントＳ５を格納するＳ５領域１２３を有する。また、計算処理モジュール５０３は、ハッシュ計算制御モジュール５０１の指示に従って、セグメントＳ１とセグメントＳ５それぞれに対し、そのデータ列にハッシュ関数を適用してセグメント別ハッシュ値を算出する。算出したセグメント別ハッシュ値は、ハッシュ計算制御モジュール５０１に出力する。
【００４２】
ストレージモジュール２（１３０）は、ストレージ１３１に論理ディスク４００のセグメントＳ２を格納するＳ２領域１３２と、セグメントＳ４を格納するＳ４領域１３３を有する。また、計算処理モジュール５０４は、計算処理モジュール５０３と同様に、セグメントＳ２とセグメントＳ４のセグメント別ハッシュ値を算出し、ハッシュ計算制御モジュール５０１に出力する。
【００４３】
ストレージモジュール３（１４０）は、ストレージ１４１に論理ディスク４００のセグメントＳ３を格納するＳ３領域１４２を有する。また、計算処理モジュール５０５は、計算処理モジュール５０３と同様に、セグメントＳ３のセグメント別ハッシュ値を算出し、ハッシュ計算制御モジュール５０１に出力する。
【００４４】
なお、上記の説明では、ストレージモジュールを３つとしたが、ストレージモジュールの数は任意である。また、論理ディスク４００は、それぞれのユーザごとに設けられた複数の論理ディスクのうちの１つである。それぞれの論理ディスクは、たとえば、論理ディスクＩＤによって区別される。
【００４５】
このような構成のストレージシステム１００の動作について説明する。
たとえば、論理ディスク４００にデータの書き込みが行われた場合など、検証モジュール５０２から指示に従って、ハッシュ計算制御モジュール５０１が計算処理を開始させる。ハッシュ計算制御モジュール５０１は、論理ディスク４００のメタ情報を参照し、ストレージモジュール１（１２０）に対し、セグメントＳ１とセグメントＳ５のハッシュ値算出を指示する。指示は一括して行っても、また、計算がひとつ終了した後に次の指示を行うようにしてもよい。ストレージモジュール１（１２０）からの応答を待たず、続いて、ストレージモジュール２（１３０）に対し、セグメントＳ２とセグメントＳ４のハッシュ値算出を指示し、ストレージモジュール３（１４０）に対し、セグメントＳ３のハッシュ値算出を指示する。各ストレージモジュールは、指示に従ってセグメントごとにハッシュ値を算出し、応答としてハッシュ計算制御モジュール５０１に算出したセグメント別ハッシュ値を出力する。ハッシュ計算制御モジュール５０１は、ストレージモジュール１（１２０）からセグメントＳ１とセグメントＳ５のハッシュ値、ストレージモジュール２（１３０）からセグメントＳ２とセグメントＳ４のハッシュ値、及びストレージモジュール３（１４０）からセグメントＳ３のハッシュ値を受け取ると、これを論理ディスク４００のセグメント順に並べ、並べられたセグメント別ハッシュ値に対し、再度ハッシュ関数を適用して全体のハッシュ値を算出し、論理ディスク４００のハッシュ値として検証モジュール５０２に出力する。検証モジュール５０２は、論理ディスク４００のハッシュ値と、ハッシュ関数及びセグメントサイズとを、論理ディスク４００に関連付けて保存、または、公開する。公開とは、ネットワークを介して接続する他装置から参照可能とすることで、他装置から要求された場合に、応答として保存したこれらのデータを送信したり、他装置からアクセス可能な記憶装置にこれらのデータを保存しておく。なお、公開しない場合は、必要でなければセグメントサイズまたはハッシュ関数は保存しなくてもよい。
【００４６】
監査時、検証モジュール５０２は、論理ディスク４００に対するハッシュ値算出をハッシュ計算制御モジュール５０１に指示する。指示を行うタイミングは、予め設定された所定の周期ごとに発生させるとしてもよいし、ネットワーク３００を介して接続する外部装置からの指示があったときとしてもよい。そのほか、指示を発生させるイベントは任意に設定することができる。ハッシュ計算制御モジュール５０１は、上記と同様の手順により、現時の論理ディスク４００のハッシュ値を算出し、検証モジュール５０２に出力する。検証モジュール５０２は、取得した論理ディスク４００のハッシュ値と、保存しておいた論理ディスク４００のハッシュ値とを照合し、一致していれば無改ざんを証明する。一致していない場合は、改ざんが行われたと判断する。
【００４７】
このように、本実施の形態では、各ストレージモジュールが並列にハッシュ計算を行うため、計算処理に要する時間を短縮することができる。特に、実施の形態のように、論理ディスクのデータをセグメント単位で複数のストレージモジュールに分散するストレージシステムでは、保管データの増大に伴ってストレージモジュールの数を増やし、大容量化に対応している。したがって、本実施の形態のように、ストレージモジュールごとにハッシュ計算を行うようにすれば、システムが大容量化してもハッシュ値算出処理の時間が増えることはない。この結果、運用上問題となっていた大容量化に伴うハッシュ計算処理の増大を抑制し、システムの大容量化の実現が可能となる。
【００４８】
なお、上記の説明では、検証モジュール５０２によって、データ改ざんの有無を判定するとしたが、システム管理者などによって、直接監査を行うようにすることもできる。この場合、たとえば、システム管理者の端末装置などから、直接ストレージ管理装置１１０のハッシュ計算制御モジュール５０１を起動させ、論理ディスク４００のハッシュ値を得る。得られた論理ディスク４００のハッシュ値は、ハッシュ関数とセグメントサイズとともにシステム管理者が保管管理する。また、これらを公開してもよい。そして、監査時に、同じ手順でハッシュ計算制御モジュール５０１を起動させて論理ディスク４００のハッシュ値を得て、保存しておいた論理ディスク４００のハッシュ値と照合し、判断を行う。
【００４９】
このような手順が実行される場合における本実施の形態のストレージシステムの動作について説明する。
図５は、本実施の形態のストレージシステムの動作を示したフロー図である。図４と同じものには同じ番号を付す。また、図では、図の上方から下方に向かって時間が経過するとしている。
【００５０】
コンソール（管理者またはユーザが指示を入力する操作入力装置）によって管理者またはユーザから指示が入力されると、コンソールからハッシュ計算を行う論理ディスクを特定する論理ディスクＩＤとともに、計算指示６０１がストレージ管理装置１１０のハッシュ計算制御モジュール５０１に入力する。
【００５１】
ハッシュ計算制御モジュール５０１は、計算指示６０１を受け取ると、該当する論理ディスクＩＤのメタ情報を参照し、セグメント検索６１１を行う。そして、検索されたセグメントを保管するストレージモジュールの計算処理モジュールに対し、セグメントＩＤとともに計算指示を行う。図の例では、ストレージモジュール１（１２０）の計算処理モジュール５０３に対する計算指示６０２ａ、ストレージモジュール２（１３０）の計算処理モジュール５０４に対する計算指示６０２ｂ、及びストレージモジュール３（１４０）の計算処理モジュール５０５に対する計算指示６０２ｃが順次出力される。
【００５２】
ストレージモジュール１（１２０）の計算処理モジュール５０３は、計算指示６０２ａにより自装置が保管するセグメントのデータ列に対してハッシュ計算６１２を実行し、算出したハッシュ値６０３ａをハッシュ計算制御モジュール５０１に送る。同様に、ストレージモジュール２（１３０）の計算処理モジュール５０４は、計算指示６０２ｂによりハッシュ計算６１３を行って、算出したハッシュ値６０３ｂをハッシュ計算制御モジュール５０１に送る。ストレージモジュール３（１４０）の計算処理モジュール５０５は、計算指示６０２ｃによりハッシュ計算６１４を行って、算出したハッシュ値６０３ｃをハッシュ計算制御モジュール５０１に送る。このように、ハッシュ計算は、各ストレージモジュールが並列に実行する。
【００５３】
ハッシュ計算制御モジュール５０１は、ハッシュ値６０３ａ、６０３ｂ、６０３ｃを受け取ると、同じハッシュ関数を用いて全体ハッシュ計算６１５を実行し、計算結果（全体のハッシュ値、セグメントサイズ、ハッシュ関数）６０４をコンソールへ出力する。
【００５４】
コンソールは、取得した全体のハッシュ値を保存し、以降の処理の任意の時点で使用する。既に保存してあった場合は、取得したハッシュ値と照合し、改ざんがあったかどうかを調べる。あるいは、公開されているハッシュ値と照合してもよい。
【００５５】
なお、図５は、コンソールから指示を行う場合のフロー図であったが、自装置内の検証モジュール５０２で監査を行う場合は、コンソールからの指示が検証モジュール５０２からの指示となるだけで、ハッシュ計算制御モジュール５０１、計算処理モジュール５０３、計算処理モジュール５０４、及び計算処理モジュール５０５の動作は同じである。
【００５６】
このように、ハッシュ計算制御モジュール５０１は、検証モジュール５０２、あるいは、外部からの指示で、管理下のストレージモジュールに対し、セグメント単位のハッシュ値算出処理を指示する。指示に応じて各ストレージモジュールの計算処理モジュールが各々ハッシュ値計算を行うことによって、ハッシュ計算の並列処理が可能となり、高速処理が可能となる。
【００５７】
次に、ハッシュ計算制御モジュールと各ストレージモジュール（以下、単にモジュールとする）の計算処理モジュールが実行する処理手順について説明する。
まず、ハッシュ計算制御モジュールの処理手順について説明する。図６は、本実施の形態のハッシュ計算制御の処理手順を示したフローチャートである。
【００５８】
［ステップＳ０１］  コンソールなどから、対象の論理ディスクの指定を含む計算指示が入力されると、処理を開始し、次のステップへ処理を進める。
［ステップＳ０２］  入力した論理ディスクの指定に基づき、該当する論理ディスクのメタ情報を読み出し、メタ情報を参照して、対象の論理ディスクのセグメントを検索し、このセグメントのデータがどのモジュールに格納されているかを調べる。そして、対象となる全モジュールの情報の一覧を取得する。
【００５９】
［ステップＳ０３］  ステップＳ０２で取得した全モジュール情報の一覧に基づき、全モジュールへの指示が完了したかどうかを判定する。完了していない場合、処理をステップＳ０４へ進め、完了している場合には、処理をステップＳ０５へ進める。
【００６０】
［ステップＳ０４］  全モジュールに対する指示処理が終了していない場合、指示がされていないモジュールに対し、ハッシュ計算の指示を行う。そして、処理をステップＳ０３に戻し、全モジュールに対する指示処理が終了するまで待つ。
【００６１】
［ステップＳ０５］  全モジュールへの指示が完了している場合、指示を行ったモジュールが送信してくるハッシュ計算の結果を待つ。そして、計算結果を受け取ると、全モジュールから計算結果を受け取ったかどうかを調べる。受け取りが終了していない場合、処理をステップＳ０６へ進め、受け取りが終了した場合、処理をステップＳ０７へ処理を進める。
【００６２】
［ステップＳ０６］  計算結果の受け取りが終了していない場合、計算結果を受信するまで待つ。受信終了で、処理をステップＳ０５へ戻す。
［ステップＳ０７］  全モジュールから計算結果を受け取った場合は、計算結果であるセグメント別ハッシュ値を、論理ディスクのデータ順に応じたセグメント順に並べる。それから、セグメント順に並べたセグメント別ハッシュ値に再度ハッシュ関数を適用し、全体のハッシュ値を算出する。
【００６３】
［ステップＳ０８］  ハッシュ値を要求したコンソールなどに対し、ステップＳ０７で算出した算出結果（全体のハッシュ値）を出力する。また、セグメントサイズやハッシュ関数なども必要であれば、出力する。
【００６４】
次に、ストレージモジュールの計算処理手順について説明する。図７は、本実施の形態のストレージモジュールにおけるハッシュ計算処理の手順を示したフローチャートである。
【００６５】
［ステップＳ１１］  ハッシュ計算制御モジュールから、対象のセグメントＩＤを含む計算指示が入力されると、処理を開始し、次のステップへ処理を進める。
［ステップＳ１２］  ステップＳ１１で入力した計算指示からセグメントＩＤを取得し、セグメントＩＤに基づき、以下の処理を行う。
【００６６】
［ステップＳ１３］  ステップＳ１２で取得したこのモジュールがハッシュ値を算出するセグメントＩＤに基づき、指定された全セグメントの処理が終了したかどうかを判定する。終了していない場合、処理をステップＳ１５へ進め、終了している場合は、処理をステップＳ１５へ進める。
【００６７】
［ステップＳ１４］  全セグメントのハッシュ計算が終了していない場合、取得したセグメントＩＤに基づき、ハッシュ値計算が行われていないセグメントについてハッシュ計算を行ってハッシュ値を算出し、処理をステップＳ１３へ戻す。
【００６８】
［ステップＳ１５］  全セグメントのハッシュ計算が終了した場合、計算を行った全セグメントの計算結果をハッシュ計算制御モジュールへ出力する。
以上の処理手順が実行されることにより、対象の論理ディスクのハッシュ値が算出される。計算はモジュールごとに行うため、並列計算が可能となり、計算処理を短縮することができる。算出されたハッシュ値は、たとえば、対象の論理ディスクが改ざんされていないことの確認または証明に用いられる。
【００６９】
ところで、上述した本発明の実施の形態のストレージ管理装置１１０によるハッシュ計算によって、ストレージシステム１００内に格納されるデータが無改ざんであることが証明できる。さらに、本発明の実施の形態のストレージシステムで算出されたハッシュ値を、適用したハッシュ関数とセグメントサイズとともに公開しておき、任意の装置で利用できるようにすることで、ストレージシステム１００外の論理ディスクのデータがストレージシステム１００に格納されるデータと一致しているかどうかを判定することができる。
【００７０】
たとえば、論理ディスクのデータを読み込んだホストコンピュータで、このデータがストレージシステム１００内に格納されるデータと一致していることを証明することができる。まず、論理ディスクを公開されているセグメントサイズで分割し、分割されたセグメントごとに公開されたハッシュ関数を適用してセグメント別ハッシュ値を算出する。それから、セグメント別ハッシュ値をセグメント順に並べ、再度ハッシュ関数を適用してハッシュ値を求める。これが公開されているハッシュ値と一致すれば、対象のデータが、ストレージシステム１００のデータと同じであることが証明できる。
【００７１】
図８は、本実施の形態のハッシュ計算処理を他装置で実行する場合の手順を示したフローチャートである。なお、他装置とは、並列動作する計算部を持たないとし、ハッシュ値、セグメントサイズ、及びハッシュ関数は公開されているとする。
【００７２】
［ステップＳ２１］  公開されているセグメントサイズ、ハッシュ関数、及びハッシュ値を取得する。セグメントサイズに基づき、対象のデータをセグメントに分割する。
［ステップＳ２２］  全セグメントのハッシュ計算がすべて終了したかどうかを判定する。終了していない場合、処理をステップＳ２３へ進め、終了している場合は、処理をステップＳ２４に進める。
【００７３】
［ステップＳ２３］  ハッシュ計算が終了していないセグメントがある場合、終了していないセグメントのハッシュ値をステップＳ２１で取得したハッシュ関数を用いて算出した後、処理をステップＳ２２に戻す。
【００７４】
［ステップＳ２４］  全セグメントのハッシュ計算が終了した場合、ステップＳ２３によって算出されたセグメント別ハッシュ値をセグメント順に並べ、ハッシュ関数を適用して、対象データの全体ハッシュ値を算出する。
【００７５】
［ステップＳ２５］  ステップＳ２４によって算出されたハッシュ値と、ステップＳ２１で取得した公開されているハッシュ値とを照合し、一致しているかどうかを判定する。一致する場合は、処理をステップＳ２６へ進め、一致していない場合、処理をステップＳ２７へ進める。
【００７６】
［ステップＳ２６］  算出したハッシュ値と公開されているハッシュ値が一致する場合、「対象データは無改ざん」と判定し、処理を終了する。
［ステップＳ２７］  算出したハッシュ値と公開されているハッシュ値が一致しない場合、「対象データは改ざんされている」と判定し、処理を終了する。
【００７７】
以上の処理手順を実行することにより、セグメントごとのハッシュ値を並列計算する機構を有しない装置においても、同じようにハッシュ値を算出し、利用することができる。
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、ハッシュ値生成装置及びストレージ管理装置が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disk）などがある。
【００７８】
プログラムを流通させる場合には、たとえば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【００７９】
プログラムを実行するコンピュータは、たとえば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【００８０】
（付記１）  所定の一方向ハッシュ関数を用いて、対象ディスクに格納されるデータのハッシュ値を生成するハッシュ値生成プログラムにおいて、
コンピュータを、
前記対象ディスクを固定長のセグメントに分割するセグメント分割手段、
前記セグメント分割手段によって分割された前記セグメントごとに、前記セグメントの全データ列に前記一方向ハッシュ関数を適用して、セグメント別ハッシュ値を算出する第１のハッシュ値算出手段、
前記第１のハッシュ値算出手段によって算出された前記セグメント別ハッシュ値を前記対象ディスクに格納されるデータのデータ順に応じたセグメント順に並べ、前記セグメント別ハッシュ値に前記一方向ハッシュ関数を適用して全体のハッシュ値を算出する第２のハッシュ値算出手段、
として機能させることを特徴とするハッシュ値生成プログラム。
【００８１】
（付記２）  前記第１のハッシュ値算出手段として、
分割された前記セグメントを並列に動作可能な複数のハッシュ値計算手段に割り当て、割り当てた前記セグメントの全体データ列に対する前記セグメント別ハッシュ値を前記ハッシュ値計算手段に算出させる、
処理を実行させることを特徴とする付記１記載のハッシュ値生成プログラム。
【００８２】
（付記３）  前記コンピュータを、さらに、
所定のタイミングで前記第２のハッシュ値算出手段によって算出された前記全体のハッシュ値と、必要に応じて前記セグメントのサイズと前記一方向ハッシュ関数とを保存しておき、以後の処理において検証の必要がある場合は、保存された前記セグメントのサイズと前記一方向ハッシュ関数を用いて前記第１のハッシュ値算出手段及び前記第２のハッシュ値算出手段とによって前記全体のハッシュ値を再度算出し、保存された前記全体のハッシュ値と照合して一致しているかどうかを検証する検証手段、
として機能させることを特徴とする付記１記載のハッシュ値生成プログラム。
【００８３】
（付記４）  仮想の論理ディスクのデータがセグメント単位で複数のストレージモジュールに分散格納されるストレージシステムを管理するストレージ管理プログラムにおいて、
コンピュータを、
前記セグメント単位を固定長とし、前記ストレージモジュールごとに具備される前記ストレージモジュールが分散格納する前記セグメントの全データ列に一方向ハッシュ関数を適用して、セグメント別ハッシュ値を算出させる第１のハッシュ値算出手段を制御し、前記第１のハッシュ値算出手段に前記セグメント別ハッシュ値を算出させる制御手段、
前記ストレージモジュールの前記第１のハッシュ値算出手段によって算出された前記セグメント別ハッシュ値を取得し、前記セグメント別ハッシュ値を前記論理ディスクのデータのデータ順に応じたセグメント順に並べ、前記一方向ハッシュ関数を適用して前記論理ディスク全体のハッシュ値を算出する第２のハッシュ値算出手段、
として機能させることを特徴とするストレージ管理プログラム。
【００８４】
（付記５）  前記制御手段として、
前記論理ディスクのメタ情報として記述されるデータ定義に基づき、前記ストレージモジュールに割り当てられた前記セグメントを検索し、前記第１のハッシュ値算出手段に検索された前記セグメントのハッシュ計算を指示する、
処理を実行させることを特徴とする付記４記載のストレージ管理プログラム。
【００８５】
（付記６）  前記制御手段として、
前記ストレージモジュールの前記第１のハッシュ値算出手段に対して、順次計算指示を行って、複数の前記ストレージモジュールの前記第１のハッシュ値算出手段を並列動作させる、
処理を実行させることを特徴とする付記４記載のストレージ管理プログラム。
【００８６】
（付記７）  前記制御手段として、
前記第２のハッシュ値算出手段により算出されたハッシュ値と、前記セグメントのサイズと、適用された前記一方向ハッシュ関数とを、ネットワークを介して接続する外部装置から参照可能とする、
処理を実行させることを特徴とする付記４記載のストレージ管理プログラム。
【００８７】
（付記８）  前記制御手段として、ネットワークを介して接続する外部装置から要求があった場合は、要求のあった前記論理ディスクに対応する前記ストレージモジュールの前記第１のハッシュ値算出手段と、前記第２のハッシュ値算出手段を制御して要求された前記論理ディスク全体のハッシュ値を算出させ、要求した前記外部装置に算出された前記論理ディスク全体のハッシュ値を送信する、
処理を実行させることを特徴とする付記４記載のストレージ管理プログラム。
【００８８】
（付記９）  前記コンピュータを、さらに、
所定のタイミングで前記第２のハッシュ値算出手段によって算出された前記全体のハッシュ値と、必要に応じて前記セグメントのサイズと前記一方向ハッシュ関数とを保存しておき、以後の処理において検証の必要がある場合には、前記制御手段に指示して、再度ハッシュ計算を実行させ、再度算出された前記全体のハッシュ値と、保存しておいた前記全体のハッシュ値とを照合し、一致しているかどうかを検証する検証手段、
として機能させることを特徴とする付記４記載のストレージ管理プログラム。
【００８９】
（付記１０）  前記検証手段として、
前記全体のハッシュ値の照合処理を、予め決められた所定の周期、または、ネットワークを介して接続する外部装置からの要求に応じて実行させる、
処理を実行させることを特徴とする付記９記載のストレージ管理プログラム。
【００９０】
（付記１１）  仮想の論理ディスクのデータをストレージに格納して管理するストレージシステムにおいて、
前記論理ディスクを固定長のセグメント単位に分割して格納する記憶手段と、計算指示を受け取ると、前記記憶手段に格納される前記セグメントのデータ列に所定の一方向ハッシュ関数を適用し、前記セグメントのセグメント別ハッシュ値を算出する第１のハッシュ値算出手段と、を有する複数のストレージモジュールと、
前記論理ディスクのハッシュ値が要求されると、前記ストレージモジュールごとに設けられた、前記第１のハッシュ値算出手段による前記セグメント別ハッシュ値の算出処理を制御する制御手段と、前記第１のハッシュ値算出手段によって算出された前記セグメント別ハッシュ値を前記論理ディスクのデータのデータ順に応じたセグメント順に並べ、前記セグメント別ハッシュ値に前記一方向ハッシュ関数を適用して前記論理ディスク全体のハッシュ値を算出する第２のハッシュ値算出手段と、を有するストレージ管理モジュールと、
を具備することを特徴とするストレージシステム。
【００９１】
（付記１２）  前記ストレージ管理モジュールは、検索された前記ストレージモジュールが複数ある場合は、前記複数のストレージモジュールに対して順次計算指示を出力し、前記ストレージモジュールを並列動作させる、
ことを特徴とする付記１１記載のストレージシステム。
【図面の簡単な説明】
【００９２】
【図１】実施の形態に適用される発明の概念図である。
【図２】本発明の実施の形態のストレージシステムの構成を示した構成図である。
【図３】本実施の形態のストレージ管理装置のハードウェア構成例を示すブロック図である。
【図４】本実施の形態のストレージシステムのソフトウェア構成例を示す図である。
【図５】本実施の形態のストレージシステムの動作を示したフロー図である。
【図６】本実施の形態のハッシュ計算制御の処理手順を示したフローチャートである。
【図７】本実施の形態のストレージモジュールにおけるハッシュ計算処理の手順を示したフローチャートである。
【図８】本実施の形態のハッシュ計算処理を他装置で実行する場合の手順を示したフローチャートである。
【図９】従来のストレージシステムの構成の一例を示した概略図である。
【符号の説明】
【００９３】
１  ハッシュ値生成装置
１ａ  セグメント分割手段
１ｂ  第１のハッシュ値算出手段
１ｃ  第２のハッシュ値算出手段
１ｄ  検証手段
２  対象ディスク
３ａ  全体のハッシュ値
３ｂ  全体のハッシュ値（保存データ）
１１ｂ  計算部１
１２ｂ  計算部２
１３ｂ  計算部ｍ
【図１】
0004767057.tif 000002
【図２】
0004767057.tif 000003
【図３】
0004767057.tif 000004
【図４】
0004767057.tif 000005
【図５】
0004767057.tif 000006
【図６】
0004767057.tif 000007
【図７】
0004767057.tif 000008
【図８】
0004767057.tif 000009
【図９】
0004767057.tif 000010