(57)【特許請求の範囲】
【請求項１】
対象データ群に対する完全一致検索に用いられうる各キーワードをキーワード鍵情報により暗号化した暗号化キーワード情報と、前記対象データ群のうち該キーワードに完全一致する対象データのデータ識別子のリスト（検索結果リスト）における始点のデータ識別子に始点鍵情報を組み合わせて暗号化した暗号化始点情報とを対応付けた暗号化始点配列を格納する暗号化始点配列格納手段と；前記検索結果リストにおける各データ識別子と、前記検索結果リストにおいて該データ識別子の１つ前のデータ識別子（前識別子）および１つ後のデータ識別子（後識別子）に対して前後識別子鍵情報を組み合わせて暗号化した暗号化前後識別子情報と、前記前後識別子鍵情報を検索鍵情報により暗号化した暗号化前後識別子鍵情報とを対応付けた暗号化検索結果配列を格納する暗号化検索結果配列格納手段と；を備えた検索補助データ格納装置を用いる追加装置であって、
追加される対象データのデータ識別子（追加識別子）と、前記暗号化キーワード情報と、前記始点鍵情報と、前記前後識別子鍵情報と、前記暗号化前後識別子鍵情報とを追加要求として受信する追加要求受信手段と、
前記暗号化始点配列格納手段において、受信された暗号化キーワード情報に対応付けて格納された暗号化始点情報を、受信された始点鍵情報を用いて復号することにより、更新前の始点のデータ識別子（更新前始点識別子）を取得する始点抽出手段と、
前記暗号化始点配列格納手段において、受信された暗号化キーワード情報に対応付けられた暗号化始点情報を、前記追加識別子に前記始点鍵情報を組み合わせて暗号化した暗号化始点情報に更新する暗号化始点配列更新手段と、
前記暗号化検索結果配列格納手段において、前記更新前始点識別子に対応付けられて格納されている暗号化前後識別子情報を、該暗号化前後識別子情報に前記追加識別子を前識別子として組み合わせた情報に更新するとともに、前記追加識別子に対して、受信された前後識別子鍵情報に前記更新前始点識別子を後識別子として組み合わせて生成した前記暗号化前後識別子情報と、受信された暗号化前後識別子鍵情報とを対応付けた情報を追加する暗号化検索結果配列追加手段と、
を備えた追加装置。
【請求項２】
前記追加識別子と、前記追加識別子の示す対象データが完全一致するキーワードと、鍵情報とを入力する入力手段と、
前記入力手段に入力された前記キーワードおよび前記鍵情報に基づいて、前記暗号化キーワード情報を算出する暗号化キーワード算出手段と、
前記入力手段に入力された前記キーワードおよび前記鍵情報に基づいて、前記始点鍵情報を算出する始点鍵算出手段と、
前記入力手段に入力された前記追加識別子および前記鍵情報に基づいて、前記前後識別子鍵情報を算出する前後識別子鍵算出手段と、
前記前後識別子鍵算出手段によって算出された前後識別子鍵情報と、前記入力手段に入力された前記キーワードおよび前記鍵情報とに基づいて、前記暗号化前後識別子鍵情報を算出する暗号化前後識別子鍵算出手段と、
前記入力手段に入力された前記追加識別子と、前記暗号化キーワード算出手段、前記始点鍵算出手段、前記前後識別子鍵算出手段、および、前記暗号化前後識別子鍵算出手段によって算出された前記暗号化キーワード情報と、前記始点鍵情報と、前記前後識別子鍵情報と、前記暗号化前後識別子鍵情報とを、前記追加要求として請求項１に記載の追加装置に送信する追加要求送信手段と、
を備えた追加依頼装置。
【請求項３】
対象データ群に対する完全一致検索に用いられうる各キーワードをキーワード鍵情報により暗号化した暗号化キーワード情報と、前記対象データ群のうち該キーワードに完全一致する対象データのデータ識別子のリスト（検索結果リスト）における始点のデータ識別子に始点鍵情報を組み合わせて暗号化した暗号化始点情報とを対応付けた暗号化始点配列を格納する暗号化始点配列格納手段と；前記検索結果リストにおける各データ識別子と、前記検索結果リストにおいて該データ識別子の１つ前のデータ識別子（前識別子）および１つ後のデータ識別子（後識別子）に対して前後識別子鍵情報を組み合わせて暗号化した暗号化前後識別子情報と、前記前後識別子鍵情報を検索鍵情報により暗号化した暗号化前後識別子鍵情報とを対応付けた暗号化検索結果配列を格納する暗号化検索結果配列格納手段と；を備えた検索補助データ格納装置を用いる削除装置であって、
削除される対象データのデータ識別子（削除識別子）と、前記前後識別子鍵情報とを削除要求として受信する削除要求受信手段と、
前記暗号化検索結果配列格納手段において、前記削除識別子に対応付けられて格納されている暗号化前後識別子情報を、受信された前後識別子鍵情報を用いて復号することにより、前記削除識別子の前識別子および後識別子を取得する前後識別子抽出手段と、
前記暗号化検索結果配列格納手段において、前記削除識別子に対応付けられた情報を削除するとともに、前記削除識別子の前識別子に対応付けられた暗号化前後識別子情報に、前記削除識別子および前記削除識別子の後識別子を組み合わせることにより、該暗号化前後識別子情報が後識別子として前記削除識別子の後識別子を示すよう更新し、前記削除識別子の後識別子に対応付けられた暗号化前後識別子情報に、前記削除識別子および前記削除識別子の前識別子を組み合わせることにより、該暗号化前後識別子情報が前識別子として前記削除識別子の前識別子を示すよう更新する暗号化検索結果配列削除手段と、
を備えた削除装置。
【請求項４】
対象データ群に対する完全一致検索に用いられうる各キーワードをキーワード鍵情報により暗号化した暗号化キーワード情報と、前記対象データ群のうち該キーワードに完全一致する対象データのデータ識別子のリスト（検索結果リスト）における始点のデータ識別子に始点鍵情報を組み合わせて暗号化した暗号化始点情報とを対応付けた暗号化始点配列を格納する暗号化始点配列格納手段と；前記検索結果リストにおける各データ識別子と、前記検索結果リストにおいて該データ識別子の１つ前のデータ識別子（前識別子）および１つ後のデータ識別子（後識別子）に対して前後識別子鍵情報を組み合わせて暗号化した暗号化前後識別子情報と、前記前後識別子鍵情報を検索鍵情報により暗号化した暗号化前後識別子鍵情報とを対応付けた暗号化検索結果配列を格納する暗号化検索結果配列格納手段と；を備えた検索補助データ格納装置と、
前記検索補助データ格納装置を用いる検索装置と、
前記検索補助データ格納装置を用いる追加装置と
を備え、
前記検索装置は、
前記暗号化キーワード情報と、前記始点鍵情報と、前記検索鍵情報とを検索要求として受信する検索要求受信手段と、前記暗号化始点配列格納手段において、受信された暗号化キーワード情報に対応付けて格納されている暗号化始点情報を、受信された始点鍵情報を用いて復号することにより、前記検索結果リストにおいて始点となるデータ識別子を得て検索結果に加える始点復号手段と、
前記暗号化検索結果配列格納手段において、前記検索結果に加えられたデータ識別子に対応付けて格納された暗号化前後識別子情報および暗号化前後識別子鍵情報を取得し、取得した暗号化前後識別子鍵情報を、受信された検索鍵情報を用いて復号して前後識別子鍵情報を取得し、取得した前後識別子鍵情報を用いて暗号化前後識別子情報を復号することにより、該データ識別子の１つ後のデータ識別子を得て前記検索結果に加える検索結果抽出処理を、１つ後のデータ識別子が得られなくなるまで繰り返す検索結果抽出手段と、
前記検索結果抽出手段によって抽出された検索結果を出力する検索結果出力手段と、
を備え、
前記追加装置は、
追加される対象データのデータ識別子（追加識別子）と、前記暗号化キーワード情報と、前記始点鍵情報と、前記前後識別子鍵情報と、前記暗号化前後識別子鍵情報とを追加要求として受信する追加要求受信手段と、
前記暗号化始点配列格納手段において、受信された暗号化キーワード情報に対応付けて格納された暗号化始点情報を、受信された始点鍵情報を用いて復号することにより、更新前の始点のデータ識別子（更新前始点識別子）を取得する始点抽出手段と、
前記暗号化始点配列格納手段において、受信された暗号化キーワード情報に対応付けられた暗号化始点情報を、前記追加識別子に前記始点鍵情報を組み合わせて暗号化した暗号化始点情報に更新する暗号化始点配列更新手段と、
前記暗号化検索結果配列格納手段において、前記更新前始点識別子に対応付けられて格納されている暗号化前後識別子情報を、該暗号化前後識別子情報に前記追加識別子を前識別子として組み合わせた情報に更新するとともに、前記追加識別子に対して、受信された前後識別子鍵情報に前記更新前始点識別子を後識別子として組み合わせて生成した前記暗号化前後識別子情報と、受信された暗号化前後識別子鍵情報とを対応付けた情報を追加する暗号化検索結果配列追加手段と、
を備えた
データ検索システム。
【請求項５】
キーワードおよび鍵情報を入力する入力手段と、前記入力手段に入力された前記キーワードおよび前記鍵情報に基づいて、前記暗号化キーワード情報を算出する暗号化キーワード算出手段と；前記入力手段に入力された前記キーワードおよび前記鍵情報に基づいて、前記始点鍵情報を算出する始点鍵算出手段と；前記入力手段に入力された前記キーワードおよび前記鍵情報に基づいて、前記検索鍵情報を算出する検索鍵算出手段と；前記暗号化キーワード算出手段、前記始点鍵算出手段および前記検索鍵算出手段によって算出された前記暗号化キーワード情報と、前記始点鍵情報と、前記検索鍵情報とを、前記検索要求として前記検索装置に送信する検索要求送信手段と；を備えた検索依頼装置をさらに備える請求項４に記載のデータ検索システム。
【請求項６】
請求項３に記載の削除装置と、
請求項２に記載の追加依頼装置と
をさらに備えた請求項４又は請求項５に記載のデータ検索システム。
【請求項７】
前記削除識別子および鍵情報を入力する入力手段と；前記入力手段に入力された前記削除識別子および前記鍵情報に基づいて、前記前後識別子鍵情報を算出する前後識別子鍵算出手段と；前記入力手段に入力された前記削除識別子と、前記前後識別子鍵算出手段によって算出された前記前後識別子鍵情報とを、前記削除要求として前記削除装置に送信する削除要求送信手段と；を備えた削除依頼装置をさらに備える請求項６に記載のデータ検索システム。
【請求項８】
対象データ群に対する完全一致検索に用いられうる各キーワードをキーワード鍵情報により暗号化した暗号化キーワード情報と、前記対象データ群のうち該キーワードに完全一致する対象データのデータ識別子のリスト（検索結果リスト）における始点のデータ識別子に始点鍵情報を組み合わせて暗号化した暗号化始点情報とを対応付けた暗号化始点配列を格納する暗号化始点配列格納手段と；前記検索結果リストにおける各データ識別子と、前記検索結果リストにおいて該データ識別子の１つ前のデータ識別子（前識別子）および１つ後のデータ識別子（後識別子）に対して前後識別子鍵情報を組み合わせて暗号化した暗号化前後識別子情報と、前記前後識別子鍵情報を検索鍵情報により暗号化した暗号化前後識別子鍵情報とを対応付けた暗号化検索結果配列を格納する暗号化検索結果配列格納手段と；を備えた検索補助データ格納装置を用いるデータ検索方法であって、
前記暗号化キーワード情報と、前記始点鍵情報と、前記検索鍵情報とを検索要求として受信すると、
前記暗号化始点配列格納手段において、受信された暗号化キーワード情報に対応付けて格納されている暗号化始点情報を、受信された始点鍵情報を用いて復号することにより、前記検索結果リストにおいて始点となるデータ識別子を得て検索結果に加え、
前記暗号化検索結果配列格納手段において、前記検索結果に加えられたデータ識別子に対応付けて格納された暗号化前後識別子情報および暗号化前後識別子鍵情報を取得し、取得した暗号化前後識別子鍵情報を、受信された検索鍵情報を用いて復号して前後識別子鍵情報を取得し、取得した前後識別子鍵情報を用いて暗号化前後識別子情報を復号することにより、該データ識別子の１つ後のデータ識別子を得て前記検索結果に加える検索結果抽出処理を、１つ後のデータ識別子が得られなくなるまで繰り返し、
抽出した検索結果を出力するとともに、
追加される対象データのデータ識別子（追加識別子）と、前記暗号化キーワード情報と、前記始点鍵情報と、前記前後識別子鍵情報と、前記暗号化前後識別子鍵情報とを追加要求として受信すると、
前記暗号化始点配列格納手段において、受信された暗号化キーワード情報に対応付けて格納された暗号化始点情報を、受信された始点鍵情報を用いて復号することにより、更新前の始点のデータ識別子（更新前始点識別子）を取得し、
前記暗号化始点配列格納手段において、受信された暗号化キーワード情報に対応付けられた暗号化始点情報を、前記追加識別子に前記始点鍵情報を組み合わせて暗号化した暗号化始点情報に更新し、
前記暗号化検索結果配列格納手段において、前記更新前始点識別子に対応付けられて格納されている暗号化前後識別子情報を、該暗号化前後識別子情報に前記追加識別子を前識別子として組み合わせた情報に更新するとともに、前記追加識別子に対して、受信された前後識別子鍵情報に前記更新前始点識別子を後識別子として組み合わせて生成した前記暗号化前後識別子情報と、受信された暗号化前後識別子鍵情報とを対応付けた情報を追加するとともに、
削除される対象データのデータ識別子（削除識別子）と、前記前後識別子鍵情報とを削除要求として受信すると、
前記暗号化検索結果配列格納手段において、前記削除識別子に対応付けられて格納されている暗号化前後識別子情報を、受信された前後識別子鍵情報を用いて復号することにより、前記削除識別子の前識別子および後識別子を取得し、
前記暗号化検索結果配列格納手段において、前記削除識別子に対応付けられた情報を削除するとともに、前記削除識別子の前識別子に対応付けられた暗号化前後識別子情報に、前記削除識別子および前記削除識別子の後識別子を組み合わせることにより、該暗号化前後識別子情報が後識別子として前記削除識別子の後識別子を示すよう更新し、前記削除識別子の後識別子に対応付けられた暗号化前後識別子情報に、前記削除識別子および前記削除識別子の前識別子を組み合わせることにより、該暗号化前後識別子情報が前識別子として前記削除識別子の前識別子を示すよう更新する、データ検索方法。
【請求項９】
対象データ群に対する完全一致検索に用いられうる各キーワードをキーワード鍵情報により暗号化した暗号化キーワード情報と、前記対象データ群のうち該キーワードに完全一致する対象データのデータ識別子のリスト（検索結果リスト）における始点のデータ識別子に始点鍵情報を組み合わせて暗号化した暗号化始点情報とを対応付けた暗号化始点配列を格納する暗号化始点配列格納手段と；前記検索結果リストにおける各データ識別子と、前記検索結果リストにおいて該データ識別子の１つ前のデータ識別子（前識別子）および１つ後のデータ識別子（後識別子）に対して前後識別子鍵情報を組み合わせて暗号化した暗号化前後識別子情報と、前記前後識別子鍵情報を検索鍵情報により暗号化した暗号化前後識別子鍵情報とを対応付けた暗号化検索結果配列を格納する暗号化検索結果配列格納手段と；を備えた検索補助データ格納装置を用いるコンピュータプログラムであって、
前記暗号化キーワード情報と、前記始点鍵情報と、前記検索鍵情報とを検索要求として受信する検索要求受信ステップと、
前記暗号化始点配列格納手段において、受信された暗号化キーワード情報に対応付けて格納されている暗号化始点情報を、受信された始点鍵情報を用いて復号することにより、前記検索結果リストにおいて始点となるデータ識別子を得て検索結果に加える始点復号ステップと、
前記暗号化検索結果配列格納手段において、前記検索結果に加えられたデータ識別子に対応付けて格納された暗号化前後識別子情報および暗号化前後識別子鍵情報を取得し、取得した暗号化前後識別子鍵情報を、受信された検索鍵情報を用いて復号して前後識別子鍵情報を取得し、取得した前後識別子鍵情報を用いて暗号化前後識別子情報を復号することにより、該データ識別子の１つ後のデータ識別子を得て前記検索結果に加える検索結果抽出処理を、１つ後のデータ識別子が得られなくなるまで繰り返す検索結果抽出ステップと、
前記検索結果抽出ステップで抽出された検索結果を出力する検索結果出力ステップと、
追加される対象データのデータ識別子（追加識別子）と、前記暗号化キーワード情報と、前記始点鍵情報と、前記前後識別子鍵情報と、前記暗号化前後識別子鍵情報とを追加要求として受信する追加要求受信ステップと、
前記暗号化始点配列格納手段において、受信された暗号化キーワード情報に対応付けて格納された暗号化始点情報を、受信された始点鍵情報を用いて復号することにより、更新前の始点のデータ識別子（更新前始点識別子）を取得する始点抽出ステップと、
前記暗号化始点配列格納手段において、受信された暗号化キーワード情報に対応付けられた暗号化始点情報を、前記追加識別子に前記始点鍵情報を組み合わせて暗号化した暗号化始点情報に更新する暗号化始点配列更新ステップと、
前記暗号化検索結果配列格納手段において、前記更新前始点識別子に対応付けられて格納されている暗号化前後識別子情報を、該暗号化前後識別子情報に前記追加識別子を前識別子として組み合わせた情報に更新するとともに、前記追加識別子に対して、受信された前後識別子鍵情報に前記更新前始点識別子を後識別子として組み合わせて生成した前記暗号化前後識別子情報と、受信された暗号化前後識別子鍵情報とを対応付けた情報を追加する暗号化検索結果配列追加ステップと、
削除される対象データのデータ識別子（削除識別子）と、前記前後識別子鍵情報とを削除要求として受信する削除要求受信ステップと、
前記暗号化検索結果配列格納手段において、前記削除識別子に対応付けられて格納されている暗号化前後識別子情報を、受信された前後識別子鍵情報を用いて復号することにより、前記削除識別子の前識別子および後識別子を取得する前後識別子抽出ステップと、
前記暗号化検索結果配列格納手段において、前記削除識別子に対応付けられた情報を削除するとともに、前記削除識別子の前識別子に対応付けられた暗号化前後識別子情報に、前記削除識別子および前記削除識別子の後識別子を組み合わせることにより、該暗号化前後識別子情報が後識別子として前記削除識別子の後識別子を示すよう更新し、前記削除識別子の後識別子に対応付けられた暗号化前後識別子情報に、前記削除識別子および前記削除識別子の前識別子を組み合わせることにより、該暗号化前後識別子情報が前識別子として前記削除識別子の前識別子を示すよう更新する暗号化検索結果配列削除ステップと、
をコンピュータ装置に実行させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、対象データに対して完全一致検索を行う技術に関する。
【背景技術】
【０００２】
完全一致検索処理は、複数のデータから特定のキーワードに完全に一致するデータを抽出する処理である。この処理は、データそれぞれについてキーワードと完全に一致するかどうかを判定することで実行できる。しかし、検索処理のたびに検索対象データをすべて解析して特定のキーワードと完全に一致しているかどうかを判定する方法は、非効率的である。【０００３】
そこで、完全一致検索処理を効率的に実行する方法の一例として、検索対象のデータ自体に加えて、キーワードに対する検索結果を示す情報を保管することが知られている。この方法の利点は、検索処理のたびにデータを解析する必要が無く、キーワードについて保管している検索結果が示すデータをそのまま返答すればよい点である。一方、この方法の欠点は、検索対象のデータ自体および検索結果を保管するため、多くの記憶容量が必要となる点である。【０００４】
また、ここで、検索対象のデータを暗号化することを考える。上述の検索対象のデータおよび検索結果を保管しておく方法において、検索対象のデータのみを暗号化しても、保管されている検索結果から、どのキーワードがどの暗号化されたデータと完全に一致するのかといった情報が漏えいする。また、検索対象のデータに加えて検索結果を暗号化しても、それを復号しないかぎり、検索の補助に用いることができず、復号した検索結果から情報が漏えいする点は同様である。【０００５】
また、検索対象のデータとともに、検索結果に限らず他の形式で検索を補助するデータ（検索補助データ）を保管する方法も考えられる。しかしながら、検索補助データのみで検索を実行できるような方法では、検索対象のデータを暗号化しても、検索補助データから情報が漏えいするという上述と同様の問題が生じる。【０００６】
このように、検索対象データに関する情報漏えい対策としては、暗号化されたデータベース用に特化された方法を用いることが好ましい。【０００７】
例えば、情報の漏えいを防ぎながらキーワード検索を効率化する方法としては、ＳＳＥ（Searchable Symmetric Encryption）と呼ばれる技術がある。ＳＳＥは、暗号化されたデータに対するキーワード検索を可能とする技術である。例えば、特許文献１には、ＳＳＥに関連する技術が記載されている。さらに、非特許文献１では、ＳＳＥを実現する各種技術の問題に対応するＤＳＳＥ（Dynamic SSE）が提案されている。ＤＳＳＥは、暗号化されたデータの削除を柔軟に実行でき、且つ、検索の処理効率が良い。【０００８】
ＤＳＳＥは、暗号化されたデータを検索するための検索補助データとして、検索結果配列および始点配列を用いる。さらに、検索補助データからデータに関する情報が漏えいすることを防止するため、ＤＳＳＥは、検索結果配列および始点配列を暗号化する。さらに、ＤＳＳＥは、データの追加・検索だけでなく削除を容易にするため、削除配列を用いる。また、ＤＳＳＥは、削除配列も暗号化する。【０００９】
以下に、ＤＳＳＥについて詳細に説明する。【００１０】
まず、ＤＳＳＥで用いられるデータおよびキーワードについて説明する。【００１１】
ここでは、検索の対象データ群をD = {D_1,...,D_n}（ｎは１以上の整数）と表し、各対象データD_j(j=1,...,n)は、区別に利用できる識別子を有するものとする。なお、識別子は、通し番号などであってもよいが、機密情報を含まないものとする。対象データDの識別子をid(D)と表す。【００１２】
また、検索可能なキーワードの集合をΔ = {w_1,..., w_d}（ｄは１以上の整数）と表し、キーワードw_i(i=1,...,d)を含むDの部分集合をD(w_i)と表す。また、D(w_i)に含まれるj番目の対象データの識別子を、id(D(w_i, j))と表すものとする。そして、Dに対するキーワードw_iによる検索結果を、D中のw_iを含む対象データの識別子の集合で表す。図１９は，対象データ群Dに対するキーワードw_iによる検索結果の一例である。図１９において、各行は、Dに対するw_iによる検索結果を表す。例えば、Dに対するw_1の検索結果は、{id(D(w_1, 1)), id(D(w_1, 2)),...}と表されている。このような検索結果を表すデータ構造の具体例としては、線形リストと呼ばれるものがある。ＤＳＳＥは、線形リストを暗号化した情報を検索補助データとして用いることにより、キーワード検索を実現している。【００１３】
次に、ＤＳＳＥで用いられる線形リストについて説明する。線形リストの一例を図２０に模式的に示す。図２０において、線形リストＡおよび線形リストＢは、それぞれ、３つの整数値を格納した線形リストを表している。２つの並んだ四角形は、線形リストを構成する１要素を表す。この１要素をノードとよぶ。左側の四角形に記載された整数値は、ノードが持つデータである。右側の四角形に記載された矢印は、線形リスト上での次のノードを指す情報である。例えば、ノードを指す情報は、該当するノードが記憶されているメモリ上のアドレス等といった、記憶装置上の位置であってもよい。あるいは、ノードを指す情報は、データベースにおけるテーブルの行に振られた識別情報であってもよい。以降、ノードを指す情報を番地ともいう。線形リストにおけるi番目のノードの番地および値をそれぞれadr_i, val_iとすれば、i番目のノードは、該ノードの番地と、記憶している値と、次のノードの番地との三つ組みによって(adr_i, val_i, adr_{i+1})のように表すことができる。以降、この三つ組みについて、一つ目の要素を番地、二つ目の要素をデータ、三つ目の要素を次番地と呼ぶ。線形リストの終端は、線形リストＡのように、次番地として特別な記号Nullを有するノードによって表されていてもよい。あるいは、線形リストの終端は、線形リストＢのように、データおよび次番地としてNullを有する空のノードによって表されていてもよい。なお、図２０において、Ｘは、Null値を表している。以降、説明のため、線形リストの先頭のノードを始点と呼び、終端のノードを終点と呼ぶ。【００１４】
次に、検索結果を表す線形リストについて説明する。ＤＳＳＥでは、検索結果は、検索結果配列および始点配列として記録される。検索結果配列は、各キーワードについての検索結果を線形リストとして記録した情報である。この検索結果配列は、各キーワードに対する検索結果を線形リストとして格納するが、各キーワードに関する検索結果としての線形リストの始点がどの番地であるかという情報は記憶しない。始点に関する情報は、もう一つの配列である始点配列に記憶される。【００１５】
図２１は、検索結果配列および始点配列に格納される情報を説明するための図である。図２１において、検索結果配列の各行は、Dに対するw_iによる検索結果としての線形リストの各ノードを表している。なお、ここでは、id(D(w_i, j))を、単にid_{i,j}と表している。例えば、この検索結果配列によれば、対象データ群Dのうちw_iを含む１番目の対象データの識別子はid_{i,1}であり、この識別子が格納された番地はadr_{i,1}であり、w_iを含む次の（２番目の）対象データの識別子が格納された番地はadr_{i,2}である。【００１６】
また、図２１において、始点配列の各行は、キーワードw_iによる検索結果の始点の番地を表す。例えば、この始点配列によれば、w_1による検索結果の始点の番地はadr_{1,1}である。【００１７】
このような検索結果配列および始点配列を用いると、次のような検索処理が可能である。以下に、これらの配列からw_iに関する検索結果を読み出す検索処理について記載する。
１．まず、始点配列において、キーワード列がw_iである行の番地列adr_{i,1}を読み出す。
２．次に、検索結果配列において、番地列がadr_{i,1}である行を参照することにより、データ列のid_{i,1}と、次番地列のadr_{i,2}を得る。得られたid_{i,1}は、１つ目の検索結果であり、adr_{i,2}は、２つめの検索結果が記憶されている検索結果配列の番地である。
３．次に、検索結果配列において、番地列がadr_{i,2}である行を参照することにより、データ列のid_{i,2}と、次番地列のadr_{i,3}を得る。得られたid_{i,2}は、2つ目の検索結果であり、adr_{i,3}は、３つ目の検索結果が記憶されている検索結果配列の番地である。
４．次に、検索結果配列において、番地列がadr_{i,3}である行を参照することにより、データ列のid_{i,3}と、次番地列のNULL値を得る。得られたid_{i,3}は、３つ目の検索結果である。また、次番地がNull値であるので、このノードが終端である。そこで、id_{i,1}, id_{i,2}, id_{i,3}が、w_iに関する検索結果となる。【００１８】
このような検索処理が可能な検索結果配列および始点配列は、データが追加された場合にも記憶容量に空きがある限り追加が容易であるため、データベース等のように次々とデータが追加される用途に有用である。しかしながら、これらの配列は、どの対象データがどのキーワードを含んでいるかという情報を含んでいる。そこで、ＤＳＳＥは、これらの配列から対象データに関する情報が漏えいしないよう、始点配列および検索結果配列を暗号化情報と組み合わせた検索補助データを用いる。以降、暗号化情報と組み合わせた始点配列を、暗号化始点配列と記載し、暗号化情報と組み合わせた検索結果配列を、暗号化検索結果配列と記載する。以下、ＤＳＳＥにおける暗号化始点配列および暗号化検索結果配列のデータ構造について説明する。【００１９】
ここでは、暗号化情報の生成に、鍵付き関数および鍵付き置換が用いられる。鍵付き関数は、入力および鍵情報によって出力が定まる関数である。また、鍵付き置換は、入力および鍵情報によって出力が定まる置換である。鍵付き関数Fにおいて、鍵をkとし、入力をxとするとき、出力をF(k;x)と表す。入力が複数組みから成る場合（例えば、ｎ個組のx_1,...,x_nである場合）には、出力をF(k;x_1,...,x_n)と表す。つまり、括弧内の第１変数が鍵を表し、セミコロンで区切った右側の変数群が入力を表す。鍵付き置換についても同じように表記する。【００２０】
また、ここでは、値を暗号化するために、暗号化処理および復号処理を共通の秘密鍵で行う共通鍵暗号方式が用いられる。共通鍵暗号の暗号化関数をEnc()と記載し,復号関数をDec()と記載する。また、鍵kでデータdを暗号化した結果をEnc(k;d)と記載し、鍵kで暗号文cを復号した結果をDec(k;c)と記載する。また、以下の説明では、排他的論理和演算を◎で表す。また、データの連結演算を||で表す。【００２１】
まず、ＤＳＳＥの暗号化検索結果配列について説明する。【００２２】
暗号化検索結果配列では、線形リストを基にしたリスト状のデータ構造（以降、暗号化線形リストと呼ぶ）が用いられている。ここで、検索結果配列を表す線形リストのノードは、上述したように、ｉ番目のノードの番地と、i番目のノードの値と、次ノードの番地との三つ組み(adr_i, val_i, adr_{i+1})であった。暗号化検索結果配列を表す暗号化線形リストでは、各ノードは、次式（１０）で表されるデータ構造によって構成される。【００２３】
(adr_i, F1(F2(k_s;w);non)◎(val_i||adr_{i+1}), non)・・・（１０）
ここで、wは、キーワードを表す。また、val_iは、キーワードwに関するi番目の検索結果の識別子を格納する。また、val_iは、Lビット列で表されるものとする。また、k_sは、暗号化線形リストの検索鍵を生成するための鍵を表す。また、nonは、ノード毎にランダムに生成される値（nonce）を表す。また、F1,F2は、鍵付き関数を表す。【００２４】
つまり、暗号化線形リストの各ノードにおいて、１つ目の要素は、i番目のノードの番地を表す。また、３つ目の要素は、nonceを表す。また、２つ目の要素は、i番目のノードの値val_iおよび次のノードの番地adr_{i+1}をF1,F2,k_sを用いた暗号化情報と組み合わせて算出される。ここで、F1,F2およびk_sがわかっていれば、この２つ目の要素から、val_iおよびadr_{i+1}を得ることが可能である。具体的には、nonceおよびF2(k_s;w)を組み合わせることにより算出されるF1(F2(k_s;w);non)と、２つ目の要素との排他的論理和演算により、val_i||adr_{i+1}が得られる。すなわち、排他的論理和演算の性質により、
F1(F2(k_s;w);non)◎[２つ目の要素]
＝F1(F2(k_s;w);non)◎F1(F2(k_s;w);non)◎(val_i||adr_{i+1})
＝val_i||adr_{i+1}                                  ・・・（１１）
となる。ここで、F2(k_s;w)は、キーワードwおよび上述の鍵k_sを用いて鍵付き関数F2により生成される情報である。F2(k_s;w)を、キーワードwについての検索鍵と呼ぶ。【００２５】
したがって、キーワードwの検索鍵F2(k_s;w)と、キーワードwに対する検索結果の始点の番地adr_1とを用いれば、wの検索結果としての暗号化線形リストに含まれるすべての値を得ることができる。【００２６】
このような暗号化検索結果配列の一例を図２２に示す。図２２において、暗号化検索結果配列の番地列は、キーワードw_iの検索結果リストにおけるj番目のノードの番地adr_{i,j}を格納する。また、暗号化データ識別子・次番地の列は、j番目のノードの値id_{i,j}（対象データの識別子）および次番地adr_{i,j+1}を、暗号化情報F1(F2(k_s;w_i);non_j)で暗号化した値を格納する。そのような値は、ここでは、F1(F2(k_s;w_i);non_j)◎(id_{i,j}||adr_{i,j+1})と表される。また、nonce列は、ノード毎のランダムな値non_jを格納する。このような形式で、複数のキーワードについての暗号化線形リストを記憶した配列が、ＤＳＳＥの暗号化検索結果配列となる。【００２７】
このような暗号化検索結果配列は、キーワードに対する始点番地および検索鍵により、そのキーワードに関する検索結果を抽出可能とする。【００２８】
次に、ＤＳＳＥの暗号化始点配列について説明する。【００２９】
暗号化始点配列は、各キーワードw_iと、w_iに関する暗号化線形リストの始点情報であるadr_{i,1}とを、キーワード暗号化鍵k_pおよび始点番地暗号化鍵を生成するための鍵k_eを用いて加工してから格納する。加工されたキーワードを、暗号化キーワードと呼ぶ。また、加工された始点情報を、暗号化始点番地と呼ぶ。【００３０】
このような暗号化始点配列の一例を図２２に示している。図２２において、暗号化始点配列の暗号化キーワード列は、キーワードw_iの暗号化キーワードを格納する。また、暗号化始点番地列は、w_iに関する暗号化始点番地を格納している。ここでは、Pを鍵付き置換とすると、暗号化キーワードは、P(k_p; w_i)のように表される。また、暗号化始点番地は、F3を鍵付き関数とすると、F3(k_e; w_i)◎adr_{i,1}のように表される。ここで、F3(k_e; w_i)は、キーワードw_iおよび上述の鍵k_eを用いて鍵付き関数F3により生成される情報である。F3(k_e; w_i)を、キーワードw_iについての始点番地暗号化鍵と呼ぶ。【００３１】
このような暗号化始点配列は、暗号化キーワードP(k_p; w_i)およびキーワードw_iの始点番地暗号化鍵F3(k_e; w_i)により、キーワードw_iに関する暗号化線形リストの始点番地を抽出可能とする。詳細には、暗号化始点配列において、P(k_p; w_i)が格納された行の暗号化始点番地(F3(k_e; w_i)◎adr_{i,1}が得られる。そして、得られた暗号化始点番地および始点番地暗号化鍵F3(k_e; w_i)の排他的論理和演算により、adr_{i,1}が得られる。【００３２】
そして、上述したように、暗号化検索結果配列は、キーワードw_iについて暗号化始点配列から得られる始点番地adr_{i,1}と、キーワードw_iの検索鍵F2(k_s;w_i)とにより、キーワードw_iに関する検索結果を抽出可能とする。【００３３】
ここで、前述したように、始点配列および検索結果配列を検索補助データとして用いると、データベースが暗号化されていても、キーワード以外の特別な情報を用いることなく検索結果が得られてしまう。一方、暗号化始点配列および暗号化検索結果配列を検索補助データとして用いると、各種の鍵k_p、k_eおよびk_sがわからない限り、どのキーワードに関する検索結果も参照されない。【００３４】
ここで、データベースが暗号化始点配列および暗号化検索結果配列を保持し、ユーザがk_p,k_e,k_sを保持している場合を想定する。この場合、ユーザは、あるキーワードw_iに関して暗号化キーワードP(k_p; w_i), 始点番地暗号化鍵F3(k_e; w_i), 検索鍵F2(k_s;w_i)を計算してデータベースに送付すればよい。すると、データベースは、これらの情報から、w_iに関する検索結果を求めることができる。しかし、データベースは、他のキーワードに関する検索結果を求めることはできない。【００３５】
以上に示した暗号化始点配列および暗号化検索結果配列は、ＤＳＳＥによりキーワード検索を行うためのデータ構造である。さらに、ＤＳＳＥは、対象データを削除するために、削除配列を用いる。【００３６】
削除配列について詳細に説明する。【００３７】
上述のような検索補助データを用いる際に、ある対象データが削除されると、その対象データが含む各キーワードに対して、暗号化始点配列および暗号化検索結果配列を更新する必要がある。更新処理について具体的に述べる。【００３８】
ここでは、あるキーワードwに関し、暗号化検索結果配列に以下のような情報が記憶されているとする。
１つ目のノード：(adr_1, F1(F2(k_s;w);non_1)◎(D1||adr_2), non_1)
２つ目のノード：(adr_2, F1(F2(k_s;w);non_2)◎(D2||adr_3), non_2)
３つ目のノード：(adr_3, F1(F2(k_s;w);non_3)◎(D3||NULL), non_3)
ここで、文書D2が削除される場合、番地がadr_2である２つめのノードを格納した行を暗号化検索結果配列から削除する必要がある。しかし、２つめのノードを格納した行を削除するだけでは、
１つ目のノード：(adr_1, F1(F2(k_s;w);non_1)◎(D1||adr_2), non_1)
３つ目のノード：(adr_3, F1(F2(k_s;w);non_3)◎(D3||NULL), non_3)
となり、暗号化線形リストの構造が壊れてしまう。つまり、１つ目のノードから得られる次番地adr_2に、次のノードが存在しないことになる。adr_2に記憶されているデータを削除する場合，線形リスト構造を壊さないようにadr_1に記憶されている値を更新する必要がある。具体的にはadr_1に記憶されている値を、以下のように更新すればよい。
１つ目のノード：(adr_1, F1(F2(k_s;w);non1)◎(D1||adr_3), non1)
このような更新は、adr_1とadr_2とadr_3とを用いて実行可能である。具体的には、adr_1に記憶されているF1(F2(k_s;w);nonce1)◎(D1||adr_2)に対し、(0^L||adr_2)および(0^L||adr_3)を、次式（１２）のように排他的に加算すればよい。【００３９】
F1(F2(k_s;w);nonce1)◎(D1||adr_2)◎(0^L||adr_2)◎(0^L||adr_3)
＝F1(F2(k_s;w);nonce1)◎(D1||adr_3)                          ・・・（１２）
ここで、0^Lは、0をL個並べたビット列とする。また、以降、adr_2に対するadr_1を前番地と呼び、adr_2に対するadr_3を後番地と呼び、adr_2自体を中番地と呼ぶ。【００４０】
このように、削除する対象データに関するノードの前番地および後番地がわかれば、暗号化検索結果配列から、任意のデータに関する情報を削除可能である。ここで、上述した暗号化検索結果配列および暗号化始点配列だけでは、特定の対象データに関連するノードの番地およびその前番地および後番地を抽出できない。そこで、ＤＳＳＥは、削除のために用いるこれらの情報を、削除配列に格納する。ＤＳＳＥは、この削除配列も暗号化しておく。【００４１】
ここでは、まず、暗号化する前の削除配列について説明した後に、暗号化した削除配列について説明する。なお、ＤＳＳＥでは、各対象データが複数のキーワードを含む可能性があるため、削除配列に線形リスト構造を採用しているが、ここでは、説明を簡単にするため、各対象データが１つのみキーワードを含むものと仮定した場合の削除配列について説明する。この場合、データ識別子から、検索結果配列においてその対象データに関する情報が記憶された番地が一意に定まるため、削除配列は、線形リスト構造でなくてよい。【００４２】
図２３に、まず、各対象データが１つのみキーワードを含むものと仮定した場合の暗号化されていない始点配列および検索結果配列の一例を示す。ここでは、対象データD_1、D_2、D_3がキーワードw_1を含み、対象データD_4がキーワードw_2を含むものとする。なお、図２３では、対象データD_iのデータ識別子を「D_i」と記載している。【００４３】
また、図２４に、図２３の始点配列および検索結果配列に対応する削除配列の一例を示す。各データ識別子に対応付けて、検索結果配列においてその対象データに関する情報が記憶されている番地（中番地）と、その前番地と、その後番地とを格納している。【００４４】
このような削除配列を用いて、例えば、対象データD_2が削除される場合、以下のように削除処理が可能である。
１．削除配列から、データ識別子列がD_2である行を探し、その前番地adr_1、中番地adr_3、後番地adr_4を得る。
２．検索結果配列において、番地列が中番地adr_3の行を削除する。
３．検索結果配列において、番地が前番地adr_1の行の次番地をadr_4に変更する。【００４５】
次に、このような削除配列を暗号化した暗号化削除配列について説明する。ここでは、削除配列が線形リスト構造ではないものとして説明しているため、各データ識別子について、前番地、中番地および後番地の値がそれぞれ暗号化されればよい。なお、データ識別子は、機密情報を含まないものとして、暗号化は不要であるとする。この場合、暗号化削除配列は、各対象データの識別子に対応して、前番地、中番地および後番地を次式（１３）のように暗号化した情報を格納すればよい。【００４６】
F4(k_d;D_i)◎(p_adr||i_adr||a_adr)  ・・・（１３）
ここで、D_iは、データ識別子を表す。また、p_adrは前番地を表し、i_adrは中番地を表し、a_adrは後番地を表す。また、F4は鍵付き関数である。また、k_dは、削除鍵を生成するための鍵である。ここで、F4(k_d;D_i)は、データ識別子D_iおよび上述の鍵k_dを用いて鍵付き関数F4により生成される情報である。F4(k_d;D_i)を、データD_iについての削除鍵と呼ぶ。【００４７】
このような暗号化削除配列の一例を図２５に示す。このような暗号化削除配列は、削除鍵F4(k_ｄ;D_i)により、D_iの削除に必要な情報である前番地p_adr,中番地i_adr,後番地a_adrを抽出可能とする。詳細には、次式（１４）により、前番地p_adr,中番地i_adr,後番地a_adrが抽出される。【００４８】
F4(k_d;D_i)◎[暗号化された前・中・後番地]
＝F4(k_d;D_i)◎F4(k_d;D_i)◎(p_adr||i_adr||a_adr)
＝p_adr||i_adr||a_adr                                ・・・（１４）
以上に説明したように，ＤＳＳＥは３つの配列（暗号化始点配列、暗号化検索結果配列、暗号化削除配列）を用いて、キーワード検索、および、登録されている対象データの削除を行う。
【先行技術文献】
【特許文献】
【００４９】
【特許文献１】特許第５３９２４３９号公報
【非特許文献】
【００５０】
【非特許文献１】Seny Kamara, Charalampos Papamanthou, Tom Roeder，“Dynamic Searchable Symmetric Encryption”,CCS'12 Proceedings of the 2012 ACM conference on Computer and communications security, Pages 965-976
【発明の概要】
【発明が解決しようとする課題】
【００５１】
しかしながら、非特許文献１に記載されたＤＳＳＥを、完全一致検索に適用するには、以下の課題がある。【００５２】
ＤＳＳＥは、各対象データに複数のキーワードが含まれうることを前提としている。そのため、本発明が対象とする完全一致検索にＤＳＳＥを適用する場合、暗号化始点配列、暗号化検索結果配列および暗号化削除配列の内容に重複が生じ、記憶容量の面で非効率的であるという問題がある。【００５３】
この問題について説明する。【００５４】
上述したように、ＤＳＳＥでは、１つの対象データに関して、以下の情報を各配列に記憶している。
・暗号化検索結果配列に、番地、暗号化データ識別子・次番地、nonce
・暗号化削除配列に、データ識別子、暗号化前・中・後番地
つまり、１つの対象データに関して、番地を１つ，データ識別子を１つ，暗号化された番地を４つ，暗号化された識別子を１つ、および、nonceを１つ記憶している。【００５５】
ここで、完全一致検索の場合、各文書がひとつのキーワードを含む。そこで、ＤＳＳＥにおいて各文書が１つのキーワードを含むことを仮定した図２３、図２４の始点配列、検索結果配列、および、削除配列を参照すると、重複して記憶している情報があることがわかる。【００５６】
具体的には、図２３の検索結果配列において番地がadr_1の行には、adr_1に記憶されているのはD_1に関する情報であり、次の番地はadr_3であるという情報が格納されている。一方、図２４の削除配列において、データ識別子がD_1の行には、D_1に関する情報が検索結果配列のadr_1に記憶されており、次の番地はadr_3であるという情報が記憶されている。これらの情報は、同一の内容を表している。つまり、同一の情報が２重に管理されていることになる。このように、完全一致検索にＤＳＳＥを適用する場合、図２３および図２４に示した始点配列、検索結果配列、削除配列を基にした暗号化始点配列、暗号化検索結果配列、暗号化削除配列を用いることになり、記憶する情報に重複が生じて非効率的である。【００５７】
本発明は、上述の課題を解決するためになされたもので、暗号化された対象データに対する完全一致検索処理において用いられる暗号化された検索補助データの記憶容量を削減する技術を提供することを目的とする。
【課題を解決するための手段】
【００５８】
上記目的を達成するために、本発明の検索補助データ格納装置は、対象データ群に対する完全一致検索に用いられうる各キーワードをキーワード鍵情報により暗号化した暗号化キーワード情報と、前記対象データ群のうち該キーワードに完全一致する対象データのデータ識別子のリスト（検索結果リスト）における始点のデータ識別子に始点鍵情報を組み合わせて暗号化した暗号化始点情報とを対応付けた暗号化始点配列を格納する暗号化始点配列格納手段と、前記検索結果リストにおける各データ識別子と、前記検索結果リストにおいて該データ識別子の１つ前のデータ識別子（前識別子）および１つ後のデータ識別子（後識別子）に対して前後識別子鍵情報を組み合わせて暗号化した暗号化前後識別子情報と、前記前後識別子鍵情報を検索鍵情報により暗号化した暗号化前後識別子鍵情報とを対応付けた暗号化検索結果配列を格納する暗号化検索結果配列格納手段と、を備える。【００５９】
また、本発明の検索装置は、上述の検索補助データ格納装置を用いて、前記暗号化キーワード情報と、前記始点鍵情報と、前記検索鍵情報とを検索要求として受信する検索要求受信手段と、前記暗号化始点配列格納手段において、受信された暗号化キーワード情報に対応付けて格納されている暗号化始点情報を、受信された始点鍵情報を用いて復号することにより、前記検索結果リストにおいて始点となるデータ識別子を得て検索結果に加える始点復号手段と、前記暗号化検索結果配列格納手段において、前記検索結果に加えられたデータ識別子に対応付けて格納された暗号化前後識別子情報および暗号化前後識別子鍵情報を取得し、取得した暗号化前後識別子鍵情報を、受信された検索鍵情報を用いて復号して前後識別子鍵情報を取得し、取得した前後識別子鍵情報を用いて暗号化前後識別子情報を復号することにより、該データ識別子の１つ後のデータ識別子を得て前記検索結果に加える検索結果抽出処理を、１つ後のデータ識別子が得られなくなるまで繰り返す検索結果抽出手段と、前記検索結果抽出手段によって抽出された検索結果を出力する検索結果出力手段と、を備える。【００６０】
また、本発明の追加装置は、上述の検索補助データ格納装置を用いて、追加される対象データのデータ識別子（追加識別子）と、前記暗号化キーワード情報と、前記始点鍵情報と、前記前後識別子鍵情報と、前記暗号化前後識別子鍵情報とを追加要求として受信する追加要求受信手段と、前記暗号化始点配列格納手段において、受信された暗号化キーワード情報に対応付けて格納された暗号化始点情報を、受信された始点鍵情報を用いて復号することにより、更新前の始点のデータ識別子（更新前始点識別子）を取得する始点抽出手段と、前記暗号化始点配列格納手段において、受信された暗号化キーワード情報に対応付けられた暗号化始点情報を、前記追加識別子に前記始点鍵情報を組み合わせて暗号化した暗号化始点情報に更新する暗号化始点配列更新手段と、前記暗号化検索結果配列格納手段において、前記更新前始点識別子に対応付けられて格納されている暗号化前後識別子情報を、該暗号化前後識別子情報に前記追加識別子を前識別子として組み合わせた情報に更新するとともに、前記追加識別子に対して、受信された前後識別子鍵情報に前記更新前始点識別子を後識別子として組み合わせて生成した前記暗号化前後識別子情報と、受信された暗号化前後識別子鍵情報とを対応付けた情報を追加する暗号化検索結果配列追加手段と、を備える。【００６１】
また、本発明の削除装置は、上述の検索補助データ格納装置を用いて、削除される対象データのデータ識別子（削除識別子）と、前記前後識別子鍵情報とを削除要求として受信する削除要求受信手段と、前記暗号化検索結果配列格納手段において、前記削除識別子に対応付けられて格納されている暗号化前後識別子情報を、受信された前後識別子鍵情報を用いて復号することにより、前記削除識別子の前識別子および後識別子を取得する前後識別子抽出手段と、前記暗号化検索結果配列格納手段において、前記削除識別子に対応付けられた情報を削除するとともに、前記削除識別子の前識別子に対応付けられた暗号化前後識別子情報に、前記削除識別子および前記削除識別子の後識別子を組み合わせることにより、該暗号化前後識別子情報が後識別子として前記削除識別子の後識別子を示すよう更新し、前記削除識別子の後識別子に対応付けられた暗号化前後識別子情報に、前記削除識別子および前記削除識別子の前識別子を組み合わせることにより、該暗号化前後識別子情報が前識別子として前記削除識別子の前識別子を示すよう更新する暗号化検索結果配列削除手段と、を備える。【００６２】
また、本発明の検索依頼装置は、キーワードおよび鍵情報を入力する入力手段と、前記入力手段に入力された前記キーワードおよび前記鍵情報に基づいて、前記暗号化キーワード情報を算出する暗号化キーワード算出手段と、前記入力手段に入力された前記キーワードおよび前記鍵情報に基づいて、前記始点鍵情報を算出する始点鍵算出手段と、前記入力手段に入力された前記キーワードおよび前記鍵情報に基づいて、前記検索鍵情報を算出する検索鍵算出手段と、前記暗号化キーワード算出手段、前記始点鍵算出手段および前記検索鍵算出手段によって算出された前記暗号化キーワード情報と、前記始点鍵情報と、前記検索鍵情報とを、前記検索要求として上述の検索装置に送信する検索要求送信手段と、を備える。【００６３】
また、本発明の追加依頼装置は、前記追加識別子と、前記追加識別子の示す対象データが完全一致するキーワードと、鍵情報とを入力する入力手段と、前記入力手段に入力された前記キーワードおよび前記鍵情報に基づいて、前記暗号化キーワード情報を算出する暗号化キーワード算出手段と、前記入力手段に入力された前記キーワードおよび前記鍵情報に基づいて、前記始点鍵情報を算出する始点鍵算出手段と、前記入力手段に入力された前記追加識別子および前記鍵情報に基づいて、前記前後識別子鍵情報を算出する前後識別子鍵算出手段と、前記前後識別子鍵算出手段によって算出された前後識別子鍵情報と、前記入力手段に入力された前記キーワードおよび前記鍵情報とに基づいて、前記暗号化前後識別子鍵情報を算出する暗号化前後識別子鍵算出手段と、前記入力手段に入力された前記追加識別子と、前記暗号化キーワード算出手段、前記始点鍵算出手段、前記前後識別子鍵算出手段、および、前記暗号化前後識別子鍵算出手段によって算出された前記暗号化キーワード情報と、前記始点鍵情報と、前記前後識別子鍵情報と、前記暗号化前後識別子鍵情報とを、前記追加要求として上述の追加装置に送信する追加要求送信手段と、を備える。【００６４】
また、本発明の削除依頼装置は、前記削除識別子および鍵情報を入力する入力手段と、前記入力手段に入力された前記削除識別子および前記鍵情報に基づいて、前記前後識別子鍵情報を算出する前後識別子鍵算出手段と、前記入力手段に入力された前記削除識別子と、前記前後識別子鍵算出手段によって算出された前記前後識別子鍵情報とを、前記削除要求として上述の削除装置に送信する削除要求送信手段と、を備える。【００６５】
また、本発明のデータ検索システムは、上述の検索補助データ格納装置と、上述の検索装置と、上述の追加装置と、上述の削除装置と、上述の検索依頼装置と、上述の追加依頼装置と、上述の削除依頼装置と、を備える。【００６６】
また、本発明のデータ検索方法は、上述の検索補助データ格納装置を用いて、前記暗号化キーワード情報と、前記始点鍵情報と、前記検索鍵情報とを検索要求として受信すると、前記暗号化始点配列格納手段において、受信された暗号化キーワード情報に対応付けて格納されている暗号化始点情報を、受信された始点鍵情報を用いて復号することにより、前記検索結果リストにおいて始点となるデータ識別子を得て検索結果に加え、前記暗号化検索結果配列格納手段において、前記検索結果に加えられたデータ識別子に対応付けて格納された暗号化前後識別子情報および暗号化前後識別子鍵情報を取得し、取得した暗号化前後識別子鍵情報を、受信された検索鍵情報を用いて復号して前後識別子鍵情報を取得し、取得した前後識別子鍵情報を用いて暗号化前後識別子情報を復号することにより、該データ識別子の１つ後のデータ識別子を得て前記検索結果に加える検索結果抽出処理を、１つ後のデータ識別子が得られなくなるまで繰り返し、抽出した検索結果を出力するとともに、追加される対象データのデータ識別子（追加識別子）と、前記暗号化キーワード情報と、前記始点鍵情報と、前記前後識別子鍵情報と、前記暗号化前後識別子鍵情報とを追加要求として受信すると、前記暗号化始点配列格納手段において、受信された暗号化キーワード情報に対応付けて格納された暗号化始点情報を、受信された始点鍵情報を用いて復号することにより、更新前の始点のデータ識別子（更新前始点識別子）を取得し、前記暗号化始点配列格納手段において、受信された暗号化キーワード情報に対応付けられた暗号化始点情報を、前記追加識別子に前記始点鍵情報を組み合わせて暗号化した暗号化始点情報に更新し、前記暗号化検索結果配列格納手段において、前記更新前始点識別子に対応付けられて格納されている暗号化前後識別子情報を、該暗号化前後識別子情報に前記追加識別子を前識別子として組み合わせた情報に更新するとともに、前記追加識別子に対して、受信された前後識別子鍵情報に前記更新前始点識別子を後識別子として組み合わせて生成した前記暗号化前後識別子情報と、受信された暗号化前後識別子鍵情報とを対応付けた情報を追加するとともに、削除される対象データのデータ識別子（削除識別子）と、前記前後識別子鍵情報とを削除要求として受信すると、前記暗号化検索結果配列格納手段において、前記削除識別子に対応付けられて格納されている暗号化前後識別子情報を、受信された前後識別子鍵情報を用いて復号することにより、前記削除識別子の前識別子および後識別子を取得し、前記暗号化検索結果配列格納手段において、前記削除識別子に対応付けられた情報を削除するとともに、前記削除識別子の前識別子に対応付けられた暗号化前後識別子情報に、前記削除識別子および前記削除識別子の後識別子を組み合わせることにより、該暗号化前後識別子情報が後識別子として前記削除識別子の後識別子を示すよう更新し、前記削除識別子の後識別子に対応付けられた暗号化前後識別子情報に、前記削除識別子および前記削除識別子の前識別子を組み合わせることにより、該暗号化前後識別子情報が前識別子として前記削除識別子の前識別子を示すよう更新する。【００６７】
また、本発明の記憶媒体は、上述の検索補助データ格納装置を用いて、前記暗号化キーワード情報と、前記始点鍵情報と、前記検索鍵情報とを検索要求として受信する検索要求受信ステップと、前記暗号化始点配列格納手段において、受信された暗号化キーワード情報に対応付けて格納されている暗号化始点情報を、受信された始点鍵情報を用いて復号することにより前記検索結果リストにおいて始点となるデータ識別子を得て検索結果に加える始点復号ステップと、前記暗号化検索結果配列格納手段において、前記検索結果に加えられたデータ識別子に対応付けて格納された暗号化前後識別子情報および暗号化前後識別子鍵情報を取得し、取得した暗号化前後識別子鍵情報を、受信された検索鍵情報を用いて復号して前後識別子鍵情報を取得し、取得した前後識別子鍵情報を用いて暗号化前後識別子情報を復号することにより、該データ識別子の１つ後のデータ識別子を得て前記検索結果に加える検索結果抽出処理を、１つ後のデータ識別子が得られなくなるまで繰り返す検索結果抽出ステップと、前記検索結果抽出ステップで抽出された検索結果を出力する検索結果出力ステップと、追加される対象データのデータ識別子（追加識別子）と、前記暗号化キーワード情報と、前記始点鍵情報と、前記前後識別子鍵情報と、前記暗号化前後識別子鍵情報とを追加要求として受信する追加要求受信ステップと、前記暗号化始点配列格納手段において、受信された暗号化キーワード情報に対応付けて格納された暗号化始点情報を、受信された始点鍵情報を用いて復号することにより、更新前の始点のデータ識別子（更新前始点識別子）を取得する始点抽出ステップと、前記暗号化始点配列格納手段において、受信された暗号化キーワード情報に対応付けられた暗号化始点情報を、前記追加識別子に前記始点鍵情報を組み合わせて暗号化した暗号化始点情報に更新する暗号化始点配列更新ステップと、前記暗号化検索結果配列格納手段において、前記更新前始点識別子に対応付けられて格納されている暗号化前後識別子情報を、該暗号化前後識別子情報に前記追加識別子を前識別子として組み合わせた情報に更新するとともに、前記追加識別子に対して、受信された前後識別子鍵情報に前記更新前始点識別子を後識別子として組み合わせて生成した前記暗号化前後識別子情報と、受信された暗号化前後識別子鍵情報とを対応付けた情報を追加する暗号化検索結果配列追加ステップと、削除される対象データのデータ識別子（削除識別子）と、前記前後識別子鍵情報とを削除要求として受信する削除要求受信ステップと、前記暗号化検索結果配列格納手段において、前記削除識別子に対応付けられて格納されている暗号化前後識別子情報を、受信された前後識別子鍵情報を用いて復号することにより、前記削除識別子の前識別子および後識別子を取得する前後識別子抽出ステップと、前記暗号化検索結果配列格納手段において、前記削除識別子に対応付けられた情報を削除するとともに、前記削除識別子の前識別子に対応付けられた暗号化前後識別子情報に、前記削除識別子および前記削除識別子の後識別子を組み合わせることにより、該暗号化前後識別子情報が後識別子として前記削除識別子の後識別子を示すよう更新し、前記削除識別子の後識別子に対応付けられた暗号化前後識別子情報に、前記削除識別子および前記削除識別子の前識別子を組み合わせることにより、該暗号化前後識別子情報が前識別子として前記削除識別子の前識別子を示すよう更新する暗号化検索結果配列削除ステップと、をコンピュータ装置に実行させるコンピュータ・プログラムを記憶している。
【発明の効果】
【００６８】
本発明は、暗号化された対象データに対する完全一致検索処理において用いられる暗号化された検索補助データの記憶容量を削減する技術を提供することができる。
【図面の簡単な説明】
【００６９】
【図１】本発明の実施の形態としてのデータ検索システムの構成を示すブロック図である。
【図２】本発明の実施の形態としてのデータ検索システムのハードウェア構成図である。
【図３】本発明の実施の形態としての検索補助データ格納装置の機能ブロック構成図である。
【図４】本発明の実施の形態としての検索補助データ格納装置に格納される情報を説明する図である。
【図５】本発明の実施の形態としての検索補助データ格納装置に格納される暗号化始点配列の一例を示す図である。
【図６】本発明の実施の形態としての検索補助データ格納装置に格納される暗号化検索結果配列の一例を示す図である。
【図７】本発明の実施の形態としての検索装置および検索依頼装置の機能ブロック構成図である。
【図８】本発明の実施の形態としての追加装置および追加依頼装置の機能ブロック構成図である。
【図９】本発明の実施の形態としての削除装置および削除依頼装置の機能ブロック構成図である。
【図１０】本発明の実施の形態としての検索依頼装置の検索依頼動作を説明するフローチャートである。
【図１１】本発明の実施の形態としての検索装置の検索動作を説明するフローチャートである。
【図１２】本発明の実施の形態としての追加依頼装置の追加依頼動作を説明するフローチャートである。
【図１３】本発明の実施の形態としての追加装置の追加動作を説明するフローチャートである。
【図１４】本発明の実施の形態における追加動作によって更新された暗号化始点配列の一例を示す図である。
【図１５】本発明の実施の形態における追加動作によって更新された暗号化検索結果配列の一例を示す図である。
【図１６】本発明の実施の形態としての削除依頼装置の削除依頼動作を説明するフローチャートである。
【図１７】本発明の実施の形態としての削除装置の削除動作を説明するフローチャートである。
【図１８】本発明の実施の形態における削除動作によって更新された暗号化検索結果配列の一例を示す図である。
【図１９】キーワードに対して検索結果を保存しておく一般的な手法を説明する図である。
【図２０】関連技術において用いられる線形リストを説明する模式図である。
【図２１】関連技術において用いられる始点配列および検索結果配列を説明する図である。
【図２２】関連技術において用いられる暗号化始点配列および暗号化検索結果配列を説明する図である。
【図２３】関連技術において各対象データが１つのキーワードを含むと仮定した場合の始点配列および検索結果配列を説明する図である。
【図２４】関連技術において各対象データが１つのキーワードを含むと仮定した場合の削除配列を説明する図である。
【図２５】関連技術において用いられる暗号化削除配列を説明する図である。
【発明を実施するための形態】
【００７０】
以下、本発明の実施の形態について、図面を参照して詳細に説明する。
【００７１】
本発明の実施の形態としてのデータ検索システム１は、対象データ群からキーワードに完全一致するデータを検索するシステムである。データ検索システム１の構成を図１に示す。
【００７２】
図１において、データ検索システム１は、検索補助データ格納装置１０と、検索装置２０と、追加装置３０と、削除装置４０と、検索依頼装置５０と、追加依頼装置６０と、削除依頼装置７０とを備える。また、検索補助データ格納装置１０は、検索装置２０、追加装置３０および削除装置４０と、それぞれ通信可能に接続される。また、検索装置２０および検索依頼装置５０は、通信可能に接続されている。また、追加装置３０および追加依頼装置６０は、通信可能に接続されている。また、削除装置４０および削除依頼装置７０は、通信可能に接続されている。なお、図１には、検索補助データ格納装置１０と、検索装置２０と、追加装置３０と、削除装置４０と、検索依頼装置５０と、追加依頼装置６０と、削除依頼装置７０とを１つずつ示したが、本発明のデータ検索システムが備える各装置の数を限定するものではない。
【００７３】
例えば、データ検索システム１は、図２に示すように、サーバ１００および端末２００によって構成可能である。サーバ１００は、ＣＰＵ（Central Processing Unit）１００１と、ＲＡＭ（Random Access Memory）１００２と、ＲＯＭ（Read Only Memory）１００３と、ハードディスク等の記憶装置１００４と、ネットワークインタフェース１００５とを含む。また、端末２００は、ＣＰＵ２００１と、ＲＡＭ２００２と、ＲＯＭ２００３と、ハードディスク等の記憶装置２００４と、ネットワークインタフェース２００５と、入力装置２００６と、出力装置２００７とを含む。
【００７４】
この場合、検索補助データ格納装置１０、検索装置２０、追加装置３０および削除装置４０は、サーバ１００によって構成可能である。また、検索依頼装置５０、追加依頼装置６０および削除依頼装置７０は、端末２００によって構成可能である。
【００７５】
なお、データ検索システム１のハードウェア構成は、上述の構成に限定されない。例えば、データ検索システム１を構成する各装置は、同一のコンピュータ装置上に実現されていてもよい。また、例えば、データ検索システム１を構成する各装置は、それぞれが他と異なるコンピュータ装置によって構成されていてもよい。また、さらに他の例としては、検索依頼装置５０がユーザ端末として機能するコンピュータ装置上に実現され、追加依頼装置６０および削除依頼装置７０が、管理端末として機能するコンピュータ装置上に実現されていてもよい。
【００７６】
次に、データ検索システム１を構成する各装置の機能ブロックについて説明する。
【００７７】
まず、検索補助データ格納装置１０の機能ブロックを図３に示す。図３において、検索補助データ格納装置１０は、暗号化始点配列格納部１１と、暗号化検索結果配列格納部１２とを備える。ここで、検索補助データ格納装置１０が上述のサーバ１００によって構成される場合、暗号化始点配列格納部１１および暗号化検索結果配列格納部１２は、記憶装置１００４によって構成される。なお、検索補助データ格納装置１０の各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【００７８】
ここで、各機能ブロックについて説明する前に、暗号化始点配列格納部１１が格納する暗号化始点配列の元となる始点配列、および、暗号化検索結果配列格納部１２が格納する暗号化検索結果配列の元となる検索結果配列について、図４を参照して説明する。図４に示すように、本実施の形態では、暗号化始点配列の元となる始点配列は、図２１に示した非特許文献１に記載の始点配列に対して、各キーワードについて番地ではなくデータ識別子を格納する点が異なる。また、本実施の形態では、暗号化検索結果配列の元となる検索結果配列は、図２１に示した非特許文献１に記載の検索結果配列に対して、番地毎ではなくデータ識別子毎に情報を格納する点と、後識別子（次番地）だけでなく前識別子も格納する点とが異なる。
【００７９】
ここで、非特許文献１に記載のＤＳＳＥでは、対象データのデータ識別子とは別に、ノードを記憶する場所を示す番地を用いていた。これは、ＤＳＳＥでは、一つの対象データが複数のキーワードを含む可能性を想定しているため、検索結果配列の行数が、登録されている対象データの数よりも多くなる可能性があるからであった。そのため、ＤＳＳＥでは、検索結果配列における行を一意に特定する情報として、データ識別子を用いることができず、別の情報（番地）を用いていた。本実施の形態では、対象データに対する完全一致検索を想定しているため、検索結果配列の行数は、対象データ数と一致する。したがって、この場合、データ識別子は、検索結果配列における行を一意に特定する情報（番地）として用いられることが可能となる。そこで、本実施の形態は、検索結果配列のデータ構造として、ＤＳＳＥのように番地とデータ識別子とを別の列で管理する構造とは異なり、データ識別子のみで管理可能なデータ構造を採用する。
【００８０】
また、本実施の形態は、検索結果配列に、ＤＳＳＥの検索結果配列には格納されていなかった前識別子に相当する情報を含むデータ構造を採用している。前識別子の情報を検索結果配列に追加することにより、検索結果配列の各行は、ある対象データと、それにつながる前の対象データおよび後の対象データとを示すことになる。このような情報は、ＤＳＳＥにおいて削除配列によって管理されていた情報に相当する。したがって、このような検索結果配列は、ある対象データを削除したい場合に、更新が必要となる前の対象データおよび後の対象データを示すことになり、削除配列を不要とする。
【００８１】
本実施の形態は、図４に示したような始点配列を暗号化した情報を暗号化始点配列格納部１１に格納し、図４に示したような検索結果配列を暗号化した情報を暗号化検索結果配列格納部１２に格納する。次に、各機能ブロックについて説明する。
【００８２】
暗号化始点配列格納部１１は、暗号化キーワード情報と、暗号化始点情報とを対応付けた暗号化始点配列を格納する。ここで、暗号化キーワード情報とは、対象データ群に対する完全一致検索に用いられうる各キーワードをキーワード鍵情報により暗号化した情報である。例えば、暗号化キーワード情報は、次式（１）により表される。
P(k_p;W)  ・・・（１）
ここで、Pは、鍵付き置換を表す。また、k_pは、キーワード鍵情報を表す。また、Wは、キーワードを表す。
【００８３】
また、暗号化始点情報とは、キーワードについての検索結果リストにおける始点のデータ識別子を、始点鍵情報と組み合わせることにより暗号化した情報である。なお、検索結果リストとは、対象データ群のうちキーワードに完全一致する対象データのデータ識別子のリストをいう。例えば、始点鍵情報は、次式（２）により表される。
F1(k_e;W)  ・・・（２）
ここで、k_eは、始点鍵情報を生成するための鍵（始点鍵情報生成鍵）を表し、F1は、鍵付き関数を表す。このように、始点鍵情報は、該当するキーワードWを始点鍵情報生成鍵k_eによって鍵付き関数F1を用いて暗号化することによって生成された情報であってもよい。この場合、始点鍵情報は、キーワード毎に生成される。始点鍵情報が式（２）により表される場合、暗号化始点情報は、次式（３）により表される。
F1(k_e;W)◎D  ・・・（３）
ここで、“◎”は、排他的論理和を表す。また、Dは、対象データ群のうちキーワードWに完全一致する検索結果リストにおける始点のデータ識別子を表す。
【００８４】
暗号化始点配列格納部１１に格納される情報の一例を図５に示す。図５において、例えば、1行目は、キーワードw_1についての暗号化キーワード情報と、暗号化始点情報とを表している。1行目の暗号化キーワード情報は、キーワードw_1をキーワード鍵情報k_pにより鍵付き置換Pを用いて暗号化した情報である。また、1行目の暗号化始点情報は、対象データ群のうちキーワードw_1に完全一致する検索結果リストにおいて始点となる対象データの識別子D_1を、始点鍵情報F1(k_e;w_1)と組み合わせることにより暗号化した情報である。
【００８５】
暗号化検索結果配列格納部１２は、データ識別子と、暗号化前後識別子情報と、暗号化前後識別子鍵情報とを対応付けた暗号化検索結果配列を格納する。ここで、データ識別子は、任意のキーワードについての上述の検索結果リストに含まれる各対象データのデータ識別子を表す。
【００８６】
また、暗号化前後識別子情報とは、上述の検索結果リストにおいて、該当するデータ識別子の１つ前のデータ識別子（前識別子）および１つ後のデータ識別子（後識別子）を、前後識別子鍵情報と組み合わせて暗号化した情報である。例えば、前後識別子鍵情報は、次式（４）により表される。
F2(k_d;D)  ・・・（４）
ここで、Dは、該当するデータ識別子である。また、k_dは、前後識別子鍵情報を生成するための鍵（前後識別子鍵情報生成鍵）を表し、F2は、鍵付き関数を表す。このように、前後識別子鍵情報は、該当するデータ識別子Dを前後識別子鍵情報生成鍵k_dによって鍵付き関数F2を用いて暗号化することによって生成された情報であってもよい。この場合、前後識別子鍵情報は、データ識別子毎に生成される。前後識別子鍵情報が式（４）により表される場合、暗号化前後識別子情報は、次式（５）により表される。
F2(k_d;D)◎(D_p||D_a)  ・・・（５）
ここで、“||”は、連結を表す。また、Dは、該当するデータ識別子である。また、D_pは、Dが含まれる検索結果リストにおいてDの前識別子を表し、D_aはDの後識別子を表す。
【００８７】
また、暗号化前後識別子鍵情報とは、前後識別子鍵情報を検索鍵情報により暗号化した情報である。例えば、検索鍵情報は、次式（６）により表される。
F3(k_s;W)  ・・・（６）
ここで、k_sは、検索鍵情報を生成するための鍵（検索鍵情報生成鍵）を表し、F3は、鍵付き関数を表す。このように、検索鍵情報は、該当するキーワードWを検索鍵情報生成鍵k_sによって鍵付き関数F3を用いて暗号化することによって生成された情報であってもよい。この場合、検索鍵情報は、キーワード毎に生成される。前後識別子鍵情報が式（４）により表され、検索鍵情報が式（６）によって表される場合、暗号化前後識別子鍵情報は、次式（７）により表される。
Enc(F3(k_s;W);F2(k_d;D))  ・・・（７）
ここで、Encは、共通鍵暗号の暗号化関数を表す。
【００８８】
暗号化検索結果配列格納部１２に格納される情報の一例を図６に示す。図６において、例えば、1行目は、キーワードw_1についての検索結果リストに含まれるデータ識別子D_1についての暗号化前後識別子情報と、暗号化前後識別子鍵情報とを表している。この例では、キーワードw_1についての検索結果リストにおいて、データ識別子D_1は始点であるため、前識別子としては、前識別子が無いことを表す0^Lを適用している。なお、データ識別子はLビットであるものとし、0^Lは、0をL個並べたビット列を表す。このように、1行目の暗号化前後識別子情報は、データ識別子D_1の前識別子0^Lおよび後識別子D_2を連結した情報を、前後識別子鍵情報F3(k_d;D_1)と組み合わせることにより生成した情報である。また、1行目の暗号化前後識別子鍵情報は、前後識別子鍵情報F3(k_d;D_1)を、検索鍵情報F3(k_s;w_1)で暗号化した情報である。
【００８９】
次に、検索装置２０および検索依頼装置５０の機能ブロックを図７に示す。
【００９０】
図７において、検索装置２０は、検索要求受信部２１と、始点復号部２２と、検索結果抽出部２３と、検索結果出力部２４とを備える。ここで、検索装置２０が上述のサーバ１００によって構成される場合、各機能ブロックは、次のように構成される。検索要求受信部２１および検索結果出力部２４は、ネットワークインタフェース１００５と、ＲＯＭ１００３および記憶装置１００４に記憶されたコンピュータ・プログラムおよび各種データをＲＡＭ１００２に読み込んで実行するＣＰＵ１００１とによって構成される。また、始点復号部２２および検索結果抽出部２３は、ＲＯＭ１００３および記憶装置１００４に記憶されたコンピュータ・プログラムおよび各種データをＲＡＭ１００２に読み込んで実行するＣＰＵ１００１によって構成される。なお、検索装置２０の各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【００９１】
検索要求受信部２１は、暗号化キーワード情報と、始点鍵情報と、検索鍵情報とを検索要求として受信する。具体的には、検索要求受信部２１は、後述の検索依頼装置５０から、このような検索要求を受信する。
【００９２】
始点復号部２２は、上述の検索補助データ格納装置１０の暗号化始点配列格納部１１を参照し、受信された暗号化キーワード情報および始点鍵情報に基づいて、始点のデータ識別子を復号する。具体的には、始点復号部２２は、暗号化始点配列格納部１１において、受信された暗号化キーワード情報に対応付けて格納されている暗号化始点情報を取得する。そして、始点復号部２２は、取得した暗号化始点情報を、受信された始点鍵情報を用いて復号することにより、始点のデータ識別子を得て検索結果に加える。このようにして得られる始点のデータ識別子は、受信された暗号化キーワード情報の元となるキーワードについての検索結果リストの始点である。
【００９３】
例えば、暗号化始点配列格納部１１が、式（１）に示した暗号化キーワード情報P(k_p;W)と、式（３）に示した暗号化始点情報F1(k_e;W)◎Dとを対応付けて格納しているとする。このとき、検索要求として、暗号化キーワード情報P(k_p;W)および始点鍵情報F1(k_e;W)が受信されたとする。この場合、始点復号部２２は、次の手順a1〜a3により、始点のデータ識別子を検索結果に加えることができる。
a1：暗号化始点配列格納部１１において、暗号化キーワード情報P(k_p;W)に対応付けられている暗号化始点情報X=F1(k_e;W)◎Dを取得する。
a2：Xと始点鍵情報F1(k_e;W)との排他的論理和F1(k_e;W)◎Xを計算する。
ここで、排他的論理和演算の性質により、F1(k_e;W)◎X＝F1(k_e;W)◎F1(k_e;W)◎D＝Dとなり、始点Dが得られる。
a3：始点Dを検索結果に加える。
【００９４】
検索結果抽出部２３は、暗号化検索結果配列格納部１２を参照し、受信された検索鍵情報に基づいて、始点のデータ識別子に続くデータ識別子を順次求めて検索結果に加える。具体的には、検索結果抽出部２３は、以下の検索結果抽出処理を繰り返し行う。ここでは、検索結果抽出部２３は、暗号化検索結果配列格納部１２において、検索結果に加えられたデータ識別子に対応付けて格納された暗号化前後識別子情報および暗号化前後識別子鍵情報を取得する。そして、検索結果抽出部２３は、取得した暗号化前後識別子鍵情報を、受信された検索鍵情報を用いて復号することにより、前後識別子鍵情報を得る。そして、検索結果抽出部２３は、得られた前後識別子鍵情報を用いて、暗号化検索結果配列格納部１２から取得した暗号化前後識別子情報を復号することにより、該データ識別子の１つ後のデータ識別子を得る。そして、検索結果抽出部２３は、得られたデータ識別子を検索結果に加える。このような検索結果抽出処理を、検索結果抽出部２３は、１つ後のデータ識別子が得られなくなるまで繰り返す。このようにして得られる検索結果リストは、受信された暗号化キーワード情報の元となるキーワードについての検索結果リストである。
【００９５】
例えば、暗号化検索結果配列格納部１２が、データ識別子Dに対して、式（５）に示した暗号化前後識別子情報F2(k_d;D)◎(D_p||D_a)と、式（７）に示した暗号化前後識別子鍵情報Enc(F3(k_s;W);F2(k_d;D))とを対応付けて格納しているとする。このとき、検索要求として受信された検索鍵情報がF3(k_s;W)であるとする。この場合、検索結果抽出部２３は、次の手順b1〜b4により、始点のデータ識別子Dに続くデータ識別子を順次求めることができる。
b1：暗号化検索結果配列格納部１２において、データ識別子Dに対応付けられた暗号化前後識別子情報Y=F2(k_d;D)◎(D_p||D_a)および暗号化前後識別子鍵情報Z=Enc(F3(k_s;W);F2(k_d;D))を得る。
b2：Zを検索鍵情報F3(k_s;W)で復号する。すなわち、Dec(F3(k_s;W);Z)により、前後識別子鍵情報F2(k_d;D)が得られる。
b3：Yと前後識別子鍵情報F2(k_d;D)との排他的論理和F2(k_d;D)◎Yを計算する。ここで、排他的論理和演算の性質により、F2(k_d;D)◎Y＝F2(k_d;D)◎F2(k_d;D)◎(D_p||D_a)＝D_p||D_aとなり、前識別子D_pおよび後識別子D_aが得られる。
b4：D_aがNullでなければ、D_aをDとして検索結果に加え、手順b1から繰り返す。
【００９６】
検索結果出力部２４は、検索結果抽出部２３によって抽出された検索結果を出力する。例えば、検索結果出力部２４は、ネットワークインタフェース１００５を介して接続された後述の検索依頼装置５０に対して、検索結果を出力してもよい。
【００９７】
また、図７において、検索依頼装置５０は、入力部５１と、暗号化キーワード算出部５２と、始点鍵算出部５３と、検索鍵算出部５４と、検索要求送信部５５とを備える。ここで、検索依頼装置５０が上述の端末２００によって構成される場合、各機能ブロックは次のように構成される。入力部５１は、入力装置２００６と、ＲＯＭ２００３および記憶装置２００４に記憶されたコンピュータ・プログラムおよび各種データをＲＡＭ２００２に読み込んで実行するＣＰＵ２００１とによって構成される。また、暗号化キーワード算出部５２、始点鍵算出部５３および検索鍵算出部５４は、ＲＯＭ２００３および記憶装置２００４に記憶されたコンピュータ・プログラムおよび各種データをＲＡＭ２００２に読み込んで実行するＣＰＵ２００１によって構成される。また、検索要求送信部５５は、ネットワークインタフェース２００５と、ＲＯＭ２００３および記憶装置２００４に記憶されたコンピュータ・プログラムおよび各種データをＲＡＭ２００２に読み込んで実行するＣＰＵ２００１とによって構成される。なお、検索依頼装置５０の各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【００９８】
入力部５１は、キーワードおよび鍵情報を入力情報として取得する。キーワードは、対象データ群に対する完全一致検索のために入力される情報である。また、鍵情報は、後述の検索要求を生成するための情報である。例えば、入力部５１は、鍵情報として、前述のキーワード鍵情報k_p、始点鍵情報生成鍵k_eおよび検索鍵情報生成鍵k_sを取得してもよい。また、例えば、入力部５１は、鍵情報として、これらの情報k_p、k_eおよびk_sを生成可能な１つの鍵Kを取得してもよい。
【００９９】
暗号化キーワード算出部５２は、入力部５１に入力されたキーワードおよび鍵情報に基づいて、暗号化キーワード情報を算出する。ここで、キーワードとしてWが入力され、鍵情報としてキーワード鍵情報k_pが入力されている場合、暗号化キーワード算出部５２は、前述の式（１）を用いて暗号化キーワード情報P(k_p;W)を算出すればよい。また、鍵情報として、１つの鍵Kが入力されている場合、暗号化キーワード算出部５２は、キーワード鍵情報の生成用にあらかじめ定められたデータを、入力された鍵Kを用いて暗号化することにより、キーワード鍵情報k_pを生成してもよい。その後、暗号化キーワード算出部５２は、入力されたキーワードWと、生成したキーワード鍵情報k_pとを式（１）に適用することにより、暗号化キーワード情報を算出すればよい。
【０１００】
始点鍵算出部５３は、入力部５１に入力されたキーワードおよび鍵情報に基づいて、始点鍵情報を算出する。ここで、キーワードとしてWが入力され、鍵情報として始点鍵情報生成鍵k_eが入力されている場合、始点鍵算出部５３は、前述の式（２）を用いて始点鍵情報F1(k_e; W)を算出すればよい。また、鍵情報として１つの鍵Kが入力されている場合、始点鍵算出部５３は、始点鍵情報生成鍵の生成用にあらかじめ定められたデータを、入力された鍵Kを用いて暗号化することにより、始点鍵情報生成鍵k_eを生成してもよい。その後、始点鍵算出部５３は、入力されたキーワードWと、生成した始点鍵情報生成鍵k_eとを式（２）に適用することにより、始点鍵情報を算出すればよい。
【０１０１】
検索鍵算出部５４は、入力部５１に入力されたキーワードおよび鍵情報に基づいて、検索鍵情報を算出する。ここで、キーワードとしてWが入力され、鍵情報として検索鍵情報生成鍵k_sが入力されている場合、検索鍵算出部５４は、前述の式（６）を用いて検索鍵情報F3(k_s;W)を算出すればよい。また、鍵情報として１つの鍵Kが入力されている場合、検索鍵算出部５４は、検索鍵情報生成鍵の生成用にあらかじめ定められたデータを、入力された鍵Kを用いて暗号化することにより、検索鍵情報生成鍵k_sを生成してもよい。その後、検索鍵算出部５４は、入力されたキーワードWと、生成した検索鍵情報生成鍵k_sとを式（６）に適用することにより、検索鍵情報を算出すればよい。
【０１０２】
検索要求送信部５５は、暗号化キーワード算出部５２、始点鍵算出部５３および検索鍵算出部５４によって算出された暗号化キーワード情報と、始点鍵情報と、検索鍵情報とを、検索要求として検索装置２０に送信する。
【０１０３】
次に、追加装置３０および追加依頼装置６０の機能ブロックを図８に示す。図８において、追加装置３０は、追加要求受信部３１と、始点抽出部３２と、暗号化始点配列更新部３３と、暗号化検索結果配列追加部３４とを備える。ここで、追加装置３０が上述のサーバ１００によって構成される場合、各機能ブロックは次のように構成される。追加要求受信部３１は、ネットワークインタフェース１００５と、ＲＯＭ１００３および記憶装置１００４に記憶されたコンピュータ・プログラムおよび各種データをＲＡＭ１００２に読み込んで実行するＣＰＵ１００１とによって構成される。また、始点抽出部３２、暗号化始点配列更新部３３および暗号化検索結果配列追加部３４は、ＲＯＭ１００３および記憶装置１００４に記憶されたコンピュータ・プログラムおよび各種データをＲＡＭ１００２に読み込んで実行するＣＰＵ１００１によって構成される。なお、追加装置３０の各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【０１０４】
追加要求受信部３１は、追加識別子と、暗号化キーワード情報と、始点鍵情報と、前後識別子鍵情報と、暗号化前後識別子鍵情報とを、追加要求として受信する。ここで、追加識別子とは、完全一致検索の対象データ群に追加される対象データのデータ識別子を表す。追加要求受信部３１は、後述の追加依頼装置６０から、このような追加要求を受信する。
【０１０５】
始点抽出部３２は、検索補助データ格納装置１０の暗号化始点配列格納部１１を参照し、受信された暗号化キーワード情報に対応付けて格納された暗号化始点情報を取得する。そして、始点抽出部３２は、取得した暗号化始点情報を、受信された始点鍵情報を用いて復号することにより、更新前の始点のデータ識別子を取得する。以降、更新前の始点のデータ識別子を、更新前始点識別子ともいう。
【０１０６】
例えば、暗号化始点配列格納部１１が、式（１）に示した暗号化キーワード情報P(k_p;W)と、式（３）に示した暗号化始点情報F1(k_e;W)◎Dとを対応付けて格納しているとする。また、追加要求として、暗号化キーワード情報P(k_p;W)および始点鍵情報F1(k_e;W)が受信されているとする。この場合、始点抽出部３２は、検索装置２０の始点復号部２２と略同様の手順a1〜a2により、更新前始点識別子を抽出可能である。ここでは、得られた更新前始点識別子をD_fとする。
【０１０７】
暗号化始点配列更新部３３は、暗号化始点配列格納部１１において、受信された暗号化キーワード情報に対応付けられた暗号化始点情報を更新する。具体的には、暗号化始点配列更新部３３は、受信された追加識別子に、受信された始点鍵情報を組み合わせて新たな暗号化始点情報を算出する。そして、暗号化始点配列更新部３３は、該当する暗号化キーワード情報に対応付けられた暗号化始点情報を、新たな暗号化始点情報に更新する。これにより、受信された暗号化キーワード情報の元となるキーワードについての検索結果リストにおいて、追加識別子が新たな始点として登録されたことになる。
【０１０８】
例えば、暗号化始点配列格納部１１が、式（１）に示した暗号化キーワード情報P(k_p;W)と、式（３）に示した暗号化始点情報F1(k_e;W)◎Dとを対応付けて格納しているとする。また、追加要求として、追加識別子D_new、暗号化キーワード情報P(k_p;W)および始点鍵情報F1(k_e;W)が受信されたとする。この場合、暗号化始点配列更新部３３は、次の手順c1〜c2により、暗号化始点配列格納部１１を更新する。
c1：始点鍵情報F1(k_e;W)および追加識別子D_newを式（３）に適用し、新たな暗号化始点情報F1(k_e;W)◎D_newを算出する。
c2：暗号化始点配列格納部１１において、暗号化キーワード情報P(k_p;W)に対応付けられた情報を、手順c1で算出した暗号化始点情報F1(k_e;W)◎D_newに更新する。
【０１０９】
暗号化検索結果配列追加部３４は、暗号化検索結果配列格納部１２において、更新前始点識別子に対応付けられて格納されている暗号化前後識別子情報を更新する。具体的には、暗号化検索結果配列追加部３４は、更新前始点識別子に対応付けられた暗号化前後識別子情報に、追加識別子を前識別子として組み合わせることにより、新たな暗号化前後識別子情報を算出する。そして、暗号化検索結果配列追加部３４は、更新前始点識別子に、新たな暗号化前後識別子情報を対応付ければよい。
【０１１０】
また、暗号化検索結果配列追加部３４は、暗号化検索結果配列格納部１２に、追加識別子に対応する情報を追加する。具体的には、暗号化検索結果配列追加部３４は、受信された前後識別子鍵情報に、更新前始点識別子を後識別子として組み合わせて暗号化前後識別子情報を算出する。そして、暗号化検索結果配列追加部３４は、追加識別子に対して、算出した暗号化前後識別子情報と、受信された暗号化前後識別子鍵情報とを対応付けた情報を、暗号化検索結果配列格納部１２に追加すればよい。これにより、受信された暗号化キーワード情報の元となるキーワードについての検索結果リストにおいて、更新前始点識別子の前に、新たな始点として追加識別子が登録されたことになる。
【０１１１】
例えば、暗号化検索結果配列格納部１２が、データ識別子Dに対して、式（５）に示した暗号化前後識別子情報と、式（７）に示した暗号化前後識別子鍵情報とを格納しているとする。この場合、更新前始点識別子D_fに対応する暗号化前後識別子情報は、式（５）において前識別子が無いことを示すF2(k_d;D_f)◎(0^L||D_a)となる。このとき、追加要求として、追加識別子D_new、始点鍵情報F1(k_e;W)、前後識別子鍵情報F2(k_d;D_new)、暗号化前後識別子鍵情報Enc(F3(k_s;W);F2(k_d;D_new))が受信されたとする。この場合、始点抽出部３２は、次の手順e1〜e5により、暗号化検索結果配列格納部１２を更新する。
e1：暗号化検索結果配列格納部１２において、更新前始点識別子D_fに対応付けられている暗号化前後識別子情報F2(k_d;D_f)◎(0^L ||D_a)を取得する。
e2：取得したF2(k_d;D_f)◎(0^L ||D_a)および追加識別子を前識別子として表す情報(D_new||0^L)の排他的論理和を演算することにより、更新前始点識別子D_fに対応する新たな暗号化前後識別子情報F2(k_d;D_f)◎(D_new||D_a)を算出する。
e3：暗号化検索結果配列格納部１２において、更新前始点識別子D_fに対応付けられた暗号化前後識別子情報を、手順e2で算出した値に更新する。
e4：前後識別子鍵情報F2(k_d;D_new)および更新前始点識別子(0^L ||D_f)の排他的論理和を演算することにより、追加識別子D_fに対応する暗号化前後識別子情報としてF2(k_d;D_new)◎(0^L||D_f)を算出する。
e5：暗号化検索結果配列格納部１２に、追加識別子D_newと、手順e4で算出した暗号化前後識別子情報F2(k_d;D_new)◎(0^L||D_f)と、暗号化前後識別子鍵情報Enc(F3(k_s;W);F2(k_d;D_new))とを対応付けた情報を追加する。
【０１１２】
また、図８において、追加依頼装置６０は、入力部６１と、暗号化キーワード算出部６２と、始点鍵算出部６３と、前後識別子鍵算出部６４と、暗号化前後識別子鍵算出部６５と、追加要求送信部６６とを備える。ここで、追加依頼装置６０が上述の端末２００によって構成される場合、各機能ブロックは次のように構成される。入力部６１は、入力装置２００６と、ＲＯＭ２００３および記憶装置２００４に記憶されたコンピュータ・プログラムおよび各種データをＲＡＭ２００２に読み込んで実行するＣＰＵ２００１とによって構成される。また、暗号化キーワード算出部６２、始点鍵算出部６３、前後識別子鍵算出部６４および暗号化前後識別子鍵算出部６５は、次のように構成される。すなわち、これらの各機能ブロックは、ＲＯＭ２００３および記憶装置２００４に記憶されたコンピュータ・プログラムおよび各種データをＲＡＭ２００２に読み込んで実行するＣＰＵ２００１によって構成される。また、追加要求送信部６６は、ネットワークインタフェース２００５と、ＲＯＭ２００３および記憶装置２００４に記憶されたコンピュータ・プログラムおよび各種データをＲＡＭ２００２に読み込んで実行するＣＰＵ２００１とによって構成される。なお、追加依頼装置６０の各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【０１１３】
入力部６１は、追加識別子と、キーワードと、鍵情報とを入力情報として取得する。追加識別子は、追加される対象データのデータ識別子である。また、キーワードは、追加識別子の示す対象データが完全一致するキーワードである。また、鍵情報は、後述の追加要求を生成するための情報である。例えば、入力部６１は、鍵情報として、前述のキーワード鍵情報k_p、始点鍵情報生成鍵k_e、検索鍵情報生成鍵k_s、および、前後識別子鍵情報生成鍵k_dを取得してもよい。また、例えば、入力部６１は、鍵情報として、これらの情報k_p、k_e、k_s、および、k_dを生成可能な１つの鍵Kを取得してもよい。
【０１１４】
暗号化キーワード算出部６２は、入力部６１に入力されたキーワードおよび鍵情報に基づいて、暗号化キーワード情報を算出する。暗号化キーワード算出部６２の具体的な構成例については、検索依頼装置５０の暗号化キーワード算出部５２の具体的構成例と略同様であるため、詳細な説明を省略する。
【０１１５】
始点鍵算出部６３は、入力部６１に入力されたキーワードおよび鍵情報に基づいて、始点鍵情報を算出する。始点鍵算出部６３の具体的な構成例については、検索依頼装置５０の始点鍵算出部５３の具体的構成例と略同様であるため、詳細な説明を省略する。
【０１１６】
前後識別子鍵算出部６４は、入力部６１に入力された追加識別子および鍵情報に基づいて、前後識別子鍵情報を算出する。ここで、追加識別子としてDが入力され、鍵情報として前後識別子鍵情報生成鍵k_dが入力されている場合、前後識別子鍵算出部６４は、前述の式（４）を用いて前後識別子鍵情報F2(k_d;D)を算出すればよい。また、鍵情報として１つの鍵Kが入力されている場合、前後識別子鍵算出部６４は、前後識別子鍵情報生成鍵の生成用にあらかじめ定められたデータを、入力された鍵Kを用いて暗号化することにより、前後識別子鍵情報生成鍵k_dを生成してもよい。その後、前後識別子鍵算出部６４は、入力された追加識別子Dと、生成した前後識別子鍵情報生成鍵k_dとを式（４）に適用することにより、前後識別子鍵情報を算出すればよい。
【０１１７】
暗号化前後識別子鍵算出部６５は、前後識別子鍵算出部６４によって算出された前後識別子鍵情報と、入力部６１に入力されたキーワードおよび鍵情報とに基づいて、暗号化前後識別子鍵情報を算出する。ここで、キーワードとしてWが入力され、鍵情報として検索鍵情報生成鍵k_sが入力されている場合、暗号化前後識別子鍵算出部６５は、前述の式（６）を用いて、まず検索鍵情報F3(k_s;W)を生成する。そして、暗号化前後識別子鍵算出部６５は、生成した検索鍵情報F3(k_s;W)と、前後識別子鍵算出部６４により算出された前後識別子鍵情報F2(k_d;D)とを式（７）に適用し、暗号化前後識別子鍵情報Enc(F3(k_s;W);F2(k_d;D))を算出すればよい。また、鍵情報として１つの鍵Kが入力されている場合、暗号化前後識別子鍵算出部６５は、検索鍵情報生成鍵の生成用にあらかじめ定められたデータを、入力された鍵Kを用いて暗号化することにより、検索鍵情報生成鍵k_sを生成してもよい。その後、暗号化前後識別子鍵算出部６５は、式（６）および（７）を用いて、暗号化前後識別子鍵情報を算出すればよい。
【０１１８】
追加要求送信部６６は、入力部６１に入力された追加識別子と、算出された暗号化キーワード情報、始点鍵情報、前後識別子鍵情報および暗号化前後識別子鍵情報とを、追加要求として追加装置３０に送信する。
【０１１９】
次に、削除装置４０および削除依頼装置７０の機能ブロックを図９に示す。
図９において、削除装置４０は、削除要求受信部４１と、前後識別子抽出部４２と、暗号化検索結果配列削除部４３とを備える。ここで、削除装置４０が上述のサーバ１００によって構成される場合、各機能ブロックは次のように構成される。削除要求受信部４１は、ネットワークインタフェース１００５と、ＲＯＭ１００３および記憶装置１００４に記憶されたコンピュータ・プログラムおよび各種データをＲＡＭ１００２に読み込んで実行するＣＰＵ１００１とによって構成される。また、前後識別子抽出部４２および暗号化検索結果配列削除部４３は、ＲＯＭ１００３および記憶装置１００４に記憶されたコンピュータ・プログラムおよび各種データをＲＡＭ１００２に読み込んで実行するＣＰＵ１００１によって構成される。なお、削除装置４０の各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【０１２０】
削除要求受信部４１は、削除識別子と、前後識別子鍵情報とを削除要求として受信する。削除識別子とは、削除される対象データのデータ識別子を表す。具体的には、削除要求受信部４１は、このような削除要求を、後述の削除依頼装置７０から受信する。
【０１２１】
前後識別子抽出部４２は、検索補助データ格納装置１０の暗号化検索結果配列格納部１２を参照し、削除識別子の前識別子および後識別子を取得する。具体的には、前後識別子抽出部４２は、暗号化検索結果配列格納部１２において、削除識別子に対応付けられて格納されている暗号化前後識別子情報を取得する。そして、前後識別子抽出部４２は、取得した暗号化前後識別子情報を、受信された前後識別子鍵情報を用いて復号することにより、削除識別子の前識別子および後識別子を取得する。
【０１２２】
例えば、暗号化検索結果配列格納部１２が、データ識別子Dに対して、式（５）に示した暗号化前後識別子情報と、式（７）に示した暗号化前後識別子鍵情報とを対応付けて格納しているとする。このとき、削除要求として、削除識別子D_delと、前後識別子鍵情報F2(k_d;D_del)とが受信されたとする。この場合、前後識別子抽出部４２は、次の手順g1〜g2により、削除識別子の前識別子および後識別子を取得する。
g1：暗号化検索結果配列格納部１２において、削除識別子D_delに対応する暗号化前後識別子情報Y=F2(k_d;D_del)◎(D_p||D_a)を取得する。
g2：Yおよび前後識別子鍵情報F2(k_d;D_del)の排他的論理和F2(k_d;D_del)◎Yを計算する。ここで、排他的論理和の性質により、F2(k_d;D_del)◎Y＝F2(k_d;D_del)◎F2(k_d;D_del)◎(D_p||D_a)＝D_p||D_aとなり、前識別子D_pおよび後識別子D_aが得られる。
【０１２３】
暗号化検索結果配列削除部４３は、暗号化検索結果配列格納部１２において、削除識別子に対応付けられた情報を削除する。また、暗号化検索結果配列削除部４３は、暗号化検索結果配列格納部１２において、削除識別子の前識別子に対応付けられていた暗号化前後識別子情報において、後識別子の情報を更新する。また、暗号化検索結果配列削除部４３は、暗号化検索結果配列格納部１２において、削除識別子の後識別子に対応付けられていた暗号化前後識別子情報において、前識別子の情報を更新する。具体的には、暗号化検索結果配列削除部４３は、削除識別子の前識別子に対応付けられた暗号化前後識別子情報に、削除識別子および削除識別子の後識別子を組み合わせることにより、該暗号化前後識別子情報が後識別子として削除識別子の後識別子を示すよう更新する。また、暗号化検索結果配列削除部４３は、削除識別子の後識別子に対応付けられた暗号化前後識別子情報に、削除識別子および削除識別子の前識別子を組み合わせることにより、該暗号化前後識別子情報が前識別子として削除識別子の前識別子を示すよう更新する。
【０１２４】
例えば、暗号化検索結果配列格納部１２が、データ識別子Dに対して、式（５）に示した暗号化前後識別子情報と、式（７）に示した暗号化前後識別子鍵情報とを対応付けて格納しているとする。このとき、削除要求として、削除識別子D_delと、前後識別子鍵情報F2(k_d;D_del)とが受信されたとする。この場合、暗号化検索結果配列削除部４３は、次の手順h1〜h7により、暗号化検索結果配列格納部１２を更新する。
h1：暗号化検索結果配列格納部１２において、削除識別子D_delの行を削除する。
h2：暗号化検索結果配列格納部１２において、削除識別子の前識別子D_pに対応付けられた暗号化前後識別子情報F2(k_d;D_p)◎(D_pp||D_del)を得る。
h3：手順h2で得られた暗号化前後識別子F2(k_d;D_p)◎(D_pp||D_del)に、削除識別子を後識別子として表す情報(0^L ||D_del)と、削除識別子の後識別子を後識別子として表す情報(0^L||D_a)とを排他的に加算する。これにより、削除識別子の前識別子D_pに対応する新たな暗号化前後識別子情報F2(k_d;D_p)◎(D_pp||D_a)が算出される。
h4：暗号化検索結果配列格納部１２において、削除識別子の前識別子D_pに対応づけられた暗号化前後識別子情報を、手順h3で算出された値に更新する。
h5：暗号化検索結果配列格納部１２において、削除識別子の後識別子D_aに対応付けられた暗号化前後識別子情報F2(k_d;D_a)◎(D_del||D_aa)を得る。
h6：手順h5で得られた暗号化前後識別子F2(k_d;D_a)◎(D_del||D_aa)に、削除識別子を前識別子として表す情報(D_del||0^L)と、削除識別子の前識別子を前識別子として表す情報(D_p||0^L)とを排他的に加算する。これにより、削除識別子の後識別子D_aに対応する新たな暗号化前後識別子情報F2(k_d;D_a)◎(D_p||D_aa)が算出される。
h7：暗号化検索結果配列格納部１２において、削除識別子の後識別子D_aに対応づけられた暗号化前後識別子情報を、手順h6で算出された値に更新する。
【０１２５】
また、図９において、削除依頼装置７０は、入力部７１と、前後識別子鍵算出部７２と、削除要求送信部７３とを備える。ここで、削除依頼装置７０が上述の端末２００によって構成される場合、各機能ブロックは次のように構成される。入力部７１は、入力装置２００６と、ＲＯＭ２００３および記憶装置２００４に記憶されたコンピュータ・プログラムおよび各種データをＲＡＭ２００２に読み込んで実行するＣＰＵ２００１とによって構成される。また、前後識別子鍵算出部７２は、ＲＯＭ２００３および記憶装置２００４に記憶されたコンピュータ・プログラムおよび各種データをＲＡＭ２００２に読み込んで実行するＣＰＵ２００１によって構成される。また、削除要求送信部７３は、ネットワークインタフェース２００５と、ＲＯＭ２００３および記憶装置２００４に記憶されたコンピュータ・プログラムおよび各種データをＲＡＭ２００２に読み込んで実行するＣＰＵ２００１とによって構成される。なお、削除依頼装置７０の各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【０１２６】
入力部７１は、削除識別子および鍵情報を入力情報として取得する。削除識別子は、削除される対象データのデータ識別子である。また、鍵情報は、後述の削除要求を生成するための情報である。例えば、入力部７１は、鍵情報として、前述の前後識別子鍵情報生成鍵k_dを取得してもよい。また、例えば、入力部７１は、鍵情報として、前後識別子鍵情報生成鍵k_dを生成可能な鍵Kを取得してもよい。
【０１２７】
前後識別子鍵算出部７２は、入力部７１に入力された削除識別子および鍵情報に基づいて、前後識別子鍵情報を算出する。前後識別子鍵算出部７２の具体的な構成例については、追加依頼装置６０の前後識別子鍵算出部６４の具体的構成例の説明において追加識別子を削除識別子と読み替えることにより説明されるため、詳細な説明を省略する。
【０１２８】
削除要求送信部７３は、入力部７１に入力された削除識別子と、前後識別子鍵算出部７２によって算出された前後識別子鍵情報とを、削除要求として削除装置４０に送信する。
【０１２９】
以上のように構成されたデータ検索システム１の動作について、図面を参照して説明する。なお、以下の動作の説明において、検索補助データ格納装置１０には、図５および図６に示した暗号化始点配列および暗号化検索結果配列が格納されているものとする。
【０１３０】
まず、検索依頼装置５０の検索依頼動作を、図１０に示す。
【０１３１】
図１０において、まず、検索依頼装置５０の入力部５１は、キーワードおよび鍵情報を入力情報として取得する（ステップＡ１）。ここでは、キーワードとしてw_1、鍵情報としてKが取得されたものとする。
【０１３２】
次に、暗号化キーワード算出部５２は、ステップＡ１で取得されたキーワードおよび鍵情報に基づいて、暗号化キーワード情報を算出する（ステップＡ２）。
【０１３３】
例えば、前述のように、暗号化キーワード算出部５２は、キーワード鍵情報の生成用にあらかじめ定められた所定の値を、入力された鍵情報Kを用いて暗号化することにより、キーワード鍵情報k_pを生成してもよい。そして、暗号化キーワード算出部５２は、生成したキーワード鍵情報k_pおよび入力されたキーワードw_1を式（１）に適用することにより、暗号化キーワード情報P(k_p;w_1)を算出したものとする。
【０１３４】
次に、始点鍵算出部５３は、ステップＡ１で取得されたキーワードおよび鍵情報に基づいて、始点鍵情報を算出する（ステップＡ３）。
【０１３５】
例えば、前述のように、始点鍵算出部５３は、始点鍵情報生成鍵の生成用にあらかじめ定められた所定の値を、入力された鍵情報Kを用いて暗号化することにより、始点鍵情報生成鍵k_eを生成してもよい。そして、始点鍵算出部５３は、生成した始点鍵情報生成鍵k_eおよび入力されたキーワードw_1を式（２）に適用することにより、始点鍵情報F1(k_e;w_1)を算出する。
【０１３６】
次に、検索鍵算出部５４は、ステップＡ１で取得されたキーワードおよび鍵情報に基づいて、検索鍵情報を算出する（ステップＡ４）。
【０１３７】
例えば、前述のように、検索鍵算出部５４は、検索鍵情報生成鍵の生成用にあらかじめ定められた所定の値を、入力された鍵情報Kを用いて暗号化することにより、検索鍵情報生成鍵k_sを生成してもよい。そして、検索鍵算出部５４は、生成した検索鍵情報生成鍵k_sおよび入力されたキーワードw_1を式（６）に適用することにより、検索鍵情報F3(k_s;w_1)を算出する。
【０１３８】
次に、検索要求送信部５５は、ステップＡ２〜Ａ４でそれぞれ算出された暗号化キーワード情報と、始点鍵情報と、検索鍵情報とを、検索要求として検索装置２０に送信する（ステップＡ５）。
【０１３９】
以上で、検索依頼装置５０は、検索依頼動作を終了する。
【０１４０】
次に、検索装置２０の検索動作を、図１１に示す。
【０１４１】
図１１において、まず、検索装置２０の検索要求受信部２１は、検索依頼装置５０から、検索要求を受信する（ステップＡ６）。
【０１４２】
ここでは、前述の暗号化キーワード情報P(k_p;w_1)と、始点鍵情報F1(k_e;w_1)と、検索鍵情報F3(k_s;w_1)とが受信されたものとする。
【０１４３】
次に、始点復号部２２は、暗号化始点配列格納部１１において、ステップＡ６で受信された暗号化キーワード情報に対応付けて格納されている暗号化始点情報を、ステップＡ６で受信された始点鍵情報を用いて復号することにより始点のデータ識別子を得る。そして、始点復号部２２は、始点のデータ識別子を検索結果に加える（ステップＡ７）。
【０１４４】
例えば、ここでは、始点復号部２２は、図５の暗号化始点配列において、暗号化キーワード情報P(k_p;w_1)および始点鍵情報F1(k_e;w_1)を用いて、前述の手順a1〜a3を実行することにより、始点D_1を得て検索結果に加える。
【０１４５】
次に、検索結果抽出部２３は、暗号化検索結果配列格納部１２において、検索結果に加えられたデータ識別子に対応付けて格納された暗号化前後識別子情報および暗号化前後識別子鍵情報を取得する（ステップＡ８）。
【０１４６】
次に、検索結果抽出部２３は、取得した暗号化前後識別子鍵情報を、ステップＡ６で受信された検索鍵情報を用いて復号し、前後識別子鍵情報を得る（ステップＡ９）。
【０１４７】
次に、検索結果抽出部２３は、復号した前後識別子鍵情報を用いて、暗号化前後識別子情報を復号することにより、該当するデータ識別子の１つ後のデータ識別子を得る（Ａ１０）。
【０１４８】
例えば、ステップＡ８〜Ａ１０において、検索結果抽出部２３は、図６の暗号化検索結果配列において、始点D_1について前述の手順b1〜b3を実行することにより、後識別子D_2を得る。
【０１４９】
次に、検索結果抽出部２３は、ステップＡ１０で後識別子が得られていれば（ステップＡ１１でＹｅｓ）、後識別子を検索結果に加えて（ステップＡ１２）、ステップＡ８からの処理を繰り返す。
【０１５０】
ここでは、検索結果抽出部２３は、後識別子D_2を検索結果に加え、ステップＡ８からの処理を繰り返す。そして、検索結果抽出部２３は、ステップＡ１０で、次の後識別子としてD_3を得る。そこで、検索結果抽出部２３は、後識別子D_3を検索結果に加え、再度、ステップＡ８からの処理を繰り返す。
【０１５１】
一方、ステップＡ１０で後識別子が得られていない場合（ステップＡ１１でＮｏ）、検索結果出力部２４は、検索結果を出力し、動作を終了する。
【０１５２】
ここでは、検索結果にD_3が加えられた後でのステップＡ８からの処理では、図６の暗号化検索結果配列において、検索結果抽出部２３は、後識別子として０を求めることになる。すなわち、ステップＡ１０で後識別子が得られなかったため、検索結果出力部２４は、検索結果として、{D_1,D_2,D_3}を出力する。
【０１５３】
なお、検索結果出力部２４は、検索結果を、ネットワークインタフェース１００５を介して検索依頼装置５０等の他の装置に送信してもよい。また、検索結果出力部２４は、検索結果を、記憶装置１００４に出力してもよいし、表示装置（図示せず）等の出力装置に出力してもよい。
【０１５４】
以上で、検索装置２０は、検索動作を終了する。
【０１５５】
次に、追加依頼装置６０の追加依頼動作を、図１２に示す。
【０１５６】
図１２において、まず、追加依頼装置６０の入力部６１は、追加識別子、キーワードおよび鍵情報を入力情報として取得する（ステップＢ１）。ここでは、追加識別子としてD_0、キーワードとしてw_1、鍵情報としてKが取得されたものとする。
【０１５７】
次に、暗号化キーワード算出部６２は、ステップＢ１で取得されたキーワードおよび鍵情報に基づいて、暗号化キーワード情報を算出する（ステップＢ２）。
【０１５８】
例えば、前述のように、暗号化キーワード算出部６２は、キーワード鍵情報の生成用にあらかじめ定められた所定の値を、入力された鍵情報Kを用いて暗号化することにより、キーワード鍵情報k_pを生成してもよい。そして、暗号化キーワード算出部６２は、生成したキーワード鍵情報k_pおよび入力されたキーワードw_1を式（１）に適用することにより、暗号化キーワード情報P(k_p;w_1)を算出したものとする。
【０１５９】
次に、始点鍵算出部６３は、ステップＢ１で取得されたキーワードおよび鍵情報に基づいて、始点鍵情報を算出する（ステップＢ３）。
【０１６０】
例えば、前述のように、始点鍵算出部６３は、始点鍵情報生成鍵の生成用にあらかじめ定められた所定の値を、入力された鍵情報Kを用いて暗号化することにより、始点鍵情報生成鍵k_eを生成してもよい。そして、始点鍵算出部６３は、生成した始点鍵情報生成鍵k_eおよび入力されたキーワードw_1を式（２）に適用することにより、始点鍵情報F1(k_e;w_1)を算出する。
【０１６１】
次に、前後識別子鍵算出部６４は、ステップＢ１で取得された追加識別子および鍵情報に基づいて、前後識別子鍵情報を算出する（ステップＢ４）。
【０１６２】
例えば、前述のように、前後識別子鍵算出部６４は、前後識別子鍵情報生成鍵の生成用にあらかじめ定められた所定の値を、入力された鍵情報Kを用いて暗号化することにより、前後識別子鍵情報生成鍵k_dを生成してもよい。そして、前後識別子鍵算出部６４は、生成した前後識別子鍵情報生成鍵k_dおよび入力された追加識別子D_0を式（４）に適用することにより、前後識別子鍵情報F2(k_d,D_0)を算出する。
【０１６３】
次に、暗号化前後識別子鍵算出部６５は、ステップＢ１で取得されたキーワードおよび鍵情報と、ステップＢ４で算出された前後識別子鍵情報とを用いて、暗号化前後識別子鍵情報を算出する（ステップＢ５）。
【０１６４】
例えば、前述のように、前後識別子鍵算出部６４は、検索鍵情報生成鍵の生成用にあらかじめ定められた所定の値を、入力された鍵情報Kを用いて暗号化することにより、検索鍵情報生成鍵k_sを生成してもよい。この場合、前後識別子鍵算出部６４は、生成した検索鍵情報生成鍵k_sおよび入力されたキーワードw_1を式（６）に適用することにより、検索鍵情報F3(k_s;w_1)を生成する。そして、前後識別子鍵算出部６４は、生成した検索鍵情報F3(k_s;w_1)と、ステップＢ４で算出された前後識別子鍵情報F2(k_d,D_0)とを式（７）に適用することにより、暗号化前後識別子鍵情報Enc(F3(k_s;w_1);F2(k_d;D_0))を算出する。
【０１６５】
次に、追加要求送信部６６は、ステップＢ１で入力された追加識別子と、ステップＢ２〜Ｂ５でそれぞれ算出された暗号化キーワード情報と、始点鍵情報と、前後識別子鍵情報と、暗号化前後識別子鍵情報とを、追加要求として追加装置３０に送信する（ステップＢ６）。
【０１６６】
以上で、追加依頼装置６０は、追加依頼動作を終了する。
【０１６７】
次に、追加装置３０の追加動作を、図１３に示す。
【０１６８】
図１３において、追加要求受信部３１は、追加依頼装置６０から追加要求を受信する（ステップＢ７）。
【０１６９】
ここでは、追加識別子D_0と、暗号化キーワード情報P(k_p;w_1)と、始点鍵情報F1(k_e;w_1)と、前後識別子鍵情報F2(k_d,D_0)と、暗号化前後識別子鍵情報Enc(F3(k_s;w_1);F2(k_d;D_0))とが受信されたものとする。
【０１７０】
次に、始点抽出部３２は、検索補助データ格納装置１０の暗号化始点配列格納部１１を参照し、ステップＢ７で受信された暗号化キーワード情報に対応付けて格納された暗号化始点情報を、ステップＢ７で受信された始点鍵情報を用いて復号する。これにより、始点抽出部３２は、更新前始点識別子を取得する（ステップＢ８）。
【０１７１】
ここでは、始点抽出部３２は、図５の暗号化始点配列において、暗号化キーワード情報P(k_p;w_1)および始点鍵情報F1(k_e;w_1)を用いて上述の手順a1〜a2を実行することにより、更新前始点識別子D_1を得る。
【０１７２】
次に、暗号化始点配列更新部３３は、ステップＢ７で受信された追加識別子および始点鍵情報を組み合わせて暗号化した暗号化始点情報を算出する。そして、暗号化始点配列更新部３３は、暗号化始点配列格納部１１において、ステップＢ７で受信された暗号化キーワード情報に対応付けられた暗号化始点情報を、算出した値に更新する（ステップＢ９）。
【０１７３】
ここでは、始点抽出部３２は、図５の暗号化始点配列において、暗号化キーワード情報P(k_p;w_1)について、追加識別子D_0および始点鍵情報F1(k_e;w_1)を用いて前述の手順c1〜c2を実行する。これにより、図１４に示すように暗号化始点配列が更新され、暗号化キーワード情報P(k_p;w_1)には、F1(k_e;w_1)◎D_0が対応付けられて格納される。
【０１７４】
次に、暗号化検索結果配列追加部３４は、暗号化検索結果配列格納部１２において、ステップＢ８で得られた更新前始点識別子に対応付けられている暗号化前後識別子情報を更新する。具体的には、暗号化検索結果配列追加部３４は、該暗号化前後識別子情報を、該暗号化前後識別子情報に追加識別子を前識別子として組み合わせた情報に更新する（ステップＢ１０）。
【０１７５】
ここでは、暗号化検索結果配列追加部３４は、図６の暗号化検索結果配列において、更新前始点識別子D_1について、追加識別子D_0を用いて前述の手順e1〜e3を実行する。これにより、図６の暗号化検索結果配列において更新前始点識別子D_1に対応付けられていた暗号化前後識別子情報F2(k_d;D_1)◎(0^L||D_2)は、図１５に示すようにF2(k_d;D_1)◎(D_0||D_2)に更新される。
【０１７６】
次に、暗号化検索結果配列追加部３４は、暗号化検索結果配列格納部１２に、追加識別子と、追加識別子に対応する暗号化前後識別子情報と、ステップＢ７で受信された暗号化前後識別子鍵情報とを対応付けた情報を追加する（ステップＢ１１）。詳細には、暗号化検索結果配列追加部３４は、追加識別子に対応する暗号化前後識別子情報として、ステップＢ７で受信された前後識別子鍵情報に、ステップＢ８で得られた更新前始点識別子を後識別子として組み合わせた情報を算出する。
【０１７７】
ここでは、暗号化検索結果配列追加部３４は、図６の暗号化検索結果配列において、ステップＢ７で受信された前後識別子鍵情報F2(k_d,D_0)および追加識別子D_0を用いて、前述の手順e4〜e5を実行する。これにより、図１５に示すように暗号化検索結果配列が更新され、追加識別子D_0と、暗号化前後識別子情報F2(k_d;D_0)◎(0^L||D_1)と、暗号化前後識別子鍵情報Enc(F3(k_s;w_1);F2(k_d;D_0))とが、対応付けて格納される。
【０１７８】
なお、追加装置３０は、追加処理の結果を、ネットワークインタフェース１００５を介して追加依頼装置６０等の他の装置に送信してもよい。また、追加装置３０は、追加処理の結果を、記憶装置１００４に出力してもよいし、表示装置（図示せず）等の出力装置に出力してもよい。
【０１７９】
以上で、追加装置３０は、追加動作を終了する。
【０１８０】
次に、削除依頼装置７０の追加依頼動作を、図１６に示す。
【０１８１】
図１６において、まず、削除依頼装置７０の入力部７１は、削除識別子および鍵情報を入力情報として取得する（ステップＣ１）。ここでは、削除識別子としてD_2、鍵情報としてKが取得されたものとする。
【０１８２】
次に、前後識別子鍵算出部７２は、ステップＣ１で取得された削除識別子および鍵情報に基づいて、前後識別子鍵情報を算出する（ステップＣ２）。
【０１８３】
例えば、前述のように、前後識別子鍵算出部７２は、前後識別子鍵情報生成鍵の生成用にあらかじめ定められた所定の値を、入力された鍵情報Kを用いて暗号化することにより、前後識別子鍵情報生成鍵k_dを生成してもよい。そして、前後識別子鍵算出部７２は、生成した前後識別子鍵情報生成鍵k_dおよび入力された削除識別子D_2を式（４）に適用することにより、前後識別子鍵情報F2(k_d;D_2)を算出したものとする。
【０１８４】
次に、削除要求送信部７３は、ステップＣ１で入力された削除識別子と、ステップＣ２で算出された前後識別子鍵情報とを、削除要求として削除装置４０に送信する（ステップＣ３）。
【０１８５】
以上で、削除依頼装置７０は、削除依頼動作を終了する。
【０１８６】
次に、削除装置４０の削除動作を、図１７に示す。
【０１８７】
図１７において、まず、削除要求受信部４１は、削除依頼装置７０から削除要求を受信する（ステップＣ４）。
【０１８８】
ここでは、削除要求として、削除識別子D_2と、前後識別子鍵情報F2(k_d;D_2)とが受信されたものとする。
【０１８９】
次に、前後識別子抽出部４２は、暗号化検索結果配列格納部１２において、削除識別子に対応付けられて格納されている暗号化前後識別子情報を、前後識別子鍵情報を用いて復号し、削除識別子の前識別子および後識別子を取得する（ステップＣ５）。
【０１９０】
ここでは、前後識別子抽出部４２は、図１５の暗号化検索結果配列において、削除識別子D_2について、前後識別子鍵情報F2(k_d;D_2)を用いて前述の手順g1〜g2を実行する。これにより、削除識別子D_2の前識別子D_1および後識別子D_3が得られる。
【０１９１】
次に、暗号化検索結果配列削除部４３は、暗号化検索結果配列格納部１２において、削除識別子に対応付けられた情報を削除する（ステップＣ６）。
【０１９２】
ここでは、暗号化検索結果配列削除部４３は、図１５の暗号化検索結果配列において、前述の手順h1を実行する。これにより、図１８に示すように暗号化検索結果配列が更新され、削除識別子D_2の行が削除される。
【０１９３】
次に、暗号化検索結果配列削除部４３は、暗号化検索結果配列格納部１２において、削除識別子の前識別子に対応付けられた暗号化前後識別子情報に、削除識別子および削除識別子の後識別子を組み合わせて更新する（ステップＣ７）。これにより、削除識別子の前識別子に対応付けられた暗号化前後識別子情報は、後識別子として削除識別子の後識別子を示すようになる。
【０１９４】
ここでは、暗号化検索結果配列削除部４３は、図１５の暗号化検索結果配列において、前識別子D_1について、削除識別子D_2および後識別子D_3を用いて前述の手順h2〜h4を実行する。これにより、図１８に示すように暗号化検索結果配列が更新され、前識別子D_1に対応する暗号化前後識別子情報は、F2(k_d;D_1)◎(D_0||D_3)となった。
【０１９５】
次に、暗号化検索結果配列削除部４３は、暗号化検索結果配列格納部１２において、削除識別子の後識別子に対応付けられた暗号化前後識別子情報に、削除識別子および削除識別子の前識別子を組み合わせて更新する（ステップＣ８）。これにより、削除識別子の後識別子に対応付けられた暗号化前後識別子情報は、前識別子として削除識別子の前識別子を示すようになる。
【０１９６】
ここでは、暗号化検索結果配列削除部４３は、図１５の暗号化検索結果配列において、後識別子D_3について、削除識別子D_2および前識別子D_1を用いて前述の手順h5〜h7を実行する。これにより、図１８に示すように暗号化検索結果配列が更新され、後識別子D_3に対応する暗号化前後識別子情報は、F2(k_d;D_3)◎(D_1||0^L)となった。
【０１９７】
なお、削除装置４０は、削除処理の結果を、ネットワークインタフェース１００５を介して削除依頼装置７０等の他の装置に送信してもよい。また、削除装置４０は、削除処理の結果を、記憶装置１００４に出力してもよいし、表示装置（図示せず）等の出力装置に出力してもよい。
【０１９８】
以上で、削除装置４０は、削除動作を終了する。
【０１９９】
以上、データ検索システム１が、検索補助データ格納装置１０を用いて完全一致検索、対象データ追加、対象データ削除を行う動作について説明した。なお、本実施の形態において、データ検索システム１は、対象データの更新について、更新前の対象データを削除する動作を実行してから、更新後の対象データを追加する動作を実行することで実現可能である。
【０２００】
次に、本発明の実施の形態の効果について述べる。
【０２０１】
本発明の実施の形態としてのデータ検索システムは、暗号化された対象データに対する完全一致検索処理において用いられる暗号化された検索補助データの記憶容量を削減することができる。
【０２０２】
その理由について述べる。本実施の形態では、検索補助データ格納装置において、暗号化始点配列格納部が、暗号化キーワード情報と暗号化始点情報とを対応付けた暗号化始点配列を格納するからである。ここで、暗号化キーワード情報は、対象データ群に対する完全一致検索に用いられうる各キーワードをキーワード鍵情報により暗号化した情報である。また、暗号化始点情報は、対象データ群のうち該キーワードに完全一致する検索結果リストにおける始点のデータ識別子に始点鍵情報を組み合わせて暗号化した情報である。また、暗号化検索結果配列格納部が、検索結果リストにおける各データ識別子と、暗号化前後識別子情報と、暗号化前後識別子鍵情報とを対応付けた暗号化検索結果配列を格納するからである。ここで、暗号化前後識別子情報は、検索結果リストにおいて該データ識別子の１つ前のデータ識別子（前識別子）および１つ後のデータ識別子（後識別子）に対して前後識別子鍵情報を組み合わせて暗号化した情報である。また、暗号化前後識別子鍵情報は、前後識別子鍵情報を検索鍵情報により暗号化した情報である。
【０２０３】
このように、本実施の形態は、対象データ毎に記憶が必要な情報としては、暗号化検索結果配列に、データ識別子、暗号化前後識別子（暗号化された前識別子および暗号化された後識別子）、暗号化前後識別子鍵情報を記憶するだけでよい。一方、非特許文献１に記載されたＤＳＳＥを完全一致検索に適用する場合、対象データ毎に記憶が必要な情報には次のものがある。まず、暗号化検索結果配列には、対象データ毎に、式（１０）に示した番地、暗号化されたデータ識別子、暗号化された次の番地、および、nonceの記憶が必要である。また、暗号化削除配列には、対象データ毎に、番地と、式（１３）に示した暗号化された前番地、中番地、および、後番地の記憶が必要である。
【０２０４】
ここで、説明を簡単にするため、番地とデータ識別子とを表すためにそれぞれ必要な記憶容量は同程度であるとする。また、情報が暗号化される前と後とでそれぞれ必要な記憶容量は同程度であるとする。すると、ＤＳＳＥでは、対象データ毎に記憶が必要な情報は、番地、暗号化されたデータ識別子、暗号化された次の番地、番地、暗号化された前番地、暗号化された中番地、および、暗号化された後番地の７個である。これに対して、本実施の形態では、対象データ毎に記憶が必要な情報は、データ識別子、暗号化された前識別子、暗号化された後識別子、および、暗号化された前後識別子鍵情報の４個である。したがって、本実施の形態は、非特許文献１に記載されたＤＳＳＥを完全一致検索に適用する場合と比較して、検索補助データの記憶容量を大幅に削減することができる。
【０２０５】
また、本実施の形態は、より少ない容量の暗号化された検索補助データを用いて、情報を漏えいさせることなく、対象データに対する完全一致検索を行うことができる。
【０２０６】
その理由について述べる。本実施の形態では、上述の検索補助データ格納装置を用いた検索装置において、検索要求受信部が、検索依頼装置から、暗号化キーワード情報と、始点鍵情報と、検索鍵情報とを検索要求として受信する。そして、始点復号部が、暗号化始点配列格納部において、受信された暗号化キーワード情報に対応付けて格納されている暗号化始点情報を、受信された始点鍵情報を用いて復号する。このようにして、始点復号部が、検索結果リストにおいて始点となるデータ識別子を得て検索結果に加えるからである。そして、検索結果抽出部が、暗号化検索結果配列格納部において、検索結果に加えられたデータ識別子に対応付けて格納された暗号化前後識別子情報および暗号化前後識別子鍵情報を取得する。そして、検索結果抽出部が、暗号化前後識別子鍵情報を、受信された検索鍵情報を用いて復号して前後識別子鍵情報を得る。そして、検索結果抽出部が、得られた前後識別子鍵情報を用いて、暗号化前後識別子情報を復号する。このようにして、検索結果抽出部が、該データ識別子の１つ後のデータ識別子を得て検索結果に加える処理を繰り返すからである。そして、検索結果出力部が、検索結果抽出部により１つ後のデータ識別子が得られなくなると、検索結果を出力するからである。
【０２０７】
また、本実施の形態は、対象データに対する完全一致検索を行うためのより少ない容量の暗号化された検索補助データに対して、情報を漏えいさせることなく、対象データを追加することができる。
【０２０８】
その理由について述べる。本実施の形態では、上述の検索補助データ格納装置を用いた追加装置において、追加要求受信部が、追加識別子と、暗号化キーワード情報と、始点鍵情報と、前後識別子鍵情報と、暗号化前後識別子鍵情報とを追加要求として受信する。そして、始点抽出部が、暗号化始点配列格納部において、受信された暗号化キーワード情報に対応付けて格納された暗号化始点情報を、受信された始点鍵情報を用いて復号する。このようにして、始点抽出部が、更新前始点識別子を取得するからである。そして、暗号化始点配列更新部が、暗号化始点配列格納部において、受信された暗号化キーワード情報に対応付けられた暗号化始点情報を、追加識別子に始点鍵情報を組み合わせて暗号化した暗号化始点情報に更新するからである。そして、暗号化検索結果配列追加部が、暗号化検索結果配列格納部において、更新前始点識別子に対応付けられて格納されている暗号化前後識別子情報を、該暗号化前後識別子情報に追加識別子を前識別子として組み合わせた情報に更新するからである。さらに、暗号化検索結果配列追加部が、受信された前後識別鍵情報に更新前始点識別子を後識別子として組み合わせて、追加識別子に対する暗号化前後識別子情報を生成する。そして、暗号化検索結果配列追加部が、暗号化検索結果配列格納部において、追加識別子と、生成した暗号化前後識別子情報と、受信された暗号化前後識別子鍵情報とを対応付けた情報を追加するからである。
【０２０９】
また、本実施の形態は、対象データに対する完全一致検索を行うためのより少ない容量の暗号化された検索補助データから、情報を漏えいさせることなく、対象データを削除することができる。
【０２１０】
その理由について述べる。本実施の形態では、上述の検索補助データ格納装置を用いた削除装置において、削除要求受信部が、削除識別子と、前後識別子鍵情報とを削除要求として受信する。そして、前後識別子抽出部が、暗号化検索結果配列格納部において、削除識別子に対応付けられて格納されている暗号化前後識別子情報を、前後識別子鍵情報を用いて復号する。このようにして、前後識別子抽出部が、削除識別子の前識別子および後識別子を取得するからである。そして、暗号化検索結果配列削除部が、暗号化検索結果配列格納部において、削除識別子に対応付けられた情報を削除する。そして、暗号化検索結果配列削除部が、暗号化検索結果配列格納部において、削除識別子の前識別子に対応付けられた暗号化前後識別子情報に、削除識別子および削除識別子の後識別子を組み合わせる。これにより、削除識別子の前識別子に対応付けられた暗号化前後識別子情報が、後識別子として削除識別子の後識別子を示すよう更新されるからである。さらに、暗号化検索結果配列削除部が、暗号化検索結果配列格納部において、削除識別子の後識別子に対応付けられた暗号化前後識別子情報に、削除識別子および削除識別子の前識別子を組み合わせる。これにより、削除識別子の後識別子に対応付けられた暗号化前後識別子情報が、前識別子として削除識別子の前識別子を示すよう更新されるからである。
【０２１１】
このように、本実施の形態は、暗号化検索結果配列に前識別子の情報を含ませることで、削除配列を記憶する必要がなく、暗号化始点配列および暗号化検索結果配列を用いて、対象データの検索・追加・削除を行うことができる。その結果、本実施の形態は、検索補助データの記憶容量を大幅に削減している。
【０２１２】
このような本実施の形態では、鍵情報を有するユーザは、端末の検索依頼装置、追加依頼装置または削除依頼装置を介して、対象データの完全一致検索、追加、削除を、データベースサーバに要求することができる。なお、ユーザが有する鍵情報とは、キーワード鍵情報k_p、始点鍵情報生成鍵k_e、検索鍵情報生成鍵k_s、および、前後識別子鍵情報生成鍵k_dである。または、ユーザが有する鍵情報は、これらの鍵情報を生成可能な１つの鍵情報Kであればよい。そして、ユーザは、データベースサーバから、検索装置によって検索補助データ格納装置から抽出された検索結果を得ることができるとともに、データベースサーバにおける対象データの追加・削除等の管理を行うことができる。
【０２１３】
なお、本実施の形態において、検索補助データ格納装置における暗号化始点配列格納部が、式（１）によって算出される暗号化キーワード情報と、式（３）によって算出される暗号化始点情報とを格納する例を中心に説明した。これに限らず、暗号化キーワード情報は、キーワードをキーワード鍵情報により暗号化するその他の手法により算出された情報でもよい。また、暗号化始点情報は、始点のデータ識別子を始点鍵情報により暗号化するその他の手法により算出された情報であってもよい。
【０２１４】
また、本実施の形態において、検索補助データ格納装置における暗号化検索結果配列格納部が、式（５）によって算出される暗号化前後識別子情報と、式（７）によって算出される暗号化前後識別子鍵情報とを格納する例を中心に説明した。これに限らず、暗号化前後識別子情報は、前後識別子情報を前後識別子鍵情報により暗号化するその他の手法により算出された情報でもよい。また、暗号化前後識別子鍵情報は、前後識別子鍵情報を検索鍵情報により暗号化するその他の手法により算出された情報であってもよい。
【０２１５】
また、本実施の形態において、検索補助データ格納装置が、検索装置、追加装置、および、削除装置を実現するコンピュータ装置の記憶装置によって構成される例を中心に説明した。これに限らず、検索補助データ格納装置は、検索装置、追加装置、および、削除装置とは異なるコンピュータ装置によって構成されていてもよい。
【０２１６】
また、本実施の形態において、検索装置、検索依頼装置、追加装置、追加依頼装置、削除装置、および、削除依頼装置の各機能ブロックが、記憶装置またはＲＯＭに記憶されたコンピュータ・プログラムを実行するＣＰＵによって実現される例を中心に説明した。これに限らず、各機能ブロックの一部、全部、または、それらの組み合わせが専用のハードウェアにより実現されていてもよい。
【０２１７】
また、本実施の形態において、各フローチャートを参照して説明した各装置の動作を、本発明のコンピュータ・プログラムとしてコンピュータ装置の記憶装置（記憶媒体）に格納しておく。そして、係るコンピュータ・プログラムを当該ＣＰＵが読み出して実行するようにしてもよい。そして、このような場合において、本発明は、係るコンピュータ・プログラムのコードあるいは記憶媒体によって構成される。
【０２１８】
以上、上述した実施形態を模範的な例として本発明を説明した。しかしながら、本発明は、上述した実施形態には限定されない。即ち、本発明は、本発明のスコープ内において、当業者が理解し得る様々な態様を適用することができる。
【０２１９】
この出願は、２０１４年７月２日に出願された日本出願特願２０１４−１３７０２４を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【産業上の利用可能性】
【０２２０】
本発明は、暗号化された検索補助データの記憶容量を削減しながら、暗号化された対象データを格納するデータベースに対して、対象データに関する情報を漏えいさせることがなく、完全一致検索、対象データの追加・削除を行うことができる。したがって、本発明は、例えば、ネットーワークを介した外部サーバに機密情報を保管するシステム等として好適である。
【符号の説明】
【０２２１】
１    データ検索システム
１０    検索補助データ格納装置
１１    暗号化始点配列格納部
１２    暗号化検索結果配列格納部
２０    検索装置
２１    検索要求受信部
２２    始点復号部
２３    検索結果抽出部
２４    検索結果出力部
３０    追加装置
３１    追加要求受信部
３２    始点抽出部
３３    暗号化始点配列更新部
３４    暗号化検索結果配列追加部
４０    削除装置
４１    削除要求受信部
４２    前後識別子抽出部
４３    暗号化検索結果配列削除部
５０    検索依頼装置
５１    入力部
５２    暗号化キーワード算出部
５３    始点鍵算出部
５４    検索鍵算出部
５５    検索要求送信部
６０    追加依頼装置
６１    入力部
６２    暗号化キーワード算出部
６３    始点鍵算出部
６４    前後識別子鍵算出部
６５    暗号化前後識別子鍵算出部
６６    追加要求送信部
７０    削除依頼装置
７１    入力部
７２    前後識別子鍵算出部
７３    削除要求送信部
１００    サーバ
２００    端末
１００１、２００１    ＣＰＵ
１００２、２００２    ＲＡＭ
１００３、２００３    ＲＯＭ
１００４、２００４    記憶装置
１００５、２００５    ネットワークインタフェース
２００６    入力装置
２００７    出力装置
【図１】
0006493402.tif 000002
【図２】
0006493402.tif 000003
【図３】
0006493402.tif 000004
【図４】
0006493402.tif 000005
【図５】
0006493402.tif 000006
【図６】
0006493402.tif 000007
【図７】
0006493402.tif 000008
【図８】
0006493402.tif 000009
【図９】
0006493402.tif 000010
【図１０】
0006493402.tif 000011
【図１１】
0006493402.tif 000012
【図１２】
0006493402.tif 000013
【図１３】
0006493402.tif 000014
【図１４】
0006493402.tif 000015
【図１５】
0006493402.tif 000016
【図１６】
0006493402.tif 000017
【図１７】
0006493402.tif 000018
【図１８】
0006493402.tif 000019
【図１９】
0006493402.tif 000020
【図２０】
0006493402.tif 000021
【図２１】
0006493402.tif 000022
【図２２】
0006493402.tif 000023
【図２３】
0006493402.tif 000024
【図２４】
0006493402.tif 000025
【図２５】
0006493402.tif 000026