(57)【要約】  サーバ装置（３０１）において、データ保管部（３０３）は、複数の暗号化データを保管する。索引保管部（３０４）は、入力されるキーワードに対して一意の数値を出力する関数Ｈを用いて検索を行うためのデータ構造であり、関数Ｈから出力される数値に１対１で対応する複数の格納領域を有し、平文データに対応する複数のキーワードについて、それぞれのキーワードが入力されることで関数Ｈから出力された数値に対応する格納領域に、それぞれのキーワードが対応する平文データが暗号化された後のデータである暗号化データの識別子を格納するデータ構造を、索引Ｉとして保管する。検索部（３０５）は、複数のキーワードのいずれかを関数Ｈに入力し、関数Ｈから出力された数値に対応する格納領域を索引Ｉから特定し、特定した格納領域に格納された識別子に対応する暗号化データをデータ保管部（３０３）から取得する。
2016063344.tif 000002
【特許請求の範囲】
【請求項１】
複数の暗号化データを保管するデータ保管部と、
入力されるキーワードに対して一意の数値を出力する関数を用いて検索を行うためのデータ構造であり、前記関数から出力される数値に１対１で対応する複数の格納領域を有し、前記複数の暗号化データのいずれかが暗号化される前のデータである平文データに対応する複数のキーワードについて、それぞれのキーワードが入力されることで前記関数から出力された数値に対応する格納領域に、それぞれのキーワードが対応する平文データが暗号化された後のデータである暗号化データの識別子を格納するデータ構造を、索引として保管する索引保管部と、
前記複数のキーワードのいずれかを前記関数に入力し、前記関数から出力された数値に対応する格納領域を前記索引から特定し、特定した格納領域に格納された識別子に対応する暗号化データを前記データ保管部から取得する検索部と
を備えるサーバ装置。
【請求項２】
前記複数の暗号化データは、暗号鍵を保有する端末装置により前記暗号鍵を用いて複数の平文データが暗号化された後のデータである、請求項１に記載のサーバ装置。
【請求項３】
前記索引は、前記端末装置により生成されたデータ構造である、請求項２に記載のサーバ装置。
【請求項４】
前記関数は、索引鍵を保有する前記端末装置により前記索引鍵を用いて暗号化されたキーワードに対して一意の数値を出力する関数である、請求項２又は３に記載のサーバ装置。
【請求項５】
前記端末装置により前記索引鍵を用いて暗号化されたキーワードを前記端末装置から受信する通信部
をさらに備え、
前記検索部は、前記通信部により受信されたキーワードを前記関数に入力する、請求項４に記載のサーバ装置。
【請求項６】
前記通信部は、前記検索部により取得された暗号化データを前記端末装置に送信する、請求項５に記載のサーバ装置。
【請求項７】
前記端末装置により削除する暗号化データの識別子が指定された場合に、指定された識別子に対応する暗号化データを前記データ保管部から削除するとともに、指定された識別子が格納された格納領域を前記索引から特定し、特定した格納領域の内容を削除する索引更新部
をさらに備える、請求項２から６のいずれか１項に記載のサーバ装置。
【請求項８】
前記関数は、入力されるキーワードと数値との組み合わせに対して一意の数値を出力する関数であり、
前記索引は、共通のキーワードが対応する２つ以上の平文データについて、前記共通のキーワードとそれぞれの平文データを識別するための数値とが入力されることで前記関数から出力された数値に対応する格納領域に、それぞれの平文データが暗号化された後のデータである暗号化データの識別子を格納するデータ構造であり、
前記検索部は、前記複数のキーワードのいずれかとともに予め設定された範囲内の数値を１つずつ前記関数に入力し、前記関数から出力された数値に対応する格納領域が前記索引に存在する場合に、その存在する格納領域に格納された識別子に対応する暗号化データを前記データ保管部から取得する、請求項１から７のいずれか１項に記載のサーバ装置。
【請求項９】
請求項１から８のいずれか１項に記載のサーバ装置と、
暗号鍵を用いて複数の平文データを暗号化することで前記複数の暗号化データを生成する端末装置と
を備える検索システム。
【請求項１０】
暗号鍵を用いて複数の平文データを暗号化することで複数の暗号化データを生成するデータ暗号化部と、
入力されるキーワードに対して一意の数値を出力する関数を用いて検索を行うためのデータ構造であり、前記関数から出力される数値に１対１で対応する複数の格納領域を有し、前記複数の平文データのいずれかに対応する複数のキーワードについて、それぞれのキーワードが入力されることで前記関数から出力された数値に対応する格納領域に、それぞれのキーワードが対応する平文データが暗号化された後のデータである暗号化データの識別子を格納するデータ構造を、索引として生成する索引生成部と、
前記データ暗号化部により生成された複数の暗号化データと、前記索引生成部により生成された索引とをサーバ装置に送信する通信部と
を備える端末装置。
【請求項１１】
前記索引生成部は、前記複数のキーワードについて、索引鍵を用いてそれぞれのキーワードを暗号化し、暗号化したキーワードを前記関数に入力し、前記関数から出力された数値に対応する格納領域に、暗号化したキーワードが対応する平文データが暗号化された後のデータである暗号化データの識別子を格納するデータ構造を、前記索引として生成する、請求項１０に記載の端末装置。
【請求項１２】
前記索引鍵を用いてキーワードを暗号化するキーワード暗号化部
をさらに備え、
前記通信部は、前記キーワード暗号化部により暗号化されたキーワードを前記サーバ装置に送信する、請求項１１に記載の端末装置。
【請求項１３】
前記通信部は、前記複数の暗号化データのいずれかを前記サーバ装置から受信し、
前記暗号鍵に対応する復号鍵を用いて前記通信部により受信された暗号化データを復号するデータ復号部
をさらに備える、請求項１０から１２のいずれか１項に記載の端末装置。
【請求項１４】
前記関数は、入力されるキーワードと数値との組み合わせに対して一意の数値を出力する関数であり、
前記索引生成部は、共通のキーワードが対応する２つ以上の平文データについて、前記共通のキーワードとそれぞれの平文データを識別するための数値とを前記関数に入力し、前記関数から出力された数値に対応する格納領域に、それぞれの平文データが暗号化された後のデータである暗号化データの識別子を格納するデータ構造を、前記索引として生成する、請求項１０から１３のいずれか１項に記載の端末装置。
【請求項１５】
複数の暗号化データを保管するデータ保管部と、入力されるキーワードに対して一意の数値を出力する関数を用いて検索を行うためのデータ構造であり、前記関数から出力される数値に１対１で対応する複数の格納領域を有し、前記複数の暗号化データのいずれかが暗号化される前のデータである平文データに対応する複数のキーワードについて、それぞれのキーワードが入力されることで前記関数から出力された数値に対応する格納領域に、それぞれのキーワードが対応する平文データが暗号化された後のデータである暗号化データの識別子を格納するデータ構造を、索引として保管する索引保管部とを備えるサーバ装置が、前記複数のキーワードのいずれかを前記関数に入力し、前記関数から出力された数値に対応する格納領域を前記索引から特定し、特定した格納領域に格納された識別子に対応する暗号化データを前記データ保管部から取得する検索方法。
【請求項１６】
複数の暗号化データを保管するデータ保管部と、入力されるキーワードに対して一意の数値を出力する関数を用いて検索を行うためのデータ構造であり、前記関数から出力される数値に１対１で対応する複数の格納領域を有し、前記複数の暗号化データのいずれかが暗号化される前のデータである平文データに対応する複数のキーワードについて、それぞれのキーワードが入力されることで前記関数から出力された数値に対応する格納領域に、それぞれのキーワードが対応する平文データが暗号化された後のデータである暗号化データの識別子を格納するデータ構造を、索引として保管する索引保管部とを備えるコンピュータに、
前記複数のキーワードのいずれかを前記関数に入力し、前記関数から出力された数値に対応する格納領域を前記索引から特定し、特定した格納領域に格納された識別子に対応する暗号化データを前記データ保管部から取得する検索処理
を実行させるサーバプログラム。
【請求項１７】
コンピュータに、
暗号鍵を用いて複数の平文データを暗号化することで複数の暗号化データを生成するデータ暗号化処理と、
入力されるキーワードに対して一意の数値を出力する関数を用いて検索を行うためのデータ構造であり、前記関数から出力される数値に１対１で対応する複数の格納領域を有し、前記複数の平文データのいずれかに対応する複数のキーワードについて、それぞれのキーワードが入力されることで前記関数から出力された数値に対応する格納領域に、それぞれのキーワードが対応する平文データが暗号化された後のデータである暗号化データの識別子を格納するデータ構造を、索引として生成する索引生成処理と、
前記データ暗号化処理により生成された複数の暗号化データと、前記索引生成処理により生成された索引とをサーバ装置に送信する通信処理と
を実行させる端末プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、サーバ装置及び検索システム及び端末装置及び検索方法及びサーバプログラム及び端末プログラムに関するものである。本発明は、例えば、秘匿検索システムに関するものである。
【背景技術】
【０００２】
秘匿検索とは、暗号化データとキーワードとを暗号化したまま検索できる技術である。【０００３】
近年、クラウドサービス等の普及によりインターネット上でデータ管理が可能となった。しかし、インターネット上でのデータ管理には、データを預けた先のクラウドサーバがコンピュータウィルス等のマルウェアに感染したり、クラウドサービスの管理者が不正をはたらいたりすることによってデータが外部に漏洩する危険性がある。このようなセキュリティの脅威を回避する方法として暗号化技術があるが、単純にデータを暗号化するとデータの検索ができなくなるという問題が発生する。このような問題に対して、検索を行うときにクラウドサーバ上でデータを一旦復号してから検索を行うという手法が今までに考えられてきた。しかし、データがクラウドサーバ内で一定期間平文に戻ってしまうため、対策として十分とはいえない。そこで、データを暗号化したまま検索できる暗号技術である秘匿検索技術が現在活発に検討されている。秘匿検索技術の具体的な手法が近年多く開示されている。【０００４】
秘匿検索技術には、大きく分けて、共通鍵暗号を利用した方式（例えば、特許文献１、特許文献２、非特許文献１、非特許文献２、非特許文献３参照）と、公開鍵暗号を利用した方式（例えば、非特許文献４、非特許文献５参照）との２種類が存在する。なお、共通鍵暗号は、秘密鍵暗号又は対称鍵暗号ともいう。【０００５】
公開鍵暗号ベースの秘匿検索技術では、公開鍵を用いることでどのエンティティもデータセンタへのデータ登録ができる。また、その公開鍵に対応する秘密鍵を所持しているエンティティはキーワード検索ができる。【０００６】
一方で、共通鍵暗号ベースの秘匿検索技術では、データ登録とキーワード検索は秘密鍵を所持しているエンティティのみが実行できる。共通鍵暗号ベースの秘匿検索技術は、既存の公開鍵暗号ベースの秘匿検索技術と比べて検索処理が高速であることが知られている。特に、近年の共通鍵暗号ベースの秘匿検索技術では、索引と呼ばれる検索結果が暗号化されて保管されたデータ構造を用いて高速化を達成している。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１３−１５２５２０号公報
【特許文献２】特開２０１３−１６１１５４号公報
【非特許文献】
【０００８】
【非特許文献１】Ｒ．  Ｃｕｒｔｍｏｌａ，  Ｊ．  Ｇａｒａｙ，  Ｓ．  Ｋａｍａｒａ，  ａｎｄ  Ｒ．  Ｏｓｔｒｏｖｓｋｙ，  “Ｓｅａｒｃｈａｂｌｅ  Ｓｙｍｍｅｔｒｉｃ  Ｅｎｃｒｙｐｔｉｏｎ：  Ｉｍｐｒｏｖｅｄ  Ｄｅｆｉｎｉｔｉｏｎｓ  ａｎｄ  Ｅｆｆｉｃｉｅｎｔ  Ｃｏｎｓｔｒｕｃｔｉｏｎｓ”，  ＡＣＭ  ＣＣＳ  ２００６，  ＡＣＭ，  ２００６
【非特許文献２】Ｋ．  Ｋｕｒｏｓａｗａ  ａｎｄ  Ｙ．  Ｏｈｔａｋｉ，  “ＵＣ−Ｓｅｃｕｒｅ  Ｓｅａｒｃｈａｂｌｅ  Ｓｙｍｍｅｔｒｉｃ  Ｅｎｃｒｙｐｔｉｏｎ”，  ＦＣ  ２０１２，  Ｌｅｃｕｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  ７３９７，  Ｓｐｒｉｎｇｅｒ，  ２０１２
【非特許文献３】平野、服部、伊藤、川合、松田、太田、坂井、「暗号化索引追加後のＳｅａｒｃｈａｂｌｅ  Ｓｙｍｍｅｔｒｉｃ  Ｅｎｃｒｙｐｔｉｏｎの安全性の関係」、ＳＣＩＳ  ２０１４、３Ｂ３−３、２０１４年
【非特許文献４】Ｄ．  Ｂｏｎｅｈ，  Ｇ．  Ｄ．  Ｃｒｅｓｃｅｎｚｏ，  Ｒ．  Ｏｓｔｒｏｖｓｋｙ，  ａｎｄ  Ｇ．  Ｐｅｒｓｉａｎｏ，  “Ｐｕｂｌｉｃ  Ｋｅｙ  Ｅｎｃｒｙｐｔｉｏｎ  ｗｉｔｈ  Ｋｅｙｗｏｒｄ  Ｓｅａｒｃｈ”，  ＥＵＲＯＣＲＹＰＴ  ２００４，  Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  ３０２７，  Ｓｐｒｉｎｇｅｒ，  ２００４
【非特許文献５】Ｍ．  Ｂｅｌｌａｒｅ，  Ａ．  Ｂｏｌｄｙｒｅｖａ，  ａｎｄ  Ａ．  Ｏ’Ｎｅｉｌｌ，  “Ｄｅｔｅｒｍｉｎｉｓｔｉｃ  ａｎｄ  Ｅｆｆｉｃｉｅｎｔｌｙ  Ｓｅａｒｃｈａｂｌｅ  Ｅｎｃｒｙｐｔｉｏｎ”，  ＣＲＹＰＴＯ  ２００７，  Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  ４６２２，  Ｓｐｒｉｎｇｅｒ，  ２００７
【発明の概要】
【発明が解決しようとする課題】
【０００９】
特許文献１、非特許文献１、非特許文献２、非特許文献３に開示されているような従来の共通鍵暗号ベースの秘匿検索技術には、検索者であるユーザが生成する検索クエリの生成コスト及び検索クエリのデータサイズが登録データ数に依存するという課題がある。【００１０】
具体的には、従来方式では、ユーザがデータ登録時に生成する索引に対して複数のデータを関連付けることが可能である。つまり、索引に格納されている検索結果には複数のデータ名を挿入することができる。しかし、１つの索引に対して多くのデータを関連付けると、検索クエリの生成コスト及び検索クエリのデータサイズがデータ数に比例して大きくなる。より正確に述べると、ある索引に対してＮ個のデータを対応付けると、１個のデータのみとの対応付けと比べて、検索クエリの生成コスト及び検索クエリのデータサイズが約Ｎ倍も大きくなる。【００１１】
上記のような課題は、ＩＣ（Ｉｎｔｅｇｒａｔｅｄ・Ｃｉｒｃｕｉｔ）カードのような計算資源が乏しい機器を用いて検索クエリを生成する場合、或いは、通信の帯域が狭い場合は致命的である。ＩＣカードは、安全性を高められる一つの手段であることが広く知られているが、一般的に計算能力が低い。そのため、検索クエリの生成コストが大きいと、ＩＣカードを用いて現実的な時間で検索クエリを生成することは困難である。通信の帯域が狭い場合は、検索クエリを送信するコストが高くなる。そのため、データサイズが大きい検索クエリを送受信することは困難である。【００１２】
検索クエリの生成コスト及び検索クエリのデータサイズを減らすために、１つの索引に対応するデータ数を少なくして、索引を多く生成することが考えられる。しかし、この場合、データセンタに登録される索引数が多くなってしまう。その結果、検索時にデータセンタのサーバは多くの索引に対して検索処理を実施しなくてはならず、検索コストが高くなってしまう。【００１３】
以上をまとめると、従来の共通鍵暗号ベースの秘匿検索技術では、検索を要求する側における検索クエリの生成コスト及び検索クエリのデータサイズと、検索を実行する側における、索引数に依存する検索コストとの間にトレードオフがある。即ち、検索を要求する側の処理効率を上げようとすれば、検索を実行する側の処理効率が下がり、その逆もまた同様となる。【００１４】
本発明は、例えば、検索を要求する側と検索を実行する側との全体的な処理効率を高めることを目的とする。
【課題を解決するための手段】
【００１５】
本発明の一の態様に係るサーバ装置は、
複数の暗号化データを保管するデータ保管部と、
入力されるキーワードに対して一意の数値を出力する関数を用いて検索を行うためのデータ構造であり、前記関数から出力される数値に１対１で対応する複数の格納領域を有し、前記複数の暗号化データのいずれかが暗号化される前のデータである平文データに対応する複数のキーワードについて、それぞれのキーワードが入力されることで前記関数から出力された数値に対応する格納領域に、それぞれのキーワードが対応する平文データが暗号化された後のデータである暗号化データの識別子を格納するデータ構造を、索引として保管する索引保管部と、
前記複数のキーワードのいずれかを前記関数に入力し、前記関数から出力された数値に対応する格納領域を前記索引から特定し、特定した格納領域に格納された識別子に対応する暗号化データを前記データ保管部から取得する検索部とを備える。
【発明の効果】
【００１６】
本発明において、検索を実行する側であるサーバ装置は、入力されるキーワードに対して一意の数値を出力する関数を用いて検索を行う。サーバ装置は、関数から出力される数値に１対１で対応する複数の格納領域を有するデータ構造を、索引として保管する。サーバ装置は、関数に入力されるキーワードがあれば検索を実行できる。検索を要求する側は、キーワードをサーバ装置に渡すだけで検索を要求できる。よって、本発明によれば、検索を要求する側と検索を実行する側との全体的な処理効率が高まる。
【図面の簡単な説明】
【００１７】
【図１】実施の形態１に係る検索システムの構成を示すブロック図。
【図２】キーワードと検索対象のデータの識別子との対応関係の例を示す表。
【図３】実施の形態１に係る端末装置の構成を示すブロック図。
【図４】実施の形態１に係るサーバ装置の構成を示すブロック図。
【図５】実施の形態１に係る検索システムの初期設定処理を示すフローチャート。
【図６】実施の形態１に係る検索システムのデータ登録処理を示すフローチャート。
【図７】実施の形態１に係る検索システムのデータ検索処理を示すフローチャート。
【図８】実施の形態１に係る検索システムのデータ削除処理を示すフローチャート。
【図９】実施の形態１に係る検索システムの索引削除処理を示すフローチャート。
【図１０】実施の形態１に係る検索システムの初期設定処理の具体例を示すフローチャート。
【図１１】実施の形態１に係る検索システムのデータ登録処理の具体例を示すフローチャート。
【図１２】実施の形態１に係る検索システムのデータ検索処理の具体例を示すフローチャート。
【図１３】実施の形態１に係る検索システムのデータ削除処理の具体例を示すフローチャート。
【図１４】実施の形態１に係る検索システムの索引削除処理の具体例を示すフローチャート。
【図１５】実施の形態１に係る端末装置及びサーバ装置のハードウェア構成の例を示す図。
【発明を実施するための形態】
【００１８】
以下、本発明の実施の形態について、図を用いて説明する。なお、各図中、同一又は相当する部分には、同一符号を付している。実施の形態の説明において、同一又は相当する部分については、その説明を適宜省略又は簡略化する。
【００１９】
実施の形態１．
以下、本実施の形態の概要について説明する。
【００２０】
図１は、本実施の形態に係る検索システム１００の構成を示すブロック図である。
【００２１】
図１に示すように、検索システム１００は、ユーザ２００によって利用される複数の端末装置２０１と、データセンタ３００に設置されるサーバ装置３０１とを備える。なお、検索システム１００は、１つの端末装置２０１のみを備えていてもよい。検索システム１００は、複数のサーバ装置３０１を備えていてもよい。サーバ装置３０１は、データセンタ３００以外の場所に設置されていてもよい。
【００２２】
社内ＬＡＮ１０１は、複数の端末装置２０１を互いに接続する通信路である。社内ＬＡＮ１０１は、企業内に敷設されたＬＡＮ（Ｌｏｃａｌ・Ａｒｅａ・Ｎｅｔｗｏｒｋ）である。社内ＬＡＮ１０１には、企業内で利用される様々なサーバ及びＰＣ（Ｐｅｒｓｏｎａｌ・Ｃｏｍｐｕｔｅｒ）が接続される。社内ＬＡＮ１０１は、ネットワークの例である。社内ＬＡＮ１０１の代わりに、他の種類のネットワークが用いられてもよい。例えば、複数の建物にオフィスがある場合は、ルータ、専用線等を介して接続された複数のＬＡＮからなるネットワークが用いられる。
【００２３】
インターネット１０２は、社内ＬＡＮ１０１とサーバ装置３０１とを接続する通信路である。インターネット１０２は、ネットワークの例である。インターネット１０２の代わりに、他の種類のネットワークが用いられてもよい。
【００２４】
複数の端末装置２０１は、社内ＬＡＮ１０１を介して互いに情報を共有する。端末装置２０１とサーバ装置３０１は、社内ＬＡＮ１０１及びインターネット１０２を介して通信を行う。
【００２５】
端末装置２０１は、例えば、ＰＣである。端末装置２０１は、検索対象のデータをサーバ装置３０１に登録する登録端末と、サーバ装置３０１に対してデータ検索を要求する検索端末とのうち、少なくともいずれかとして動作するコンピュータである。以下では、説明の便宜上、端末装置２０１は、登録端末と検索端末との両方として動作するものとする。
【００２６】
端末装置２０１は、暗号化装置として機能する。即ち、端末装置２０１は、後述する暗号化データ及び索引を生成する。
【００２７】
端末装置２０１は、登録装置として機能する。即ち、端末装置２０１は、暗号化データ及び索引の保管をサーバ装置３０１に要求する。
【００２８】
端末装置２０１は、検索要求装置として機能する。即ち、端末装置２０１は、後述する検索シードをサーバ装置３０１に送信してデータの検索を要求する。
【００２９】
端末装置２０１は、復号装置として機能する。即ち、端末装置２０１は、検索の要求に応じてサーバ装置３０１から返信される暗号化データを復号する。
【００３０】
端末装置２０１は、削除要求装置として機能する。即ち、端末装置２０１は、サーバ装置３０１に対して、暗号化データ又は索引の削除を要求する。
【００３１】
サーバ装置３０１は、端末装置２０１によって作成された暗号化データ及び索引を保管する大容量の記録媒体を持つサーバである。
【００３２】
サーバ装置３０１は、保管装置として機能する。即ち、サーバ装置３０１は、端末装置２０１から暗号化データ又は索引の保管の要求があれば、暗号化データ又は索引を保管する。
【００３３】
サーバ装置３０１は、検索装置として機能する。即ち、サーバ装置３０１は、端末装置２０１からの検索の要求があれば、索引から検索結果情報を得て、検索結果情報が示す暗号化データを端末装置２０１に送信する。
【００３４】
サーバ装置３０１は、削除装置として機能する。即ち、サーバ装置３０１は、端末装置２０１から暗号化データ又は索引の削除の要求があれば、保管している暗号化データ又は索引を削除する。
【００３５】
暗号化データ及び検索シードは、いずれも暗号化されている。そのため、サーバ装置３０１では、暗号化データ及び検索シードの中身を閲覧しても有益な情報を得ることはできない。なお、検索対象となるデータのみを秘匿し、検索用のキーワードを秘匿しなくてよい場合は、キーワードをそのまま検索シードとして用いてもよい。
【００３６】
図２は、キーワードと検索対象のデータの識別子との対応関係の例を示す表である。
【００３７】
図２の例において、キーワード「特許」には、データ１、データ３、データ５が対応する。即ち、キーワードを「特許」に設定した検索では、データ１、データ３、データ５のそれぞれによって識別される３つのデータがヒットする。
【００３８】
同様に、キーワード「人事情報」には、データ２、データ３、データ７、データ１０が対応する。即ち、キーワードを「人事情報」に設定した検索では、データ２、データ３、データ７、データ１０のそれぞれによって識別される４つのデータがヒットする。
【００３９】
同様に、キーワード「予算」には、データ１、データ２が対応する。即ち、キーワードを「予算」に設定した検索では、データ１、データ２のそれぞれによって識別される２つのデータがヒットする。
【００４０】
本実施の形態では、索引を利用する従来の共通鍵暗号ベースの秘匿検索技術が改良されている。具体的には、検索者であるユーザ２００によって利用される端末装置２０１が、登録データ数に比例して生成コスト及びデータサイズが大きくなる検索クエリを生成する必要がない。端末装置２０１は、検索クエリの代わりに、生成コスト及びデータサイズが登録データ数に依存しない検索シードを生成する。検索シードは、キーワードを暗号化することで生成される。サーバ装置３０１は、検索シードを入力とする関数から出力される数値を用いて、キーワードに対応するデータの識別子を索引から取得する。図２の例において、キーワード「特許」の検索シードが端末装置２０１から与えられた場合、サーバ装置３０１は、索引からデータ１、データ３、データ５の３つの識別子を取得する。
【００４１】
上記のように、本実施の形態では、キーワードから検索対象のデータの識別子が特定されるまでの一連の検索処理が端末装置２０１とサーバ装置３０１とによって分担される。従来は、検索クエリの生成コスト及び検索クエリのデータサイズと検索コストとの間にトレードオフがあったが、本実施の形態では、そのようなトレードオフを考慮する必要がなくなる。即ち、本実施の形態では、索引数を増やさなくても、検索を要求する側で生成される情報の生成コスト及びその情報のデータサイズを小さくでき、かつ、高い安全性を持つ共通鍵暗号ベースの秘匿検索技術を得ることができる。
【００４２】
本実施の形態において、ユーザ２００がデータセンタ３００にデータを登録する処理であるデータ登録処理と、ユーザ２００がキーワードを用いてデータセンタ３００でデータを検索する処理であるキーワード検索処理は、以下のような流れで実行される。ただし、データの登録又は検索をしたいエンティティである登録者又は検索者は、事前準備として秘密鍵を生成し、この秘密鍵を他人に漏らさないよう厳重に管理することが求められる。ユーザ２００は、登録者及び検索者に相当する。なお、秘密鍵の代わりに、他の種類の秘密情報が用いられてもよい。
【００４３】
まず、データ登録処理について説明する。
【００４４】
クラウドサービス等を利用してデータをデータセンタ３００に預けたいユーザ２００は、データ登録時に、登録したいデータのキーワードを決定する。ユーザ２００は、図２の例のように、各キーワードに対して検索でヒットするデータの識別子のリストを作成する。ユーザ２００は、作成したリストと、登録したいデータとを端末装置２０１に入力する。
【００４５】
端末装置２０１は、ユーザ２００によって入力されたリストに含まれるキーワードを、秘密鍵で暗号化して検索シードを生成する。端末装置２０１は、検索シードを用いて索引を作成する。索引には、検索結果が保管されている。索引に求められる性質として、秘密鍵又はそれに準じる秘密情報を持っていなければ有益な検索結果を索引から引き出すことが困難であることが要求される。
【００４６】
索引の構造は任意に選択することができる。例えば、索引の構造として、次のような配列を選択することができる。即ち、各キーワードの検索結果は、配列のランダムなアドレスの記憶領域に格納される。ランダムなアドレスは、擬似ランダム関数又はＳＨＡ−１（Ｓｅｃｕｒｅ・Ｈａｓｈ・Ａｌｇｏｒｉｔｈｍ−１）のようなハッシュ関数に検索シードを入力することで確定的に生成される乱数によって決定される。なお、「確定的」とは、入力される検索シードが同じであれば、いつも同じ値が生成されるという意味である。図２の例のように、１つのキーワードに複数のデータの識別子が対応することを許す場合は、同じキーワードに対応する識別子の序数もハッシュ関数に入力される。入力される検索シードと序数との組み合わせが同じであれば、いつも同じ値が生成されることになる。
【００４７】
索引には、検索シードそのものは一切格納されず、検索結果のみが格納される。秘密鍵を持っているユーザ２００のみがキーワードから検索シードを生成することができ、検索シードと検索結果とを結びつけることができる。即ち、秘密鍵を持っているユーザ２００のみがキーワードと検索結果とを結びつけることができる。索引は、検索結果の転置索引と考えることができる。
【００４８】
端末装置２０１は、ユーザ２００によって入力されたデータをＡＥＳ（Ａｄｖａｎｃｅｄ・Ｅｎｃｒｙｐｔｉｏｎ・Ｓｔａｎｄａｒｄ）又はＣａｍｅｌｌｉａ（登録商標）等の共通鍵暗号方式を用いて暗号化する。端末装置２０１は、索引と暗号化データとをデータセンタ３００のサーバ装置３０１に登録する。
【００４９】
次に、キーワード検索処理について説明する。
【００５０】
データセンタ３００に預けた暗号化データを検索したいユーザ２００は、キーワードを端末装置２０１に入力する。
【００５１】
端末装置２０１は、ユーザ２００によって入力されたキーワードを秘密鍵で暗号化して検索シードを生成する。端末装置２０１は、検索シードをデータセンタ３００のサーバ装置３０１に送信する。
【００５２】
データセンタ３００のサーバ装置３０１は、端末装置２０１から受け取った検索シードを使って乱数を生成する。この乱数は、索引のアドレスに対応する。図２の例のように、１つのキーワードに複数のデータの識別子が対応することを許す場合、サーバ装置３０１は、複数の乱数を生成する。サーバ装置３０１は、生成した乱数に対応する索引内の１つ又は複数のアドレスを特定する。サーバ装置３０１は、特定したアドレスの記憶領域から検索結果を引き出す。その後、サーバ装置３０１は、検索結果が示す識別子に対応した１つ又は複数の暗号化データを読み出す。サーバ装置３０１は、読み出した暗号化データを端末装置２０１に送信する。
【００５３】
端末装置２０１は、共通鍵暗号方式を用いて受け取った暗号化データを復号する。
【００５４】
上記のようなデータ登録処理及びキーワード検索処理が実行されることで、データが暗号化されてデータセンタ３００に保管されていても、データの内容に関する情報を漏らさずにデータを暗号化したまま検索することができる。データセンタ３００のサーバ装置３０１ですらデータの内容に関する情報にはアクセスできない。
【００５５】
本実施の形態では、検索者であるユーザ２００の端末装置２０１は、検索時に、検索クエリを生成せず、代わりに登録データ数に依存しない検索シードを生成する。データセンタ３００のサーバ装置３０１は、その検索シードから乱数である検索キーを生成する。サーバ装置３０１は、その検索キーから索引の検索を行う。よって、１つの索引に多数のデータを登録したとしても、検索シードの生成コスト及び検索シードのデータサイズへの影響がない。即ち、本実施の形態では、従来の検索クエリと異なり、検索シードの生成コストを低くすることができ、検索シードのデータサイズを小さくすることができる。
【００５６】
以下、本実施の形態の詳細について説明する。
【００５７】
＊＊＊構成の説明＊＊＊
図１に示したように、検索システム１００は、端末装置２０１と、サーバ装置３０１とを備える。以下では、端末装置２０１の構成、サーバ装置３０１の構成について順番に説明する。
【００５８】
図３は、端末装置２０１の構成を示すブロック図である。
【００５９】
図３に示すように、端末装置２０１は、秘密鍵生成部２０２、秘密鍵管理部２０３、キーワード設定部２０４、データ暗号化部２０５、索引生成部２０６、データ削除要求生成部２０７、索引削除要求生成部２０８、キーワード暗号化部２０９、通信部２１０、データ復号部２１１を備える。
【００６０】
図示していないが、端末装置２０１は、端末装置２０１の各部で使用されるデータを記憶する記録媒体を備える。
【００６１】
秘密鍵生成部２０２は、データを暗号化するための共通鍵暗号方式の暗号鍵ＥＫと、索引Ｉを生成するための索引鍵ＩＫとを生成する。暗号鍵ＥＫ及び索引鍵ＩＫは、端末装置２０１の秘密鍵であり、データ登録、データ追加、データ削除、又は、キーワード検索を行うユーザ２００以外には開示しないよう厳重に管理される。なお、本実施の形態では、共通鍵暗号方式が用いられているが、ＲＳＡ（登録商標）暗号方式等の公開鍵暗号方式が用いられてもよい。公開鍵暗号方式において、暗号化に用いる公開鍵は公にしてもよいが、復号に用いる秘密鍵は厳重に管理される。
【００６２】
秘密鍵管理部２０３は、秘密鍵生成部２０２で生成された暗号鍵ＥＫ及び索引鍵ＩＫを記録媒体に記憶する。
【００６３】
キーワード設定部２０４は、ユーザ２００から入力された複数の平文データＤ＿１〜Ｄ＿ｎから複数のキーワードを自動的に抽出する。キーワード設定部２０４は、抽出した各キーワードについて、図２の例のような検索結果情報を作成する。キーワード設定部２０４は、ユーザ２００から入力された登録索引名も検索結果情報に含める。なお、登録索引名は必ずしもユーザ２００が入力する必要はなく、省略してもよい。キーワードは、自動的に抽出されなくてもよい。例えば、平文データである登録データと同時に各データに対応するキーワードがユーザ２００から入力されてもよい。その場合、キーワード設定部２０４は、ユーザ２００から入力された各キーワードとデータとの関係性を判定して検索結果情報を作成する。或いは、ユーザ２００が直接的に検索結果情報を入力する。
【００６４】
データ暗号化部２０５は、秘密鍵管理部２０３に記憶されている暗号鍵ＥＫを用いて、キーワード設定部２０４から受け取った登録データを暗号化する。即ち、データ暗号化部２０５は、暗号鍵ＥＫを用いて複数の平文データＤ＿１〜Ｄ＿ｎを暗号化することで複数の暗号化データＣ＿１〜Ｃ＿ｎを生成する。
【００６５】
索引生成部２０６は、入力されるキーワードに対して一意の数値を出力する関数Ｈを用いて検索を行うためのデータ構造を、索引Ｉとして生成する。索引Ｉは、関数Ｈから出力される数値に１対１で対応する複数の格納領域を有するデータ構造である。索引Ｉは、複数の平文データＤ＿１〜Ｄ＿ｎのいずれかに対応する複数のキーワードについて、それぞれのキーワードが入力されることで関数Ｈから出力された数値に対応する格納領域に、それぞれのキーワードが対応する平文データＤ＿ｉが暗号化された後のデータである暗号化データＣ＿ｉの識別子を格納するデータ構造である。
【００６６】
索引生成部２０６は、秘密鍵管理部２０３に記憶されている索引鍵ＩＫを用いて、キーワード設定部２０４で生成された検索結果情報に基づき、索引Ｉを生成する。即ち、関数Ｈの入力が平文のキーワードであってもよいが、本実施の形態では、サーバ装置３０１に対してキーワードを秘匿するため、関数Ｈの入力が、暗号化されたキーワードである検索シードであるとする。索引生成部２０６は、複数のキーワードについて、索引鍵ＩＫを用いてそれぞれのキーワードを暗号化する。索引生成部２０６は、暗号化したキーワードを関数Ｈに入力する。索引生成部２０６は、関数Ｈから出力された数値に対応する格納領域に、暗号化したキーワードが対応する平文データＤ＿ｉが暗号化された後のデータである暗号化データＣ＿ｉの識別子を格納するデータ構造を、索引Ｉとして生成する。
【００６７】
１つのキーワードが１つの平文データのみに対応するようにしてもよいが、本実施の形態では、１つのキーワードが２つ以上の平文データに対応できるようにするため、関数Ｈの入力に、キーワード以外の数値が含まれるものとする。即ち、関数Ｈは、入力されるキーワードと数値との組み合わせに対して一意の数値を出力する関数である。索引生成部２０６は、共通のキーワードが対応する２つ以上の平文データについて、共通のキーワードとそれぞれの平文データＤ＿ｉを識別するための数値とを関数Ｈに入力する。索引生成部２０６は、関数Ｈから出力された数値に対応する格納領域に、それぞれの平文データＤ＿ｉが暗号化された後のデータである暗号化データＣ＿ｉの識別子を格納するデータ構造を、索引Ｉとして生成する。
【００６８】
データ削除要求生成部２０７は、ユーザ２００から入力された識別子である削除データ名を含む削除データ情報を生成する。削除データ情報は、サーバ装置３０１に登録されている暗号化データを削除するための情報である。
【００６９】
索引削除要求生成部２０８は、ユーザ２００から入力された削除索引名を含む削除索引情報を生成する。削除索引情報は、サーバ装置３０１に登録されている索引Ｉを削除するための情報である。
【００７０】
キーワード暗号化部２０９は、秘密鍵管理部２０３に記憶されている索引鍵ＩＫを用いて、ユーザ２００から入力されたキーワードから検索シードを生成する。即ち、キーワード暗号化部２０９は、索引鍵ＩＫを用いてキーワードを暗号化する。キーワード暗号化部２０９は、ユーザ２００から入力された検索索引名を含む検索索引情報も生成する。なお、検索索引名は必ずしもユーザ２００が入力する必要はなく、省略してもよい。
【００７１】
検索シードは、検索を行うために必要な情報の中間情報である。検索シードをそのまま用いて索引Ｉを検索することはできない。検索シードは秘密鍵である索引鍵ＩＫを持つユーザ２００のみが生成できる情報である。サーバ装置３０１は、検索シードのみを用いて、検索を行うために必要な情報である検索キーを生成できる。サーバ装置３０１は、生成した検索キーに基づいて索引の検索を行うことができる。
【００７２】
通信部２１０は、データ暗号化部２０５から送られてくる複数の暗号化データＣ＿１〜Ｃ＿ｎ、索引生成部２０６から送られてくる索引Ｉ、データ削除要求生成部２０７から送られてくる削除データ情報、索引削除要求生成部２０８から送られてくる削除索引情報、キーワード暗号化部２０９から送られてくる検索シード及び検索索引情報をサーバ装置３０１へ送信する。即ち、通信部２１０は、データ暗号化部２０５により生成された複数の暗号化データＣ＿１〜Ｃ＿ｎと、索引生成部２０６により生成された索引Ｉとをサーバ装置３０１に送信する。通信部２１０は、キーワード暗号化部２０９により暗号化されたキーワードをサーバ装置３０１に送信する。
【００７３】
通信部２１０は、複数の暗号化データＣ＿１〜Ｃ＿ｎのいずれかである暗号化データＣ＿ｉをサーバ装置３０１から受信する。
【００７４】
データ復号部２１１は、秘密鍵管理部２０３に記憶されている暗号鍵ＥＫを用いて、通信部２１０から受け取った暗号化データＣ＿ｉを復号して平文データＣ＿ｉを取得する。データ復号部２１１は、取得した平文データＣ＿ｉをディスプレイ又はプリンタ等に出力する。即ち、データ復号部２１１は、暗号鍵ＥＫに対応する復号鍵を用いて通信部２１０により受信された暗号化データＣ＿ｉを復号する。
【００７５】
図４は、サーバ装置３０１の構成を示すブロック図である。
【００７６】
図４に示すように、サーバ装置３０１は、通信部３０２、データ保管部３０３、索引保管部３０４、検索部３０５、検索キー生成部３０６、索引更新部３０７を備える。
【００７７】
図示していないが、サーバ装置３０１は、サーバ装置３０１の各部で使用されるデータを記憶する記録媒体を備える。
【００７８】
通信部３０２は、複数の暗号化データＣ＿１〜Ｃ＿ｎ、索引Ｉ、削除データ情報、削除索引情報、端末装置２０１により索引鍵ＩＫを用いて暗号化されたキーワードである検索シード、検索索引情報を端末装置２０１から受信する。
【００７９】
通信部３０２は、検索部３０５により取得された暗号化データＣ＿ｉを端末装置２０１に送信する。
【００８０】
データ保管部３０３は、通信部３０２から送られてきた複数の暗号化データＣ＿１〜Ｃ＿ｎを記録媒体に記憶する。即ち、データ保管部３０３は、複数の暗号化データＣ＿１〜Ｃ＿ｎを保管する。前述したように、複数の暗号化データＣ＿１〜Ｃ＿ｎは、暗号鍵ＥＫを保有する端末装置２０１により暗号鍵ＥＫを用いて複数の平文データＤ＿１〜Ｄ＿ｎが暗号化された後のデータである。データ保管部３０３は、検索部３０５から識別子であるデータ名が送られてきた場合に、記録媒体からそのデータ名に対応した暗号化データＣ＿ｉを読み出す。データ保管部３０３は、読み出した暗号化データを検索部３０５に送る。データ保管部３０３は、索引更新部３０７から送られてきた削除データ名に対応する暗号化データＣ＿ｉを記録媒体から削除する。
【００８１】
索引保管部３０４は、通信部３０２から送られてきた索引Ｉを記録媒体に記憶する。即ち、索引保管部３０４は、入力されるキーワードに対して一意の数値を出力する関数Ｈを用いて検索を行うためのデータ構造を、索引Ｉとして保管する。前述したように、索引Ｉは、関数Ｈから出力される数値に１対１で対応する複数の格納領域を有するデータ構造である。索引Ｉは、複数の暗号化データＣ＿１〜Ｃ＿ｎのいずれかが暗号化される前のデータである平文データＤ＿ｉに対応する複数のキーワードについて、それぞれのキーワードが入力されることで関数Ｈから出力された数値に対応する格納領域に、それぞれのキーワードが対応する平文データＤ＿ｉが暗号化された後のデータである暗号化データＣ＿ｉの識別子を格納するデータ構造である。索引Ｉは、端末装置２０１により生成されたデータ構造である。
【００８２】
前述したように、関数Ｈの入力が平文のキーワードであってもよいが、本実施の形態では、サーバ装置３０１に対してキーワードを秘匿するため、関数Ｈの入力が、暗号化されたキーワードである検索シードであるとする。即ち、関数Ｈは、索引鍵ＩＫを保有する端末装置２０１により索引鍵ＩＫを用いて暗号化されたキーワードに対して一意の数値を出力する関数である。
【００８３】
前述したように、１つのキーワードが１つの平文データのみに対応するようにしてもよいが、本実施の形態では、１つのキーワードが２つ以上の平文データに対応できるようにするため、関数Ｈの入力に、キーワード以外の数値が含まれるものとする。即ち、関数Ｈは、入力されるキーワードと数値との組み合わせに対して一意の数値を出力する関数である。索引Ｉは、共通のキーワードが対応する２つ以上の平文データについて、共通のキーワードとそれぞれの平文データＤ＿ｉを識別するための数値とが入力されることで関数Ｈから出力された数値に対応する格納領域に、それぞれの平文データＤ＿ｉが暗号化された後のデータである暗号化データＣ＿ｉの識別子を格納するデータ構造である。
【００８４】
索引保管部３０４は、検索部３０５から送られてきた検索索引名に対応した索引Ｉを記録媒体から読み出す。索引保管部３０４は、読み出した索引Ｉを検索部３０５に送る。
【００８５】
索引保管部３０４は、索引更新部３０７から削除データ名を受け取る。索引保管部３０４は、記録媒体から索引Ｉを読み出す。索引保管部３０４は、受け取った削除データ名を含んでいる索引Ｉのアドレスを見つけ出す。該当するアドレスが見つかった場合、索引保管部３０４は、そのアドレスから削除データ名を削除する。
【００８６】
索引保管部３０４は、索引更新部３０７から送られてきた削除索引名に対応する索引Ｉを記録媒体から削除する。
【００８７】
検索部３０５は、通信部３０２から送られてきた検索索引情報から検索索引名を抽出する。検索部３０５は、抽出した検索索引名を索引保管部３０４に送る。検索部３０５は、通信部３０２から送られてきた検索シードを検索キー生成部３０６に送る。検索キー生成部３０６には、関数Ｈが実装されている。検索部３０５は、検索キー生成部３０６から送られてきた検索キーを用いて、索引保管部３０４から送られてきた索引Ｉを検索し、検索結果を抽出する。その後、検索部３０５は、抽出したデータ名をデータ保管部３０３に送る。検索部３０５は、データ保管部３０３から送られてきた暗号化データＣ＿ｉを通信部３０２に送る。即ち、検索部３０５は、複数のキーワードのいずれかを関数Ｈに入力する。検索部３０５は、関数Ｈから出力された数値に対応する格納領域を索引Ｉから特定する。検索部３０５は、特定した格納領域に格納された識別子に対応する暗号化データＣ＿ｉをデータ保管部３０３から取得する。本実施の形態において、検索部３０５は、通信部３０２により受信されたキーワードを関数Ｈに入力する。
【００８８】
前述したように、本実施の形態では、１つのキーワードが２つ以上の平文データに対応できるようにするため、関数Ｈの入力に、キーワード以外の数値が含まれる。この数値の範囲は、予め設定されている。例えば、最小値は、１である。最大値は、１つのキーワードが対応することが許される平文データの数である。検索部３０５は、複数のキーワードのいずれかとともに予め設定された範囲内の数値を１つずつ関数Ｈに入力する。検索部３０５は、関数Ｈから出力された数値に対応する格納領域が索引Ｉに存在する場合に、その存在する格納領域に格納された識別子に対応する暗号化データＣ＿ｉをデータ保管部３０３から取得する。
【００８９】
検索キー生成部３０６は、検索部３０５から送られてきた検索シードから検索キーを生成する。検索キー生成部３０６は、生成した検索キーを検索部３０５に送る。検索キー生成部３０６は、関数Ｈそのものであると考えてもよい。
【００９０】
索引更新部３０７は、通信部３０２から送られてきた削除データ情報から削除データ名を抽出する。索引更新部３０７は、抽出した削除データ名をデータ保管部３０３と索引保管部３０４とに送る。即ち、索引更新部３０７は、端末装置２０１により削除する暗号化データＣ＿ｉの識別子が指定された場合に、指定された識別子に対応する暗号化データＣ＿ｉをデータ保管部３０３から削除する。また、索引更新部３０７は、指定された識別子が格納された格納領域を索引から特定する。索引更新部３０７は、特定した格納領域の内容を削除する。
【００９１】
索引更新部３０７は、通信部３０２から送られてきた削除索引情報から削除索引名を抽出する。索引更新部３０７は、抽出した削除索引名を索引保管部３０４に送る。
【００９２】
なお、端末装置２０１の索引生成部２０６は、１つの索引Ｉのみを生成してもよいが、以下では、複数の索引Ｉを生成するものとする。それぞれの索引Ｉは、登録索引名、検索索引名、削除索引名といった索引名によって識別される。
【００９３】
ユーザ２００は、検索を要求する際に、１つ又は複数の検索索引名を入力してもよいし、検索索引名の入力を省略してもよい。検索索引名の入力が省略された場合、端末装置２０１のキーワード暗号化部２０９は、全ての索引Ｉの検索を行うという情報を検索索引情報に含める。
【００９４】
サーバ装置３０１の索引保管部３０４は、索引更新部３０７から削除データ名を受け取ったときに、記録媒体から全ての索引Ｉを読み出す。索引保管部３０４は、受け取った削除データ名を含んでいる索引Ｉを見つけ出す。該当する索引Ｉが見つかった場合、索引保管部３０４は、その索引Ｉの該当するアドレスから削除データ名を削除する。
【００９５】
＊＊＊動作の説明＊＊＊
以下では、本実施の形態に係る検索方法に相当する、検索システム１００の動作について説明する。
【００９６】
図５は、検索システム１００の初期設定処理を示すフローチャートである。
【００９７】
図５のＳ１０１〜Ｓ１０４は、本実施の形態に係る端末プログラムがコンピュータである端末装置２０１に実行させる処理である。Ｓ１０１〜Ｓ１０４は、データ登録処理及びデータ検索処理が実行される前に端末装置２０１によって実行される。
【００９８】
Ｓ１０１において、秘密鍵生成部２０２は、データを暗号化するための共通鍵暗号方式を決定する。共通鍵暗号方式としては、ＡＥＳ、Ｃａｍｅｌｌｉａ（登録商標）等が選択できる。なお、共通鍵暗号方式は、予め決定されていても構わない。前述したように、共通鍵暗号方式の代わりに、公開鍵暗号方式を選択することもできる。以下では、Ｓ１０１で決定された共通鍵暗号方式を単に「共通鍵暗号方式」という。
【００９９】
Ｓ１０２において、秘密鍵生成部２０２は、データを暗号化するための共通鍵暗号方式の暗号鍵ＥＫを生成する。本実施の形態では、暗号鍵ＥＫは復号鍵でもある。Ｓ１０１で公開鍵暗号方式が選ばれていたら、秘密鍵生成部２０２は、公開鍵である暗号鍵ＥＫに対応する秘密鍵を復号鍵として生成する。
【０１００】
Ｓ１０３において、秘密鍵生成部２０２は、索引Ｉ及び検索シードを生成するための索引鍵ＩＫを生成する。
【０１０１】
Ｓ１０４において、秘密鍵管理部２０３は、Ｓ１０２で生成された暗号鍵ＥＫとＳ１０３で生成された索引鍵ＩＫとを記録媒体に記憶する。
【０１０２】
Ｓ１０４により、検索システム１００の初期設定処理は終了する。
【０１０３】
図６は、検索システム１００のデータ登録処理を示すフローチャートである。
【０１０４】
図６のＳ２０１〜Ｓ２０６は、本実施の形態に係る端末プログラムがコンピュータである端末装置２０１に実行させる処理である。Ｓ２０４はデータ暗号化処理、Ｓ２０５は索引生成処理、Ｓ２０６は通信処理である。Ｓ２０１〜Ｓ２０６において、検索対象の暗号化データＣ＿１〜Ｃ＿ｎと検索対象のデータを検索するための索引Ｉとが端末装置２０１で生成される。
【０１０５】
図６のＳ２０７は、本実施の形態に係るサーバプログラムがコンピュータであるサーバ装置３０１に実行させる処理である。Ｓ２０７は通信処理である。Ｓ２０７において、検索対象の暗号化データＣ＿１〜Ｃ＿ｎと索引Ｉとがサーバ装置３０１に登録される。
【０１０６】
Ｓ２０１において、ユーザ２００は、キーボード又はマウス等を用いて端末装置２０１に登録データと登録索引名とを指定する。キーワード設定部２０４は、登録データと登録索引名との入力を受け付ける。登録データは、暗号化されていない検索対象のデータ、即ち、平文データＤ＿１〜Ｄ＿ｎである。なお、１つの登録データのみが指定されてもよい。登録索引名は、同時に入力された登録データに関連付けられる索引Ｉに割り当てられる名前である。なお、登録索引名は必ずしも入力される必要はない。登録索引名はキーワード設定部２０４によって自動的に割り当てられてもよいし、割り当てられなくてもよい。
【０１０７】
Ｓ２０２において、キーワード設定部２０４は、Ｓ２０１で入力された登録データに関連する１つ以上のキーワードを生成する。例えば、キーワード設定部２０４は、登録データから名詞をキーワードとして自動的に抽出したり、ユーザ２００から直接指定されるキーワードの入力を受け付けたりする。
【０１０８】
Ｓ２０３において、キーワード設定部２０４は、Ｓ２０２で生成したキーワード別に検索結果情報を生成する。検索結果情報は、図２の例のように、キーワードに対応する登録データのデータ名を示す情報である。
【０１０９】
Ｓ２０４において、データ暗号化部２０５は、秘密鍵管理部２０３に記憶されている暗号鍵ＥＫを用いて、Ｓ２０１で入力された登録データを暗号化して暗号化データＣ＿１〜Ｃ＿ｎを生成する。
【０１１０】
Ｓ２０５において、索引生成部２０６は、秘密鍵管理部２０３に記憶されている索引鍵ＩＫを用いて、Ｓ２０３で生成された検索結果情報を暗号化して索引Ｉを生成する。
【０１１１】
Ｓ２０６において、通信部２１０は、Ｓ２０４で生成された暗号化データＣ＿１〜Ｃ＿ｎとＳ２０５で生成された索引Ｉとをサーバ装置３０１に送信する。
【０１１２】
Ｓ２０７において、通信部３０２は、Ｓ２０６で送信された暗号化データＣ＿１〜Ｃ＿ｎと索引Ｉとを受信する。その後、データ保管部３０３は、暗号化データＣ＿１〜Ｃ＿ｎを記録媒体に記憶する。索引保管部３０４は、索引Ｉを記録媒体に記憶する。
【０１１３】
Ｓ２０７により、検索システム１００のデータ登録処理は終了する。暗号化データＣ＿１〜Ｃ＿ｎ及び索引Ｉは暗号化されているため、登録データ及びキーワードは秘匿される。なお、上記と同様な手順によりデータを追加登録することができる。
【０１１４】
図７は、検索システム１００のデータ検索処理を示すフローチャートである。
【０１１５】
図７のＳ３０１〜Ｓ３０４及びＳ３１０は、本実施の形態に係る端末プログラムがコンピュータである端末装置２０１に実行させる処理である。Ｓ３０２及びＳ３０３はキーワード暗号化処理、Ｓ３０４及びＳ３１０の一部は通信処理、Ｓ３１０の残りの部分はデータ復号処理である。Ｓ３０１〜Ｓ３０４において、検索シードが端末装置２０１で生成される。
【０１１６】
図７のＳ３０５〜Ｓ３０９は、本実施の形態に係るサーバプログラムがコンピュータであるサーバ装置３０１に実行させる処理である。Ｓ３０５の一部及びＳ３０９は通信処理、Ｓ３０５の残りの部分及びＳ３０６〜Ｓ３０８は検索処理である。Ｓ３０５〜Ｓ３０９において、検索シードを用いて検索キーがサーバ装置３０１で生成され、検索キーとサーバ装置３０１に登録されている索引Ｉとを用いてサーバ装置３０１に登録されている暗号化データＣ＿ｉの検索が行われる。
【０１１７】
Ｓ３０１において、ユーザ２００は、キーボード又はマウス等を用いて端末装置２０１に１つ又は複数のキーワードと１つ又は複数の検索索引名とを指定する。キーワード暗号化部２０９は、キーワードと検索索引名との入力を受け付ける。
【０１１８】
Ｓ３０２において、キーワード暗号化部２０９は、秘密鍵管理部２０３に記憶されている索引鍵ＩＫを用いて、Ｓ３０１で入力されたキーワードから検索シードを生成する。検索シードは、サーバ装置３０１が検索キーを生成するための情報である。
【０１１９】
Ｓ３０３において、キーワード暗号化部２０９は、Ｓ３０１で入力された検索索引名を含む検索索引情報を生成する。
【０１２０】
Ｓ３０４において、通信部２１０は、Ｓ３０２で生成された検索シードとＳ３０３で生成された検索索引情報とをサーバ装置３０１に送信する。
【０１２１】
Ｓ３０５において、通信部３０２は、Ｓ３０４で送信された検索シードと検索索引情報とを受信する。その後、検索部３０５は、通信部３０２から送られてきた検索索引情報から検索索引名を抽出する。検索部３０５は、抽出した検索索引名に対応する索引Ｉを索引保管部３０４から読み出す。検索部３０５は、複数の検索索引名があれば、複数の索引Ｉを読み出す。
【０１２２】
Ｓ３０６において、検索キー生成部３０６は、検索部３０５から送られてきた、Ｓ３０５で受信された検索シードを用いて、検索キーを生成する。
【０１２３】
Ｓ３０７において、検索部３０５は、Ｓ３０６で生成された検索キーを用いて、Ｓ３０５で読み出した索引Ｉの検索を行う。検索部３０５は、データ名を含む検索結果情報を抽出する。
【０１２４】
Ｓ３０８において、検索部３０５は、Ｓ３０７で抽出した検索結果情報に基づいてデータ保管部３０３から暗号化データＣ＿ｉを読み出す。
【０１２５】
Ｓ３０９において、通信部３０２は、Ｓ３０８で読み出された暗号化データＣ＿ｉを端末装置２０１に送信する。
【０１２６】
Ｓ３１０において、通信部２１０は、Ｓ３０９で送信された暗号化データＣ＿ｉを受信する。その後、データ復号部２１１は、秘密鍵管理部２０３に記憶されている暗号鍵ＥＫを用いて、通信部２１０から送られてきた暗号化データＣ＿ｉを復号する。データ復号部２１１は、復号して得られた平文データＤ＿ｉをディスプレイ又はプリンタ等に出力する。
【０１２７】
Ｓ３１０により、検索システム１００のデータ検索処理は終了する。
【０１２８】
図８は、検索システム１００のデータ削除処理を示すフローチャートである。
【０１２９】
図８のＳ４０１〜Ｓ４０３は、本実施の形態に係る端末プログラムがコンピュータである端末装置２０１に実行させる処理である。Ｓ４０３は通信処理である。
【０１３０】
図８のＳ４０４及びＳ４０５は、本実施の形態に係るサーバプログラムがコンピュータであるサーバ装置３０１に実行させる処理である。Ｓ４０４の一部は通信処理、Ｓ４０４の残りの部分及びＳ４０５は索引更新処理である。Ｓ４０４及びＳ４０５において、サーバ装置３０１に登録されている一部の登録データが削除される。
【０１３１】
Ｓ４０１において、ユーザ２００は、キーボード又はマウス等を用いて端末装置２０１に１つ又は複数の削除データ名を指定する。データ削除要求生成部２０７は、削除データ名の入力を受け付ける。
【０１３２】
Ｓ４０２において、データ削除要求生成部２０７は、Ｓ４０１で入力された削除データ名を含む削除データ情報を生成する。
【０１３３】
Ｓ４０３において、通信部２１０は、Ｓ４０２で生成された削除データ情報をサーバ装置３０１に送信する。
【０１３４】
Ｓ４０４において、通信部３０２は、Ｓ４０３で送信された削除データ情報を受信する。索引更新部３０７は、通信部３０２から送られてきた削除データ情報から削除データ名を抽出する。索引保管部３０４は、索引更新部３０７によって制御されることで、記録媒体から全ての索引Ｉを読み出し、索引更新部３０７から送られてきた削除データ名を含んでいる索引Ｉを見つけ出す。索引保管部３０４は、該当する索引Ｉを見つけた場合は、その索引Ｉの該当するアドレスから削除データ名を削除する。
【０１３５】
Ｓ４０５において、データ保管部３０３は、索引更新部３０７によって制御されることで、索引更新部３０７から送られてきた削除データ名に対応する暗号化データＣ＿ｉを記録媒体から削除する。
【０１３６】
Ｓ４０５により、検索システム１００のデータ削除処理は終了する。
【０１３７】
図９は、検索システム１００の索引削除処理を示すフローチャートである。
【０１３８】
図９のＳ５０１〜Ｓ５０３は、本実施の形態に係る端末プログラムがコンピュータである端末装置２０１に実行させる処理である。Ｓ５０３は通信処理である。
【０１３９】
図９のＳ５０４は、本実施の形態に係るサーバプログラムがコンピュータであるサーバ装置３０１に実行させる処理である。Ｓ５０４の一部は通信処理、Ｓ５０４の残りの部分は索引更新処理である。Ｓ５０４において、一部の索引Ｉがサーバ装置３０１から削除される。
【０１４０】
Ｓ５０１において、ユーザ２００は、キーボード又はマウス等を用いて端末装置２０１に１つ又は複数の削除索引名を指定する。索引削除要求生成部２０８は、削除索引名の入力を受け付ける。
【０１４１】
Ｓ５０２において、索引削除要求生成部２０８は、Ｓ５０１で入力された削除索引名を含む削除索引情報を生成する。
【０１４２】
Ｓ５０３において、通信部２１０は、Ｓ５０２で生成された削除索引情報をサーバ装置３０１に送信する。
【０１４３】
Ｓ５０４において、通信部３０２は、Ｓ５０３で送信された削除索引情報を受信する。索引更新部３０７は、通信部３０２から送られてきた削除索引情報から削除索引名を抽出する。索引保管部３０４は、索引更新部３０７によって制御されることで、索引更新部３０７から送られてきた削除索引名に対応する索引Ｉを記録媒体から削除する。
【０１４４】
Ｓ５０４により、検索システム１００の索引削除処理は終了する。
【０１４５】
図８に示したデータ削除処理と図９に示した索引削除処理は同時に実行されても構わない。例えば、削除データ名と削除索引名との両方を含む削除要求情報を端末装置２０１からサーバ装置３０１に送ることが可能である。
【０１４６】
以下では、検索システム１００の動作の具体例を説明する。
【０１４７】
具体例の説明で使用する記号を、以下のように定義する。
【０１４８】
平文データであるデータＤ＿ｉ及びその平文データを暗号化して得られる暗号化データＣ＿ｉのデータ名を「ｉｄ（Ｄ＿ｉ）」と記す。ただし、データ名ｉｄ（Ｄ＿ｉ）は単なる識別子であり、データＤ＿ｉの中身を表すものではない。つまり、データ名ｉｄ（Ｄ＿ｉ）によってデータＤ＿ｉの内容は知得されないものとする。
【０１４９】
データ名ｉｄ（Ｄ＿ｉ）のビット長をｕとする。入力されたデータ名のビット長がｕより短い場合、例えば整数０をデータ名の前からいくつか連結することでデータ名ｉｄ（Ｄ＿ｉ）をｕビットにする。
【０１５０】
キーワードｗのビット長をｘとする。入力されたキーワードのビット長がｘより短い場合、例えば整数０をキーワードの前からいくつか連結することでキーワードｗをｘビットにする。
【０１５１】
暗号鍵ＥＫのビット長をｋ１、索引鍵ＩＫのビット長をｋ２とする。
【０１５２】
共通鍵暗号方式の暗号化関数Ｅｎｃは、ｋ１ビットの鍵ＥＫとＭビットの平文データＤ＿ｉを入力値として、Ｍビットの暗号化データＣ＿ｉを出力する。共通鍵暗号方式の復号関数Ｄｅｃは、ｋ１ビットの鍵ＥＫとＭビットの暗号化データＣ＿ｉを入力値として、Ｍビットの平文データＤ＿ｉを出力する。入力データのビット長がＭを超えるときは、例えばＣＢＣ（Ｃｉｐｈｅｒ・Ｂｌｏｃｋ・Ｃｈａｉｎｉｎｇ）モード等の暗号利用モードを用いて暗号化を実施する。
【０１５３】
関数Ｈは、秘密情報を用いず、入力値に基づいて乱数値を算出する関数である。関数Ｈは「ハッシュ関数」とも呼ばれる。関数Ｈは、入力値が同じであれば出力値がいつも同じであるような確定的な関数である。
【０１５４】
関数Ｈは、有限ビット長のデータを入力値として、ｙビットのランダムな整数を出力する。ここで、「Ｈ（ａ）＝ｂ」と書くとき、有限ビット長のデータａを入力値として、０から（２ｙ−１）のランダムな整数ｂを出力することを意味する。例えば、ｙ＝１０とすると、Ｈ（ａ）の出力値ｂは０から１０２３の間のランダムな整数である。
【０１５５】
関数ｆは、ある秘密情報を用いて、入力値に基づいて入力値と同じサイズの乱数値を算出する関数である。関数ｆは「擬似ランダム置換」とも呼ばれる。関数ｆは、入力値が同じであれば出力値がいつも同じであるような確定的な関数である。
【０１５６】
関数ｆは、ｋ２ビットの索引鍵ＩＫとｘビットの整数とを入力値として、ｘビットのランダムな整数を出力する。ここで、「ｆ（ＩＫ，ａ）＝ｂ」と書くとき、ｋ２ビットの索引鍵ＩＫとｘビットの整数ａとを入力値として、０から２ｘ−１のランダムな整数ｂを出力することを意味する。例えば、ｘ＝１２とすると、ｆ（ＩＫ，ａ）の出力値ｂは０から４０９５の間のランダムな整数である。
【０１５７】
索引Ｉは、配列構造を持ったデータであり、複数の配列要素を有する。索引Ｉの１つの配列要素に設定できる値の最大のビット長はｕである。
【０１５８】
索引Ｉの配列要素Ｉ［ａｄｄｒ］を識別する値ａｄｄｒを索引Ｉのアドレスという。このａｄｄｒのビット長をｚとする。
【０１５９】
索引Ｉの配列要素のうち、使用される配列要素にだけ記憶領域を確保する。使用される配列要素とは、値が設定されている配列要素のことである。つまり、索引Ｉのアドレス空間は２ｚという指数サイズであり、非常に大きいが、実際には一部のアドレスしか利用せず、かつ、利用していないアドレスには何も設定しない。このため、索引Ｉの実質的なデータサイズは現実的な多項式サイズに抑えられる。
【０１６０】
索引Ｉのデータ名である索引名を「ＩＤ（Ｉ）」と記す。ただし、索引名ＩＤ（Ｉ）は単なる識別子であり、索引Ｉの中身を表すものではない。つまり、索引名ＩＤ（Ｉ）によって索引ＩＤ（Ｉ）の内容は知得されないものとする。
【０１６１】
索引名ＩＤ（Ｉ）のビット長をｖとする。入力された索引名のビット長がｖより短い場合、例えば整数０を索引名の前からいくつか連結することで索引名ＩＤ（Ｉ）をｖビットにする。
【０１６２】
「＃Ｘ」は集合Ｘの要素数を意味する。「Ｙ／／Ｚ」はビット列Ｙとビット列Ｚとの結合又は連結を意味する。その他の記号については、一般的に使用される数学の記号と同様の意味である。
【０１６３】
図１０は、検索システム１００の初期設定処理の具体例を示すフローチャートである。
【０１６４】
図１０のフローチャートは、図５のフローチャートに対応している。Ｓ６０１はＳ１０１に対応し、Ｓ６０２はＳ１０２に対応し、Ｓ６０３はＳ１０３に対応し、Ｓ６０４はＳ１０４に対応する。
【０１６５】
Ｓ６０１において、秘密鍵生成部２０２は、データを暗号化するための具体的な共通鍵暗号方式を決定する。
【０１６６】
Ｓ６０２において、秘密鍵生成部２０２は、Ｓ６０１で決定した共通鍵暗号方式のｋ１ビットの暗号鍵ＥＫをランダムに生成する。
【０１６７】
Ｓ６０３において、秘密鍵生成部２０２は、ｋ２ビットの乱数である索引鍵ＩＫを生成する。
【０１６８】
Ｓ６０４において、秘密鍵管理部２０３は、Ｓ６０２で生成された暗号鍵ＥＫとＳ６０３で生成された索引鍵ＩＫとを記憶する。
【０１６９】
図１１は、検索システム１００のデータ登録処理の具体例を示すフローチャートである。
【０１７０】
図１１のフローチャートは、図６のフローチャートに対応している。Ｓ７０１はＳ２０１に対応し、Ｓ７０２はＳ２０２に対応し、Ｓ７０３はＳ２０３に対応し、Ｓ７０４はＳ２０４に対応し、Ｓ７０５とＳ７０６はＳ２０５に対応し、Ｓ７０７はＳ２０６に対応し、Ｓ７０８はＳ２０７に対応する。
【０１７１】
Ｓ７０１において、ユーザ２００は、キーボード又はマウス等を用いて端末装置２０１に登録データＤ＝｛Ｄ＿１，・・・，Ｄ＿ｎ｝と登録索引名ＩＤ（Ｉ）とを指定する。キーワード設定部２０４は、登録データＤと登録索引名ＩＤ（Ｉ）との入力を受け付ける。
【０１７２】
登録データＤは、１つ以上の平文データＤ＿ｉを含む。添え字ｉは１以上の任意の整数を表す。以下、登録データＤ内のデータ数をｎとする。各データＤ＿ｉのデータ名ｉｄ（Ｄ＿ｉ）をｕビットの整数とする。なお、追加でデータを登録するときは、既に登録されているデータ名と重ならないように異なるｕビットの整数と追加データとを対応付ける。
【０１７３】
ここで、一度に登録できるデータの数をＮとする。Ｎは１以上の整数であり、事前に設定され、かつ、公開されるシステムパラメータとする。Ｎは１０００又は１００００といった現実的な大きさであれば、どのような整数としてもよい。登録データＤ内のデータ数ｎがＮを超えてしまった場合は、登録データＤをデータ数がＮ以下のいくつかのグループに分割し、それらのグループに対してＳ７０１〜Ｓ７０８を繰り返して実行すればよい。
【０１７４】
Ｓ７０２において、キーワード設定部２０４は、Ｓ７０１で入力された登録データＤに関連するキーワード集合Ｗ＝｛Ｗ＿１，・・・，Ｗ＿ｑ｝を生成する。
【０１７５】
キーワード集合Ｗは、１つ以上のキーワードｗを含む。以下、キーワード集合Ｗ内のキーワード数をｑとする。キーワードｗは、登録データＤの少なくともいずれかのデータＤ＿ｉに関連する。
【０１７６】
Ｓ７０３において、キーワード設定部２０４は、Ｓ７０１で入力された登録索引名ＩＤ（Ｉ）とＳ７０２で生成されたキーワード集合Ｗに含まれる各キーワードｗに対して、検索結果情報（ＩＤ（Ｉ），ｗ，Ｄ（ｗ））を生成する。ここで、Ｄ（ｗ）はキーワードｗに関連するデータのデータ名を含む集合であり、｛ｉｄ（Ｄ＿ｓ（１）），・・・，ｉｄ（Ｄ＿ｓ（ｍ））｝で表わされる。キーワードｗに関連するデータとは、キーワードｗを用いた検索でヒットするデータである。ｍは１以上の整数である。ｉｄ（Ｄ＿ｓ（１）），・・・，ｉｄ（Ｄ＿ｓ（ｍ））はｕビットの互いに異なる整数である。
【０１７７】
Ｓ７０４において、データ暗号化部２０５は、秘密鍵管理部２０３から暗号鍵ＥＫを読み出す。データ暗号化部２０５は、暗号鍵ＥＫを用いて、Ｓ７０１で入力された登録データＤ内の各データＤ＿ｉを暗号化して暗号化データＣ＿ｉ＝Ｅｎｃ（ＥＫ，Ｄ＿ｉ）（１≦ｉ≦ｎ）を生成する。
【０１７８】
Ｓ７０５において、索引生成部２０６は、秘密鍵管理部２０３から索引鍵ＩＫを読み出す。索引生成部２０６は、Ｓ７０２で生成された各キーワードｗに対して、ｆ（ＩＫ，ｗ）及びＨ（ｆ（ＩＫ，ｗ），１），・・・，Ｈ（ｆ（ＩＫ，ｗ），ｍ）を計算する。
【０１７９】
Ｓ７０６において、索引生成部２０６は、各キーワードｗに対応するＳ７０５で生成したＨ（ｆ（ＩＫ，ｗ），１），・・・，Ｈ（ｆ（ＩＫ，ｗ），ｍ）及びＳ７０３で生成されたＤ（ｗ）＝｛ｉｄ（Ｄ＿ｓ（１）），・・・，ｉｄ（Ｄ＿ｓ（ｍ））｝に対して、Ｉ［Ｈ（ｆ（ＩＫ，ｗ），１）］＝ｉｄ（Ｄ＿ｓ（１）），・・・，Ｉ［Ｈ（ｆ（ＩＫ，ｗ），ｍ）］＝ｉｄ（Ｄ＿ｓ（ｍ））となるように索引Ｉを設定する。即ち、索引生成部２０６は、Ｈ（ｆ（ＩＫ，ｗ），ｊ）を索引Ｉのアドレスとして設定し、そのアドレスの配列要素にｉｄ（Ｄ＿ｓ（ｊ））を設定する。添え字ｊは１以上の整数である。
【０１８０】
Ｓ７０７において、通信部２１０は、Ｓ７０４で生成された暗号化データＣ＝｛Ｃ＿１，・・・，Ｃ＿ｎ｝と、Ｓ７０１で入力された索引名ＩＤ（Ｉ）とＳ７０６で生成された索引Ｉとのペアである索引情報（ＩＤ（Ｉ），Ｉ）とをサーバ装置３０１に送信する。
【０１８１】
Ｓ７０８において、通信部３０２は、Ｓ７０７で送信された暗号化データＣと索引情報（ＩＤ（Ｉ），Ｉ）とを受信する。その後、データ保管部３０３は、暗号化データＣを記録媒体に記憶する。索引保管部３０４は、索引情報（ＩＤ（Ｉ），Ｉ）を記録媒体に記憶する。
【０１８２】
図１２は、検索システム１００のデータ検索処理の具体例を示すフローチャートである。
【０１８３】
図１２のフローチャートは、図７のフローチャートに対応している。Ｓ８０１はＳ３０１に対応し、Ｓ８０２はＳ３０２に対応し、Ｓ８０３はＳ３０３に対応し、Ｓ８０４はＳ３０４に対応し、Ｓ８０５はＳ３０５に対応し、Ｓ８０６はＳ３０６に対応し、Ｓ８０７はＳ３０７に対応し、Ｓ８０８はＳ３０８に対応し、Ｓ８０９はＳ３０９に対応し、Ｓ８１０はＳ３１０に対応する。
【０１８４】
Ｓ８０１において、ユーザ２００は、キーボード又はマウス等を用いて端末装置２０１にキーワードｗと検索索引名ＩＤ（Ｉ）とを指定する。キーワード暗号化部２０９は、キーワードｗと検索索引名ＩＤ（Ｉ）との入力を受け付ける。複数のキーワードｗが入力されてもよい。複数の検索索引名ＩＤ（Ｉ）が入力されてもよい。
【０１８５】
Ｓ８０２において、キーワード暗号化部２０９は、秘密鍵管理部２０３から索引鍵ＩＫを読み出す。キーワード暗号化部２０９は、Ｓ８０１で入力されたキーワードｗに対して、検索シードｆ（ＩＫ，ｗ）を計算する。
【０１８６】
Ｓ８０３において、キーワード暗号化部２０９は、Ｓ８０１で入力された検索索引名ＩＤ（Ｉ）を含む検索索引情報を生成する。なお、Ｓ８０１で複数の検索索引名ＩＤ（Ｉ）が入力された場合、キーワード暗号化部２０９は、それらの索引名ＩＤ（Ｉ）を全て含む検索索引情報を生成する。
【０１８７】
Ｓ８０４において、通信部２１０は、Ｓ８０２で生成された検索シードｆ（ＩＫ，ｗ）と、Ｓ８０３で生成された検索索引情報とをサーバ装置３０１に送信する。
【０１８８】
Ｓ８０５において、通信部３０２は、Ｓ８０４で送信された検索シードｆ（ＩＫ，ｗ）と検索索引情報を受信する。その後、検索部３０５は、通信部３０２から送られてきた検索索引情報から検索索引名ＩＤ（Ｉ）を抽出する。検索部３０５は、検索索引名ＩＤ（Ｉ）に対応する索引情報（ＩＤ（Ｉ），Ｉ）を索引保管部３０４から読み出す。検索部３０５は、複数の検索索引名ＩＤ（Ｉ）があれば、索引名ごとに索引情報（ＩＤ（Ｉ），Ｉ）を読み出す。
【０１８９】
Ｓ８０６において、検索部３０５は、通信部３０２から送られてきた検索シードｆ（ＩＫ，ｗ）を検索キー生成部３０６に送信する。検索キー生成部３０６は、検索シードｆ（ＩＫ，ｗ）から検索キー｛Ｈ（ｆ（ＩＫ，ｗ），１），・・・，Ｈ（ｆ（ＩＫ，ｗ），Ｎ）｝を生成する。Ｎは１以上の整数であり、事前に設定された前述のシステムパラメータである。
【０１９０】
Ｓ８０７において、検索部３０５は、Ｓ８０６で生成された検索キー｛Ｈ（ｆ（ＩＫ，ｗ），１），・・・，Ｈ（ｆ（ＩＫ，ｗ），Ｎ）｝を用いて、Ｓ８０５で読み出した索引情報（ＩＤ（Ｉ），Ｉ）の索引Ｉにおける、｛Ｈ（ｆ（ＩＫ，ｗ），１），・・・，Ｈ（ｆ（ＩＫ，ｗ），Ｎ）｝と一致するアドレスを特定する。Ｉ［Ｈ（ｆ（ＩＫ，ｗ），１）］＝ｉｄ（Ｄ＿ｔ（１）），・・・，Ｉ［Ｈ（ｆ（ＩＫ，ｗ），Ｎ）］＝ｉｄ（Ｄ＿ｔ（Ｎ））であるから、検索部３０５は、特定したアドレスから異なるｕビットの複数のデータ名ｉｄ（Ｄ＿ｔ（１）），・・・，ｉｄ（Ｄ＿ｔ（Ｎ））を抽出する。以下、集合｛ｉｄ（Ｄ＿ｔ（１）），・・・，ｉｄ（Ｄ＿ｔ（Ｎ））｝を検索結果情報と呼ぶ。
【０１９１】
ここで、索引ＩのＨ（ｆ（ＩＫ，ｗ），１），・・・，Ｈ（ｆ（ＩＫ，ｗ），ｊ）と一致するアドレスに格納されたデータ名ｉｄ（Ｄ＿ｔ（１）），・・・，ｉｄ（Ｄ＿ｔ（ｊ））が存在するが、Ｈ（ｆ（ＩＫ，ｗ），ｊ＋１）と一致するアドレスに格納されたデータ名ｉｄ（Ｄ＿ｔ（ｊ＋１）））は存在しないとする。この場合、Ｓ７０６における索引Ｉの生成方法によれば、Ｈ（ｆ（ＩＫ，ｗ），ｊ＋２），・・・，Ｈ（ｆ（ＩＫ，ｗ），Ｎ）と一致するアドレスに格納されたデータ名ｉｄ（Ｄ＿ｔ（ｊ＋２）），・・・，ｉｄ（Ｄ＿ｔ（Ｎ））も存在しないことがわかる。そのため、検索部３０５は、Ｈ（ｆ（ＩＫ，ｗ），ｊ＋２），・・・，Ｈ（ｆ（ＩＫ，ｗ），Ｎ）に対するデータ名の抽出処理を実施しないでよい。つまり、検索部３０５は、データ名ｉｄ（Ｄ＿ｔ（ｊ＋１）），・・・，ｉｄ（Ｄ＿ｔ（Ｎ））を空文字に設定して、検索結果情報｛ｉｄ（Ｄ＿ｔ（１）），・・・，ｉｄ（Ｄ＿ｔ（Ｎ））｝を生成すればよい。即ち、検索部３０５は、検索結果情報｛ｉｄ（Ｄ＿ｔ（１）），・・・，ｉｄ（Ｄ＿ｔ（ｊ））｝を生成すればよい。ｉｄ（Ｄ＿ｔ（１）），・・・，ｉｄ（Ｄ＿ｔ（ｊ））は互いに異なるｕビットの整数である。
【０１９２】
Ｈ（ｆ（ＩＫ，ｗ），１），・・・，Ｈ（ｆ（ＩＫ，ｗ），Ｎ）と一致するアドレスに格納されたデータ名ｉｄ（Ｄ＿ｔ（１）），・・・，ｉｄ（Ｄ＿ｔ（Ｎ））がいずれも存在しない場合、検索部３０５は、検索結果情報を「なし」と設定する。即ち、Ｈ（ｆ（ＩＫ，ｗ），１），・・・，Ｈ（ｆ（ＩＫ，ｗ），Ｎ）のいずれとも一致するアドレスが索引Ｉの中にない場合、検索部３０５は、検索結果情報を「なし」と設定する。
【０１９３】
なお、Ｓ８０６では、検索部３０５が、検索シードｆ（ＩＫ，ｗ）から検索キーＨ（ｆ（ＩＫ，ｗ），１），・・・，Ｈ（ｆ（ＩＫ，ｗ），Ｎ）を全て生成しているが、Ｓ８０６とＳ８０７とを交互に実行しても構わない。例えば、検索部３０５は、検索シードｆ（ＩＫ，ｗ）から検索キーＨ（ｆ（ＩＫ，ｗ），１）を生成した直後に、索引Ｉの配列要素Ｉ［Ｈ（ｆ（ＩＫ，ｗ），１）］からデータ名ｉｄ（Ｄ＿ｔ（１））を抜き出す。次に、検索部３０５は、検索シードｆ（ＩＫ，ｗ）から検索キーＨ（ｆ（ＩＫ，ｗ），２）を生成した直後に、索引Ｉの配列要素Ｉ［Ｈ（ｆ（ＩＫ，ｗ），２）］からデータ名ｉｄ（Ｄ＿ｔ（２））を抜き出す。その後も、検索部３０５は、同様の処理を繰り返す。このような処理手順を用いることで、索引Ｉの中に存在しないアドレスＨ（ｆ（ＩＫ，ｗ），ｊ＋２），・・・，Ｈ（ｆ（ＩＫ，ｗ），Ｎ）の計算を省略することができる。
【０１９４】
Ｓ８０８において、検索部３０５は、Ｓ８０７で抽出したｕビットのデータ名ｉｄ（Ｄ＿ｔ（１）），・・・，ｉｄ（Ｄ＿ｔ（Ｎ））に対応する暗号化データＣ＿ｔ（１），・・・，Ｃ＿ｔ（Ｎ）をデータ保管部３０３から読み出す。ある整数ｊに対して、データ名ｉｄ（Ｄ＿ｔ（ｊ＋１）），・・・，ｉｄ（Ｄ＿ｔ（Ｎ））が空文字である場合は、暗号化データＣ＿ｔ（ｊ＋１），・・・，Ｃ＿ｔ（Ｎ）は存在しないため、これらの暗号化データに関する処理は実行されない。Ｓ８０７で抽出された検索結果情報が「なし」の場合は、Ｓ８０８の処理自体が実行されない。
【０１９５】
Ｓ８０９において、通信部３０２は、Ｓ８０８で読み出された暗号化データ｛Ｃ＿ｔ（１），・・・，Ｃ＿ｔ（Ｎ）｝を検索部３０５から受け取る。通信部３０２は、暗号化データ｛Ｃ＿ｔ（１），・・・，Ｃ＿ｔ（Ｎ）｝を端末装置２０１に送信する。なお、Ｓ８０７で抽出された検索結果情報が「なし」の場合、通信部３０２は、「暗号化データなし」という情報を端末装置２０１に送信する。
【０１９６】
Ｓ８１０において、通信部２１０は、Ｓ８０９で送信された暗号化データ｛Ｃ＿ｔ（１），・・・，Ｃ＿ｔ（Ｎ）｝を受信する。その後、データ復号部２１１は、秘密鍵管理部２０３に記憶されている暗号鍵ＥＫを用いて、各暗号化データＣ＿ｔ（ｉ）を復号して平文データＤ＿ｔ（ｉ）＝Ｄｅｃ（ＥＫ，Ｃ＿ｔ（ｉ））（１≦ｉ≦Ｎ）を生成する。なお、暗号化データ｛Ｃ＿ｔ（ｊ＋１），・・・，Ｃ＿ｔ（Ｎ）｝が存在しない場合、データ復号部２１１は、それらの暗号化データに対する処理は何も行わない。また、通信部２１０が「暗号化データなし」という情報を受信した場合、データ復号部２１１は、何も行わない。データ復号部２１１は、復号して得られた平文データ｛Ｄ＿ｔ（１），・・・，Ｄ＿ｔ（Ｎ）｝をディスプレイ又はプリンタ等に出力する。通信部２１０が「暗号化データなし」という情報を受信した場合、データ復号部２１１は、検索にヒットするデータがなかったことを示すメッセージ等を出力する。
【０１９７】
図１３は、検索システム１００のデータ削除処理の具体例を示すフローチャートである。
【０１９８】
図１３のフローチャートは、図８のフローチャートに対応している。Ｓ９０１はＳ４０１に対応し、Ｓ９０２はＳ４０２に対応し、Ｓ９０３はＳ４０３に対応し、Ｓ９０４はＳ４０４に対応し、Ｓ９０５はＳ４０５に対応する。
【０１９９】
Ｓ９０１において、ユーザ２００は、キーボード又はマウス等を用いて端末装置２０１に削除データ名ＤＥＬ＝｛ｉｄ（Ｄ＿ｄ（１）），・・・，ｉｄ（Ｄ＿ｄ（ｋ））｝を指定する。データ削除要求生成部２０７は、削除データ名ＤＥＬの入力を受け付ける。ｋは１以上の整数である。ｉｄ（Ｄ＿ｄ（１）），・・・，ｉｄ（Ｄ＿ｄ（ｋ））は互いに異なるｕビットの整数とする。
【０２００】
Ｓ９０２において、データ削除要求生成部２０７は、Ｓ９０１で入力された削除データ名ＤＥＬ＝｛ｉｄ（Ｄ＿ｄ（１）），・・・，ｉｄ（Ｄ＿ｄ（ｋ））｝を含む削除データ情報を生成する。
【０２０１】
Ｓ９０３において、通信部２１０は、Ｓ９０２で生成された削除データ情報をサーバ装置３０１に送信する。
【０２０２】
Ｓ９０４において、通信部３０２は、Ｓ９０３で送信された削除データ情報を受信する。索引更新部３０７は、通信部３０２から送られてきた削除データ情報から削除データ名ＤＥＬ＝｛ｉｄ（Ｄ＿ｄ（１）），・・・，ｉｄ（Ｄ＿ｄ（ｋ））｝を抽出する。索引保管部３０４は、記録媒体から全ての索引Ｉを読み出し、ｉｄ（Ｄ＿ｄ（１）），・・・，ｉｄ（Ｄ＿ｄ（ｋ））のいずれかを含んでいる索引Ｉを見つけ出す。索引保管部３０４は、該当する索引Ｉを見つけた場合は、その索引Ｉの該当するアドレスから削除データ名を削除する。本例では、索引保管部３０４は、その削除データ名が含まれていたアドレス自体を索引Ｉから削除する。
【０２０３】
Ｓ９０５において、データ保管部３０３は、索引更新部３０７から送られてきた削除データ名ＤＥＬ＝｛ｉｄ（Ｄ＿ｄ（１）），・・・，ｉｄ（Ｄ＿ｄ（ｋ））｝に対応する暗号化データを記録媒体から削除する。
【０２０４】
図１４は、検索システム１００の索引削除処理の具体例を示すフローチャートである。
【０２０５】
図１４のフローチャートは、図９のフローチャートに対応している。Ｓ１００１はＳ５０１に対応し、Ｓ１００２はＳ５０２に対応し、Ｓ１００３はＳ５０３に対応し、Ｓ１００４はＳ５０４に対応する。
【０２０６】
Ｓ１００１において、ユーザ２００は、キーボード又はマウス等を用いて端末装置２０１に削除索引名ＤＥＬ−Ｉ＝｛ＩＤ（Ｉ＿１），・・・，ＩＤ（Ｉ＿ｋ）｝を指定する。索引削除要求生成部２０８は、削除索引名ＤＥＬ−Ｉの入力を受け付ける。ｋは１以上の整数である。ＩＤ（Ｉ＿１），・・・，ＩＤ（Ｉ＿ｋ）は互いに異なるｖビットの整数とする。
【０２０７】
Ｓ１００２において、索引削除要求生成部２０８は、Ｓ１００１で入力された削除索引名ＤＥＬ−Ｉを含む削除索引情報を生成する。
【０２０８】
Ｓ１００３において、通信部２１０は、Ｓ１００２で生成された削除索引情報をサーバ装置３０１に送信する。
【０２０９】
Ｓ１００４において、通信部３０２は、Ｓ１００３で送信された削除索引情報を受信する。索引更新部３０７は、通信部３０２から送られてきた削除索引情報から削除索引名ＤＥＬ−Ｉ＝｛ＩＤ（Ｉ＿１），・・・，ＩＤ（Ｉ＿ｋ）｝を抽出する。索引保管部３０４は、索引更新部３０７から送られてきたＩＤ（Ｉ＿１），・・・，ＩＤ（Ｉ＿ｋ）に対応する索引を記録媒体から削除する。
【０２１０】
＊＊＊効果の説明＊＊＊
本実施の形態は、例えば、以下のような効果を奏する。
【０２１１】
本実施の形態において、検索を実行する側であるサーバ装置３０１は、入力されるキーワードに対して一意の数値を出力する関数Ｈを用いて検索を行う。サーバ装置３０１は、関数Ｈから出力される数値に１対１で対応する複数の格納領域を有するデータ構造を、索引Ｉとして保管する。サーバ装置３０１は、関数Ｈに入力されるキーワードがあれば検索を実行できる。検索を要求する側である端末装置２０１は、キーワードをサーバ装置３０１に渡すだけで検索を要求できる。よって、本実施の形態によれば、検索を要求する側と検索を実行する側との全体的な処理効率が高まる。
【０２１２】
本実施の形態では、端末装置２０１が、キーワードを暗号化して検索シードを生成し、平文のキーワードの代わりに検索シードをサーバ装置３０１に渡す。よって、本実施の形態によれば、サーバ装置３０１で検索されるデータだけでなく、キーワードも秘匿することができる。即ち、安全性の高い秘匿検索が可能となる。
【０２１３】
本実施の形態では、従来の方式とは異なり、検索処理において、検索者であるユーザ２００によって利用される端末装置２０１が検索を行うための情報を生成するコストを低くできる。正確に述べると、従来の方式における検索クエリの生成コストは登録データ数に依存していたのに対して、検索システム１００における検索シードの生成コストは登録データ数に依存しない。そのため、端末装置２０１における検索処理を効率的に実行できる。本実施の形態は、計算資源が乏しいＩＣカードのような機器を端末装置２０１として用いた場合に特に有効である。
【０２１４】
本実施の形態では、従来の方式とは異なり、検索処理において、検索を行うための情報のデータサイズが登録データ数に依存しない。そのため、検索を行うための情報のデータサイズを小さくできる。正確に述べると、従来の方式における検索クエリのデータサイズは登録データ数に依存していたのに対して、検索システム１００における検索シードのデータサイズは登録データ数に依存しない。そのため、データサイズを小さくできる。本実施の形態は、通信の帯域が狭い場合に特に有効である。
【０２１５】
検索システム１００は、データ及びキーワードを暗号化したまま検索を行うことできる。そのため、検索されたデータに関する情報も、検索に用いられたキーワードに関する情報も漏洩しない。よって、安全な検索が可能である。
【０２１６】
図１５は、本実施の形態に係る端末装置２０１及びサーバ装置３０１のハードウェア構成の例を示す図である。
【０２１７】
図１５の例において、端末装置２０１及びサーバ装置３０１は、それぞれコンピュータであり、出力装置９１０、入力装置９２０、記憶装置９３０、処理装置９４０といったハードウェアを備える。ハードウェアは、本発明の実施の形態の説明において「部」として説明するものによって利用される。
【０２１８】
出力装置９１０は、例えば、ＬＣＤ（Ｌｉｑｕｉｄ・Ｃｒｙｓｔａｌ・Ｄｉｓｐｌａｙ）等の表示装置、プリンタ、通信モジュールである。出力装置９１０は、本発明の実施の形態の説明において「部」として説明するものによってデータ、情報、信号の出力又は送信のために利用される。
【０２１９】
入力装置９２０は、例えば、キーボード、マウス、タッチパネル、通信モジュールである。入力装置９２０は、本発明の実施の形態の説明において「部」として説明するものによってデータ、情報、信号の入力又は受信のために利用される。
【０２２０】
記憶装置９３０は、例えば、ＲＯＭ（Ｒｅａｄ・Ｏｎｌｙ・Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ・Ａｃｃｅｓｓ・Ｍｅｍｏｒｙ）、ＨＤＤ（Ｈａｒｄ・Ｄｉｓｋ・Ｄｒｉｖｅ）、ＳＳＤ（Ｓｏｌｉｄ・Ｓｔａｔｅ・Ｄｒｉｖｅ）である。記憶装置９３０には、プログラム９３１、ファイル９３２が記憶される。プログラム９３１には、本発明の実施の形態の説明において「部」として説明するものの処理を実行するプログラムが含まれる。ファイル９３２には、本発明の実施の形態の説明において「部」として説明するものによって演算、加工、読み取り、書き込み、利用、入力、出力等が行われるデータ、情報、信号等が含まれる。前述した記録媒体は、記憶装置９３０に相当する。
【０２２１】
処理装置９４０は、例えば、ＣＰＵ（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ）である。処理装置９４０は、バス等を介して他のハードウェアデバイスと接続され、それらのハードウェアデバイスを制御する。処理装置９４０は、記憶装置９３０からプログラム９３１を読み出し、プログラム９３１を実行する。処理装置９４０は、本発明の実施の形態の説明において「部」として説明するものによって演算、加工、読み取り、書き込み、利用、入力、出力等を行うために利用される。
【０２２２】
本発明の実施の形態の説明において「部」として説明するものは、「部」を「回路」、「装置」、「機器」に読み替えたものであってもよい。また、本発明の実施の形態の説明において「部」として説明するものは、「部」を「工程」、「手順」、「処理」に読み替えたものであってもよい。即ち、本発明の実施の形態の説明において「部」として説明するものは、ソフトウェアのみ、ハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせで実現される。ソフトウェアは、プログラム９３１として、記憶装置９３０に記憶される。プログラム９３１は、本発明の実施の形態の説明において「部」として説明するものとしてコンピュータを機能させるものである。或いは、プログラム９３１は、本発明の実施の形態の説明において「部」として説明するものの処理をコンピュータに実行させるものである。
【０２２３】
以上、本発明の実施の形態について説明したが、この実施の形態を部分的に実施しても構わない。例えば、この実施の形態の説明において「部」として説明するもののうち、いずれか１つのみを採用してもよいし、いくつかの任意の組み合わせを採用してもよい。なお、本発明は、この実施の形態に限定されるものではなく、必要に応じて種々の変更が可能である。
【符号の説明】
【０２２４】
１００  検索システム、１０１  社内ＬＡＮ、１０２  インターネット、２００  ユーザ、２０１  端末装置、２０２  秘密鍵生成部、２０３  秘密鍵管理部、２０４  キーワード設定部、２０５  データ暗号化部、２０６  索引生成部、２０７  データ削除要求生成部、２０８  索引削除要求生成部、２０９  キーワード暗号化部、２１０  通信部、２１１  データ復号部、３００  データセンタ、３０１  サーバ装置、３０２  通信部、３０３  データ保管部、３０４  索引保管部、３０５  検索部、３０６  検索キー生成部、３０７  索引更新部、９１０  出力装置、９２０  入力装置、９３０  記憶装置、９３１  プログラム、９３２  ファイル、９４０  処理装置。
【図１】
2016063344.tif 000003
【図２】
2016063344.tif 000004
【図３】
2016063344.tif 000005
【図４】
2016063344.tif 000006
【図５】
2016063344.tif 000007
【図６】
2016063344.tif 000008
【図７】
2016063344.tif 000009
【図８】
2016063344.tif 000010
【図９】
2016063344.tif 000011
【図１０】
2016063344.tif 000012
【図１１】
2016063344.tif 000013
【図１２】
2016063344.tif 000014
【図１３】
2016063344.tif 000015
【図１４】
2016063344.tif 000016
【図１５】
2016063344.tif 000017
【手続補正書】
【提出日】平成28年9月14日(2016.9.14)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数の暗号化データを保管するデータ保管部と、
入力されるキーワードに対して一意の数値を出力する関数を用いて検索を行うためのデータ構造であり、前記関数から出力される数値に１対１で対応する複数の格納領域を有し、前記複数の暗号化データのいずれかが暗号化される前のデータである平文データに対応する複数のキーワードについて、それぞれのキーワードが入力されることで前記関数から出力された数値に対応する格納領域に、それぞれのキーワードが対応する平文データが暗号化された後のデータである暗号化データの識別子を格納するデータ構造を、索引として保管する索引保管部と、
前記複数のキーワードのいずれかを端末装置から受信する通信部と、
前記通信部により受信されたキーワードを前記関数に入力し、前記関数から出力された数値に対応する格納領域を前記索引から特定し、特定した格納領域に格納された識別子に対応する暗号化データを前記データ保管部から取得する検索部と
を備えるサーバ装置。
【請求項２】
前記複数の暗号化データは、暗号鍵を保有する前記端末装置により前記暗号鍵を用いて複数の平文データが暗号化された後のデータである、請求項１に記載のサーバ装置。
【請求項３】
前記索引は、前記端末装置により生成されたデータ構造である、請求項２に記載のサーバ装置。
【請求項４】
前記関数は、索引鍵を保有する前記端末装置により前記索引鍵を用いて暗号化されたキーワードに対して一意の数値を出力する関数である、請求項２又は３に記載のサーバ装置。
【請求項５】
前記通信部は、前記端末装置により前記索引鍵を用いて暗号化されたキーワードを前記端末装置から受信する、請求項４に記載のサーバ装置。
【請求項６】
前記通信部は、前記検索部により取得された暗号化データを前記端末装置に送信する、請求項５に記載のサーバ装置。
【請求項７】
前記端末装置により削除する暗号化データの識別子が指定された場合に、指定された識別子に対応する暗号化データを前記データ保管部から削除するとともに、指定された識別子が格納された格納領域を前記索引から特定し、特定した格納領域の内容を削除する索引更新部
をさらに備える、請求項２から６のいずれか１項に記載のサーバ装置。
【請求項８】
前記関数は、入力されるキーワードと数値との組み合わせに対して一意の数値を出力する関数であり、
前記索引は、共通のキーワードが対応する２つ以上の平文データについて、前記共通のキーワードとそれぞれの平文データを識別するための数値とが入力されることで前記関数から出力された数値に対応する格納領域に、それぞれの平文データが暗号化された後のデータである暗号化データの識別子を格納するデータ構造であり、
前記検索部は、前記複数のキーワードのいずれかとともに予め設定された範囲内の数値を１つずつ前記関数に入力し、前記関数から出力された数値に対応する格納領域が前記索引に存在する場合に、その存在する格納領域に格納された識別子に対応する暗号化データを前記データ保管部から取得する、請求項１から７のいずれか１項に記載のサーバ装置。
【請求項９】
請求項１から８のいずれか１項に記載のサーバ装置と、
暗号鍵を用いて複数の平文データを暗号化することで前記複数の暗号化データを生成する前記端末装置と
を備える検索システム。
【請求項１０】
暗号鍵を用いて複数の平文データを暗号化することで複数の暗号化データを生成するデータ暗号化部と、
入力されるキーワードに対して一意の数値を出力する関数を用いて検索を行うためのデータ構造であり、前記関数から出力される数値に１対１で対応する複数の格納領域を有し、前記複数の平文データのいずれかに対応する複数のキーワードについて、それぞれのキーワードが入力されることで前記関数から出力された数値に対応する格納領域に、それぞれのキーワードが対応する平文データが暗号化された後のデータである暗号化データの識別子を格納するデータ構造を、索引として生成する索引生成部と、
前記データ暗号化部により生成された複数の暗号化データと、前記索引生成部により生成された索引とをサーバ装置に送信する通信部と
を備え、
前記通信部は、前記複数のキーワードのいずれかを前記サーバ装置に送信し、送信したキーワードが前記サーバ装置により前記関数に入力され、前記関数から出力された数値に基づいて前記索引の検索が行われることで前記サーバ装置により取得された暗号化データを前記サーバ装置から受信する端末装置。
【請求項１１】
前記索引生成部は、前記複数のキーワードについて、索引鍵を用いてそれぞれのキーワードを暗号化し、暗号化したキーワードを前記関数に入力し、前記関数から出力された数値に対応する格納領域に、暗号化したキーワードが対応する平文データが暗号化された後のデータである暗号化データの識別子を格納するデータ構造を、前記索引として生成する、請求項１０に記載の端末装置。
【請求項１２】
前記索引鍵を用いてキーワードを暗号化するキーワード暗号化部
をさらに備え、
前記通信部は、前記キーワード暗号化部により暗号化されたキーワードを前記サーバ装置に送信する、請求項１１に記載の端末装置。
【請求項１３】
前記暗号鍵に対応する復号鍵を用いて前記通信部により受信された暗号化データを復号するデータ復号部
をさらに備える、請求項１０から１２のいずれか１項に記載の端末装置。
【請求項１４】
前記関数は、入力されるキーワードと数値との組み合わせに対して一意の数値を出力する関数であり、
前記索引生成部は、共通のキーワードが対応する２つ以上の平文データについて、前記共通のキーワードとそれぞれの平文データを識別するための数値とを前記関数に入力し、前記関数から出力された数値に対応する格納領域に、それぞれの平文データが暗号化された後のデータである暗号化データの識別子を格納するデータ構造を、前記索引として生成する、請求項１０から１３のいずれか１項に記載の端末装置。
【請求項１５】
複数の暗号化データを保管するデータ保管部と、入力されるキーワードに対して一意の数値を出力する関数を用いて検索を行うためのデータ構造であり、前記関数から出力される数値に１対１で対応する複数の格納領域を有し、前記複数の暗号化データのいずれかが暗号化される前のデータである平文データに対応する複数のキーワードについて、それぞれのキーワードが入力されることで前記関数から出力された数値に対応する格納領域に、それぞれのキーワードが対応する平文データが暗号化された後のデータである暗号化データの識別子を格納するデータ構造を、索引として保管する索引保管部とを備えるサーバ装置が、前記複数のキーワードのいずれかを端末装置から受信し、
前記サーバ装置が、受信したキーワードを前記関数に入力し、前記関数から出力された数値に対応する格納領域を前記索引から特定し、特定した格納領域に格納された識別子に対応する暗号化データを前記データ保管部から取得する検索方法。
【請求項１６】
複数の暗号化データを保管するデータ保管部と、入力されるキーワードに対して一意の数値を出力する関数を用いて検索を行うためのデータ構造であり、前記関数から出力される数値に１対１で対応する複数の格納領域を有し、前記複数の暗号化データのいずれかが暗号化される前のデータである平文データに対応する複数のキーワードについて、それぞれのキーワードが入力されることで前記関数から出力された数値に対応する格納領域に、それぞれのキーワードが対応する平文データが暗号化された後のデータである暗号化データの識別子を格納するデータ構造を、索引として保管する索引保管部とを備えるコンピュータに、
前記複数のキーワードのいずれかを端末装置から受信する通信処理と、
前記通信処理により受信されたキーワードを前記関数に入力し、前記関数から出力された数値に対応する格納領域を前記索引から特定し、特定した格納領域に格納された識別子に対応する暗号化データを前記データ保管部から取得する検索処理と
を実行させるサーバプログラム。
【請求項１７】
コンピュータに、
暗号鍵を用いて複数の平文データを暗号化することで複数の暗号化データを生成するデータ暗号化処理と、
入力されるキーワードに対して一意の数値を出力する関数を用いて検索を行うためのデータ構造であり、前記関数から出力される数値に１対１で対応する複数の格納領域を有し、前記複数の平文データのいずれかに対応する複数のキーワードについて、それぞれのキーワードが入力されることで前記関数から出力された数値に対応する格納領域に、それぞれのキーワードが対応する平文データが暗号化された後のデータである暗号化データの識別子を格納するデータ構造を、索引として生成する索引生成処理と、
前記データ暗号化処理により生成された複数の暗号化データと、前記索引生成処理により生成された索引とをサーバ装置に送信する通信処理と
を実行させ、
前記通信処理は、前記複数のキーワードのいずれかを前記サーバ装置に送信し、送信したキーワードが前記サーバ装置により前記関数に入力され、前記関数から出力された数値に基づいて前記索引の検索が行われることで前記サーバ装置により取得された暗号化データを前記サーバ装置から受信する端末プログラム。
【国際調査報告】
2016063344.tif 000018
2016063344.tif 000019