(57)【要約】【課題】全てのデータに対して共通の暗号鍵を使うことやその都度変化する暗号鍵を使うことをせずに、コンテントハッシュを名前としてデータを保存するファイルシステムの利点を保つことのできるデータ管理システムを提供すること。【解決手段】データの書き込みを要求された場合に、書き込みの対象となる暗号化前のデータをもとに、第１のコンテントハッシュを求める手段１と、前記第１のコンテントハッシュを暗号鍵として、前記暗号化前のデータに暗号化を施して、暗号化データを生成する手段１と、前記暗号化データをもとに、第２のコンテントハッシュを求める手段１と、前記暗号化データと前記第２のコンテントハッシュとの組を記憶する第１の記憶手段２と、前記第１のコンテントハッシュを、前記書き込みの要求元に与える手段１とを備える。【選択図】　　図１
2004126639.tif 000002
【特許請求の範囲】
【請求項１】
データの書き込みを要求された場合に、書き込みの対象となる暗号化前のデータをもとに、第１のコンテントハッシュを求める手段と、
前記第１のコンテントハッシュを暗号鍵として、前記暗号化前のデータに暗号化を施して、暗号化データを生成する手段と、
前記暗号化データをもとに、第２のコンテントハッシュを求める手段と、
前記暗号化データと前記第２のコンテントハッシュとの組を記憶する第１の記憶手段と、
前記第１のコンテントハッシュを、前記書き込みの要求元に与える手段とを備えたことを特徴とするデータ管理システム。
【請求項２】
第１のコンテントハッシュを指定してデータの読み出しを要求された場合に、
該第１のコンテントハッシュに基づいて、読み出しの対象となるデータに対応する第２のコンテントハッシュを取得する手段と、
この手段により取得された前記第２のコンテントハッシュに基づいて、前記第１の記憶手段から、該第２のコンテントハッシュと組になっている暗号化データを取得する手段と、
この手段により取得された前記暗号化データに、指定された前記第１のコンテントハッシュを暗号鍵として、復号化を施して、もとの暗号化前のデータを生成する手段と、
この手段により生成された前記もとの暗号化前のデータを、前記読み出しの要求元に与える手段とを更に備えたことを特徴とする請求項１に記載のデータ管理システム。
【請求項３】
同一のデータに対応する前記第１のコンテントハッシュと前記第２のコンテントハッシュとの組を記憶する第２の記憶手段を更に備え、
前記第２のコンテントハッシュを取得する手段は、指定された前記第１のコンテントハッシュに基づいて、前記第２の記憶手段から、該第１のコンテントハッシュと組になっている第２のコンテントハッシュを取得することを特徴とする請求項２に記載のデータ管理システム。
【請求項４】
前記ファイルシステムの各手段が複数の計算機に分散配置される場合に、前記第２の記憶手段を、当該複数の計算機のうちで最も侵入を防ぎやすい計算機に配置したことを特徴とする請求項３に記載のデータ管理システム。
【請求項５】
前記第２の記憶手段を、ユーザが携帯可能な記憶装置を用いて構成したことを特徴とする請求項３に記載のデータ管理システム。
【請求項６】
前記要求元は、アプリケーションプログラムであることを特徴とする請求項１ないし５のいずれか１項に記載のデータ管理システム。
【請求項７】
前記ファイルシステムの各手段がサーバ側ネットワークとクライアント側ネットワークに分散配置される場合に、
前記サーバ側ネットワークに、前記第１のコンテントハッシュを求める手段と、前記暗号化データを生成する手段と、前記第２のコンテントハッシュを求める手段と、前記第１の記憶手段と、前記書き込みの要求元に与える手段とを配置し、
前記クライアント側ネットワークに、前記第２のコンテントハッシュを取得する手段と、前記暗号化データを取得する手段と、前記もとの暗号化前のデータを生成する手段と、前記読み出しの要求元に与える手段とを配置したことを特徴とする請求項２に記載のファイルシステム。
【請求項８】
前記サーバ側ネットワークに、同一のデータに対応する前記第１のコンテントハッシュと前記第２のコンテントハッシュとの組を記憶する第２の記憶手段を更に配置し、
前記第２のコンテントハッシュを取得する手段は、指定された前記第１のコンテントハッシュに基づいて、前記第２の記憶手段から、該第１のコンテントハッシュと組になっている第２のコンテントハッシュを取得することを特徴とする請求項６に記載のファイルシステム。
【請求項９】
前記クライアント側ネットワークに、前記第１の記憶手段に記憶された前記暗号化データと前記第２のコンテントハッシュとの組をキャッシュする手段を更に配置し、
前記暗号化データを取得する手段は、まず、前記キャッシュする手段からの前記暗号化データの取得を試み、取得できない場合にはじめて、前記前記第１の記憶手段からの前記暗号化データの取得を試みることを特徴とする請求項７または８に記載のファイルシステム。
【請求項１０】
前記要求元は、前記クライアント側ネットワークに存在するクライアントアプリケーションプログラムであることを特徴とする請求項７ないし９のいずれか１項に記載のデータ管理システム。
【請求項１１】
データの書き込みを要求された場合に、書き込みの対象となる暗号化前のデータをもとに、第１のコンテントハッシュを求め、
前記第１のコンテントハッシュを暗号鍵として、前記暗号化前のデータに暗号化を施して、暗号化データを生成し、
前記暗号化データをもとに、第２のコンテントハッシュを求め、
前記暗号化データと前記第２のコンテントハッシュとの組を第１の記憶手段に記憶し、
前記第１のコンテントハッシュを、前記書き込みの要求元に与えることを特徴とするデータ管理方法。
【請求項１２】
第１のコンテントハッシュを指定してデータの読み出しを要求された場合に、該第１のコンテントハッシュに基づいて、読み出しの対象となるデータに対応する第２のコンテントハッシュを取得し、
取得された前記第２のコンテントハッシュに基づいて、前記第１の記憶手段から、該第２のコンテントハッシュと組になっている暗号化データを取得し、
取得された前記暗号化データに、指定された前記第１のコンテントハッシュを暗号鍵として、復号化を施して、もとの暗号化前のデータを生成し、
生成された前記もとの暗号化前のデータを、前記読み出しの要求元に与えることを特徴とする請求項１１に記載のデータ管理方法。
【請求項１３】
前記第２のコンテントハッシュを取得する手段は、指定された前記第１のコンテントハッシュに基づいて、同一のデータに対応する前記第１のコンテントハッシュと前記第２のコンテントハッシュとの組を記憶する第２の記憶手段から、該第１のコンテントハッシュと組になっている第２のコンテントハッシュを取得することを特徴とする請求項１２に記載のデータ管理システム。
【請求項１４】
１又は複数のコンピュータをデータ管理システムとして機能させるためのプログラムであって、
データの書き込みを要求された場合に、書き込みの対象となる暗号化前のデータをもとに、第１のコンテントハッシュを求める機能と、
前記第１のコンテントハッシュを暗号鍵として、前記暗号化前のデータに暗号化を施して、暗号化データを生成する機能と、
前記暗号化データをもとに、第２のコンテントハッシュを求める機能と、
前記暗号化データと前記第２のコンテントハッシュとの組を記憶する第１の記憶機能と、
前記第１のコンテントハッシュを、前記書き込みの要求元に与える機能とを実現させるためのプログラム。
【請求項１５】
第１のコンテントハッシュを指定してデータの読み出しを要求された場合に、該第１のコンテントハッシュに基づいて、読み出しの対象となるデータに対応する第２のコンテントハッシュを取得する機能と、
この機能により取得された前記第２のコンテントハッシュに基づいて、前記第１の記憶機能から、該第２のコンテントハッシュと組になっている暗号化データを取得する機能と、
この機能により取得された前記暗号化データに、指定された前記第１のコンテントハッシュを暗号鍵として、復号化を施して、もとの暗号化前のデータを生成する機能と、
この機能により生成された前記もとの暗号化前のデータを、前記読み出しの要求元に与える機能とを更に実現させるための請求項１４に記載のプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、データを暗号化して保存するデータ管理システム、データ管理方法及びプログラムに関する。
【０００２】
【従来の技術】
計算機のファイルシステムでは、ファイルを格納する際に、ファイルの中身（コンテンツ）に一方向関数を適用して得た値（コンテントハッシュあるいはフィンガープリントと呼ばれる）を、そのファイルの名前（ファイル名）として使う方式がある。この方式では、同じ中身のファイルが重複して別のファイル名で格納されることがないため、ディスクの空間効率やキャッシュのヒット率が上がるという利点や、読み出した中身が本当にそのファイル名に対応するファイルの中身であるか否かを検証できる（例えば、そのファイル名すなわちコンテントハッシュと、読み出した中身から再計算して得たコンテントハッシュとが一致するか否かを調べればよい）という利点がある。
【０００３】
一方、一般的なファイルシステムでのファイルの読み書きの際に、中身を第三者に読まれないよう、対称鍵暗号（慣用暗号）を用いた暗号化を施す場合がある。書き込みを行う利用者は、ある暗号鍵を使って中身を暗号化した上でファイルシステムへの書き込みを行い、ファイルを読み出す利用者は、ファイルシステムからの読み出しを行った後、書き込みの際に使われたものと同じ暗号鍵を使って復号化を行ってもとの中身を得る。書き込みと読み出しとは同じ利用者が行う場合もあるし、暗号鍵を共有する別の利用者が行う場合もある。
【０００４】
ここで、上記方式のファイルシステムで対象鍵暗号を使った暗号化を行おうとすると、次のような問題が生じる。通常の暗号方式では、暗号化対象の中身とは無関係に乱数などを使って生成した暗号鍵で暗号化を行う。この場合、二人の利用者が独立に同じ中身を暗号化してファイルシステムに格納すると、暗号鍵が異なるため暗号化後の内容が異なり、別のファイルとしてファイルシステムに格納されてしまう。このため、上記の利点が失われる。
【０００５】
この問題を解決するには、毎回同じ暗号鍵を使うという方法もある。しかし、この方法には、一つの暗号鍵が漏洩すると、その暗号鍵を使って暗号化されたファイルの中身がすべて復号できてしまう、という問題があり、用途は限定される。
【０００６】
ところで、従来から、生体情報の暗号化の分野では、ＣＲＣ符号（コンテントハッシュの一種と考えることができる）と別途用意した一次鍵とを組み合わせた暗号鍵によってデータを暗号化するという方式がある（例えば、下記特許文献１参照）。しかし、この方式では、一次鍵が異なると、たとえ暗号化前の中身が同じでも、暗号化後は異なる内容になってしまう。そのため、暗号化前の中身が同じなら暗号化後の中身も同じになるという、コンテントハッシュをファイル名としてファイルを格納する場合に要求される性質を満たしていない。この方式でのＣＲＣの利用はあくまで毎回違う暗号鍵を生成することを目的としたものである。
【０００７】
【特許文献１】
特開２００１−００７８０２号公報
【０００８】
【発明が解決しようとする課題】
従来、コンテントハッシュをファイル名としファイルを書き込むファイルシステムにおいて、あらゆる中身に対して共通の暗号鍵を使うと、鍵漏洩の際の被害が広がるという問題があり、一方、その都度異なる暗号鍵を使うと、たとえ暗号化前の中身が同じでも、暗号化後は異なる内容になってしまう、という欠点がある。
【０００９】
本発明は、上記事情を考慮してなされたもので、あらゆるデータに対して共通の暗号鍵を使うことやその都度変化する一時的な鍵を使うことをせずに、コンテントハッシュを名前としてデータを保存するファイルシステムの利点を保つことのできるデータ管理システム、データ管理方法及びプログラムを提供することを目的とする。
【００１０】
【課題を解決するための手段】
本発明に係るデータ管理システムは、データの書き込みを要求された場合に、書き込みの対象となる暗号化前のデータをもとに、第１のコンテントハッシュを求める手段と、前記第１のコンテントハッシュを暗号鍵として、前記暗号化前のデータに暗号化を施して、暗号化データを生成する手段と、前記暗号化データをもとに、第２のコンテントハッシュを求める手段と、前記暗号化データと前記第２のコンテントハッシュとの組を記憶する第１の記憶手段と、前記第１のコンテントハッシュを、前記書き込みの要求元に与える手段とを備えたことを特徴とする。
【００１１】
好ましくは、第１のコンテントハッシュを指定してデータの読み出しを要求された場合に、該第１のコンテントハッシュに基づいて、読み出しの対象となるデータに対応する第２のコンテントハッシュを取得する手段と、この手段により取得された前記第２のコンテントハッシュに基づいて、前記第１の記憶手段から、該第２のコンテントハッシュと組になっている暗号化データを取得する手段と、この手段により取得された前記暗号化データに、指定された前記第１のコンテントハッシュを暗号鍵として、復号化を施して、もとの暗号化前のデータを生成する手段と、この手段により生成された前記もとの暗号化前のデータを、前記読み出しの要求元に与える手段とを更に備えるようにしてもよい。
【００１２】
好ましくは、同一のデータに対応する前記第１のコンテントハッシュと前記第２のコンテントハッシュとの組を記憶する第２の記憶手段を更に備え、前記第２のコンテントハッシュを取得する手段は、指定された前記第１のコンテントハッシュに基づいて、前記第２の記憶手段から、該第１のコンテントハッシュと組になっている第２のコンテントハッシュを取得するようにしてもよい。
【００１３】
また、本発明に係るデータ管理方法は、データの書き込みを要求された場合に、書き込みの対象となる暗号化前のデータをもとに、第１のコンテントハッシュを求め、前記第１のコンテントハッシュを暗号鍵として、前記暗号化前のデータに暗号化を施して、暗号化データを生成し、前記暗号化データをもとに、第２のコンテントハッシュを求め、前記暗号化データと前記第２のコンテントハッシュとの組を第１の記憶手段に記憶し、前記第１のコンテントハッシュを、前記書き込みの要求元に与えることを特徴とする。
【００１４】
好ましくは、第１のコンテントハッシュを指定してデータの読み出しを要求された場合に、該第１のコンテントハッシュに基づいて、読み出しの対象となるデータに対応する第２のコンテントハッシュを取得し、取得された前記第２のコンテントハッシュに基づいて、前記第１の記憶手段から、該第２のコンテントハッシュと組になっている暗号化データを取得し、取得された前記暗号化データに、指定された前記第１のコンテントハッシュを暗号鍵として、復号化を施して、もとの暗号化前のデータを生成し、生成された前記もとの暗号化前のデータを、前記読み出しの要求元に与えるようにしてもよい。
【００１５】
好ましくは、前記第２のコンテントハッシュを取得する手段は、指定された前記第１のコンテントハッシュに基づいて、同一のデータに対応する前記第１のコンテントハッシュと前記第２のコンテントハッシュとの組を記憶する第２の記憶手段から、該第１のコンテントハッシュと組になっている第２のコンテントハッシュを取得するようにしてもよい。
【００１６】
なお、装置に係る本発明は方法に係る発明としても成立し、方法に係る本発明は装置に係る発明としても成立する。
また、装置または方法に係る本発明は、コンピュータに当該発明に相当する手順を実行させるための（あるいはコンピュータを当該発明に相当する手段として機能させるための、あるいはコンピュータに当該発明に相当する機能を実現させるための）プログラムとしても成立し、該プログラムを記録したコンピュータ読取り可能な記録媒体としても成立する。
【００１７】
本発明では、データを書き込む際に（例えば、ファイルを書き込む際に）、暗号化前のデータ（例えば、暗号化前のファイルの中身）のコンテントハッシュ（第１のコンテントハッシュ）を暗号鍵として当該データの暗号化を行う。その上で、暗号化後のデータについてあらためてコンテントハッシュ（第２のコンテントハッシュ）を計算し、それをデータの名前（例えば、ファイル名）として当該暗号化後のデータを格納する。
データ（暗号化されたデータ）を読み出す場合は、前記第２のコンテントハッシュをデータの名前として用いて当該暗号化データを読み出し、読み出した暗号化データを前記第１のコンテントハッシュを暗号鍵として復号することによって、もとの暗号化前のデータを得ることができる。
【００１８】
本発明によれば、コンテントハッシュをデータ名としてデータを書き込む際に、暗号化前のデータが同じなら暗号化データの内容も同じになるような暗号化を行うことにより、同じ内容のデータが重複して格納されないというコンテントハッシュをデータ名として使う利点を保つことができる（例えば、複数の利用者が同じデータを暗号化すると、同じコンテントハッシュが暗号鍵となって暗号化データの内容も同じになるので、そのコンテントハッシュを取ってもやはり同じとなり、同じデータ名で格納される）。このため、重複が生じず、ディスク領域が有効に活用できる。さらに、データ名をもとにファイルのキャッシングを行った場合は、キャッシュのヒット率が上がり、ファイルの読み書きにかかる時間や通信コストが削減される。また、鍵漏洩の際に被害が広がらないよう、あらゆる中身に対して共通の暗号鍵を使うことを避けることができる。
【００１９】
また、本発明では、データの読み出しのためには、第１のコンテントハッシュと第２のコンテントハッシュの両方が必要となる。アプリケーションプログラムがこれら二つを管理するのは煩雑なので、それらの組を記憶しておくと利便性がさらに向上する。
【００２０】
また、第１及び第２のコンテントハッシュの組を、暗号化後のデータを記憶する第１の記憶手段と同じ装置上に記憶すると、第三者がその装置に侵入することによって、暗号鍵と復号化対象のデータの両方を一度に入手できてしまい、暗号化の利点が薄れてしまうことも場合によってはあり得る。この場合には、第１及び第２のコンテントハッシュの組は、例えばサーバ計算機などの侵入を防ぎやすい計算機上に記憶し、クライアント計算機などの侵入の危険が高い計算機上には置かないよいにすると好ましい。暗号化データについては、クライアント計算機にも置いて構わない。
【００２１】
【発明の実施の形態】
以下、図面を参照しながら発明の実施の形態を説明する。
【００２２】
本実施形態に係るファイルシステムは、アプリケーションプログラムから受け取ったファイルの中身を暗号化してファイルシステムに書き込み、また、ファイルの中身をファイルシステムから読み出して復号化してアプリケーションプログラムに返すものである。
【００２３】
図１に、本実施形態のファイルシステムの構成例を示す。
【００２４】
図１に示されるように、本ファイルシステムは、ファイル書き込み部１、暗号化ファイル記憶部２、ファイル読み出し部３、コンテントハッシュ組記憶部４を備えている。
【００２５】
ファイル書き込み部１およびファイル読み出し部３は、例えば、オペレーティングシステム、サーバプログラム、ライブラリなどの形で実装される。
【００２６】
ファイルシステムが動作する計算機と、アプリケーションプログラムが動作する計算機とは、同一の計算機であってもよいし、別の計算機であってもよい。また、ファイル書き込み部１、暗号化ファイル記憶部２、ファイル読み出し装置３、コンテントハッシュ組記憶部４が、２以上の計算機に分散していてもよい。
【００２７】
なお、暗号化ファイル記憶部２とコンテントハッシュ組記憶部３とは互いに別々の装置上に配置すると好ましい。この場合には、暗号化ファイル記憶部２が配置された装置とコンテントハッシュ組記憶部３が配置された装置のいずれか一方のみが侵入を受けてデータを不正に読み出されても、もとのファイルの中身を読むことはできないという利点がある。なお、該記憶部を配置する装置は計算機以外の装置であってもよい。例えば、コンテントハッシュ組記憶部３を携帯可能な（例えば、カード型あるいはスティック型等の）記憶装置に格納して、ユーザが保持・管理するようにしてもよい。
【００２８】
書き込みを行うアプリケーションプログラム５と、読み出しを行うアプリケーションプログラム６とは、同一のものであってもよいし、異なるものであってもよい。また、書き込みを行うアプリケーションプログラム５が動作する計算機と、読み出しを行うアプリケーションプログラム６が動作する計算機とは、同一のものであってもよいし、異なるものであってもよい。
【００２９】
図２に、図１のファイルシステムの暗号化ファイル記憶部２の内部構造例を示す。暗号化ファイル記憶部２には、「暗号化後の中身のコンテントハッシュ」と、「暗号化後の中身」とが、対応付けられて、記憶されている。
【００３０】
図３に、図１のファイルシステムのコンテントハッシュ組記憶部４の内部構造例を示す。コンテントハッシュ組記憶部４には、同一の「中身」について、「暗号化前の中身のコンテントハッシュ」と、「暗号化後の中身のコンテントハッシュ」とが、対応付けられて、記憶されている。
【００３１】
なお、コンテントハッシュは、ファイルの中身から、あらかじめ決められた計算方法で決定される、短い数値である。この数値は、可変長でもよいが、処理の容易さの観点では、固定長の数値の方が扱いやすい。
【００３２】
コンテントハッシュを計算する方法としては、良く知られているＭＤ−５やＳＨＡ−１などのハッシュ関数を用いることができる。これらのハッシュ関数は、データに対する電子署名などに使われており、任意のデータが与えられると、ＭＤ−５の場合は１２８ビットの数値に、ＳＨＡ−１の場合は１６０ビットの数値に、変換することができる。
【００３３】
以下、本実施形態のファイル書き込み動作を、図４の動作説明図及び図５のフローチャートを参照しながら説明する。
【００３４】
ファイル書き込み部１がアプリケーションプログラム５から書き込み対象のファイルの「暗号化前の中身」を受け取ると（ステップＳ１）、暗号化前の中身のコンテントハッシュ演算部（第１のコンテントハッシュ演算部）１１が「暗号化前の中身のコンテントハッシュ」を計算する（ステップＳ２）。
【００３５】
暗号化部１２は、その「暗号化前の中身のコンテントハッシュ」を暗号鍵として、慣用暗号を用いて、暗号化前の中身を暗号化する（「暗号化後の中身」を生成する）（ステップＳ３）。
【００３６】
こうして生成した「暗号化後の中身」から、暗号化後の中身のコンテントハッシュ演算部（第２のコンテントハッシュ演算部）１３が、「暗号化後の中身のコンテントハッシュ」を計算する（ステップＳ４）。
【００３７】
そして、「暗号化前の中身のコンテントハッシュ」と「暗号化後の中身のコンテントハッシュ」との組は、コンテントハッシュ組記憶部４に渡され、コンテントハッシュ組記憶部４内部に記憶されるとともに、「暗号化後の中身」と「暗号化後の中身のコンテントハッシュ」は、暗号化ファイル記憶部２に渡され、暗号化ファイル記憶部２内部に記憶される（ステップＳ５）。
【００３８】
一方、アプリケーションプログラム５には、後でファイルを読み出す際に当該ファイルを指定できるよう、「暗号化前の中身のコンテントハッシュ」が返される（ステップＳ５）。
【００３９】
次に、本実施形態のファイル読み出し動作を、図６の動作説明図及び図７のフローチャートを参照しながら説明する。
【００４０】
ファイル読み出し部３がアプリケーションプログラム６から書き込み対象のファイルの「暗号化前の中身のコンテントハッシュ」を受け取ると（ステップＳ１１）、「暗号化前の中身のコンテントハッシュ」はコンテントハッシュ組記憶部４に渡され、その「暗号化前の中身のコンテントハッシュ」に対応する「暗号化後の中身のコンテントハッシュ」がファイル読み出し部３に返される（ステップＳ１２）。
【００４１】
こうして得た「暗号化後の中身のコンテントハッシュ」は、暗号化ファイル記憶部２に渡され、その「暗号化後の中身のコンテントハッシュ」に対応する「暗号化後の中身」がファイル読み出し部２に返される（ステップＳ１３）。
【００４２】
この「暗号化後の中身」は、「暗号化前の中身のコンテントハッシュ」を暗号鍵として、復号化部３１で復号化される（ステップＳ１４）。
【００４３】
そして、復号化によって得られた「暗号化前の中身」がアプリケーションプログラム６に返される（ステップＳ１５）。
【００４４】
本実施形態によれば、複数の利用者が同じ中身を暗号化すると、同じコンテントハッシュが暗号鍵となって暗号化後の中身も同じになるので、そのコンテントハッシュを取ってもやはり同じとなり、同じファイル名でファイルシステムに格納される。このため、重複が生じず、ディスク領域が有効に活用できる。さらに、ファイル名をもとにファイルのキャッシングを行った場合は、キャッシュのヒット率が上がり、ファイルの読み書きにかかる時間や通信コストが削減される。
【００４５】
以下では、これまで説明してきたようなファイルシステムを、ｗｅｂサーバをはじめとするクライアント・サーバ方式で、中継（ｐｒｏｘｙ）サーバをクライアント側・サーバ側それぞれに配置する二重中継サーバシステムに適用した場合の構成例について説明する。
【００４６】
図８に、この場合のファイルシステムの構成例を示す。
【００４７】
図８では、サーバ側ネットワーク上に、オリジンサーバ１０４とサーバ側中継サーバ１０３とファイル書き込み部１と暗号化ファイル記憶部２とコンテントハッシュ組記憶部４が存在し、クライアント側ネットワーク上に、クライアントアプリケーション１０１とクライアント側中継サーバ１０２とファイル読み出し部３が存在する。
【００４８】
なお、図８では、ファイル読み出し部３は、図６のファイル読み出し部の内部構造に加えて、（図８ではサーバ側に存在する）暗号化ファイル記憶部１から読み出した「暗号化後の中身のコンテントハッシュ」とそれに対応する「暗号化後の中身」とをキャッシュするキャッシュ記憶部３２を持っている。
【００４９】
サーバ側ネットワークとクライアント側ネットワークとは、例えばインターネットなどのネットワーク（図示せず）を介して通信可能である。
【００５０】
サーバ側ネットワークにおいて、オリジンサーバ１０４とサーバ側中継サーバ１０３とファイル書き込み部１と暗号化ファイル記憶部２とコンテントハッシュ組記憶部４の全てが、同一の計算機上に配置されてもよいし、複数の計算機に分散配置されてもよい。同様に、クライアント側ネットワークにおいて、クライアントアプリケーション１０１とクライアント側中継サーバ１０２とファイル読み出し部３の全てが同一の計算機上に配置されてもよいし、複数の計算機に分散配置されてもよい。
【００５１】
続いて、図８の場合のファイル書き込み・読み出しを、図８並びに図９の読み出し要求から書き込みまでに関するフローチャート及び図１０のファイル読み出しから読み出し応答までに関するフローチャートを参照しながら説明する。
【００５２】
クライアント側中継サーバ１０２は、クライアントアプリケーション１０１からＵＲＬを付加したデータ読み出し要求を受け取ると（ステップＳ２１）、その要求をサーバ側中継サーバ１０３に転送する（ステップＳ２２）。
【００５３】
サーバ側中継サーバ１０３は、ＵＲＬに応じてオリジンサーバ１０４に接続し、ＵＲＬを送ってファイルの中身を得る（ステップＳ２３）。
【００５４】
受け取った「中身」は、ファイル書き込み部１に渡され、前述と同様の手順で暗号化やコンテントハッシュ組記憶部４及び暗号化ファイル記憶部２への書き込みが行われる（ステップＳ２４）。
【００５５】
クライアント側中継サーバ１０２には、「暗号化前の中身のコンテントハッシュ」が渡される（ステップＳ３１）。
【００５６】
クライアント側中継サーバ１０２は、ファイル読み出し部３に「暗号前の中身のコンテントハッシュ」を渡す（ステップＳ３１）。
【００５７】
ファイル読み出し部３は、前述したファイル読み出し動作と同様に、サーバ側ネットワーク上にある暗号化ファイル記憶部２及びコンテントハッシュ組記憶部４に対して読み出しを行った後に、復号化（ステップＳ３７）を行う。
【００５８】
ただし、ここでは、ファイル読み出し部３内には、キャッシュ記憶部３２があり、暗号化ファイル記憶部２への要求を行う前に、まず、このキャッシュ記憶部３２が検索され（ステップＳ３２）、「暗号化後の中身」が見つかれば（ステップＳ３３）、それを利用する（ステップＳ３４）。
【００５９】
他方、「暗号化後の中身」が見つからなければ（ステップＳ３３）、暗号化ファイル記憶部２へ「暗号化後の中身のコンテントハッシュ」を送り（ステップＳ３４）、対応する「暗号化後の中身」を受け取り（ステップＳ３５）、自身のキャッシュ記憶部３２へ書き込んだ上で（ステップＳ３６）、その「暗号化された中身」を利用する（ステップＳ３７）。
【００６０】
こうして復号化されたファイルの「中身」は、クライアント側中継サーバ１０２に渡され（ステップＳ３８）、さらにクライアントアプリケーション１０１に渡される（ステップＳ３９）。
【００６１】
このような構成例においては、クライアント側ネットワーク上には「暗号化後の中身」と「暗号化後の中身のコンテントハッシュ」しか記憶されず、暗号鍵として利用できる「暗号化前の中身のコンテントハッシュ」は、サーバ側ネットワークにしか記憶されない。このため、クライアント側ネットワーク上の計算機のディスクの盗み見を行っても、サーバ側ネットワーク上の計算機のディスクを盗み見できないかぎり、もとのファイルの中身を読むことはできない。一般に、サーバ側ネットワーク上の計算機は、クライアント側ネットワーク上の計算機と比べて管理を徹底しやすいため、この方式は不正な読み出しを防ぐのに有効である。
【００６２】
ところで、この方式をさらに効率化するには、サーバ側中継サーバ１０３がクライアント側中継サーバ１０２からＵＲＬを受け取って「暗号化前の中身のコンテントハッシュ」を返す際に、「暗号化前の中身のコンテントハッシュ」に加えて「暗号化後の中身のコンテントハッシュ」をも返すようにするようにしてもよい。このようにすることで、やりとりを一回減らすこともできる。
【００６３】
なお、以上の各機能は、ソフトウェアとして実現可能である。
また、本実施形態は、コンピュータに所定の手段を実行させるための（あるいはコンピュータを所定の手段として機能させるための、あるいはコンピュータに所定の機能を実現させるための）プログラムとして実施することもでき、該プログラムを記録したコンピュータ読取り可能な記録媒体として実施することもできる。
【００６４】
なお、この発明の実施の形態で例示した構成は一例であって、それ以外の構成を排除する趣旨のものではなく、例示した構成の一部を他のもので置き換えたり、例示した構成の一部を省いたり、例示した構成に別の機能あるいは要素を付加したり、それらを組み合わせたりすることなどによって得られる別の構成も可能である。また、例示した構成と論理的に等価な別の構成、例示した構成と論理的に等価な部分を含む別の構成、例示した構成の要部と論理的に等価な別の構成なども可能である。また、例示した構成と同一もしくは類似の目的を達成する別の構成、例示した構成と同一もしくは類似の効果を奏する別の構成なども可能である。
また、この発明の実施の形態で例示した各種構成部分についての各種バリエーションは、適宜組み合わせて実施することが可能である。
また、この発明の実施の形態は、個別装置としての発明、関連を持つ２以上の装置についての発明、システム全体としての発明、個別装置内部の構成部分についての発明、またはそれらに対応する方法の発明等、種々の観点、段階、概念またはカテゴリに係る発明を包含・内在するものである。
従って、この発明の実施の形態に開示した内容からは、例示した構成に限定されることなく発明を抽出することができるものである。
【００６５】
本発明は、上述した実施の形態に限定されるものではなく、その技術的範囲において種々変形して実施することができる。
【００６６】
【発明の効果】
本発明によれば、あらゆるデータに対して共通の暗号鍵を使うことやその都度変化する一時的な鍵を使うことをせずに、コンテントハッシュを名前としてデータを保存するファイルシステムの利点を保つことができるようになる。
【図面の簡単な説明】
【図１】本発明の一実施形態に係るファイルシステムの構成例を示す図
【図２】同実施形態に係るファイルシステムの暗号化ファイル記憶部の内部構造例を示す図
【図３】同実施形態に係るコンテントハッシュ組記憶部の内部構造例を示す図
【図４】同実施形態におけるファイル書き込み動作を説明するための図
【図５】同実施形態におけるファイル書き込み手順の一例を示すフローチャート
【図６】同実施形態におけるファイル読み出し動作を説明するための図
【図７】同実施形態におけるファイル読み出し手順の一例を示すフローチャート
【図８】同実施形態に係るファイルシステムの他の構成例を示す図
【図９】図８の場合の読み出し要求から書き込みまでに関する処理手順の一例を示すフローチャート
【図１０】図８の場合のファイル読み出しから読み出し応答までに関する処理手順の一例を示すフローチャート
【符号の説明】
１…ファイル書き込み部
２…暗号化ファイル記憶部
３…ファイル読み出し装置
４…コンテントハッシュ組記憶部
５…アプリケーションプログラム
６…アプリケーションプログラム
１１…第１のコンテントハッシュ演算部
１２…暗号化部
１３…第２のコンテントハッシュ演算部
３１…復号化部
３２…キャッシュ記憶部
１０１…クライアントアプリケーション
１０２…クライアント側中継サーバ
１０３…サーバ側中継サーバ
１０４…オリジンサーバ
【図１】
2004126639.tif 000003
【図２】
2004126639.tif 000004
【図３】
2004126639.tif 000005
【図４】
2004126639.tif 000006
【図５】
2004126639.tif 000007
【図６】
2004126639.tif 000008
【図７】
2004126639.tif 000009
【図８】
2004126639.tif 000010
【図９】
2004126639.tif 000011
【図１０】
2004126639.tif 000012