(57)【特許請求の範囲】
【請求項１】
暗号化された検索インデックスをマージする、検索インデックスマージサーバであって、
プロセッサと記憶装置とを含み、
前記記憶装置は、第１検索インデックスと第２検索インデックスとを保持し、
前記第１検索インデックス及び前記第２検索インデックスそれぞれは、１以上のキーワードそれぞれから生成された暗号セットと、前記１以上のキーワードそれぞれに対応するメタデータと、を紐づけて保持し、
前記第１検索インデックス及び前記第２検索インデックスの暗号セットそれぞれは、暗号キーワードを含み、
前記第２検索インデックスの暗号セットそれぞれは、暗号クエリを含み、
前記暗号キーワードそれぞれは、乱数を用いて暗号化されたキーワードを示す暗号文と、当該乱数に対して準同型関数による変換及び不可逆変換が実行された値を示す検索タグと、を含み、
前記暗号クエリそれぞれは、乱数を用いて暗号化されたキーワードを示す暗号文と、当該乱数に対して準同型関数による変換が実行された値を示す検索タグと、を含み、
前記プロセッサは、
前記第１検索インデックスと前記第２検索インデックスとをマージして、マージ結果である第３検索インデックスを生成するマージ処理を実行し、
前記マージ処理において、
前記第１検索インデックスに含まれる暗号キーワードと前記第２検索インデックスに含まれる暗号クエリとを比較する比較処理を実行して、同一のキーワードから生成された暗号セットの組み合わせを特定し、
前記特定した組み合わせそれぞれについて、当該組み合わせに含まれる暗号セットの一方に含まれる暗号キーワードと、前記組み合わせに含まれる暗号セットそれぞれに紐づくメタデータと、を紐づけて前記第３検索インデックスに格納し、
前記比較処理において、
比較対象である第２暗号キーワードの暗号文の一部又は全部と、比較対象である第１暗号クエリの暗号文と、から算出される値に対して、準同型関数による変換を実行した関数値を算出し、
前記関数値と、前記第１暗号クエリの検索タグが示す値と、から算出される値に対して、不可逆変換を実行した不可逆変換値を算出し、
前記不可逆変換値と、前記第２暗号キーワードの検索タグと、の比較結果に基づいて、前記第２暗号キーワードを含む暗号セットと、前記第１暗号クエリを含む暗号セットと、が同一のキーワードから生成されたか否かを判定する、検索インデックスマージサーバ。
【請求項２】
請求項１に記載の検索インデックスマージサーバであって、
前記暗号クエリそれぞれは、前記第１検索インデックス及び前記第２検索インデックスに含まれる暗号キーワードの検索に使用される暗号化された検索クエリと同一の暗号化アルゴリズムを用いて暗号化されている、検索インデックスマージサーバ。
【請求項３】
請求項１に記載の検索インデックスマージサーバであって、
前記第３検索インデックスに含まれる暗号セットそれぞれは、暗号キーワードのみからなり、
前記プロセッサは、前記マージ処理の終了後に前記第１検索インデックス及び前記第２検索インデックスを削除する、検索インデックスマージサーバ。
【請求項４】
ユーザ端末と検索インデックスマージサーバとを含み、暗号化された検索インデックスをマージする、検索インデックスマージシステムであって、
前記ユーザ端末は、
１以上のキーワードからなる第１キーワード群と、前記第１キーワード群のキーワードそれぞれに対応するメタデータ群と、を保持し、
前記第１キーワード群のキーワードそれぞれについて、
乱数を用いて当該キーワードを暗号化した暗号文を生成し、
当該乱数に対して準同型関数及び不可逆変換による変換が施された値を示す検索タグを生成し、
当該生成した暗号文と、当該生成した検索タグと、を含めた暗号キーワードを生成し、
前記第１キーワード群のキーワードそれぞれについて、
乱数を用いて当該キーワードを暗号化した暗号文を生成し、
当該乱数に対して準同型関数による変換が施された値を示す検索タグを生成し、
当該生成した暗号文と、当該生成した検索タグと、を含めた暗号クエリを生成し、
同一のキーワードに対応する暗号キーワードと暗号クエリと、を同一の暗号セットに含め、
同一のキーワードに対応する暗号セットとメタデータとを紐づけて、第２検索インデックスに格納し、
前記第２検索インデックスを、前記検索インデックスマージサーバに送信し、
前記検索インデックスマージサーバは、第１検索インデックスを保持し、
前記第１検索インデックスは、１以上のキーワードからなる第２キーワード群のキーワードそれぞれから生成された暗号セットと、前記第２キーワード群のキーワードそれぞれに対応するメタデータと、を紐づけて保持し、
前記第１検索インデックスの暗号セットそれぞれは、暗号キーワードを含み、
前記第１検索インデックスの暗号キーワードそれぞれは、乱数を用いて暗号化されたキーワードを示す暗号文と、当該乱数に対して準同型関数による変換及び不可逆変換が実行された値を示す検索タグと、を含み、
前記検索インデックスマージサーバは、
前記第１検索インデックスと前記第２検索インデックスとをマージして、マージ結果である第３検索インデックスを生成するマージ処理を実行し、
前記マージ処理において、
前記第１検索インデックスに含まれる暗号キーワードと前記第２検索インデックスに含まれる暗号クエリとを比較する比較処理を実行して、同一のキーワードから生成された暗号セットの組み合わせを特定し、
前記特定した組み合わせそれぞれについて、当該組み合わせに含まれる暗号セットの一方に含まれる暗号キーワードと、前記組み合わせに含まれる暗号セットそれぞれに紐づくメタデータと、を紐づけて前記第３検索インデックスに格納し、
前記比較処理において、
比較対象である第２暗号キーワードの暗号文の一部又は全部と、比較対象である第１暗号クエリの暗号文と、から算出される値に対して、準同型関数による変換を実行した関数値を算出し、
前記関数値と、前記第１暗号クエリの検索タグが示す値と、から算出される値に対して、不可逆変換を実行した不可逆変換値を算出し、
前記不可逆変換値と、前記第２暗号キーワードの検索タグと、の比較結果に基づいて、前記第２暗号キーワードを含む暗号セットと、前記第１暗号クエリを含む暗号セットと、が同一のキーワードから生成されたか否かを判定する、検索インデックスマージシステム。
【請求項５】
検索インデックスマージサーバが、暗号化された検索インデックスをマージする、検索インデックスマージ方法であって、
検索インデックスマージサーバは、第１検索インデックスと第２検索インデックスとを保持し、
前記第１検索インデックス及び前記第２検索インデックスそれぞれは、１以上のキーワードそれぞれから生成された暗号セットと、前記１以上のキーワードそれぞれに対応するメタデータと、を紐づけて保持し、
前記第１検索インデックス及び前記第２検索インデックスの暗号セットそれぞれは、暗号キーワードを含み、
前記第２検索インデックスの暗号セットそれぞれは、暗号クエリを含み、
前記暗号キーワードそれぞれは、乱数を用いて暗号化されたキーワードを示す暗号文と、当該乱数に対して準同型関数による変換及び不可逆変換が実行された値を示す検索タグと、を含み、
前記暗号クエリそれぞれは、乱数を用いて暗号化されたキーワードを示す暗号文と、当該乱数に対して準同型関数による変換が実行された値を示す検索タグと、を含み、
前記検索インデックスマージ方法は、
前記検索インデックスマージサーバが、
前記第１検索インデックスと前記第２検索インデックスとをマージして、マージ結果である第３検索インデックスを生成するマージ処理を実行し、
前記マージ処理において、
前記第１検索インデックスに含まれる暗号キーワードと前記第２検索インデックスに含まれる暗号クエリとを比較する比較処理を実行して、同一のキーワードから生成された暗号セットの組み合わせを特定し、
前記特定した組み合わせそれぞれについて、当該組み合わせに含まれる暗号セットの一方に含まれる暗号キーワードと、前記組み合わせに含まれる暗号セットそれぞれに紐づくメタデータと、を紐づけて前記第３検索インデックスに格納し、
前記比較処理において、
比較対象である第２暗号キーワードの暗号文の一部又は全部と、比較対象である第１暗号クエリの暗号文と、から算出される値に対して、準同型関数による変換を実行した関数値を算出し、
前記関数値と、前記第１暗号クエリの検索タグが示す値と、から算出される値に対して、不可逆変換を実行した不可逆変換値を算出し、
前記不可逆変換値と、前記第２暗号キーワードの検索タグと、の比較結果に基づいて、前記第２暗号キーワードを含む暗号セットと、前記第１暗号クエリを含む暗号セットと、が同一のキーワードから生成されたか否かを判定する、検索インデックスマージ方法。
【請求項６】
請求項５に記載の検索インデックスマージ方法であって、
前記暗号クエリそれぞれは、前記第１検索インデックス及び前記第２検索インデックスに含まれる暗号キーワードの検索に使用される暗号化された検索クエリと同一の暗号化アルゴリズムを用いて生成されている、検索インデックスマージ方法。
【請求項７】
請求項５に記載の検索インデックスマージ方法であって、
前記第３検索インデックスに含まれる暗号セットそれぞれは、暗号キーワードのみからなり、
前記検索インデックスマージ方法は、前記検索インデックスマージサーバが、前記マージ処理の終了後に前記第１検索インデックス及び前記第２検索インデックスを削除する、検索インデックスマージ方法。
【発明の詳細な説明】
【参照による取り込み】
【０００１】
本出願は、2016年3月30日に出願された日本特許出願第2016-067699号の優先権を主張し、その内容を参照することにより、本出願に取り込む。
【技術分野】
【０００２】
本発明は、暗号化検索インデックスマージサーバ、暗号化検索インデックスマージシステム、及び暗号化検索インデックスマージ方法に関する。
【背景技術】
【０００３】
本技術分野の背景技術として、特開２０１５−３５０７２号公報（特許文献１）がある。この公報には、「登録クライアントは、ハッシュ値と準同型関数の出力値によるマスクを用いた確率的暗号化方式により、検索用に作成する検索タグのサイズを圧縮した暗号化データをサーバに預託し、検索クライアントは、検索用のキーワードを同様に確率的暗号化し、暗号化データの一部のみを暗号化した検索キーワードとして管理サーバに送信し、管理サーバに暗号化データと暗号化キーワードの乱数のマスクを解除させずに、管理サーバに検索に該当するデータを検索し、検索結果の誤検索を検知し、検索結果を復号する。」と記載されている（要約参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１５−３５０７２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１に記載の技術は、非決定性暗号を用いて暗号化された検索インデックスを用いて、ドキュメント及び検索インデックスを復号せずに、検索処理を実行する。特許文献１に記載の各検索インデックスは、非決定性暗号を用いて暗号化されたキーワードである暗号キーワードと、当該キーワードに対応するメタデータと、からなる複数の組み合わせを含む。【０００６】
検索インデックスの数が増加すると、暗号キーワードとメタデータとの組み合わせの総数も増加するため、検索処理速度が低下する。このような検索処理速度の低下を抑制するために、例えば、複数の検索インデックスをマージして１つの検索インデックスを生成するマージ処理が実行される。【０００７】
暗号化されていない検索インデックスのマージ処理において、同一のキーワードがマージ対象の複数の検索インデックスに含まれている場合、当該同一のキーワードと、当該同一のキーワードと紐づく全てのメタデータと、を紐づけて１つの組み合わせを生成し、マージ結果である検索インデックスに格納する。このようなマージ処理によって、暗号キーワードとメタデータとの組み合わせの総数を減少させることができる。【０００８】
しかし、特許文献１に記載の検索インデックスに含まれる各暗号キーワードは、非決定性暗号を用いて暗号化されているため、同一のキーワードから生成された暗号キーワードであっても、暗号キーワード同士は異なるデータである。従って、特許文献１に記載の技術において、複数のマージ対象の検索インデックスに含まれる暗号キーワードは原則的に全て異なるデータであるため、暗号化状態のまま上述のマージ処理を実行しても、検索インデックスに含まれる暗号キーワードとメタデータとの組み合わせの総数を減少させることはできない。【０００９】
また、特許文献１に記載の技術において、暗号キーワードを復号すれば、暗号化されていない検索インデックスと同様のマージ処理を実行することができるが、暗号キーワードを復号することによりセキュリティレベルが低下してしまう。【００１０】
そこで、本発明の一態様は、暗号化された検索インデックスに含まれるキーワードを復号することなく、検索インデックスをマージすることを目的とする。ひいては、セキュリティを確保しつつ、検索処理速度を向上させることを目的とする。
【課題を解決するための手段】
【００１１】
上記課題を解決するため、本発明の一態様は、例えば、以下の構成を採用する。暗号化された検索インデックスをマージする、検索インデックスマージサーバであって、プロセッサと記憶装置とを含み、前記記憶装置は、第１検索インデックスと第２検索インデックスとを保持し、前記第１検索インデックス及び前記第２検索インデックスそれぞれは、１以上のキーワードそれぞれから生成された暗号セットと、前記１以上のキーワードそれぞれに対応するメタデータと、を紐づけて保持し、前記第１検索インデックス及び前記第２検索インデックスの暗号セットそれぞれは、暗号キーワードを含み、前記第２検索インデックスの暗号セットそれぞれは、暗号クエリを含み、前記暗号キーワードそれぞれは、乱数を用いて暗号化されたキーワードを示す暗号文と、当該乱数に対して準同型関数による変換及び不可逆変換が実行された値を示す検索タグと、を含み、前記暗号クエリそれぞれは、乱数を用いて暗号化されたキーワードを示す暗号文と、当該乱数に対して準同型関数による変換が実行された値を示す検索タグと、を含み、前記プロセッサは、前記第１検索インデックスと前記第２検索インデックスとをマージして、マージ結果である第３検索インデックスを生成するマージ処理を実行し、前記マージ処理において、前記第１検索インデックスに含まれる暗号キーワードと前記第２検索インデックスに含まれる暗号クエリとを比較する比較処理を実行して、同一のキーワードから生成された暗号セットを特定し、同一のキーワードから生成された暗号セットに含まれる第１暗号キーワードを含む暗号セットと、前記特定した暗号セットそれぞれに紐づくメタデータと、を紐づけて前記第３検索インデックスに格納し、前記比較処理において、比較対象である第２暗号キーワードの暗号文の一部又は全部と、比較対象である第１暗号クエリの暗号文と、から算出される値に対して、準同型関数による変換を実行した関数値を算出し、前記関数値と、前記第１暗号クエリの検索タグが示す値と、から算出される値に対して、不可逆変換を実行した不可逆変換値を算出し、前記不可逆変換値と、前記第２暗号キーワードの検索タグと、の比較結果に基づいて、前記第２暗号キーワードを含む暗号セットと、前記第１暗号クエリを含む暗号セットと、が同一のキーワードから生成されたか否かを判定する、検索インデックスマージサーバ。
【発明の効果】
【００１２】
本発明の一態様によれば、暗号化された検索インデックスに含まれるキーワードを復号することなく、検索インデックスをマージすることができる。ひいては、セキュリティを確保しつつ、検索データサイズを削減し、検索処理速度を向上させることができる。【００１３】
上記した以外の課題、構成及び効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【００１４】
【図１】実施例１における全文検索システムの全体の構成例を示すブロック図である。
【図２】実施例１におけるインデックス生成サーバの物理的な構成例を示すブロック図である。
【図３】実施例１における検索インデックスのマージ処理の一例を示す説明図である。
【図４】実施例１における検索インデックス作成処理の一例を示すシーケンス図である。
【図５Ａ】実施例１における乱数生成処理の一例を示す説明図である。
【図５Ｂ】実施例１における中間暗号文生成処理の一例を示す説明図である。
【図６】実施例１における暗号キーワード生成処理の一例を示す説明図である。
【図７】実施例１における暗号クエリ生成処理の一例を示す説明図である。
【図８】実施例１における検索インデックスのマージ処理の一例を示すシーケンス図である。
【図９】実施例１における暗号セットの比較処理の一例を示す説明図である。
【図１０】実施例２における検索インデックスのマージ処理の一例を示す説明図である。
【図１１】実施例３における全文検索システムの全体の構成例を示すブロック図である。
【発明を実施するための形態】
【００１５】
以下、添付図面を参照して本発明の実施形態を説明する。本実施形態は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではないことに注意すべきである。各図において共通の構成については同一の参照符号が付されている。
【実施例１】
【００１６】
図１は、本実施例の全文検索システムの全体の構成例を示すブロック図である。全文検索システム１００は、インデックス型の全文検索を実行するシステムであり、例えば、互いに接続された検索エンジンサーバ１２０とインデックス生成サーバ１１０とを含む。なお、インデックス生成サーバ１１０と検索エンジンサーバ１２０は、１つの計算機上に構成されていてもよい。【００１７】
全文検索システム１００と、ユーザが利用するユーザ端末１３０と、ユーザの暗号鍵を保管する鍵サーバ１４０と、はネットワーク１５０を介して互いに接続されている。ユーザ端末１３０は、ユーザの暗号鍵情報を保持する。ユーザの暗号鍵情報は、当該ユーザのデータ暗号鍵を特定可能な情報（例えば、当該ユーザの暗号鍵、関数値暗号鍵、及び関数値復号鍵の識別子等）を含む。データ暗号鍵、関数値暗号鍵、関数値復号鍵、乱数用秘密鍵については後述する。【００１８】
鍵サーバ１４０は、ユーザのデータ暗号鍵、関数値暗号鍵、及び関数値復号鍵と、を保持する。ネットワーク１５０は、例えば、インターネットであるが、所定の組織内のネットワーク（例えば、イントラネット）でもよい。【００１９】
検索エンジンサーバ１２０は、非決定性暗号方式を用いて暗号化されたドキュメントの検索インデックス情報を保持する。検索エンジンサーバ１２０は、例えばユーザに指定されたキーワードを含むドキュメントを、後述するインデックス格納部１１３に格納されたインデックスを用いて、検索する。【００２０】
なお、インデックス格納部１１３に格納された検索インデックスに含まれるキーワードは、検索可能暗号処理によって暗号化されている。検索可能暗号処理とは、暗号化したキーワードを含む検索インデックスを生成し、当該検索インデックスに含まれる暗号化されたキーワードを復号することなく、当該検索インデックスを用いたドキュメント検索を実行する、一連の処理である。なお、本実施例における検索可能暗号処理では、非決定性暗号が用いられているものとする。即ち、検索インデックスに登録されるキーワードの暗号化に非決定性暗号が用いられている。また、検索可能暗号処理では、暗号化されたキーワードである暗号キーワードを検索インデックスから検索する際に、ユーザが検索用に指定したキーワードを暗号化した暗号クエリが生成されるが、暗号クエリの生成においても、非決定性暗号が用いられる。本実施例において、例えば、特許文献１に記載の検索可能暗号処理を用いることができる。【００２１】
検索エンジンサーバ１２０は、ユーザに指定されたキーワードを含むドキュメントを検索する際、検索可能暗号処理によって、当該キーワードに対応する暗号クエリを生成する。検索エンジンサーバ１２０は、生成した暗号クエリと、検索インデックスに含まれる暗号キーワードと、を比較することで、暗号クエリの元となったキーワードと同一のキーワードから生成された暗号キーワードを特定して、当該キーワードを含むドキュメントを検索する。【００２２】
検索可能暗号処理における、暗号キーワード生成方法と暗号クエリ生成方法との違いの詳細、暗号キーワードと暗号クエリとの比較処理の詳細、及びドキュメント検索方法の詳細については、後述する。【００２３】
インデックス生成サーバ１１０は、例えば、インデックス生成部１１１、インデックスマージ部１１２、インデックス格納部１１３、及び検索可能暗号化部１１４を含む。インデックス生成部１１１は、暗号化前のドキュメントを用いて、当該ドキュメントを検索するための検索インデックスを生成する。【００２４】
インデックスマージ部１１２は、複数の検索インデックスをマージして、１つの検索インデックスを生成する。インデックス格納部１１３は、１以上の検索インデックスを格納する。検索インデックスそれぞれは、ドキュメント内のキーワードから生成された暗号キーワードと暗号クエリを含む。検索インデックスの詳細については後述する。【００２５】
検索可能暗号化部１１４は、暗号処理を実施する。検索可能暗号化部１１４は、例えば、暗号キーワード生成部１１５、暗号クエリ生成部１１６、及び一致判定部１１７を含む。暗号キーワード生成部１１５は、インデックス生成部１１１がドキュメントから抽出したキーワードそれぞれから、暗号キーワードを生成する。暗号クエリ生成部１１６は、当該キーワードそれぞれから、暗号クエリを生成する。一致判定部１１７は、暗号キーワードと暗号クエリとが、同一のキーワードから生成されたか否かを判定する。【００２６】
図２は、インデックス生成サーバ１１０の物理的な構成例を示すブロック図である。なお、図２には、インデックス生成サーバ１１０の構成を示すが、検索エンジンサーバ１２０、ユーザ端末１３０、及び鍵サーバ１４０も同様の構成を有すればよい。【００２７】
本実施例のインデックス生成サーバ１１０は、プロセッサ（ＣＰＵ）１、メモリ２、補助記憶装置３及び通信インターフェース４を有する計算機によって構成される。【００２８】
プロセッサ１は、メモリ２に格納されたプログラムを実行する。メモリ２は、不揮発性の記憶素子であるＲＯＭ及び揮発性の記憶素子であるＲＡＭを含む。ＲＯＭは、不変のプログラム（例えば、ＢＩＯＳ）などを格納する。ＲＡＭは、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような高速かつ揮発性の記憶素子であり、プロセッサ１が実行するプログラム及びプログラムの実行時に使用されるデータを一時的に格納する。【００２９】
補助記憶装置３は、例えば、磁気記憶装置（ＨＤＤ）、フラッシュメモリ（ＳＳＤ）等の大容量かつ不揮発性の記憶装置によって構成され、プロセッサ１が実行するプログラム及びプログラムの実行時に使用されるデータを格納する。すなわち、プログラムは、補助記憶装置３から読み出されて、メモリ２にロードされて、プロセッサ１によって実行される。【００３０】
通信インターフェース４は、所定のプロトコルに従って、他の装置（検索エンジンサーバ１２０、ユーザ端末１３０、鍵サーバ１４０など）との通信を制御するネットワークインターフェース装置である。【００３１】
インデックス生成サーバ１１０は、入力インターフェース５及び出力インターフェース８を有してもよい。入力インターフェース５は、キーボード６やマウス７などが接続され、オペレータからの入力を受けるインターフェースである。出力インターフェース８は、ディスプレイ装置９やプリンタなどが接続され、プログラムの実行結果をオペレータが視認可能な形式で出力するインターフェースである。【００３２】
プロセッサ１が実行するプログラムは、リムーバブルメディア（ＣＤ−ＲＯＭ、フラッシュメモリなど）又はネットワークを介してインデックス生成サーバ１１０に提供され、非一時的記憶媒体である不揮発性の補助記憶装置３に格納される。このためインデックス生成サーバ１１０は、リムーバブルメディアからデータを読み込むインターフェースを有するとよい。【００３３】
インデックス生成サーバ１１０は、物理的に一つの計算機上で、又は、論理的又は物理的に構成された複数の計算機上で構成される計算機システムであり、同一の計算機上で別個のスレッドで動作してもよく、複数の物理的計算機資源上に構築された仮想計算機上で動作してもよい。【００３４】
図３は、インデックス格納部１１３に格納された検索インデックスのマージ処理の一例を示す説明図である。図３は、インデックス格納部１１３に格納されたマージ対象の検索インデックス３０１及び検索インデックス３０２がマージされて、マージ結果である検索インデックス３０３が生成される例を示す。【００３５】
検索インデックス３０１は、例えば、キーワード辞書３１１とメタデータ３２１とを含む。キーワード辞書３１１は、暗号キーワードと暗号クエリからなる１以上の組み合わせからなる。以下、当該１以上の組み合わせそれぞれを暗号セットと呼ぶ。メタデータ３２１は、各暗号セットに紐づくメタデータを含む。暗号セットに紐づくメタデータは、例えば、当該暗号セットの暗号化される前のキーワードが含まれるドキュメント、当該ドキュメントにおける当該キーワードの出現頻度、及び当該ドキュメントにおける当該キーワードの出現場所を示す情報等を含む。【００３６】
同様に、検索インデックス３０２は、キーワード辞書３１２とメタデータ３２２とを含み、検索インデックス３０３は、キーワード辞書３１２とメタデータ３２２とを含む。例えば、自然数Ｘに対して、図３における「ＥｎｃｋｅｙｗｏｒｄＸ」は、キーワードである「ｋｅｙｗｏｒｄＸ」を暗号化した暗号キーワードであり、「ＥｎｃｑｕｅｒｙＸ」は、「ｋｅｙｗｏｒｄＸ」を暗号化した暗号クエリである。【００３７】
インデックス生成サーバ１１０は、同一のキーワードから生成された暗号セットを特定し、キーワード辞書３１１の暗号セットとメタデータ３２１のメタデータ、及びキーワード辞書３１２の暗号セットとメタデータ３２２とのメタデータを、キーワード辞書３１３及びメタデータ３２３に格納する。【００３８】
なお、同一のキーワードから生成された暗号セットがキーワード辞書３１１及びキーワード辞書３１２に含まれている場合、インデックス生成サーバ１１０は、当該暗号セット及び当該暗号セットそれぞれに紐づくメタデータを集約して検索インデックス３０３に格納する。【００３９】
具体的には、図３の例では、「ｋｅｙｗｏｒｄ１」から生成された「Ｅｎｃｋｅｙｗｏｒｄ１」と「Ｅｎｃｑｕｅｒｙ１」からなる暗号セットがキーワード辞書３１１及びキーワード辞書３１２に含まれている。このときインデックス生成サーバ１１０は、キーワード辞書３１１又はキーワード辞書３１２の「Ｅｎｃｋｅｙｗｏｒｄ１」と、キーワード辞書３１１又はキーワード辞書３１２の「Ｅｎｃｑｕｅｒｙ１」と、からなる暗号セットを、キーワード辞書３１３に格納する。また、インデックス生成サーバ１１０は、キーワード辞書３１１において「Ｅｎｃｋｅｙｗｏｒｄ１」に紐づくメタデータである「ＭｅｔａＡ」と、キーワード辞書３１２において「Ｅｎｃｋｅｙｗｏｒｄ１」に紐づくメタデータである「ＭｅｔａＤ」と、をメタデータ３２３に格納し、キーワード辞書３１３の当該暗号セットと紐づける。【００４０】
なお、前述した通り、暗号キーワードは、非決定性暗号を用いて生成されるため、例えば、キーワード辞書３１１内の「Ｅｎｃｋｅｙｗｏｒｄ１」とキーワード辞書３１２の「Ｅｎｃｋｅｙｗｏｒｄ１」とは互いに異なる値である。同様に、暗号クエリも非決定性暗号を用いて生成されるため、例えば、キーワード辞書３１１内の「Ｅｎｃｑｕｅｒｙ１」とキーワード辞書３１２の「Ｅｎｃｑｕｅｒｙ１」とは互いに異なる値である。これらの暗号セットが同じキーワードから生成されたか否かを判定する処理の詳細については後述する。【００４１】
図４は、ドキュメントの追加又は更新に伴う検索インデックス作成処理の一例を示す。ユーザ端末１３０は、例えばユーザからの指示に従って、検索エンジンサーバ１２０にログインし、ユーザの暗号鍵情報及びドキュメント追加・更新リクエストを検索エンジンサーバ１２０に送信する（Ｓ４０１）。ドキュメント追加・更新リクエストは、ドキュメント内のテキストを特定できるドキュメント情報（例えば、ドキュメントそのもの又はドキュメントのＵＲＬ等）を含む。【００４２】
検索エンジンサーバ１２０は、ドキュメント情報と暗号鍵情報とをインデックス生成部１１１に送信する（Ｓ４０２）。インデックス生成部１１１は、ドキュメント情報が示すドキュメント内のテキストから、暗号化前キーワードとメタデータとを抽出する（Ｓ４０３）。【００４３】
具体的には、インデックス生成部１１１は、例えば、形態素解析又はＮグラム法等のアルゴリズムを用いて、当該テキストから１以上のキーワードを抽出し、さらに抽出したキーワードそれぞれに対応するメタデータを抽出する（Ｓ４０３）。インデックス生成部１１１は、暗号鍵情報と抽出したキーワードとを検索可能暗号化部１１４に送信する（Ｓ４０４）。【００４４】
検索可能暗号化部１１４は、暗号鍵情報を鍵サーバ１４０に送信する（Ｓ４０５）。鍵サーバ１４０は、暗号鍵情報が示すユーザのデータ暗号鍵と関数値暗号鍵と関数値復号鍵と乱数用秘密鍵とを検索可能暗号化部１１４に送信する（Ｓ４０６）。なお、関数値復号鍵は、図４の処理には使用されないため（後述する図９の処理において使用される）、関数値復号鍵のやりとりはステップＳ４０５〜Ｓ４０６において、実施されなくてもよい。【００４５】
検索可能暗号化部１１４は、受信したデータ暗号鍵と抽出したキーワードとを用いて、抽出したキーワードそれぞれに対応する暗号キーワードを生成する（Ｓ４０７）。ステップＳ４０７における暗号キーワード生成処理の詳細は後述する。【００４６】
検索可能暗号化部１１４は、受信したデータ暗号鍵及び関数値暗号鍵と、抽出したキーワードと、を用いて、抽出したキーワードそれぞれに対応する暗号クエリを生成する（Ｓ４０８）。ステップＳ４０８における暗号クエリ生成処理の詳細は後述する。【００４７】
検索可能暗号化部１１４は、抽出したキーワードそれぞれについて、当該キーワードに対応する暗号キーワードと暗号クエリとの組み合わせである暗号セットを生成し、生成した暗号セットからなる暗号キーワード辞書をインデックス生成部１１１に送信する（Ｓ４０９）。なお、検索可能暗号化部１１４は、ステップＳ４０９において、暗号キーワード辞書に含まれる暗号セットそれぞれに対応するキーワードを特定する情報を併せて、インデックス生成部１１１に送信する。【００４８】
インデックス生成部１１１は、同一のキーワードから生成された、暗号キーワード辞書内の暗号セットとメタデータとを対応付けて、暗号キーワード辞書とメタデータとからなる検索インデックスを生成し、生成した検索インデックスをインデックス格納部１１３に格納する（Ｓ４１０）。インデックス生成部１１１は、検索エンジンサーバ１２０に対して、検索インデックス生成完了通知を送信する（Ｓ４１１）。検索エンジンサーバ１２０は、インデックス格納部１１３に格納された検索インデックスを読み込む（Ｓ４１２）。【００４９】
以下、暗号キーワードと暗号クエリの生成処理の一例を説明する。以下では、１つのキーワードから１つの暗号キーワードと１つの暗号クエリを生成する例を説明する。【００５０】
＜暗号キーワードの生成方法＞
ステップＳ４０７における暗号キーワードの生成処理の一例を図６と図７を用いて示す。【００５１】
暗号キーワード生成部１１５は、キーワードを、検索可能暗号化部１１４が処理可能な所定のサイズに分割する。例えば、検索可能暗号化部１１４が共通鍵暗号ＡＥＳを実装している場合、図５Ｂに示すように、暗号キーワード生成部１１５はキーワードをＭ１、Ｍ２、……Ｍｎの１２８ビット毎のブロックに分割する。【００５２】
暗号キーワード生成部１１５は、所定の初期ベクトルとデータ暗号鍵とを用いて、分割されたキーワードそれぞれを暗号化した、中間暗号キーワードの各ブロックＣ１、Ｃ２、……Ｃｎを生成する。【００５３】
暗号キーワード生成部１１５は、中間暗号キーワードの各ブロックの作成において、中間暗号キーワードの生成済のブロックを利用し、当該ブロックを作成する。暗号キーワード生成部１１５は、例えば、図５Ｂに示すように中間暗号化キーワードの生成済のブロックとキーワードのブロックとの排他的論理和（ｘｏｒ算）を計算したデータを暗号化し、次の中間暗号キーワードを作成する。従って、ブロックＭｎに対応する中間暗号化キーワードのブロックＣｎには、ブロックＭｎの内容だけでなく、他のブロックＭ１、Ｍ２、…、Ｍｎ−１の内容も反映されている。【００５４】
暗号キーワード生成部１１５は、中間暗号キーワードの各ブロックに対する乱数を生成する。具体的には、例えば、暗号キーワード生成部１１５は、擬似乱数生成器を用いて中間暗号キーワードのｎ個のブロックそれぞれに対する乱数を生成する。インデックス生成サーバ１１０は、例えば、擬似乱数生成器を予め保持している。【００５５】
例えば、図５Ａに示すように、暗号キーワード生成部１１５は、初期ベクトルと定数を連結したデータを、乱数用秘密鍵Ｋ２とともに擬似乱数生成器（ＲＮＧ）に入力し、１２８ビット毎のｎ個分の乱数Ｒ１、Ｒ２、……Ｒｎを生成する。【００５６】
暗号キーワード生成部１１５は、所定の準同型関数にｎ個目の乱数Ｒｎを入力し、出力されたデータを関数値Ｘとして取得する。例えば、図７に示すように、暗号キーワード生成部１１５は、１２８ビットの乱数を当該準同型関数に入力し、９６ビットの関数値を得る。【００５７】
なお、準同型関数Ｆとは、入力変数ｘ、入力変数ｙに対し、以下の数１が成り立つ関数を指す。
（数１）              Ｆ（ｘ・ｙ）＝Ｆ（ｘ）？Ｆ（ｙ）【００５８】
ただし、「・」と「？」は、二項演算の演算記号を表わし、加算用の演算記号＋、乗算用の演算記号＊、ビット毎の排他的論理和であるＸＯＲ（ｅＸｃｌｕｓｉｖｅ  ＯＲ）演算用の演算記号ｘｏｒ等が入る。このとき、数１において、「・」と「？」にＸＯＲ演算記号ｘｏｒが入る場合、以下の数２が成り立つ。
（数２）              Ｆ（ｘ  ｘｏｒ  ｙ）＝Ｆ（ｘ）ｘｏｒ  Ｆ（ｙ）【００５９】
暗号キーワード生成部１１５は、関数値Ｘに対し所定の不可逆変換を実行し、不可逆変換実行後の値を不可逆変換値Ｈとして取得する。例えば、当該不可逆変換がハッシュ関数ＳＨＡ２５６である場合、暗号キーワード生成部１１５は、９６ビットの関数値Ｘを２５６ビットのハッシュ値（不可逆変換値）に変換する。【００６０】
例えば、図６に示すように、暗号キーワード生成部１１５は、２５６ビットのハッシュ値のうち、最下位３２ビットを抽出し、暗号キーワード用の検索タグＤｎ＋１を得る。その結果、元のデータよりもデータサイズが小さい検索用のデータが得られる。【００６１】
暗号キーワード生成部１１５は、不可逆変換値Ｈから、所定のタグ長が示すビット長を暗号キーワード用の検索タグＤｎ＋１として取得する。例えば、図６に示すように、２５６ビットのハッシュ値のうち、最下位３２ビットを暗号キーワード生成部１１５が抽出し、照合データＤ'ｎ＋１を得る。なお、不可逆変換値Ｈから、抽出するビットは最下位ビットからに限らず、最上位ビットから抽出してもよく、既定のビットを抽出、あるいはランダムに各ビットを抽出してもよい。また、選択するビット長も任意である。【００６２】
暗号キーワード生成部１１５は、中間暗号キーワードのｎ個のブロックと乱数とに対して、以下の数１に示すように、それぞれの排他的論理和（ＸＯＲ算）を計算し、出力結果Ｄ１、Ｄ２、……Ｄｎを暗号文本体（即ち、暗号化されたキーワードに相当する部分）として取得する。
（数３）          Ｄｉ＝Ｃｉ  ｘｏｒ  Ｒｉ（ｉ＝１、・・・ｎ）【００６３】
暗号キーワード生成部１１５は、初期ベクトルとＤ１、Ｄ２、……Ｄｎからなる暗号文本体と、検察タグＤｎ＋１を連結し、これを暗号キーワードに決定する。【００６４】
なお、上記の秘匿データを作成する手順は、必ずしも上記に記述された通りの順序で処理する必要はなく、異なる順序で実施してもよい。【００６５】
＜暗号クエリの生成方法＞
ステップＳ４０７における暗号化クエリ生成処理の一例を、図７を用いて示す。【００６６】
暗号クエリ生成部１１６は、キーワードを取得し、検索可能暗号化部１１４が処理可能な所定のサイズに分割する。暗号クエリ生成部１１６は、例えば、図５Ｂの例におけるキーワードの分割と同様、１２８ビット毎にキーワードをＭ１、Ｍ２、……Ｍｎに分割する。【００６７】
暗号クエリ生成部１１６は、所定の初期ベクトルとデータ暗号鍵とを用いて、分割されたキーワードそれぞれを暗号化することにより、ｎ個のブロックＣ１、Ｃ２、……Ｃｎからなる中間暗号クエリを生成する。【００６８】
暗号クエリ生成部１１６は、暗号キーワードの生成時と同様に、中間暗号クエリの作成済のブロックを利用し、次の中間暗号クエリのブロックを作成する。例えば、図５Ｂに示すように、暗号クエリ生成部１１６は、中間暗号クエリの作成済のブロックとキーワードのブロックをｘｏｒしたデータを暗号化し、次の中間暗号クエリのブロックを作成する。【００６９】
暗号クエリ生成部１１６は、例えば、擬似乱数生成器に初期ベクトル（Ｗ０）と乱数用秘密鍵（Ｋ２）を入力し、ｎ番目の中間暗号クエリのブロックＣｎとのｘｏｒに用いる１個分の乱数Ｒ'ｎを生成する。【００７０】
暗号クエリ生成部１１６は、準同型関数に乱数Ｒ'ｎを入力し、出力されたデータを関数値Ｘとして取得する。当該準同型関数は、例えば、暗号キーワードの生成に用いた準同型関数と同じである必要がある。暗号クエリ生成部１１６は、例えば、図７に示すように、１２８ビットの乱数Ｒ'ｎを当該準同型関数に入力し、９６ビットの関数値Ｘを得る。【００７１】
暗号クエリ生成部１１６は、関数値暗号鍵（Ｋ３）を用いて関数値Ｘを暗号化することにより得られたデータを、暗号クエリ用の検索タグＷｎ＋１として取得する。例えば、図７に示すように、暗号クエリ生成部１１６は９６ビットの関数値Ｘを関数値暗号鍵（Ｋ３）と初期ベクトル（Ｗ０）を用いて暗号化することにより、１２８ビットの暗号文を出力し、それを暗号クエリ用の検索タグＷｎ＋１とする。【００７２】
暗号クエリ生成部１１６は、中間暗号化キーワードのｎ個目のブロックＣｎと乱数Ｒ'ｎとの排他的論理和（ＸＯＲ算）を計算し、出力結果Ｗｎをクエリ用に暗号化された暗号文本体として取得する。【００７３】
暗号クエリ生成部１１６は、初期ベクトルＷ０、暗号文本体Ｗｎ、及び暗号クエリ用の検察タグＷｎ＋１を連結し、これを暗号クエリに決定する。なお、上記の暗号クエリを作成する手順は、必ずしも上記に記述された通りの順序で処理する必要はなく、異なる順序で実施してもよい。【００７４】
図８は、複数の検索インデックスのマージ処理の一例を示す。まず検索エンジンサーバ１２０は、所定のポリシーに従って、インデックス格納部１１３に格納された検索インデックスから、マージ対象の複数の検索インデックスを選定する（Ｓ８０１）。【００７５】
具体的には、検索エンジンサーバ１２０は、例えば、インデックス格納部１１３に格納された検索インデックスが所定数以上であると判定した場合、前回のマージ処理から所定時間が経過した場合、又は検索エンジンサーバ１２０の管理者が直接サーバにインデックスマージを指示した場合、にステップＳ８０１の処理を開始する。また、検索エンジンサーバ１２０は、新たな検索インデックスが生成されたと判定した場合にステップＳ８０１の処理を開始してもよい。【００７６】
また、検索エンジンサーバ１２０は、例えば、インデックス格納部１１３に格納された全ての検索インデックスをマージ対象に選定する。また、例えば、検索エンジンサーバ１２０は、選定した複数の検索インデックスのキーワード辞書に含まれる暗号キーワードの合計数が所定数以上となるように、複数の検索インデックスをマージ対象に選定してもよい。【００７７】
続いて、検索エンジンサーバ１２０は、選定したマージ対象の検索インデックスを示す情報をインデックスマージ部１１２に送信する（Ｓ８０２）。インデックスマージ部１１２は、受信した情報が示すマージ対象の検索インデックスをインデックス格納部１１３から取得し、取得した検索インデックスのキーワード辞書を検索可能暗号化部１１４に送信する（Ｓ８０３）。【００７８】
一致判定部１１７は、受信したキーワード辞書に含まれる暗号セットから、同じキーワードから生成された暗号セットを特定する（Ｓ８０４）。なお、一致判定部１１７は、第１暗号セットに含まれる第１暗号キーワードと、第２暗号セットに含まれる暗号クエリと、を比較することにより、第１暗号セット対応する暗号化前キーワードと第２暗号セットに対応する暗号化前キーワードとが一致するか否かを判定する。【００７９】
例えば、一致判定部１１７は、受信したキーワード辞書に含まれる全ての暗号セットについて、当該暗号セットが属していない他のキーワード辞書に含まれる暗号セットと当該比較処理を行うことにより、ステップＳ８０４の処理を実行する。なお、当該比較処理の詳細については後述する。【００８０】
一致判定部１１７は、ステップＳ８０４における判定結果をインデックスマージ部１１２に送信する（Ｓ８０５）。インデックスマージ部１１２は、受信した判定結果に基づいて、マージ対象の検索インデックスをマージしてマージ結果である１つの検索インデックスを生成し、生成した検索インデックスをインデックス格納部１１３に格納し、マージ対象の検索インデックスをインデックス格納部１１３から削除する（Ｓ８０６）。【００８１】
ステップＳ８０６のマージ処理について説明する。インデックスマージ部１１２は、判定結果を参照して、同じキーワードから生成された暗号セットからなる暗号セット群を特定し、各暗号セット群に対して以下の処理を行う。【００８２】
インデックスマージ部１１２は、１つの暗号セットからなる暗号セット群に対して、当該１つの暗号セットをマージ結果のインデックス辞書に格納し、当該１つの暗号セットに紐づくマージ対象のメタデータをマージ結果のメタデータに格納し、マージ結果において当該暗号セットと当該メタデータとを紐づける。【００８３】
図３の例では、「ｋｅｙｗｏｒｄ２」から生成された「Ｅｎｃｋｅｙｗｏｒｄ２」と「Ｅｎｃｑｕｅｒｙ２」とからなる暗号セットは検索インデックス３０１にのみ含まれる、即ち「ｋｅｙｗｏｒｄ２」から生成された暗号セットは１つであるため、当該暗号セットと当該暗号セットに紐づくメタデータである「ＭｅｔａＢ」は、そのまま検索インデックス３０３に格納される。【００８４】
インデックスマージ部１１２は、複数の暗号セットからなる暗号セット群に対して、例えば、当該複数の暗号セットからランダムに選択した暗号キーワードと暗号クエリとからなる暗号セットを、マージ結果のキーワード辞書に格納する。また、インデックスマージ部１１２は、当該複数の暗号セットそれぞれに紐づくメタデータを取得し、取得したメタデータをマージ結果のメタデータに格納する。インデックスマージ部１１２は、マージ結果において、当該１つの暗号セットと、当該メタデータとを紐づける。【００８５】
図３の例では、検索インデックス３０１及び検索インデックス３０２それぞれが、「ｋｅｙｗｏｒｄ１」から生成された暗号セットを含んでいる。従って、インデックスマージ部１１２は、当該暗号セットからランダムに選択した暗号キーワードと暗号クエリとからなる暗号セットを、検索インデックス３０３のキーワード辞書に格納する。また、インデックスマージ部１１２は、検索インデックス３０１において当該暗号セットに紐づくメタデータである「ＭｅｔａＡ」と、検索インデックス３０２において当該暗号セットに紐づくメタデータである「ＭｅｔａＤ」と、を検索インデックス３０３のメタデータに格納し、検索インデックス３０３において、当該暗号セットと当該メタデータとを紐づける。【００８６】
続いて、インデックスマージ部１１２は、検索エンジンサーバ１２０に対して、検索インデックスマージ完了通知を送信する（Ｓ８０７）。検索エンジンサーバ１２０は、インデックス格納部１１３に格納された検索インデックスを読み込む（Ｓ８０８）。【００８７】
以下、一致判定部１１７による、ステップＳ８０４における暗号セットの比較処理の一例を、図９を用いて示す。具体的には、一致判定部１１７が、第１暗号セットに含まれる第１暗号キーワードと、第２暗号セットに含まれる第２クエリとを比較して、第１暗号セットと第２暗号セットが同一のキーワードから生成されたか否かを判定する処理の一例を示す。【００８８】
ステップＳ４０５〜Ｓ４０６においてインデックス生成サーバ１１０が関数値復号鍵を取得していない場合、一致判定部１１７は、第２暗号セットが含まれる検索インデックスのユーザの関数値復号鍵を、鍵サーバ１４０から取得する。【００８９】
一致判定部１１７は、第１暗号キーワードにおける暗号文本体を取得し、暗号キーワード生成部１１５が処理したサイズに分割されたブロックのうち、ｎ番目のブロックを取り出す。一致判定部１１７は、例えば、第１暗号キーワードＤをＤ０、Ｄ１、Ｄ２、……Ｄｎ、Ｄｎ＋１と分割されたブロックの集合とみなし、データＤｎを取り出す。【００９０】
一致判定部１１７は、第２暗号クエリにおける暗号文本体を取得する。一致判定部１１７は、例えば、第２暗号クエリＷをＷ０、Ｗｎ、Ｗｎ＋１と３分割されたブロックの集合とみなし、２番目のデータＷｎを取り出す。【００９１】
一致判定部１１７は、第１暗号キーワードの暗号文本体に含まれるブロックＤｎと第２暗号クエリの暗号文本体Ｗｎとの排他的論理和（ＸＯＲ算）を、下記の数４に従って計算する。
（数４）  Ｄｎ  ｘｏｒ  Ｗｎ＝（Ｃｎ  ｘｏｒ  Ｒｎ）ｘｏｒ（Ｃｎ  ｘｏｒ  Ｒ'ｎ）【００９２】
ここで、第１暗号キーワードの暗号化前のキーワードと、第２暗号クエリの暗号化前のキーワードの値が同じである場合、それらを暗号化した中間暗号キーワードと中間暗号クエリの値が等しいため、以下の数５が導ける。
（¬（Ａ  ｘｏｒ  Ｂ）＝Ａ・Ｂ＋¬Ａ・¬Ｂより、但し¬は否定又は補集合）
（数５）      Ｄｎ  ｘｏｒ  Ｗｎ  ＝  Ｒｎ  ｘｏｒ  Ｒ'ｎ
即ち、乱数（ＲｎとＲ'ｎ）の情報のみが数５に残される。【００９３】
一致判定部１１７は、当該排他的論理和の計算結果を準同型関数に入力し、関数値Ｙを取得する。なお、例えば、当該準同型関数は、図６の暗号キーワード生成処理及び図７の暗号クエリの生成処理に用いられた準同型関数と同じである必要がある。【００９４】
例えば、図９に示すように、一致判定部１１７は、第１暗号キーワードの暗号文本体のｎ番目の１２８ビットのブロックＤｎと、第２暗号クエリの１２８ビットの暗号文本体との排他的論理和（ＸＯＲ）を、準同型関数に入力し、以下の数６に示すように、例えば９６ビットの関数値Ｙを得る。
（数６）    Ｙ＝Ｆ（Ｄｎ  ｘｏｒ  Ｗｎ）
数５が成り立つ場合、数６から以下の数７が導ける。
（数７）    Ｙ＝Ｆ（Ｒｎ  ｘｏｒ  Ｒ'ｎ）【００９５】
一致判定部１１７は、第２暗号クエリの検索タグを取得する。一致判定部１１７は、例えば、第２暗号クエリＷをＷ０、Ｗｎ、Ｗｎ＋１と３分割されたブロックの集合とみなし、３番目のデータＷｎ＋１を取り出す。【００９６】
一致判定部１１７は、第２暗号セットに対応するユーザの関数値復号鍵を用いて第２暗号クエリの検索タグＷｎ＋１を復号し、復号結果である関数値Ｘを取得する。関数値Ｘは、乱数Ｒｎと数２における準同型関数Ｆを用い、以下の数８で表わされる。
（数８）      Ｘ＝Ｆ（Ｒｎ）【００９７】
一致判定部１１７は、関数値Ｘと関数値Ｙの排他的論理和（ＸＯＲ算）を計算し、計算結果である関数値Ｚを取得する。関数値Ｚに対しては以下に示す数９が成り立つ。
（Ａ  ｘｏｒ  （Ａ  ｘｏｒ  Ｂ）＝Ａ・¬（Ａ  ｘｏｒ  Ｂ）＋¬Ａ・（Ａ  ｘｏｒ  Ｂ）＝Ａ・Ｂ＋¬Ａ・Ｂ＝Ｂより、データ（Ｂ）に他のデータ（Ａ）による排他的論理和の演算を２度施すと元のデータ（Ｂ）が得られる）
（数９）
Ｚ＝  Ｘ  ｘｏｒ  Ｙ
＝  Ｆ（Ｒｎ）ｘｏｒ（Ｆ（Ｒｎ  ｘｏｒ  Ｒ'ｎ））
＝  Ｆ（Ｒｎ）ｘｏｒ（Ｆ（Ｒｎ）ｘｏｒ  Ｆ（Ｒ'ｎ））  （数２より）
＝  Ｆ（Ｒ'ｎ）【００９８】
一致判定部１１７は、関数値Ｚに不可逆変換を実行し、実行結果である不可逆変換値Ｈとして取得する。なお、当該不可逆変換は、例えば、図６の暗号キーワード生成処理に用いられた不可逆変換と同一である必要がある。例えば、図９に示すように、当該不可逆変換がハッシュ関数ＳＨＡ２５６である場合、９６ビットの関数値Ｘと関数値Ｙの排他的論理和の値を２５６ビットのハッシュ値（不可逆変換値）に変換する。【００９９】
一致判定部１１７は、不可逆変換値Ｈから、図６の暗号キーワード生成処理における所定のタグ長が示すビット長を照合データＤとして取得する。一致判定部１１７は、例えば、図９に示すように、２５６ビットのハッシュ値のうち、最下位３２ビットを抽出し、照合データＤ'ｎ＋１を得る。なお、不可逆変換値Ｈから、抽出するビットは最下位ビットからに限らず、最上位ビットから抽出してもよく、既定のビットを抽出、あるいはランダムに各ビットを抽出してもよい。また、選択するビット長も任意である。【０１００】
一致判定部１１７は、第１暗号キーワードの検索タグを取得する。一致判定部１１７は、例えば、第１暗号キーワードＤにおけるデータＤｎ＋１を取り出す。【０１０１】
一致判定部１１７は、照合データＤと第１暗号キーワードの検索タグとを比較、同一であれば、第１暗号セットと第２暗号セットが同一のキーワードから生成されたと判定し、同一でなければ、第１暗号セットと第２暗号セットは異なるキーワードから生成されたと判定する。【０１０２】
一致判定部１１７は、例えば、図９に示すように、第１暗号キーワードの検索タグＤｎ＋１と照合データＤ'ｎ＋１を比較し、同一であれば、第１暗号セットと第２暗号セットが同一のキーワードから生成されたと判定し、同一でなければ、第１暗号セットと第２暗号セットは異なるキーワードから生成されたと判定する。なお、一致判定部１１７は、例えば、特許文献１に記載の誤検索の検知をさらに実施することにより、同一のキーワードから生成されたと誤って判定されてしまった暗号セットの組み合わせを特定し、特定した組み合わせにおける一致判定の結果を変更してもよい。【０１０３】
上記処理によって、一致判定部１１７は、第１暗号セット及び第２暗号セットに含まれる暗号キーワード及び暗号クエリを復号することなく、第１暗号セットと第２暗号セットが同一のキーワードから生成されたか否かを判定することができる。なお、上記の秘匿データを検索する手順は、必ずしも上記に記述された通りの順序で処理する必要はなく、異なる順序で実施してもよい。【０１０４】
以上、本実施例の全文検索システム１００は、複数の検索インデックスに含まれる暗号キーワードを復号することなく、当該複数の検索インデックスをマージすることができる。ひいては、本実施例の全文検索システム１００は、セキュリティを確保しつつ、検索処理速度等の検索性能を維持することができる。【０１０５】
なお、本実施例の暗号セットそれぞれは暗号キーワードと暗号クエリとを含むが、暗号クエリの代わりに、復号せずに暗号キーワードと比較して平文が一致することが判定可能な他の暗号文を含んでもよい。【０１０６】
以下、本実施例のドキュメント検索処理の一例を説明する。検索エンジンサーバ１２０は、ユーザ端末１３０から、検索クエリを受信する。検索エンジンサーバ１２０は、検索クエリをインデックス生成サーバ１１０に送信する。暗号クエリ生成部１１６は、ステップＳ４０８の方法を用いて、検索クエリから暗号クエリを生成する。【０１０７】
一致判定部１１７は、暗号クエリ生成部１１６が生成した暗号クエリと、インデックス格納部１１３に含まれる検索インデックスの暗号キーワードそれぞれと、の一致判定（Ｓ８０４）を実施する。つまり、一致判定部１１７は、検索エンジンサーバ１２０が受け付けた検索クエリと同一のキーワードから生成された暗号キーワードを特定する。【０１０８】
一致判定部１１７は、特定した暗号キーワードを示す情報を、検索エンジンサーバ１２０に送信する。検索エンジンサーバ１２０は、読み込み済みの検索インデックスから、当該情報が示す暗号キーワードに紐づくメタデータを抽出し、抽出したメタデータ及び／又は抽出したメタデータが示すドキュメントをユーザ端末１３０に送信する。
【実施例２】
【０１０９】
以下の実施例においては、実施例１と同様の構成及び処理についての説明を省略し、実施例１との相違点を説明する。本実施例のインデックス生成サーバ１１０は、マージ結果である検索インデックスのキーワード辞書に暗号クエリを含めない。【０１１０】
図１０は、本実施例の検索インデックスのマージ処理の一例を示す説明図である。実施例１（図３）との相違点は、検索インデックス３０１及び検索インデックス３０３がメインインデックスである点である。【０１１１】
メインインデックスとは、キーワード辞書が暗号クエリを含まない検索インデックスである。つまり、メインインデックスにおける各暗号セットは、暗号キーワードのみからなる。また、検索インデックス３０２はサブインデックスである。サブインデックスとは、キーワード辞書が暗号クエリを含む検索インデックスである。つまり、実施例１で説明した検索インデックスはサブインデックスである。【０１１２】
一致判定部１１７は、暗号キーワードと暗号クエリとを比較することにより、暗号セットが同一のキーワードから生成されたか否かを判定するため、インデックス生成サーバ１１０は、メインインデックスとサブインデックスとの間のマージ処理を実施例１と同様の方法で実施することができる。インデックスマージ部１１２は、例えば、ステップＳ８０６において、マージ結果の検索インデックスに、暗号クエリを含めないことにより、メインインデックスであるマージ結果を生成する。【０１１３】
なお、図１０は、メインインデックスとサブインデックスとがマージされてメインインデックスが生成される例を示しているが、サブインデックス同士がマージされてメインインデックスが生成されてもよい。【０１１４】
なお、メインインデックスの各暗号セットは暗号キーワードしか含まないため、一致判定部１１７は、メインインデックス間で暗号キーワードが同一のキーワードから生成されたか否かを判定することができない。つまり、インデックス生成サーバ１１０は、メインインデックス間のマージ処理を実行することができない。従って、ステップＳ８０１において検索エンジンサーバ１２０は、メインインデックスを１つだけ含む、又はメインインデックスを１つも含まないように、マージ対象の複数の検索インデックスを選定する。【０１１５】
また、例えば、検索エンジンサーバ１２０は、ステップＳ８０１において、所定数以上のサブインデックスがインデックス格納部１１３に格納されていると判定した場合に、マージ対象の複数の検索インデックスを選定してもよい。【０１１６】
以上、また、本実施例のインデックス生成サーバ１１０は、メインインデックスとサブインデックスとの間においても、それぞれに含まれる暗号キーワードを復号することなく、マージ処理を実行することができる。【０１１７】
さらに、メインインデックスは暗号クエリを含まないため、復号鍵を用いない限り、複数のメインインデックス間で、同一のキーワードから生成された暗号キーワードが存在するか否かを判定することができない。つまり、本実施例のインデックス生成サーバ１１０は、マージ処理によってメインインデックスを生成することにより、より強固なセキュリティを確保することができる。
【実施例３】
【０１１８】
図１１は、本実施例の全文検索システムの全体の構成例を示すブロック図である。以下、実施例１との全文検索システムの全体構成との違いを説明する。ユーザ端末１３０は、インデックス生成部１３１と、検索可能暗号化部１３２とを含む。検索可能暗号化部１３２は、暗号キーワード生成部１３３と暗号クエリ生成部１３４とを含む。インデックス生成部１３１、暗号キーワード生成部１３３、及び暗号クエリ生成部１３４の説明は、それぞれインデックス生成部１１１、暗号キーワード生成部１１５、及び暗号クエリ生成部１１６の説明と同様であるため、省略する。【０１１９】
本実施例は、インデックス生成サーバ１１０がインデックス生成部１１１を含まない点、及びインデックス生成サーバ１１０の検索可能暗号化部１１４が暗号キーワード生成部１１５と暗号クエリ生成部１１６とを含まない点、において実施例１と異なる。つまり、本実施例では、インデックス生成サーバ１１０ではなく、ユーザ端末１３０がインデックスの生成を行う。【０１２０】
以下、図４の処理の相違点を説明する。実施例１で説明した図４におけるインデックス生成部１１１による処理は、インデックス生成部１３１によって実行される。実施例１で説明した図４における検索可能暗号化部１１４による処理は、検索可能暗号化部１３２によって実行される。また、ステップＳ４０１において、インデックス生成部１３１は、ドキュメント追加・更新リクエストを受け付け、ユーザ端末１３０が保持するユーザの暗号鍵情報を取得する。【０１２１】
また、ステップＳ４０２の処理は実行されない。また、インデックス生成部１３１は、ステップＳ４１０で生成したインデックスをインデックス生成サーバ１１０に送信し、インデックス生成サーバ１１０は受信したインデックス格納部１１３に格納する。その後、インデックス生成サーバ１１０がステップＳ４１１の処理を行う。【０１２２】
以上、本実施例では、ユーザ端末１３０がインデックスを生成するため、インデックス生成サーバ１１０がユーザのデータ暗号鍵及び関数値暗号鍵を取得する必要がないため、より強固なセキュリティを確保することができる。【０１２３】
また、実施例２に本実施例を適用した例を説明する。図４において、インデックス生成部１３１が生成するサブインデックスである。インデックス生成サーバ１１０は、例えばサブインデックスを受信する度にマージ処理を実行すれば、メインインデックスを保持する時間を短縮することができ、さらに強固なセキュリティを確保することができる。【０１２４】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることも可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。【０１２５】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、または、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置くことができる。【０１２６】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
【図１】
0006672451.tif 000002
【図２】
0006672451.tif 000003
【図３】
0006672451.tif 000004
【図４】
0006672451.tif 000005
【図５Ａ】
0006672451.tif 000006
【図５Ｂ】
0006672451.tif 000007
【図６】
0006672451.tif 000008
【図７】
0006672451.tif 000009
【図８】
0006672451.tif 000010
【図９】
0006672451.tif 000011
【図１０】
0006672451.tif 000012
【図１１】
0006672451.tif 000013