(57)【要約】【課題】  暗号化対象となる電子ファイル（ファイル）をユーザが意識することなく確実に暗号化できるようにした電子ファイル処理プログラムおよび情報処理装置を提供する。【解決手段】  暗復号ファイルフックプログラム（電子ファイル処理プログラム）１２は、オペレーティングシステム１３に設けられたファイル処理に係わるＡＰＩ（Application Program Interface）をフックする。暗復号ファイルフックプログラム１２は、アプリケーションプログラム１１からのファイル処理に係わるＡＰＩの呼び出し指示を検出すると、処理対象となるファイルが暗号化（あるいは復号化）の対象となるか否かを判定し、この判定結果に基づき暗号化（あるいは復号化）を行う。【選択図】  図１
2008134821.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータを、
電子ファイル処理に係わるプログラムに対する呼び出し指示を検出する検出手段、
前記検出手段による検出に対応して前記電子ファイル処理に係わるプログラムの処理対象となる電子ファイルの内容に基づき当該電子ファイルが暗号化対象であるか否かを判定する暗号化判定手段、
前記暗号化判定手段による判定結果に基づき前記電子ファイルを暗号化する暗号化処理手段
として機能させるための電子ファイル処理プログラム。
【請求項２】
コンピュータを、
電子ファイル処理に係わるプログラムに対する呼び出し指示を検出する検出手段、
前記検出手段による検出に対応して前記電子ファイル処理に係わるプログラムの処理対象となる電子ファイルの拡張子に基づき当該電子ファイルが暗号化対象であるか否かを判定する暗号化判定手段、
前記暗号化判定手段による判定結果に基づき前記電子ファイルを暗号化する暗号化処理手段
として機能させるための電子ファイル処理プログラム。
【請求項３】
前記コンピュータを、
前記検出手段により検出した呼び出し指示に対応する処理の実行を制御する制御手段
として更に機能させるための請求項１または２記載の電子ファイル処理プログラム。
【請求項４】
前記暗号化判定手段は、
前記検出手段により電子ファイルを閉じる機能を有する電子ファイル処理に係わるプログラムに対する呼び出し指示を検出した場合に、当該処理対象となる電子ファイルが暗号化対象であるか否かを判定する
請求項１または２記載の電子ファイル処理プログラム。
【請求項５】
前記コンピュータを、
前記検出手段による検出に対応して当該処理対象となる電子ファイルの内容に基づき当該電子ファイルが復号化対象であるか否かを判定する復号化判定手段、
前記復号化判定手段による判定結果に基づき前記電子ファイルを復号化する復号化処理手段
として更に機能させるための請求項１または２記載の電子ファイル処理プログラム。
【請求項６】
前記暗号化処理手段は、
前記電子ファイルの暗号化に際して該電子ファイルに所定の文字列を書き込み、
前記復号化判定手段は、
前記電子ファイルに所定の文字列が書き込まれているか否かにより該電子ファイルが復号化対象であるか否かを判定する
請求項５記載の電子ファイル処理プログラム。
【請求項７】
前記コンピュータを、
前記検出手段による検出に対応して当該処理対象となる電子ファイルの拡張子に基づき当該電子ファイルが復号化対象であるか否かを判定する復号化判定手段、
前記復号化判定手段による判定結果に基づき前記電子ファイルを復号化する復号化処理手段
として更に機能させるための請求項１または２記載の電子ファイル処理プログラム。
【請求項８】
前記復号化判定手段は、
前記検出手段により電子ファイルを開く機能を有する電子ファイル処理に係わるプログラムに対する呼び出し指示を検出した場合に、当該処理対象となる電子ファイルが復号化対象であるか否かを判定する
請求項５または７記載の電子ファイル処理プログラム。
【請求項９】
前記検出手段は、
オペレーティングシステムの電子ファイル処理に係わるプログラムに対するアプリケーションプログラムからの呼び出し指示を検出する
請求項１から８のいずれかに記載の電子ファイル処理プログラム。
【請求項１０】
電子ファイル処理に係わるプログラムに対する呼び出し指示を検出する検出手段と、
前記検出手段による検出に対応して前記電子ファイル処理に係わるプログラムの処理対象となる電子ファイルの内容に基づき当該電子ファイルが暗号化対象であるか否かを判定する暗号化判定手段と、
前記暗号化判定手段による判定結果に基づき前記電子ファイルを暗号化する暗号化処理手段と
を具備する情報処理装置。
【請求項１１】
前記検出手段による検出に対応して当該処理対象となる電子ファイルの内容に基づき当該電子ファイルが復号化対象であるか否かを判定する復号化判定手段と、
前記復号化判定手段による判定結果に基づき前記電子ファイルを復号化する復号化処理手段と
を更に具備する請求項１０記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子ファイル処理プログラムおよび情報処理装置に関する。
【背景技術】
【０００２】
アプリケーションプログラムが扱う文書などは、アプリケーションプログラムが暗号化などのセキュリティ機能を提供していても、ユーザが自分自身の手でセキュリティを適用しない限りセキュリティのかかっていない状態で保存されてしまう。そのため、ユーザのセキュリティに対する意識が低かったり、事故（例えば、操作ミス）などが発生したりした場合には、セキュリティのかかっていない状態で生の文書が漏洩してしまう恐れがある。
【０００３】
そこで、特許文献１や特許文献２のような技術が提案されている。ここに記載された技術では、オペレーティングシステムのファイルアクセスをフックすることで、アプリケーションプログラムに手を入れることなく、また、ユーザに意識させずにディスク上のファイルを暗号化することができるので、情報漏洩の防止と言う観点からセキュリティを向上させることができる。
【０００４】
ここに提案された技術では、ファイルの格納場所によって暗号化を行うか否かを決定している。
【０００５】
ここで、ファイルの格納場所によって暗号化を行うか否かを決定する場合、
１）当該格納場所に格納された全てのファイルに対して暗号化を行うように設定した場合には、アプリケーションプログラムが生成した一時ファイルのようなファイルが暗号化の対象となる。
【０００６】
２）当該格納場所に格納されたファイルの内、特定のファイルのみ暗号化を行うように設定した場合には、予め定められたファイル以外のファイルは暗号化されない。
【０００７】
という事象が発生する。
【特許文献１】特開平１０−３０１８５６号
【特許文献２】特開２００１−０２７９６４号
【発明の開示】
【発明が解決しようとする課題】
【０００８】
ところで、特定の格納場所に格納された全てのファイルに対して暗号化を行うように設定した場合には、当該格納場所に格納された任意のファイルを暗号化対象外の格納場所に格納してしまうと、当該ファイルは暗号化されないこととなる。また、特定の格納場所に格納された特定のファイルのみ暗号化を行うように設定した場合には、ファイル名を指定して設定を行うため、当該特定のファイルの名前を変更して格納すると、名前を変更した後のファイルは暗号化されないこととなる。
【０００９】
このように、ユーザの過失により、本来暗号化されるべきファイルが暗号化されずに格納されてしまうという課題があった。
【００１０】
本発明は、暗号化対象となる電子ファイルをユーザが意識することなく確実に暗号化できるようにした電子ファイル処理プログラムおよび情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１１】
上記目的を達成するため、請求項１の電子ファイル処理プログラムの発明は、コンピュータを、電子ファイル処理に係わるプログラムに対する呼び出し指示を検出する検出手段、前記検出手段による検出に対応して前記電子ファイル処理に係わるプログラムの処理対象となる電子ファイルの内容に基づき当該電子ファイルが暗号化対象であるか否かを判定する暗号化判定手段、前記暗号化判定手段による判定結果に基づき前記電子ファイルを暗号化する暗号化処理手段として機能させる。
【００１２】
また、請求項２の電子ファイル処理プログラムの発明は、コンピュータを、電子ファイル処理に係わるプログラムに対する呼び出し指示を検出する検出手段、前記検出手段による検出に対応して前記電子ファイル処理に係わるプログラムの処理対象となる電子ファイルの拡張子に基づき当該電子ファイルが暗号化対象であるか否かを判定する暗号化判定手段、前記暗号化判定手段による判定結果に基づき前記電子ファイルを暗号化する暗号化処理手段として機能させる。
【００１３】
また、請求項３の発明は、請求項１または２の発明において、前記コンピュータを、前記検出手段により検出した呼び出し指示に対応する処理の実行を制御する制御手段として更に機能させる。
【００１４】
また、請求項４の発明は、請求項１または２の発明において、前記暗号化判定手段は、前記検出手段により電子ファイルを閉じる機能を有する電子ファイル処理に係わるプログラムに対する呼び出し指示を検出した場合に、当該処理対象となる電子ファイルが暗号化対象であるか否かを判定する。
【００１５】
また、請求項５の発明は、請求項１または２の発明において、前記コンピュータを、前記検出手段による検出に対応して当該処理対象となる電子ファイルの内容に基づき当該電子ファイルが復号化対象であるか否かを判定する復号化判定手段、前記復号化判定手段による判定結果に基づき前記電子ファイルを復号化する復号化処理手段として更に機能させる。
【００１６】
また、請求項６の発明は、請求項５の発明において、前記暗号化処理手段は、前記電子ファイルの暗号化に際して該電子ファイルに所定の文字列を書き込み、前記復号化判定手段は、前記電子ファイルに所定の文字列が書き込まれているか否かにより該電子ファイルが復号化対象であるか否かを判定する。
【００１７】
また、請求項７の発明は、請求項１または２の発明において、前記コンピュータを、前記検出手段による検出に対応して当該処理対象となる電子ファイルの拡張子に基づき当該電子ファイルが復号化対象であるか否かを判定する復号化判定手段、前記復号化判定手段による判定結果に基づき前記電子ファイルを復号化する復号化処理手段として更に機能させる。
【００１８】
また、請求項８の発明は、請求項５または７の発明において、前記復号化判定手段は、前記検出手段により電子ファイルを開く機能を有する電子ファイル処理に係わるプログラムに対する呼び出し指示を検出した場合に、当該処理対象となる電子ファイルが復号化対象であるか否かを判定する。
【００１９】
また、請求項９の発明は、請求項１から８のいずれかの発明において、前記検出手段は、オペレーティングシステムの電子ファイル処理に係わるプログラムに対するアプリケーションプログラムからの呼び出し指示を検出する。
【００２０】
また、請求項１０の情報処理装置の発明は、電子ファイル処理に係わるプログラムに対する呼び出し指示を検出する検出手段と、前記検出手段による検出に対応して前記電子ファイル処理に係わるプログラムの処理対象となる電子ファイルの内容に基づき当該電子ファイルが暗号化対象であるか否かを判定する暗号化判定手段と、前記暗号化判定手段による判定結果に基づき前記電子ファイルを暗号化する暗号化処理手段とを具備する。
【００２１】
また、請求項１１の発明は、請求項１０の発明において、前記検出手段による検出に対応して当該処理対象となる電子ファイルの内容に基づき当該電子ファイルが復号化対象であるか否かを判定する復号化判定手段と、前記復号化判定手段による判定結果に基づき前記電子ファイルを復号化する復号化処理手段とを更に具備する。
【発明の効果】
【００２２】
請求項１の電子ファイル処理プログラムによれば、暗号化が必要な電子ファイルだけを電子ファイルの内容に応じてユーザが意識することなく暗号化できるため、本構成を有さない場合に比較して、必要な電子ファイルの暗号化を確実に行うことができる。
【００２３】
また、請求項２の電子ファイル処理プログラムによれば、暗号化が必要な電子ファイルだけを電子ファイルの拡張子に応じてユーザが意識することなく暗号化できるため、本構成を有さない場合に比較して、必要な電子ファイルの暗号化を確実に行うことができる。
【００２４】
また、請求項３の電子ファイル処理プログラムによれば、本構成を有さない場合に比較して、呼び出し指示に対応した処理の実行が制御されることになる。
【００２５】
また、請求項４の電子ファイル処理プログラムによれば、電子ファイルへのアクセスの都度、暗号化が行われるわけではないため、本構成を有さない場合に比較して、暗号化によるオーバーヘッドを減らすことができる。
【００２６】
また、請求項５の電子ファイル処理プログラムによれば、復号化が必要な電子ファイルだけを電子ファイルの内容に応じてユーザが意識することなく復号化できるため、本構成を有さない場合に比較して、必要な電子ファイルの復号化を確実に行うことができる。
【００２７】
また、請求項６の電子ファイル処理プログラムによれば、電子ファイルの内容に応じて電子ファイルを復号化するため、本構成を有さない場合に比較して、電子ファイルの保存場所に拘わらず確実に必要な電子ファイルだけを選択的に復号化することができる。
【００２８】
また、請求項７の電子ファイル処理プログラムによれば、復号化が必要な電子ファイルだけを電子ファイルの拡張子に応じてユーザが意識することなく復号化できるため、本構成を有さない場合に比較して、必要な電子ファイルの復号化を確実に行うことができる。
【００２９】
また、請求項８の電子ファイル処理プログラムによれば、電子ファイルへのアクセスの都度、復号化が行われるわけではないため、本構成を有さない場合に比較して、復号化によるオーバーヘッドを減らすことができる。
【００３０】
また、請求項９の電子ファイル処理プログラムによれば、既存のアプリケーションプログラムに手を加える必要がないため、本構成を有さない場合に比較して、導入が容易である。
【００３１】
また、請求項１０の情報処理装置によれば、暗号化が必要な電子ファイルだけを電子ファイルの内容に応じてユーザが意識することなく暗号化できるため、本構成を有さない場合に比較して、必要な電子ファイルの暗号化を確実に行うことができる。
【００３２】
また、請求項１１の情報処理装置によれば、復号化が必要な電子ファイルだけを電子ファイルの内容に応じてユーザが意識することなく復号化できるため、本構成を有さない場合に比較して、必要な電子ファイルの復号化を確実に行うことができる。
【発明を実施するための最良の形態】
【００３３】
以下、本発明に係わる電子ファイル処理プログラムおよび情報処理装置の実施例について添付図面を参照して詳細に説明する。
【実施例１】
【００３４】
図１は、コンピュータ１０の機能的な構成の一部を示す図である。このコンピュータ１０には、本発明に係わる電子ファイル処理プログラムが適用された暗復号ファイルフックプログラム１２がインストールされている。なお、このプログラムは、ネットワーク等の通信手段により提供することは勿論、ＣＤ−ＲＯＭ等の記録媒体に格納して提供することも可能である。
【００３５】
コンピュータ１０は、各種処理機能部として、アプリケーションプログラム１１と、暗復号ファイルフックプログラム１２と、オペレーティングシステム１３と、記憶装置１４とを具備し、主制御手段としてのＣＰＵ(Central Processing Unit)、主記憶手段としてのＲＯＭ(Read Only Memory)やＲＡＭ(Random Access Memory)、補助記憶手段としてのハードディスク、入出力インターフェースとしてのキーボードやマウス、およびディスプレイ、通信インターフェースとしてのＬＡＮ（Local Area Network）ボード、等から構成される。
【００３６】
アプリケーションプログラム１１は、文書の作成、編集などを行うための一般的なソフトウェアであり、オペレーティングシステム１３は、コンピュータ１０を統括管理するソフトウェアである。オペレーティングシステム１３には、例えば、Ｗｉｎｄｏｗｓ（登録商標）、Ｌｉｎｕｘ等が該当する。
【００３７】
暗復号ファイルフックプログラム１２は、オペレーティングシステム１３上のファイル（電子ファイル）処理に係わるプログラムをフックするソフトウェアである。具体的には、オペレーティングシステム１３に設けられたファイル処理に係わるＡＰＩ（Application Program Interface）をフックする。そのため、アプリケーションプログラム１１によるＡＰＩを用いたファイル処理は、この暗復号フックプログラム１２を経由して行われる。フックの実現方法は、従来知られている手法を用いればよい。なお、本実施例においては、ファイル処理に係わるＡＰＩとしてＷｉｎｄｏｗｓ（登録商標）に設けられた「CreateFile()」、「ReadFile()」、「WriteFile()」、「SetFilePointer()」、「GetFileSize()」、「CloseHandle()」をフックする場合について説明する。
【００３８】
ここで、これらＡＰＩを用いたファイル処理の大まかな流れについて説明すると、最初に、「CreateFile()」が呼び出されファイルがオープンされるとともに、ファイルハンドルと呼ばれる識別子が取得されることになる。次に、このファイルハンドルを指定して「ReadFile()」、「WriteFile()」等が呼び出されファイルの読み込み、書き込み等が行われる。そして最後に、「CloseHandle()」が呼び出されファイルが閉じられ、ファイル処理が終了することになる。
【００３９】
記憶装置１４は、ファイル等を含む各種データを記憶する機能を果たす。記憶装置１４は、例えば、ＨＤＤ（Hard Disk Drive）等で実現される。以上が、コンピュータ１０を構成する各種処理機能の説明である。
【００４０】
ここで、図２を用いて、上述した暗復号ファイルフックプログラム１２の機能的な構成の一部について説明する。
【００４１】
暗復号ファイルフックプログラム１２は、各種処理機能部として、ＡＰＩ監視部２１と、暗号化判定部２２と、復号化判定部２３と、暗号化処理部２４と、復号化処理部２５と、ファイル管理情報保持部２６と、制御部２７とを具備して構成される。
【００４２】
ＡＰＩ監視部２１は、ファイル処理に係わるＡＰＩを監視する機能を果たす。ＡＰＩ監視部２１には、ＡＰＩ呼び出し指示検出部２１ａが設けられ、監視対象のＡＰＩに対するアプリケーションプログラム１１からの呼び出し指示を検出する。
【００４３】
暗号化判定部２２は、ＡＰＩ呼び出し指示検出部２１ａによる呼び出し指示の検出に対応して処理対象となるファイルが暗号化の対象となるか否かを判定する機能を果たし、復号化判定部２３は、ＡＰＩ呼び出し指示検出部２１ａによる呼び出し指示の検出に対応して処理対象となるファイルが復号化の対象となるか否かを判定する機能を果たす。ここで、処理対象となるファイルとは、ＡＰＩの引数に設定されたファイル名に対応するファイル、ＡＰＩの引数に設定されたファイルハンドルに対応するファイル等を指す。
【００４４】
暗号化処理部２４は、暗号化判定部２２の判定結果を受けて処理対象となるファイルに対して暗号化処理を行う機能を果たし、復号化処理部２５は、復号化判定部２３の判定結果を受けて処理対象となるファイルに対して復号化処理を行う機能を果たす。
【００４５】
ファイル管理情報保持部２６は、処理対象となるファイルに係わる情報を保持する機能を果たす。ファイル管理情報保持部２６では、図３に示すファイル管理テーブルを用いて処理対象となるファイルに係わる情報を保持する。ファイル管理テーブルには、ファイル識別子としての機能を果たす「ファイルハンドル」に対応して、バッファ内におけるファイルの先頭アドレスを示す「先頭位置情報」と、ファイルの読み出し位置を示す「現在位置情報」と、ファイルの大きさを示す「ファイルサイズ」とが保持される。
【００４６】
制御部２７は、暗復号ファイルフックプログラム１２における処理を統括制御する機能を果たす。この暗復号ファイルフックプログラム１２上に構成される各種処理機能は、この制御部２７からの指示に従って動作する。また、制御部２７では、各処理機能間で発生するデータの入出力も制御する。以上が、暗復号ファイルフックプログラム１２を構成する各種処理機能の説明である。
【００４７】
ここで、図４から図９を用いて、暗復号ファイルフックプログラム１２によるＡＰＩフック処理について、いくつか例を挙げて説明する。
【００４８】
まず、図４を用いて、ファイルオープン時におけるフック処理について説明する。この処理では主に、「CreateFile()」をフックする。なお、「CreateFile()」は、ファイルをオープンする機能を果たす。
【００４９】
アプリケーションプログラム１１から「CreateFile()」の呼び出しが指示されると、暗復号ファイルフックプログラム１２のＡＰＩ呼び出し指示検出部２１ａにおいて、その呼び出し指示が検出される（ステップＳ１０１）。なお、この「CreateFile()」の呼び出し指示時には、処理対象となるファイルのファイル名等が引数として設定される。
【００５０】
呼び出し指示が検出されると、暗復号ファイルフックプログラム１２の制御部２７は、「CreateFile()」を呼び出し、処理対象となるファイルをオープンする（ステップＳ１０２）。この「CreateFile()」の戻り値としてファイルハンドルが取得される。
【００５１】
ファイルオープンが済むと、暗復号ファイルフックプログラム１２は、復号化判定部２３において、当該処理対象となるファイルが復号化の対象となるか否かの判定を行う（ステップＳ１０３）。この判定は、ファイルヘッダに「ＦＸＥＮＣＤＡＴ（文字列）」が設定されてるか否かに基づき行われ、当該文字列が設定されていれば、復号化の対象であると判定されることになる。なお、ファイルヘッダの参照は、「ReadFile()」等を用いることで行える。
【００５２】
判定の結果、復号化の対象でないと判定された場合には（ステップＳ１０４でＮＯ）、この結果を受けた制御部２７が、ファイル内からデータ本体を読み出しこれをバッファに展開する（ステップＳ１０５）。そして、当該ファイルに係わる情報をファイル管理テーブルに設定した後（ステップＳ１１１）、アプリケーションプログラム１１にファイルハンドルを返し（ステップＳ１１２）、この処理を終了する。
【００５３】
一方で、復号化の対象になると判定された場合には（ステップＳ１０４でＹＥＳ）、この結果を受けた復号化処理部２５は、ファイル内から暗号化されたＡＥＳ（Advanced Encryption Standard）鍵を読み出し（ステップＳ１０６）、ユーザの秘密鍵を用いてＡＥＳ鍵を復号する（ステップＳ１０７）。なお、秘密鍵がなかった場合には、ＡＥＳ鍵を復号化できないため復号失敗となり（ステップＳ１０８でＹＥＳ）、ファイルオープンエラーがアプリケーションプログラム１１に返される（ステップＳ１１０）。
【００５４】
秘密鍵によりＡＥＳ鍵が復号されると（ステップＳ１０８でＮＯ）、復号化処理部２５は次に、ファイル内からデータ本体を読み出しこれをバッファに展開するとともに、復号されたＡＥＳ鍵を用いて当該データ本体を復号する（ステップＳ１０９）。そして、当該ファイルに係わる情報をファイル管理テーブルに設定した後（ステップＳ１１１）、アプリケーションプログラム１１にファイルハンドルを返し（ステップＳ１１２）、この処理を終了する。なお、この復号化されたデータ本体は、メインメモリ上、あるいはシステムのみアクセス可能な安全な領域等に展開されるのが望ましい。
【００５５】
次に、図５を用いて、ファイル読み出し時におけるフック処理について説明する。この処理では主に、「ReadFile()」をフックする。なお、「ReadFile()」は、オープンされているファイルからデータを読み出す機能を果たす。
【００５６】
アプリケーションプログラム１１から「ReadFile()」の呼び出しが指示されると、暗復号ファイルフックプログラム１２のＡＰＩ呼び出し指示検出部２１ａにおいて、その呼び出し指示が検出される（ステップＳ２０１）。なお、この「ReadFile()」の呼び出し指示時には、処理対象となるファイルに割り当てられたファイルハンドル、読み出しバイト数等が引数として設定される。
【００５７】
呼び出し指示が検出されると、暗復号ファイルフックプログラム１２の制御部２７において、当該処理対象となるファイルがファイル管理テーブルに登録済みであるか否かの確認が行われる（ステップＳ２０２）。この登録済みであるか否かの確認は、「ReadFile()」の引数に設定されたファイルハンドルがファイル管理テーブルに登録されているか否かに基づき行われる。
【００５８】
確認の結果、当該処理対象となるファイルがファイル管理テーブルに登録されていなかった場合には（ステップＳ２０３でＮＯ）、制御部２７において、「ReadFile()」が呼び出されバッファからデータの読み出しが行われる（ステップＳ２０７）。そして、その結果がアプリケーションプログラム１１に返された後（ステップＳ２０８）、この処理は終了する。
【００５９】
また、当該処理対象となるファイルがファイル管理テーブルに登録済みであった場合には（ステップＳ２０３でＹＥＳ）、制御部２７において、バッファ内の所定の位置（ファイル管理テーブルの「現在位置情報」）からデータが読み出され（ステップＳ２０４）、その読み出されたデータがアプリケーションプログラム１１に返される（ステップＳ２０５）。そして、ファイル管理テーブルの「現在位置情報」が当該読み出されたバイト数分進められた後（ステップＳ２０６）、この処理は終了する。なお、ステップＳ２０４において、指定されたバイト数に相当するデータがバッファに存在していなかった場合には、ファイルの最後までデータを読み出し、それをアプリケーションプログラム１１に返すことになる。この場合、ファイル管理テーブルの「現在位置情報」はファイルサイズと同じ値に更新される。
【００６０】
次に、図６を用いて、ファイル書き込み時におけるフック処理について説明する。この処理では主に、「WriteFile()」をフックする。なお、「WriteFile()」は、オープンされているファイルにデータを書き込む機能を果たす。
【００６１】
アプリケーションプログラム１１から「WriteFile()」の呼び出しが指示されると、暗復号ファイルフックプログラム１２のＡＰＩ呼び出し指示検出部２１ａにおいて、その呼び出し指示が検出される（ステップＳ３０１）。なお、この「WriteFile()」の呼び出し指示時には、処理対象となるファイルに割り当てられたファイルハンドル、書き込みバイト数、書き込みデータ内容等が引数として設定される。
【００６２】
呼び出し指示が検出されると、暗復号ファイルフックプログラム１２の制御部２７において、当該処理対象となるファイルがファイル管理テーブルに登録済みであるか否かの確認が行われる（ステップＳ３０２）。この登録済みであるか否かの確認は、「WriteFile()」の引数に設定されたファイルハンドルがファイル管理テーブルに登録されているか否かに基づき行われる。
【００６３】
確認の結果、当該処理対象となるファイルがファイル管理テーブルに登録されていなかった場合には（ステップＳ３０３でＮＯ）、制御部２７において、「WriteFile()」が呼び出されバッファにデータが書き込まれる（ステップＳ３０７）。そして、その結果がアプリケーションプログラム１１に返された後（ステップＳ３０８）、この処理は終了する。
【００６４】
また、当該処理対象となるファイルがファイル管理テーブルに登録済みであった場合には（ステップＳ３０３でＹＥＳ）、制御部２７において、バッファ内の所定の位置（ファイル管理テーブルの「現在位置情報」）からデータが書き込まれ（ステップＳ３０４）、その書き込み結果がアプリケーションプログラム１１に返される（ステップＳ３０５）。そして、ファイル管理テーブルの「現在位置情報」が当該書き込まれたバイト数分進められた後（ステップＳ３０６）、この処理は終了する。なお、ステップＳ３０４におけるデータの書き込みによりファイルサイズが拡張した場合には、その拡張した分だけ、ファイルサイズを加算して更新しておく。この場合、ファイル管理テーブルの「現在位置情報」はファイルサイズと同じ値に更新される。
【００６５】
次に、図７を用いて、ファイル位置指定時におけるフック処理について説明する。この処理では主に、「SetFilePointer()」をフックする。なお、「SetFilePointer()」はオープンされているファイルのファイルポインタを移動させる機能を果たす。
【００６６】
アプリケーションプログラム１１から「SetFilePointer()」の呼び出しが指示されると、暗復号ファイルフックプログラム１２のＡＰＩ呼び出し指示検出部２１ａにおいて、その呼び出し指示が検出される（ステップＳ４０１）。なお、この「SetFilePointer()」の呼び出し指示時には、処理対象となるファイルに割り当てられたファイルハンドル、位置情報を指定した情報等が引数として設定される。
【００６７】
呼び出し指示が検出されると、暗復号ファイルフックプログラム１２の制御部２７において、当該処理対象となるファイルがファイル管理テーブルに登録済みであるか否かの確認が行われる（ステップＳ４０２）。この登録済みであるか否かの確認は、「SetFilePointer()」の引数に設定されたファイルハンドルがファイル管理テーブルに登録されているか否かに基づき行われる。
【００６８】
確認の結果、当該処理対象となるファイルがファイル管理テーブルに登録されていなかった場合には（ステップＳ４０３でＮＯ）、制御部２７において、「SetFilePointer()」が呼び出されファイルポインタの位置が変更される（ステップＳ４０６）。そして、その結果がアプリケーションプログラム１１に返された後（ステップＳ４０７）、この処理は終了する。
【００６９】
また、当該処理対象となるファイルがファイル管理テーブルに登録済みであった場合には（ステップＳ４０３でＹＥＳ）、制御部２７において、ファイル管理テーブルの「現在位置情報」が指定された値に変更される（ステップＳ４０４）。そして、その結果がアプリケーションプログラム１１に返された後（ステップＳ４０５）、この処理は終了する。なお、指定された位置情報がファイルサイズより大きい場合には、ファイル管理テーブルの「現在位置情報」はファイルサイズと同じ値に変更される。
【００７０】
次に、図８を用いて、ファイルサイズ取得時におけるフック処理について説明する。この処理では主に、「GetFileSize()」をフックする。なお、「GetFileSize()」はオープンされているファイルのサイズを取得する機能を果たす。
【００７１】
アプリケーションプログラム１１から「GetFileSize()」の呼び出しが指示されると、暗復号ファイルフックプログラム１２のＡＰＩ呼び出し指示検出部２１ａにおいて、その呼び出し指示が検出される（ステップＳ５０１）。なお、この「GetFileSize()」の呼び出し指示時には、処理対象となるファイルに割り当てられたファイルハンドル等が引数として設定される。
【００７２】
呼び出し指示が検出されると、暗復号ファイルフックプログラム１２の制御部２７において、当該処理対象となるファイルがファイル管理テーブルに登録済みであるか否かの確認が行われる（ステップＳ５０２）。この登録済みであるか否かの確認は、「GetFileSize()」の引数に設定されたファイルハンドルがファイル管理テーブルに登録されているか否かに基づき行われる。
【００７３】
確認の結果、当該処理対象となるファイルがファイル管理テーブルに登録されていなかった場合には（ステップＳ５０３でＮＯ）、制御部２７において、「GetFileSize()」が呼び出されファイルサイズが取得される（ステップＳ５０５）。そして、その結果がアプリケーションプログラム１１に返された後（ステップＳ５０６）、この処理は終了する。
【００７４】
また、当該処理対象となるファイルがファイル管理テーブルに登録済みであった場合には（ステップＳ５０３でＹＥＳ）、制御部２７において、ファイル管理テーブルの「ファイルサイズ」が取得され、この値がアプリケーションプログラム１１に返された後（ステップＳ５０４）、この処理は終了する。
【００７５】
次に、図９を用いて、ファイルクローズ時におけるフック処理について説明する。この処理では主に、「CloseHandle()」をフックする。なお、「CloseHandle()」はオープンされているファイルをクローズする機能を果たす。
【００７６】
アプリケーションプログラム１１から「CloseHandle()」の呼び出しが指示されると、暗復号ファイルフックプログラム１２のＡＰＩ呼び出し指示検出部２１ａにおいて、その呼び出し指示が検出される（ステップＳ６０１）。なお、この「CloseHandle()」の呼び出し指示時には、処理対象となるファイルに割り当てられたファイルハンドル等が引数として設定される。
【００７７】
呼び出し指示が検出されると、暗復号ファイルフックプログラム１２の制御部２７において、当該処理対象となるファイルがファイル管理テーブルに登録済みであるか否かの確認が行われる（ステップＳ６０２）。この登録済みであるか否かの確認は、「CloseHandle()」の引数に設定されたファイルハンドルがファイル管理テーブルに登録されているか否かに基づき行われる。
【００７８】
確認の結果、当該処理対象となるファイルがファイル管理テーブルに登録されていなかった場合には（ステップＳ６０３でＮＯ）、制御部２７において、「CloseHandle()」が呼び出されファイルがクローズされる（ステップＳ６０４）。そして、その結果がアプリケーションプログラム１１に返された後（ステップＳ６０５）、この処理は終了する。
【００７９】
また、当該処理対象となるファイルがファイル管理テーブルに登録済みであった場合には（ステップＳ６０３でＹＥＳ）、制御部２７において、「SetFilePointer()」が呼び出され、バッファ内におけるデータの読み出し位置がデータの先頭に移される（ステップＳ６０６）。
【００８０】
読み出し位置が移されると、暗復号ファイルフックプログラム１２は次に、暗号化判定部２２において、処理対象ファイルが暗号化の対象となるか否かを判定する（ステップＳ６０７）。暗号化の対象となるか否かは、例えば、データが特定フォーマット（例えば、ＭＳ−ＷＯＲＤ）に該当するか否かを判定することで行われる。なお、データのフォーマットがＭＳ−ＷＯＲＤであるか否かを特定する場合には、データの先頭８バイト（ヘッダ部分）が「0xD0 0xCF 0x11 0xE0 0xA1 0xB1 0x1A 0xE1」に一致するか否かを判定すればよい。
【００８１】
判定の結果、暗号化の対象でないと判定された場合には（ステップＳ６０８でＮＯ）、制御部２７において、バッファの内容がそのままファイルに書き込まれた後（ステップＳ６０９）、「CloseHandle()」が呼び出されファイルがクローズされるとともに、ファイル管理テーブル上の対応する情報が削除され（ステップＳ６１４）、この処理は終了する。
【００８２】
一方で、暗号化の対象となると判定された場合には（ステップＳ６０８でＹＥＳ）、暗号化処理部２４による暗号化処理が開始される。この暗号化処理ではまず、所定の文字列が書き込まれたヘッダがファイルに書き込まれる（ステップＳ６１０）。なお、本実施例においては、ファイルが暗号化されていることを示すために、ヘッダに「ＦＸＥＮＣＤＡＴ」という文字列を書き込む場合について説明するが、この文字列は識別性を有していればよく、任意の文字列に変更可能である。
【００８３】
ヘッダの書き込みが終了すると次に、ＡＥＳ鍵が生成され、このＡＥＳ鍵がユーザの公開鍵を用いて暗号化される（ステップＳ６１１）。また、この生成されたＡＥＳ鍵を用いてバッファ内のデータ本体が暗号化される（ステップＳ６１２）。すると、公開鍵を用いて暗号化されたＡＥＳ鍵と、ＡＥＳ鍵を用いて暗号化されたデータ本体とがファイルに書き込まれる（ステップＳ６１３）。この一連の暗号化処理が終了すると、制御部２７において、「CloseHandle()」が呼び出されファイルがクローズされるとともに、ファイル管理テーブル上の対応する情報が削除され（ステップＳ６１４）、この処理は終了する。
【００８４】
以上が、実施例１についての説明である。なお、実施例１においては、Ｗｉｎｄｏｗｓ（登録商標）に設けられたＡＰＩをフックする場合について説明したが、他のオペレーティングシステムにもこれと同等のＡＰＩが用意されているので、他のオペレーティングシステムの場合には、それら同等のＡＰＩをフックすれば上記同様の処理が行えることになる。
【実施例２】
【００８５】
次に、実施例２について説明する。実施例２においては、上記実施例１の構成に加えて、所望のファイルを予め暗号化しておく場合の実施例について説明する。
【００８６】
図１０は、実施例２に係わるコンピュータ１０の機能的な構成の一部を示す図である。なお、上記実施例１を説明した図１と同一の符号が付してあるものは、略同様に動作するため、ここでは相違点についてのみ説明する。
【００８７】
コンピュータ１０には、上記実施例１の構成に加えて、暗号化処理プログラム１５が設けられる。暗号化処理プログラム１５は、所定のファイルだけを選択的に暗号化する機能を果たす。暗号化処理プログラム１５では、所定のファイルだけを選択的に暗号化するために、予め設定された設定情報に基づき暗号化処理を行う。なお、本実施例における暗号化処理プログラム１５においては、ファイルが暗号化されていることを示すために、暗号化に際して「ＦＸＥＮＣＤＡＴ」という文字列をヘッダに書き込む。
【００８８】
ここで、図１１を用いて、暗号化処理プログラム１５による暗号化処理の動作について説明する。
【００８９】
ユーザにより複数ファイルの暗号化が指示されると、暗号化処理プログラム１５は、まず、当該複数ファイルの中から１つ目のファイルについて暗号化の対象となるか否かの判定を行う。この判定は設定情報に基づき行われる。ここで、設定情報には例えば、データの先頭から何バイト目までのデータに所定の文字列が含まれていれば、暗号化の対象となる等の情報が設定されている。
【００９０】
判定の結果、当該ファイルが暗号化の対象とならない場合には（ステップＳ７０１でＮＯ）、次のファイルについて暗号化の対象となるか否かの判定を行うことになる（ステップＳ７０２の後、ステップＳ７０３でＮＯ）。なお、処理対象となるファイルがなければ（ステップＳ７０３でＹＥＳ）、この処理は終了する。
【００９１】
また、ステップＳ７０１における判定の結果、暗号化の対象となると判定された場合には（ステップＳ７０１でＹＥＳ）、暗号化処理プログラム１５は、所定の文字列（ＦＸＥＮＣＤＡＴ）をファイルのヘッダに書き込むとともに（ステップＳ７０４）、ユーザの公開鍵で暗号化されたＡＥＳ鍵を書き込む（ステップＳ７０５）。なお、この公開鍵には、第三者機関による証明書の発行を受けているものを用いるのが望ましい。
【００９２】
最後に、暗号化処理プログラム１５は、ＡＥＳ鍵でデータの本体を暗号化しそれをファイルに書き込む（ステップＳ７０６）。そして、この処理は終了する。
【００９３】
以上が本発明の代表的な実施形態の一例であるが、本発明は、上記および図面に示す実施例に限定することなく、その要旨を変更しない範囲内で適宜変形して実施できるものである。ここで、変形例について下記にいくつか列挙する。
【００９４】
[暗号化、復号化対象となるか否かの判定方法バリエーション]
上記実施例１および２においては、暗号化、復号化の対象となるファイルであるか否かを判定する際に、データのヘッダを参照していたが、これに限られることなく、下記に例示列挙する方法で代用できる。
【００９５】
１）ファイルがあるフォーマットに従ったものであるかパーズ（構文解析）して判定する。例えば、ＸＭＬ（Extensible Markup Language）の場合は、あるスキーマやＤＴＤ（Document Type Definition）に従っているか等を判定することになる。
【００９６】
２）データ内（上記実施例で言うデータ本体）に特定の文字列を含んでいるか否かに基づき判定する。例えば、データ内に「confidential（機密）」という文字列が含まれているか否か等に基づき判定を行う。あるいは、自然言語処理の結果を用いても良い。姓名に関する情報が含まれていたら、個人情報と判定する。
【００９７】
３）画像ファイルであるか否かに基づき判定する。例えば、画像であれば暗号化する等の判定を行う。
【００９８】
４）画像の解像度に基づき判定する。例えば、画像の解像度が高解像度（３００ｄｐｉ以上）ならば暗号化する等の判定を行う。
【００９９】
５）画像処理の結果に基づき判定する。例えば、画像処理によって指定された画像内に人間の顔に合致する画像が含まれているかどうかを判定する。あるいは、セキュリティ上クリティカルな別の画像を予めデータベース化しておき、それらと比較し、データベース上の画像が含まれるかどうかの判定を行う。
【０１００】
６）拡張子に基づき判定する。例えば、図１２（ａ）に示すように、拡張子が「.doc」であるファイルを暗号化対象であると判定し、拡張子が「.jpg」であるファイルは暗号化対象ではないと判定する等である。
【０１０１】
７）これら説明した判定方法の一部または全てを組み合わせて判定を行う。例えば、拡張子とデータ内の特定の文字列とに基づき暗号化対象であるか否かを判定してもよい。図１２（ｂ）に示すように、ファイル内に特定の文字列として「confidential」が含まれ、且つ拡張子が「.doc」であるファイルを暗号化対象であると判定し、拡張子は「.doc」であるがファイル内に特定の文字列として「confidential」が含まれていないファイルは暗号化対象ではないと判定する等である。勿論、復号化の対象となるか否かの判定もこれと同様に行える。
【０１０２】
[公開鍵のバリエーション]
上記実施例１および２においては、ユーザの公開鍵を用いてＡＥＳ鍵を暗号化する場合について説明したが、ここで用いる公開鍵は、ユーザの公開鍵に限られることはなく、下記に例示列挙する公開鍵で代用できる。
【０１０３】
１）データ送信先となる相手方の公開鍵。この場合、Ｓ／ＭＩＭＥのように相手方のみが利用できることになる。勿論、複数の公開鍵で暗号化しておけば複数人が利用できることになる。
【０１０４】
２）コンピュータのシステム情報に依存した公開鍵。この場合、他のコンピュータにコピーされても見えないようにすることができることになる。
【０１０５】
３）ＤＲＭ（Digital Rights Management）技術（例えば、アクセスチケット、ＷＲＭＳ(Windows（登録商標） Rights Management Services)）の公開鍵。この場合、ＤＲＭシステムと連携させることができることになる（当該ＤＲＭシステム上で権限を持つ人のみ利用できることになる）。
【０１０６】
４）この他、上述した公開鍵をサーバ上で管理するようにしてもよい。この場合、ネットワークに接続されているときだけ公開鍵を提供する等の運用を行う。
【０１０７】
[その他権利の制御（閲覧権、保存権）]
上記図６において説明したファイル書込み時におけるフック処理を変形し、「WriteFile()」の処理を必ず失敗させるように構成してもよい。この場合、ファイルの書込みができないことになるため、当該ファイルは閲覧専用となる。
【０１０８】
また、例えば、暗号化ファイルを生成する際にＡＥＳ鍵を公開鍵で暗号化するが、そのときに保存権フラグを設けて、この値によって閲覧専用、保存可否を選択できるようにしてもよい。
【０１０９】
また、ＤＲＭ技術と連携する場合は、それらのＤＲＭ技術上で権利を扱えばよい。例えば、アクセスチケットの場合は、権利をアクセスチケット側に記述し、権利認証処理が正しく行えればそのチケットに記述された権利を行使できるようにする。
【０１１０】
[その他権利の制御（印刷権）]
また、上記実施例１および２において、ファイル処理に係わるＡＰＩをいくつか例示し、そのフック処理の動作について説明したが、上述したＡＰＩに加えて、印刷処理に係わるＡＰＩをフックしてもよい。例えば、Ｗｉｎｄｏｗｓ（登録商標）の場合、「OpenPrinter()：プリンタをオープンする」、「StartDoc()：印刷を開始する」、「StartPage()：次のページを印刷する」などのＡＰＩをフックすればよい。この場合、ユーザに印刷権があればそのまま処理を行うことになるが、印刷権がなければ、ＡＰＩを呼び出さずに処理を失敗させるようにする。
【０１１１】
[その他権利の制御（複製権）]
また、上記実施例１および２において、ファイル処理に係わるＡＰＩをいくつか例示し、そのフック処理の動作について説明したが、上述したＡＰＩに加えて、複製処理に係わるＡＰＩをフックしてもよい。例えば、Ｗｉｎｄｏｗｓ（登録商標）の場合、「GetClipboardData()：クリップボードの内容を取得する」、「SetClipboardData()：クリップボードに内容をセットする」、「DoDragDrop()：ドラッグ／ドロップする」などのＡＰＩをフックすればよい。この場合、ユーザに複製権があればそのまま処理を行うことになるが、複製権がなければ、ＡＰＩを呼び出さずに処理を失敗させるようにする。
【産業上の利用可能性】
【０１１２】
本発明の電子ファイル処理プログラムおよび情報処理装置は、各種処理をコンピュータに実行させる電子ファイル処理プログラム、および情報処理装置全般に適用可能である。
【図面の簡単な説明】
【０１１３】
【図１】コンピュータ１０の機能的な構成の一部を示す図である。
【図２】図１に示す暗復号ファイルフックプログラム１２の機能的な構成の一部を示す図である。
【図３】ファイル管理テーブルのテーブルレイアウトの一例を示す図である。
【図４】ファイルオープン時におけるフック処理の動作を示すフローチャートである。
【図５】ファイル読み出し時におけるフック処理の動作を示すフローチャートである。
【図６】ファイル書き込み時におけるフック処理の動作を示すフローチャートである。
【図７】ファイル位置指定時におけるフック処理の動作を示すフローチャートである。
【図８】ファイルサイズ取得時におけるフック処理の動作を示すフローチャートである。
【図９】ファイルクローズ時におけるフック処理の動作を示すフローチャートである。
【図１０】実施例２に係わるコンピュータ１０の機能的な構成の一部を示す図である。
【図１１】図１に示す暗号化処理プログラム１５による暗号化処理の動作を示すフローチャートである。
【図１２】変形例の一例を示す図である。
【符号の説明】
【０１１４】
１０    コンピュータ
１１    アプリケーションプログラム
１２    暗復号ファイルフックプログラム
１３    オペレーティングシステム
１４    記憶装置
１４ａ    暗号化ファイル
１４ｂ    通常ファイル（非暗号化）
１５    暗号化処理プログラム
２１    ＡＰＩ監視部
２１ａ    ＡＰＩ呼び出し指示検出部
２２    暗号化判定部
２３    復号化判定部
２４    暗号化処理部
２５    復号化処理部
２６    ファイル管理情報保持部
２７    制御部
【図１】
2008134821.tif 000003
【図２】
2008134821.tif 000004
【図３】
2008134821.tif 000005
【図４】
2008134821.tif 000006
【図５】
2008134821.tif 000007
【図６】
2008134821.tif 000008
【図７】
2008134821.tif 000009
【図８】
2008134821.tif 000010
【図９】
2008134821.tif 000011
【図１０】
2008134821.tif 000012
【図１１】
2008134821.tif 000013
【図１２】
2008134821.tif 000014