(57)【要約】【課題】第三者にデータアクセスの様子を観察されてもどのデータをクライアント間で共有しているのかを特定できないデータ共有システム、データ共有方法およびプログラムを提供する。【解決手段】仮想保存領域に記憶素子に格納された書き込み共有データを書き込む際に、生成されたアドレスのデータをアクセス領域に読み出し、読み出したデータを書き込み共有データで上書きし、これを別のデータに変換して、生成されたアドレスに書き込む処理を行い、仮想保存領域内に登録された書き込み共有データを読み出す際に、順次、生成されたアドレスのデータをアクセス領域に読み出し、逆変換を行ない、このデータが所望の書き込み共有データであるか否かの確認を検出するまで行なって、所望の書き込み共有データを取得し、少なくとも所望の書き込み共有データに対応する読み込み共有データを別のデータに変換して、このデータを生成されたアドレスに書き込む処理を行う。【選択図】図１０
2015153288.tif 000002
【特許請求の範囲】
【請求項１】
データを格納する仮想保存領域を有するパブリッククラウドと、複数のクライアント端末とからなるデータ共有システムであって、
前記複数のクライアント端末が、
秘密鍵と初期ベクトルとを共有し、
書き込み共有データおよび読み込み共有データを含むデータを一時的に格納するアクセス領域を有した記憶素子と、
前記共有する秘密鍵と初期ベクトルとから鍵系列を構成するビット列を生成し、該生成したビット列を所定のビット単位で分割して、前記書き込み共有データおよび読み込み共有データに対するアドレスを生成するアドレス生成手段と、
前記書き込み共有データおよび読み込み共有データを別のデータに変換するデータ変換手段と、
前記書き込み共有データの書き込み処理および前記読み込み共有データの読み込み処理を制御する制御手段と、
を備え、
前記制御手段が、
前記仮想保存領域に前記記憶素子に格納された書き込み共有データを書き込む際に、前記アドレス生成手段により生成された前記仮想保存領域のアドレスのデータを前記アクセス領域に読み出し、該読み出したデータを前記書き込み共有データで上書きし、該上書きしたデータを前記データ変換手段により別のデータに変換して、該変換したデータを前記アドレス生成手段により生成された前記仮想保存領域のアドレスに書き込む処理を行い、
前記仮想保存領域内に書き込まれた書き込み共有データを読み出す際に、順次、前記アドレス生成手段により生成された前記仮想保存領域のアドレスのデータを前記アクセス領域に読み出し、前記データ変換手段の処理とは逆の処理を行ない、該逆の処理を行なったデータが所望の書き込み共有データであるか否かの確認を前記所望の書き込み共有データを検出するまで行なって、前記所望の書き込み共有データを取得し、少なくとも前記所望の書き込み共有データに対応する前記読み込み共有データを前記データ変換手段により別のデータに変換して、該変換されたデータをアドレス生成手段により生成された前記仮想保存領域のアドレスに書き込む処理を行うことを特徴とするデータ共有システム。
【請求項２】
前記複数のクライアント端末が、乱数を生成する乱数生成手段と、排他的論理和演算を行う排他的論理和演算手段とを備え、
前記データ変換手段は、
前記仮想保存領域に前記記憶素子に格納された書き込み共有データを書き込む際には、前記上書きしたデータを前記排他的論理和演算手段が演算する前記上書きしたデータと前記乱数生成手段が生成した乱数との排他的論理和演算値に変換し、
前記仮想保存領域内の書き込み共有データを読み出す際には、前記取得した所望の書き込み共有データを前記排他的論理和演算手段が演算する前記取得した所望の書き込み共有データと前記乱数生成手段が生成した乱数との排他的論理和演算値に変換し、
前記制御手段は、前記変換したデータである前記排他的論理和演算値に加えて、前記排他的論理和演算に用いた乱数を前記複数のクライアント端末のクライアントにのみ前記排他的論理和演算値との関連がわかるように、前記仮想保存領域に書き込むことを特徴とする請求項１に記載のデータ共有システム。
【請求項３】
前記アクセス領域に格納される書き込み共有データおよび読み込み共有データが、難読化処理されていることを特徴とする請求項１または請求項２に記載のデータ共有システム。
【請求項４】
データを格納する仮想保存領域を有するパブリッククラウドと、複数のクライアント端末とからなるデータ共有システムにおけるデータ共有方法であって、
前記複数のクライアント端末が、秘密鍵と初期ベクトルとを共有し、書き込み共有データおよび読み込み共有データを含むデータを一時的に格納するアクセス領域を有した記憶素子と、アドレス生成手段と、データ変換手段と、データ逆変換手段と、制御手段とを備え、
前記仮想保存領域に前記記憶素子に格納された書き込み共有データを書き込む際に、
前記アドレス生成手段が、前記共有する秘密鍵と初期ベクトルとから鍵系列を構成するビット列を生成し、該生成したビット列を所定のビット単位で分割して、前記書き込み共有データのアドレスを生成する第１のステップと、
前記制御手段が、前記第１のステップにより生成された前記仮想保存領域のアドレスのデータを前記アクセス領域に読み出す第２のステップと、
前記制御手段が、前記読み出したデータを前記書き込み共有データで上書きする第３のステップと、
前記データ変換手段が、前記上書きしたデータを別のデータに変換する第４のステップと、
前記制御手段が、前記変換したデータを前記第１のステップにおいて生成された前記仮想保存領域のアドレスに書き込む処理を行う第５のステップと、
前記仮想保存領域内に書き込まれた書き込み共有データを読み出す際に、
前記アドレス生成手段が、前記共有する秘密鍵と初期ベクトルとから鍵系列を構成するビット列を生成し、該生成したビット列を所定のビット単位で分割して、前記読み込み共有データのアドレスを生成する第６のステップと、
前記制御手段が、前記第６のステップにより生成された前記仮想保存領域のアドレスのデータを前記アクセス領域に読み出す第７のステップと、
前記データ逆変換手段が、前記第７のステップにおいて読み出したデータに対して、前記データ変換手段の処理とは、逆の処理を行ない、データを復元する第８のステップと、
前記制御手段が、前記復元したデータが所望の書き込み共有データであるか否かを確認する第９のステップと、
前記制御手段が、前記所望の書き込み共有データを検出するまで前記第６のステップから第９のステップの処理を繰り返す第１０のステップと、
前記制御手段が、前記所望の書き込み共有データを前記読み込み共有データとして取得し、前記記憶素子に格納する第１１のステップと、
前記データ変換手段が、少なくとも前記所望の書き込み共有データに対応する前記読み込み共有データを別のデータに変換する第１２のステップと、
前記制御手段が、前記変換されたデータを前記第６のステップで生成された前記仮想保存領域のアドレスに書き込む処理を行う第１３のステップと、
を備えたことを特徴とするデータ共有方法。
【請求項５】
データを格納する仮想保存領域を有するパブリッククラウドと、複数のクライアント端末とからなるデータ共有システムにおけるデータ共有方法をコンピュータに実行させるためのプログラムであって、前記複数のクライアント端末が、秘密鍵と初期ベクトルとを共有し、書き込み共有データおよび読み込み共有データを含むデータを一時的に格納するアクセス領域を有した記憶素子と、アドレス生成手段と、データ変換手段と、データ逆変換手段と、制御手段とを備え、
前記仮想保存領域に前記記憶素子に格納された書き込み共有データを書き込む際に、
前記アドレス生成手段が、前記共有する秘密鍵と初期ベクトルとから鍵系列を構成するビット列を生成し、該生成したビット列を所定のビット単位で分割して、前記書き込み共有データのアドレスを生成する第１のステップと、
前記制御手段が、前記第１のステップにより生成された前記仮想保存領域のアドレスのデータを前記アクセス領域に読み出す第２のステップと、
前記制御手段が、前記読み出したデータを前記書き込み共有データで上書きする第３のステップと、
前記データ変換手段が、前記上書きしたデータを別のデータに変換する第４のステップと、
前記制御手段が、前記変換したデータを前記第１のステップにおいて生成された前記仮想保存領域のアドレスに書き込む処理を行う第５のステップと、
前記仮想保存領域内に書き込まれた書き込み共有データを読み出す際に、
前記アドレス生成手段が、前記共有する秘密鍵と初期ベクトルとから鍵系列を構成するビット列を生成し、該生成したビット列を所定のビット単位で分割して、前記読み込み共有データのアドレスを生成する第６のステップと、
前記制御手段が、前記第６のステップにより生成された前記仮想保存領域のアドレスのデータを前記アクセス領域に読み出す第７のステップと、
前記データ逆変換手段が、前記第７のステップにおいて読み出したデータに対して、前記データ変換手段の処理とは、逆の処理を行ない、データを復元する第８のステップと、
前記制御手段が、前記復元したデータが所望の書き込み共有データであるか否かを確認する第９のステップと、
前記制御手段が、前記所望の書き込み共有データを検出するまで前記第６のステップから第９のステップの処理を繰り返す第１０のステップと、
前記制御手段が、前記所望の書き込み共有データを前記読み込み共有データとして取得し、前記記憶素子に格納する第１１のステップと、
前記データ変換手段が、少なくとも前記所望の書き込み共有データに対応する前記読み込み共有データを別のデータに変換する第１２のステップと、
前記制御手段が、前記変換されたデータを前記第６のステップで生成された前記仮想保存領域のアドレスに書き込む処理を行う第１３のステップと、
をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パブリッククラウドを利用して２以上のクライアントがデータを共有するデータ共有システム、データ共有方法およびプログラムに関する。
【背景技術】
【０００２】
従来、あるデータを共有化する場合、例えば、まずグループ内で共有したいデータ（MG）を、暗号鍵（KM）を用いて共通鍵暗号方式で暗号化（EKM(MG)）する。そして、当該グループの全メンバ（U1,...,UN）が所有する公開鍵（pk1,...,pkN）でKMを暗号化（Epk1(KM), ..., EpkN(KM)）し、それをリスト化して、EKM(MG)と共にサーバ等に保存する。ここで、データを参照するグループメンバ（Ui）は、リスト内から自身の公開鍵（pki）で暗号化されたEpki(KM)とEKM(MG)を取得し、暗号化されたKMを自身の秘密鍵（ski）を用いて復号することにより、KMを得る。そして、KMでEKM(MG)を復号し、元データMGを得るという処理がなされていた（例えば、特許文献１参照。）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００５−２２３９５３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献１に記載の技術では、共有データを公開する際に、グループメンバの人数（Ｎ）分、すなわちN回公開鍵暗号処理を行う必要があり、データ公開者の処理負荷が大きくなる。又、グループメンバの所有する端末装置が盗難にあうなどして、悪意の第三者に使用された場合、共有データの暗号化に使用している秘密鍵が該端末装置から漏洩してしまう可能性がある。この場合、秘密鍵を更新することで漏えい被害を抑えることができるが、共有データ公開時と同様、N回公開鍵暗号処理を行うことになり処理負荷が大きい。
【０００５】
また、より重要な問題として、クライアントのデータアクセスの様子を観察することによって、データが特定される可能性が高いという問題があった。この問題は、パブリッククラウドを利用したデータ共有において、深刻な問題となる。
【０００６】
そこで、本発明は、上述の課題に鑑みてなされたものであり、第三者にデータアクセスの様子を観察されても、どのデータをクライアント間で共有しているのかを特定できないデータ共有システム、データ共有方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明は、上記の課題を解決するために、以下の事項を提案している。
【０００８】
（１）本発明は、データを格納する仮想保存領域を有するパブリッククラウドと、複数のクライアント端末とからなるデータ共有システムであって、前記複数のクライアント端末が、秘密鍵と初期ベクトルとを共有し、書き込み共有データおよび読み込み共有データを含むデータを一時的に格納するアクセス領域を有した記憶素子と、前記共有する秘密鍵と初期ベクトルとから鍵系列を構成するビット列を生成し、該生成したビット列を所定のビット単位で分割して、前記書き込み共有データおよび読み込み共有データに対するアドレスを生成するアドレス生成手段と、前記書き込み共有データおよび読み込み共有データを別のデータに変換するデータ変換手段と、前記書き込み共有データの書き込み処理および前記読み込み共有データの読み込み処理を制御する制御手段と、を備え、前記制御手段が、前記仮想保存領域に前記記憶素子に格納された書き込み共有データを書き込む際に、前記アドレス生成手段により生成された前記仮想保存領域のアドレスのデータを前記アクセス領域に読み出し、該読み出したデータを前記書き込み共有データで上書きし、該上書きしたデータを前記データ変換手段により別のデータに変換して、該変換したデータを前記アドレス生成手段により生成された前記仮想保存領域のアドレスに書き込む処理を行い、前記仮想保存領域内に書き込まれた書き込み共有データを読み出す際に、順次、前記アドレス生成手段により生成された前記仮想保存領域のアドレスのデータを前記アクセス領域に読み出し、前記データ変換手段の処理とは逆の処理を行ない、該逆の処理を行なったデータが所望の書き込み共有データであるか否かの確認を前記所望の書き込み共有データを検出するまで行なって、前記所望の書き込み共有データを取得し、少なくとも前記所望の書き込み共有データに対応する前記読み込み共有データを前記データ変換手段により別のデータに変換して、該変換されたデータをアドレス生成手段により生成された前記仮想保存領域のアドレスに書き込む処理を行うことを特徴とするデータ共有システムを提案している。
【０００９】
（２）本発明は、（１）のデータ共有システムについて、前記複数のクライアント端末が、乱数を生成する乱数生成手段と、排他的論理和演算を行う排他的論理和演算手段とを備え、前記データ変換手段は、前記仮想保存領域に前記記憶素子に格納された書き込み共有データを書き込む際には、前記上書きしたデータを前記排他的論理和演算手段が演算する前記上書きしたデータと前記乱数生成手段が生成した乱数との排他的論理和演算値に変換し、前記仮想保存領域内の書き込み共有データを読み出す際には、前記取得した所望の書き込み共有データを前記排他的論理和演算手段が演算する前記取得した所望の書き込み共有データと前記乱数生成手段が生成した乱数との排他的論理和演算値に変換し、前記制御手段は、前記変換したデータである前記排他的論理和演算値に加えて、前記排他的論理和演算に用いた乱数を前記複数のクライアント端末のクライアントにのみ前記排他的論理和演算値との関連がわかるように、前記仮想保存領域に書き込むことを特徴とするデータ共有システムを提案している。
【００１０】
（３）本発明は、（１）または（２）のデータ共有システムについて、前記アクセス領域に格納される書き込み共有データおよび読み込み共有データが、難読化処理されていることを特徴とするデータ共有システムを提案している。
【００１１】
（４）本発明は、データを格納する仮想保存領域を有するパブリッククラウドと、複数のクライアント端末とからなるデータ共有システムにおけるデータ共有方法であって、
前記複数のクライアント端末が、秘密鍵と初期ベクトルとを共有し、書き込み共有データおよび読み込み共有データを含むデータを一時的に格納するアクセス領域を有した記憶素子と、アドレス生成手段と、データ変換手段と、データ逆変換手段と、制御手段とを備え、前記仮想保存領域に前記記憶素子に格納された書き込み共有データを書き込み登録する際に、前記アドレス生成手段が、前記共有する秘密鍵と初期ベクトルとから鍵系列を構成するビット列を生成し、該生成したビット列を所定のビット単位で分割して、前記書き込み共有データのアドレスを生成する第１のステップと、前記制御手段が、前記第１のステップにより生成された前記仮想保存領域のアドレスのデータを前記アクセス領域に読み出す第２のステップと、前記制御手段が、前記読み出したデータを前記書き込み共有データで上書きする第３のステップと、前記データ変換手段が、前記上書きしたデータを別のデータに変換する第４のステップと、前記制御手段が、前記変換したデータを前記第１のステップにおいて生成された前記仮想保存領域のアドレスに書き込む処理を行う第５のステップと、前記仮想保存領域内に書き込まれた書き込み共有データを読み出す際に、前記アドレス生成手段が、前記共有する秘密鍵と初期ベクトルとから鍵系列を構成するビット列を生成し、該生成したビット列を所定のビット単位で分割して、前記読み込み共有データのアドレスを生成する第６のステップと、前記制御手段が、前記第６のステップにより生成された前記仮想保存領域のアドレスのデータを前記アクセス領域に読み出す第７のステップと、前記データ逆変換手段が、前記第７のステップにおいて読み出したデータに対して、前記データ変換手段の処理とは、逆の処理を行ない、データを復元する第８のステップと、前記制御手段が、前記復元したデータが所望の書き込み共有データであるか否かを確認する第９のステップと、前記制御手段が、前記所望の書き込み共有データを検出するまで前記第６のステップから第９のステップの処理を繰り返す第１０のステップと、前記制御手段が、前記所望の書き込み共有データを前記読み込み共有データとして取得し、前記記憶素子に格納する第１１のステップと、前記データ変換手段が、少なくとも前記所望の書き込み共有データに対応する前記読み込み共有データを別のデータに変換する第１２のステップと、前記制御手段が、前記変換されたデータを前記第６のステップで生成された前記仮想保存領域のアドレスに書き込む処理を行う第１３のステップと、を備えたことを特徴とするデータ共有方法を提案している。
【００１２】
（５）本発明は、データを格納する仮想保存領域を有するパブリッククラウドと、複数のクライアント端末とからなるデータ共有システムにおけるデータ共有方法をコンピュータに実行させるためのプログラムであって、前記複数のクライアント端末が、秘密鍵と初期ベクトルとを共有し、書き込み共有データおよび読み込み共有データを含むデータを一時的に格納するアクセス領域を有した記憶素子と、アドレス生成手段と、データ変換手段と、データ逆変換手段と、制御手段とを備え、前記仮想保存領域に前記記憶素子に格納された書き込み共有データを書き込み登録する際に、前記アドレス生成手段が、前記共有する秘密鍵と初期ベクトルとから鍵系列を構成するビット列を生成し、該生成したビット列を所定のビット単位で分割して、前記書き込み共有データのアドレスを生成する第１のステップと、前記制御手段が、前記第１のステップにより生成された前記仮想保存領域のアドレスのデータを前記アクセス領域に読み出す第２のステップと、前記制御手段が、前記読み出したデータを前記書き込み共有データで上書きする第３のステップと、前記データ変換手段が、前記上書きしたデータを別のデータに変換する第４のステップと、前記制御手段が、前記変換したデータを前記第１のステップにおいて生成された前記仮想保存領域のアドレスに書き込む処理を行う第５のステップと、前記仮想保存領域内に書き込まれた書き込み共有データを読み出す際に、前記アドレス生成手段が、前記共有する秘密鍵と初期ベクトルとから鍵系列を構成するビット列を生成し、該生成したビット列を所定のビット単位で分割して、前記読み込み共有データのアドレスを生成する第６のステップと、前記制御手段が、前記第６のステップにより生成された前記仮想保存領域のアドレスのデータを前記アクセス領域に読み出す第７のステップと、前記データ逆変換手段が、前記第７のステップにおいて読み出したデータに対して、前記データ変換手段の処理とは、逆の処理を行ない、データを復元する第８のステップと、前記制御手段が、前記復元したデータが所望の書き込み共有データであるか否かを確認する第９のステップと、前記制御手段が、前記所望の書き込み共有データを検出するまで前記第６のステップから第９のステップの処理を繰り返す第１０のステップと、前記制御手段が、前記所望の書き込み共有データを前記読み込み共有データとして取得し、前記記憶素子に格納する第１１のステップと、前記データ変換手段が、少なくとも前記所望の書き込み共有データに対応する前記読み込み共有データを別のデータに変換する第１２のステップと、前記制御手段が、前記変換されたデータを前記第６のステップで生成された前記仮想保存領域のアドレスに書き込む処理を行う第１３のステップと、をコンピュータに実行させるためのプログラムを提案している。
【発明の効果】
【００１３】
本発明によれば、パブリッククラウドにおいても安全にデータの共有を行なうことができるという効果がある。
【図面の簡単な説明】
【００１４】
【図１】本発明の実施形態に係るデータ共有システムの構成を示す図である。
【図２】本発明の実施形態に係るクライアント端末におけるデータ書き込み時の機能ブロック図である。
【図３】本発明の実施形態に係るクライアント端末におけるデータ読み込み時の機能ブロック図である。
【図４】本発明の実施形態に係るアドレス生成部の構成を示す図である。
【図５】本発明の実施形態に係る鍵系列とアドレスの関係を示した図である。
【図６】本発明の実施形態に係るデータ書き込み時のデータ遷移の概念を示す図である。
【図７】本発明の実施形態に係るデータ書き込み時のデータ変換方式を示す図である。
【図８】本発明の実施形態に係るデータ書き込み時のデータ変換方式を示す図である。
【図９】本発明の実施形態に係るデータ書き込み時のデータ変換方式を示す図である。
【図１０】本発明の実施形態に係るデータ書き込み時の処理を示す図である。
【図１１】本発明の実施形態に係るアドレス生成部の構成を示す図である。
【図１２】本発明の実施形態に係る鍵系列とアドレスの関係を示した図である。
【図１３】本発明の実施形態に係るデータ読み込み時のデータ遷移の概念を示す図である。
【図１４】本発明の実施形態に係るデータ読み込み時のデータ変換方式を示す図である。
【図１５】本発明の実施形態に係るデータ読み込み時のデータ変換方式を示す図である。
【図１６】本発明の実施形態に係るデータ読み込み時のデータ変換方式を示す図である。
【図１７】本発明の実施形態に係るデータ読み込み時の処理を示す図である。
【発明を実施するための形態】
【００１５】
以下、本発明の実施形態について、図面を用いて、詳細に説明する。
なお、本実施形態における構成要素は適宜、既存の構成要素等との置き換えが可能であり、また、他の既存の構成要素との組合せを含む様々なバリエーションが可能である。したがって、本実施形態の記載をもって、特許請求の範囲に記載された発明の内容を限定するものではない。
【００１６】
＜データ共有システムの構成＞
図１を用いて、本発明の実施形態に係るデータ共有システムの構成について説明する。
【００１７】
本実施形態に係るデータ共有システムは、図１に示すように、パブリッククラウド１００と、クライアント端末Ａ２００Ａと、クライアント端末Ｂ２００Ｂとから構成されている。
【００１８】
パブリッククラウド１００は、複数のクラウドサーバを備え、クラウド上に仮想のデータ保存領域を構築し、ダミーデータを含む巨大なデータを格納している。例えば、クライアント端末Ａ２００Ａが、書き込み共有データをパブリッククラウド１００内の仮想保存領域に書き込み、クライアント端末Ｂ２００Ｂが、クライアント端末Ａ２００Ａによってパブリッククラウド１００内の仮想保存領域に書き込こまれた書き込み共有データをパブリッククラウド１００内の仮想保存領域から読み出して取得する。これにより、クライアント端末Ａ２００Ａとクライアント端末Ｂ２００Ｂとの間で、データ共有が行なわれる。
【００１９】
＜クライアント端末のデータ書き込み時の機能ブロック構成＞
本実施形態に係るクライアント端末２００Ａ、２００Ｂのデータ書き込み時の機能ブロックは、図２に示すように、記憶素子２１０と、アドレス生成部２２０と、制御部２３０と、データ変換部２４０と、乱数生成部２５０とから構成されている。
【００２０】
記憶素子２１０は、書き込み共有データおよび読み込み共有データを含むデータを一時的に格納するアクセス領域を有した素子であり、例えば、ＯＲＡＭ（Ｏｂｌｉｖｉｏｕｓ  ＲＡＭ）等がこれに該当する。クライアント端末上のプログラムは、安全な領域内に確保された記憶素子２１０のアクセス領域のみアクセス（書き込み、読み込み処理）する。そして、クライアント端末上のプログラムがアクセス（書き込み、読み込み処理）を行うたびに、後述する制御部２３０が、記憶素子２１０のアクセス領域とパブリッククラウド１００内の仮想保存領域との間でデータの交換を行い、必要なデータを記憶素子２１０のアクセス領域へと移動させる。なお、例えば、図１のクライアント端末Ａ２００Ａとクライアント端末Ｂ２００Ｂとは、秘密鍵と初期ベクトルとを共有するが、その保存先として、他の記憶素子を設けてもよい。
【００２１】
アドレス生成部２２０は、パブリッククラウド１００内の仮想保存領域において、書き込み共有データのアドレスを生成する。具体的には、アドレス生成部２２０は、図４に示すように、初期化処理部２２１と非線形関数器２２２とアドレス出力部２２３とから構成されている。この初期化処理部２２１は、他のクライアント端末と共有している秘密鍵および初期ベクトルを入力すると、初期化処理を実行する。そして、初期化処理後の内部状態を非線形関数器２２２に入力すると、図５に示すような鍵系列を構成するビット列が生成される。このビット列を所定のビット単位、例えば、２ビット単位に分割して、これをアドレスとして、書き込み共有データに割り当てる。後述する制御部２３０は、例えば、図５に示すアドレスを左から順に使用して書き込み共有データの書き込み処理を行なう。上記のようにアドレスを生成することにより、ランダムにアドレスを発生することができる。
【００２２】
制御部２３０は、図２に示すように、データ読み出し部２３１と、上書き部２３２と、データ書き込み部２３３とから構成されている。制御部２３０は、パブリッククラウド１００内の仮想保存領域に、記憶素子２１０に一時格納された書き込み共有データを書き込む際に、データ読み出し部２３１により、アドレス生成部２２０によって生成されたアドレスに対応するデータを記憶素子２１０のアクセス領域に読み出す。次に、上書き部２３２により、読み出したデータを書き込み共有データで上書きして、上書きしたデータを後述するデータ変換部２４０により別のデータに変換して、その変換されたデータをデータ読み出し部２３１により読み出されたパブリッククラウド１００内の仮想保存領域のアドレスに書き込む。
【００２３】
データ変換部２４０は、書き込み共有データを別のデータに変換する処理を実行する。乱数生成部２５０は、データ変換部２４０において、変換処理に用いられる乱数を生成する。なお、データ変換の具体的事例に関しては、後述する。
【００２４】
＜データ書き込み時のデータの遷移＞
記憶素子におけるデータ書き込み時のデータ遷移について、図６を用いて、説明する。
【００２５】
図６は、記憶素子２１０内のアクセス領域とパブリッククラウド１００内の仮想保存領域との間におけるデータ書き込み時のデータ遷移を示している。今、パブリッククラウド１００内の仮想保存領域において、データｘが保存されているアドレスに書き込み共有データｘ‘を書き込む場合を考える。まず、書き込みを行うアドレスに保存されているデータｘを記憶素子２１０内のアクセス領域に読み出す（図６の上の図）。次に、読み出したデータｘを書き込み共有データｘ‘で上書きする。そして、書き込み共有データｘ‘をｅ（ｘ‘）に変形して、元の読み出しアドレスに書き込む。これにより、読み出したデータを別のデータに変換して書き戻すため、どのデータに対して、読み出し、書き込みを行ったかを秘匿することができる。また、実際に、書き込むアドレスのデータ以外に、ランダムにアドレスを発生させて、その発生させた複数のアドレスのデータについても同様の処理を行なうことにより、さらに、秘匿性を高めることができる。
【００２６】
＜データ書き込み時のデータ変換方式＞
図７から図９を用いて、データ書き込み時のデータ変換方式について説明する。
【００２７】
図７の方式は、書き込み共有データｘ‘を書き込み共有データｘ‘と乱数生成部２５０において生成された乱数との排他的論理和演算値をｅ（ｘ´）に変換するものである。なお、この方式の場合には、排他的論理和演算値から書き込み共有データｘ‘を取り出すために、ユーザ（本実施形態では、クライアント端末Ａ、クライアント端末Ｂ）にのみ排他的論理和演算値との関連がわかるように、乱数生成部２５０において生成された乱数をパブリッククラウド１００内の仮想保存領域に書き込んでおく必要がある。
【００２８】
図８の方式は、書き込み共有データｘ‘を毎回異なる秘密鍵を用いて暗号化したｅ（ｘ‘）に変換するものである。なお、この方式の場合には、ｅ（ｘ‘）から書き込み共有データｘ‘を復号化して取り出すために、ユーザ（本実施形態では、クライアント端末Ａ、クライアント端末Ｂ）間で、ｅ（ｘ‘）との関連がわかるように、秘密鍵を共有する必要がある。
【００２９】
図９の方式は、書き込み共有データｘ‘にシーケンス番号ｃを付加したデータｘ‘//ｃを毎回同じ秘密鍵を用いて暗号化したｅ（ｘ‘//ｃ）に変換するものである。ここで、シーケンス番号ｃは、データｘ’にプログラムが何度読み出しを行ったかを示すものである。図８の例では、毎回、秘密鍵を変えることから、多くの秘密鍵を予め保持する必要があるためにメモリサイズが増加するという問題があるが、本例の場合には、メモリサイズの増加分は、シーケンス番号を付加する分だけで済むため、メモリサイズのサイズを小さく抑えることができる。
＜アクセス領域のデータの保護および処理の高速化＞
【００３０】
データの書き込み処理を秘匿化するためには、アクセス領域のデータを保護することも重要な要素となる。アクセス領域のデータの保護については、いくつかの方法が考えられるが、以下では、アクセス領域のデータを難読化して保護する具体例について説明する。
【００３１】
ここでは、アクセス領域のデータを数１に示すような数式により難読化する方法を示す。
【００３２】
【数１】
2015153288.tif 000003
【００３３】
数１は、変数による難読化を例示しており、ここで、ｖ１、ｖ２、ｖ３は、難読化前の変数であり、ｘ１、ｘ２、ｘ３、ｘ４、ｘ５は、難読化後の変数を表す。また、ｄは乱数、ｙ１、ｙ２、ｙ３、ｙ４、ｙ５は、所定の定数である。数１に表されるように、乱数ｄと乗算される行列の列は常に１になっており、これによって難読化前の変数ｖの変更が難読化後の変数全体に及ぶようになっている。このような難読化を適用することによって、１つの変数を変更すれば、それが５つの変数に影響を及ぼすことになる。
【００３４】
また、上記の例においては、アクセス領域に保管されているデータを管理することが重要であり、最新のデータが１つだけ保持されていなければならない。そのため、パブリッククラウド１００内の仮想保存領域からアクセス領域にデータを移動する際に、選択したデータがアクセス領域に保持されていないことを確認する必要がある。ここで、簡便な解決策としてスキャンによるものがある。しかし、スキャンを使用した場合、多くのオーバーヘッドが生じる。そこで、パブリッククラウド１００内の仮想保存領域の全ブロックに１ビットの値を割り当て、ビットの１、０によって各データがアクセス領域に保持されているかどうかを判定する。これによって、アクセス領域のデータの管理を高速に行うことが可能である。
【００３５】
また、上記の例においては、各ブロックのサイズは一定である。そのため、大きなサイズのデータブロックに対応するためには、各ブロックをＣＰＵのワードサイズに合わせて３２ビットあるいは６４ビットで記憶素子２１０のアクセス領域およびパブリッククラウド１００内の仮想保存領域を構成する必要がある。しかし、プログラムが扱う変数はこれよりも小さい場合が多く、大きなブロックを使用すると必要となるメモリが増加するという問題がある。そこで、１ブロックのサイズを３２ビットあるいは６４ビットとし、１つのブロックに複数の小さいデータを格納する。例えば、ｓｈｏｒｔ ｉｎｔ型変数の場合、１つのデータは２バイト（１６ビット）であるので、６４ビット環境では、１つのブロックに４つのｓｈｏｒｔ ｉｎｔ型変数を格納することが可能となる。これによって、必要なメモリサイズの削減が可能となる。同時に、４つのｓｈｏｒｔ ｉｎｔ型変数を１度に取得することが可能となるので、連続してアクセスするデータが同一のブロックに格納されている場合は書き込み速度、読み出し速度の向上も実現できる。
【００３６】
＜データ書き込み時の処理＞
図１０を用いて、データ書き込み時の処理について説明する。
【００３７】
まず、初期状態では、パブリッククラウド上のすべての領域は、ダミーデータで占有されている。
【００３８】
アドレス生成部２２０は、共有する秘密鍵と初期ベクトルとから鍵系列を構成するビット列を生成し、その生成したビット列を所定のビット単位で分割して、書き込み共有データのアドレスを生成する（ステップＳ１０１）。
【００３９】
制御部２３０は、ステップＳ１０１により生成された仮想保存領域のアドレスのデータをアクセス領域に読み出し（ステップＳ１０２）、読み出したデータを書き込み共有データで上書きする（ステップＳ１０３）。
【００４０】
そして、データ変換部２４０が、上書きしたデータを別のデータに変換し（ステップＳ１０４）、制御部２３０が、変換したデータをステップＳ１０１において生成された仮想保存領域のアドレスに書き込む処理を行う（ステップＳ１０５）。なお、変換したデータは、（書き込み共有データＸＯＲ乱数）の形で登録され、別途乱数も登録される。すなわち、（書き込み共有データＸＯＲ乱数）と乱数の両方を正しく入手しなければデータを復元することはできない。また、本実施形態における乱数はダミーデータとしても機能する。ダミーデータが十分でない場合には別途ダミーデータを追加してもよい。また、ダミーデータは定期的に書き込む仕様としても良い。
【００４１】
＜クライアント端末のデータ読み込み時の機能ブロック構成＞
本実施形態に係るクライアント端末のデータ読み込み時の機能ブロックは、図３に示すように、記憶素子２１０と、アドレス生成部２２０と、制御部２３０と、データ変換部２４０と、乱数生成部２５０と、データ逆変換部２６０とから構成されている。なお、記憶素子２１０については、データ書き込み時の記憶ブロックでの説明と同様であるため、その詳細な説明は、省略する。
【００４２】
アドレス生成部２２０は、パブリッククラウド１００内の仮想保存領域において、読み込み共有データのアドレスを生成する。具体的には、アドレス生成部２２０は、図１１に示すように、初期化処理部２２１と非線形関数器２２２とアドレス出力部２２３とから構成されている。この初期化処理部２２１は、他のクライアント端末と共有している秘密鍵および初期ベクトルを入力すると、初期化処理を実行する。そして、初期化処理後の内部状態を非線形関数器２２２に入力すると、図１２に示すような鍵系列を構成するビット列が生成される。このビット列を所定のビット単位、例えば、２ビット単位に分割して、これをアドレスとする。
【００４３】
制御部２３０は、図３に示すように、データ読み出し部２３１と、データ書き込み部２３３と、データ検出部２３４とから構成されている。制御部２３０は、パブリッククラウド１００内の仮想保存領域からデータを読み出す際に、データ読み出し部２３１により、アドレス生成部２２０によって生成されたアドレスに対応するデータを記憶素子２１０のアクセス領域に読み出す。次に、データ逆変換部２６０により、データ変換部２４０とは逆の処理を行なって、データを復元し、データ検出部２３４により、復元したデータが所望の書き込み共有データであるか否かを検出する処理を所望の書き込み共有データを検出するまで行なう。そして、所望の書き込み共有データが検出されると、その所望の書き込み共有データを読み込み共有データとして記憶素子２１０に格納する。次いで、所望の書き込み共有データに対応する読み込み共有データをデータ変換部２４０により別のデータに変換して、その変換されたデータをデータ読み出し部２３１により読み出されたパブリッククラウド１００内の仮想保存領域におけるアドレスに書き込む。なお、所望の書き込み共有データがあったアドレスを記憶しておけば、処理を重ねるごとに、検索の処理負荷が軽くなる。
【００４４】
データ変換部２４０は、読み込み共有データを別のデータに変換する処理を実行する。乱数生成部２５０は、データ変換部２４０において、変換処理に用いられる乱数を生成する。なお、データ変換の具体的事例に関しては、後述する。
【００４５】
＜データ読み込み時のデータの遷移＞
記憶素子におけるデータ読み込み時のデータ遷移について、図１３を用いて、説明する。
【００４６】
図１３は、記憶素子２１０内のアクセス領域とパブリッククラウド１００内の仮想保存領域との間におけるデータ読み込み時のデータ遷移を示している。今、パブリッククラウド１００内の仮想保存領域において、データｘを読み込む場合を考える。まず、読み込みを行うアドレスに保存されているデータｅ（ｘ）（データｘに対して変換処理を行なったデータ）を記憶素子２１０内のアクセス領域に読み出し（図１３の上の図）、読み出したデータｅ（ｘ）に対して、逆変換処理を行なって、データｘを復元する。次に、復元したデータｘが所望の書き込み共有データであった場合には、復元した読み込み共有データｘをＥ（ｘ）に変形して、元の読み出しアドレスに書き込む。これにより、読み出したデータを一旦、復元し、復元したデータを別のデータに変換して書き戻すため、どのデータに対して、読み出し、書き込みを行ったかを秘匿することができる。また、最初の読み出し処理で、所望の書き込み共有データを取得できた場合には、ランダムに選択した他のデータに対しても、同様の処理を行なうことにより、さらに、秘匿性を高めることができる。また、複数回の読み出し処理において、所望の書き込み共有データを取得できた場合でも、所望の書き込み共有データのみでなく、読み出したすべてのデータについて、変換処理を行なって、書き戻す処理を行なってもよい。このような処理を行なうことにより、秘匿性を高めることができる。
【００４７】
＜データ読み込み時のデータ変換方式＞
図１４から図１６を用いて、データ読み込み時のデータ変換方式について説明する。
【００４８】
図１４の方式は、読み込み共有データｘを読み込み共有データｘと乱数生成部２５０において生成された乱数との排他的論理和演算値Ｅ（ｘ）に変換するものである。なお、この方式の場合には、排他的論理和演算値から読み込み共有データｘを取り出すために、ユーザ（本実施形態では、クライアント端末Ａ、クライアント端末Ｂ）にのみ排他的論理和演算値との関連がわかるように、乱数生成部２５０において生成された乱数をパブリッククラウド１００内の仮想保存領域に書き込んでおく必要がある。
【００４９】
図１５の方式は、読み込み共有データｘを毎回異なる秘密鍵を用いて暗号化したＥ（ｘ）に変換するものである。なお、この方式の場合には、Ｅ（ｘ）から読み込み共有データｘを復号化して取り出すために、ユーザ（本実施形態では、クライアント端末Ａ、クライアント端末Ｂ）間で、Ｅ（ｘ）との関連がわかるように、秘密鍵を共有する必要がある。
【００５０】
図１６の方式は、読み込み共有データｘにシーケンス番号ｃを付加したデータｘ//ｃを毎回同じ秘密鍵を用いて暗号化したＥ（ｘ//ｃ）に変換するものである。ここで、シーケンス番号ｃは、データｘにプログラムが何度読み出しを行ったかを示すものである。図１５の例では、毎回、秘密鍵を変えることから、多くの秘密鍵を予め保持する必要があるためにメモリサイズが増加するという問題があるが、本例の場合には、メモリサイズの増加分は、シーケンス番号を付加する分だけで済むため、メモリサイズのサイズを小さく抑えることができる。
＜アクセス領域のデータの保護および処理の高速化＞
【００５１】
データの読み込み処理を秘匿化するためには、アクセス領域のデータを保護することも重要な要素となる。アクセス領域のデータの保護については、いくつかの方法が考えられるが、以下では、アクセス領域のデータを難読化して保護する具体例について説明する。
【００５２】
ここでは、アクセス領域のデータを数２に示すような数式により難読化する方法を示す。
【００５３】
【数２】
2015153288.tif 000004
【００５４】
数２は、変数による難読化を例示しており、ここで、ｖ１、ｖ２、ｖ３は、難読化前の変数であり、ｘ１、ｘ２、ｘ３、ｘ４、ｘ５は、難読化後の変数を表す。また、ｄは乱数、ｙ１、ｙ２、ｙ３、ｙ４、ｙ５は、所定の定数である。数２に表されるように、乱数ｄと乗算される行列の列は常に１になっており、これによって難読化前の変数ｖの変更が難読化後の変数全体に及ぶようになっている。このような難読化を適用することによって、１つの変数を変更すれば、それが５つの変数に影響を及ぼすことになる。
【００５５】
また、上記の例においては、アクセス領域に保管されているデータを管理することが重要であり、最新のデータが１つだけ保持されていなければならない。そのため、パブリッククラウド１００内の仮想保存領域からアクセス領域にデータを移動する際に、選択したデータがアクセス領域に保持されていないことを確認する必要がある。ここで、簡便な解決策としてスキャンによるものがある。しかし、スキャンを使用した場合、多くのオーバーヘッドが生じる。そこで、パブリッククラウド１００の仮想保存領域の全ブロックに１ビットの値を割り当て、ビットの１、０によって各データがアクセス領域に保持されているかどうかを判定する。これによって、アクセス領域のデータの管理を高速に行うことが可能である。
【００５６】
また、上記の例においては、各ブロックのサイズは一定である。そのため、大きなサイズのデータブロックに対応するためには、各ブロックをＣＰＵのワードサイズに合わせて３２ビットあるいは６４ビットで記憶素子２１０のアクセス領域およびパブリッククラウド１００内の仮想保存領域を構成する必要がある。しかし、プログラムが扱う変数はこれよりも小さい場合が多く、大きなブロックを使用すると必要となるメモリが増加するという問題がある。そこで、１ブロックのサイズを３２ビットあるいは６４ビットとし、１つのブロックに複数の小さいデータを格納する。例えば、ｓｈｏｒｔ ｉｎｔ型変数の場合、１つのデータは２バイト（１６ビット）であるので、６４ビット環境では、１つのブロックに４つのｓｈｏｒｔ ｉｎｔ型変数を格納することが可能となる。これによって、必要なメモリサイズの削減が可能となる。同時に、４つのｓｈｏｒｔ ｉｎｔ型変数を１度に取得することが可能となるので、連続してアクセスするデータが同一のブロックに格納されている場合は書き込み速度、読み出し速度の向上も実現できる。
【００５７】
＜データ読み出し時の処理＞
図１７を用いて、データ読み出し時の処理について説明する。
【００５８】
まず、アドレス生成部２２０が、共有する秘密鍵と初期ベクトルとから鍵系列を構成するビット列を生成し、生成したビット列を所定のビット単位で分割して、読み込み共有データのアドレスを生成する（ステップＳ２０１）。
【００５９】
制御部２３０は、ステップＳ２０１により生成された仮想保存領域のアドレスのデータをアクセス領域に読み出し（ステップＳ２０２）、データ逆変換部２６０が、ステップＳ２０２において読み出したデータに対して、データ変換手段の処理とは、逆の処理を行ない、データを復元する（ステップＳ２０３）。
【００６０】
制御部２３０は、復元したデータが所望の書き込み共有データであるか否かを確認し（ステップＳ２０４）、所望の書き込み共有データを検出するまでステップＳ２０１からステップＳ２０４の処理を繰り返す（ステップＳ２０５）。
【００６１】
制御部２３０は、所望の書き込み共有データを読み込み共有データとして取得し、記憶素子に格納し（ステップＳ２０６）、データ変換部２４０が、少なくとも所望の書き込み共有データに対応する読み込み共有データを別のデータに変換して（ステップＳ２０７）、制御部２３０が、変換されたデータをステップＳ２０１で生成された仮想保存領域のアドレスに書き込む処理を行う（ステップＳ２０８）。
【００６２】
なお、変換したデータは、（読み込み共有データＸＯＲ乱数）の形で登録され、別途乱数も登録される。すなわち、（読み込み共有データＸＯＲ乱数）と乱数の両方を正しく入手しなければデータを復元することはできない。また、本実施形態における乱数はダミーデータとしても機能する。ダミーデータが十分でない場合には別途ダミーデータを追加してもよい。また、ダミーデータは定期的に書き込む仕様としても良い。
【００６３】
以上、説明したように、本実施形態によれば、パブリッククラウドにおいても安全にデータの共有を行なうことができる。
【００６４】
なお、データ共有システムの処理をコンピュータシステムが読み取り可能な記録媒体に記録し、この記録媒体に記録されたプログラムをデータ共有システムの構成要素であるクライアント端末Ａ、Ｂに読み込ませ、実行することによって本発明のデータ共有システムを実現することができる。ここでいうコンピュータシステムとは、ＯＳや周辺装置等のハードウェアを含む。
【００６５】
また、「コンピュータシステム」は、ＷＷＷ（Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ）システムを利用している場合であれば、ホームページ提供環境（あるいは表示環境）も含むものとする。また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。
【００６６】
また、上記プログラムは、前述した機能の一部を実現するためのものであってもよい。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組合せで実現できるもの、いわゆる差分ファイル（差分プログラム）であってもよい。
【００６７】
以上、この発明の実施形態につき、図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【符号の説明】
【００６８】
１００；パブリッククラウド
２００Ａ；クライアント端末Ａ
２００Ｂ；クライアント端末Ｂ
２１０；記憶素子
２２０；アドレス生成部
２３０；制御部
２３１；データ読み出し部
２３２；上書き部
２３３；データ書き込み部
２３４；データ検出部
２４０；データ変換部
２５０；乱数生成部
２６０；データ逆変換部
【図１】
2015153288.tif 000005
【図２】
2015153288.tif 000006
【図３】
2015153288.tif 000007
【図４】
2015153288.tif 000008
【図５】
2015153288.tif 000009
【図６】
2015153288.tif 000010
【図７】
2015153288.tif 000011
【図８】
2015153288.tif 000012
【図９】
2015153288.tif 000013
【図１０】
2015153288.tif 000014
【図１１】
2015153288.tif 000015
【図１２】
2015153288.tif 000016
【図１３】
2015153288.tif 000017
【図１４】
2015153288.tif 000018
【図１５】
2015153288.tif 000019
【図１６】
2015153288.tif 000020
【図１７】
2015153288.tif 000021