"登録処理プログラムと検索処理プログラムを記憶部に記憶する管理サーバと、登録依頼プログラムを記憶部に記憶する登録エージェントと、検索依頼プログラムを記憶部に記憶する検索エージェントがネットワーク経由で連携する検索処理システムであって、登録エージェントは、3つの素数を生成し、これらの積から公開パラメータNを構成し、qを位数とする群の元を秘密鍵として記憶する鍵記憶部と、pとqを位数とする群の元を公開パラメータとして記憶するデータ記憶部を備え、登録エージェントは、検索用の平文インデックスを上記秘密鍵と上記公開パラメータにより、検索用の暗号化インデックスへ変換し、この暗号化インデックスを管理サーバの記憶部へ登録し、検索エージェントは、検索用の平文トークンを上記秘密鍵と上記公開パラメータにより、検索用の暗号化トークンへ変換し、この暗号化トークンを管理サーバの記憶部へネットワーク経由で送信し、管理サーバは、受信した暗号化トークンが、記憶部に格納された暗号化インデックスに該当するかを、前記暗号化トークンと前記暗号化インデックスを双線形写像することによって得られる検索結果データを用いて判定すること、を特徴とする検索処理ステム。請求項1記載の検索処理システムであって、前記暗号化インデックスは、暗号化された平文インデックスの情報と、2つの乱数情報の排除用のデータから構成され、前記暗号化トークンは、暗号化された平文トークンの情報と、2つの乱数情報の排除用のデータから構成され、管理サーバは、前記暗号化インデックスと前記暗号化トークンがそれぞれ保有する乱数情報の排除用のデータを用い、暗号化された平文インデックスの情報と暗号化された平文トークンの情報との照合の有無を示す情報を抽出し、前記暗号化トークンが前記インデックスに該当するかを判定すること、を特徴とする検索処理ステム。請求項2記載の検索処理システムであって、前記平文インデックスから、前記暗号化インデックスへの変換は、群Gqの元の指数に平文インデックスに関する情報を埋め込み、さらに公開パラメータとして検索エージェントの記憶部に記憶された群Gpの元と群Grの元を、群Gqの元に掛け合わせていること、を特徴とする検索処理システム。請求項3記載の検索処理システムであって、前記平文トークンから、前記暗号化トークンへの変換は、双線形群Gqの元の指数に平文トークンのデータ情報を埋め込み、さらに公開パラメータとして検索エージェントの記憶部に記憶された双線形群Gpの元と双線形群Grの元を、双線形群Gqの元に掛け合わせていること、を特徴とする検索処理システム。請求項4記載の検索処理システムであって、前記検索エージェントは、前記平文トークンに対応するトークンベクトルに直交する直交ベクトルを作成し、前記平文インデックスに対応するインデックスベクトルとの内積を作成すること、を特徴とする検索処理システム。請求項5記載の検索処理システムであって、前記登録エージェントは、平文インデックスを部分一致検索用の前記暗号化インデックスに変換する、インデックス暗号化部を備え、前記検索エージェントは、ワイルドカードが入力された前記平文トークンを、前記ワイルドカードに対応する部分を間引いた前記暗号化トークンに変換し、前記登録サーバは、前記暗号化インデックスを管理サーバの記憶部に格納し、格納した上記暗号化インデックスを前記暗号化トークンが該当するかを判断すること、を特徴とする検索処理システム。請求項6記載の検索処理システムであって、前記登録サーバは、暗号化したデータを前記管理サーバの記憶部への登録を依頼し、前記管理サーバは、前記暗号化したデータを上記管理サーバの前記記憶部へ記憶し、前記暗号化インデックスは、記憶した前記暗号化したデータのアドレス値と関連付けた状態で前記記憶部へ記憶されること、を特徴とする検索処理ステム。請求項7記載の検索処理システムであって、前記管理サーバは、前記暗号化トークンが前記インデックスに該当するかを判定し、該当すると判定した場合には、前記暗号化インデックスに関連付けられたアドレス値に記憶されている、前記暗号化されたデータを記憶部からロードし、前記暗号化されたデータを検索結果の一部とすること、を特徴とする検索処理ステム。請求項8記載の検索処理システムであって、前記検索エージェントは、前記管理サーバから受信した前記検索結果を復号し、前記暗号化されたデータを抽出すること、を特徴とする検索処理ステム。データを登録するための登録エージェントと、データを検索するための検索エージェントと、データを管理するための管理サーバとがネットワークを介して接続された検索処理システムにおける部分一致検索方法であって、前記登録エージェントは、所望のデータ及び前記データに関するインデックスを前記管理サーバに登録する利用者が入力した公開パラメータである整数Nを素因数分解して3つの素数を取得し、前記素数を用いて、前記管理サーバに登録するデータ及びインデックスを暗号化し、前記暗号化されたデータ及びインデックスを前記管理サーバに送信し、前記管理サーバは、前記暗号化されたデータ及びインデックスを互いに関連付けて記憶部に格納し、前記検索エージェントは、データ検索の利用者が入力した、部分文字列からなる検索用トークンを受け取り、前記公開パラメータから生成した3つの前記素数を用いて、トークンを暗号化して前記管理サーバに送信し、前記管理サーバは、前記検索エージェントから受け取った前記暗号化されたトークンと前記暗号化されたインデックスとの照合を、双線形写像を用いて実行することによって検索を行い、前記照合が成功すれば、前記暗号化されたインデックスと関連付けられた前記暗号化データを検索し、前記検索された暗号化データを前記検索エージェントに送信し、前記検索エージェントは、前記管理サーバから受信した前記暗号化されたデータを、前記公開パラメータから生成した3つの前記素数を用いて、複号化して平文の検索結果を出力して前記データ検索の利用者に提示する、ことを特徴とする部分一致検索方法。前記検索用トークンの平文にワイルドカードが含まれている場合は、ワイルドカードに対応した部分を間引いて、前記暗号化トークンを生成することを特徴とする請求項10記載の部分一致検索方法。前記部分一致検索方法において、前記公開パラメータを素因数分解して第1、第2及び第3の素数を取得し、前記第1の素数に基づいて生成される第1の群によって、前記インデックスを暗号化するための第1の因子を生成し、前記第2の素数に基づいて生成される第2の群によって、前記暗号化インデックスの元となる第1の情報を生成し、前記トークンの文字列をベクトル化したトークンベクトルに直交するベクトルと前記第2の群によって前記暗号化トークンの元となる第2の情報を生成し、前記第3の素数に基づいて生成される第3の群によって前記トークンを暗号化するための第2の因子を生成する、ことを特徴とする請求項10記載の部分一致検索方法。前記部分一致検索方法は、さらに、前記第1の因子、前記第1の情報、及び前記第2の因子に関連して生成された第1の撹乱の因子を用いて、前記平文インデックスを暗号化した前記暗号化インデックスを生成し、前記第2の情報、前記第2の因子、及び前記第1の因子に関連して生成された第2の撹乱の因子を用いて、前記平文トークンを暗号化した前記暗号化トークンを生成し、前記インデックス及び前記トークンについて、それぞれの暗号化を解除するための暗号化解除因子を生成する、ことを特徴とする請求項12記載の部分一致検索方法。前記部分一致検索方法は、さらに、前記生成した暗号化インデックス、暗号化トークン、及びそれぞれの前記暗号化解除用の因子を用いて、前記暗号化インデックスと前記暗号化トークンとの照合が成功したかどうかを判定するための検索結果データを生成する、ことを特徴とする請求項13記載の部分一致検索方法。非特許文献1、非特許文献2の技術は共に、サーバに予め預託するデータ検索用のインデックスと、クライアントが検索時に送信する検索トークンの双方を確率的に暗号化し、安全性を高めている。しかしながら、非特許文献1の技術では、安全性が高い半面、データの完全一致検索処理のみを検索機能の対象としており、部分一致検索ができない。例えば、データabcを検索する場合、その部分文字列であるabを検索トークンとしても、abcを検索できない。一方、非特許文献2の技術では、暗号文のデータサイズは、4つの素数の積で構成される、公開パラメータNに依存する。ここで、Nの素因子であるp,q,r,sはそれぞれが十分に大きな数でなければならない。暗号化可能なメッセージのデータサイズはNの素因子であるqのデータサイズに依存する為、非特許文献2の技術では、実際に暗号化できるメッセージの効率が低いことが課題として知られている。暗号化可能なメッセージの効率=q/N=1そのため、高い安全性を実現しながら、部分一致検索を可能にし、更に暗号化可能なメッセージの効率が高い、暗号技術が必要とされている。本発明の目的は、検索用のインデックスを暗号化したまま、部分一致検索を可能にするシステムおよび方法を提供することにある。前記目的を達成するために、本発明は、データと登録処理プログラムと検索処理プログラムを記憶部に記憶する管理サーバと、管理サーバに暗号化データと登録依頼プログラムを登録する登録エージェントと、検索依頼プログラムを記憶部に記憶する検索エージェントとがネットワーク経由で連携する検索処理システムを提供する。登録エージェントは、3つの素数を生成し、これらの積から公開パラメータNを構成し、これらを位数群を構成する要素である元aに対しan≡e単位元を満たす最小の整数nとする双線形群上の元により、検索用のインデックスとデータを暗号化し、暗号化した検索用のインデックスは内部に2つの乱数情報の排除用データを保有し、その暗号化した検索用のインデックスを管理サーバに登録するよう依頼する。検索エージェントは、双線形群上の元により、検索用のトークンtoken,ソースコードや平文を構成する単語や記号からなる文字列を暗号化し、暗号化した検索用のトークンは内部に2つの乱数情報の排除用データを保有し、その暗号化した検索用のトークンを用いた検索処理を管理サーバに依頼する。管理サーバは、暗号化された検索用のインデックスとデータを記憶部に格納し、検索を依頼された際には、暗号化された検索用のインデックスと、検索用のトークンの内部にそれぞれ保有する乱数情報の排除用のデータを用い、検索用のトークンが検索用のインデックスに該当するかを判定し、該当する場合は、管理サーバの記憶部に格納された暗号化されたデータを検索エージェントに検索結果として送信し、検索エージェントはこれを復号して出力する。登録エージェントは、検索用のインデックスを高速に暗号化できる。また、検索エージェントは、インデックスを暗号化したまま、その部分一致検索を管理サーバに委託できる。以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態において、同一の部材には原則として同一の符号を付け、繰り返しの説明は省略する。実施の形態1システム構成図1は、本発明の第一の実施の形態である検索処理システムの概略図である。図示するように、検索処理システムは、登録エージェント100と、検索エージェント200と、管理サーバ300とを備え、登録エージェント100と管理サーバ300、検索エージェント200と管理サーバ300は、ネットワーク400を介して相互に情報を送受信できるように設計されている。本実施形態における登録エージェント100は、データと検索用のインデックスを管理サーバ300に送信し、受信結果を管理サーバから受信する送受信装置として機能し、検索エージェント200は、検索処理委託用のトークンを管理サーバ300に送信し、その検索結果を管理サーバ300から受信する送受信装置として機能し、管理サーバ300は、データを記憶し、また受信したトークンを用いてデータを検索する送受信装置として機能する。図2は、登録エージェント100の機能概略図である。図示するように、登録エージェント100は、制御部110と、記憶部120と、入力部101と、出力部102と、通信部103とを備える。記憶部120は、データ記憶部130と、鍵記憶部150と、プログラム記憶部160と、一時情報記憶部180とを備える。データ記憶部130には、管理サーバ300に送信するデータである、送信文に関する情報が記憶される。本実施形態においては、入力部101を介して、受け付けた平文データ131に関する情報と、検索処理に用いる平文インデックス132に関する情報とを暗号化後に管理サーバ300に登録する、平文データ131に関する情報と、パラメータ137に関する情報が記憶される。また、インデックス暗号化部113が出力する暗号化インデックス135に関する情報と、データ暗号化部117が出力する暗号化データ134に関する情報も記憶される。鍵記憶部150には、安全性の観点から登録エージェント100が秘密に管理すべき秘密鍵151に関する情報が記憶される。プログラム記憶部160には、鍵生成、暗号化、復号などの暗号処理全般を含めた、暗号化データ134と暗号化インデックス135の登録処理に関するプログラムが記憶されている。暗号化データ134と暗号化インデックス135の登録処理については、図6を用い、後で詳しく説明する。一時情報記憶部180には、制御部110などの処理に必要な情報が記憶される。制御部110は、全体処理部111と、鍵設定部112と、インデックス暗号化部113と、エンコード部115と、乱数生成部116と、データ暗号化部117と、を備える。全体処理部111は、プログラム記憶部160から、暗号化データ134と暗号化インデックス135の登録処理に関するプログラムをロードし、登録エージェント100における各モジュール間の制御を行い、さらに簡単な演算処理を実施する。例えば、全体処理部111は、入力部101を介して、入力を受け付けた情報を、データ記憶部130に、平文データ131や平文インデックス132として記憶する処理を行う。また、本実施形態において、全体処理部111は、平文データ131を、出力部102に表示する処理を行う。また、本実施形態において、全体処理部111は、データ記憶部130に記憶した平文データ131を読み込み、データ暗号化部117に入力し、出力されたデータを、データ記憶部130に、暗号化データ134として記憶する処理を行う。また、本実施形態において、全体処理部111は、データ記憶部130に記憶した平文インデックス132を読み込み、インデックス暗号化部113に入力し、出力されたデータを、データ記憶部130に、暗号化インデックス135として、記憶する処理を行う。また、本実施形態において、全体処理部111は、暗号化インデックス135と暗号化データ134を、通信部103を介して、管理サーバ300に送信し、受信結果を管理サーバ300から受信する処理を行う。さらに、本実施形態において、全体処理部111は、管理サーバ300より、通信部103を介して受信した暗号化データ134を、一時情報記憶部180に記憶する処理と、出力部102に表示する処理を行う。鍵設定部112は、秘密鍵151と公開パラメータを生成する処理を行う。例えば、本実施形態において、全体処理部111がセキュリティパラメータを入力し、鍵設定部112が秘密鍵151を出力する処理を行う。なお、全体処理部111はパラメータ137の一部として記憶されたセキュリティパラメータをロードしてもよいし、入力部101を経由して鍵設定部112に入力してもよい。データ暗号化部117用の秘密鍵151の実現方法については、標準的な鍵生成アルゴリズム暗号、DES暗号などの実装により実現可能であるため、その詳細な説明は省く。インデックス暗号化部113と、検索エージェント200のトークン暗号化部213が用いる秘密鍵151と公開パラメータの実現方法については、図8を用い、後で詳しく説明する。インデックス暗号化部113は、エンコード部115と連携し、平文インデックス132を暗号化する処理を行う。平文インデックス132とは、平文データ131を検索する際にその平文データ131の特徴を指すデータである。例えば、文字列の場合、平文データTomiscryptographicresearcherから、その特徴的な文字列であるTomやresearcherを平文インデックスとすればよい。もちろん、平文インデックス132はデータ内の完全な単語でなくてもよく、上記の場合、例えば、resを平文インデックス132としてもよい。また、平文データ131内に含まれていないデータを平文インデックス132としてもよく、上記の場合、例えば文字列cryptographyを平文インデックス132としてよい。本実施形態においては、全体処理部111が平文インデックス132と秘密鍵151をインデックス暗号化部113に入力し、インデックス暗号化部113は暗号化インデックス135を出力する処理を行う。暗号化インデックス135の実現方法については、図9を用い、後で詳しく説明する。エンコード部115は、入力された平文インデックス132を、固定長のデータに変換する処理を行う。本実施形態において、全体処理部111がエンコード部115に平文インデックス132を入力し、エンコード部115は入力された平文データ131をnlog2<q>ビットのインデックスベクトルに変換し、出力する処理を行う。ただし、<>は小数点第一位の切り上げを意味する。インデックスベクトルはlog2<q>ビットの要素データ毎にn分割されている。また、それぞれの要素データは平文インデックス132を構成する文字列に含まれる各文字に対応した値であり、0以上q未満の整数で表わされる。エンコード部115の実現方法については、例えば、任意長の入力データを、固定長のデータへ変換する、標準的な暗号ハッシュ関数アルゴリズムSHA-1、SHA-2などの実装により実現可能であるため、その詳細な説明は省く。乱数生成部116は、擬似乱数を出力する処理を行う。例えば、乱数生成部116は、温度、時間、電力量、等の物理現象から、乱数を出力する。本実施形態において、乱数生成部116は、全体処理部111から出力命令を受け、乱数を出力する。乱数生成部116の実現方法については、標準的な乱数生成器により実現可能であるため、その詳細な説明は省く。なお、乱数生成部116の実現にあたって、乱数生成器の代わりに、擬似乱数生成器を用いてもよい。例えば、全体処理部111が秘密鍵151を擬似乱数生成器に入力し、擬似乱数生成器が擬似乱数を出力するようにしてもよい。データ暗号化部117は、入力された平文データ131を暗号化する処理を行う。例えば、本実施形態において、全体処理部111が平文データ131と秘密鍵151をデータ暗号化部117に入力し、データ暗号化部117は暗号化データ134を出力する処理を行う。なお、データ暗号化部117の実現方法については、一般的な暗号化アルゴリズムAES暗号、DES暗号などの実装により実現可能であるため、その詳細な説明は省く。図3は、検索エージェント200の機能概略図である。図示するように、検索エージェント200は、制御部210と、記憶部220と、入力部201と、出力部202と、通信部203とを備える。記憶部220は、データ記憶部230と、鍵記憶部250と、プログラム記憶部260と、一時情報記憶部280とを備える。データ記憶部230には、管理サーバ300に送信するデータである送信文に関する情報が記憶される。本実施形態において、入力部201を介して受け付けた平文トークン233に関する情報と、パラメータ237に関する情報が記憶される。また、トークン暗号化部213が出力する暗号化トークン236に関する情報と、ネットワーク400経由で管理サーバ300から送信された暗号化データ712と、データ復号部218が出力する平文データ231に関する情報も記憶される。鍵記憶部250には、安全性の観点から検索エージェント200が秘密に管理すべき秘密鍵251に関する情報が記憶される。プログラム記憶部260には、鍵生成、暗号化、復号などの暗号処理全般を含めた、暗号化トークン236による検索処理に関するプログラムが記憶されている。暗号化トークン236による検索処理については、図10を用い、後で詳しく説明する。一時情報記憶部280には、制御部210などの処理に必要な情報が記憶される。制御部210は、全体処理部211と、トークン暗号化部213と、エンコード部215と、乱数生成部216と、データ復号部218とを備える。全体処理部211は、プログラム記憶部260から、暗号化トークン236による検索処理に関するプログラムをロードし、検索エージェント200における各モジュール間の制御を行い、さらに簡単な演算処理を実施する。例えば、全体処理部211は、入力部201を介して、入力を受け付けた情報を、データ記憶部230に、平文トークン233として記憶する処理を行う。また、本実施形態において、全体処理部211は、平文トークン233を、出力部202に表示する処理を行う。また、本実施形態において、全体処理部211は、データ記憶部230に記憶した平文トークン233を読み込み、トークン暗号化部213に入力し、出力されたデータを、データ記憶部230に、暗号化トークン236として記憶する処理を行う。また、本実施形態において、全体処理部211は、暗号化トークン236を、通信部203を介して管理サーバ300に送信し、データの検索結果を管理サーバ300から受信する処理を行う。なお、データの検索結果の一部を、暗号化データ234として、データ記憶部230に記憶する処理を行う。また、本実施形態において、全体処理部211は、データ記憶部230に記憶した暗号化データ231を読み込み、データ復号部218に入力し、出力されたデータを、データ記憶部230に、平文データ231として一時情報記憶部280に記憶する処理と、出力部202に表示する処理を行う。トークン暗号化部213は、エンコード部215と連携し、平文トークン233を暗号化する処理を行う。平文トークン233とは、データである。平文トークン233は、researcher等の完全な単語でもよく、また、resのように部分文字列を平文トークン233としてもよい。さらに、平文トークン233にはワイルドカードを用いてもよく、例えばresearcherの代わりにreearchrとしてもよい。本実施形態において、全体処理部211が平文トークン233と秘密鍵251をトークン暗号化部213に入力し、トークン暗号化部213は暗号化トークン236を出力する処理を行う。暗号化トークン236の実現方法については、図11を用い、後で詳しく説明する。エンコード部215は、入力された平文トークン233を、固定長のデータに変換する処理を行う。本実施形態において、全体処理部211がエンコード部215に平文トークン233を入力し、エンコード部215は入力された平文トークン233をnlog2<q>ビットのトークンベクトルに変換し、出力する処理を行う。ただし、<>は小数点第一位の切り上げを意味する。エンコード部215の実現方法については、例えば、任意長の入力データを、固定長のデータへ変換する、標準的な暗号ハッシュ関数アルゴリズムSHA-1、SHA-2などの実装により、エンコード部215が実現可能であるため、その詳細な説明は省く。乱数生成部216は、擬似乱数を出力する処理を行う。例えば、乱数生成部216は、温度、時間、電力量、等の物理現象に関する情報から、乱数を出力する。本実施形態において、乱数生成部216は、全体処理部211から出力命令を受け、乱数を出力する。乱数生成部216の実現方法については、標準的な乱数生成器により実現可能であるため、その詳細な説明は省く。なお、乱数生成部216の実現にあたって、乱数生成器の代わりに、擬似乱数生成器を用いてもよい。例えば、全体処理部211が秘密鍵251を擬似乱数生成器に入力し、擬似乱数生成器が擬似乱数を出力するようにしてもよい。データ復号部218は、入力された暗号化データ234を復号する処理を行う。例えば、本実施形態において、全体処理部211が暗号化データ234と秘密鍵251をデータ復号部218に入力し、データ復号部218は平文データ231を出力する処理を行う。なお、データ復号部218の実現方法については、一般的な暗号化アルゴリズムAES暗号、DES暗号などの実装により実現可能であるため、その詳細な説明は省く。図4は、管理サーバ300の機能概略図である。図示するように、管理サーバ300は、制御部310と、記憶部320と、入力部301と、出力部302と、通信部303とを備える。記憶部320は、プログラム記憶部360と、データ記憶部330と、一時情報記憶部380とを備える。データ記憶部330には、通信部303を介して、登録エージェント100から受信したデータに関する情報が記憶される。本実施形態において、通信部303を介して、受信した暗号化データ134と暗号化インデックス135に関する情報が記憶される。また、パラメータ337に関する情報が記憶される。また、通信部303を介して、検索エージェント200から受信したデータに関する情報が、記憶される。本実施形態において、通信部303を介して、受信した暗号化トークン236に関する情報が一時的に記憶される。プログラム記憶部360には、暗号化データ検索処理に関するプログラムが記憶されている。暗号化データ検索処理については、図12を用い、後で詳しく説明する。一時情報記憶部380には、制御部310での処理で必要となる情報が記憶される。制御部310は、全体処理部311と、検索部312とを備える。全体処理部311は、プログラム記憶部360から、暗号化データ検索処理に関するプログラムをロードし、管理サーバ300における各モジュール間の制御を行い、さらに簡単な演算処理を実施する。例えば、全体処理部311は、通信部303を介して、暗号化データ134、暗号化インデックス135を登録エージェント100から受信し、データ記憶部330に、記憶する処理を行う。暗号化データ134と暗号化インデックス135の保管方法については、図7Aと図7Bを用い、後で詳しく説明する。また、本実施形態において、全体処理部311は、通信部303を介して、暗号化トークン236を、検索エージェント200から受信し、暗号化トークン336として、データ記憶部330に記憶する処理を行う。また、本実施形態において、全体処理部311は、暗号化トークン336と暗号化インデックス701を検索部312に入力し、検索部312が出力したデータを、通信部303を介して、検索エージェント200へ送信する処理を行う。さらに、全体処理部311は、検索エージェント200または登録エージェント100より、通信部303を介して受信したデータに関する情報を、一時情報記憶部380に記憶する処理と、出力部302に表示する処理を行う。以上に示した登録エージェント100、検索エージェント200、管理サーバ300は、例えば、図5コンピュータの概略図に示すような、CPU501と、メモリ502と、HDD等の外部記憶装置503と、CDやDVD等の可搬性を有する記憶媒体508に対して情報を読み書きする読書装置507と、キーボードやマウス等の入力装置506と、ディスプレイ等の出力装置505と、通信ネットワークに接続するためのNIC等の通信装置504と、これらを連結するシステムバス等の内部通信線と、を備えた一般的なコンピュータで実現できる。例えば、記憶部120、220、320は、CPU501がメモリ502または外部記憶装置503を利用することにより実現可能であり、制御部110、210、310と制御部110、210、310に含まれる各処理部は、外部記憶装置503に記憶されている所定のプログラムをメモリ502にロードしてCPU501で実行することで実現可能であり、入力部101、201、301は、CPU501が入力装置506を利用することで実現可能であり、出力部102、202、302は、CPU501が出力装置505を利用することで実現可能であり、通信部103、203、303は、CPU501が通信装置504を利用することで実現可能である。この所定のプログラムは、読書装置507を介して記憶媒体508から、あるいは、通信装置504を介してネットワーク400から、外部記憶装置503に記憶され、それから、メモリ502上にロードされて、CPU501により実行されるようにしてもよい。また、読書装置507を介して、記憶媒体508から、あるいは通信装置504を介してネットワーク400から、メモリ502上に直接ロードされ、CPU501により実行されるようにしてもよい。処理手順図13を用いて本実施例の部分一致検索処理の概要を説明する。登録エージェント100は、所望のデータ及びそのデータに関するインデックスを管理サーバ300に登録する利用者が入力した公開パラメータN整数を素因数分解して3つの素数p、q、rを得る。これらの素数を用いて、管理サーバ300に登録するデータ及びインデックスをそれぞれ暗号化し、暗号化されたデータ及びインデックスを管理サーバ300に送信する。管理サーバ300は、暗号化されたデータ及びインデックスを互いに関連付けて記憶部320に格納する。検索エージェント200は、データ検索の利用者から、部分文字列からなる検索用トークンを受け取り、上記の公開パラメータから生成した3つの素数を用いて、トークンを暗号化して管理サーバ300に送信する。なお、検索用トークンの平文にはワイルドカードが含まれていてもよく、ワイルドカードを考慮した暗号化が行われる。管理サーバ300は、検索エージェント200から受け取った暗号化されたトークンと暗号化されたインデックスとの照合を、双線形写像を用いて実行することによって検索を行い、照合が成功すれば、暗号化されたインデックスと関連付けられた暗号化データを検索して、検索結果を検索エージェント200に送信する。検索エージェント200は、管理サーバ300から受信した暗号化されたデータを、上記の公開パラメータから生成した3つの素数を用いて、複号化して平文の検索結果を出力してデータ検索の利用者に提示する。図6は、本実施形態において、ネットワーク400を経由し、登録エージェント100が送信した暗号化インデックス135を、管理サーバ300が、記憶部320へ登録する処理を示すシーケンス図である。登録エージェント100の全体処理部111は、平文データ131をロードし、データ暗号化部117へ入力する、また、全体処理部111は、平文インデックス132をロードし、インデックス暗号化部113へ入力する。登録エージェント100のデータ暗号化部117は、記憶部120に格納された秘密鍵151をロードし、平文データ131を暗号化データ134に変換する。なお、変換方法については、標準的な暗号化アルゴリズムの実装により、実現可能であるため、その詳細な説明は省く。また、登録エージェント100のインデックス暗号化部113は、記憶部120に格納された秘密鍵151とパラメータ137をロードし、平文インデックス132を暗号化インデックス135に変換する。なお、変換方法については、図9を用い、後で詳しく説明する。登録エージェント100の通信部は、データ暗号化部117より出力された暗号化データ134と、インデックス暗号化部113より出力された暗号化インデックス135を、ネットワーク400を経由し、管理サーバ300へ送信する処理を行う。管理サーバ300の通信部303から、ネットワーク400を経由し、登録エージェント100が送信した暗号化データ134と暗号化インデックス135を受信する処理を行う。管理サーバ300の全体処理部311は、暗号化データ134と暗号化インデックス135を記憶部320へ格納する。格納にあたっては、図7Bに示すように、暗号化データ134はデータテーブルの一部として格納される。また、送信された暗号化インデックス135は、共に送信された暗号化データ134を格納した記憶部320のアドレスと関連付けられて、インデックステーブルの一部として格納される図7AのI1、I2、I3、I4、I5がそれぞれ暗号化インデックス701に該当する。また、address1は暗号化データE1のアドレスを示す値であり、同様に、address2は暗号化データE2のアドレスを示す値、address3は暗号化データE3のアドレスを示す値である。。管理サーバ300は、暗号化データ134と暗号化インデックス135の記憶部320への格納処理を終えた場合、登録成功とし、通信部303から、ネットワーク400を経由し、登録成功を示すデータを登録エージェント100へ送信する処理を行う。また、記憶容量の制限等を理由に、暗号化データ134または暗号化インデックス135の記憶部320への格納処理が終了できなかった場合、登録失敗とし、通信部303から、ネットワーク400を経由し、登録失敗を示すデータを登録エージェント100へ送信する処理を行うS606。登録エージェント100の通信部103から、ネットワーク400を経由し、管理サーバ300が送信した登録成功または登録失敗を示すデータを受信する処理を行う。上記の処理により、登録エージェント100は、ネットワーク400経由で、管理サーバ300に暗号化データ134と暗号化インデックス135の記憶部120への格納を指示し、その処理結果を確認できる。なお、上記の処理手順は、固定されたものではなく、処理手順を変更して実施してもかまわない。例えば、登録エージェント100は、暗号化データ134を作成、送信後に、暗号化インデックス135を作成、送信するようにS602とS603を変更してもよい。また、管理サーバ300も、暗号化データ134と暗号化インデックス135の受信、記憶処理を個別に実施してもよい。同様に、他の処理内容を変更してもよい。例えば、登録エージェント100は複数の暗号化データ134と暗号化インデックス135の作成、送信処理を一括で実施してもよい。また、管理サーバ300も、複数の暗号化データ134と暗号化インデックス135の受信、記憶処理を一括で実施してもかまわない。図14を用いて本実施例の検索結果データ生成処理の概要を説明する。本実施例では、インデックスの暗号化とトークンの暗号化をそれぞれ強化するため、互いに、相手の暗号化のための因子によって自身の暗号化データを撹乱する。即ち、登録エージェント100で行われるインデックスの暗号化と検索エージェント200で行われるトークンの暗号化といったそれぞれ独立して行われる暗号化で使用される因子によって、互いに相手の暗号化データを撹乱することにより、暗号化のプロセスが自身の中で閉じないようにすることで暗号化の秘匿性を高めている。図14に示した種々の記号の詳細な説明は後述する。1暗号化のための因子及び情報の生成まず、図14の左側に示すように、後述する図8、9及び11の処理では、a群Gpによってインデックスを暗号化するための因子が生成され、b群Gqによって暗号化インデックスの元となる情報が生成され、cトークンの文字列をベクトル化したトークンベクトルに直交するベクトルと群Gqによって暗号化トークンの元となる情報が生成され、d群Grによってトークンを暗号化するための因子が生成される。これらの因子又は情報は、インデックス又はトークンに関するものに大きく分けられるが、上記aのインデックスに関する因子の一部{gpvk}、gpΣvkpkはトークンの暗号化に対する撹乱の因子であり、上記dのトークンに関する因子の一部{gruk}、grΣukrkはインデックスの暗号化に対する撹乱の因子である。2暗号化インデックス及びトークンの生成次に、図14の中央に示すように、後述する図9の処理では、上記aとbで生成されたインデックスに関する因子又は情報、及び上記dのトークンに関して生成された撹乱の因子を用いて、平文インデックスを暗号化した暗号化インデックスを生成する。同様に、後述する図11の処理では、上記cとdで生成されたトークンに関する因子又は情報、及び上記aのインデックスに関して生成された撹乱の因子を用いて、平文トークンを暗号化した暗号化トークンを生成する。さらに、上記の暗号化インデックス及び暗号化トークンの生成処理と同様に、インデックス及びトークンについて、後の処理で、それぞれの暗号化を解除するための因子も生成する。これら暗号化解除用の因子の一部には、上記と同様に、相手の暗号化を撹乱する因子が含まれる。従って、図14では、互いに相手の暗号化を撹乱する因子に関しては、インデックス側からの矢印の一部とトークン側からの矢印の一部とが互いに交差し、暗号化インデックスと暗号化トークンのそれぞれに合流している。3検索結果データの生成最後に、図14の右側に示すように、後述する図12の処理では、上記の2で生成した暗号化インデックス、暗号化トークン、及びそれぞれの暗号化解除用の因子を用いて、暗号化されたインデックスとトークンとの照合が成功したかどうかを判定するための検索結果データを生成する。図14の破線の矢印は、上記1で生成された因子の逆元を用いて上記2の処理を行うことを示し、太い矢印は、{}で示すデータ列の各データを掛け合わせること乗積を示す。図14の右上には、上記の1で因子や情報を生成する際に用いられる各種乱数の定義域公開パラメータN整数を素因数分解して3つの素数p、q、rに関係する及び、群Gpと群Grにそれぞれ関連する乱数の対応関係を示す。また、図14の下段には、上記の2で生成される中間データ暗号化インデックス及びトークン、暗号化解除用の因子、及び暗号化撹乱の因子の詳細を示す。図8は、登録エージェント100の秘密鍵と公開パラメータの生成処理を示すシーケンス図である。登録エージェント100において、全体処理部111は、鍵設定部112に、鍵の生成を指示する。鍵設定部112は、記憶部120に記憶されたパラメータ137を読み込む。パラメータ137には、暗号鍵の長さに関するパラメータN-lengthや、暗号文の種類に関するパラメータn-kindsが記載されている。まず、鍵設定部112は素数pを生成する。素数の生成方法については、標準的な素数生成アルゴリズムRSA暗号の鍵生成方法などの実装により、実現できるため、その詳細な説明は省く。次に、位数をpとする、乗算に関する群Gpを生成する。ただし、位数とは、ある群に所属する異なる値を有するデータの数である。言い換えると、群Gpにおける異なるバイナリ値を有する元はたかだかp個である。簡単のため、本実施形態において、群Gp上の元は0以上p未満の整数値を持つデータとする。同様の処理を、素数qと素数rにて行う。即ち、鍵設定部112は、素数q、素数rを生成し、位数をqとする乗算に関する群Gqと、位数をrとする乗算に関する群Grを生成する。また、本実施形態において、群Gq上の元は0以上q未満、群Gr上の元は0以上r未満、の整数値を持つデータとする。例えば、群Gp上の元gpは、gpp≡1という合同式によって生成される任意のgpである。群Gq上の元gq、及び群Gr上の元grについてもそれぞれ素数q及びrを用いて同様に生成される。ここで、上記の各群の名称と役割を説明する。Gpトークンベクトル撹乱群:群Gqの元に埋め込まれた平文情報を撹乱する為の群Gq平文情報エンコード群:平文情報が埋め込まれる群Grインデックスベクトル撹乱群:群Gqの元に埋め込まれた平文情報を撹乱する為の群上記のGp及びGrの名称及び役割は、互いに相手の暗号化を撹乱させる機能に基づいているが、図14の説明で述べたように、自身のインデックス又はトークンの暗号化にも関連する。鍵設定部112は、素数p、q、rの積からなる、整数N=pqrを生成する。この時、整数Nは鍵長パラメータN-length以上の数である。次に、位数をNとする、乗算に関し、双線形性写像を有する群GNを生成する。双線形写像とは、GN上の2つの元を入力とし、別のGN’上の元へ射影する写像ee:GN×GN→GN’であり、下記の2条件を満たす写像を指す。条件1:eg、hが群GN’上の元であること条件2:次式の数1を満たすこと数1ega、hb=eg、habただし、元g、元hは群GN上の任意の値である。また、a、bは任意の整数であり、gaとは群GN上で元gをa乗し、hbとは群GN上で元hをb乗した値である。また、群GN上の元から、群Gp上、群Gq上、群Gr上の各元への写像以降、対応写像と呼ぶを生成する。例えば、群GN上の元g、hから群Gp上の元eg、hを生成する。合成数Nを位数とする群GNの生成手順と、群Gp、群Gq、群Grとの関係の詳細については、例えば非特許文献3に記載されているので、詳細な説明は省く。ここで、数1の関係式の導出について説明する。写像eg、hにおいて、exy、z=ex、zey、zの関係が成り立てば、mが整数の時、この関係を繰り返し適用すると、xに関してexm、z=ex、zmが成り立ち、zに関しても同様に成り立つので、ega、hb=eg、hba=[eg、hb]a=eg、habとなって、数1の関係が成り立つ。なお、f=ffの関係を満たすfはf=xkと表される。但し、k=f′。y=1Δxとし、f=1を用いて差分方程式を作り、Δ→0として微分方程式を作って解く。鍵設定部112は、群Gp上の元gpをランダムに作成する。ランダムに元gpを作成するには、鍵設定部112は0以上p未満の乱数の生成を全体処理部111に依頼し、全体処理部111は乱数生成部116に0以上p未満の乱数を作成させ、作成した乱数を鍵設定部112に入力し、鍵設定部112は入力された乱数を群Gp上の元gpを作成すればよい。同様に、鍵設定部112は、群Gq上の元gqと、群Gr上の元grをランダムに作成する。鍵設定部112は、暗号文の種類パラメータn-kindsの数に従い、以下の処理を行う。鍵設定部112は、0以上p未満の乱数p1を作成し、群Gp上の元gpをp1乗した、群Gp上の元であるgpp1を作成する。乱数p1を作成するには、鍵設定部112は0以上p未満の乱数の生成を全体処理部111に依頼し、全体処理部111は乱数生成部116に0以上p未満の乱数を作成させ、作成した乱数を鍵設定部112に乱数p1として入力し、鍵設定部112は群Gp上の元gpのp1乗を計算すればよい。同様に、0以上p未満の乱数p2を作成し、群Gp上の元gpをp2乗した、群Gp上の元であるgpp2を作成する。この処理をn回くり返し、gpp1、、gppnを作成する。さらに、0以上r未満の乱数r1、r2、、rnを作成し、群Gr上の元grr1、、grrnを作成する。鍵処理部は、写像e、群GN、群GN’、元gp、元gpp1、、元gppnと、元gp、元gqq1、、元gqqnと、元gr、元grr1、、元grrnを公開パラメータとして、元gqと対応写像を秘密鍵として出力する。全体処理部111は、鍵処理部が出力した公開パラメータをパラメータ137の一部として記憶部120へ保存し、秘密鍵は鍵記憶部150へ、元gq、素数p、素数q、素数rを秘密鍵151として保存する。上記の処理により、登録エージェント100は、暗号化インデックス135と暗号化トークン236の作成に要する、秘密鍵151と公開パラメータを作成し、それらを記憶部120へ格納できる。なお、上記の処理手順は、固定されたものではなく、処理手順を変更して実施してもかまわない。例えば、登録エージェント100は、素数p、素数q、素数rに関する処理を逐次的に実施するようにS802からS805を変更して構わない。例えば、素数pを生成後、pを位数とする群Gpを生成し、群Gp上の元gp、gpp1、、gppnを作成し、記憶部120に格納した後に、同様に、素数qに関する処理、と素数rに関する処理を実施しても構わない。同様に、他の処理内容を変更してもよい。なお、上記の処理では、GN上の2つの元を入力とし、別のGN’上の元へ射影する双線形写像ee:GN×GN→GN’を用いたが、異なる性質の双線形写像e’e’:GN1×GN2→GN3、ただし、GN1、GN2、GN3はそれぞれ異なる位数を有するでも、同様に実現できる。なお、上記の処理では、乗法に関する群を生成したが、楕円曲線上の加法群など、他の群でも同様に実現できる。図9は、登録エージェント100の暗号化データ134と暗号化インデックス135の登録処理における、完全一致検索に対する、暗号化インデックス135を実現する処理を示すシーケンス図である。図9の処理フローでは、検索用の平文インデックス132を変換するだけでなく、管理サーバ300向けに作成した2種類の検索用のデータIDn1、IDn2を含めて、暗号化インデックス135を作成する非特許文献2の技術とは異なり、本発明では、検索用のデータが2種類あるため、公開パラメータNは3つの素数の積で済む。平文インデックス132の確率的な暗号化同一値の平文インデックス132を入力すると、毎回、異なる暗号化インデックス135が作成されるを実現し、暗号化インデックス135に対する高い安全性を実現する。まず、全体処理部111は、エンコード部115に平文インデックス132を入力し、エンコード部115から出力されたnlog2<q>ビットのインデックスベクトルを出力する処理を行う。ただし、<>は小数点第一位の切り上げを意味する。インデックスベクトルはlog2<q>ビット毎の要素データにn分割されている。インデックスを構成する文字列C1C2Cnの各Ckに対応する整数がxkである。また、それぞれの要素データは0以上q未満の整数で表わされる。全体処理部111は、インデックス暗号化部113に、インデックスベクトルの暗号化を指示する。インデックス暗号化部113は、記憶部120に記憶されたパラメータ137を読み込む。パラメータ137には、暗号鍵の長さに関するパラメータN-lengthや、暗号文の種類に関するパラメータn-kinds、公開パラメータである、写像e、群GN、群GN’、元gp、元gpp1、、元gppnと、元gr、元grr1、、元grrnが記憶されている。秘密鍵151としては、元gq、素数p、素数q、素数rが記憶されている。インデックス暗号化部113は、0以上p未満の乱数sを作成し、S804で生成した元gp、元gpp1、、元gppnをs乗した、元gps、元gpsp1、、元gpspnを作成する。なお、乱数sを作成するには、鍵設定部112は0以上p未満の乱数の生成を全体処理部111に依頼し、全体処理部111は乱数生成部116に0以上p未満の乱数を作成させ、作成した乱数を鍵設定部112に乱数sとして入力し、鍵設定部112は群Gp上の元gp、元gpp1、、元gppnのs乗を計算すればよい。同様に、インデックス暗号化部113は、0以上r未満の乱数u1、乱数u2、、乱数unを作成し、元grから、元gru1、、元grunを作成する。インデックス暗号化部113は、S903で作成した乱数u1、乱数u2、、乱数unを用い、S804で生成した元grr1、、元grrnをそれぞれu1,u2,un乗して、それぞれ元gru1r1、、元grunrnを作成する。さらに、各元の積であるgru1r1unrnを計算する。この処理は、検索に関わるインデックスベクトル内の要素データに関連している。即ち、インデックスベクトルとの完全一致検索のみを依頼する場合、gru1r1unrnを作成すればよい。また、インデックスベクトルの一部との部分検索を可能にする場合、例えば、インデックスベクトルの1番目からn-1番目の要素データとの対応n番目を無視したい場合をとる場合は、gru1r1un-1rn-1を作成すればよく、インデックスベクトルの1番目と3番目と5番目の要素データのみと対応他は無視したい場合をとる場合は、gru1r1u3r3u5r5を作成すればよい。なお、積の計算は、次式の数2に示すように、乗算で処理可能である。数2gru1r1unrn=gru1r1gru2r2grunrnインデックス暗号化部113は、要素データ。インデックス暗号化部113は、各元の積である、gqx1gpsp1gru1、gqx2gpsp2gru2、、gqxngpspngrun、を計算し、対応写像を用いて、GN上の元へ移したデータを、それぞれID1gqx1gpsp1gru1に対応、ID2gqx2gpsp2gru2に対応、IDngqxngpspngrunに対応とする。インデックス暗号化部113は、gpsをIDn1、gru1r1unrnをIDn2とし、ID1、ID2、、IDn2までを一組のデータとして、出力する。全体処理部111は、出力されたデータを暗号化インデックス135として、記憶部120に保存する。なお、公開パラメータNに4つの素数の積を要する非特許文献2の技術と異なり、本発明で公開パラメータNが3つの素数の積でよいのは、検索用のデータが2種類存在するからである。ここで、中間データであるIDk、TDk、Ukk=1~n、n1、n2の名称と役割を説明する。これらのデータの関連は図14に示した。1インデックス関連IDkインデックスベクトル表現インデックス:平文情報埋め込み用の暗号化インデックスの一部IDn1トークンベクトル撹乱群の削除用インデックス:トークンベクトル撹乱群の削除用トークンと連携し、暗号化トークンからトークンベクトル撹乱群Gpの元を削除する、暗号化インデックスの一部IDn2インデックスベクトル撹乱群の削除用インデックス:インデックスベクトル撹乱群の削除用トークンと連携し、暗号化インデックスからインデックスベクトル撹乱群Grの元を削除する、暗号化インデックスの一部2トークン関連TDkインデックスベクトル表現トークン:平文情報埋め込み用の暗号化トークンの一部TDn1トークンベクトル撹乱群の削除用トークン:トークンベクトル撹乱群の削除用インデックスと連携し、暗号化トークンからトークンベクトル撹乱群Gpの元を削除する、暗号化トークンの一部TDn2インデックスベクトル撹乱群の削除用トークン:インデックスベクトル撹乱群の削除用インデックスと連携し、暗号化インデックスからインデックスベクトル撹乱群Grの元を削除する、暗号化トークンの一部3検索結果データ関連Uk要素間照合データ:インデックスベクトル表現インデックスとインデックスベクトル表現トークンの積。インデックスベクトルとトークンベクトルの各要素の照合結果。を含む。Un1トークンベクトル撹乱群の解除用データ:要素間照合データから、トークンベクトル撹乱群Gpによる、撹乱情報を取り除く。Un2インデックスベクトル撹乱群の解除用データ:要素間照合データから、インデックスベクトル撹乱群Grによる、撹乱情報を取り除く。上記の処理により、登録エージェント100は、記憶部120に格納された秘密鍵151と公開パラメータに基づき、暗号化インデックス135を作成できる。特に、インデックスベクトルx1、x2、、xnは秘密鍵151であるgqの指数として扱われる上、更に十分に乱数性が高いGpとGqの元に挟まれているので例えば、ID1は、gqx1gpsp1gru1であり、公開パラメータgpp1を乱数s乗したgpsp1と、公開パラメータgrを乱数u1乗したgru1とによって撹乱されている、値が同じインデックスベクトルに対しても、毎回発生する乱数が異なるので、異なる値の暗号化インデックス135作成されるため、暗号化インデックス135には高い安全性が期待できる。また、3つの素数の積で構成された公開パラメータNを暗号化インデックス135の作成に用いたため、暗号化の対象であるメッセージも、非特許文献2の技術に比べ利用効率が高い。暗号化可能なメッセージの効率=q/N=1pr>1/pqr更に、S905の処理において、暗号化インデックス135に取り込むインデックスベクトルの要素データを選択することにより、完全一致検索だけでなく、部分一致検索用の暗号化インデックス135を作成できる。また、暗号化インデックス135は、ID1IDn2だけで構成する必要はなく、特に部分一致検索用にその構成数を増やしてもよい。なお、上記の処理手順は、固定されたものではなく、処理手順を変更して実施してもかまわない。例えば、S901の後にS903とS904を実施、S904の後にS902を実施してもよい。また、S905をS902、S903、S904より先に実施してもよい。なお、上記の処理では、乗法に関する群を生成したが、楕円曲線上の加法群など、他の群でも同様に実現できる。図10は、本実施形態において、ネットワーク400を経由し、検索エージェント200が送信した暗号化トークン236を元に、管理サーバ300が、暗号化データ712を検索する処理を示すシーケンス図である。検索エージェント200の全体処理部211は、平文データ231をロードし、トークン暗号化部213へ入力する。検索エージェント200のトークン暗号化部213は、記憶部220に格納された秘密鍵251とパラメータ237をロードし、平文トークン233を暗号化トークン236に変換する。なお、変換方法については、図11を用い、後で詳しく説明する。検索エージェント200の通信部は、トークン暗号化部213より出力された暗号化トークン236を、ネットワーク400を経由し、管理サーバ300へ送信する処理を行う。管理サーバ300の通信部303から、ネットワーク400を経由し、検索エージェント200が送信した暗号化トークン236を受信する処理を行う。管理サーバ300の全体処理部311は、受信した暗号化トークン236と、ロードする暗号化インデックス701の番号を検索部312に入力する。例えば、記憶部320に格納された暗号化インデックス701を網羅的に検索する場合、全体処理部311は、予めインデックステーブルに格納された暗号化インデックス701に番号を割り当てておき、検索部312に1から1000までの処理を逐次的に入力すればよい。管理サーバ300の検索部312は検索結果に関するデータを出力する。なお、検索部312の処理については、図12を用い、後で詳しく説明する。管理サーバ300の全体処理部311は、検索結果が1である暗号化トークン236と暗号化インデックス701が関連する場合、図7Aに示すインデックステーブルから、該当した暗号化インデックス701に関連するアドレスをロードし例えば、図7Aのインデックステーブルにおいて、暗号化インデックスI1が該当した場合、全体処理部311はaddress1をロードする、そのアドレスに記憶される暗号化データ712をロードする例えば、図7Bのデータテーブルにおいては、全体処理部311はaddress1に記憶される暗号化データE1をロードする。全体処理部311は、ロードした暗号化データ712を検索結果の一部として、記憶部320に保存する。管理サーバ300の検索部312は、S1005からS1007までの処理を、全体処理部311が停止させるまで処理を繰り返す。管理サーバ300は、検索結果の一部として、ロードした全ての暗号化データ712を通信部303から、ネットワーク400を経由し、検索エージェント200へ送信する処理を行う。なお、暗号化データ712をロードしなかった場合、該当なしとし、通信部303から、ネットワーク400を経由し、該当なしを示すデータを検索エージェント200へ送信する処理を行うS1009。検索エージェント200の通信部203から、ネットワーク400を経由し、管理サーバ300が送信した暗号化データ712または該当なしを示すデータを受信する処理を行う。検索エージェント200が暗号化データ712を受信した場合、全体処理部211は、データ復号部218へ暗号化データ712を入力し、データ復号部218は、記憶部220に格納された秘密鍵251をロードし、暗号化データ712を平文データ231に変換する。なお、変換方法については、標準的な復号アルゴリズムの実装により、実現可能であるため、その詳細な説明は省く。検索エージェント200の全体処理部211は、データ復号部218が出力した平文データ231を、記憶部220へ格納する。上記の処理により、検索エージェント200は、ネットワーク400経由で、管理サーバ300に暗号化データ712の検索を指示し、その検索結果を確認できる。なお、上記の処理手順は、固定されたものではなく、処理手順または処理内容を変更して実施してもかまわない。例えば、管理サーバ300は複数の暗号化インデックス701に対する検索処理を一括で実施し、さらに繰り返し処理を省くようにしてもよい。また、管理サーバ300も、1件の暗号化インデックス701の検索毎に、検索結果を作成、送信してもよく、さらに複数件ごとにまとめてもかまわない。図11は、検索エージェント200の暗号化トークン236による検索処理における、暗号化トークン236を生成する処理を示すシーケンス図である。図11の処理フローでは、検索用の平文トークン233を変換するだけでなく、管理サーバ300向けに作成した2種類の検索用データを含め、暗号化トークン236を作成する非特許文献2の技術とは異なり、本発明では、検索用のデータが2種類あるため、公開パラメータNは3つの素数の積で済む。平文トークン233の確率的な暗号化同一値の平文トークン233を入力すると、毎回、異なる暗号化トークン236が作成されるを実現し、暗号化トークン236に対する高い安全性を実現する。全体処理部211は、トークン暗号化部213に、トークンベクトルの暗号化を指示する。トークン暗号化部213は、記憶部220に記憶されたパラメータ237と秘密鍵251を読み込む。パラメータ237には、暗号鍵の長さに関するパラメータN-lengthや、暗号文の種類に関するパラメータn-kinds、公開パラメータである、写像e、群GN、群GN’、元gp、元gpp1、、元gppn、元gr、元grr1、、元grrnが記憶されている。秘密鍵251としては、元gq、素数p、素数q、素数rが記憶されている。全体処理部211は、エンコード部215に平文トークン233を入力し、エンコード部215から出力されたnlog2<q>ビットのトークンベクトルを出力する処理を行う。ただし、<>は小数点第一位の切り上げを意味する。トークンベクトルはlog2<q>ビット毎の要素データにn分割されている。トークンを構成する文字列C1C2Cnの各Ckに対応する整数がykである。また、それぞれの要素データは0以上q未満の整数で表わされる。全体処理部211は、トークンベクトルと内積をとると、その値がGN上で0と等しくなる直交ベクトルを作成する。この直交ベクトルも、log2<q>ビット毎の要素データにn分割されており、それぞれの要素データは0以上q未満の整数で表わされる。直交ベクトルの作成では、次式の数3を満たすよう、0以上q未満の整数をそれぞれ、z1、z2、znに設定すればよい。数3y1z1ynzn=kqkは任意の整数上記の数3は、y1z1ynzn≡0modqと等価である。具体的には、全体処理部211は乱数生成部216に0以上q未満の乱数を作成させ、作成した乱数を、それぞれz1、z2、zと設定する。また、数3を満たすznの値は一意に求まるので、その値をznに設定する。数3で示されるy1z1ynzn=0を満たす直交ベクトルは、例えば、以下の手順により求められる。元のベクトル{yk}をベースとして直交ベクトルの成分を求めると、直交ベクトル{zk}は、z1=y1-yn2/y1,zk=yk-2/ykk=2~nと表される。特に、yk>yk-1k=2~nの場合は、zk>0k=2~n、z1<0となる。さらに、{zk}のそれぞれを整数化するために、{yk}の最小公倍数Mを掛けても直交条件は満たされる。z1<0となるz1を正の値にするため、z1′=z1Δ>0とおくとz1<Δ、直交条件は、y1z1′y2z2ynzn=y1Δ=kqとおくとなる。z1′=w>0とすると、Δ=w-z1=wz1=wyn2/y1-y1。なお、平文トークン233にワイルドカードが含まれていた場合は、該当するトークンベクトルの要素データは無視して、作成する。例えば、平文トークン233にabcedの代わりにabeと入力された場合、平文トークン233がトークンベクトルの要素データに1文字毎にエンコードされる場合、次式の数4を元に直交ベクトルz1、z2、z3、z4、z5を作成する。数4y1z1y2z2y3z3y4z4y5z5=kqkは任意の整数一方、平文トークンがワイルドカードを含むabeの場合にはが入力された2番目と4番目にはワイルドカードが入力されているので、次式の数5に基づいて直交ベクトルz1、、z3、、z5を求める。数5y1z1y3z3y5z5=kqkは任意の整数数5は、数3の式において、ワイルドカードに対応する要素データz2、z4をそれぞれ0としたものである。S1103では、トークン暗号化部213は、0以上r未満の乱数tを作成し、S804で生成した元gr、元grr1、、元grrnをt乗した、元grt、元grtr1、、元grtrnを作成する。なお、乱数tを作成するには、トークン暗号化部213は0以上r未満の乱数の生成を全体処理部211に依頼し、全体処理部211は乱数生成部216に0以上r未満の乱数を作成させ、作成した乱数をトークン暗号化部213に乱数tとして入力し、トークン暗号化部213は群Gp上の元gr、元grr1、、元grrnのt乗を計算すればよい。同様に、トークン暗号化部213は、0以上r未満の乱数v1、乱数v2、、乱数vnを作成し、元gpから、元gpv1、、元gpvnを作成する。トークン暗号化部213は、S1104で作成した乱数v1、乱数v2、、乱数vnを用い、S804で生成した元gpp1、、元gppnをそれぞれV1,V2,Vn乗して、各元gpv1p1、、元gpvnpnを作成する。さらに、それぞれの元の積であるgpv1p1vnpnを計算する。この処理は、検索に関わるトークンベクトル内の要素データに関連している。即ち、トークンベクトルとの完全一致検索のみを依頼する場合、gpv1p1vnpnを作成すればよい。また、トークンベクトルの一部との部分検索を可能にする場合、例えば、トークンベクトルの1番目からn-1番目の要素データとの対応n番目の要素データがワイルドカードをとる場合は、gpv1p1vn-1pn-1を作成すればよく、トークンベクトルの1番目と3番目と5番目の要素データのみと対応他の要素データはワイルドカードをとる場合は、gpv1p1v3p3v5p5を作成すればよい。即ち、トークンベクトル内の要素データのうち、ワイルドカードに対応する乱数pk、即ちp2及びp4の値を0に設定する。なお、積の計算は、次式の数6に示すように、乗算で処理可能である。数6grv1p1vnpn=grv1p1grv2p2grvnpnトークン暗号化部213は、直交ベクトルの要素データ。トークン暗号化部213は、各元の積である、gqz1gpv1grtr1、gqz2gpv2grtr2、、gqzngpvngrtrn、を計算し、対応写像を用いて、GN上の元へ移したデータを、それぞれTD1gqz1gpv1grtr1に対応、TD2gqz2gpv2grtr2に対応、TDngqzngpvngrtrnに対応とする。なお、公開パラメータNが4つの素数の積N=pqrsであり、インデックスとトークンを撹乱する為に、3つの群が利用可能な非特許文献2の開示技術とは異なり、本発明では、公開パラメータNを3つの素数の積にしたため、インデックスとトークンを撹乱する為に、2つの群しか、利用できない。そこで、S1107で示したように、トークンベクトル撹乱群の削除用トークンと、インデックスベクトル撹乱群の削除用トークンを作成し、それらの撹乱情報の削除を可能にした。S1107も、S1105同様、検索に関わるトークンベクトル内の要素データに関連している。即ち、トークンベクトルとの完全一致検索のみを依頼する場合は、全てのTD1、TD2、、TDnを作成すればよいが、トークンベクトルの部分一致検索の場合、例えば、トークンベクトルの1番目からn-1番目の要素データとの対応n番目の要素データがワイルドカードをとる場合は、TD1、TD2、、TDn-1を作成すればよく、ワイルドカードを含む上記の例では、トークンベクトルの1番目と3番目と5番目の要素データのみと対応他の要素データはワイルドカードをとる場合は、TD1、TD3、TD5を作成すればよい。さらに、検索用のデータとして、TD6及びTD7を作成する。トークン暗号化部213は、gpv1p1vnpnの逆元gp-を計算し、これをTDn1とし、grtの逆元gr-tをTDn2とし、TD1、TD2、、TDn2までを一組のデータとして、出力する。全体処理部211は、出力されたデータを暗号化トークン236として、記憶部220に保存する。更に、作成したワイルドカードの番号を抜いたTDの添え字番号も、暗号化トークン236として記憶部220に保存する。上記の処理により、検索エージェント200は、記憶部220に格納された秘密鍵251と公開パラメータに基づき、暗号化トークン236を作成できる。特に、トークンベクトルz1、z2、、znは秘密鍵251であるgqの指数として扱われる上、更に十分に乱数性が高い群Gpと群Gqの元に挟まれているので例えば、TD1は、gqz1gpv1grtr1であり、公開パラメータgpを乱数v1乗したgpv1と、公開パラメータgrr1を乱数t乗したgrtr1とによって撹乱されている、値が同じトークンベクトルに対しても、毎回発生する乱数が異なるので、異なる値の暗号化トークン236が作成されるため、暗号化トークン236には高い安全性が期待できる。また、3つの素数の積で構成された公開パラメータNを暗号化トークン236の作成に用いるため、暗号化の対象であるメッセージの利用効率も、非特許文献2の技術に比べ、高い。暗号化可能なメッセージの効率=q/N=1pr>1/pqr更に、S1105の処理において、暗号化トークン236に取り込むトークンベクトルの要素データを選択することにより、完全一致検索だけでなく、部分一致検索用の暗号化トークン236を作成できる。また、暗号化トークン236は、TD1TDn2だけで構成する必要はなく、特に部分一致検索用にその構成数を増やしてもよい。なお、上記の処理手順は、固定されたものではなく、処理手順を変更して実施してもかまわない。例えば、登録エージェント100は、S1103、S1104、S1105の順序を変更し、暗号化トークン236を作成してもよい。図12は、管理サーバ300の暗号化データを検索する処理を示す、シーケンス図である。管理サーバ300において、全体処理部311は、検索部312に、暗号化トークン336と、暗号化インデックス701の番号を入力し、暗号化データ712の検索処理を指示する。検索では、管理サーバ300向けに作成された暗号化インデックス701と暗号化トークン336の2種類の検索用データIDn1、IDn2、TDn1、TDn2を活用し、暗号化インデックス701と暗号化トークン336における乱数情報群Gpの元と群Grの元を排除する。非特許文献2の技術とは異なり、本発明では、検索用のデータが2種類あるため、公開パラメータNが3つの素数の積でも、部分検索が可能である。検索部312は、記憶部320に記憶されたパラメータを読み込む。パラメータ337には、暗号鍵の長さに関するパラメータN-lengthや、暗号文の種類に関するパラメータn-kinds、双線形写像などが記載されている。検索部は、入力された暗号化インデックス701の番号を元に、記憶部320に格納されたインデックステーブルから暗号化インデックス701を読み込む。以降、管理サーバ300は暗号化インデックス701と暗号化トークン336の照合処理を行う。まず、検索部312は暗号化トークン336から、TDの添え字番号を抜き出す。以降では、簡単のため、TDの添え字番号が1からn2まで全て存在する場合を紹介する。検索部312は暗号化インデックス701からID1元gqx1gpsp1gru1に対応、暗号化トークン336からTD1元gqz1gpv1grtr1に対応を取り出す。次式の数7に従い、ID1とTD1の双線形写像を計算し、これをU1とする。数7U1=egqx1gpsp1gru1、gqz1gpv1grtr1=egp、gpsp1v1egq、gqx1z1egr、gru1tr1ここで、数7の関係式の導出について説明する。数1に関連したexy、z=ex、zey、zの関係を用いると、2つの変数x、yを含む場合に、exm1yn1,xm2yn2=exm1,xm2yn2eyn1,xm2yn2=exm1,xm2exm1,yn2eyn1,xm2eyn1,yn2=ex,xm1m2ex,ym1n2ey,xn1m2ey,yn1n2となる。特に、x∈X、y∈Y、かつX≠Yの場合xとyが異なる群に属する場合にex,y=ey,x=1とすると、exm1yn1,xm2yn2=ex,xm1m2ey,yn1n2となる。さらに変数が増えた場合、上記の関係を繰り返し適用すると、数7の関係式が得られる。なお、exy、z=ex、zey、zの関係において、変数及びexy、z等の対数によって上記の関係を整理すると、上記の関係が2つの変数に対する線形写像双線形写像であることが示される。次に、検索部312は、暗号化インデックス701からID2元gqx2gpsp2gru2に対応、暗号化トークン336からTD2元gqz2gpv2grtr2に対応を取り出し、同様に双線形写像を計算し、U2を作成する。この手順を暗号化インデックス701のID1、ID2、Dn2、及び暗号化トークン336のTD1、TD2、TDn、TDn1、TDn2についてUk=eIDk,TDkk=1~n,n1,n2の処理を行い、中間データU1、U2、、Un、Un1、Un2を作成する。次に、管理サーバ300は、中間データU1、U2、Un、Un1、Un2の積を計算し、これを検索結果データvとする。以降、Un1とUn2は、それぞれ双線形写像U1、U2、Unにおける群Gpの元と、群Grの元からなる乱数情報の排除に用いられる。暗号化インデックス701と暗号化トークン336に、検索用のデータが2種類存在するため、これら乱数情報の排除用のデータUn1、Un2が作成できる。数8v=U1U2Un2=egp、gpsp1v1egq、gqx1z1egr、gru1tr1egp、gpsp2v2egq、gqx2z2egr、gru2tr2egp、gpspnvnegq、gqxnznegr、gruntrnegp、gp-sΣvkpkegr、gr-tΣukrk=egp、gpsΣpkvkegr、grtΣukrkegq、gqegp、gp-sΣpkvkegr、gr-tΣukrk=egq、gq上記の数8の右辺の第3式は、模式的に、インデックスの撹乱因子トークンの撹乱因子インデックスベクトルとトークンベクトルの直交ベクトルとの内積インデックスの撹乱削除因子トークンの撹乱削除因子のように、複数の因子の積として表され、インデックス及びトークンのそれぞれの撹乱因子とその削除因子とが相殺されてインデックスベクトルとトークンベクトルの直交ベクトルとの内積のみが残り、数8の右辺の第4式が得られる。ここで、x1z1xnzn=kqkは任意の整数が成立すれば、次式の数9より、群GN上の単位元1を得る。数9v=egq、gq0=1また、x1z1xnzn=kqkは任意の整数が成立しない時、数9は成立しえない。従って、平文インデックス132と平文トークン233が等しければ、エンコードされたインデックスベクトルとトークンベクトルは等しく、更にインデックスベクトルと直交ベクトルで数9が成立するので、数9の成立、未成立で評価できる。検索部312は、全体処理部311へ検索結果データvを出力する。全体処理部311は、検索結果データvの値が1である場合、記憶部320から、暗号化インデックス701に関連付けられたアドレスをロードする。全体処理部311は、ロードしたアドレスから、該当する暗号化データ712をロードし、これを検索結果の一部として、記憶部320に保存する。上記の処理により、管理サーバ300は、記憶部320に格納された公開パラメータに基づき、暗号化トークン336に関連する暗号化インデックス701を発見でき、その暗号化インデックス701に関連する暗号化データ712を含めた検索結果を作成できる。なお、上記の処理手順は、固定されたものではなく、処理手順や処理内容を変更して実施してもかまわない。例えば、管理サーバ300は中間データU1、、Un2の作成処理を一括で実施してもよい。また、複数件の暗号化インデックス701の検索毎に、検索結果データvを作成し、出力してもよい。S1204、S1205では、TDの添え字番号が1からn2まで全て存在する完全一致検索の場合を紹介した。同様に、例えば、1からn-1番とn1番とn2番が記憶されている場合、U1U2Un―1Un1Un2を検索結果vとすればよく、1番と3番と5番とn1番とn2番が記憶されている場合は、U1U3U5Un1Un2を検索結果vとすれば、部分一致検索が実施できる。なお、上記の処理では、GN上の2つの元を入力とし、別のGN’上の元へ射影する双線形写像ee:GN×GN→GN’を用いたが、異なる性質の双線形写像e’e’:GN1×GN2→GN3、ただし、GN1、GN2、GN3はそれぞれ異なる位数を有するでも、同様に実現できる。なお、上記の処理では、乗法に関する群を用いたが、楕円曲線上の加法群など、他の群でも同様に実現できる。実施の形態2本発明の第一の実施形態と異なり、第二の実施の形態では、検索処理システムは、登録エージェント100と、管理サーバ300で構成される。登録エージェント100と管理サーバ300は、ネットワーク400を介して相互に情報を送受信できるように設計されている。本実施形態における登録エージェント100は、データと検索用のインデックスを管理サーバ300に送信し、受信結果を管理サーバ300から受信する送受信装置として機能する。また、登録エージェント100は、検索処理委託用のトークンを管理サーバ300に送信し、その検索結果を管理サーバ300から受信する送受信装置として機能し、管理サーバ300は、データを記憶し、また受信したトークンを用いて、データを検索する送受信装置として機能する。この時、管理サーバ300の機能は第一の実施の形態と同様である。また、登録エージェント100の機能は、第一の実施の形態が示す登録エージェント100の機能に加え、検索エージェント200の機能も備える。即ち、第一の実施の形態が示す登録エージェント100に対し、更に制御部110にトークン暗号化部213、記憶部120に平文トークン233と暗号化トークン236を格納し、更にプログラム記憶部160には、暗号化トークン236による検索処理に関するプログラムを記憶する。第二の実施の形態における管理サーバ300の処理内容は、第一の実施の形態と同様であり、この説明を省く。また、第二の実施の形態における登録エージェント100の処理内容は、第一の実施の形態における登録エージェント100と検索エージェント200の処理内容を兼ねるものであり、同様に、その説明を省く。"