(57)【要約】【課題】サーバ／クライアントモデルにおいて、利用者側の負荷をかけずに暗号化データの機密性を維持したまま、ある秘密鍵に対応する暗号化データを別の秘密鍵に対応する暗号化データに変換する。【解決手段】登録クライアントと管理サーバとがネットワークを介して接続された検索可能暗号処理システムにおいて、登録クライアントは、平文データを暗号化するための第一の秘密鍵と、新たに平文データを暗号化するための第二の秘密鍵との差分に基づいて、第一の秘密鍵により暗号化された秘匿データを第二の秘密鍵により更新するための差分鍵マスクを生成する登録クライアント処理部、を備える。【選択図】  図１２
2017044779.tif 000002
【特許請求の範囲】
【請求項１】
登録クライアントと管理サーバとがネットワークを介して接続された検索可能暗号処理システムにおいて、
前記登録クライアントは、平文データを暗号化するための第一の秘密鍵と、新たに前記平文データを暗号化するための第二の秘密鍵との差分に基づいて、前記第一の秘密鍵により暗号化された秘匿データを前記第二の秘密鍵により更新するための差分鍵マスクを生成する登録クライアント処理部、
を備えることを特徴とする検索可能暗号処理システム。
【請求項２】
前記登録クライアントは、
所定のアルゴリズムにしたがって前記第二の秘密鍵を生成する鍵生成部、を備え、
前記管理サーバは、
前記第二の秘密鍵により前記秘匿データを更新するサーバ処理部、を備え、
前記登録クライアント処理部は、前記秘匿データを更新した前記第二の秘密鍵を新たな前記第一の秘密鍵とする、
ことを特徴とする請求項１に記載の検索可能暗号処理システム。
【請求項３】
前記管理サーバは、
前記サーバ処理部が、前記秘匿データと前記差分鍵マスクとの差分から得られた前記第二の秘密鍵により前記秘匿データを更新する、
ことを特徴とする請求項２に記載の検索可能暗号処理システム。
【請求項４】
前記管理サーバは、
前記サーバ処理部が、前記秘匿データに含まれる暗号化データ本体のサイズを算出し、前記登録クライアントにより生成された新たな差分鍵マスクと前記秘匿データとの差分により得られた前記第二の秘密鍵により前記秘匿データを更新し、
前記登録クライアントは、
前記登録クライアント処理部が、少なくとも前記サイズ以上となる前記差分鍵マスクを前記新たな差分鍵マスクとして生成する、
ことを特徴とする請求項３に記載の検索可能暗号処理システム。
【請求項５】
前記登録クライアントは、
第一の鍵マスク生成鍵と第一の鍵マスク用ノンスと擬似乱数発生部とに基づいて前記第一の秘密鍵を生成し、第二の鍵マスク生成鍵と第二の鍵マスク用ノンスと擬似乱数発生部とに基づいて前記第二の秘密鍵を生成する鍵生成部、を備え、
前記登録クライアント処理部は、前記鍵生成部により生成された前記第一の秘密鍵と前記第二の秘密鍵との差分に基づいて、前記差分鍵マスクを生成する、
ことを特徴とする請求項１に記載の検索可能暗号処理システム。
【請求項６】
前記検索可能暗号処理システムは、ネットワークを介して前記管理サーバに接続された検索クライアントを備え、
前記検索クライアントは、
平文キーワードと、前記平文キーワードを暗号化するための第一の検索用秘密鍵とに基づいて、秘匿キーワードを生成する検索クライアント処理部、を備え
前記管理サーバは、
前記管理サーバ処理部が、前記秘匿キーワードと前記秘匿データとの差分に基づいて得られたデータと、前記秘匿データとが一致するか否かを判定することにより、暗号化したまま前記秘匿データを検索する、
ことを特徴とする請求項１に記載の検索可能暗号処理システム。
【請求項７】
前記検索クライアントは、
前記検索クライアント処理部が、前記第一の検索用秘密鍵と、新たに前記平文キーワードを暗号化するための第二の検索用秘密鍵との差分に基づいて、前記第一の検索用秘密鍵により暗号化された秘匿キーワードを前記第二の検索用秘密鍵により更新するための検索用差分鍵マスクを生成する、
を備えることを特徴とする請求項６に記載の検索可能暗号処理システム。
【請求項８】
前記管理サーバは、
前記サーバ処理部が、前記秘匿キーワードと前記検索用差分鍵マスクとの差分から得られた前記第二の検索用秘密鍵により前記秘匿キーワードを更新する、
ことを特徴とする請求項７に記載の検索可能暗号処理システム。
【請求項９】
前記管理サーバは、ネットワークを介して複数の前記検索クライアントに接続され、
前記管理サーバ処理部は、前記検索クライアントに対応する前記第一の検索用秘密鍵ごとに、前記検索用差分鍵マスクを生成する、
ことを特徴とする請求項７に記載の検索可能暗号処理システム。
【請求項１０】
前記管理サーバは、
前記サーバ処理部が、それぞれの前記検索クライアントについて、生成された前記秘匿キーワードと前記検索用差分鍵マスクとの差分から得られた前記第二の検索用秘密鍵により前記秘匿キーワードを更新する、
を備えることを特徴とする請求項９に記載の検索可能暗号処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、検索可能暗号処理システムに関する。
【背景技術】
【０００２】
情報システムの開発・運用管理費の効率化を目的に、近年、情報システムを自組織が維持するのではなく、他組織が提供する情報システムを利用する、クラウドと呼ばれる運用管理形態が脚光を浴びている。一方、クラウドにおいては、情報システムを管理する組織が、情報システムを利用する組織とは異なるため、情報漏えい等を防止する策や、事故発生後の原因究明、再発防止策等が自組織だけでは立てにくい。そのため、事前に、データの不正流出の予防策として、暗号技術を活用し、データの機密性を確保する必要がある。
【０００３】
サーバ／クライアントモデルにおいて、クライアントが、サーバにデータを預託しながら、サーバに対し、預託したデータの情報漏洩を防ぐ技術として、暗号技術を利用した方式が知られている。例えば、特許文献１には、クライアントの要求に従って、暗号化データを復号せずに、預託された暗号化データを検索する、検索処理方式が記載されている。この検索処理方式は、平文と暗号文が一対一の単純な対応関係を有する決定的暗号化方式よりも安全な、平文と暗号文が一対ｍの複雑な対応関係を有する確率的暗号化方式を採用しており、サーバ管理者への情報漏洩を防ぎながら、かつサーバに預託したデータを安全に検索するための技術が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】国際公開ＷＯ２０１２／０７７５４１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１に記載された技術では、秘密鍵の更新が容易ではない。図２を用いて説明する。図２の上側の図が示すように、秘密鍵を共有する複数の利用者が管理サーバの暗号文を検索可能な状態から、図２の下側の図が示すように、ある利用者だけを管理サーバの暗号文を検索可能な状態に変更したい場合、全員が共有する古い秘密鍵は失効させ、特定の利用者だけが保有する新しい秘密鍵のみが有効にする必要がある。その場合、管理サーバが保存する古い秘密鍵で暗号化した暗号文を、新しい秘密鍵で暗号化した暗号文に変更する必要がある。
【０００６】
しかし、検索可能暗号では、管理サーバが保有する暗号文は直接的には変更できないため、利用者は管理サーバに秘密鍵を渡す必要がある。しかしながら、管理サーバに秘密鍵を渡してしまうと、平文情報が露呈し、暗号化データの機密性が維持できない。そのため、復号なしで暗号文を変更するには、管理サーバ上の全ての暗号化データを、利用者がいったんダウンロードし、全ての暗号化データの復号、新たな秘密鍵で再暗号化をした上で、管理サーバに再アップロードする必要があった。このフローは暗復号化にかかる計算量がサーバに預けた暗号化データの量に比例しているため、利用者側の負荷が大きい、という欠点がある。
【０００７】
本発明は、上記に鑑みてなされたものであって、サーバ／クライアントモデルにおいて、利用者側の負荷をかけずに暗号化データの機密性を維持したまま、ある秘密鍵に対応する暗号化データを別の秘密鍵に対応する暗号化データに変換することが可能な検索可能暗号処理システムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
前記課題を解決し、目的を達成するために、本発明にかかる検索可能暗号処理システムは、登録クライアントと管理サーバとがネットワークを介して接続された検索可能暗号処理システムにおいて、前記登録クライアントは、平文データを暗号化するための第一の秘密鍵と、新たに前記平文データを暗号化するための第二の秘密鍵との差分に基づいて、前記第一の秘密鍵により暗号化された秘匿データを前記第二の秘密鍵により更新するための差分鍵マスクを生成する登録クライアント処理部、を備えることを特徴とする検索可能暗号処理システムとして構成される。
【発明の効果】
【０００９】
本発明によれば、サーバ／クライアントモデルにおいて、利用者側の負荷をかけずに暗号化データの機密性を維持したまま、ある秘密鍵に対応する暗号化データを別の秘密鍵に対応する暗号化データに変換することができる。
【図面の簡単な説明】
【００１０】
【図１】第一の実施形態のシステムの概略を例示する図である。
【図２】管理サーバの暗号文を検索可能なユーザの範囲を示す図である。
【図３】登録クライアントの機能の概略を例示する図である。
【図４】検索クライアントの機能の概略を例示する図である。
【図５】管理サーバの機能の概略を例示する図である。
【図６】コンピュータの概略構成を例示する図である。
【図７】登録クライアントにおける秘匿データの作成手順を例示するブロック図である。
【図８】検索クライアントにおける秘匿キーワードの作成手順を例示するブロック図である。
【図９】管理サーバにおける秘匿データの検索手順を例示するブロック図である。
【図１０】検索クライアントにおける秘匿データの復号手順を例示するブロック図である。
【図１１ａ】登録クライアントまたは検索クライアントにおける乱数ストリームの生成手順を例示するブロック図である。
【図１１ｂ】登録クライアントまたは検索クライアントにおける鍵ストリームの生成手順を例示するブロック図である。
【図１２】登録クライアントにおける差分鍵マスクの生成手順を例示するブロック図である。
【図１３】管理サーバにおける秘匿データの更新手順を例示するブロック図である。
【図１４】第二の実施形態のシステムの概略を例示する図である。
【図１５】管理サーバの機能の概略を例示する図である。
【図１６】管理サーバにおける秘匿キーワードの変換手順を例示するブロック図である。
【発明を実施するための形態】
【００１１】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態において、同一の部材には原則として同一の符号を付け、繰り返しの説明は省略する。
【００１２】
（実施の形態１）
第一の実施形態では、登録クライアント100と検索クライアント200と管理サーバ300とがネットワーク400で接続されたシステムにおいて、登録クライアント100が作成した秘匿データを管理サーバ300に登録し、検索クライアント200がその秘匿データの検索を管理サーバ300に依頼し、管理サーバ300から取得した秘匿データを復号できることを示す。また、登録クライアント100が保有する秘密鍵の更新処理として、登録クライアント100が保有する新しい秘密鍵と古い秘密鍵の2種類の秘密鍵から、それぞれの秘密鍵を用いて独立に鍵ストリームを生成し、この2種類の鍵ストリームの差分である差分鍵マスクによって、管理サーバ300が新しい秘密鍵に対応した秘匿データに更新できることを示す。
【００１３】
図１は、本発明にかかる検索可能暗号処理システムを適用した、本実施形態における検索処理システムの概略図である。図示するように、検索処理システムは、登録クライアント100と、検索クライアント200と、管理サーバ300とを備え、それぞれがネットワーク400を介して情報を送受信できるよう構成されている。
【００１４】
ここで、本実施形態における登録クライアント100は、秘匿化したデータを管理サーバ300に送信するデータ登録用の送受信装置として機能する。検索クライアント200は、秘匿化したキーワードを管理サーバ300に送信し、検索結果を受信する、検索用の送受信装置として機能する。管理サーバ300は、秘匿化したデータをデータベース341に保管し、またデータベース341内のデータを検索する送受信装置として機能する。
【００１５】
また、本実施形態における登録クライアント100は、管理サーバ300で管理される、ある秘密鍵に対応する秘匿化したデータを、別の秘密鍵に対応する秘匿化したデータへの変換依頼用の送受信装置として機能する。
【００１６】
図３は、登録クライアント100の機能概略図である。図示するように、登録クライアント100は、制御部110と、記憶部120と、入力部101と、出力部102と、通信部103とを備える。  
記憶部120は、データ記憶部130と、鍵記憶部150と、一時記憶部180とを備える。
【００１７】
データ記憶部130は、管理サーバ300に送信するデータである、送信文を特定する情報を記憶する。また、データ記憶部130は、入力部101を介して、受け付けた平文データ131を特定する情報を記憶する。また、データ記憶部130は、暗号化に関連する情報をまとめた暗号化コンテキスト140を記憶する。暗号化コンテキスト140には、秘匿データの作成時に用いる暗号化アルゴリズム141と初期ベクトル136と検索タグ長135が記憶される。秘匿データの作成元となるデータが128ビット以下に固定されている場合は、初期ベクトル136は用いなくてもよい。その場合、初期ベクトルは記憶しなくても良く、登録クライアント100における全ての処理で、初期ベクトルに関する処理は省略する。
【００１８】
鍵記憶部150は、安全性の観点から登録クライアント100が秘密に管理すべき、固定型秘密鍵160と更新型秘密鍵170を特定する情報を記憶する。固定型秘密鍵160とは、本実施形態で開示する秘匿データの更新処理後も、継続して利用し続ける秘密鍵であり、乱数マスク生成鍵151とデータ暗号化鍵152を特定する情報が記憶される。更新型秘密鍵170とは、本実施形態で開示する秘匿データの更新処理の前後で、利用される秘密鍵が変わる秘密鍵であり、鍵マスク生成鍵171と鍵マスク用ノンス172を特定する情報が記憶される。更新型秘密鍵170には、従来の古い秘密鍵で平文データを暗号化するための第一の秘密鍵と、新たな秘密鍵で平文データを暗号化するための第二の秘密鍵とがある。また、上記第一の秘密鍵を生成するための第一の鍵マスク生成鍵および第一の鍵マスク用ノンスと、上記第二の秘密鍵を生成するための第二の鍵マスク生成鍵および第二の鍵マスク用ノンスとがある。
【００１９】
一時記憶部180は、制御部110での処理で必要となる情報を記憶する。  
制御部110は、全体処理部111と、暗号化部112と、擬似乱数生成部114と、不可逆変換部115と、準同型関数部116と、基本演算部117と、鍵生成部118を備える。ただし、秘密鍵の生成処理を行わない場合、鍵生成部118は保持しなくても良い。
【００２０】
全体処理部111は、登録クライアント100における全ての処理を制御する。  
例えば、全体処理部111は、入力部101を介して入力を受け付けた情報を、データ記憶部130に平文データ131として記憶する処理を行う。
【００２１】
また、全体処理部111は、平文データ131を出力部102に表示する処理を行う。  
また、全体処理部111は、データ記憶部130に記憶した平文データ131を読み込み、それぞれ、暗号化部112と、擬似乱数生成部114と、不可逆変換部115と、準同型関数部116と、基本演算部117とに入力し、出力されたデータを、データ記憶部130に秘匿データとして記憶する処理を行う。
【００２２】
また、全体処理部111は、秘匿データを、通信部103を介して管理サーバ300に送信する処理を行う。
【００２３】
さらに、全体処理部111は、管理サーバ300より通信部103を介して受信した秘匿データを、一時記憶部180に記憶する処理と出力部102に表示する処理を行う。
【００２４】
暗号化部112は、入力されたデータを暗号化したデータを出力する処理を行う。  
例えば、全体処理部111から平文データ131とデータ暗号化鍵152が入力され、暗号化したデータを出力する処理を行う。例えば、暗号化部112は、標準的な暗号化アルゴリズムの実装により、実現される。
【００２５】
擬似乱数生成部114は、擬似乱数を出力する処理を行う。例えば、擬似乱数生成部114は、秘密鍵と初期ベクトルを要する、標準的な擬似乱数生成アルゴリズムの実装により実現される。また例えば、擬似乱数生成部114は、温度、時間、電力量、等の物理現象から、乱数を出力するハードウェアにより実現される。本実施形態においては、擬似乱数生成部114は、全体処理部111から入力された乱数マスク生成鍵151と初期ベクトル136を用い、擬似乱数を出力する。
【００２６】
不可逆変換部115は、入力されたデータを圧縮したデータを出力する処理を行う。  
例えば、不可逆変換部115は、全体処理部111から入力されたデータを固定長の別のデータに変換し、出力する処理を行う。
【００２７】
例えば、不可逆変換部115は、標準的な暗号ハッシュ関数アルゴリズムであるSHA-256関数の実装により、任意長の入力データを256ビットのデータへ変換する不可逆変換部115が実現できる。
【００２８】
準同型関数部116は、入力データに対し、準同型性を有する関数の出力結果をデータとして出力する処理を行う。
【００２９】
ただし、準同型を有する関数(以降、準同型関数と呼ぶ)とは、関数Ｆと、入力変数ｘ、入力変数ｙに対し、
（数１）
Ｆ（ｘ・ｙ）＝Ｆ（ｘ）？Ｆ（ｙ）
が成り立つ関数を指す。ただし、・と？は、演算記号を表わし、加算用の演算記号+、乗算用の演算記号*、ビット毎の排他的論理和であるＸＯＲ(eXclusive OR)演算用の演算記号xor等が入る。
【００３０】
このとき、（数１）において、・と？にＸＯＲ演算記号xorが入る場合、（数２）が成り立つ。
（数２）
Ｆ（ｘ xor ｙ）＝Ｆ（ｘ）xor Ｆ（ｙ）
基本演算部117は、加算、減算、比較算や、ＡＮＤ、ＯＲ、ＸＯＲ等の基本的な算術演算に関する処理を行う。
【００３１】
例えば、基本演算部117は、全体処理部111から入力された２つのデータのビット毎の排他的論理和であるＸＯＲ演算や、比較演算の等号成立または不成立の検証結果を、データとして出力する処理を行う。
【００３２】
鍵生成部118は、暗号化アルゴリズムや乱数生成などに用いる固定型秘密鍵や更新型秘密鍵の生成処理に用いる。例えば、鍵生成部118は、標準的な鍵生成アルゴリズムの実装により実現される。また、擬似乱数生成部114を用い、固定型秘密鍵や更新型秘密鍵を生成するようにしてもよい。
【００３３】
以上に示した登録クライアント100は、例えば、図６（コンピュータの概略図）に示すような、ＣＰＵ(Central Processing Unit)601と、メモリ602と、ＨＤＤ(Hard Disk Drive)等の外部記憶装置603と、ＣＤ(Compact Disk)やＤＶＤ(Digital Versatile Disk)等の可搬性を有する記憶媒体608に対して情報を読み書きする読書装置607と、キーボードやマウス等の入力装置606と、ディスプレイ等の出力装置605と、通信ネットワークに接続するためのＮＩＣ(Network Interface Card)等の通信装置604と、これらを連結するシステムバス等の内部通信線(システムバスという)609と、を備えた一般的なコンピュータ600で実現できる。
【００３４】
例えば、記憶部120は、ＣＰＵ601がメモリ602または外部記憶装置603を利用することにより実現可能であり、制御部110と制御部110に含まれる各処理部は、外部記憶装置603に記憶されている所定のプログラムをメモリ602にロードしてＣＰＵ601で実行することで実現可能であり、入力部101は、ＣＰＵ601が入力装置606を利用することで実現可能であり、出力部102は、ＣＰＵ601が出力装置605を利用することで実現可能であり、通信部103は、ＣＰＵ601が通信装置604を利用することで実現可能である。
【００３５】
この所定のプログラムは、読書装置607を介して記憶媒体608から、あるいは、通信装置604を介してネットワークから、外部記憶装置603に記憶(ダウンロード)され、それから、メモリ602上にロードされて、ＣＰＵ601により実行されるようにしてもよい。また、読書装置607を介して、記憶媒体608から、あるいは通信装置604を介してネットワークから、メモリ602上に直接ロードされ、ＣＰＵ601により実行されるようにしてもよい。
【００３６】
図４は、検索クライアント200の機能概略図である。図示するように、検索クライアント200は、制御部210と、記憶部220と、入力部201と、出力部202と、通信部203とを備える。  
記憶部220は、データ記憶部230と、鍵記憶部250と、一時記憶部280とを備える。
【００３７】
データ記憶部230は、管理サーバ300に送信するデータである、送信文を特定する情報と通信部203を介して受信したデータを特定する情報を記憶する。本実施形態においては、データ記憶部230は、検索クライアント200が、入力部201を介して受け付けた平文キーワード241を特定する情報を記憶する。また、データ記憶部230は、通信部203を介して管理サーバ300から受信したデータを特定する情報を秘匿データとして記憶し、秘匿データから秘匿化を解除したデータを平文データとして記憶する。また、データ記憶部230は、暗号化に関連する情報をまとめた暗号化コンテキスト240を記憶する。暗号化コンテキスト240には、秘匿データの秘匿化の解除、秘匿キーワードに用いる暗号化アルゴリズム244と初期ベクトル236と指定ブロック237が記憶される。秘匿キーワードの作成元となるデータ（含む、キーワード）が128ビット以下に固定されている場合は、初期ベクトル136は用いなくてもよい。その場合、初期ベクトルは記憶しなくても良く、検索クライアント200における全ての処理で、初期ベクトルに関する処理は省略する。
【００３８】
鍵記憶部250は、安全性の観点から検索クライアント200が秘密に管理すべき、固定型秘密鍵260と更新型秘密鍵270を特定する情報を記憶する。固定型秘密鍵260とは、本実施形態で開示する秘匿データの更新処理後も、継続して利用し続ける秘密鍵であり、乱数マスク生成鍵251とデータ暗号化鍵252とデータ復号鍵253を特定する情報が記憶される。更新型秘密鍵270とは、本実施形態で開示する秘匿データの更新処理前後で、利用する秘密鍵が変わる秘密鍵であり、鍵マスク生成鍵271と鍵マスク用ノンス272、更新型検索鍵273を特定する情報が記憶される。更新型秘密鍵270には、従来の古い秘密鍵で平文キーワードを暗号化するための第一の検索用秘密鍵と、新たな秘密鍵で平文キーワードを暗号化するための第二の検索用秘密鍵とがある。また、上記第一の検索用秘密鍵を生成するための第一の検索用鍵マスク生成鍵および第一の検索用鍵マスク用ノンスと、上記第二の秘密鍵を生成するための第二の検索用鍵マスク生成鍵および第二の検索用鍵マスク用ノンスとがある。
【００３９】
一時記憶部280は、制御部210での処理で必要となる情報を記憶する。  
制御部210は、全体処理部211と、暗号化部212と、復号化部213と、擬似乱数生成部214と、不可逆変換部215と、準同型関数部216と、基本演算部217と鍵生成部218を備える。ただし、秘密鍵の生成処理を行わない場合、鍵生成部218は保持しなくても良い。
【００４０】
全体処理部211は、検索クライアント200における全ての処理を制御する。例えば、全体処理部211は、入力部201を介して入力を受け付けた情報を、データ記憶部230に平文キーワード241として記憶する処理を行う。
【００４１】
また、全体処理部211は、平文キーワード241を出力部202に表示する処理を行う。  
また、全体処理部211は、データ記憶部230に記憶した平文キーワード241を読み込み、それぞれ、暗号化部212と、擬似乱数生成部214と、不可逆変換部215と、準同型関数部216と、基本演算部217とに入力し、出力されたデータを秘匿キーワードとしてデータ記憶部230に記憶する処理を行う。
【００４２】
また、全体処理部211は、通信部203を介して、秘匿キーワードを管理サーバ300に送信する処理を行う。
【００４３】
また、全体処理部211は、通信部203を介して、秘匿データや平文データを管理サーバ300から受信する処理を行う。
【００４４】
また、全体処理部211は、通信部203を介して、受信した秘匿データや平文データをデータ記憶部230に記憶する処理を行う。
【００４５】
また、全体処理部211は、データ記憶部230に記憶した秘匿データを読み込み、それぞれ、復号化部213と、不可逆変換部215と、準同型関数部216と、基本演算部217とに入力し、出力されたデータを平文データとしてデータ記憶部230に記憶する処理を行う。
【００４６】
また、全体処理部211は、平文データを出力部202に表示する処理を行う。  
さらに、全体処理部211は、管理サーバ300より、通信部203を介して受信したデータを、一時記憶部280に記憶する処理と、出力部202に表示する処理を行う。
【００４７】
暗号化部212は、入力されたデータを暗号化したデータを出力する処理を行う。  
例えば、暗号化部212は、全体処理部211から平文キーワード241とデータ暗号化鍵252が入力され、暗号化した平文キーワードを出力する処理を行う。
【００４８】
復号化部213は、入力された暗号化データを復号化し、出力する処理を行う。  
例えば、復号化部213は、全体処理部211から暗号化したデータとデータ復号化鍵253が入力され、復号後、平文のデータを出力する処理を行う。
【００４９】
擬似乱数生成部214は、擬似乱数を出力する処理を行う。  
例えば、擬似乱数生成部214は、秘密鍵と初期ベクトルを要する、標準的な擬似乱数生成アルゴリズムの実装により実現される。このとき、秘密鍵と初期ベクトルの一方または両方の値を利用毎に変更すれば、毎回、異なる擬似乱数が生成される。また例えば、擬似乱数生成部214は、温度、時間、電力量、等の物理現象から、乱数を出力するハードウェアにより実現される。本実施形態においては、擬似乱数生成部214は、全体処理部211から入力された乱数マスク生成鍵251と初期ベクトル236を用い、擬似乱数を出力する。
【００５０】
不可逆変換部215は、入力されたデータを不可逆変換したデータを出力する処理を行う。例えば、不可逆変換部215は、全体処理部211から入力されたデータを固定長の別のデータに変換し、出力する処理を行う。  
例えば、不可逆変換部215は、標準的な暗号ハッシュ関数アルゴリズムであるSHA-256の実装により、任意長の入力データを256ビットのデータへ変換する不可逆変換部215が実現できる。
【００５１】
準同型関数部216は、入力されたデータに対し、準同型性関数の出力結果をデータとして出力する処理を行う。
【００５２】
ただし、準同型関数とは、関数Ｆと、入力変数ｘ、入力変数ｙに対し、（数２）が成り立つ場合を示す。なお、ビット毎の排他的論理和であるＸＯＲ演算以外の演算記号で準同型性が成り立つ時も、同様に実施できる。
【００５３】
基本演算部217は、加算、減算、比較算や、ＡＮＤ、ＯＲ、ＸＯＲ等の基本的な算術演算に関する処理を行う。
【００５４】
鍵生成部218は、暗号化アルゴリズムや乱数生成などに用いる固定型秘密鍵や更新型秘密鍵の生成処理に用いる。例えば、鍵生成部218は、標準的な鍵生成アルゴリズムの実装により実現される。また、擬似乱数生成部214を用い、固定型秘密鍵や更新型秘密鍵を生成するようにしてもよい。
【００５５】
以上に示した検索クライアント200は、例えば、図６（コンピュータの概略図）に示すような、ＣＰＵ601と、メモリ602と、ＨＤＤ等の外部記憶装置603と、ＣＤやＤＶＤ等の可搬性を有する記憶媒体608に対して情報を読み書きする読書装置607と、キーボードやマウス等の入力装置606と、ディスプレイ等の出力装置605と、通信ネットワークに接続するためのＮＩＣ等の通信装置604と、これらを連結するシステムバス等の内部通信線(システムバスという)と、を備えた一般的なコンピュータで実現できる。
【００５６】
例えば、記憶部220は、ＣＰＵ601がメモリ602または外部記憶装置603を利用することにより実現可能であり、制御部210と制御部210に含まれる各処理部は、外部記憶装置603に記憶されている所定のプログラムをメモリ602にロードしてＣＰＵ601で実行することで実現可能であり、入力部201は、ＣＰＵ601が入力装置606を利用することで実現可能であり、出力部202は、ＣＰＵ601が出力装置605を利用することで実現可能であり、通信部203は、ＣＰＵ601が通信装置604を利用することで実現可能である。
【００５７】
この所定のプログラムは、読書装置607を介して記憶媒体608から、あるいは、通信装置604を介してネットワークから、外部記憶装置603に記憶(ダウンロード)され、それから、メモリ602上にロードされて、ＣＰＵ601により実行されるようにしてもよい。また、読書装置607を介して、記憶媒体608から、あるいは通信装置604を介してネットワークから、メモリ602上に直接ロードされ、ＣＰＵ601により実行されるようにしてもよい。
【００５８】
図５は、管理サーバ300の機能概略図である。図示するように、管理サーバ300は、制御部310と、記憶部320と、入力部301と、出力部302と、通信部303と、を備える。
【００５９】
記憶部320は、データ記憶部330と、鍵記憶部350と、一時記憶部380とを備える。  
データ記憶部330は、通信部303を介して受信したデータを特定する情報が記憶する。ここで、本実施形態においては、通信部303を介して登録クライアント100から受信した情報を、データ記憶部330にデータベース341の構成情報として記憶する処理を行う。また、データ記憶部330は、通信部303を介して受信したキーワードを特定する情報を記憶する。ここで、本実施形態においては、通信部303を介して検索クライアント200から受信した情報を、データ記憶部330に秘匿キーワードとして記憶する処理を行う。
【００６０】
また、データ記憶部330は、暗号化に関連する情報をまとめた暗号化コンテキスト340とデータベース341を記憶する。暗号化コンテキスト340は、秘匿データの作成時に用いる暗号化アルゴリズム344と検索タグ長335と初期ベクトル336と指定ブロック337を記憶する。データベース341は、平文データと秘匿データの少なくとも一方の集合から構成される。例えば、DBはRDB(Relational Database)やKVS(Key-Valued System)などで構成され、データベースにおいてレコードとして管理される各データが秘匿化された秘匿データ343または平文状態の平文データ342として、または各データは秘匿化データ343と平文データ342の組で保存されている。
【００６１】
一時記憶部380は、制御部310での処理で必要となる情報を記憶する。  
制御部310は、全体処理部311と、復号化部313と、不可逆変換部315と、準同型関数部316と、基本演算部317と、を備える。
【００６２】
全体処理部311は、管理サーバ300における全ての処理を制御する。  
例えば、全体処理部311は、通信部303を介して秘匿データや平文データを登録クライアント100から受信する処理を行う。
【００６３】
また、全体処理部311は、通信部303を介して受信した秘匿データ343や平文データ342をデータ記憶部330内のデータベース341の構成情報として記憶する処理を行う。
【００６４】
また、全体処理部311は、通信部303を介して秘匿キーワードを検索クライアント200から受信する処理を行う。
【００６５】
また、全体処理部311は、通信部303を介して受信した秘匿キーワードをデータ記憶部330に記憶する処理を行う。
【００６６】
また、全体処理部311は、検索クライアント200または登録クライアント100より、通信部303を介して受信したデータに関する情報を、一時記憶部380に記憶する処理と、出力部302に表示する処理を行う。
【００６７】
復号化部313は、入力されたデータを復号化したデータを出力する処理を行う。  
例えば、復号化部313は、全体処理部311から暗号化したデータと更新型検索鍵354が入力され、復号し、出力する処理を行う。
【００６８】
不可逆変換部315は、入力されたデータを不可逆変換したデータを出力する処理を行う。  
例えば、不可逆変換部315は、全体処理部311から入力されたデータを固定長の別のデータに変換し、出力する処理を行う。  
例えば、不可逆変換部315は、標準的な暗号ハッシュ関数アルゴリズムであるSHA-256関数の実装により、任意長の入力データを256ビットのデータへ変換する不可逆変換部115が実現できる。
【００６９】
準同型関数部316は、入力されたデータに対し、準同型関数の出力結果をデータとして出力する処理を行う。
【００７０】
ただし、準同型関数とは、関数Ｆと、入力変数ｘ、入力変数ｙに対し、（数２）が成り立つ場合を示す。なお、ビット毎の排他的論理和であるＸＯＲ演算以外の演算記号で準同型性が成り立つ時も、本実施形態は同様に実施できる。
【００７１】
基本演算部317は、加算、減算、比較算や、ＡＮＤ、ＯＲ、ＸＯＲ等の基本的な算術演算に関する処理を行う。
【００７２】
以上に示した管理サーバ300は、例えば、図６（コンピュータの概略図）に示すような、ＣＰＵ601と、メモリ602と、ＨＤＤ等の外部記憶装置603と、ＣＤやＤＶＤ等の可搬性を有する記憶媒体608に対して情報を読み書きする読書装置607と、キーボードやマウス等の入力装置606と、ディスプレイ等の出力装置605と、通信ネットワークに接続するためのＮＩＣ等の通信装置604と、これらを連結するシステムバス等の内部通信線(システムバスという)とを備えた一般的なコンピュータで実現できる。
【００７３】
例えば、記憶部120、220、320は、ＣＰＵ601がメモリ602または外部記憶装置603を利用することにより実現可能であり、制御部110、210、310と制御部110、210、310に含まれる各処理部は、外部記憶装置603に記憶されている所定のプログラムをメモリ602にロードしてＣＰＵ601で実行することで実現可能であり、入力部101、201、301は、ＣＰＵ601が入力装置606を利用することで実現可能であり、出力部102、202、302は、ＣＰＵ601が出力装置605を利用することで実現可能であり、通信部103、203、303は、ＣＰＵ601が通信装置604を利用することで実現可能である。
【００７４】
この所定のプログラムは、読書装置607を介して記憶媒体608から、あるいは、通信装置604を介してネットワークから、外部記憶装置603に記憶(ダウンロード)され、それから、メモリ602上にロードされて、ＣＰＵ601により実行されるようにしてもよい。また、読書装置607を介して記憶媒体608から、あるいは通信装置604を介してネットワークから、メモリ602上に直接ロードされ、ＣＰＵ601により実行されるようにしてもよい。
【００７５】
＜秘匿データの登録フロー＞
ネットワーク400を経由し、登録クライアント100が秘匿データを管理サーバ300へ登録する処理を示すシーケンスを説明する。
【００７６】
登録クライアント100は、入力部101を経由し、ユーザから入力された情報を平文データ131として、記憶部120へ記憶する処理を行う(S101)。
【００７７】
登録クライアント100は、制御部110により、秘匿データを作成する処理を行う(S102)。
【００７８】
登録クライアント100は、通信部103から、ネットワーク400を経由し、平文データ1と秘匿データの両方またはいずれか一方を、管理サーバ300へ、送信する処理を行う(S103)。
【００７９】
管理サーバ300は、通信部303から、ネットワーク400を経由し、登録クライアント100が送信した平文データと秘匿データの両方またはいずれか一方を受信する処理を行う(S104)。
【００８０】
管理サーバ300は、制御部310により、受信した平文データと秘匿データの両方またはいずれか一方を、データベース341の構成情報として、記憶部320へ記憶する処理を行う(S105)。
【００８１】
管理サーバ300は、平文データや秘匿データの登録処理の成否を、通信部303から、ネットワーク400を経由し、登録クライアントへ送信する処理を行う(S106)。
【００８２】
登録クライアント100は、通信部103から、ネットワーク400を経由し、管理サーバ300が送信した、平文データや秘匿データの登録処理の成否を、受信する処理を行う(S107)。
【００８３】
登録クライアント100は、出力部102を経由し、ユーザに、登録処理の成否を含む、登録情報について、表示する処理を行う(S108)。
【００８４】
以上が、ネットワーク400を経由し、登録クライアント100が、秘匿データを管理サーバ300へ登録する処理を示すシーケンスである。
【００８５】
なお、このシーケンスの処理手順は、必ずしも上記の記述通りの順序に従う必要はなく、異なる順序で実施してもよい。また、必ずしも上記に記述された手順を全て処理する必要はない。例えば、S102で作成した秘匿データを、更に更新型検索鍵や更新型秘密鍵を用い、その一部または全部を二重に暗号化する処理を付け加えても良い。
【００８６】
＜秘匿データの検索フロー＞
ネットワーク400を経由し、検索クライアント200が送信した秘匿キーワードを用い、管理サーバ300がデータベース341を検索し、更に検索クライアント200が検索結果を取得する処理を示すシーケンスを説明する。
【００８７】
検索クライアント200は、入力部201を経由し、ユーザから入力された情報を平文キーワード241として、記憶部220へ記憶する処理を行う(S201)。
【００８８】
検索クライアント200は、制御部210により、平文キーワードから秘匿キーワードを作成する処理を行う(S202)。
【００８９】
検索クライアント200は、通信部203から、ネットワーク400を経由し、秘匿キーワードを管理サーバ300へ送信する処理を行う(S203)。
【００９０】
管理サーバ300は、通信部303から、ネットワーク400を経由し、検索クライアント200が送信した秘匿キーワードを、受信する処理を行う(S204)。
【００９１】
管理サーバ300は、制御部310により、データベース341から、秘匿キーワードに関係する、秘匿データ343を検索する処理を行う(S205)。
【００９２】
管理サーバ300は、秘匿キーワードに該当する検索結果（秘匿データと平文データの両方またはいずれか一方で構成される）を、通信部303から、ネットワーク400を経由し、検索クライアントへ送信する処理を行う(S206)。
【００９３】
検索クライアント200は、通信部203から、ネットワーク400を経由し、管理サーバ300が送信した、検索結果を受信する処理を行う(S207)。
【００９４】
秘匿データが検索結果に含まれる場合、検索クライアント200は、制御部210により、秘匿キーワードに該当する検索結果から、平文データを復元する（S208）。
【００９５】
検索クライアント200は、出力部202を経由し、平文データを記憶部220に記憶する（S209）。  
検索クライアント200は、平文データを出力部202に表示する（S210）。
【００９６】
以上が、ネットワーク400を経由し、検索クライアント200が送信した秘匿キーワードを用い、管理サーバ300がデータベース341を検索し、更に検索クライアント200が検索結果を取得する処理を示すシーケンスである。
【００９７】
なお、このシーケンスの処理手順は、必ずしも上記の記述通りの順序に従う必要はなく、異なる順序で実施してもよい。また、必ずしも上記に記述された手順を全て処理する必要はない。また、新たな処理を追加しても良い。例えば、S205において、検索する秘匿データの一部または全部が更新型検索鍵で二重に暗号化されている場合、管理サーバ300は、更新型検索鍵による秘匿データの復号処理を付け加える。同様に、S205において、秘匿キーワードの一部または全部が更新型検索鍵で二重に暗号化されている場合も、管理サーバ300は、更新型検索鍵による秘匿キーワードの復号処理を付け加える。
【００９８】
＜秘匿データの生成フロー＞
登録クライアント100における秘匿データの生成処理の手順を図７に示す。登録クライアント100の全体処理部111は、秘匿データの生成処理に必要な作業領域を一時記憶部180に確保する。
【００９９】
登録クライアント100の全体処理部111は、平文データ131を取得し、暗号化部112が処理可能なサイズに分割する。登録クライアント100の全体処理部111は、初期ベクトル136、データ暗号化鍵152、分割されたｎ個の平文ブロックを暗号化部112に入力し、ECBモード、CBCモード等の暗号化アルゴリズム141に従って暗号化された、ｎ個の中間暗号化データＣ１、Ｃ２、……Ｃｎを取得する。例えば、暗号化アルゴリズム141として鍵長256ビットAES暗号のCBCモードが指定されている場合、平文データ131は128ビット毎の平文ブロックに分割され、暗号化部112はデータ暗号化鍵152と初期ベクトル136を用い、AES暗号のCBCモードで暗号化された中間暗号化データＣ１、Ｃ２、……Ｃｎを出力する。  登録クライアント100の全体処理部111は、擬似乱数生成部114に初期ベクトル136と乱数マスク生成鍵151を入力し、ｎ個分の中間暗号化データに用いる乱数ストリームを生成する。例えば、図１１内の図１１(a)に示すように、初期ベクトル136と定数を連結したデータと乱数マスク生成鍵151を擬似乱数生成部114に入力し、ｎ個分のブロックに相当する乱数ストリームＲ１、Ｒ２、……Ｒｎを生成する。
【０１００】
登録クライアント100の全体処理部111は、擬似乱数生成部114に鍵マスク用ノンス172と鍵マスク生成鍵171を入力し、ｎ個分の中間暗号化データに用いる鍵ストリームを生成する。例えば、図１１内の図１１(b)に示すように、鍵マスク用ノンス172と定数を連結したデータと鍵マスク生成鍵171を擬似乱数生成部114に入力し、ｎ個分のブロックに相当する鍵ストリームＴ１、Ｔ２、……Ｔｎを生成する。  登録クライアント100の全体処理部111は、基本演算部117に中間暗号化データと乱数ストリームと鍵ストリームを入力し、基本演算部117は排他的論理和(XOR算)を計算し、出力結果Ｄ１、Ｄ２、……Ｄｎを暗号文本体として取得する。
（数３）
Ｄｉ＝Ｃｉ xor Ｒｉ xor Ｔi（ｉ＝１、・・・ｎ）
登録クライアント100の全体処理部111は、準同型関数部116に乱数ストリームの全部または一部を入力し、出力されたデータを関数値として取得する。例えば、図７に示すように、乱数ストリームの一部であるＲｎを準同型関数部116に入力し、その出力結果を関数値Ｆ(Ｒｎ)とする。関数値を不可逆変換部115に入力し、出力されたデータを不可逆変換値として取得する。例えば、不可逆変換部115がハッシュ関数SHA256を実装している場合、そのハッシュ値256ビットが不可逆変換値Ｈ(Ｆ(Ｒｎ))である。
【０１０１】
さらに、不可逆変換部115は、256ビットのハッシュ値のうち、検索タグ長135に記録されたビット長を秘匿データ用の検索タグＤｎ＋１として取得する。例えば、不可逆変換部115は、最下位32ビットを抽出し、秘匿データ用の検索タグとする。ただし、不可逆変換値Ｈから、抽出するビットは最下位ビットからに限らず、最上位ビットから抽出、または既定の箇所あるいはランダムな箇所からビットを抽出してもよい。
【０１０２】
登録クライアント100の全体処理部111は、初期ベクトル136をＤ０とし、暗号文本体Ｄ１、Ｄ２、……Ｄｎ、検索タグＤｎ＋１を連結したデータを秘匿データとしてデータ記憶部130に格納する。
【０１０３】
登録クライアント100の全体処理部111は、秘匿データの生成処理用に確保した作業領域を一時記憶部180から解放する。
【０１０４】
秘匿データの復号処理については後述するが、前述の秘匿データの生成処理において、鍵マスク生成鍵171と鍵マスク用ノンス172から生成した鍵ストリームを用いた。従って、秘匿データの生成には、鍵マスク生成鍵171と鍵マスク用ノンス172が必要とされる。また、後述する復号処理にも、鍵マスク生成鍵171と鍵マスク用ノンス172と同様に鍵マスク生成鍵271と鍵マスク用ノンス272が必要とされる。
【０１０５】
なお、秘匿データの生成手順は、必ずしも上記の記述通りの順序に従う必要はなく、異なる順序で実施してもよい。
【０１０６】
また、秘匿データの生成を、登録クライアント100ではなく、検索クライアント200が処理しても良い。
【０１０７】
＜秘匿キーワードの生成フロー＞
検索クライアント200における秘匿キーワードの生成処理の手順を図８に示す。
【０１０８】
検索クライアント200の全体処理部211は、秘匿キーワードの生成処理に必要な作業領域を一時記憶部280に確保する。
【０１０９】
検索クライアント200の全体処理部211は、平文キーワード241を取得し、指定ブロック237の記述に従い、平文ブロックを生成する。検索クライアント200の全体処理部211は、初期ベクトル236、データ暗号化鍵252、平文ブロックを暗号化部212に入力し、暗号化アルゴリズム244に従って暗号化された、中間暗号化キーワードＣｎを取得する。例えば、暗号化アルゴリズム244として鍵長256ビットAES暗号CBCモード、指定ブロック237にｎ番目が指定されている場合、全体処理部211は平文キーワード241を128ビット毎の平文ブロックに分割し、暗号化部112はデータ暗号化鍵252と初期ベクトル236を用い、AES暗号のCBCモードで暗号化したデータＣ１、Ｃ２、……Ｃｎから、ｎ番目のデータであるＣｎを中間暗号化キーワードとして出力する。
【０１１０】
検索クライアント200の全体処理部211は、擬似乱数生成部214に初期ベクトル236と乱数マスク生成鍵251を入力し、中間暗号化キーワードのマスクに用いる、乱数ストリームを生成する。例えば、指定ブロック237にｎ番目が指定されている場合、中間暗号化キーワードＣｎのサイズ以上の乱数ストリームＰｎを生成する。このとき、乱数ストリームを生成する毎に、初期ベクトル250と乱数マスク生成鍵251の両方またはその一方のデータ値が更新されるため、乱数ストリームのデータ値は毎回異なる。
【０１１１】
検索クライアント200の全体処理部211は、擬似乱数生成部214に鍵マスク用ノンス272と鍵マスク生成鍵271を入力し、中間暗号化キーワードのマスクに用いる鍵ストリームを生成する。例えば、指定ブロック237にｎ番目が指定されている場合、中間暗号化キーワードＣｎのサイズ以上の鍵ストリームＴｎを生成する。
【０１１２】
検索クライアント200の全体処理部211は、基本演算部217に中間暗号化キーワードと乱数ストリームと鍵ストリームを入力し、基本演算部217は排他的論理和(XOR算)を計算し、出力結果を暗号化キーワード本体として取得する。例えば、中間暗号化キーワードＣｎ、乱数ストリームＰｎ、鍵ストリームＴｎ、暗号化キーワードＷｎには次式が成り立つ。
（数４）
Ｗｎ＝Ｃｎ xor Ｐｎ xor Ｔｎ
検索クライアント200の全体処理部211は、準同型関数部216に乱数ストリームＰｎを入力し、出力されたデータを関数値Ｆ(Ｐｎ)として取得する。検索クライアント200の全体処理部211は、更新型検索鍵273、初期ベクトル236と前記関数値を暗号化部212に入力し、出力されたデータを秘匿キーワード用の検索タグＥ(Ｆ(Ｐｎ))をＷｎ＋１として取得する。
【０１１３】
検索クライアント200の全体処理部211は、初期ベクトル236、暗号化キーワード本体、秘匿キーワード用の検索タグを連結し、これを秘匿キーワードとしてデータ記憶部230に格納する。
【０１１４】
検索クライアント200の全体処理部は、秘匿キーワードの生成処理用に確保した作業領域を一時記憶部280から解放する。
【０１１５】
このように、秘匿キーワードの生成処理において、鍵マスク生成鍵271と鍵マスク用ノンス272から生成した鍵ストリームを用いる。従って、秘匿キーワードの生成には、鍵マスク生成鍵271と鍵マスク用ノンス272が必要とされる。
【０１１６】
なお、秘匿キーワードの生成手順は、必ずしも上記の記述通りの順序に従う必要はなく、異なる順序で実施してもよい。また、新たな処理を付け加えても良い。例えば、秘匿キーワードの検索タグは更新型検索鍵で暗号化されているが、同様に、秘匿キーワードの他のブロックである暗号化本体を二重に暗号化する処理を付け加えても良い。
【０１１７】
また、秘匿キーワードの生成を、検索クライアント200ではなく、登録クライアント100が処理しても良い。
【０１１８】
＜秘匿データの一致比較フロー＞
管理サーバ300における秘匿データ343と秘匿キーワードの一致比較処理の手順を図９に示す。具体的には、管理サーバ300は、秘匿データ343と秘匿キーワードを用い、秘匿化される前の平文データと平文キーワードの値が同じであるかを検知する処理手順を示す。
【０１１９】
管理サーバ300の全体処理部311は、秘匿データ343の一致比較処理に必要な作業領域を一時記憶部380に確保する。
【０１２０】
管理サーバ300の全体処理部311は、データベース341内に格納されている秘匿データ343を取得する。さらに、全体処理部311は、秘匿データ343における暗号文本体から、指定ブロック337に該当する暗号文本体を取り出す。例えば、指定ブロック337にｎ番目が指定されている場合、全体処理部311は、秘匿データ343を初期ベクトル、暗号文本体、秘匿データの検索タグの連結データとみなし、該当する暗号文本体からｎ番目のブロックに該当する暗号文本体ブロックＤｎを取り出す。  管理サーバ300の全体処理部311は、秘匿キーワードにおける暗号化キーワード本体を取得する。例えば、秘匿キーワードＷを初期ベクトルＷ０、暗号化キーワード本体Ｗｎ、秘匿キーワード用の検索タグＷｎ＋１と３分割されたブロックの集合とみなし、暗号化キーワード本体に該当するＷｎを取り出す。
【０１２１】
管理サーバ300の全体処理部311は、基本演算部317に暗号文本体ブロックと暗号化キーワード本体を入力し、基本演算部317はその排他的論理和(XOR算)を計算し、出力結果を取得する。例えば、暗号文本体ブロックＤｎと暗号化キーワード本体Ｗｎに対し、（数５）が成り立つ。
（数５）
Ｄｎ xor Ｗｎ  ＝(Ｃｎ  xor  Ｒｎ  xor Ｔｎ) xor  (Ｃｎ  xor Ｐｎ  xor Ｔｎ)
ここで、平文データと平文キーワードの値が同じ場合、（数５）から（数６）が導ける。
（数６）
Ｄｎ xor Ｗｎ  ＝  Ｒｎ xor  Ｐｎ
即ち、中間暗号化データと中間暗号化キーワードの値が抹消され、さらにそれらをマスクしていた鍵ストリームの値も同様に抹消される。従って、（数６）に示すように、暗号文本体ブロックＤｎと暗号化キーワード本体Ｗｎの排他的論理和は、乱数ストリーム(ＲｎとＰｎ)の情報のみを残す。  管理サーバ300の全体処理部311は、基本演算部317の出力結果を準同型関数部316に入力し、準同型関数部316の出力結果である関数値Ｆ（Ｄｎ xor Ｗｎ）を取得する。なお、（数６）より、関数値Ｆ（Ｄｎ xor Ｗｎ）には、（数７）が成り立つ。
（数７）
Ｆ（Ｄｎ xor Ｗｎ）＝Ｆ（Ｒｎ xor  Ｐｎ）
管理サーバ300の全体処理部311は、秘匿キーワードにおける初期ベクトルＷ０と秘匿キーワードの検索タグＷｎ＋１を取得し、更新型検索鍵354と共に復号化部313に入力し、復号された関数値Ｆ(Ｐｎ)を取得する。
【０１２２】
管理サーバ300の全体処理部311は、基本演算部317に関数値Ｆ(Ｄｎ xor Ｗｎ)と関数値Ｆ(Ｐｎ)を入力し、基本演算部317はその排他的論理和(XOR算)を計算し、出力された関数値Ｆ（Ｒ'ｎ）を取得する。計算式として、（数８）が成り立つ。
（数８）
Ｚ  ＝  Ｆ(Ｄｎ xor Ｗｎ) xor Ｆ(Ｐｎ)
＝  Ｆ(Ｒｎ xor  Ｐｎ) xor Ｆ(Ｐｎ)
＝  Ｆ(Ｒｎ)
管理サーバ300の全体処理部311は、不可逆変換部315に関数値Ｆ(Ｒｎ)を入力し、出力されたデータを不可逆変換値Ｈ(Ｆ(Ｒｎ))を取得する。
【０１２３】
管理サーバ300の全体処理部311は、不可逆変換値Ｈから、検索タグ長335に記録されたビット長を抽出する。例えば、最下位32ビットを抽出する。また、最下位ビットからに限らず、最上位ビットから抽出、既定の箇所あるいはランダムな箇所からビットを抽出してもよい。
【０１２４】
基本演算部317は、抽出したデータと秘匿データの検索タグを比較し、同一であれば一致比較結果の該当を意味するTRUE(=1)を、同一でなければ一致比較結果の非該当を意味するFALSE(=0)を出力する。
【０１２５】
管理サーバ300の全体処理部311は、秘匿データの一致比較処理用に確保した作業領域を一時記憶部380から解放する。
【０１２６】
なお、秘匿データと秘匿キーワードの一致比較手順は、必ずしも上記の記述通りの順序に従う必要はなく、異なる順序で実施してもよい。また、一致比較結果の回答にTRUEやFALSE以外を用いてもよく、二値の代わりに多値の回答でもよい。
【０１２７】
＜秘匿データの復号フロー＞
検索クライアント200における秘匿データの復号処理の手順を図１０に示す。  
検索クライアント200の全体処理部211は、秘匿データの復号処理に必要な作業領域を一時記憶部280に確保する。
【０１２８】
検索クライアント200の全体処理部211は秘匿データを取得する。さらに、秘匿データから、初期ベクトルを取得する。例えば、秘匿データをＤ０、Ｄ１、Ｄ２、……Ｄｎ、Ｄｎ＋１のブロックの集合とみなし、1番目のブロックである初期ベクトルＤ０を取得する。
【０１２９】
検索クライアント200の全体処理部211は、擬似乱数生成部214に初期ベクトルと乱数マスク生成鍵251を入力し、中間暗号化キーワードのマスクの解除に用いる、乱数ストリームを生成する。例えば、全体処理部211は、図１１内の図１１(a)に示すように、初期ベクトルと定数を連結したデータと乱数マスク生成鍵を擬似乱数生成部214に入力し、ｎ個分のブロックに相当する乱数ストリームＲ１、Ｒ２、……Ｒｎを生成する。
【０１３０】
検索クライアント200の全体処理部211は、擬似乱数生成部214に鍵マスク用ノンス272と鍵マスク生成鍵271を入力し、ｎ個分の中間暗号化データに用いる鍵ストリームを生成する。例えば、図１１内の図１１(b)に示すように、鍵マスク用ノンス272と定数を連結したデータと鍵マスク生成鍵271を擬似乱数生成部214に入力し、ｎ個分のブロックに相当する鍵ストリームＴ１、Ｔ２、……Ｔｎを生成する。
【０１３１】
検索クライアント200の全体処理部211は、基本演算部217に暗号文本体と乱数ストリームと鍵ストリームを入力し、基本演算部217は排他的論理和(XOR算)を計算し、出力結果Ｃ１、Ｃ２、……Ｃｎを中間暗号化データとして取得する。
（数９）
Ｃｉ＝Ｄｉ xor Ｒｉ xor Ｔi（ｉ＝１、・・・ｎ）
検索クライアント200の全体処理部211は、暗号化アルゴリズム244、初期ベクトル236、データ復号化鍵253、分割された中間暗号化データを復号化部213に入力し、ECBモード、CBCモード等の暗号化アルゴリズム244に従って暗号化された、ｎ個の中間暗号化データＣ１、Ｃ２、……Ｃｎを取得する。例えば、暗号化アルゴリズム244として鍵長256ビットAES暗号のCBCモードが指定されている場合、全体処理部は、中間暗号化データを128ビット毎のブロックに分割し、復号化部213によりデータ復号化鍵253と初期ベクトルを用いて復号され、AES暗号のCBCモードで復号化された平文ブロックＭ１、Ｍ２、……Ｍｎを出力する。
【０１３２】
最後に、平文ブロックＭ１、Ｍ２、・・・・・Ｍｎを連結し、平文データとしてデータ記憶部230に格納する。
【０１３３】
検索クライアント200の全体処理部は、秘匿データの復号処理用に確保した作業領域を一時記憶部280から解放する。
【０１３４】
なお、秘匿データの復号手順は、必ずしも上記の記述通りの順序に従う必要はなく、異なる順序で実施してもよい。
【０１３５】
また、秘匿データの復号を、検索クライアント200ではなく、登録クライアント100が処理しても良い。
【０１３６】
＜更新型秘密鍵の更新フロー＞
登録クライアント100における更新型秘密鍵170の更新処理を示す。この処理を利用することにより、古い更新型秘密鍵を失効させ、新しい更新型秘密鍵を有する登録クライアントと検索クライアントだけが正常な動作を実現できるようになる。
【０１３７】
登録クライアント100は、鍵生成部118を用い、更新型秘密鍵170を生成する(S1001)。例えば、鍵生成アルゴリズムを用い、鍵マスク生成鍵171と鍵マスク用ノンス172をそれぞれ独立に生成する。なお、更新型秘密鍵170は、鍵マスク生成鍵171と鍵マスク用ノンス172から構成されるが、両方を生成してもよく、一方を生成してもよい。
【０１３８】
登録クライアント100は、新たに生成した更新型秘密鍵170を用い、ネットワーク400経由で管理サーバ300における秘匿データ343を更新する(S1002)。秘匿データの更新フローについては後述する。
【０１３９】
秘匿データの更新フロー終了後、登録クライアントはS1001で生成した更新型秘密鍵170を新しい更新型秘密鍵170として、鍵記憶部150に登録する(S1003)。
【０１４０】
登録クライアント100は、ネットワーク経由で、検索クライアント200へ更新型秘密鍵を登録する(S1004)。
【０１４１】
なお、更新型秘密鍵170の更新処理の手順は、必ずしも上記の記述通りの順序に従う必要はない。
【０１４２】
また、処理の一部を別の処理で代替しても良い。例えば、S1001において、更新型秘密鍵170を生成する代わりに、入力部101または通信部103経由で、更新型秘密鍵170を取得しても良い。
【０１４３】
また、新たな処理を付け加えても良い。例えば、登録クライアント100はS1003で生成した新しい更新型秘密鍵170を登録後、古い更新型秘密鍵170は削除しても良い。
【０１４４】
また、更新型秘密鍵170の更新処理を、登録クライアント100ではなく、検索クライアント200が処理しても良い。
【０１４５】
＜更新型検索鍵の更新フロー＞
検索クライアント200における更新型検索鍵273の更新処理を示す。この処理を利用することにより、古い更新型検索鍵を失効させ、新しい更新型検索鍵を有する検索クライアント200と管理サーバ300だけが正常な動作を実現できるようになる。
【０１４６】
検索クライアント200は、鍵生成部218を用い、更新型秘密鍵270の一要素である、更新型検索鍵273を生成する(S1101)。例えば、鍵生成アルゴリズムを用い、更新型検索鍵273を生成する。
【０１４７】
検索クライアント200は、ネットワーク経由400で、管理サーバ300に更新型検索鍵273を登録する (S1102)。
【０１４８】
検索クライアントはS1001で生成した更新型検索鍵273を新しい更新型検索鍵273として、鍵記憶部250に登録する(S1003)。
【０１４９】
なお、更新型検索鍵273の更新処理の手順は、必ずしも上記の記述通りの順序に従う必要はない。
【０１５０】
また、処理の一部を別の処理で代替しても良い。例えば、S1101において、更新型検索鍵273を生成する代わりに、入力部201または通信部203経由で、更新型検索鍵273を取得しても良い。
【０１５１】
また、新たな処理を付け加えても良い。例えば、検索クライアント200はS1103で生成した新しい更新型検索鍵273を登録後、古い更新型検索鍵273は削除しても良い。
【０１５２】
また、更新型検索鍵273の更新処理を、検索クライアント200ではなく、管理サーバ300が処理しても良い。その際には、S1102は、検索クライアント200は、ネットワーク400経由で、管理サーバ300から、更新型検索鍵273を取得する。
【０１５３】
＜秘匿データの更新フロー＞
登録クライアント100の更新型秘密鍵の更新に伴い、管理サーバ300が預かる秘匿データの更新処理（古い更新型秘密鍵から新しい更新型秘密鍵の付け替えに対応）を行う。ネットワーク400を経由し、登録クライアント100が送信した差分鍵マスクを用い、管理サーバ300がデータベース341における秘匿データ343を更新する処理を示すシーケンスを説明する。
【０１５４】
登録クライアント100は、通信部103から、ネットワーク400を経由し、秘匿データ343のサイズを、管理サーバ300へ、問い合わせを送信する処理を行う(S301)。
【０１５５】
管理サーバ300は、通信部303から、ネットワーク400を経由し、登録クライアント100が送信した問い合わせを受信する処理を行う(S302)。
【０１５６】
管理サーバ300は、通信部303から、ネットワーク400を経由し、登録クライアント300へ秘匿データのサイズを送信する処理を行う(S303)。
【０１５７】
登録クライアント100は、通信部103から、ネットワーク400を経由し、管理サーバ300が送信した、秘匿データのサイズを受信する処理を行う(S304)。
【０１５８】
管理サーバ300の全体処理部311は、基本演算部317を用い、秘匿データのサイズから初期ベクトルと秘匿データ用の検索タグのサイズを差し引き、暗号文本体のサイズを算出する(S305)。
【０１５９】
管理サーバ300の全体処理部311は、暗号文本体以上となるサイズを、生成する差分鍵マスクのサイズとみなし、そのサイズを登録クライアント100に送信する(S306)。
【０１６０】
登録クライアント100は、制御部110により、管理サーバ300から受信した上記サイズの差分鍵マスクを生成する処理を行う(S307)。
【０１６１】
登録クライアント100は、通信部103から、ネットワーク400を経由し、生成した差分鍵マスクを管理サーバ300へ送信する処理を行う(S308)。
【０１６２】
管理サーバ300は、通信部303から、ネットワーク400を経由し、登録クライアント100が送信した差分鍵マスクを受信する処理を行う(S309)。
【０１６３】
管理サーバ300は、制御部310により、受信した差分鍵マスクを用い、データベース341の構成情報である秘匿データ343の更新処理を行い、更新した秘匿データ343を記憶部320へ記憶する処理を行う(S310)。
【０１６４】
管理サーバ300は、秘匿データ343の更新処理の成否を、通信部303から、ネットワーク400を経由し、登録クライアント100へ送信する処理を行う(S311)。
【０１６５】
登録クライアント100は、通信部103から、ネットワーク400を経由し、管理サーバ300が送信した、秘匿データ343の更新処理の成否を、受信する処理を行う(S312)。
【０１６６】
登録クライアント100は、出力部102を経由し、ユーザに秘匿データ343の更新処理の成否情報を表示する処理を行う(S313)。
【０１６７】
なお、このシーケンスの処理手順は、必ずしも上記の記述通りの順序に従う必要はなく、異なる順序で実施してもよい。また、必ずしも上記に記述された手順を全て処理する必要はない。また、処理の一部を別の処理で代替しても良い。例えば、S306において、予め定められた値を差分鍵マスクのサイズとみなしても良い。また、更に処理を追加しても良い。例えば、S310終了後、登録クライアントは更新前の秘匿データに対応する、更新型秘密鍵を削除する処理を行ってもよい。また、登録クライアント100の代わりに、検索クライアント200が登録クライアント100の役割を実施しても良い。
【０１６８】
なお、上記では、更新型秘密鍵の更新処理のみを説明したが、更新型検索鍵の更新処理もあわせて行っても良い。更新型検索鍵の更新処理は、検索クライアントが新しい更新型検索鍵を管理サーバへ送信、管理サーバがそれを預かればよい。また更新型検索鍵の更新処理は検索クライアントと管理サーバで行っても良い。また、登録クライアント、検索クライアント、管理サーバが複数存在する場合、それぞれの登録クライアントまたは検索クライアント別に異なる更新型検索鍵を管理サーバが利用するようにしても良い。
【０１６９】
＜差分鍵マスクの生成フロー＞
差分鍵マスクとは、登録クライアント100が保有する新しい秘密鍵と古い秘密鍵から、それぞれ独立に生成した2種類の鍵ストリームの、差分を指す。2種類の秘密鍵から生成した、2種類の鍵ストリームの差分である差分鍵マスクによって、後述するように、管理サーバ300は秘匿データを古い秘密鍵から新しい秘密鍵に対応する秘匿データに更新できる。
【０１７０】
ここでは、登録クライアント100における差分鍵マスクの生成処理の手順を、図１２を用いて示す。
【０１７１】
登録クライアント100は、差分鍵マスクの生成処理に必要な従来の鍵マスク用ノンス172と従来の鍵マスク生成鍵171に加え、新しい鍵マスク用ノンス172’と新しい鍵マスク生成鍵171’を保有する。
【０１７２】
登録クライアント100の全体処理部111は、差分鍵マスクの生成処理に必要な作業領域を一時記憶部180に確保する。
【０１７３】
登録クライアント100の全体処理部111は、擬似乱数生成部114に従来の鍵マスク用ノンス172と従来の鍵マスク生成鍵171を入力し、ｎ個分の中間暗号化データに用いる従来の鍵ストリームを生成する。例えば、図１１内の図１１(b)に示すように、従来の鍵マスク用ノンス172と定数を連結したデータと従来の鍵マスク生成鍵171を擬似乱数生成部114に入力し、ｎ個分のブロックに相当する従来の鍵ストリームＴ１、Ｔ２、……Ｔｎを生成する。
【０１７４】
登録クライアント100の全体処理部111は、擬似乱数生成部114に新しい鍵マスク用ノンス172’と新しい鍵マスク生成鍵171’を入力し、ｎ個分の中間暗号化データに用いる新しい鍵ストリームを生成する。例えば、図１１内の図１１(b)に示すように、新しい鍵マスク用ノンス172’と定数を連結したデータと新しい鍵マスク生成鍵171’を擬似乱数生成部114に入力し、ｎ個分のブロックに相当する新しい鍵ストリームＴ１’、Ｔ２’、……Ｔｎ’を生成する。
【０１７５】
登録クライアント100の全体処理部111は、基本演算部117に従来の鍵ストリームと新しい鍵ストリームを入力し、基本演算部117は排他的論理和(XOR算)を計算し、出力結果Ｓ１、Ｓ２、……Ｓｎを差分鍵マスクとして取得する。
（数１０）
Ｓｉ＝Ｔｉ xor Ｔi’（ｉ＝１、・・・ｎ）
新しい鍵ストリームＴｉ’は従来の鍵ストリームＴiでマスクされており、このマスクを解除できるのは、従来の鍵マスク用ノンス172と従来の鍵マスク生成鍵171を保有する登録クライアント100または検索クライアント200に限られる。従って、管理サーバ300に新しい鍵ストリームＴｉ’または従来の鍵ストリームＴｉの値が直接的に漏洩することはない。
【０１７６】
登録クライアント100の全体処理部111は、差分鍵マスクの生成処理用に確保した作業領域を一時記憶部180から解放する。
【０１７７】
なお、差分鍵マスクの生成手順は、必ずしも上記の記述通りの順序に従う必要はなく、異なる順序で実施してもよい。
【０１７８】
また、差分鍵マスクの生成を、登録クライアント100ではなく、検索クライアント200が処理しても良い。この場合、検索クライアント200が保有する従来の鍵マスク用ノンス272と従来の鍵マスク生成鍵271に加え、新しい鍵マスク用ノンス272’と新しい鍵マスク生成鍵271’を用いればよい。これにより、差分鍵マスクを用いて秘匿キーワードを更新することができる。
【０１７９】
＜秘匿化データの更新フロー＞
管理サーバ300における秘匿データの更新処理の手順を図１３に示す。  
管理サーバ300の全体処理部311は、秘匿データ343の再暗号化処理に必要な作業領域を一時記憶部380に確保する。
【０１８０】
管理サーバ300の全体処理部311は、データベース341内に格納されている秘匿データ343を取得する。さらに、秘匿データ343から、暗号文本体を取り出す。
【０１８１】
管理サーバ300の全体処理部311は、基本演算部317に従来の暗号文本体と従来の鍵ストリームを入力し、排他的論理和(XOR算)を計算し、出力結果Ｄ１’、Ｄ２’、……Ｄｎ’を新しい暗号文本体として取得する。
【０１８２】
ここで計算式として、（数１１）が成り立つ。  
（数１１）
Ｄｉ’＝Ｄｉ xor Ｓｉ
＝(Ｃｉ xor Ｒｉ  xor Ｔｉ)xor (Ｔｉ  xor Ｔｉ’)
＝Ｃｉ xor Ｒｉ  xor Ｔｉ’                    （ｉ＝１、・・・ｎ）
（数１１）より、従来の暗号文本体は、中間暗号文Ｃｉと乱数ストリームＲｉと従来の鍵ストリームＴｉの排他的論理和（xor）で算出（Ｄｉ＝  Ｃｉ xor Ｒｉ  xor Ｔｉ）されていたが、新しい暗号文本体は中間暗号文Ｃｉと乱数ストリームＲｉと新しい鍵ストリームＴｉ’の排他的論理和（xor）で算出（Ｄｉ’＝  Ｃｉ xor Ｒｉ  xor Ｔｉ’）される。従って、従来の鍵ストリームＴｉが新しい鍵ストリームＴｉ’に変更された。
【０１８３】
管理サーバ300の全体処理部は、初期ベクトル336と、暗号文本体Ｄ１’、Ｄ２’、……Ｄｎ’、検索タグＤｎ＋１を連結したデータを新しい秘匿データとしてデータ記憶部に格納する。
【０１８４】
この秘匿データの復号処理に、従来の鍵マスク生成鍵と鍵マスク用ノンスではなく、新しい鍵マスク生成鍵と鍵マスク用ノンスを必要とする、新しい秘匿データが生成された。
【０１８５】
管理サーバ300の全体処理部は、秘匿データ343の更新処理用に確保した作業領域を一時記憶部380から解放する。
【０１８６】
なお、管理サーバ300における秘匿データの更新手順は、必ずしも上記の記述通りの順序に従う必要はなく、異なる順序で実施してもよい。
【０１８７】
（実施の形態２）
第二の実施形態では、登録クライアント100と検索クライアント200と管理サーバ300とがネットワーク500とネットワーク600で接続されたシステムにおいて、登録クライアント100が生成した秘匿データを管理サーバ300に登録し、管理サーバ300が差分鍵マスクによって検索クライアント200が保有する秘密鍵に対応させる秘匿データに更新し、検索クライアント200がその秘匿データの検索を管理サーバ300に依頼し、管理サーバ300から取得した秘匿データを復号できることを示す。複数の検索クライアント200がそれぞれ異なる秘密鍵を保有する場合も、管理サーバ300がもつ差分鍵マスクによってそれぞれの検索クライアント200が保有する秘密鍵に対応させる秘匿データに更新し、検索クライアントが復号可能な状態に秘匿データを変更できる。
【０１８８】
図１４は、本実施形態のシステムの概略図である。図示するように、検索処理システムは、登録クライアント100と、検索クライアント200と、管理サーバ300とを備え、登録クライアント100と管理サーバ300がネットワーク500、検索クライアント200と管理サーバ300がネットワーク600を介して情報を送受信できるよう構成されている。
【０１８９】
本実施形態における登録クライアント100と検索クライアント200は、第一の実施の形態と同様であるが、更新型秘密鍵170における鍵マスク生成鍵171と鍵マスク用ノンス172と、更新型秘密鍵270における鍵マスク生成鍵271と鍵マスク用ノンス272は、その少なくとも一方は値が異なる。
【０１９０】
本実施形態における管理サーバ300は、図15に示すように、第一の実施の形態と同様であるが、記憶部320における鍵記憶部350において差分鍵マスク355を保有するところが異なる。差分鍵マスク355は、登録クライアント100が保有する鍵マスク生成鍵171と鍵マスク用ノンス172と、検索クライアント200が保有する鍵マスク生成鍵271と鍵マスク用ノンス272の組み合わせ全数またはその一部を用いて生成される。差分鍵マスク355の生成処理は、後述するように、登録クライアント100が保有する鍵マスク生成鍵171と鍵マスク用ノンス172と、検索クライアント200が保有する鍵マスク生成鍵271と鍵マスク用ノンス272を用いる。
【０１９１】
＜差分鍵マスクの生成フロー＞
登録クライアント100による差分鍵マスクの生成処理の手順を示す。  
登録クライアント100は、鍵マスク用ノンス171と鍵マスク生成鍵172、検索クライアント200に配布する鍵マスク用ノンス271と鍵マスク生成鍵272を保有する。
【０１９２】
登録クライアント100の全体処理部111は、差分鍵マスクの生成処理に必要な作業領域を一時記憶部180に確保する。
【０１９３】
登録クライアント100の全体処理部111は、擬似乱数生成部114に鍵マスク用ノンス171と鍵マスク生成鍵172を入力し、ｎ個分の中間暗号化データに用いる鍵ストリーム(1)を生成する。例えば、図１１内の図１１(b)と同様に、鍵マスク用ノンス171と定数を連結したデータと鍵マスク生成鍵172を擬似乱数生成部114に入力し、ｎ個分のブロックに相当する鍵ストリーム(1)としてＴ１、Ｔ２、……Ｔｎを生成する。
【０１９４】
登録クライアント100の全体処理部111は、擬似乱数生成部114に鍵マスク用ノンス271と鍵マスク生成鍵272を入力し、ｎ個分の中間暗号化データに用いる鍵ストリーム(2)を生成する。例えば、図１１内の図１１(b)に示すように、鍵マスク用ノンス171と定数を連結したデータと鍵マスク生成鍵172を擬似乱数生成部114に入力し、ｎ個分のブロックに相当する鍵ストリーム(2)としてＴ１’、Ｔ２’、……Ｔｎ’を生成する。
【０１９５】
登録クライアント100の全体処理部111は、基本演算部117に鍵ストリーム(1)と鍵ストリーム(2)を入力し、基本演算部117は排他的論理和(XOR算)を計算し、出力結果Ｓ１、Ｓ２、……Ｓｎを差分鍵マスクとして取得する。
（数１２）
Ｓｉ＝Ｔｉ xor Ｔi’（ｉ＝１、・・・ｎ）
登録クライアント100の全体処理部117は、差分鍵マスクの生成処理用に確保した作業領域を一時記憶部180から解放する。
【０１９６】
なお、差分鍵マスクの生成手順は、必ずしも上記の記述通りの順序に従う必要はなく、異なる順序で実施してもよい。
【０１９７】
また、差分鍵マスクの主体を登録クライアント100としたが、検索クライアント200に変更し、登録クライアント100に配布するよう変更してもよい。
【０１９８】
また、差分鍵マスクの主体用に、信頼できる機関など新たなプレイヤを用意しても良い。
【０１９９】
＜差分鍵マスクの登録フロー＞
ネットワーク500を経由し、登録クライアント100に差分鍵マスクを送信し、管理サーバ300が鍵記憶部350差分鍵マスクを登録する処理を示すシーケンスを説明する。
【０２００】
登録クライアント100は、差分鍵マスクを生成する処理を行う(S301)。  
登録クライアント100は、通信部103から、ネットワーク500を経由し、差分鍵マスクを管理サーバ300へ送信する処理を行う(S302)。
【０２０１】
管理サーバ300は、通信部303から、ネットワーク500を経由し、登録クライアント100が送信した差分鍵マスクを受信する処理を行う(S303)。
【０２０２】
管理サーバ300は、制御部310により、受信した差分鍵マスクを、鍵記憶部350へ記憶する処理を行う(S304)。
【０２０３】
管理サーバ300は、差分鍵マスクの登録処理の成否を、通信部303から、ネットワーク500を経由し、登録クライアント100へ送信する処理を行う(S305)。
【０２０４】
登録クライアント100は、通信部103から、ネットワーク500を経由し、管理サーバ300が送信した、差分鍵マスクの登録処理の成否を、受信する処理を行う(S306)。
【０２０５】
登録クライアント100は、出力部102を経由し、ユーザに、登録処理の成否を含む、登録情報について、表示する処理を行う(S307)。
【０２０６】
以上が、ネットワーク500を経由し、登録クライアント100が差分鍵マスクを管理サーバ300へ登録する処理を示すシーケンスである。
【０２０７】
なお、このシーケンスの処理手順は、必ずしも上記の記述通りの順序に従う必要はなく、異なる順序で実施してもよい。また、必ずしも上記に記述された手順を全て処理する必要はない。
【０２０８】
また、ネットワーク600を経由し、検索クライアント200が差分鍵マスクを管理サーバ300へ登録するよう変更しても良い。
【０２０９】
＜秘匿データの検索フロー＞
ネットワーク600を経由し、検索クライアント200が送信した秘匿キーワードを用い、管理サーバ300がデータベース341を検索し、更に検索クライアント200が検索結果を取得する処理を示すシーケンスを説明する。
【０２１０】
検索クライアント200は、入力部201を経由し、ユーザから入力された情報を平文キーワード241として、記憶部220へ記憶する処理を行う(S401)。
【０２１１】
検索クライアント200は、制御部210により、平文キーワード241から秘匿キーワードを生成する処理を行う(S402)。
【０２１２】
検索クライアント200は、通信部203から、ネットワーク600を経由し、秘匿キーワードを、管理サーバ300へ、送信する処理を行う(S403)。
【０２１３】
管理サーバ300は、通信部303から、ネットワーク600を経由し、検索クライアント200が送信した秘匿キーワードを、受信する処理を行う(S404)。
【０２１４】
管理サーバ300は、制御部310により、秘匿キーワードの変換処理を行う(S405)。この秘匿キーワードの変換処理については後述する。
【０２１５】
管理サーバ300は、制御部310により、データベース341から、秘匿キーワードに関係する、秘匿データ343を検索する処理を行う(S406)。
【０２１６】
管理サーバ300は、秘匿キーワードに該当する秘匿データを変換する処理を行う(S407)。この変換処理は、登録クライアント100の更新型秘密鍵170に対応する秘匿データを、検索クライアント200の更新型秘密鍵270に対応する秘匿データに変換(更新)する処理である。例えば、第一の実施の形態で図１３を用いて報告した再暗号化処理により、この変換処理を実現する。
【０２１７】
管理サーバ300は、秘匿キーワードに該当する検索結果（秘匿データと平文データの両方またはいずれか一方で構成される）を、通信部303から、ネットワーク600を経由し、検索クライアント200へ送信する処理を行う(S408)。
【０２１８】
検索クライアント200は、通信部203から、ネットワーク600を経由し、管理サーバ300が送信した、検索結果を受信する処理を行う(S409)。
【０２１９】
秘匿データが検索結果に含まれる場合、検索クライアント200は、制御部210により、秘匿キーワードに該当する検索結果から、平文データを復元する（S410）。
【０２２０】
検索クライアント200は、出力部202を経由し、平文データを記憶部220に記憶する（S409）。
【０２２１】
検索クライアント200は、平文データを出力部202に表示する（S411）。
【０２２２】
以上が、ネットワーク600を経由し、検索クライアント200が送信した秘匿キーワードを用い、管理サーバ300がデータベース341を検索し、更に検索クライアント200が検索結果を取得する処理を示すシーケンスである。
【０２２３】
なお、このシーケンスの処理手順は、必ずしも上記の記述通りの順序に従う必要はなく、異なる順序で実施してもよい。また、必ずしも上記に記述された手順を全て処理する必要はない。
【０２２４】
このシーケンスは、秘匿キーワードを変換し、変換後の秘匿キーワードと秘匿データを検索する処理を説明した。これは、検索クライアントから管理サーバへ送信される秘匿キーワードの数が、管理サーバが管理する秘匿データの数より少ないため、検索において秘匿キーワードを変換した方が、秘匿データを変換するよりも、数が少なく効率的に処理できるからである。もちろん、変換先を秘匿キーワードに固定する必要はなく、秘匿キーワードではなく、秘匿データを変換し、秘匿キーワードと変換後の秘匿データを検索するように処理を変更しても良い。また、秘匿データと秘匿キーワードの双方を変換するように処理を変更しても良い。
【０２２５】
＜秘匿キーワードの変換フロー＞
管理サーバ300における秘匿キーワードの変換処理の手順を図１６に示す。  
管理サーバ300の全体処理部311は秘匿キーワードの変換処理に必要な作業領域を一時記憶部380に確保する。
【０２２６】
管理サーバ300の全体処理部311は、秘匿キーワードから暗号化キーワード本体を取得する。
【０２２７】
管理サーバ300の全体処理部311は、指定ブロック337の記述に従い、該当する差分鍵マスクの該当ブロックを取得する。例えば、暗号化アルゴリズム344として鍵長256ビットAES暗号CBCモード、指定ブロック337にｎ番目が指定されている場合、全体処理部311は差分鍵マスクを128ビット毎のブロックに分割し、差分鍵マスクＳ１、Ｓ２、……Ｓｎから、ｎ番目のデータであるＳｎを差分鍵マスクの該当ブロックとして出力する。
【０２２８】
管理サーバ300の全体処理部311は、基本演算部317に暗号化キーワード本体と差分鍵マスクの該当ブロックを入力し、排他的論理和(XOR算)を計算し、出力結果Ｗｎ’を新しい暗号化キーワード本体として取得する。
【０２２９】
ここで計算式として、（数１３）が成り立つ。
（数１３）
Ｗｎ xor Ｓｎ  ＝  Ｃｎ xor Ｐｎ  xor Ｔｎ’
（数１３）より、中間暗号化キーワードＣｎと乱数ストリームＲｎと従来の鍵ストリームＴｎの排他的論理和（xor）で算出（Ｗｉ＝  Ｃｉ xor Ｐｉ  xor Ｔｉ）されていた暗化キーワード文本体が、中間暗号文Ｃｉと乱数ストリームＲｉと新しい鍵ストリームＴｉ’の排他的論理和（xor）で算出（Ｗｉ’＝  Ｃｉ xor Ｐｉ  xor Ｔｉ’）で算出される新しい暗号化キーワード本体に変形された。従って、従来の鍵ストリームＴｉが新しい鍵ストリームＴｉ’に変更された。
【０２３０】
管理サーバ300の全体処理部311は、初期ベクトルと、暗号化キーワード本体、検察タグを連結したデータを新しい秘匿キーワードとする。
【０２３１】
管理サーバ300の全体処理部311は、秘匿キーワードの変換処理用に確保した作業領域を一時記憶部380から解放する。
【０２３２】
なお、管理サーバ300における秘匿データ343の更新手順は、必ずしも上記の記述通りの順序に従う必要はなく、異なる順序で実施してもよい。
【０２３３】
＜秘匿データの復号フロー＞
管理サーバ300は、第一の実施の形態の秘匿データの更新フローと同様の手順で、秘匿データを更新する。検索クライアント200は、第一の実施の形態の秘匿データの復号処理のと同様の手順で、秘匿データを復号する。
【０２３４】
このように、サーバ／クライアントモデルにおいて、サーバが暗号化状態で暗号化データを検索できる状態を維持したまま、かつ暗号化状態である秘密鍵に対応する暗号化データを別の秘密鍵に対応する暗号化データに変換することにより、サーバに対しても安全な状態を維持可能なシステムを構築できる。また、暗号化状態のデータを検索可能なサーバ／クライアント型のシステムにおいて、クライアント側の秘密鍵の更新に伴い、サーバ側の暗号化状態のデータを復号しないため、利用者側の負荷をかけずに効率的に再暗号化することができる。
【符号の説明】
【０２３５】
１００：登録クライアント、
２００：検索クライアント、
３００：管理サーバ、
４００：ネットワーク、
６００：コンピュータ、
１０１、２０１、３０１：入力部、
１０２、２０２、３０２：出力部、
１０３、２０３、３０３：通信部、
１１０、２１０、３１０：制御部、
１１１、２１１、３１１：全体処理部、
１１２、２１２：暗号化部、
２１３、３１３：復号化部、
１１４、２１４：擬似乱数生成部、
１１５、２１５、３１５：不可逆変換部、
１１６、２１６、３１６：準同型関数部、
１１７、２１７、３１７：基本演算部、
１１８、２１８：鍵生成部
１２０、２２０、３２０：記憶部、
１３０、２３０、３３０：データ記憶部、
１４０、２４０、３４０：暗号化コンテキスト、
１３１、３４２：平文データ、
１３５、３３５：検索タグ長、
１３６、２３６、３３６：初期ベクトル、
１４１、２４４、３４４：暗号化アルゴリズム
２３７、３３７：指定ブロック、
２４１：平文キーワード、
３４１：データベース、
３４３：秘匿データ、
１５０、２５０、３５０：鍵記憶部、
１５１、２５１：乱数マスク生成鍵、
１５２、２５２：データ暗号化鍵、
２５３：データ復号化鍵、
１６０、２６０、３６０：固定型秘密鍵
１７０、２７０：更新型秘密鍵
１７１、２７１：鍵マスク生成鍵
１７２、２７２：鍵マスク用ノンス
２７３、３５４：更新型検索鍵
１８０、２８０、３８０：一時記憶部、
６０１：ＣＰＵ(Central Processing Unit)、
６０２：メモリ、
６０３：外部記憶装置、
６０４：通信装置、
６０５：出力装置、
６０６：入力装置、
６０７：読書装置、
６０８：記憶媒体、
６０９：内部通信線。
【図１】
2017044779.tif 000003
【図２】
2017044779.tif 000004
【図３】
2017044779.tif 000005
【図４】
2017044779.tif 000006
【図５】
2017044779.tif 000007
【図６】
2017044779.tif 000008
【図７】
2017044779.tif 000009
【図８】
2017044779.tif 000010
【図９】
2017044779.tif 000011
【図１０】
2017044779.tif 000012
【図１１ａ】
2017044779.tif 000013
【図１１ｂ】
2017044779.tif 000014
【図１２】
2017044779.tif 000015
【図１３】
2017044779.tif 000016
【図１４】
2017044779.tif 000017
【図１５】
2017044779.tif 000018
【図１６】
2017044779.tif 000019