以下に、図面を参照して、本発明の実施の形態について例示的に詳しく説明する。ただし、以下の実施の形態に記載されている構成要素は単なる例示であり、本発明の技術範囲をそれらのみに限定する趣旨のものではない。
[第1実施形態]
本発明の第1実施形態としての情報処理システム110について、図1Aを用いて説明する。
図1Aに示すように、情報処理システム110は、保存用ネットワーク101と、検索用ネットワーク102と、保存処理部103と、を含む。保存用ネットワーク101は、ファイル130を分散保存するための複数の保存用ノード111を含む。検索用ネットワーク102は、複数の保存用ノード111のロケーションを含むロケーションリスト122をブロックチェーン化しつつ保存する検索用ノード121を複数含む。保存処理部103は、ファイル130を複数の部分データ131~13nに分割し、複数の部分データ131~13nのそれぞれを複数の保存用ノード111に含まれる少なくとも2つの保存用ノードに送信して保存させる。更新処理部123は、検索用ノード121に含まれ、部分データを保存した保存用ノード111の識別情報を用いて、ロケーションリスト122を更新する。
本実施形態によれば、高い安全性を担保しつつ、小規模ストレージの集合により大規模データサーバと同様の機能を実現することができる。
[第2実施形態]
本発明の第2実施形態に係る情報処理システム120について図1Bを用いて説明する。
図1Bに示すように、情報処理システム120は、保存用ネットワーク101と、検索用ネットワーク105と、復元処理部104とを含む。検索用ネットワーク105は、複数の保存用ノードのロケーションを含むロケーションリスト152をブロックチェーン化しつつ保存する検索用ノード151を複数含む。また、各検索用ノード151は、検索処理部153を含む。検索処理部153は、ロケーションリスト122に基づいて、複数の部分データ141~14nが保存されている保存用ノード111を検索する。復元処理部104は、保存用ノード111から複数の部分データ141~14nを取得し、複数の部分データ141~14nを合成してファイル140を復元する。
本実施形態によれば、高い安全性を担保しつつ、小規模ストレージの集合により大規模データサーバと同様の機能を実現することができる。
[第3実施形態]
本発明の第3実施形態に係る情報処理システム200について図2以降を用いて説明する。
本実施形態の情報処理システム200は、ファイルおよびその分割された部分データがハッシュ化(以下、ハッシュをHash、ハッシュ値をHash値と表す)されて、検索用ネットワークと保存用ネットワークとの独立した二層構造で管理される。そして、ファイルのアップロードでは、ファイルから分割した複数の部分データを、複数の保存用ノードから複数の部分データのそれぞれの保存先として選定した保存用ノードに保存させる。そして、複数の部分データをそれぞれ保存する選定された保存用ノードを示すロケーションリストをブロックチェーン化しつつ生成し、複数の検索用ノードに共有させる。一方、ファイルのダウンロードでは、複数の検索用ノードに共有されたロケーションリストをいずれか1つの検索用ノードから取得して、ファイルに対応するロケーションリストを検索する。そして、検索したロケーションリストに従って、ファイルから分割された複数の部分データをそれぞれ保存する複数の保存用ノードから取得し、複数の部分データを合成して取得対象のファイルを生成する。
ファイルをアップロードする際には、ファイルを暗号化し、暗号化されたファイルから分割した複数の部分データを保存先として選定した保存用ノードに保存させる。また、ファイルをダウンロードする際には、暗号化ファイルから分割された複数の部分データをそれぞれ保存する複数の保存用ノードから取得し、暗号化ファイルを構成する。そして、暗号化ファイルからファイルを復号する。なお、検索用ノードおよび保存用ノードは、ノードを識別するノード識別情報のHash値により識別されることが望ましい。
《情報処理システム》
以下、図2~図4に従って、本実施形態の情報処理システム200の構成および動作について説明する。
(ブロック構成)
図2は、本実施形態に係る情報処理システム200の構成を示すブロック図である。
情報処理システム200は、保存用ネットワーク201と、検索用ネットワーク202と、クライアント端末203とを有する。クライアント端末203は、ファイル保存処理、リスト検索処理およびファイル取得処理を実現するクライアントアプリケーション232を実行するよう構成されている。
保存用ネットワーク201は、P2P通信を行う複数の保存用ノード211を含む。複数の保存用ノード211のそれぞれは、クライアントアプリケーション232からのファイルの保存要求において、ファイルから分割された部分データを、ファイルHash(ファイルハッシュ)と部分Hash(部分ハッシュ)を検索キーとして保存する。また、複数の保存用ノード211は、クライアントアプリケーション232からのファイルの取得要求において、検索用ノード221がロケーションリストからファイルのHash値によって検索したファイルリストを含まれる部分Hashを用いて、部分データを検索して読出し、クライアント端末203に送信する。
検索用ネットワーク202は、P2P通信を行う複数の検索用ノード221を含む。検索用ノード221は、ファイルが複数の保存用ノード211に保存された場合に、そのファイルのHash値によって特定されたファイルリストを含むロケーションリストを生成して複数の検索用ノード221で共有する。また、検索用ノード221は、クライアント端末203からのファイルの取得要求において、最新のロケーションリストから、取得要求されたファイルに対応するファイルHashと部分Hashと保存用ノードIDとから構成されるファイルリストを検索して、クライアント端末203に提供する。
クライアントアプリケーション232は、ファイルの保存要求に対しては、ファイルを分割して部分データを部分Hashを検索キーとして、複数の保存用ノード211から選択された保存用ノードに保存する。部分データの保存が完了すると、保存用ノード211は、ファイルHashと部分Hashと部分データを保存した保存用ノードIDとを検索用ノード221に通知する。そして、検索用ノード221が、ファイルHashと、部分Hash値と、保存用ノードIDと、から構成されたファイルリストを生成して、ロケーションリストを更新する。更新されたロケーションリストは、全ての検索用ノード221で共有される。
クライアントアプリケーション232は、ファイルの取得要求に対しては、ファイルashを検索キーとして、近傍の検索用ノード221に送り、最新のロケーションリストに含まれるファイルのファイルリストを取得する。取得したファイルリストには、ファイルHashと、部分Hashと、保存用ノードIDと、が含まれている。クライアントアプリケーション232は、ファイルリストから抽出した部分Hashと保存用ノードIDとの組合せを用いて、部分データを保存用ノードから読出す。
以下、図3A、図3Bおよび図4を参照して、情報処理システム200の動作手順を示す。
(ファイルの保存手順)
図3Aは、実施形態に係る情報処理システム200の、ファイルを分散して保存する動作手順を示す図である。
ファイルの保存を要求するクライアント301は、クライアント端末203にファイル名によりファイルデータの保存を指示する。ファイルデータ311は、クライアント端末203のクライアントアプリケーション232に渡される。
クライアントアプリケーション232は、ファイルデータ311を暗号化し、暗号化ファイルデータ312を生成する。そして、クライアントアプリケーション232は、ファイルハッシュ生成処理として、暗号化ファイルデータ312からファイルHash313を算出する。クライアントアプリケーション232は、ファイルHash313を検索用ノード221に送信する。なお、送信先の検索用ノード221は、ロケーションリスト317の検索用ノードリスト324を参照して、例えば、KAD(Kademlia)ネットワークにおけるノード検索の再帰アルゴリズムを用いて、最も近い検索用ノードを見付けることが望ましい。また、本実施形態においては、ファイルの暗号化後にファイルHashを算出したが、ファイルHashを算出した後にファイルHashを含んでファイルを暗号化してもよい。
検索用ノード221は、保持するロケーションリスト317に、ファイルHash313を検索キーとして有する空のファイルリストを生成して追加する。そして、検索用ネットワーク202に含まれる全ての検索用ノードは、P2P通信により空のファイルリストが追加された最新のロケーションリストを保持することができる。なお、ファイル名と検索キーとなるファイルHash313との対応データ314を生成してアプリケーションに保持しておくことによって、ファイルの取得を行う場合のクライアントからの要求を簡易にすることができる。
一方、クライアントアプリケーション232は、暗号化ファイルデータ312を、クライアントやファイルの重要性、さらに、復元可能な冗長性を考慮して複数の部分データ315に分割する。そして、クライアントアプリケーション232は、部分ハッシュ生成処理として、複数の部分データ315のそれぞれのHash値を算出して、部分Hash316を生成する。部分Hash316は、部分データ315の先頭から順に、前の部分Hash316に次の部分データ315を加えてHash値を算出することによりブロックチェーン化する。ブロックチェーン化してHash値を算出するので、ファイルリストに保持された部分Hashや保存用ノードから読み出した部分Hashから部分データの合成順を知ることができる。なお、部分Hash316は、各部分データ315に対して独立して算出してもよい。独立して部分Hashを算出する場合には、ファイルの読み出し時に部分データを合成する順序を保持する必要がある。例えば、ロケーションリストのファイルリスト322に保持する、あるいは、保存用ノードに保存された部分データや部分Hash内に保持することができる。
クライアントアプリケーション232は、検索用ノード221のロケーションリスト317から保存用ネットワーク201に参加する保存用ノードリスト318を取得する。なお、クライアントアプリケーション232から検索用ノード221へのファイルHash313の送信と、検索用ノード221からクライアントアプリケーション232への保存用ノードリスト318の送信とは、一緒に行われてもよい。また、検索用ノード221のロケーションリスト317には検索用ノードリスト324も保持されており、クライアントアプリケーション232からアクセスする検索用ノードを選定する場合に参照され、クライアント端末の検索用ノードとしての参加や離脱時には、最新データに更新される。
クライアントアプリケーション232は、受信した保存用ノードリスト318から、分割された複数の部分データ315の数に相当する保存ノードを識別する保存用ノードID319を選定する。なお、保存用ノードID319は、保存用ノードに関連する属性から算出されたHash値であるのが望ましい。また、選定される保存用ノードID319の数は、保存時のエラーを考慮して分割された複数の部分データ315の数より多く選定する。
クライアントアプリケーション232は、ファイルHash313と部分データ315と部分Hash316との組合せと、選定された保存用ノードID319とを組み合わせて、選定された保存用ノードに対して保存を指示する保存用メッセージ320を生成する。ここで、ファイルHash313と部分データ315と部分Hash316との組合せ、あるいは、少なくとも部分データ315は各データごとに暗号鍵で暗号化される。そして、クライアントアプリケーション232は、各保存用メッセージ320を各保存用ノードに送信する。なお、保存用メッセージ320の送信は、保存相手の複数の保存用ノードに一斉送信するのが高速化の面で望ましい。
保存相手の保存用ノード211では、保存用ノードID319を確認して、ファイルHashと部分Hashとを検索キーとした部分データ321を保存する。そして、保存がエラーなく完了すると、保存用ノード211は検索用ノードに保存完了報告を行う。この保存完了報告には、ファイルHashと部分Hashと保存用ノードIDとの組合せが含まれる。なお、保存完了報告は、全検索用ノードに一斉送信されても、先にクライアントアプリケーション232がアクセスした検索用ノードであってもよい。なお、検索用ネットワーク202では、全検索用ノードがP2P通信により空のファイルリストを含む最新のロケーションリストを保持している。図示されていないが、保存完了報告を行った保存用ノードには、保存対価の報酬が支払われる。
エラーなしに保存完了した保存用ノードからの保存完了報告を受信した検索用ノードは、保存完了報告に含まれる部分Hashと保存用ノードIDとの組合せを、ファイルHashを検索キーとする空のファイルリストに順次に記憶する。冗長を含む保存対象のファイルが再生可能な数の部分データが保存されると、新たなファイルリスト322が追加された最新のロケーションリストが完成する。
図示されていないが、ファイルの保存用ネットワーク201の保存用ノードへの保存が完了すると、ファイルの保存を要求したクライアント301から通常は保存料金が徴収される。
(ファイルの再現手順)
図3Bは、本実施形態に係る情報処理システム200の、ファイルを合成して復元する動作手順を示す図である。なお、図3Bにおいては、図3Aで保存したファイルを読み出す例を説明するが、他のファイルであっても動作手順は同様である。
ファイルの取得を要求するクライアント303からのクライアント端末203に対して入力されたファイル名は、クライアントアプリケーション232に渡される。クライアントアプリケーション232は、ファイルハッシュ取得処理として、対応データ314を参照してファイル名に対応付けて保持されているファイルHash313を取得する。そして、取得したファイルHash313を検索用ノードに送信する。なお、ファイルの保存時と同様に、送信先の検索用ノードは、ロケーションリスト317の検索用ノードリストを参照して、例えば、KAD(Kademlia)ネットワークにおけるノード検索の再帰アルゴリズムを用いて、最も近い検索用ノードを見付けることが望ましい。
検索用ノードは、受信したファイルHash313を検索キーとして、ファイルのファイルリスト322を検索する。そして、ファイルHash313を有するファイルリスト325を見つける。そして、検索用ノードは、見つけたファイルリスト325をクライアントアプリケーション232に送信する。
クライアントアプリケーション232は、保存用ノード情報取得処理として、受信したファイルリスト325に含まれる、ファイルの分割数だけの部分Hashと保存用ノードIDとの組合せ326をそれぞれ抽出する。そして、クライアントアプリケーション232は、保存用ノードIDが示す保存用ノードに対してファイルHashと部分Hashとを送信する。なお、保存用ノードIDとファイルHashと部分Hashとは、保存用ネットワーク201の保存用ノードに対してP2P送信される。
送信された各保存用ノードIDを有する保存用ノード211は、受信したファイルHashと部分Hashとを検索キーとして部分データを検索する。そして、保存用ノード211は、見つかった部分データを、ファイルHashと部分Hashと共にクライアントアプリケーション232に送信する。図示されていないが、本実施形態においては、部分データを読み出してクライアントアプリケーション232に送信した保存用ノード211には、保存時の報酬よりも高い読出の報酬が支払われる。
クライアントアプリケーション232は、それぞれの保存用ノード211からファイルHashと部分Hashと部分データとの組合せ321を受信して、その数がファイルを復元できる数を超えた場合、保存用ネットワーク201からのファイルの読み出しが成功したとする。クライアントアプリケーション232は、受信したデータを部分データを暗号化した暗号鍵に対応する復号鍵で復号し、部分Hashと部分データとの組合せ321に含まれる各部分Hashを照合して、部分データ315を分割した順序で合成して、暗号化ファイルデータ312を復元する。なお、複数の部分データの合成については、先にファイルの保存処理で説明したように、部分データを分割順にブロックチェーン化して部分Hashを算出しているので、合成順序を持つ必要はない。ただし、各部分データから独立に部分Hashを算出する場合は、部分データの合成順序を保持する必要がある。
クライアントアプリケーション232は、復元された暗号化ファイルデータからファイルを暗号化した暗号鍵に対応する復号鍵でファイルデータを復号して、クライアント端末203によりクライアント303に提供する。なお、図示していないが、クライアント303にファイルが提供されると、普通はクライアント303からファイルを提供した料金が徴収される。
(保存用ノードまたは検索用ノードの動作手順)
図4は、本実施形態に係る情報処理システム200の、保存用ノードまたは検索用ノードの動作手順を示す図である。
(保存用ノード)
クライアント端末が保存用ネットワーク201の保存用ノード211として参加する場合、クライアント端末は、ステップS451において、保存用ノードアプリケーション411をダウンロードして駆動する。保存用ノードアプリケーション411は、ステップS452において、電子キャッシュ保存部を設定する。
クライアント端末は、ステップS453において、保存用ノードへの参加を申し込み、ステップS454において、クライアント情報としてストレージサイズやクライアント属性などを保存用ノードアプリケーション411に送出する。保存用ノードアプリケーション411は、ステップS455において、クライアント情報に基づいて保存用ノード211の選定時に考慮されるノードの信頼性を示すノードランクが初期設定され、保存用ノード211を識別するHashIDが設定される。そして、保存用ノードの登録は、検索用ノードに伝えられて検索用ノードに保持されたロケーションリスト内の保存用ノードリストが最新状態に更新される。
保存用ノード211が部分ファイルを保存する場合、保存用ノードアプリケーション411は、ステップS456において、クライアントアプリケーション232から保存用ノードIDを送信先として(ファイルHash、部分Hash、部分データ)の組合せを取得して保存する。そして、保存用ノードアプリケーション411は、ステップS457において、保存報酬を取得する。
保存用ノード211が部分データを読出す場合、保存用ノードアプリケーション411は、ステップS458において、クライアントアプリケーション232から保存用ノードIDを送信先としてファイルHasnと部分Hashとを取得する。そして、保存用ノードアプリケーション411は、ファイルHasnと部分Hashとを検索キーとして部分データを検索して読み出し、クライアントアプリケーション232に送る。保存用ノードアプリケーション411は、ステップS459において、保存報酬より多い読出報酬を取得する。
(検索用ノード)
クライアント端末が検索用ネットワーク202の検索用ノード221として参加する場合、クライアント端末は、ステップS461において、検索用ノードアプリケーション421をダウンロードして駆動する。検索用ノードアプリケーション421は、ステップS462において、電子キャッシュ保存部を設定する。
クライアント端末は、ステップS463において、検索用ノードへの参加を申し込み、ステップS464において、クライアント情報としてクライアント属性や参加料金などを検索用ノードアプリケーション421に送出する。検索用ノードアプリケーション421は、ステップS465において、検索用ノードから選ばれた管理グループに対して、参加可否の判定要求をして、判定結果を取得する。なお、参加可否の判定は、検索用ネットワーク202に参加する検索用ノードの投票で行われる。そして、検索用ノードアプリケーション421は、ステップS466において、クライアント情報に基づいて検索用ノード221の投票時に考慮されるノードの信頼性を示すノードランクが設定され、検索用ノード221を識別するHashIDが設定される。そして、検索用ノードの登録は、検索用ノードが保持するロケーションリスト内の検索用ノードリストを最新状態に更新する。
検索用ノード221がロケーションリストを保存して共有する場合、検索用ノードアプリケーション421は、ステップS467において、クライアント端末からファイルHashを受信すると、ファイルHashを検索キーとする空のファイルリストをロケーションリストに追加する。そして、各保存用ノードから部分データの保存完了報告を受信すると、検索用ノードアプリケーション421は、ステップS468において、空のファイルリストに、部分Hashと、部分データを保存した保存用ノードIDとの組合せを書き込む。また、ファイルの取得要求として、クライアント端末からファイルHashを受信すると、検索用ノードアプリケーション421は、ステップS469において、ロケーションリストからファイルHashを含むファイルリストを読出して、クライアントアプリケーション232に送信する。
検索用ノード221が検索用ネットワーク202における投票に参加する場合、検索用ノードアプリケーション421は、ステップS470において、各投票に参加すると、ステップS471において、参加に対する報酬を取得する。
《クライアントアプリケーション》
以下、図5~図7に従って、クライアントアプリケーション232の構成および動作について説明する。
図5は、本実施形態に係るクライアントアプリケーション232の構成を示す図である。
クライアントアプリケーション232は、通信制御部500~502と、ファイル保存処理部503と、リスト検索処理部505と、ファイル取得処理部506と、を備える。
通信制御部500は、クライアント端末203との通信を制御する。通信制御部501は、保存用ネットワーク201との間でP2Pトンネルによる(ファイルHash、部分Hash、部分データ)の組合せや報酬などの通信を制御する。通信制御部502は、検索用ネットワーク202との間で保存用ノードリストまたはファイルリストをやり取りする独立したP2Pネットワークを制御する。
ファイル保存処理部503は、クライアント端末203から通信制御部500を介して取得したファイルを暗号化してHash値であるファイルHashを生成する。また、ファイル保存処理部503は、暗号化したファイルを部分データに分割して、各部分データのHash値である部分Hashを生成する。さらに、ファイル保存処理部503は、検索用ノードから取得した保存用ノードリストに記載された複数の保存用ノードから、部分データの分割数と冗長数を加えたブロック数の保存用ノードを選定する。そして、ファイル保存処理部503は、通信制御部501を介して、選定された保存用ノードに(ファイルHash、部分Hash、部分データ)の組合せを送信して、ファイルHashと部分Hashとを検索キーとして部分データを保存させる。
リスト検索処理部505は、クライアント端末203から取得を望むファイルを表す取得対象情報、例えば、文書名、ファイル名、動画タイトルなどを取得し、取得対象情報をファイルに対応付けられた検索キーとしてのファイルHashを生成する。リスト検索処理部505は、通信制御部502を介して、検索用ネットワーク202内の近傍にある検索用ノードから、ファイルHashを検索キーとして検索された、最新のロケーションリスト内のファイルリストを取得する。
ファイル取得処理部506は、リスト検索処理部505から取得したファイルリストから各部分データの(部分Hash、保存用ノードID)の組合せを抽出する。そして、ファイル取得処理部506は、通信制御部501を介して、(ファイルHash、部分Hash、保存用ノードID)の組合せを用いて、各部分データを対応する保存用ノードから検索して読み出す。ファイル取得処理部506は、各部分データを復号して、正しく読み出された部分データのブロック数が所定数以上の場合には、部分データを合成して暗号化ファイルを再生する。ファイル取得処理部506は、再生された暗号化ファイルを暗号化鍵に対応する復号鍵で復号してクライアント端末203に送出する。
図6は、本実施形態に係るクライアントアプリケーション232を含むクライアント端末203のハードウェア構成を示すブロック図である。
図6で、CPU610は演算制御用のプロセッサであり、プログラムを実行することで図5の構成を実現する。CPU(Central Processing Unit)610は1つであっても複数であってもよい。ROM(Read Only Memory)620は、初期データおよびプログラムなどの固定データおよびプログラムを記憶する。ネットワークインタフェース630は、保存用ネットワーク201や検索用ネットワーク202との通信を制御する。
RAM(Random Access Memory)640は、CPU610が一時記憶のワークエリアとして使用するランダムアクセスメモリである。RAM640には、本実施形態の実現に必要なデータを記憶する領域が確保されている。保存すべきファイル641は、保存用ネットワーク201の保存用ノード211に部分データとして分散保存するためのファイルである。取得したファイル642は、保存用ネットワーク201の保存用ノード211に分散保存された部分データを合成して復元されたファイルである。ロケーションリスト643は、検索用ネットワーク202の全ての検索用ノードに共有された分散保存の構成を示すリストである。ファイルHash644は、保存すべきファイル641あるいは取得したファイル642のHash値である。検索用ノードID645は、クライアント端末203がアクセスしているロケーションリストを保持する検索用ノードを識別するためのIDである。部分Hashと部分データと保存用ノードID646は、分割されて各保存用ノードに保存される部分データと、その部分データのHash値と、保存先ノードのIDである。なお、保存用ノードIDは保存用ノードを識別する識別情報のHash値であることが望ましい。電子キャッシュデータ647は、ファイル保存や取得に対応する料金の支払い、あるいは、ファイル保存や読出しの報酬の受取りのためのブロックチェーンされたデータである。送受信データ648は、ネットワークインタフェース630を介して送受信されるデータである。入出力データ649は、入出力インタフェース660を介して入出力機器と入出力するデータである。
ストレージ650は、CPU610が使用する、本実施形態の実現に必要な以下のデータまたはプログラムが記憶されている。データベース651は、本実施形態の実現に必要な基本データを保持する。各種アルゴリズム652は、本実施形態の実現に必要なアルゴリズムを保持する。各種パラメータ653は、各種アルゴリズム652が用いる本実施形態の実現に必要なアルゴリズムを保持する。電子キャッシュ保持部654は、電子サイフとして、本実施形態の処理に必要な料金の支払い、あるいは、処理により得られる報酬をブロックチェーンされた電子キャッシュで保持する。
ストレージ650には、以下のプログラムが格納される。クライアント端末制御プログラム655は、クライアント端末203の全体を制御するプログラムである。クライアントアプリケーション232は、クライアント端末203にダウンロードされて、あるいは、ブラウザ機能を伴ってクライアント端末203で実行されるアプリケーションである。クライアントアプリケーション232は、以下のモジュールを有する。
ファイル保存処理部503として機能するファイル保存処理モジュールは、図5に図示された、保存すべきファイル641を分割した部分データを保存用ノードに分散保存させるモジュールである。リスト検索処理部505として機能するリスト検索処理モジュールは、図5に図示された、1つの検索用ノードが保持するロケーションリストからファイルHashを検索キーとして検索したファイルリストを受信モジュールである。ファイル取得処理部506として機能するファイル取得処理モジュールは、図5に図示された、リスト検索処理モジュールにより受信したファイルリストが保持するファイルHashと部分Hashと保存用ノードIDとの組合せを用いて部分データを読出して合成して、取得したファイル642を復元するモジュールである。報酬処理部として機能する報酬処理モジュールは、ファイル保存完了通知や、ファイル取得完了通知に応答して、参加ノード特に保存用ノードに対する報酬を提供するためのモジュールである。各種通信制御部500、501、502として機能する通信制御モジュールは、図5に図示された、各通信制御を行うモジュールである。
入出力インタフェース660は、入出力デバイスとのデータ入出力を制御するためのインタフェースを行なう。本実施形態においては、入出力インタフェース660には、表示部661、操作部662、音声入出力部663、記憶媒体664などが接続される。
なお、図6のRAM640やストレージ650には、クライアント端末203が有する汎用の機能や他の実現可能な機能に関連するプログラムやデータは図示されていない。
図7は、本実施形態に係るクライアントアプリケーション232の処理手順を示すフローチャートである。このフローチャートは、図6のCPU610がRAM640を用いて実行し、図5の機能構成を実現する。
クライアント端末203は、ステップS711において、ファイルの保存であるか否かを判定する。ファイルの保存であれば、クライアント端末203は、ステップS713において、ファイルを分割して、分割された部分データを保存用ノード211に保存するデータ保存処理を実行する。
ファイルの保存でないと判定された場合、クライアント端末203は、ステップS721において、ファイルの取得(または閲覧)であるか否かを判定する。ファイルの取得であれば、クライアント端末203は、ステップS723において、1つの検索用ノードが保持するロケーションリストから、ファイルを識別するファイルHashに一致するファイルリストを受信するリスト検索処理を実行する。そして、クライアント端末203は、ステップS725において、ファイルから分割された部分データを、ファイルリストに含まれる部分Hashと保存用ノードIDとに基づいて読出し、部分データからファイルを合成して復元するファイル取得処理を実行する。
(ファイル保存処理部)
図8は、本実施形態に係るファイル保存処理部503の機能構成を示すブロック図である。
ファイル保存処理部503は、ファイル暗号化部831と、ファイルHash生成部832と、部分データ生成部833と、部分Hash生成部834と、保存用ノード選定部835と、分散保存指示部836と、を備える。
ファイル暗号化部831は、暗号化アルゴリズムと暗号化鍵とを有し、クライアントから保存を指示されたファイルを暗号化する。なお、使用される暗号化アルゴリズムや暗号化鍵は限定されないが、クライアントに対応する暗号化鍵が配布されているとする。ファイルHash生成部832は、ファイル暗号化部831において暗号化されたファイルのHash値を算出する。なお、Hash値の算出方法は、その認証方法と対応していれば限定されない。部分データ生成部833は、分割アルゴリズムと分割アルゴリズムで算出された分割数とを有し、データ分割部として、ファイル暗号化部831において暗号化されたファイルを算出された分割数に基づいて分割する。なお、部分データ生成部833の分割アルゴリズムは、ファイルに対応して部分データの数を制御すると共に、保存時や取得時のエラーによってもデータ復元が可能なように、分割における冗長のための処理が含まれる。部分Hash生成部834は、部分データ生成部833で分割された部分データのHash値を算出する。なお、Hash値の算出方法は、その認証方法と対応していれば限定されない。保存用ノード選定部835は、選定アルゴリズムと選定アルゴリズムで選定された保存先ノードIDとを有し、部分データ生成部833で冗長を含めて分割された分割数の部分データを保存する保存用ノードを、各々の保存用ノードの信頼性も考慮して選定する。なお、保存用ノードの識別は、保存用ノードに関連する情報のHash値であるのが望ましい。かかる保存用ノードを識別するHash値は、保存用ノードとして保存用ネットワーク201に参加する時に付与される。
分散保存指示部836は、保存データテーブル837を有し、ファイルHashと、部分Hash生成部834で生成された部分Hashを部分データを識別する識別子として部分データと組み合わせ、保存用ノード選定部835が選定した各保存用ノードへ保存を指示する。なお、図示しないが、部分データは暗号化鍵により暗号化される。
図9は、本実施形態に係るファイル保存処理部503で使用する保存データテーブル837の構成を示す図である。保存データテーブル837には、分散保存指示部836で保存用ノードに部分データを保存するための情報が保持される。
保存データテーブル837は、ファイルHash921に対応付けて、分割数912の各々の部分データ923について、部分Hash922と、対応する部分データ923と、選定された保存用ノードID924とを記憶する。
図10は、実施形態に係るファイル保存処理部503の処理手順を示すフローチャートである。このフローチャートは、図6のCPU610がRAM640を用いて実行し、図8のファイル保存処理部503の機能構成部を実現する。
ファイル保存処理部503は、ステップS1001において、保存すべきファイルを取得したか否かを判定する。ファイルを取得した場合、ファイル保存処理部503は、ステップS1003において、ファイルの暗号化処理を実行する。ファイル保存処理部503は、ステップS1005において、暗号化されたファイルのHash値を算出する。
ファイル保存処理部503は、ステップS1007において、暗号化されたファイルの部分データへの分割処理を実行する。ファイル保存処理部503は、ステップS1009において、分割された部分データを保存する保存先の保存用ノードを選定する。
ファイル保存処理部503は、ステップS1011において、選定された各保存用ノードに(ファイルHash、部分Hash、部分データ)により保存を指示する。
図11Aは、本実施形態に係るファイル分割処理S1007の手順を示すフローチャートである。
ファイル保存処理部503は、ステップS1171において、ファイルのサイズを取得する。ファイル保存処理部503は、ステップS1173において、データブロック数を、(データブロック数=サイズ/部分データサイズ)の式により算出する。次に、ファイル保存処理部503は、ステップS1175において、冗長ブロック数を、(冗長ブロック数=データブロック数/所定数)の式により算出する。所定数は、本実施形態では例えば、3が用いられる。次に、ファイル保存処理部503は、ステップS1177において、分割数を、(分割数=データブロック数+冗長ブロック数)の式により算出する。そして、ファイル保存処理部503は、ステップSS1179において、ステップS1003で暗号化されたファイルを算出された分割数に分割する。
図11Bは、本実施形態に係る保存先ノードの選定処理S1009の手順を示すフローチャートである。
ファイル保存処理部503は、ステップS1191において、ステップS1177で算出された分割数を取得する。次に、ファイル保存処理部503は、ステップS1193において、保存用ネットワーク201に参加する保存用ノードのリストを1つの検索用ノードから取得する。そして、ファイル保存処理部503は、ステップS1195において、ファイルの重要度や保存要求クライアントの重要度などを取得する。ファイル保存処理部503は、ステップS1197において、取得したファイルの重要度、および/または、保存要求クライアントの重要度を考慮して、クライアント端末により近い分割数に相当する保存用ノードを選定する。
図11Bには、ステップS1195およびS1197における処理で用いられる保存用ノードのテーブル1110が図示されている。保存用ノードのテーブル1110は、各保存用ノードID(Hash値)1111に対応付けて、保存用ノードの属性1112、保存用ノードの信頼度(レベル)1113、保存用ノードの位置1114を記憶する。そして、各保存用ノードID(Hash値)1111に対応付けて、選択結果1115を記憶する。
(リスト検索処理部)
図12は、本実施形態に係るリスト検索処理部505の機能構成を示すブロック図である。
リスト検索処理部505は、ファイルHash取得部1251と、ファイルHash送信部(ファイルハッシュ送信部)1252と、ファイルリスト取得部1253と、ファイルリスト通知部1255と、を備える。ファイルHash取得部1251は、取得対象情報、例えば、取得対象のファイル名や文書名、動画題名などから、ファイルの保存時にあらかじめ保持された対応するファイルHashを取得する。ファイルHash送信部1252は、検索用ネットワーク202中の近接する1つの検索用ノードから、ファイルのHash値を検索キーとして最新のロケーションリストから検索したファイルリストを取得する。ファイルリスト通知部1255は、ファイルリスト1256を有し、ファイルリスト取得部1253が取得したファイルリストをファイル取得処理部506に通知する。
図13は、本実施形態に係るリスト検索処理部505で使用するファイルリスト1256の構成を示す図である。図13には、ファイルリスト通知部1255がファイル取得処理部506に通知するファイルリスト1256の構成を図示する。
図14は、本実施形態に係るリスト検索処理部505の処理手順を示すフローチャートである。このフローチャートは、図6のCPU610がRAM640を用いて実行し、図12の機能構成を実現する。
リスト検索処理部505は、ステップS1401において、クライアント端末203からファイルを示す取得対象情報を取得する。リスト検索処理部505は、ステップS1403において、取得した取得対象情報に対応して保持されたファイルHashを取得する。
リスト検索処理部505は、ステップS1405において、検索用ネットワーク202中の近くの検索用ノードにファイルHashを送信する。そして、リスト検索処理部505は、ステップS1407において、検索用ノードから返信される、ファイルHashを探索キーとして最新のロケーションリストを検索して得られたファイルリストの受信を待つ。ファイルリストが受信されれば、リスト検索処理部505は、ステップS1411において、ファイルリストをファイル取得処理部506に通知する。
(ファイル取得処理部)
図15は、本実施形態に係るファイル取得処理部506の機能構成を示すブロック図である。
ファイル取得処理部506は、ファイルリスト取得部1561と、部分データ情報抽出部1562と、部分データ取得部1563と、部分データ合成部1564と、を備える。さらに、ファイル取得処理部506は、ファイル復号部1566と、ファイル送出部1567と、を備える。
ファイルリスト取得部1561は、リスト検索処理部505からファイルリストを取得する。部分データ情報抽出部1562は、ファイルリストに含まれる分割された部分データのロケーションを示す部分データ情報である保存用ノードIDと部分hashとを抽出する。部分データ取得部1563は、保存用ノードIDとファイルHashと各部分データの部分Hashとを用いて、保存用ノードIDが示す保存用ノードから一斉に部分データを取得する。
部分データ合成部1564は、データ合成テーブル1565を有し、部分データ取得部1563が取得した部分データの数が所定数以上になれば、部分データを合成して暗号化ファイルを復元する。すなわち、部分データの取得にエラーが生じた場合であっても、所定数以上の部分データの取得があればファイルを復元可能である。なお、部分データ合成部1564では、保存用ノードから取得した部分データを保存時に暗号鍵に対応する復号鍵で復号する処理も行う。
ファイル復号部1566は、復元された暗号化ファイルを保存時に暗号化した暗号鍵に対応する復号鍵で復号する。なお、かかる復号鍵は、クライアントに対応して配布された暗号化鍵に対応するものである。このように構成することにより、クライアント以外の人は復号鍵をいずれかの方法で取得しない限り、ファイルを復号して復元することができない。ファイル送出部1567は、復号されたファイルをクライアント端末203に送出する。ファイルの取得完了通知を報酬処理部に通知して、読出報酬を取得してもよい。
図16は、本実施形態に係るファイル取得処理部506で使用するデータ合成テーブル1565の構成を示す図である。データ合成テーブル1565は、部分データ合成部1564が取得した部分データから暗号化されたファイルを合成するために使用される。
データ合成テーブル1565は、部分Hash1601と、読出された部分データ1602と、部分データ1602の所定数以上から合成された、暗号化されたファイルである合成ファイル1603と、復号されたファイルである復号ファイル1604とを記憶する。なお、部分データ1602の合成順序は、ブロックチェーン化された部分Hash1601から知ることができる。ブロックチェーン化されない部分Hash1601においては、合成順序を別途保存しておく必要がある。
図17は、本実施形態に係るファイル取得処理部506の処理手順を示すフローチャートである。このフローチャートは、図6のCPU610がRAM640を用いて実行し、図15のファイル取得処理部506の機能構成を実現する。
ファイル取得処理部506は、ステップS1701において、リスト検索処理部505からファイルリストを取得する。ファイル取得処理部506は、ステップS1703において、ファイルリストから分割されて保存された部分データを取得するための(部分Hash、保存用ノードID)の組合せを抽出する。ファイル取得処理部506は、ステップS1705において、(ファイルHash、部分Hash、保存用ノードID)の組合せを用いて、保存用ネットワーク201の保存用ノードから分割数の部分データを取得する。
ファイル取得処理部506は、ステップS1707において、正しく取得した部分データの取得数を数える。例えば、保存用ノードの故障、保存用ノードの部分データの削除、改ざんやエラー、通信状況によるエラーなど、その一部は部分Hashにより検証可能である。ファイル取得処理部506は、ステップS1709において、正しく取得した部分データの取得数が所定数α以上である、復元可能な数であるか否かを判定する。
部分データの取得数が所定数α以上である場合、ファイル取得処理部506は、ステップS1711において、正しく取得した部分データを合成する。ファイル取得処理部506は、ステップS1713において、合成ファイルを復号する。ファイル取得処理部506は、ステップS1715において、部分データから合成され復号されたファイルをクライアント端末203から送出する。
部分データの取得数が所定数α未満である場合、ファイル取得処理部506は、ステップS1719において、データ取得エラーをクライアント端末203に通知する。
(報酬処理部)
図18は、本実施形態に係る報酬処理部1800の機能構成を示すブロック図である。なお、報酬処理部1800は、検索用サーバに搭載されていても、クライアントアプリケーション232に組み込まれていても、あるいは、検索用ノードアプリケーションや保存用ノードアプリケーションなどに分散されていてもよい。また、報酬処理部1800を含む管理サーバを別途設ける構成であってもよい。
報酬処理部1800は、保存完了通知取得部1871と、取得完了通知取得部1872と、報酬算出アルゴリズム取得部1873と、報酬算出部1874と、報酬提供部1876と、を備える。
保存完了通知取得部1871は、保存完了した各保存用ノードから部分データの保存完了通知を取得する。取得完了通知取得部1872は、ファイル取得処理部506からファイルの取得完了通知を取得する。
報酬算出アルゴリズム取得部1873は、情報処理システム200における、保存用ネットワーク201に保存用ノードとして参加したクライアント、あるいは、検索用ネットワーク202に検索用ノードとして参加したクライアントに、どのように報酬を提供するかのアルゴリズムを取得する。本実施形態においては、例えば、ファイルの保存時に徴収する料金の内から総額2割程度の比較的少ない初期報酬を保存用ノードに提供し、その後は、所定期間でゼロとなる下降曲線で残りの8割をファイルの読み出し時に還元する報酬提供アルゴリズムを採用している。このようなアルゴリズムを用いることにより、保存用ノードの参加者が保存された部分データを削除しないように誘導している。しかしながら、報酬の提供アルゴリズムはこれに限定されない。
報酬算出部1874は、報酬テーブル1875を有し、報酬提供アルゴリズムに従って、部分データの保存完了時および部分データの読出し完了時に保存用ノードに対して提供する報酬を算出する。報酬提供部1876は、報酬算出部1874が算出した報酬を、部分データを保存あるいは読出した保存用ノードに提供する。
なお、図18には、検索用ネットワーク202の検索用ノードへの報酬については図示されてない。本実施形態においては、例えば、検索用ネットワーク202への新規参加時、あるいは、保存用ノードに対して提供する報酬の算出アルゴリズムなどの決定あるいは変更時などに行われる保存用ノードによる投票への参加に対して、報酬を提供する。
図19は、本実施形態に係る報酬処理部1800で使用する報酬テーブル1875の構成を示す図である。報酬テーブル1875は、報酬算出部1874が本実施形態のアルゴリズムで保存用ノードに報酬を提供する場合に用いる。
報酬テーブル1875は、保存対象あるいは取得対象のファイルHashによるファイルID1910に対応付けて、保存料金1902と取得または閲覧料金×回数1903とを考慮して算出された、データ保存時の報酬1904とデータ読出時の報酬1905とを記憶する。なお、データ読出時の報酬1905の変化は、初期値と減少する変化曲線とを含む。
図20は、本実施形態に係る報酬処理部1800の処理手順を示すフローチャートである。このフローチャートは、報酬処理部1800のCPUがRAMを用いて実行し、図18の報酬処理部1800の機能構成部を実現する。
報酬処理部1800は、ステップS2001において、各保存用ノードからの保存完了通知、または、ファイル取得処理部506からの取得完了通知を待つ。保存完了通知、または、取得完了通知があれば、報酬処理部1800は、ステップS2003において、部分データの保存であるかファイルの取得であるかを判定する。
部分データの保存完了であれば、報酬処理部1800は、ステップS2005において、保存料金から各保存用ノードへの報酬Xを算出する。そして、報酬処理部1800は、ステップS2007において、部分データを保存した保存用ノードに報酬Xを提供する。
一方、ファイルを取得した場合、報酬処理部1800は、ステップS2009において、保存料金(+取得料金)から各保存用ノードへの報酬Yを算出する。ここで、報酬Yは報酬Xよりも多い。そして、報酬処理部1800は、ステップS2011において、ファイルの部分データを正しく読出した保存用ノードに報酬Yを提供する。
《保存用ノード》
図21は、本実施形態に係る保存用ノード211の機能構成を示すブロック図である。
保存用ノード211は、P2Pの通信制御部2101と、入出力インタフェース2102と、保存用ノードアプリケーションダウンロード部2103と、保存用ノードアプリケーション実行部2104と、を備える。
P2Pの通信制御部2101は、クライアント端末203や保存用ネットワーク201の他の保存用ノードとのP2P通信を制御する。入出力インタフェース2102は、保存用ノード211に接続する入出力機器である、表示部2121、操作部2122、音声入出力部2123、記憶媒体2124などとの入出力を制御する。保存用ノードアプリケーションダウンロード部2103は、種々のクライアント端末が保存用ノードとして保存用ネットワーク201に参入するために保存用ノードアプリケーションをダウンリードする。保存用ノードアプリケーション実行部2104は、保存用ノードアプリケーションダウンロード部2103がダウンロードした保存用ノードアプリケーションを実行し、保存用ノードとして機能する。
保存用ノードアプリケーション実行部2104は、HashID記憶部2141と、保存用部分データ受信部2142と、ストレージ2143と、部分データ保存完了通知部2144と、を有する。さらに、保存用ノードアプリケーション実行部2104は、部分データ要求受信部2145と、部分データ送信部2146と、電子キャッシュ保存部2147と、料金送信部2148と、報酬受信部2149と、を有する。
HashID記憶部2141は、保存用ノードとして保存用ネットワーク201に参入した時に付与される保存用ノード情報のHash値であるIDを記憶する。この保存用ノードHashIDは、保存用ノードIDとして使用される。保存用部分データ受信部2142は、ファイル保存処理部503からの保存用の部分データをファイルHashおよび部分Hashと共に受信する。ストレージ2143は、保存用部分データ受信部2142が受信した(ファイルHash、部分Hash、部分データ)を、ファイルHashと部分Hashとを検索キーとして保存する。部分データ保存完了通知部2144は、ストレージ2143へのファイルHashと部分Hashとを検索キーとした部分データの保存が完了した場合に、その旨を(ファイルHash、部分Hash、保存用ノードID)の組合せと共に検索用ノードに通知する。部分データ要求受信部2145は、ファイル取得処理部506からのファイルhashと部分Hashとを検索キーとする部分データの読み出し要求を受信する。部分データ送信部2146は、ファイルHashと部分Hashとの検索キーにより検索された部分データをストレージ2143から読出して、ファイル取得処理部506に送信する。
電子キャッシュ保存部2147は、保存用ノードとして保存用ネットワーク201に参入する場合に、設定される電子キャッシュの記憶部である。料金送信部2148は、保存用ノードとして参入する場合、あるいは、他の料金支払いが必要な場合に、電子キャッシュ保存部2147から電子キャッシュを送金する。報酬受信部2149は、報酬処理部1800からの報酬を受信して、電子キャッシュ保存部2147に保存する。
図22は、本実施形態に係る保存用ノード211の動作手順を示すフローチャートである。このフローチャートは、保存用ノード211となるクライアント端末のCPUがRAMを用いて実行し、図21の機能構成を実現する。
保存用ノード211は、ステップS2211において、保存用の部分データの受信か否かを判定する。保存用の部分データの受信であると判定する場合、保存用ノード211は、ステップS2213において、取得した(ファイルhash、部分Hash、部分データ)の組合せをストレージ2143に保存する。そして、ストレージ2143への保存が完了すると、保存用ノード211は、ステップS2215において、保存完了を(ファイルhash、部分Hash、保存用ノードID)の組合せと共に、検索用ノードに通知する。
保存用の部分データの受信でないと判定する場合、保存用ノード211は、ステップS2221において、部分データの読み出し要求か否かを判定する。部分データの読み出し要求であると判定された場合、保存用ノード211は、ステップS2223において、読出し要求に伴うファイルHashと部分Hashとを受け取り、ファイルHashと部分Hashとを検索キーとしてストレージ2143に保存された部分データを検索する。保存用ノード211は、ステップS2225において、部分データがストレージ2143内に有るか否かを判定する。部分データが見つかった場合、保存用ノード211は、ステップS2227において、部分データをファイルHashおよび部分Hashと共にファイル取得処理部506に送信する。部分データが見つからなかった場合、保存用ノード211は、ステップS2229において、エラー処理を行う。
保存用の部分データの受信でもなく、部分データの要求でもないと判定する場合、保存用ノード211は、ステップS2231において、料金の送信か否かを判定する。料金の送信と判定された場合、保存用ノード211は、ステップS2233において、電子キャッシュ保存部2147から電子キャッシュを取得し、ステップS2235において、取得した電子キャッシュを送信する。保存用の部分データの受信でもなく、部分データの要求でもなく、料金の送信でもないと判定する場合、保存用ノード211は、ステップS2241において、報酬の受信か否かを判定する。報酬の受信と判定された場合、保存用ノード211は、ステップS2243において、報酬処理部1800からの報酬を受信し、ステップS2245において、受信した報酬を電子キャッシュ保存部2147に保存する。
《検索用ノード》
図23は、本実施形態に係る検索用ノード221の機能構成を示すブロック図である。なお、図23には、検索用ノード221が行う、ロケーションリスト317内の検索用ノードリストや保存用ノードリストを作成あるいは更新するための機能構成については、図面が煩雑となるため図示していない。
検索用ノード221は、P2Pの通信制御部2301と、入出力インタフェース2302と、検索用ノードアプリケーションダウンロード部2303と、検索用ノードアプリケーション実行部2304と、を備える。
P2Pの通信制御部2301は、クライアント端末203や検索用ネットワーク202の他の検索用ノードとのP2P通信を制御する。入出力インタフェース2302は、検索用ノード221に接続する入出力機器である、表示部2321、操作部2322、音声入出力部2323、記憶媒体2324などとの入出力を制御する。検索用ノードアプリケーションダウンロード部2303は、種々のクライアント端末が検索用ノードとして検索用ネットワーク202に参入するために検索用ノードアプリケーションをダウンリードする。検索用ノードアプリケーション実行部2304は、検索用ノードアプリケーションダウンロード部2303がダウンロードした検索用ノードアプリケーションを実行し、検索用ノードとして機能する。
検索用ノードアプリケーション実行部2304は、検索用ノードHashID記憶部2341と、ロケーションリスト更新指示受信部2342と、ロケーションリスト保存ストレージ2343と、部分データ保存完了通知受信部2344と、を有する。さらに、検索用ノードアプリケーション実行部2304は、ファイルリスト要求受信部2345と、ファイルリスト送信部2346と、電子キャッシュ保存部2347と、料金送信部2348と、報酬受信部2349と、を有する。
検索用ノードHashID記憶部2341は、検索用ノードとして検索用ネットワーク202に参入した時に付与される検索用ノード情報のHash値であるIDを記憶する。この検索用ノードHashIDは、検索用ノードを特定するIDとして使用される。ロケーションリスト更新指示受信部2342は、ファイル保存要求の場合に、クライアント端末203からファイルHashを受信して、ロケーションリストにファイルHashを検索キーとする空のファイルリストを追加する。ロケーションリスト保存ストレージ2343は、ロケーションリスト更新指示受信部2342により更新された最新のロケーションリストを保存し、他の検索用ノードと共有する。部分データ保存完了通知受信部2344は、部分データの保存が完了した保存用ノードから保存完了通知を、(ファイルHash、部分Hash、保存用ノードID)の組合せと共に受信して、ロケーションリスト保存ストレージ2343内の空のファイルリストに挿入する。ファイルリスト要求受信部2345は、ファイル取得要求の場合に、クライアント端末203のリスト検索処理部505から、ファイルHashを検索キーとする最新ロケーションリストからのファイルリストの読み出し要求を受信する。ファイルリスト送信部2346は、ロケーションリスト保存ストレージ2343に保持されたロケーションリストを、ファイルHashを検索キーとして検索し、見つけたファイルリストをリスト検索処理部505に送信する。
電子キャッシュ保存部2347は、検索用ノードとして検索用ネットワーク202に参入する場合に、設定される電子キャッシュの記憶部である。料金送信部2348は、検索用ノードとして参入する場合、あるいは、投票の参加するなどによる他の料金支払いが必要な場合に、電子キャッシュ保存部2347から電子キャッシュを送金する。報酬受信部2349は、報酬処理部1800からの報酬を受信して、電子キャッシュ保存部2347に保存する。
図24は、本実施形態に係る検索用ノード221の動作手順を示すフローチャートである。このフローチャートは、検索用ノード221となるクライアント端末のCPUがRAMを用いて実行し、図23の機能構成を実現する。なお、図24においても、検索用ノード221が行う、ロケーションリスト317の検索用ノードリストや保存用ノードリストを作成あるいは更新するための動作手順については、図面が煩雑となるため図示していない。
検索用ノード221は、ステップS2411において、ロケーションリスト更新指示の受信か否かを判定する。ロケーションリスト更新指示の受信であると判定する場合、検索用ノード221は、ステップS2413において、ロケーションリスト更新指示に付随して送信されたファイルHashを取得する。そして、検索用ノード221は、ステップS2413において、取得したファイルHashを検索キーとする空のファイルリストをロケーションリストに追加し、最新のロケーションリストをロケーションリスト保存ストレージ2343に保存する。
ロケーションリスト更新指示の受信でないと判定する場合、検索用ノード221は、ステップS2421において、部分データの保存完了通知か否かを判定する。部分データの保存完了通知であると判定された場合、検索用ノード221は、ステップS2423において、保存完了通知に付随するファイルHashによりロケーションリスト内の空の(あるいは未完の)ファイルリストを検索する。そして、検索用ノード221は、ステップS2425において、空の(あるいは未完の)ファイルリストに保存完了通知と共に受信した(部分Hash、保存用ノードID)の組合せを挿入する。
ロケーションリストの受信でなく、部分データの保存完了通知でもないと判定する場合、検索用ノード221は、ステップS2431において、ファイルリストの読み出し要求か否かを判定する。ファイルリストの読み出し要求であると判定された場合、検索用ノード221は、ステップS2433において、ロケーションリスト保存ストレージ2343に保持された最新のロケーションリストから、読み出し要求と共に受信したファイルHashを検索キーとしてファイルリストを検索する。そして、検索用ノード221は、ステップS2435において、ファイルリストを読み出し要求元のリスト検索処理部505に送信する。
ロケーションリストの受信でもなく、部分データの保存完了通知でもなく、ロケーションリストの要求でもないと判定する場合、検索用ノード221は、ステップS2441において、料金の送信か否かを判定する。料金の送信と判定された場合、検索用ノード221は、ステップS2433において、電子キャッシュ保存部2347から電子キャッシュを取得し、ステップS2445において、取得した電子キャッシュを送信する。
ロケーションリストの受信でもなく、部分データの保存完了通知でもなく、ロケーションリストの要求でもなく、料金の送信でもないと判定する場合、検索用ノード221は、ステップS2451において、報酬の受信か否かを判定する。報酬の受信と判定された場合、検索用ノード221は、ステップS2453において、報酬処理部1800からの報酬を受信し、ステップS2455において、受信した報酬を電子キャッシュ保存部2347に保存する。
(クライアント端末のハードウェア構成)
図25は、本実施形態に係る保存用ノード211または検索用ノード221となるクライアント端末のハードウェア構成を示すブロック図である。
図25で、CPU2510は演算制御用のプロセッサであり、プログラムを実行することで図21または図23の機能構成部を実現する。CPU(Central Processing Unit)2510は1つであっても複数であってもよい。ROM(Read Only Memory)2520は、初期データおよびプログラムなどの固定データおよびプログラムを記憶する。ネットワークインタフェース2530は、クライアント端末203や、保存用ネットワーク201や検索用ネットワーク202の他の保存用ノードや検索用ノードとの通信を制御する。
RAM(Random Access Memory)2540は、CPU2510が一時記憶のワークエリアとして使用するランダムアクセスメモリである。RAM2540には、本実施形態の実現に必要なデータを記憶する領域が確保されている。保存用ノードのデ-タ2541は、保存用ノードとして動作する場合のデータである。保存用ノードのデ-タ2541には、部分Hashや部分データが含まれる。検索用ノードのデ-タ2542は、検索用ノードとして動作する場合のデータである。検索用ノードのデ-タ2542には、ファイルHashや、ファイルHashを検索キーとするファイルリストや、登録されている保存用ノードの一覧である保存用ノードリストが含まれる。電子キャッシュデータ2543は、送金あるいは報酬受信されるデータである。送受信データ2544は、ネットワークインタフェース2530を介して送受信されるデータである。入出力データ2545は、入出力インタフェース2102や2302を介して入出力機器と入出力するデータである。
ストレージ2550は、CPU2510が使用する、本実施形態の実現に必要な以下のデータまたはプログラムが記憶されている。データベース2551は、本実施形態の実現に必要な基本データを保持する。保存用ノードまたは検索用ノードのHashID記憶部2141/2341は、ノード参入時に配布されるノードIDである。ストレージ2143/2343は、部分データやロケーションリストを保存するストレージである。電子キャッシュ保存部2147/2347は、電子キャッシュを保存するストレージである。
ストレージ2550には、以下のプログラムが格納される。クライアント端末制御プログラム2552は、保存用ノードや検索用ノードに参入したクライアント端末の全体を制御するプログラムである。保存用ノードアプリケーションプログラム2553は、保存用ノードとして機能する場合のアプリケーションプログラムである。検索用ノードアプリケーションプログラム2554は、検索用ノードとして機能する場合のアプリケーションプログラムである。
入出力インタフェース2102/2302は、入出力デバイスとのデータ入出力を制御するためのインタフェースを行なう。本実施形態においては、入出力インタフェース2102/2302には、表示部2121/2321、操作部2122/2322、音声入出力部2123/2323、記憶媒体2124/2324などが接続される。
なお、図25のRAM2540やストレージ2550には、保存用ノードや検索用ノードとして機能するクライアント端末が有する汎用の機能や他の実現可能な機能に関連するプログラムやデータは図示されていない。
本実施形態によれば、データおよびその分割された部分データがHash化されて、検索用ネットワークと保存用ネットワークとの独立した二層構造で管理されるため、高い安全性を担保しつつ、小規模ストレージの集合により大規模データサーバと同様の機能を実現することができる。
また、本実施形態によれば、ファイルは暗号化されて部分データに分割され、ファイルは部分データから合成されて復号されるので、機密性を高めることができる。また、保存するブロック数に冗長性を持たせて保存するので、所定数以上の正常なブロックがあればデータを再現できる。また、保存時の報酬と読出時の報酬とを制御することにより、保存用ノードでの部分データの喪失を防ぐことができる。
また、本実施形態によれば、インターネット上で第三者がストレージ容量を提供し、それに対して報酬を支払うことによって、効率的なインセンティブシステムによりシステム全体を維持および管理することができる。したがって、ユーザはハードディスクの空きスペースを十分に活用し、収益を得ることができる。すなわち、膨大なデータ量が発生し、これらのデータをどのように保存して、よりよいデータをどのように利用していくという問題がある中で、世界中に存在するハードディスクの大半が使用されておらず、価値のある資源が知らない間に消費されている。本実施形態においては、ユーザがソフトウェア(保存用ノードアプリケーションや検索用ノードアプリケーション)を、パソコンやスマートフォンにダウンロードあるいはインストールした後、ネットワークノード(保存用ノードおよび/または検索用ノード)になれる。したがって、ユーザは、専用のマイニングマシーンを自宅に設置することで報酬を得られることになる。
また、本実施形態によれば、システムは2層の保存用ネットワークと検索用ネットワークとに分離されて構成され、ネットワーク効率を高める同時に、マイニング閾値を下げる。マイニングマシーンはストレージと検索の要求にとって異なり、検索には、高価なコンピューティングパワーとエネルギー消費が必要だが、ストレージには、空きストレージリソースと帯域幅資源とが必要である。ストレージと検索との分離は、低コストのマイニングマシーンを使ってスステムの運営に貢献するのに役に立つ。さらに、2層ネットワークの保存と検索とが分離されることによって、ネットワークの効率を向上させる。なお、実施形態では言及されていないが、検索用ノードは、P2Pネットワーク全体の中で最も見つけられ攻撃され易い部分であるので、検索ノード用に対する保護を強化する必要があり、検索用ノードのIPアドレスを暗号化して保護している。
本実施形態によれば、ユーザのファイルデータを一定数に分割して保存し、分割された部分データが異なるノードに保存されていることを保証する。あるノードの部分データが異常な状況で消えても、他のノードのバックアップを通じて、ユーザのファイルデータを完全に復元することができる。また、保存されたデータのセキュリティを保証することができる。分散型ストレージは、戦争、自然災害、あるいは人為的な原因で発生するデータの損失を減らし、価値のあるデータを永久に保存できるように有利になる。すなわち、ファイルデータは破片に分割し、異なったノードに分布するので、データの安全性はより高く、同時に覗きされたりコピーされたりはしない。さらに、データの冗長技術を加えることによって、分割された破片データが失われた場合や、ノードがオフラインになったとしても、完全にファイルを復元することができる。同時にある破片が復元されても、一部のデータだけなのでファイルデータ全体は保護される。なお、ノードに障害が発生してアクセス不能な場合、システムはネットワークの既存の副本を新しいノードに転送することによって、ネットワーク複製プロセスを開始して、ファイルデータを復元する。
また、本実施形態によれば、保存されたデータは、デバイスによってブロックされ、暗号化されるなどの過程を経て、さらに分散型ストレージに配布され、これにより、安全性は非常に高いレベルにまで向上させて、ユーザのファイルデータはネットワーク内の他のいかなる人も覗くことができない。また、各ノードが実際に保存しているデータは、ファイルの一部分であり、その上で暗号化された方法で保存されているので、データはより安全に保護できる。ストレージノードを提供したユーザが、ファイルデータの一部分を見る機会があったとしても、意味のないデータだけであり、秘密キーを得るユーザのみが、正常にダウンロードを行うことができる。
本実施形態によれば、ファイルデータをダウンロード中に、分割された破片データが再編成されるので、速度が集中型ストレージよりもはるかに速くなる。すなわち、1つのファイルが多くの破片に分散されて世界各地のストレージノードに保存されており、ユーザがファイルをダウンロードしようとすると、該当するアドレス(ハッシュ値)のみ検索するだけで、各ストレージノードから同時にデータを取得することができる。そのため、集中型ストレージよりスピードが速くなります。また、データ伝送速度に関しても、ユーザがデータを読み取る必要がある場合、全ての保存者が同時にユーザのために自分の保存したデータを送信し、アプリケーションが受信した後自動的に合成を行う。したがって、ユーザのダウンロード速度は、主にネットワークのダウンロード帯域幅により決まる。そのため、今後急激な成長を遂げる5G技術などにより更なるデータ伝送速度が達成される。
また、本実施形態によれば、基準化された基盤技術のプラットフォームの提供を通じて、サポート基準ツールを、分散式資源を必要としているユーザに提供できる。このプラットフォームにより自分のDAPP(decentralized application:分散型アプリケーション)を開発することができる。そして、サーバやPC、モバイルストレージなどの集中型ストレージと比較して、本実施例のP2P分散型ストレージは、ストレージとインターネットの効率を向上させ、分散型技術を通じてストレージの容量とネットワークリソースの浪費を解決した。すなわち、データの自動分配、柔軟な拡張の実現、運営コストの低減、資源浪費を避けることができた。例えば、それに対するコストは従来のクラウドストレージだと10TM(Translation Memory)あたり月間コストは100ドルだが、本実施形態のP2P分散型ストレージに移行することによって月間コストを1/5に抑えることができた。
さらに詳細には、例えば、DHT(Distributed Hash Table:分散型ハッシュテーブル)を用いることで、Hashキー値によってユニークと識別することできる情報を、ある条件/プロトコルに従って複数のノードに保存される。これにより中央集権型サーバなどの単一故障状態でネットワーク全体が麻痺することを効果的に避けることができる。中央ノードサーバと違って、DHTによるネットワーク内の各ノードはネットワーク全体の情報を維持する必要がなく、隣接する後続ノード情報を保存するだけなので、帯域幅の占有および資源消費を大幅に減少する。また、DHTによるネットワークはキーワードの最も近いノードに冗長データもバックアップし、単一ノードの障害を回避できる。
[第4実施形態]
次に、本発明の第4実施形態に係る情報処理システムについて説明する。本実施形態に係る情報処理システムは、上記第3実施形態と比べると、それぞれ独立したクライアント端末とクライアントアプリケーションを有するアプリケーションサーバとを有する点で異なる。その他の構成および動作は、第2実施形態と同様であるため、同じ構成および動作については同じ符号を付してその詳しい説明を省略する。
《情報処理システムの構成》
図26は、本実施形態に係る情報処理システム2600の構成を示すブロック図である。図26においては、情報処理システム2600がアプリケーションサーバ2633を備え、アプリケーションサーバ2633が、データ保存処理、リスト保存処理、リスト検索処理およびデータ取得処理を含む処理を実行する。
図26においては、クライアントアプリケーション232がアプリケーションサーバ2633に変更されている。
なお、図2や図26においては、クライアントアプリケーション232やアプリケーションサーバ2633のそれぞれがファイルの保存や取得の全機能を果たすように図示しているが、これらの機能をクライアント端末203の処理能力に応じて振り分けるよう構成してもよい。
本実施形態によれば、処理能力の比較的低いクライアント端末であっても、あるいは、通信能力が比較的低いシステムであっても、ファイルの分散保存とその読み出し再生を行う情報処理システムが実現できる。
[第5実施形態]
次に、本発明の第5実施形態に係る情報処理システムについて説明する。本実施形態に係る情報処理システムは、上記第3実施形態および第4実施形態と比べると、クライアント端末、保存用ノードおよび検索用ノードが既存のIPアドレスを用いたHTTPに代わるHashアドレスを用いたプロトコルで通信する点で異なる。その他の構成および動作は、第3実施形態または第4実施形態と同様であるため、同じ構成および動作については同じ符号を付してその詳しい説明を省略する。
《情報処理システムの構成》
図27は、本実施形態に係る情報処理システム2700の構成を示すブロック図である。図27においては、Hashアドレスを用いたプロトコルをIPWBで示している。すなわち、プロトコルとしてIPWB://…を用いている。
図27の情報処理システム2700においては、保存用ネットワーク2701と、検索用ネットワーク2702と、クライアントアプリケーション2732との間において、IPWB://…で表現されるHashアドレスによるP2P通信が可能となっている。
本実施形態によれば、非集権分散ネットワークによる分散型ストレージが実現される。すなわち、本実施形態は、多数のP2P接続を同時に転送することができる。このような動的な柔軟性と展延性により、システムのスケーラビリティが拡張上限なしに実現する。そして、将来的に、本実施形態のシステムは、P2P分散型クラウドストレージのみの提供だけではなく、そのストレージを利用したWebページを開設することも可能になる。すなわち、本実施形態が提供するプラットフォームにおいては、ユーザ自らがP2P分散ストレージのサービス事業者になることができる。サービス事業者は、本実施形態のブロックチェーンを利用し、独自サービスの決済で利用するトークンを発行することができる。そして、トークンの発行者は、ストレージの利用料金体系や、ストレージ容量提供者への報酬体系を自由に設定することにより、サービスにオリジナリティを出すこともできる。
[他の実施形態]
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明の技術的範囲で当業者が理解し得る様々な変更をすることができる。また、それぞれの実施形態に含まれる別々の特徴を如何様に組み合わせたシステムまたは装置も、本発明の技術的範囲に含まれる。
また、本発明は、複数の機器から構成されるシステムに適用されてもよいし、単体の装置に適用されてもよい。さらに、本発明は、実施形態の機能を実現する情報処理プログラムが、システムあるいは装置に供給され、内蔵されたプロセッサによって実行される場合にも適用可能である。したがって、本発明の機能をコンピュータで実現するために、コンピュータにインストールされるプログラム、あるいはそのプログラムを格納した媒体、そのプログラムをダウンロードさせるWWW(World Wide Web)サーバも、プログラムを実行するプロセッサも本発明の技術的範囲に含まれる。特に、少なくとも、上述した実施形態に含まれる処理ステップをコンピュータに実行させるプログラムを格納した非一時的コンピュータ可読媒体(non-transitory computer readable medium)は本発明の技術的範囲に含まれる。