(57)【特許請求の範囲】
【請求項１】
文書を識別するための識別情報をノードに格納した木構造を保持する記憶部と、
前記記憶部に文書を登録する登録部と、を備え、
前記登録部は、文書を識別するための識別情報と単語の集合を含む文書と、鍵とを受け付ける受付部と、
受け付けた識別情報を前記木構造の葉ノードに登録する識別情報登録部と、
前記木構造の根ノードから該葉ノードまでの各ノードに登録された識別情報に対するセキュアインデックスを前記単語の集合と前記鍵に基づいて求め、求めたセキュアインデックスを加算したものを前記文書の検索用インデックスとして生成するセキュアインデックス生成部と、
受け付けた複数の文書のそれぞれに対して生成された検索用インデックスを加算したものを該複数の文書に対する検索用インデックスとして前記記憶部に格納するインデックス登録部と、を有し、
前記インデックス登録部は、前記複数の文書のそれぞれの文書に対して生成された検索用インデックスを暗号化した暗号文と該文書の識別情報とを関連付けた情報を、該文書を削除するための削除情報として前記記憶部に格納する、情報処理装置。
【請求項２】
削除すべき文書を識別するための識別情報と前記暗号化を解除するための復号情報とを受け付け、前記木構造から該識別情報を削除するとともに、前記削除情報において該識別情報に関連付けられた暗号文を、該復号情報を用いて復号することにより、該文書に対して生成された検索用インデックスを求め、求めた検索用インデックスを、前記複数の文書に対する検索用のインデックスから減算する削除部をさらに備える、請求項１に記載の情報処理装置。
【請求項３】
文書を識別するための識別情報をノードに格納した木構造を保持する記憶部と、
前記記憶部に文書を登録する登録部と、を備える情報処理装置であって、
前記登録部は、文書を識別するための識別情報と単語の集合を含む文書と、鍵とを受け付ける受付部と、
受け付けた識別情報を前記木構造の葉ノードに登録する識別情報登録部と、
前記木構造の根ノードから該葉ノードまでの各ノードに登録された識別情報に対するセキュアインデックスを前記単語の集合と前記鍵に基づいて求め、求めたセキュアインデックスを加算したものを前記文書の検索用インデックスとして生成するセキュアインデックス生成部と、
受け付けた複数の文書のそれぞれに対して生成された検索用インデックスを加算したものを該複数の文書に対する検索用インデックスとして前記記憶部に格納するインデックス登録部と、を有し、
前記情報処理装置は、単語と鍵とを受け付け、該鍵を用いて該単語に対するトラップドアを生成する検索依頼部と、
前記トラップドアを受け付け、前記複数の文書に対する検索用インデックスと前記木構造とを前記記憶部から読み出し、フラグが割り当てられていないノードのうちの最も根ノードに近いノードを前記木構造から選択し、選択したノードに登録された識別情報と前記トラップドアと該検索用インデックスとに基づいてセキュアインデックス判定を行い、前記単語が該識別情報によって識別される文書に含まれる判定された場合には、該ノードに第１のフラグを割り当てるとともに、それ以外の場合には、該ノードおよび該ノードの子孫のノードに第２のフラグを割り当てる処理を、前記木構造に含まれるすべてのノードにフラグが割り当てられるまで繰り返し、前記木構造に含まれるノードのうちの該第１のフラグが割り当てられたノードに登録された識別情報を出力する検索部と、
削除すべき文書を識別するための識別情報と前記暗号化を解除するための復号情報とを受け付け、前記木構造から該識別情報を削除するとともに、前記削除情報において該識別情報に関連付けられた暗号文を、該復号情報を用いて復号することにより、該文書に対して生成された検索用インデックスを求め、求めた検索用インデックスを、前記複数の文書に対する検索用のインデックスから減算する削除部と、をさらに備える、情報処理装置。
【請求項４】
前記削除部によって第１の文書を削除するとともに、前記登録部によって第２の文書を登録することで、該第１の文書を該第２の文書に更新する、請求項２または３に記載の情報処理装置。
【請求項５】
前記木構造は２分木構造である、請求項１ないし４のいずれか１項に記載の情報処理装置。
【請求項６】
前記検索部は、幅優先探索法に基づいて、前記木構造からノードを選択する、請求項３に記載の情報処理装置。
【請求項７】
前記検索部は、深さ優先探索法に基づいて、前記木構造からノードを選択することを特徴とする、請求項３に記載の情報処理装置。
【請求項８】
文書を識別するための識別情報と単語の集合を含む文書と、鍵とを受け付ける工程と、
文書を識別するための識別情報をノードに格納した木構造の葉ノードに対して、受け付けた識別情報を登録する工程と、
前記木構造の根ノードから前記葉ノードまでの各ノードに登録された識別情報に対するセキュアインデックスを前記単語の集合と前記鍵に基づいて求め、求めたセキュアインデックスを加算したものを前記文書の検索用インデックスとして生成する工程と、
受け付けた複数の文書のそれぞれに対して生成された検索用インデックスを加算したものを該複数の文書に対する検索用インデックスとして記憶部に格納する工程と、
前記複数の文書のそれぞれの文書に対して生成された検索用インデックスを暗号化した暗号文と該文書の識別情報とを関連付けた情報を、該文書を削除するための削除情報として前記記憶部に格納する工程と、を含む、情報処理方法。
【請求項９】
文書を識別するための識別情報と単語の集合を含む文書と、鍵とを受け付ける処理と、
文書を識別するための識別情報をノードに格納した木構造の葉ノードに対して、受け付けた識別情報を登録する処理と、
前記木構造の根ノードから前記葉ノードまでの各ノードに登録された識別情報に対するセキュアインデックスを前記単語の集合と前記鍵に基づいて求め、求めたセキュアインデックスを加算したものを前記文書の検索用インデックスとして生成する処理と、
受け付けた複数の文書のそれぞれに対して生成された検索用インデックスを加算したものを該複数の文書に対する検索用インデックスとして記憶部に格納する処理と、
前記複数の文書のそれぞれの文書に対して生成された検索用インデックスを暗号化した暗号文と該文書の識別情報とを関連付けた情報を、該文書を削除するための削除情報として前記記憶部に格納する処理と、をコンピュータに実行させる、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
［関連出願についての記載］
本発明は、日本国特許出願：特願２０１１−１５０５９５号（２０１１年  ７月  ７日出願）の優先権主張に基づくものであり、同出願の全記載内容は引用をもって本書に組み込み記載されているものとする。
本発明は、情報処理装置、情報処理方法およびプログラムに関し、特に、データベースの機能を保ちながら登録されているデータを暗号化し、情報漏洩に耐性を有する、キーワード検索用のインデックスを生成する情報処理装置、情報処理方法およびプログラムに関する。
【背景技術】
【０００２】
データの集合に対して生成されるデータであるインデックスを用いると、生成元のデータ集合から、所望の部分情報を含むデータを抽出することができる。データに文書を用い、部分情報に単語を用いることで、データベースにおいてキーワード検索を行うことが可能となる。【０００３】
情報漏洩を防ぐために文書を暗号化する場合においても、インデックスを暗号化しないときには、キーワード検索の機能には影響が及ばない。しかし、インデックスは対応する文書の情報を含むことから、情報漏洩への対策を施したインデックスを用いなければ、情報漏洩を防止することができない。【０００４】
非特許文献１、２において、情報漏洩に耐性を有するインデックスの生成方法が記載されている。非特許文献１に記載された方法は、非特許文献２に記載された方法と比較して、計算量および記憶容量の点で効率的である。そこで、以下では、非特許文献１に記載された方法について説明する。これらの文献に記載された方法は、いずれも非特許文献３に記載されたブルームフィルタ（Bloom Filter）という技術を用いる。本発明においても、ブルームフィルタを利用しうることから、まず、ブルームフィルタについて説明する。【０００５】
「ブルームフィルタ」
ブルームフィルタとは、値の集合を入力として生成されるビット列である。ブルームフィルタは、要素が集合に含まれているかどうかを効率的に判定するために用いることができる。ここでは、関数Ｇｅｎおよび関数Ｃｈｅｃｋの２つを用いて、ブルームフィルタに関する処理を説明する。関数Ｇｅｎは、値の集合｛ｗ＿１，…，ｗ＿ｎ｝を入力としてビット列を出力する関数である。一方、関数Ｃｈｅｃｋは、値ｗ＿ｉおよびビット列を入力として値ｗ＿ｉがビット列に対応する集合に含まれているかどうかを判定する関数である。【０００６】
集合｛ｗ＿１，…，ｗ＿ｎ｝に対する関数Ｇｅｎは、集合の要素ｗ＿ｉを入力としてビット列を出力するフィルタ関数Ｆを用い、ｗ＿１からｗ＿ｎをフィルタ関数Ｆに入力して得られたビット列の論理和を出力する関数として表される。【０００７】
図１は、ブルームフィルタの生成方法を説明するための図である。図１を参照して、一例として、集合｛ｗ＿１，ｗ＿２，＿ｗ３｝が入力された場合における関数Ｇｅｎの処理について説明する。図１を参照すると、Ｆ（ｗ＿１）が０１００１００１であり、Ｆ（ｗ＿２）が０００１００１０であり、Ｆ（ｗ＿３）が１００００１０１である場合には、集合｛ｗ＿１，ｗ＿２，ｗ＿３｝に対するブルームフィルタは、３つのビット列の各ビット同士の論理和をとることで、１１０１１１１１となる。【０００８】
フィルタｆと集合の要素ｗに対する関数Ｃｈｅｃｋは、フィルタ関数Ｆを用い、Ｆ（ｗ）において１である箇所のすべてがｆにおいても１であるかを調べ、すべて１であるときには１を、それ以外の場合０を出力する関数として表される。ここで、関数Ｃｈｅｃｋは１か０を出力する関数とし、要素ｗ＿ｉが文書ｄに含まれている場合には関数Ｃｈｅｃｋは１を出力し、要素ｗ＿ｉが文書ｄに含まれていない場合には関数Ｃｈｅｃｋは０を出力する。【０００９】
図２は、ブルームフィルタの判定方法を説明するための図である。図２を参照して、図１の集合｛ｗ＿１，ｗ＿２，ｗ＿３｝に対して生成されたブルームフィルタ１１０１１１１１と要素ｗ＿２が関数Ｃｈｅｃｋに入力された場合と、集合｛ｗ＿１，ｗ＿３｝に対して生成されたブルームフィルタ１０００１１０１と要素ｗ＿２が関数Ｃｈｅｃｋに入力された場合について説明する。【００１０】
図２（ａ）を参照すると、ブルームフィルタが１１０１１１１１であり、Ｆ（ｗ＿２）が０００１００１０である場合には、４ビット目と７ビット目がともに１である（一致）ことから、関数Ｃｈｅｃｋは１を出力する。【００１１】
一方、図２（ｂ）を参照すると、ブルームフィルタが１１００１１０１であり、Ｆ（ｗ＿２）が０００１００１０である場合には、４ビット目と７ビット目がともに１とはならない（すなわち、不一致である）ことから、関数Ｃｈｅｃｋは０を出力する。【００１２】
関数Ｃｈｅｃｋを用いると、１つの単語に関するフィルタ値を計算し、これを入力されたブルームフィルタと比較するだけでよい。したがって、集合の各要素がｗ＿ｉであるか否かを１つずつ調べる場合と比較して、処理が効率的である。【００１３】
ブルームフィルタは、以下の特徴を有することが知られている。【００１４】
「特徴１」
関数Ｃｈｅｃｋは、入力された要素ｗ＿ｉが含まれていない集合に対して計算されたブルームフィルタに対しても１を出力する場合がある。一方、関数Ｃｈｅｃｋは、要素ｗ＿ｉが集合に含まれている場合には必ず１を出力する。【００１５】
非特許文献３には、関数Ｃｈｅｃｋが誤って１を出力することが少なくなる、性質の良いフィルタ関数Ｆを選ぶ方法が記載されている。【００１６】
「特徴１」を利用すると、文書を単語の集合とみなし、単語の集合を入力としたブルームフィルタを作成し、各文書とブルームフィルタとを対応付けて保管することで、文書のキーワード検索を効率化することができる。【００１７】
各文書に対応するブルームフィルタがキーワードを含んでいるか否かを、関数Ｃｈｅｃｋによって判定し、１が出力されたブルームフィルタに対応する文書を抽出することにより、各文書がキーワードを含んでいるかどうかを直接調べる必要が無くなるからである。【００１８】
ブルームフィルタは、さらに、次の特徴を有する。【００１９】
「特徴２」
集合Ｓ＿１に対して生成されたブルームフィルタｆ＿｛Ｓ＿１｝と集合Ｓ＿２についてのブルームフィルタｆ＿｛Ｓ＿２｝の論理和をとると、集合Ｓ＿１と集合Ｓ＿２の和集合に対するブルームフィルタが得られる。したがって、集合を文書とし、要素を単語とすると、論理和をとったブルームフィルタは、両方の文書に含まれる単語の和集合によって表される文書に対するブルームフィルタとなる。【００２０】
「特徴２」は、異なる文書に対して同一のフィルタ関数Ｆを用いることに起因する。ここでは、文書Ｄ＿１と文書Ｄ＿２に対するブルームフィルタの論理和を、文書Ｄ＿１、Ｄ＿２のブルームフィルタと記載する。また、下つきの文字が２つ以上連番になっている場合には、文書Ｄ＿１，…，Ｄ＿４のブルームフィルタと記載する。【００２１】
ここで、簡単な事例に基づいて、論理和演算を説明する。論理和演算は次のように行われる。
ブルームフィルタＡ：０１０００１
ブルームフィルタＢ：０１０１００
Ａ○Ｂ            ：０１０１０１【００２２】
以下では、ブルームフィルタｆ＿｛Ｓ＿１｝とブルームフィルタｆ＿｛Ｓ＿２｝の論理和をとる演算を、ｆ＿｛Ｓ＿１｝○ｆ＿｛Ｓ＿２｝と記述する。
【先行技術文献】
【非特許文献】
【００２３】
【非特許文献１】Eu-Jin Goh,"Secure Indexes," May 5,2004[online],[平成23年6月21日検索],インターネット<URL:http://crypto.stanford.edu/~eujin/papers/secureindex/secureindex.pdf>
【非特許文献２】Y.-C.Chang and M.Mitzenmacher,"Privacy Preserving Keyword Searches on Remote Encrypted Data," Cryptology ePrint Archive, Report 2004/051, Feb.2004. [online],[平成23年6月21日検索],インターネット<URL:http://eprint.iacr.org/2004/051.pdf>
【非特許文献３】B.Bloom,"Space/Time Trade-offs in Hash Coding with Allowable Errors," Communications of the ACM, vol.13, No.7, pp.422-426, July 1970.
【発明の概要】
【発明が解決しようとする課題】
【００２４】
以下の分析は、本発明者によってなされたものである。【００２５】
上述のキーワード検索の方法によると、すべてのブルームフィルタに対して関数Ｃｈｅｃｋを実行する必要がある。「特徴２」を用いると、多くの文書に含まれていない単語に関するキーワード検索を効率化することができる。【００２６】
この効率化手法では、まず、各文書に対して１つずつブルームフィルタを生成した後、検索を補助するブルームフィルタを生成する。具体的には、複数のブルームフィルタを入力とし、複数のブルームフィルタを出力する処理Ｃｏｎｃを導入する。処理Ｃｏｎｃは、複数のブルームフィルタＦ＿１，…，Ｆ＿ｎを入力とする。ここで、＿｛｝の内部に記載されている文字１，…，ｎは、ブルームフィルタに振られた識別情報として用いる。識別情報は、対応させた文書のファイル名等であってもよい。処理Ｃｏｎｃにおいては、処理の途中で、集合ｔｍｐを用いる。【００２７】
処理Ｃｏｎｃ：
１．集合ｔｍｐを空集合（φ）とする。
２．ブルームフィルタＦ＿１〜Ｆ＿ｎが入力される。
３．ブルームフィルタＦ＿１〜Ｆ＿ｎを集合ｔｍｐに加える。
４．集合ｔｍｐから２つの要素Ｆ＿ｉ，Ｆ＿ｊを選択する。
５．論理和Ｆ＿ｉ○Ｆ＿ｊを計算し、集合ｔｍｐに加える。
６．要素Ｆ＿ｉ，Ｆ＿ｊを集合ｔｍｐから取り除く。
７．（Ｆ＿ｉ，（ｉ，ｊ））と（Ｆ＿ｊ，（ｉ，ｊ））を出力する。
８．Ｆ＿｛ｉ，ｊ｝を集合ｔｍｐに加える。
９．集合ｔｍｐに含まれている要素数が１つの場合には、その要素と根ノードを表す識別情報を組として出力して、処理を終了する。それ以外の場合には、４の処理に戻る。【００２８】
以上の処理によって生成されたブルームフィルタは、入力されたブルームフィルタを葉ノードとし、それらの論理和を中間のノードとし、すべてのフィルタの論理和が根ノードである木構造に対応付けることができる。また、各中間のノードのブルームフィルタは親ノードの識別情報との組として出力される。したがって、親ノードの識別情報から、その子ノードに対応するフィルタを容易に選び出すことができる。ブルームフィルタと親の識別情報を組にしているのは、後に根ノードからの検索処理を行う際に利用するためである。ただし、根ノードから葉ノードに向かってたどることができる方法であれば、これ以外の方法であってもよい。【００２９】
図３は、８つのブルームフィルタＦ＿｛１｝，…，Ｆ＿｛８｝を処理Ｃｏｎｃに入力した場合に出力されるフィルタを、一例として木構造に表した図である。図３は、一例として、２分木構造を示す。【００３０】
「特徴２」によると、以上の方法で生成された各ブルームフィルタＦ＿｛ｉ，…｝は、｛｝内に記載された文書が含む単語の和集合を単語の集合として有する文書に対するブルームフィルタとなる。【００３１】
まず、根ノードのフィルタから幅優先で検索処理を行い、０が出力された場合には、どの文書にも含まれていないと判断し、１が出力された場合には、その子のノードに対して検索処理を行い、順に葉ノードまで下って行き、どの文書が対象の単語を含むかを調べることが可能となる。【００３２】
次に、この検索処理を実行する処理ＴＳについて説明する。処理ＴＳには、文書に対して処理Ｃｏｎｃを用いて生成された複数のブルームフィルタと、キーワードｗとが入力される。【００３３】
処理ＴＳ：
１．入力されたブルームフィルタから、根ノードを表す識別情報＊を組として持つ（Ｆ＿｛ｉ，…，ｊ｝，（＊））を捜し、集合ｔｍｐ１に挿入する。
２．集合ｔｍｐ１が空集合でない場合には、集合ｔｍｐ１からブルームフィルタＦ＿｛ｉ，…｝を１つ選択する。それ以外の場合には、処理を終了する。
３．Ｃｈｅｃｋ（Ｆ＿｛ｉ，…｝，ｗ）＝１の場合には、（Ｆ＿｛ｉ，…，ｊ｝，（＊））を集合ｔｍｐ１から取り除き、集合ｔｍｐ２に｛ｉ，…｝を親ノードの識別情報として持つブルームフィルタをすべて挿入する。また、Ｆ＿｛ｉ，…｝が単一の文書に対するブルームフィルタである場合には、｛ｉ，…｝を出力する。一方、Ｃｈｅｃｋ（Ｆ＿｛ｉ，…｝，ｗ）＝０である場合には、（Ｆ＿｛ｉ，…，ｊ｝，（＊））を集合ｔｍｐ１から取り除く。
４．集合ｔｍｐ１が空集合でない場合には、２の処理に戻る。一方、集合ｔｍｐ１が空集合の場合には、集合ｔｍｐ２の要素のすべてを集合ｔｍｐ１に移し、２の処理に戻る。【００３４】
多くの文書が登録されており、かつ、検索対象のキーワードを含む文書の数が少ない場合には、この方法を用いたキーワード検索を効率的に実行することができる。図３は、２分木構造となっている。しかし、処理Ｃｏｎｃの設計によっては２分木構造とならないこともある。登録文書数がｎであり、２分木構造でフィルタを生成する処理Ｃｏｎｃを用いた場合において、検索対象のキーワードを含む文書の数がｘであるときには、高々２＊ｘ＊（ｌｏｇ＿２  ｎ）個のフィルタをチェックすればよいという効果がもたらされる。ここでは、説明の便宜上、２分木構造を用いるものとする。【００３５】
以上の方法によると、検索処理を効率化することが可能となる。しかしながら、この方法では、文書が削除される場合、および、文書が更新される場合が考慮されていないという問題がある。【００３６】
例えば、文書Ｄ＿１について作成されたブルームフィルタがＦ＿１＝１０１１０であり、文書Ｄ＿｛２，…｝について作成されたブルームフィルタがＦ＿｛２，…｝＝０１１１０である場合には、文書Ｄ＿｛１，２，…｝に対するブルームフィルタはＦ＿｛１，２，…｝＝１１１１０となる。このとき、Ｆ＿｛１，２，…｝からＦ＿｛１｝に関する情報を消去し、Ｆ＿｛２，…｝に関するブルームフィルタを求める場合、Ｆ＿｛１，２，…｝とＦ＿｛１｝だけでは不十分である。１，３，４ビット目のようにＦ＿｛１，２｝とＦ＿｛１｝の両方が１である箇所について、Ｆ＿｛２，…｝が０または１のいずれであるかを判定できないからである。【００３７】
この問題は、ブルームフィルタが有する次の特徴を用いて解決することができる。【００３８】
「特徴３」
ブルームフィルタの各ビットを値とした配列として扱い、集合Ｓ＿１，Ｓ＿２に対して生成されたブルームフィルタＦ＿｛Ｓ＿１｝とＦ＿｛Ｓ＿２｝の配列の各要素を加算した配列を配列Ｃとする。配列Ｃ中の各要素を、要素が０である場合には０とみなし、要素が１以上である場合には１とみなすと、配列Ｃは集合Ｓ＿１，Ｓ＿２の和集合に対して生成したブルームフィルタとなる。また、配列Ｃの各要素からＦ＿｛Ｓ＿１｝の配列の各要素を減算した配列において、配列中の各要素を、要素が０である場合には０とみなし、要素が１以上である場合には１とみなすと、集合Ｓ＿２のブルームフィルタとなる。【００３９】
以下では、このような配列同士の減算をｆ＿｛Ｓ＿１｝−ｆ＿｛Ｓ＿２｝と記述する。【００４０】
次に、簡単な例に基づいて、配列の加算および減算について説明する。配列同士の加算および減算は、次のように行われる。
配列Ａ                ：０２０１０１
配列Ｂ                ：０１０１００
配列Ｃ＝配列Ａ＋配列Ｂ：０３０２０１
配列Ｃ−配列Ｂ        ：０２０１０１【００４１】
なお、複数の配列同士の加算を行う場合には、記憶容量を抑える目的で、各配列の要素の値に上限を定めることがある。上限が定められている場合には、上限値に到達した値に加算するときには上限値のままとし、上限値に到達した値から減算するときにも上限値のままとする。このようにすると、演算後の配列から「特徴３」が失われないことが知られている。なお、非特許文献１においても、本発明においても、処理が正常に行われている限り、０からさらに減算を行うような処理は生じない。【００４２】
本発明において、ブルームフィルタや配列の加算を行う場合に、配列の要素の上限値に関しては、特に説明しない。ただし、加算を行う場合の上限値を定めてもよい。上限値を定めた場合には、上述の方法に従って加算を行うものとする。【００４３】
次に、「特徴３」を用いて、検索を効率化しつつ、登録された文書の削除および更新を可能とする方法について説明する。【００４４】
まず、最初の段階として、複数の文書が登録され、これらに対して検索を補助する情報を生成する場合について説明する。【００４５】
この方法においても、まず、各文書に対して一つずつブルームフィルタを生成した後、検索を補助する配列を生成する。具体的には、複数のブルームフィルタを入力とし、複数の配列を出力するアルゴリズムを用いる。ただし、上述の処理Ｃｏｎｃのステップ５の○処理を＋処理に置き換えるのみであることから、詳細な説明を省略する。【００４６】
図４は、８つのブルームフィルタＦ＿｛１｝，…，Ｆ＿｛８｝を処理Ｃｏｎｃ２に入力した場合に出力される配列を木構造に表した図である。図４は、処理Ｃｏｎｃの場合（図３）と同様に、２分木構造を示す。【００４７】
検索処理も、上述の処理ＴＳと同様の処理に基づいて実行することができる。関数Ｃｈｅｃｋを実行する際に配列が入力されていた場合には、上述の方法においてブルームフィルタとして取り扱う処理を追加するのみであることから、詳細な説明を省略する。【００４８】
次に、上述のようにして作成したデータ列から、文書を削除する方法について説明する。図５は、図４で作成したデータ列からＦ＿｛８｝に関する情報を削除する方法を示す。【００４９】
「特徴３」により、Ｆ＿｛８｝を子に持つデータ列からＦ＿｛８｝を減算すればよい。したがって、Ｆ＿｛７，８｝，｛５，…，８｝と，Ｆ＿｛５，…，８｝，｛１，…，８｝と、Ｆ＿｛１，…，８｝，｛＊｝のそれぞれから、Ｆ＿｛８｝を減算すれば、それぞれのビット列をブルームフィルタとみなした場合に、Ｆ＿｛８｝に関する情報が含まれなくなる。なお、木構造の左側は関与しないため、図５において、木構造の左側を省略した。ここで、Ｆ＿｛８｝以外のブルームフィルタの値は一切必要とされない。したがって、文書の削除を容易に行うことができる。【００５０】
一般に、Ｆ＿｛ｉ｝に関する情報を消去する場合には、｛，…，｝内にｉを含むビット列からＦ＿｛ｉ｝を減算すればよい。【００５１】
次に、文書を更新する方法について説明する。文書の更新は、文書を削除した後に、文書を追加することで実現し得る。図５に示すように、データ列からＦ＿｛８｝に関する情報を削除した後、別のＦ＿｛８｝を追加する方法を、図６を参照して説明する。図６を参照すると、「特徴３」により、Ｆ＿｛８｝を子に持つデータ列に新規のＦ＿｛８｝を加算すればよい。【００５２】
一般に、Ｆ＿｛ｉ｝に関する情報を追加する場合には、｛，…，｝内にｉを含むビット列にＦ＿｛ｉ｝を加算すればよい。【００５３】
以上の方法によると、中間ノードは、ビット列ではなくデータ列となる。したがって、以上の方法によると、「特徴２」を用いて検索を効率化した場合と比較して、検索を補助するデータに要する記憶容量が増大するものの、文書の削除および更新が容易となるという効果がもたらされる。【００５４】
ブルームフィルタは、キーワード検索に有用である。しかし、情報漏洩を防ぐ上で、ブルームフィルタには以下の２つの問題がある。【００５５】
「ブルームフィルタの第１の問題」
ブルームフィルタのフィルタ関数に入力されるのは、単語のみである。したがって、文書が異なる場合においても、同一の単語が含まれるときには、ブルームフィルタに現れる特徴は同一となる。したがって、ブルームフィルタ間の類似度は、もとの文書間の類似度と関係し、ブルームフィルタ間の類似度から情報が漏洩する。【００５６】
「ブルームフィルタの第２の問題」
検索処理は、単語とブルームフィルタを入力として行われる。すなわち、ブルームフィルタの情報があれば、誰でも検索を行なうことができる。したがって、フィルタに対応する文書が暗号化された状態で保存されていても、フィルタから多くの情報を取り出すことができる。【００５７】
非特許文献１、２において、これらの問題を解決する方法が記載されている。非特許文献１に記載された方法は、効率および安全性の点で、非特許文献２に記載された方法よりも優れている。そこで、以下では、非特許文献１に記載された２つの方法について説明する。【００５８】
「第１の方法」
第１の方法では、文書を、単語の集合と識別情報の組として扱う。識別情報として、文書を区別するためのファイル名、通し番号等の情報を用いることができる。識別情報がｚであって、単語としてｗ＿１，…，ｗ＿ｎを含む文書Ｄを（｛ｗ＿１，…，ｗ＿ｎ｝，ｚ）とする。【００５９】
第１の方法は、フィルタを生成する主体のみが所有する秘密の情報（以下、「鍵Ｋ」とする。）を用いる。鍵Ｋは、文書に含まれている各単語ｗ＿ｉをトラップドアと呼ばれる値に変換するために用いられる。この変換処理は、鍵と単語を入力とするトラップドア生成関数Ｔｒによって実現しうる。トラップドア生成関数Ｔｒに、鍵Ｋと単語ｗを入力したときの出力を、単語ｗのトラップドアという。以下では、トラップドア生成関数Ｔｒにより単語のトラップドアを生成する処理を、トラップドア生成処理という。【００６０】
また、第１の方法では、文書ごとに異なるフィルタ関数が用いられる。フィルタ関数として、ビット列を出力する関数であって、識別情報ｚとトラップドアとを入力とする関数を用いる。この関数を、識別情報依存フィルタ関数Ｆ’とする。【００６１】
第１の方法において、フィルタを生成する関数をＧｅｎ２とする。関数Ｇｅｎ２は、次のように表すことができる。【００６２】
関数Ｇｅｎ２：
１．文書（｛ｗ＿１，…，ｗ＿ｎ｝，ｚ）と鍵Ｋが入力される。
２．トラップドアｘ＿１＝Ｔｒ（Ｋ，ｗ＿１），…，ｘ＿ｎ＝Ｔｒ（Ｋ，ｗ＿ｎ）を計算する。
３．ビット列ｙ＿１＝Ｆ’（ｚ，ｘ＿１），…，ｙ＿ｎ＝Ｆ’（ｚ，ｘ＿ｎ）を計算する。
４．ビット列ｙ＿１〜ｙ＿ｎの論理和を求めて出力する。【００６３】
以上の処理によって生成されるフィルタを、セキュアインデックスという。ここでは、セキュアインデックスを生成する処理をセキュアインデックス生成処理という。【００６４】
図７は、第１の方法におけるセキュアインデックスの生成方法を説明するための図である。図７は、文書（｛ｗ＿１，ｗ＿２，ｗ＿３｝，ｚ）と鍵Ｋが関数Ｇｅｎ２に入力された場合の処理を示す。
【００６５】
次に、識別情報ｚに対応するフィルタｆが単語ｗを含んでいるかを調べる処理について説明する。ブルームフィルタでは、上述のように、単語とフィルタを入力とする関数Ｃｈｅｃｋを用いる。一方、第１の方法では、トラップドアｘとフィルタｆと識別情報ｚを入力とする関数Ｃｈｅｃｋ２を用いる。関数Ｃｈｅｃｋ２は、次のように表すことができる。【００６６】
関数Ｃｈｅｃｋ２：
１．フィルタｆと識別情報ｚとトラップドアｘが入力される。
２．ビット列ｙ＝Ｆ’（ｚ，ｘ）を計算する。
３．ビット列ｙにおいて１である箇所のすべてがフィルタｆにおいても１であるかを調べ、すべてが１である場合には１を出力し、それ以外の場合には０を出力する。【００６７】
以上の処理を、セキュアインデックス判定処理という。図８は、第１の方法におけるセキュアインデックスの判定方法を説明するための図である。図８は、関数Ｃｈｅｃｋ２の動作を一例として示す。トラップドアは、単語と鍵Ｋを用いて計算される。したがって、ある単語に関する検索を実行しようとしても、鍵Ｋを持っていない場合には、その単語に対応するトラップドアを計算することができず、関数Ｃｈｅｃｋ２を使用することができない。【００６８】
したがって、鍵Ｋを持っている主体のみが、トラップドアを計算し、文書とフィルタを保管しているデータベース等に検索処理を依頼することができる。ブルームフィルタを用いる場合には、データベースはどのような単語に関する検索も単独で実行することができた。一方、第１の方法によって生成されたフィルタに対しては、トラップドアを知っている値に関する検索しか行うことができない。なお、関数Ｃｈｅｃｋ２に入力されたフィルタがビット列ではなく、データ配列である場合には、各配列の値が０のときには０とみなし、それ以外のときには１とみなして、関数Ｃｈｅｃｋ２に記載された処理を実行するものとする。以上の方法によって、「ブルームフィルタの第２の問題」が解決される。【００６９】
また、「ブルームフィルタの第１の問題」は、すべての文書に関するフィルタ関数が同一であることに起因する。しかし、関数Ｇｅｎ２によると、識別情報が異なる場合には、識別情報依存フィルタ関数Ｆ’も異なる出力を行う。したがって、「ブルームフィルタの第１の問題」も解決される。【００７０】
第１の方法では、単語がトラップドアに変換される点でブルームフィルタと相違する。しかし、単語毎にビット列を計算し、その論理和をとるという点では、第１の方法はブルームフィルタと同一である。したがって、第１の方法は、ブルームフィルタが有する「特徴１」を備えている。すなわち、第１の方法はトラップドアを用いる点でブルームフィルタと相違するものの、すべてのフィルタに対して関数Ｃｈｅｃｋ２を適用することで、ブルームフィルタと同様にキーワード検索を実行することができる。【００７１】
また、第１の方法では、文書毎にフィルタ関数が異なる。したがって、２つの文書に対して生成された２つのフィルタの論理和を計算しても、２つの文書の持つ単語の和集合によって構成される文書のフィルタにはならない。したがって、第１の方法は、ブルームフィルタが有する「特徴２」を備えていない。同様の理由で、第１の方法は、ブルームフィルタが有する「特徴３」も備えていない。したがって、第１の方法によると、ブルームフィルタのように、検索を効率化する技術や、文書の削除、更新を容易化する技術を適用することができないという問題がある。【００７２】
この問題を解決するための方法も、非特許文献１に記載されている。以下では、非特許文献１に記載された方法を第２の方法として説明する。【００７３】
「第２の方法」
第２の方法では、文書を単語の集合として扱う。第２の方法でも、第１の方法と同様に、フィルタを生成する主体のみが所有する秘密の情報（すなわち鍵Ｋ）を用いるとともに、トラップドア生成関数Ｔｒを用いる。しかし、第２の方法では、ブルームフィルタと同様に、すべての文書に対して共通のフィルタ関数Ｆを用いる。【００７４】
第２の方法において、フィルタを生成する関数をＧｅｎ３とする。関数Ｇｅｎ３は、次のように表すことができる。【００７５】
関数Ｇｅｎ３：
１．文書｛ｗ＿１，…，ｗ＿ｎ｝と鍵Ｋが入力される。
２．トラップドアｘ＿１＝Ｔｒ（Ｋ，ｗ＿１），…，ｘ＿ｎ＝Ｔｒ（Ｋ，ｗ＿ｎ）を計算する。
３．ビット列ｙ＿１＝Ｆ（ｘ＿１），…，ｙ＿ｎ＝Ｆ（ｘ＿ｎ）を計算する。
４．ビット列ｙ＿１〜ｙ＿ｎの論理和を求めて出力する。【００７６】
図９は、第２の方法におけるセキュアインデックスの生成方法を説明するための図である。図９は、文書｛ｗ＿１，ｗ＿２，ｗ＿３｝と鍵Ｋが関数Ｇｅｎ３に入力された場合の処理を示す。
【００７７】
次に、あるフィルタｙが単語ｗを含んでいるか否かを調べる処理について説明する。第２の方法では、トラップドアとフィルタを入力とする関数Ｃｈｅｃｋ３を用いる。関数Ｃｈｅｃｋ３は、次のように表すことができる。【００７８】
関数Ｃｈｅｃｋ３：
１．フィルタｆとトラップドアｘが入力される。
２．ビット列ｙ＝Ｆ（ｘ）を計算する。
３．ビット列ｙにおいて１である箇所のすべてがフィルタｆにおいても１であるかを調べ、すべてが１である場合には１を出力し、それ以外の場合には０を出力する。【００７９】
図１０は、関数Ｃｈｅｃｋ３の動作を一例として示す。第２の方法によると、第１の方法と同様の理由により、「ブルームフィルタの第２の問題」が解決される。【００８０】
また、第２の方法では、すべての文書に対して同一のフィルタ関数Ｆを用いる。したがって、第２の方法は、ブルームフィルタの有する「特徴２」および「特徴３」を備えている。これらの特徴を用いることで、第２の方法によると、ブルームフィルタと同様に、検索を効率化する技術や、文書の削除更新を容易化する技術を適用することができる。【００８１】
しかし、第２の方法では、すべての文書で同一のフィルタ関数Ｆを用いるため、「ブルームフィルタの第１の問題」が生じる。【００８２】
以上により、第１の方法によると、情報漏洩に対する耐性が高い。しかし、第１の方法によると、出現率の低い単語に関する検索であっても、すべての文書に対応するインデックスを調べる必要があり、検索に時間を要するという問題がある。一方、第２の方法によると、検索を効率的に実行することができ、文書の削除や更新も容易に行うことができる。しかし、第２の方法によると、情報漏洩に対する耐性が弱いという問題がある。【００８３】
そこで、情報漏洩に耐性を有する、キーワード検索用のインデックスを生成することが課題となる。本発明の目的は、かかる課題を解決する情報処理装置、情報処理方法およびプログラムを提供することにある。
【課題を解決するための手段】
【００８４】
本発明の第１の視点に係る情報処理装置は、
文書を識別するための識別情報をノードに格納した木構造を保持する記憶部と、
前記記憶部に文書を登録する登録部と、を備え、
前記登録部は、文書を識別するための識別情報と単語の集合を含む文書と、鍵とを受け付ける受付部と、
受け付けた識別情報を前記木構造の葉ノードに登録する識別情報登録部と、
前記木構造の根ノードから該葉ノードまでの各ノードに登録された識別情報に対するセキュアインデックスを該単語の集合と該鍵に基づいて求め、求めたセキュアインデックスを加算したものを該文書の検索用インデックスとして生成するセキュアインデックス生成部と、
受け付けた複数の文書のそれぞれに対して生成された検索用インデックスを加算したものを該複数の文書に対する検索用インデックスとして前記記憶部に格納するインデックス登録部と、を有し、
前記インデックス登録部は、前記複数の文書のそれぞれの文書に対して生成された検索用インデックスを暗号化した暗号文と該文書の識別情報とを関連付けた情報を、該文書を削除するための削除情報として前記記憶部に格納する。
本発明の第２の視点に係る情報処理装置は、
文書を識別するための識別情報をノードに格納した木構造を保持する記憶部と、
前記記憶部に文書を登録する登録部と、を備える情報処理装置であって、
前記登録部は、文書を識別するための識別情報と単語の集合を含む文書と、鍵とを受け付ける受付部と、
受け付けた識別情報を前記木構造の葉ノードに登録する識別情報登録部と、
前記木構造の根ノードから該葉ノードまでの各ノードに登録された識別情報に対するセキュアインデックスを前記単語の集合と前記鍵に基づいて求め、求めたセキュアインデックスを加算したものを前記文書の検索用インデックスとして生成するセキュアインデックス生成部と、
受け付けた複数の文書のそれぞれに対して生成された検索用インデックスを加算したものを該複数の文書に対する検索用インデックスとして前記記憶部に格納するインデックス登録部と、を有し、
前記情報処理装置は、単語と鍵とを受け付け、該鍵を用いて該単語に対するトラップドアを生成する検索依頼部と、
前記トラップドアを受け付け、前記複数の文書に対する検索用インデックスと前記木構造とを前記記憶部から読み出し、フラグが割り当てられていないノードのうちの最も根ノードに近いノードを前記木構造から選択し、選択したノードに登録された識別情報と前記トラップドアと該検索用インデックスとに基づいてセキュアインデックス判定を行い、前記単語が該識別情報によって識別される文書に含まれる判定された場合には、該ノードに第１のフラグを割り当てるとともに、それ以外の場合には、該ノードおよび該ノードの子孫のノードに第２のフラグを割り当てる処理を、前記木構造に含まれるすべてのノードにフラグが割り当てられるまで繰り返し、前記木構造に含まれるノードのうちの該第１のフラグが割り当てられたノードに登録された識別情報を出力する検索部と、
削除すべき文書を識別するための識別情報と前記暗号化を解除するための復号情報とを受け付け、前記木構造から該識別情報を削除するとともに、前記削除情報において該識別情報に関連付けられた暗号文を、該復号情報を用いて復号することにより、該文書に対して生成された検索用インデックスを求め、求めた検索用インデックスを、前記複数の文書に対する検索用のインデックスから減算する削除部と、をさらに備える。
【００８５】
本発明の第２の視点に係る情報処理方法は、
文書を識別するための識別情報と単語の集合を含む文書と、鍵とを受け付ける工程と、
文書を識別するための識別情報をノードに格納した木構造の葉ノードに対して、受け付けた識別情報を登録する工程と、
前記木構造の根ノードから前記葉ノードまでの各ノードに登録された識別情報に対するセキュアインデックスを前記単語の集合と前記鍵に基づいて求め、求めたセキュアインデックスを加算したものを前記文書の検索用インデックスとして生成する工程と、
受け付けた複数の文書のそれぞれに対して生成された検索用インデックスを加算したものを該複数の文書に対する検索用インデックスとして記憶部に格納する工程と、
前記複数の文書のそれぞれの文書に対して生成された検索用インデックスを暗号化した暗号文と該文書の識別情報とを関連付けた情報を、該文書を削除するための削除情報として前記記憶部に格納する工程と、を含む。
【００８６】
本発明の第３の視点に係るプログラムは、
文書を識別するための識別情報と単語の集合を含む文書と、鍵とを受け付ける処理と、
文書を識別するための識別情報をノードに格納した木構造の葉ノードに対して、受け付けた識別情報を登録する処理と、
前記木構造の根ノードから前記葉ノードまでの各ノードに登録された識別情報に対するセキュアインデックスを前記単語の集合と前記鍵に基づいて求め、求めたセキュアインデックスを加算したものを前記文書の検索用インデックスとして生成する処理と、
受け付けた複数の文書のそれぞれに対して生成された検索用インデックスを加算したものを該複数の文書に対する検索用インデックスとして記憶部に格納する処理と、
前記複数の文書のそれぞれの文書に対して生成された検索用インデックスを暗号化した暗号文と該文書の識別情報とを関連付けた情報を、該文書を削除するための削除情報として前記記憶部に格納する処理と、をコンピュータに実行させる。
【００８７】
なお、プログラムは、非トランジエントな（ｎｏｎ−ｔｒａｎｓｉｅｎｔ）コンピュータ読み取り可能な記録媒体（computer-readable storage medium）に記録されていてもよい。
【発明の効果】
【００８８】
本発明に係る情報処理装置、情報処理方法およびプログラムによると、情報漏洩に耐性を有する、キーワード検索用のインデックスを生成することが可能となる。
【図面の簡単な説明】
【００８９】
【図１】ブルームフィルタの生成方法を説明するための図である。
【図２】ブルームフィルタの判定方法を説明するための図である。
【図３】ブルームフィルタの木構造管理を説明するための図（その１）である。
【図４】ブルームフィルタの木構造管理を説明するための図（その２）である。
【図５】木構造を用いて管理しているブルームフィルタにおける文書の削除方法を示す図である。
【図６】木構造を用いて管理しているブルームフィルタにおける文書の追加方法を示す図である。
【図７】非特許文献１に記載された第１の方法におけるセキュアインデックスの生成方法を説明するための図である。
【図８】非特許文献１に記載された第１の方法におけるセキュアインデックスの判定方法を説明するための図である。
【図９】非特許文献１に記載された第２の方法におけるセキュアインデックスの生成方法を説明するための図である。
【図１０】非特許文献１に記載された第２の方法におけるセキュアインデックスの判定方法を説明するための図である。
【図１１】第１の実施形態に係る情報処理装置の構成を一例として示すブロック図である。
【図１２】第１の実施形態に係る情報処理装置における登録部の構成を一例として示すブロック図である。
【図１３】第１の実施形態に係る情報処理装置における登録部の動作を一例として示すフローチャートである。
【図１４】第１の実施形態に係る情報処理装置における検索依頼部および検索部の構成を一例として示すブロック図である。
【図１５】第１の実施形態に係る情報処理装置における検索依頼部および検索部の動作を一例として示すフローチャートである。
【図１６】第１の実施形態に係る情報処理装置における削除部の動作を一例として示すフローチャートである。
【図１７】第２の実施形態に係る情報処理装置の構成を一例として示すブロック図である。
【発明を実施するための形態】
【００９０】
はじめに、本発明の概要について説明する。なお、この概要に付記する図面参照符号は、専ら理解を助けるための例示であり、本発明を図示の態様に限定することを意図するものではない。
【００９１】
本発明の情報処理装置は、文書の識別情報を木構造の葉ノードに対応させ、木構造の根ノードから葉ノードまでのそれぞれのノード情報を識別情報としたセキュアインデックスを生成し、加算したものを文書のインデックスとし、複数の文書についてのインデックスを生成した場合、それらを加算した値を記憶する。また、本発明の情報処理装置は、各文書に関連して生成した値を、削除用情報として暗号化して管理する。なお、上記においては、非特許文献１に記載された方法に基づいて説明したが、同様の性質を持つインデックス生成方法であれば、どのような方法を用いてもよい。
【００９２】
図１１および図１２を参照すると、本発明の情報処理装置（５０）は、文書を識別するための識別情報をノードに格納した木構造を保持する記憶部（５００）と、記憶部（５００）に文書を登録する登録部（１００）と、を備え、登録部（１００）は、文書を識別するための識別情報と単語の集合を含む文書と、鍵とを受け付ける受付部（１１１）と、受け付けた識別情報を前記木構造の葉ノードに登録する識別情報登録部（１１２）と、前記木構造の根ノードから該葉ノードまでの各ノードに登録された識別情報に対するセキュアインデックスを前記単語の集合と前記鍵に基づいて求め、求めたセキュアインデックスを加算したものを前記文書の検索用インデックスとして生成するセキュアインデックス生成部（１０２）と、受け付けた複数の文書のそれぞれに対して生成された検索用インデックスを加算したものを該複数の文書に対する検索用インデックスとして記憶部（５０１）に格納するインデックス登録部（１１３）と、を備える。
【００９３】
また、インデックス登録部（１１３）は、前記複数の文書のそれぞれの文書に対して生成された検索用インデックスを暗号化した暗号文と該文書の識別情報とを関連付けた情報を、該文書を削除するための削除情報として記憶部（５００）に格納することが好ましい。
【００９４】
さらに、情報処理装置（５０）は、単語と鍵とを受け付け、該鍵を用いて該単語に対するトラップドアを生成する検索依頼部（２００）と、前記トラップドアを受け付け、前記複数の文書に対する検索用インデックスと前記木構造とを記憶部（５００）から読み出し、フラグが割り当てられていないノードのうちの最も根ノードに近いノードを前記木構造から選択し、選択したノードに登録された識別情報と前記トラップドアと該検索用インデックスとに基づいてセキュアインデックス判定を行い、前記単語が該識別情報によって識別される文書に含まれる判定された場合には、該ノードに第１のフラグを割り当てるとともに、それ以外の場合には、該ノードおよび該ノードの子孫のノードに第２のフラグを割り当てる処理を、前記木構造に含まれるすべてのノードにフラグが割り当てられるまで繰り返し、前記木構造に含まれるノードのうちの該第１のフラグが割り当てられたノードに登録された識別情報を出力する検索部（３００）と、をさらに備えることが好ましい。
【００９５】
また、情報処理装置（５０）は、削除すべき文書を識別するための識別情報と前記暗号化を解除するための復号情報とを受け付け、前記木構造から該識別情報を削除するとともに、前記削除情報において該識別情報に関連付けられた暗号文を、該復号情報を用いて復号することにより、該文書に対して生成された検索用インデックスを求め、求めた検索用インデックスを、前記複数の文書に対する検索用のインデックスから減算する削除部（４００）をさらに備えることが好ましい。
【００９６】
なお、情報処理装置（５０）は、削除部（４００）によって第１の文書を削除するとともに、登録部（１００）によって第２の文書を登録することで、該第１の文書を該第２の文書に更新するようにしてもよい。
【００９７】
本発明の情報処理装置によると、各文書に関連して文書登録木の根ノードから葉ノードに至るノードそれぞれを識別情報としたセキュアインデックスがインデックスに加算されているので、各文書に含まれている単語に関するキーワード検索を正しく処理することが可能となる。かかる情報処理装置によると、ブルームフィルタにおいて特徴２や特徴３を利用した場合のように、文書登録木に沿った検索処理を実行することができる。また、本発明の情報処理装置によると、各文書に関連してインデックスに加算された値は削除情報記憶部に記録されているので、各文書を容易に削除することができる。さらに、本発明の情報処理装置では、すべての文書の検索に用いる情報が１つのインデックスにまとめられ、文書ごとの情報に分けられていない。
【００９８】
本発明において、下記の形態が可能である。
［形態１］
上記第１の視点に係る情報処理装置のとおりである。
［形態２］
前記登録部は、前記複数の文書のそれぞれの文書に対して生成された検索用インデックスを暗号化した暗号文と該文書の識別情報とを関連付けた情報を、該文書を削除するための削除情報として前記記憶部に格納するようにしてもよい。
［形態３］
上記の情報処理装置は、単語と鍵とを受け付け、該鍵を用いて該単語に対するトラップドアを生成する検索依頼部と、
前記トラップドアを受け付け、前記複数の文書に対する検索用インデックスと前記木構造とを前記記憶部から読み出し、フラグが割り当てられていないノードのうちの最も根ノードに近いノードを前記木構造から選択し、選択したノードに登録された識別情報と前記トラップドアと該検索用インデックスとに基づいてセキュアインデックス判定を行い、前記単語が該識別情報によって識別される文書に含まれる判定された場合には、該ノードに第１のフラグを割り当てるとともに、それ以外の場合には、該ノードおよび該ノードの子孫のノードに第２のフラグを割り当てる処理を、前記木構造に含まれるすべてのノードにフラグが割り当てられるまで繰り返し、前記木構造に含まれるノードのうちの該第１のフラグが割り当てられたノードに登録された識別情報を出力する検索部と、をさらに備えていてもよい。
［形態４］
上記の情報処理装置は、削除すべき文書を識別するための識別情報と前記暗号化を解除するための復号情報とを受け付け、前記木構造から該識別情報を削除するとともに、前記削除情報において該識別情報に関連付けられた暗号文を、該復号情報を用いて復号することにより、該文書に対して生成された検索用インデックスを求め、求めた検索用インデックスを、前記複数の文書に対する検索用のインデックスから減算する削除部をさらに備えていてもよい。
［形態５］
前記削除部によって第１の文書を削除するとともに、前記登録部によって第２の文書を登録することで、該第１の文書を該第２の文書に更新するようにしてもよい。
［形態６］
前記木構造は２分木構造であってもよい。
［形態７］
前記検索部は、幅優先探索法に基づいて、前記木構造からノードを選択するようにしてもよい。
［形態８］
前記検索部は、深さ優先探索法に基づいて、前記木構造からノードを選択するようにしてもよい。
［形態９］
上記第２の視点に係る情報処理方法のとおりである。
［形態１０］
上記情報処理方法は、前記複数の文書のそれぞれの文書に対して生成された検索用インデックスを暗号化した暗号文と該文書の識別情報とを関連付けた情報を、該文書を削除するための削除情報として前記記憶部に格納する工程をさらに含んでいてもよい。
［形態１１］
上記情報処理方法は、単語と鍵とを受け付け、該鍵を用いて該単語に対するトラップドアを生成する工程と、
フラグが割り当てられていないノードのうちの最も根ノードに近いノードを前記木構造から選択し、選択したノードに登録された識別情報と前記トラップドアと前記複数の文書に対する検索用インデックスとに基づいてセキュアインデックス判定を行い、前記単語が該識別情報によって識別される文書に含まれる判定された場合には、該ノードに第１のフラグを割り当てるとともに、それ以外の場合には、該ノードおよび該ノードの子孫のノードに第２のフラグを割り当てる処理を、前記木構造に含まれるすべてのノードにフラグが割り当てられるまで繰り返す工程と、
前記木構造に含まれるノードのうちの前記第１のフラグが割り当てられたノードに登録された識別情報を出力する工程と、をさらに含んでいてもよい。
［形態１２］
上記情報処理方法は、削除すべき文書を識別するための識別情報と前記暗号化を解除するための復号情報とを受け付ける工程と、
受け付けた識別情報を前記木構造から削除するとともに、前記削除情報において該識別情報に関連付けられた暗号文を、前記復号情報を用いて復号することにより、前記文書に対して生成された検索用インデックスを求め、求めた検索用インデックスを、前記複数の文書に対する検索用のインデックスから減算する工程と、をさらに含んでいてもよい。
［形態１３］
上記第３の視点に係るプログラムのとおりである。
［形態１４］
上記プログラムは、前記複数の文書のそれぞれの文書に対して生成された検索用インデックスを暗号化した暗号文と該文書の識別情報とを関連付けた情報を、該文書を削除するための削除情報として前記記憶部に格納する処理を、さらにコンピュータに実行させるようにしてもよい。
［形態１５］
上記プログラムは、単語と鍵とを受け付け、該鍵を用いて該単語に対するトラップドアを生成する処理と、
フラグが割り当てられていないノードのうちの最も根ノードに近いノードを前記木構造から選択し、選択したノードに登録された識別情報と前記トラップドアと前記複数の文書に対する検索用インデックスとに基づいてセキュアインデックス判定を行い、前記単語が該識別情報によって識別される文書に含まれる判定された場合には、該ノードに第１のフラグを割り当てるとともに、それ以外の場合には、該ノードおよび該ノードの子孫のノードに第２のフラグを割り当てる処理を、前記木構造に含まれるすべてのノードにフラグが割り当てられるまで繰り返す処理と、
前記木構造に含まれるノードのうちの前記第１のフラグが割り当てられたノードに登録された識別情報を出力する処理と、をさらにコンピュータに実行させるようにしてもよい。
［形態１６］
上記プログラムは、削除すべき文書を識別するための識別情報と前記暗号化を解除するための復号情報とを受け付ける処理と、
受け付けた識別情報を前記木構造から削除するとともに、前記削除情報において該識別情報に関連付けられた暗号文を、前記復号情報を用いて復号することにより、前記文書に対して生成された検索用インデックスを求め、求めた検索用インデックスを、前記複数の文書に対する検索用のインデックスから減算する処理と、をさらにコンピュータに実行させるようにしてもよい。
【００９９】
（実施形態１）
第１の実施形態に係る情報処理装置について、図面を参照して詳細に説明する。図１１は、本実施形態に係る情報処理装置５０の構成を一例として示すブロック図である。
【０１００】
図１１を参照すると、情報処理装置５０は、文書を登録する登録部１００と、キーワード検索を実行するための情報を生成する検索依頼部２００と、キーワード検索を実行する検索部３００と、登録された文書を削除する削除部４００と、インデックス情報等を記憶する記憶部５００とを備えている。
【０１０１】
本実施形態では、文書は、文書を識別するための識別情報と単語の集合とを含むものとする。文書登録木は、木構造のデータの葉ノードに識別情報が割り振られた木とする。識別情報が登録されていない葉ノードには未登録を表すデータが割り当てられ、木構造の内部ノードにも固有の値が割り振られているものとする。葉ノードの関連ノード集合を、葉ノードと根ノード間の最短パスのノードの識別情報の集合とする。
【０１０２】
記憶部５００は、インデックス記憶部５０１、文書登録木記憶部５０２、および、複数の削除情報記憶部５０３を備えている。
【０１０３】
インデックス記憶部５０１は、登録されている文書毎に生成されたインデックス情報を加算した情報を記憶する。文書登録木記憶部５０２は、登録文書の識別情報を葉ノードとして持つ木構造を記憶する。削除情報記憶部５０３は、登録されている各文書と対応付けられた削除情報を記憶する。
【０１０４】
図１２は、登録部１００の構成を一例として示すブロック図である。図１２を参照すると、登録部１００は、登録処理制御部１０１と、セキュアインデックス生成部１０２とを備えている。登録部１００は、鍵と、登録する文書とを入力とし、記憶部５００に記録された値を更新する。
【０１０５】
登録処理制御部１０１は、文書Ｄと鍵Ｋを入力とし、記憶部５００に記録された各値を更新する。セキュアインデックス生成部１０２は、鍵とノード情報と単語集合を入力とし、入力内容に応じて、セキュアインデックスを生成して出力する。
【０１０６】
図１３は、登録部１００の動作を一例として示すフローチャートである。図１３を参照して、登録部１００の動作について説明する。
【０１０７】
登録処理制御部１０１は、識別情報Ｄ＿ｉｄと単語集合Ｄ＿ｓｅｔを含む文書Ｄと、鍵Ｋを入力とする（ステップＡ１）。登録処理制御部１０１は、文書登録木記憶部５０２から文書登録木を読み出し、文書登録木において識別情報が登録されていない葉ノードを選択し、識別情報Ｄ＿ｉｄに書き換える（ステップＡ２）。次に、識別情報Ｄ＿ｉｄを登録した葉ノードの関連ノード集合Ｒ＝｛ｒ＿１，…｝を導出し（ステップＡ３）、内部記憶装置（非図示）に記憶する。また、処理途中値を記憶するための領域を内部記憶装置に用意して初期化する。次に、登録処理制御部１０１は、関連ノード集合Ｒが空集合であるか否かを調べる（ステップＡ４）。
【０１０８】
関連ノード集合Ｒが空集合でない場合には（ステップＡ４のＮＯ）、登録処理制御部１０１は、関連ノード集合Ｒの１要素ｒ＿ｉを削除し、ｒ＿ｉを識別情報、Ｋを鍵、単語集合をＤ＿ｓｅｔとして、セキュアインデックス生成部１０２に入力する。セキュアインデックス生成部１０２は、識別情報と鍵と単語集合に応じて、セキュアインデックスを生成して出力する（ステップＡ５）。登録処理制御部１０１は、セキュアインデックス生成部１０２より生成されたセキュアインデックスを受け取り、処理途中値を記憶する領域に加算した後（ステップＡ６）、ステップＡ５に戻る。
【０１０９】
一方、関連ノード集合Ｒが空集合である場合には（ステップＳ４のＹＥＳ）、登録処理制御部１０１は、処理途中値を記憶する領域に記憶されている値を、インデックス記憶部５０１に記録されたインデックスに加算するとともに、この値を識別情報Ｄ＿ｉｄと対応付けて削除情報として削除情報記憶部５０３に記録する（ステップＡ７）。
【０１１０】
図１４は、検索依頼部２００および検索部３００の構成を一例として示すブロック図である。図１４を参照すると、検索依頼部２００は、トラップドア生成部２０１を備えている。トラップドア生成部２０１は、鍵Ｋと単語ｗを入力とし、単語ｗに対するトラップドアｔを出力する。
【０１１１】
図１４を参照すると、検索部３００は、検索処理制御部３０１とセキュアインデックス判定部３０２を備え、文書の識別情報の集合を出力する。
【０１１２】
検索処理制御部３０１は、トラップドアｔを入力とし、複数の識別情報を集合として出力する。セキュアインデックス判定部３０２は、識別情報、トラップドアおよびインデックスを入力とし、入力に応じて、セキュアインデックス判定処理を実行し、判定結果を出力する。
【０１１３】
図１５は、検索依頼部２００および検索部３００の動作を一例として示すフローチャートである。図１５を参照して、検索依頼部２００および検索部３００の動作について説明する。なお、検索依頼部２００は、図１５のステップＢ１およびＢ２の処理を行う。一方、検索部３００は、ステップＢ３〜Ｂ１０の処理を行う。
【０１１４】
検索依頼部２００は、単語ｗと鍵Ｋを入力とする（ステップＢ１）。検索依頼部２００は、鍵Ｋを入力として、単語ｗに対するトラップドアｔを生成する（ステップＢ２）。
【０１１５】
検索処理制御部３０１は、トラップドアｔを入力とする（ステップＢ３）。検索処理制御部３０１は、文書登録木記憶部５０２から文書登録木を読み出す（ステップＢ４）。検索処理制御部３０１は、文書登録木の葉ノードのすべてが判定済みかどうかを調べる（ステップＢ５）。
【０１１６】
未判定のノードが存在する場合には（ステップＢ５のＮＯ）、検索処理制御部３０１は、文書登録木に含まれるノードのうちの判定情報（例えばフラグ）が付されていないノードであって最も根ノードに近いノードを選ぶ（ステップＢ６）。セキュアインデックス判定部３０２は、ノードに登録された識別情報をｒとし、トラップドア情報をｔとし、インデックス記憶部５０１に記録された値をセキュアインデックスとして、セキュアインデックス判定処理を実行する（ステップＢ６）。判定処理結果が０である場合には（ステップＢ７の「０」）、検索処理制御部３０１は、ノードｒとその子孫のノードのすべてにフラグ０を付する（ステップＢ８）。一方、判定処理結果が１の場合には（ステップＢ７の「１」）、検索処理制御部３０１は、ノードにフラグ１を付する（ステップＢ９）。
【０１１７】
一方、文書登録木に含まれるすべてのノードが判定済みである場合には（ステップＢ５のＹＥＳ）、セキュアインデックス判定部３０２は、フラグ１が付された葉ノードに対応する識別情報を出力する（ステップＢ１０）。
【０１１８】
図１６は、削除部４００の動作を一例として示すフローチャートである。図１６を参照して、削除部４００の動作について説明する。
【０１１９】
削除部４００は、識別情報を入力とする（ステップＣ１）。次に、削除部４００は、文書登録木を読み出し、入力識別情報に対応する葉ノードを未登録とし、入力識別情報に対応する削除情報記憶部から削除情報を読み出し、読み出した削除情報は消去し、読み出した削除情報をインデックスから減算する（ステップＣ２）。
【０１２０】
本実施形態の情報処理装置５０によると、各文書に関連して文書登録木の根ノードから葉ノードに至るノードそれぞれを識別情報としたセキュアインデックスがインデックスに加算されているので、各文書に含まれている単語に関するキーワード検索を正しく処理することができる。したがって、本実施形態によると、ブルームフィルタにおいて「特徴２」や「特徴」３を利用した場合と同様に、文書登録木に沿った検索処理を実行することができる。また、本実施形態では、各文書に関連してインデックスに加算された値が削除情報記憶部に記録されているため、各文書を容易に削除することができる。
【０１２１】
さらに、本実施形態の情報処理装置５０によると、すべての文書の検索に用いる情報が１つのインデックスにまとめられ、文書ごとの情報に分けられていない。
【０１２２】
（実施形態２）
第２の実施形態に係る情報処理装置について、図面を参照して詳細に説明する。図１７は、本実施形態に係る情報処理装置１０の構成を一例として示すブロック図である。
【０１２３】
図１７を参照すると、情報処理装置１０は、ＣＰＵ１１と、ＣＰＵ１１の処理に必要な情報を一時的に記憶する主記憶部１２と、第１の実施形態に係る情報処理装置５０（図１１）の登録部１００、検索依頼部２００、検索部３００、削除部４００および記憶部５００の処理とこれらに付随する処理とをＣＰＵ１１に実行させるためのプログラムが記録された記録媒体１３と、インデックス記憶部５０１の記憶する値等が格納されるデータ蓄積部１４と、主記憶部１２、記録媒体１３およびデータ蓄積部１４とのデータ転送を制御するメモリ制御インタフェース部１５と、入力装置２０および出力装置３０とのインタフェース装置であるＩ／Ｏインタフェース部１６とを備え、これらの各部はバスを介して接続されている。なお、データ蓄積部１４は、情報処理装置１０内に設ける必要はなく、情報処理装置１０とは別個に設けられていてもよい。
【０１２４】
情報処理装置１０は、第１の実施形態に係る情報処理装置５０の登録部１００、検索依頼部２００、検索部３００、削除部４００および記憶部５００の各部の機能を実現する。
【０１２５】
記録媒体１３は、磁気ディスク、半導体メモリ、光ディスクあるいはその他の記録媒体であってもよい。
【実施例】
【０１２６】
次に、上記の実施形態に係る情報処理装置の具体的な実施例について説明する。【０１２７】
文書登録木の構成に応じて、各文書の登録に要するセキュアインデックスの生成処理の回数が決まる。どの文書に関しても同一の回数の生成処理を実現するには、どの葉ノードに関しても根ノードからのノード数が一定数になるような木構造を用いればよい。そのような木構造として、例えば、２分木構造がある。このような木構造を用いると、２＾ｎ個の文書を登録する場合に、文書ごとのセキュアインデックス生成処理をｎ回に抑えることができる。【０１２８】
また、上記の検索処理における木構造の判定順序として、例えば、幅優先探索または深さ優先探索を用いることができる。【０１２９】
文書毎に生成される削除情報は、対応する各文書の情報を含むことから、そのまま保存することは望ましくない。したがって、文書を登録する側の装置で暗号化して記録し、削除する場合には復号するために必要な情報を識別情報とあわせて送付することが望ましい。文書ごとに異なる鍵を準備することは困難であることから、マスター鍵と識別情報から鍵が決定される関数を用いて鍵を生成すると、文書を登録する側の管理が容易となる。セキュアインデックスを生成するための鍵も、同様の方法で決定するようにしてもよい。この場合には、文書を登録する側でマスター鍵の値のみを記憶すれば十分となるため、管理する値の数をさらに削減することが可能となる。【０１３０】
上述の削除部４００および登録部１００を順に用いることで、文書の更新処理を実現することもできる。【０１３１】
本発明の情報処理装置によると、登録文書に含まれていない単語に関する検索が効率的に実行でき、かつ、記憶されているインデックス情報から登録された文書に関する情報が漏れることが無くなる。本発明のインデックス生成方法をデータベースにおけるインデックス生成方法として用いることにより、情報漏洩に耐性のあるデータベースを構築することも可能となる。【０１３２】
なお、上記の非特許文献等の先行技術文献の各開示を、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素（各請求項の各要素、各実施例の各要素、各図面の各要素等を含む）の多様な組み合わせないし選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
【符号の説明】
【０１３３】
１０    情報処理装置
１１    ＣＰＵ
１２    主記憶部
１３    記録媒体
１４    データ蓄積部
１５    メモリ制御インタフェース部
１６    Ｉ／Ｏインタフェース部
１８    バス
２０    入力装置
３０    出力装置
５０    情報処理装置
１００    登録部
１０１    登録処理制御部
１０２    セキュアインデックス生成部
１１１    受付部
１１２    識別情報登録部
１１３    インデックス登録部
２００    検索依頼部
２０１    トラップドア生成部
３００    検索部
３０１    検索処理制御部
３０２    セキュアインデックス判定部
４００    削除部
５００    記憶部
５０１    インデックス記憶部
５０２    文書登録木記憶部
５０３    削除情報記憶部
【図１】
0006011533.tif 000002
【図２】
0006011533.tif 000003
【図３】
0006011533.tif 000004
【図４】
0006011533.tif 000005
【図５】
0006011533.tif 000006
【図６】
0006011533.tif 000007
【図７】
0006011533.tif 000008
【図８】
0006011533.tif 000009
【図９】
0006011533.tif 000010
【図１０】
0006011533.tif 000011
【図１１】
0006011533.tif 000012
【図１２】
0006011533.tif 000013
【図１３】
0006011533.tif 000014
【図１４】
0006011533.tif 000015
【図１５】
0006011533.tif 000016
【図１６】
0006011533.tif 000017
【図１７】
0006011533.tif 000018