(57)【要約】  検索可能暗号を用いた検索では、検索クエリと秘匿化インデックスを毎回総当りで照合する必要があり、検索応答が遅延しやすい。検索可能暗号を実現するために必要な秘匿化インデックスだけではなく、預託データの特徴量もデータベースサーバに登録する。当該データベースサーバは、特徴量を用いて秘匿化インデックスなどをクラスタリングしておく。検索においては、まず各クラスタの代表データとのみ照合を行う。ヒットした場合、当該代表データが属するクラスタに含まれる全データについて照合の優先順位を上げる。ヒットしなかった場合、優先順位を下げる。優先順位算出後、全データについて当該優先順位に基づいて照合を順次行う。一定回数で照合を打ち切ることで検索処理の高速化を実現する。
2013080365.tif 000002
【特許請求の範囲】
【請求項１】
データを秘匿検索装置に送信する登録クライアントは、
前記秘匿検索装置に送信するデータを暗号化して暗号化データを生成する暗号化手段、
前記データから抽出したインデックスを秘匿化した秘匿化インデックスを生成する秘匿化インデックス生成手段、
前記データから、データ間の類似度を計算するための特徴量を算出する特徴量算出手段、及び
前記暗号化データ、前記秘匿化インデックス、及び前記特徴量の組を、前記秘匿検索装置に送信する登録手段を有する、
ことを特徴とする登録クライアント。
【請求項２】
前記登録クライアントにおける前記秘匿化インデックス生成手段は、
データから検索キーワードを抽出し、
前記抽出したキーワードそれぞれについてハッシュ値を計算し、
各ハッシュ値に対して乱数列を生成し、前記乱数列に対するメッセージダイジェストを求め、
前記乱数列のビット長と前記メッセージダイジェストのビット長の和は前記ハッシュ値のビット長と等しくなるように、前記乱数列と前記メッセージダイジェストを連結したビット列と前記ハッシュ値との排他的論理和を、前記秘匿化インデックスとして出力する、
ことを特徴とする請求項１記載の登録クライアント。
【請求項３】
前記登録クライアントにおいて、
前記特徴量は、前記秘匿検索装置に送信するデータのデータ長で与えられ、
２つのデータ間の類似度は、前記２つのデータにおけるそれぞれの特徴量ｓ１，ｓ２を含む、１／（１＋｜ｓ１−ｓ２｜）によって算出する、
ことを特徴とする請求項１記載の登録クライアント。
【請求項４】
前記登録クライアントにおいて、
前記特徴量は、
前記秘匿検索装置に送信するデータから単語を抽出し、
抽出した単語それぞれについてハッシュ値を計算し、
前記ハッシュ値の論理和をビット列とみなすことで与えられ、
２つのデータ間の類似度は、前記２つのデータの特徴量において、ともに１になるビットの個数によって算出される、
ことを特徴とする請求項１記載の登録クライアント。
【請求項５】
前記登録クライアントにおいて、
前記特徴量は、
前記秘匿検索装置に送信するデータを、あらかじめ定めた特定のビットパターンが境界となるように分割し、
前記分割したデータそれぞれについてハッシュ値を計算し、
前記ハッシュ値を構成要素とする集合として与えられ、
２つのデータ間の類似度は、前記２つのデータにおける特徴量の積集合に含まれる要素数と、前記特徴量の和集合に含まれる要素数の比によって算出される、
ことを特徴とする請求項１記載の登録クライアント。
【請求項６】
秘匿検索装置に対して検索を行う検索クライアントは、
前記秘匿検索装置に登録されたデータの検索を行うための検索クエリに含まれる検索キーワードを秘匿化したトラップドアを生成するトラップドア生成手段、
を有することを特徴とする検索クライアント。
【請求項７】
前記検索クライアントにおいて、
前記トラップドアは、
前記データから抽出した検索キーワードから秘匿化インデックスを生成する際に、前記検索キーワードのハッシュ値を求めたハッシュ関数を用いて、検索クエリに対するハッシュ値を算出する、
ことを請求項６記載の検索クライアント。
【請求項８】
データを登録クライアントから受信し、検索用の情報を検索クライアントから受信する秘匿検索装置は、
前記登録クライアントから、前記データを暗号化した暗号化データと、前記データから抽出したインデックスを秘匿化した秘匿化インデックスと、データ間の類似度を計算するための特徴量との組を受信する受信手段と、
前記登録クライアントから受信した前記特徴量をもとに、２つのデータの類似度を算出する類似度算出手段と、
前記類似度算出手段が算出した類似度に基づいて、前記登録クライアントから受信した前記暗号化データをクラスタリングするクラスタリング手段と、
前記秘匿検索装置に登録されたデータの検索を行うための検索クエリに含まれる検索キーワードを秘匿化したトラップドアを前記検索クライアントから受け取り、前記クラスタリング手段が生成したクラスタリングの結果をもとに、前記クラスタリングされた暗号化データと前記トラップドアとの照合処理の優先順位を算出する優先順位算出手段と、
前記登録クライアントから受信した前記秘匿化インデックスと前記トラップドアとの照合処理を行う照合手段と、
前記検索クライアントから前記トラップドアを受信したとき、前記優先順位算出手段が算出した優先順位に基づいて、あらかじめ定めた回数だけ、前記優先順位が高いクラスタの順に、前記照合手段によって、前記暗号化データと前記トラップドアとの照合を行ない、前記トラップドアにヒットした前記暗号化データを前記検索クライアントに返信する検索手段とを、
有することを特徴とする秘匿検索装置。
【請求項９】
前記秘匿検索装置において、
前記クラスタリング手段は、
クラスタを1以上生成し、各クラスタについて中心をランダムに設定し、
前記登録クライアントから受信した全てのデータについて、各データに含まれる特徴量に基づいて、前記類似度算出手段に、当該中心との類似度を計算させて、各データを最も類似する中心が属するクラスタに割り振り、
前記登録クライアントから受信した全てのデータについて、クラスタへの割り振りが変化しなかった場合は処理を終了し、
それ以外の場合は各クラスタの中心を、当該クラスタに属するデータの特徴量を用いて計算し直してから、当該中心を求める処理を繰り返す
ことを特徴とする請求項８記載の秘匿検索装置。
【請求項１０】
前記秘匿検索装置において、
前記クラスタリング手段は、
前記登録クライアントから受信したデータを1つだけを含むクラスタを、前記データの総数分生成し、
前記類似度算出手段に、各クラスタに属するデータの特徴量を用いてクラスタ間の距離を計算させ、最も距離の近い２つのクラスタを逐次的に併合し、
前記併合を、全ての対象が１つのクラスタに併合されるまで繰り返す、
ことを特徴とする請求項８記載の秘匿検索装置。
【請求項１１】
前記秘匿検索装置において、
前記優先順位算出手段は、
各クラスタについて、前記クラスタに属する全てのデータのうち1つを代表データとして選択し、
各クラスタについて、前記クラスタの代表データの秘匿化インデックスと前記トラップドアを前記照合手段に照合させて、
前記トラップドアとの合致率が大きいほど優先度が高くなるように当該クラスタの優先度を算出し、
前記優先度が高い順になるようにクラスタに含まれるデータの照合順序をソートする、
ことを特徴とする請求項８記載の秘匿検索装置。
【請求項１２】
前記秘匿検索装置において、
前記照合手段は、
前記秘匿化インデックスと前記トラップドアの排他的論理和を取り、
前記秘匿化インデックス生成の際に生成した乱数列と同じ長さのビット列を前記排他的論理和の先頭から取って、前記ビット列のメッセージダイジェストを計算し、
前記メッセージダイジェストが、前記排他的論理和の前記メッセージダイジェストを計算していないビット列と一致した場合、前記秘匿化インデックスは前記トラップドアに対応する検索クエリを含んでいると判断し、
一致しない場合、前記秘匿化インデックスは前記トラップドアに対応する前記検索クエリを含んでいないと判断する、
ことを特徴とする請求項８記載の秘匿検索装置。
【請求項１３】
前記秘匿検索装置において、
前記検索手段が行う照合処理の回数は、前記検索クライアントが設定する、
ことを特徴とする請求項８記載の秘匿検索装置。
【請求項１４】
前記秘匿検索装置において、
前記検索手段が行う照合処理の回数は、前記秘匿検索装置が設定する、
ことを特徴とする請求項８記載の秘匿検索装置。
【請求項１５】
少なくとも１つの登録クライアント、秘匿検索装置、及び少なくとも１つの検索クライアントを互いにネットワークを介して接続した計算機システムであって、
データを前記秘匿検索装置に送信する前記登録クライアントは、
前記秘匿検索装置に送信するデータを暗号化して暗号化データを生成する暗号化手段、
前記データから抽出したインデックスを秘匿化した秘匿化インデックスを生成する秘匿化インデックス生成手段、
前記データから、データ間の類似度を計算するための特徴量を算出する特徴量算出手段、及び
前記暗号化データ、前記秘匿化インデックス、及び前記特徴量の組を、前記秘匿検索装置に送信する登録手段を有し、
前記秘匿検索装置に対して検索を行う前記検索クライアントは、
前記秘匿検索装置に登録されたデータの検索を行うための検索クエリに含まれる検索キーワードを秘匿化したトラップドアを生成するトラップドア生成手段を有し、
データを前記登録クライアントから受信し、検索用の情報を前記検索クライアントから受信する前記秘匿検索装置は、
前記登録クライアントから、前記暗号化データと、前記秘匿化インデックスと、前記特徴量との組を受信する受信手段、
前記登録クライアントから受信した前記特徴量をもとに、２つのデータの類似度を算出する類似度算出手段、
前記類似度算出手段が算出した類似度に基づいて、前記登録クライアントから受信した前記暗号化データをクラスタリングするクラスタリング手段、
前記トラップドアを前記検索クライアントから受け取り、前記クラスタリングの結果をもとに、前記クラスタリングされた暗号化データと前記トラップドアとの照合処理の優先順位を算出する優先順位算出手段、
前記登録クライアントから受信した前記秘匿化インデックスと前記トラップドアとの照合処理を行う照合手段、及び
前記検索クライアントから前記トラップドアを受信したとき、前記優先順位に基づいて、あらかじめ定めた回数だけ、前記優先順位が高いクラスタの順に、前記照合手段によって、前記暗号化データと前記トラップドアとの照合を行ない、前記トラップドアにヒットした前記暗号化データを前記検索クライアントに返信する検索手段とを有する、
ことを特徴とする計算機システム。
【請求項１６】
ネットワークを介して、  秘匿検索装置に登録するデータを送信する登録クライアントと前記秘匿検索装置に対して検索を行う検索クライアントとに接続された秘匿検索装置における秘匿検索方法は、
前記登録クライアントから、前記データを暗号化した暗号化データと、前記データから抽出したインデックスを秘匿化した秘匿化インデックスと、データ間の類似度を計算するための特徴量との組を受信し、
前記登録クライアントから受信した前記特徴量をもとに、２つのデータの類似度を算出し、
前記算出した類似度に基づいて、前記登録クライアントから受信した前記暗号化データをクラスタリングし、
前記秘匿検索装置に登録されたデータの検索を行うための検索クエリに含まれる検索キーワードを秘匿化したトラップドアを前記検索クライアントから受け取り、
前記生成したクラスタリングの結果をもとに、前記クラスタリングされた暗号化データと前記トラップドアとの照合処理の優先順位を算出し、
前記検索クライアントから前記トラップドアを受信したとき、前記算出した優先順位に基づいて、あらかじめ定めた回数だけ、前記登録クライアントから受信した前記暗号化インデックスと前記トラップドアとを照合し、
前記トラップドアにヒットした前記暗号化データを前記検索クライアントに返信する、
ことを特徴とする秘匿検索方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クラウドコンピューティングなどのクライアントサーバモデルにおいて、サーバに預託された暗号化データを復号せずに検索する「検索可能暗号」を用いた、秘匿検索システムに関する。
【背景技術】
【０００２】
クラウドコンピューティングの普及により、データベースサーバへの情報の預託が活発になってきてきる。その一方で、個人情報などといった機密情報の漏えいも大きな社会問題となってきている。【０００３】
情報漏えいを防止しつつ安全にデータベースサーバへ情報を預託するために、暗号化したまま預託データの検索を可能にする検索可能暗号技術が提案されている。検索可能暗号を用いることで、通信路上の第三者だけではなくデータベースサーバ管理者に対しても情報漏えいを防止することができる。【０００４】
検索可能暗号技術としてさまざまな方法が提案されている。検索可能暗号を用いた検索は、一般に以下の手順で行われる。【０００５】
（１）データを預託するクライアントにおいて、預託するデータ（以下、預託データとよぶ）の内容を表すインデックスを計算し、秘匿化する。ここで秘匿化とは、当該インデックスから預託データの内容を求めることが困難となるような検索可能暗号特有の処理をいう。以下、秘匿化されたインデックスを秘匿化インデックスという。【０００６】
（２）クライアントは、預託するデータを暗号化し（以下、暗号化データという）、秘匿化インデックスとともにデータベースサーバに送信する。【０００７】
（３）データベースサーバは、暗号化データと秘匿化インデックスのペアをデータベースに登録する。【０００８】
（４）データを検索する検索クライアントにおいて、検索したいキーワード（検索クエリ）のトラップドア(trapdoor)を計算する。ここでトラップドアとは、検索用の情報であり、特に、検索クエリに含まれる検索用キーワードを秘匿化したものをいう。【０００９】
（５）検索クライアントは、トラップドアをデータベースサーバに送信する。【００１０】
（６）データベースサーバは、データベースに登録した秘匿化インデックスとトラップドアを検索可能暗号特有の手順で照合することで、検索クエリにヒットするデータを検索する。【００１１】
（７）データベースサーバは、ヒットした秘匿化インデックスに対応する暗号化データなどを検索クライアントに送信する。【００１２】
（８）検索クライアントは、受信した検索結果からデータを預託したクライアントを特定し、当該クライアントとの間で復号鍵を共有する。【００１３】
（９）検索クライアントは、共有した鍵を用いて、データベースサーバから受信した暗号化データを復号する。【００１４】
預託データが暗号化されているので、データベースサーバ管理者が預託データを解読するのは実質不可能である。また、インデックスが秘匿化されているので、インデックスから預託データの内容を抽出するのは困難である。さらに、検索クエリがトラップドアに変換されているので、検索クエリが漏えいする可能性も低い。さらに、それぞれ異なる秘匿化インデックスが同じキーワードを含んでいるかどうかを判定するのも困難なので、単語の出現頻度から平文を推測する頻度分析などの不正攻撃を防止することができる。このように検索可能暗号技術を用いることで、通信路上の第三者だけではなくデータベースサーバ管理者などに対しても情報漏えいを事実上防止することができる。【００１５】
検索可能暗号技術として、例えば非特許文献１や非特許文献２が知られている。これらの方式は、平文と暗号文が１対１の単純な対応関係を有する決定的暗号化方式よりも安全な、平文と暗号文が１対ｍの複雑な対応関係を有する確率的暗号化方式を採用している。頻度分析などの攻撃に対して比較的安全である。【００１６】
また、非特許文献３、非特許文献４、および特許文献１も知られている。非特許文献３や非特許文献４記載の方式では、確率的なデータ構造の一つであるブルームフィルタを利用することで頻度分析などの攻撃にも耐性を持たせている。特許文献１記載の方法では、誤り訂正符号を用いて集合間のあいまい照合を実現する「Fuzzy Vault」を用いることで、頻度分析などの攻撃にも耐性を持たせている。【００１７】
非特許文献１〜非特許文献４や特許文献１記載の技術は、いずれも、確率的暗号化や確率的データ構造、あいまい照合技術などを利用することで、頻度分析に対しても安全となるようにしている。具体例を挙げると、例えば「雲」というキーワードを含む複数のデータをデータベースサーバに預託する場合、預託データごとに対応する秘匿化インデックスは異なったものになる。さらに、秘匿化インデックス同士を比較しても、同じ「雲」というキーワードを含んでいると判定することは困難となっている。また、「雲」で検索したとしても、トラップドアから検索クエリ「雲」を推測することは困難である。よって検索クエリにヒットした事実を知ったとしても、秘匿化インデックスが「雲」を含んでいるかどうか、データベースサーバ管理者には事実上知られることはない。
【先行技術文献】
【特許文献】
【００１８】
【特許文献１】特開２００９−２７１５８４号公報
【非特許文献】
【００１９】
【非特許文献１】Dawn Xiaodong Song, David Wagner and Arian Perrig: "Practical Techniques for Searches on Encrypted Data," In Proceedings of the 2000 IEEE Symposium on Security and Privacy, pp. 44-55 (2000).
【非特許文献２】Zhiqiang Yang, Sheng Zhong, Rebecca N. Wright: "Privacy-Preserving Queries on Encrypted Data," In Proceedings of the 11th European Symposium on Research in Computer Security (Esorics), Vol. 4189 of Lecture Notes in Computer Science, pp. 476-495 (2006).
【非特許文献３】Eu-Jin Goh: "Secure Indexes," Cryptology ePrint Archive, Report 2003/216 (2003).
【非特許文献４】菅孝徳、西出隆志、堀良彰、櫻井幸一：「ブルームフィルタを用いた検索自由度の高い検索可能暗号の設計と実装評価」、IEICE technical report Vol.111, No.30, pp. 111-116 (2011).
【非特許文献５】A. D. Bimbo: "Visual Information Retrieval", Morgan Kaufmann Publishers (1999).
【非特許文献６】芹田進、藤井康広、甲斐賢、村上隆夫、本多義則：「ファイル伸縮に耐性のある類似ハッシュ算出方式の考察」、IEICE technical report Vol.110, No.282, pp.31-36 (2010).
【非特許文献７】C. M. ビショップ：「パターン認識と機械学習」、シュプリンガー・ジャパン株式会社 (2007).
【非特許文献８】F. Murtagh: "A Survey of Recent Advances in Hierarchical Clustering Algorithms", The Computer Journal, vol.26, pp.354-359 (1983).
【発明の概要】
【発明が解決しようとする課題】
【００２０】
一般に、文字列検索においては、単語とその単語を含む文書の索引（転置インデックス）を備えることで、検索応答時間の短縮を図っている。このような索引がない場合、毎回検索クエリと預託データを総当りで照合する必要があり、検索応答が大幅に遅延することとなる。【００２１】
非特許文献１〜非特許文献４や特許文献１記載の技術では、頻度分析などの攻撃に耐性を持たせるために、秘匿化インデックスがどの単語を含んでいるかを判定することが困難な仕組みとなっている。つまり、転置インデックスなどの索引を構成することが事実上不可能である。よってこれらの従来技術では、検索クエリと秘匿化インデックスを毎回総当りで照合する必要があり、検索応答が大幅に遅延してしまう。本発明の目的は、検索可能暗号を用いた秘匿検索システムにおいては、検索の高速化を達成することにある。
【課題を解決するための手段】
【００２２】
上記の目的を達成するために本発明は、暗号化データや秘匿化インデックスだけではなく、預託データの特徴量もデータベースサーバに登録する手段を提供する。ここで特徴量とは、預託データの特徴をできるだけ損なわないようにデータ長を大幅に削減したもので、特徴量だけを用いて預託データの類似度を計算することができるが、特徴量から元のデータを推測することが困難なものとして定義される。特徴量として、例えば預託データ内の単語などから計算される特徴ベクトルや、預託データを分割してハッシュ値を求めて連結したファジィハッシュとよばれる量などが知られている。【００２３】
次に本発明は、暗号化データや秘匿化インデックスともに受信した特徴量を用いて、データベースサーバ側で特徴量に対応する預託データの類似度を計算し、類似した預託データが同じクラスタに含まれるように秘匿化インデックスなどをクラスタリングしておく手段を提供する。【００２４】
さらに本発明は、秘匿検索処理において、まず各クラスタにおいて秘匿化インデックスの代表（以下ピボットと呼ぶ）を選択して、ピボットとトラップドア（検索クエリに含まれる検索キーワードを秘匿化したもの）の照合を行い、ピボットがトラップドアにヒットした場合、当該ピボットが属するクラスタに含まれる全登録データについてトラップドアとの照合の優先順位を上げ、ピボットがトラップドアにヒットしなかった場合、当該ピボットが属するクラスタに含まれる全登録データについて照合の優先順位を下げる手段を提供する。照合対象の優先順位を定めた後全登録データについて照合を順次行い、一定回数で照合を打ち切ることで、安全性や検索精度の低下を抑えつつ秘匿検索処理の高速化を実現する。
【発明の効果】
【００２５】
データベースサーバに預託された暗号化データを復号せずに検索する秘匿検索システムにおいて、元のデータを推測しにくい特徴量を用いて秘匿化インデックスをクラスタリングしておくことで、安全性や検索精度の低下を抑えつつ、秘匿検索を高速化することができる。
【図面の簡単な説明】
【００２６】
【図１】本発明の実施の形態における、秘匿検索処理システムの概略を例示する図である。
【図２】本発明の実施の形態における、登録クライアントの概略構成を例示する図である。
【図３】本発明の実施の形態における、検索クライアントの概略構成を例示する図である。
【図４】本発明の実施の形態における、データベースサーバの概略構成を例示する図である。
【図５】本発明の実施の形態における、登録クライアントとデータベースサーバのデータ登録処理を例示するシーケンス図である。
【図６】本発明の実施の形態における、データベースサーバが作成する登録データ格納位置管理テーブルおよびクラスタ管理テーブルのデータ構成を例示する図である。
【図７】本発明の実施の形態における、検索クライアントとデータベースサーバの秘匿検索処理を例示するシーケンス図である。
【図８】本発明の実施の形態における、データベースサーバが行う優先順位算出の処理手順を例示するフローチャートである。
【図９】本発明の実施の形態における、データベースサーバが行う秘匿化インデックスとトラップドアの照合処理手順を例示するフローチャートである。
【図１０】本発明の実施の形態における、データベースサーバが行う秘匿化インデックスとトラップドアの照合処理手順を例示するフローチャートである。
【図１１】本発明の実施の形態における、検索クライアントまたはデータベースサーバで行う設定画面を例示する図である。
【図１２】本発明の処理の概要を示す図である。
【図１３】秘匿化インデックス生成の手順を示す図である。
【図１４】秘匿化インデックスとトラップドアの照合の手順を示す図である。
【図１５】預託データから特徴量ベクトルを生成する手順を示す図である。
【発明を実施するための形態】
【００２７】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。
【００２８】
（システム構成）
図１は、本発明の実施の形態である秘匿検索処理システムの概略図である。図示するように検索処理システムは、ｎ個の登録クライアント２０−１〜２０−ｎ、ｍ個の検索クライアント３０−１〜３０−ｍおよびデータベースサーバ４０を備え、これらがネットワーク１０を介して相互に情報を送受信できるよう設計されている。ここでｎ及びｍは１以上の整数をとり、ｎとｍは異なっていてもよい。登録クライアント２０−１〜２０−ｎはすべて同じ構成をとる。以下、任意の一つを登録クライアント２０と呼ぶ。同様に、検索クライアント３０−１〜３０−ｍはすべて同じ構成をとる。以下、任意の一つを検索クライアント３０と呼ぶ。
【００２９】
本実施形態における登録クライアント２０は、暗号化した預託データなどをデータベースサーバ４０に送信するデータ登録用の送受信装置として機能する。検索クライアント３０は、秘匿化した検索クエリをデータベースサーバ４０に送信して検索結果を受信する、検索用の送受信装置として機能する。データベースサーバ４０は、暗号化した預託データなどをデータベースに登録し、かつデータベース内のデータを検索する秘匿検索装置として機能する。
【００３０】
（登録クライアント）
図２は登録クライアント２０の概略構成を例示する図である。図示するように登録クライアント２０は、ＣＰＵ２１２、メモリ２１４、記憶装置２１６、鍵生成部２１８、登録部２２０、ユーザインターフェース２３０および通信インターフェース２３２を備え、これらが内部バス２００を介して相互に情報を送受信できるように設計されている。登録部２２０は、暗号化部２２２、秘匿化インデックス生成部２２４、特徴量算出部２２６および設定部２２８を備える。これらの装置はハブ２００を介して、単体でＣＰＵ２１２などと相互に情報を送受信することができる。
【００３１】
まず汎用的な構成要素について説明する。ＣＰＵ２１２は、様々な数値計算や情報処理、機器制御などを行う中央処理装置である。メモリ２１４は、ＣＰＵ２１２が直接読み書きできるＲＡＭやＲＯＭなどの半導体記憶装置である。記憶装置２１６は、コンピュータ内でデータやプログラムを記憶するハードディスクや磁気テープ、フラッシュメモリなどといった装置である。当該装置はデータベースサーバ４０に預託するデータなどを格納する。
【００３２】
鍵生成部２１８は、データを暗号化もしくは復号化するための鍵などを生成し、さらに検索クライアント３０と復号鍵を共有するための処理を行う装置である。復号鍵の共有については後で図７を用いて説明する。
【００３３】
ユーザインターフェース２３０は、ユーザに処理結果を出力し、かつユーザの指示を受け付けて登録クライアント２０の各構成要素に反映させる、ディスプレイやマウス、キーボードなどといった装置である。通信インターフェース２３２は、登録クライアント２０の各構成要素と検索クライアント３０やデータベースサーバ４０などの外部装置とのデータの送受信を制御するための装置である。
【００３４】
本発明特有の構成要素は、登録部２２０およびこれを構成する暗号化部２２２、秘匿化インデックス生成部２２４、特徴量算出部２２６、設定部２２８である。これらのうち、従来の検索可能暗号技術にはない最も特徴的な構成要素は、特徴量算出部２２６である。まず登録部２２０の構成要素から説明する。
【００３５】
暗号化部２２２は、データベースサーバ４０に預託するデータを記憶装置２１６から読み出して、鍵生成部２１８で生成した暗号鍵を用いて暗号化し、暗号化したデータを登録部２２０に通知し、またはメモリ２１４もしくは記憶装置２１６に一時的に出力する装置である。
【００３６】
秘匿化インデックス生成部２０４は、データベースサーバ４０に預託するデータを記憶装置２１６から読み出し、検索可能暗号特有のアルゴリズムで預託データの内容から秘匿化インデックスを生成し、生成した秘匿化インデックスを登録部２２０に通知し、またはメモリ２１４もしくは記憶装置２１６に一時的に出力する装置である。秘匿化インデックスの具体的な生成手順については、後で図５を用いて説明する。
【００３７】
特徴量算出部２０６は、データベースサーバ４０に預託するデータを記憶装置２１６から読み出し、所定のアルゴリズムで預託データの特徴量を算出し、算出した特徴量を登録部２２０に通知し、またはメモリ２１４もしくは記憶装置２１６に一時的に出力する装置である。特徴量の具体的な算出手順については後で図５を用いて説明する。
【００３８】
設定部２２８は、暗号化、秘匿化インデックス生成、特徴量算出などの処理に必要なパラメータを設定するための装置である。当該パラメータはユーザインターフェース２３０を介してユーザによって設定され、登録部２２０、暗号化部２２２、秘匿化インデックス生成部２２４、特徴量算出部２２６に反映される。
【００３９】
そして登録部２２０は、ユーザインターフェース２３０を介してデータベースサーバ４０への登録指示をユーザから受け取り、指示された記憶装置２１６の格納データに対して、暗号化部２２２、秘匿化インデックス生成部２２４および特徴量算出部２２６を制御して、暗号化データ、秘匿化インデックスおよび特徴量の組に含まれるそれぞれを計算して、計算したそれぞれを含む組を、通信インターフェース２３２を介してデータベースサーバ４０に送信する装置である。データ登録処理の詳細については後で図５を用いて説明する。
【００４０】
なお、鍵生成部２１８、登録部２２０およびこれを構成する暗号化部２２２、秘匿化インデックス生成部２２４、特徴量算出部２２６、設定部２２８については、それぞれの装置が単体で処理を実行してもよいし、それぞれの装置はプログラムのみを具備し、ＣＰＵ２１２が当該プログラムをメモリ２１４に読み込んで実行してもよい。
【００４１】
（検索クライアント）
図３は検索クライアント３０の概略構成を例示する図である。図示するように検索クライアント３０は、ＣＰＵ３１２、メモリ３１４、記憶装置３１６、検索部３２０、ユーザインターフェース３３０および通信インターフェース３３２を備え、これらが内部バス３００を介して相互に情報を送受信できるように設計されている。また、検索部３２０は、トラップドア生成部３２２、鍵共有部３２４、復号化部３２６および設定部３２８を備える。これらの装置は内部バス３００を介して、単体でＣＰＵ３１２などと相互に情報を送受信することができる。「トラップドア」とは、検索用の情報であって、検索クエリに含まれる検索キーワードを秘匿化したものである。
【００４２】
汎用的な構成要素であるＣＰＵ３１２、メモリ３１４、記憶装置３１６、ユーザインターフェース３３０および通信インターフェース３３２は、図２の説明と同様の機能を有する。本発明特有の構成要素は、検索部３２０およびこれを構成するトラップドア生成部３２２、鍵共有部３２４、復号化部３２６、設定部３２８となる。以下、ＣＰＵ３１２など汎用的な構成要素の説明については割愛し、検索部３２０の構成要素から説明する。
【００４３】
トラップドア生成部３２２は、検索クエリを、ユーザインターフェース３３０を介してユーザから受け取り、検索可能暗号特有のアルゴリズムで検索クエリに含まれるキーワードを秘匿化することによってトラップドアを生成し、生成したトラップドアを検索部３２０に通知し、またはメモリ３１４もしくは記憶装置３１６に出力する装置である。トラップドアの具体的な生成手順については、後で図７を用いて説明する。
【００４４】
鍵共有部３２４は、データベースサーバ４０から検索クエリにヒットした暗号化データを受信した際、当該暗号化データの復号鍵を登録クライアント２０と共有するための装置である。共有した復号鍵は、検索部３２０内に、またはメモリ３１４もしくは記憶装置３１６に一時的に保存される。具体的な鍵共有処理については、後で図７を用いて説明する。
【００４５】
復号化部３２６は、鍵共有部３２４が取得した復号鍵を用いてデータベースサーバ４０から受信した暗号化データを復号して検索部３２０に通知し、またはメモリ３１４もしくは記憶装置３１６に一時的に出力する装置である。
【００４６】
設定部３２８は、トラップドア生成、鍵共有、復号化などの処理に必要なパラメータを設定するための装置である。当該パラメータはユーザインターフェース３３０を介してユーザによって設定され、検索部３２０、トラップドア生成部３２２、鍵共有部３２４、復号化部３２６に反映される。パラメータ設定の一例について、後で図１１を用いて説明する。
【００４７】
そして検索部３２０は、ユーザインターフェース３３０を介してユーザから検索クエリを受けとり、トラップドア生成部３２２を制御して検索クエリからトラップドアを生成し、生成したトラップドアをデータベースサーバ４０に送信し、データベースサーバ４０から返信された暗号化データを鍵共有部３２４および復号化部３２６を制御して復号してメモリ３１４もしくは記憶装置３１６に出力し、またはユーザインターフェース３３０を介してユーザに提示する装置である。処理の詳細については後で図７を用いて説明する。
【００４８】
なお、検索部３２０およびこれを構成するトラップドア生成部３２２、鍵共有部３２４、復号化部３２６、設定部３２８については、それぞれの装置が単体で処理を実行してもよいし、それぞれの装置はプログラムのみを具備し、ＣＰＵ３１２が当該プログラムをメモリ３１４に読み込んで実行してもよい。
【００４９】
（データベースサーバ）
図４はデータベースサーバ４０の概略構成を例示する図である。図示するようにデータベースサーバ４０は、ＣＰＵ４１２、メモリ４１４、記憶装置４１６、認証部４１８、登録部４２０、クラスタリング部４３０、検索部４４０、設定部４５０、ユーザインターフェース４６０および通信インターフェース４６２を備え、これらが内部バス４００を介して相互に情報を送受信できるように設計されている。また、クラスタリング部４３０は類似度算出部４３２を備える。類似度算出部４３２は内部バス４００を介して単体でＣＰＵ４１２などと相互に情報を送受信することができる。また、検索部４４０は優先順位算出部４４２および照合部４４４を備える。これらの装置も内部バス４００を介して単体でＣＰＵ４１２などと相互に情報を送受信することができる。
【００５０】
汎用的な構成要素であるＣＰＵ４１２、メモリ４１４、記憶装置４１６、ユーザインターフェース４６０および通信インターフェース４６２は、図２の説明と同様の機能を有するので説明を割愛する。
【００５１】
認証部４１８は、データベースサーバ４０へのデータ登録や検索を許可するユーザのＩＤやパスワードを管理する装置である。詳細については後で図５を用いて説明する。
【００５２】
本発明特有の構成要素は、登録部４２０、クラスタリング部４３０、これを構成する類似度算出部４３２、検索部４４０およびこれを構成する優先順位算出部４４２、照合部４４４、ならびに設定部４５０である。
【００５３】
登録部４２０は、登録クライアント２０から暗号化データ、秘匿化インデックスおよび特徴量の組を受信したとき、この組を記憶装置４１６に登録する装置である。以下、この組のことを登録データと呼ぶ。具体的な登録内容については後で図６を用いて説明する。
【００５４】
クラスタリング部４３０は、記憶装置４１６に登録されている登録データをクラスタリングし、クラスタリング結果をメモリ４１４もしくは記憶装置４１６に一時的に出力する装置である。クラスタリングを行うには登録データ間の類似度を計算する必要があるが、この計算は類似度算出部４３２が登録データ中の特徴量を用いてクラスタリングを行う。具体的なクラスタリング処理については後で図５を用いて説明する。また、クラスタリング結果の具体例を図６であげる。
【００５５】
類似度算出部４３２は、クラスタリング部４３０からの要求に応じて２つの登録データの類似度を算出する装置である。類似度を算出する登録データは、クラスタリング部４３０が一時的にメモリ４１４もしくは記憶装置４１６に格納するか、類似度算出部４３２に直接通知する。算出した類似度は、メモリ４１４もしくは記憶装置４１６に一時的に出力されるか、クラスタリング部４３０に直接返される。具体的な類似度の計算手順については後で図５を用いて説明する。
【００５６】
検索部４４０は、検索クライアント３０から検索クエリのトラップドアを受信し、検索クエリにヒットした暗号化データを、通信インターフェース４４２を介して検索クライアント３０に返信する装置である。トラップドアを受信したとき検索部４４０は、まず優先順位算出部４４２を起動する。
【００５７】
優先順位算出部４４２は、クラスタリング部４３０の処理によるクラスタリング結果をもとに照合処理の優先順位を算出する装置である。各クラスタの秘匿インデックスを代表する秘匿インデックスであるピボットとトラップドアとを比較して、各クラスタの照合処理の優先順位を決める。算出した優先順位はメモリ４１４もしくは記憶装置４１６に一時的に出力されるか、検索部４３０に直接返される。具体的な優先順位算出手順については後で図８を用いて説明する。各クラスタのピボットは、クラスタリング部４３０又は優先順位算出部４４２で設定／決定される。
【００５８】
次に検索部４４０は照合部４４４を呼び出し、メモリ４１４もしくは記憶装置４１６に、または検索部４３０に格納されている優先順位に基づいて、優先度が高い順にトラップドアと秘匿化インデックスとの照合を行う。照合すべきトラップドアおよび秘匿化インデックスは、検索部４４０が一時的にメモリ４１４もしくは記憶装置４１６に格納するか、直接照合部４４４に渡す。照合部４４４は検索可能暗号特有のアルゴリズムによりトラップドアと秘匿化インデックスとの照合を行い、照合の結果をメモリ４１４もしくは記憶装置４１６に一時的に出力するか、検索部４４０に直接返す。具体的な照合手順については後で図９を用いて説明する。
【００５９】
従来技術では全登録データについて総当りでトラップドアと照合する必要があったが、優先順位算出部４４２が特徴量を用いて登録データの照合処理の優先順位を設定し、検索部４４０が優先度の高い順でトラップドアと秘匿化インデックスとの照合を行い、一定回数で照合を打ち切ることで、検索応答時間の大幅な短縮を実現する。さらに、特徴量からは元の預託データの中身を推測することが困難なので、安全性の低下を抑えることができる。具体的な検索手順については、後で図７ないし図１０を用いて説明する。
【００６０】
設定部４５０はクラスタリングや検索などの処理に必要なパラメータを設定するための装置である。当該パラメータはユーザインターフェース４６０を介してデータベースサーバ管理者によって設定され、登録部４２０、クラスタリング部４３０、類似度算出部４３２、検索部４４０、優先順位算出部４４２および照合部４４４に反映される。
【００６１】
なお、認証部４１８、登録部４２０、クラスタリング部４３０、類似度算出部４３２、検索部４４０、優先順位算出部４４２、照合部４４４および設定部４５０については、それぞれの装置が単体で処理を実行してもよいし、それぞれの装置はプログラムのみを具備し、ＣＰＵ４１２が当該プログラムをメモリ４１４に読み込んで実行してもよい。
【００６２】
（処理概要）
まず始めに、図１２を用いて、本発明の秘匿検索方法の処理概要を説明する。
【００６３】
（１）登録クライアントは、預託データを暗号化した暗号化データや、預託データから抽出したインデックスを秘匿化した秘匿化インデックスだけではなく、預託データの特徴量もデータベースサーバに登録する（１２０１）。ここで特徴量とは、預託データの特徴をできるだけ損なわないようにデータ長を大幅に削減したもので、例えば預託データ内の単語などから計算される特徴ベクトルや、預託データを分割してハッシュ値を求めて連結したファジィハッシュとよばれる量などがある。
【００６４】
（２）データベースサーバは、受信した特徴量を用いて、特徴量に対応する預託データの類似度を計算し、類似した預託データが同じクラスタに含まれるように秘匿化インデックスなどをクラスタリングする（１２０２）。
【００６５】
（３）データベースサーバは、秘匿検索処理において、まず、各クラスタにおいて秘匿化インデックスの代表（ピボット）を選択し、このピボットと、検索クライアントで検索クエリに含まれる検索キーワードを秘匿化したトラップドアとの照合を行なうことにより、登録データ照合時のクラスタの優先順位を決定する（１２０３）。
【００６６】
（４）データベースサーバは、優先順位に基づいて、クラスタ単位に全登録データの照合を行い（１２０４）、検索結果を検索クライアントに出力する。
【００６７】
なお、優先順位決定の際に、ピボットがトラップドアにヒットした場合、当該ピボットが属するクラスタに含まれる全登録データについてトラップドアとの照合の優先順位を上げ、ピボットがトラップドアにヒットしなかった場合、当該ピボットが属するクラスタに含まれる全登録データについて照合の優先順位を下げる。さらに、秘匿検索処理を高速化するために、照合対象の優先順位を定めた後全登録データについて照合を順次行なう際に、一定回数で照合処理を打ち切る。
【００６８】
（データ登録処理）
図５は、登録クライアント２０とデータベースサーバ４０のデータ登録処理を例示するシーケンス図である。図５に基づいて当該データ登録処理を説明するとともに、図２の説明で述べた秘匿化インデックス生成手順、特徴量算出手順や、図４の説明で述べたクラスタリング処理、類似度算出手順についても、具体的な処理内容を例示する。
【００６９】
登録クライアント２０によるデータベースサーバ４０へのデータ登録は、大別すると、登録クライアント２０が登録データを生成するデータ生成処理Ｓ５０と、登録クライアント２０とデータベースサーバ４０との間でデータの授受を行うデータ送受信処理Ｓ５２と、データベースサーバ４０が登録データをクラスタリングするクラスタリング処理Ｓ５４からなる。
【００７０】
データ生成処理Ｓ５０は以下の手順で進行する。
【００７１】
（Ｓ５００）登録クライアント２０のユーザは、ユーザインターフェース２３０を介してデータベースサーバ４０に登録するデータを指定する。当該指定を受けて登録部２２０は、まず鍵生成部２１８を起動する。鍵生成部２１８は暗号鍵と復号鍵のペアを生成し、メモリ２１４または記憶装置２１６に格納する。暗号化部２２２は登録指示を受けたデータ（預託データ）に対して、鍵生成部２１８が生成した暗号鍵を用いて暗号化処理を施す。なお、生成した復号鍵は後で検索クライアント３０からの要求により外部に送信される可能性があるため、記憶装置２１６または鍵生成部２１８自体が保持しておく。
【００７２】
（Ｓ５０２）秘匿化インデックス生成部２２４は預託データの内容から秘匿化インデックスを生成する。非特許文献１に基づいて具体的な生成方法を例示すると以下のようになる。秘匿化インデックス生成の処理手順を図１３に示す。
【００７３】
（Ｓ５０２−１）預託データから照合対象となる単語（ｗ１，ｗ２，．．．）を抽出する。単語の抽出は、英語であれば空白で区切られた文字列を抽出することでなされる。日本語の場合は、預託データ内の文章を一定の長さの文字列に分解する方法（Ｎ−ｇｒａｍ）や、形態素解析により単語の抽出を行うことができる。
【００７４】
（Ｓ５０２−２）抽出した単語（ｗ１，ｗ２，．．．）それぞれについてハッシュ値（ｈ１，ｈ２，．．．）を計算する。各ハッシュ値のビット長をｎとする。
【００７５】
（Ｓ５０２−３）各ハッシュ値ｈｉに対してｃビットの乱数列ｒｉを生成する（ｉ＝１，２，．．．）。各乱数列ｒｉについて所定の演算を行ってｎ−ｃビットのメッセージダイジェストｄｉを求める。ダイジェスト算出のための所定の演算は、例えば、上記のような単語からハッシュ値を計算する場合とは異なる別のハッシュ関数である。
【００７６】
（Ｓ５０２−４）乱数列ｒｉの末尾にメッセージダイジェストｄｉを連結して、長さｎのビット列ｓｉを得る（ｉ＝１，２，．．．）。各ハッシュ値ｈｉとビット列ｓｉとの排他的論理和が秘匿化インデックスＨｉとなる。
【００７７】
ここで、図１３を参照しながら、上記のステップＳ５０２−１〜４によって得られる秘匿化インデックスＨｉの表現について説明する。排他的論理和を「ＸＯＲ」、２つのビット列の結合を「｜」とすると、秘匿化インデックスＨｉは、ｈｉ（単語ｗｉのハッシュ値）と（ｒｉ｜ｄｉ）（乱数列ｒｉとメッセージダイジェストｄｉからなるビット列ｓｉ）を用いて、Ｈｉ＝ｈｉ ＸＯＲ（ｒｉ｜ｄｉ）と表される。但し、単語Ｗｉのハッシュ値ｈｉ、乱数列ｒｉ、メッセージダイジェストｄｉは、それぞれ、ハッシュ関数ｈ（Ｗｉ）＝ｈｉ、乱数生成Ｒ（ｈｉ）＝ｒｉ、所定演算ｆ（ｒｉ）＝ｄｉによって生成される。
【００７８】
単語そのものではなくハッシュ値を用いたり、乱数列との排他的論理和を取ったりしているため、秘匿化インデックスから預託データ内の単語を求めることは困難となる。詳細については非特許文献１参照のこと。こうして求めた秘匿化インデックスとトラップドアとの照合方法については、後の図８の説明で明らかにする。
【００７９】
（Ｓ５０４）特徴量算出部２２６は預託データの内容から特徴量を算出する。特徴量として、例えば預託データの大きさなど、恣意的に変更することが難しく、かつ連続的な値を取るような属性情報を用いる方法がまずあげられる。預託データの大きさを特徴量とした場合、２つの預託データ間の類似度は、預託データの大きさをｓ１、ｓ２とすると、１／（１＋｜ｓ１−ｓ２｜）で近似することができる。この類似度は０から１までの値をとり、預託データが類似するほど１に近づく。
【００８０】
より洗練された特徴量として、預託データ内の単語からベクトル（特徴ベクトル）を生成する方法が知られている。特徴ベクトルは以下の手順で求められる。特徴ベクトル生成の処理手順を図１５に示す。
【００８１】
（Ｓ５０４−１）預託データから照合対象となる単語（ｗ１，ｗ２，．．．）を抽出する。
【００８２】
（Ｓ５０４−２）抽出した単語列（ｗ１，ｗ２，．．．）それぞれについてハッシュ値（ｈ１，ｈ２，．．．）を計算する。各ハッシュ値のビット長をｎとする。
【００８３】
（Ｓ５０４−３）ｈ１、ｈ２、．．．の各ビットの論理和をとる。これをｎ次元のベクトルとみなして特徴ベクトルと呼ぶ。
【００８４】
こうして算出した特徴ベクトルを用いれば、２つの預託データ間の類似度を特徴ベクトル内のともに１になるビットの個数で近似することができる。即ち、２つの預託データに対応するハッシュ値のそれぞれのビットに対して論理積（ＡＮＤ）を求めた結果に含まれるビット「１」の個数が類似度となる。特徴ベクトルの詳細については非特許文献５を参照のこと。
【００８５】
また、単語の抽出などを行なわずに、計算可能な特徴量として「ファジィハッシュ」とよばれる量を用いて類似度を求めることができる。ファジィハッシュは以下の手順で算出される。
【００８６】
（Ｓ５０４−ａ）預託データを分割する。固定長で分割するほか、特定のビット列が境界となるように分割する方法が知られている。
【００８７】
（Ｓ５０４−ｂ）各分割データ（ｄ１，ｄ２，．．．）のハッシュ値（ｈ１，ｈ２，．．．）を計算する。
【００８８】
（Ｓ５０４−ｃ）ハッシュ値の配列（ｈ１，ｈ２，．．．）をファジィハッシュとして出力する。
【００８９】
当該預託データに対応するファジィハッシュＨ＝（ｈ１，ｈ２，．．．）、他の預託データに対応するファジィハッシュＦ＝（ｆ１，ｆ２，．．．）を用いると、２つの預託データ間の類似度を、（ｈ１，ｈ２，．．．）と（ｆ１，ｆ２，．．．）との積集合の要素数（ＨとＦの双方に含まれているハッシュ値の数ｎ）と、（ｈ１，ｈ２，．．．）と（ｆ１，ｆ２，．．．）の和集合の要素数（ＨとＦの双方における要素の数の和Ｎからｎを引いた数）との比ｎ／（Ｎ−ｎ）で近似することができる。なお、Ｈ及びＦの要素の数をｍ１及びｍ２とすると、Ｎ＝ｍ１＋ｍ２、０＝＜ｎ＝＜ｍｉｎ（ｍ１、ｍ２）＜Ｎである。
【００９０】
これまでさまざまなファジィハッシュ技術が提案されている。詳細については非特許文献６を参照のこと。
【００９１】
次にデータ送受信処理Ｓ５２は、以下の手順で進行する。
【００９２】
（Ｓ５２０）登録クライアント２０とデータベースサーバ４０との間でデータ授受のための通信路を確立する。具体的には、まず認証部４１８が、通信インターフェース２３２，４６２やユーザインターフェース２３０を介して登録クライアント２０のユーザのＩＤ、及びパスワードなどでユーザの認証を行う。あらかじめ登録された正規のユーザと判断した場合、認証部４１８は登録クライアント２０の登録部２２０とデータベースサーバ４０の登録部４２０との間で通信路を確立する。この際、認証部４１８は登録クライアント２０のＩＰアドレスなどの識別情報も収集して、記憶装置４１６に格納する。この識別情報は検索クライアント３０と登録クライアント２０との間で鍵共有をする場合に必要になる。詳細については後で図６及び図７を用いて説明する。なお、正規のユーザでないと判断した場合は、通信路を確立せず処理を終了する。
【００９３】
（Ｓ５２２）登録部２２０は通信インターフェース２３２を介して、登録データ（暗号化データ、秘匿化インデックス、及び特徴量の組）をデータベースサーバ４０に送信する。
【００９４】
（Ｓ５２４）登録部４２０は通信インターフェース４６２を介して送信された登録データを受信し、記憶装置４１６に格納する。具体的な登録内容については後で図６を用いて説明する。
【００９５】
（Ｓ５２６）登録部４２０は通信インターフェース４６２を介して登録完了の旨を登録クライアント２０の登録部２２０に通知する。
【００９６】
（Ｓ５２８）認証部４１８は、登録クライアント２０の登録部２２０とデータベースサーバ４０の登録部４２０との間で確立した通信路を開放する。
【００９７】
以上の手順により、登録クライアント２０のユーザは、データベースサーバ４０の管理者や通信路上の第三者に内容を事実上知られることなくデータベースサーバ４０に自己のデータを預託できる。
【００９８】
データの登録後データベースサーバ４０は登録データのクラスタリング処理Ｓ５４を行う。代表的なクラスタリング手法として、Ｋ平均法と階層的クラスタリングが知られている。まず、Ｋ平均法は以下の手順で行われる。特徴量の個数をＮとする。
【００９９】
（Ｓ５４−１）Ｋ個のクラスタの中心をランダムに設定する。あるいは、各クラスタに含まれる複数の秘匿化インデックスを所定の順に並べた時に、順序の中心の位置するものを当該クラスタの「中心」に設定する。
【０１００】
（Ｓ５４−２）各特徴量ｘｉ（ｉ＝１，２，．．．，Ｎ）についてＫ個の中心との類似度を計算して、最も類似する中心を求める。ｘｉを当該中心が属するクラスタに割り振る。
【０１０１】
（Ｓ５４−３）全ての特徴量についてクラスタへの割り振りが変化しなかった場合は処理を終了する。それ以外の場合は割り振った特徴量から各クラスタの中心を計算し直してから、ステップＳ５４−２に戻る。
【０１０２】
結果は最初のクラスタのランダムな設定に依存するが、計算量はｎＫのオーダなので比較的高速に動作するというメリットがある。詳細については非特許文献７を参照のこと。
【０１０３】
なおＫ平均法では、同じクラスタに属している特徴量からクラスタの中心を求める必要がある。特徴量として預託データの大きさを用いた場合、あるクラスタには、そのクラスタに含まれるｍ個の預託データそれぞれの大きさである特徴量ｘｋ（ｋ＝１，．．．，ｍ）が属しているとすると、その中心ｖは（ｘ１＋．．．＋ｘｍ）／ｍで与えられる。
【０１０４】
特徴量として特徴ベクトルを用いた場合、中心ベクトルｖのｉ番目の要素をｖｉ、ｍ個の預託データからなるクラスタに含まれる預託データｋの、ｎ個の特徴量からなる特徴ベクトルｘｋのｉ番目の要素をｘｋ,ｉ（ｉ＝１，・・・・，ｎ）とかくと、ｘｋ,ｉのｋ（ｋ＝１，．．．，ｍ）個の預託データについての標準偏差ｕｉと平均値＜ｘｉ＞との比（ｕｉ／＜ｘｉ＞）が、１／Ｃ（Ｃは２〜１０程度の定数）よりも小さければ（（ｕｉ／＜ｘｉ＞）＝＜（１／Ｃ）、即ち、（＜ｘｉ＞／ｕｉ）＞＝Ｃ）、多くのｘｋ,ｉが平均値＜ｘｉ＞の近傍に集中しているので、ｎ個の特徴量におけるｉ番目の特徴量がそのクラスタの特徴量として有効であることを意味しており、その場合はｖｉ＝１、それ以外の場合（ｉ番目の特徴量がそのクラスタの特徴量として有効でない）はｖｉ＝０とし、１又は０であるｖｉを要素とする中心ベクトルｖ＝（ｖ１，・・・・，ｖｎ）を求めることができる。即ち、中心ベクトルｖは、ｎ個の特徴量の中で、どの特徴量がそのクラスタの特徴量として有効であるかを示す特徴量ベクトルである。
【０１０５】
また、上記の＜ｘｉ＞が正であれば、上記の判定式によって得られる、中心ベクトルの要素ｖｉ（１又は０）は、ガウスの記号［  ］を用いてｖｉ＝［ｐｉ］−［｜ｐｉ−１｜］と表される。但し、ｐｉ＝（＜ｘｉ＞／（ｕｉ・Ｃ））である。
【０１０６】
一方、特徴量としてファジィハッシュを用いた場合は、類似度の計算が特殊なので特徴量から中心を求めることは難しい。
【０１０７】
類似度さえ計算できればどのような特徴量でもクラスタリング可能な方法として階層的クラスタリングがある。これは以下の手順で行われる。
【０１０８】
（Ｓ５４−ａ）１個の特徴量だけを含むＮ個のクラスタを生成する。
【０１０９】
（Ｓ５４−ｂ）クラスタｉとｊのそれぞれの特徴量ｘｉとｘｊの距離（非類似度）からクラスタ間の距離を計算し、最も距離の近い２つのクラスタを逐次的に１つのクラスタに併合する。
【０１１０】
（Ｓ５４−ｃ）この併合を全ての対象が１つのクラスタに併合されるまで繰り返す。
【０１１１】
階層的クラスタリングによる出力はデンドログラム（dendrogram、樹状図、系統樹）とよばれるツリー構造をとる。デンドログラムによりどのデータがどのクラスタに属するかということだけではなく、クラスタ内のデータ同士がどの程度離れているかということも求められる。なお、クラスタの併合を工夫することで、計算量のオーダをＮの２乗にまで抑えられることが知られている。詳細については非特許文献８を参照のこと。
【０１１２】
以上まとめると、Ｋ平均法は高速に動作するが、特徴量から中心が定まる場合にのみ適用できる。階層的クラスタリングはＫ平均法より低速だが、類似度さえ計算できればどのようなデータでもクラスタリングできる。
【０１１３】
図６はデータベースサーバが作成する登録データ格納位置管理テーブル６０とクラスタ管理テーブル６２のデータ構成を例示する図である。データベースサーバ４０の登録部４２０は、登録クライアント２０から暗号化データ、秘匿化インデックス、特徴量の組（登録データ）を受信すると、登録データ格納位置管理テーブル６０を作成して記憶装置４１６に格納する。
【０１１４】
登録データ格納位置管理テーブル６０は、登録データを一意に識別する登録データＩＤを格納する登録ＩＤカラム６００、受信した暗号化データの記憶装置４１６内の格納場所を記録する暗号化データカラム６０２、秘匿化インデックスの記憶装置４１６内の格納場所を記録する秘匿化インデックスカラム６０４、特徴量の記憶装置４１６内の格納場所を記録する特徴量カラム６０６、暗号化データ等を登録した登録クライアント２０の識別情報を格納する登録クライアントカラム６０８およびその他必要な事項を格納するカラム６０８を備える。
【０１１５】
登録部４２０は、登録データが追加される度に値を１ずつ増やすなどして、登録データを一意に識別できるように登録データＩＤを発行する。
【０１１６】
暗号化データカラム６０２、秘匿化インデックスカラム６０４および特徴量カラム６０６に記録する情報として、暗号化データなどのファイル名や記憶装置４１６内のセクタアドレスなどがある。なお、特徴量は暗号化データなどと比較してデータ量が少ないため、直接特徴量カラム６０６に格納してもよい。
【０１１７】
登録クライアントカラム６０８に格納すべき情報として、暗号化データ等を登録した登録クライアント２０のＩＰアドレスがある。この情報は認証部４１８が図５のステップＳ５２０で取得しており、検索クライアント３０と登録クライアント２０の間で鍵共有をする場合に必要になる。鍵共有処理の詳細については後で図７を用いて説明する。
【０１１８】
さらに、カラム６０８に格納すべき情報として、例えばデータの登録日時がある。
【０１１９】
クラスタリング部４３０は特徴量を用いてクラスタリングした結果をクラスタ管理テーブル６２に記録し、記憶装置４１６に格納する。そのクラスタ管理テーブル６２は、クラスタを一意に識別するクラスタＩＤを格納するクラスタＩＤカラム６２０、クラスタに属する登録データの登録データＩＤ６００を格納する登録データＩＤカラム６２２およびその他必要な事項を格納するカラム６２４からなる。カラム６２４に格納すべき情報として、例えばＫ平均法におけるクラスタの中心に関する情報をなどがある。
【０１２０】
（秘匿検索処理の詳細）
以上、特徴量算出方法やクラスタリング方法、およびこれらを実現するための装置について説明してきた。これらの方法および装置は、秘匿検索の高速化のために必要な、いわば事前準備に相当する。以下、データベースサーバが行う秘匿検索処理の詳細について説明する。
【０１２１】
（検索クライアントとデータベースサーバの検索処理）
図７は検索クライアントとデータベースサーバの検索処理を例示するシーケンス図である。図７に基づいて当該データ登録処理を説明するとともに、図２、図３および図６の説明で述べた鍵共有手順や、図３の説明で述べたトラップドア生成手順についても具体的な処理を例示する。
【０１２２】
検索クライアント３０とデータベースサーバ４０で行われる秘匿検索処理は、大別すると、検索クライアント２０が検索クエリからトラップドアを生成するトラップドア生成処理Ｓ７０と、検索クライアント２０とデータベースサーバ４０との間で検索処理を行う秘匿検索処理Ｓ７２と、登録クライアント２０と検索クライアント３０との間で復号鍵を共有し、暗号データを復号する復号化処理Ｓ７４からなる。
【０１２３】
検索クライアント２０の検索部３２０はトラップドア生成処理Ｓ７０として、ユーザインターフェース３３０を介してユーザから検索クエリを受けとり、トラップドア生成部３２２を制御して検索クエリからトラップドアを生成する。非特許文献１に基づいて具体的なトラップドア生成処理Ｓ７０を例示すると、以下のようになる。
【０１２４】
（Ｓ７０−１）秘匿化インデックス生成処理（Ｓ５０２−２）で用いたハッシュ関数を準備する。
【０１２５】
（Ｓ７０−２）当該ハッシュ関数を用いて検索クエリ（検索キーワード）のハッシュ値を計算する（検索キーワードの秘匿化）。これがトラップドアとなる。
【０１２６】
検索クエリのハッシュ値を用いるので、トラップドアから検索クエリを特定することは困難となる。こうして求めたトラップドアと秘匿化インデックスとの照合方法については、後の図９の説明で明らかにする。
【０１２７】
秘匿検索処理Ｓ７２は以下の手順で進行する。
【０１２８】
（Ｓ７２０）検索クライアント３０とデータベースサーバ４０との間でデータ授受のための通信路を確立する。具体的には、まず認証部４１８が通信インターフェース３３２，４６２やユーザインターフェース３３０を介して検索クライアント３０のユーザとのＩＤ、及びパスワードなどでユーザの認証を行う。あらかじめ登録された正規のユーザと判断した場合、認証部４１８は、検索クライアント３０の検索部３２０とデータベースサーバ４０の検索部４４０との間で通信路を確立する。正規のユーザでないと判断した場合は通信路を確立せず、処理を終了する。
【０１２９】
（Ｓ７２２）検索部３２０は通信インターフェース３３２を介してトラップドアをデータベースサーバ４０に送信する。データベースサーバ４０の検索部４４０は通信インターフェース４６２を介して当該トラップドアを受信する。
【０１３０】
（Ｓ７２４）検索部４４０の優先順位算出部４４２は、受信したトラップドアと記憶装置４１６に格納されている秘匿化インデックスの一部と照合を行うことで照合の優先順位を算出する。具体的な優先順位算出手順については次の図８を用いて説明する。
【０１３１】
（Ｓ７２６）検索部４４０はステップＳ７２４で求めた優先順位をもとに照合部４４４を制御して、優先度が高い順にトラップドアと秘匿化インデックスの照合処理を行う。具体的な照合手順については後で図９を用いて説明する。
【０１３２】
（Ｓ７２８）検索部４４０は、ヒットした暗号化データを検索部３２０に返信する。併せて、登録データ格納位置管理テーブル６０の登録クライアントカラム６０８に格納されている登録クライアント２０のＩＰアドレスも返信する。後の復号化処理Ｓ７４で検索クライアント３０が復号鍵を入手するために必要となるためである。
【０１３３】
（Ｓ７３０）認証部４１８は、検索部３２０と検索部４４０との間で確立した通信路を開放する。
【０１３４】
次に復号化処理Ｓ７４について説明する。検索結果として入手した暗号化データを復号するためには、登録クライアント２０から復号鍵を共有しなければならない。鍵共有の方法として、ＳＳＬ(Secure Sockets Layer)で利用されている公開鍵暗号を用いる鍵共有法や、ＩＰＳｅｃ(Security Architecture for Internet Protocol)で利用されているＤＨ(Diffie-Hellman)鍵共有法が知られている。ここでは公開鍵暗号を用いる鍵共有法について具体的手順を説明する。
【０１３５】
（Ｓ７４０）鍵共有部３２４はデータベースサーバ４０から受信した検索結果から、暗号化データ等を登録した登録クライアント２０の、ＩＰアドレスなどといった識別情報を取り出す。登録クライアント２０は当該暗号化データの復号鍵を所有している。復号鍵を共有する前に、まずは検索クライアント３０がなりすましなどをしていない正規のクライアントであることを証明しなければならない。鍵共有部３２４は以下の手順で登録クライアント２０の認証を行う。
【０１３６】
（Ｓ７４０−１）鍵共有部３２４は登録クライアント２０のＩＰアドレスをもとに通信インターフェース３３２を介して登録クライアント２０に接続する。
【０１３７】
（Ｓ７４０−２）登録クライアント２０の鍵生成部２１８は、通信インターフェース２３２を介して検索クライアント３０の鍵共有部３２４に証明書を要求する。ここで証明書とは、信頼できる第三者（ＣＡ：Certificate Authority、認証局）が検索クライアント３０の公開鍵に電子署名を施したものである。
【０１３８】
（Ｓ７４０−３）鍵共有部３２４は当該証明書を登録クライアント２０へ送付する。
【０１３９】
（Ｓ７４０−４）鍵生成部２１８は当該証明書の署名を検証し、検索クライアント３０の公開鍵を取得する。署名の検証に失敗した場合は、証明書が不正であるとして通信路を切断して処理を終了する。
【０１４０】
（Ｓ７４０−５）鍵共有部３２４はメッセージを生成してメッセージダイジェストを付加し、鍵共有部３２４の持つ秘密鍵で暗号化して、鍵生成部２１８へ送信する。
【０１４１】
（Ｓ７４０−６）鍵生成部２１８は、鍵共有部３２４の公開鍵を使ってメッセージを解読する。解読したメッセージからメッセージダイジェストを作成し、鍵共有部３２４が付加したメッセージダイジェストと比較する。双方のメッセージダイジェストの一致が確認されれば正規の検索クライアント３０から改ざんされていないメッセージを受信したと判定され、認証が完了する。そうでない場合は、検索クライアント３０は正規のクライアントではないと判定され、通信路を切断し、処理を終了する。
【０１４２】
（Ｓ７０４−１）から（Ｓ７４０−６）で述べた認証手順では、登録クライアント２０のユーザの意思にかかわらず、ＣＡに正規の証明書を発行してもらった正規の検索クライアント３０は全て、暗号化データを復号し得ることになる。復号鍵の送付先を限定するためには、ステップＳ７０４−１で検索クライアント３０から接続された際や、ステップＳ７４０−４において証明書を検証した際に、鍵生成部２１８が接続元の情報や証明書などから検索クライアント３０の識別情報も読み取り、所定の検索クライアント以外に復号鍵を送信しないように通信路を切断するといった方法をとればよい。復号鍵の送信先の指定は、ユーザがユーザインターフェース２３０を介して行うことができる。
【０１４３】
認証が完了した後、検索クライアント３０は、以下の手順で登録クライアント２０から復号鍵を入手する。
【０１４４】
（Ｓ７４２）登録クライアント２０の鍵生成部２１８は、証明書から取得した公開鍵で自己の有する復号鍵を暗号化して、通信インターフェース２３２を介して検索クライアント３０の鍵共有部３２４に送信する。鍵共有部３２４は当該暗号化された復号鍵を自己の秘密鍵で復号して、所望の復号鍵を得る。
【０１４５】
（Ｓ７４４）復号化部３２６がＳ７４２で入手した復号鍵を用いて暗号データを復号して、検索処理が完了する。
【０１４６】
以上の手順により検索クライアント３０のユーザは、データベースサーバ４０の管理者や通信路上の第三者に検索クエリや検索結果の内容を事実上知られることなく、所望の検索結果を入手することができる。
【０１４７】
（優先順位決定）
図８はデータベースサーバ４０が行う優先順位算出Ｓ７２４の処理手順を例示するフローチャートである。図８に基づいて検索クライアント３０からトラップドアを受信してから行う優先順位算出処理について以下に説明する。図５で述べた秘匿化インデックスとトラップドアとの照合についても、具体的な処理を例示する。なお、以下の処理はすべてデータベースサーバ４０の検索部４４０の優先順位算出部４４２が行う。
【０１４８】
（Ｓ８００）クラスタをカウントするための変数ｐに１を設定する。
【０１４９】
（Ｓ８０２）クラスタＩＤがｐとなるクラスタに属する全登録データから代表データを選択する。代表データは、当該クラスタに属する全登録データからランダムに選択してもいいし、Ｋ平均法を用いた場合には、当該クラスタの中心に最も近い登録データを代表データとしてもよい。例えば、所定の順序でクラスタ内の登録データを並べた時に、全体の順序の中心付近に位置するデータを代表データとする。
【０１５０】
（Ｓ８０４）変数ｐが全クラスタ数よりも小さい場合、ｐを１増やして（Ｓ８０６）、ステップＳ８０２に戻り、次のクラスタについて同様の処理を行う。そうでない場合はステップＳ８１０へ進む。
【０１５１】
（Ｓ８１０）クラスタをカウントするための変数ｑに１を設定する。
【０１５２】
（Ｓ８１２）クラスタＩＤがｑとなるクラスタの代表データの秘匿化インデックスとトラップドアとを照合する。非特許文献１に基づいて具体的な照合方法を例示すると以下のようになる。秘匿化インデックスとトラップドアの照合の処理手順を図１４に示す。なお、図１３の（Ｓ５０２−１）から（Ｓ５０２−４）で求められた秘匿化インデックスＨｉは、預託データ内の単語Ｗｉから生成したハッシュ値ｈｉと、乱数列ｒｉとそのメッセージダイジェストｄｉを連結したものとの排他的論理和で生成されたものとする（ｉ＝１，２，．．．）。また、（Ｓ７０−１）から（Ｓ７０−２）の手順で求めたトラップドアをｈ′とする。なお、添え字「ｉ」は、預託データ内に含まれるそれぞれの単語に対する識別子である。
【０１５３】
（Ｓ８１２−１）各単語Ｗｉについて、秘匿化インデックスＨｉとトラップドアｈ′との排他的論理和を取る。
【０１５４】
（Ｓ８１２−２）ステップＳ５０２−３と同様に、当該排他的論理和（ビット列Ｓ′ｉ）の先頭ｃビットのビット列ｒ′ｉから、図１３のステップＳ５０２−３と同じ所定の演算を行なってメッセージダイジェストＤｉを計算し、このＤｉを、当該排他的論理和の後半ｎ−ｃビットのビット列ｄ′ｉと比較する。
【０１５５】
（Ｓ８１２−３）もしｈｉ＝ｈ′、即ち、元の単語Ｗｉと検索キーワードとが一致するならば、このダイジェストＤｉとビット列ｄ′ｉとの排他的論理和を取ることで、乱数列ｒｉとそのメッセージダイジェストｄｉだけが残るはずである。よって、ｒ′ｉのメッセージダイジェストＤｉがｄ′ｉに一致すれば、ｈｉはｈ′に等しく、秘匿化インデックスに対応する預託データはトラップドアに対応する検索クエリ（検索キーワード）を含んでいると判断できる。以下この事象を単純に検索にヒットしたという。一致しない場合、秘匿化インデックスに対応する預託データはトラップドアに対応する検索クエリを含んでいないと判断する。
【０１５６】
ここで、図１４を参照しながら、ステップＳ８１２−２、８１２−３における検索クエリとトラップドアとの一致判定のアルゴリズムを説明する。
【０１５７】
排他的論理和を「ＸＯＲ」、集合Ａの補集合（否定）を「¬」、論理和を「＋」、論理積を「・」、２つのビット列の結合を「｜」とすると、一般に、３つの集合の排他的論理和は、（Ａ ＸＯＲ Ｂ）ＸＯＲ Ｃ＝Ｘ・Ｂ＋¬Ｘ・¬Ｂ、かつ、Ｘ＝¬（Ａ ＸＯＲ Ｃ）、¬Ｘ＝（Ａ ＸＯＲ Ｃ）となる。ここで、Ａ＝ｈｉ（単語ｗｉのハッシュ値）、Ｂ＝（ｒｉ｜ｄｉ）（乱数列ｒｉとメッセージダイジェストｄｉからなるビット列Ｓｉ）、Ｃ＝ｈ′（トラップドア）とすると、Ｘ＝ｈｉ ＸＯＲ ¬ｈ′、¬Ｘ＝ｈｉ ＸＯＲ ｈ′となる。特に、ｈｉ＝ｈ′の場合、Ｘ＝１、¬Ｘ＝０となる。
【０１５８】
秘匿化インデックスＨｉとトラップドアｈ′
との排他的論理和を、Ｈｉ ＸＯＲ ｈ′＝（ｒ′ｉ｜ｄ′ｉ）（乱数列とメッセージダイジェストからなるビット列Ｓ′ｉ）とおいて（Ｓ８１２−１）、この左辺のＨｉに上記のＨｉの表現を代入すると、ｒ′ｉ＝Ｘ・ｒｉ＋¬Ｘ・¬ｒｉ、及びｄ′ｉ＝Ｘ・ｄｉ＋¬Ｘ・¬ｄｉとなる。
【０１５９】
もし、ｈｉ＝ｈ′ならば、Ｘ＝１、¬Ｘ＝０であるから、ｒ′ｉ＝ｒｉ、及びｄ′ｉ＝ｄｉとなる。従って、トラップドアによるメッセージダイジェストＤｉ＝ｆ（ｒ′ｉ）＝ｆ（ｒｉ）＝ｄｉ（Ｓ８１２−２）、さらに、ｄ′ｉ＝ｄｉ であるから、Ｄｉ＝ｄ′ｉ となる（Ｓ８１２−３）。
【０１６０】
以上のことから、ｈｉ＝ｈ′、即ち、単語Ｗｉ＝検索キーワードであれば、Ｄｉ＝ｄ′ｉとなる（Ｓ８１２−３）。
【０１６１】
乱数列と排他的論理和の性質を利用することで、平文と暗号文が1対1とならない場合でもトラップドアとの照合を行うことができる。詳細については非特許文献１参照のこと。なお、クラスタ内の代表データ（登録データ）、特に、登録データ内の秘匿化インデックスを「ピボット」とも言う。
【０１６２】
（Ｓ８１４）秘匿化インデックスとトラップドアとの合致率が大きいほど優先度が高くなるよう、クラスタＩＤがｑとなるクラスタの優先度を算出する。トラップドアが１つの場合、合致度は検索にヒットしたか否かの二値で与えられる。複数の検索キーワードを指定してこれらのａｎｄ（論理積）検索やｏｒ（論理和）検索を行った場合、トラップドアは複数となるため、合致度は、検索にヒットしたトラップドアの個数と全トラップドアとの比で与えられる。
【０１６３】
（Ｓ８１６）変数ｑが全クラスタ数よりも小さい場合、ｑを１増やして（Ｓ８１８）、ステップＳ８１２に戻り、次のクラスタについて同様の処理を行う。そうでない場合はステップＳ８２０へ進む。
【０１６４】
（Ｓ８２０）優先順位算出部４４２は、優先度が高い順になるようにクラスタＩＤをソートし、当該結果をメモリ４１４または記憶装置４１６に出力する。以上で優先順位算出処理を終了する。
【０１６５】
（クラスタの優先順位に基づく登録データの照合）
図９は、データベースサーバ４０が行う秘匿化インデックスとトラップドアの照合処理（図８のステップＳ８１２）の手順を例示するフローチャートである。本発明の実施の形態では、預託データの特徴量を用いて照合対象の優先順位を定めてから照合を順次行い、一定回数で照合を打ち切ることで、安全性や検索精度の低下を抑えつつ秘匿検索処理の高速化を実現することを特徴とする。以下、照合を行う回数を照合回数とよぶ。当該照合回数はあらかじめ登録クライアント２０のユーザがユーザインターフェース２３０を介して設定しておく。照合回数の設定については後で図１１を用いて説明する。
【０１６６】
秘匿化インデックスとトラップドアの照合処理は以下の手順で行われる。なお、以下の処理（Ｓ９０４を除く）はすべて検索部４４０が行う。
【０１６７】
（Ｓ９００）照合回数をカウントする変数ｔを０に、クラスタをカウントする変数ｋを１に設定する。
【０１６８】
（Ｓ９０２）クラスタ内の登録データをカウントする変数ｎを１に設定する。メモリ４１４または記憶装置４１６からステップＳ８２０で優先順位算出部４４２が出力した優先順位を読み込み、ｋ番目に優先順位が高いクラスタＣｋを特定する。
【０１６９】
（Ｓ９０４）照合部４４４は、クラスタＣｋに含まれるｎ番目の登録データの秘匿化インデックスとトラップドアとを照合する。ヒットした場合、秘匿化インデックスとトラップドアの合致率と併せて、対応する登録データＩＤをメモリ４１４または記憶装置４１６に一時的に出力する。ヒットしなかった場合は何も出力しない。
【０１７０】
（Ｓ９０６）照合回数の変数ｔを１増やす。
【０１７１】
（Ｓ９０８）もし変数ｔがあらかじめ定めた照合回数より小さい場合は、次のステップＳ９１０に進む。そうでない場合はステップＳ９１８に進み、処理を終了する。
【０１７２】
（Ｓ９１０）登録データをカウントする変数ｎがクラスタＣｋに含まれる全登録データ数よりも小さい場合、ｎを１増やして（Ｓ９１２）、ステップＳ９０４に戻り、クラスタ内の次の登録データについて同様の処理を行う。そうでない場合はステップＳ９１４へ進む。
【０１７３】
（Ｓ９１４）優先順位を表す変数ｋが全クラスタ数よりも小さい場合、ｋを１増やして（Ｓ９１６）、ステップＳ９０２に戻り、次に優先順位が高いクラスタについて同様の処理を行う。そうでない場合はステップＳ９１８へ進む。
【０１７４】
（Ｓ９１８）検索部４４０は、照合部４４４がメモリ４１４または記憶装置４１６に一時的に出力した登録データＩＤに対応する暗号化データを、メモリ４１４または記憶装置４１６に合致率とともに出力する。以上で秘匿化インデックスとトラップドアの照合処理を終了する。
【０１７５】
例えば、登録クライアント２０が「雲」というキーワードを含む１０００個の預託データと、「雲」を含まない９０００個の預託データを、本実施形態によりデータベースサーバ４０に登録したとする。データベースサーバ４０では、クラスタリング処理により、「雲」を含むクラスタＡと含まないクラスタＢの２つに分解して登録データが管理されることになる。検索クライアント３０が「雲」という検索クエリで検索した場合、検索クエリ（トラップドア）とピボット（秘匿化インデックスの代表）との照合により、クラスタＡの１０００個の登録データが優先的に照合される。よって、仮に１０００回で照合を打ち切ったとしても、「雲」を含む１０００個の全預託データにヒットすることになる。一方、従来の検索可能暗号を用いた秘匿検索システムにおいては、１００００個の全登録データに対して「雲」という検索クエリのトラップドアと照合して、初めて「雲」を含む全預託データにヒットする。従って、この例では、本発明は従来と比較して１０倍検索速度を向上できたといえる。このように、図１から図９を用いて説明した本発明の実施の形態に従って、元のデータを推測しにくい特徴量を用いて秘匿化インデックスをクラスタリングしておくことで、安全性や検索精度の低下を抑えつつ、秘匿検索を高速化することができた。
【０１７６】
図１０も、データベースサーバ40が行う秘匿化インデックスとトラップドアとの照合処理手順を例示するフローチャートである。図９の例では一定回数で照合を打ち切ることで秘匿検索処理の高速化を実現したが、照合回数ではなく検索にヒットした回数（以下、ヒット回数とよぶ）で打ち切ることでも高速化を実現できる。具体的には、図９のステップＳ９０６およびＳ９０８が以下のステップＳ９０６−ａ，Ｓ９０６−ｂ，Ｓ９０８′に置き換わる。以下の処理はすべて検索部４４０が行う。
【０１７７】
（Ｓ９０６−ａ）照合部４４４において検索がヒットしたかどうかを判断する。ヒットしたときＳ９０６−ｂへ進む。ヒットしなかったときステップＳ９０８′へ進む。
【０１７８】
（Ｓ９０６−ｂ）照合回数の変数ｔを１増やす。
【０１７９】
（Ｓ９０８′）もし変数ｔがあらかじめ定めたヒット回数より小さい場合は、次のＳ９１０に進む。そうでない場合はＳ９１８に進み、処理を終了する。
【０１８０】
ヒット回数は、あらかじめ登録クライアント２０のユーザがユーザインターフェース２３０を介して設定しておく。ヒット回数の設定については後で図１１を用いて説明する。
【０１８１】
図１０のフローチャートによる方法はあらかじめ設定したヒット回数に達するまで照合を繰り返すため、図９で説明した検索方法と比較して検索漏れが少なくなるという利点がある。その反面、検索にヒットしなければ検索が遅延するという欠点がある。一方、図９で説明した方法は、あらかじめ設定した照合回数しか照合を行わないため、図１０の方法よりも検索漏れが生じやすいという欠点があるが、検索結果のいかんにかかわらず検索応答時間が一定に保たれるという利点がある。
【０１８２】
図１１は、検索クライアント３０またはデータベースサーバ４０で行う設定画面を例示する図である。図３の説明で述べた検索クライアント３０の設定部３２８が設定するパラメータとして、例えば照合回数がある。
【０１８３】
ダイアログ１１００や１１２０は、設定部３２８が照合回数をユーザに設定させるためにユーザインターフェース３３０を介してユーザに提示する画面の例である。ダイアログ１１００では、スライドバー１１０２を左に動かすほど照合回数が小さくなって検索速度が向上する一方で、検索にヒットする登録データに到達する可能性が下がり、検索精度が低下する。スライドバー１１０２を右に動かすほど照合回数が大きくなって、検索速度が低下する一方、検索精度が向上する。スライドバー１１２２の位置に応じて、照合回数は、設定部３２８が保持する所定の値に設定される。また、ダイアログボックス１１２０の入力ボックス１１２２で、ユーザが直接照合回数を設定することもできる。なお図１０で説明した実施形態においては、上記説明における照合回数をヒット回数に読み替える。
【０１８４】
また、照合回数（またはヒット回数）の設定をデータベースサーバ４０の管理者が行う実施形態もある。この場合、データベースサーバ４０の設定部４５０がユーザインターフェース４６０を介してダイアログ１１００や１１２０を提示する。データベースサーバ４０の管理者が、登録データ数やクラスタリングの態様を定期的にチェックし、検索応答時間が遅延しないように照合回数を調整することで、秘匿検索サービスの質を保証することができる。
【符号の説明】
【０１８５】
１０：ネットワーク、２０−１〜２０−ｎ、２０：登録クライアント、３０−１〜３０−ｍ、３０：検索クライアント、４０：データベースサーバ、
２００、３００、４００：内部バス、２１２、３１２、４１２：ＣＰＵ、２１４、３１４、４１４：メモリ、２１６、３１６、４１６：記憶装置、２３０、３３０、４６０：ユーザインターフェース、２３２、３３２、４６２：通信インターフェース、
２１８：鍵生成部、２２０：登録部、２２２：暗号化部、２２４：秘匿化インデックス生成部、２２６：特徴量算出部、２２８：設定部、
３２０：検索部、３２２：トラップドア生成部、３２４：鍵共有部、３２６：復号化部、３２８：設定部、４１８：認証部、４２０：登録部、４３０：クラスタリング部、４３２：類似度算出部、４４０：検索部、４４２：優先順位算出部、４４４：照合部、４５０：設定部、
Ｓ５０：データ生成処理、Ｓ５２：データ送受信処理、Ｓ５４：クラスタリング処理、
６０：登録データ格納位置管理テーブル、６００：登録データＩＤカラム、６０２：暗号化データカラム、６０４：秘匿化インデックスカラム、６０６：特徴量カラム、６０８：登録クライアントカラム、６１０：その他必要な事項を格納するカラム、６２：クラスタ管理テーブル、６２０：クラスタＩＤカラム、６２２：登録データＩＤカラム、６２４：その他必要な事項を格納するカラム、
Ｓ７０：トラップドア生成処理、Ｓ７２：秘匿検索処理、Ｓ７４：復号化処理、
１１００、１１２０：ダイアログ、１１０２：スライドバー、１１２２：入力ボックス
【図１】
2013080365.tif 000003
【図２】
2013080365.tif 000004
【図３】
2013080365.tif 000005
【図４】
2013080365.tif 000006
【図５】
2013080365.tif 000007
【図６】
2013080365.tif 000008
【図７】
2013080365.tif 000009
【図８】
2013080365.tif 000010
【図９】
2013080365.tif 000011
【図１０】
2013080365.tif 000012
【図１１】
2013080365.tif 000013
【図１２】
2013080365.tif 000014
【図１３】
2013080365.tif 000015
【図１４】
2013080365.tif 000016
【図１５】
2013080365.tif 000017
【国際調査報告】
2013080365.tif 000018
2013080365.tif 000019