(57)【特許請求の範囲】
【請求項１】
記憶装置と、アプリケーションプログラムから前記記憶装置へのデータ読み出し・書き込み要求を横取りするファイルフック手段を有し、前記アプリケーションプログラムに従った処理を実行するコンピュータとを備え、前記アプリケーションプログラムが処理したデータを前記記憶装置に書き込んで保存するデータの保存方法において、
前記アプリケーションプログラムからのデータの書き込み要求に対し、該書き込み要求を前記ファイルフック手段によって横取りし、前記オペレーティングシステムが書き込み対象となるデータを前記記憶装置に書き込む前に、当該コンピュータの内部メモリに記憶した暗号鍵により予め設定したレコード長単位で暗号化して前記記憶装置に書き込み、
前記アプリケーションプログラムからの読み出し要求に対しては、該読み出し要求を前記ファイルフック手段によって横取りし、前記アプリケーションプログラムに読み出しデータを転送する前に、前記オペレーティングシステムに前記記憶装置から暗号化されたデータをレコード単位で読み出させた後に、前記内部メモリに記憶した暗号鍵で前記暗号化されたデータを予め設定したレコード長単位で復号し、復号されたデータを読み出し要求を行なった前記アプリケーションプログラムに転送することを特徴とするデータの保存方法。
【請求項２】
前記記憶装置内において、ユーザが予め指定したファイル内のデータのみ、あるいは指定したディレクトリ内にある全てのファイルのデータのみに対して、暗号化または復号化を行うことを特徴とする請求項１に記載のデータ保存方法。
【請求項３】
前記レコード長単位は、アプリケーションプログラム毎に設定することを特徴とする請求項２に記載のデータの保存方法。
【請求項４】
アプリケーションプログラムによるファイルアクセス時のアクセス情報を記録し、前記アクセス情報をもとに算出した平均アクセス長を超える仮レコード長を設定し、それぞれの仮レコード長についてオーバヘッド時間を算出し、その算出結果が最小となるものを前記レコード長とすることを特徴とする請求項２に記載のデータ保存方法。
【請求項５】
前記レコード長をオペレーティングシステムによるファイルアクセス時のキャッシュ単位とすることを特徴とする請求項２に記載のデータ保存方法。
【請求項６】
前記レコード長を、記憶装置内でのデータの記録単位とすることを特徴とする請求項２に記載のデータ保存方法。
【請求項７】
前記暗号鍵は、コンピュータを操作するユーザの認証時に鍵管理コンピュータから取得したものであることを特徴とする請求項２〜６のいずれか一項に記載のデータ保存方法。
【請求項８】
前記暗号鍵は、コンピュータを操作するユーザの認証時に鍵管理コンピュータから取得した第１の暗号鍵であり、保存対象データの暗号化に際しては、前記第１の暗号鍵によってコンピュータ内部で生成した第２の暗号鍵を暗号化した暗号化暗号鍵を作成し、さらに前記第１の暗号鍵によって書き込み対象のデータを暗号化した暗号化データ本体を作成し、この暗号化データ本体に前記暗号化暗号鍵を付加して前記記憶装置に書き込み、
復号に際しては、第１の暗号鍵によって前記暗号化暗号鍵を復号し、その復号により得られた第２の暗号鍵を用いて前記暗号化データ本体を復号することを特徴とする請求項２〜６のいずれか一項に記載のデータ保存方法。
【請求項９】
アプリケーションプログラムに従った処理を実行するコンピュータと、該コンピュータに接続された記憶装置とを備えたコンピュータシステムにおいて前記アプリケーションプログラムが処理したデータを前記記憶装置に書き込んで保存するためのデータ保存処理用プログラムを記録した記録媒体であって、
前記アプリケーションプログラムから前記コンピュータのオペレーティングシステムへ発行する前記記憶装置へのデータ読み出し・書き込み要求を横取りするファイルフック処理と、
前記アプリケーションプログラムからのデータの書き込み要求に対し、該書き込み要求を前記ファイルフック手段によって横取りし、前記オペレーティングシステムが書き込み対象となるデータを前記記憶装置に書き込む前に、当該コンピュータの内部メモリに記憶した暗号鍵により予め設定したレコード長単位で暗号化して前記記憶装置に書き込む第１の処理と、
前記アプリケーションプログラムからの読み出し要求に対しては、該読み出し要求を前記ファイルフック手段によって横取りし、前記アプリケーションプログラムに読み出しデータを転送する前に、前記オペレーティングシステムに前記記憶装置から暗号化されたデータをレコード単位で読み出させた後に、前記内部メモリに記憶した暗号鍵で前記暗号化されたデータを予め設定したレコード長単位で復号し、復号されたデータを読み出し要求を行なった前記アプリケーションプログラムに転送する第２の処理と、
から成るデータ保存処理用プログラムが記録されていることを特徴とするデータ保存処理用記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、アプリケーションプログラムに従った処理を実行するコンピュータと、該コンピュータに接続された記憶装置とを備えたコンピュータシステムにおいて前記アプリケーションプログラムが処理したデータを前記記憶装置に書き込んで保存するためのデータ保存方法およびシステム並びにデータ保存処理用記録媒体に関するものである。
【０００２】
【従来の技術】
従来、磁気ディスク装置等の記憶装置を備えたコンピュータシステムにあっては、コンピュータ内部で動作しているアプリケーションプログラムが処理したデータは、そのまま記憶装置に保存されていた。
このため、記憶装置上に保存されているデータは、データ作成に使ったコンピュータや、さらにこの記憶装置がネットワークに接続している場合にはネットワーク上のコンピュータから、盗み見たり書き換えたりすることができ、機密漏洩やデータ改変などの恐れがあった。
【０００３】
そこで、記憶装置を管理しているオペレーティングシステムに、記憶装置上に保存しているデータに対して、どのユーザがデータを読み出したり書き換えたりして良いのかというアクセス制御機能を具備させ、アクセスの権利を持たないユーザからのアクセスを許可しない仕組みを講じたものがある。
しかし、記憶装置に対してはオペレーティングシステムを介さずに直接アクセスすることもできるので、上記アクセス制御機能でもデータの盗み見や改変を完全に防ぐことはできなかった。
そのため、記憶装置に保存するデータを暗号化したり、改変があったことを検知するための電子署名を付けたりして、これらの不正行為を防ぐ対策を取ってきた。
【０００４】
ところで、データを暗号化したり復号化したりする際には、データを８ビットや６４ビットの基本単位に区切ってから暗号化・復号化する。しかし、このままでは同じ内容の基本単位は同じ暗号文に暗号化されてしまうので、暗号文解読の手がかりとなってしまう。そのため、データ内のある位置の基本単位を暗号化する際には、一つ前の位置のすでに暗号化されている基本単位を使って何らかの処理（例えば、排他的論理和）をしてから暗号化する。このような基本単位の連鎖処理を行うと、解読の手がかりを消すことができる。なお、データの先頭の基本単位を暗号化する際には、別に用意する初期化データを使って連鎖処理をする。上記の暗号連鎖処理については、例えば、「暗号とデータセキュリティ」（Ｄ．Ｅ．Ｒ．デニング著、上園忠弘他訳、培風館発行）に述べてある。
【０００５】
【発明が解決しようとする課題】
しかし、データを暗号化して保存する際には、データを記憶装置上に一旦保存してから、あるいは記憶装置に保存してあるデータをユーザが明示的に指定して暗号化を行っていた。同様に、暗号化データを復号する際にも、ユーザが明示的に復号の指定をして元のデータに復号していた。
このため、ユーザがいちいちデータの暗号化・復号化の指示を行うことになり、操作が煩わしいという問題があった。特に、暗号化してあるデータを一度復号して修正してから再び暗号化するというような操作を行う場合には、再暗号化の操作を忘れる可能性があり、再暗号化の操作を忘れた場合には記憶装置内のデータの盗み見や改変に対抗できないという問題があった。したがって、データの暗号化・復号化が必要な時に、必ずしもユーザによる直接の指示がなくても、暗号化・復号化を行うことができる仕組みが必要となっている。
【０００６】
本発明はこれらの問題点を解決するためになされたものであり、その第１の目的は、ユーザによる暗号化・復号化の直接の指示がなくても、アプリケーションプログラムからのデータの書き出し要求があったならば、そのデータを自動的に暗号化して記憶装置に保存し、データの読み込み要求があったら、記憶装置に保存してある暗号化データを自動的に復号してアプリケーションプログラムに渡すことにより、ユーザが煩わしい操作を行なうことなく記憶装置内のデータの盗み見や改変を防止することができるデータ保存方法およびシステム並びに保存処理用記録媒体を提供することにある。
【０００７】
また、上記のようなアプリケーションプログラムからの書き出し要求、読込み要求を受けて自動的に暗号化・復号化する場合、次のような問題が生じる。
アプリケーションプログラムはファイル内の任意の位置からデータの読み書きを行う。自動的な暗号化方法を行う際に暗号基本単位の連鎖処理を行っていると、ファイル内のある位置でデータの上書きが起きた時にその位置以降のすべての暗号基本単位を暗号化し直す処理が必要となり、上書き処理終了までの時間が大きくなってしまう。
【０００８】
このような再暗号化処理が必要となる部分を少なくするため、ファイルを暗号基本単位より大きい一定長のレコードで区切り、このレコードごとに上記初期化データを用意する方式が考えられている。この方式では、ファイル内のある位置でデータの上書きが起きた場合、再暗号化処理を上書きのあったレコードの終端までしか行わないようしている。このようにすることで、再暗号化が必要となる部分を限定することができる。
【０００９】
しかし、ファイルを一定長のレコードに分割することにより、データ上書きの際の再暗号化処理を少なくすることはできるが、どの程度のレコード長が良いかは簡単に決めることはできない。
【００１０】
レコード長が長いと、アプリケーションプログラムがデータを上書きする時に必要となる再暗号化処理の長さが大きくなってしまう。
レコード長が短いと、アプリケーションプログラムがデータを読み書きする際に複数のレコードにまたがってアクセスすることが多くなり、各レコードの初期化データを準備する回数が増えてしまい、その処理時間がかえってオーバヘッドになってしまう。
【００１１】
また、アプリケーションプログラムごとに読み書きする単位長が異なっているため、あるアプリケーションプログラムにとって最適なレコード長が他のアプリケーションプログラムにとっても最適とは限らない。
【００１２】
本発明は上記問題点も解決するためになされたものであり、その第２の目的は、アプリケーションプログラムそれぞれについて、その読み書きする長さや読み書きを開始する位置を記録しておき、この記録を用いて、上書きの際の再暗号化処理や初期化データの準備からなるオーバヘッド時間を最小化するレコードサイズを求めることにより、データ上書きの際の処理時間を短くすることができるデータ保存方法およびシステム並びに保存処理用記録媒体を提供することにある。
【００１３】
【課題を解決するための手段】
上記目的を達成するため、本発明のデータ保存方法は、アプリケーションプログラムからのデータの書き込み要求に対し、該書き込み要求を前記ファイルフック手段によって横取りし、前記オペレーティングシステムが書き込み対象となるデータを前記記憶装置に書き込む前に、当該コンピュータの内部メモリに記憶した暗号鍵により予め設定したレコード長単位で暗号化して前記記憶装置に書き込み、
前記アプリケーションプログラムからの読み出し要求に対しては、該読み出し要求を前記ファイルフック手段によって横取りし、前記アプリケーションプログラムに読み出しデータを転送する前に、前記オペレーティングシステムに前記記憶装置から暗号化されたデータをレコード単位で読み出させた後に、前記内部メモリに記憶した暗号鍵で前記暗号化されたデータを予め設定したレコード長単位で復号し、復号されたデータを読み出し要求を行なった前記アプリケーションプログラムに転送することを特徴とするものである。
【００１４】
また、予めユーザがファイル保存の際には自動的に暗号化して欲しいファイルやディレクトリを指定することで、指定したファイルあるいは指定したディレクトリ以下にあるファイルだけに対して、暗号化や復号化を行うことを特徴とするものである。
【００１５】
また、オペレーティングシステムがアプリケーションプログラムからのデータ読込み・書込み要求を受け取ると、そのデータのファイル内での位置とデータ長を記録しておき、十分な数の記録を取った後、アプリケーションプログラムごとに再暗号化処理と初期化データ処理のオーバヘッドを最小化するレコード長を計算し、以降の暗号化・復号化の際には計算で求めたレコード長を用いることを特徴とするものである。
【００１６】
このような手段により、暗号化や復号化の指示をユーザが明示的に行うことなしに記憶装置に保存するデータを自動的に暗号化し、読み出す時には自動的に復号することができ、煩わしい操作をユーザに強いることがない。また、記憶装置に保存するデータを自動的に保存するので、ユーザがデータの暗号化を忘れるという問題も起きない。
また、暗号化して保存する場所としてフロッピーディスクのような記憶媒体を表わすディレクトリも指定できるので、重要な情報をコピーされて持ち出されることを防ぐこともできる。
【００１７】
また、アプリケーションプログラムごとに、１回の上書き要求における再暗号化の長さ、および初期化データの生成処理からなるオーバヘッドを最小にするレコード長を求めることができるので、データ上書きの際の処理時間をそれぞれのアプリケーションプログラムごとに高速化できる。
また、アプリケーションからオペレーティングシステムへのデータ読み出し・書き込み要求を横取りするための仕組みは、オペレーティングシステムが提供している場合には、既存のアプリケーションプログラムやオペレーティングシステムを書き換える必要がなく、しかも新たにハードウェアを置き換える必要もなく、最小限のコストでデータのセキュリティを高めることが可能である。
【００１８】
【発明の実施の形態】
以下、本発明の実施形態に基づき詳細に説明する。
図１は、本発明の実施形態を示すシステム構成図である。
本実施形態は、ユーザが端末上で動作しているアプリケーションプログラムで作成したデータを、鍵管理サーバ（鍵管理コンピュータ）から取り寄せる自分の鍵で暗号化して端末に接続の記憶装置に保存する場合と、記憶装置から読み出した暗号化データを鍵管理サーバから取り寄せる自分の鍵で復号化して平文のデータをアプリケーションに渡す場合のものである。
【００１９】
図１に示すシステムは、大別すると、ユーザ１２３が操作する端末１０１と、この端末１０１に接続された記憶装置１１１と、データの暗号化のための鍵を管理する鍵管理サーバ（鍵管理コンピュータ）１１２と、暗号化のための鍵を格納した鍵データベース１２１と、端末１０１と鍵管理サーバ１１２とを接続するネットワーク１２２とから構成されている。
端末１０１は、据置き型あるいは携帯用のコンピュータで構成されるものであり、その内部には、ユーザ入力部１０２、パスワード暗号鍵生成部１０３、ファイル暗号鍵生成部１０４、暗号鍵・復号化部１０５、アプリケーションプログラム１０６、ファイルアクセスフック部１０７、オペレーティングシステム１０８、記憶装置用インタフェース１０９、通信用インタフェース１１０、レコードサイズ記憶部１２４、アクセス情報記憶部１２５を備え、ユーザ１２３はアプリケーションプログラム１０６で作成したデータファイルを記憶装置１１１に保存したり、読み出したりすることができる。
ユーザ入力部１０２は、ファイルアクセスフック部１０７からの指示によって、ユーザ１２３にユーザ名とパスワードを入力させるためのものである。パスワード暗号鍵生成部１０３は、ユーザ１２３が入力したパスワードから暗号鍵を生成するためのものである。パスワード暗号鍵は、ユーザ１２３の認証情報やシステム全体で使う暗号鍵を暗号化して記憶装置１１１に保存するものである。ファイル暗号鍵生成部１０４は、記憶装置１１１に保存するファイルの暗号化に使う暗号鍵をランダムに生成するものである。暗号化・復号化部１０５は、ファイルを実際に暗号化・復号化するものである。ユーザ１２３がデータファイルを作成するためのアプリケーションプログラム１０６は、ワープロや表計算などのソフトである。
【００２０】
ファイルアクセスフック部１０７は、アプリケーションプログラム１０６から記憶装置１１１へのファイルアクセス要求を横取りする処理と、鍵管理サーバ１１２からユーザ鍵を取り寄せるなど、端末１０１でのファイルの暗号・復号処理全般を管理するものである。端末１０１上で動作しているオペレーティングシステム１０８は、記憶装置用インタフェース１０９、通信用インタフェース１１０、レコードサイズ記憶部１２４、アクセス情報記憶部１２５を管理して、記憶装置１１１へのアクセスや、ネットワーク１２２を介した通信などの動作環境をアプリケーションプログラム１０６やファイルアクセスフック部１０７に提供している。
【００２１】
レコードサイズ記憶部１２４は、アプリケーションプログラムごとの暗号化・復号化する際のレコードサイズを記憶するために使う。
【００２２】
アクセス情報記憶部１２５は、アプリケーションプログラムごとに、ファイル内で読み出しや書き込みを開始した位置と読み出し・書き込みデータの長さを複数保存しておくためのもので、暗号化・復号化する際のレコードサイズを計算するために使う。
なお、記憶装置１１１には、ユーザ１２３が作成したファイルだけでなく、ユーザ１２３がパスワードを入力した際の確認に使う認証トークンやシステムがデータの暗号化に使うシステム鍵も暗号化して保存してある。
【００２３】
一方、鍵管理サーバ１１２は、鍵管理アプリケーションプログラム１１３、ユーザ入力部１１４、パスワード暗号鍵生成部１１５、ユーザ鍵生成部１１６、暗号化・復号化部１１７、オペレーティングシステム１１８、通信用インタフェース１１９、記憶装置用インタフェース１２０を備えており、端末１０１のユーザ１２３が本システムを使うための情報を生成したり、ユーザ鍵を管理する機能を担っている。
鍵管理アプリケーションプログラム１１３は、ユーザ１２３に配布する情報の生成や、端末１０１からのユーザ鍵要求メッセージの処理など、鍵管理サーバ１１２での暗号処理全般を管理している。ユーザ入力部１１４は、最初にユーザ１２３がユーザ鍵を生成する際に、鍵管理アプリケーションプログラム１１３からの指示によって、ユーザ１２３にユーザ名とパスワードを入力させるためのものである。パスワード暗号鍵生成部１１５は、ユーザ１２３が入力したパスワードから暗号鍵を生成するためのものである。ユーザ鍵生成部１１６は、ユーザ１２３用の暗号鍵をランダムに生成するためのものである。暗号化・復号化部１１７は、ユーザ１２３に配布する情報を暗号化したり、ユーザ１２３がユーザ鍵を要求してきた時にやり取りする電子メッセージを暗号化あるいは復号化したりするためのものである。
鍵管理サーバ１１２上で動作するオペレーティングシステム１１８は、通信用インタフェース１１９、記憶装置用インタフェース１２０を管理し、ネットワーク１２２を使った通信や鍵データベース１２１へのアクセスなどの環境を、鍵管理アプリケーションプログラム１１３に提供している。
鍵データベース１２１には、端末１０１と鍵管理サーバ１１２とがネットワーク１２２を使ってやりとりする通信データを暗号化するためのシステム鍵と、ユーザ１２３の鍵情報レコードが保存してあり、この鍵情報レコードは、図２に示すように、ユーザ名２０１とユーザ鍵２０２とから構成されている。
【００２４】
（ユーザ配布情報の作成）
図３は、本システムを使用するためにユーザ１２３へ配るデータを鍵管理サーバ１１２上で作成する手順を示すフローチャートである。
まず、ユーザ入力部１１４からユーザ名とパスワードを入力させる（ステップ３０１）。
次に、パスワード暗号鍵生成部１１５で、ユーザ１２３のパスワードに処理を加えてパスワード暗号鍵を生成する。処理方法としては、例えば、ＭＤ５アルゴリズムのような一方向関数を用いる（ステップ３０２）。
続いて、ユーザ鍵生成部１１６において、ユーザ鍵をランダムに生成する（ステップ３０３）。
ここで得られたユーザ鍵とユーザ名から、図２に示すような鍵情報レコードを作成し、鍵データベース１２１に保存する（ステップ３０４）。なお、図２はユーザ名が「Ａ」であるユーザＡの鍵情報レコードの例である。
次に、ユーザ１２３が入力したパスワードの正しさを検証するための認証トークンを作成する（ステップ３０５）。これは、ユーザが入力したパスワードをそのままデータとして保存しておくことはセキュリティ上危険であるため、暗号処理を利用して保存している。例えばＵＮＩＸでは、「オール０」のデータをユーザ１２３のパスワードを鍵として暗号化して保存しておき、後でユーザ１２３がパスワードを入力した際に同じ処理をして認証作業を行っている。
【００２５】
本実施形態では、すべて「０」の６バイトデータをパスワード暗号鍵で暗号化して図４のような認証トークンを生成する。図４において、４０１は、この認証トークンの所有者を示すユーザ名（ここではユーザＡ）で、４０２は暗号処理を行った後のデータ値である。
続いて、本システムでネットワーク１２２上を流れるデータを暗号化するために使うシステム鍵を、やはりパスワード暗号鍵で暗号化する（ステップ３０６）。パスワード暗号鍵を使うことで、ユーザ１２３のパスワードを知っている者だけが、正しいシステム鍵を手に入れることができる。
なお、システム鍵は、鍵管理サーバ１１２においてシステムの運用開始時に作成しておく。
最後に、認証トークンと暗号化したシステム鍵とをフロッピーディスクなどにコピーしてユーザ１２３に渡す（ステップ３０７）。ユーザ１２３は受け取った情報を、自分が操作する端末１０１に接続してある記憶装置１１１にコピーして使用することになる。
【００２６】
（ファイルの暗号化）
図５は、ユーザ１２３（ここではユーザＡ）が端末１０１上で作成したデータを暗号化して記憶装置１１１に保存する際の手順を示すフローチャートである。
本手順は、ユーザＡがアプリケーションプログラム１０６で作成したデータを記憶装置１１１に保存しようとした時に開始する。
まず、アプリケーションプログラム１０６がオペレーティングシステム１０８へのファイル保存要求を発行すると、オペレーティングシステム１０８がその要求を処理する前に、そのファイル保存要求をファイルアクセスフック部１０７が受け取る（ステップ５０１）。
続いて保存要求があったファイルを暗号化して保存するために、以下のようにして管理サーバ１１２からユーザ鍵を取り寄せる。
まず、アプリケーションプログラム１０６を操作していたユーザＡのユーザ名とパスワードをユーザ入力部１０２からユーザＡに入力させる（ステップ５０２）。次に、入力されたパスワードからパスワード暗号鍵生成部１０３でパスワード暗号鍵を生成する（ステップ５０３）。
【００２７】
端末１０１は、入力されたパスワードが正しいかどうか確かめるため、管理サーバ１１２での認証トークンの生成と同じ処理を行い、記憶装置１１１から読み出した認証トークンと一致するかどうか検証する（ステップ５０４）。一致しなれば、ユーザ名とパスワードの入力を繰り返させる。一致した場合は、次の手順に進む。
【００２８】
次に、記憶装置１１１から暗号化してあるシステム鍵を読み出し、パスワード暗号鍵を使ってシステム鍵を復号する（ステップ５０５，５０６）。
なお、記憶装置１１１から読み出した認証トークンと暗号化システム鍵は、前もって鍵管理サーバ１１２において生成しておいたものである。
【００２９】
次に、鍵管理サーバ１１２とメッセージの交換を行い、ユーザ鍵を取り寄せる。なお、端末１０１と鍵管理サーバ１１２の間で交換するメッセージのフォーマットは、図６に示すようなものである。図６において、６０１は、メッセージの区別をするためのヘッダ部であり、「０」であれば端末１０１から鍵管理サーバ１１２へユーザ鍵を要求するユーザ鍵要求メッセージであることを示し、「１」であれば鍵管理サーバ１１２からの返答であることを示すユーザ鍵返答メッセージである。６０２は、メッセージ中に含まれるデータ本体であり、メッセージの種類により内容は異なる。６０３は、システム鍵を使ったヘッダ部６０１とデータ部６０２の電子署名である。
鍵管理サーバ１１２からユーザ鍵を取り寄せるため、端末１０１ではユーザ鍵要求メッセージを作成する（ステップ５０７）。端末１０１から鍵管理サーバ１１２へ送る情報は、ユーザ名とチャレンジデータである。チャレンジデータとは、ユーザ鍵要求メッセージを作成するたびにランダムに選ぶ整数で、鍵管理サーバ１１２が事前に決めた処理（例えば１を加える）をしたレスポンスデータをユーザ鍵返答メッセージに含める決まりにしておくことで、ユーザは受け取った返答メッセージが、直前に出した要求メッセージに対する返答であることを確認できる。
まず、図７に示すようなユーザ名７０１とチャレンジデータ７０２からなるデータを構成し、システム鍵で暗号化する。次に図８のように、ヘッダ部８０１にメッセージがユーザ鍵要求メッセージであることを示す値「０」と、データ部８０２にユーザ名とチャレンジデータを暗号化した情報からなるデータの電子署名８０３とから構成されたユーザ鍵要求メッセージを生成する。そして生成したユーザ鍵要求メッセージを鍵管理サーバ１１２に送り、返答メッセージが送り返されるのを待つ。
【００３０】
この後、鍵管理サーバ１１２はユーザ鍵要求メッセージを処理し、ユーザ鍵返答メッセージを作成して端末１０１に送り返してくるが（ステップ５０８）、この手順の詳細は図１３を用いて後述する。
端末１０１では、送り返されてきたユーザ鍵返答メッセージを受け取ると（ステップ５０９）、まず、転送途中での改変がなかったか、返答メッセージに含まれている電子署名を検査する（ステップ５１０）。ここでメッセージの改変があったことが分かると、ファイルの保存命令を出したアプリケーションプログラム１０６に保存の失敗を知らせ終了する（ステップ５２１）。改変がない場合には次の手順に進む。
ユーザ鍵返答メッセージのデータ部はシステム鍵で暗号化されているので、システム鍵で復号する（ステップ５１１）。
【００３１】
ところで、ユーザ鍵返答メッセージには、ユーザ鍵を含むものと、鍵管理サーバ１１２で何らかのエラーが発生したためにユーザ鍵を含まないものの２種類があり、返答メッセージのデータ部の内容が異なっている。このデータ部の暗号化される前の内容は図９あるいは図１０のようになっている。
図９は、ユーザ鍵が返されてきた場合の内容であり、ユーザ名９０１、レスポンスデータ９０２、ユーザ鍵が含まれていることを示す値「０」９０３、ユーザ鍵９０４を含んでいる。
図１０は、何らかのエラーによりユーザ鍵が返されなかった場合の内容で、ユーザ名１００１、レスポンスデータ１００２、何らかのエラーが発生したことを示す値「１」１００３を含んでいる。ここで１００３には、エラーの具体的な種類を示すために「０」以外のどんな値を含めてもよい。
なお、ユーザ鍵返答メッセージに含めるレスポンスデータは、ユーザ鍵要求メッセージに含まれていたチャレンジデータの値に「１」を加えたものとする。
端末１０１は、ユーザ鍵返答メッセージのデータ部を復号した後、ユーザ鍵の有無を検査する（ステップ５１２）。ユーザ鍵を含んでいない場合は、ファイルを暗号化して保存することができないので、保存の失敗をアプリケーションプログラム１０６に知らせて（ステップ５２１）終了する。ユーザ鍵が含まれていた場合には、実際にファイルを暗号化する手順に進む。
【００３２】
ここで新規ファイルへの書き込みであれば、ファイル暗号鍵とファイル初期化データをランダムに生成する（ステップ５１９）。そしてファイル暗号鍵をユーザ鍵で暗号化した後、暗号化したファイル暗号鍵とファイル初期化データを新規ファイルのヘッダとして保存して（ステップ５２０）、次の手順に進む。ファイル暗号鍵は、ファイルを分割したレコードごとに用意する暗号鍵を生成するために使う。ファイル初期化データは、レコードごとの初期化データを生成するために使う。
【００３３】
もし既存ファイルへの書き込みであれば、書き込み対象のファイルのヘッダから暗号化されたファイル暗号鍵とファイル初期化データを読み込む（ステップ５１４）。そして、暗号化されたファイル暗号鍵をユーザ鍵で復号化してファイル暗号鍵を得る（ステップ５１５）。
次に、書き込み要求のあったデータを暗号化する（ステップ５１６）。なお、暗号化の手順の詳細は図１４で説明する。
【００３４】
上記のようにして得た暗号化されたデータは、アプリケーションプログラム１０６の書き込み要求に対応した暗号化ファイル内の位置に書き込む。そして、暗号化されたファイル暗号鍵を１１０１、ファイル初期化データを１１０２、暗号化されたファイル本体を１１０３とし、ユーザ鍵を使ってこれらの署名を生成したものを１１０４として図１１に示すような暗号化ファイル１１００を作成し、記憶装置１１１に保存する。従って、記憶装置１１１には、アプリケーションプログラム１０６が生成したファイルを暗号化した暗号化ファイル本体１１０３に対し、ファイル暗号鍵を暗号化したデータ１１０１、ファイル初期化データ１１０２と署名１１０４が付加されて記憶されることになる。
最後に、保存の終了をファイルの保存要求を出したアプリケーションプログラム１０６に知らせ（ステップ５１８）、本手順を終了する。
【００３５】
（ファイルの復号化）
図１２は、ユーザＡが記憶装置１１１に保存してある暗号化データを端末１０１上で動作するアプリケーションプログラム１０６で読み出す際の手順を示すフローチャートである。
本手順は、ユーザＡが以前に暗号化して記憶装置１１１に保存したデータをアプリケーションプログラム１０６に読み込もうとした時に開始する。アプリケーションプログラム１０６がオペレーティングシステム１０８へのファイル読み出し要求を発行すると、オペレーティングシステム１０８がその要求を処理する前に、そのファイル読み出し要求ファイルアクセスフック部１０７が受け取る（ステップ１２０１）。
ファイルアクセスフック部１０７は、読み出し要求で指定されたファイルを読み出すようにオペレーティングシステム１０８に指示し、記憶装置１１１から記憶装置用インタフェース１０９を介して、暗号化されているファイルを読み出す（ステップ１２０２）。
【００３６】
次に、読み込んだファイルを復号するために、ファイルを暗号化する際と同様の手順でユーザの認証を行い、鍵管理サーバ１１２からユーザ鍵を取り寄せる。このユーザ鍵を取り寄せるまでの手順に相当するステップ１２０３〜１２１３は、図５のステップ５０２〜５１２と全く同様である。
この際に、鍵管理サーバ１１２からのユーザ鍵返答メッセージの改変を検知したり（ステップ１２１１）、あるいはユーザ鍵を得ることができなかった場合には（ステップ１２１３）、読み込んだファイルを復号することができないので、読み出しの失敗をアプリケーションプログラム１０６に知らせて（ステップ１２１９）本手順を終了する（ステップ１２１８）。ユーザ鍵を得ることができた場合のみ、以下のようにして暗号化したファイルを復号する。
ここで読み込み対象のファイルは図１１に示すようなフォーマットであり、１１０１はファイル暗号鍵をユーザ鍵で暗号化したもの、１１０２はファイル初期化データ、１１０３は暗号化されたファイル本体、１１０４はこれら３つのデータ１１０１〜１１０３のユーザ鍵による電子署名である。
【００３７】
図１２において、ユーザ鍵が含まれていた場合、暗号化ファイルが改変されていないか、署名１１０４の確認を行なう（ステップ１２１４）。ここで改変されていることがわかったら、ファイル読み出しの失敗をアプリケーションプログラム１０６に通知して（ステップ１２１９）本手順を終了する。
改変されていなければ、まず暗号化ファイルから暗号化されたファイル暗号鍵１１０１とファイル初期化データ１１０２を読み込む（ステップ１２１５）。
【００３８】
次に、鍵管理サーバ１１２から得たユーザ鍵を使い、暗号化ファイル暗号鍵１１０１を復号し、元のファイル暗号鍵を得る（ステップ１２１６）。
続いて、暗号化されているファイル本体１１０３からアプリケーションプログラム１０６の要求に対応した暗号化データを読み込み、復号して得たファイル暗号鍵を使って復号する（ステップ１２１７）。なお、復号の手順の詳細は図１９で説明する。
最後に、復号して得たデータをアプリケーションプログラム１０６に渡して（ステップ１２１８）本手順を終了する。
【００３９】
（鍵管理アプリケーションプログラムの処理）
図１３は、鍵管理サーバ１１２上で動作する鍵管理アプリケーションプログラム１１３が、端末１０１からのユーザＡのユーザ鍵要求を処理する際の手順を示すフローチャートである。
本手順は、ファイルアクセスフック部１０７からのユーザ鍵要求メッセージを受け取って開始する。
鍵管理アプリケーションプログラム１１３が受け取るユーザ鍵要求メッセージは、図８に示したようなフォーマット構成になっている。
鍵管理アプリケーションプログラム１１３は、端末１０１からユーザ鍵要求メッセージを受け取ると（ステップ１３０１）、最初に、メッセージに改変がなかったか調べるため、鍵データベース１２１にあらかじめ保存してあるシステム鍵を読み込み（ステップ１３０２）、要求メッセージ中の電子署名を確認する（ステップ１３０３）。もし改変があれば、以下に述べるユーザ鍵を鍵データベース１２１から取り出す作業を行わない。
【００４０】
ユーザ鍵を鍵データベース１２１から取り出すには、まず暗号化・復号化部１１７において、ユーザ鍵要求メッセージをシステム鍵で復号し、図７に示したうなユーザ名７０１とチャレンジデータ７０２を取り出す（ステップ１３０４）。
次に、ここで得たユーザ名を含む鍵情報レコードを鍵データベース１２１から取り出す。図２の示すような鍵情報レコードが見つかれば、ユーザ鍵２０２を取り出す（ステップ１３０５）。
【００４１】
以上のようにして、ユーザ鍵要求メッセージの改変検査とユーザ鍵の取り出しを終えた後、端末１０１に返答するユーザ鍵返答メッセージを作成する（ステップ１３０６）。ここで、返答メッセージに含めるレスポンスデータは、要求メッセージに含まれていたチャレンジデータに「１」を加えた値であるが、ユーザ鍵を得ることができたかどうかで返答メッセージのデータ部に含める内容が変わる。  ユーザ鍵を得た場合には、図９に示したようにユーザ名９０１、レスポンスデータ９０２、ユーザ鍵を含んでいることを示す値「０」９０３、ユーザ鍵９０４から成るデータを暗号化・復号化部１１７上でシステム鍵を使い暗号化したものを、ユーザ鍵返答メッセージのデータ部に含める。
ユーザ鍵を得ることができなかった場合には、図１０に示したようにユーザ名１００１、レスポンスデータ１００２、ユーザ鍵を含んでいないことを示す値「１」から成るデータを暗号化・復号化部１１７上でシステム鍵を使い暗号化したものを、ユーザ鍵返答メッセージのデータ部に含める。
ユーザ鍵返答メッセージの署名部には、ユーザ鍵返答メッセージであることを示す値「１」を持つヘッダ部と、上記のように作成したデータ部からなるデータを、システム鍵を使って作成した署名を含める。
以上のようにして作成したユーザ鍵返答メッセージを端末１０１に送り（ステップ１３０７）、本手順を終了する。
【００４２】
（暗号化詳細手順）
図１４は、アプリケーションプログラム１０６から書き込み要求のあったデータを暗号化する際の詳細手順を示すフローチャートである。本手順は、ファイル暗号鍵、ファイル初期化データ、書き込み要求データを用意できた時点で開始する。
【００４３】
図１５は、アプリケーションからの書き込み要求である。１５０１は書き込み開始位置、１５０２は書き込みデータの長さ、１５０３は書き込みデータである。図１５の書き込み要求では、ファイル内の位置１８００から２７９９までの間に１５０３の書き込みデータを書き込むことを要求している。
図１４において、まず、書き込み要求を行なったアプリケーションプログラムに対応するレコード長をレコードサイズ記憶部から読み込む（ステップ１４０１）。
レコードサイズ記憶部１２４は、図１６に示すように、表計算プログラムやワープロプログラムなどの各種のアプリケーションプログラム１６０１ごとのレコードサイズ１６０２を保存してある。もし、対応するレコード長が記録されていなかったら、レコードサイズ記憶部１２４の最後に記録されているデフォルトの長さを読み込む。ここでは、書き込み要求を行なったアプリケーションプログラムに対応する長さとして「５１２」を読み込むものとする。
【００４４】
もし、レコードサイズ記憶部１２４にレコード長が記録されていなかったら、ここでアプリケーションプログラムからの書き込み要求に含まれる、ファイル内の書き込み要求位置１５０１と書き込みデータの長さ１５０２を、このアプリケーションプログラム用のアクセス情報記憶部１２５に保存する（ステップ１４０３）。
【００４５】
アクセス情報記憶部１２５は、図１７に示すように、書き込み、読み込み要求があるたびにその開始位置１７０１と書き込みデータの長さ１７０２をアプリケーションプログラムごとに記録したもので、複数記憶しておくことができる。図１７では、図１５の書き込み要求をアクセス情報記憶部１２５に保存した場合の様子を示している。ここで記録したデータは、一定時間後に暗号する際のレコード長を求めるために使う。
【００４６】
次に、書き込み要求の開始位置をレコード長で割り算し、その商をファイルの何番目のレコードへの書き込みであるかを示すレコードインデックス値とする（ステップ１４０４）。もし、複数のレコードにまたがる書き込みであれば、すべてのレコードについて計算しておく。図１５に示す書き込み要求からレコードインデックスを求めると、書き込み開始位置「１８００」をレコード長「５１２」で割った商は３、書き込み終了位置２７９９を５１２で割った商は５であるので、求めるレコードインデックス値は「３」、「４」、「５」である。
【００４７】
続いて、書き込み先のレコード用のレコード暗号鍵を、そのレコードのインデックス値とファイル暗号鍵を使って計算する（ステップ１４０５）。もし、レコードの先頭から書き込み要求を行なう必要があれば、そのレコード用の初期化データをファイル初期化データとレコードインデックス値から求める。これらの計算方法としては、例えば２つのデータを連結してハッシュ関数による演算を行なう方法が考えられる。図１５の書き込み要求の場合、レコード３の途中からレコード５の途中までの書き込み要求であるので、「レコード３」のレコード暗号鍵の計算、および「レコード４」、「５」のレコード暗号鍵と初期化データの計算を行う。
【００４８】
次に、書き込むデータがすでにファイル内に保存されているデータの上書きであるかどうか検査する（ステップ１４０６）。ここで上書きでなければ、書き込みデータを暗号化用バッファにコピーし暗号化ステップに進む（ステップ１４１１）。
もし上書きであれば、書き込み開始位置で暗号連鎖処理に必要な部分と再暗号化が必要な部分をファイルから暗号化用バッファに読み込む（ステップ１４０７）。暗号連鎖処理に必要な部分とは、書き込み開始位置でデータを暗号化する際に連鎖処理で使う暗号文のことで、書き込み開始位置の直前の暗号文であり、その長さは暗号連鎖処理の方法によって異なる。書き込み開始位置がレコードの先頭であれば、暗号連鎖処理に必要な部分としてレコード初期化データを用いるので、書き込み開始位置の直前部分をファイルから読み込む必要はない。本実施例における暗号連鎖処理に必要となる長さを「８」とすると、図１５の書き込み要求における暗号連鎖処理に必要な部分とは、ファイル内の位置「１７９２」から「１７９９」までの暗号文である。また、再暗号化が必要な部分とは、データの上書きによって暗号連鎖処理をやり直す必要のある部分のことで、書き込み終了位置の直後からこの書き込み終了位置を含むレコードの最後までである。図１５の書き込み要求における再暗号化が必要な部分は、ファイル内の書き込み終了位置の直後「２８００」から、この書き込み終了位置を含む「レコード５」の最後の位置「３０７１」までである。図１８に、ファイル内における、暗号連鎖処理に必要な部分と再暗号化が必要となる部分を示す。
【００４９】
続いて、暗号化用バッファ上にある再暗号化が必要な部分を、対応するレコード暗号鍵を使って復号しておく（ステップ１４０８）。図１５の書き込み要求では、「レコード５」のレコード暗号鍵を使って復号する。そして、書き込み要求データを再暗号化のために復号したデータとつなげて暗号化用バッファ上に書き込む（ステップ１４０９）。
【００５０】
最後に、暗号化用バッファ上に暗号化するデータが用意できたら、そのデータに対応するレコード用の暗号鍵とファイルから読み込んだ暗号連鎖処理に必要なデータ、初期化データを使って暗号化して（ステップ１４１０）本手順を終了する。
【００５１】
（復号化詳細手順）
図１９は、アプリケーションプログラムから読み込み要求のあったデータを読み込んで復号する際の詳細手順を示すフローチャートである。本手順は、ファイル暗号鍵、ファイル初期化データを用意できた時点で開始する。
図２０は、アプリケーションからの読み込み要求である。２００１は読み込み開始位置、２００２は読み込みデータの長さである。
【００５２】
図１９において、まず、書き込み要求の時と同様に、読み込み要求を行なったアプリケーションプログラムに対応するレコード長をレコードサイズ記憶部から読み込む（ステップ１９０１）。もし、対応するレコード長がなければデフォルトの値を読み込み（ステップ１９０２）、読み込み開始位置２００１とその長さ２００２をこのアプリケーションプログラム用のアクセス情報記憶部１２５に記録する（ステップ１９０３）。レコードインデックスの計算とレコード用の暗号鍵、初期化データの計算も、書き込み要求の場合と同様に行なう（ステップ１９０４，１９０５）。
【００５３】
続いて、読み込み要求に対応するレコードをファイルから読み込み、レコード用暗号鍵、初期化データを使って復号して（ステップ１９０６）、本手順を終了する。
【００５４】
（レコード長の計算）
図２１は、レコード長を計算する際の詳細手順を示すフローチャートである。本手順は、あるアプリケーションプログラムにおいて、アクセス情報記憶部１２５に記録したアクセス情報が一定件数（例えば１００件）を越えた時に開始する。
ここで、レコード長としては２のべき乗を候補とする。アプリケーションプログラムやオペレーティングシステムのファイルアクセス単位、記憶装置上の物理的な記録単位は、処理の単純化のために２のべき乗の数を使う例が多いためである。
なお、この手順を始める前に、暗号化速度、復号化速度、レコード用の暗号鍵の生成にかかる時間、初期化データの生成にかかる時間を求めておく。
【００５５】
図２１において、まず、アクセス情報記憶部１２５に記録したアクセス長の平均値を求める（ステップ２１０２）。ここで、平均アクセス長として「１４０」バイトが得られたものとする。次に、平均アクセス長を超える一番小さい２のべき乗数を求める（ステップ２１０２）。今回の例では「２５６」である。
【００５６】
続いて、レコード長を仮に１、２、４、…、と２のべき乗数として以下の手順を行ない、それぞれの場合の平均書き込みオーバヘッド時間を求める（ステップ２１０３）。仮のレコード長の上限は、前の手順で求めた、平均アクセス長を超える一番小さい２のべき乗数である。今回の例では、「２５６」である。
【００５７】
それぞれの仮レコード長について行なう計算は以下の通りである。
まず、書き込み時に再暗号化処理の必要となる長さの平均、および１回のアクセスにつきレコード用暗号鍵と初期化データの計算が平均何回あるかを求める。再暗号化処理に必要な長さは、図１８に示すような部分のことである。平均再暗号化処理長は、各アクセス長について「数１」に示す式で求めた値の平均値である。
【００５８】
【数１】
0003741357.tif 000002
【００５９】
平均計算回数は、各アクセス位置とアクセス長の組について「数２」に示す式で求めた値の平均値である。なお、「数１」、「数２」の中で使用している記号の意味は図２２に示す通りである。また、「Ｌ％Ｒ」とは、「Ｌ／Ｒの余り」のことである。
【００６０】
【数２】
0003741357.tif 000003
【００６１】
次に、上のようにして求めた平均再暗号化処理長と平均計算回数、および暗号化処理速度、復号化処理速度、レコード用暗号鍵の生成にかかる時間、初期化データの生成にかかる時間から、「数１」、「数２」の計算に用いた仮レコード長を使った時の平均書き込みオーバヘッド時間は「数３」に示す式を用いて得ることができる。
【００６２】
【数３】
0003741357.tif 000004
【００６３】
ここで、「数３」中の（平均再暗号化処理長）／（復号化速度）は、ファイルから読み込んだ再暗号化処理が必要な部分を復号化するのにかかる時間の平均である。また、（平均再暗号化処理長）／（暗号化速度）は、再暗号化処理が必要な部分を暗号化するのにかかる時間の平均である。また、｛ … ｝×（平均計算回数）は、レコードごとに用意するレコード鍵と初期化データを計算するのにかかる時間の平均である。これら３つの式の和を求めると、書き込みオーバヘッド時間の平均になる。
【００６４】
このようにしてそれぞれの仮レコード長について求めた平均書き込みオーバヘッド時間のうち、その最少値を与える仮レコード長を選ぶ（ステップ２１０４）。これが書き込み時のオーバヘッドを最少にするレコード長である。最後に、アプリケーションプログラムと選んだレコード長を組にしてレコードサイズ記憶部１２４に書き込む（ステップ２１０５）。
【００６５】
以上のように本実施形態においては、端末１０１のアプリケーションプログラム１０６からオペレーティングシステム１０８へ発行する記憶装置１１１へのデータ読み込み・書き出し要求を横取りし、書き出し要求の際にはデータを暗号化するための暗号鍵をネットワーク１２２で接続している鍵管理サーバ１１２から取り寄せ、この暗号鍵でデータを暗号化して記憶装置１１１に保存し、また、読み込み要求の際には記憶装置１１１から暗号化データを読み出し、この暗号化データを復号するための鍵を鍵管理サーバ１１２から取り寄せ、この暗号鍵で暗号化データを復号して取り出した元のデータをアプリケーションプログラム１０６に渡すようにしたため、暗号化や復号化の指示をユーザが明示的に行うことなしに記憶装置１１１に保存するデータを自動的に暗号化し、読み出す時には自動的に復号することができ、煩わしい操作をユーザに強いることがないという効果が得られる。また、記憶装置１１１に保存するデータを自動的に保存するので、ユーザがデータの暗号化を忘れるという問題も起きない。
【００６６】
また、鍵管理サーバ１１１２に対して暗号鍵を送ってもらう要求を出す前に、アプリケーションプログラム１０６を操作しているユーザに対してそのユーザを識別するための情報を入力させ、この情報の正しさをユーザが操作している端末１０１で確認した後にユーザの鍵を鍵管理サーバ１１２から取り寄せる、あるいはユーザが入力した識別情報を鍵管理サーバ１１２に送り、鍵管理サーバ１１２で受け取った識別情報の正しさを確認した後にそのユーザの暗号鍵を送り返すようにしているため、暗号化した機密データを保存してある携帯用の端末が盗まれたとしても、解読される危険性はこれらのデータが同一の記憶装置に保存されている場合に比べて小さくなり、データの機密性をさらに高めることができる。例えば、携帯用端末に暗号化データを保存しておき、社内でそのデータにアクセスしたい時は社内ＬＡＮに接続し、社外からは社内ネットワークへリモートアクセスして利用するようにしておけば、この携帯端末を不正に入手したユーザは、ユーザの識別情報を類推するだけでなく、リモートアクセス時のユーザ認証作業も行う必要があるので安全性がより高くなる。また、社内では携帯用端末を鍵管理サーバと同じネットワークに接続して重要データの編集や閲覧が可能なように構成でき、社外では鍵管理サーバが存在しないので、そのデータにアクセスできなくさせるように構成することができ、セキュリティを高めることができる。
【００６７】
さらに、アプリケーションプログラム１０６からオペレーティングシステム１０８へのデータ読み出し・書き込み要求を横取りするための仕組みは、オペレーティングシステム１０８が提供している場合には、既存のアプリケーションプログラムやオペレーティングシステムを書き換える必要がなく、しかも新たにハードウェアを置き換える必要もなく、最小限のコストでデータのセキュリティを高めることが可能である。
さらに、ＩＣカードにユーザ固有の暗号鍵を記録しておいて各ユーザ自身で暗号鍵を管理させる方法も考えられるが、ＩＣカード自体の紛失によりデータの復号が不可能になったり、ＩＣカードの読み書き機構を端末１０１に付加しておく必要があるので、コスト面で不利となる。しかし、本実施形態のように暗号鍵を鍵管理サーバ１１２から取り寄せるようにすることにより、ＩＣカードの読み書き機構を備えていない端末であっても利用することができるという利点がある。
【００６８】
なお、本実施形態では、ファイルの暗号化に際し、ユーザ鍵をそのまま使わずにファイル暗号鍵をその都度生成しているが、ユーザ鍵でファイル自体を直接に暗号化してもよい。
また、ファイルを保存あるいは読み出すたびにユーザに対してユーザ名とパスワードを入力させているが、これらの情報を端末１０１のメモリに一時的に保存しておいて、次回のファイル保存、読み出しの際にはこの一時保存してあるユーザ名とパスワードを使って鍵管理要求を生成するように構成することにより、ユーザの入力操作をさらに簡略化することができる。
さらに、取り寄せたユーザ鍵自体をメモリ上に一時保存し後で再利用する構成にすることにより、端末１０１と鍵管理サーバ１１２間の通信を行わずに済み、通信のオーバヘッドを省いて処理スピードを速めることができ、ネットワーク１２２のトラフィックを減らすこともできる。
【００６９】
また、予めユーザがファイル保存の際には自動的に暗号化して欲しいファイルやディレクトリを指定するように構成することで、指定したファイルあるいは指定したディレクトリ以下にあるファイルだけに対して、暗号化や復号化を行うことができる。これにより、暗号化して保存する場所としてフロッピーディスクのような記憶媒体を表わすディレクトリも指定できるので、重要な情報をコピーされて持ち出されることを防ぐこともできる。
【００７０】
さらに、端末１０１および鍵管理サーバ１１２において実施形態で説明したような機能を実現する各機能部分は、具体的には同等機能を実現する処理プログラムで構成されるものであり、これらの処理プログラムはＣＤＲＯＭなどの記憶媒体に格納して、あるいはインタネット等の通信媒体を通じて利用者に提供することができるものである。
【００７１】
また、本実施形態では、レコードごとに暗号鍵と初期化データを計算していたが、読み書き時の速度を高速化するためにファイル暗号鍵とファイル初期化データをそのまま使ってもよい。この場合、本実施形態に比べて暗号化ファイルの安全性が少し失われることになる。また、レコード長の計算方法も変える必要がある。
【００７２】
レコード長を決めるためにアプリケーションのアクセス長だけでなく、オペレーティングシステムによるファイルアクセスへのキャッシュの単位や、記憶装置上でのデータの記録単位（例えばセクタ長）を使うこともできる。
また、レコード長を求める時に、読み書きのアクセス記録の両方を使って平均書き込み時間を求めたが、厳密に読み書きを区別して計算してもよい。このためには、アクセス情報記憶部に読み書きを区別する欄を設ければよい。
また、レコード長はアプリケーションプログラム用のレコード長が求まっていない時だけでなく、例えば一週間に一回というように定期的に計算してもよい。
【００７３】
また、レコード長を求めた結果、その値がそれまで使っていたレコード長と異なる値になった場合、既存のファイルを暗号化し直せばよい。
また、暗号化ファイルにレコード長を記憶しておく領域を設けておくことで、そのファイルを暗号化する際のレコード長を保存して置くことができる。このようにすれば、アプリケーションプログラムに最適なレコード長が変わった時に、既存の暗号化ファイルを新しいレコード長の値を使って簡単に暗号化し直すことが可能である。
【００７４】
【発明の効果】
以上のように本発明によれば、暗号化や復号化の指示をユーザが明示的に行うことなしに記憶装置に保存するデータを自動的に暗号化し、読み出す時には自動的に復号することができ、煩わしい操作をユーザに強いることがないという効果が得られる。また、記憶装置に保存するデータを自動的に保存するので、ユーザがデータの暗号化を忘れるという問題も起きない。
【００７５】
また、自動的に暗号化・復号化する際に問題となる、データ上書き時の再暗号化処理や初期化データ生成処理のオーバヘッドも最小化できるので、このような最適化を行なわない場合に比べてデータ上書き処理を高速化できる。
【図面の簡単な説明】
【図１】本発明を適用したコンピュータシステムの実施形態を示すシステム構成図である。
【図２】ユーザに配布する鍵情報レコードの構成図である。
【図３】ユーザ配布情報作成手順を示すフローチャートである。
【図４】認証トークンの構成図である。
【図５】ファイル暗号化手順を示すフローチャートである。
【図６】端末と鍵管理サーバとの間で送受されるメッセージのフォーマット構成図である。
【図７】ユーザ鍵要求メッセージデータ部に含まれる元の内容を示す図である。
【図８】ユーザ鍵要求メッセージの構成図である。
【図９】ユーザ鍵返答メッセージデータ部に含まれる元の内容（ユーザ鍵あり）を示す図である。
【図１０】ユーザ鍵返答メッセージデータ部に含まれる元の内容（ユーザ鍵なし）を示す図である。
【図１１】記憶装置に記憶される暗号化ファイルの構成図である。
【図１２】ファイル復号化手順を示すフローチャートである。
【図１３】鍵管理アプリケーションの処理手順を示すフローチャートである。
【図１４】暗号化の詳細手順を示すフローチャートである。
【図１５】アプリケーションプログラムからの書き込み要求の構成図である。
【図１６】レコードサイズ記憶部を表す図である。
【図１７】アクセス情報記憶部を表す図である。
【図１８】書き込み要求の実行によってファイル上に上書きされる範囲と再暗号化処理の必要となる範囲を表す図である。
【図１９】復号化の詳細手順を示すフローチャートである。
【図２０】アプリケーションプログラムからの読み込み要求の構成図である。
【図２１】レコード長を求める手順を示すフローチャートである。
【図２２】計算式に使われている記号の説明図である。
【符号の説明】
１０１…端末、１０２…ユーザ入力部、１０３…パスワード暗号鍵生成部、１０４…ファイル暗号鍵生成部、１０５…暗号化・復号化部、１０６…アプリケーション、１０７…ファイルアクセスフック部、１０８…オペレーティングシステム、１０９…記憶装置用インタフェース、１１０…通信用インタフェース、１１１…記憶装置、１１２…鍵管理サーバ、１１３…鍵管理アプリケーション、１１４…ユーザ入力部、１１５…パスワード暗号鍵生成部、１１６…ユーザ鍵生成部、１１７…暗号化・復号化部、１１８…オペレーティングシステム、１１９…通信用インタフェース、１２０…記憶装置用インタフェース、１２１…鍵データベース、１２２…ネットワーク、１２３…ユーザ、１２４…レコードサイズ記憶部、１２５…アクセス情報記憶部。
【図１】
0003741357.tif 000005
【図２】
0003741357.tif 000006
【図３】
0003741357.tif 000007
【図４】
0003741357.tif 000008
【図５】
0003741357.tif 000009
【図６】
0003741357.tif 000010
【図７】
0003741357.tif 000011
【図８】
0003741357.tif 000012
【図９】
0003741357.tif 000013
【図１０】
0003741357.tif 000014
【図１１】
0003741357.tif 000015
【図１２】
0003741357.tif 000016
【図１３】
0003741357.tif 000017
【図１４】
0003741357.tif 000018
【図１５】
0003741357.tif 000019
【図１６】
0003741357.tif 000020
【図１７】
0003741357.tif 000021
【図１８】
0003741357.tif 000022
【図１９】
0003741357.tif 000023
【図２０】
0003741357.tif 000024
【図２１】
0003741357.tif 000025
【図２２】
0003741357.tif 000026