(57)【特許請求の範囲】
【請求項１】
オペレーティングシステムからストレージデバイスの指定ブロックへの書込み、または指定ブロックからの読み出し命令を受け入れて、当該命令に従い前記ストレージデバイスの指定されたブロックへのデータの書き込みまたは指定されたブロックからのデータの読み出しを実行するアクセス手段と、
前記ストレージデバイスのブロックごとに、当該ブロックに格納されたデータが暗号化されているか否かを表す情報を記録する記録手段と、
前記ストレージデバイスのブロックのうち、前記記録手段に記録された情報により暗号化されていないと判断されるブロックからデータを読み出す処理と、当該読み出したデータを暗号化する処理と、当該暗号化処理の結果を読み出し元のブロックへ書込む処理とを実行する暗号化処理手段と、
前記暗号化処理手段の各処理の実行を制御する制御手段と、
を含み、
前記制御手段は、前記暗号化処理手段が暗号化処理のためにデータを読み出したブロックに対し、暗号化処理の結果を書込むまでの間に、前記オペレーティングシステムから当該ブロックへのデータの書き込み命令により、当該ブロックにデータが書込まれたときは、前記暗号化処理手段に対して当該ブロックに新たに書込まれたデータを再度読み出す処理を実行させる情報処理装置。
【請求項２】
請求項１記載の情報処理装置において、
前記暗号化処理手段の暗号化処理の結果を読み出し元のブロックへ書込む処理はさらに、当該ブロックについて前記記録手段に記録されている情報を、データが暗号化されていることを表す情報に書換える書換処理と、暗号化されたデータを当該ブロックに書込む処理とを含み、
前記制御手段は、前記書換処理後に、前記アクセス手段がオペレーティングシステムからストレージデバイスの指定ブロックからの読み出し命令を受け入れたときには、前記暗号化処理手段が暗号化されたデータを当該ブロックに書込むまで、当該命令への応答を待機するよう前記アクセス手段を制御する情報処理装置。
【請求項３】
請求項１または２記載の情報処理装置において、
前記制御手段が、オペレーティングシステムと入出力デバイスとの間のアクセス頻度に基づいて、前記暗号化処理手段における処理の頻度を制御する情報処理装置。
【請求項４】
請求項１から３のいずれか一項に記載の情報処理装置において、
前記制御手段が、前記ストレージデバイス上で前回アクセスしたブロック近傍のブロックのうちから暗号化処理の対象となるブロックを選択して、前記暗号化処理手段に当該選択したブロックの暗号化処理を行わせる情報処理装置。
【請求項５】
請求項１から４のいずれか一項に記載の情報処理装置であって、
前記制御手段が、暗号化処理の進捗に関する情報を前記ストレージデバイスのブロックのうち、オペレーティングシステムによって利用されていないブロックへ書込む情報処理装置。
【請求項６】
コンピュータを、
オペレーティングシステムからストレージデバイスの指定ブロックへの書込み、または指定ブロックからの読み出し命令を受け入れて、当該命令に従い前記ストレージデバイスの指定されたブロックへのデータの書き込みまたは指定されたブロックからのデータの読み出しを実行するアクセス手段と、
前記ストレージデバイスのブロックごとに、当該ブロックに格納されたデータが暗号化されているか否かを表す情報を記録する記録手段と、
前記ストレージデバイスのブロックのうち、前記記録手段に記録された情報により暗号化されていないと判断されるブロックからデータを読み出す処理と、当該読み出したデータを暗号化する処理と、当該暗号化処理の結果を読み出し元のブロックへ書込む処理とを実行する暗号化処理手段と、
前記暗号化処理手段の各処理の実行を制御する制御手段と、
として機能させ、
前記制御手段として機能させる際に、前記暗号化処理手段が暗号化処理のためにデータを読み出したブロックに対し、暗号化処理の結果を書込むまでの間に、前記オペレーティングシステムから当該ブロックへのデータの書き込み命令により、当該ブロックにデータが書込まれたときは、前記暗号化処理手段に対して当該ブロックに新たに書込まれたデータを再度読み出す処理を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハイパーバイザを備えた情報処理装置及びプログラムに関する。
【背景技術】
【０００２】
近年では、セキュリティの向上等の目的でコンピュータを仮想化するハイパーバイザが広く利用されている。ハイパーバイザは、ハードウェアと、オペレーティングシステム（ゲスト・オペレーティングシステム）との間に介在し、オペレーティングシステムからのハードウェアに対するアクセスを管理する。
【０００３】
このようなハイパーバイザの一例として、セキュリティの向上のために仮想化の必要なハードウェア以外のハードウェア資源に対しては、オペレーティングシステムからのアクセスを素通し（パススルー）するシステムが、特許文献１に開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−２２３７７６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
セキュリティの向上の一つの例として、ハイパーバイザにより、ハードディスク等のディスクデバイスの内容を暗号化するものがある。このようなハイパーバイザでは、オペレーティングシステムからディスクデバイスへの読み出し指示を受けると、当該指示の対象となったデータ（ディスクデバイス上で暗号化されている）を読み出し、さらに復号してからオペレーティングシステムへ出力する。また、オペレーティングシステムからディスクデバイスへの書込みの指示を受けると、当該指示の対象となったデータを暗号化してからディスクデバイスへ書き込む。
【０００６】
しかしながら、従来このようなシステムを実現するには、一旦ディスクデバイスに格納されているデータを暗号化しておく必要があった。すなわち、オペレーティングシステムからディスクデバイスへのアクセスを一時的に禁止して、禁止している間にディスクデバイス内のデータを暗号化することが必要であった。このため、ディスクデバイスの暗号化は、セキュリティ上有効な方法であるにも関わらず、導入が進んでいなかった。
【０００７】
本発明は、上記実情に鑑みて為されたもので、オペレーティングシステムの運用と、ディスクデバイスの暗号化とを並行して行うことのできる情報処理装置を提供することを、その目的の一つとする。
【課題を解決するための手段】
【０００８】
上記従来例の問題点を解決するための本発明は、情報処理装置であって、オペレーティングシステムからストレージデバイスの指定ブロックへの書込み、または指定ブロックからの読み出し命令を受け入れて、当該命令に従い前記ストレージデバイスの指定されたブロックへのデータの書き込みまたは指定されたブロックからのデータの読み出しを実行するアクセス手段と、前記ストレージデバイスのブロックごとに、当該ブロックに格納されたデータが暗号化されているか否かを表す情報を記録する記録手段と、前記ストレージデバイスのブロックのうち、前記記録手段に記録された情報により暗号化されていないと判断されるブロックからデータを読み出す処理と、当該読み出したデータを暗号化する処理と、当該暗号化処理の結果を読み出し元のブロックへ書込む処理とを実行する暗号化処理手段と、前記暗号化処理手段の各処理の実行を制御する制御手段と、を含み、前記制御手段は、前記暗号化処理手段が暗号化処理のためにデータを読み出したブロックに対し、暗号化処理の結果を書込むまでの間に、前記オペレーティングシステムから当該ブロックへのデータの書き込み命令により、当該ブロックにデータが書込まれたときは、前記暗号化処理手段に対して当該ブロックに新たに書込まれたデータを再度読み出す処理を実行させることとしたものである。
【０００９】
またここで、前記暗号化処理手段の暗号化処理の結果を読み出し元のブロックへ書込む処理はさらに、当該ブロックについて前記記録手段に記録されている情報を、データが暗号化されていることを表す情報に書換える書換処理と、暗号化されたデータを当該ブロックに書込む処理とを含み、前記制御手段は、前記書換処理後に、前記アクセス手段がオペレーティングシステムからストレージデバイスの指定ブロックからの読み出し命令を受け入れたときには、前記暗号化処理手段が暗号化されたデータを当該ブロックに書込むまで、当該命令への応答を待機するよう前記アクセス手段を制御することとしてもよい。
【００１０】
さらに前記制御手段が、オペレーティングシステムと入出力デバイスとの間のアクセス頻度に基づいて、前記暗号化処理手段における処理の頻度を制御してもよい。
【００１１】
さらに前記制御手段が、前記ストレージデバイス上で前回アクセスしたブロック近傍のブロックのうちから暗号化処理の対象となるブロックを選択して、前記暗号化処理手段に当該選択したブロックの暗号化処理を行わせてもよい。
【００１２】
また、さらに前記制御手段が、暗号化処理の進捗に関する情報を前記ストレージデバイスのブロックのうち、オペレーティングシステムによって利用されていないブロックへ書込むこととしてもよい。
【００１３】
本発明の一態様に係るプログラムは、コンピュータを、オペレーティングシステムからストレージデバイスの指定ブロックへの書込み、または指定ブロックからの読み出し命令を受け入れて、当該命令に従い前記ストレージデバイスの指定されたブロックへのデータの書き込みまたは指定されたブロックからのデータの読み出しを実行するアクセス手段と、前記ストレージデバイスのブロックごとに、当該ブロックに格納されたデータが暗号化されているか否かを表す情報を記録する記録手段と、前記ストレージデバイスのブロックのうち、前記記録手段に記録された情報により暗号化されていないと判断されるブロックからデータを読み出す処理と、当該読み出したデータを暗号化する処理と、当該暗号化処理の結果を読み出し元のブロックへ書込む処理とを実行する暗号化処理手段と、前記暗号化処理手段の各処理の実行を制御する制御手段と、として機能させ、前記制御手段として機能させる際に、前記暗号化処理手段が暗号化処理のためにデータを読み出したブロックに対し、暗号化処理の結果を書込むまでの間に、前記オペレーティングシステムから当該ブロックへのデータの書き込み命令により、当該ブロックにデータが書込まれたときは、前記暗号化処理手段に対して当該ブロックに新たに書込まれたデータを再度読み出す処理を実行させることとしたものである。
【発明の効果】
【００１４】
本発明によると、オペレーティングシステムの運用と、ディスクデバイスの暗号化とを並行して行うことができる。
【図面の簡単な説明】
【００１５】
【図１】本発明の実施の形態に係る情報処理装置の構成例を表すブロック図である。
【図２】本発明の実施の形態に係る情報処理装置の一例を表す機能ブロック図である。
【図３】本発明の実施の形態に係る情報処理装置が保持する暗号記録情報の例を表す説明図である。
【図４】本発明の実施の形態に係る情報処理装置の動作の一例を表す流れ図である。
【図５】本発明の実施の形態に係る情報処理装置の動作の別の例を表す流れ図である。
【発明を実施するための形態】
【００１６】
本発明の実施の形態について図面を参照しながら説明する。本実施の形態の情報処理装置は、制御部１１と、メモリ部１２と、ストレージ部１３と、操作部１４と、表示部１５と、通信部１６と、を含んで構成される。
【００１７】
制御部１１は、ＣＰＵなどのプログラム制御デバイスであり、メモリ部１２または、ストレージ部１３に格納されたプログラムに従って動作する。本実施の形態の制御部１１は、このプログラムを実行することにより、機能的には図２に例示するように、ハイパーバイザ部２０と、オペレーティングシステム３０とを含む。本実施の形態の制御部１１のハイパーバイザ部２０は、オペレーティングシステム３０からストレージデバイスであるストレージ部１３の指定ブロックへの書込み、またはストレージ部１３の指定ブロックからの読み出し命令を受け入れて、当該命令に従い前記ストレージデバイスの指定されたブロックへのデータの書き込みまたは指定されたブロックからのデータの読み出しを実行する。
【００１８】
またこのハイパーバイザ部２０は、ストレージ部１３のブロックごとに、当該ブロックに格納されたデータが暗号化されているか否かを表す情報を記録している。そしてハイパーバイザ部２０は、ストレージ部１３のブロックのうち、当該記録された情報により暗号化されていないと判断されるブロックからデータを読み出す処理と、当該読み出したデータを暗号化する処理と、当該暗号化処理の結果を読み出し元のブロックへ書込む処理とを含む暗号化処理を実行している。この制御部１１の処理の内容は、後に詳しく述べる。
【００１９】
メモリ部１２は、ＲＡＭ（Random Access Memory）等のメモリデバイスを含む。このメモリ部１２は、制御部１１によって実行されるプログラムを少なくとも一時的に記憶する。また、このメモリ部１２は、制御部１１のワークメモリとしても動作する。
【００２０】
ストレージ部１３は、ハードディスクドライブや、ＳＳＤ（Solid State Drive）等のストレージデバイスであり、その記憶領域はブロック単位に分割されて管理される。本実施の形態においてこのストレージ部１３には制御部１１によって実行されるプログラムが格納される。このプログラムは、ＤＶＤ−ＲＯＭ（Digital Versatile Disc Read Only Memory）等のコンピュータ可読な記録媒体に格納されて提供され、このストレージ部１３に複写して格納されたものであってもよい。またこのストレージ部１３には、制御部１１が実行するプログラムで利用するデータが格納される。
【００２１】
操作部１４は、マウスやキーボード等であり、利用者の操作を受け入れて、当該操作の内容を制御部１１に出力する。表示部１５は、ディスプレイ等であり、制御部１１から入力される指示に従って情報を表示出力する。通信部１６は、ネットワークインタフェース等であり、ネットワーク等の通信手段を介して外部の機器との間でデータの送受信を行う。これらストレージ部１３，操作部１４，表示部１５，通信部１６は、入出力デバイスに相当する。
【００２２】
次に制御部１１の動作について述べる。制御部１１によりソフトウエア的に実現されるハイパーバイザ部２０は、図２に例示するように、イベント監視部２１と、フィルタモジュール２２と、暗号化モジュール２３と、制御モジュール２４と、乗せ込み（ピギーバック）モジュール２５とを含み、暗号化モジュール２３がさらに、アクセスモジュール２６と、記録モジュール２７と、処理モジュール２８とを含んで構成される。
【００２３】
イベント監視部２１は、オペレーティングシステム３０からハードウェアＨＷ側のデバイスへの要求（Ｉ／Ｏコマンド等）を受け入れる。つまり、このイベント監視部２１は、ストレージ部１３，操作部１４，表示部１５，通信部１６等のＩ／Ｏ（Input/Output）デバイスへの、オペレーティングシステム３０のアクセス命令を受け入れる。また、これらデバイスからオペレーティングシステム３０宛の情報を受け入れる。
【００２４】
このイベント監視部２１は、受け入れたアクセス命令が、予め捕捉の必要ありとして定められたデバイスへの命令でなければ、当該アクセス命令を素通し（パススルー）して、当該命令の宛先であるデバイスへ出力する。本実施の一例では、ストレージ部１３を捕捉の必要があるデバイスとして定めておく。この場合、例えばオペレーティングシステム３０から表示部１５へのアクセス命令は、そのまま素通しして、表示部１５へ出力される。
【００２５】
またこのイベント監視部２１は、デバイスからオペレーティングシステム３０への情報を受け入れ、当該情報の受入元であるデバイスが、予め捕捉の必要ありとして定められたデバイスでなければ、当該情報を素通し（パススルー）して、オペレーティングシステム３０に出力する。既に述べた例のように、ストレージ部１３を捕捉の必要があるデバイスとして定めてある場合は、例えば操作部１４から入力される情報は、そのまま素通ししてオペレーティングシステム３０へ出力される。
【００２６】
イベント監視部２１は、捕捉の必要ありとして定められたデバイス（ここではストレージ部１３）へのアクセス命令がオペレーティングシステム３０から受け入れられると、当該アクセス命令を乗せ込みモジュール２５へ出力する。またこのイベント監視部２１は、捕捉の必要ありとして定められたデバイスからオペレーティングシステム３０への情報を受け入れると、当該情報をオペレーティングシステム３０へ出力する。
【００２７】
フィルタモジュール２２は、ストレージ部１３の各ブロックが暗号化されているか否かを表す暗号記録情報を保持する。具体的に、この暗号記録情報は図３に例示するように、ブロックアドレスと、暗号化されているか否かを表すフラグ情報とを関連付けたものである。
【００２８】
このフィルタモジュール２２は、オペレーティングシステム３０からのアクセス命令を受け入れる。ここでアクセス命令には、書込み命令と、読み出し命令とがあるので、以下それぞれ区別して説明する。
【００２９】
フィルタモジュール２２がオペレーティングシステム３０から書込み命令を受け入れると、この書込み命令に含まれる、データの書込み先のブロックアドレスを抽出する。フィルタモジュール２２は暗号記録情報を参照して、抽出したブロックアドレスに関連付けたフラグ情報により、当該ブロック内の情報が暗号化されているか否かを調べる。
【００３０】
フィルタモジュール２２は、書込み先となったブロック内の情報が暗号化されていると判断したときには、オペレーティングシステム３０から受け入れた書込み命令に含まれるデータの本体部分（格納先を表すブロックアドレス等を除く部分）を暗号化する。ここで暗号化の方法は特に制限されるものではないが、暗号化の前後でデータサイズの変化がない暗号化、例えばＤＥＳ（Data Encryption Standard）暗号化や、Blowfish暗号化、ＡＥＳ（Advanced Encryption Standard）等を採用すればよい。そしてフィルタモジュール２２は、データの本体部分を暗号化した書込み命令を、乗せ込みモジュール２５に出力する。
【００３１】
一方、フィルタモジュール２２は、書込み先となったブロック内の情報が暗号化されていないと判断すると、オペレーティングシステム３０から受け入れた書込み命令をそのまま乗せ込みモジュール２５に出力する。
【００３２】
またこのフィルタモジュール２２がオペレーティングシステム３０から読み出し命令を受け入れると、この読み出し命令に含まれる、データの読み出し先のブロックアドレスを抽出する。フィルタモジュール２２は暗号記録情報を参照して、抽出したブロックアドレスに関連付けたフラグ情報により、当該ブロック内の情報が暗号化されているか否かを調べる。
【００３３】
フィルタモジュール２２は、オペレーティングシステム３０から受け入れた読み出し命令をそのまま乗せ込みモジュール２５に出力する。またフィルタモジュール２２は、乗せ込みモジュール２５から読み出し命令に対する応答として、読み出し先として指定されたブロックアドレスに格納されていたデータを受け入れる。
【００３４】
フィルタモジュール２２は、読み出し先となったブロック内の情報が暗号化されていると判断したときには、当該受け入れたデータを復号する。この復号は、先の暗号化に対応する復号処理によって行われる。そしてフィルタモジュール２２は、当該復号したデータをオペレーティングシステム３０へ出力する。またフィルタモジュール２２は、読み出し先となったブロック内の情報が暗号化されていないと判断したときには、当該受け入れたデータをそのままオペレーティングシステム３０へ出力する。
【００３５】
暗号化モジュール２３は、制御モジュール２４から入力される制御により、ストレージ部１３の各ブロックを暗号化する処理を実行する。例えばこの暗号化モジュール２３は、制御モジュール２４から暗号化処理中のデータ（ディスクから読み出したデータや暗号化処理したデータ）を破棄するべき旨の指示を受けると、当該データを破棄して、ストレージ部１３へ書込まれないように制御する。
【００３６】
暗号化モジュール２３のアクセスモジュール２６は、制御モジュール２４から読み出し先のブロックを指定するブロックアドレスの入力を受けて、乗せ込みモジュール２５に対して当該ブロックアドレスからのデータの読み出しを要求する。またこのアクセスモジュール２６は、当該読み出し要求に応答して乗せ込みモジュール２５が出力するデータを処理モジュール２８に出力する。
【００３７】
アクセスモジュール２６は、また、処理モジュール２８において暗号化したデータを受け入れると、先に読み出し先としたブロックアドレスに対して、当該暗号化したデータを書込むよう、乗せ込みモジュール２５に対して要求する。
【００３８】
なお、このアクセスモジュール２６は、制御モジュール２４からデータを破棄するべき旨の指示を受けると、乗せ込みモジュール２５から受けたデータや、処理モジュール２８から入力されたデータを破棄し、以降の処理を中断する。
【００３９】
記録モジュール２７は、予め定めたタイミングで、フィルタモジュール２２の暗号化記録情報のうち、暗号化したデータの書き込み先ブロックアドレスに関連するフラグ情報を、暗号化されていることを表す値に書き換える。この書換えのタイミングは、例えば処理モジュール２８が暗号化の処理を終了し、アクセスモジュール２６に出力したタイミングなどとすればよい。
【００４０】
処理モジュール２８は、アクセスモジュール２６が出力するデータを受け入れて、当該受け入れたデータを、フィルタモジュール２２と同じ暗号化アルゴリズムで暗号化する。そしてこの処理モジュール２８は、当該暗号化したデータをアクセスモジュール２６に出力する。
【００４１】
制御モジュール２４は、暗号化モジュール２３の処理を制御する。この制御モジュール２４の動作は後に述べる。乗せ込みモジュール２５は、アクセス手段を実現するものであり、フィルタモジュール２２から書込み命令を受け入れると、この書込み命令に従って、ストレージ部１３の指定されたブロックに、指定されたデータを書込む。またこの乗せ込みモジュール２５は、フィルタモジュール２２から読み出し命令を受け入れると、この読み出し命令に従って、ストレージ部１３の指定されたブロックからデータを読み出し、この読み出したデータをフィルタモジュール２２に出力する。
【００４２】
またこの乗せ込みモジュール２５は、アクセスモジュール２６から要求を受け入れると、フィルタモジュール２２から命令を受け入れておらず、かつ、フィルタモジュール２２からの命令に基づく処理を行っていない間に、当該要求に基いた処理を行う。つまり当該要求が指定されたブロックからのデータの読み出しであれば、ストレージ部１３の指定されたブロックからデータを読み出し、この読み出したデータをアクセスモジュール２６に出力する。また、アクセスモジュール２６から受けた要求がデータの書き込みであれば、フィルタモジュール２２から命令を受け入れておらず、かつ、フィルタモジュール２２からの命令に基づく処理を行っていない間に、当該要求に基いて、ストレージ部１３の指定されたブロックに、要求に係るデータを書込む。
【００４３】
つまり、この乗せ込みモジュール２５は、オペレーティングシステム３０によるストレージ部１３へのアクセスの空いたタイミングに、暗号化モジュール２３からの要求に基づく処理を挿入する。従って、乗せ込みモジュール２５の動作によると、同じブロックアドレスが示すブロックに対してオペレーティングシステム３０と、暗号化モジュール２３とが競合してアクセスすることがあり得ることになる。
【００４４】
このアクセスモジュール２６による要求タイミングのパターンは、次の表に示す９通りに分類される。この表において、Ｒはオペレーティングシステム３０による暗号化されていないブロックからのデータ読み出し、Ｗは、オペレーティングシステム３０による暗号化されていないブロックへのデータ書込み、Ｒｅはオペレーティングシステム３０による、暗号化されたブロックからのデータ読み出し、Ｗｅはオペレーティングシステム３０による暗号化されたブロックへのデータ書込みを意味する。また、ｒは、暗号化モジュール２３によるデータ読み出し（以下で説明するように、必ず暗号化されていないブロックからの読み出しとなる）、ｗｅは、暗号化モジュール２３によって暗号化されたデータの書き込みを意味する。
【００４５】
【表１】
0005829959.tif 000002
【００４６】
本実施の形態のアクセスパターンは、通常の競合とは異なり、暗号化モジュール２３があるブロックに格納されていたデータに暗号化を施した暗号化データがあっても、当該ブロックが暗号化されていると暗号記録情報に記録された結果、オペレーティングシステム３０側から当該ブロックへ書込むべき旨の指示があり、そのデータがフィルタモジュール２２により暗号化されたならば、暗号化モジュール２３が生成した暗号化データは破棄ないし上書きしてよいこととなっている。従って、上記のアクセスパターンのうち、パターン名称Ａ，Ｂ，Ｃ１，またはＣ２のケースは問題が生じない。
【００４７】
一方、アクセスパターンが、パターン名称Ｄ１，Ｄ２，Ｅ１，Ｅ２，またはＦのケースである場合は対処のための処理が必要となる。制御モジュール２４が行う制御の一つは、この問題の生じるアクセスパターンにおける暗号化モジュール２３の制御に係る処理である。
【００４８】
次にこの制御モジュール２４の動作の例について述べる。本実施の形態における制御モジュール２４は、暗号化モジュール２３による暗号化処理の対象となるブロックのブロックアドレスを、対象ブロックアドレスとして、暗号化モジュール２３に出力する。
【００４９】
本実施の形態の制御モジュール２４は、ストレージ部１３に含まれるブロックのうち、オペレーティングシステム３０が自由に使用できるブロックについては、データが書込まれているか否かを判断する手段を有していない。しかしながら本実施の形態のハイパーバイザ部２０は、オペレーティングシステム３０によってどのブロックが利用されているかを記録する手段を有しなくてもよく、オペレーティングシステム３０によって利用可能なブロックを順次、すべて暗号化処理すればよい。
【００５０】
本実施の形態のある例では制御モジュール２４は、ＬＢＡによって示されるブロックを先頭から順次暗号化するように制御する。具体的に制御モジュール２４は、オペレーティングシステム３０によって自由に利用可能なブロックの先頭から順に、暗号化対象候補ブロックとする。制御モジュール２４は、暗号化対象候補ブロックのブロックアドレスに関連付けて、フィルタモジュール２２の暗号記録情報に格納されているフラグ情報を参照し、暗号化対象候補ブロック内のデータが既に暗号化されているか否かを調べる。ここで既に暗号化されていれば制御モジュール２４は、暗号化対象候補ブロックの次のブロックを新たに暗号化対象候補ブロックとして、フィルタモジュール２２の暗号記録情報に格納されているフラグ情報を参照する処理から繰返す。
【００５１】
一方、暗号化対象候補ブロック内のデータが暗号化されていないと判断されたならば、制御モジュール２４は、暗号化モジュール２３のアクセスモジュール２６に対して、読み出し先のブロックとして、当該暗号化対象候補ブロックのブロックアドレスを出力して、暗号化の処理を開始させる。
【００５２】
さらにこの制御モジュール２４は、乗せ込みモジュール２５によるストレージ部１３へのアクセスの内容と、アクセス時におけるフィルタモジュール２２の暗号記録情報とを参照して、アクセスパターンを検出する。例えば乗せ込みモジュール２５がフィルタモジュール２２からの読み出し命令を処理する場合であって、当該アクセス先のブロックアドレスに関連付けられたフラグ情報が暗号化されていないことを表すものである場合は、上記アクセスパターンにおける「Ｒ」に相当すると判断する。
【００５３】
そして制御モジュール２４は、暗号化処理手段としての暗号化モジュール２３が暗号化処理のためにデータを読み出した（ｒ）ブロックに対し、暗号化処理の結果を書込むより前（ｗｅより前）に、オペレーティングシステム３０から当該ブロックへ、暗号化されていないデータの書き込み命令（Ｗ）があった場合、つまり当該ブロックに暗号化されていないデータが新たに書込まれたときは（上記アクセスパターンのＤ１またはＤ２に相当する場合）、暗号化モジュール２３に対して、現在処理しているデータを破棄し、処理の対象としたブロックに新たに書込まれたデータを再度読み出す処理を実行させる。
【００５４】
また制御モジュール２４は、暗号化処理手段としての暗号化モジュール２３が暗号化処理のためにデータを読み出した（ｒ）ブロックに対し、暗号化処理の結果を書込むより前に、オペレーティングシステム３０から当該ブロックへのデータ書込み命令があったが、当該書込み命令があったタイミングでは既に、フィルタモジュール２２の暗号記録情報において、当該ブロックのブロックアドレスに関連付けたフラグ情報が暗号化されていることを表すものとなっている場合（Ｗｅとなった場合：アクセスパターンにおけるＥ１，Ｅ２に対応する場合）は、暗号化モジュール２３に対して暗号化後のデータを破棄して書込まないよう指示する。
【００５５】
さらに制御モジュール２４は、暗号化処理手段としての暗号化モジュール２３が暗号化処理のためにデータを読み出した（ｒ）ブロックに対し、暗号化処理の結果を書込むより前に、オペレーティングシステム３０から当該ブロックへのデータ読み出し命令があったが、当該読み出し命令があったタイミングで既に、フィルタモジュール２２の暗号記録情報において、当該ブロックのブロックアドレスに関連付けたフラグ情報に対する記録モジュール２７による書換えがなされており、暗号化されていることを表すものとなっている場合（Ｒｅとなるべき場合：アクセスパターンにおけるＦに対応する場合）は、乗せ込みモジュール２５に対して、暗号化モジュール２３からの要求を優先的に処理するよう指示する。この場合、乗せ込みモジュール２５は、暗号化モジュール２３から書込み要求（ｗｅ）を受けて、当該要求に応答して指定されたブロックへの暗号化データの書き込み後に、フィルタモジュール２２から入力された読み出し命令に応答して、当該書込んだ暗号化データを読み出す処理を行う。
【００５６】
この制御モジュール２４の動作によって、アクセスパターンＦは、r→Re→weとなってしまうところ、r→we→Reとなるよう制御される。
【００５７】
本実施の形態は、以上の構成を備えており、次のように動作する。以下の例では、オペレーティングシステム３０と、ハイパーバイザ部２０の暗号化モジュール２３とが同じブロックに対してアクセスする競合が発生する場合の動作について説明する。また以下の例ではブロックアドレスＸのデータは、当初は暗号化されていないものとする。
【００５８】
図４に例示するように、オペレーティングシステム３０が、ハイパーバイザ部２０に対してブロックアドレスＸのブロックに格納されたデータの読み出し命令を出力すると（Ｓ１）、ハイパーバイザ部２０の乗せ込みモジュール２５は、この命令に従って、ストレージ部１３からデータを読み出す（Ｒ：Ｓ２）。次のタイミングで制御モジュール２４が暗号化モジュール２３に対してブロックアドレスＸを出力し、このブロック内のデータの暗号化を指示する（Ｓ３）と、暗号化モジュール２３は乗せ込みモジュール２５に対してデータの読み出しを要求する（Ｓ４）。
【００５９】
乗せ込みモジュール２５は、ステップＳ２で読み出したデータをフィルタモジュール２２を介してオペレーティングシステム３０へ出力する（Ｓ５）。この段階では、ブロックアドレスＸのブロックは暗号化されていないので、フィルタモジュール２２はデータをそのままオペレーティングシステム３０へ出力する。
【００６０】
乗せ込みモジュール２５は、ステップＳ５の完了後、ステップＳ４で受けた要求に応答して、ストレージ部１３からブロックアドレスＸのブロックのデータを読み出し（ｒ：Ｓ６）、このデータを暗号化モジュール２３に出力する（Ｓ７）。暗号化モジュール２３では暗号化処理を行う（Ｓ８）。そして暗号化完了後に、記録モジュール２７が暗号記録情報のブロックアドレスＸに関連付けられたフラグ情報を、暗号化されていることを表す情報に書換える（Ｓ９）。
【００６１】
そして暗号化モジュール２３は、暗号化後のデータをブロックアドレスＸのブロックへ書込むよう、乗せ込みモジュール２５に要求する（Ｓ１０）。乗せ込みモジュール２５は、オペレーティングシステム３０からのアクセスがこの時点ではないので、この要求に応答してストレージ部１３のブロックアドレスＸのブロックへ、暗号化モジュール２３が暗号化したデータを書込む（ｗｅ：Ｓ１１）。
【００６２】
このタイミングでフィルタモジュール２２がオペレーティングシステム３０からブロックアドレスＸのブロックへのデータ書込み命令を受け入れる（Ｓ１２）。このデータはステップＳ２やＳ６で読み出されたデータとは異なってもよい。フィルタモジュール２２は、暗号記録情報から、ブロックアドレスＸのブロックが暗号化されていると判断し、受け入れた書込み命令によって書込まれるべきデータを暗号化する（Ｓ１３）。そして乗せ込みモジュール２５がこの暗号化されたデータを、ストレージ部１３のブロックアドレスＸのブロックへ書込む（Ｗｅ：Ｓ１４）。
【００６３】
この例では、暗号化モジュール２３が暗号化したデータが、オペレーティングシステム３０側から書込むよう命令されたデータを暗号化したもので上書きされるが、そもそもオペレーティングシステム３０側のデータであるから、この動作にて問題がない。この例は、先に掲げた表のＣ１のアクセスパターンに対応する。
【００６４】
一方、図５に示す例では、オペレーティングシステム３０が、ハイパーバイザ部２０に対してブロックアドレスＸのブロックに格納されたデータの読み出し命令を出力すると（Ｓ１）、ハイパーバイザ部２０の乗せ込みモジュール２５は、この命令に従って、ストレージ部１３からデータを読み出す（Ｒ：Ｓ２）。次のタイミングで制御モジュール２４が暗号化モジュール２３に対してブロックアドレスＸを出力し、このブロック内のデータの暗号化を指示する（Ｓ３）と、暗号化モジュール２３は乗せ込みモジュール２５に対してデータの読み出しを要求する（Ｓ４）。
【００６５】
乗せ込みモジュール２５は、ステップＳ２で読み出したデータをフィルタモジュール２２を介してオペレーティングシステム３０へ出力する（Ｓ５）。この段階では、ブロックアドレスＸのブロックは暗号化されていないので、フィルタモジュール２２はデータをそのままオペレーティングシステム３０へ出力する。
【００６６】
乗せ込みモジュール２５は、ステップＳ５の完了後、ステップＳ４で受けた要求に応答して、ストレージ部１３からブロックアドレスＸのブロックのデータを読み出し（ｒ：Ｓ６）、このデータを暗号化モジュール２３に出力する（Ｓ７）。暗号化モジュール２３では暗号化処理を開始する（Ｓ８）。
【００６７】
一方、このステップＳ７，Ｓ８の実行タイミングに前後して、フィルタモジュール２２がオペレーティングシステム３０からブロックアドレスＸのブロックへのデータ書込み命令を受け入れる（Ｓ２１）と、フィルタモジュール２２は、暗号記録情報から、ブロックアドレスＸのブロックが暗号化されていないと判断し、受け入れた書込み命令をそのまま乗せ込みモジュール２５に出力する。そして乗せ込みモジュール２５がこの命令に係るデータを、ストレージ部１３のブロックアドレスＸのブロックへ書込む（Ｗ：Ｓ２２）。
【００６８】
制御モジュール２４は、乗せ込みモジュール２５の動作から、暗号化処理手段としての暗号化モジュール２３が暗号化処理のためにデータを読み出した（ｒ）ブロックに対し、暗号化処理の結果を書込むより前（ｗｅより前）に、オペレーティングシステム３０から当該ブロックへ、暗号化されていないデータの書き込み命令（Ｗ）があったと判断する。
【００６９】
そして制御モジュール２４は、暗号化モジュール２３に対して、現在処理しているデータを破棄し、処理の対象としたブロックに新たに書込まれたデータを再度読み出す処理を行うよう指示する（Ｓ２３）。この例は、先に掲げた表のＤ１のアクセスパターンに対応する。
【００７０】
［速度調整］
また本実施の形態の情報処理装置では、ハイパーバイザ部２０の制御モジュール２４は、オペレーティングシステム３０と、入出力デバイス（ストレージ部１３，操作部１４，表示部１５，及び通信部１６のいずれか）との間のアクセス頻度に基づいて、暗号化モジュール２３の処理頻度を制御してもよい。
【００７１】
本実施の形態の一例では、これら入出力デバイスへのアクセスが、割込み（インタラプト）によって行われる。この場合、ハイパーバイザ部２０は、例えば２００ミリ秒あたりの入出力デバイスに対する割込みの回数を調べる。
【００７２】
割込みは入出力デバイスへのアクセス以外にも発生するため、利用者がなにもしていないときにも２００ミリ秒あたり１００回弱の割込みが発生しているとする。しかしキーボードやマウスへの操作が行われると、割込みは１５０回程度となり、ファイルのダウンロードや、アプリケーションの起動、動画再生等では、２００回程度の割込みが発生する。このうち、キーボードやマウスへの操作については利用者の体感応答速度に直接関係するので、制御モジュール２４は、割込み頻度が、キーボードやマウスの操作が行われているときの頻度に相当する頻度以上となる場合、暗号化対象候補ブロックの出力を行わず、暗号化処理を一時的に保留する。これにより暗号化処理の頻度が制御される。
【００７３】
［スケジューリング］
またここまでの説明では、制御モジュール２４は、オペレーティングシステム３０によって自由に利用可能なブロックの先頭から順に、暗号化対象候補ブロックとすることとしていたが、本実施の形態はこれに限られない。
【００７４】
例えばハイパーバイザ部２０は、前回アクセスされたブロック近傍の暗号化されていないブロックから順に、暗号化対象候補ブロックとしてもよい。ここで近傍とあるのは、前回アクセスされたブロックのブロックアドレスＸからの距離（ブロックアドレスＹとブロックアドレスＸとの距離を例えば｜Ｙ−Ｘ｜とする。ここで｜＊｜は＊の絶対値を意味する）が予め定めた範囲内であることとしてもよいし、あるいは前回アクセスされたブロックアドレスＸからの距離が最も小さいブロックであって、暗号化されていないブロックであることとしてもよい。これによると、前回アクセスされたブロックに近いブロックが暗号化処理の対象となるので、ストレージ部１３がハードディスクドライブである場合など、シークタイムが比較的大きいデバイスである場合に暗号化処理をより迅速に行わせるのに有効である。
【００７５】
［進捗状況の記録］
なお、ハイパーバイザ部２０のフィルタモジュール２２が保持する暗号記録情報は、ブロックごとの暗号化の進捗に関する情報として、情報処理装置が電源を切られた後でも保持しておくことが好ましい。そこで本実施の形態のハイパーバイザ部２０は、オペレーティングシステム３０からシャットダウンに関わる指示（デバイスへの停止コマンド、電源断のコマンド、再起動のコマンド等）が入力されると、ハイパーバイザ部２０は、フィルタモジュール２２の保持する暗号記録情報をストレージ部１３のうち、オペレーティングシステム３０によって利用されない部分（例えばパーティションとパーティションとの間の空き領域等）に格納する。
【００７６】
なお、オペレーティングシステム３０によって利用されない部分が存在しない場合は、オペレーティングシステム３０が利用しているブロックの一部（複数のブロック）内のデータに対して、圧縮処理を実行し、当該ブロックにわたって圧縮処理後のデータを記録したのち、その圧縮処理によって空いた部分に、暗号記録情報を記録してもよい。
【００７７】
ハイパーバイザ部２０は、情報処理装置が起動されたときに、予め指定された記憶領域から暗号記録情報を読み出す。例えばパーティションとパーティションとの間の空き領域に格納した場合は、当該パーティションとパーティションとの間の空き領域から暗号記録情報を読み出して、フィルタモジュール２２がこれを保持し、ハイパーバイザ部２０としての処理を開始し、また暗号化の処理を継続する。
【００７８】
またブロック内のデータを圧縮し、その圧縮により得られた空き領域に暗号記録情報を保持させた場合は、当該空き領域から暗号記録情報を読み出してフィルタモジュール２２がこれをリストアする一方、圧縮したデータを伸長してもとの（圧縮前の）ブロックごとのデータを再生する。そして再生したブロックごとのデータを、元のブロックに書き戻してから、ハイパーバイザ部２０としての処理を開始し、また暗号化の処理を継続する。
【００７９】
［暗号化処理完了後の動作］
なお、暗号化の処理が終了し、ストレージ部１３のすべてのブロックが暗号化された後は、フィルタモジュール２２において暗号化されているか否かを判断する必要はなくなる。そこでハイパーバイザ部２０は、暗号化の処理が終了すると、その後のストレージ部１３へのアクセスにおいて、フィルタモジュール２２での暗号化判定を働かないように制御する。
【００８０】
この暗号化判定が働かないように制御されたフィルタモジュール２２は、暗号記録情報を参照することなく、オペレーティングシステム３０から受け入れた書き込み命令に含まれるデータを暗号化して、格納先のブロックに格納する。またこの暗号化判定が働かないように制御されたフィルタモジュール２２は、指定されたブロックから読み出したデータを（暗号記録情報を参照することなく）復号して、オペレーティングシステム３０へ出力する。
【符号の説明】
【００８１】
１１  制御部、１２  メモリ部、１３  ストレージ部、１４  操作部、１５  表示部、１６  通信部、２０  ハイパーバイザ部、２１  イベント監視部、２２  フィルタモジュール、２３  暗号化モジュール、２４  制御モジュール、２５  乗せ込みモジュール、２６  アクセスモジュール、２７  記録モジュール、２８  処理モジュール、３０  オペレーティングシステム。
【図１】
0005829959.tif 000003
【図２】
0005829959.tif 000004
【図３】
0005829959.tif 000005
【図４】
0005829959.tif 000006
【図５】
0005829959.tif 000007