(57)【特許請求の範囲】
【請求項１】
クライアントおよびサーバから構成され、前記クライアントへの入力と、前記サーバへの入力に含まれる属性名の値とが所定の関係を満たす場合に、前記属性名に関連付けられたデータを前記クライアントが前記サーバから取得可能な検索システムであって、
前記クライアントは、
前記クライアントへの入力と前記属性名の値とが前記所定の関係を満たす場合に０となる、前記属性名を変数とする多項式を生成する多項式生成手段と、
加法準同型性を有し、前記クライアントは解読できるが前記サーバは解読できない所定の公開鍵暗号方式で前記多項式の係数を暗号化してクライアント側暗号値を生成する暗号化手段と、を有し、
前記サーバは、前記所定の公開鍵暗号方式の加法準同型性を利用して、前記クライアント側暗号値を用い、前記多項式の係数が暗号化された状態で、前記多項式における変数を前記属性名の値で置き換えた値とランダム値との積と、前記データと予め定めたチェックサムとを連結した値と、の和の暗号化値であるサーバ側暗号値を生成する暗号化状態処理手段を有し、
前記クライアントは、さらに、
前記サーバ側暗号値を解読する復号手段と、
解読結果に前記チェックサムが含まれる場合に、前記解読結果から前記データを取得するデータ取得手段と、を有する、検索システム。
【請求項２】
前記所定の条件は、前記クライアントへの入力と前記属性名の値とが第１条件および第２条件の少なくとも一方を満たすことであり、
前記多項式生成手段は、前記第１条件を満たす場合に０となる第１多項式と、前記第２条件を満たす場合に０となる第２多項式と、を生成し、前記第１多項式および前記第２多項式を乗じて、前記多項式を生成する、請求項１に記載の検索システム。
【請求項３】
前記所定の条件は、前記クライアントへの入力と前記属性名の値とが第１条件および第２条件の一方のみを満たすことであり、
前記多項式生成手段は、前記多項式として、前記第１条件を満たす場合に０となる第１多項式と、前記第２条件を満たす場合に０となる第２多項式と、を生成し、
前記暗号化手段は、前記クライアント側暗号値として、前記第１多項式の係数および前記第２多項式の係数を暗号化して第１クライアント側暗号値および第２クライアント側暗号値をそれぞれ生成し、
前記暗号化状態処理手段は、
前記第１クライアント側暗号値を用い、前記第１多項式における変数を前記属性名の値で置き換えた値と第１ランダム値との積と、前記データと予め定めたチェックサムとを連結した値と、の和の暗号化値である第１サーバ側暗号値を生成するとともに、
前記第２クライアント側暗号値を用い、前記第２多項式における変数を前記属性名の値で置き換えた値と第２ランダム値との積と、前記データと予め定めたチェックサムとを連結した値と、の和の暗号化値である第２サーバ側暗号値を生成し、
前記第１サーバ側暗号値および前記第２サーバ側暗号値をシャッフルして、これらを前記サーバ側暗号値とする、請求項１に記載の検索システム。
【請求項４】
前記所定の条件は、前記クライアントへの入力と前記属性名の値とが第１条件および第２条件の両方を満たすことであり、
前記多項式生成手段は、前記第１条件を満たす場合に０となる第１多項式と、前記第２条件を満たす場合に０となる第２多項式と、を生成し、前記第１多項式と第１ランダム値との積と、前記第２多項式と第２ランダム値との積とを加えて前記多項式を生成する、請求項１に記載の検索システム。
【請求項５】
前記所定の条件は、前記クライアントへの入力と前記属性名の値とが第１条件および第２条件の両方を満たすことであり、
前記多項式生成手段は、前記多項式として、前記第１条件を満たす場合に０となる第１多項式と、前記第２条件を満たす場合に０となる第２多項式と、を生成し、
前記暗号化手段は、前記クライアント側暗号値として、前記第１多項式の係数および前記第２多項式の係数を暗号化して第１クライアント側暗号値および第２クライアント側暗号値をそれぞれ生成し、
前記暗号化状態処理手段は、前記第１クライアント側暗号値および前記第２クライアント側暗号値を用い、
前記第１多項式における変数を前記属性名の値で置き換えた値と第１ランダム値との積と、
前記第２多項式における変数を前記属性名の値で置き換えた値と第２ランダム値との積と、
前記データと予め定めたチェックサムとを連結した値と、
の和の暗号化値を前記サーバ側暗号値として生成する、請求項１に記載の検索システム。
【請求項６】
前記サーバへの入力には、複数のインデックスに対応する複数の前記属性名の値が含まれ、
前記暗号化状態処理手段は、前記複数のインデックスのそれぞれに対して、前記データを所定の仮想値とする前記サーバ側暗号値を生成し、
前記復号手段は、前記サーバ側暗号値のそれぞれを解読し、
前記データ取得手段は、前記データが前記所定の仮想値である解読結果の数に基づいて、前記所定の関係を満たすインデックスの数を算出する、請求項１乃至５の何れかに記載の検索システム。
【請求項７】
前記所定の条件は、前記クライアントへの入力が前記属性名の値と一致することである、請求項１乃至５のいずれかに記載の検索システム。
【請求項８】
前記クライアントへの入力は２つの値で定められる範囲であり、
前記所定の条件は、前記範囲に前記属性名の値が含まれることである、請求項１乃至５のいずれかに記載の検索システム。
【請求項９】
前記２つの値および属性名がとり得る値の数はｎ個（ｎは２以上の整数）であり、
前記多項式生成手段は、レベル数が（ｌｏｇ２ｎ＋１）以上の最小の整数である２分木であって、各ノードにはユニークなノード名が割り当てられており、最下位レベルにおけるノードのそれぞれが前記クライアントへの入力がとり得る値のそれぞれに対応付けられる２分木において、前記範囲をカバーするノードのノード名が、前記属性名の値に基づく所定のノード名と一致する場合に０となる前記多項式を生成し、
前記暗号化状態処理手段は、前記多項式生成手段の２分木と同じ構造の２分木であって、最下位レベルにおけるノードのそれぞれが前記属性名が取り得る値のそれぞれに対応付けられる２分木において、前記最下位レベルにおける前記属性名の値に対応付けられたノードに到達するまでに経由されるノードのノード名で、前記多項式における変数を置き換えた値から前記サーバ側暗号値を生成する、請求項８に記載の検索システム。
【請求項１０】
前記多項式生成手段は、前記範囲をカバーするノードをレベルごとに特定し、特定されたノードが２つ未満であるレベルについては、ノード名として用いられていないダミーのノード名を用いて各ノードの変数を２つずつとして、前記多項式を生成する、請求項９に記載の検索システム。
【請求項１１】
前記属性名の範囲は２つの値で定められ、
前記所定の条件は、前記範囲に前記クライアントへの入力が含まれることである、請求項１乃至５のいずれかに記載の検索システム。
【請求項１２】
前記クライアントへの入力および前記２つの値がとり得る値の数はｎ個（ｎは２以上の整数）であり、
前記多項式生成手段は、レベル数が（ｌｏｇ２ｎ＋１）以上の最小の整数である２分木であって、各ノードにはユニークなノード名が割り当てられており、最下位レベルにおけるノードのそれぞれが前記クライアントへの入力がとり得る値のそれぞれに対応付けられる２分木において、前記最下位レベルにおける前記属性名の値に対応付けられたノードに到達するまでに経由されるノードのノード名が、前記範囲に基づく所定のノード名と一致する場合に０となる前記多項式を生成し、
前記暗号化状態処理手段は、前記多項式生成手段の２分木と同じ構造の２分木であって、最下位レベルにおけるノードのそれぞれが前記属性名が取り得る値のそれぞれに対応付けられる２分木において、前記範囲をカバーするノードのノード名で、前記多項式における変数を置き換えた値から前記サーバ側暗号値を生成する、請求項１１に記載の検索システム。
【請求項１３】
前記クライアントへの入力は第１入力値および第２入力値で定められる第１範囲であり、
前記属性の範囲は第１属性値および第２属性値で定められる第２範囲であり、
前記所定の条件は、前記第１範囲および前記第２範囲の少なくとも一部が重複することである、請求項１乃至５のいずれかに記載の検索システム。
【請求項１４】
前記多項式生成手段は、
前記第１入力値が前記第２範囲に含まれること、
前記第２入力値が前記第２範囲に含まれること、
前記第１属性値が前記第１範囲に含まれること、および、
前記第２属性値が前記第１範囲に含まれること、
の少なくとも１つが満たされる場合に０となる前記多項式を生成する、請求項１３に記載の検索システム。
【請求項１５】
前記クライアントへの入力は前記サーバには知られない、請求項１乃至１４のいずれかに記載の検索システム。
【請求項１６】
前記所定の関係を満たさない場合、前記データは前記クライアントには知られない、請求項１乃至１５に記載の検索システム。
【請求項１７】
クライアントおよびサーバから構成され、前記クライアントへの入力と、前記サーバへの入力に含まれる属性名の値とが所定の関係を満たす場合に、前記属性名に関連付けられたデータを前記クライアントが前記サーバからデータを取得可能な検索システムにおけるクライアントであって、
前記クライアントへの入力と前記属性名の値とが前記所定の関係を満たす場合に０となる、前記属性名を変数とする多項式を生成する多項式生成手段と、
加法準同型性を有し、前記クライアントは解読できるが前記サーバは解読できない所定の公開鍵暗号方式で前記多項式の係数を暗号化してクライアント側暗号値を生成する暗号化手段と、
前記サーバが、前記所定の公開鍵暗号方式の加法準同型性を利用して、前記クライアント側暗号値を用い、前記多項式の係数が暗号化された状態で生成した、前記多項式における変数を前記属性名の値で置き換えた値とランダム値との積と、前記データと予め定めたチェックサムとを連結した値と、の和の暗号化値であるサーバ側暗号値を解読する復号手段と、
解読結果に前記チェックサムが含まれる場合に、前記解読結果から前記データを取得するデータ取得手段と、を有する、クライアント。
【請求項１８】
クライアントおよびサーバから構成され、前記クライアントへの入力と、前記サーバへの入力に含まれる属性名の値とが所定の関係を満たす場合に、前記属性名に関連付けられたデータを前記クライアントが前記サーバから取得可能な検索システムにおけるクライアントを、
前記クライアントへの入力と前記属性名の値とが前記所定の関係を満たす場合に０となる、前記属性名を変数とする多項式を生成する多項式生成手段と、
加法準同型性を有し、前記クライアントは解読できるが前記サーバは解読できない所定の公開鍵暗号方式で前記多項式の係数を暗号化してクライアント側暗号値を生成する暗号化手段と、
前記サーバが、前記所定の公開鍵暗号方式の加法準同型性を利用して、前記クライアント側暗号値を用い、前記多項式の係数が暗号化された状態で生成した、前記多項式における変数を前記属性名の値で置き換えた値とランダム値との積と、前記データと予め定めたチェックサムとを連結した値と、の和の暗号化値であるサーバ側暗号値を解読する復号手段と、
解読結果に前記チェックサムが含まれる場合に、前記解読結果から前記データを取得するデータ取得手段と、として機能させる、検索プログラム。
【請求項１９】
クライアントおよびサーバから構成され、前記クライアントへの入力と、前記サーバへの入力に含まれる属性名の値とが所定の関係を満たす場合に、前記属性名に関連付けられたデータを前記クライアントが前記サーバから取得可能な検索システムにおけるサーバであって、
前記クライアントへの入力と前記属性名の値とが前記所定の関係を満たす場合に０となる、前記属性名を変数とする多項式の係数を、加法準同型性を有し、前記クライアントは解読できるが前記サーバは解読できない所定の公開鍵暗号方式で前記クライアントが暗号化したクライアント側暗号値を用い、前記所定の公開鍵暗号方式の加法準同型性を利用して、前記多項式の係数が暗号化された状態で、前記多項式における変数を前記属性名の値で置き換えた値とランダム値との積と、前記データと予め定めたチェックサムとを連結した値と、の和の暗号化値であるサーバ側暗号値を生成する暗号化状態処理手段を有する、サーバ。
【請求項２０】
クライアントおよびサーバから構成され、前記クライアントへの入力と、前記サーバへの入力に含まれる属性名の値とが所定の関係を満たす場合に、前記属性名に関連付けられたデータを前記クライアントが前記サーバから取得可能な検索システムにおけるサーバを、
前記クライアントへの入力と前記属性名の値とが前記所定の関係を満たす場合に０となる、前記属性名を変数とする多項式の係数を、加法準同型性を有し、前記クライアントは解読できるが前記サーバは解読できない所定の公開鍵暗号方式で前記クライアントが暗号化したクライアント側暗号値を用い、前記所定の公開鍵暗号方式の加法準同型性を利用して、前記多項式の係数が暗号化された状態で、前記多項式における変数を前記属性名の値で置き換えた値とランダム値との積と、前記データと予め定めたチェックサムとを連結した値と、の和の暗号化値であるサーバ側暗号値を生成する暗号化状態処理手段として機能させる、検索プログラム。
【請求項２１】
クライアントおよびサーバから構成され、前記クライアントへの入力と、前記サーバへの入力に含まれる属性名の値とが所定の関係を満たす場合に、前記属性名に関連付けられたデータを前記クライアントが前記サーバから取得可能な検索方法であって、
前記クライアントが、前記クライアントへの入力と前記属性名の値とが前記所定の関係を満たす場合に０となる、前記属性名を変数とする多項式を生成し、
前記クライアントが、加法準同型性を有し、前記クライアントは解読できるが前記サーバは解読できない所定の公開鍵暗号方式で前記多項式の係数を暗号化してクライアント側暗号値を生成し、
前記サーバが、前記所定の公開鍵暗号方式の加法準同型性を利用して、前記クライアント側暗号値を用い、前記多項式の係数が暗号化された状態で、前記多項式における変数を前記属性名の値で置き換えた値とランダム値との積と、前記データと予め定めたチェックサムとを連結した値と、の和の暗号化値であるサーバ側暗号値を生成し、
前記クライアントが、前記サーバ側暗号値を解読し、
前記クライアントが、解読結果に前記チェックサムが含まれる場合に、前記解読結果から前記データを取得する、検索方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、検索システム、クライアント、サーバ、検索プログラムおよび検索方法に関する。
【背景技術】
【０００２】
データベースを持つサーバに対して、クライアントから検索を行うシステムがある。このようなシステムにおいて、クライアントは検索キーをサーバに知られたくない場合や、サーバは不必要にデータをクライアントに知られたくない場合もある（例えば、特許文献１）。このような検索は秘匿検索とも呼ばれる。秘匿検索に関連して、特許文献２および非特許文献１〜１５が知られている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】国際公開第２０１３／０９８６９８号
【特許文献２】米国特許第８０４５７１１号
【非特許文献】
【０００４】
【非特許文献１】Nergiz, A. E., Nergiz, M. E., Pedersen, T., & Clifton, C., "Practical and Secure Integer Comparison and Interval Check", In Proc. of IEEE Second International Conference on Social Computing 2010, pp. 791-799 (2010)
【非特許文献２】http://eprint.iacr.org/2005/043.pdf
【非特許文献３】http://www.win.tue.nl/~berry/papers/pkc07intcomp.pdf
【非特許文献４】http://arxiv.org/pdf/1401.3768v1.pdf
【非特許文献５】http://arxiv.org/pdf/1310.8063v1.pdf
【非特許文献６】http://www.internetsociety.org/sites/default/files/04_1.pdf
【非特許文献７】Boyang W., Yantian H., Ming L., Haitao W., Hui L., "Maple Scalable Multi-Dimensional Range Search over Encrypted Cloud Data with Tree-based Index", In Proc. of ASIACCS 2014, pp. 111-122
【非特許文献８】http://www.cs.ucr.edu/~ravi/Papers/DBConf/rhat_trees.pdf
【非特許文献９】Kaghazgaran P., "Secure two party comparison over encrypted data", In Proc. of IEEE WICT 2010, pp. 1123-1126
【非特許文献１０】Zhenmin L., Jaromczyk J.W., "An efficient secure comparison protocol", In Proc. of IEEE ISI 2012, pp. 30-35
【非特許文献１１】Freedman, M., Ishai, Y., Pinkas, B., Reingold, O., "Keyword search and oblivious pseudorandom functions", In TCC 2005, pp.303-324
【非特許文献１２】Jarecki S.,  Liu X., "Efficient oblivious pseudorandom function with applications to adaptive ot and secure computation of set intersection", In TCC 2005, pp.577-594
【非特許文献１３】Blake I., Kolesnikov V., "Strong conditional oblivious transfer and computing on intervals", In Asiacrypt 2004, pp. 515-529
【非特許文献１４】Cristofaro D.E., Lu Y., Tsudik G, "Efficient Techniques for Privacy-Preserving Sharing of Sensitive Information", In Trust 2011, pp. 239-253
【非特許文献１５】Boneh D., Gentry C., Halevi S., Wang F., Wu D., "Private Database Queries Using Somewhat Homomorphic Encryption", In ACNS 2013, pp.102-118
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、これらの文献に記載の検索では、特定条件での検索しかできないことや、検索の処理量が多いことが問題となる。
【０００６】
本発明はこのような問題点に鑑みてなされたものであり、本発明の課題は汎用的かつ効率的な秘匿検索を実現する検索システム、クライアント、サーバ、検索プログラムおよび検索方法を提供することである。
【課題を解決するための手段】
【０００７】
本発明の一態様によれば、クライアントおよびサーバから構成され、前記クライアントへの入力と、前記サーバへの入力に含まれる属性名の値とが所定の関係を満たす場合に、前記属性名に関連付けられたデータを前記クライアントが前記サーバから取得可能な検索システムであって、前記クライアントは、前記クライアントへの入力と前記属性名の値とが前記所定の関係を満たす場合に０となる、前記属性名を変数とする多項式を生成する多項式生成手段と、加法準同型性を有し、前記クライアントは解読できるが前記サーバは解読できない所定の公開鍵暗号方式で前記多項式の係数を暗号化してクライアント側暗号値を生成する暗号化手段と、を有し、前記サーバは、前記所定の公開鍵暗号方式の加法準同型性を利用して、前記クライアント側暗号値を用い、前記多項式の係数が暗号化された状態で、前記多項式における変数を前記属性名の値で置き換えた値とランダム値との積と、前記データと予め定めたチェックサムとを連結した値と、の和の暗号化値であるサーバ側暗号値を生成する暗号化状態処理手段を有し、前記クライアントは、さらに、前記サーバ側暗号値を解読する復号手段と、解読結果に前記チェックサムが含まれる場合に、前記解読結果から前記データを取得するデータ取得手段と、を有する、検索システムが提供される。
【０００８】
前記所定の条件は、前記クライアントへの入力と前記属性名の値とが第１条件および第２条件の少なくとも一方を満たすことであり、前記多項式生成手段は、前記第１条件を満たす場合に０となる第１多項式と、前記第２条件を満たす場合に０となる第２多項式と、を生成し、前記第１多項式および前記第２多項式を乗じて、前記多項式を生成してもよい。
【０００９】
前記所定の条件は、前記クライアントへの入力と前記属性名の値とが第１条件および第２条件の一方のみを満たすことであり、前記多項式生成手段は、前記多項式として、前記第１条件を満たす場合に０となる第１多項式と、前記第２条件を満たす場合に０となる第２多項式と、を生成し、前記暗号化手段は、前記クライアント側暗号値として、前記第１多項式の係数および前記第２多項式の係数を暗号化して第１クライアント側暗号値および第２クライアント側暗号値をそれぞれ生成し、前記暗号化状態処理手段は、前記第１クライアント側暗号値を用い、前記第１多項式における変数を前記属性名の値で置き換えた値と第１ランダム値との積と、前記データと予め定めたチェックサムとを連結した値と、の和の暗号化値である第１サーバ側暗号値を生成するとともに、前記第２クライアント側暗号値を用い、前記第２多項式における変数を前記属性名の値で置き換えた値と第２ランダム値との積と、前記データと予め定めたチェックサムとを連結した値と、の和の暗号化値である第２サーバ側暗号値を生成し、前記第１サーバ側暗号値および前記第２サーバ側暗号値をシャッフルして、これらを前記サーバ側暗号値としてもよい。
【００１０】
前記所定の条件は、前記クライアントへの入力と前記属性名の値とが第１条件および第２条件の両方を満たすことであり、前記多項式生成手段は、前記第１条件を満たす場合に０となる第１多項式と、前記第２条件を満たす場合に０となる第２多項式と、を生成し、前記第１多項式と第１ランダム値との積と、前記第２多項式と第２ランダム値との積とを加えて前記多項式を生成してもよい。
【００１１】
前記所定の条件は、前記クライアントへの入力と前記属性名の値とが第１条件および第２条件の両方を満たすことであり、前記多項式生成手段は、前記多項式として、前記第１条件を満たす場合に０となる第１多項式と、前記第２条件を満たす場合に０となる第２多項式と、を生成し、前記暗号化手段は、前記クライアント側暗号値として、前記第１多項式の係数および前記第２多項式の係数を暗号化して第１クライアント側暗号値および第２クライアント側暗号値をそれぞれ生成し、前記暗号化状態処理手段は、前記第１クライアント側暗号値および前記第２クライアント側暗号値を用い、前記第１多項式における変数を前記属性名の値で置き換えた値と第１ランダム値との積と、前記第２多項式における変数を前記属性名の値で置き換えた値と第２ランダム値との積と、前記データと予め定めたチェックサムとを連結した値と、の和の暗号化値を前記サーバ側暗号値として生成してもよい。
【００１２】
前記サーバへの入力には、複数のインデックスに対応する複数の前記属性名の値が含まれ、前記暗号化状態処理手段は、前記複数のインデックスのそれぞれに対して、前記データを所定の仮想値とする前記サーバ側暗号値を生成し、前記復号手段は、前記サーバ側暗号値のそれぞれを解読し、前記データ取得手段は、前記データが前記所定の仮想値である解読結果の数に基づいて、前記所定の関係を満たすインデックスの数を算出してもよい。
前記所定の条件は、前記クライアントへの入力が前記属性名の値と一致することであってもよい。
前記クライアントへの入力は２つの値で定められる範囲であり、前記所定の条件は、前記範囲に前記属性名の値が含まれることであってもよい。
【００１３】
この場合、前記２つの値および属性名がとり得る値の数はｎ個（ｎは２以上の整数）であり、前記多項式生成手段は、レベル数が（ｌｏｇ２ｎ＋１）以上の最小の整数である２分木であって、各ノードにはユニークなノード名が割り当てられており、最下位レベルにおけるノードのそれぞれが前記クライアントへの入力がとり得る値のそれぞれに対応付けられる２分木において、前記範囲をカバーするノードのノード名が、前記属性名の値に基づく所定のノード名と一致する場合に０となる前記多項式を生成し、前記暗号化状態処理手段は、前記多項式生成手段の２分木と同じ構造の２分木であって、最下位レベルにおけるノードのそれぞれが前記属性名が取り得る値のそれぞれに対応付けられる２分木において、前記最下位レベルにおける前記属性名の値に対応付けられたノードに到達するまでに経由されるノードのノード名で、前記多項式における変数を置き換えた値から前記サーバ側暗号値を生成してもよい。
【００１４】
さらにこの場合、前記多項式生成手段は、前記範囲をカバーするノードをレベルごとに特定し、特定されたノードが２つ未満であるレベルについては、ノード名として用いられていないダミーのノード名を用いて各ノードの変数を２つずつとして、前記多項式を生成するのが望ましい。
前記属性名の範囲は２つの値で定められ、前記所定の条件は、前記範囲に前記クライアントへの入力が含まれることであってもよい。
【００１５】
この場合、前記クライアントへの入力および前記２つの値がとり得る値の数はｎ個（ｎは２以上の整数）であり、前記多項式生成手段は、レベル数が（ｌｏｇ２ｎ＋１）以上の最小の整数である２分木であって、各ノードにはユニークなノード名が割り当てられており、最下位レベルにおけるノードのそれぞれが前記クライアントへの入力がとり得る値のそれぞれに対応付けられる２分木において、前記最下位レベルにおける前記属性名の値に対応付けられたノードに到達するまでに経由されるノードのノード名が、前記範囲に基づく所定のノード名と一致する場合に０となる前記多項式を生成し、前記暗号化状態処理手段は、前記多項式生成手段の２分木と同じ構造の２分木であって、最下位レベルにおけるノードのそれぞれが前記属性名が取り得る値のそれぞれに対応付けられる２分木において、前記範囲をカバーするノードのノード名で、前記多項式における変数を置き換えた値から前記サーバ側暗号値を生成してもよい。
【００１６】
前記クライアントへの入力は第１入力値および第２入力値で定められる第１範囲であり、前記属性の範囲は第１属性値および第２属性値で定められる第２範囲であり、前記所定の条件は、前記第１範囲および前記第２範囲の少なくとも一部が重複することであってもよい。
【００１７】
この場合、前記多項式生成手段は、前記第１入力値が前記第２範囲に含まれること、前記第２入力値が前記第２範囲に含まれること、前記第１属性値が前記第１範囲に含まれること、および、前記第２属性値が前記第１範囲に含まれること、の少なくとも１つが満たされる場合に０となる前記多項式を生成してもよい。
【００１８】
前記クライアントへの入力は前記サーバには知られないのが望ましい。また、前記所定の関係を満たさない場合、前記データは前記クライアントには知られないのが望ましい。
【００１９】
また、本発明の別の態様によれば、クライアントおよびサーバから構成され、前記クライアントへの入力と、前記サーバへの入力に含まれる属性名の値とが所定の関係を満たす場合に、前記属性名に関連付けられたデータを前記クライアントが前記サーバからデータを取得可能な検索システムにおけるクライアントであって、前記クライアントへの入力と前記属性名の値とが前記所定の関係を満たす場合に０となる、前記属性名を変数とする多項式を生成する多項式生成手段と、加法準同型性を有し、前記クライアントは解読できるが前記サーバは解読できない所定の公開鍵暗号方式で前記多項式の係数を暗号化してクライアント側暗号値を生成する暗号化手段と、前記サーバが、前記所定の公開鍵暗号方式の加法準同型性を利用して、前記クライアント側暗号値を用い、前記多項式の係数が暗号化された状態で生成した、前記多項式における変数を前記属性名の値で置き換えた値とランダム値との積と、前記データと予め定めたチェックサムとを連結した値と、の和の暗号化値であるサーバ側暗号値を解読する復号手段と、解読結果に前記チェックサムが含まれる場合に、前記解読結果から前記データを取得するデータ取得手段と、を有する、クライアントが提供される。
【００２０】
また、本発明の別の態様によれば、クライアントおよびサーバから構成され、前記クライアントへの入力と、前記サーバへの入力に含まれる属性名の値とが所定の関係を満たす場合に、前記属性名に関連付けられたデータを前記クライアントが前記サーバから取得可能な検索システムにおけるクライアントを、前記クライアントへの入力と前記属性名の値とが前記所定の関係を満たす場合に０となる、前記属性名を変数とする多項式を生成する多項式生成手段と、加法準同型性を有し、前記クライアントは解読できるが前記サーバは解読できない所定の公開鍵暗号方式で前記多項式の係数を暗号化してクライアント側暗号値を生成する暗号化手段と、前記サーバが、前記所定の公開鍵暗号方式の加法準同型性を利用して、前記クライアント側暗号値を用い、前記多項式の係数が暗号化された状態で生成した、前記多項式における変数を前記属性名の値で置き換えた値とランダム値との積と、前記データと予め定めたチェックサムとを連結した値と、の和の暗号化値であるサーバ側暗号値を解読する復号手段と、解読結果に前記チェックサムが含まれる場合に、前記解読結果から前記データを取得するデータ取得手段と、として機能させる、検索プログラムが提供される。
【００２１】
また、本発明の別の態様によれば、クライアントおよびサーバから構成され、前記クライアントへの入力と、前記サーバへの入力に含まれる属性名の値とが所定の関係を満たす場合に、前記属性名に関連付けられたデータを前記クライアントが前記サーバから取得可能な検索システムにおけるサーバであって、前記クライアントへの入力と前記属性名の値とが前記所定の関係を満たす場合に０となる、前記属性名を変数とする多項式の係数を、加法準同型性を有し、前記クライアントは解読できるが前記サーバは解読できない所定の公開鍵暗号方式で前記クライアントが暗号化したクライアント側暗号値を用い、前記所定の公開鍵暗号方式の加法準同型性を利用して、前記多項式の係数が暗号化された状態で、前記多項式における変数を前記属性名の値で置き換えた値とランダム値との積と、前記データと予め定めたチェックサムとを連結した値と、の和の暗号化値であるサーバ側暗号値を生成する暗号化状態処理手段を有する、サーバが提供される。
【００２２】
また、本発明の別の態様によれば、クライアントおよびサーバから構成され、前記クライアントへの入力と、前記サーバへの入力に含まれる属性名の値とが所定の関係を満たす場合に、前記属性名に関連付けられたデータを前記クライアントが前記サーバから取得可能な検索システムにおけるサーバを、前記クライアントへの入力と前記属性名の値とが前記所定の関係を満たす場合に０となる、前記属性名を変数とする多項式の係数を、加法準同型性を有し、前記クライアントは解読できるが前記サーバは解読できない所定の公開鍵暗号方式で前記クライアントが暗号化したクライアント側暗号値を用い、前記所定の公開鍵暗号方式の加法準同型性を利用して、前記多項式の係数が暗号化された状態で、前記多項式における変数を前記属性名の値で置き換えた値とランダム値との積と、前記データと予め定めたチェックサムとを連結した値と、の和の暗号化値であるサーバ側暗号値を生成する暗号化状態処理手段として機能させる、検索プログラムが提供される。
【００２３】
また、本発明の別の態様によれば、クライアントおよびサーバから構成され、前記クライアントへの入力と、前記サーバへの入力に含まれる属性名の値とが所定の関係を満たす場合に、前記属性名に関連付けられたデータを前記クライアントが前記サーバから取得可能な検索方法であって、前記クライアントが、前記クライアントへの入力と前記属性名の値とが前記所定の関係を満たす場合に０となる、前記属性名を変数とする多項式を生成し、前記クライアントが、加法準同型性を有し、前記クライアントは解読できるが前記サーバは解読できない所定の公開鍵暗号方式で前記多項式の係数を暗号化してクライアント側暗号値を生成し、前記サーバが、前記所定の公開鍵暗号方式の加法準同型性を利用して、前記クライアント側暗号値を用い、前記多項式の係数が暗号化された状態で、前記多項式における変数を前記属性名の値で置き換えた値とランダム値との積と、前記データと予め定めたチェックサムとを連結した値と、の和の暗号化値であるサーバ側暗号値を生成し、前記クライアントが、前記サーバ側暗号値を解読し、前記クライアントが、解読結果に前記チェックサムが含まれる場合に、前記解読結果から前記データを取得する、検索方法が提供される。
【発明の効果】
【００２４】
クライアントへの入力と、サーバへの入力に含まれる属性名の値とが所定の関係を満たす場合に０となる多項式を生成する。検索条件に応じた多項式を生成することで、汎用的な秘匿検索が可能となる。また、複数の条件を多項式として表現することで、効率的な秘匿検索が可能となる。
【図面の簡単な説明】
【００２５】
【図１】本発明に係る検索システムの概念を説明する図。
【図２】サーバ２への入力ｂのデータ形式の一例を示す図。
【図３】検索システムの関数ｆを説明する図。
【図４】述語Ｐａの具体例を示す図。
【図５】論理式Ｐ（Predicate）、結合Ｃ（Conjunction）および関数ｆの出力の種類Ｙ（Return Type）の組み合わせを示す図。
【図６】論理式Ｐの具体例を説明する図。
【図７】結合Ｃの具体例を説明する図。
【図８】論理式Ｐが「Ｅｑｕａｌ」であり、結合Ｃが「Ｎｏｎｅ」（論理式が１つのみ）である場合の検索を説明する図。
【図９】論理式Ｐが「Ｅｑｕａｌ」であり、結合Ｃが「Ｎｏｎｅ」（論理式が１つのみ）である場合の検索を説明する図。
【図１０】論理式Ｐが「Ｅｑｕａｌ」であり、結合Ｃが「ＯＲ」（属性は１つ）である場合の検索を説明する図。
【図１１】検索システムにおけるクライアント１およびサーバ２の内部構成の一例を示すブロック図。
【図１２】結合Ｃが「ＯＲ」および「ＡＮＤ」である場合の検索手法を概説する図。
【図１３】結合Ｃが「ＯＲ」である場合の検索手法を説明する図。
【図１４】結合Ｃが「ＯＲ」である場合の検索手法を説明する図。
【図１５】結合Ｃが「ＡＮＤ」である場合の検索手法を説明する図。
【図１６】結合Ｃが「ＡＮＤ」である場合の検索手法を説明する図。
【図１７】論理式Ｐが「Ｒａｎｇｅ／Ｐｏｉｎｔ  ｉｎｃｌｕｓｉｏｎ」である場合の検索手法を説明する図。
【図１８】「ＯＲ」の処理と、クライアント１サーバ２間の通信量との関係を模式的に示す図。
【図１９】ＯＲ１，ＯＲ２とも手法１で行う場合の通信量を説明する図。
【図２０】ＯＲ１を手法１で行い、ＯＲ２を手法２で行う場合の通信量を説明する図。
【図２１】ＯＲ１，ＯＲ２とも手法２で行う場合の通信量を説明する図。
【図２２】論理式Ｐが「Ｒａｎｇｅ／Ｐｏｉｎｔ  ｉｎｃｌｕｓｉｏｎ」であり、結合Ｃが「ＡＮＤ」である場合の検索手法を説明する図。
【図２３】「ＡＮＤ」および「ＯＲ」の処理と、クライアント１サーバ２間の通信量との関係を模式的に示す図。
【図２４】ＯＲ１を手法１で行い、ＯＲ２を手法２で行い、ＡＮＤを手法１で行う場合の通信量を説明する図。
【図２５】ＯＲ１を手法１で行い、ＯＲ２を手法２で行い、ＡＮＤを手法２で行う場合の通信量を説明する図。
【図２６】ＯＲ１，ＯＲ２を手法２で行い、ＡＮＤを手法１で行う場合の通信量を説明する図。
【図２７】ＯＲ１，ＯＲ２を手法２で行い、ＡＮＤを手法２で行う場合の通信量を説明する図。
【図２８】論理式Ｐが「Ｐｏｉｎｔ／Ｒａｎｇｅ  ｉｎｃｌｕｓｉｏｎ」である場合の検索手法を説明する図。
【図２９】論理式Ｐが「Ｒａｎｇｅ／Ｒａｎｇｅ  ｉｎｔｅｒｓｅｃｔ」である場合の検索手法を説明する図。
【図３０】論理式Ｐが「Ｒａｎｇｅ／Ｒａｎｇｅ  ｉｎｔｅｒｓｅｃｔ」である場合の検索手法を説明する図。
【発明を実施するための形態】
【００２６】
以下、本発明に係る実施形態について、図面を参照しながら具体的に説明する。
【００２７】
図１は、本発明に係る検索システムの概念を説明する図である。検索システムはクライアント１およびサーバ２から構成され、関数ｆによって定義される。クライアント１にはユーザから入力ａが指定される。そして、検索を実行すべく、クライアント１は入力ａに基づくクエリＱをサーバ２に送信する。また、クライアント１は内部の秘密情報Ｋを持っている。そして、サーバ２は、入力ｂおよび送信されたクエリＱに基づいて、レスポンスＲをクライアント１に返す。そして、クライアント１は、レスポンスＲおよび内部の秘密情報Ｋを使って出力Ｔを生成し、これをユーザに提示する。
【００２８】
この処理過程において、以下の秘匿条件を満たさなければならないとする。
Ｉ．完全性：
クライアント１の出力Ｔはｆ（ａ，ｂ）である。
ＩＩ．安全性：
（１）クライアント１の安全性：入力ａをサーバ２に知られてはならない。
（２）サーバ２の安全性：入力ｂや、出力ｆ（ａ，ｂ）から計算できる情報以外をクライアント１に知られてはならない。
【００２９】
図２は、サーバ２への入力ｂのデータ形式の一例を示す図である。このデータ形式はｎ行（ｋ＋１）列の行列である。１つの行は１つのデータの組であり、列１から列ｋまでのデータは「属性値」を示し、列ｋ＋１は「ペイロード」を示す。行ｉの名前を「インデックスｉ」と呼ぶ。列ｊの名前は属性名ｊであり、それぞれを特定の名前で定義することができる。
【００３０】
図２（ｂ）は、図２（ａ）のデータが衛星写真である場合の具体例である。この例において、属性名は撮影時刻（time）撮影を行った衛星の緯度（X-axis position）、衛星の経度（Y-axis position）、衛星の高度（level）である。また、ペイロードは撮影により得られた写真である。
【００３１】
図３は、検索システムの関数ｆを説明する図である。クライアント１の入力ａの形式は述語であり、Ｐａと表す。述語Ｐａの入力はｋ個の属性値であり、出力は「真」もしくは「偽」である。関数ｆは次のように定義される。関数ｆはａとｂを入力とする。入力ａは述語Ｐａであり、入力ｂは行列である。行列ｂの行ｉの列１〜ｋまでの属性値をＶｉ１，・・・，Ｖｉｋとし、列ｋ＋１のペイロードをｄｉとする。関数ｆは、すべての行ｉに対してＰａ（ｖｉ１，・・・，ｖｉｋ）が真となるペイロードｄｉのみからなる集合を出力する。
【００３２】
図４は、述語Ｐａの具体例を示す図である。図４（ａ）において、クライアント１の入力ａは（ａ１，ａ２）からなり、述語Ｐａは次のように定義される。（ｖ１，ｖ２）に対し、もしａ１＝ｖ１かつａ２＝ｖ２であれば、Ｐａ（ｖ１，ｖ２）＝Ｔｒｕｅ（真）であり、それ以外の場合はＰａ（ｖ１，ｖ２）＝Ｆａｌｓｅ（偽）である。この述語Ｐａは「ＡＮＤ」の機能を果たしていることから、述語Ｐａを「Ｐａ１（ｘ１）  ＡＮＤ  Ｐａ２（ｘ２）」と表す。ここで、ｘ１，ｘ２は属性１および属性２の各属性名である（以下、「属性ｉの属性名」を「属性名ｘｉ」と表記する）。
【００３３】
図４（ｂ）は、図３の検索システムに図４（ａ）の述語Ｐａの定義を適用したシステムである。この処理過程において、上記の「完全性」と「安全性」を満たさなければならないとする。すなわち、
【００３４】
Ｉ．完全性：
クライアント１は、述語Ｐａ１（ｘ１）が真（つまり入力ａ１が属性名ｘ１の値と一致）であり、かつ、述語Ｐａ２（ｘ２）が真（つまり入力ａ２が属性名ｘ２の値と一致）となるインデックスｉにおけるデータｄｉを、サーバ２から取得する。（例えば、ｖ２１＝ａ１かつｖ２２＝ａ２である場合、クライアント１はサーバ２からデータｄ２を取得できる。）
【００３５】
ＩＩ．安全性：
（１）クライアント１の安全性：入力ａ１，ａ２をサーバ２に知られてはならない。なお、検索の述語が結合が「ＡＮＤ」であることは関数ｆの定義に含まれているので、知られてもよい。
（２）サーバ２の安全性：行列ｂの属性値ｖ１１，・・・，ｖｎｋをクライアント１に知られてはならない。また、上記述語Ｐａが真にならないインデックスｊにおけるデータｄｊをクライアント１に知られてはならない。
【００３６】
図４は１つの例であるが、検索の種類として、述語Ｐ、述語どうしの結合ＣおよびレスポンスＲには種々なパターンが考えられる。
【００３７】
図５は、述語Ｐ（Predicate、論理式とも呼ぶ）、結合Ｃ（Conjunction）および関数ｆの出力の種類Ｙ（Return Type、戻り値とも呼ぶ）の組み合わせを示す図である。また、図６および図７は、論理式Ｐおよび結合Ｃの具体例をそれぞれ説明する図である。
まずは図６を用いて論理式Ｐについて説明する。説明の簡略化のために属性は１つでありその属性名はｘのみであるとする。
【００３８】
論理式Ｐの一例は「Ｅｑｕａｌ」（一致）である（図６（ａ））。サーバ２に入力される属性名ｘの値が１つの値（ｖとする）である場合に設定可能な論理式であり、クライアント１にも入力として１つの値（ａとする）がユーザから与えられる。そして、入力ａと属性名ｘの値ｖとが一致（ａ＝ｖ）する場合に、論理式Ｐは真となる。
【００３９】
論理式Ｐの別の例は「Ｒａｎｇｅ／Ｐｏｉｎｔ  ｉｎｃｌｕｓｉｏｎ」（範囲が点を包含）である（図６（ｂ））。サーバ２に入力される属性名ｘの値が１つの値（ｖとする）である場合に設定可能な論理式であり、クライアント１には入力としては２つの値で定まる範囲（［ａ，ｂ］すなわち「ａ以上ｂ以下」とする）がユーザから与えられる。そして、属性名ｘの値ｖがａ以上ｂ以下（ｖ∈［ａ，ｂ］）である場合に、論理式Ｐは真となる。
【００４０】
論理式Ｐのまた別の例は「Ｐｏｉｎｔ／Ｒａｎｇｅ  ｉｎｃｌｕｓｉｏｎ」（点が範囲に被包含）である（図６（ｃ））。サーバ２に入力される属性名ｘの範囲が２つの値で定まる（［ｖａ，ｖｂ］すなわち「ｖａ以上ｖｂ以下」とする）場合に設定可能な論理式であり、クライアント１には入力として１つの値（ａとする）がユーザから与えられる。そして、入力ａがｖａ以上ｖｂ以下（ａ∈［ｖａ，ｖｂ］）である場合に、論理式Ｐは真となる。
【００４１】
論理式Ｐのまた別の例は「Ｒａｎｇｅ／Ｒａｎｇｅ  ｉｎｔｅｒｓｅｃｔ」（範囲と範囲が交差）である（図６（ｄ））。サーバ２に入力される属性名ｘの範囲が２つの値で定まる（［ｖａ，ｖｂ］すなわち「ｖａ以上ｖｂ以下」とする）場合に設定可能な論理式であり、クライアント１にも入力として２つの値で定まる範囲（［ａ，ｂ］すなわち「ａ以上ｂ以下」とする）がユーザから与えられる。そして、範囲「ａ以上ｂ以下」と範囲「ｖａ以上ｖｂ以下」の少なくとも一部が重複（交差）（［ａ，ｂ］∩［ｖａ，ｖｂ］≠０）する場合に、論理式Ｐは真となる。
【００４２】
なお、以下の説明のために、クライアント１側の入力（例えば上記ａや、ａとｂとの組）を単にａとして論理式をＰａ（ｘ）と表記する。そして、サーバ２側の入力の属性名ｘの値（例えば、上記ｖや、ｖａとｖｂとの組）を単にｖとし、クライアント１側の入力ａと、サーバ２側の属性名ｘの値ｖとが所定の条件を満たす場合（Ｐａ（ｖ）となるとき）に、論理式Ｐａ（ｘ）は真となるものとする。
【００４３】
続いて、図７を用いて結合Ｃについて説明する。結合Ｃは論理式Ｐが複数ある場合の論理式どうしの関係を示すものである。説明の簡略化のために、属性名は、ｘ１，ｘ２の２つ、あるいは、ｘ１〜ｘ３の３つであるとする。そして、属性名ｘｊの値をｖｊと表す。なお、属性名ｘが１つしかない場合、結合Ｃは存在しない（「Ｎｏｎｅ」、図７（ａ））。
【００４４】
結合Ｃの一例は「ＡＮＤ」（論理積）である（図７（ｂ））。この場合、２つの論理式Ｐａ（ｘ１），Ｐｂ（ｘ２）の「ＡＮＤ」をＰとすると、
Ｐ＝Ｐａ（ｘ１）  ＡＮＤ  Ｐｂ（ｘ２）
と表される。そして、２つの論理式Ｐａ（ｘ１），Ｐｂ（ｘ２）がともに真である場合に論理式Ｐが真となる。
【００４５】
結合Ｃの別の例は「ＯＲ」（論理和）である（図７（ｃ））。この場合、２つの論理式Ｐａ（ｘ１），Ｐｂ（ｘ２）の「ＯＲ」をＰとすると、
Ｐ＝Ｐａ（ｘ１）  ＯＲ  Ｐｂ（ｘ２）
と表される。そして、２つの論理式Ｐａ（ｘ１），Ｐｂ（ｘ２）の少なくとも一方が真である場合に論理式Ｐが真となる。
【００４６】
また、結合Ｃは「ＡＮＤ」および「ＯＲ」の任意に組み合わせであってもよい。図７（ｄ）の例では、論理式Ｐは、
Ｐ＝（Ｐａ（ｘ１）  ＡＮＤ  Ｐｂ（ｘ２））ＯＲ
（Ｐａ（ｘ１）  ＡＮＤ  Ｐｃ（ｘ３））
と表される。そして、「２つの論理式Ｐａ（ｘ１），Ｐｂ（ｘ２）がともに真」および「２つの論理式Ｐａ（ｘ１），Ｐｃ（ｘ３）がともに真」の少なくとも一方が真である場合に論理式Ｐが真となる。
続いて、図５を用いて戻り値Ｙについて説明する。
【００４７】
戻り値Ｙの一例は「Ｓｅａｒｃｈ  Ｐａｙｌｏａｄ」（ペイロード検索）である。この場合、サーバ２は論理式Ｐおよび結合Ｃに基づく条件を満たすインデックスｉのすべてについて、データｄｉをクライアント１によって解読可能な状態で返す。図４は「Ｓｅａｒｃｈ  Ｐａｙｌｏａｄ」の一例である。
【００４８】
戻り値Ｙの別の例は「Ｃｏｕｎｔ  Ｍａｔｃｈ」（一致数カウント）である。この場合、サーバ２は論理式Ｐおよび結合Ｃに基づく条件を満たすインデックスｉの数を返す。
【００４９】
以上説明したように、本発明に係る検索システムは、上記秘匿条件（Ｉ），（ＩＩ）を満たしつつ、上述した論理式Ｐおよび結合Ｃの任意の組み合わせからなるクライアント１からのクエリに対して、「Ｓｅａｒｃｈ  Ｐａｙｌｏａｄ」または「Ｃｏｕｎｔ  Ｍａｔｃｈ」における戻り値Ｙを返すシステムである。
【００５０】
なお、データｄｉをクライアント１およびサーバ２間で予め定めた仮想値（例えば０）として戻り値Ｙを「Ｓｅａｒｃｈ  Ｐａｙｌｏａｄ」とする検索を行うと、クライアント１は、条件を満たすインデックスの数だけ、仮想値と一致するデータを取得する。すなわち、クライアント１は、仮想値と一致するデータの数から、条件を満たすインデックスの数を把握できる。よって、戻り値Ｙが「Ｓｅａｒｃｈ  Ｐａｙｌｏａｄ」である検索を行うことで、戻り値Ｙが「Ｃｏｕｎｔ  Ｍａｔｃｈ」である検索を行うこともできる。したがって、以下では戻り値Ｙとして「Ｓｅａｒｃｈ  Ｐａｙｌｏａｄ」のみを考える。
また、インデックスの数が複数ある場合でも、インデックスのそれぞれに対して検索を行えばよいだけなので、以下ではインデックスの数を１つとする。
【００５１】
以上から、インデックスの数が１つであり、戻り値Ｙを「Ｓｅａｒｃｈ  Ｄａｔａ」とする検索ができれば、図５に示す任意の組み合わせの汎用的な検索を実現できる。
【００５２】
以下、本発明に係る秘匿検索の詳細を説明する。秘匿条件を満たすために、本発明では任意の値ｐを暗号化して暗号値Ｅｎｃ（ｐ）を生成するが、前提として暗号化処理Ｅｎｃおよびそれに対応する復号処理Ｅｎｃ−１は以下の性質を持つものとする。
【００５３】
・Ｅｎｃは公開鍵暗号方式（Public-key Encryption）による暗号化処理（Encryption）であり、クライアント１もサーバ２も値ｐを暗号化して暗号値Ｅｎｃ（ｐ）を生成できる。
・Ｅｎｃ−１は復号処理（Decryption）であり、復号用の秘密情報を持つクライアント１は暗号値Ｅｎｃ（ｐ）を復号して値ｐをＥｎｃ−１｛Ｅｎｃ（ｐ）｝＝ｐと復元できるが、サーバ２は復元できない。
・Ｅｎｃは加法準同型性（Additively Homomorphic Property）を有し、任意の値ｐ，ｑ，ｒに対して下記（１）〜（３）式を満たす。
ｇ（Ｅｎｃ（ｐ），Ｅｎｃ（ｑ））＝Ｅｎｃ（ｐ＋ｑ）  ・・・（１）
ｈ（ｒ，Ｅｎｃ（ｐ））＝Ｅｎｃ（ｒｐ）  ・・・（２）
ｉ（Ｅｎｃ（ｐ），Ｅｎｃ（ｑ））＝Ｅｎｃ（ｐ−ｑ）  ・・・（３）
すなわち、２つの暗号値Ｅｎｃ（ｐ），Ｅｎｃ（ｑ）から所定の関数ｇを用いて暗号値Ｅｎｃ（ｐ＋ｑ）を算出できる。また、１つの定数ｒおよび１つの暗号値Ｅｎｃ（ｐ）から所定の関数ｈを用いて暗号値Ｅｎｃ（ｒｐ）を算出できる。これらのことから、２つの暗号値Ｅｎｃ（ｐ），Ｅｎｃ（ｑ）から所定の関数ｉを用いて暗号値Ｅｎｃ（ｐ−ｑ）を算出できるのは明らかである。ただし、２つの暗号値Ｅｎｃ（ｐ），Ｅｎｃ（ｑ）からＥｎｃ（ｐｑ）やＥｎｃ（ｐ／ｑ）を算出することはできない。関数ｇ，ｈ，ｉは暗号化方式に応じて定まる関数であり、クライアント１もサーバ２も知っている。
加法準同型性を有する暗号として、Ｌｉｆｔｅｄ  ＥｌＧａｍａｌ暗号、Ｐａｉｌｌｉｅｒ暗号、Ｄａｍｇａｒｄ−Ｊｕｒｉｋ暗号などが知られている。
【００５４】
図８は、論理式Ｐが「Ｅｑｕａｌ」であり、結合Ｃが「Ｎｏｎｅ」（論理式が１つのみ）である場合の検索を説明する図である。この例では、クライアント１側の入力ａと、サーバ２側の属性名ｘの値ｖとが一致する場合に、クライアント１はサーバ２からペイロードｄを取得する。まずはこの単純な例を説明する。
【００５５】
クライアント１は入力ａを暗号化してＥｎｃ（ａ）をクエリＱとしてサーバ２に送信する。サーバ２はＥｎｃ（ａ）を解読できないため入力ａが分からず、上記秘匿条件ＩＩ（１）を満たす。
【００５６】
続いて、サーバ２は、戻り値Ｒとして、下記（４）式に示す暗号値Ｙを算出してクライアント１に送信する。なお、ｒはサーバ２が定める任意のランダムな値である。
Ｙ＝Ｅｎｃ｛ｒ（ｖ−ａ）＋（ｄ｜｜０，０，・・・，０）｝  ・・・（４）
この（４）式は、上記（１）式によれば、Ｅｎｃ（ｒ（ｖ−ａ））およびＥｎｃ（ｄ｜｜０，０，・・・，０）から算出できる。
ここでＥｎｃ（ｒ（ｖ−ａ））は上記（１），（３）式によれば下記のように変形できる。
Ｅｎｃ（ｒ（ｖ−ａ））＝ｇ（ｒ，ｉ（Ｅｎｃ（ｖ），Ｅｎｃ（ａ）））
【００５７】
Ｅｎｃ（ｖ）はサーバ２が属性値ｖを暗号化して得ることができる。Ｅｎｃ（ａ）はクライアント１から受信する。これにより、サーバ２はＥｎｃ（ｒ（ｖ−ａ））を算出できる。
【００５８】
また、Ｅｎｃ（ｄ｜｜０，０，・・・，０）は、サーバ２に入力されるデータｄに、ｍ個の０を下位ビットに結合したものを暗号化して得られる。ｍ個の０はチェックサムの例であり、予めクライアント１とサーバ２との間で定めた値であれば他の値でもよい。
クライアント１は受信した暗号値Ｙを解読し、下記（５）式に示す解読結果Ｅｎｃ−１（Ｙ）を出力Ｔとして得る。
Ｔ＝Ｅｎｃ−１（Ｙ）＝ｒ（ｖ−ａ）＋（ｄ｜｜０，０，・・・，０）  ・・・（５）
ここで、入力ａと属性値ｖとが一致する場合、解読結果Ｅｎｃ−１（Ｙ）は下記（６）式のように変形できる。
Ｔ＝Ｅｎｃ−１（Ｙ）＝ｄ｜｜０，０，・・・，０  ・・・（６）
【００５９】
よって、解読結果Ｅｎｃ−１（Ｙ）の下位ビットにチェックサム（ｍ個の０）が存在することに基づいて、クライアント１は入力ａと属性値ｖとが一致したことを把握できる。そして、上記（６）式からチェックサム（ｍ個の０）を除くことで、クライアント１はデータｄを取得できる。これにより、上記秘匿条件Ｉを満たす。
【００６０】
一方、入力ａと属性値ｖとが一致しない場合、上記（５）式に示すように、解読結果Ｅｎｃ−１（Ｙ）はランダムな値ｒを含んだ値となる。よって、解読結果Ｅｎｃ−１（Ｙ）の下位ビットにチェックサム（ｍ個の０）は存在せず、クライアント１は入力ａと属性値ｖとが不一致であることを把握できる。この場合、解読結果Ｅｎｃ−１（Ｙ）はランダムな値ｒを含むため、クライアント１は属性値ｖやデータｄを知ることができず、上記秘匿条件ＩＩ（２）を満たす。
【００６１】
なお、入力ａと属性値ｖとが一致しない場合でも、解読結果Ｅｎｃ−１（Ｙ）に偶然チェックサムが現れる可能性もなくはない。しかしながら、ｍを十分大きく（例えば８０ビット程度）することで実用上問題ない程度にこの可能性を低くできる。
【００６２】
以上図８を用いて説明してきたことは、図９のように考えることもできる。クライアント１は、属性名ｘの値ｖが入力ａと一致した場合に０となる多項式Ｐ（ｘ）を下記（７）式のように定義する。この多項式Ｐ（ｘ）の変数は属性名ｘである。
Ｐ（ｘ）＝ｘ−ａ  ・・・（７）
【００６３】
なお、属性名ｘの最高次数の係数は１とすることをサーバ２との間で予め取り決めておく。そして、クライアント１は多項式Ｐ（ｘ）におけるｘ０の係数ａを暗号化した暗号値Ｅｎｃ（ａ）をサーバ２に送信する。また、クライアント１は結合Ｃが「Ｎｏｎｅ」であることをサーバ２に送信する。すなわち、クエリＱは、暗号値Ｅｎｃ（ａ）および結合Ｃが「Ｎｏｎｅ」であることである。
【００６４】
サーバ２はＥｎｃ（ａ）から入力ａを復元できないため、サーバ２は多項式Ｐ（ｘ）を復元できない。しかしながら、サーバ２は、以下のようにして、多項式Ｐ（ｘ）における属性名ｘをその値ｖで置き換えた値Ｐ（ｖ）の暗号値Ｅｎｃ（Ｐ（ｖ））を算出できる。
【００６５】
すなわち、サーバ２は、送信された値がＥｎｃ（ａ）１つのみであり、結合Ｃが「Ｎｏｎｅ」であることから、クライアント１が定義した多項式Ｐ（ｘ）が１次式であることが分かる。そこで、サーバ２は、属性名ｘをその値ｖで置き換えた値Ｐ（ｖ）を暗号化したＥｎｃ（Ｐ（ｖ））を下記（８）式のように算出する。
Ｅｎｃ（Ｐ（ｖ））＝Ｅｎｃ（ｖ−ａ）
＝ｉ（Ｅｎｃ（ｖ），Ｅｎｃ（ａ））  ・・・（８）
【００６６】
このように、サーバ２は、入力ａや「ｖ−ａ」は分からないが、属性値ｖを自身で暗号化して得られる暗号値Ｅｎｃ（ｖ）と、クライアント１から受信する暗号値Ｅｎｃ（ａ）とから、暗号値Ｅｎｃ（ｖ−ａ）すなわちＥｎｃ（Ｐ（ｖ））を算出できる。
ここで、多項式Ｐ（ｘ）を用いると、上記（４）式および（５）式は下記（９）式および（１０）式のようにそれぞれ表される。
Ｒ＝Ｙ＝Ｅｎｃ｛ｒＰ（ｖ）＋（ｄ｜｜０，０，・・・，０）｝  ・・・（９）
Ｔ＝Ｅｎｃ−１（Ｙ）＝ｒＰ（ｖ）＋（ｄ｜｜０，０，・・・，０）  ・・・（１０）
【００６７】
上記（１０）式において、Ｐ（ｖ）＝ｖ−ａ＝０の場合（すなわち入力ａと属性名ｘの値ｖとが一致する場合）、解読結果Ｅｎｃ−１（Ｙ）は、右辺第１項が０となり、データｄが得られる。
このような多項式Ｐ（ｘ）を利用することで、結合Ｃが「Ｎｏｎｅ」の場合のみならず「ＯＲ」である場合にも拡張でき、汎用性があることを説明する。
【００６８】
図１０は、論理式Ｐが「Ｅｑｕａｌ」であり、結合Ｃが「ＯＲ」（属性は１つ）である場合の検索を説明する図である。この例では、サーバ２に入力される属性名ｘの値ｖが、クライアント１側の入力ａまたはｂと一致する場合に、クライアント１はサーバ２からペイロードｄを取得できる。
クライアント１は、属性名ｘの値ｖが入力ａまたはｂと一致した場合に０となる多項式Ｐ（ｘ）を下記（１１）式のように定義する。
Ｐ（ｘ）＝（ｘ−ａ）（ｘ−ｂ）＝ｘ２−（ａ＋ｂ）ｘ＋ａｂ  ・・・（１１）
【００６９】
そして、クライアント１は、多項式Ｐ（ｘ）におけるｘ１の係数（ａ＋ｂ）およびｘ０の係数ａｂをそれぞれ暗号化した暗号値Ｅｎｃ（ａ＋ｂ），Ｅｎｃ（ａｂ）と、結合Ｃが「ＯＲ」であることを、クエリＱとしてサーバ２に送信する。
【００７０】
サーバ２は、送信された値がＥｎｃ（ａ＋ｂ），Ｅｎｃ（ａｂ）の２つであり、結合Ｃが「ＯＲ」であることから、クライアント１が定義した多項式Ｐ（ｘ）が２次式であることが分かる。そして、サーバ２は、属性名ｘをその値ｖで置き換えた値Ｐ（ｖ）を暗号化した暗号値Ｅｎｃ（Ｐ（ｖ））を、下記（１２）式のように算出できる。
Ｙ＝Ｅｎｃ（Ｐ（ｖ））＝Ｅｎｃ｛ｖ２−（ａ＋ｂ）ｖ＋ａｂ｝
＝ｇ｛ｉ｛Ｅｎｃ（ｖ２），ｈ（ｖ，Ｅｎｃ（ａ＋ｂ）｝，Ｅｎｃ（ａｂ）｝
・・・（１２）
【００７１】
上記（１２）式において、Ｅｎｃ（ｖ２）はサーバ２に入力される属性値ｖの２乗を暗号化したものであり、サーバ２が生成できる。Ｅｎｃ（ａ＋ｂ），Ｅｎｃ（ａｂ）はクライアント１から送信される。
【００７２】
このようにして、サーバ２はＥｎｃ（Ｐ（ｖ））を算出できる。このＥｎｃ（Ｐ（ｖ））を用いて、サーバ２は上記（９）式に示す暗号値Ｙを算出する。そして、クライアント１はＹを解読して、上記（１０）式に示す解読結果Ｅｎｃ−１（Ｙ）を出力Ｔとして算出する。
【００７３】
上記（１０）式において、Ｐ（ｖ）＝（ｖ−ａ）（ｖ−ｂ）＝０の場合（すなわち入力ａまたはｂが属性名ｘの値ｖとが一致する場合）、Ｅｎｃ−１（Ｙ）は、右辺第１項のＰ（ｖ）が０となり、データｄが得られる。
【００７４】
以上のようにして、結合Ｃが「ＯＲ」である場合でも、多項式Ｐ（ｘ）を用いることで検索を行うことができる。なお、この手法によれば、サーバ２は、属性値ｖが入力ａおよびｂのいずれと一致したかを知られることなく、データｄをクライアント１に知らせることができる。
【００７５】
以上、図９および図１０で説明したことを、述語Ｐが「Ｅｑｕａｌ」であり、結合Ｃが任意であり、属性の数がｋ（ｋは２以上の整数）である場合にまで拡張する。
【００７６】
図１１は、検索システムにおけるクライアント１およびサーバ２の内部構成の一例を示すブロック図である。クライアント１は、多項式生成手段１１と、暗号化手段１２と、復号手段１３と、データ取得手段１４とを有する。また、サーバ２はデータベース３と暗号化状態処理手段２１とを有する。
【００７７】
クライアント１の多項式生成手段１１は、結合Ｃを考慮し、（ａ１〜ａｋ）からなる入力ａとサーバ２に入力される属性名ｘ１〜ｘｋの値とが所定の関係を満たす場合に０となる多項式Ｐ（ｘ１，・・・，ｘｋ）を生成する。この多項式における変数は属性名ｘ１〜ｘｋの一部または全部であり、下記（１３）式で表される。
【数１】
0006381128.tif 000002
上記（１３）式における各係数ａｅ１，・・・，ｅｋの数は結合Ｃで定まり、それぞれの値は入力ａ１〜ａｋによって定まる。
【００７８】
暗号化手段１２は、多項式Ｐ（ｘ１，・・・，ｘｋ）の各係数を暗号化する。暗号化の方式は、加法準同型性を有し、かつ、クライアント１は解読できるがサーバ２は解読できない公開鍵暗号方式とする。暗号された値および結合Ｃは、クエリＱとして、クライアント１からサーバ２に送信される。係数が複数ある場合、各暗号値は、どの変数の係数を暗号化したものであるかを示す情報も付加される。
サーバ２のデータベース３は、サーバへの入力ｂ、すなわち各属性名ｘｉの値ｖｉと、データｄｉとを関連付けて記憶している。
暗号化状態処理手段２１は、
【００７９】
（１）多項式Ｐ（ｘ１，・・・，ｘｋ）における変数ｘ１〜ｘｋを、データベース３に記憶された属性値ｖ１〜ｖｋでそれぞれ置き換えた値Ｐ（ｖ１，・・・，ｖｋ）と、ランダム値ｒとの積ｒＰ（ｖ１，・・・，ｖｋ）と、
（２）データベース３に記憶されたｄと、チェックサムであるｍ個の０とを連結した値（ｄ｜｜０，・・・，０）と、
の和の暗号化値を演算し、下記（１４）式に示す暗号値Ｙを生成する。この暗号値はクライアント１に送信される。
Ｙ＝Ｅｎｃ｛ｒＰ（ｖ１，・・・，ｖｋ）＋（ｄ｜｜０，・・・，０）｝  ・・・（１４）
この暗号化方式はクライアント１と同様であり、演算にあたって加法準同型性が利用される。
【００８０】
上記（１４）式の第１項について説明する。暗号化状態処理手段２１は、クライアント１から送信される暗号値の数および結合Ｃから、多項式Ｐ（ｘ１，・・・，ｘｋ）における各変数の次数が分かる。また、暗号化状態処理手段２１は、係数そのものは分からないが、係数の暗号値を受信する。よって、上記（１）〜（３）式に示す加法準同型性を利用することで、暗号化状態処理手段２１は、多項式Ｐ（ｖ１，・・・，ｖｋ）の係数は分からなくてもこれらが暗号化された状態で、暗号値Ｅｎｃ（Ｐ（ｖ１，・・・，ｖｋ））を生成できる。
クライアント１の復号手段１３は、上記（１４）式に示す暗号値Ｙを解読して、下記（１５）式に示す解読結果Ｔを得る。
Ｅｎｃ−１（Ｙ）＝ｒＰ（ｖ１，・・・，ｖｋ）＋（ｄ｜｜０，・・・，０）
・・・（１５）
データ取得手段１４は解読結果に基づいて以下のようにデータｄを取得する。
【００８１】
すなわち、サーバ２が持つ属性名ｘ１〜ｘｋの値ｖ１〜ｖｋと、入力ａ１〜ａｋとが所定の関係を満たす場合、多項式Ｐ（ｖ１，・・・，ｖｋ）＝０となるから、上記（１５）式右辺第１項は０となり、解析結果Ｅｎｃ−１（Ｙ）にチェックサム（０，・・・，０）が現れる。よって、解析結果Ｅｎｃ−１（Ｙ）にチェックサム（０，・・・，０）が含まれることから、データ取得手段１４は属性名ｘｉの値ｖｉと入力ａｉとが所定の関係を満たしたことを把握できるとともに、このチェックサムを除くことでデータｄｉを取得できる。
【００８２】
一方、上記所定の関係を満たさない場合、上記（１５）式の右辺第１項が０とならず、解析結果にチェックサム（０，・・・，０）が現れない。よって、解析結果にチェックサム（０，・・・，０）が含まれないことから、データ取得手段１４は属性名ｘｉの値ｖｉと入力ａｉとが所定の関係を満たさないことを把握できる。なお、このとき、上記（１５）式にはランダム値ｒが含まれるため、データ取得手段１４はデータｄを取得できないし属性値ｖも分からない。
【００８３】
なお、「Ｃｏｕｎｔ  Ｍａｔｃｈ」の検索を行う場合、データ取得手段１４は、仮想値と一致するデータｄの数から、条件を満たすインデックスの数を算出できる。
【００８４】
以上のようなクライアント１およびサーバ２の処理を「ゼロ多項式評価」（Zero Polynomial Evaluation（以下、ＺＰＥ処理））と呼ぶことにする。
【００８５】
このような検索システムにおいて、論理式Ｐが「Ｅｑｕａｌ」であり、結合Ｃを「Ｎｏｎｅ」としたものが、図８および図９の例である。また、論理式Ｐが「Ｅｑｕａｌ」であり、結合Ｃを「ＯＲ」としたものが、図１０の例である。以下、結合Ｃが「ＯＲ」や「ＡＮＤ」である場合をより一般的に考える。
【００８６】
図１２は、結合Ｃが「ＯＲ」および「ＡＮＤ」である場合の検索手法を概説する図である。図示のように、「ＯＲ」および「ＡＮＤ」に相当する処理をクライアント１で行う手法１と、サーバ２で行う手法２がある。
【００８７】
図１３は、結合Ｃが「ＯＲ」である場合の検索手法を説明する図であり、クライアント１側で「ＯＲ」に相当する処理を行う手法１を示している。「条件１を満たす」または「条件２を満たす」ときに０になる多項式Ｐは、条件１を満たすときに０になる多項式Ｐ１（ｘ）と、条件２を満たすときに０になる多項式Ｐ２（ｘ）との積で表すことができる。
【００８８】
よって、クライアント１の多項式生成手段１１は、多項式Ｐ１（ｘ），Ｐ２（ｘ）を生成し、これらを乗じて多項式Ｐ（ｘ）を生成すればよい。そして、暗号化手段１２は多項式Ｐ（ｘ）の係数を暗号化してサーバ２に送信すればよい（このことを、図１３では便宜上Ｅｎｃ（Ｐ（ｘ））と表記している）。その後、クライアント１およびサーバ２は上述した通りのＺＰＥ処理を行う。この手法によれば、サーバ２は、条件１，２のいずれが満たされたのかをクライアント１に知られることはない。
【００８９】
図１４は、結合Ｃが「ＯＲ」である場合の検索手法を説明する図であり、サーバ２側で「ＯＲ」に相当する処理する手法２を示している。手法２では、「条件１」と「条件２」の両方が同時には満たされないことが前提となる。
【００９０】
本手法２では、クライアント１側の多項式生成手段１１は、条件１を満たすときに０になる多項式Ｐ１（ｘ）と、条件２を満たすときに０となるＰ２（ｘ）とを生成する。そして、暗号化手段１２は各多項式Ｐ１（ｘ），Ｐ２（ｘ）の係数をそれぞれ暗号化してサーバ２に送信する（このことを、図１４では便宜上Ｅｎｃ（Ｐ１（ｘ）），Ｅｎｃ（Ｐ２（ｘ））と表記している）。そして、サーバ２側の暗号化状態処理手段２１は、上記（１４）式に基づく多項式Ｐ１からの暗号値と多項式Ｐ２からの暗号値とをシャッフルし、そのいずれか一方をＹ１，他方をＹ２としてクライアント１に送信する。
【００９１】
そして、クライアント１の復号手段１３はＹ１，Ｙ２をそれぞれ解読する。そして、データ取得手段１４は、暗号値Ｙ１，Ｙ２の解読結果のいずれかにチェックサムが含まれる場合に、データｄを取得できる。暗号値Ｙ１，Ｙ２はシャッフルされているため、サーバ２は、条件１および条件２のいずれが満たされたかを知られることはない。
【００９２】
なお、「条件１」と「条件２」の両条件が同時に満たされ得る場合に本手法２による検索を行うのは望ましくない。その理由は、暗号値Ｙ１，Ｙ２の解読結果の両方にチェックサムが含まれていると、両条件がともに満たされたことをクライアント１に知られてしまうことになるためである。
【００９３】
図１５は、結合Ｃが「ＡＮＤ」である場合の検索手法を説明する図であり、クライアント１側で「ＡＮＤ」に相当する処理を行う手法１を示している。なお、本例では属性名が２つ（ｘ１，ｘ２）であるとしている。
【００９４】
「条件１を満たす」かつ「条件２を満たす」ときに０となる多項式Ｐは、条件１を満たす時に０になる多項式Ｐ１（ｘ１，ｘ２）と、条件２を満たす時に０になる多項式Ｐ２（ｘ１，ｘ２）との和で表すことができ、具体的には下記（１６）式に示す多項式Ｐ（ｘ１，ｘ２）で表される。
Ｐ（ｘ１，ｘ２）＝ｒ１Ｐ１（ｘ１，ｘ２）＋ｒ２Ｐ２（ｘ１，ｘ２）  ・・・（１６）
【００９５】
ｒ１，ｒ２はランダムな値である。そして、クライアント１の暗号化手段１２は多項式Ｐ（ｘ１，ｘ２）の係数を暗号化してサーバ２に送信すればよい（このことを、図１５では便宜上Ｅｎｃ（Ｐ（ｘ１，ｘ２））と表記している）。その後、クライアント１およびサーバ２は上述したＺＰＥ処理を行う。
【００９６】
なお、ランダム値ｒ１，ｒ２を用いる理由は、ランダム値ｒ１，ｒ２を用いない場合、偶然Ｐ１（ｘ１，ｘ２）＝−Ｐ２（ｘ１，ｘ２）となって、条件１，２の両方を満たさないにも関わらずＰ（ｘ１，ｘ２）＝０となってしまうことがあるためである。ランダム値ｒ１，ｒ２を適切な値に設定することで、高い確率で条件１，２の両方を満たす場合にのみ、Ｐ（ｘ１，ｘ２）＝０となる。
図１６は、結合Ｃが「ＡＮＤ」である場合の検索手法を説明する図であり、サーバ２側で「ＡＮＤ」に相当する処理を行う手法２を示している。
【００９７】
本手法２では、クライアント１側の多項式生成手段１１は、条件１を満たすときに０になる多項式Ｐ１（ｘ１，ｘ２）と、条件２を満たすときに０となるＰ２（ｘ１，ｘ２）を生成する。そして、暗号化手段１２は各多項式Ｐ１（ｘ１，ｘ２），Ｐ２（ｘ１，ｘ２）の係数を暗号化してサーバ２に送信する（このことを、図１６では便宜上Ｅｎｃ（Ｐ１（ｘ１，ｘ２）），Ｅｎｃ（Ｐ２（ｘ１，ｘ２））と表記している）。そして、サーバ２側の暗号化状態処理手段２１は、多項式Ｐ１（ｘ１，ｘ２），多項式Ｐ２（ｘ１，ｘ２）および属性値ｖ１，ｖ２から下記（１７）式に示す暗号値Ｙを生成する。なお、ｒ１，ｒ２はランダム値である。
Ｙ＝Ｅｎｃ｛ｒ１Ｐ１（ｖ１，ｖ２）＋ｒ２Ｐ２（ｖ１，ｖ２）
＋（ｄ｜｜０，・・・，０）｝  ・・・（１７）
【００９８】
そして、クライアント１の復号手段１３はＹを解読する。条件１および条件２の両方を満たす場合にＰ１（ｖ１，ｖ２），Ｐ２（ｖ１，ｖ２）は０となり、データ取得手段１４はデータｄを取得できる。一方、条件１および条件２の少なくとも一方が満たされない場合、解読結果にはランダムな値ｒ１および／またはｒ２を含むため、クライアント１はデータｄを取得できない。
図１３〜図１６で説明したことに基づけば、「ＡＮＤ」と「ＯＲ」の任意に組み合わせに適用できることは明らかである。
【００９９】
以上、図１１に示す検索システムによって、図５における論理式Ｐが「Ｅｑｕａｌ」である場合に、結合Ｃのいずれの検索も可能であることを示した。続いて、論理式Ｐが「Ｒａｎｇｅ／Ｐｏｉｎｔ  ｉｎｃｌｕｓｉｏｎ」などである場合について説明する。説明を簡略化するため、属性名ｘは１つのみで、結合Ｃは「Ｎｏｎｅ」であるとする。
【０１００】
図１７は、論理式Ｐが「Ｒａｎｇｅ／Ｐｏｉｎｔ  ｉｎｃｌｕｓｉｏｎ」である場合の検索手法を説明する図である。「Ｒａｎｇｅ／Ｐｏｉｎｔ  ｉｎｃｌｕｓｉｏｎ」の場合、クライアント１が指定する入力ａの範囲（同図の例では［３，７］すなわち「３以上７以下」）に、サーバ２が持つ属性名ｘの値ｖ（同図の例では５）が含まれる場合に、クライアント１はサーバ２からデータを取得できる。なお本例では、入力ａおよび属性名ｘがとり得る値は１〜８の８個であるとする。
【０１０１】
入力３〜７のそれぞれについて、論理式Ｐを「Ｅｑｕａｌ」とする検索を行うのでは計算量が多く、処理時間が長くなってしまう。そこで、本実施形態では２分木を用いてより少ない計算量で効率的に検索を行う。
【０１０２】
クライアント１およびサーバ２は同じ構造の２分木を持つ。入力ａおよび属性名ｘがとり得る値がｎ個である場合、２分木のレベル数を（ｌｏｇ２ｎ＋１）とする。（ｌｏｇ２ｎ＋１）が非整数の場合、レベル数を（ｌｏｇ２ｎ＋１）以上の最小の整数とする。また、各ノードには下位レベルに２つのノードが接続される。そのため、レベルＬには２Ｌ−１個のノードがあり、各ノードにはユニークなノード名として順に２Ｌ−１〜２Ｌ−１が割り当てられている。
【０１０３】
このような２分木において、最下位レベルにおけるノードの数は入力ａおよび属性名ｘがとり得る値の数以上となる。そこで、最下位レベルにおける各ノードを、クライアント１側の２分木においては入力ａがとり得る値のそれぞれと対応付け、サーバ２側の２分木においては属性名ｘがとり得る値のそれぞれと対応付ける。
【０１０４】
図１７の例では、入力ａおよび属性名ｘがとり得る値の数ｎが８であるから、レベル数は４である。最下位レベル４には８個のノードがあり、そのノード名は８〜１５である。そして、ノード８〜１５が、それぞれ入力ａおよび属性名ｘの値１〜８に対応付けられる。
【０１０５】
ここで、あるノードＡと、ノードＡの下位レベルに（直接または間接的に）接続されるノードＢとの関係を「ノードＡはノードＢをカバーする」と表現する。なお、最下位レベルにおける各ノードは自身をカバーするものとする。図１７において、例えばノード２はノード４，５，８〜１１をカバーしており、ノード６はノード１２，１３をカバーしており、ノード１４はノード１４をカバーしている。
【０１０６】
クライアント１側の２分木において、入力ａの範囲［３，７］に対応するノード１０〜１４を最小数のノードで過不足なくカバーするには、ノード５，６，１４、より詳細には、レベル３におけるノード５，６と、レベル４におけるノード１４が必要である。このように、クライアント１は入力範囲をカバーする最小数のノードをレベルごとに特定する。ただし、最上位レベルのノードは用いないこととする。このようにして特定されるノードには、レベルごとに最大２ノードが含まれる。
【０１０７】
一方、サーバ２側の２分木において、最上位レベルのノード１から、属性名ｘの値「５」に対応するノード１２に到達するためには、ノード３，６，１２を、より具体的には、レベル２のノード３と、レベル３のノード６と、レベル４のノード１２とを経由する。このように、サーバ２は属性名ｘの値に到達するために経由するノードをレベルごとに特定する。
【０１０８】
クライアント１側の入力範囲にサーバ２側の属性の値が含まれる場合、クライアント１が特定したノード（上記の例では、ノード５，６，１４）のうちの１つと、サーバ２が特定したノード（上記の例では、ノード３，６，１２）のうちの１つとが一致する。よって、上述した論理式Ｐが「Ｅｑｕａｌ」で、結合Ｃが「ＯＲ」である検索と同様のＺＰＥ処理を適用できる。
【０１０９】
まずは「ＯＲ」の処理として図１２および図１３の手法１を適用する場合を説明する。クライアント１の多項式生成手段１１は、クライアント１側が特定した入力範囲に基づくレベルごとのノード名のいずれかが、属性名ｘの値に基づくノード名のいずれかと一致する場合に０となる多項式Ｐ（ｘ）を生成する。
【０１１０】
上記の例では、多項式生成手段１１は、クライアント１側が特定した入力範囲［３，７］に基づく「レベル３のノード５，６、および、レベル４のノード１４」のいずれかが、属性名ｘの値「５」に基づくノード名のいずれかと一致する、という条件を満たす場合に０となる多項式Ｐ（ｘ）を生成する。「属性名ｘの値「５」に基づくノード名のいずれか」がいくつであるかは、サーバ２はクライアント１に知られてはならないし、クライアント１が知る必要もない。
【０１１１】
レベル２〜４に対応する変数をそれぞれＸ２〜Ｘ４とすると、上記の条件は「Ｘ３＝５」、「Ｘ３＝６」、「Ｘ４＝１４」の３条件のＯＲであり、多項式生成手段１１はこの条件を満たす下記（１８）式に示す多項式Ｐ（Ｘ２，Ｘ３，Ｘ４）を生成する。
Ｐ（Ｘ２，Ｘ３，Ｘ４）＝（Ｘ３−５）（Ｘ３−６）（Ｘ４−１４）  ・・・（１８）
【０１１２】
そして、サーバ２の暗号化部は、この多項式Ｐ（Ｘ２，Ｘ３，Ｘ４）のＸ２，Ｘ３，Ｘ４をそれぞれ３，６，１２で置き換えて（実際にはＸ２は含まれないが）、上記（１４）式に相当する暗号値Ｙを生成する。以降の処理は上述した通りである。
【０１１３】
続いて、図１２および図１４の手法２を適用する場合を説明する。なお、「Ｘ３＝５」、「Ｘ３＝６」、「Ｘ４＝１４」は、そのうちの２つ以上が同時に満たされることはないから、手法２を適用できる。
多項式生成手段１１は、各条件を満たす場合に０となる下記（１９）式に示す３つの多項式Ｐ１（Ｘ３），Ｐ２（Ｘ３），Ｐ３（Ｘ４）を生成する。
Ｐ１（Ｘ３）＝Ｘ３−５
Ｐ２（Ｘ３）＝Ｘ３−６
Ｐ３（Ｘ４）＝Ｘ４−１４  ・・・（１９）
【０１１４】
そして、サーバ２の暗号化部は、この多項式Ｐ１（Ｘ３），Ｐ２（Ｘ３），Ｐ３（Ｘ４）のＸ２，Ｘ３，Ｘ４をそれぞれ３，６，１２で置き換えて３つの暗号値を生成し、これらをシャッフルしてクライアント１に送信する。以降の処理は上述した通りである。
【０１１５】
ところで、上記（１８）式や（１９）式をサーバ２に送信する場合、多項式Ｐ（Ｘ２，Ｘ３，Ｘ４）やＰ１（Ｘ３），Ｐ２（Ｘ３），Ｐ３（Ｘ４）から、クライアント１の入力範囲がサーバ２に知られてしまうおそれがある。そこで、クライアント１はノード名として用いられない値（例えば０）をダミーとして用い、各レベルに対応する変数に関する条件を２つ設定するのが望ましい。２つとする理由は、上述したように各レベルで最大２ノードがクライアント１によって特定され得るためである。
このような条件は、
（Ｘ２＝０    ＯＲ  Ｘ２＝０）ＯＲ
（Ｘ３＝５    ＯＲ  Ｘ３＝６）ＯＲ
（Ｘ４＝１４  ＯＲ  Ｘ４＝０）
と表現できる。よって、多項式生成手段１１は、上記（１８）式に代えて、下記（１８’）式に示す多項式Ｐ（Ｘ２，Ｘ３，Ｘ４）を生成するのが望ましい。
Ｐ（Ｘ２，Ｘ３，Ｘ４）＝
（Ｘ２−０）（Ｘ２−０）（Ｘ３−５）（Ｘ３−６）（Ｘ４−１４）（Ｘ４−０）
・・・（１８’）
また、多項式生成手段１１は、上記（１９）式に代えて、下記（１９’）式に示す６個の多項式を生成するのが望ましい。
Ｐ１（Ｘ２）＝Ｘ２−０
Ｐ２（Ｘ２）＝Ｘ２−０
Ｐ３（Ｘ３）＝Ｘ３−５
Ｐ４（Ｘ３）＝Ｘ３−６
Ｐ５（Ｘ４）＝Ｘ４−１４
Ｐ６（Ｘ４）＝Ｘ４−０  ・・・（１９’）
【０１１６】
ここで、上記（１８’）式や（１９’）式は６つの条件を５つの「ＯＲ」で結合したものであり、（１８’）式に示すように各「ＯＲ」に相当する処理をすべてクライアント１で行ってもよいし、（１９’）式に示すように各「ＯＲ」に相当する処理をすべてサーバ２で行ってもよいし、一部をクライアント１で行い他の一部をサーバ２で行ってもよい。しかしながら、いずれで処理するかに応じてクライアント１とサーバ２間での通信量が異なる。
【０１１７】
図１８は、「ＯＲ」の処理と、クライアント１サーバ２間の通信量との関係を模式的に示す図である。図１７の例を用いており、変数は各レベルに対応するＸ２〜Ｘ４であり、各変数につき２つの条件がある。そして、図１８に示すように、「ＯＲ」は２種類に分類できる。すなわち、１つは同じ変数どうしを結ぶ「ＯＲ」（図１８の実線で囲んだＯＲであり、「ＯＲ１」と呼ぶ）、もう１つは異なる変数どうしを結ぶ「ＯＲ」（同図の破線で囲んだＯＲであり、「ＯＲ２」と呼ぶ）である。各「ＯＲ」に相当する処理をクライアント１で行う（手法１）か、サーバ２で行う（手法２）か、によって、４通りの処理が考えられる。ただし、ＯＲ１を手法２で行い、ＯＲ２を手法１で行うことはできないので、実際は３通りである。
【０１１８】
以下、変数ｘが８通りの値をとり得る（つまりレベル数が３）として、通信量を見積もる。
なお、図１８の各欄の上段はクライアント１からサーバ２への通信量であり、下段はサーバ２からクライアント１への通信量である。
【０１１９】
図１９は、ＯＲ１，ＯＲ２とも手法１で行う場合の通信量を説明する図である。この場合の多項式Ｐ（Ｘ２，Ｘ３，Ｘ４）は以下のようになる。
Ｐ（Ｘ２，Ｘ３，Ｘ４）
＝（Ｘ２−０）（Ｘ２−０）（Ｘ３−５）（Ｘ３−６）（Ｘ４−１４）（Ｘ４−０）
【０１２０】
より一般的には、下式となる。
Ｐ（Ｘ２，Ｘ３，Ｘ４）
＝（Ｘ２−ａ１）（Ｘ２−ａ２）（Ｘ３−ｂ１）（Ｘ３−ｂ２）（Ｘ４−ｃ１）（Ｘ４−ｃ２）
＝｛Ｘ２２−（ａ１＋ａ２）Ｘ２＋ａ１ａ２｝｛Ｘ３２−（ｂ１＋ｂ２）Ｘ３＋ｂ１ｂ２｝｛Ｘ４２−（ｃ１＋ｃ２）Ｘ４＋ｃ１ｃ２｝
＝Σｑｉ，ｊ，ｋＸ２ｉＸ３ｊＸ４ｋ
【０１２１】
係数ｑｉ，ｊ，ｋの数は３３＝２７である。より一般的には、変数ｘがとり得る値がＲ通りであるとすると、３＾ｌｏｇ２Ｒ個の係数が生じる。３＾ｌｏｇ２Ｒ＞２＾ｌｏｇ２Ｒ＝Ｒであり、クライアント１からサーバ２への通信量のオーダーはＲと見積もられる。
一方、手法１によればサーバ２からクライアント１への通信量のオーダーは１である（図１３参照）。  
【０１２２】
図２０は、ＯＲ１を手法１で行い、ＯＲ２を手法２で行う場合の通信量を説明する図である。この場合、下記３個の多項式がクライアント１からサーバ２へ送信される。
Ｐ１（Ｘ２）＝（Ｘ２−０）（Ｘ２−０）
Ｐ２（Ｘ３）＝（Ｘ３−５）（Ｘ３−６）
Ｐ３（Ｘ４）＝（Ｘ４−１４）（Ｘ３−０）
より一般的には、下式となる。
Ｐ１（Ｘ２）＝（Ｘ２−ａ１）（Ｘ２−ａ２）＝Ｘ２２−（ａ１＋ａ２）Ｘ２＋ａ１ａ２
Ｐ２（Ｘ３）＝（Ｘ３−ｂ１）（Ｘ３−ｂ２）＝Ｘ３２−（ｂ１＋ｂ２）Ｘ３＋ｂ１ｂ２
Ｐ３（Ｘ４）＝（Ｘ４−ｃ１）（Ｘ４−ｃ２）＝Ｘ４２−（ｃ１＋ｃ２）Ｘ４＋ｃ１ｃ２
【０１２３】
Ｐ１（Ｘ２）の係数は（ａ１＋ａ２）およびａ１ａ２の２つである。同様に、Ｐ２（Ｘ３），Ｐ３（Ｘ４）の係数も２つずつであるから、係数の総数は２＊３＝６個、より一般的には２ｌｏｇ２Ｒである。よって、クライアント１からサーバ２への通信量のオーダーは２ｌｏｇ２Ｒと見積もられる。
一方、クライアント１からサーバ２への通信量のオーダーは、多項式の数（すなわちレベル数）から、ｌｏｇ２Ｒと見積もられる。
【０１２４】
図２１は、ＯＲ１，ＯＲ２とも手法２で行う場合の通信量を説明する図である。この場合、下記６個の多項式（各レベルにつき２つ）がクライアント１からサーバ２へ送信される。
Ｐ１（Ｘ２）＝Ｘ２−０
Ｐ２（Ｘ２）＝Ｘ２−０
Ｐ３（Ｘ３）＝Ｘ３−５
Ｐ４（Ｘ３）＝Ｘ３−６
Ｐ５（Ｘ４）＝Ｘ４−１４
Ｐ６（Ｘ４）＝Ｘ３−０
【０１２５】
各多項式における係数は１つであり、その総数は１＊６＝６個である。より一般的には、２ｌｏｇ２Ｒ個であり、クライアント１からサーバ２への通信量のオーダーは２ｌｏｇ２Ｒと見積もられる。
一方、サーバ２からクライアント１への通信量のオーダーは、多項式の数から、２ｌｏｇ２Ｒと見積もられる。
【０１２６】
以上により、図１８に示すように、ＯＲ１（すなわち同変数どうしを結ぶＯＲ）を手法１で行い、ＯＲ２（すなわち異なる変数どうしを結ぶＯＲ）を手法２で行うのが最も効率的であり、望ましい。
【０１２７】
次に、図１７の応用として、論理式Ｐが「Ｒａｎｇｅ／Ｐｏｉｎｔ  ｉｎｃｌｕｓｉｏｎ」であり、結合Ｃが「ＡＮＤ」である場合について、図２２を用いて説明する。同図は、属性名がｘ１〜ｘｋのｋ個であり、そのそれぞれに対してクライアント１が入力範囲を指定する例を示している。すなわち、条件Ｑ：「属性名ｘ１の値ｖ１がａ１以上ｂ１以下であり、かつ、・・・かつ、属性名ｘｋの値ｖｋがａｋ以上ｂｋ以下」を満たす場合に、クライアント１はサーバ２からデータｄを取得できる。この場合、クライアント１およびサーバ２は、属性名ｘ１〜ｘｋのそれぞれと対応するｋ個の２分木を内部に持っている。
【０１２８】
各２分木のレベル数が４（つまり、ａ１〜ａｋ、ｂ１〜ｂｋ、ｖ１〜ｖｋのそれぞれがとり得る値の数が８個）であるとし、クライアント１が特定した、入力範囲［ａｊ，ｂｊ］をカバーするノードのノード名を単にｓｊ１〜ｓｊ６（ダミーを含む）とする。また、属性名ｘｉにおけるレベルｊの変数をＸｉｊとする。
【０１２９】
「属性名ｘ１の値ｖ１がａ１以上ｂ１以下」に対応する条件をＱ１とすると、Ｑ１は、
Ｑ１：（Ｘ１２＝ｓ１１  ＯＲ  Ｘ１２＝ｓ１２）ＯＲ
（Ｘ１３＝ｓ１３  ＯＲ  Ｘ１２＝ｓ１４）ＯＲ
（Ｘ１４＝ｓ１５  ＯＲ  Ｘ１２＝ｓ１６）
である。同様に、「属性名ｘｊの値ｖｊがａｊ以上ｂｊ以下」に対応する条件をＱｊとすると、上記の条件Ｑは、
Ｑ：Ｑ１  ＡＮＤ  ・・・  ＡＮＤ  Ｑｋ
【０１３０】
である。条件Ｑは「ＡＮＤ」と「ＯＲ」の組合せにすぎないから、ＺＰＥ処理によって検索を行うことができる。「ＡＮＤ」および「ＯＲ」に相当する処理をクライアント１およびサーバ２のいずれで行うかに応じてクライアント１とサーバ２間での通信量が異なる。
【０１３１】
図２３は、「ＡＮＤ」および「ＯＲ」の処理と、クライアント１サーバ２間の通信量との関係を模式的に示す図である。図２２の例を用いており、変数はｋ個の属性名および３つのレベルのそれぞれに対応するＸ１２〜Ｘｋ４であり、各変数につき２つの条件がある。そして、図１８と同様に、「ＯＲ」は２種類に分類できる。すなわち、１つは同じ変数どうしを結ぶ「ＯＲ」（図２３の実線で囲んだＯＲであり、「ＯＲ１」と呼ぶ）、もう１つは異なる変数どうしを結ぶ「ＯＲ」（同図の破線で囲んだＯＲであり、「ＯＲ２」と呼ぶ）である。各「ＯＲ」に相当する処理をクライアント１で行う（手法１）か、サーバ２で行う（手法２）か、によって、４通りの処理が考えられる。ただし、ＯＲ１を手法２で行い、ＯＲ２を手法１で行うことはできないので、実際は３通りである。そして、「ＡＮＤ」に相当する処理をクライアント１で行う（手法１）か、サーバ２で行う（手法２）か、によって２通りの処理が考えられる。よって、合計６通りの処理がある。以下、各処理での通信量を見積もる。
【０１３２】
まず、ＯＲ１，ＯＲ２とも手法１で行い、ＡＮＤを手法１で行う場合を説明する。この場合、クライアント１からサーバ２へ送信される係数の数は、図１８に比べて属性の数がｋ倍になっているから、クライアント１からサーバ２への通信量のオーダーはＲｋと見積もられる。
一方、手法１によればサーバ２からクライアント１への通信量のオーダーは１である（図１５参照）。
【０１３３】
次に、ＯＲ１，ＯＲ２とも手法１で行い、ＡＮＤを手法２で行う場合であるが、クライアント１でＯＲに相当する処理を行うため、クライアント１からサーバ２への通信量のオーダーはやはりＲｋと見積もられる。また、手法２によればサーバ２からクライアント１への通信量のオーダーは１である（図１６参照）。
【０１３４】
図２４は、ＯＲ１を手法１で行い、ＯＲ２を手法２で行い、ＡＮＤを手法１で行う場合の通信量を説明する図である。上記の条件Ｑは下記のように変形される。
Ｑ：｛ｆ１（Ｘ１２）  ＯＲ  ｇ１（Ｘ１３）  ＯＲ  ｈ１（Ｘ１４）｝ＡＮＤ
｛ｆ２（Ｘ２２）  ＯＲ  ｇ２（Ｘ２３）  ＯＲ  ｈ２（Ｘ２４）｝ＡＮＤ
・・・
｛ｆｋ（Ｘｋ２）  ＯＲ  ｇｋ（Ｘｋ３）  ＯＲ  ｈｋ（Ｘｋ４）｝＝｛ｆ１（Ｘ１２）  ＡＮＤ  ｆ２（Ｘ２２）  ・・・  ＡＮＤ  ｆｋ（Ｘｋ２）｝ＯＲ
｛ｇ１（Ｘ１３）  ＡＮＤ  ｇ２（Ｘ２３）  ・・・  ＡＮＤ  ｇｋ（Ｘｋ３）｝ＯＲ
｛ｈ１（Ｘ１４）  ＡＮＤ  ｈ２（Ｘ２４）  ・・・  ＡＮＤ  ｈｋ（Ｘｋ４）｝
・・・（２０）
【０１３５】
ここで、ｆ，ｇ，ｈはＯＲ１をクライアント１で処理した結果の２次式であり、便宜上「小多項式」とも呼ぶ。例えばｆ１（Ｘ１２）＝（Ｘ１２−ｓ１１）（Ｘ１２−ｓ１２）である。この（２０）式において、波括弧｛｝内の「ＡＮＤ」はクライアント１によって行われ、各波括弧｛｝内の係数の数は２ｋ個である。また、「ＡＮＤ」を展開すると多項式の数は３ｋ個、より一般的には（ｌｏｇ２Ｒ）ｋ個である。よって、クライアント１からサーバ２への通信量のオーダーは２ｋ（ｌｏｇ２Ｒ）ｋと見積もられる。
【０１３６】
一方、クライアント１からサーバ２への通信量のオーダーは、多項式の数から（ｌｏｇ２Ｒ）ｋと見積もられる。
【０１３７】
図２５は、ＯＲ１を手法１で行い、ＯＲ２を手法２で行い、ＡＮＤを手法２で行う場合の通信量を説明する図である。上記（２０）式において、波括弧｛｝内の「ＡＮＤ」はサーバ２によって行われる。各小多項式ｆ，ｇ，ｈは２次式であるから２つの係数を含む。また、合計３ｋ個、より一般的には（ｌｏｇ２Ｒ）ｋ個の小多項式がある。よって、クライアント１からサーバ２への通信量のオーダーは２ｋ（ｌｏｇ２Ｒ）と見積もられる。
一方、クライアント１からサーバ２への通信量のオーダーは、多項式の数から（ｌｏｇ２Ｒ）ｋと見積もられる。
【０１３８】
図２６は、ＯＲ１，ＯＲ２を手法２で行い、ＡＮＤを手法１で行う場合の通信量を説明する図である。上記の条件Ｑは下記のように変形される。
Ｑ：｛（Ｘ１２−ｓ１１）・・・ＯＲ・・・（Ｘ１４−ｓ１６）｝・・・ＡＮＤ・・・
｛（Ｘｋ２−ｓｋ１）・・・ＯＲ・・・（Ｘｋ４−ｓｋ６）｝
＝｛（Ｘ１２−ｓ１１）・・・ＡＮＤ・・・（Ｘｋ２−ｓｋ１）｝ＯＲ
｛（Ｘ１３−ｓ１２）・・・ＡＮＤ・・・（Ｘｋ３−ｓｋ２）｝ＯＲ
｛（Ｘ１４−ｓ１３）・・・ＡＮＤ・・・（Ｘｋ４−ｓｋ３）｝
・・・（２１）
【０１３９】
ここで、各波括弧｛｝内の「ＡＮＤ」はクライアント１によって行われ、各波括弧｛｝内の係数の数はｋ個である。また、「ＡＮＤ」を展開すると多項式の数は６ｋ個、より一般的には（２ｌｏｇ２Ｒ）ｋ個である。よって、クライアント１からサーバ２への通信量のオーダーはｋ（２ｌｏｇ２Ｒ）ｋと見積もられる。
一方、サーバ２からクライアント１への通信量のオーダーは、多項式の数から（２ｌｏｇ２Ｒ）ｋと見積もられる。
【０１４０】
図２７は、ＯＲ１，ＯＲ２を手法２で行い、ＡＮＤを手法２で行う場合の通信量を説明する図である。上記（２１）式において、各波括弧｛｝内の「ＡＮＤ」はサーバ２によって行われる。各丸括弧（）内の係数の数は１個であり、合計６ｋ個、より一般的には（ｌｏｇ２Ｒ）２ｋ個の丸括弧（）がある。よって、クライアント１からサーバ２への通信量のオーダーは（ｌｏｇ２Ｒ）２ｋと見積もられる。
一方、サーバ２からクライアント１への通信量のオーダーは、多項式の数から（２ｌｏｇ２Ｒ）ｋと見積もられる。
以上により、図２３に示すように、ＯＲ１は手法１で行い、ＯＲ２は手法２で行い、ＡＮＤは手法２で行うのが最も効率的であり、望ましい。
【０１４１】
続いて、論理式Ｐが「Ｐｏｉｎｔ／Ｒａｎｇｅ  ｉｎｃｌｕｓｉｏｎ」である場合について説明する。説明を簡略化するため、属性名はｘのみで、結合Ｃは「Ｎｏｎｅ」であるとする。
【０１４２】
図２８は、論理式Ｐが「Ｐｏｉｎｔ／Ｒａｎｇｅ  ｉｎｃｌｕｓｉｏｎ」である場合の検索手法を説明する図である。「Ｐｏｉｎｔ／Ｒａｎｇｅ  ｉｎｃｌｕｓｉｏｎ」の場合、クライアント１が指定する入力ａ（同図の例では５）が、サーバ２が持つ属性名ｘの値の範囲（同図の例では［３，７］）に含まれる場合に、クライアント１はサーバ２からデータを取得できる。
【０１４３】
具体的な処理は図１７で説明した「Ｒａｎｇｅ／Ｐｏｉｎｔ  ｉｎｃｌｕｓｉｏｎ」と類似している。クライアント１は入力ａに到達するために経由するノードをレベルごとに特定する（同図の例では、レベル２のノード３と、レベル３のノード６と、レベル４のノード１２）。また、サーバ２は属性名の範囲をカバーする最小数のノードをレベルごとに特定する（同図の例では、レベル３におけるノード５，６と、レベル４におけるノード１４）。
【０１４４】
そして、クライアント１の多項式生成手段１１は、クライアント１側が特定した入力に基づくレベルごとのノード名のいずれかが、属性名の範囲に基づくノード名のいずれかと一致する場合に０となる多項式Ｐ（ｘ）を生成する。ただし、サーバ２では各レベルで最大２ノードがクライアント１によって特定され得るため、クライアント１でもレベルごとに変数を２つ設定する。レベルｉに対応する変数をＸｉ，Ｘｉ’とすると、
（Ｘ２＝３    ＯＲ  Ｘ２’＝３）ＯＲ
（Ｘ３＝６    ＯＲ  Ｘ３’＝６）ＯＲ
（Ｘ４＝１２  ＯＲ  Ｘ４’＝１２）
という条件が満たされる場合に真となる多項式Ｐ（Ｘ２，Ｘ２’，Ｘ３，Ｘ３’，Ｘ４，Ｘ４’）を多項式生成手段１１は生成する。
【０１４５】
一方、サーバ２の暗号化状態処理手段２１は、レベル２のノード５，６およびレベル３のノード１４を特定しているため、変数Ｘ３，Ｘ３’，Ｘ４をそれぞれ５，６，１４で置き換え、他の変数Ｘ２，Ｘ２’，Ｘ４’をダミーである０で置き換えて暗号値を生成する。
【０１４６】
以下は図１７と同様の処理となる。なお、図２３〜図２７と同様の考察により、「Ｐｏｉｎｔ／Ｒａｎｇｅ  ｉｎｃｌｕｓｉｏｎ」の最も効率的な処理では、クライアント１からサーバ２への通信量のオーダーは２ｋｌｏｇ２Ｒであり、サーバ２からクライアント１への通信量のオーダーは（２ｌｏｇ２Ｒ）ｋである。
続いて、論理式Ｐが「Ｒａｎｇｅ／Ｒａｎｇｅ  ｉｎｔｅｒｓｅｃｔ」である場合について説明する。
【０１４７】
図２９および図３０は、論理式Ｐが「Ｒａｎｇｅ／Ｒａｎｇｅ  ｉｎｔｅｒｓｅｃｔ」である場合の検索手法を説明する図である。「Ｒａｎｇｅ／Ｒａｎｇｅ  ｉｎｔｅｒｓｅｃｔ」の場合、条件「クライアント１が指定する入力の範囲［ａ，ｂ］と、サーバ２が持つ属性名ｘの範囲［ｕ，ｖ］と、が少なくとも一部重複している」を満たす場合に、クライアント１はサーバ２からデータを取得できる。
上記の条件は、「
ｕがａ以上ｂ以下、または、
ｖがａ以上ｂ以下、または、
ａがｕ以上ｖ以下、または、
ｂがｕ以上ｖ以下
」と言い換えることができる。このそれぞれに対応して条件Ｑ１〜Ｑ４を
Ｑ１：［ａ，ｂ］∋ｕ
Ｑ２：［ａ，ｂ］∋ｖ
Ｑ３：ａ∈［ｕ，ｖ］
Ｑ４：ｂ∈［ｕ，ｖ］
【０１４８】
と定義すると、上記条件はＱ１〜Ｑ４のＯＲで表される。Ｑ１，Ｑ２は「Ｒａｎｇｅ／Ｐｏｉｎｔ  ｉｎｃｌｕｓｉｏｎ」を適用し、Ｑ３，Ｑ４は「Ｐｏｉｎｔ／Ｒａｎｇｅ  ｉｎｃｌｕｓｉｏｎ」を適用すればよい。
【０１４９】
ここで、上記条件を満たす場合には、図３０に示すように４パターンあり、条件Ｑ１〜Ｑ４のうちの２つが必ず満たされる。よって、「ＯＲ」の処理として、図１４に示す手法２を適用しても、Ｑ１〜Ｑ４のいずれが満たされたかは秘匿される。
【０１５０】
ここで「Ｒａｎｇｅ／Ｒａｎｇｅ  ｉｎｔｅｒｓｅｃｔ」の最も効率的な処理の通信量のオーダーは以下のように見積もられる。まずは、クライアント１からサーバ２への通信量であるが、条件Ｑ１，Ｑ２は「Ｒａｎｇｅ／Ｐｏｉｎｔ  ｉｎｃｌｕｓｉｏｎ」であるから、図１８より通信量のオーダーはそれぞれ２ｋｌｏｇ２Ｒである。また、条件Ｑ３，Ｑ４は「Ｐｏｉｎｔ／Ｒａｎｇｅ  ｉｎｃｌｕｓｉｏｎ」であるから、通信量のオーダーはそれぞれ２ｋｌｏｇ２Ｒである。よって、合計の通信量のオーダーは８ｋｌｏｇ２Ｒと見積もられる。
【０１５１】
次に、サーバ２からクライアント１への通信量であるが、条件Ｑ１，Ｑ２は「Ｒａｎｇｅ／Ｐｏｉｎｔ  ｉｎｃｌｕｓｉｏｎ」であるから、図１８より通信量のオーダーはそ（ｌｏｇ２Ｒ）ｋである。また、条件Ｑ３，Ｑ４は「Ｐｏｉｎｔ／Ｒａｎｇｅ  ｉｎｃｌｕｓｉｏｎ」であるから、通信量のオーダーはそれぞれ（２ｌｏｇ２Ｒ）ｋである。よって、合計の通信量のオーダーは（２＋２ｋ）（ｌｏｇ２Ｒ）ｋと見積もられる。
【０１５２】
以上説明したように、本実施形態によれば、クライアント１への入力と、サーバ２への入力に含まれる属性名の値とが所定の関係を満たす場合に０となる多項式を生成する。検索条件に応じた多項式を生成することで、汎用的な秘匿検索が可能となる。また、複数の条件を多項式として表現することで、通信量のオーダーはＲ（線形）ではなくｌｏｇ２Ｒに抑えられ、効率的な秘匿検索が可能となる。
【０１５３】
上述した実施形態は、本発明が属する技術分野における通常の知識を有する者が本発明を実施できることを目的として記載されたものである。上記実施形態の種々の変形例は、当業者であれば当然になしうることであり、本発明の技術的思想は他の実施形態にも適用しうることである。したがって、本発明は、記載された実施形態に限定されることはなく、特許請求の範囲によって定義される技術的思想に従った最も広い範囲とすべきである。
【産業上の利用可能性】
【０１５４】
上述した実施形態は、例として、ゲノム計算、データマイニング、顔・虹彩・声紋認識、遠隔診断、クレジットチェック、医療診断、化合物データベース検索などに利用できる。
【符号の説明】
【０１５５】
１  クライアント
２  サーバ
３  データベース
１１  多項式生成手段
１２  暗号化手段
１３  復号手段
１４  データ取得手段
２１  暗号化状態処理手段
【図１】
0006381128.tif 000003
【図２】
0006381128.tif 000004
【図３】
0006381128.tif 000005
【図４】
0006381128.tif 000006
【図５】
0006381128.tif 000007
【図６】
0006381128.tif 000008
【図７】
0006381128.tif 000009
【図８】
0006381128.tif 000010
【図９】
0006381128.tif 000011
【図１０】
0006381128.tif 000012
【図１１】
0006381128.tif 000013
【図１２】
0006381128.tif 000014
【図１３】
0006381128.tif 000015
【図１４】
0006381128.tif 000016
【図１５】
0006381128.tif 000017
【図１６】
0006381128.tif 000018
【図１７】
0006381128.tif 000019
【図１８】
0006381128.tif 000020
【図１９】
0006381128.tif 000021
【図２０】
0006381128.tif 000022
【図２１】
0006381128.tif 000023
【図２２】
0006381128.tif 000024
【図２３】
0006381128.tif 000025
【図２４】
0006381128.tif 000026
【図２５】
0006381128.tif 000027
【図２６】
0006381128.tif 000028
【図２７】
0006381128.tif 000029
【図２８】
0006381128.tif 000030
【図２９】
0006381128.tif 000031
【図３０】
0006381128.tif 000032