(57)【要約】  データ分割部（３０５）は、保管データＤを、前記文字列データＤの始まりから終わりに向かうＮ個の要素データｗ１，ｗ２，．．．，ｗＮに分割する。部分文字列生成部（３０６）は、要素データｗ１，ｗ２，．．．，ｗＮから、集合Ａ＝｛Ａ１，Ａ２，．．．，ＡＮ｝，集合Ａの要素Ａｉ＝｛（ｗｉ），（ｗｉｗｉ＋１），．．．，（ｗｉｗｉ＋１．．．ｗＮ）｝，ｉ＝１，．．．，Ｎ，を生成する。位置情報割当部（３０７）は、要素Ａｉの成分である（ｗｉ），（ｗｉｗｉ＋１），．．．，（ｗｉｗｉ＋１．．．ｗＮ）のそれぞれに位置情報ｉを対応させることにより、集合Ｂ＝｛Ｂ１，Ｂ２，．．．，ＢＮ｝、集合Ｂの要素Ｂｉ＝｛（ｉ，ｗｉ），（ｉ，ｗｉｗｉ＋１），．．．，（ｉ，ｗｉｗｉ＋１．．．ｗＮ）｝を生成する。暗号化部（３０８）は、要素Ｂｉに含まれる成分である（ｉ，ｗｉ），（ｉ，ｗｉｗｉ＋１），．．．，（ｉ，ｗｉｗｉ＋１．．．ｗＮ）のそれぞれを暗号化する。
2017122352.tif 000002
【特許請求の範囲】
【請求項１】
文字列データＤを、前記文字列データＤの始まりから終わりに向かうＮ個の要素データｗ１，ｗ２，．．．，ｗＮに分割するデータ分割部と、
前記Ｎ個の要素データｗ１，ｗ２，．．．，ｗＮから、
集合Ａ＝｛Ａ１，Ａ２，．．．，ＡＮ｝，
集合Ａの要素Ａｉ＝｛（ｗｉ），（ｗｉｗｉ＋１），．．．，（ｗｉｗｉ＋１．．．ｗＮ）｝，ｉ＝１，．．．，Ｎ，
を生成する部分文字列生成部と、
前記要素Ａｉの成分である（ｗｉ），（ｗｉｗｉ＋１），．．．，（ｗｉｗｉ＋１．．．ｗＮ）のそれぞれに位置情報ｉを対応させることにより、
集合Ｂ＝｛Ｂ１，Ｂ２，．．．，ＢＮ｝、
集合Ｂの要素Ｂｉ＝｛（ｉ，ｗｉ），（ｉ，ｗｉｗｉ＋１），．．．，（ｉ，ｗｉｗｉ＋１．．．ｗＮ）｝
を生成する位置情報割当部と、
前記要素Ｂｉに含まれる成分である（ｉ，ｗｉ），（ｉ，ｗｉｗｉ＋１），．．．，（ｉ，ｗｉｗｉ＋１．．．ｗＮ）のそれぞれを暗号化する暗号化部と
を備えた暗号化装置。
【請求項２】
前記暗号化部は、
前記要素Ｂｉに含まれる各成分を暗号化する場合に、前記要素Ｂｉに含まれる各成分を、前記文字列データＤを識別する識別子と共に暗号化する請求項１に記載の暗号化装置。
【請求項３】
前記暗号化部は、
前記要素Ｂｉに含まれる各成分を暗号化する場合に、前記要素Ｂｉの成分に含まれる前記要素Ａｉの成分を暗号化し、暗号化された前記要素Ａｉの成分を、暗号化された前記要素Ａｉの成分と対をなす位置情報と共に暗号化する請求項１または請求項２に記載の暗号化装置。
【請求項４】
前記暗号化部は、
前記要素Ｂｉの成分に含まれる前記要素Ａｉの成分を暗号化する場合に、暗号化を複数回繰り返す多重暗号化を行う請求項３に記載の暗号化装置。
【請求項５】
前記暗号化装置は、さらに、
前記文字列データＤの分割数を指定するパラメーターを保管するパラメーター保管部を備え、
前記データ分割部は、
前記文字列データＤを，前記パラメーターが指定する分割数以下のＮ個に分割する請求項１から請求項４のいずれか一項に記載の暗号化装置。
【請求項６】
データ分割部が、
文字列データＤを、前記文字列データＤの始まりから終わりに向かうＮ個の要素データｗ１，ｗ２，．．．，ｗＮに分割し、
部分文字列生成部が、
前記Ｎ個の要素データｗ１，ｗ２，．．．，ｗＮから、
集合Ａ＝｛Ａ１，Ａ２，．．．，ＡＮ｝，
集合Ａの要素Ａｉ＝｛（ｗｉ），（ｗｉｗｉ＋１），．．．，（ｗｉｗｉ＋１．．．ｗＮ）｝，ｉ＝１，．．．，Ｎ，
を生成し、
位置情報割当部が、
前記要素Ａｉの成分である（ｗｉ），（ｗｉｗｉ＋１），．．．，（ｗｉｗｉ＋１．．．ｗＮ）のそれぞれに位置情報ｉを対応させることにより、
集合Ｂ＝｛Ｂ１，Ｂ２，．．．，ＢＮ｝、
集合Ｂの要素Ｂｉ＝｛（ｉ，ｗｉ），（ｉ，ｗｉｗｉ＋１），．．．，（ｉ，ｗｉｗｉ＋１．．．ｗＮ）｝
を生成し、
暗号化部が、
前記要素Ｂｉに含まれる成分である（ｉ，ｗｉ），（ｉ，ｗｉｗｉ＋１），．．．，（ｉ，ｗｉｗｉ＋１．．．ｗＮ）のそれぞれを暗号化する
暗号化方法。
【請求項７】
コンピュータに、
文字列データＤを、前記文字列データＤの始まりから終わりに向かうＮ個の要素データｗ１，ｗ２，．．．，ｗＮに分割する処理、
前記Ｎ個の要素データｗ１，ｗ２，．．．，ｗＮから、
集合Ａ＝｛Ａ１，Ａ２，．．．，ＡＮ｝，
集合Ａの要素Ａｉ＝｛（ｗｉ），（ｗｉｗｉ＋１），．．．，（ｗｉｗｉ＋１．．．ｗＮ）｝，ｉ＝１，．．．，Ｎ，
を生成する処理、
前記要素Ａｉの成分である（ｗｉ），（ｗｉｗｉ＋１），．．．，（ｗｉｗｉ＋１．．．ｗＮ）のそれぞれに位置情報ｉを対応させることにより、
集合Ｂ＝｛Ｂ１，Ｂ２，．．．，ＢＮ｝、
集合Ｂの要素Ｂｉ＝｛（ｉ，ｗｉ），（ｉ，ｗｉｗｉ＋１），．．．，（ｉ，ｗｉｗｉ＋１．．．ｗＮ）｝
を生成する処理、
前記要素Ｂｉに含まれる成分である（ｉ，ｗｉ），（ｉ，ｗｉｗｉ＋１），．．．，（ｉ，ｗｉｗｉ＋１．．．ｗＮ）のそれぞれを暗号化する処理、
を実行させるための暗号化プログラム。
【請求項８】
文字列データＤを、前記文字列データＤの始まりから終わりに向かうＮ個の要素データｗ１，ｗ２，．．．，ｗＮに分割するデータ分割部と、
前記Ｎ個の要素データｗ１，ｗ２，．．．，ｗＮの各要素データを暗号化し、暗号化された各要素データを、前記文字列データＤを識別する識別子と共に暗号化する暗号化部と
を備えた暗号化装置。
【請求項９】
前記暗号化装置は、さらに、
前記Ｎ個の要素データｗ１，ｗ２，．．．，ｗＮから、
集合Ａ＝｛Ａ１，Ａ２，．．．，ＡＮ｝，
集合Ａの要素Ａｉ＝｛（ｗｉ），（ｗｉｗｉ＋１），．．．，（ｗｉｗｉ＋１．．．ｗＮ）｝，ｉ＝１，．．．，Ｎ，
を生成する部分文字列生成部を備え、
前記暗号化部は、
集合Ａの要素Ａｉの成分である（ｗｉ），（ｗｉｗｉ＋１），．．．，（ｗｉｗｉ＋１．．．ｗＮ）の各成分を暗号化し、暗号化された各成分を前記識別子と共に暗号化する請求項８に記載の暗号化装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、検索システム、管理装置、登録装置、検索装置、鍵生成装置、検索方法、サーバプログラム及び端末プログラムに関する。発明は、例えば、秘匿検索システムに関するものである。
【背景技術】
【０００２】
秘匿検索とは、検索対象データと検索内容を暗号化したまま検索できる技術である。近年、クラウドサービス等の普及によりインターネット上でデータ管理が可能となった。
しかし、インターネット上でのデータ管理には、データ管理の委託先であるクラウドなどのサーバがコンピュータウィルス等のマルウェアに感染することやサーバの管理者が不正を働くことによって、預けたデータが外部に漏洩する危険性がある。もしサーバに預けたデータが個人情報や企業機密データであった場合、この漏洩は非常に問題である。【０００３】
このようなセキュリティの脅威を回避する方法として暗号化技術があるが、単純にデータを暗号化してサーバに保管するとデータの検索ができなくなるといった問題が発生する。
このような問題を回避するために、検索を行うときにサーバ上に保管された暗号化データを一旦復号してから検索を行うという手法が今までに考えられてきたが、データがサーバ内で一定期間平文に戻ってしまうため、対策として十分とはいえない。
そこで、データを暗号化したまま検索可能な暗号技術である「秘匿検索技術」が考案され、秘匿検索技術の具体的な手法が近年多く開示されている。【０００４】
秘匿検索技術では、単純な検索である「完全一致検索」ができる方式（例えば、非特許文献１参照）が主に検討されていたが、近年はより柔軟な検索、例えば「部分一致検索」ができる方式（例えば、特許文献１、非特許文献２参照）や「類似検索」ができる方式（例えば、非特許文献３、非特許文献２参照）なども検討されている。これ以降、部分一致検索可能な方式を「秘匿部分一致検索技術」、類似検索可能な秘匿検索技術を「秘匿類似検索技術」と呼ぶこととする。なお、秘匿検索技術は大まかに分けて、ＲＳＡ暗号方式（ＲＳＡは登録商標）のような公開鍵暗号をベースとした方式や、ＡＥＳ暗号方式のような共通鍵暗号をベースとした方式の２種類がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１４−１２６６２１号公報
【非特許文献】
【０００６】
【非特許文献１】Ｒ．Ｃｕｒｔｍｏｌａ，Ｊ．Ｇａｒａｙ，Ｓ．Ｋａｍａｒａ，ａｎｄ  Ｒ．Ｏｓｔｒｏｖｓｋｙ．“Ｓｅａｒｃｈａｂｌｅ  Ｓｙｍｍｅｔｒｉｃ  Ｅｎｃｒｙｐｔｉｏｎ：Ｉｍｐｒｏｖｅｄ  Ｄｅｆｉｎｉｔｉｏｎｓ  ａｎｄ  Ｅｆｆｉｃｉｅｎｔ  Ｃｏｎｓｔｒｕｃｔｉｏｎｓ”．ＡＣＭ  ＣＣＳ  ２００６．
【非特許文献２】Ｍ．Ｃｈａｓｅ  ａｎｄ  Ｅ．Ｓｈｅｎ．“Ｓｕｂｓｔｒｉｎｇ−Ｓｅａｒｃｈａｂｌｅ  Ｓｙｍｍｅｔｒｉｃ  Ｅｎｃｒｙｐｔｉｏｎ”，ＰＥＴＳ  ２０１５．
【非特許文献３】Ｊ．Ｌｉ，Ｑ．Ｗａｎｇ，Ｃ．Ｗａｎｇ，Ｎ．Ｃａｏ，Ｋ．Ｒｅｎ，ａｎｄ  Ｗ．Ｌｏｕ．“Ｆｕｚｚｙ  Ｋｅｙｗｏｒｄ  Ｓｅａｒｃｈ  ｏｖｅｒ  Ｅｎｃｒｙｐｔｅｄ  Ｄａｔａ  ｉｎ  Ｃｌｏｕｄ  Ｃｏｍｐｕｔｉｎｇ”，Ｍｉｎｉ−Ｃｏｎｆｅｒｅｎｃｅ  ａｔ  ＩＥＥＥ  Ｉｎｆｏｃｏｍ  ２０１０．
【非特許文献４】Ｃ．Ｗａｎｇ，Ｋ．Ｒｅｎ，Ｓ．Ｙｕ，ａｎｄ  Ｋ．Ｍ．Ｒ．Ｕｒｓ．“Ａｃｈｉｅｖｉｎｇ  Ｕｓａｂｌｅ  ａｎｄ  Ｐｒｉｖａｃｙ−ａｓｓｕｒｅｄ  Ｓｉｍｉｌａｒｉｔｙ  Ｓｅａｒｃｈ  ｏｖｅｒ  Ｏｕｔｓｏｕｒｃｅｄ  Ｃｌｏｕｄ  Ｄａｔａ”，ＩＥＥＥ  Ｉｎｆｏｃｏｍ  ２０１２．
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ＡＥＳやＨＭＡＣ、またＳＨＡ−２５６のような共通鍵暗号技術をベースとした高速な既存の秘匿部分一致検索技術には次のような課題がある。
特許文献１では、データを数文字単位に分割し、それぞれを暗号化することによって、暗号化したまま部分一致検索を達成している技術が開示されている。例えば、データを１文字や２文字などの単位でデータを区切って暗号化している。
しかしながら、データを少ない文字数で分割すると、全く同じような分割データが多く現れる可能性がある。本技術では、同じデータからいつも同じ暗号文が生成される確定的暗号化方式を利用するため、同じ分割データを暗号化しても全く同じ暗号文が生成されることから、頻度分析攻撃を受けやすいといった課題がある。
ここで、頻度分析攻撃とは、同じ値を持つ暗号文の頻度と、頻度に関する公な情報（例えば、日本人の名字の分布など）とを照合することで、暗号化に用いる鍵を使わなくても、暗号文から元のデータを推測する攻撃手法である。
なお、このような攻撃を受けないように、同じデータでも毎回違う文字に変換する確率的暗号化方式を用いることが考えられるが、本技術でそのような暗号化方式を用いると検索ができなるといった課題がある。
他の対策として、分割する文字数を大きくして対策することも考えられるが、その場合は部分一致検索が困難となってしまうといった課題がある。【０００８】
非特許文献２では、上記のような頻度分析攻撃を受けず、またある木構造を利用して保管する暗号化データ（以降、保管暗号化データと呼ぶ）のサイズを小さくできるような秘匿部分一致検索技術が開示されている。しかしながら、本技術では、検索に用いる暗号化データ（以降、検索暗号化データと呼ぶ）のサイズが大きくなってしまうことや、検索時にユーザとサーバとの対話回数が多いため、通信量に課題がある。【０００９】
非特許文献３及び非特許文献４では、部分一致検索も含む秘匿類似検索技術が開示されている。これらの技術は、部分一致検索よりも柔軟な検索ができるが、保管暗号化データのサイズ及び検索暗号化データのサイズがともに大きいといった課題がある。【００１０】
本発明は、頻度分析などの攻撃に耐性を持つような高い安全性を達し、データサイズが小さく、かつ通信量が小さい秘匿部分一致検索技術の提供を目的とする。
【課題を解決するための手段】
【００１１】
この発明の暗号化装置は、
文字列データＤを、前記文字列データＤの始まりから終わりに向かうＮ個の要素データｗ１，ｗ２，．．．，ｗＮに分割するデータ分割部と、
前記Ｎ個の要素データｗ１，ｗ２，．．．，ｗＮから、
集合Ａ＝｛Ａ１，Ａ２，．．．，ＡＮ｝，
集合Ａの要素Ａｉ＝｛（ｗｉ），（ｗｉｗｉ＋１），．．．，（ｗｉｗｉ＋１．．．ｗＮ）｝，ｉ＝１，．．．，Ｎ，
を生成する部分文字列生成部と、
前記要素Ａｉの成分である（ｗｉ），（ｗｉｗｉ＋１），．．．，（ｗｉｗｉ＋１．．．ｗＮ）のそれぞれに位置情報ｉを対応させることにより、
集合Ｂ＝｛Ｂ１，Ｂ２，．．．，ＢＮ｝、
集合Ｂの要素Ｂｉ＝｛（ｉ，ｗｉ），（ｉ，ｗｉｗｉ＋１），．．．，（ｉ，ｗｉｗｉ＋１．．．ｗＮ）｝
を生成する位置情報割当部と、
前記要素Ｂｉに含まれる成分である（ｉ，ｗｉ），（ｉ，ｗｉｗｉ＋１），．．．，（ｉ，ｗｉｗｉ＋１．．．ｗＮ）のそれぞれを暗号化する暗号化部と
を備えたことを特徴とする。
【発明の効果】
【００１２】
本発明によれば、保管データである文字列データを構成する部分文字列に位置情報を加えて暗号化するので、頻度分析攻撃を行う上で重要となる文字列データの暗号文どうしの比較ができなくなる。よって頻度分析攻撃に対する安全性を向上できる。
【図面の簡単な説明】
【００１３】
【図１】実施の形態１の図で、秘匿検索システムの構成を示すブロック図。
【図２】実施の形態１の図で、鍵生成装置の構成を示すブロック図。
【図３】実施の形態１の図で、登録装置の構成を示すブロック図。
【図４】実施の形態１の図で、検索装置の構成を示すブロック図。
【図５】実施の形態１の図で、管理装置の構成を示すブロック図。
【図６】実施の形態１の図で、秘匿検索システムの鍵生成・保管処理を示すフローチャート。
【図７】実施の形態１の図で、秘匿検索システムのデータ登録処理を示すフローチャート。
【図８】実施の形態１の図で、秘匿検索システムのデータ検索処理を示すフローチャート。
【図９】実施の形態１の図で、秘匿検索システムのデータ削除処理を示すフローチャート。
【図１０】実施の形態１の図で、秘匿検索システムのハードウェア資源の一例を示す図。
【図１１】実施の形態２の図で、鍵生成装置の構成を示すブロック図。
【図１２】実施の形態２の図で、登録装置の構成を示すブロック図。
【図１３】実施の形態２の図で、検索装置の構成を示すブロック図。
【図１４】実施の形態２の図で、管理装置の構成を示すブロック図。
【図１５】実施の形態２の図で、検索システムの鍵生成・保管処理を示すフローチャート。
【図１６】実施の形態２の図で、検索システムのデータ登録処理を示すフローチャート。
【図１７】実施の形態２の図で、検索システムのデータ検索処理を示すフローチャート。
【図１８】実施の形態３の図で、鍵生成装置の構成を示すブロック図。
【図１９】実施の形態３の図で、登録装置の構成を示すブロック図。
【図２０】実施の形態３の図で、検索装置の構成を示すブロック図。
【図２１】実施の形態３の図で、管理装置の構成を示すブロック図。
【図２２】実施の形態３の図で、検索システムの鍵生成・保管処理を示すフローチャート。
【図２３】実施の形態３の図で、検索システムのデータ登録処理を示すフローチャート。
【図２４】実施の形態３の図で、検索システムのデータ検索処理を示すフローチャート。
【発明を実施するための形態】
【００１４】
以下、本発明の実施の形態について、図を用いて説明する。なお、各図中、同一又は相当する部分には、同一符号を付している。実施の形態の説明において、同一又は相当する部分については、その説明を適宜省略又は簡略化する。
【００１５】
実施の形態１．
本実施の形態では、高安全かつ効率的な秘匿部分一致検索技術を開示する。
以下、本実施の形態の概要について説明する。
図１は、本実施の形態に係る秘匿検索システム１００の構成を示すブロック図である。図１に示すように、秘匿検索システム１００は、鍵生成装置２００と、複数の登録装置３００と、複数の検索装置４００と、管理装置５００とを備える。
【００１６】
＜＊＊＊構成の説明＊＊＊＞
秘匿検索システム１００は、複数の鍵生成装置２００を備えていてもよい。秘匿検索システム１００は、１つの登録装置３００のみを備えていてもよい。秘匿検索システム１００は、１つの検索装置４００のみを備えていてもよい。秘匿検索システム１００は、複数の管理装置５００を備えていてもよい。秘匿検索システム１００は、鍵生成装置２００と、複数の登録装置３００と、複数の検索装置４００と、管理装置５００とそれぞれインターネット１０１を経由して接続されず、同じ企業内に敷設されたＬＡＮ（Ｌｏｃａｌ・Ａｒｅａ・Ｎｅｔｗｏｒｋ）内に設置されていてもよい。インターネット１０１は、鍵生成装置２００と、複数の登録装置３００と、複数の検索装置４００と、管理装置５００とを接続する通信路である。インターネット１０１は、ネットワークの例である。インターネット１０１の代わりに、他の種類のネットワークが用いられてもよい。
【００１７】
鍵生成装置２００は、暗号化に利用する鍵を作成し、インターネット１０１を介して、複数の登録装置３００と、複数の検索装置４００とへ鍵を送信する。なお、この鍵は、インターネット１０１を介さず、郵送などで直接的に、複数の登録装置３００と、複数の検索装置４００とへ送信してもよい。
【００１８】
登録装置３００は、例えば、パーソナルコンピュータである。登録装置３００は、保管暗号化データを管理装置５００に登録する登録端末として動作するコンピュータである。登録装置３００は、暗号化装置及び登録装置として機能する。即ち、登録装置３００は、保管暗号化データを生成し、保管暗号化データの保管を管理装置５００に要求する。登録装置３００は、削除要求装置として機能する。即ち、登録装置３００は、管理装置５００に対して、保管されている保管暗号化データの削除を要求する。
【００１９】
検索装置４００は、例えば、パーソナルコンピュータである。検索装置４００は、検索暗号化データを管理装置５００に送信し、その後管理装置５００から暗号化検索結果を受信し、暗号化検索結果を出力するコンピュータである。検索装置４００は、検索要求装置として機能する。即ち、検索装置４００は、暗号化検索データを管理装置５００に送信して保管暗号化データと検索暗号化データの照合を要求する。検索装置４００は、出力装置として機能する。即ち、検索装置４００は、管理装置５００から返信される検索結果を出力する。
【００２０】
管理装置５００は、登録装置３００によって作成された保管暗号化データを保管する大容量の記録媒体を持つ装置である。管理装置５００は、保管装置として機能する。即ち、管理装置５００は、登録装置３００から保管暗号化データの保管の要求があれば、保管暗号化データを保管する。管理装置５００は、検索装置として機能する。即ち、管理装置５００は、検索装置４００からの検索の要求があれば、保管暗号化データと検索暗号化データを照合し、検索結果を検索装置４００に送信する。管理装置５００は、削除装置として機能する。即ち、管理装置５００は、登録装置３００から保管暗号化データの削除の要求があれば、保管している保管暗号化データを削除する。
なお、同じパーソナルコンピュータ内に、鍵生成装置２００、登録装置３００、検索装置４００のいずれかが同時に含まれていてもよい。
なお、保管暗号化データ及び検索暗号化データは、いずれも暗号化されている。鍵を持たない登録装置３００と検索装置４００以外は、保管暗号化データや検索暗号化データから有益な情報を得ることは困難である。
【００２１】
以下、本実施の形態の構成について説明する。
図１に示したように、秘匿検索システム１００は、鍵生成装置２００と、登録装置３００と、検索装置４００と、管理装置５００とを備える。
以下では、鍵生成装置２００の構成、登録装置３００の構成、検索装置４００の構成、管理装置５００の構成について順番に説明する。
【００２２】
図２は、鍵生成装置２００の構成を示すブロック図である。図２に示すように、鍵生成装置２００は、鍵生成部２０１と、パラメーター生成部２０２と、送信部２０３とを備える。図示していないが、鍵生成装置２００は、鍵生成装置２００の各部で使用されるデータを記憶する記録媒体を備える。
【００２３】
鍵生成部２０１は、データを暗号化や復号するための鍵Ｋを生成する。鍵Ｋは登録装置３００と検索装置４００とに保管される秘密情報であるため、厳重に生成される。なお、ここでは共通鍵暗号技術を用いて説明しているが、公開鍵暗号技術を用いてもよい。
パラメーター生成部２０２は、データの暗号化や、データの照合時に必要なパラメーターを生成する。例えば、パラメーターとして、登録データをいくつかの文字列に分割するときの最大長Ｌがそれにあたる。なお、Ｌは０より大きい整数である。また、Ｌは秘密情報ではないため、公に公開されていても構わない。
送信部２０３は、鍵生成部２０１で生成された鍵Ｋを、登録装置３００と、検索装置４００とへ送信し、また、パラメーター生成部で生成されたパラメーターＬを、登録装置３００と、管理装置５００とへ送信する。
【００２４】
図３は、登録装置３００の構成を示すブロック図である。図３に示すように、登録装置３００は、受信部３０１と、鍵保管部３０２と、パラメーター保管部３０３と、入力部３０４と、データ分割部３０５と、部分文字列生成部３０６と、位置情報割当部３０７と、暗号化部３０８と、送信部３０９とを備える。図示していないが、登録装置３００は、登録装置３００の各部で使用されるデータを記憶する記録媒体を備える。
【００２５】
受信部３０１は、鍵生成装置２００から送信されてきた鍵ＫとパラメーターＬとを受信する。鍵保管部３０２は、受信部３０１から受け取った鍵Ｋを保管する。パラメーター保管部３０３は、受信部３０１から受け取ったパラメーターＬを保管する。
【００２６】
入力部３０４は、データ登録者から入力された保管データとデータ名を受け取る。なお、本実施の形態では、保管データＤ、データ名をＩＤ（Ｄ）として説明する。もし、データ登録者からデータ名の入力がなければ、入力部３０４は、入力された保管データＤのデータ名ＩＤ（Ｄ）に乱数を割り当ててもよいし、他の保管データのデータ名と重複しないように０より大きい整数の値を順に割り当ててもよい。データ名のＩＤ（Ｄ）は、保管データＤを識別する識別子である。
また、入力部３０４は、データ登録者から削除したい保管暗号化データについての削除データ名を受け取る。削除データ名は、例えば、登録時に入力したデータ名や、登録した時刻、データ登録者の名前など、保管データを特定できるものなら何でもよい。
【００２７】
データ分割部３０５は、パラメーター保管部３０３からパラメーターＬを読み出し、入力部３０４から受け取った保管データＤを（ｗ１，・・・，ｗＬ）と分割する。
ただし、各ｗｉ（１≦ｉ≦Ｌ）は、データを１文字や複数文字ずつ順に分割したものでもいいし、単語単位で分割してもよい。また、データＤを（ｗ１，．．．，ｗｋ）とｋ≦Ｌとなるようにデータ分割してもよい。もし、データをどのように分割しても分割数がＬ未満となってしまう場合は、Ｌ未満のままでもよいし、「＊」やｎｕｌｌなどの特殊文字を使って足りない文字数を補って、長さをＬとなるように調整しもよい。以降では、分割数がＬとした時を説明するが、Ｌ未満でもほぼ同様な手順を実施すればよい。
【００２８】
部分文字列生成部３０６は、データ分割部３０５から受け取った
分割データ（ｗ１，・・・，ｗＬ）から、次のような集合Ａを生成する。
Ａ＝｛｛（ｗ１），（ｗ１ｗ２），・・・，（ｗ１・・・ｗＬ）｝，｛（ｗ２），（ｗ２ｗ３），・・・，（ｗ２・・・ｗＬ）｝，・・・，｛（ｗＬ）｝｝。
以降では、集合Ａを部分文字列集合と呼ぶことにする。
【００２９】
位置情報割当部３０７は、部分文字列生成部３０６から受け取った部分文字列集合Ａの中の各部分文字列に対して次のように位置情報を割り当てて、集合Ｂを生成する。
Ｂ＝｛（１，ｗ１），（１，ｗ１ｗ２），・・・，（１，ｗ１・・・ｗＬ）｝，｛（２，ｗ２），（２，ｗ２ｗ３），・・・，（２，ｗ２・・・ｗＬ）｝，・・・，｛（Ｌ，ｗＬ）｝｝。
ここで、以降では集合Ｂを位置情報付き部分文字列集合と呼ぶことにする。
【００３０】
暗号化部３０８は、鍵保管部３０２から鍵Ｋを読み出し、位置情報割当部３０７から受け取った位置情報付き部分文字列集合Ｂの中の各位置情報付き部分文字列に対する暗号文Ｃを次のように生成する。位置情報と部分文字列の各ペア（ｐ，ｗ）に対して、
Ｃ＝Ｅ（Ｅ（Ｋ，ｗ），ｐ，ＩＤ（Ｄ））
を生成する。
なお、Ｅは暗号化関数とする。例えば、ＡＥＳのような共通鍵暗号方式やＨＭＡＣのようなメッセージ認証符号、ＳＨＡ−２５６のようなハッシュ関数がその一例である。
ここで、すべての（ｉ，ｗ）を暗号化した暗号文の集合をＣ（Ｄ）と書くことにする。
以降では、ペア（ＩＤ（Ｄ），Ｃ（Ｄ））を、
保管暗号化データ集合と呼ぶことにする。
【００３１】
送信部３０９は、暗号化部３０８から受け取った保管暗号化データ集合（ＩＤ（Ｄ），Ｃ（Ｄ））を管理装置５００へ送信する。また、送信部３０９は、入力部３０４から受け取った削除データ名を管理装置５００へ送信する。
【００３２】
図４は、検索装置４００の構成を示すブロック図である。図４に示すように、検索装置４００は、受信部４０１と、鍵保管部４０２と、入力部４０３と、暗号化部４０４と、送信部４０５と、出力部４０６とを備える。図示していないが、検索装置４００は、検索装置４００の各部で使用されるデータを記憶する記録媒体を備える。
【００３３】
受信部４０１は、鍵生成装置２００から送信されてきた鍵Ｋ、または管理装置５００から送信されてきた検索結果を受信する。鍵保管部４０２は、受信部４０１から受け取った鍵Ｋを保管する。入力部４０３は、データ検索者から入力された検索データｓを受け取る。また、入力部４０３は、データ検索者から、検索データと同時に、その検索データと検索したい保管暗号化データ集合を指定するような保管データ名も複数受けとってもよい。
【００３４】
暗号化部４０４は、鍵保管部４０２から鍵Ｋを読み出し、入力部４０３から受け取った検索データｓに対して鍵Ｋを用いて、次のように暗号文ｔを生成する。
ｔ＝Ｅ（Ｋ，ｓ）。
以降では、このｔを検索暗号化データと呼ぶ。
【００３５】
送信部４０５は、暗号化部４０４から受け取った検索暗号化データｔを管理装置５００へ送信する。もし、データ検索者から検索データと同時に保管データ名も入力されていた場合は、検索暗号化データと保管データ名の両方を管理装置５００へ送信する。
出力部４０６は、受信部４０１から受け取った検索結果に基づき、検索結果をデータ検索者に対して出力する。もし、検索結果が暗号化されていた場合は、鍵保管部４０２に保管されている鍵Ｋなどを用いて検索結果を復号して出力する。
【００３６】
図５は、管理装置５００の構成を示すブロック図である。図５に示すように、管理装置５００は、受信部５０１と、パラメーター保管部５０２と、データ保管部５０３と、照合部５０４と、送信部５０５とを備える。図示していないが、管理装置５００は、管理装置５００の各部で使用されるデータを記憶する記録媒体を備える。
【００３７】
受信部５０１は、鍵生成装置２００から送信されてきたパラメーターＬ、登録装置３００から送信されてきた保管暗号化データ集合（ＩＤ（Ｄ），Ｃ（Ｄ））や削除データ名、検索装置４００から送信されてきた検索暗号化データｔや保管データ名を受信する。
パラメーター保管部５０２は、受信部５０１から受け取ったパラメーターＬを保管する。
データ保管部５０３は、受信部５０１から受け取った保管暗号化データ集合の（ＩＤ（Ｄ），Ｃ（Ｄ））を保管する。必要があれば、送信されてきた日時なども同時に保管してもよい。
また、データ保管部５０３は、受信部５０１から受け取った削除データ名に基づき、保管している保管暗号化データ集合を削除する。
【００３８】
照合部５０４は、検索結果に関わる空集合Ｒを生成し、データ保管部５０３からすべての保管暗号化データ集合（ＩＤ（Ｄ），Ｃ（Ｄ））を読み出し、受信部５０１から受け取った検索暗号化データｔに基づき、次のようにして照合を行うことや検索結果を生成する。
照合部５０４は、
Ｔ１＝Ｅ（ｔ，１，ＩＤ（Ｄ）），・・・，ＴＬ＝Ｅ（ｔ，Ｌ，ＩＤ（Ｄ））、
を計算し、各Ｔｐ（１≦ｐ≦Ｌ）がＣ（Ｄ）に含まれているかを確認する。
もしＴｐがＣ（Ｄ）に含まれているならば、ペア（ＩＤ（Ｄ），ｐ）をＲに加える。
この（ＩＤ（Ｄ），ｐ）は「ＩＤ（Ｄ）のｐ番目の位置に検索データが現れる」
を意味する。以降では、各Ｔｐを照合データと呼び、
｛Ｔ１，・・・，ＴＬ｝
を照合データ集合と呼ぶことにする。
また、本処理の結果、最終的に生成される集合Ｒを検索結果と呼ぶことにする。
なお、照合部５０４は、受信部５０１が検索装置４００から保管データ名も受信していれば、それに基づいてデータ保管部５０３から対象となる保管暗号化データ集合のみを読み出して、同様な処理を行う。
【００３９】
送信部５０５は、照合部５０４から受け取った検索結果Ｒを検索装置４００へ送信する。
【００４０】
以下では、本実施の形態に係る、暗号化方法、検索方法に相当する、秘匿検索システム１００の動作について説明する。
【００４１】
図６は、秘匿検索システム１００の鍵生成・保管処理を示すフローチャートである。図６のステップＳ６０１〜ステップＳ６１２は、鍵生成装置２００と、登録装置３００と、検索装置４００と、管理装置５００とが実行する処理である。ステップＳ６０１〜ステップＳ６０５は鍵生成装置２００に、ステップＳ６０６〜ステップＳ６０８は登録装置３００に、ステップＳ６０９〜ステップＳ６１０は検索装置４００に、ステップＳ６１１〜ステップＳ６１２は管理装置５００によって実行される。
なお以下では、ステップＳ６０１等のステップ番号は、Ｓ６０１等と記す。図７〜図９、実施の形態の図１５〜図１７、及び実施の形態３の図２２〜図２４のステップ番号も同様である。
【００４２】
Ｓ６０１において、鍵生成部２０１は、データを暗号化するための鍵Ｋを生成する。なお、本稿では共通鍵暗号技術を用いて説明しているが、公開鍵暗号技術を用いてもよい。その場合は、鍵生成部２０１は、公開鍵ＰＫと秘密鍵ＳＫのペアを鍵Ｋとして設定して、以降の処理を同じように実施すればよい。
Ｓ６０２において、パラメーター生成部２０２は、パラメーターＬを生成する。なお、前述の通り、Ｌは保管データを分割したときに現れる文字列の最大数である。
Ｓ６０３において、送信部２０３は、Ｓ６０１で生成した鍵ＫとＳ６０２で生成したパラメーターＬを、登録装置３００へ送信する。
Ｓ６０４において、送信部２０３は、Ｓ６０１で生成した鍵Ｋを、検索装置４００へ送信する。
Ｓ６０５において、送信部２０３は、Ｓ６０２で生成したパラメーターＬを、管理装置５００へ送信する。
【００４３】
Ｓ６０６において、受信部３０１は、Ｓ６０３で送信された鍵ＫとパラメーターＬを受信する。
Ｓ６０７において、鍵保管部３０２は、Ｓ６０６で受信した鍵Ｋを記憶媒体に保管する。
Ｓ６０８において、パラメーター保管部３０３は、Ｓ６０６で受信したパラメーターＬを記憶媒体に保管する。
【００４４】
Ｓ６０９において、受信部４０１は、Ｓ６０４で送信された鍵Ｋを受信する。
Ｓ６１０において、鍵保管部４０２は、Ｓ６０９で受信した鍵Ｋを記憶媒体に保管する。
【００４５】
Ｓ６１１において、受信部５０１は、Ｓ６０５で送信されたパラメーターＬを受信する。
Ｓ６１２において、パラメーター保管部５０２は、Ｓ６１１で受信したパラメーターＬを記憶媒体に保管する。Ｓ６１２により、秘匿検索システム１００の鍵生成・保管処理は終了する。なお、鍵Ｋは秘密情報であるため、鍵保管部３０２と、鍵保管部４０２とは、鍵Ｋが外部に漏れないように厳重に保管する必要がある。
【００４６】
図７は、秘匿検索システム１００の登録処理を示すフローチャートである。図７のＳ７０１〜Ｓ７０８は、登録装置３００と管理装置５００とが実行する処理である。Ｓ７０１〜Ｓ７０６は登録装置３００に、Ｓ７０７〜Ｓ７０８は管理装置５００によって実行される処理である。
【００４７】
Ｓ７０１において、入力部３０４は、データ登録者から入力された保管データＤとデータ名ＩＤ（Ｄ）を受け取る。なお、前述の通り、データ登録者からデータ名の入力がなければ、入力部３０４は、入力された保管データＤのデータ名ＩＤ（Ｄ）を乱数と割り当ててもよいし、他の保管データのデータ名と重複しないように０より大きい整数の値を順に割り当ててもよい。
【００４８】
Ｓ７０２において、データ分割部３０５は、パラメーター保管部３０３からパラメーターＬを読み出し、Ｓ７０１でデータ登録者から受け取った保管データＤを（ｗ１，・・・，ｗＬ）と分割する。
なお、前述の通り、各ｗｉ（１≦ｉ≦Ｌ）は、データを１文字や複数文字ずつ順に分割したものでもいいし、単語単位で分割してもよい。また、データＤを（ｗ１，．．．，ｗｋ）とｋ≦Ｌとなるようにデータ分割してもよい。
もし、データをどのように分割しても分割数がＬ未満となってしまう場合は、Ｌ未満のままでもよいし、「＊」やｎｕｌｌなどの特殊文字を使って足りない文字数を補ってもよい。
ここでｗｉを要素データと呼ぶとすれば、データ分割部３０５は、文字列データである保管データＤを、保管データＤの始まりから終わりに向かうＮ個の要素データｗ１，．．．，ｗＮに分割する。ＮはＬ以下である。
以下のＳ７０３以降では、保管データＤがＬ個に分割された場合を説明する。保管データＤがＮ個に分割された場合は、以下の説明においてＬをＮに読み替えればよい。
【００４９】
Ｓ７０３において、部分文字列生成部３０６は、Ｓ７０２で生成された分割データ（ｗ１，・・・，ｗＬ）から、次のような部分文字列集合Ａを生成する。
Ａ＝｛Ａ１，Ａ２，．．．，ＡＬ｝、
集合Ａの要素Ａ１等をＡｉ（ｉ＝１，．．．，Ｌ）と記す。
集合Ａの要素は、以下のようである。
集合Ａの要素は、
Ａ１＝｛（ｗ１），（ｗ１ｗ２），・・・，（ｗ１・・・ｗＬ）｝、
Ａ２＝｛（ｗ２），（ｗ２ｗ３），・・・，（ｗ２・・・ｗＬ）｝、
．．．
ＡＬ＝｛（ｗＬ）｝、
である。
各要素は、
Ａｉ＝｛（ｗｉ），（ｗｉｗｉ＋１），・・・，（ｗｉ・・・ｗＬ）｝、（ｉ＝１，．．．，Ｌ）
である。
以下では要素Ａｉの要素を、成分と呼ぶ場合がある。つまりＡｉは、（Ｌ−ｉ＋１）個の成分である（ｗｉ），（ｗｉｗｉ＋１），・・・，（ｗｉ・・・ｗＬ）を持つ。
【００５０】
Ｓ７０４において、位置情報割当部３０７は、Ｓ７０３で生成された部分文字列集合Ａの中の各部分文字列に対して次のように位置情報を割り当て、位置情報付き部分文字列集合Ｂを生成する。
集合Ｂ＝｛Ｂ１，Ｂ２，．．．，ＢＬ｝、
集合Ｂの要素Ｂｉ＝｛（ｉ，ｗｉ），（ｉ，ｗｉｗｉ＋１），．．．，（ｉ，ｗｉｗｉ＋１．．．ｗＬ）｝、
である。
要素Ｂｉは要素Ａｉの各成分に位置情報ｉを付加して生成される。ここで位置情報ｉにおける｛ｉ｝は、要素Ａｉにおける添え字｛ｉ｝である。
要素Ｂｉを具体的に記載すれば、
Ｂ１＝｛（１，ｗ１），（１，ｗ１ｗ２），・・・，（１，ｗ１・・・ｗＬ）｝、
Ｂ２＝｛（２，ｗ２），（２，ｗ２ｗ３），・・・，（２，ｗ２・・・ｗＬ）｝、
．．．．
ＢＬ＝｛（Ｌ，ｗＬ）｝，
である。
集合Ｂの各要素は、
Ｂｉ＝｛（ｉ，ｗｉ），（ｉ，ｗｉｗｉ＋１），・・・，（ｉ，ｗｉ・・・ｗＬ）｝、（ｉ＝１，．．．，Ｌ）である。
Ｂｉの要素である（ｉ，ｗｉ），（ｉ，ｗｉｗｉ＋１），・・・，（ｉ，ｗｉ・・・ｗＬ）、
を以下では成分と呼ぶ場合がある。
このように、位置情報割当部３０７は、集合Ａの要素Ａｉの成分である（ｗｉ），（ｗｉｗｉ＋１），．．．，（ｗｉｗｉ＋１．．．ｗＬ）のそれぞれに位置情報ｉを対応させることにより、
要素Ｂｉ（ｉ＝１，．．．，Ｌ）を持つ、位置情報付き部分文字列集合Ｂを生成する。
【００５１】
Ｓ７０５において、暗号化部３０８は、鍵保管部３０２から鍵Ｋを読み出し、Ｓ７０４で生成された位置情報付き部分文字列集合Ｂの中の各位置情報付き部分文字列の暗号文Ｃを次のように生成する。
位置情報と部分文字列の各ペア（ｐ，ｗ）に対して、
Ｃ＝Ｅ（Ｅ（Ｋ，ｗ），ｐ，ＩＤ（Ｄ））      （式１）
を生成する。
ペア（ｐ，ｗ）とは、Ｂｉで説明すれば、（ｉ，ｗｉ），（ｉ，ｗｉｗｉ＋１），・・・，（ｉ，ｗｉ・・・ｗＬ）の、（Ｌ−ｉ＋１）個の各成分である。（ｉ，ｗｉ）の場合であれば、
ｐ＝ｉ，ｗ＝ｗｉ
である。
すべての（ｐ，ｗ）を暗号化した暗号文の集合をＣ（Ｄ）とし、保管暗号化データ集合（ＩＤ（Ｄ），Ｃ（Ｄ））を生成する。
つまりＣ（Ｄ）は、
Ｂ１＝｛（１，ｗ１），（１，ｗ１ｗ２），・・・，（１，ｗ１・・・ｗＬ）｝、
Ｂ２＝｛（２，ｗ２），（２，ｗ２ｗ３），・・・，（２，ｗ２・・・ｗＬ）｝、
．．．，
ＢＬ＝｛（Ｌ，ｗＬ）｝，
の、すべての成分を暗号化した情報である。このように暗号化部３０８は、要素Ｂｉに含まれる（ｉ，ｗｉ），（ｉ，ｗｉｗｉ＋１），．．．，（ｉ，ｗｉｗｉ＋１．．．ｗＬ）のそれぞれを暗号化される。
なお、上記式１に示すように、暗号化部３０８は、要素Ｂｉに含まれる各成分を暗号化する場合に、要素Ｂｉに含まれる各成分を、文字列データである保管データＤを識別する識別子のデータ名ＩＤ（Ｄ）と共に暗号化する。
また、前述の通り、Ｅは暗号化関数であり、例えば、ＡＥＳのような共通鍵暗号方式やＨＭＡＣのようなメッセージ認証符号、ＳＨＡ−２５６のようなハッシュ関数がその一例である。
【００５２】
Ｓ７０６において、送信部３０９は、Ｓ７０５で生成した保管暗号化データ集合（ＩＤ（Ｄ），Ｃ（Ｄ））を管理装置５００へ送信する。
【００５３】
Ｓ７０７において、受信部５０１は、Ｓ７０６で送信された保管暗号化データ集合（ＩＤ（Ｄ），Ｃ（Ｄ））を受信する。
【００５４】
Ｓ７０８において、データ保管部５０３は、Ｓ７０７で受信した保管暗号化データ集合（ＩＤ（Ｄ），Ｃ（Ｄ））を保管する。
【００５５】
Ｓ７０８により、秘匿検索システム１００の登録処理は終了する。
【００５６】
図８は、秘匿検索システム１００の検索処理を示すフローチャートである。図８のＳ８０１〜Ｓ８１０は、検索装置４００と管理装置５００とが実行する処理である。Ｓ８０１〜Ｓ８０３及びＳ８０９〜Ｓ８１０は検索装置４００によって実行される処理であり、Ｓ８０４〜Ｓ８０８は管理装置５００によって実行される処理である。
【００５７】
Ｓ８０１において、入力部４０３は、データ検索者から入力された検索データｓを受け取る。なお、複数の検索データを同時に受け取ってもよい。その場合は、以降の処理を各検索データに対して同じように実施すればよい。また、前述の通り、入力部４０３は、データ検索者から、検索データと同時に、その検索データと検索したい保管暗号化データを指定するような保管データ名も複数受けとってもよい。
Ｓ８０２において、暗号化部４０４は、鍵保管部４０２から鍵Ｋを読み出し、Ｓ８０１で受け取った検索データｓに対して鍵Ｋを用いて、次のようにして検索暗号化データｔを生成する。ここで、
ｔ＝Ｅ（Ｋ，ｓ）
である。
Ｓ８０３において、送信部４０５は、Ｓ８０２で生成した検索暗号化データｔを管理装置５００へ送信する。もし、Ｓ８０１で保管データ名も入力されていれば、保管データ名も同時に送付する。
【００５８】
Ｓ８０４において、受信部５０１は、Ｓ８０３で送信された検索暗号化データｔを受信する。もし、Ｓ８０３で保管データ名も送信されていたら、保管データ名も受信する。
Ｓ８０５において、照合部５０４は、データ保管部５０３から保管暗号化データ集合（ＩＤ（Ｄ），Ｃ（Ｄ））を読み出す。なお、もしＳ８０４で保管データ名も受信していた場合は、その保管データ名に基づき、対象の保管暗号化データ集合のみを読み出す。もしＳ８０４で保管データ名を受信していなかった場合は、保管されているすべての保管暗号化データ集合を読み出す。
Ｓ８０６において、照合部５０４は、パラメーター保管部５０２からパラメーターＬを読み出し、Ｓ８０５で読み出した保管暗号化データ集合（ＩＤ（Ｄ），Ｃ（Ｄ））のＩＤ（Ｄ）に基づき、Ｓ８０４で受信した検索暗号化データｔからＩＤ（Ｄ）に対する各照合データＴｐ（１≦ｐ≦Ｌ）を生成する。
ここで各Ｔｐは、
Ｔ１＝Ｅ（ｔ，１，ＩＤ（Ｄ）），・・・，ＴＬ＝Ｅ（ｔ，Ｌ，ＩＤ（Ｄ））
である。もし、Ｓ８０５で読み出した保管暗号化データ集合が複数の場合は、各ＩＤ（Ｄ）に対応した照合データを生成する。
Ｓ８０７において、照合部５０４は、検索結果に関わる空集合Ｒを生成し、Ｓ８０６で生成した各照合データＴｐ（１≦ｐ≦Ｌ）がＣ（Ｄ）に含まれているかを確認する。もしＴｐがＣ（Ｄ）に含まれているならば、ペア（ＩＤ（Ｄ），ｐ）をＲに加える。もし、Ｓ８０６で生成した照合データ集合が複数の場合も、同じＲに上記の検索結果に関するペアを加える。
Ｓ８０８において、送信部５０５は、Ｓ８０７で生成した検索結果Ｒを検索装置４００へ送信する。
【００５９】
Ｓ８０９において、受信部４０１は、Ｓ８０８で送信された検索結果Ｒを受信する。
Ｓ８１０において、出力部４０６は、Ｓ８０９で受信した検索結果Ｒに対して、次のようにしてデータ検索者に対して出力する。検索結果Ｒに含まれている各（ＩＤ（Ｄ），ｐ）に対して、「ＩＤ（Ｄ）のｐ番目の位置に検索データが現れる」と出力する。もしＲが空集合だった場合は、「どのデータにも検索データは含まれなかった」と出力する。Ｓ８１０により、秘匿検索システム１００の検索処理は終了する。
【００６０】
図９は、秘匿検索システム１００の削除処理を示すフローチャートである。図９のＳ９０１〜Ｓ９０４は、登録装置３００と管理装置５００とが実行する処理である。Ｓ９０１〜Ｓ９０２は登録装置３００に、Ｓ９０３〜Ｓ９０４は管理装置５００によって実行される処理である。
【００６１】
Ｓ９０１において、入力部３０４は、データ登録者から削除したい保管暗号化データ集合についての削除データ名を受け取る。なお、前述の通り、削除データ名は保管暗号化データ集合を特定できるものであれば何でもよい。
Ｓ９０２において、送信部３０９は、Ｓ９０１で入力された削除データ名を管理装置５００へ送信する。
【００６２】
Ｓ９０３において、受信部５０１は、Ｓ９０２で登録装置３００から送信されてきた削除データ名を受信する。
Ｓ９０４において、データ保管部５０３は、Ｓ９０３で受信した削除データ名に基づき、保管している保管暗号化データ集合を削除する。
Ｓ９０４により、秘匿検索システム１００の削除処理は終了する。
【００６３】
＜本実施の形態の動作具体例＞
以下に、本実施の形態の動作の具体例を示す。
ここで、本実施の形態の動作を、
パラメーターＬ＝３、
保管データをＤ１＝ＡＢＣ，
ＩＤ（Ｄ１）＝１，
Ｄ２＝ＢＣ，
ＩＤ（Ｄ２）＝２、
検索データｓ＝ＢＣ、
として説明する。
また暗号化関数Ｅは、ハッシュ関数を用いて説明する。
【００６４】
まず、Ｄ１とＤ２の登録処理について説明する。
Ｓ７０２において、Ｄ１＝（Ａ，Ｂ，Ｃ），Ｄ２＝（Ｂ，Ｃ）と分割される。
Ｓ７０３において、
Ａ１＝｛｛（Ａ），（ＡＢ），（ＡＢＣ）｝，｛（Ｂ），（ＢＣ）｝，｛（Ｃ）｝｝及び
Ａ２＝｛｛（Ｂ），（ＢＣ）｝，｛（Ｃ）｝｝と生成される。
Ｓ７０４において、
Ｂ１＝｛｛（１，Ａ），（１，ＡＢ），（１，ＡＢＣ）｝，｛（２，Ｂ），（２，ＢＣ）｝，｛（３，Ｃ）｝｝及び
Ｂ２＝｛｛（１，Ｂ），（１，ＢＣ）｝，｛（２，Ｃ）｝｝と生成される。
Ｓ７０５において、
Ｃ１１＝Ｅ（Ｅ（Ｋ，Ａ），１，１），
Ｃ１２＝Ｅ（Ｅ（Ｋ，ＡＢ），１，１），
Ｃ１３＝Ｅ（Ｅ（Ｋ，ＡＢＣ），１，１），
Ｃ１４＝Ｅ（Ｅ（Ｋ，Ｂ），２，１），
Ｃ１５＝Ｅ（Ｅ（Ｋ，ＢＣ），２，１），
Ｃ１６＝Ｅ（Ｅ（Ｋ，Ｃ），３，１）及び
Ｃ２１＝Ｅ（Ｅ（Ｋ，Ｂ），１，２），
Ｃ２２＝Ｅ（Ｅ（Ｋ，ＢＣ），１，２），
Ｃ２３＝Ｅ（Ｅ（Ｋ，Ｃ），２，２）
を生成し、
保管暗号化データ集合（ＩＤ（Ｄ）、Ｃ（Ｄ））として
保管暗号化データ集合（１，Ｃ（Ｄ１））
及び
保管暗号化データ集合（２，Ｃ（Ｄ２））
を生成する。
ただし、
Ｃ（Ｄ１）＝｛Ｃ１１，Ｃ１２，Ｃ１３，Ｃ１４，Ｃ１５，Ｃ１６｝，
Ｃ（Ｄ２）＝｛Ｃ２１，Ｃ２２，Ｃ２３｝とする。
ここで、
Ｃ＝Ｅ（Ｅ（Ｋ，ｓ），ｐ，ＩＤ（Ｄ））に注意する。
Ｓ７０７及びＳ７０８により、上記の保管暗号化データ集合である（１，Ｃ（Ｄ１））と（２，Ｃ（Ｄ２））が、管理装置５００に保管される。
【００６５】
次に、検索データｓをｓ＝ＢＣとした場合の検索処理について説明する。
Ｓ８０２において、暗号化データｔ＝Ｅ（Ｋ，ｓ）を計算する。
Ｓ８０５において、（１，Ｃ（Ｄ１））と（２，Ｃ（Ｄ２））を読み出す。
Ｓ８０６において、
Ｔ１１＝Ｅ（ｔ，１，１），
Ｔ１２＝Ｅ（ｔ，２，１），
Ｔ１３＝Ｅ（ｔ，３，１）及び
Ｔ２１＝Ｅ（ｔ，１，２），
Ｔ２２＝Ｅ（ｔ，２，２），
Ｔ２３＝Ｅ（ｔ，３，２）
を計算する。
Ｓ８０７において、Ｔ１１，Ｔ１２，Ｔ１３がＣ（Ｄ１）に含まれているか，またＴ２１，Ｔ２２，Ｔ２３がＣ（Ｄ２）に含まれているかを確認する。
実際、
Ｔ１２はＣ（Ｄ１）に含まれ（Ｃ１５と一致し）、
Ｔ２１はＣ（Ｄ２）に含まれる（Ｃ２２と一致する）。
よって、（ＩＤ（Ｄ），ｐ）を要素とする集合の検索結果Ｒが、
検索結果Ｒ＝｛（１，２），（２，１）｝として生成される。
ここで、検索結果Ｒの要素は（ＩＤ（Ｄ），ｐ）であることに注意する。
Ｓ８１０において、検索結果Ｒに基づき、
「保管データ名が“１”のデータの“２番目”の位置から検索データＢＣが現れる」、
「保管データ名が“２”のデータの“１番目”の位置から検索データＢＣが現れる」といった検索結果を出力する。
【００６６】
以上が具体例の説明である。
【００６７】
図１０は、実施の形態１における鍵生成装置２００と、登録装置３００と、検索装置４００と、管理装置５００とのハードウェア資源の一例を示す図である。
【００６８】
図１０において、鍵生成装置２００と、登録装置３００と、検索装置４００と、管理装置５００は、ＣＰＵ１００１（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を備えている。
【００６９】
ＣＰＵ１００１は、バス１００２を介してＲＯＭ１００３、ＲＡＭ１００４、通信ボード１００５、ディスプレイ１０１１（表示装置）、キーボード１０１２、マウス１０１３、ドライブ１０１４、磁気ディスク装置１０２０などのハードウェアデバイスと接続され、これらのハードウェアデバイスを制御する。
【００７０】
ドライブ１０１４は、ＦＤ（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ  Ｄｒｉｖｅ）、ＣＤ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）などの記憶媒体を読み書きする装置である。
【００７１】
ＲＯＭ１００３、ＲＡＭ１００４、磁気ディスク装置１０２０およびドライブ１０１４は記憶装置の一例である。キーボード１０１２、マウス１０１３および通信ボード１００５は入力装置の一例である。ディスプレイ１０１１および通信ボード１００５は出力装置の一例である。
【００７２】
通信ボード１００５は、有線または無線で、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネット、電話回線などの通信網に接続している。
【００７３】
磁気ディスク装置１０２０には、ＯＳ１０２１（オペレーティングシステム）、プログラム群１０２２、ファイル群１０２３が記憶されている。プログラム群１０２２には、本実施の形態において「〜部」として説明する機能を実行するプログラムが含まれる。プログラム（例えば、暗号化プログラム、データ検索プログラム、データ登録プログラム）は、ＣＰＵ１００１により読み出され実行される。すなわち、プログラムは、「〜部」としてコンピュータを機能させるものであり、また「〜部」の手順や方法をコンピュータに実行させるものである。ファイル群１０２３には、本実施の形態において説明する「〜部」で使用される各種データ（入力、出力、判定結果、計算結果、処理結果など）が含まれる。
【００７４】
本本実施の形態において構成図およびフローチャートに含まれている矢印は主としてデータや信号の入出力を示す。フローチャートなどに基づいて説明する本実施の形態の処理はＣＰＵ１００１、記憶装置、入力装置、出力装置などのハードウェアを用いて実行される。本実施の形態において「〜部」として説明するものは「〜回路」、「〜装置」、「〜機器」、「サーキットリ」であってもよく、また「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明するものは、ファームウェア、ソフトウェア、ハードウェアまたはこれらの組み合わせのいずれで実装されても構わない。
【００７５】
＜＊＊＊実施の形態１の効果＊＊＊＞
本実施の形態は、例えば、以下のような効果を奏する。
（１）本実施の形態では、たとえ同じ保管データをサーバへ保管したとしても、位置情報や毎回異なるデータ名により、毎回必ず異なる保管暗号化データが生成されるため、頻度分析攻撃などが受けにくくなり、高い安全性を達成する秘匿部分一致検索を実現できる。
（２）本実施の形態では、保管データを暗号化して保管しているため、たとえ管理装置５００から保管暗号化データが漏洩しても、保管データの中身を知られることはない。
（３）本実施の形態では、検索データのみならず保管データも暗号化したまま処理ができるため、検索暗号化データから検索データの中身を知られることはない。
（４）本実施の形態では、保管暗号化データと検索暗号化データから得られる検索結果にはデータ名と位置情報しか現れないため、サーバなどの鍵をもたないエンティティに対しては保管データや検索データの中身を知られることはない。
（５）本実施の形態では、検索結果には検索がヒットした事実に加えて、どの位置に検索データが現れるかについての位置情報もわかるため、柔軟な部分一致検索機能をもつ。
（６）本実施の形態では、検索暗号化データがただ一つの暗号文から構成されるため検索に用いるデータサイズが非常に小さく、また検索時にデータ検索者とサーバとのやりとりが１回しか発生しないため、効率的に秘匿部分一致検索することが可能である。
（７）本実施の形態では、共通鍵暗号技術からすべて構成できるため、効率的な秘匿部分一致検索を実現できる。
【００７６】
実施の形態２．
次に、本実施の形態の秘匿検索システムについて説明する。実施の形態１では、過去に用いた検索暗号化データ（ｔ＝Ｅ（Ｋ，ｓ））を、新しく追加した保管暗号化データ集合（（ＩＤ（Ｄ），Ｃ（Ｄ）））に対して直ちに適用できた。
実施の形態２で開示する技術は、過去に用いた検索暗号化データｔを、新しく追加した保管暗号化データ集合に対して適用できない。したがって、より高い安全性を達成できる。このようなことを達成するために、ハッシュ鎖などの多重暗号化を用いる方法を開示する。
【００７７】
実施の形態２では、暗号化関数Ｅに対して
「Ｅ＾Ｍ（Ｋ，ｗ）」
と記載したときは、（Ｋ，Ｍ）を初期値として、暗号化関数ＥをＭ回計算（言い換えると、Ｍ回の多重暗号化を実施）することを表すとする。例えば、このような多重暗号化としてハッシュ鎖がよく知られている。
例えば、
Ｅ＾Ｍ（Ｋ，ｗ）
をＭ回目に保管したデータに対する検索暗号化データｔとする。
ここで、Ｍ＋１回目に保管したデータに対する検索暗号化データｔを
ｔＭ＝Ｅ＾（Ｍ−１）（Ｋ，ｗ）とすると、
Ｍ＋１回目の検索暗号化データｔＭ＝Ｅ＾（Ｍ−１）（Ｋ，ｗ）
を再度暗号化することで、
Ｍ回目に保管したデータに対する検索暗号化データＥ＾Ｍ（Ｋ，ｗ）を生成できる。
一方で、Ｅ＾Ｍ（Ｋ，ｗ）からＥ＾（Ｍ−１）（Ｋ，ｗ）を計算することはハッシュ関数などの暗号化関数であれば一般的に困難である。
このため、過去に用いた検索暗号化データを新しく追加した保管暗号化データ集合に対して適用できず、より高い安全性を達成できる。
【００７８】
本実施の形態の秘匿検索システム１００は、実施の形態１とは一部異なっている。
【００７９】
鍵生成装置２００は鍵生成装置２００ａへ、登録装置３００は登録装置３００ａへと、検索装置４００は検索装置４００ａへと、管理装置５００は管理装置５００ａへと変更されている。
【００８０】
以下、本実施の形態の構成について説明する。以下では、鍵生成装置２００ａの構成、登録装置３００ａの構成、検索装置４００ａの構成、管理装置５００ａの構成について順番に説明する。
【００８１】
図１１は、鍵生成装置２００ａの構成を示すブロック図である。図１１に示すように、鍵生成装置２００ａは、鍵生成部２０１と、パラメーター生成部２０２ａと、送信部２０３ａとを備える。図示していないが、鍵生成装置２００ａは、鍵生成装置２００ａの各部で使用されるデータを記憶する記録媒体を備える。鍵生成部２０１の説明は、すでに述べたため省略する。
【００８２】
パラメーター生成部２０２ａは、前述のパラメーターＬを生成すると同時に、多重暗号化の最大回数を表すパラメーターＭを生成する。このＭは、同じ鍵Ｋを用いて保管データを管理装置５００ａに保管できる保管暗号化データ集合の最大数を表す。もし、Ｍを超えて保管暗号化データ集合を保管したい場合は、新しい鍵Ｋ´とＭ´を生成すれば、新たにＭ´個登録できるようになる。なお、Ｍは１より大きい整数である。また、ＭはＬと同様に秘密情報ではないため、公に公開されていても構わない。
【００８３】
送信部２０３ａは、鍵生成部２０１で生成された鍵Ｋを、登録装置３００ａと、検索装置４００ａとへ送信し、また、パラメーター生成部２０２ａで生成されたパラメーター（Ｌ，Ｍ）を、登録装置３００ａと、検索装置４００ａと、管理装置５００ａとへ送信する。
【００８４】
図１２は、登録装置３００ａの構成を示すブロック図である。図１２に示すように、登録装置３００ａは、受信部３０１ａと、鍵保管部３０２と、パラメーター保管部３０３ａと、入力部３０４と、データ分割部３０５と、部分文字列生成部３０６と、位置情報割当部３０７と、多重暗号化部３０８ａと、送信部３０９ａとを備える。図示していないが、登録装置３００ａは、登録装置３００ａの各部で使用されるデータを記憶する記録媒体を備える。鍵保管部３０２と、入力部３０４と、データ分割部３０５と、部分文字列生成部３０６と、位置情報割当部３０７との説明は、すでに述べたため省略する。
【００８５】
受信部３０１ａは、鍵生成装置２００ａから送信されてきた鍵Ｋとパラメーター（Ｌ，Ｍ）を受信する。
【００８６】
パラメーター保管部３０３ａは、受信部３０１ａから受け取ったパラメーター（Ｌ，Ｍ）を保管することや、鍵ＫとパラメーターＭを使って暗号化された管理装置５００ａに保管されている保管暗号化データ集合の数を表すパラメーターｍも保管する。
【００８７】
多重暗号化部３０８ａは、鍵保管部３０２から鍵Ｋを、パラメーター保管部３０３ａからパラメーターｍを読み出し、位置情報割当部３０７から受け取った位置情報付き部分文字列集合Ｂの中の各位置情報付き部分文字列に対する暗号文Ｃを次のように生成する。
位置情報と部分文字列の各ペア（ｐ，ｗ）に対して、
Ｃ＝Ｅ（Ｅ＾（Ｍ＋１−ｍ）（Ｋ，ｗ），ｐ，ＩＤ（Ｄ））
を生成する。
ここで、すべての（ｐ，ｗ）を暗号化した暗号文の集合をＣ（Ｄ）と書くことにする。  ここで、以降では
（ＩＤ（Ｄ），ｍ，Ｃ（Ｄ））
を保管暗号化データ集合と呼ぶことにする。
なお、Ｅ＾ｉ（ｉ≧１）を計算する場合、ＥがＡＥＳのような暗号化関数であればＥを計算する度に鍵が必要となるため、例えば値がすべて０やすべて１など鍵を事前に決めてパラメーターとして保管しておくことや、すでに保管されているパラメーターのＬやＭなどを鍵として用いてもよい。もし、Ｅがハッシュ関数であれば、多重暗号化のためにそのような鍵は必要としない。
【００８８】
送信部３０９ａは、暗号化部３０８から受け取った保管暗号化データ集合（ＩＤ（Ｄ），ｍ，Ｃ（Ｄ））を管理装置５００ａへ送信することや、またパラメーターｍを検索装置４００ａへ送信する。また、送信部３０９ａは、入力部３０４から受け取った削除データ名を管理装置５００へ送信する。
【００８９】
図１３は、検索装置４００ａの構成を示すブロック図である。図１３に示すように、検索装置４００ａは、受信部４０１ａと、鍵保管部４０２と、入力部４０３と、多重暗号化部４０４ａと、送信部４０５と、出力部４０６と、パラメーター保管部４０７ａとを備える。図示していないが、検索装置４００ａは、検索装置４００ａの各部で使用されるデータを記憶する記録媒体を備える。
【００９０】
鍵保管部４０２と、入力部４０３と、送信部４０５と、出力部４０６の説明は、既に述べたため省略する。
【００９１】
受信部４０１ａは、鍵生成装置２００ａから送信されてきた鍵ＫとパラメーターＭや、登録装置３００ａから送信されてきたパラメーターｍや、管理装置５００ａから送信されてきた検索結果を受信する。
【００９２】
多重暗号化部４０４ａは、鍵保管部４０２から鍵Ｋを、パラメーター保管部４０７ａからパラメーターｍを読み出し、入力部４０３から受け取った検索データｓに対して、鍵Ｋとパラメーターｍを用いて、次のように暗号文ｔを生成する。
多重暗号化部４０４ａは、
ｔ＝Ｅ＾（Ｍ＋１−ｍ）（Ｋ，ｓ）
を生成する。
以降では、このｔを検索暗号化データと呼ぶ。
なお、前述の通り、Ｅ＾ｉ（ｉ≧１）を計算する場合、ＥがＡＥＳのような暗号化関数であればＥを計算する度に鍵が必要となるため、例えば値がすべて０やすべて１など鍵を事前に決めてパラメーターとして保管しておくことや、すでに保管されているパラメーターのＬやＭなどを鍵として用いてもよい。もし、Ｅがハッシュ関数であれば、多重暗号化のためにそのような鍵は必要としない。
【００９３】
パラメーター保管部４０７ａは、受信部４０１から受け取ったパラメーターＭを保管する。また、受信部４０１から受け取ったパラメーターがペアｍの場合、パラメーター保管部４０７ａは、すでに保管されている（Ｍ，ｍ）のｍのパラメーターを更新する。
【００９４】
図１４は、管理装置５００ａの構成を示すブロック図である。図１４に示すように、管理装置５００ａは、受信部５０１ａと、パラメーター保管部５０２ａと、データ保管部５０３と、照合部５０４ａと、送信部５０５と、多重暗号化部５０６ａとを備える。図示していないが、管理装置５００ａは、管理装置５００ａの各部で使用されるデータを記憶する記録媒体を備える。
【００９５】
データ保管部５０３と、送信部５０５の説明は、すでに述べたため省略する。
【００９６】
受信部５０１ａは、鍵生成装置２００ａから送信されてきたパラメーター（Ｌ，Ｍ）、登録装置３００ａから送信されてきた保管暗号化データ集合（ＩＤ（Ｄ），ｍ，Ｃ（Ｄ））や削除データ名、検索装置４００ａから送信されてきた検索暗号化データｔや保管データ名を受信する。
【００９７】
パラメーター保管部５０２ａは、受信部５０１ａから受け取ったパラメーター（Ｌ，Ｍ）や、保管暗号化データ集合（ＩＤ（Ｄ），ｍ，Ｃ（Ｄ））のｍも合わせて保管する。
【００９８】
照合部５０４ａは、検索結果に関わる空集合Ｒを生成し、データ保管部５０３から、すべての保管暗号化データ集合（ＩＤ（Ｄｉ），ｍ，Ｃ（Ｄｉ））（１≦ｉ≦ｍ）を読み出し、後述する多重暗号化部５０６ａから受け取った多重暗号化データ集合
｛（１，ｔ１）、（２，ｔ２），・・・，（ｍ，ｔｍ）｝
に基づき、次のようにして照合を行うことや検索結果を生成する。
照合部５０４ａは、
各ｉ（１≦ｉ≦ｍ）に対して、（ＩＤ（Ｄｉ），ｉ，Ｃ（Ｄｉ））
となる保管暗号化データ集合を抽出し、
Ｘｉ＝｛Ｔ１＿ｉ＝Ｅ（ｔｉ，１，ＩＤ（Ｄｉ）），・・・，ＴＬ＿ｉ＝Ｅ（ｔｉ，Ｌ，ＩＤ（Ｄｉ））｝
を計算する。
その後、照合部５０４ａは、各Ｔｐ＿ｉ（１≦ｐ≦Ｌ）がＣ（Ｄｉ）に含まれているかを確認する。もしＴｐ＿ｉがＣ（Ｄｉ）に含まれているならば、ペア（ＩＤ（Ｄｉ），ｐ）をＲに加える。この（ＩＤ（Ｄｉ），ｐ）は「ＩＤ（Ｄｉ）のｐ番目の位置に検索データが現れる」を意味する。
以降では、各Ｔｐ＿ｉをＩＤ（Ｄｉ）に対する照合データと呼び、
｛Ｔ１，・・・，ＴＬ｝
をＩＤ（Ｄｉ）に対する照合データ集合と呼ぶことにする。また、本処理の結果、最終的に生成される集合Ｒを検索結果と呼ぶことにする。
【００９９】
なお、照合部５０４ａは、受信部５０１ａが検索装置４００ａから保管データ名も受信していれば、それに基づいてデータ保管部５０３から対象となる保管暗号化データ集合のみを読み出して、同様な処理を行う。
【０１００】
多重暗号化部５０６ａは、パラメーター保管部５０２ａからパラメーターｍを読み出し、受信部５０１から受け取った検索暗号化データｔに基づき、次のような多重暗号化データを生成する。
ｔ１＝Ｅ＾（ｍ−１）（ｔ），
ｔ２＝Ｅ＾（ｍ−２）（ｔ），
・・・，
ｔｍ＝Ｅ＾０（ｔ）＝ｔ。
以降、
集合｛（１，ｔ１）、（２，ｔ２），・・・，（ｍ，ｔｍ）｝
を多重暗号化データ集合と呼ぶことにする。
なお、前述の通り、Ｅ＾ｉ（ｉ≧１）を計算する場合、ＥがＡＥＳのような暗号化関数であればＥを計算する度に鍵が必要となるため、例えば値がすべて０やすべて１など鍵を事前に決めてパラメーターとして保管しておくことや、すでに保管されているパラメーターのＬやＭなどを鍵として用いてもよい。もし、Ｅがハッシュ関数であれば、多重暗号化のためにそのような鍵は必要としない。
【０１０１】
以下では、本実施の形態に係る検索方法に相当する、秘匿検索システム１００の動作について説明する。
図１５は、本実施の形態における秘匿検索システム１００の鍵生成・保管処理を示すフローチャートである。図１５のＳ６０１〜Ｓ６１２ａは、鍵生成装置２００ａと、登録装置３００ａと、検索装置４００ａと、管理装置５００ａとが実行する処理である。Ｓ６０１〜Ｓ６０５ａは鍵生成装置２００ａに、Ｓ６０６ａ〜Ｓ６０８ａは登録装置３００ａに、Ｓ６０９ａ〜Ｓ６１０ａ２は検索装置４００ａに、Ｓ６１１ａ〜Ｓ６１２ａは管理装置５００ａによって実行される処理である。
【０１０２】
なお、本検索処理におけるＳ６０１とＳ６０７とは、実施の形態１のそれぞれと同様の処理であるため、ここでは省略する。
【０１０３】
Ｓ６０２ａにおいて、パラメーター生成部２０２ａは、パラメーターＬ及びＭを生成する。なお、前述の通り、Ｌは保管データを分割したときに現れる文字列の最大数であり、またＭは同じ鍵Ｋを用いて保管データを管理装置５００ａに保管できる保管暗号化データ集合の最大数を表す。
Ｓ６０３ａにおいて、送信部２０３ａは、Ｓ６０１で生成した鍵Ｋと、Ｓ６０２ａで生成したパラメーター（Ｌ，Ｍ）とを、登録装置３００ａへ送信する。
Ｓ６０４ａにおいて、送信部２０３ａは、Ｓ６０１で生成した鍵Ｋと、Ｓ６０２ａで生成したパラメーター（Ｌ，Ｍ）とを、検索装置４００ａへ送信する。
Ｓ６０５ａにおいて、送信部２０３ａは、Ｓ６０２で生成したパラメーター（Ｌ，Ｍ）を、管理装置５００ａへ送信する。
【０１０４】
Ｓ６０６ａにおいて、受信部３０１ａは、Ｓ６０３ａで送信された鍵Ｋと、パラメーター（Ｌ，Ｍ）とを受信する。
Ｓ６０８ａにおいて、パラメーター保管部３０３ａは、Ｓ６０６ａで受信したパラメーター（Ｌ，Ｍ）を記憶媒体に保管する。
【０１０５】
Ｓ６０９ａにおいて、受信部４０１ａは、Ｓ６０４ａで送信された鍵Ｋと、パラメーター（Ｌ，Ｍ）とを受信する。
Ｓ６１０ａ１において、鍵保管部４０２は、Ｓ６０９ａで受信した鍵Ｋを記憶媒体に保管する。
Ｓ６１０ａ２において、パラメーター保管部４０７ａは、Ｓ６０９ａで受信したパラメーター（Ｌ，Ｍ）を記憶媒体に保管する。
【０１０６】
Ｓ６１１ａにおいて、受信部５０１ａは、Ｓ６０５ａで送信されたパラメーター（Ｌ，Ｍ）を受信する。
Ｓ６１２ａにおいて、パラメーター保管部５０２ａは、Ｓ６１１ａで受信したパラメーター（Ｌ，Ｍ）を記憶媒体に保管する。Ｓ６１２ａにより、秘匿検索システム１００の鍵生成・保管処理は終了する。
【０１０７】
図１６は、実施の形態２の秘匿検索システム１００の登録処理を示すフローチャートである。図１６のＳ７０１〜Ｓ７１２ａは、登録装置３００ａと、検索装置４００ａと、管理装置５００ａとが実行する処理である。Ｓ７０１〜Ｓ７０６と、Ｓ７０９ａと、Ｓ７１２ａは登録装置３００ａに、Ｓ７０７〜Ｓ７０８ａ２は管理装置５００ａに、Ｓ７１０ａ〜Ｓ７１１ａは検索装置４００ａによって実行される処理である。
【０１０８】
なお、本検索処理におけるＳ７０１〜Ｓ７０４と、Ｓ７０６〜Ｓ７０７とは、実施の形態１のそれぞれと同様の処理であるため、ここでは省略する。
【０１０９】
Ｓ７０５ａにおいて、多重暗号化部３０８は、鍵保管部３０２から鍵Ｋを、パラメーター保管部３０３ａからパラメーターｍを読み出し、Ｓ７０４で生成された位置情報付き部分文字列集合Ｂの中の各位置情報付き部分文字列の暗号文Ｃを次のように生成する。
多重暗号化部３０８は、位置情報と部分文字列の各ペア（ｐ，ｗ）に対して、
Ｃ＝Ｅ（Ｅ＾（Ｍ＋１−ｍ）（Ｋ，ｗ），ｐ，ＩＤ（Ｄ））
と計算する。また、すべての（ｐ，ｗ）を暗号化した暗号文の集合をＣ（Ｄ）とし、保管暗号化データ集合（ＩＤ（Ｄ），ｍ，Ｃ（Ｄ））を生成する。
【０１１０】
Ｓ７０８ａ１において、データ保管部５０３は、Ｓ７０７で受信した保管暗号化データ集合（ＩＤ（Ｄ），ｍ，Ｃ（Ｄ））を保管する。
Ｓ７０８ａ２において、パラメーター保管部５０２ａは、Ｓ７０７で受信した保管暗号化データ集合（ＩＤ（Ｄ），ｍ，Ｃ（Ｄ））のｍから保管されているｍの値を更新する。
【０１１１】
Ｓ７０９ａにおいて、送信部３０９ａは、Ｓ７０５ａで読み出したパラメーターｍを検索装置４００ａへ送信する。
【０１１２】
Ｓ７１０ａにおいて、受信部４０１ａは、Ｓ７１０ａで送信されたパラメーターｍを受信する。
Ｓ７１１ａにおいて、パラメーター保管部４０７ａは、保管されているパラメーターｍをＳ７１１ａで受信したパラメーターｍに置き換えて更新する。
【０１１３】
Ｓ７１２ａにおいて、パラメーター保管部３０３ａは、パラメーターｍの値を１カウントアップしてｍの値を更新する。Ｓ７１２ａにより、秘匿検索システム１００の登録処理は終了する。
【０１１４】
図１７は、実施の形態２の秘匿検索システム１００の検索処理を示すフローチャートである。図１７のＳ８０１〜Ｓ８１０は、検索装置４００ａと管理装置５００ａとが実行する処理である。Ｓ８０１〜Ｓ８０３及びＳ８０９〜Ｓ８１０は検索装置４００ａに、Ｓ８０４〜Ｓ８０８は管理装置５００にａよって実行される処理である。
【０１１５】
なお、本検索処理におけるＳ８０１と、Ｓ８０３と、Ｓ８０４と、Ｓ８０８〜Ｓ８１０は、実施の形態１のそれぞれと同様の処理であるため、ここでは省略する。
【０１１６】
Ｓ８０２ａにおいて、多重暗号化部４０４ａは、鍵保管部４０２から鍵Ｋを、パラメーター保管部４０７ａからパラメーターｍを読み出し、Ｓ８０１で受け取った検索データｓに対して鍵Ｋを用いて、次のようにして検索暗号化データｔを生成する。
ｔ＝Ｅ＾（Ｍ＋１−ｍ）（Ｋ，ｓ）。
【０１１７】
Ｓ８０５ａ１において、多重暗号化部５０６ａは、パラメーター保管部５０２ａからパラメーターｍを読み出し、Ｓ８０４で受信した検索暗号化データｔに基づき、次のような多重暗号化データ集合
｛（１，ｔ１）、（２，ｔ２），・・・，（ｍ，ｔｍ）｝を生成する。
ただし、
ｔ１＝Ｅ＾（ｍ−１）（ｔ），ｔ２＝Ｅ＾（ｍ−２）（ｔ），・・・，ｔｍ＝Ｅ＾０（ｔ）＝ｔ
である。
Ｓ８０５ａ２において、照合部５０４ａは、データ保管部５０３から保管暗号化データ集合（ＩＤ（Ｄ），Ｃ（Ｄ））を読み出す。なお、もしＳ８０４で保管データ名も受信していた場合は、その保管データ名に基づき、対象の保管暗号化データ集合のみを読み出す。もしＳ８０４で保管データ名を受信していなかった場合は、保管されているすべての保管暗号化データ集合を読み出す。ここで、読み出した複数の保管暗号化データ集合を
｛（ＩＤ（Ｄ１），１，Ｃ（Ｄ１）），・・・，（ＩＤ（Ｄｍ），ｍ，Ｃ（Ｄｍ））｝
とする。
Ｓ８０６ａにおいて、照合部５０４ａは、パラメーター保管部５０２ａからパラメーターＬを読み出し、Ｓ８０５ａ２で読み出した各（ＩＤ（Ｄｉ），ｉ，Ｃ（Ｄｉ））（１≦ｉ≦ｍ）に対して、Ｓ８０５ａ１で生成した多重暗号化データ（ｉ，ｔｉ）に基づき、ＩＤ（Ｄｉ）に対する照合データ集合Ｘｉ＝｛Ｔ１＿ｉ，・・・，ＴＬ＿ｉ｝を生成する。
ただし、
Ｔ１＿ｉ＝Ｅ（ｔｉ，１，ＩＤ（Ｄｉ）），・・・，ＴＬ＿ｉ＝Ｅ（ｔｉ，Ｌ，ＩＤ（Ｄｉ））である。
Ｓ８０７ａにおいて、照合部５０４ａは、検索結果に関わる空集合Ｒを生成し、
各ｐ（１≦ｐ≦Ｌ）に対して次のような処理を行う。
Ｓ８０６ａで生成したＩＤ（Ｄｉ）に対する各照合データＴｐ＿ｉ（１≦ｐ≦Ｌ）がＣ（Ｄｉ）に含まれているかを確認する。もしＴｐ＿ｉがＣ（Ｄｉ）に含まれているならば、ペア（ＩＤ（Ｄｉ），ｐ）をＲに加える。
【０１１８】
Ｓ８１０により、秘匿検索システム１００の検索処理は終了する。本実施の形態でも、実施の形態１と同様な削除処理を行うことにより、保管暗号化データ集合の削除が可能である。
【０１１９】
＜本実施の形態の動作具体例＞
ここで、本実施の形態の動作を、
パラメーターＬ＝３、パラメーターＭ＝２、
最初の保管データをＤ１＝ＡＢＣ，ＩＤ（Ｄ１）＝１、
次の保管データをＤ２＝ＢＣ，ＩＤ（Ｄ２）＝２、
検索データを＝ＢＣ、
として説明する。
また暗号化関数Ｅは、ハッシュ関数を用いて説明する。
【０１２０】
まず、Ｄ１の登録処理について説明する。
Ｓ７０２において、Ｄ１＝（Ａ，Ｂ，Ｃ）と分割される。
Ｓ７０３において、
Ａ１＝｛｛（Ａ），（ＡＢ），（ＡＢＣ）｝，｛（Ｂ），（ＢＣ）｝，｛（Ｃ）｝｝
と生成される。
Ｓ７０４において、
Ｂ１＝｛｛（１，Ａ），（１，ＡＢ），（１，ＡＢＣ）｝，｛（２，Ｂ），（２，ＢＣ）｝，｛（３，Ｃ）｝｝と生成される。
Ｓ７０５ａにおいて、ｍ＝１が読み出され、
Ｃ１１＝Ｅ（Ｅ＾２（Ｋ，Ａ），１，１），
Ｃ１２＝Ｅ（Ｅ＾２（Ｋ，ＡＢ），１，１），
Ｃ１３＝Ｅ（Ｅ＾２（Ｋ，ＡＢＣ），１，１），
Ｃ１４＝Ｅ（Ｅ＾２（Ｋ，Ｂ），２，１），
Ｃ１５＝Ｅ（Ｅ＾２（Ｋ，ＢＣ），２，１），
Ｃ１６＝Ｅ（Ｅ＾２（Ｋ，Ｃ），３，１）
を生成し，保管暗号化データ集合（１，Ｃ（Ｄ１））を生成する。
ただし、
Ｃ（Ｄ１）＝｛Ｃ１１，Ｃ１２，Ｃ１３，Ｃ１４，Ｃ１５，Ｃ１６｝
及び
Ｍ＋１−ｍ＝２である。
Ｓ７０７及びＳ７０８ａ１により、保管暗号化データ集合（１，１，Ｃ（Ｄ１））が保管される。Ｓ７０８ａ２〜Ｓ７１２ａにより、パラメーター保管部３０３ａのパラメーターｍが２に、パラメーター保管部４０７ａとパラメーター保管部５０２ａのパラメーターｍが１に更新される。
【０１２１】
次に、Ｄ１に対してｓを使った検索処理について説明する。
Ｓ８０２ａにおいて、ｍ＝１を読み出し、ｔ＝Ｅ＾２（Ｋ，ｓ）を計算する。
ただし、Ｍ＋１−ｍ＝２である。
Ｓ８０５ａ１において、ｍ＝１を読み出し、ｔ１＝ｔを計算し、
多重暗号化データ集合｛（１，ｔ１）｝を生成する。
Ｓ８０５ａ２において、（１，１，Ｃ（Ｄ１））を読み出す。
Ｓ８０６ａにおいて、
Ｔ１＿１＝Ｅ（ｔ１，１，１），
Ｔ２＿１＝Ｅ（ｔ１，２，１），
Ｔ３＿１＝Ｅ（ｔ１，３，１）
を計算する。
Ｓ８０７ａにおいて、Ｔ１＿１，Ｔ２＿１，Ｔ３＿１がＣ（Ｄ１）に含まれているかを確認する。実際、Ｔ２＿１はＣ（Ｄ１）に含まれる（Ｃ１５と一致する）。
よって、検索結果Ｒ＝｛（１，２）｝が生成される。
Ｓ８１０において、Ｒに基づき、「保管データ名が“１”のデータの“２番目”の位置から検索データＢＣが現れる」といった検索結果を出力する。
【０１２２】
次に、Ｄ２の登録処理を行う。
Ｓ７０２において、Ｄ２＝（Ｂ，Ｃ）と分割される。
Ｓ７０３において、Ａ２＝｛｛（Ｂ），（ＢＣ）｝，｛（Ｃ）｝｝と生成される。
Ｓ７０４において、Ｂ２＝｛｛（１，Ｂ），（１，ＢＣ）｝，｛（２，Ｃ）｝｝と生成される。
Ｓ７０５ａにおいて、ｍ＝２が読み出され、
Ｃ２１＝Ｅ（Ｅ＾１（Ｋ，Ｂ），１，２），
Ｃ２２＝Ｅ（Ｅ＾１（Ｋ，ＢＣ），１，２），
Ｃ２３＝Ｅ（Ｅ＾１（Ｋ，Ｃ），２，２）
を生成し、保管暗号化データ集合（２，Ｃ（Ｄ２））
を生成する。
ただし、
Ｃ（Ｄ２）＝｛Ｃ２１，Ｃ２２，Ｃ２３｝
及び
Ｍ＋１−ｍ＝１である。
また、Ｅ＾１＝Ｅである。
Ｓ７０７及びＳ７０８ａ１により、保管暗号化データ集合（２，２，Ｃ（Ｄ２））が保管される。
Ｓ７０８ａ２〜Ｓ７１２ａにより、パラメーター保管部３０３ａのパラメーターｍが３に、パラメーター保管部４０７ａとパラメーター保管部５０２ａのパラメーターｍが２に更新される。
【０１２３】
次に、Ｄ１とＤ２に対して再度ｓを使った検索処理について説明する。
Ｓ８０２ａにおいて、ｍ＝２を読み出し、ｔ＝Ｅ（Ｋ，ｓ）を計算する。
ただし、Ｍ＋１−ｍ＝１である。
Ｓ８０５ａ１において、ｍ＝２を読み出し、ｔ１＝Ｅ（ｔ），ｔ２＝ｔ，を計算し、多重暗号化データ集合｛（１，ｔ１）、（２，ｔ２）｝を生成する。
Ｓ８０５ａ２において、
（１，１，Ｃ（Ｄ１））と（２，２，Ｃ（Ｄ２））
を読み出す。
Ｓ８０６ａにおいて、
Ｔ１＿１＝Ｅ（ｔ１，１，１），
Ｔ２＿１＝Ｅ（ｔ１，２，１），
Ｔ３＿１＝Ｅ（ｔ１，３，１）及び
Ｔ１＿２＝Ｅ（ｔ２，１，２），
Ｔ２＿２＝Ｅ（ｔ２，２，２），
Ｔ３＿２＝Ｅ（ｔ２，３，２）
を計算する。
Ｓ８０７ａにおいて、Ｔ１＿１，Ｔ２＿１，Ｔ３＿１がＣ（Ｄ１）に含まれているか、
またＴ１＿２，Ｔ２＿２，Ｔ３＿２がＣ（Ｄ２）に含まれているかを確認する。
実際、
Ｔ２＿１はＣ（Ｄ１）に含まれ（Ｃ１５と一致し）、
Ｔ１＿２はＣ（Ｄ２）に含まれる（Ｃ２２と一致する）。
よって、検索結果Ｒ＝｛（１，２），（２，１）｝が生成される。
【０１２４】
Ｓ８１０において、Ｒに基づき、「保管データ名が“１”のデータの“２番目”の位置から検索データＢＣが現れる」、「保管データ名が“２”のデータの“１番目”の位置から検索データＢＣが現れる」といった検索結果を出力する。
なお、一度目に検索した検索データと二度目に検索した検索データは同一であるが（ｓ＝ＢＣ）、検索暗号化データはそれぞれＥ＾２（Ｋ，ｓ），Ｅ（Ｋ，ｓ）であるため異なった値が生成されている。また、Ｅ（Ｋ，ｓ）からＥ＾２（Ｋ，ｓ）は計算できるため、二度目に検索した検索暗号化データから一度目に検索した検索暗号化データが作れる。一方で、Ｅ＾２（Ｋ，ｓ）からＥ（Ｋ，ｓ）を計算することは一般的に困難であるため、一度目に検索した検索暗号化データから二度目に検索した検索暗号化データを作ることは困難である。
【０１２５】
以上が具体例の説明である。
【０１２６】
本実施の形態におけるハードウェア資源の一例は、実施の形態１と同様であるため省略する。本実施の形態は、例えば、以下のような効果を奏する。
【０１２７】
＜＊＊＊実施の形態２の効果＊＊＊＞
本実施の形態では、実施の形態１と同様な効果を得ることに加えて、ハッシュ鎖などの多重暗号化を用いることにより、過去に用いた検索暗号化データを、新しく追加した保管暗号化データ集合に対して適用できないため、より高い安全性を達成できる。
【０１２８】
実施の形態３．
次に、本実施の形態の秘匿検索システムについて説明する。
【０１２９】
実施の形態２では、ハッシュ鎖などの多重暗号化を用いることにより、より高い安全性を達成できたが、同じ鍵Ｋで生成や保管できる保管暗号化データ集合の数がパラメーターＭと線型に依存するため、Ｍをある程度大きくとる必要がある。
一方で、Ｍを大きくとりすぎると、多重暗号化処理に時間がかかってしまう。
そこで、本実施の形態では、保管データを１つずつ保管することはせずに、複数の保管データをまとめて保管することによって、実施の形態２と同じＭを選択しても、同じ鍵Ｋで暗号化や保管できる保管データの最大数を大きくすることや、かつ検索効率を向上できるような技術を開示する。
【０１３０】
本実施の形態では、保管データを１つずつ保管することはせずに、索引として複数の保管データを同時に保管する手法を開示する。
【０１３１】
本実施の形態の秘匿検索システム１００は、実施の形態２とは一部異なっている。鍵生成装置２００ａは鍵生成装置２００ｂへと、登録装置３００ａは登録装置３００ｂへと、検索装置４００ａは検索装置４００ｂへと、管理装置５００ａは管理装置５００ｂへと変更されている。
【０１３２】
以下、本実施の形態の構成について説明する。以下では、鍵生成装置２００ｂの構成、登録装置３００ｂの構成、検索装置４００ｂの構成、管理装置５００ｂの構成について順番に説明する。
【０１３３】
図１８は、鍵生成装置２００ｂの構成を示すブロック図である。図１８に示すように、鍵生成装置２００ｂは、鍵生成部２０１と、パラメーター生成部２０２ｂと、送信部２０３ｂとを備える。図示していないが、鍵生成装置２００ｂは、鍵生成装置２００ｂの各部で使用されるデータを記憶する記録媒体を備える。鍵生成部２０１の説明は、すでに述べたため省略する。
【０１３４】
パラメーター生成部２０２ｂは、前述のパラメーターＬ，Ｍを生成すると同時に、一度に保管できる保管データの最大数を表すパラメーターＮを生成する。すなわち、各索引は最大Ｎ個の保管データに関する情報を保持することができる。もし、一度に保管する保管データ数がＮを超える場合は、各索引を高々Ｎ個の保管データと対応づけるように複数の索引を生成する。なお、Ｎは１より大きい整数である。また、ＮはＬ，Ｍと同様に秘密情報ではないため、公に公開されていても構わない。
【０１３５】
送信部２０３ｂは、鍵生成部２０１で生成された鍵Ｋを、登録装置３００ｂと、検索装置４００ｂとへ送信し、また、パラメーター生成部２０２ｂで生成されたパラメーター（Ｌ，Ｍ，Ｎ）を、登録装置３００ｂと、管理装置５００ｂとへ送信し、またパラメーター（Ｌ，Ｍ）を検索装置４００ｂへ送信する。
【０１３６】
図１９は、登録装置３００ｂの構成を示すブロック図である。図１９に示すように、登録装置３００ｂは、受信部３０１ｂと、鍵保管部３０２と、パラメーター保管部３０３ｂと、入力部３０４ｂと、データ分割部３０５と、部分文字列生成部３０６と、位置情報割当部３０７と、多重暗号化部３０８ｂと、送信部３０９ｂと、集約部３１０ｂとを備える。図示していないが、登録装置３００ｂは、登録装置３００ｂの各部で使用されるデータを記憶する記録媒体を備える。
【０１３７】
鍵保管部３０２と、データ分割部３０５と、部分文字列生成部３０６と、位置情報割当部３０７との説明は、すでに述べたため省略する。
【０１３８】
受信部３０１ｂは、鍵生成装置２００ｂから送信されてきた鍵Ｋとパラメーター（Ｌ，Ｍ，Ｎ）を受信する。
【０１３９】
パラメーター保管部３０３ｂは、受信部３０１ｂから受け取ったパラメーター（Ｌ，Ｍ，Ｎ）を保管することや、鍵ＫとパラメーターＭを使って暗号化された管理装置５００ａに保管されている索引の数を表すパラメーターｍも保管する。なお、ｍの初期値は１を表し、多重暗号化部３０８ａからｍが読み出されたら、ｍの値を１カウントアップしてｍの値を更新する。
【０１４０】
入力部３０４ｂは、データ登録者から保管データ及び保管データ名の
ペアの集合｛（ＩＤ（Ｄ１），Ｄ１），・・・，（ＩＤ（Ｄｎ），Ｄｎ）｝、
また索引名ＩＤ（Ｉ）
を受け取る。
なお、保管データ及び保管データ名は集合ではなく、単一でもよい。
もしｎ＞Ｎの場合は、ｎ＝ｎ１＋・・・＋ｎｋかつｎｊ≦ｎ（１≦ｊ≦ｎ）
となるように分割して、各ｎｊについて以下の処理をｋ回実行すればよい。
もし、データ登録者から索引名の入力がなければ、入力部３０４ｂは、ＩＤ（Ｉ）を乱数と割り当ててもよいし、他の索引名と重複しないように０より大きい整数の値を順に割り当ててもよい。
ここで、データ分割部３０５と、部分文字列生成部３０６と、位置情報割当部３０７とは、上記の
｛（ＩＤ（Ｄ１），Ｄ１），・・・，（ＩＤ（Ｄｎ），Ｄｎ）｝
に対して、次のように処理を行ったとする。
各データは
Ｄ１＝（ｗ１＿１，・・・，ｗＬ＿１），・・・，Ｄｎ＝（ｗ１＿ｎ，・・・，ｗＬ＿ｎ）
のように分割され、各位置情報付き部分文字列集合Ｂｉ（１≦ｉ≦ｎ）は、
｛（１，ｗ１＿ｉ），（１，ｗ１＿ｉｗ２＿ｉ），・・・，（１，ｗ１＿ｉ・・・ｗＬ＿ｉ）｝，
｛（２，ｗ２＿ｉ），（２，ｗ２＿ｉｗ３＿ｉ），・・・，（２，ｗ２＿ｉ・・・ｗＬ＿ｉ）｝，
・・・，
｛（Ｌ，ｗＬ＿ｉ）｝｝
のように生成されたとする。
【０１４１】
多重暗号化部３０８ｂは、後述する集約部３１０ｂから受け取った集約データ集合Ｙを受け取り、鍵保管部３０２から鍵Ｋを、パラメーター保管部３０３ｂからパラメーター（ｍ，Ｍ，Ｎ）を読み出し、Ｙの各要素の暗号文及び集合Ｉを次のように生成する。
各要素（ｐ，ｗ，｛ＩＤ（Ｄ＿ｉ１），・・・，ＩＤ（Ｄ＿ｉｋ）｝，｛ＩＤ（Ｄ＿ｉｋ＋１），・・・，ＩＤ（Ｄ＿ｉｎ）｝）に対して、
Ｃ１    ＝Ｅ（Ｅ＾（Ｍ＋１−ｍ）（Ｋ，ｗ，０），ｐ，１，    ＩＤ（Ｉ）），
・・・，
Ｃｋ    ＝Ｅ（Ｅ＾（Ｍ＋１−ｍ）（Ｋ，ｗ，０），ｐ，ｋ，    ＩＤ（Ｉ）），
Ｃｋ＋１＝Ｅ（Ｅ＾（Ｍ＋１−ｍ）（Ｋ，ｗ，１），ｐ，ｋ＋１，ＩＤ（Ｉ）），
・・・，
Ｃｎ＝    Ｅ（Ｅ＾（Ｍ＋１−ｍ）（Ｋ，ｗ，１），ｐ，ｎ，    ＩＤ（Ｉ））
と生成し、
集合Ｉ＝｛（Ｃｊ，ＩＤ（Ｄ＿ｉｊ））｝
と置く。以降、この集合Ｉを索引と呼ぶことにする。
また、（ＩＤ（Ｉ），ｍ，Ｉ）
を保管索引と呼ぶことにする。
【０１４２】
送信部３０９ｂは、多重暗号化部３０８ｂから受け取った保管索引（ＩＤ（Ｉ），ｍ，Ｉ）を管理装置５００ｂへ送信することや、また索引Ｉを生成したときに用いたパラメーターｍを検索装置４００ｂへ送信する。
【０１４３】
集約部３１０ｂは、位置情報割当部３０７から受け取ったＢ１，・・・Ｂｎに対して、次のような集合Ｙを生成する。
集合Ｙの各要素は、
（ｐ，ｗ，｛ＩＤ（Ｄ＿ｉ１），・・・，ＩＤ（Ｄ＿ｉｋ）｝，｛ＩＤ（Ｄ＿ｉｋ＋１），・・・，ＩＤ（Ｄ＿ｉｎ）｝）
は、
「（ｐ，ｗ）はＢｉ１，・・・，Ｂｉｋそれぞれに含まれるが、Ｂｉｋ＋１，・・・，Ｂｉｎには含まれない」ことを意味する。
なお、このペア（ｐ，ｗ）は必ずＢ１，・・・，Ｂｎのいずれかに含まれるとする。また、複数含まれてもよい。つまり、ＹはＢ１，・・・，Ｂｎの要素を集約した集合とみなすことができる。また、
｛ＩＤ（Ｄ＿ｉ１），・・・，ＩＤ（Ｄ＿ｉｎ）｝＝｛ＩＤ（Ｄ１），・・・，ＩＤ（Ｄｎ）｝
である。以降では、Ｙを集約データ集合と呼ぶことにする。
【０１４４】
図２０は、検索装置４００ｂの構成を示すブロック図である。図２０に示すように、検索装置４００ｂは、受信部４０１ａと、鍵保管部４０２と、入力部４０３ｂと、多重暗号化部４０４ｂと、送信部４０５ｂと、出力部４０６と、パラメーター保管部４０７ａとを備える。図示していないが、検索装置４００ｂは、検索装置４００ｂの各部で使用されるデータを記憶する記録媒体を備える。
【０１４５】
受信部４０１ａと、鍵保管部４０２と、出力部４０６と、パラメーター保管部４０７ａの説明は、既に述べたため省略する。
【０１４６】
入力部４０３ｂは、データ検索者から入力された検索データｓを受け取る。また、入力部４０３ｂは、データ検索者から、検索データと同時に、その検索データと検索したい保管索引を指定するような保管索引名も複数受けとってもよい。
【０１４７】
多重暗号化部４０４ｂは、鍵保管部４０２から鍵Ｋを、パラメーター保管部４０７ａからパラメーターｍを読み出し、入力部４０３ｂから受け取った検索データｓに対して、鍵Ｋとパラメーターｍを用いて、次のように暗号文ｔを生成する。
多重暗号化部４０４ｂは、
ｔ＝Ｅ＾（Ｍ＋１−ｍ）（Ｋ，ｓ，０）
を生成する。
以降では、このｔを検索暗号化データと呼ぶ。
【０１４８】
送信部４０５ｂは、多重暗号化部４０４ｂから受け取った検索暗号化データｔを管理装置５００ｂへ送信する。もし、データ検索者から検索データと同時に保管索引名も入力されていた場合は、検索暗号化データと保管索引名の両方を管理装置５００ｂへ送信する。
【０１４９】
図２１は、管理装置５００ｂの構成を示すブロック図である。図２１に示すように、管理装置５００ｂは、受信部５０１ｂと、パラメーター保管部５０２ｂと、データ保管部５０３ｂと、照合部５０４ｂと、送信部５０５と、多重暗号化部５０６ａとを備える。図示していないが、管理装置５００ｂは、管理装置５００ｂの各部で使用されるデータを記憶する記録媒体を備える。
【０１５０】
送信部５０５と、多重暗号化部５０６ａの説明は、すでに述べたため省略する。
【０１５１】
受信部５０１ｂは、鍵生成装置２００ｂから送信されてきたパラメーター（Ｌ，Ｍ，Ｎ）、登録装置３００ｂから送信されてきた保管暗号化データ集合（ＩＤ（Ｉ），ｍ，Ｉ）や削除索引名、検索装置４００ｂから送信されてきた検索暗号化データｔや保管索引名を受信する。
【０１５２】
パラメーター保管部５０２ｂは、受信部５０１ｂから受け取ったパラメーター（Ｌ，Ｍ，Ｎ）や、保管索引（ＩＤ（Ｉ），ｍ，Ｉ）のｍも合わせて保管する。
【０１５３】
データ保管部５０３ｂは、受信部５０１ｂから受け取った保管索引（ＩＤ（Ｉ），ｍ，Ｉ）を保管する。必要があれば、送信されてきた日時なども同時に保管してもよい。また、データ保管部５０３ｂは、受信部５０１ｂから受け取った削除索引名に基づき、保管している保管索引を削除する。
【０１５４】
照合部５０４ｂは、検索結果に関わる空集合Ｒを生成し、データ保管部５０３ｂからすべての保管索引（ＩＤ（Ｉ），ｍ，Ｉ）を読み出し、多重暗号化部５０６ａから受け取った多重暗号化データ集合｛（１，ｔ１）、（２，ｔ２），・・・，（ｍ，ｔｍ）｝に基づき、次のようにして照合を行うことや検索結果を生成する。
照合部５０４ｂは、各ｉ（１≦ｉ≦ｍ）に対して、（ＩＤ（Ｉ），ｉ，Ｉ）となる保管索引を抽出し、次を繰り返し実行する。
照合部５０４ｂは、各ｐ（１≦ｐ≦Ｌ）及び各ｊ（１≦ｊ≦Ｎ）に対して、
Ｃ＿ｐｊ＝Ｅ（ｔｉ，ｐ，ｊ，ＩＤ（Ｉ））を計算し（全部でＬ×Ｎ個の計算）、
各Ｃ＿ｐｊが索引Ｉに含まれているかを確認し、もし含まれていればＣ＿ｐｊとペアで保管されているＩＤ（Ｄ）を抽出して（ＩＤ（Ｄ），ｐ）を空集合Ｒに追加する。
なお、もしＣ＿ｐｊはＩに含まれるが、
Ｃ＿ｐｊ＋１＝Ｅ（ｔｉ，ｐ，ｊ＋１，ＩＤ（Ｉ））
が索引Ｉに含まれない場合は、
Ｅ（ｔｉ，ｐ，ｊ＋２，ＩＤ（Ｉ）），・・・，Ｅ（ｔｉ，ｐ，Ｎ，ＩＤ（Ｉ））
も索引Ｉには含まれないため、これらの計算を省略して検索効率を高めることができる。
以降では、
各Ｃ＿ｐｊ（１≦ｐ≦Ｌ，１≦ｊ≦Ｎ）
をＩＤ（Ｉ）に対する照合データと呼ぶことにする。また、本処理の結果、最終的に生成される集合Ｒを検索結果と呼ぶことにする。
【０１５５】
なお、照合部５０４ｂは、受信部５０１ｂが検索装置４００ｂから保管索引名も受信していれば、それに基づいてデータ保管部５０３ｂから対象となる保管索引のみを読み出して、同様な処理を行う。
【０１５６】
以下では、本実施の形態に係る検索方法に相当する、秘匿検索システム１００の動作について説明する。
【０１５７】
図２２は、本実施の形態における秘匿検索システム１００の鍵生成・保管処理を示すフローチャートである。図２２のＳ６０１〜Ｓ６１２ｂは、鍵生成装置２００ｂと、登録装置３００ｂと、検索装置４００ｂと、管理装置５００ｂとが実行する処理である。Ｓ６０１〜Ｓ６０５ｂは鍵生成装置２００ｂに、Ｓ６０６ｂ〜Ｓ６０８ｂは登録装置３００ｂに、Ｓ６０９ａ〜Ｓ６１０ａ２は検索装置４００ｂに、Ｓ６１１ｂ〜Ｓ６１２ｂは管理装置５００ａによって実行される処理である。
【０１５８】
なお、本検索処理におけるＳ６０１と、Ｓ６０４ａ、Ｓ６０７と、Ｓ６０９ａ〜Ｓ６１０ａ２とは、実施の形態２のそれぞれと同様の処理であるため、ここでは省略する。
【０１５９】
Ｓ６０２ｂにおいて、パラメーター生成部２０２ｂは、パラメーターＬ、Ｍ、Ｎを生成する。なお、前述の通り、Ｌは保管データを分割したときに現れる文字列の最大数であり、Ｍは同じ鍵Ｋを用いて管理装置５００ｂに保管できる保管索引の最大数を表し、Ｎは一度に登録できる保管データの最大数である。
Ｓ６０３ｂにおいて、送信部２０３ｂは、Ｓ６０１で生成した鍵Ｋと、Ｓ６０２ｂで生成したパラメーター（Ｌ，Ｍ，Ｎ）とを、登録装置３００ｂへ送信する。
Ｓ６０５ｂにおいて、送信部２０３ｂは、Ｓ６０２ｂで生成したパラメーター（Ｌ，Ｍ，Ｎ）を、管理装置５００ｂへ送信する。
【０１６０】
Ｓ６０６ｂにおいて、受信部３０１ｂは、Ｓ６０３ｂで送信された鍵Ｋと、パラメーター（Ｌ，Ｍ，Ｎ）とを受信する。
Ｓ６０８ｂにおいて、パラメーター保管部３０３ｂは、Ｓ６０６ｂで受信したパラメーター（Ｌ，Ｍ，Ｎ）を記憶媒体に保管する。
【０１６１】
Ｓ６１１ｂにおいて、受信部５０１ｂは、Ｓ６０５ｂで送信されたパラメーター（Ｌ，Ｍ，Ｎ）を受信する。
Ｓ６１２ｂにおいて、パラメーター保管部５０２ｂは、Ｓ６１１ｂで受信したパラメーター（Ｌ，Ｍ，Ｎ）を記憶媒体に保管する。
Ｓ６１２ｂにより、秘匿検索システム１００の鍵生成・保管処理は終了する。
【０１６２】
図２３は、秘匿検索システム１００の登録処理を示すフローチャートである。図２３のＳ７０１〜Ｓ７１２ａは、登録装置３００ｂと、検索装置４００ｂと、管理装置５００ｂとが実行する処理である。Ｓ７０１〜Ｓ７０６ｂと、Ｓ７０９ａと、Ｓ７１２ａは登録装置３００ｂに、Ｓ７０７ｂ〜Ｓ７０８ｂ２は管理装置５００ｂに、Ｓ７１０ａ〜Ｓ７１１ａは検索装置４００ｂによって実行される処理である。
【０１６３】
なお、本検索処理におけるＳ７０１〜Ｓ７０４と、Ｓ７０９ａ２〜Ｓ７１２ａとは、実施の形態２のそれぞれと同様の処理であるため、ここでは省略する。
【０１６４】
Ｓ７０５ｂ１において、集約部３１０ｂは、Ｓ７０４で生成されたＢ１，・・・Ｂｎに対して、集約データ集合Ｙを生成する。なお、前述の通り、Ｙの各要素は（ｐ，ｗ，｛ＩＤ（Ｄ＿ｉ１），・・・，ＩＤ（Ｄ＿ｉｋ）｝，｛ＩＤ（Ｄ＿ｉｋ＋１），・・・，ＩＤ（Ｄ＿ｉｎ）｝）と表わされる。
Ｓ７０５ｂ２において、多重暗号化部３０８ｂは、Ｓ７０５ｂ１で生成された集約データ集合Ｙを受け取り、鍵保管部３０２から鍵Ｋを、パラメーター保管部３０３ｂからパラメーター（ｍ，Ｍ，Ｎ）を読み出し、保管索引（ＩＤ（Ｉ），ｍ，Ｉ）を生成する。
なお、前述の通り、索引ＩはＩ＝｛（Ｃｊ，ＩＤ（Ｄ＿ｉｊ））｝と表わされ、またＹの各要素
（ｐ，ｗ，｛ＩＤ（Ｄ＿ｉ１），・・・，ＩＤ（Ｄ＿ｉｋ）｝，｛ＩＤ（Ｄ＿ｉｋ＋１），・・・，ＩＤ（Ｄ＿ｉｎ）｝）
におけるＣ１，・・・，Ｃｎは
次のように表わされている。
Ｃ１＝Ｅ（Ｅ＾（Ｍ＋１−ｍ）（Ｋ，ｗ，０），ｐ，１，ＩＤ（Ｉ）），
・・・，
Ｃｋ＝Ｅ（Ｅ＾（Ｍ＋１−ｍ）（Ｋ，ｗ，０），ｐ，ｋ，ＩＤ（Ｉ）），
Ｃｋ＋１＝Ｅ（Ｅ＾（Ｍ＋１−ｍ）（Ｋ，ｗ，１），ｐ，ｋ＋１，ＩＤ（Ｉ）），
・・・，
Ｃｎ＝Ｅ（Ｅ＾（Ｍ＋１−ｍ）（Ｋ，ｗ，１），ｐ，ｎ，ＩＤ（Ｉ））。
Ｓ７０６ｂにおいて、送信部３０９ｂは、Ｓ７０５ｂ２で生成した保管索引（ＩＤ（Ｉ），ｍ，Ｉ）を管理装置５００ｂへ送信する。
【０１６５】
Ｓ７０７ｂにおいて、受信部５０１ｂは、Ｓ７０６ｂで送信された保管索引（ＩＤ（Ｉ），ｍ，Ｉ）を受信する。
Ｓ７０８ｂ１において、データ保管部５０３ｂは、Ｓ７０７ｂで受信した保管索引（ＩＤ（Ｉ），ｍ，Ｉ）を保管する。
Ｓ７０８ｂ２において、パラメーター保管部５０２ｂは、Ｓ７０７ｂで受信した保管索引（ＩＤ（Ｉ），ｍ，Ｉ）のｍから保管されているｍの値を更新する。
Ｓ７１２ａにより、秘匿検索システム１００の登録処理は終了する。
【０１６６】
図２４は、秘匿検索システム１００の検索処理を示すフローチャートである。図２４のＳ８０１〜Ｓ８１０は、検索装置４００ｂと管理装置５００ｂとが実行する処理である。Ｓ８０１〜Ｓ８０３及びＳ８０９〜Ｓ８１０は検索装置４００ｂに、Ｓ８０４〜Ｓ８０８は管理装置５００にａよって実行される処理である。
【０１６７】
なお、本検索処理におけるＳ８０１と、Ｓ８０３と、Ｓ８０４〜Ｓ８０５ａ１と、Ｓ８０８〜Ｓ８１０は、実施の形態２のそれぞれと同様の処理であるため、ここでは省略する。
【０１６８】
Ｓ８０２ｂにおいて、多重暗号化部４０４ｂは、鍵保管部４０２から鍵Ｋを、パラメーター保管部４０７ａからパラメーターｍを読み出し、Ｓ８０１で受け取った検索データｓに対して鍵Ｋを用いて、次のようにして検索暗号化データｔを生成する。
ｔ＝Ｅ＾（Ｍ＋１−ｍ）（Ｋ，ｓ，０）。
【０１６９】
Ｓ８０５ｂ２において、照合部５０４ｂは、データ保管部５０３ｂからすべての保管索引（ＩＤ（Ｉ），ｍ，Ｉ）を読み出す。なお、もしＳ８０４で保管索引名も受信していた場合は、その保管索引名に基づき、対象の保管索引のみを読み出す。もしＳ８０４で保管索引名を受信していなかった場合は、保管されているすべての保管索引を読み出す。ここで、読み出した複数の保管暗号化データ集合を、
｛（ＩＤ（Ｉ１），１，Ｉ１）），・・・，（ＩＤ（Ｉｍ），ｍ，Ｉｍ）｝
とする。
Ｓ８０６ｂにおいて、照合部５０４ｂは、パラメーター保管部５０２ｂからパラメーター（Ｌ，Ｎ）を読み出し、Ｓ８０５ｂ２で読み出した各保管索引の（ＩＤ（Ｉｉ），ｉ，Ｉｉ）（１≦ｉ≦ｍ）に対して、
Ｓ８０５ａ１で生成された多重暗号化データ（ｉ，ｔｉ）に基づき、次のようにして各Ｉｉに対する照合データ集合Ｘｉを生成する。
各ｐ（１≦ｐ≦Ｌ）及び各ｊ（１≦ｊ≦Ｎ）に対して、
Ｃ＿ｐｊ＝Ｅ（ｔｉ，ｐ，ｊ，ＩＤ（Ｉｉ））を計算し、
このＬ×Ｎ個の照合データの集合をＸｉとする。なお、本ステップでは、照合データ集合Ｘ１，・・・，Ｘｍが生成される。
Ｓ８０７ｂにおいて、照合部５０４ｂは、検索結果に関わる空集合Ｒを生成し、Ｓ８０６ｂで生成された各照合データ集合の
Ｘｉ＝｛Ｃ＿ｐｊ｝（１≦ｉ≦ｍ，１≦ｐ≦Ｌ，１≦ｊ≦Ｎ）に対して、
次のようにして照合処理を行い、検索結果Ｒを生成する。
各Ｃ＿ｐｊがＩｉに含まれているかを確認し、
もし含まれていればＣ＿ｐｊとペアで保管されているＩＤ（Ｄ）を抽出して（ＩＤ（Ｄ），ｐ）をＲに追加する。
なお、前述の通り、もしＣ＿ｐｊはＩｉに含まれるが、
Ｃ＿ｐｊ＋１＝Ｅ（ｔｉ，ｐ，ｊ＋１，ＩＤ（Ｉ））
がＩｉに含まれない場合は、
Ｅ（ｔｉ，ｐ，ｊ＋２，ＩＤ（Ｉ）），・・・，Ｅ（ｔｉ，ｐ，Ｎ，ＩＤ（Ｉ））
もＩｉには含まれないため、これらの照合処理を省略して検索効率を高めることができる。
【０１７０】
Ｓ８１０により、秘匿検索システム１００の検索処理は終了する。なお、Ｓ８０６ｂでは、各Ｉｉに対する照合データ集合Ｘｉにおいて、すべてのＣ＿ｐｊ（１≦ｐ≦Ｌ，１≦ｊ≦Ｎ）を生成していたが、前述の通り、もしＣ＿ｐｊはＩｉに含まれるが、
Ｃ＿ｐｊ＋１＝Ｅ（ｔｉ，ｐ，ｊ＋１，ＩＤ（Ｉ））
がＩｉに含まれない場合は、
Ｅ（ｔｉ，ｐ，ｊ＋２，ＩＤ（Ｉ）），・・・，Ｅ（ｔｉ，ｐ，Ｎ，ＩＤ（Ｉ））
もＩｉには含まれないため、いくつかのＣ＿ｐｊの生成に関わる処理は省略することができる。具体的には、Ｓ８０６ｂとＳ８０７ｂのステップを完全に分割せず、各Ｃ＿ｐｊを生成した直後に照合処理を行うといったようにＳ８０６ｂとＳ８０７ｂを繰り返して処理すれば、この効率化は実現できる。
【０１７１】
本実施の形態でも、削除データ名を削除索引名と読み替えることによって、実施の形態１と同様な削除処理を行うことにより、保管索引の削除が可能である。
【０１７２】
＜本実施の形態の動作具体例＞
ここで、本実施の形態の動作を、
パラメーターＬ＝３、パラメーターＭ＝２、パラメーターＮ＝３、
保管データをＤ１＝ＡＢＣ，ＩＤ（Ｄ１）＝１、
及び保管データＤ２＝ＢＢＣ，ＩＤ（Ｄ２）＝２、
索引名＝３、検索データｓ＝ＢＣ、
として説明する。
また暗号化関数Ｅは、ハッシュ関数を用いて説明する。
【０１７３】
まず、Ｄ１とＤ２の登録処理について説明する。
Ｓ７０２において、Ｄ１＝（Ａ，Ｂ，Ｃ），Ｄ２＝（Ｂ，Ｂ，Ｃ）と分割される。
Ｓ７０３において、
Ａ１＝｛｛（Ａ），（ＡＢ），（ＡＢＣ）｝，｛（Ｂ），（ＢＣ）｝，｛（Ｃ）｝｝
及び
Ａ２＝｛｛（Ｂ），（ＢＢ），（ＢＢＣ）｝，｛（Ｂ），（ＢＣ）｝，｛（Ｃ）｝｝
と生成される。
Ｓ７０４において、
Ｂ１＝｛｛（１，Ａ），（１，ＡＢ），（１，ＡＢＣ）｝，｛（２，Ｂ），（２，ＢＣ）｝，｛（３，Ｃ）｝｝及び
Ｂ２＝｛｛（１，Ｂ），（１，ＢＢ），（１，ＢＢＣ）｝，｛（２，Ｂ），（２，ＢＣ）｝，｛（３，Ｃ）｝｝と生成される。
Ｓ７０５ｂ１において、
次のように集約する。
（１，Ａ，｛１｝，｛２｝），
（１，ＡＢ，｛１｝，｛２｝），
（１，ＡＢＣ，｛１｝，｛２｝），
（１，Ｂ，｛２｝，｛１｝），
（１，ＢＢ，｛２｝，｛１｝），
（１，ＢＢＣ，｛２｝，｛１｝），
（２，Ｂ，｛１，２｝，｛｝），
（２，ＢＣ，｛１，２｝，｛｝），
（３，Ｃ，｛１，２｝，｛｝）。
Ｓ７０５ｂ２において、ｍ＝１が読み出され、
Ｉ＝
｛（Ｃ１１，１），（Ｃ１２，２），
（Ｃ２１，１），（Ｃ２２，２），
（Ｃ３１，１），（Ｃ３２，２），
（Ｃ４１，２），（Ｃ４２，１），
（Ｃ５１，２），（Ｃ５２，１），
（Ｃ６１，２），（Ｃ６２，１），
（Ｃ７１，１），（Ｃ７２，２），
（Ｃ８１，１），（Ｃ８２，２），
（Ｃ９１，１），（Ｃ９２，２）｝
を生成し，保管索引（３，１，Ｉ）を生成する。
【０１７４】
ただし、
Ｃ１１＝Ｅ（Ｅ＾２（Ｋ，Ａ，０），１，１，３），
Ｃ１２＝Ｅ（Ｅ＾２（Ｋ，Ａ，１），１，２，３），
Ｃ２１＝Ｅ（Ｅ＾２（Ｋ，ＡＢ，０），１，１，３），
Ｃ２２＝Ｅ（Ｅ＾２（Ｋ，ＡＢ，１），１，２，３），
Ｃ３１＝Ｅ（Ｅ＾２（Ｋ，ＡＢＣ，０），１，１，３），
Ｃ３２＝Ｅ（Ｅ＾２（Ｋ，ＡＢＣ，１），１，２，３），
Ｃ４１＝Ｅ（Ｅ＾２（Ｋ，Ｂ，０），１，１，３），
Ｃ４２＝Ｅ（Ｅ＾２（Ｋ，Ｂ，１），１，２，３），
Ｃ５１＝Ｅ（Ｅ＾２（Ｋ，ＢＢ，０），１，１，３），
Ｃ５２＝Ｅ（Ｅ＾２（Ｋ，ＢＢ，１），１，２，３），
Ｃ６１＝Ｅ（Ｅ＾２（Ｋ，ＢＢＣ，０），１，１，３），
Ｃ６２＝Ｅ（Ｅ＾２（Ｋ，ＢＢＣ，１），１，２，３），
Ｃ７１＝Ｅ（Ｅ＾２（Ｋ，Ｂ，０），２，１，３），
Ｃ７２＝Ｅ（Ｅ＾２（Ｋ，Ｂ，０），２，２，３），
Ｃ８１＝Ｅ（Ｅ＾２（Ｋ，ＢＣ，０），２，１，３），
Ｃ８２＝Ｅ（Ｅ＾２（Ｋ，ＢＣ，０），２，２，３），
Ｃ９１＝Ｅ（Ｅ＾２（Ｋ，Ｃ，０），３，１，３），
Ｃ９２＝Ｅ（Ｅ＾２（Ｋ，Ｃ，０），３，２，３）、
またＭ＋１−ｍ＝２である。
Ｓ７０７ｂ及びＳ７０８ｂ１により、保管索引（３，１，Ｉ）が保管される。
Ｓ７０８ｂ２〜Ｓ７１２ａにより、パラメーター保管部３０３ａのパラメーターｍが２に、パラメーター保管部４０７ａとパラメーター保管部５０２ａのパラメーターｍが１に更新される。
【０１７５】
次に、ｓ＝ＢＣの検索処理について説明する。
Ｓ８０２ａにおいて、ｍ＝２を読み出し、
ｔ＝Ｅ＾２（Ｋ，ｓ，０）
を計算する。ただし、Ｍ＋１−ｍ＝２である。
Ｓ８０５ａ１において、ｍ＝１を読み出し、ｔ１＝ｔとして、（１，ｔ１）を生成する。
Ｓ８０５ｂ２において、（３，１，Ｉ）を読み出す。
Ｓ８０６ｂにおいて、Ｌ＝３及びＮ＝３を読み出し、
Ｃ＿１１＝Ｅ（ｔ１，１，１，３），
Ｃ＿１２＝Ｅ（ｔ１，１，２，３），
Ｃ＿１３＝Ｅ（ｔ１，１，３，３），
Ｃ＿２１＝Ｅ（ｔ１，２，１，３），
Ｃ＿２２＝Ｅ（ｔ１，２，２，３），
Ｃ＿２３＝Ｅ（ｔ１，２，３，３），
Ｃ＿３１＝Ｅ（ｔ１，３，１，３），
Ｃ＿３２＝Ｅ（ｔ１，３，２，３），
Ｃ＿３３＝Ｅ（ｔ１，３，３，３）
を計算する。
Ｓ８０７ｂにおいて、Ｃ＿１１，・・・，Ｃ＿３３がＩに含まれているかを確認する。
実際、
Ｃ＿２１
＝Ｅ（ｔ１，２，１，３）
＝Ｃ８１，Ｃ＿２２
＝Ｅ（ｔ１，２，２，３）
＝Ｃ８２
であることがわかり、
（Ｃ８１，１）及び（Ｃ８２，２）から検索結果Ｒ＝｛（１，２），（２，２）｝が生成される。
Ｓ８１０において、Ｒに基づき、
「保管データ名が“１”のデータの“２番目”の位置から検索データＢＣが現れる」、
「保管データ名が“２”のデータの“２番目”の位置から検索データＢＣが現れる」
といった検索結果を出力する。
なお、Ｓ８０６ｂにおいて、生成したＣ＿１１を直ちにＳ８０７ｂの照合処理を行うことによって、Ｃ＿１１はＩに含まれないので、Ｃ＿１２及びＣ＿１３の生成を省略することができる。同様に、Ｃ＿３１もＩに含まれないので、Ｃ＿３２及びＣ＿３３の生成を省略することができる。このようにして、検索効率を上げることが可能である。
【０１７６】
以上が具体例の説明である。
【０１７７】
本実施の形態におけるハードウェア資源の一例は、実施の形態１と同様であるため省略する。
【０１７８】
＜＊＊＊実施の形態３の効果＊＊＊＞
本実施の形態は、例えば、以下のような効果を奏する。
本実施の形態では、保管データを１つずつ保管することはせずに、複数の保管データをまとめて保管することによって、実施の形態２と同じＭを選択しても、同じ鍵Ｋで暗号化や保管できる保管データの最大数を大きくすることや、かつ検索効率を向上できる。
【０１７９】
以上、本発明の実施の形態について説明したが、これらの実施の形態のうち、２つ以上を組み合わせて実施しても構わない。あるいは、これらの実施の形態のうち、１つを部分的に実施しても構わない。あるいは、これらの実施の形態のうち、２つ以上を部分的に組み合わせて実施しても構わない。なお、本発明は、これらの実施の形態に限定されるものではなく、必要に応じて種々の変更が可能である。
【符号の説明】
【０１８０】
１００  秘匿検索システム、１０１  インターネット、２００，２００ａ，２００ｂ  鍵生成装置、２０１  鍵生成部、２０２，２０２ａ，２０２ｂ  パラメーター生成部、２０３，２０３ａ，２０３ｂ  送信部、３００，３００ａ，３００ｂ  登録装置、３０１，３０１ａ，３０１ｂ  受信部、３０２  鍵保管部、３０３，３０３ａ，３０３ｂ  パラメーター保管部、３０４，３０４ｂ  入力部、３０５  データ分割部、３０６  部分文字列生成部、３０７  位置情報割当部、３０８  暗号化部、３０８ａ，３０８ｂ  多重暗号化部、３０９，３０９ａ，３０９ｂ  送信部、３１０ｂ  集約部、４００，４００ａ，４００ｂ  検索装置、４０１，４０１ａ  受信部、４０２  鍵保管部、４０３，４０３ｂ  入力部、４０４  暗号化部、４０４ａ，４０４ｂ  多重暗号化部、４０５，４０５ｂ  送信部、４０６  出力部、４０７ａ  パラメーター保管部、５００，５００ａ，５００ｂ  管理装置、５０１，５０１ａ，５０１ｂ  受信部、５０２，５０２ａ，５０２ｂ  パラメーター保管部、５０３，５０３ｂ  データ保管部、５０４，５０４ａ，５０４ｂ  照合部、５０５  送信部、５０６ａ  多重暗号化部、１００１  ＣＰＵ、１００２  バス、１００３  ＲＯＭ、１００４  ＲＡＭ、１００５  通信ボード、１０１１  ディスプレイ、１０１２  キーボード、１０１３  マウス、１０１４  ドライブ、１０２０  磁気ディスク装置、１０２１  ＯＳ、１０２２  プログラム群、１０２３  ファイル群。
【図１】
2017122352.tif 000003
【図２】
2017122352.tif 000004
【図３】
2017122352.tif 000005
【図４】
2017122352.tif 000006
【図５】
2017122352.tif 000007
【図６】
2017122352.tif 000008
【図７】
2017122352.tif 000009
【図８】
2017122352.tif 000010
【図９】
2017122352.tif 000011
【図１０】
2017122352.tif 000012
【図１１】
2017122352.tif 000013
【図１２】
2017122352.tif 000014
【図１３】
2017122352.tif 000015
【図１４】
2017122352.tif 000016
【図１５】
2017122352.tif 000017
【図１６】
2017122352.tif 000018
【図１７】
2017122352.tif 000019
【図１８】
2017122352.tif 000020
【図１９】
2017122352.tif 000021
【図２０】
2017122352.tif 000022
【図２１】
2017122352.tif 000023
【図２２】
2017122352.tif 000024
【図２３】
2017122352.tif 000025
【図２４】
2017122352.tif 000026
【手続補正書】
【提出日】平成28年8月30日(2016.8.30)
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
文字列データＤを、前記文字列データＤの始まりから終わりに向かうＮ個の要素データｗ１，ｗ２，．．．，ｗＮに分割するデータ分割部と、
前記Ｎ個の要素データｗ１，ｗ２，．．．，ｗＮから、
集合Ａ＝｛Ａ１，Ａ２，．．．，ＡＮ｝，
集合Ａの要素Ａｉ＝｛（ｗｉ），（ｗｉｗｉ＋１），．．．，（ｗｉｗｉ＋１．．．ｗＮ）｝，ｉ＝１，．．．，Ｎ，
を生成する部分文字列生成部と、
前記要素Ａｉの成分である（ｗｉ），（ｗｉｗｉ＋１），．．．，（ｗｉｗｉ＋１．．．ｗＮ）のそれぞれに位置情報ｉを対応させることにより、
集合Ｂ＝｛Ｂ１，Ｂ２，．．．，ＢＮ｝、
集合Ｂの要素Ｂｉ＝｛（ｉ，ｗｉ），（ｉ，ｗｉｗｉ＋１），．．．，（ｉ，ｗｉｗｉ＋１．．．ｗＮ）｝
を生成する位置情報割当部と、
前記要素Ｂｉに含まれる成分である（ｉ，ｗｉ），（ｉ，ｗｉｗｉ＋１），．．．，（ｉ，ｗｉｗｉ＋１．．．ｗＮ）のそれぞれを暗号化する暗号化部と
を備えた暗号化装置。
【請求項２】
前記暗号化部は、
前記要素Ｂｉに含まれる各成分を暗号化する場合に、前記要素Ｂｉに含まれる各成分を、前記文字列データＤを識別する識別子と共に暗号化する請求項１に記載の暗号化装置。
【請求項３】
前記暗号化部は、
前記要素Ｂｉに含まれる各成分を暗号化する場合に、前記要素Ｂｉの成分に含まれる前記要素Ａｉの成分を暗号化し、暗号化された前記要素Ａｉの成分を、暗号化された前記要素Ａｉの成分と対をなす位置情報と共に暗号化する請求項１または請求項２に記載の暗号化装置。
【請求項４】
前記暗号化部は、
前記要素Ｂｉの成分に含まれる前記要素Ａｉの成分を暗号化する場合に、暗号化を複数回繰り返す多重暗号化を行う請求項３に記載の暗号化装置。
【請求項５】
前記暗号化装置は、さらに、
前記文字列データＤの分割数を指定するパラメーターを保管するパラメーター保管部を備え、
前記データ分割部は、
前記文字列データＤを，前記パラメーターが指定する分割数以下のＮ個に分割する請求項１から請求項４のいずれか一項に記載の暗号化装置。
【請求項６】
データ分割部が、
文字列データＤを、前記文字列データＤの始まりから終わりに向かうＮ個の要素データｗ１，ｗ２，．．．，ｗＮに分割し、
部分文字列生成部が、
前記Ｎ個の要素データｗ１，ｗ２，．．．，ｗＮから、
集合Ａ＝｛Ａ１，Ａ２，．．．，ＡＮ｝，
集合Ａの要素Ａｉ＝｛（ｗｉ），（ｗｉｗｉ＋１），．．．，（ｗｉｗｉ＋１．．．ｗＮ）｝，ｉ＝１，．．．，Ｎ，
を生成し、
位置情報割当部が、
前記要素Ａｉの成分である（ｗｉ），（ｗｉｗｉ＋１），．．．，（ｗｉｗｉ＋１．．．ｗＮ）のそれぞれに位置情報ｉを対応させることにより、
集合Ｂ＝｛Ｂ１，Ｂ２，．．．，ＢＮ｝、
集合Ｂの要素Ｂｉ＝｛（ｉ，ｗｉ），（ｉ，ｗｉｗｉ＋１），．．．，（ｉ，ｗｉｗｉ＋１．．．ｗＮ）｝
を生成し、
暗号化部が、
前記要素Ｂｉに含まれる成分である（ｉ，ｗｉ），（ｉ，ｗｉｗｉ＋１），．．．，（ｉ，ｗｉｗｉ＋１．．．ｗＮ）のそれぞれを暗号化する
暗号化方法。
【請求項７】
コンピュータに、
文字列データＤを、前記文字列データＤの始まりから終わりに向かうＮ個の要素データｗ１，ｗ２，．．．，ｗＮに分割する処理、
前記Ｎ個の要素データｗ１，ｗ２，．．．，ｗＮから、
集合Ａ＝｛Ａ１，Ａ２，．．．，ＡＮ｝，
集合Ａの要素Ａｉ＝｛（ｗｉ），（ｗｉｗｉ＋１），．．．，（ｗｉｗｉ＋１．．．ｗＮ）｝，ｉ＝１，．．．，Ｎ，
を生成する処理、
前記要素Ａｉの成分である（ｗｉ），（ｗｉｗｉ＋１），．．．，（ｗｉｗｉ＋１．．．ｗＮ）のそれぞれに位置情報ｉを対応させることにより、
集合Ｂ＝｛Ｂ１，Ｂ２，．．．，ＢＮ｝、
集合Ｂの要素Ｂｉ＝｛（ｉ，ｗｉ），（ｉ，ｗｉｗｉ＋１），．．．，（ｉ，ｗｉｗｉ＋１．．．ｗＮ）｝
を生成する処理、
前記要素Ｂｉに含まれる成分である（ｉ，ｗｉ），（ｉ，ｗｉｗｉ＋１），．．．，（ｉ，ｗｉｗｉ＋１．．．ｗＮ）のそれぞれを暗号化する処理、
を実行させるための暗号化プログラム。
【請求項８】
文字列データＤを、前記文字列データＤの始まりから終わりに向かうＮ個の要素データｗ１，ｗ２，．．．，ｗＮに分割する処理、
前記Ｎ個の要素データｗ１，ｗ２，．．．，ｗＮから、
集合Ａ＝｛Ａ１，Ａ２，．．．，ＡＮ｝，
集合Ａの要素Ａｉ＝｛（ｗｉ），（ｗｉｗｉ＋１），．．．，（ｗｉｗｉ＋１．．．ｗＮ）｝，ｉ＝１，．．．，Ｎ，
を生成する処理、
前記要素Ａｉの成分である（ｗｉ），（ｗｉｗｉ＋１），．．．，（ｗｉｗｉ＋１．．．ｗＮ）のそれぞれに位置情報ｉを対応させることにより、
集合Ｂ＝｛Ｂ１，Ｂ２，．．．，ＢＮ｝、
集合Ｂの要素Ｂｉ＝｛（ｉ，ｗｉ），（ｉ，ｗｉｗｉ＋１），．．．，（ｉ，ｗｉｗｉ＋１．．．ｗＮ）｝
を生成する処理、
前記要素Ｂｉに含まれる成分である（ｉ，ｗｉ），（ｉ，ｗｉｗｉ＋１），．．．，（ｉ，ｗｉｗｉ＋１．．．ｗＮ）のそれぞれを暗号化する処理、
を経て生成された、それぞれの前記成分（ｉ，ｗｉ），（ｉ，ｗｉｗｉ＋１），．．．，（ｉ，ｗｉｗｉ＋１．．．ｗＮ）のそれぞれの暗号化データを保管するデータ保管部と、
検索を求める文字列が暗号化された検索暗号化データを受信する受信部と、
前記要素データの数である前記Ｎ個を示す整数Ｎ以上の値の整数Ｌを保管するパラメーター保管部と、
前記検索暗号化データと、１から前記整数ＬまでのＬ個の整数とに基づいて、それぞれの前記暗号化データとの照合に使用する複数の照合データを生成し、前記照合データに合致する前記暗号化データを抽出する照合部と
を備える保管装置。
【請求項９】
前記照合部は、
１から前記整数ＬまでのＬ個の整数ごとに、前記検索暗号化データと、前記整数とを含む前記照合データを生成する請求項８に記載の保管装置。
【請求項１０】
前記受信部は、
検索を求める前記文字列が複数回暗号化された前記検索暗号化データを受信し、
前記照合部は、
１から前記整数ＬまでのＬ個の整数ごとに、前記検索暗号化データが複数回暗号化されたデータと、前記整数とを含む前記照合データを生成する請求項８に記載の保管装置。
【国際調査報告】
2017122352.tif 000027
2017122352.tif 000028
2017122352.tif 000029
2017122352.tif 000030