(57)【要約】【課題】異なるユーザ間でデータを相互利用する際、データ利用者の検索ワードをデータ保有者に対して隠しつつも、再現性のある検索を行う。【解決手段】データおよびデータに関連するキーワードに対応する分散データおよび分散キーワードを格納するデータベースを検索する秘匿検索装置であって、検索ワードから秘密鍵を用いて生成された第１の乱数を用いる秘密分散処理を検索ワードに対して施し、分散キーワードと比較される、分散検索ワードを生成する第１の秘密分散処理部、を含む秘匿検索装置を含む秘匿検索装置が提供される。【選択図】図９
2015170057.tif 000002
【特許請求の範囲】
【請求項１】
データおよび前記データに関連するキーワードに対応する分散データおよび分散キーワードを格納するデータベースを検索する秘匿検索装置において、
検索ワードから秘密鍵を用いて生成された第１の乱数を用いる秘密分散処理を前記検索ワードに対して施し、前記分散キーワードと比較される、分散検索ワードを生成する第１の秘密分散処理部（図９、１０１８＋１０２０）、
を含む秘匿検索装置。
【請求項２】
さらに、
復号鍵（図９、１０１４）を用いて前記第１の乱数を復号し、第２の乱数を生成する復号処理部（図９、１０１６）
を含み、
第１の秘密分散処理部（図９、１０１８＋１０２０）は、前記検索ワードに対して前記第２の乱数を用いる秘密分散処理を施して、前記クラウドサーバに格納されている前記分散キーワードから対応する一つを検索するために、分散検索ワードを生成する、請求項１に記載の秘匿検索装置。
【請求項３】
前記第１の暗号化処理部（図９、１００４）と、前記復号処理部（図９、１０１６）と、検索ワードから秘密鍵を用いて前記第１の乱数を生成する際において、互いに可換である暗号を用いる請求項２に記載の秘匿検索装置。
【請求項４】
前記暗号は、ＲＳＡ暗号、Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎ法、ＡＥＳカウンターモードのいずれかを用いる、請求項３に記載の秘匿検索装置。
【請求項５】
前記分散データと前記キーワードに対応する前記分散キーワードは、前記データおよび前記データに関連する前記キーワードに対して、前記第１の乱数を用いる秘密分散処理を施して生成される、請求項１乃至４のいずれか一項に記載の秘匿検索装置。
【請求項６】
前記第１の乱数は、暗号化鍵（図９、１００２）を用いて、検索ワードを暗号化して得られる暗号化検索ワードから、秘密鍵を用いて生成される、請求項１乃至５のいずれか一項に記載の秘匿検索装置。
【請求項７】
コンピュータによって処理される、データおよび前記データに関連するキーワードに対応する分散データおよび分散キーワードを格納するデータベースを検索する秘匿検索方法であって、
検索ワードから秘密鍵を用いて生成された第１の乱数を用いる秘密分散処理を前記検索ワードに対して施し、前記分散キーワードと比較される、分散検索ワードを生成すること（図１６、Ｓ３０８）、
を含む秘匿検索方法。
【請求項８】
データおよび前記データに関連するキーワードに対応する分散データおよび分散キーワードを格納するデータベースを検索する秘匿検索プログラムにおいて、
検索ワードから秘密鍵を用いて生成された第１の乱数を用いる秘密分散処理を前記検索ワードに対して施し、前記分散キーワードと比較される、分散検索ワードを生成する（図１６、Ｓ３０８）
処理をコンピュータ（図１２、１３００）に実行させることを特徴とする秘匿検索プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、秘匿検索装置、秘匿検索方法および秘匿検索プログラムに関するものである。
【背景技術】
【０００２】
現在、企業でのクラウドコンピューティングの利用が普及している。その中でも、業界クラウドと呼ばれるクラウドが注目されている。業界クラウドとは、同一の業界に属する異なる複数の組織の計算機資源から構成され、互いの資源を利用するクラウドである。例えば、医療クラウドの場合、複数の病院が持つ計算機資源の組み合わせにより構成され、互いの持つ診療情報などを交換でき、高度な医療サービスを提供できることが期待される。業界クラウドは、同一業界が持つ異なる組織が互いの持つデータを有効に利活用することで、より品質が高いサービスを提供することを目的としている。
【０００３】
業界クラウドの一形態として、医療クラウドが知られている。医療クラウドは、複数の医療機関が、互いが持つデータの相互利活用を実現するための医療データを預かる。例えば、医療データには、病状に対する治療行為と治癒経過などのデータが含まれるため、病名を検索キーとした検索を行うことで、治療に対する効果的な医療行為の研究を行うことができる。
【０００４】
医療クラウドは、医療クラウドを管理するクラウド事業者、医療データを保有するデータ保有者、データ検索を行うデータ利用者の３者によって運用、管理、利用される。クラウド事業者はデータ保有者やデータ利用者にはなれないが、データの相互利活用においては、データ保有者とデータ利用者は同一人物の可能性がある。
【０００５】
データ保有者１が「肺炎」の治療に関する医療データ１を、データ保有者２は「高血圧」の治療に関する医療データ２をそれぞれ有しているとする。それぞれのデータ保有者は、医療クラウドに預ける際に、キーワード検索を可能とするためのインデックスを付けた後で医療クラウドにデータを預ける。例えば、医療データ１の６ページ目（ｐ．６）に肺炎の治療データがある場合は、インデックスとして、「（肺炎、医療データ１のｐ．６）」が医療データ１に対して紐づけられた上で、医療クラウドに預けられる。同様に、医療データ２の４ページ目（ｐ．４）に高血圧の治療データがある場合は、インデックスとして、「（高血圧、医療データ２のｐ．４）」が医療データ２に対して紐づけられた上で、医療クラウドに預けられる。
【０００６】
これらの預けられたデータに対し、データ利用者が例えば「肺炎」をキーワード検索したい場合、「肺炎」をキーワード指定したクエリを医療クラウドに送信する。
【０００７】
医療クラウドは、キーワードに対応するインデックスとして、「（肺炎、医療データ１のｐ．６）」を見つけ、データ利用者に対する検索クエリの結果として、「（医療データ１のｐ．６、医療データ１）」を出力する。
【０００８】
この結果を受け取ったデータ利用者は、医療データ１の６ページ目より、肺炎の治療に必要な医療データの参照を行うことができる。
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、医療クラウドのように異なるユーザ間でデータを相互利用する場合、互いのデータを秘匿したまま検索を行うことがある。その際、秘密分散を用いると、データがランダムに秘匿されるため、データ登録時と検索時で秘匿化されるデータが異なり、再現性のある検索を行うことができないという問題がある。
【００１０】
また、データ利用者の検索ワードをデータ保有者に対して隠すことができないという問題がある。
【００１１】
よって、一つの側面として、本発明は、異なるユーザ間でデータを相互利用する際、データ利用者の検索ワードをデータ保有者に対して隠しつつも、再現性のある検索を行うことができる秘匿検索装置、秘匿検索方法および秘匿検索プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１２】
データおよび前記データに関連するキーワードに対応する分散データおよび分散キーワードを格納するデータベースを検索する秘匿検索装置が提供される。秘匿検索装置は、検索ワードから秘密鍵を用いて生成された第１の乱数を用いる秘密分散処理を前記検索ワードに対して施し、前記分散キーワードと比較される、分散検索ワードを生成する第１の秘密分散処理部、を含むことを特徴とする。
【発明の効果】
【００１３】
異なるユーザ間でデータを相互利用する際、データ利用者の検索ワードをデータ保有者に対して隠しつつも、再現性のある検索を行うことができる。
【図面の簡単な説明】
【００１４】
【図１】医療クラウドによるデータ利活用の例を説明するための図である。
【図２】暗号化によるプライバシー対策について説明するための図である。
【図３】データ利用者の代わりにデータ保有者が検索クエリを発行する方法について説明するための図である。
【図４】秘匿分散法の概略について説明するための図である。
【図５】秘密分散における平文から分散データを生成する処理について説明するための図である。
【図６】データ登録時における暗号化インデックス付与処理を秘密分散に置き換えた処理について説明するための図である。
【図７】データ登録後の検索処理を秘密分散に置き換えた処理について説明するための図である。
【図８】検索の再現性がない場合について説明するための図である。
【図９】実施形態の秘匿検索装置のデータ検索時における機能ブロックの例を示す図である。
【図１０】比較例の秘匿検索装置のデータ検索時における機能ブロックの例を示す図である。
【図１１】実施形態の秘匿検索装置のデータ登録時における機能ブロックの例を示す図である。
【図１２】秘匿検索装置の構成の例を示す図である。
【図１３】第１の実施例の秘匿検索装置のデータ登録時における機能ブロックの例を示す図である。
【図１４】第１の実施例の秘匿検索装置のデータ検索時における機能ブロックの例を示す図である。
【図１５】データ登録時の秘密分散の処理の流れの例を示す図である。
【図１６】データ検索時の秘密分散の処理の流れの例を示す図（その１）である。
【図１７】データ検索時の秘密分散の処理の流れの例を示す図（その２）である。
【図１８】第２の実施例の秘匿検索装置のデータ検索時における機能ブロックの例を示す図である。
【図１９】第２の実施例におけるデータ検索時の秘密分散の処理の流れの例を示す図（その１）である。
【図２０】第２の実施例におけるデータ検索時の秘密分散の処理の流れの例を示す図（その２）である。
【発明を実施するための形態】
【００１５】
以下、図面を参照して、実施形態の秘匿検索装置、秘匿検索方法および秘匿検索プログラムについて説明する。
【００１６】
＜比較例＞
図１は、医療クラウドによるデータ利活用の例を説明するための図である。医療クラウドは、クラウドを介した医療データの相互利活用の例を提供する。医療データの相互利活用の例としては、複数の医療機関の医者、研究者が医療クラウドを介し医療データを相互に利活用することが考えられる。
【００１７】
医療クラウドは、医療クラウドを管理するクラウド事業者、医療データを保有するデータ保有者、データ検索を行うデータ利用者の３者によって運用、管理、利用される。クラウド事業者はデータ保有者やデータ利用者にはなれないが、データの相互利活用においては、データ保有者とデータ利用者は同一人物の可能性がある。
【００１８】
図１では、データ保有者１（Ａ）、データ保有者２（Ｂ）がそれぞれ、肺炎に関する医療データ１（１００）と高血圧に関する医療データ２（２００）を保有しているとする。データ保有者１（Ａ）、データ保有者２（Ｂ）は、医者や研究者であって良い。データ保有者１（Ａ）、データ保有者２（Ｂ）は、各自が保有する医療データ１００、２００をクラウド事業者Ｃが管理する医療クラウド（クラウドサーバ）１０に預ける。
【００１９】
それぞれのデータ保有者は、医療クラウドに預ける際に、キーワード検索を可能とするためのインデックスを付けた後で医療クラウドにデータを預ける。例えば、肺炎に関する医療データ１（１００）の６ページ目に肺炎の治療データがある場合は、インデックスとして、「（肺炎、医療データ１のｐ．６）」が医療データ１（１００）に対して紐づけられた上で、医療クラウドに預けられる。同様に、高血圧に関する医療データ２（２００）の４ページ目に高血圧の治療データがある場合は、インデックスとして、「（高血圧、医療データ２のｐ．４）」が医療データ２（２００）に対して紐づけられた上で、医療クラウドに預けられる。
【００２０】
医療クラウド１０には、肺炎に関する検索インデックス１０２、たとえば（肺炎、医療データ１のｐ．６）とそれに関連するデータ本体１０４、高血圧に関する検索インデックス２０２、たとえば（高血圧、医療データ２のｐ．４）とそれに関連するデータ本体１０６が格納されている。
【００２１】
まず、データ利用者Ｄは、検索クエリを発行する。たとえば、“肺炎”をキーワードとして検索クエリを発行する（Ｓ１）。
【００２２】
以下では、検索のために入力されるキーワードを検索クエリや検索ワードと呼ぶことがある。
【００２３】
データ利用者Ｄから検索クエリ（検索ワード）を受けた医療クラウド１０は、検索処理を実行する（Ｓ２）。キーワードは病名に限らず、他の任意のものであり得る。たとえば、診療の時期、年齢、性別、年齢、住所などであっても良い。そして、医療クラウド１０では、キーワードに対応するインデックスとして、検索インデックス１０２に（肺炎、医療データ１のｐ．６）を見出し、データ利用者Ｄに対して検索結果の発行を行う（Ｓ３）。今の例では、結果として、検索インデックス１０２の（肺炎、医療データ１のｐ．６）とそれに関連するデータ本体１０４が、医療クラウド１０からデータ利用者Ｄに送られる。
【００２４】
この結果を受け取ったデータ利用者Ｄは、医療データ１のｐ．６より、肺炎の治療に必要な医療データの参照を行うことができる。
【００２５】
図１に示した例でも医療情報の相互利活用を行うことができるが、医療クラウド（クラウドサーバ）１０に預ける医療データは多くのプライバシー情報を含むため、これらの情報が漏えいしないための対策が必要となる。特にクラウド事業者Ｃにとっては、プライバシーを含むデータを預かることによるリスク回避を行いたい。対策法の一つとして、データ保有者が医療データをクラウドに預ける際に、データ保有者Ａ、Ｂ自身の鍵で暗号化を行うことで、クラウド事業者Ｃに対して平文を見せない方法が知られている。この方法を用いたシステムを図２に示す。
【００２６】
図２は、暗号化によるプライバシー対策について説明するための図である。
図２でも図１同様に、データ保有者１（Ａ）が「肺炎」の治療に関する医療データ１（１００）を、データ保有者２は「高血圧」の治療に関する医療データ２（２００）をそれぞれ有している。それぞれのデータ保有者は、医療クラウドに預ける際に、キーワード検索を可能とするためのインデックスを付けた後で医療クラウドにデータを預ける。
【００２７】
このとき、図１に示されている場合とは異なり、暗号化したインデックス生成を行う（Ｓ１１）。例えば、医療データ１の６ページ目に肺炎の治療データがある場合は、データ保有者１（Ａ）は、自身が有する鍵である「暗号化鍵１」を用いて、暗号化インデックス１０２「（Ｅｎｃ（肺炎、暗号化鍵１）、Ｅｎｃ（医療データ１のｐ．６、暗号化鍵１）」および対応する暗号化データである１０４「Ｅｎｃ（医療データ１、暗号化鍵１）」を生成し（Ｓ２２）、これらの暗号化データを互いに紐づけて医療クラウドに預ける。
【００２８】
ここで、Ｅｎｃ（Ｐ、Ｋ）は、平文Ｐが鍵Ｋによって暗号化されたことを意味する。
同様に、医療データ２（２００）の４ページ目に高血圧の治療データがある場合は、データ保有者２（Ｂ）は、自身が有する鍵である「暗号化鍵２」を用いて、暗号化インデックス２０２「（Ｅｎｃ（高血圧、暗号化鍵２）、Ｅｎｃ（医療データ２のｐ．４、暗号化鍵２））」および対応する暗号化データ２０４「Ｅｎｃ（医療データ２、暗号化鍵２）」を生成し（Ｓ２３）、これらの暗号化データを互いに紐づけて医療クラウド１０に預ける。
【００２９】
これらの預けられたデータに対し、データ利用者Ｄが例えば「肺炎」をキーワード検索したい場合、データ利用者Ｄは、自身が有する鍵である「暗号化鍵１」「暗号化鍵２」を用いて、それぞれの鍵でキーワードの暗号化結果である暗号化キーワード１０２「Ｅｎｃ（肺炎, 暗号化鍵１）」と暗号化キーワード２０２「Ｅｎｃ（肺炎, 暗号化鍵２）」を生成し（Ｓ２１）、これらの暗号化キーワードをクエリとして医療クラウドに送信する。
【００３０】
医療クラウド１０では、キーワードに対応するインデックスとして、「（Ｅｎｃ（肺炎、暗号化鍵１）、Ｅｎｃ（医療データ１のｐ．６、暗号化鍵１）」を見つけ、データ利用者に対する暗号化検索クエリの結果として、「Ｅｎｃ（医療データ１のｐ．６、暗号化鍵１）、Ｅｎｃ（医療データ１、暗号化鍵１）」を出力する（Ｓ１４）。
【００３１】
この結果を受け取ったデータ利用者Ｄは、自身が有する鍵である「復号鍵１」を用いてこれらデータの復号を行い（Ｓ２４）、平文である「（医療データ１のｐ．６、医療データ１）」を得る。この医療データ１のｐ．６より、肺炎の治療に必要な医療データの参照を行うことができる。
【００３２】
図２に示した方法を用いることで、クラウド事業者Ｃに対して平文を見せることなく医療情報の相互利活用が可能となる。しかし、データ利用者Ｄは検索クエリの暗号化に必要な鍵である「暗号化鍵１」「暗号化鍵２」の両方を有している。つまり、データ利用者Ｄ自身によって自由に検索クエリを発行できるため、データ保有者Ａ、Ｂにとっては、データ利用者Ｄによって、無尽蔵に医療データを引き出される可能性がある、という問題点がある。すなわち、以下のような課題１が存在する。
（課題１）データ利用者が自由に検索クエリを発行できるため、データ保有者の医療データを無尽蔵に引き出せる可能性がある。
【００３３】
課題１への対策として、データ利用者Ｄ自身が検索クエリを発行するのではなく、データ利用者Ｄがデータ保有者Ａ、Ｂに対して検索クエリ発行を依頼することで、データ保有者の許可の元検索クエリを発行する方法が考えられる。この方法を図３に示す。
【００３４】
図３は、データ利用者Ｄの代わりにデータ保有者Ａ、Ｂが検索クエリ（検索ワード）を発行する方法について説明するための図である。
【００３５】
図３でも図１、２と同様に、データ保有者１（Ａ）が「肺炎」の治療に関する医療データ１（１００）を、データ保有者２（Ｂ）は「高血圧」の治療に関する医療データ２（２００）をそれぞれ有している。それぞれのデータ保有者は、医療クラウドに預ける際に、キーワード検索を可能とするためのインデックスを付与する（Ｓ１１）。そして、医療クラウド１０にデータを預ける。
【００３６】
図３に示されている例でも、図２と同様に、データ保有者Ａ、Ｂ自身が保有する暗号鍵を用いて暗号化したインデックス生成を行う。例えば、医療データ１の６ページ目に肺炎の治療データがある場合は、データ保有者１（Ａ）は、自身が有する鍵である「暗号化鍵１」を用いて、暗号化インデックス「（Ｅｎｃ（肺炎、暗号化鍵１）、Ｅｎｃ（医療データ１のｐ．６、暗号化鍵１）」および対応する暗号化データである「Ｅｎｃ（医療データ１、暗号化鍵１）」を生成し、これらの暗号化データを互いに紐づけて医療クラウドに預ける。同様に、医療データ２の４ページ目に高血圧の治療データがある場合は、データ保有者２（Ｂ）は、自身が有する鍵である「暗号化鍵２」を用いて、暗号化インデックスとして、「Ｅｎｃ（高血圧、暗号化鍵２）、Ｅｎｃ（医療データ２のｐ．４、暗号化鍵２））」および対応する暗号化データである「Ｅｎｃ（医療データ２、暗号化鍵２）」を生成し、これらの暗号化データを互いに紐づけて医療クラウド１０に預ける。
【００３７】
これらの預けられたデータに対し、データ利用者Ｄが例えば「肺炎」をキーワード検索したい場合、図２ではデータ保有者Ａ、Ｂ自身が有する鍵である「暗号化鍵１」、「暗号化鍵２」を用いて暗号化クエリを生成していたが、図３において「暗号化鍵１」、「暗号化鍵２」を有するのはそれぞれ「データ保有者１（Ａ）」、「データ保有者２（Ｂ）」に限定されるためデータ利用者はこれらの鍵を有しない。代わりに図３では、データ利用者がキーワードである「肺炎」をデータ保有者１（Ａ）、データ保有者２（Ｂ）に対してそれぞれ送信する。「暗号化鍵１」を有するデータ保有者１（Ａ）は、暗号化結果である暗号化キーワード１０２「Ｅｎｃ（肺炎、暗号化鍵１）」を生成しデータ利用者Ｄに返信する。「暗号化鍵２」を有するデータ保有者２（Ｂ）は、暗号化結果である暗号化キーワード２０２「Ｅｎｃ（肺炎、暗号化鍵２）」を生成しデータ利用者Ｄに返信する。データ保有者Ａ、Ｂは、これら２つの暗号化キーワードをクエリとして医療クラウドに送信する（Ｓ３１）。
【００３８】
医療クラウド１０は、図２の場合と同様に、キーワードに対応するインデックスとして、「Ｅｎｃ（医療データ１のｐ．６、暗号化鍵１）、Ｅｎｃ（医療データ１、暗号化鍵１」を見つけ、データ利用者に対する暗号化検索クエリの結果として、「（Ｅｎｃ（医療データ１のｐ．６、暗号化鍵１）、Ｅｎｃ（医療データ１、暗号化鍵１））」を出力する（Ｓ３３）。
【００３９】
この結果を受け取ったデータ利用者Ｄは、図２と同様に、自身が有する鍵である「復号鍵１」を用いてこれらデータの復号を行い（Ｓ４３）、平文である「（医療データ１のｐ．６、医療データ１）」を得る。この医療データ１のｐ．６より、肺炎の治療に必要な医療データの参照を行うことができる。
【００４０】
図３に示した方法において、データの復号に用いる復号鍵と暗号化に用いる暗号化鍵を別々の鍵とし、かつデータ利用者には検索クエリ発行に必要な暗号化鍵を保有させないことで、データ利用者による無尽蔵な検索クエリ発行を防ぐことができる。これは、例えばＲＳＡ暗号等の公開鍵暗号を用いることで復号鍵と暗号化鍵を別々の鍵とした上で、暗号化鍵をｅ＝６５５３７のような短いビット長に設定せず、１０２４ビット以上の長いビット長かつデータ利用者には秘密の値とすることで実現できる。
【００４１】
すなわち、図３の方法は、復号鍵と暗号化鍵を別々にする必要があるが、そのためには公開鍵暗号を用いる必要がある。しかし、公開鍵暗号のビット長は最低でも１０２４ビット以上と非常に長く、８バイト程度の短い平文でも１２８バイトの暗号文に変換されるため、クラウドに預ける暗号化データが大きくなるという問題がある。すなわち、以下のような課題２が存在する。
（課題２）クラウドに預ける暗号化データが、平文の長さに関係なく１２８バイト以上の大きなデータとなる。
【００４２】
課題２への対策として、データが膨らむ公開鍵暗号を用いるのではなく、秘密分散法を用いる方法が考えられる。公開鍵暗号は計算量的安全に基づいているためビット長が長くなるという欠点があるが、秘密分散法は情報論的安全性に基づくためデータが大きくならないという利点がある。また、プライバシー情報取扱いの総務省ガイドライン案である、「パーソナルデータの利用・流通に関する研究会」報告書では、「秘密分散技術」を特に安全な暗号化技術としている。図３において、暗号化方式を秘密分散法に置き換えた方法を説明する前に、秘密分散に関する概要を説明する。
【００４３】
図４は、秘匿分散法の概略について説明するための図である。
秘密分散法は、平文３００を複数の分散データ３０２、３０４、３０６、３０８に分散し、個々の分散データから平文の情報量が得られないようする技術である。例えば、平文Ｐを、乱数ＲとＲ−Ｐの２つの分散データに分割する方法（割符）も秘密分散法の一種である。図４には、４分割する場合が示されている。個々の分散データＲとＲ−Ｐからは平文に関する情報を得ることができないが、これら２つを加算し、Ｒ＋（Ｒ-Ｐ）＝Ｐとすることで平文を復元することができる。秘密分散法は割符を一般化したものであり、４個中２個以下からは平文を得られないが３個以上を集めれば平文を復元、１０個中４個以下からは平文を得られないが５個以上を集めれば平文を復元、等のセッティングを自由に行うことができる。暗号文に相当する個々の分散データのサイズを平文と同程度としながらも、個々の分散データから平文に関する情報を得ることができない（情報理論的安全性）という性質を有するので、クラウド上で個々の分散データを別々の管理者によって管理させることで、データを安全に保管することができる。
【００４４】
図５は、秘密分散法における平文から分散データを生成する処理について説明するための図である。
【００４５】
秘密分散法において、平文から分散データを生成する方法を図５に示す。図５では、フローチャートが示されている。
図５は、秘密分散法において平文から分散データを生成する方法としてＳｈａｍｉｒのしきい値法と呼ばれる方法を用いた例である。
【００４６】
Ｓ５１で平文Ｐ、分割数ｔ、復元に必要な分散データ個数ｈ、平文の最大値を表す素数ｑを入力する。
【００４７】
Ｓ５２で乱数を生成する。たとえば、多項式係数としての（ｈ−１）個の乱数ｒ１、ｒ２、・・・、ｒｈ−１を生成する。
【００４８】
次のＳ５３では、分散データを生成する。たとえば、乱数ｒ１、ｒ２、・・・、ｒｈ−１から以下のように分散データ＃１〜分散データ＃ｔを生成する。
【数１】
2015170057.tif 000003
ただし、ｑは平文の最大値を表す素数である。
【００４９】
Ｓ５３の次のＳ５４では、乱数を消去する。（ｈ−１）個の乱数ｒ１、ｒ２、・・・、ｒｈ−１を消去する。
【００５０】
Ｓ５４の次のＳ５５で、分散データ＃１〜分散データ＃ｔを出力する。
Ｓ５５の結果出力された分散データ＃１〜分散データ＃ｔのうち、任意のｈ個を集めることができたユーザは、これらの分散データに対して特定の処理を行うことで平文Ｐを復元することができる。すなわち、秘密分散法は、暗号化結果に相当するｔ個の分散データが、乱数に依存して変化するという特徴を有する。
【００５１】
上のような秘密分散法に関する特徴を考慮すると、図３中の暗号化Ｓ４１，Ｓ４２の代わりに秘密分散法を用いる方法では次のような問題があることが分かる。それを図６〜７を参照しながら説明する。
【００５２】
図６は、データ登録時における暗号化インデックス付与処理を秘密分散法に置き換えた処理について説明するための図である。
【００５３】
図７は、データ登録後の検索処理を秘密分散法に置き換えた処理について説明するための図である。
【００５４】
図６、７では、データ保有者１（Ａ）が「肺炎」の治療に関する医療データ１（１００）を、データ保有者２（Ｂ）は「高血圧」の治療に関する医療データ２（２００）をそれぞれ有している。
【００５５】
図６はデータ保有者がデータを医療クラウドに預ける際に、キーワード検索を可能とするためのインデックス生成処理を表している。ただし、図６では、図３と異なり、暗号化データの代わりに分散データとして生成しクラウドに預ける処理を行っている。例えば、医療データ１（１００）の６ページ目に肺炎の治療データがある場合は、データ保有者１は、自分自身で生成した乱数を用いて分散インデックス（４００、４０６）「（Ｓｈａｒｅ２,２（肺炎、分散データ＃１）、Ｓｈａｒｅ２,２（医療データ１のｐ．６、分散データ＃１）」、分散インデックス（４０２、４１０）「（Ｓｈａｒｅ２,２（肺炎、分散データ＃２）、Ｓｈａｒｅ２,２（医療データ１のｐ．６、分散データ＃２）」および対応する分散データ４０８「Ｓｈａｒｅ２,２（医療データ１、＃１）」、分散データ４１２「Ｓｈａｒｅ２,２（医療データ１、＃２）」を生成し、これらの分散データを互いに紐づけて医療クラウド１０に預ける。
【００５６】
ただし、Ｓｈａｒｅｔ,ｈ（Ｐ、分散データ＃ｉ）は、平文Ｐに対して、ｔ個データに分散し、ｈ個集めることで平文を復元可能な設定のもとに秘密分散処理を行った結果のｉ番目の分散データを表している。なお、図６、７においてはｈ＝ｔ＝２である。分散データをクラウド１０に預ける際は、（Ｓｈａｒｅ２,２（  、分散データ＃１）と表記される１番目の分散データはクラウド上の第１のデータベースであるＤＢ＃１に、（Ｓｈａｒｅ２,２（．．．、分散データ＃２）と表記される２番目の分散データはクラウド上の第２のデータベースであるＤＢ＃２にそれぞれ預けられる。
【００５７】
データベースＤＢ＃１とＤＢ＃２は異なる管理者によって管理されるため、これらのデータベースから同時に情報漏えいが起きない限り、分散データが漏えいすることがないので安全となる。
【００５８】
同様に、医療データ２の４ページ目に高血圧の治療データがある場合は、データ保有者２（Ｂ）は、自分自身で生成した乱数を用いて、分散インデックス（５００、５０６）「（Ｓｈａｒｅ２,２（高血圧、分散データ＃１）、Ｓｈａｒｅ２,２（医療データ２のｐ．４、分散データ＃１）」と分散インデックス（５０２、５１０）「（Ｓｈａｒｅ２,２（高血圧、分散データ＃２）、Ｓｈａｒｅ２,２（医療データ２のｐ．４、分散データ＃２）」、および対応する分散データ５０８「Ｓｈａｒｅ２,２（医療データ１、＃１）」、分散データ５１２「Ｓｈａｒｅ２,２（医療データ１、＃２）」を生成する。そして、これらの分散データを互いに紐づけて医療クラウド１０に預ける。分散データをクラウド１０に預ける際は、（Ｓｈａｒｅ２,２（．．．、分散データ＃１）と表記される１番目の分散データはクラウド上の第１のデータベースであるＤＢ＃１に、（Ｓｈａｒｅ２,２（．．．、分散データ＃２）と表記される２番目の分散データはクラウド上の第２のデータベースであるＤＢ＃２にそれぞれ預けられる。
【００５９】
これらの預けられたデータに対し、データ利用者Ｄが例えば「肺炎」をキーワード検索したい場合の処理を図７に示す。
【００６０】
図７に示されているように、データ利用者Ｄは、図３同様にデータ保有者に暗号化クエリの代わりに分散化クエリの発行を依頼する。ただし、図３と異なり、データ秘密分散処理を用いたクエリ発行を行う。データ保有者１（Ａ）は、自分自身で生成した乱数を用いてキーワードの分散データ「Ｓｈａｒｅ２,２（肺炎、分散データ＃１）」「Ｓｈａｒｅ２,２（肺炎、分散データ＃２）」を生成しデータ利用者に返信する。データ保有者２（Ｂ）も同様に、自分自身で生成した乱数を用いてキーワードの分散データ「Ｓｈａｒｅ２,２（肺炎、分散データ＃１）」「Ｓｈａｒｅ２,２（肺炎、分散データ＃２）」を生成しデータ利用者に返信する。
【００６１】
データ利用者Ｄはこれらの分散データに変換されたキーワードを受け取り、Ｓｈａｒｅ２,２（  、分散データ＃１）と表記される１番目の分散データをクラウド上の第１のデータベースであるＤＢ＃１に、Ｓｈａｒｅ２,２（  、分散データ＃２）と表記される２番目の分散データをクラウド上の第２のデータベースであるＤＢ＃２にそれぞれ送信する。
【００６２】
第１のデータベースＤＢ＃１は、キーワードに対応するデータベース（ＤＢ）上のインデックスとして、「Ｓｈａｒｅ２,２（肺炎、分散データ＃１）、Ｓｈａｒｅ２,２（医療データ１のｐ．６、分散データ＃１）」を見つけ、データ利用者Ｄに対する検索クエリの結果として、「（Ｓｈａｒｅ２,２（医療データ１のｐ．６、分散データ＃１）、Ｓｈａｒｅ２,２（医療データ１、分散データ＃１））」をデータ利用者に対して出力する。
【００６３】
第２のデータベースＤＢ＃２は、データベース（ＤＢ）上のインデックスとして、「Ｓｈａｒｅ２,２（肺炎、分散データ＃２）、Ｓｈａｒｅ２,２（医療データ１のｐ．６、分散データ＃２）」を見つけ、データ利用者Ｄに対する検索クエリの結果として、「（Ｓｈａｒｅ２,２（医療データ１のｐ．６、分散データ＃２）、Ｓｈａｒｅ２,２（医療データ１、分散データ＃２））」をデータ利用者に対して出力する。
【００６４】
第１のデータベースＤＢ＃１、第２のデータベースＤＢ＃２からこれらの秘密分散データを受け取ったデータ利用者は、秘密分散処理の復元機能を用いて平文である「（医療データ１のｐ．６、医療データ１）」を得る。この医療データ１のｐ．６より、肺炎の治療に必要な医療データの参照を行うことができる。
【００６５】
図６、７に示した方法の問題は、図６に示したデータ保有者によるデータ登録時の秘密分散処理で用いる乱数と、図７に示したデータ利用者からの依頼を受けて分散化クエリを生成する際の秘密分散処理で用いる乱数が同一であるとは限らないため、「肺炎」という同一キーワードの秘密分散処理の結果に再現性がなく、検索が失敗することである。すなわち、以下のような課題３が存在する。
（課題３）データ登録時とデータ検索時での検索の再現性がない。
【００６６】
上記の課題２について図８を参照しながら、説明する。
図８は、検索の再現性がない場合について説明するための図である。
【００６７】
図８に示されているように、データ登録時と検索時で暗号化に用いた乱数が異なるため、医療クラウド１０で、データ利用者Ｄからの暗号化キーワードに対応する暗号化インデックスを特定することができない。
【００６８】
この課題だけならば、データ利用者が疑似乱数を用いる方法で解決することができるが、データ利用者がデータ保有者に対して検索ワードを乱数マスクで隠したい場合に、同様に検索ワードがランダムに変化するため、検索の再現性がなくなるため、単純に疑似乱数を用いただけでは解決することができない。乱数マスクの代わりにデータ利用者のみが有する秘密鍵で暗号化する方法も同様に解決することができない。例えば、データ利用者のみが知る秘密鍵ｘで平文Ｐを公開法ｎで暗号化した結果Ｐｘ（ｍｏｄ  ｎ）をデータ保有者にして渡してキーワードの秘密分散処理を依頼した場合、
【数２】
2015170057.tif 000004
のように、秘密鍵とは無関係かつデータ利用者にはわからない疑似乱数ｒ１、ｒ２、・・・、ｒｈ−１を係数として用いた積和演算処理により分散データが生成されるため、この分散データに含まれるデータ利用者のみが知る秘密鍵xの値を除去することができない。データ保有者はこの秘密鍵ｘの値を知らないため、データ登録時においてこのxの値に依存したインデックス処理を行うことができない。つまり、検索ワードから生成される分散データはxの値に対して非依存である必要があるが、キーワードをデータ利用者のみが知る秘密鍵に依存させた暗号化処理を行いデータ保有者に渡す方式では、非依存とすることができない。すなわち、以下のような課題４が存在する。
（課題４）データ利用者の検索ワードをデータ保有者に対して隠すことができない。
【００６９】
＜実施形態の概要＞
図９〜図１２を参照して、実施形態の概要について説明する。
図９は、実施形態の秘匿検索装置のデータ検索時における機能ブロックの例を示す図である。
【００７０】
データ利用者Ｈが制御する装置２１と、データ保有者Ｇが制御する装置２２が存在する。装置２２を含めて利用者Ｈと呼ぶことがある。さらに、装置２２を含めてデータ保有者Ｇと呼ぶことがある。たとえば、「利用者Ｈがデータ保有者Ｇにデータを送る」と言った時は、「装置２１は装置２２にデータを送る」という意味である。この規則は図９〜図１２に関する記載のみならず、実施例１、２の記載に対しても適用され得る。
【００７１】
まず、データ利用者Ｈは、自分自身が保有する暗号化鍵ｅｋ（１００２）を用いて、たとえば「肺炎」等のキーワード（検索ワード）を暗号化処理部１００４で暗号化し、暗号化キーワード１００６を生成する。そしてデータ利用者Ｈは、暗号化キーワード１００６をデータ保有者Ｇに送信する。このとき、キーワードは平文のまま送っても良い。
【００７２】
データ保有者Ｇは、データ利用者Ｈから受け取ったキーワード１００６が平文の場合、データ利用者Ｈの依頼を受け、データ保有者自身Ｇが保有する秘密鍵１００８と、データ利用者Ｈから受け取ったキーワード１００６の両方を用いて擬似乱数生成部１０１０で擬似乱数数ｒ１、ｒ２、・・・、ｒｈ−１を生成し、データ利用者Ｈに返信する。
【００７３】
キーワード（検索ワード）がデータ利用者Ｈにより暗号化鍵ｅｋによって暗号化されている場合は、データ 保有者自身Ｇは、保有する秘密鍵１００８と、データ利用者Ｈから受け取ったキーワード１００６の両方を用いて擬似乱数生成部１０１０で、暗号化したＥｎｃ（ｒ１、ｅｋ）、Ｅｎｃ（ｒ２、ｅｋ）、・・・、Ｅｎｃ（ｒh-1、ek）（１０１２）を生成し、データ利用者Ｈに返信する。ここでは、検索ワードは暗号化処理部１００４で暗号化されているとしたが、キーワード１００６は、データ保有者Ｈによって暗号化鍵ｅｋ（１００２）で暗号化されていなくても良い。
【００７４】
データ利用者Ｈは、データ保有者Ｇから暗号化された擬似乱数数Ｅｎｃ（ｒ１、ｅｋ）、Ｅｎｃ（ｒ２、ｅｋ）、・・・、Ｅｎｃ（ｒh-1、ek）（１０１２）を受け取った場合は、データ利用者Ｈ自身が保有する復号鍵ｄｋ（１０１４）を用いて、復号処理部１０１６で復号し、擬似乱数ｒ１、ｒ２、・・・、ｒｈ−１を得る。データ利用者Ｈは、データ保有者Ｇから擬似乱数ｒ１、ｒ２、・・・、ｒｈ−１を受け取っても良い。分散データ生成部１０１８で、復号された擬似乱数ｒ１、ｒ２、・・・、ｒｈ−１と、キーワードの平文Ｐを用いて、分散データ＃１〜分散データ＃ｔ
【数３】
2015170057.tif 000005
を生成することで、データ利用者Ｈはキーワード１００６に対応する秘密分散処理結果を得る。そして、乱数消去部１０２０で乱数を消去し、分散データ、図９では検索ワード「肺炎」に関する分散データ（分散検索ワード）１０２２、１０２４を出力する。
【００７５】
図１０は、比較例の秘匿検索装置のデータ検索時における機能ブロックの例を示す図である。
図１０に示されている例では、データ利用者Ｈは、データ保有者Ｇに対し、たとえば「肺炎」等のキーワードを送信する。
【００７６】
データ利用者Ｈが制御する装置２１には、暗号化鍵ｅｋ（１００２）、暗号化処理部１００４、復号鍵ｄｋ（１０１４）、復号処理部１０１６、分散データ生成部１０１８、乱数消去部１０２０が備えられている。また、データ保有者Ｇが制御する装置２２には、擬似乱数生成部１０１が備えられている。
【００７７】
乱数生成部１０２６で乱数を生成し、分散データ生成部１０２８で、データ利用者Ｈから送信されたキーワードと、乱数生成部１０２６で生成された乱数を用いて秘密分散処理を行い、分散データを生成する。
【００７８】
乱数消去部１０３０では、分散データから乱数を消去し、（乱数が消去された）分散データ＃１〜分散データ＃ｔ、図１０では分散データ１０３２、１０３４を出力する。
【００７９】
上記のように、図９に示されている秘匿検索装置は、データ利用者Ｈが秘密分散法を用いた検索クエリ発行をデータ利用者Ｇに依頼することで、（課題１）（課題２）の両方を解決する。例えばｔ＝ｈ＝２のようなパラメータを用いることで、秘密分散の結果データ量は２倍となるが、８バイトのデータが１６バイトになるだけであり、公開鍵暗号のように１２８バイトの大きなデータサイズになることはないため、（課題２）を解決する。
【００８０】
また、秘密分散法で生成する疑似乱数ｒ１、ｒ２、・・・、ｒｈ−１をデータ保有者Ｇの秘密鍵とキーワードに依存した疑似乱数とすることで、（課題３）を解決する。
【００８１】
図１０に示されている比較例では乱数生成処理と分散データ処理の両方をデータ保有者Ｇが行っていたのに対し、図９に示されている実施形態の秘匿検索装置ではデータ保有者Ｇの役割を疑似乱数生成までに限定することで、データ利用者Ｈは自身の暗号化鍵ｅｋ（１００２）で暗号化された疑似乱数Ｅｎｃ（ｒ１、ｅｋ）、Ｅｎｃ（ｒ２、ｅｋ）、・・・、Ｅｎｃ（ｒ２、ｒｈ−１）（１０１２）を受け取ることができる。この値に対し、データ利用者の復号鍵ｄｋを用いた復号処理により、データ利用者Ｈはデータ保有者Ｇの秘密鍵とキーワードのみに依存した疑似乱数ｒ１、ｒ２、・・・、ｒｈ−１を得ることができる。この疑似乱数とキーワードの平文Pを用いて、分散データを計算することで、はデータ保有者の秘密鍵とキーワードに対して再現性がある秘密分散処理を実現することができる。すなわち、（課題３）を解決しながら、同時に（課題４）を解決することができる。
【００８２】
図１１は、実施形態の秘匿検索装置のデータ登録時における機能ブロックの例を示す図である。秘密分散で用いる疑似乱数を、キーワード（秘密分散を行う平文）とデータ保有者の秘密鍵に依存させて生成している。
【００８３】
データ保有者１（Ａ）が制御する装置３１には、医療データ１（１１００）、擬似乱数生成部１１０４、分散データ生成部１１０６、乱数消去部１１０８が備えられている。擬似乱数生成部１１０４、分散データ生成部１１０６、および乱数消去部１１０８の一部または全部は組み合わされて秘密分散処理部と呼ばれることがある。
【００８４】
データ保有者２（Ｂ）が制御する装置３２には、医療データ２（１２００）、擬似乱数生成部１２０４、分散データ生成部１２０６、乱数消去部１２０８が備えられている。擬似乱数生成部１２０４、分散データ生成部１２０６、および乱数消去部１２０８の一部または全部は組み合わされて秘密分散処理部と呼ばれることがある。
【００８５】
データ保有者１（Ａ）は擬似乱数生成部１１０４で、検索ワード１、たとえば「肺炎」と、肺炎に関する医療データ１（１１００）（平文Ｐとも呼ぶ）と、データ保有者１（Ａ）が保有する秘密鍵ｅｋ１（１１０２）を用いて、擬似乱数ｒ１、ｒ２、・・・、ｒｈ−１を生成する。分散データ生成部１１０６で、平文Ｐ（１１００）と擬似乱数ｒ１、ｒ２、・・・、ｒｈ−１から、
【数４】
2015170057.tif 000006
のように分散データ＃１〜分散データ＃ｔを生成する。
【００８６】
乱数消去部１１０８で分散データ＃１〜分散データ＃ｔから乱数を消去し、分散データ１１１０、１１１２、１１１４、１１１６を得る。
【００８７】
一方、データ保有者２（Ｂ）は検索ワード２、たとえば「高血圧」と、高血圧に関する医療データ２（１３００）（平文Ｐとも呼ぶ）と、データ保有者２（Ｂ）が保有する秘密鍵ｅｋ２（１２０２）を用いて、擬似乱数ｒ１、ｒ２、・・・、ｒｈ−１を生成する。分散データ生成部１２０６で、平文Ｐ（１２００）と擬似乱数ｒ１、ｒ２、・・・、ｒｈ−１から、
【数５】
2015170057.tif 000007
のように、分散データ＃１〜分散データ＃ｔを生成する。
【００８８】
乱数消去部１２０８で分散データ＃１〜分散データ＃ｔから乱数を消去し、（乱数が消去された）分散データ１２１０、１２１２、１２１４、１２１６を得る。
【００８９】
そして、分散データ１１１０、１１１２、１１１４、１１１６をクラウド１０に預ける際は、（Ｓｈａｒｅ２,２（  、分散データ＃１）と表記される１番目の分散データはクラウド上の第１のデータベースであるＤＢ＃１に、（Ｓｈａｒｅ２,２（．．．、分散データ＃２）と表記される２番目の分散データはクラウド上の第２のデータベースであるＤＢ＃２にそれぞれ預けられる。
【００９０】
分散データ１１１０、１１１２、１１１４、１１１６をクラウド１０に預ける際は、（Ｓｈａｒｅ２,２（．．．、分散データ＃１）と表記される１番目の分散データはクラウド上の第１のデータベースであるＤＢ＃１に、（Ｓｈａｒｅ２,２（．．．、分散データ＃２）と表記される２番目の分散データはクラウド上の第２のデータベースであるＤＢ＃２にそれぞれ預けられる。
【００９１】
上記のように、データおよびデータに関連するキーワードに対応する分散データおよび分散キーワードを格納するデータベースを検索する秘匿検索装置は、検索ワードから秘密鍵を用いて生成された第１の乱数を用いる秘密分散処理を検索ワードに対して施し、分散キーワードと比較される、分散検索ワードを生成する第１の秘密分散処理部（１０１８＋１０２０）を含む。
【００９２】
また、秘匿検索装置はさらに、復号鍵１０１４を用いて第１の乱数を復号し、第２の乱数を生成する復号処理部１０１６を含み、第１の秘密分散処理部（１０１８＋１０２０）は、検索ワードに対して第２の乱数を用いる秘密分散処理を施して、クラウドサーバに格納されている分散キーワードから対応する一つを検索するために、分散検索ワードを生成する。
【００９３】
また、第１の暗号化処理部１００４と、復号処理部１０１６と、検索ワードから秘密鍵を用いて第１の乱数を生成する乱数生成部１０１０において、互いに可換である暗号を用いる。その暗号は、ＲＳＡ暗号、Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎ法、ＡＥＳカウンターモードのいずれかであってもよい。
【００９４】
分散データとキーワードに対応する分散キーワードは、データおよびデータに関連するキーワードに対して、第１の乱数を用いる秘密分散処理を施して生成されても良い。
【００９５】
さらに、第１の乱数は、暗号化鍵１００２を用いて、検索ワードを暗号化して得られる暗号化検索ワードから、秘密鍵を用いて生成されても良い。
【００９６】
上記のような構成を採用することで、（課題１）（課題２）（課題３）（課題４）を解決することができる。すなわち、異なるユーザ間でデータを相互利用する際、秘密分散を用い、データ利用者の検索ワードをデータ保有者に対して隠しつつも、再現性のある検索を行うことができる。
【００９７】
図１２は実施形態の秘匿検索装置の構成の例を示す図である。
このコンピュータ１３００は、Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ（ＣＰＵ）１３０２、Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ（ＲＯＭ）１３０４、及びＲａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ（ＲＡＭ）１３０６を備えている。コンピュータ１３００は、さらに、ハードディスク装置１３０８、入力装置１３１０、表示装置１３１２、インターフェース装置１３１４、及び記録媒体駆動装置１３１６を備えている。なお、これらの構成要素はバスライン１３２０を介して接続されており、ＣＰＵ１３０２の管理の下で各種のデータを相互に授受することができる。
【００９８】
Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ（ＣＰＵ）１３０２は、このコンピュータ１３００全体の動作を制御する演算処理装置であり、コンピュータ１３００の制御処理部として機能する。
【００９９】
Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ（ＲＯＭ）１３０４は、所定の基本制御プログラムが予め記録されている読み出し専用半導体メモリである。ＣＰＵ１３０２は、この基本制御プログラムをコンピュータ１３００の起動時に読み出して実行することにより、このコンピュータ１３００の各構成要素の動作制御が可能になる。
【０１００】
Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ（ＲＡＭ）１３０６は、ＣＰＵ１３０２が各種の制御プログラムを実行する際に、必要に応じて作業用記憶領域として使用する、随時書き込み読み出し可能な半導体メモリである。
【０１０１】
ハードディスク装置１３０８は、ＣＰＵ１３０２によって実行される各種の制御プログラムや各種のデータを記憶しておく記憶装置である。ＣＰＵ１３０２は、ハードディスク装置１３０８に記憶されている所定の制御プログラムを読み出して実行することにより、後述する各種の制御処理を行えるようになる。
【０１０２】
入力装置１３１０は、例えばマウス装置やキーボード装置であり、情報処理装置のユーザにより操作されると、その操作内容に対応付けられている各種情報の入力を取得し、取得した入力情報をＣＰＵ１３０２に送付する。
【０１０３】
表示装置１３１２は例えば液晶ディスプレイであり、ＣＰＵ１３０２から送付される表示データに応じて各種のテキストや画像を表示する。
【０１０４】
インターフェース装置１３１４は、このコンピュータ１３００に接続される各種機器との間での各種情報の授受の管理を行う。
【０１０５】
記録媒体駆動装置１３１６は、可搬型記録媒体１３１８に記録されている各種の制御プログラムやデータの読み出しを行う装置である。ＣＰＵ１３０２は、可搬型記録媒体１３１８に記録されている所定の制御プログラムを、記録媒体駆動装置１３１６を介して読み出して実行することによって、後述する各種の制御処理を行うようにすることもできる。なお、可搬型記録媒体１３１８としては、例えばＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）規格のコネクタが備えられているフラッシュメモリ、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＤＶＤ−ＲＯＭ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）などがある。
【０１０６】
このようなコンピュータ１３００を用いて秘匿検索装置を構成するには、例えば、上述の各処理部における処理をＣＰＵ１３０２に行わせるための制御プログラムを作成する。作成された制御プログラムはハードディスク装置１３０８若しくは可搬型記録媒体１３１８に予め格納しておく。そして、ＣＰＵ１３０２に所定の指示を与えてこの制御プログラムを読み出させて実行させる。こうすることで、秘匿検索装置が備えている機能がＣＰＵ１３０２により提供される。
【０１０７】
＜第１の実施例＞
図１３〜１６を参照しながら、第１の実施例について説明する。
【０１０８】
本例では、医療クラウド（クラウドサーバ）１０上に３つのデータベース（ＤＢ）ＤＢ＃１、ＤＢ＃２、ＤＢ＃３があり、これら３つのＤＢから３つを得ることができれば平文を復元可能とする。すなわち、秘密分散処理を行う際のパラメータは、ｔ＝ｈ＝３である。第１の実施例においては、データ利用者は検索を行う際に、キーワードを常に平文で送るものとする。この設定のもとで、データ登録時の処理とデータ検索時の処理についてそれぞれ説明する。
【０１０９】
＜＜秘匿検索装置＞＞
図１３は、第１の実施例の秘匿検索装置のデータ登録時における機能ブロックの例を示す図である。
【０１１０】
データ保有者Ａが制御する装置４０は、医療データ１４０４と、医療データに含まれるキーワード１４００、キーワードが医療データのどの部分に含まれるかのインデックス１４０２を作成し、それぞれに対して秘密分散処理を行い、（Ｓｈａｒｅ３,３（キーワード、＃ｉ）、Ｓｈａｒｅ３,３（インデックス、＃ｉ)、Ｓｈａｒｅ３,３（医療データ、＃ｉ））で示される３つ組をＤＢ＃ｉに預ける。ただし、ｉは１、２、３のいずれかである。秘密分散処理の対象は、キーワード１４００、インデックス１４０２、医療データ１４０４の３種類であるが、いずれ対しても実行される秘密分散処理は共通である。
【０１１１】
装置４０の擬似乱数生成部１４０８は、たとえば医療データ１４０４等の平文Ｐ＝ｐ１｜ｐ２｜・・・｜ｐｚ（ｐｉは、平文Ｐを８バイトごとに分割したデータ）、疑似乱数の公開法ｎ、秘密分散パラメータ、たとえばｈ＝３、ｔ＝３、ｑ＝２６４＋１３を用いて、擬似乱数を生成する。
【０１１２】
たとえば、データ保有者Ａが所有する秘密鍵ｓｋと、ｉ番目の平文のブロックｐｉから、２つの擬似乱数ｒｉ，１、ｒｉ，２を生成する。
【０１１３】
たとえば、
【数６】
2015170057.tif 000008
によって２つの擬似乱数ｒｉ，１、ｒｉ，２を生成しても良い。ここでｉ＝１〜ｚである。
【０１１４】
装置４０の分散データ生成部１４１０では、ｉ番目の平文のブロックｐｉに対応する分散データとして、分散データｏｉ＃１（１４３２）、分散データｏｉ＃２（１４３４）、分散データｏｉ＃３（１４３６）を生成する。たとえば、分散データｏｉ＃１〜ｏｉ＃３は、
【数７】
2015170057.tif 000009
のように生成されても良い。ここでｉ＝１〜ｚである。
【０１１５】
装置４０の乱数消去部１４１２で、分散データｏｉ＃１〜ｏｉ＃３から乱数を消去し、分散データ＃１〜分散データ＃３を、
【数８】
2015170057.tif 000010
によって生成する。
【０１１６】
ここで、および以下では、「｜」はビット結合を意味するものとする。
上の平文Ｐには、キーワード１４００、インデックス１４０２、医療データ１４０４が含まれる。すなわち、キーワード１４００からは、分散キーワード＃１（１４１４）、分散キーワード＃２（１４１６）、分散キーワード＃３（１４１８）が生成される。インデックス１４０２からは、分散ｉｎｄｅｘ＃１（１４２０）、分散ｉｎｄｅｘ＃２（１４２２）、分散ｉｎｄｅｘ＃３（１４２４）が生成される。医療データ１４０４からは、分散データ＃１（１４２６）、分散データ＃２（１４２８）、分散データ＃３（１４３０）が生成される。
【０１１７】
クラウド４３のデータベースＤＢ＃１には、分散キーワード＃１（１４１４）と分散ｉｎｄｅｘ＃１（１４２０）と分散データ＃１（１４２６）が格納される。データベースＤＢ＃２には、分散キーワード＃２（１４１６）と分散ｉｎｄｅｘ＃２（１４２２）と分散データ＃２１（１４２８）が格納される。データベースＤＢ＃３には、分散キーワード＃３（１４１８）と分散ｉｎｄｅｘ＃１（１４２４）と分散データ＃１（１４３０）が格納される。
【０１１８】
図１４は、第１の実施例の秘匿検索装置のデータ検索時における機能ブロックの例を示す図である。
【０１１９】
データ利用者Ｄ（装置４１）はキーワード等の平文Ｐ＝ｐ１｜ｐ２｜・・・｜ｐｚ（ｐｉは、平文Ｐを８バイトごとに分割したデータ）と、疑似乱数の公開法ｎ、秘密分散パラメータ、たとえばｈ＝３、ｔ＝３、ｑ＝２６４＋１３を有しているものとする。
【０１２０】
データ利用者Ｄ（装置４１）はデータ保有者Ａ（装置４２）に対し、キーワード１５０４を８バイトごとに分割したデータｐｉを送る。キーワード１５０４は、たとえば「肺炎」であっても良い。
【０１２１】
データ保有者Ａは、装置４２の擬似乱数生成部１５０２で、キーワード１５０４を８バイトごとに分割したデータｐｉとデータ保有者Ａは保有する秘密鍵ｓｋ（１５００）を用いて、擬似乱数を生成する。たとえば、擬似乱数ｒｉ，１、ｒｉ，２は、
【数９】
2015170057.tif 000011
によって生成しても良い。
【０１２２】
そして、装置４２の擬似乱数生成部１５０２は、擬似乱数ｒｉ，１、ｒｉ，２をデータ利用者Ｄに送る。
【０１２３】
装置４１の分散データ生成部１５０６は、擬似乱数ｒｉ，１、ｒｉ，２を用いて、平文のデータｐｉに対応する分散データとして、分散データｏｉ＃１（１４３２）、分散データｏｉ＃２（１４３４）、分散データｏｉ＃３（１４３６）を生成する。たとえば、分散キーワードｏｉ＃１〜ｏｉ＃３は、
【数１０】
2015170057.tif 000012
のように生成されても良い。
【０１２４】
装置４１の乱数消去部１５０８は、分散キーワード＃１〜キーワード＃３から乱数を消去し、（乱数が消去された）分散キーワード＃１（１５１０）、分散キーワード＃２（１５１２）、分散キーワード＃３（１５１４）を、
【数１１】
2015170057.tif 000013
によって生成する。この分散キーワード＃１〜＃３を用いて、クラウド４３のデータベースＤＢ＃１〜＃３に格納されている分散ｉｎｄｅｘ＃１（１４２０）、分散ｉｎｄｅｘ＃２（１４２２）、分散ｉｎｄｅｘ＃３（１４２４）と比較することができる。
【０１２５】
上記のような構成を採用することで、（課題１）（課題２）（課題３）（課題４）を解決することができる。すなわち、異なるユーザ間でデータを相互利用する際、秘密分散を用い、データ利用者の検索ワードをデータ保有者に対して隠しつつも、再現性のある検索を行うことができる。
【０１２６】
＜＜秘匿検索処理＞＞
図１５は、データ登録時の秘密分散の処理の流れの例を示す図である。
【０１２７】
処理が開始されると、Ｓ２００で擬似乱数生成部１４０８は、たとえば医療データ１４０４等の平文Ｐ＝ｐ１｜ｐ２｜・・・｜ｐｚ（ｐｉは、平文Ｐを８バイトごとに分割したデータ）、疑似乱数の公開法ｎ、秘密分散パラメータ、たとえばｈ＝３、ｔ＝３、ｑ＝２６４＋１３の入力を受ける。
【０１２８】
次のＳ２０２で分散データ生成部１４１０は、ダミー変数ｉをリセットし、ｉ＝１とする。本ステップの処理が終了すると、処理はＳ２０４に進む。
【０１２９】
Ｓ２０４で分散データ生成部１４１０は、キーワード１５０４を８バイトごとに分割したデータｐｉとデータ保有者Ａは保有する秘密鍵ｓｋ（１５００）を用いて、擬似乱数を生成する。たとえば、擬似乱数ｒｉ，１、ｒｉ，２は、
【数１２】
2015170057.tif 000014
によって生成しても良い。本ステップの処理が終了すると、処理はＳ２０６に進む。
【０１３０】
Ｓ２０６で分散データ生成部１４１０は、擬似乱数ｒｉ，１、ｒｉ，２を用いて、平文のデータｐｉに対応する分散データとして、分散データｏｉ＃１（１４３２）、分散データｏｉ＃２（１４３４）、分散データｏｉ＃３（１４３６）を生成する。たとえば、分散キーワードｏｉ＃１〜ｏｉ＃３は、
【数１３】
2015170057.tif 000015
のように生成されても良い。本ステップの処理が終了すると、処理はＳ２０８に進む。
【０１３１】
Ｓ２０８で乱数消去部１４０８は分散データ＃１〜分散データ＃３から乱数を消去する。本ステップの処理が終了すると、処理はＳ２１０に進む。
【０１３２】
Ｓ２１０で乱数消去部１４０８は、現在のｉの値がｚより大きいか否かを判定する。もしこの判定の結果が“Ｙｅｓ（Ｙ）”、すなわち現在のｉの値がｚより大きい場合は、Ｓ２１４に進む。また、もしこの判定の結果が“Ｎｏ（Ｎ）”、すなわち現在のｉの値がｚ以下の場合は、ｉの値を更新してからＳ２０４に戻る。
【０１３３】
Ｓ２１４で乱数消去部１４０８は、分散データｏｉ＃１〜ｏｉ＃３から乱数を消去し、分散データ＃１〜分散データ＃３を、
【数１４】
2015170057.tif 000016
によって生成し、出力し、医療クラウド１０に格納する。
【０１３４】
図１６〜１７は、データ検索時の秘密分散の処理の流れの例を示す図である。
Ｓ３００でデータ利用者Ｄは、キーワード１５０４等の平文Ｐ＝ｐ１｜ｐ２｜・・・｜ｐｚ（ｐｉは、平文Ｐを８バイトごとに分割したｉ番目のデータ）と、疑似乱数の公開法ｎ、秘密分散パラメータ、たとえばｈ＝３、ｔ＝３、ｑ＝２６４＋１３を入力する。
【０１３５】
また、Ｓ３１８でデータ保有者Ａは、疑似乱数の公開法ｎ、秘密分散パラメータ、たとえばｈ＝３、ｔ＝３、ｑ＝２６４＋１３を入力する。
【０１３６】
Ｓ３１８の次のＳ３２０で擬似乱数生成部１５０２は、ダミー変数ｉの値を１にセットする。
【０１３７】
Ｓ３０２で、データ利用者Ｄはデータ保有者Ａに対し、キーワード１５０４を８バイトごとに分割したデータｐｉを送る。キーワード１５０４は、たとえば「肺炎」であっても良い。本ステップの処理が終了すると、処理はＳ３２２に進む。
【０１３８】
Ｓ３２２で擬似乱数生成部１５０２は、キーワード１５０４を８バイトごとに分割したデータｐｉを受信する。本ステップの処理が終了すると、処理はＳ３２４に進む。
【０１３９】
Ｓ３２４で擬似乱数生成部１５０２は、キーワード１５０４を８バイトごとに分割したデータｐｉとデータ保有者Ａは保有する秘密鍵ｓｋ（１５００）を用いて、擬似乱数を生成する。たとえば、擬似乱数ｒｉ，１、ｒｉ，２は、
【数１５】
2015170057.tif 000017
によって生成しても良い。本ステップの処理が終了すると、処理はＳ３２６に進む。
【０１４０】
Ｓ３２６で擬似乱数生成部１５０２は、擬似乱数ｒｉ，１、ｒｉ，２をデータ利用者Ｄに送る。本ステップの処理が終了すると、処理はＳ３２８に進む。
【０１４１】
Ｓ３２８で擬似乱数生成部１５０２は、ｉの値を１増やす。
Ｓ３２８の次のＳ３２０で擬似乱数生成部１５０２は、現在のｉの値がｚより大きいか否かを判定する。もしこの判定の結果が“Ｙｅｓ（Ｙ）”、すなわち現在のｉの値がｚより大きい場合は、処理を終了する。また、もしこの判定の結果が“Ｎｏ（Ｎ）”、すなわち現在のｉの値がｚ以下の場合は、Ｓ３２２に戻る。
【０１４２】
Ｓ３０６で分散データ生成部１５０６は、擬似乱数生成部１５０２から擬似乱数ｒｉ，１、ｒｉ，２を受信する。本ステップの処理が終了すると、処理はＳ３０８に進む。
【０１４３】
Ｓ３０８で分散データ生成部１５０６は、擬似乱数ｒｉ，１、ｒｉ，２を用いて、平文のデータｐｉに対応する分散データとして、分散データｏｉ＃１（１４３２）、分散データｏｉ＃２（１４３４）、分散データｏｉ＃３（１４３６）を生成する。たとえば、分散キーワードｏｉ＃１〜ｏｉ＃３は、
【数１６】
2015170057.tif 000018
のように生成されても良い。本ステップの処理が終了すると、処理はＳ３１０に進む。
【０１４４】
Ｓ３１０で乱数消去部１５０８は、分散キーワード＃１〜キーワード＃３から乱数を消去する。
【０１４５】
Ｓ３１０の次のＳ３１２で乱数消去部１５０８は、ｉの値を１増やす。
Ｓ３１２の次のＳ３１４で乱数消去部１５０８は、現在のｉの値がｚより大きいか否かを判定する。もしこの判定の結果が“ＹＥＳ”、すなわち現在のｉの値がｚより大きい場合は、Ｓ３１６に進む。また、もしこの判定の結果が“ＮＯ”、すなわち現在のｉの値がｚ以下の場合は、Ｓ３０４に戻る。
【０１４６】
Ｓ３１６で乱数消去部１５０８は、分散キーワード＃１（１５１０）、分散キーワード＃２（１５１２）、分散キーワード＃３（１５１４）を、
【数１７】
2015170057.tif 000019
によって生成し、出力し、処理を終了する。
【０１４７】
上記のような処理を採用することで、（課題１）（課題２）（課題３）（課題４）を解決することができる。すなわち、異なるユーザ間でデータを相互利用する際、秘密分散を用い、データ利用者の検索ワードをデータ保有者に対して隠しつつも、再現性のある検索を行うことができる。
【０１４８】
＜第２の実施例＞
図１８〜２０を参照して、第２の実施例について説明する。
【０１４９】
医療クラウド上に３つのデータベースＤＢ＃１、ＤＢ＃２、ＤＢ＃３があり、これら３つのデータベースから３つを得ることができれば平文を復元可能、つまり秘密分散処理を行う際のパラメータｔ＝ｈ＝３である点は第１の実施例と同じである。相違点は、第２の実施例においては、データ利用者は検索を行う際に、キーワードを必要に応じて自身の暗号化鍵で暗号化して送ることである。データ登録処理は第１の実施例とまったく同一であるので、以下ではデータ検索処理について説明する。
【０１５０】
本実施例では、可換性のある暗号アルゴリズムにＲＳＡ暗号を用いてもよい。しかしながら、ＲＳＡ暗号の代わりに、Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎ法や、ＡＥＳカウンターモードを使用しても良い。
【０１５１】
図１７は、第２の実施例の秘匿検索装置のデータ検索時における機能ブロックの例を示す図である。
【０１５２】
クラウド５３のデータベースＤＢ＃１〜＃３に格納されている分散ｉｎｄｅｘ＃１（１６１８）、分散ｉｎｄｅｘ＃２（１６２０）、分散ｉｎｄｅｘ＃３（１６２２）が格納されている。
【０１５３】
データ利用者Ｄが制御する装置５１の暗号化部１６０８には、暗号化フラグ１６０６と検索に用いるキーワード１６０４、たとえば「肺炎」等が入力される。
【０１５４】
装置５１の暗号化部１６０８では、データ利用者Ｄはデータ保有者Ａに対し、キーワード１６０４の秘密分散処理を依頼し実行する。キーワードをデータ保有者に送る際、キーワードを隠したい場合は自身のみが保有する暗号化鍵ｅｋを用いた暗号化処理を行った結果Ｅｎｃ（ｒｉ,１、ｅｋ）、Ｅｎｃ（ｒｉ,２、ｅｋ）をデータ保有者に送信する。
【０１５５】
データ保有者Ａが制御する装置５２の擬似乱数生成部１６０２は、受信したキーワード１６０４が平文、暗号文に関係なく、自身の秘密鍵ｓｋ（１６００）を用いて疑似乱数生成を行い、復号部１６０８に送信する。
【０１５６】
装置５１の復号部１６１０は、キーワードに対する暗号化処理を行っていない場合、疑似乱数ｒｉ,１、ｒｉ,２ を、暗号化処理を行っている場合は、疑似乱数ｒｉ，１、ｒｉ，２を、暗号化鍵ｅｋを用いて暗号化した値Ｅｎｃ（ｒｉ，１、ｅｋ）、Ｅｎｃ（ｒｉ，２、ｅｋ）を受信する。後者のデータに対しては、復号鍵ｄｋを用いて復号することで擬似乱数ｒｉ，１、ｒｉ，２を得る。
【０１５７】
上記の処理を行う際に重要なのは、暗号化部１６０８、擬似乱数生成部１６０２、復号部１６１０で行われる暗号化・復号処理および疑似乱数生成処理を、可換性を有する同一の暗号方式で実行することである。可換性を有するとは、２つの異なる鍵の適用順序を入れ替えて順次暗号化処理を行った場合でも暗号結果が同一となる。すなわち、２つの異なる鍵をｋ１、ｋ２とすると、
【数１８】
2015170057.tif 000020
が満たされる暗号アルゴリズムとなるＥｎｃ（  ）を用いることである。例えばＲＳＡ暗号や、Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎ法、ＡＥＳカウンターモードがこの条件を満たしている。可換性が満たされることで、データ利用者が暗号化したキーワードＥｎｃ（Ｐ、ｅｋ）を用いて、擬似乱数生成部１６０２が秘密鍵ｓｋで疑似乱数処理した結果Ｅｎｃ（Ｅｎｃ（Ｐ、ｅｋ）、ｓｋ）に対して、さらにデータ保有者が自身の復号鍵を用いて復号処理を行った結果であるＤｅｃ（Ｅｎｃ（Ｅｎｃ（Ｐ、ｅｋ）、ｓｋ）、ｄｋ）は、可換性の性質から
【数１９】
2015170057.tif 000021
となるため、データ保有者はデータ保有者の鍵ｓｋによる疑似乱数生成結果を得ることができる。
【０１５８】
装置５１の分散データ生成部１６１２、乱数消去部１６１４はそれぞれ、図１５の分散データ生成部１５０６、乱数消去部１５０８と同一または類似の機能を有する。よって、詳細な説明は省略する。
【０１５９】
装置５１の乱数消去部１６１４は、分散キーワード＃１〜キーワード＃３から乱数を消去し、分散キーワード＃１（１６１８）、分散キーワード＃２（１６２０）、分散キーワード＃３（１６２２）を、
【数２０】
2015170057.tif 000022
によって生成する。この分散キーワード＃１〜＃３を用いて、クラウド１０のデータベースＤＢ＃１〜＃３に格納されている分散ｉｎｄｅｘ＃１（１６１８）、分散ｉｎｄｅｘ＃２（１６２０）、分散ｉｎｄｅｘ＃３（１６２２）と比較することができる。
【０１６０】
上記のような構成を採用することで、（課題１）（課題２）（課題３）（課題４）を解決することができる。すなわち、異なるユーザ間でデータを相互利用する際、秘密分散を用い、データ利用者の検索ワードをデータ保有者に対して隠しつつも、再現性のある検索を行うことができる。
【０１６１】
＜＜秘匿検索処理＞＞
図１９〜２０は、第２の実施例におけるデータ検索時の秘密分散の処理の流れの例を示す図である。
【０１６２】
Ｓ４００でデータ利用者Ｄは、キーワード１６０４等の平文Ｐ＝ｐ１｜ｐ２｜・・・｜ｐｚ（ｐｉは、平文Ｐを８バイトごとに分割したデータ）と、疑似乱数の公開法ｎ、秘密分散パラメータ、たとえばｈ＝３、ｔ＝３、ｑ＝２６４＋１３、キーワードに対する暗号化フラグを入力する。
【０１６３】
Ｓ４００の次のＳ４０２で暗号化部１６０８は、暗号化部１６０８、復号部１６１０、分散データ生成部１６１２、乱数消去部１６１４で用いるダミー変数ｉの値を１にセットする。本ステップの処理が終了すると、処理はＳ４０４に進む。
【０１６４】
また、Ｓ４２６でデータ保有者Ａは、疑似乱数の公開法ｎ、秘密分散パラメータ、たとえばｈ＝３、ｔ＝３、ｑ＝２６４＋１３を入力する。
【０１６５】
Ｓ４２６の次のＳ４２８で擬似乱数生成部１５０２は、擬似乱数生成部１６０２で用いるダミー変数ｉの値を１にセットする。本ステップの処理が終了すると、処理はＳ４３０に進む。
【０１６６】
Ｓ４０４で暗号化部１６０８は、暗号化フラグが有効か否かを判定する。この判定の結果が”Ｙｅｓ（Ｙ）”、すなわち暗号化フラグが有効である場合、Ｓ４０８に進む。また、この判定の結果が”Ｎｏ（Ｎ）”、すなわち暗号化フラグが有効でない場合、Ｓ４０６に進む。
【０１６７】
Ｓ４０６で暗号化部１６０８は、キーワード１６０４を８バイトごとに分割したデータｐｉから（１｜ｐｉ）、（１｜ｐｉ）を生成し、擬似乱数生成部１６０２に送信する。本ステップの処理が終了すると、処理はＳ４３０に進む。
【０１６８】
Ｓ４０８で暗号化部１６０８は、データ利用者Ｂが保有する秘密鍵ｓｋ（１６００）を用いて、擬似乱数（１｜ｐｉ）ｅｋ（ｍｏｄ  ｎ）、（２｜ｐｉ）ｅｋ（ｍｏｄ  ｎ）を生成し、擬似乱数生成部１６０２に送信する。本ステップの処理が終了すると、処理はＳ４１０に進む。
【０１６９】
Ｓ４３０で擬似乱数生成部１６０２は、暗号化フラグが無効のときは、（１｜ｐｉ）、（１｜ｐｉ）、暗号化フラグが有功のときは、擬似乱数ｒｉ，１、ｒｉ，２を暗号化部１６０８から受信する。本ステップの処理が終了すると、処理はＳ４３２に進む。
【０１７０】
Ｓ４３２で擬似乱数生成部１６０２は、データ保有者Ａが所有する秘密鍵ｓｋ（１６００）を用いた擬似乱数生成を行う。暗号フラグが無効の場合、擬似乱数ｒｉ，１、ｒｉ，２は、
【数２１】
2015170057.tif 000023
によって生成されても良い。また、暗号化フラグが有効な場合、擬似乱数ｒｉ，１、ｒｉ，２は、
【数２２】
2015170057.tif 000024
によって生成されても良い。本ステップの処理が終了すると、処理はＳ４３４に進む。
【０１７１】
Ｓ４３４で擬似乱数生成部１６０２は、擬似乱数ｒｉ，１、ｒｉ，２をデータ利用者Ｄ側の復号部１６１０に送信する。本ステップの処理が終了すると、処理はＳ４３６に進む。
【０１７２】
Ｓ４３６で擬似乱数生成部１６０２は、現在、保有している擬似乱数ｒｉ，１、ｒｉ，２を消去する。本ステップの処理が終了すると、処理はＳ４３８に進む。
【０１７３】
Ｓ４３８擬似乱数生成部１６０２は、ダミー変数ｉの値を１つ増やす。
Ｓ４３８の次のＳ４４０で擬似乱数生成部１６０２は、現在のｉの値がｚより大きいか否かを判定する。もしこの判定の結果が“ＹＥＳ”、すなわち現在のｉの値がｚより大きい場合は、擬似乱数生成部１６０２は処理を終了する。また、もしこの判定の結果が“ＮＯ”、すなわち現在のｉの値がｚ以下の場合は、Ｓ３３０に戻る。
【０１７４】
Ｓ４１０でデータ利用者Ｄの側の復号部１６１０は、データ保有者Ａの側の擬似乱数生成部１６０２から擬似乱数ｒｉ，１、ｒｉ，２を受信する。
【０１７５】
Ｓ４１０の次のＳ４１２で復号部１６１０は、暗号化フラグが有効か否かを判定する。しこの判定の結果が“ＹＥＳ”、すなわち暗号化フラグが有効である場合、処理はＳ４１４に進む。また、もしこの判定の結果が“ＮＯ”、すなわち暗号化フラグが有効でない場合は、Ｓ４１６に進む。
【０１７６】
Ｓ４１４で復号部１６１０は、復号鍵ｄｋを用いて、擬似乱数ｒｉ，１、ｒｉ，２を復号する。たとえば、
【数２３】
2015170057.tif 000025
によって復号しても良い。本ステップの処理が終了すると、処理はＳ４１６に進む。
【０１７７】
Ｓ４１６で分散データ生成部１６１２は、擬似乱数ｒｉ，１、ｒｉ，２から分散データを生成する。たとえば分散データ生成部１６１２は、分散データｏｉ＃１〜ｏｉ＃３は、
【数２４】
2015170057.tif 000026
によって分散データを生成しても良い。本ステップの処理が終了すると、処理はＳ４１８に進む。
【０１７８】
Ｓ４１８で乱数消去部１６１４は、分散キーワード＃１〜キーワード＃３から乱数を消去する。
【０１７９】
Ｓ４１８の次のＳ４２０で乱数消去部１６１４は、ｉの値を１増やす。
Ｓ４２０の次のＳ４２２で乱数消去部１６１４は、現在のｉの値がｚより大きいか否かを判定する。もしこの判定の結果が“ＹＥＳ”、すなわち現在のｉの値がｚより大きい場合は、Ｓ４２４に進む。また、もしこの判定の結果が“ＮＯ”、すなわち現在のｉの値がｚ以下の場合は、Ｓ４０４に戻る。
【０１８０】
Ｓ４２４で乱数消去部１５０８は、分散データ＃１、分散データ＃２、分散データ＃３を、
【数２５】
2015170057.tif 000027
によって生成し、出力し、処理を終了する。
【０１８１】
上記のような処理を採用することで、（課題１）（課題２）（課題３）（課題４）を解決することができる。すなわち、異なるユーザ間でデータを相互利用する際、秘密分散を用い、データ利用者の検索ワードをデータ保有者に対して隠しつつも、再現性のある検索を行うことができる。
【０１８２】
以上の実施形態に関し、さらに以下の付記を開示する。
（付記１）
データおよび前記データに関連するキーワードに対応する分散データおよび分散キーワードを格納するデータベースを検索する秘匿検索装置において、
検索ワードから秘密鍵を用いて生成された第１の乱数を用いる秘密分散処理を前記検索ワードに対して施し、前記分散キーワードと比較される、分散検索ワードを生成する第１の秘密分散処理部（図９、１０１８＋１０２０）、
を含む秘匿検索装置。
（付記２）
さらに、
復号鍵（図９、１０１４）を用いて前記第１の乱数を復号し、第２の乱数を生成する復号処理部（図９、１０１６）
を含み、
第１の秘密分散処理部（図９、１０１８＋１０２０）は、前記検索ワードに対して前記第２の乱数を用いる秘密分散処理を施して、前記クラウドサーバに格納されている前記分散キーワードから対応する一つを検索するために、分散検索ワードを生成する、付記１に記載の秘匿検索装置。
（付記３）
前記第１の暗号化処理部（図９、１００４）と、前記復号処理部（図９、１０１６）と、検索ワードから秘密鍵を用いて前記第１の乱数を生成する際において、互いに可換である暗号を用いる付記２に記載の秘匿検索装置。
（付記４）
前記暗号は、ＲＳＡ暗号、Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎ法、ＡＥＳカウンターモードのいずれかを用いる、付記３に記載の秘匿検索装置。
（付記５）
前記分散データと前記キーワードに対応する前記分散キーワードは、前記データおよび前記データに関連する前記キーワードに対して、前記第１の乱数を用いる秘密分散処理を施して生成される、付記１乃至４のいずれか一項に記載の秘匿検索装置。
（付記６）
前記第１の乱数は、暗号化鍵（図９、１００２）を用いて、検索ワードを暗号化して得られる暗号化検索ワードから、秘密鍵を用いて生成される、付記１乃至５のいずれか一項に記載の秘匿検索装置。
（付記７）
コンピュータによって処理される、データおよび前記データに関連するキーワードに対応する分散データおよび分散キーワードを格納するデータベースを検索する秘匿検索方法であって、
検索ワードから秘密鍵を用いて生成された第１の乱数を用いる秘密分散処理を前記検索ワードに対して施し、前記分散キーワードと比較される、分散検索ワードを生成すること（図１６、Ｓ３０８）、
を含む秘匿検索方法。
（付記８）
データおよび前記データに関連するキーワードに対応する分散データおよび分散キーワードを格納するデータベースを検索する秘匿検索プログラムにおいて、
検索ワードから秘密鍵を用いて生成された第１の乱数を用いる秘密分散処理を前記検索ワードに対して施し、前記分散キーワードと比較される、分散検索ワードを生成する（図１６、Ｓ３０８）
処理をコンピュータ（図１２、１３００）に実行させることを特徴とする秘匿検索プログラム。
【符号の説明】
【０１８３】
１０  クラウドサーバ
１００４、１６０８  暗号化処理部
１０１０、１１０４、１２０４、１４０８、１５０２、１６０２  擬似乱数生成部
１０１６、１６１０  復号処理部
１０１８  １１０６、１２０６、１４１０、１５０６、１６１２  分散データ生成部
１０２０、１０３０、１１０８、１２０８、１４１２、１５０８、１６１４  乱数消去部
１０２６  乱数生成部
１０２８  分散データ生成部
１０２  入力部
１０４  一般化部
１０６  出力部
【図１】
2015170057.tif 000028
【図２】
2015170057.tif 000029
【図３】
2015170057.tif 000030
【図４】
2015170057.tif 000031
【図６】
2015170057.tif 000032
【図７】
2015170057.tif 000033
【図８】
2015170057.tif 000034
【図１０】
2015170057.tif 000035
【図１２】
2015170057.tif 000036
【図１５】
2015170057.tif 000037
【図１６】
2015170057.tif 000038
【図１７】
2015170057.tif 000039
【図１９】
2015170057.tif 000040
【図２０】
2015170057.tif 000041
【図５】
2015170057.tif 000042
【図９】
2015170057.tif 000043
【図１１】
2015170057.tif 000044
【図１３】
2015170057.tif 000045
【図１４】
2015170057.tif 000046
【図１８】
2015170057.tif 000047