(57)【特許請求の範囲】
【請求項１】
登録処理プログラムと検索処理プログラムとを記憶部に記憶する管理サーバと、登録依頼プログラムを記憶部に記憶する登録エージェントと、検索依頼プログラムを記憶部に記憶する検索エージェントと、がネットワーク経由で連携する検索処理システムであって、
前記登録エージェントは、３つの素数(p、q、r)を生成し、これらの積から公開パラメータＮ(＝ｐｑｒ)を構成し、ｑを位数とする群の元を秘密鍵として記憶する鍵記憶部と、ｐとｑとを位数とする群の元を公開パラメータとして記憶するデータ記憶部と、を備え、
前記登録エージェントは、検索用の平文インデックスを前記秘密鍵と前記公開パラメータとを用いて、確率的な暗号処理により、部分一致検索用の暗号化インデックスへ変換し、この暗号化インデックスを前記管理サーバの前記記憶部へ登録し、
前記検索エージェントは、検索用の平文トークンを前記秘密鍵と前記公開パラメータとを用いて、確率的な暗号処理により、部分一致検索用の暗号化トークンへ変換し、この暗号化トークンを前記管理サーバの前記記憶部へ前記ネットワーク経由で送信し、
前記管理サーバは、受信した暗号化トークンが、前記記憶部に格納された前記暗号化インデックスに該当するかを、前記暗号化トークンと前記暗号化インデックスとを双線形写像することによって得られる検索結果データを用いて判定すること、
を特徴とする検索処理システム。
【請求項２】
請求項１記載の検索処理システムであって、
前記暗号化インデックスは、暗号化された平文インデックスの情報と、２つの乱数情報の排除用のデータと、から構成され、
前記暗号化トークンは、暗号化された平文トークンの情報と、２つの乱数情報の排除用のデータと、から構成され、
前記管理サーバは、前記暗号化インデックスと前記暗号化トークンとがそれぞれ保有する前記乱数情報の排除用のデータを用い、暗号化された平文インデックスの情報と暗号化された平文トークンの情報との照合の有無を示す情報を抽出し、前記暗号化トークンが前記暗号化インデックスに該当するかを判定すること、
を特徴とする検索処理システム。
【請求項３】
請求項２記載の検索処理システムであって、
前記平文インデックスから、前記暗号化インデックスへの変換は、群Ｇｑの元の指数に前記平文インデックスに関する情報を埋め込み、さらに公開パラメータとして前記検索エージェントの前記記憶部に記憶された群Ｇｐの元と群Ｇｒの元を、群Ｇｑの元に掛け合わせていること、
を特徴とする検索処理システム。
【請求項４】
請求項３記載の検索処理システムであって、
前記平文トークンから、前記暗号化トークンへの変換は、双線形群Ｇｑの元の指数に前記平文トークンのデータ情報を埋め込み、さらに公開パラメータとして前記検索エージェントの前記記憶部に記憶された双線形群Ｇｐの元と双線形群Ｇｒの元を、双線形群Ｇｑの元に掛け合わせていること、
を特徴とする検索処理システム。
【請求項５】
請求項４記載の検索処理システムであって、
前記検索エージェントは、前記平文トークンに対応するトークン・ベクトルに直交する直交ベクトルを作成し、前記平文インデックスに対応するインデックス・ベクトルとの内積を作成すること、
を特徴とする検索処理システム。
【請求項６】
請求項５記載の検索処理システムであって、
前記登録エージェントは、前記平文インデックスを部分一致検索用の前記暗号化インデックスに変換する、インデックス暗号化部を備え、
前記検索エージェントは、ワイルドカードが入力された前記平文トークンを、前記ワイルドカードに対応する部分を間引いた前記暗号化トークンに変換し、
登録サーバは、前記暗号化インデックスを前記管理サーバの前記記憶部に格納し、格納した上記暗号化インデックスを前記暗号化トークンが該当するかを判断すること、
を特徴とする検索処理システム。
【請求項７】
請求項６記載の検索処理システムであって、
前記登録サーバは、暗号化したデータを前記管理サーバの前記記憶部への登録を依頼し、
前記管理サーバは、前記暗号化したデータを前記管理サーバの前記記憶部へ記憶し、
前記暗号化インデックスは、記憶した前記暗号化したデータのアドレス値と関連付けた状態で前記記憶部へ記憶されること、
を特徴とする検索処理システム。
【請求項８】
請求項７記載の検索処理システムであって、
前記管理サーバは、前記暗号化トークンが前記暗号化インデックスに該当するかを判定し、該当すると判定した場合には、前記暗号化インデックスに関連付けられたアドレス値に記憶されている、前記暗号化されたデータを前記記憶部からロードし、前記暗号化されたデータを検索結果の一部とすること、
を特徴とする検索処理システム。
【請求項９】
請求項８記載の検索処理システムであって、
前記検索エージェントは、前記管理サーバから受信した前記検索結果を復号し、前記暗号化されたデータを抽出すること、
を特徴とする検索処理システム。
【請求項１０】
データを登録するための登録エージェントと、前記データを検索するための検索エージェントと、前記データを管理するための管理サーバと、がネットワークを介して接続された検索処理システムにおける部分一致検索方法であって、
前記登録エージェントは、
所望のデータ及び前記データに関するインデックスを前記管理サーバに登録する利用者が入力した公開パラメータである整数Ｎを素因数分解して３つの素数を取得し、
前記素数を用いて、前記管理サーバに登録するデータ及びインデックスを確率的な暗号処理により暗号化し、
暗号化されたデータ及び部分一致検索用インデックスを前記管理サーバに送信し、
前記管理サーバは、
前記暗号化されたデータ及び部分一致検索用インデックスを互いに関連付けて記憶部に格納し、
前記検索エージェントは、
データ検索の利用者が入力した文字列の一部である部分文字列からなる検索用トークンを受け取り、
前記公開パラメータから生成した３つの前記素数を用いて、前記検索用トークンを確率的な暗号処理により暗号化して前記管理サーバに送信し、
前記管理サーバは、
前記検索エージェントから受け取った暗号化されたトークンと前記暗号化された部分一致検索用インデックスとの照合を、双線形写像を用いて実行することによって検索を行い、
前記照合が成功すれば、前記暗号化されたインデックスと関連付けられた前記暗号化されたデータを検索し、前記検索された暗号化データを前記検索エージェントに送信し、
前記検索エージェントは、
前記管理サーバから受信した前記暗号化されたデータを、前記公開パラメータから生成した３つの前記素数を用いて、複号化して平文の検索結果を出力して前記データ検索の利用者に提示する、
ことを特徴とする部分一致検索方法。
【請求項１１】
前記検索用トークンの平文にワイルドカードが含まれている場合は、前記ワイルドカードに対応した部分を間引いて、前記暗号化されたトークンを生成することを特徴とする請求項１０記載の部分一致検索方法。
【請求項１２】
前記部分一致検索方法において、
前記公開パラメータを素因数分解して第１、第２及び第３の素数を取得し、
前記第１の素数に基づいて生成される第１の群によって、前記インデックスを暗号化するための第１の因子を生成し、
前記第２の素数に基づいて生成される第２の群によって、前記暗号化されたインデックスの元となる第１の情報を生成し、
前記検索用トークンの文字列をベクトル化したトークン・ベクトルに直交するベクトルと前記第２の群によって前記暗号化されたトークンの元となる第２の情報を生成し、
前記第３の素数に基づいて生成される第３の群によって前記トークンを暗号化するための第２の因子を生成する、
ことを特徴とする請求項１０記載の部分一致検索方法。
【請求項１３】
前記部分一致検索方法は、さらに、
前記第１の因子、前記第１の情報、及び前記第２の因子に関連して生成された第１の撹乱の因子を用いて、前記インデックスを暗号化した前記暗号化されたインデックスを生成し、
前記第２の情報、前記第２の因子、及び前記第１の因子に関連して生成された第２の撹乱の因子を用いて、前記検索用トークンを暗号化した前記暗号化されたトークンを生成し、
前記インデックス及び前記検索用トークンについて、それぞれの暗号化を解除するための暗号化解除因子を生成する、
ことを特徴とする請求項１２記載の部分一致検索方法。
【請求項１４】
前記部分一致検索方法は、さらに、
前記生成した暗号化されたインデックス、暗号化されたトークン、及びそれぞれの前記暗号化解除因子を用いて、前記暗号化されたインデックスと前記暗号化されたトークンとの照合が成功したかどうかを判定するための検索結果データを生成する、
ことを特徴とする請求項１３記載の部分一致検索方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、サーバ／クライアントモデルにおいて、サーバが、クライアントの依頼に従って、暗号化データを復号せずに、預託された暗号化データに関する部分一致検索を高速に検索する、検索処理システムに関する。
【背景技術】
【０００２】
情報システムの開発・運用管理費の効率化を目的に、近年、情報システムを自組織だけで維持するのではなく、他組織が提供する情報システムを部分的または全面的に利用する、クラウドコンピューティング（cloud computing、以下クラウドと略記する）と呼ばれる運用管理形態が脚光を浴びている。一方、クラウドにおいては、情報システムを管理する組織が、情報システムを利用する組織とは異なるため、情報漏えいの防止策や、事故発生後の原因究明、再発防止策等が自組織だけでは立てにくい。そのため、事前に、データの不正流出の予防策として、暗号技術を活用し、データの機密性を確保する必要がある。
【０００３】
サーバ／クライアントモデルにおいて、クライアントが、サーバにデータを預託しながら、自由にサーバからデータを引き出せる、暗号技術を利用した方法が知られている。例えば、非特許文献１や非特許文献２には、クライアントの依頼に従って、暗号化された検索用のインデックスを用いて、暗号化データを復号せずに検索する検索処理方法が記載されている。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】吉野 雅之，長沼 健，佐藤 尚宜．DB向け検索可能暗号の検討(2)， Inproceedings of The 2011 Symposium on Cryptography and Information Security(2011)．
【非特許文献２】Emily Shen，Elaine Shi， Brent Waters．Predicate privacy in encryption systems．In TCC，volume 5444 of Lecture Notes in Computer Science，pages 457−473(2009)．
【非特許文献３】Dan Boneh， Eu−Jin Goh，Kobbi Nissim， Evaluating 2−DNF Formulas on Ciphertexts，In TCC，Volume 3378 of Lecture Notes in Computer Science，pages 325−341(2005)．
【発明の概要】
【発明が解決しようとする課題】
【０００５】
非特許文献１、非特許文献２の技術は共に、サーバに予め預託するデータ検索用のインデックスと、クライアントが検索時に送信する検索トークンの双方を確率的に暗号化し、安全性を高めている。しかしながら、非特許文献１の技術では、安全性が高い半面、データの完全一致検索処理のみを検索機能の対象としており、部分一致検索ができない。例えば、データ「abc」を検索する場合、その部分文字列である「ab」を検索トークンとしても、「abc」を検索できない。一方、非特許文献２の技術では、暗号文のデータサイズは、４つの素数の積(Ｎ＝ｐｑｒｓ)で構成される、公開パラメータＮに依存する。ここで、Ｎの素因子であるｐ，ｑ，ｒ，ｓはそれぞれが十分に大きな数でなければならない。暗号化可能なメッセージのデータサイズはＮの素因子であるｑのデータサイズに依存する為、非特許文献２の技術では、実際に暗号化できるメッセージの効率が低いことが課題として知られている。
【０００６】
（暗号化可能なメッセージの効率）＝ｑ／Ｎ＝１/(ｐｒｓ)
そのため、高い安全性を実現しながら、部分一致検索を可能にし、更に暗号化可能なメッセージの効率が高い、暗号技術が必要とされている。
【０００７】
本発明の目的は、検索用のインデックスを暗号化したまま、部分一致検索を可能にするシステムおよび方法を提供することにある。
【課題を解決するための手段】
【０００８】
前記目的を達成するために、本発明は、データと登録処理プログラムと検索処理プログラムを記憶部に記憶する管理サーバと、管理サーバに暗号化データと登録依頼プログラムを登録する登録エージェントと、検索依頼プログラムを記憶部に記憶する検索エージェントとがネットワーク経由で連携する検索処理システムを提供する。
【０００９】
登録エージェントは、３つの素数(ｐ、ｑ、ｒ)を生成し、これらの積から公開パラメータＮ(＝ｐｑｒ)を構成し、これらを位数（群を構成する要素である元ａに対しａｎ≡ｅ（単位元）を満たす最小の整数ｎ）とする双線形群上の元により、検索用のインデックスとデータを暗号化し、暗号化した検索用のインデックスは内部に２つの乱数情報の排除用データを保有し、その暗号化した検索用のインデックスを管理サーバに登録するよう依頼する。
【００１０】
検索エージェントは、双線形群上の元により、検索用のトークン（token，ソースコードや平文を構成する単語や記号からなる文字列）を暗号化し、暗号化した検索用のトークンは内部に２つの乱数情報の排除用データを保有し、その暗号化した検索用のトークンを用いた検索処理を管理サーバに依頼する。
【００１１】
管理サーバは、暗号化された検索用のインデックスとデータを記憶部に格納し、検索を依頼された際には、暗号化された検索用のインデックスと、検索用のトークンの内部にそれぞれ保有する乱数情報の排除用のデータを用い、検索用のトークンが検索用のインデックスに該当するかを判定し、該当する場合は、管理サーバの記憶部に格納された暗号化されたデータを検索エージェントに検索結果として送信し、検索エージェントはこれを復号して出力する。
【発明の効果】
【００１２】
登録エージェントは、検索用のインデックスを高速に暗号化できる。また、検索エージェントは、インデックスを暗号化したまま、その部分一致検索を管理サーバに委託できる。
【図面の簡単な説明】
【００１３】
【図１】第一実施形態において、検索処理委託システムの概略を例示する図である。
【図２】第一実施形態において、登録エージェントの機能の概略を例示する図である。
【図３】第一実施形態において、検索エージェントの機能の概略を例示する図である。
【図４】第一実施形態において、管理サーバの機能の概略を例示する図である。
【図５】コンピュータの概略構成を例示する図である。
【図６】第一実施形態において、登録エージェントと管理サーバがネットワーク400経由で実施する、暗号化データ134と暗号化インデックス135の登録処理の処理フローを例示する図である。
【図７Ａ】第一実施形態において、管理サーバの記憶部320に格納される、暗号化インデックス701と暗号化データ712を示すアドレス値702から構成される、インデックス・テーブル700を例示する図である。
【図７Ｂ】第一実施形態において、管理サーバの記憶部320に格納される、暗号化データ712と暗号化データ712のアドレス711を示した、データ・テーブル710を例示する図である。
【図８】第一実施形態において、登録エージェントが秘密鍵151と公開パラメータを作成する処理フローを例示した図である。
【図９】第一実施形態において、登録エージェントが暗号化インデックス135を作成する処理フローを例示する図である。
【図１０】第一実施形態において、検索エージェントと管理サーバがネットワーク400経由で実施する、暗号化トークン236による検索処理の処理フローを例示する図である。
【図１１】第一実施形態において、検索エージェントが暗号化トークン236を作成する処理フローを例示する図である。
【図１２】第一実施形態において、管理サーバが実施する検索処理の処理フローを例示する図である。
【図１３】部分一致検索処理の処理概要を示す図である。
【図１４】検索結果データ生成処理の概要を示す図である。
【発明を実施するための形態】
【００１４】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態において、同一の部材には原則として同一の符号を付け、繰り返しの説明は省略する。
【００１５】
（実施の形態１）
（システム構成）
図１は、本発明の第一の実施の形態である検索処理システムの概略図である。図示するように、検索処理システムは、登録エージェント100と、検索エージェント200と、管理サーバ300とを備え、登録エージェント100と管理サーバ300、検索エージェント200と管理サーバ300は、ネットワーク400を介して相互に情報を送受信できるように設計されている。
【００１６】
本実施形態における登録エージェント100は、データと検索用のインデックス(以下、インデックスと呼ぶ)を管理サーバ300に送信し、受信結果を管理サーバから受信する送受信装置として機能し、検索エージェント200は、検索処理委託用のトークンを管理サーバ300に送信し、その検索結果を管理サーバ300から受信する送受信装置として機能し、管理サーバ300は、データを記憶し、また受信したトークンを用いてデータを検索する送受信装置として機能する。
【００１７】
図２は、登録エージェント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の登録処理については、図６を用い、後で詳しく説明する。
【００２２】
一時情報記憶部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の実現方法については、標準的な鍵生成アルゴリズム(ＡＥＳ(Advanced Encryption Standard)暗号、ＤＥＳ(Data Encryption Standard)暗号など)の実装により実現可能であるため、その詳細な説明は省く。
【００３２】
インデックス暗号化部113（と、検索エージェント200のトークン暗号化部213）が用いる秘密鍵151と公開パラメータの実現方法については、図８を用い、後で詳しく説明する。
【００３３】
インデックス暗号化部113は、エンコード部115と連携し、平文インデックス132を暗号化する処理を行う。平文インデックス132とは、平文データ131を検索する際にその平文データ131の特徴を指すデータ(文字列だけでなくバイナリデータ列でもよい)である。例えば、文字列の場合、平文データ“Tom is cryptographic researcher”から、その特徴的な文字列である“Tom”や“researcher”を平文インデックスとすればよい。もちろん、平文インデックス132はデータ内の完全な単語でなくてもよく、上記の場合、例えば、“res(researcherの一部)”を平文インデックス132としてもよい。また、平文データ131内に含まれていないデータを平文インデックス132としてもよく、上記の場合、例えば文字列“cryptography”を平文インデックス132としてよい。
【００３４】
本実施形態においては、全体処理部111が平文インデックス132と秘密鍵151をインデックス暗号化部113に入力し、インデックス暗号化部113は暗号化インデックス135を出力する処理を行う。暗号化インデックス135の実現方法については、図９を用い、後で詳しく説明する。
【００３５】
エンコード部115は、入力された平文インデックス132を、固定長のデータに変換する処理を行う。本実施形態において、全体処理部111がエンコード部115に平文インデックス132を入力し、エンコード部115は入力された平文データ131をｎlog2＜ｑ＞ビットのインデックス・ベクトルに変換し、出力する処理を行う。ただし、＜＞は小数点第一位の切り上げを意味する。インデックス・ベクトルはlog2＜ｑ＞ビットの要素データ(ｘ１、ｘ２、・・・・、ｘｎ)毎にｎ分割されている。また、それぞれの要素データは平文インデックス132を構成する文字列に含まれる各文字に対応した値であり、０以上ｑ未満の整数で表わされる。エンコード部115の実現方法については、例えば、任意長の入力データを、固定長のデータへ変換する、標準的な暗号ハッシュ関数アルゴリズム（ＳＨＡ−１、ＳＨＡ−２など）の実装により実現可能であるため、その詳細な説明は省く。
【００３６】
乱数生成部116は、擬似乱数を出力する処理を行う。例えば、乱数生成部116は、温度、時間、電力量、等の物理現象から、乱数を出力する。本実施形態において、乱数生成部116は、全体処理部111から出力命令を受け、乱数を出力する。乱数生成部116の実現方法については、標準的な乱数生成器により実現可能であるため、その詳細な説明は省く。
【００３７】
なお、乱数生成部116の実現にあたって、乱数生成器の代わりに、擬似乱数生成器を用いてもよい。例えば、全体処理部111が秘密鍵151を擬似乱数生成器に入力し、擬似乱数生成器が擬似乱数(乱数列のように見えるが、確定的な計算によって求められる数列に含まれる数)を出力するようにしてもよい。
【００３８】
データ暗号化部117は、入力された平文データ131を暗号化する処理を行う。例えば、本実施形態において、全体処理部111が平文データ131と秘密鍵151をデータ暗号化部117に入力し、データ暗号化部117は暗号化データ134を出力する処理を行う。なお、データ暗号化部117の実現方法については、一般的な暗号化アルゴリズム（AES暗号、DES暗号など）の実装により実現可能であるため、その詳細な説明は省く。
【００３９】
図３は、検索エージェント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による検索処理については、図１０を用い、後で詳しく説明する。
【００４４】
一時情報記憶部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”(researcherの一部)のように部分文字列を平文トークン233としてもよい。さらに、平文トークン233にはワイルドカード“＊”を用いてもよく、例えば“researcher”の代わりに“re＊earch＊r”としてもよい。
【００５２】
本実施形態において、全体処理部211が平文トークン233と秘密鍵251をトークン暗号化部213に入力し、トークン暗号化部213は暗号化トークン236を出力する処理を行う。暗号化トークン236の実現方法については、図１１を用い、後で詳しく説明する。
【００５３】
エンコード部215は、入力された平文トークン233を、固定長のデータに変換する処理を行う。本実施形態において、全体処理部211がエンコード部215に平文トークン233を入力し、エンコード部215は入力された平文トークン233をｎlog2＜ｑ＞ビットのトークン・ベクトルに変換し、出力する処理を行う。ただし、＜＞は小数点第一位の切り上げを意味する。
【００５４】
エンコード部215の実現方法については、例えば、任意長の入力データを、固定長のデータへ変換する、標準的な暗号ハッシュ関数アルゴリズム（ＳＨＡ−１、ＳＨＡ−２など）の実装により、エンコード部215が実現可能であるため、その詳細な説明は省く。
【００５５】
乱数生成部216は、擬似乱数を出力する処理を行う。例えば、乱数生成部216は、温度、時間、電力量、等の物理現象に関する情報から、乱数を出力する。本実施形態において、乱数生成部216は、全体処理部211から出力命令を受け、乱数を出力する。乱数生成部216の実現方法については、標準的な乱数生成器により実現可能であるため、その詳細な説明は省く。
【００５６】
なお、乱数生成部216の実現にあたって、乱数生成器の代わりに、擬似乱数生成器を用いてもよい。例えば、全体処理部211が秘密鍵251を擬似乱数生成器に入力し、擬似乱数生成器が擬似乱数(乱数列のように見えるが、確定的な計算によって求められる数列に含まれる数)を出力するようにしてもよい。
【００５７】
データ復号部218は、入力された暗号化データ234を復号する処理を行う。例えば、本実施形態において、全体処理部211が暗号化データ234と秘密鍵251をデータ復号部218に入力し、データ復号部218は平文データ231を出力する処理を行う。なお、データ復号部218の実現方法については、一般的な暗号化アルゴリズム（AES暗号、DES暗号など）の実装により実現可能であるため、その詳細な説明は省く。
【００５８】
図４は、管理サーバ300の機能概略図である。図示するように、管理サーバ300は、制御部310と、記憶部320と、入力部301と、出力部302と、通信部303とを備える。
【００５９】
記憶部320は、プログラム記憶部360と、データ記憶部330と、一時情報記憶部380とを備える。
【００６０】
データ記憶部330には、通信部303を介して、登録エージェント100から受信したデータに関する情報が記憶される。本実施形態において、通信部303を介して、受信した暗号化データ134と暗号化インデックス135に関する情報が記憶される。また、パラメータ337に関する情報が記憶される。また、通信部303を介して、検索エージェント200から受信したデータに関する情報が、記憶される。本実施形態において、通信部303を介して、受信した暗号化トークン236に関する情報が一時的に記憶される。
【００６１】
プログラム記憶部360には、暗号化データ検索処理に関するプログラムが記憶されている。暗号化データ検索処理については、図１２を用い、後で詳しく説明する。
【００６２】
一時情報記憶部380には、制御部310での処理で必要となる情報が記憶される。
【００６３】
制御部310は、全体処理部311と、検索部312とを備える。
【００６４】
全体処理部311は、プログラム記憶部360から、暗号化データ検索処理に関するプログラムをロードし、管理サーバ300における各モジュール間の制御を行い、さらに簡単な演算処理を実施する。例えば、全体処理部311は、通信部303を介して、暗号化データ134、暗号化インデックス135を登録エージェント100から受信し、データ記憶部330に、記憶する処理を行う。暗号化データ134と暗号化インデックス135の保管方法については、図７Ａと図７Ｂを用い、後で詳しく説明する。
【００６５】
また、本実施形態において、全体処理部311は、通信部303を介して、暗号化トークン236を、検索エージェント200から受信し、暗号化トークン336として、データ記憶部330に記憶する処理を行う。
【００６６】
また、本実施形態において、全体処理部311は、暗号化トークン336と暗号化インデックス701を検索部312に入力し、検索部312が出力したデータを、通信部303を介して、検索エージェント200へ送信する処理を行う。
【００６７】
さらに、全体処理部311は、検索エージェント200または登録エージェント100より、通信部303を介して受信したデータに関する情報を、一時情報記憶部380に記憶する処理と、出力部302に表示する処理を行う。
【００６８】
以上に示した登録エージェント100、検索エージェント200、管理サーバ300は、例えば、図５（コンピュータの概略図）に示すような、ＣＰＵ501と、メモリ502と、ＨＤＤ等の外部記憶装置503と、ＣＤやＤＶＤ等の可搬性を有する記憶媒体508に対して情報を読み書きする読書装置507と、キーボードやマウス等の入力装置506と、ディスプレイ等の出力装置505と、通信ネットワークに接続するためのＮＩＣ等の通信装置504と、これらを連結するシステムバス等の内部通信線(システムバスという)と、を備えた一般的なコンピュータで実現できる。
【００６９】
例えば、記憶部120、220、320は、ＣＰＵ501がメモリ502または外部記憶装置503を利用することにより実現可能であり、制御部110、210、310と制御部110、210、310に含まれる各処理部は、外部記憶装置503に記憶されている所定のプログラムをメモリ502にロードしてＣＰＵ501で実行することで実現可能であり、入力部101、201、301は、ＣＰＵ501が入力装置506を利用することで実現可能であり、出力部102、202、302は、ＣＰＵ501が出力装置505を利用することで実現可能であり、通信部103、203、303は、ＣＰＵ501が通信装置504を利用することで実現可能である。
【００７０】
この所定のプログラムは、読書装置507を介して記憶媒体508から、あるいは、通信装置504を介してネットワーク400から、外部記憶装置503に記憶(ダウンロード)され、それから、メモリ502上にロードされて、ＣＰＵ501により実行されるようにしてもよい。また、読書装置507を介して、記憶媒体508から、あるいは通信装置504を介してネットワーク400から、メモリ502上に直接ロードされ、ＣＰＵ501により実行されるようにしてもよい。
【００７１】
（処理手順）
図１３を用いて本実施例の部分一致検索処理の概要を説明する。
【００７２】
登録エージェント１００は、所望のデータ及びそのデータに関するインデックスを管理サーバ３００に登録する利用者が入力した公開パラメータＮ（整数）を素因数分解して３つの素数ｐ、ｑ、ｒを得る。これらの素数を用いて、管理サーバ３００に登録するデータ及びインデックスをそれぞれ暗号化し、暗号化されたデータ及びインデックスを管理サーバ３００に送信する。管理サーバ３００は、暗号化されたデータ及びインデックスを互いに関連付けて記憶部３２０に格納する。
【００７３】
検索エージェント２００は、データ検索の利用者から、部分文字列からなる検索用トークンを受け取り、上記の公開パラメータから生成した３つの素数を用いて、トークンを暗号化して管理サーバ３００に送信する。なお、検索用トークンの平文にはワイルドカードが含まれていてもよく、ワイルドカードを考慮した暗号化が行われる。
【００７４】
管理サーバ３００は、検索エージェント２００から受け取った暗号化されたトークンと暗号化されたインデックスとの照合を、双線形写像を用いて実行することによって検索を行い、照合が成功すれば、暗号化されたインデックスと関連付けられた暗号化データを検索して、検索結果を検索エージェント２００に送信する。
【００７５】
検索エージェント２００は、管理サーバ３００から受信した暗号化されたデータを、上記の公開パラメータから生成した３つの素数を用いて、複号化して平文の検索結果を出力してデータ検索の利用者に提示する。
【００７６】
図６は、本実施形態において、ネットワーク400を経由し、登録エージェント100が送信した暗号化インデックス135を、管理サーバ300が、記憶部320へ登録する処理を示すシーケンス図である。
【００７７】
登録エージェント100の全体処理部111は、平文データ131をロードし、データ暗号化部117へ入力する、また、全体処理部111は、平文インデックス132をロードし、インデックス暗号化部113へ入力する(S601)。
【００７８】
登録エージェント100のデータ暗号化部117は、記憶部120に格納された秘密鍵151をロードし、平文データ131を暗号化データ134に変換する。なお、変換方法については、標準的な暗号化アルゴリズム(ＡＥＳ暗号、ＤＥＳ暗号など)の実装により、実現可能であるため、その詳細な説明は省く。また、登録エージェント100のインデックス暗号化部113は、記憶部120に格納された秘密鍵151とパラメータ137をロードし、平文インデックス132を暗号化インデックス135に変換する。なお、変換方法については、図９を用い、後で詳しく説明する(S602)。
【００７９】
登録エージェント100の通信部は、データ暗号化部117より出力された暗号化データ134と、インデックス暗号化部113より出力された暗号化インデックス135を、ネットワーク400を経由し、管理サーバ300へ送信する処理を行う(S603)。
【００８０】
管理サーバ300の通信部303から、ネットワーク400を経由し、登録エージェント100が送信した暗号化データ134と暗号化インデックス135を受信する処理を行う(S604)。
【００８１】
管理サーバ300の全体処理部311は、暗号化データ134と暗号化インデックス135を記憶部320へ格納する。格納にあたっては、図７Ｂに示すように、暗号化データ134(701)はデータ・テーブルの一部(図７ＢのＥ１、Ｅ２、Ｅ３それぞれが暗号化データ134に該当する)として格納される。また、送信された暗号化インデックス135は、共に送信された暗号化データ134を格納した記憶部320のアドレス(仮想アドレスまたは物理アドレス)と関連付けられて、インデックス・テーブルの一部として格納される（図７ＡのＩ１、Ｉ２、Ｉ３、Ｉ４、Ｉ５がそれぞれ暗号化インデックス701(135)に該当する。また、address 1は暗号化データＥ１のアドレスを示す値であり、同様に、address 2は暗号化データＥ２のアドレスを示す値、address 3は暗号化データＥ３のアドレスを示す値である。）(S605) 。
【００８２】
管理サーバ300は、暗号化データ134と暗号化インデックス135の記憶部320への格納処理を終えた場合、「登録成功」とし、通信部303から、ネットワーク400を経由し、「登録成功」を示すデータを登録エージェント100へ送信する処理を行う。また、記憶容量の制限等を理由に、暗号化データ134または暗号化インデックス135の記憶部320への格納処理が終了できなかった場合、「登録失敗」とし、通信部303から、ネットワーク400を経由し、「登録失敗」を示すデータを登録エージェント100へ送信する処理を行う（S606）。
【００８３】
登録エージェント100の通信部103から、ネットワーク400を経由し、管理サーバ300が送信した「登録成功」または「登録失敗」を示すデータを受信する処理を行う(S607)。
【００８４】
上記の処理(S601からS607)により、登録エージェント100は、ネットワーク400経由で、管理サーバ300に暗号化データ134と暗号化インデックス135の記憶部120への格納を指示し、その処理結果を確認できる。
【００８５】
なお、上記の処理手順は、固定されたものではなく、処理手順を変更して実施してもかまわない。例えば、登録エージェント100は、暗号化データ134を作成、送信後に、暗号化インデックス135を作成、送信するようにS602とS603を変更してもよい。また、管理サーバ300も、暗号化データ134と暗号化インデックス135の受信、記憶処理を個別に実施してもよい。同様に、他の処理内容を変更してもよい。例えば、登録エージェント100は複数の暗号化データ134と暗号化インデックス135の作成、送信処理を一括で実施してもよい。また、管理サーバ300も、複数の暗号化データ134と暗号化インデックス135の受信、記憶処理を一括で実施してもかまわない。
【００８６】
図１４を用いて本実施例の検索結果データ生成処理の概要を説明する。
【００８７】
本実施例では、インデックスの暗号化とトークンの暗号化をそれぞれ強化するため、互いに、相手の（暗号化のための）因子によって自身の暗号化データを撹乱する。即ち、登録エージェント１００で行われるインデックスの暗号化と検索エージェント２００で行われるトークンの暗号化といったそれぞれ独立して行われる暗号化で使用される因子によって、互いに相手の暗号化データを撹乱することにより、暗号化のプロセスが自身の中で閉じないようにすることで暗号化の秘匿性を高めている。
【００８８】
図１４に示した種々の記号の詳細な説明は後述する。
【００８９】
（１）暗号化のための因子及び情報の生成
まず、図１４の左側に示すように、後述する図８、９及び１１の処理では、（ａ）群Ｇｐによってインデックスを暗号化するための因子が生成され、（ｂ）群Ｇｑによって暗号化インデックスの元となる情報が生成され、（ｃ）トークンの文字列をベクトル化したトークン・ベクトルに直交するベクトルと群Ｇｑによって暗号化トークンの元となる情報が生成され、（ｄ）群Ｇｒによってトークンを暗号化するための因子が生成される。
【００９０】
これらの因子又は情報は、インデックス又はトークンに関するものに大きく分けられるが、上記（ａ）のインデックスに関する因子の一部（｛ｇｐｖｋ｝、（ｇｐΣｖｋｐｋ））はトークンの暗号化に対する撹乱の因子であり、上記（ｄ）のトークンに関する因子の一部（｛ｇｒｕｋ｝、（ｇｒΣｕｋｒｋ））はインデックスの暗号化に対する撹乱の因子である。
【００９１】
（２）暗号化インデックス及びトークンの生成
次に、図１４の中央に示すように、後述する図９の処理では、上記（ａ）と（ｂ）で生成されたインデックスに関する因子又は情報、及び上記（ｄ）のトークンに関して生成された撹乱の因子を用いて、平文インデックスを暗号化した暗号化インデックスを生成する。同様に、後述する図１１の処理では、上記（ｃ）と（ｄ）で生成されたトークンに関する因子又は情報、及び上記（ａ）のインデックスに関して生成された撹乱の因子を用いて、平文トークンを暗号化した暗号化トークンを生成する。さらに、上記の暗号化インデックス及び暗号化トークンの生成処理と同様に、インデックス及びトークンについて、後の処理で、それぞれの暗号化を解除するための因子も生成する。
【００９２】
これら暗号化解除用の因子の一部には、上記と同様に、相手の暗号化を撹乱する因子が含まれる。従って、図１４では、互いに相手の暗号化を撹乱する因子に関しては、インデックス側からの矢印の一部とトークン側からの矢印の一部とが互いに交差し、暗号化インデックスと暗号化トークンのそれぞれに合流している。
【００９３】
（３）検索結果データの生成
最後に、図１４の右側に示すように、後述する図１２の処理では、上記の（２）で生成した暗号化インデックス、暗号化トークン、及びそれぞれの暗号化解除用の因子を用いて、暗号化されたインデックスとトークンとの照合が成功したかどうかを判定するための検索結果データを生成する。
【００９４】
図１４の破線の矢印は、上記（１）で生成された因子の逆元を用いて上記（２）の処理を行うことを示し、太い矢印は、｛＊｝で示すデータ列の各データを掛け合わせること（乗積）を示す。図１４の右上には、上記の（１）で因子や情報を生成する際に用いられる各種乱数の定義域（公開パラメータＮ（整数）を素因数分解して３つの素数ｐ、ｑ、ｒに関係する）及び、群Ｇｐと群Ｇｒにそれぞれ関連する乱数の対応関係を示す。また、図１４の下段には、上記の（２）で生成される中間データ（暗号化インデックス及びトークン、暗号化解除用の因子、及び暗号化撹乱の因子）の詳細を示す。
【００９５】
図８は、登録エージェント100の秘密鍵と公開パラメータの生成処理を示すシーケンス図である。登録エージェント100において、全体処理部111は、鍵設定部112に、鍵の生成を指示する。
【００９６】
鍵設定部112は、記憶部120に記憶されたパラメータ137を読み込む(S801)。パラメータ137には、暗号鍵の長さに関するパラメータＮ−lengthや、暗号文の種類に関するパラメータｎ−kindsが記載されている。
【００９７】
まず、鍵設定部112は素数ｐを生成する。素数の生成方法については、標準的な素数生成アルゴリズム（ＲＳＡ暗号の鍵生成方法など）の実装により、実現できるため、その詳細な説明は省く。次に、位数をｐとする、乗算に関する群Ｇｐを生成する。ただし、位数とは、ある群に所属する異なる値を有するデータ(以降、元と呼ぶ)の数である。言い換えると、群Ｇｐにおける異なるバイナリ値を有する元はたかだかｐ個である。簡単のため、本実施形態において、群Ｇｐ上の元は０以上ｐ未満の整数値を持つデータとする。
【００９８】
同様の処理を、素数ｑと素数ｒにて行う。即ち、鍵設定部112は、素数ｑ、素数ｒを生成し、位数をｑとする乗算に関する群Ｇｑと、位数をｒとする乗算に関する群Ｇｒを生成する。また、本実施形態において、群Ｇｑ上の元は0以上ｑ未満、群Ｇｒ上の元は０以上ｒ未満、の整数値を持つデータとする(S802)。
【００９９】
例えば、群Ｇｐ上の元ｇｐは、ｇｐｐ≡１ (但し、ｐは位数(order))という合同式によって生成される任意のｇｐである。群Ｇｑ上の元ｇｑ、及び群Ｇｒ上の元ｇｒについてもそれぞれ素数ｑ及びｒを用いて同様に生成される。
【０１００】
ここで、上記の各群の名称と役割を説明する。
【０１０１】
Ｇｐ（トークン・ベクトル撹乱群）：群Ｇｑの元に埋め込まれた平文情報(トークン・ベクトル)を撹乱する為の群
Ｇｑ（平文情報エンコード群）：平文情報が(インデックス・ベクトルとトークン・ベクトルとして)埋め込まれる群
Ｇｒ（インデックス・ベクトル撹乱群）：群Ｇｑの元に埋め込まれた平文情報(インデックス・ベクトル)を撹乱する為の群
上記のＧｐ及びＧｒの名称及び役割は、互いに相手の暗号化を撹乱させる機能に基づいているが、図１４の説明で述べたように、自身のインデックス又はトークンの暗号化にも関連する。
【０１０２】
鍵設定部112は、素数ｐ、ｑ、ｒの積からなる、整数Ｎ（＝ｐｑｒ）を生成する。この時、整数Ｎは鍵長パラメータＮ−length以上の数である。次に、位数をＮとする、乗算に関し、双線形性写像を有する群ＧＮを生成する。双線形写像とは、ＧＮ上の２つの元を入力とし、別のＧＮ’上の元へ射影する写像ｅ（ｅ：ＧＮ×ＧＮ→ＧＮ’）であり、下記の２条件を満たす写像を指す。
条件１：ｅ（ｇ、ｈ）が群ＧＮ’上の元であること
条件２：次式の数１を満たすこと
（数１）ｅ（ｇａ、ｈｂ）＝ｅ（ｇ、ｈ）ａｂ
ただし、元ｇ、元ｈは群ＧＮ上の任意の値である。また、ａ、ｂは任意の整数であり、ｇａとは群ＧＮ上で元ｇをａ乗し、ｈｂとは群ＧＮ上で元ｈをｂ乗した値である。また、群ＧＮ上の元から、群Ｇｐ上、群Ｇｑ上、群Ｇｒ上の各元への写像（以降、対応写像と呼ぶ）を生成する。例えば、群ＧＮ上の元ｇ、ｈから群Ｇｐ上の元ｅ（ｇ、ｈ）を生成する。合成数Ｎを位数とする群ＧＮの生成手順と、群Ｇｐ、群Ｇｑ、群Ｇｒとの関係の詳細については、例えば非特許文献３に記載されているので、詳細な説明は省く(S803)。
【０１０３】
ここで、数１の関係式の導出について説明する。写像ｅ（ｇ、ｈ）において、ｅ（ｘｙ、ｚ）＝ｅ（ｘ、ｚ）ｅ（ｙ、ｚ）の関係が成り立てば、ｍが整数の時、この関係を繰り返し適用すると、ｘに関してｅ（ｘｍ、ｚ）＝ｅ（ｘ、ｚ）ｍが成り立ち、ｚに関しても同様に成り立つので、ｅ（ｇａ、ｈｂ）＝ｅ（ｇ、ｈｂ）ａ＝［ｅ（ｇ、ｈ）ｂ］ａ＝ｅ（ｇ、ｈ）ａｂとなって、数１の関係が成り立つ。
【０１０４】
なお、ｆ(ｘｙ)＝ｆ(ｘ)ｆ(ｙ)の関係を満たすｆ(ｘ)はｆ(ｘ)＝ｘｋと表される。但し、ｋ＝ｆ(１)′。（ｙ＝１＋Δ/ｘとし、ｆ(１)＝１を用いて差分方程式を作り、Δ→０として微分方程式を作って解く。）
鍵設定部112は、群Ｇｐ上の元ｇｐをランダムに作成する。ランダムに元ｇｐを作成するには、鍵設定部112は０以上ｐ未満の乱数(整数)の生成を全体処理部111に依頼し、全体処理部111は乱数生成部116に０以上ｐ未満の乱数を作成させ、作成した乱数を鍵設定部112に入力し、鍵設定部112は入力された乱数を群Ｇｐ上の元ｇｐを作成すればよい。同様に、鍵設定部112は、群Ｇｑ上の元ｇｑと、群Ｇｒ上の元ｇｒをランダムに作成する。
【０１０５】
鍵設定部112は、暗号文の種類パラメータｎ−kindsの数(以降、ｎとする)に従い、以下の処理を行う。
【０１０６】
鍵設定部112は、０以上ｐ未満の乱数ｐ１を作成し、群Ｇｐ上の元ｇｐをｐ１乗した、群Ｇｐ上の元であるｇｐｐ１を作成する。乱数ｐ１を作成するには、鍵設定部112は０以上ｐ未満の乱数(整数)の生成を全体処理部111に依頼し、全体処理部111は乱数生成部116に０以上ｐ未満の乱数を作成させ、作成した乱数を鍵設定部112に乱数ｐ１として入力し、鍵設定部112は群Ｇｐ上の元ｇｐのｐ１乗を計算すればよい。同様に、０以上ｐ未満の乱数ｐ２を作成し、群Ｇｐ上の元ｇｐをｐ２乗した、群Ｇｐ上の元であるｇｐｐ２を作成する。この処理をｎ回くり返し、ｇｐｐ１、・・・、ｇｐｐｎを作成する。
【０１０７】
さらに、０以上ｒ未満の乱数ｒ１、ｒ２、・・・、ｒｎを作成し、群Ｇｒ上の元ｇｒｒ１、・・・、ｇｒｒｎを作成する(S804)。
【０１０８】
鍵処理部は、写像ｅ、群ＧＮ、群ＧＮ’、元ｇｐ、元ｇｐｐ１、・・・、元ｇｐｐｎと、元ｇｐ、元ｇｑｑ１、・・・、元ｇｑｑｎと、元ｇｒ、元ｇｒｒ１、・・・、元ｇｒｒｎを公開パラメータとして、元ｇｑと対応写像を秘密鍵として出力する。全体処理部111は、鍵処理部が出力した公開パラメータをパラメータ137の一部として記憶部120へ保存し、秘密鍵は鍵記憶部150へ、元ｇｑ、素数ｐ、素数ｑ、素数ｒを秘密鍵151として保存する(S805)。
【０１０９】
上記の処理(S801からS805)により、登録エージェント100は、暗号化インデックス135と暗号化トークン236の作成に要する、秘密鍵151と公開パラメータを作成し、それらを記憶部120へ格納できる。
【０１１０】
なお、上記の処理手順は、固定されたものではなく、処理手順を変更して実施してもかまわない。例えば、登録エージェント100は、素数ｐ、素数ｑ、素数ｒに関する処理を逐次的に実施するようにＳ８０２からＳ８０５を変更して構わない。例えば、素数ｐを生成後、ｐを位数とする群Ｇｐを生成し、群Ｇｐ上の元ｇｐ、ｇｐｐ１、・・・、ｇｐｐｎを作成し、記憶部120に格納した後に、同様に、素数ｑに関する処理、と素数ｒに関する処理を実施しても構わない。同様に、他の処理内容を変更してもよい。
【０１１１】
なお、上記の処理では、ＧＮ上の２つの元を入力とし、別のＧＮ’上の元へ射影する双線形写像ｅ（ｅ：ＧＮ×ＧＮ→ＧＮ’）を用いたが、異なる性質の双線形写像ｅ’（ｅ’：ＧＮ１×ＧＮ２→ＧＮ３、ただし、ＧＮ１、ＧＮ２、ＧＮ３はそれぞれ異なる位数を有する）でも、同様に実現できる。
【０１１２】
なお、上記の処理では、乗法に関する群を生成したが、楕円曲線上の加法群など、他の群でも同様に実現できる。
【０１１３】
図９は、登録エージェント100の暗号化データ134と暗号化インデックス135の登録処理における、完全一致検索に対する、暗号化インデックス135を実現する処理を示すシーケンス図である。図９の処理フローでは、検索用の平文インデックス132を変換するだけでなく、管理サーバ300向けに作成した２種類の検索用のデータ（ＩＤｎ＋１、ＩＤｎ＋２）を含めて、暗号化インデックス135を作成する（非特許文献２の技術とは異なり、本発明では、検索用のデータが２種類あるため、公開パラメータＮは３つの素数の積で済む）。平文インデックス132の確率的な暗号化（同一値の平文インデックス132を入力すると、毎回、異なる暗号化インデックス135が作成される）を実現し、暗号化インデックス135に対する高い安全性を実現する。
【０１１４】
まず、全体処理部111は、エンコード部115に平文インデックス132を入力し、エンコード部115から出力されたｎlog2＜ｑ＞ビットのインデックス・ベクトルを出力する処理を行う。ただし、＜＞は小数点第一位の切り上げを意味する。インデックス・ベクトルはlog2＜ｑ＞ビット毎の要素データ(ｘ１、ｘ２、・・・・、ｘｎ)にｎ分割されている。インデックスを構成する文字列Ｃ１Ｃ２・・・Ｃｎの各Ｃｋに対応する整数がｘｋである。また、それぞれの要素データは0以上q未満の整数で表わされる。全体処理部111は、インデックス暗号化部113に、インデックス・ベクトルの暗号化を指示する。
【０１１５】
インデックス暗号化部113は、記憶部120に記憶されたパラメータ137を読み込む(S901)。パラメータ137には、暗号鍵の長さに関するパラメータＮ−lengthや、暗号文の種類に関するパラメータｎ−kinds、公開パラメータである、写像ｅ、群ＧＮ、群ＧＮ’、元ｇｐ、元ｇｐｐ１、・・・、元ｇｐｐｎと、元ｇｒ、元ｇｒｒ１、・・・、元ｇｒｒｎが記憶されている。秘密鍵151としては、元ｇｑ、素数ｐ、素数ｑ、素数ｒが記憶されている。
【０１１６】
インデックス暗号化部113は、０以上ｐ未満の乱数ｓを作成し、S804で生成した元ｇｐ、元ｇｐｐ１、・・・、元ｇｐｐｎをｓ乗した、元ｇｐｓ、元ｇｐsｐ１、・・・、元ｇｐsｐｎを作成する。なお、乱数ｓを作成するには、鍵設定部112は０以上ｐ未満の乱数(整数)の生成を全体処理部111に依頼し、全体処理部111は乱数生成部116に０以上ｐ未満の乱数を作成させ、作成した乱数を鍵設定部112に乱数ｓとして入力し、鍵設定部112は群Ｇｐ上の元ｇｐ、元ｇｐｐ１、・・・、元ｇｐｐｎのｓ乗を計算すればよい(S902)。
【０１１７】
同様に、インデックス暗号化部113は、０以上ｒ未満の乱数ｕ１、乱数ｕ２、・・・、乱数ｕｎを作成し、元ｇｒから、元ｇｒｕ１、・・・、元ｇｒｕｎを作成する(S903)。
【０１１８】
インデックス暗号化部113は、S903で作成した乱数ｕ１、乱数ｕ２、・・・、乱数ｕｎを用い、S804で生成した元ｇｒｒ１、・・・、元ｇｒｒｎをそれぞれｕ１，ｕ２，・・・ｕｎ乗して、それぞれ元ｇｒｕ１ｒ１、・・・、元ｇｒｕｎｒｎを作成する。さらに、各元の積であるｇｒｕ１ｒ１＋・・・＋ｕｎｒｎを計算する。この処理は、検索に関わるインデックス・ベクトル内の要素データに関連している。即ち、インデックス・ベクトルとの完全一致検索のみを依頼する場合、ｇｒｕ１ｒ１＋・・・＋ｕｎｒｎを作成すればよい。また、インデックス・ベクトルの一部との部分検索を可能にする場合、例えば、インデックス・ベクトルの１番目から（ｎ−１）番目の要素データとの対応（ｎ番目を無視したい場合）をとる場合は、ｇｒｕ１ｒ１＋・・・＋ｕ（ｎ−１）ｒ（ｎ−１）を作成すればよく、インデックス・ベクトルの１番目と３番目と5番目の要素データのみと対応（他は無視したい場合）をとる場合は、ｇｒｕ１ｒ１＋ｕ３ｒ３＋ｕ５ｒ５を作成すればよい。なお、積の計算は、次式の数２に示すように、乗算で処理可能である(S904)。
（数２）ｇｒｕ１ｒ１＋・・・＋ｕｎｒｎ＝ｇｒｕ１ｒ１ｇｒｕ２ｒ２・・・ｇｒｕｎｒｎ
インデックス暗号化部113は、要素データ(ｘ１、ｘ２、・・・・、ｘｎ）を用い、元ｇｑから、それぞれｇｑｘ１、ｇｑｘ２、・・・、ｇｑｘｎを作成する(S905)。
【０１１９】
インデックス暗号化部113は、各元の積である、ｇｑｘ１ｇｐｓｐ１ｇｒｕ１、ｇｑｘ２ｇｐｓｐ２ｇｒｕ２、・・・、ｇｑｘｎｇｐｓｐｎｇｒｕｎ、を計算し、対応写像を用いて、ＧＮ上の元へ移したデータを、それぞれＩＤ１（ｇｑｘ１ｇｐｓｐ１ｇｒｕ１に対応）、ＩＤ２（ｇｑｘ２ｇｐｓｐ２ｇｒｕ２に対応）、・・・ＩＤｎ（ｇｑｘｎｇｐｓｐｎｇｒｕｎに対応）とする(S906)。
【０１２０】
インデックス暗号化部113は、ｇｐｓをＩＤｎ＋１、ｇｒｕ１ｒ１＋・・・＋ｕｎｒｎをＩＤｎ＋２とし、ＩＤ１、ＩＤ２、・・・、ＩＤｎ＋２までを一組のデータとして、出力する。全体処理部111は、出力されたデータを暗号化インデックス135として、記憶部120に保存する(S907)。なお、公開パラメータＮに４つの素数の積(Ｎ＝ｐｑｒｓ)を要する非特許文献２の技術と異なり、本発明で公開パラメータＮが３つの素数の積(Ｎ＝ｐｑｒ)でよいのは、検索用のデータが２種類(ＩＤｎ＋１、ＩＤｎ＋２)存在するからである。
【０１２１】
ここで、中間データであるＩＤｋ、ＴＤｋ、Ｕｋ（ｋ＝１〜ｎ、ｎ＋１、ｎ＋２）の名称と役割を説明する。これらのデータの関連は図１４に示した。
【０１２２】
（１）インデックス関連
ＩＤｋ（インデックス・ベクトル表現インデックス）：
平文情報(インデックス・ベクトル)埋め込み用の暗号化インデックスの一部
ＩＤｎ＋１（トークン・ベクトル撹乱群の削除用インデックス）：
「トークン・ベクトル撹乱群の削除用トークン」と連携し、暗号化トークンからトークン・ベクトル撹乱群Gpの元を削除する、暗号化イ ンデックスの一部
ＩＤｎ＋２（インデックス・ベクトル撹乱群の削除用インデックス）：
「インデックス・ベクトル撹乱群の削除用トークン」と連携し、暗号化インデックスからインデックス・ベクトル撹乱群Ｇｒの元を削除する、暗号化インデックスの一部
（２）トークン関連
ＴＤｋ（インデックス・ベクトル表現トークン）：
平文情報(トークン・ベクトル)埋め込み用の暗号化トークンの一部
ＴＤｎ＋１（トークン・ベクトル撹乱群の削除用トークン）：
「トークン・ベクトル撹乱群の削除用インデックス」と連携し、暗号化トークンからトークン・ベクトル撹乱群Ｇｐの元を削除する、暗号 化トークンの一部
ＴＤｎ＋２（インデックス・ベクトル撹乱群の削除用トークン）：
「インデックス・ベクトル撹乱群の削除用インデックス」と連携し、暗号化インデックスからインデックス・ベクトル撹乱群Ｇｒの元を削 除する、暗号化トークンの一部
（３）検索結果データ関連
Ｕｋ（要素間照合データ）：
「インデックス・ベクトル表現インデックス」と「インデックス・ベクトル表現トークン」の積。インデックス・ベクトルとトークン・ベ クトルの各要素の照合結果。(x_k z_k)を含む。
【０１２３】
Ｕｎ＋１（トークン・ベクトル撹乱群の解除用データ）：
「要素間照合データ」から、トークン・ベクトル撹乱群Ｇｐによる、撹乱情報を取り除く。 
Ｕｎ＋２（インデックス・ベクトル撹乱群の解除用データ）：
「要素間照合データ」から、インデックス・ベクトル撹乱群Ｇｒによる、撹乱情報を取り除く。
【０１２４】
上記の処理(S901からS907)により、登録エージェント100は、記憶部120に格納された秘密鍵151と公開パラメータに基づき、暗号化インデックス135を作成できる。特に、インデックス・ベクトル（ｘ１、ｘ２、・・・、ｘｎ）は秘密鍵151であるｇｑの指数として扱われる上、更に十分に乱数性が高いＧｐとＧｑの元に挟まれているので（例えば、ＩＤ１は、ｇｑｘ１ｇｐｓｐ１ｇｒｕ１であり、公開パラメータｇｐｐ１を乱数ｓ乗したｇｐｓｐ１と、公開パラメータｇｒを乱数ｕ１乗したｇｒｕ１とによって撹乱されている）、値が同じインデックス・ベクトルに対しても、毎回発生する乱数が異なるので、異なる値の暗号化インデックス135作成されるため、暗号化インデックス135には高い安全性が期待できる。
【０１２５】
また、３つの素数の積で構成された公開パラメータＮを暗号化インデックス135の作成に用いたため、暗号化の対象であるメッセージも、非特許文献２の技術に比べ利用効率が高い。
【０１２６】
（暗号化可能なメッセージの効率）＝ｑ／Ｎ＝１/ｐｒ（＞１／（ｐｑｒ））
更に、S905の処理において、暗号化インデックス135に取り込むインデックス・ベクトルの要素データを選択することにより、完全一致検索だけでなく、部分一致検索用の暗号化インデックス135を作成できる。また、暗号化インデックス135は、ＩＤ１・・・ＩＤｎ＋２だけで構成する必要はなく、特に部分一致検索用にその構成数を増やしてもよい。
【０１２７】
なお、上記の処理手順は、固定されたものではなく、処理手順を変更して実施してもかまわない。例えば、S901の後にS903とS904を実施、S904の後にS902を実施してもよい。また、S905をS902、S903、S904より先に実施してもよい。
【０１２８】
なお、上記の処理では、乗法に関する群を生成したが、楕円曲線上の加法群など、他の群でも同様に実現できる。
【０１２９】
図１０は、本実施形態において、ネットワーク400を経由し、検索エージェント200が送信した暗号化トークン236を元に、管理サーバ300が、暗号化データ712を検索する処理を示すシーケンス図である。
【０１３０】
検索エージェント200の全体処理部211は、平文データ231をロードし、トークン暗号化部213へ入力する(S1001)。
【０１３１】
検索エージェント200のトークン暗号化部213は、記憶部220に格納された秘密鍵251とパラメータ237をロードし、平文トークン233を暗号化トークン236に変換する。なお、変換方法については、図１１を用い、後で詳しく説明する(S1002)。
【０１３２】
検索エージェント200の通信部は、トークン暗号化部213より出力された暗号化トークン236を、ネットワーク400を経由し、管理サーバ300へ送信する処理を行う(S1003)。
【０１３３】
管理サーバ300の通信部303から、ネットワーク400を経由し、検索エージェント200が送信した暗号化トークン236を受信する処理を行う(S1004)。
【０１３４】
管理サーバ300の全体処理部311は、受信した暗号化トークン236と、ロードする暗号化インデックス701の番号を検索部312に入力する(S1005)。例えば、記憶部320に格納された暗号化インデックス701を網羅的に検索する場合、全体処理部311は、予めインデックス・テーブルに格納された暗号化インデックス701に番号を割り当てておき(例えば１から1000まで等)、検索部312に１から1000までの処理を逐次的に入力すればよい。
【０１３５】
管理サーバ300の検索部312は検索結果に関するデータを出力する(S1006)。なお、検索部312の処理については、図１２を用い、後で詳しく説明する。
【０１３６】
管理サーバ300の全体処理部311は、検索結果が１である（暗号化トークン236と暗号化インデックス701が関連する）場合、図７Ａに示すインデックス・テーブルから、該当した暗号化インデックス701に関連するアドレスをロードし（例えば、図７Ａのインデックス・テーブルにおいて、暗号化インデックスＩ１(701)が該当した場合、全体処理部311はaddress 1をロードする）、そのアドレスに記憶される暗号化データ712をロードする（例えば、図７Ｂのデータ・テーブルにおいては、全体処理部311はaddress 1に記憶される暗号化データＥ１をロードする）。全体処理部311は、ロードした暗号化データ712を検索結果の一部として、記憶部320に保存する(S1007)。
【０１３７】
管理サーバ300の検索部312は、S1005からS1007までの処理を、全体処理部311が停止させるまで処理を繰り返す(S1008)。
【０１３８】
管理サーバ300は、検索結果の一部として、ロードした全ての暗号化データ712を通信部303から、ネットワーク400を経由し、検索エージェント200へ送信する処理を行う。なお、暗号化データ712をロードしなかった場合、「該当なし」とし、通信部303から、ネットワーク400を経由し、「該当なし」を示すデータを検索エージェント200へ送信する処理を行う（S1009）。
【０１３９】
検索エージェント200の通信部203から、ネットワーク400を経由し、管理サーバ300が送信した暗号化データ712または「該当なし」を示すデータを受信する処理を行う(S1010)。
【０１４０】
検索エージェント200が暗号化データ712を受信した場合、全体処理部211は、データ復号部218へ暗号化データ712を入力し、データ復号部218は、記憶部220に格納された秘密鍵251をロードし、暗号化データ712を平文データ231に変換する。なお、変換方法については、標準的な復号アルゴリズム(ＡＥＳ暗号、ＤＥＳ暗号など)の実装により、実現可能であるため、その詳細な説明は省く(S1011)。
【０１４１】
検索エージェント200の全体処理部211は、データ復号部218が出力した平文データ231を、記憶部220へ格納する(S1012)。
【０１４２】
上記の処理(S1001からS1012)により、検索エージェント200は、ネットワーク400経由で、管理サーバ300に暗号化データ712の検索を指示し、その検索結果を確認できる。
【０１４３】
なお、上記の処理手順は、固定されたものではなく、処理手順または処理内容を変更して実施してもかまわない。例えば、管理サーバ300は複数の暗号化インデックス701に対する検索処理を一括で実施し(S1005からS1007)、さらに繰り返し処理を省くようにしてもよい(S1008)。また、管理サーバ300も、1件の暗号化インデックス701の検索毎に、検索結果を作成(S1007)、送信(S1009)してもよく、さらに複数件ごとにまとめてもかまわない。
【０１４４】
図１１は、検索エージェント200の暗号化トークン236による検索処理における、暗号化トークン236を生成する処理を示すシーケンス図である。
【０１４５】
図１１の処理フローでは、検索用の平文トークン233を変換するだけでなく、管理サーバ300向けに作成した２種類の検索用データを含め、暗号化トークン236を作成する（非特許文献２の技術とは異なり、本発明では、検索用のデータが２種類あるため、公開パラメータＮは３つの素数の積で済む）。平文トークン233の確率的な暗号化（同一値の平文トークン233を入力すると、毎回、異なる暗号化トークン236が作成される）を実現し、暗号化トークン236に対する高い安全性を実現する。
【０１４６】
全体処理部211は、トークン暗号化部213に、トークン・ベクトルの暗号化を指示する。
【０１４７】
トークン暗号化部213は、記憶部220に記憶されたパラメータ237と秘密鍵251を読み込む(S1101)。パラメータ237には、暗号鍵の長さに関するパラメータＮ−lengthや、暗号文の種類に関するパラメータｎ−kinds、公開パラメータである、写像ｅ、群ＧＮ、群ＧＮ’、元ｇｐ、元ｇｐｐ１、・・・、元ｇｐｐｎ、元ｇｒ、元ｇｒｒ１、・・・、元ｇｒｒｎが記憶されている。秘密鍵251としては、元ｇｑ、素数ｐ、素数ｑ、素数ｒが記憶されている。
【０１４８】
全体処理部211は、エンコード部215に平文トークン233を入力し、エンコード部215から出力されたｎlog2＜ｑ＞ビットのトークン・ベクトルを出力する処理を行う。ただし、＜＞は小数点第一位の切り上げを意味する。トークン・ベクトルはlog2＜ｑ＞ビット毎の要素データ(ｙ１、ｙ２、・・・・、ｙｎ)にｎ分割されている。トークンを構成する文字列Ｃ１Ｃ２・・・Ｃｎの各Ｃｋに対応する整数がｙｋである。また、それぞれの要素データは０以上ｑ未満の整数で表わされる。全体処理部211は、トークン・ベクトルと内積をとると、その値がＧＮ上で０と等しくなる直交ベクトルを作成する。この直交ベクトルも、log2＜ｑ＞ビット毎の要素データ(ｚ１、ｚ２、・・・・、ｚｎ)にｎ分割されており、それぞれの要素データは０以上ｑ未満の整数で表わされる。
【０１４９】
直交ベクトルの作成では、次式の数３を満たすよう、０以上ｑ未満の整数をそれぞれ、ｚ１、ｚ２、・・・ｚｎに設定すればよい。
（数３）ｙ１ｚ１＋・・・＋ｙｎｚｎ＝ｋｑ（ｋは任意の整数）
上記の数３は、ｙ１ｚ１＋・・・＋ｙｎｚｎ≡０（mod ｑ）と等価である。
具体的には、全体処理部211は乱数生成部216に0以上q未満の乱数を作成させ、作成した乱数を、それぞれｚ１、ｚ２、ｚ(ｎ−１)と設定する。また、数３を満たすｚｎの値は(連立一次方程式を解くことにより)一意に求まるので、その値をｚｎに設定する(S1102)。
【０１５０】
数３で示されるｙ１ｚ１＋・・・＋ｙｎｚｎ＝０を満たす直交ベクトル(ｚ１、ｚ２、・・・・、ｚｎ)は、例えば、以下の手順により求められる。元のベクトル｛ｙｋ｝をベースとして直交ベクトルの成分を求めると、直交ベクトル｛ｚｋ｝は、ｚ１＝ｙ１−ｙｎ２／ｙ１，ｚｋ＝ｙｋ−(ｙ(ｋ−１))２／ｙｋ（ｋ＝２〜ｎ）と表される。特に、ｙｋ＞ｙ（ｋ−１）（ｋ＝２〜ｎ）の場合は、ｚｋ＞０（ｋ＝２〜ｎ）、ｚ１＜０となる。さらに、｛ｚｋ｝のそれぞれを整数化するために、｛ｙｋ｝の最小公倍数Ｍを掛けても直交条件は満たされる。
【０１５１】
ｚ１＜０となるｚ１を正の値にするため、ｚ１′＝ｚ１＋Δ（＞０）とおくと（|ｚ１|＜Δ）、直交条件は、ｙ１ｚ１′＋ｙ２ｚ２＋・・・・＋ｙｎｚｎ＝ｙ１Δ（＝ｋｑとおく）となる。ｚ１′＝ｗ（＞０）とすると、Δ＝ｗ−ｚ１＝ｗ＋|ｚ１|＝ｗ＋（ｙｎ２／ｙ１）−ｙ１。
【０１５２】
なお、平文トークン233にワイルドカード“＊”が含まれていた場合は、該当するトークン・ベクトルの要素データは無視して、作成する。例えば、平文トークン233に“abced”の代わりに“a＊b＊e”と入力された(かつn=5の)場合、平文トークン233がトークン・ベクトルの要素データに1文字毎にエンコードされる場合、次式の数４を元に直交ベクトル（ｚ１、ｚ２、ｚ３、ｚ４、ｚ５）を作成する。
【０１５３】
（数４）ｙ１ｚ１＋ｙ２ｚ２＋ｙ３ｚ３＋ｙ４ｚ４＋ｙ５ｚ５＝ｋｑ（ｋは任意の整数）
一方、平文トークンがワイルドカードを含む“a＊b＊e”の場合には“＊”が入力された2番目と4番目にはワイルドカードが入力されているので、次式の数５に基づいて直交ベクトル（ｚ１、＊、ｚ３、＊、ｚ５）を求める。
【０１５４】
（数５）ｙ１ｚ１＋ｙ３ｚ３＋ｙ５ｚ５＝ｋｑ（ｋは任意の整数）
数５は、数３の式において、ワイルドカードに対応する要素データｚ２、ｚ４をそれぞれ０としたものである。
【０１５５】
S1103では、トークン暗号化部213は、０以上ｒ未満の乱数ｔを作成し、S804で生成した元ｇｒ、元ｇｒｒ１、・・・、元ｇｒｒｎをｔ乗した、元ｇｒｔ、元ｇｒｔｒ１、・・・、元ｇｒｔｒｎを作成する。なお、乱数ｔを作成するには、トークン暗号化部213は０以上ｒ未満の乱数(整数)の生成を全体処理部211に依頼し、全体処理部211は乱数生成部216に０以上ｒ未満の乱数を作成させ、作成した乱数をトークン暗号化部213に乱数ｔとして入力し、トークン暗号化部213は群Ｇｐ上の元ｇｒ、元ｇｒｒ１、・・・、元ｇｒｒｎのｔ乗を計算すればよい(S1103)。
【０１５６】
同様に、トークン暗号化部213は、０以上ｒ未満の乱数ｖ１、乱数ｖ２、・・・、乱数ｖｎを作成し、元ｇｐから、元ｇｐｖ１、・・・、元ｇｐｖｎを作成する(S1104)。
【０１５７】
トークン暗号化部213は、S1104で作成した乱数ｖ１、乱数ｖ２、・・・、乱数ｖｎを用い、S804で生成した元ｇｐｐ１、・・・、元ｇｐｐｎをそれぞれＶ１，Ｖ２，・・・・Ｖｎ乗して、各元ｇｐｖ１ｐ１、・・・、元ｇｐｖｎｐｎを作成する。さらに、それぞれの元の積であるｇｐｖ１ｐ１＋・・・＋ｖｎｐｎを計算する。この処理は、検索に関わるトークン・ベクトル内の要素データに関連している。即ち、トークン・ベクトルとの完全一致検索のみを依頼する場合、ｇｐｖ１ｐ１＋・・・＋ｖｎｐｎを作成すればよい。また、トークン・ベクトルの一部との部分検索を可能にする場合、例えば、トークン・ベクトルの１番目から（ｎ−１）番目の要素データとの対応（ｎ番目の要素データがワイルドカード）をとる場合は、ｇｐｖ１ｐ１＋・・・＋ｖ（ｎ−１）ｐ（ｎ−１）を作成すればよく、トークン・ベクトルの１番目と３番目と5番目の要素データのみと対応（他の要素データはワイルドカード）をとる場合は、ｇｐｖ１ｐ１＋ｖ３ｐ３＋ｖ５ｐ５を作成すればよい。即ち、トークン・ベクトル内の要素データのうち、ワイルドカードに対応する乱数ｐｋ、即ちｐ２及びｐ４の値を０に設定する。なお、積の計算は、次式の数６に示すように、乗算で処理可能である(S1105)。
（数６）ｇｒｖ１ｐ１＋・・・＋ｖｎｐｎ＝ｇｒｖ１ｐ１ｇｒｖ２ｐ２・・・ｇｒｖｎｐｎ
トークン暗号化部213は、直交ベクトルの要素データ(ｚ１、ｚ２、・・・・ｚｎ）を用い、元ｇｑから、それぞれｇｑｚ１、ｇｑｚ２、・・・、ｇｑｚｎを作成する(S1106)。
【０１５８】
トークン暗号化部213は、各元の積である、ｇｑｚ１ｇｐｖ１ｇｒｔｒ１、ｇｑｚ２ｇｐｖ２ｇｒｔｒ２、・・・、ｇｑｚｎｇｐｖｎｇｒｔｒｎ、を計算し、対応写像を用いて、ＧＮ上の元へ移したデータを、それぞれＴＤ１（ｇｑｚ１ｇｐｖ１ｇｒｔｒ１に対応）、ＴＤ２（ｇｑｚ２ｇｐｖ２ｇｒｔｒ２に対応）、・・・ＴＤｎ（ｇｑｚｎｇｐｖｎｇｒｔｒｎに対応）とする(S1107)。
【０１５９】
なお、公開パラメータＮが４つの素数の積（Ｎ＝ｐｑｒｓ）であり、インデックスとトークンを撹乱する為に、３つの群(Ｇｐ，Ｇｒ，Ｇｓ)が利用可能な非特許文献２の開示技術とは異なり、本発明では、公開パラメータＮを３つの素数の積(Ｎ＝ｐｑｒ)にしたため、インデックスとトークンを撹乱する為に、２つの群 (Ｇｐ，Ｇｒ)しか、利用できない。そこで、S1107で示したように、トークン・ベクトル撹乱群の削除用トークンと、インデックス・ベクトル撹乱群の削除用トークンを作成し、それらの撹乱情報の削除を可能にした。
【０１６０】
S1107も、S1105同様、検索に関わるトークン・ベクトル内の要素データに関連している。即ち、トークン・ベクトルとの完全一致検索のみを依頼する場合は、全てのＴＤ１、ＴＤ２、・・・、ＴＤｎを作成すればよいが、トークン・ベクトルの部分一致検索の場合、例えば、トークン・ベクトルの１番目から（ｎ−１）番目の要素データとの対応（ｎ番目の要素データがワイルドカード）をとる場合は、ＴＤ１、ＴＤ２、・・・、ＴＤｎ−１を作成すればよく、ワイルドカードを含む上記の例では、トークン・ベクトルの１番目と３番目と５番目の要素データのみと対応（他の要素データはワイルドカード）をとる場合は、ＴＤ１、ＴＤ３、ＴＤ５を作成すればよい。さらに、検索用のデータとして、ＴＤ６及びＴＤ７を作成する。
【０１６１】
トークン暗号化部213は、ｇｐｖ１ｐ１＋・・・＋ｖｎｐｎの逆元ｇｐ−(ｖ１ｐ１＋・・・＋ｖｎｐｎ)を計算し、これをＴＤｎ＋１とし、ｇｒｔの逆元ｇｒ−ｔをＴＤｎ＋２とし、ＴＤ１、ＴＤ２、・・・、ＴＤｎ＋２までを一組のデータとして、出力する。全体処理部211は、出力されたデータを暗号化トークン236として、記憶部220に保存する。更に、作成した（ワイルドカードの番号を抜いた）ＴＤの添え字番号も、暗号化トークン236として記憶部220に保存する(S1108)。
【０１６２】
上記の処理(S1101からS1108)により、検索エージェント200は、記憶部220に格納された秘密鍵251と公開パラメータに基づき、暗号化トークン236を作成できる。特に、トークン・ベクトル（ｚ１、ｚ２、・・・、ｚｎ）は秘密鍵251であるｇｑの指数として扱われる上、更に十分に乱数性が高い群Ｇｐと群Ｇｑの元に挟まれているので（例えば、ＴＤ１は、ｇｑｚ１ｇｐｖ１ｇｒｔｒ１であり、公開パラメータｇｐを乱数ｖ１乗したｇｐｖ１と、公開パラメータｇｒｒ１を乱数ｔ乗したｇｒｔｒ１とによって撹乱されている）、値が同じトークン・ベクトルに対しても、毎回発生する乱数が異なるので、異なる値の暗号化トークン236が作成されるため、暗号化トークン236には高い安全性が期待できる。また、３つの素数の積で構成された公開パラメータＮを暗号化トークン236の作成に用いるため、暗号化の対象であるメッセージの利用効率も、非特許文献２の技術に比べ、高い。
【０１６３】
（暗号化可能なメッセージの効率）＝ｑ／Ｎ＝１/ｐｒ（＞１／（ｐｑｒ））
更に、S1105の処理において、暗号化トークン236に取り込むトークン・ベクトルの要素データを選択することにより、完全一致検索だけでなく、部分一致検索用の暗号化トークン236を作成できる。また、暗号化トークン236は、ＴＤ１・・・ＴＤｎ＋２だけで構成する必要はなく、特に部分一致検索用にその構成数を増やしてもよい。
【０１６４】
なお、上記の処理手順は、固定されたものではなく、処理手順を変更して実施してもかまわない。例えば、登録エージェント100は、S1103、S1104、S1105の順序を変更し、暗号化トークン236を作成してもよい。
【０１６５】
図１２は、管理サーバ300の暗号化データを検索する処理を示す、シーケンス図である。管理サーバ300において、全体処理部311は、検索部312に、暗号化トークン336と、暗号化インデックス701の番号を入力し、暗号化データ712の検索処理を指示する。検索では、管理サーバ300向けに作成された暗号化インデックス701と暗号化トークン336の２種類の検索用データ（ＩＤｎ＋１(＝ｇｐｓ)、ＩＤｎ＋２(＝ｇｒΣｕｋｒｋ)、ＴＤｎ＋１(＝ｇｐ−Σｖｋｐｋ)、ＴＤｎ＋２(＝ｇｒ−ｔ)）を活用し、暗号化インデックス701と暗号化トークン336における乱数情報（群Ｇｐの元と群Ｇｒの元）を排除する。
（非特許文献２の技術とは異なり、本発明では、検索用のデータが２種類あるため、公開パラメータＮが３つの素数の積でも、部分検索が可能である）。
【０１６６】
検索部312は、記憶部320に記憶されたパラメータを読み込む(S1201)。パラメータ337には、暗号鍵の長さに関するパラメータＮ−lengthや、暗号文の種類に関するパラメータｎ−kinds、双線形写像などが記載されている。
【０１６７】
検索部は、入力された暗号化インデックス701の番号を元に、記憶部320に格納されたインデックス・テーブルから暗号化インデックス701を読み込む(S1202)。
【０１６８】
以降、管理サーバ300は暗号化インデックス701と暗号化トークン336の照合処理を行う。
【０１６９】
まず、検索部312は暗号化トークン336から、ＴＤの添え字番号を抜き出す(S1203)。以降では、簡単のため、ＴＤの添え字番号が１からｎ＋２まで全て存在する場合を紹介する。
【０１７０】
検索部312は暗号化インデックス701からＩＤ１（元ｇｑｘ１ｇｐｓｐ１ｇｒｕ１に対応）、暗号化トークン336からＴＤ１（元ｇｑｚ１ｇｐｖ１ｇｒｔｒ１に対応）を取り出す。次式の数７に従い、ＩＤ１とＴＤ１の双線形写像を計算し、これをＵ１とする。
（数７）Ｕ１＝ｅ（ｇｑｘ１ｇｐｓｐ１ｇｒｕ１、ｇｑｚ１ｇｐｖ１ｇｒｔｒ１）
＝ｅ（ｇｐ、ｇｐ）ｓｐ１ｖ１ｅ（ｇｑ、ｇｑ）ｘ１ｚ１ｅ（ｇｒ、ｇｒ）ｕ１ｔｒ１
ここで、数７の関係式の導出について説明する。
【０１７１】
数１に関連したｅ（ｘｙ、ｚ）＝ｅ（ｘ、ｚ）ｅ（ｙ、ｚ）の関係を用いると、２つの変数ｘ、ｙを含む場合に、
ｅ（ｘｍ１ｙｎ１，ｘｍ２ｙｎ２）＝ｅ（ｘｍ１，ｘｍ２ｙｎ２）ｅ（ｙｎ１，ｘｍ２ｙｎ２）
＝ｅ（ｘｍ１，ｘｍ２）ｅ（ｘｍ１，ｙｎ２）ｅ（ｙｎ１，ｘｍ２）ｅ（ｙｎ１，ｙｎ２）
＝ｅ（ｘ，ｘ）ｍ１ｍ２ｅ（ｘ，ｙ）ｍ１ｎ２ｅ（ｙ，ｘ）ｎ１ｍ２ｅ（ｙ，ｙ）ｎ１ｎ２となる。特に、ｘ∈Ｘ、ｙ∈Ｙ、かつＸ≠Ｙの場合（ｘとｙが異なる群に属する場合）にｅ（ｘ，ｙ）＝ｅ（ｙ，ｘ）＝１とすると、ｅ（ｘｍ１ｙｎ１，ｘｍ２ｙｎ２）＝ｅ（ｘ，ｘ）ｍ１ｍ２ｅ（ｙ，ｙ）ｎ１ｎ２となる。さらに変数が増えた場合、上記の関係を繰り返し適用すると、数７の関係式が得られる。なお、ｅ（ｘｙ、ｚ）＝ｅ（ｘ、ｚ）ｅ（ｙ、ｚ）の関係において、変数及びｅ（ｘｙ、ｚ）等の対数によって上記の関係を整理すると、上記の関係が２つの変数に対する線形写像（双線形写像）であることが示される。
【０１７２】
次に、検索部312は、暗号化インデックス701からＩＤ２（元ｇｑｘ２ｇｐｓｐ２ｇｒｕ２に対応）、暗号化トークン336からＴＤ２（元ｇｑｚ２ｇｐｖ２ｇｒｔｒ２に対応）を取り出し、同様に双線形写像を計算し、Ｕ２を作成する。この手順を暗号化インデックス701のＩＤ１、ＩＤ２、・・・Ｄｎ＋２、及び暗号化トークン336のＴＤ１、ＴＤ２、・・・ＴＤｎ、ＴＤｎ＋１、ＴＤｎ＋２についてＵｋ＝ｅ（ＩＤｋ，ＴＤｋ）（ｋ＝１〜ｎ，ｎ＋１，ｎ＋２）の処理を行い、中間データＵ１、Ｕ２、・・・、Ｕｎ、Ｕｎ＋１、Ｕｎ＋２を作成する。(S1204)
次に、管理サーバ300は、中間データＵ１、Ｕ２、・・・Ｕｎ、Ｕｎ＋１、Ｕｎ＋２の積を計算し、これを検索結果データｖとする(S1205)。以降、Ｕｎ＋１とＵｎ＋２は、それぞれ双線形写像Ｕ１、Ｕ２、・・・Ｕｎにおける群Ｇｐの元と、群Ｇｒの元からなる乱数情報の排除に用いられる。暗号化インデックス701と暗号化トークン336に、検索用のデータが２種類(ＩＤｎ＋１、ＩＤｎ＋２、ＴＤｎ＋１、ＴＤｎ＋２)存在するため、これら乱数情報の排除用のデータＵｎ＋１、Ｕｎ＋２が作成できる。
（数８）ｖ＝Ｕ１Ｕ２・・・Ｕｎ＋２
＝ｅ（ｇｐ、ｇｐ）ｓｐ１ｖ１ｅ（ｇｑ、ｇｑ）ｘ１ｚ１ｅ（ｇｒ、ｇｒ）ｕ１ｔｒ１
ｅ（ｇｐ、ｇｐ）ｓｐ２ｖ２ｅ（ｇｑ、ｇｑ）ｘ２ｚ２ｅ（ｇｒ、ｇｒ）ｕ２ｔｒ２
・・・・・・・・・・・・・・
・・・・・・・・・・・・・・
ｅ（ｇｐ、ｇｐ）ｓｐｎｖｎｅ（ｇｑ、ｇｑ）ｘｎｚｎｅ（ｇｒ、ｇｒ）ｕｎｔｒｎ
ｅ（ｇｐ、ｇｐ）−ｓΣｖｋｐｋｅ（ｇｒ、ｇｒ）−ｔΣｕｋｒｋ
＝ｅ（ｇｐ、ｇｐ）ｓΣｐｋｖｋｅ（ｇｒ、ｇｒ）ｔΣｕｋｒｋ
ｅ（ｇｑ、ｇｑ）(ｘ１ｚ１＋ｘ２ｚ２＋・・・＋ｘｎｚｎ) 
ｅ（ｇｐ、ｇｐ）−ｓΣｐｋｖｋｅ（ｇｒ、ｇｒ）−ｔΣｕｋｒｋ
＝ｅ（ｇｑ、ｇｑ）(ｘ１ｚ１＋ｘ２ｚ２＋・・・＋ｘｎｚｎ) 
上記の数８の右辺の第３式は、模式的に、（インデックスの撹乱因子）・（トークンの撹乱因子）・（インデックス・ベクトルとトークン・ベクトルの直交ベクトルとの内積）・（インデックスの撹乱削除因子）・（トークンの撹乱削除因子）のように、複数の因子の積として表され、インデックス及びトークンのそれぞれの撹乱因子とその削除因子とが相殺されて（インデックス・ベクトルとトークン・ベクトルの直交ベクトルとの内積）のみが残り、数８の右辺の第４式が得られる。
【０１７３】
ここで、ｘ１ｚ１＋・・・＋ｘｎｚｎ＝ｋｑ（ｋは任意の整数）
が成立すれば、次式の数９より、群ＧＮ上の単位元１を得る。
（数９）ｖ＝ｅ（ｇｑ、ｇｑ）０＝１
また、ｘ１ｚ１＋・・・＋ｘｎｚｎ＝ｋｑ（ｋは任意の整数）が成立しない時、数９は成立しえない。従って、平文インデックス132と平文トークン233が等しければ、エンコードされたインデックス・ベクトルとトークン・ベクトルは等しく、更にインデックス・ベクトルと直交ベクトルで数９が成立するので、数９の成立、未成立で評価できる。
【０１７４】
検索部312は、全体処理部311へ検索結果データｖを出力する(S1206)。
【０１７５】
全体処理部311は、検索結果データｖの値が１である場合、記憶部320から、暗号化インデックス701に関連付けられたアドレスをロードする(S1207)。
【０１７６】
全体処理部311は、ロードしたアドレスから、該当する暗号化データ712をロードし、これを検索結果の一部として、記憶部320に保存する(S1208)。
【０１７７】
上記の処理(S1201からS1208)により、管理サーバ300は、記憶部320に格納された公開パラメータに基づき、暗号化トークン336に関連する暗号化インデックス701を発見でき、その暗号化インデックス701に関連する暗号化データ712を含めた検索結果を作成できる。
【０１７８】
なお、上記の処理手順は、固定されたものではなく、処理手順や処理内容を変更して実施してもかまわない。例えば、管理サーバ300は中間データＵ１、・・・、Ｕｎ＋２の作成処理を一括で実施してもよい(S1204)。また、複数件の暗号化インデックス701の検索毎に、検索結果データｖを作成し(S1205)、出力(S1206)してもよい。S1204、S1205では、ＴＤの添え字番号が１からｎ＋２まで全て存在する完全一致検索の場合を紹介した。同様に、例えば、１から（ｎ−１）番とｎ＋１番とｎ＋２番が記憶されている場合、Ｕ１Ｕ２・・・Ｕｎ―１Ｕｎ＋１Ｕｎ＋２を検索結果ｖとすればよく、1番と３番と５番とｎ＋１番とｎ＋２番が記憶されている場合は、Ｕ１Ｕ３Ｕ５Ｕｎ＋１Ｕｎ＋２を検索結果ｖとすれば、部分一致検索が実施できる。
【０１７９】
なお、上記の処理では、ＧＮ上の２つの元を入力とし、別のＧＮ’上の元へ射影する双線形写像ｅ（ｅ：ＧＮ×ＧＮ→ＧＮ’）を用いたが、異なる性質の双線形写像ｅ’（ｅ’：ＧＮ１×ＧＮ２→ＧＮ３、ただし、ＧＮ１、ＧＮ２、ＧＮ３はそれぞれ異なる位数を有する）でも、同様に実現できる。
【０１８０】
なお、上記の処理では、乗法に関する群を用いたが、楕円曲線上の加法群など、他の群でも同様に実現できる。
【０１８１】
（実施の形態２）
本発明の第一の実施形態と異なり、第二の実施の形態では、検索処理システムは、登録エージェント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の処理内容を兼ねるものであり、同様に、その説明を省く。
【符号の説明】
【０１８５】
１００：登録エージェント、２００：検索エージェント、３００：管理サーバ
４００：ネットワーク、５００：コンピュータ、１０１、２０１、３０１：入力部、１０２、２０２、３０２：出力部、１０３、２０３、３０３：通信部、１１０、２１０、３１０：制御部、１１１、２１１、３１１：全体処理部、１１２：鍵設定部、１１３：インデックス暗号化部、１１５、２１５：エンコード部、１１６、２１６：乱数生成部、１１７データ暗号化部、２１３：トークン暗号化部、２１８：データ復号部、３１２：検索部、１２０、２２０、３２０：記憶部、
１３０、２３０、３３０：データ記憶部、１３１、２３１：平文データ、１３２：平文インデックス、１３４、２３４：暗号化データ、１３５：暗号化インデックス、１３７、２３７、３３７：パラメータ、２３３：平文トークン、２３６、３３６：暗号化トークン、３３１：暗号化データ・テーブル、３３２：暗号化インデックス・テーブル、１５０、２５０：鍵記憶部、１５１、２５１：秘密鍵、１６０、２６０、３６０：プログラム記憶部、１８０、２８０、３８０：一時情報記憶部、５０１：ＣＰＵ(Central Processing Unit)、５０２：メモリ、５０３：外部記憶装置、５０８：記憶媒体、５０７：読書装置、５０６：入力装置、５０５：出力装置、５０４：通信装置、５０９：内部通信線、７００：インデックス・テーブル、７０１：暗号化インデックス、７０２：アドレス値、７１０：データ・テーブル、７１１：アドレス、７１２：暗号化データ
【図１】
0005667969.tif 000002
【図２】
0005667969.tif 000003
【図３】
0005667969.tif 000004
【図４】
0005667969.tif 000005
【図５】
0005667969.tif 000006
【図６】
0005667969.tif 000007
【図７Ａ】
0005667969.tif 000008
【図７Ｂ】
0005667969.tif 000009
【図８】
0005667969.tif 000010
【図９】
0005667969.tif 000011
【図１０】
0005667969.tif 000012
【図１１】
0005667969.tif 000013
【図１２】
0005667969.tif 000014
【図１３】
0005667969.tif 000015
【図１４】
0005667969.tif 000016