本発明の実施の一形態を図面を参照して以下に説明する。図1を参照すると、本発明の実施の形態のデータ処理装置は、プログラム制御により動作するコンピュータ装置100からなる。
本実施の形態のコンピュータ装置100は、通常情報を扱う通常モードと機密情報を扱う機密モードとを切換自在な動作モードとして設定するモード設定手段と、所定単位の記憶エリアであるクラスタごとに各種データを記憶するデータ記憶媒体であるHDD103と、クラスタを少なくとも通常情報のみ記憶されている通常クラスタと機密情報のみ記憶されている機密クラスタと通常情報と機密情報とが記憶されている共有クラスタと通常情報も機密情報も記憶されていない空きクラスタとに区分するクラスタ区分手段と、通常モードの設定下で通常情報を指定された通常クラスタに記憶させる通常格納手段と、通常モードの設定下で通常情報を指定された通常クラスタから読み出す通常読出手段と、機密モードの設定下で機密情報を指定された機密クラスタに記憶させるとともに通常クラスタが指定されたときには機密クラスタにリダイレクトして記憶させる機密格納手段と、指定された通常クラスタと記憶された機密クラスタとのリダイレクト関係を対応する機密情報ごとに生成するマップ生成手段106と、機密モードの設定下で機密情報を指定された機密クラスタから読み出すとともに通常クラスタが指定されたときにはリダイレクト関係により記憶された機密クラスタから読み出す機密読出手段と、を有する。
より具体的には、本実施の形態のコンピュータ装置100は、CPU101、メモリ102、データ記憶媒体であるHDD103、等のハードウェア、OS(Operating System)104、各種のアプリケーションプログラム(図示せず)、等のソフトウェア、を有する。
さらに、IO(Input/Output)リダイレクト手段105、マップ生成手段106、削除手段107、回収手段108、暗号化手段109、等の論理機能、を備える。前述のモード設定手段とクラスタ区分手段と通常格納手段と通常読出手段と機密格納手段と機密読出手段とは、上述のIOリダイレクト手段105に集約されている。
このような論理機能は、例えば、OSや各種のアプリケーションプログラム等のソフトウェアに対応してCPU101等のハードウェアが各種動作を実行することなどで、論理的に実現されている。上述のようなコンピュータ装置100の構成要素は、それぞれ概略以下のように機能する。
CPU101は、コンピュータ内外の各装置の制御や情報の計算・加工を行い、メモリに記憶されたプログラムを実行したり、入力装置や記憶装置から情報を受け取り、演算・加工した上で、出力装置や記憶装置に出力したりする。
CPU101の例として、マイクロプロセッサ(microprocessor)、または同様の機能を有するIC(Integrated Circuit:半導体集積回路)等が考えられる。ただし、実際には、これらの例に限定されない。
メモリ102は、CPUが直接読み書きできるRAM(Random Access Memory)やROM(Read Only Memory)、または、フラッシュメモリ等の半導体記憶装置である。ここでは、メモリ102は、主記憶装置(メインメモリ)を示す。ただし、実際には、これらの例に限定されない。
HDD103は、コンピュータ内外で情報やプログラムを格納する補助記憶装置である。ここでは、HDD103は、外部記憶装置(ストレージ)を示す。なお、このような外部記憶装置としては、SSD(Solid State Drive)等のフラッシュメモリドライブでもよい。
また、このような外部記憶装置としては、DVD(Digital Versatile Disk)−RAMやメモリカード等のデータ記憶媒体(メディア)等でもよい。また、HDD103は、コンピュータ装置100に内蔵された記憶装置に限らず、周辺機器(外付けHDD等)や外部のサーバ(ストレージサーバ等)に設置された記憶装置でもよい。ただし、実際には、これらの例に限定されない。
HDD103は、セクタという単位で情報を記録する。例えば、一般的なHDDでは512byteである。クラスタとは複数のセクタ集合であり、OSは記憶エリアであるクラスタの単位で情報の読み書きを行う。以降、クラスタ単位での処理を説明するが、セクタ単位でも同様の動作によって、機密情報と通常情報とを区別して記録することができる。
IOリダイレクト手段105は、OSやOS内部で動作するアプリケーションプログラムのHDD103への書き込みをフックし、HDD103の空き領域にリダイレクトすることで、機密情報を区別して記録する。また、読み込みをフックし、リダイレクト先から機密情報を読み込み、機密情報をOSへ渡す。
本発明では、HDD103のクラスタは、四つの状態を持つ。クラスタが空きエリアとなる空き状態は、情報が記録されていない状態である。クラスタが共有エリアとなる共有状態は、機密モードと通常モードとの両方で読み込まれる状態である。
クラスタが通常エリアとなる通常状態は、通常モードでのみ読み込まれる状態である。クラスタが機密エリアとなる機密状態は、機密モードでのみ読み込まれる状態である。マップ生成手段は、HDD103の状態を示すマップを生成する。
さらに、マップ生成手段106は、IOリダイレクト手段105によって、機密情報がHDD103のどこにリダイレクトされたのかをマップに記録する。また、IOリダイレクト手段105からの問い合わせに応じてマップを参照し、クラスタの状態やリダイレクト先の場所を返す。
削除手段107は、マップ生成手段106に問い合わせることで、すべてのリダイレクト先を取得し、乱数を書き込む。すなわち、すべての機密情報を乱数で上書きすることによって削除する。
回収手段108は、機密モードのときに動作し、ある時点、例えば、プロジェクト開始時点と現時点のファイルの構成を比較し、機密モードで動作中に更新されたファイルと新規作成されたファイルを、CD−ROMやUSBメモリなどの外部記憶媒体、またはファイルサーバなどの他のコンピュータへ機密情報を書き込む。
暗号化手段109は、機密情報がリダイレクトされる際に、IOリダイレクト手段105から機密情報を受け取り、暗号化した後、IOリダイレクト手段105へ暗号化した機密情報を返す。
つぎに、本実施の形態の全体の動作について説明する。初期状態では、HDD103の情報が記録されているクラスタはすべて共有状態であり、情報が記録されていないクラスタは空き状態である。
マップ生成手段106は、HDD103のファイルシステムのクラスタ使用情報を読み込むことにより、初期状態のマップを生成する。その後、以下に示されるように、機密モードや通常モードで書き込みが行われると、機密状態や通常状態に状態が変化する。
本発明は、図2に示すように、機密モードにおいてOSやアプリケーションプログラムが通常状態のクラスタに書き込むと、書き込みを機密状態のクラスタにリダイレクトする。また、機密モードにおいて、通常状態のクラスタが読み込まれた場合に、リダイレクトを行ない、機密状態のクラスタを読み込む。この動作により、機密情報は、機密状態のクラスタに記録される。
図3のシーケンス図を参照して、動作を詳細に説明する。OSやOS上で動作するアプリケーションプログラムが、HDD103に対して、読み書きの命令を発行する。IOリダイレクト手段105は、この命令をフックする(S1)。つぎに、機密モードで動作しているか否かを判定し(S2)、命令が読み書きのどちらかであるかを判定する(S3またはS12)。
まず、機密モードの書き込みの動作を説明する。IOリダイレクト手段105は、マップ生成手段106に、OSやアプリケーションプログラムが指定した書き込み対象のクラスタの状態を問い合わせる。
マップ生成手段106は、図4に示されるマップを参照することで、書き込みクラスタの状態を取得し、状態をIOリダイレクト手段105へ伝える(S4)。IOリダイレクト手段は、書き込み対象の状態を判定し、つぎに示す処理を行う(S5)。
OSやアプリケーションプログラムが指定した書き込み対象のクラスタが共有状態の場合、IOリダイレクト手段105は、マップ生成手段106に、機密状態のクラスタ作成の指示を行う。
マップ生成手段106はマップを参照し、空き状態のクラスタを1つ選択し、機密状態に変更する。さらに、マップ生成手段106は、書き込み対象クラスタの状態を通常状態に変更する。
そして、書き込み対象通常状態のクラスタと作成した機密状態のクラスタとの紐付けをマップに記録する。そして、マップ生成手段106は、作成した機密状態のクラスタの場所をIOリダイレクト手段105へ返す。最後に、IOリダイレクト手段105は、機密状態のクラスタに情報を書き込む(S6)。
OSやアプリケーションプログラムが指定した書き込み対象のクラスタが通常状態の場合、すなわち、過去にステップS6の動作によってリダイレクトが行われたことがある場合、IOリダイレクト手段105はマップ生成手段106へ、リダイレクト先を問い合わせる。
マップ生成手段106は、マップに記録されている当該クラスタのリダイレクト先のクラスタの場所を読み込み、IOリダイレクト手段105へ返す。IOリダイレクト手段105は、リダイレクト先のクラスタに対して書き込む(S7)。
OSやアプリケーションプログラムが指定した書き込み対象のクラスタが空き状態の場合、IOリダイレクト手段105は、リダイレクトを行わずに、書き込み対象クラスタに対して書き込む。
さらに、IOリダイレクト手段105は、書き込み対象クラスタを機密状態に変更するようにマップ生成手段106へ指示し、マップ生成手段106は当該クラスタの状態を変更する(S8)。
OSやアプリケーションプログラムが指定した書き込み対象のクラスタが機密状態の場合、すなわち、過去にステップS8によって機密情報が書き込まれたクラスタである場合、IOリダイレクト手段105は、リダイレクトを行わずに、書き込み対象クラスタに対して書き込む(S9)。
つぎに、機密モードの読み込みの動作を説明する。IOリダイレクト手段105は、ステップS4と同様に、OSやアプリケーションプログラムが指定した読み込み対象のクラスタの状態を取得し(S4)、状態に応じてつぎに述べる処理を行う(S5)。
読み込み対象のクラスタが共有状態または機密状態の場合、IOリダイレクト手段105は、リダイレクトを行わずに、読み込み対象クラスタに記録されている情報を読み込み、OSへ返す(S11)。
なぜなら、共有状態のクラスタはリダイレクトが行われていないクラスタだからである。また、機密状態のクラスタは、ステップS8によって書き込まれたクラスタであり、ステップS8ではリダイレクトが行われていないためである。
読み込み対象のクラスタが通常状態の場合、書き込まれた情報はステップS6の動作によって生成された機密状態のクラスタに記録されている。よって、IOリダイレクト手段105は、マップ生成手段106に、リダイレクト先の機密状態のクラスタの場所を問い合わせる。
マップ生成手段106は、マップを参照し、通常状態のクラスタに対応する機密状態のクラスタの場所を取得し、IOリダイレクト手段105へ返す。IOリダイレクト手段105は、機密状態のクラスタから情報を読み込みOSへ渡す(S10)。
つぎに、通常モードの書き込みの動作を説明する。まず、ステップS4と同様に、読み込み対象クラスタの状態を問い合わせる(S13)。書き込み対象のクラスタが共有状態の場合、そのまま当該クラスタへ書き込むと、通常モードと機密モードで、当該クラスタの情報が共有されているため、機密モードまで影響が及び、機密モードのファイルシステムが破損してしまう。よって、書き込む前に、つぎに示す動作によって、共有状態を解除する。
マップ生成手段は、ステップS6と同様に、機密状態のクラスタを作成する。そして、IOリダイレクト手段は、書き込み対象の共有状態のクラスタの情報を、機密状態のクラスタへコピーする。
この動作により、次回、機密モードで書き込み対象のクラスタが読み込まれたときには、リダイレクト先の機密状態のクラスタに記録された古い情報が読み出されることになり、ファイルシステムが破損することはない(S15)。
上記の動作によって共有状態を解除した後、IOリダイレクト手段は、リダイレクトを行わずに、OSやアプリケーションプログラムが指定した書き込み対象クラスタに対して情報を書き込む(S16)。
OSやアプリケーションプログラムが指定した書き込み対象のクラスタが通常状態または、空き状態であるとき、IOリダイレクト手段105は、リダイレクトを行わずに書き込む。マップ生成手段106は、書き込み対象のクラスタの状態が空き状態であれば、状態を通常状態に変更する(S17)。
つぎに、通常モードの読み込みの動作を説明する。通常モードでの書き込みは、ステップ16、ステップ17で説明したように、リダイレクトは行われない。よって、読み込みもリダイレクトを行わない。
IOリダイレクト手段105は、OSやアプリケーションプログラムが指定した読み込み対象クラスタから情報を読み込み、OSやアプリケーションプログラムへ返す(S18)。
以上のように、IOリダイレクト手段105が読み書き対象のクラスタをリダイレクトすることによって、機密情報を区別して記録する。IOリダイレクト手段105は、上記の動作に加え、HDD103の消費量を抑えるために、以下の動作を行ってもよい。
上記の動作では、IOリダイレクト手段105は、ステップS6で書き込みをリダイレクトし、機密状態のクラスタを生成して情報を記録していたが、以下のように、同じデータが書き込まれるときは、リダイレクトを行わなくてもよい。
ステップS6の開始時に、IOリダイレクト手段105は、HDD103から書き込み対象のクラスタの情報を読み込む。つぎに、読み込んだ情報と書き込もうとしている情報を比較する。
異なる情報である場合、上に示したステップS6の動作によって、リダイレクトを行う。同じ情報である場合、リダイレクトを行わず、書き込み対象のクラスタにデータを書き込む。同じ情報を書き込んでも、HDD103に記録される情報は変化しないので、実際には書き込みを行わず、書き込みが成功したというメッセージをOSに返してもよい。
この動作では、機密モードにおいて、共有状態のクラスタに同じデータを書き込んだとき、機密情報を記憶するクラスタを作成しないので、重複する情報を記録することを防ぎ、HDD103の使用量を減らすことができる。
さらに、別の動作を説明する。上記の動作では、IOリダイレクト手段105は、ステップS7においてリダイレクト先の機密状態のクラスタに書き込みを行っていたが、書き込もうとしている情報とリダイレクト元の通常状態のクラスタの情報が同じ場合に、書き込みを行わずに、リダイレクト先の機密状態のクラスタを削除してもよい。
ステップS7の開始時に、IOリダイレクト手段105は、リダイレクト元である通常状態のクラスタの情報を読み込む。そして、読み込んだ情報と、書き込もうとしている情報を比較する。
同じである場合、リダイレクトを行って機密状態のクラスタに書き込むと、通常状態のクラスタと機密状態のクラスタには、同じ情報が記録されることになり、HDD103を無駄に消費してしまう。
よって、IOリダイレクト手段105はマップ生成手段106に、リダイレクト元の通常状態のクラスタを、共有状態に変更するように指示し、マップ生成手段106は、当該クラスタの状態を共有状態に変更する。
さらに、IOリダイレクト手段105は、リダイレクト先の機密状態のクラスタを空き状態に変更するように指示し、マップ生成手段は、当該クラスタの状態を空き状態に変更する。
リダイレクト元のクラスタの情報と書き込もうとしている情報が異なる場合、上記で説明した、ステップS7のリダイレクトの動作を行う。この動作によって、通常状態のクラスタと機密状態のクラスタで、重複したデータを持つことを回避できるので、よりHDD103の消費量を減らすことができる。
さらに、別の動作について説明する。IOリダイレクト手段105は、以下の動作によって、機密状態や通常状態のクラスタを削除し、HDD103の消費量を減らしてもよい。
多くのファイルシステムの場合、ファイルの情報をHDD103のクラスタに記録するために、ファイルの情報がどのクラスタに書き込まれているかを示す情報(ファイルテーブル)を持つ。
ファイルの削除は、このファイルテーブルの情報を書き換え、削除するファイルに対して削除を示すマークをつけることにより、OSやアプリケーションプログラムから当該ファイルを見えなくすることによって行われる。
よって、IOリダイレクト手段105は、ファイルテーブルの変化を監視することによって、ファイルの削除を検知し、削除されたファイルが記録されているマップ生成手段106のリダイレクト関係も削除することにより、HDD103の消費量を減らすことができる。
また、本実施の形態のIOリダイレクト手段105は、通常モードにおいて、OSやアプリケーションプログラムが、機密状態のクラスタに対して書き込みを行わないように、以下の処理を行う。
まず、ファイルの作成やファイルの内容の追加によって、機密状態のクラスタや通常状態のクラスタが生成された場合を考える。多くのファイルシステムでは、クラスタ単位でそのクラスタが使用されているか否かを記憶している。
ファイルシステムも、HDD103に記録されるため、IOリダイレクト手段の動作によって、機密モードと通常モードでは、異なる内容になる。そのため、例えば、図4のクラスタNo5は、機密情報が記録されているにも関わらず、通常モードのOSから見ると何もデータが書かれていないように見える。
よって、OSはデータをクラスタNo5に書き込もうとしてしまう。書き込みが行われると、機密モードでクラスタNo5に書き込んだ情報が失われるため、これを防ぐ必要がある。
これを防ぐために、IOリダイレクト手段105は、ステップS6またはステップS15で機密状態のクラスタが生成され、ファイルシステムのクラスタ使用情報が使用中に変更されたとき、通常モードのファイルシステムのクラスタ使用情報についても、使用中に変更する。
上記とは逆の場合、すなわち、通常モードのステップS14で空き状態と判定され、ステップS16において、状態を通常状態に変更したクラスタは、機密モードのときにOSからは何も記録されていないように見えるため、上書きされる可能性がある。
よって、IOリダイレクト手段105は、ステップS16で通常モードでのクラスタの使用情報を機密モードのクラスタの使用情報に反映させることによって、機密モードで当該クラスタにOSが書き込むことを防ぐ。
例えば、NTFSファイルシステムでは、$BITMAPという特殊なファイルに、HDD103の各クラスタが使用されているか否かを記録している。IOリダイレクト手段105は、書き込みの命令を監視することによって、この$BITMAPファイルの変化を監視する。
そして、機密モードで$BITMAPが更新され、あるクラスタの状態が使用中に変更したことを検知し、同様の変更を通常モードの$BITMAPファイルに対しても行えばよい。その逆に、通常モードで$BITMAPが更新された場合に、その変化を機密モードにも反映させればよい。
上記の動作の代わりに、$BITMAPが記録されているクラスタについてはリダイレクトを行わない、すなわち、$BITMAPのファイルが記録されるクラスタを、通常モードと機密モードで共通にすることによって、$BITMAPの更新を他のモードに伝えてもよい。
つぎに、ファイルが削除された場合を考える。OSやアプリケーションプログラムがファイルを削除し、そのファイルが共有状態のクラスタを持つ場合、ファイルシステムのクラスタ使用情報が未使用に変更されると、OSやアプリケーションプログラムが当該クラスタに別の情報を書き込み、他のモードのファイルが破損する可能性がある。
よって、IOリダイレクト手段105は、ファイルシステムのクラスタ使用情報を監視し、未使用に変更されたクラスタが、共有状態であるか否かを判定し、共有状態である場合は、未使用に変更された情報を使用中に戻す。
上記のように、ファイルシステムのクラスタ使用情報を操作するのではなく、書き込まれたときにリダイレクトを行うことによって、クラスタが上書きされ、情報が失われることを防いでもよい。
例えば、ステップS6やステップS15で生成された機密状態のクラスタが、通常モードでは何も記録されていないように見えるため、書き込みの対象となる可能性がある。そこで、ステップS14において、書き込み対象が機密状態であるかを確認する。
そして、機密状態である場合、ステップS15と同様の手順で、機密状態のクラスタの情報を空きクラスタにコピーした後、書き込み対象クラスタに情報を書き込む。機密状態のクラスタの情報はコピーされるため、情報が失われることはない。
リダイレクト先を持たない通常状態のクラスタ、すなわち、ステップS14において空き状態と判定されて、ステップS16で空き状態から通常状態になったクラスタは、機密モードで何も記録されていないように見えるため、書き込みの対象となる可能性がある。よって、機密モードで書き込みが行われたときは、以下の動作を行う。
ステップS7で、通常状態のクラスタのリダイレクト先が存在するか否かを確認する。存在しない場合、IOリダイレクト手段は、上記で説明したステップS7の動作の代わりに、ステップS6と同様の動作を行ない、新たにリダイレクト先の機密状態のクラスタを生成し、機密状態のクラスタに情報をリダイレクトする。
リダイレクトが行われるため、通常状態のクラスタの情報が失われることはない。つぎに、削除手段107の動作を説明する。削除手段107は、ユーザから機密情報削除指示を受けると、マップ生成手段106に対し、すべての機密状態のクラスタの場所を問い合わせる。
マップ生成手段106は、マップを参照し、すべての機密状態のクラスタの場所を返す。削除手段107は、すべての機密状態のクラスタに対して、乱数を書き込み、機密情報を削除する。
本発明は、機密モードでの書き込み(ステップS6からステップS8)の動作によって、機密モードで書き込まれた情報は、すべて機密状態のクラスタに書き込まれるように動作するため、機密状態のクラスタを削除することによって、すべての機密情報の削除が保証できる。
上記の説明では、機密情報削除指示は、ユーザからであったが、組織の管理者などがネットワークを通じて削除手段107に対して機密情報削除指示を行ってもよい。また、削除手段107は、特定のサーバと定期的に通信を行い、通信が一定期間行えなかった場合に、機密情報の削除を行ってもよい。この動作では、例えば、コンピュータが盗まれたときでも、機密情報が削除されるため、情報漏洩が起こらない。
つぎに、回収手段108の動作を説明する。まず、回収手段108は特定のタイミング、例えば、本システムが動作を始めたときや、あるプロジェクトが開始したときに、HDD103をスキャンし、すべてのファイルについて、図5に示すように、ファイル名と更新日時を記録したリスト(初期ファイルリスト)を作成する。
そして、回収手段108が機密情報回収の指示を受けたとき、機密モードで本システムを起動し、初期ファイルリストの作成と同様に、すべてのファイルについて、ファイル名と更新日時を記録したリスト(更新ファイルリスト)を作成する。
つぎに、以下の動作によって、回収手段108は、機密モードで更新されたファイルと新たに作成されたファイル、すなわち、機密情報が記録されているファイルを特定する。
更新されたファイルを特定するために、回収手段108は、初期ファイルリストと更新ファイルリストの両方に存在するファイルについて、更新日時を比較し、更新日時が異なるファイルを、回収対象リストに追加する。
また、回収手段108は、新規作成されたファイルを特定するために、初期ファイルリストには存在せず、更新ファイルリストにのみ存在するファイルを、回収対象ファイルリストに追加する。
最後に、回収手段108は、回収対象のファイルをHDD103から読み出し、外部記憶媒体にコピーする。NASやファイルサーバなどへ、ネットワーク経由でアップロードしてもよい。
つぎに暗号化手段109の動作を説明する。暗号化手段109は、IOリダイレクト手段105から平文情報を受け取ると、内部に記憶している暗号鍵を用いて暗号化し、IOリダイレクト手段105へ返す。また、暗号化情報を受け取ると、復号し、平文情報をIOリダイレクト手段105へ返す。
暗号化手段を用いて、機密情報を暗号化する場合、IOリダイレクト手段105は、機密モードでの書き込み時、すなわちステップS6,ステップS7,ステップS8,ステップ9で、平文情報を暗号化手段109に渡して暗号化し、暗号化された情報をHDD103に書き込む。
また、機密モードでの読み込み時、すなわちステップS10,ステップ11において、HDD103から読み込んだ暗号化された情報を、暗号化手段109に渡して復号し、平文の情報をOSへ渡す。
上記のように、機密モードのHDD103へのアクセス時に、IOリダイレクト手段105が暗号化手段109を呼び出すことにより、HDD103上の機密情報を暗号化できる。
よって、通常モードにおいて、OSやアプリケーションプログラムが機密状態のクラスタの情報を読み込んだとしても、暗号化されているため、機密情報が通常モードで扱われない。
また、この動作では、暗号化は機密情報のみに限られ、共有状態のクラスタの情報、例えば、OSやアプリケーションプログラムの実行ファイルなどは暗号化されないため、OSやアプリケーションプログラムの実行速度が低下することはない。
機密情報が通常モードで扱われることを防ぐ方法として、上記では、暗号を用いたが、IOリダイレクト手段105が、機密状態を持つクラスタへのアクセスを遮断してもよい。
IOリダイレクト手段105は、通常モードで動作中に読み込み命令をフックすると、マップ生成手段106へ、読み込み対象のクラスタの状態を問い合わせる。クラスタの状態が機密状態であった場合、IOリダイレクト手段105は、OSへ読み込み失敗のエラーメッセージを返す。エラーメッセージの代わりに、ダミーの情報、例えば、すべて0を返してもよい。
つぎに、本発明の実施の第二の形態について図面を参照して詳細に説明する。図6は実施の第二の形態を示すブロック図である。図6に示すように、NIC110とネットワーク制御手段111を備えている点で、実施の第一の形態と異なっている。実施の第一の形態と同様の構成要素については、同一の符号を付し、詳細な説明を省略する。
NIC110は、通信回線(ネットワーク)を介して、外部と情報の送受信を行うための通信装置である。ネットワーク制御手段111は、IOリダイレクト手段105へモードを問い合わせ、OSやアプリケーションプログラムが出力したネットワーク通信をフックし、機密モードのときのみ、特定のサーバへのアクセスを許可する。
ネットワーク制御手段111の動作を詳細に説明する。ネットワーク制御手段は、内部にファイルサーバのアドレスを保有する。ネットワーク制御手段は、コンピュータが起動すると、IOリダイレクト手段105に、どちらのモードで動作しているかを問い合わせる。
通常モードで動作しているとき、ネットワーク制御手段111は、OSまたはアプリケーションプログラムのネットワーク通信を監視する。つぎに、ネットワーク制御手段111は、通信先が、内部に記憶しているサーバのアドレスと等しいか否かを判定する。等しい場合、ネットワーク制御手段は、通信を遮断する。等しくない場合、通信を許可する。
機密モードで動作しているとき、ネットワーク制御手段111は、同様に通信を監視し、通信先が記憶しているアドレスと等しいか否かを判定する。等しい場合、ネットワーク制御手段は、通信を許可し、等しくない場合、通信を遮断する。
以上の動作によって、OSやアプリケーションプログラムは、機密モードで動作しているときのみ、ファイルサーバにアクセス可能である。すなわち、ファイルサーバからダウンロードされた情報は、すべて機密状態のクラスタに保存される。
よって、削除手段107は、ファイルサーバからダウンロードされた情報を、すべて削除することが保証できる。また、回収手段108は、ファールサーバからダウンロードした情報をすべて回収することができる。
以上のように、実施の第二の形態では、サーバからダウンロードした機密情報をすべて削除または回収することを保証できる効果がある。
上記の説明では、ネットワーク制御手段111は、内部にサーバのアドレスを記憶し、通信の可否を決定していたが、サーバのアドレスに加えて、ディレクトリ名やファイル名も記録し、通信の可否を決定してもよい。
この場合、機密モードでは、サーバのアドレスに加えて、アクセスするディレクトリ名やファイル名が等しいときのみ、通信を許可する。この動作では、例えば、あるサーバの/secretディレクトリのみを機密情報として扱うことができる。
つぎに、より具体的に本願発明の実施例を説明する。図1のデータ処理装置100は、CPU101、メモリ102、HDD103、マウス、キーボード、ディスプレイのようなハードウェアを備える一般的なコンピュータである。
IOリダイレクト手段105やマップ生成手段106は、例えば、OSのドライバとして実装できる。コンピュータの電源が入れられると、IOリダイレクト手段105は、通常モードか機密モードのどちらで動作するかをユーザに問い合わせるダイアログを表示させる。このとき、IDとパスワードを入力させることによって、ユーザ認証を行ってもよい。
つぎに、IOリダイレクト手段105は、OSやアプリケーションプログラムの読み書き命令のフックを実行する。例えば、Windows(登録商標)であれば、ボリュームフィルタドライバを、NTFSドライバと、ディスクドライバの間に挟みこむことにより、読み書きの命令であるIRP(IOリクエストパケット)をフックすることができる。
例えば、機密モードで書き込みの命令をフックした場合、IOリダイレクト手段105は、マップ生成手段106へ、書き込み対象のクラスタの状態を問い合わせる。例えば、Windowsでは、IOリダイレクト手段105は、IRPの命令がIRP_MJ_WRITEであれば書き込み命令と判定することができ、書き込みクラスタの場所は、IRP中のパラメータから取得することができる。
マップ生成手段106は、図4のマップを作成する。例えば、マップ生成手段106は、初回起動時に、HDD103の空き領域にHDD103のクラスタ総数の分だけ、クラスタの状態を記録する領域を用意し、それをマップとして参照すればよい。
例えば、状態を記憶する領域を2byteにした場合、HDD103のクラスタ数が1000個であるとき、2000byteの領域を確保すればよい。また、クラスタ番号123の場所の状態を調べたいときには、123*2byte目の情報を読み込めばよい。
初回起動時にマップ生成手段106は、例えば、ファイルシステムがNTFSであれば、クラスタが使用中か否かを記録した$BITMAPファイルを参照することによって、すべてのクラスタについて、使用中であれば共有状態を、未使用であれば空き状態を、マップに記録する。例えば、ファイルシステムがFATであれば、ディレクトリエントリを参照することによって、各クラスタが使用中であるか否かを判定し、同様の処理を行う。
対象のクラスタが共有状態である場合、例えば、図4のクラスタNo1が書き込み対象であるとき、マップ生成手段106は、空き状態であるNo4クラスタの状態を機密状態に変更する。
そして、マップ生成手段は、クラスタNo1のリダイレクト先として、クラスタNo4をマップに記録する。IOリダイレクト手段105は、書き込み命令の中の対象クラスタを、No1からNo4に書き換える。
例えば、IOリダイレクト手段105がWindowsのドライバとして実装されている場合、IRP中の書き込み位置情報をクラスタNo4に変更し、下層のディスクドライバに変更したIRPを渡すことによって、空き状態であったNo4クラスタに情報を書き込む。
HDD103の消費量を減らすために、以下の動作を行ってもよい。上記の書き込み動作を行う前に、IOリダイレクト手段105は、例えば、書き込み対象のクラスタNo1の場合、クラスタNo1に対して読み込みのIRPを発行して情報を読み込む。
つぎに、クラスタNo1に記録されている情報と、OSが発行したIRPに含まれる書き込み情報と比較し、情報が同一の場合は、機密状態のクラスタを作らずに、クラスタNo1に書き込む。書き込みを行わずに、書き込み成功のメッセージをOSに返してもよい。
対象のクラスタが通常状態である場合、例えば、図4のクラスタNo2が書き込み対象であるとき、IOリダイレクト手段105はマップ生成手段106へリダイレクト先を問い合わせ、マップ生成手段106は、リダイレクト先の機密状態のクラスタであるNo3を返す。そして、IOリダイレクト手段105は、書き込み命令中の対象クラスタをNo2からNo3に書き換える。
HDD103の消費量を減らすために、以下の動作を行ってもよい。例えば、上記のリダイレクトの動作を行う前に、IOリダイレクト手段105は、リダイレクト元であるクラスタNo2の情報を、IPR読み込み命令を発行して読み込む。
つぎに、読み込んだ情報と、書き込もうとしている情報を比較する。読み込んだ情報と書き込もうとしている情報が同じである場合、IOリダイレクト手段はリダイレクトを行わない。
そして、マップ生成手段はクラスタNo3の状態を空き状態に変更する。更に、マップ生成手段は、クラスタNo2の状態を共有状態に書き換える。読み込んだ情報と書き込もうとしている情報が異なる場合は、上記で説明したように、IOリダイレクト手段は、クラスタNo3に書き込みのリダイレクトを行う。
対象のクラスタが空き状態である場合、例えば、図4のクラスタNo4が書き込み対象であるとき、マップ生成手段106は、クラスタNo4の状態を機密状態に変更する。IOリダイレクト手段105は、リダイレクトを行わずに、クラスタNo4に情報を書き込む。
つぎに、機密モードの読み込みの動作の具体例を示す。読み込み対象のクラスタの状態が通常状態であるとき、例えば、図4のクラスタNo2であるとき、IOリダイレクト手段105は、マップ生成手段106にリダイレクト先を問い合わせ、WindowsであればIRPの読み込み対象のクラスタの番号を変更することによって、クラスタNo3から情報を読み込む。
読み込み対象のクラスタが共有状態または機密状態であるとき、例えば、図4のクラスタNo1やクラスタNo5であるとき、リダイレクトを行わない。例えば、Windowsであれば、フックしたIRPを変更せずに、下層のディスクドライバに渡す。
つぎに、通常モードの書き込みの動作の具体例を示す。例えば、書き込み対象が共有状態である図4のクラスタNo1であるとき、マップ生成手段106は、空き状態のクラスタNo4を機密状態に変更し、クラスタNo1のリダイレクト先をNo4に設定する。
IOリダイレクト手段105は、例えば、Windowsであれば、クラスタNo1への読み込みIRPを発行してクラスタNo1に記録されている情報を読み込み、クラスタNo4への書き込みIRPを発行することにより、クラスタNo1の情報をクラスタNo4にコピーする。
つぎに、フックしたIRPの書き込み場所を変更することによって、クラスタNo1に情報を書き込む。書き込み対象が、通常状態のクラスタNo2や空き状態のクラスタNo4であるとき、IOリダイレクト手段105は、リダイレクトを行わない。つまり、例えば、Windowsであれば、フックしたIRPを変更せずに、下層のディスクドライバへ渡す。
通常モードの読み込みについては、リダイレクトを行わない。IOリダイレクト手段105は、フックしたIRPを変更せずに、下層のディスクドライバへ渡す。
つぎに、ファイル削除時の動作を具体的に説明する。IOリダイレクト手段105は、以下の動作によって、機密状態や通常状態のクラスタを削除してもよい。
IOリダイレクト手段105は、例えば、OSがファイルシステムとしてNTFSを利用していれば、MFT(マスターファイルテーブル)を、FATを利用していれば、ディレクトリエントリを監視することによって、ファイルの削除を検知する。
具体的には、MFTやディレクトリエントリは、HDD103に記録されているため、HDD103への書き込みを監視することによって、ファイルの削除を検知する。ファイルの削除を検知すると、IOリダイレクト手段105は、例えば、NTFSではMFTを参照することによって、FATでは、ファイルアロケーションテーブルを参照することによって、ファイルの情報が記録されているクラスタの場所を取得する。
そして、取得した各クラスタを対象として、以下の処理を行う。機密モードで、例えば、対象のクラスタが図4のクラスタNo2のように、通常状態でリダイレクト先がNo3の場合、IOリダイレクト手段は、クラスタNo3を空き状態に変更し、クラスタNo2のリダイレクト先を無しに変更する。
機密モードで、例えば、対象のクラスタが図4のクラスタNo5のように、機密状態であり、リダイレクト先となっていない場合、IOリダイレクト手段はマップ生成手段に指示し、クラスタNo5の状態を空き状態に変更する。
通常モードで、例えば、対象のクラスタが図4のクラスタNo2のように、リダイレクト先を持つ場合、IOリダイレクト手段は、リダイレクト先であるクラスタNo3に記録されているデータを、クラスタNo2にコピーする。そして、IOリダイレクト手段は、マップ生成手段に指示を行い、クラスタNo3の状態を空き状態に、クラスタNo2の状態を機密状態に変更する。
通常モードで、例えば、対象のクラスタが図4のクラスタNo6のように通常状態、かつリダイレクト先がない場合、IOリダイレクト手段は、マップ生成手段に指示し、クラスタNo6の状態を空き状態に変更する。
つぎに、削除手段107の具体的な例について説明する。削除手段107は、マップ生成手段106から、機密状態のクラスタのクラスタ番号を受け取ると、例えば、削除手段107をWindowsのドライバとして実装するのであれば、書き込みの命令を、デバイスドライバに対して発行し、機密状態のクラスタを上書きする。
例えば、マップの状態が図4であれば、マップ生成手段106はクラスタNo3とクラスタNo5を削除手段107へ通知し、削除手段107は、2つのクラスタを対象に、書き込みのIRPを発行する。書き込む情報は、乱数やゼロを書き込めばよい。より完全にHDD103の情報を削除するために、複数回書き込みを行ってもよい。
つぎに、回収手段108の具体的な動作の例について説明する。回収手段108は、本発明が始めて動作するときに、HDD103をスキャンし、ファイル名と更新日時を記録した初期ファイルリストを作成する。
また、回収の指示を受けたときに、同様の更新ファイルリストを作成する。そして、それぞれのファイルリストの更新日時を比較する。例えば、初期ファイルリストと更新ファイルリストが図5であるとき、ファイルaとファイルbは、更新日時が同じため、回収ファイルリストには加えない。ファイルcは更新日時が変わっているため、回収ファイルリストに追加する。
ファイルdは、初期ファイルリストに存在せず、更新ファイルリストにのみ存在するため、新規作成されたファイルとみなして回収ファイルリストに追加する。初期ファイルリストに存在し、更新ファイルリストに存在しないファイルは削除されたファイルであるので、回収ファイルリストには追加しない。
最後に、回収手段108は、作成した回収ファイルリストに記載されているファイルをHDD103から読み込み、例えば、CD−RやUSBメモリなどの外部記憶媒体へコピーする。コピーは、例えば、Network AttachedStoreage(NAS)やファイルサーバへ、Windowsファイル共有プロトコルやFTPなどのファイル転送プロトコルを用いて行ってもよい。
つぎに、暗号化手段109の具体的な例について説明する。暗号化手段109は、例えば、ドライバやアプリケーションプログラムとして実装できる。暗号化手段109は、IOリダイレクト手段105から平文のクラスタの情報を受け取ると、例えば、AESやRC4などの暗号アルゴリズムを用いて、クラスタの情報を暗号化し、IOリダイレクト手段105に返す。逆に、暗号化された情報を受け取ったときは、復号を行ない、IOリダイレクト手段105に返す。
つぎに、具体的な実施例を用いて、本発明の第二の実施例を説明する。本発明の第一の実施例と同様の箇所については説明を省略する。
ネットワーク制御手段111は、例えば、ドライバとして実装することができる。ネットワーク制御手段は、コンピュータ起動時にIOリダイレクト手段105へ動作モードを問い合わせる。
通常モードの場合、例えば、ネットワーク制御手段111は、NIC110へ出力されるIPパケットをフックする。そして、IPパケットのヘッダに含まれている宛先IPアドレスと、ネットワーク制御手段が内部に記憶しているサーバのIPアドレスを比較する。IPアドレスが同一の場合、パケットを破棄することによって通信を禁止する。一方、IPアドレスが異なる場合、パケットをNICへ渡すことにより、通信を許可する。
機密モードの場合、ネットワーク制御手段111は、同様にパケットをフックする。そして、通常モードとは逆に、宛先IPアドレスとサーバのIPアドレスが一致する場合に、通信を許可し、一致しない場合にパケットを破棄することによって通信を禁止する。
なお、本発明は本実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で各種の変形を許容する。例えば、上記形態ではデータ処理装置100の各部がコンピュータプログラムにより各種機能として論理的に実現されることを例示した。しかし、このような各部の各々を固有のハードウェアとして形成することもでき、ソフトウェアとハードウェアとの組み合わせとして実現することもできる。
なお、当然ながら、上述した実施の形態および複数の変形例は、その内容が相反しない範囲で組み合わせることができる。また、上述した実施の形態および変形例では、各部の構造などを具体的に説明したが、その構造などは本願発明を満足する範囲で各種に変更することができる。
この出願は、2009年 3月24日に出願された日本出願特願2009−072391号を基礎とする優先権を主張し、その開示の全てを、ここに取り込む。