(57)【要約】【課題】暗号鍵を有していない第三者による複数の暗号データを用いた暗号データの解析を困難にする。【解決手段】データ提供装置は、第１平文によって一意に決まり、かつ第１平文以外のいずれの平文のノイズベクトルとも異なる第１ノイズベクトルと係数行列とを用いて、ＬＰＮに基づく暗号化方式により第１平文を暗号化する。データ利用装置は、第２平文によって一意に決まり、かつ第２平文以外のいずれの平文のノイズベクトルとも異なる第２ノイズベクトルと係数行列とを用いて、ＬＰＮに基づく暗号化方式により第２平文を暗号化する。データ管理装置は、データ提供装置から第１暗号文を受信する。またデータ管理装置は、データ利用装置から第２暗号文を受信し、第１暗号文と第２暗号文とのハミング距離に基づいて、第１平文と第２平文とが一致するか否かを判断する。【選択図】図１２
2020109447.tif 000002
【特許請求の範囲】
【請求項１】
検索対象の第１平文によって一意に決まり、かつ前記第１平文以外のいずれの平文のノイズベクトルとも異なる第１ノイズベクトルと、１の確率が所定値のバイナリの係数行列とを用いて、ＬＰＮ（Learning Parity with Noise）に基づく暗号化方式により前記第１平文を暗号化し、暗号化によって得られた第１暗号文を送信するデータ提供装置と、
検索クエリである第２平文によって一意に決まり、かつ前記第２平文以外のいずれの平文のノイズベクトルとも異なる第２ノイズベクトルと、前記係数行列とを用いて、ＬＰＮに基づく暗号化方式により前記第２平文を暗号化し、暗号化によって得られた第２暗号文を送信するデータ利用装置と、
前記データ提供装置から前記第１暗号文を受信し、受信した前記第１暗号文を記憶部に格納し、前記データ利用装置から前記第２暗号文を受信し、前記第１暗号文と前記第２暗号文とのハミング距離に基づいて、前記第１平文と前記第２平文とが一致するか否かを判断し、判断結果を前記データ利用装置に送信するデータ管理装置と、
を有する秘密情報検索システム。
【請求項２】
コンピュータに、
検索対象の第１平文によって一意に決まり、かつ前記第１平文以外のいずれの平文のノイズベクトルとも異なる第１ノイズベクトルと、１の確率が所定値のバイナリの係数行列とを用いた、ＬＰＮ（Learning Parity with Noise）に基づく暗号化方式による前記第１平文の暗号化によって得られた第１暗号文を受信し、
受信した前記第１暗号文を記憶部に格納し、
検索クエリである第２平文によって一意に決まり、かつ前記第２平文以外のいずれの平文のノイズベクトルとも異なる第２ノイズベクトルと、前記係数行列とを用いた、ＬＰＮに基づく暗号化方式による前記第２平文の暗号化によって得られた第２暗号文を受信し、
前記第１暗号文と前記第２暗号文とのハミング距離に基づいて、前記第１平文と前記第２平文とが一致するか否かを判断し、
判断結果を出力する、
処理を実行させる秘密情報検索プログラム。
【請求項３】
前記係数行列の取得要求を受信すると、前記 コンピュータを経由しない通信経路 による、前記取得要求の送信元装置への前記係数行列の送信、または前記取得要求の送信元装置への暗号化した前記係数行列の送信を、前記第１暗号文の送信元装置に依頼する、
請求項２記載の秘密情報検索プログラム。
【請求項４】
前記第１ノイズベクトルは、前記第１平文に基づいて生成されており、
前記第２ノイズベクトルは、前記第２平文に基づいて生成されている、
請求項２または３記載の秘密情報検索プログラム。
【請求項５】
前記第１ノイズベクトルは、前記 係数行列 と前記第１平文とに基づいて生成されており、
前記第２ノイズベクトルは、前記係数行列と前記第２平文とに基づいて生成されている、
請求項２ないし４のいずれかに記載の秘密情報検索プログラム。
【請求項６】
前記第１ノイズベクトルは、前記係数行列と前記第１平文とに基づいて生成された第１プレノイズベクトルと、乱数によって生成された第２プレノイズベクトルとに基づいて生成されており、
前記第２ノイズベクトルは、前記係数行列と前記第２平文とに基づいて生成された第３プレノイズベクトルと、乱数によって生成された第４プレノイズベクトルとに基づいて生成されている、
請求項５記載の秘密情報検索プログラム。
【請求項７】
前記第１ノイズベクトルは、前記係数行列と前記第１平文と前記第１平文の属性を示す属性名とに基づいて生成されており、
前記第２ノイズベクトルは、前記係数行列と前記第２平文と前記第２平文の属性を示す属性名とに基づいて生成されている、
請求項５または６記載の秘密情報検索プログラム。
【請求項８】
前記第１暗号文は、各要素の値が１／２ずつの確率で０または１となる第１平文ベクトルに前記第１平文を変換し、前記第１平文ベクトルを暗号化することで生成されており、
前記第２暗号文は、各要素の値が１／２ずつの確率で０または１となる第２平文ベクトルに前記第２平文を変換し、前記第２平文ベクトルを暗号化することで生成されている、
請求項２ないし７のいずれかに記載の秘密情報検索プログラム。
【請求項９】
前記第１暗号文は、前記第１平文と前記第１平文の属性を示す属性名との組を暗号化することで生成されており、
前記第２暗号文は、前記第２平文と前記第２平文の属性を示す属性名との組を暗号化することで生成されている、
請求項２ないし８のいずれかに記載の秘密情報検索プログラム。
【請求項１０】
前記コンピュータに、さらに、
前記第１暗号文の送信元と前記第２暗号文の送信元とで共有する関係秘密鍵と第１秘密鍵とに基づいて生成された第１照合鍵を受信し、
前記第１照合鍵を前記記憶部に格納し、
前記関係秘密鍵と第２秘密鍵とに基づいて生成された第２照合鍵を受信し、
前記第２照合鍵を前記記憶部に格納する、
処理を実行させ、
前記第１暗号文の受信では、前記第１ノイズベクトル、前記係数行列、および前記第１秘密鍵を用いて暗号化された前記第１暗号文を受信し、
前記第２暗号文の受信では、前記第２ノイズベクトル、前記係数行列、および前記第２秘密鍵を用いて暗号化された前記第２暗号文を受信し、
前記判断では、前記第１暗号文と前記第２暗号文とから、前記第１照合鍵と前記第２照合鍵とを用いて前記第１秘密鍵と前記第２秘密鍵の影響を除去して、前記第１暗号文と前記第２暗号文とのハミング距離を計算する、
請求項２ないし９のいずれかに記載の秘密情報検索プログラム。
【請求項１１】
コンピュータが、
検索対象の第１平文によって一意に決まり、かつ前記第１平文以外のいずれの平文のノイズベクトルとも異なる第１ノイズベクトルと、１の確率が所定値のバイナリの係数行列とを用いた、ＬＰＮ（Learning Parity with Noise）に基づく暗号化方式による前記第１平文の暗号化によって得られた第１暗号文を受信し、
受信した前記第１暗号文を記憶部に格納し、
検索クエリである第２平文によって一意に決まり、かつ前記第２平文以外のいずれの平文のノイズベクトルとも異なる第２ノイズベクトルと、前記係数行列とを用いた、ＬＰＮに基づく暗号化方式による前記第２平文の暗号化によって得られた第２暗号文を受信し、
前記第１暗号文と前記第２暗号文とのハミング距離に基づいて、前記第１平文と前記第２平文とが一致するか否かを判断し、
判断結果を出力する、
秘密情報検索方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、秘密情報検索システム、秘密情報検索プログラム、および秘密情報検索方法に関する。
【背景技術】
【０００２】
コンピュータシステムでは、ビッグデータと呼ばれる大量のデータを扱うことができる。例えばコンピュータでビッグデータを解析すれば、様々な知見を得ることが可能である。解析に用いるビッグデータの量が多いほど、そのビッグデータから多様な知識を得ることができ、得られた知識の信頼性も向上する。そこで企業などの組織ごとにビッグデータ用の独自のデータベース（ＤＢ）を構築するのではなく、複数の組織のデータを統合したＤＢを、複数の組織で利用することが考えられる。このような統合したＤＢサービスは、例えばクラウドコンピューティングシステム（以下、「クラウド」と呼ぶ）を用いて実現できる。
【０００３】
複数の組織のデータを統合したＤＢをクラウドで管理する場合において、データ提供元の組織は、提供したデータの利用を、データ提供元の組織が許可した他の組織のみに制限したい場合がある。またデータ提供元の組織およびデータを利用する組織は、提供されるデータの内容やＤＢ内のデータへの検索内容を、クラウドの管理者にも知られたくない場合もある。これらの場合、ビッグデータを管理するクラウドは、例えば各組織から暗号化されたデータの提供を受け、暗号データをＤＢに格納する。そしてクラウドは、暗号データのままデータの同一性を判定できる照合技術を用いて、データ提供元の組織から渡された鍵で暗号化された検索要求に応じてＤＢ内のデータ検索を行う。これにより、データ提供元の組織は、鍵を渡した組織に対してのみ、提供したデータの利用を許可することができる。またクラウドでは、提供されたデータと検索要求とが暗号化されたままであるため、クラウドの管理者にデータが内容を知られることも抑止できる。
【０００４】
このようなデータの秘匿化技術として、複雑な演算処理が不要な、ＬＰＮ（Learning Parity with Noise）に基づく暗号化方式が知られている。ＬＰＮに基づく暗号化方式とは、ＬＰＮ問題を解く計算の困難性を暗号の安全性の根拠とする暗号化方式である。ＬＰＮ問題は、誤差付きの線形方程式を解けるかどうかという問題である。複数の組織のデータを統合したＤＢ内のデータの暗号化に、ＬＰＮに基づく暗号化方式を採用することで、ＤＢに格納するデータの高速な秘匿化と高速な照合処理を実現できる。しかもＤＢ内のデータの暗号化および照合に、ＬＰＮに基づく暗号化方式の１つである「Ｒｅｌａｔｉｏｎａｌ  Ｈａｓｈ」（関係暗号化方式）と呼ばれる暗号化方式を用いれば、検索者が有する秘密鍵を用いても、検索対象のデータを復号できないようにすることができる。
【０００５】
データを暗号のまま処理する技術としては、例えばセキュリティが担保されていない場所でデータを復号しないで処理することを可能にする秘匿データ処理システムが提案されている。また、データベースサーバにおいて、複数の要素をそれぞれ、暗号化前の演算と暗号化後の演算との準同型を保つ暗号化により暗号化した暗号化ベクトルデータを格納する計算システムも提案されている。
【０００６】
ＬＰＮに基づく暗号化方式を用いた技術としては、例えば、行列の形態で表すことのできる秘密鍵を使用する、平文メッセージの要素の確率的対称暗号化のための方法が提案されている。また関係線形暗号化方式を用いる生体認証の方法も提案されている。
【０００７】
なおＬＰＮ問題を解く計算の困難性の詳細は、論文で発表されている。また「Ｒｅｌａｔｉｏｎａｌ  Ｈａｓｈ」の詳細も、論文で発表されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】国際公開第２０１６／１４８１４７号
【特許文献２】国際公開第２０１６／１２９３９０号
【特許文献３】特表２０１１−５０９４３３号公報
【特許文献４】特開２０１７−２０１７８３号公報
【非特許文献】
【０００９】
【非特許文献１】上中谷 健、國廣 昇、高安 敦、「低ノイズＬＰＮ問題におけるＢＫＷアルゴリズムの解析」、コンピュータセキュリティシンポジウム２０１５論文集、２０１５年１０月１４日、2015 No.3，pp.1027-1034
【非特許文献２】Avradip Mandal, Arnab Roy, "Relational Hash: Probabilistic Hash for Verifying Relations, Secure against Forgery and More" Advances in Cryptology -- CRYPTO 2015, August 2015, volume 9215 of LNCS, pp 518-537
【発明の概要】
【発明が解決しようとする課題】
【００１０】
上記のようにＬＰＮに基づく暗号化方式を用いたデータの秘匿化は、高速な秘匿化と検索処理が可能であり、ビッグデータのような大規模なＤＢ内のデータの秘匿化に有効である。しかし、ＬＰＮに基づく暗号化方式でデータを秘匿化する場合、平文の対象は種類が多く偏りが少ないことが安全性を担保する上での条件となる。そのため、ＤＢに格納された暗号データの暗号化前の平文集合の種類が少なかったり、偏りが大きかったりする状況が発生し、暗号文が解読可能となり、暗号文の秘匿性が低下する。 
【００１１】
１つの側面では、本件は、暗号鍵を有していない第三者による複数の暗号データを用いた暗号データの解読を困難にすることを目的とする。
【課題を解決するための手段】
【００１２】
１つの案では、データ提供装置とデータ利用装置とデータ管理装置とを有する秘密情報検索システムが提供される。
データ提供装置は、検索対象の第１平文によって一意に決まり、かつ第１平文以外のいずれの平文のノイズベクトルとも異なる第１ノイズベクトルと、１の確率が所定値のバイナリの係数行列とを用いて、ＬＰＮに基づく暗号化方式により第１平文を暗号化し、暗号化によって得られた第１暗号文を送信する。データ利用装置は、検索クエリである第２平文によって一意に決まり、かつ第２平文以外のいずれの平文のノイズベクトルとも異なる第２ノイズベクトルと、係数行列とを用いて、ＬＰＮに基づく暗号化方式により第２平文を暗号化し、暗号化によって得られた第２暗号文を送信する。データ管理装置は、データ提供装置から第１暗号文を受信し、受信した第１暗号文を記憶部に格納し、データ利用装置から第２暗号文を受信し、第１暗号文と第２暗号文とのハミング距離に基づいて、第１平文と第２平文とが一致するか否かを判断し、判断結果をデータ利用装置に送信する。
【発明の効果】
【００１３】
１態様によれば、暗号鍵を有していない第三者による複数の暗号データを用いた暗号データの解析を困難にすることができる。
【図面の簡単な説明】
【００１４】
【図１】第１の実施の形態に係る秘密情報検索システムを説明する図である。
【図２】秘匿化検索システムの一例を示す図である。
【図３】データ管理サーバのハードウェアの一例を示す図である。
【図４】秘匿化検索システムの機能を示すブロック図である。
【図５】平文の患者データのＤＢの一例を示す図である。
【図６】辞書データの一例を示す図である。
【図７】秘匿化ＤＢの一例を示す図である。
【図８】ＬＰＮに基づく暗号化方式を説明する図である。
【図９】係数行列「Ａ」を攻撃者が知っている場合の攻撃方法の一例を示す図である。
【図１０】複数の属性を結合した場合の暗号化の比較例を示す図である。
【図１１】患者データの登録および利用処理の概要を示す図である。
【図１２】患者データ登録処理の手順の一例を示すシーケンス図である。
【図１３】データ利用環境の構築手順の一例を示すシーケンス図である。
【図１４】検索処理の手順の一例を示すシーケンス図である。
【図１５】照合処理の詳細を示すフローチャートである。
【図１６】参照権の制御を伴う患者データの登録および利用手順の一例を示す図である。
【図１７】参照権の制御を伴う暗号化方式の一例を示す図である。
【図１８】患者データ登録処理の手順の一例を示すシーケンス図である。
【図１９】データ利用環境の構築手順の一例を示すシーケンス図である。
【図２０】検索処理の手順の一例を示すシーケンス図である。
【図２１】登録者と検索者とが複数存在する場合の患者データの登録および利用手順の一例を示す図である。
【図２２】平文ベクトル生成処理の第１の例を示す図である。
【図２３】平文ベクトル生成処理の第２の例を示す図である。
【発明を実施するための形態】
【００１５】
以下、本実施の形態について図面を参照して説明する。なお各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。
〔第１の実施の形態〕
まず第１の実施の形態について説明する。
【００１６】
図１は、第１の実施の形態に係る秘密情報検索システムを説明する図である。図１には、データ管理装置１、データ提供装置２、およびデータ利用装置３を有する秘密情報検索システムが示されている。データ管理装置１は、例えば秘匿性の高い暗号文を復号せずに検索するための秘密情報検索方法の処理手順が記述された秘密情報検索プログラムを実行することにより、秘密情報検索方法による検索を実施することができる。
【００１７】
データ提供装置２は、検索対象となる秘密情報を提供する装置である。データ提供装置２は、例えば秘密情報を提供するための処理手順が記述されたプログラムを実行することにより、秘密情報を提供することができる。
【００１８】
データ利用装置３は、秘密情報を利用する装置である。データ利用装置３は、例えば秘密情報を利用するための処理手順が記述されたプログラムを実行することにより、秘密情報を利用することができる。
【００１９】
データ管理装置１は、秘密情報検索方法を実現するために、記憶部１ａと処理部１ｂとを有する。記憶部１ａは、例えばデータ管理装置１が有するメモリ、またはストレージ装置である。処理部１ｂは、例えばデータ管理装置１が有するプロセッサ、または演算回路である。データ提供装置２とデータ利用装置３もデータ管理装置１と同様に、記憶部と処理部とを有する。
【００２０】
以下、秘密情報の提供と利用の手順について説明する。
データ提供装置２は、秘密情報であり、検索対象となる第１平文を有している。データ提供装置２は、第１平文をデータ利用装置３で利用可能とするために、第１平文を暗号化してデータ管理装置１に登録する。例えばデータ提供装置２は、「１」の確率が所定値のバイナリの係数行列「Ａ」を生成する（ステップＳ１）。
【００２１】
次にデータ提供装置２は、第１平文を暗号化し、第１暗号文「ｈ1」を生成する（ステップＳ２）。例えばデータ提供装置２は、第１平文によって一意に決まり、かつ第１平文以外のいずれの平文のノイズベクトルとも異なる第１ノイズベクトル「ｅ1」を生成する。データ提供装置２は、少なくとも第１平文に基づいて第１ノイズベクトル「ｅ1」を生成する。なおデータ提供装置２は、係数行列「Ａ」と第１平文とに基づいて第１ノイズベクトル「ｅ1」を生成してもよい。
【００２２】
そしてデータ提供装置２は、生成した第１ノイズベクトル「ｅ1」と係数行列「Ａ」とを用いて、ＬＰＮに基づく暗号化方式により、第１平文を暗号化する。暗号化の際には、データ提供装置２は、例えば、要素が１となる確率が１／２もしくは約１／２となる第１平文ベクトル「ｘ」に第１平文を変換する。この際、データ提供装置２は、第１平文以外のいずれの平文の平文ベクトルとも所定の閾値以上のハミング距離を有する第１平文ベクトル「ｘ」に第１平文を変換してもよい。さらに、データ提供装置２は、すべての平文の平文ベクトル間のハミング距離が最大化されるように、各平文の平文ベクトルを生成してもよい。
【００２３】
第１平文ベクトル「ｘ」に第１平文を変換した場合、データ提供装置２は、第１平文ベクトル「ｘ」を暗号化することで、第１暗号文「ｈ1」を生成する。例えばデータ提供装置２は、係数行列「Ａ」の各行と平文ベクトル「ｘ」のモジュロ２（ｍｏｄ２）上の内積を求め、その各行に対応する内積を要素とするベクトルと第１ノイズベクトル「ｅ1」との排他的論理和を、第１暗号文「ｈ1」とする。なお、２つのベクトル間の排他的論理和の計算では、２つのベクトルの対応する要素同士の排他的論理和の値を要素とするベクトルが得られる。
【００２４】
そしてデータ提供装置２は、暗号化によって得られた第１暗号文「ｈ1」を、データ管理装置１に送信する（ステップＳ３）。データ管理装置１は、データ提供装置が送信した第１暗号文「ｈ1」を受信し、受信した第１暗号文「ｈ1」を記憶部１ａに格納する（ステップＳ４）。
【００２５】
その後、データ提供装置２は、係数行列「Ａ」を、データ管理装置１を経由しない伝送路でデータ利用装置３に送信する（ステップＳ５）。例えばデータ利用装置３は、データ管理装置１に係数行列「Ａ」の取得要求を送信する。データ管理装置１は、係数行列「Ａ」の取得要求を受信すると、データ管理装置１を経由しない通信経路による、取得要求の送信元装置であるデータ利用装置３への係数行列の送信を、第１暗号文「ｈ1」の送信元装置であるデータ提供装置２に依頼する。データ提供装置２は、データ管理装置１からの依頼に応じて、係数行列「Ａ」のデータ利用装置３への送信を行う。データ利用装置３は、データ提供装置２が送信した係数行列「Ａ」を受信する（ステップＳ６）。
【００２６】
データ利用装置３は、検索クエリとして第２平文が入力されると、第２平文を暗号化し、第２暗号文「ｈ2」を生成する（ステップＳ７）。例えばデータ利用装置３は、第２平文によって一意に決まり、かつ第２平文以外のいずれの平文のノイズベクトルとも異なる第２ノイズベクトル「ｅ2」を生成する。例えばデータ利用装置３は、係数行列「Ａ」と第２平文とに基づいて第２ノイズベクトル「ｅ2」を生成することができる。
【００２７】
そしてデータ利用装置３は、生成した第２ノイズベクトル「ｅ2」と係数行列「Ａ」とを用いて、ＬＰＮに基づく暗号化方式により第２平文を暗号化する。暗号化の際には、データ利用装置３は、例えば要素が１となる確率が１／２もしくは約１／２となる第２平文ベクトル「ｙ」に第２平文を変換する。この際、データ利用装置３は、第２平文以外のいずれの平文の平文ベクトルとも所定の閾値以上のハミング距離を有する第２平文ベクトル「ｙ」に第２平文を変換してもよい。さらに、データ利用装置３は、すべての平文の平文ベクトル間のハミング距離が最大化されるように、各平文の平文ベクトルを生成してもよい。
【００２８】
第２平文ベクトル「ｙ」に第２平文を変換した場合、データ利用装置３は、第２平文ベクトル「ｙ」を暗号化することで、第２暗号文「ｈ2」を生成する。例えばデータ利用装置３は、係数行列「Ａ」の各行と平文ベクトル「ｙ」のモジュロ２（ｍｏｄ２）上の内積を求め、その内積と第１ノイズベクトル「ｅ2」との排他的論理和を、第２暗号文「ｈ2」とする。
【００２９】
データ利用装置３は、暗号化によって得られた第２暗号文「ｈ2」を、データ管理装置１に送信する（ステップＳ８）。データ管理装置１は、データ利用装置３が送信した第２暗号文「ｈ2」を受信し、第１暗号文「ｈ1」と第２暗号文「ｈ2」とを照合する（ステップＳ９）。例えばデータ管理装置１の処理部１ｂが、第１暗号文「ｈ1」と第２暗号文「ｈ2」とのハミング距離に基づいて、第１平文と第２平文とが一致するか否かを判断する。例えば処理部１ｂは、第１暗号文「ｈ1」と第２暗号文「ｈ2」とのハミング距離が所定の閾値「θ」未満であれば、第１平文と第２平文とが一致すると判断する。また処理部１ｂは、第１暗号文「ｈ1」と第２暗号文「ｈ2」とのハミング距離が所定の閾値「θ」以上であれば、第１平文と第２平文とが不一致であると判断する。そして処理部１ｂは、判断結果をデータ利用装置３に送信する（ステップＳ１０）。
【００３０】
このようにして、暗号化したまま第１平文と第２平文とを照合することができる。しかも、第１平文および第２平文の暗号化において、平文それぞれに一意であり、かつ唯一のノイズベクトルを用いてＬＰＮに基づく暗号化方式で暗号化している。これにより、平文の対象の種類が少ない場合や、各種類に属する平文の量の偏りが大きい場合であっても、秘匿性の高い暗号文を生成することができる。
【００３１】
さらにデータ提供装置２とデータ利用装置３とは、データ管理装置１を介さずに係数行列「Ａ」を共有している。これにより、データ管理装置１の管理者に係数行列「Ａ」を知られずにすむ。第１の実施の形態で適用したＬＰＮに基づく暗号化方式では、係数行列「Ａ」が知られなければ、秘匿化のアルゴリズムやＤＢのフォーマットを知る者に対しても、ＤＢの内容や検索内容の平文の復元を抑止することができる。すなわち、データ管理装置１の管理者が第１暗号文「ｈ1」または第２暗号文「ｈ2」を解読しようとしても、解読することはできない。その結果、攻撃者がデータ管理装置１の管理者として紛れ込んだ場合であっても、第１暗号文「ｈ1」と第２暗号文「ｈ2」とを安全に保つことができる。
【００３２】
なおデータ提供装置２は、係数行列「Ａ」と第１平文とに基づいて生成された第１プレノイズベクトルと、乱数によって生成された第２プレノイズベクトルとに基づいて、第１ノイズベクトル「ｅ1」を生成してもよい。この場合、データ利用装置３は、係数行列「Ａ」と第２平文とに基づいて生成された第３プレノイズベクトルと、乱数によって生成された第４プレノイズベクトルとに基づいて、第２ノイズベクトル「ｅ2」を生成する。乱数によって生成されたプレノイズベクトルを用いることにより、同じ平文でも、暗号化後には異なる暗号文となり、暗号文の安全性が向上する。
【００３３】
データ提供装置２は、係数行列「Ａ」と第１平文と第１平文の属性を示す属性名とに基づいて、第１ノイズベクトルを生成してもよい。例えばデータ提供装置２は、係数行列「Ａ」と第１平文の平文ベクトル「ｘ」と第１平文の属性を示す属性名（平文）に対応する平文ベクトルとに基づいて、第１ノイズベクトルを生成する。この場合、データ利用装置３は、係数行列「Ａ」と第２平文と第２平文の属性を示す属性名とに基づいて、第２ノイズベクトルを生成する。例えばデータ利用装置３は、係数行列「Ａ」と第２平文の平文ベクトル「ｙ」と第２平文の属性を示す属性名（平文）に対応する平文ベクトルとに基づいて、第２ノイズベクトルを生成する。これにより、内容が同じ複数の平文について、属性が異なれば異なる暗号文を生成することができる。各列に同じ暗号文がある場合、各列の平文候補を突き合わせることで推定されやすくなるが、属性の異なる内容が同じ複数の平文それぞれを異なる暗号文とすることで、平文の候補 を突き合わせることによる平文の推定が困難となり、暗号文の安全性が向上する。
【００３４】
データ提供装置２は、第１平文と第１平文の属性を示す属性名との組を暗号化することで、第１暗号文を生成してもよい。例えばデータ提供装置２は、第１平文の平文ベクトル「ｘ」と第１平文の属性を示す属性名（平文）に対応する平文ベクトルとを結合し、結合して得られたベクトルを暗号化する。この場合、データ利用装置３は、第２平文と第２平文の属性を示す属性名との組を暗号化する。例えばデータ利用装置３は、第２平文の平文ベクトル「ｙ」と第２平文の属性を示す属性名（平文）に対応する平文ベクトルとを結合し、結合して得られたベクトルを暗号化する。これにより、内容が同じ複数の平文について、属性が異なれば異なる暗号文を生成することができる。その結果、平文の候補を突き合わせることによる平文の推定が困難となり、暗号文の安全性が向上する。
【００３５】
さらに、データ提供装置２とデータ利用装置３とで関係秘密鍵を共有することで、暗号文の安全性をさらに高めることもできる。この場合、秘密情報検索システムの各装置は、以下のような処理を行う。
【００３６】
データ提供装置２は、関係秘密鍵と第１秘密鍵とを生成する。次にデータ提供装置２は、関係秘密鍵と第１秘密鍵とに基づいて、第１照合鍵を生成する。データ提供装置２は、生成した第１照合鍵をデータ管理装置１に送信する。データ管理装置１は、第１照合鍵を受信し、受信した第１照合鍵を記憶部１ａに格納する。
【００３７】
またデータ提供装置２は、生成した関係秘密鍵をデータ利用装置３に送信する。例えばデータ提供装置２は、係数行列「Ａ」と共に関係秘密鍵を送信する。データ利用装置３は、関係秘密鍵を受信する。
【００３８】
データ利用装置３は、第２秘密鍵を生成し、関係秘密鍵と第２秘密鍵とに基づいて、第２照合鍵を生成する。データ利用装置３は、生成した第２照合鍵をデータ管理装置１に送信する。データ管理装置１は、受信した第２照合鍵を記憶部１ａに格納する。
【００３９】
その後、データ提供装置２は、第１平文の暗号化の際に、例えば第１ノイズベクトル「ｅ1」、係数行列「Ａ」、および第１秘密鍵を用いて第１平文を暗号化し、第１暗号文「ｈ1」を生成する。また、データ利用装置３は、第２平文の暗号化の際に、例えば第２ノイズベクトル「ｅ2」、係数行列「Ａ」、および第２秘密鍵を用いて第２平文を暗号化し、第２暗号文「ｈ2」を生成する。このようにして生成された第１暗号文「ｈ1」と第２暗号文「ｈ2」とを受信したデータ管理装置１は、照合処理では、第１照合鍵と第２照合鍵とを用いて、第１暗号文「ｈ1」と第２暗号文「ｈ2」とを照合する。例えばデータ管理装置１は、第１暗号文「ｈ1」と第２暗号文「ｈ2」とから、第１照合鍵と第２照合鍵とを用いて第１秘密鍵と第２秘密鍵の影響を除去して、第１暗号文「ｈ1」と第２暗号文「ｈ2」とのハミング距離を計算する。
【００４０】
このように、データ提供装置２とデータ利用装置３それぞれの照合鍵をデータ管理装置１で保持、管理することで、予め第２照合鍵を登録したデータ利用装置３に対してのみ、登録されたデータの利用を許可することができる。しかも、第２照合鍵の生成には、データ利用装置３の秘密鍵が利用されているため、データ利用装置３が複数ある場合、各データ利用装置３が生成する第２照合鍵は、それぞれ異なる照合鍵となる。そして、第２暗号文「ｈ2」の生成にもデータ利用装置３の秘密鍵が利用されているため、データ利用装置３が複数ある場合、各データ利用装置３が生成する第２暗号文「ｈ2」は、同じ内容の第２平文を暗号化したものであっても、それぞれ異なる第２暗号文「ｈ2」となる。これにより、１つのデータ利用装置３を運用する企業が、他のデータ利用装置３が送信した第２暗号文「ｈ2」を盗聴しても、第２暗号文「ｈ2」の解読が困難となる。
【００４１】
なお、図１の例では、データ提供装置２は、係数行列「Ａ」を、データ管理装置を経由しない伝送路でデータ利用装置３に送信しているが、係数行列「Ａ」を暗号化して送信すれば、データ管理装置を経由する伝送路で送信することも可能である。この場合、例えばは、データ管理装置１は、データ利用装置３から係数行列「Ａ」の取得要求を受信すると、取得要求の送信元装置であるデータ利用装置３への、暗号化した係数行列の送信を、第１暗号文「ｈ1」の送信元装置であるデータ提供装置２に依頼する。データ提供装置２は、データ管理装置１からの依頼に応じて、係数行列「Ａ」を、データ利用装置３で復号可能な暗号化方式で暗号化し、暗号化された係数行列「Ａ」をデータ利用装置３へ送信する。データ利用装置３は、データ提供装置２が送信した係数行列「Ａ」を受信すると、その係数行列「Ａ」を復号する。
【００４２】
〔第２の実施の形態〕
次に第２の実施の形態について説明する。第２の実施の形態は、多数の医療機関が有する患者データを、患者データ収集活用基盤を用いて有効活用するものである。例えば患者データ収集活用基盤により、複数の病院のデータを統合してビッグデータ化し、ビッグデータを複数の製薬会社で活用できるようにする。これにより、製薬会社は、臨床試験のための調査（適合患者の人数など）を容易に把握できるようになる。
【００４３】
患者データ収集活用基盤は、ＩＣＴ（Information and Communications Technology）企業が管理するクラウドを用いて実現するのが効率的である。クラウドを用いることで、病院や製薬会社からのビッグデータへのアクセスが容易となる。しかしながら、患者データは個人情報であり、クラウドの管理者に対しても秘匿しておくのが適切である。また製薬会社による検索の内容は、現在開発中の薬やターゲットの疾病等、企業戦略に直結する内容が多いため、検索内容についても秘匿しておくことにより、データ活用が安心して利用することができる。そこで、患者データ収集活用基盤を実現するクラウドは、例えばＬＰＮに基づく暗号化方式を用いて、暗号化された患者データをＤＢで管理すると共に、暗号化された検索クエリを用いて、暗号文のままでデータ検索を行う。これにより、クラウドの管理者に対しても、患者データを秘匿しておくことができる。
【００４４】
なお、ＬＰＮに基づく暗号化方式で秘匿化する場合、平文の対象の種類が多く、各種類に属する平文の量の偏りが少ないことが安全性を担保する上での条件となる。この条件は、情報理論上、情報が「高ｍｉｎエントロピーを有する」ことと言い換えることができる。
【００４５】
ここで、複数の組織（例えば病院）のデータを同じ仕組みで使用する場合、ＤＢのフォーマットや格納する属性名と値は、共通の仕様として公開される。しかもクラウドの管理者は、秘匿化のアルゴリズムを熟知している。すると、クラウドの管理者の中に悪意を有する者が存在した場合、患者データを暗号文のまま管理するだけでは不十分な場合があり得る。
【００４６】
そこで第２の実施の形態では、悪意を持った者がクラウドを管理するＩＣＴ企業内に紛れ込んでいても、ＤＢの内容や検索内容の平文を秘匿可能な秘匿化検索システムを提供する。
【００４７】
図２は、秘匿化検索システムの一例を示す図である。第２の実施の形態では、患者データ収集活用基盤３１がクラウドによって構築されている。患者データ収集活用基盤３１はデータ管理サーバ１００を有している。データ管理サーバ１００は、患者データを暗号文のままで管理するコンピュータである。データ管理サーバ１００は、ネットワーク２０を介して、病院３２，３３のデータ提供サーバ２００，３００と製薬企業３４，３５の端末装置４００，５００に接続されている。
【００４８】
病院３２のデータ提供サーバ２００は、病院３２で治療した患者の電子カルテなどの患者データを蓄積し、その患者データを暗号化してデータ管理サーバ１００に提供するコンピュータである。同様に、病院３３のデータ提供サーバ３００は、病院３３で治療した患者の電子カルテなどの患者データを蓄積し、その患者データを暗号化してデータ管理サーバ１００に提供する。
【００４９】
製薬企業３４の端末装置４００は、データ管理サーバ１００で管理されている患者データを検索するために、製薬企業３４の社員が使用するコンピュータである。製薬企業３５の端末装置５００は、データ管理サーバ１００で管理されている患者データを検索するために、製薬企業３５の社員が使用するコンピュータである。
【００５０】
このような秘匿化検索システムは、例えば医療情報を活用した製薬治験の効率化に有用である。例えば、製薬企業３４，３５は、多数の患者に有効なブロックバスタ薬開発とは別に、少数の患者の治療用の個別化医療薬の開発も行っている。個別化医療薬の開発では、対象となる疾患を有する患者も少数である。そのため、個別化医療薬の治験を計画する場合、どの病院にどの程度、被験者候補となり得る該当疾患の患者が居るか当りを付け、計画が成り立つかを判断することとなる。これを人手で行うには手間がかかりすぎる。そこで、患者データ収集活用基盤３１で多数の病院３２，３３に分散する患者の電子カルテから抽出した患者データを集中管理することで、目的の疾患を有する患者や治験計画の条件を満たす患者を容易に探し出すことが可能となる。
【００５１】
図３は、データ管理サーバのハードウェアの一例を示す図である。データ管理サーバ１００は、プロセッサ１０１によって装置全体が制御されている。プロセッサ１０１には、バス１０９を介してメモリ１０２と複数の周辺機器が接続されている。プロセッサ１０１は、マルチプロセッサであってもよい。プロセッサ１０１は、例えばＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、またはＤＳＰ（Digital Signal Processor）である。プロセッサ１０１がプログラムを実行することで実現する機能の少なくとも一部を、ＡＳＩＣ（Application Specific Integrated Circuit）、ＰＬＤ（Programmable Logic Device）などの電子回路で実現してもよい。
【００５２】
メモリ１０２は、データ管理サーバ１００の主記憶装置として使用される。メモリ１０２には、プロセッサ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、メモリ１０２には、プロセッサ１０１による処理に利用する各種データが格納される。メモリ１０２としては、例えばＲＡＭ（Random Access Memory）などの揮発性の半導体記憶装置が使用される。
【００５３】
バス１０９に接続されている周辺機器としては、ストレージ装置１０３、グラフィック処理装置１０４、入力インタフェース１０５、光学ドライブ装置１０６、機器接続インタフェース１０７およびネットワークインタフェース１０８がある。
【００５４】
ストレージ装置１０３は、内蔵した記録媒体に対して、電気的または磁気的にデータの書き込みおよび読み出しを行う。ストレージ装置１０３は、コンピュータの補助記憶装置として使用される。ストレージ装置１０３には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。なお、ストレージ装置１０３としては、例えばＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）を使用することができる。
【００５５】
グラフィック処理装置１０４には、モニタ２１が接続されている。グラフィック処理装置１０４は、プロセッサ１０１からの命令に従って、画像をモニタ２１の画面に表示させる。モニタ２１としては、有機ＥＬ（Electro Luminescence）を用いた表示装置や液晶表示装置などがある。
【００５６】
入力インタフェース１０５には、キーボード２２とマウス２３とが接続されている。入力インタフェース１０５は、キーボード２２やマウス２３から送られてくる信号をプロセッサ１０１に送信する。なお、マウス２３は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【００５７】
光学ドライブ装置１０６は、レーザ光などを利用して、光ディスク２４に記録されたデータの読み取りを行う。光ディスク２４は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク２４には、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。
【００５８】
機器接続インタフェース１０７は、データ管理サーバ１００に周辺機器を接続するための通信インタフェースである。例えば機器接続インタフェース１０７には、メモリ装置２５やメモリリーダライタ２６を接続することができる。メモリ装置２５は、機器接続インタフェース１０７との通信機能を搭載した記録媒体である。メモリリーダライタ２６は、メモリカード２７へのデータの書き込み、またはメモリカード２７からのデータの読み出しを行う装置である。メモリカード２７は、カード型の記録媒体である。
【００５９】
ネットワークインタフェース１０８は、ネットワーク２０に接続されている。ネットワークインタフェース１０８は、ネットワーク２０を介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。
【００６０】
データ管理サーバ１００は、以上のようなハードウェア構成によって、第２の実施の形態の処理機能を実現することができる。
なお、データ提供サーバ２００，３００および端末装置４００，５００も、データ管理サーバ１００と同様のハードウェアにより実現することができる。さらに図１に示したデータ管理装置１、データ提供装置２、およびデータ利用装置３も、データ管理サーバ１００と同様のハードウェアにより実現することができる。
【００６１】
データ管理サーバ１００、データ提供サーバ２００，３００、および端末装置４００，５００は、例えばコンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第２の実施の形態の処理機能を実現する。データ管理サーバ１００、データ提供サーバ２００，３００および端末装置４００，５００それぞれに実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。例えば、データ管理サーバ１００に実行させるプログラムをストレージ装置１０３に格納しておくことができる。プロセッサ１０１は、ストレージ装置１０３内のプログラムの少なくとも一部をメモリ１０２にロードし、プログラムを実行する。またデータ管理サーバ１００に実行させるプログラムを、光ディスク２４、メモリ装置２５、メモリカード２７などの可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、例えばプロセッサ１０１からの制御により、ストレージ装置１０３にインストールされた後、実行可能となる。またプロセッサ１０１が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
【００６２】
次に、秘匿化検索システムの各装置の機能について説明する。
図４は、秘匿化検索システムの機能を示すブロック図である。データ管理サーバ１００は、ソフトウェア記憶部１１０、秘匿化ＤＢ１２０、ソフトウェア提供部１３０、データ登録部１４０、隔離鍵提供依頼部１５０、および検索部１６０を有する。
【００６３】
ソフトウェア記憶部１１０は、データ提供ソフトウェア１１１、データ利用ソフトウェア１１２、および辞書データ１１３を記憶する。データ提供ソフトウェア１１１は、データ提供サーバ２００，３００が患者データを提供するために使用するソフトウェアである。データ利用ソフトウェアは、端末装置４００，５００が患者データを検索するために使用するソフトウェアである。辞書データ１１３は、電子カルテに用いられる単語や数値に対応する平文ベクトルを示す情報である。
【００６４】
秘匿化ＤＢ１２０は、データ提供サーバ２００，３００から収集した、暗号文の患者データを、暗号文のまま管理するＤＢである。
ソフトウェア提供部１３０は、データ提供サーバ２００，３００または端末装置４００，５００に、患者データ収集活用基盤３１を利用するためのソフトウェアを提供する。例えばソフトウェア提供部１３０は、データ提供サーバ２００，３００にデータ提供ソフトウェア１１１と辞書データ１１３とを送信する。またソフトウェア提供部１３０は、端末装置４００，５００にデータ利用ソフトウェア１１２と辞書データ１１３とを送信する。
【００６５】
データ登録部１４０は、データ提供サーバ２００，３００からのデータ登録要求に応じて、暗号文の患者データを秘匿化ＤＢ１２０に登録する。
隔離鍵提供依頼部１５０は、データ利用ソフトウェアの導入が完了した端末装置４００，５００からの隔離鍵取得要求を受信すると、端末装置４００，５００への隔離鍵提供依頼を、データ提供サーバ２００，３００に送信する。
【００６６】
検索部１６０は、端末装置４００，５００からの暗号化された検索クエリを含むデータ検索要求に応じて、秘匿化ＤＢ１２０に登録された患者データを検索する。この際、検索部１６０は、患者データと検索クエリとを暗号文のまま照合し、検索クエリに合致する患者データに示される患者ＩＤを、秘匿化ＤＢ１２０から抽出する。そして検索部１６０は、抽出した患者ＩＤを、検索要求の送信元の端末装置４００，５００に送信する。
【００６７】
データ提供サーバ２００は、ＤＢ２１０、データ提供機能導入部２２０、およびデータ提供部２３０を有する。ＤＢ２１０は、患者データを平文で格納するＤＢである。
データ提供機能導入部２２０は、データ管理サーバ１００からデータ提供ソフトウェア１１１と辞書データ１１３とを取得し、データ提供ソフトウェア１１１をデータ提供サーバ２００にインストールする。これにより、データ提供サーバ２００内にデータ提供部２３０が構築される。またデータ提供機能導入部２２０は、データ提供部２３０内に設けられた辞書記憶部２３１に、データ管理サーバ１００から取得した辞書データ１１３を格納する。
【００６８】
データ提供部２３０は、ＤＢ２１０内の患者データを暗号化してデータ管理サーバ１００に登録すると共に、登録した患者データの利用を許可する製薬企業の端末装置に、患者データの検索を可能とするための隔離鍵を提供する。これらの機能を実現するために、データ提供部２３０は、辞書記憶部２３１、隔離鍵記憶部２３２、隔離鍵生成部２３３、データ登録要求部２３４、および隔離鍵提供部２３５を有する。
【００６９】
辞書記憶部２３１は、患者の電子カルテに記載されている単語の平文ベクトルを示す辞書データを記憶する。
隔離鍵記憶部２３２は、データ管理サーバ１００に登録する患者データの暗号化に使用する隔離鍵を記憶する。隔離鍵は、データ管理サーバ１００からアクセスできないように管理される。
【００７０】
隔離鍵生成部２３３は、隔離鍵を生成する。隔離鍵生成部２３３は、生成した隔離鍵を隔離鍵記憶部２３２に格納する。
データ登録要求部２３４は、データ管理サーバ１００への登録対象の患者データの暗号文を含むデータ登録要求を、データ管理サーバ１００に送信する。例えばデータ登録要求部２３４は、まず登録対象の患者データをＤＢ２１０から取得し、秘匿化ＤＢ１２０のフォーマットに合わせて、患者データを加工する。例えばデータ登録要求部２３４は、隔離鍵を用いて、秘匿化ＤＢ１２０に登録する属性ごとに、患者データに含まれる値を暗号化する。そしてデータ登録要求部２３４は、属性の値ごとに暗号化された、暗号文の患者データを含むデータ登録要求を、データ管理サーバ１００に送信する。
【００７１】
隔離鍵提供部２３５は、データ管理サーバ１００からの隔離鍵提供依頼に応じて、登録した患者データの利用を許可する製薬企業の端末装置へ、隔離鍵を送信する。なお隔離鍵提供部２３５は、隔離鍵を、データ管理サーバ１００を経由せずに端末装置に送信する。
【００７２】
以上、データ提供サーバ２００が有する機能を説明したが、データ提供サーバ３００もデータ提供サーバ２００と同様の機能を有する。
端末装置４００は、データ利用機能導入部４１０とデータ利用部４２０とを有する。
【００７３】
データ利用機能導入部４１０は、データ管理サーバ１００からデータ利用ソフトウェア１１２と辞書データ１１３とを取得し、データ利用ソフトウェア１１２を端末装置４００にインストールする。これにより、端末装置４００内にデータ利用部４２０が構築される。またデータ利用機能導入部４１０は、データ利用部４２０内に設けられた辞書記憶部４２１に、データ管理サーバ１００から取得した辞書データ１１３を格納する。
【００７４】
データ利用部４２０は、データ管理サーバ１００に暗号文の状態で管理されている患者データを利用する環境を、製薬企業３４における患者データの利用者に提供する。例えばデータ利用部４２０は、データ管理サーバ１００への検索要求の送信、および検索結果の表示を行う。これらの機能を実現するために、データ利用部４２０は、辞書記憶部４２１、隔離鍵記憶部４２２、隔離鍵取得部４２３、および検索要求部４２４を有する。
【００７５】
辞書記憶部４２１は、患者の電子カルテに記載されている単語の平文ベクトルを示す辞書データを記憶する。
隔離鍵記憶部４２２は、検索要求に含める検索クエリの暗号化に使用する隔離鍵を記憶する。隔離鍵は、データ管理サーバ１００からアクセスできないように管理される。
【００７６】
隔離鍵取得部４２３は、データ提供サーバ２００，３００から提供される隔離鍵を取得する。例えば隔離鍵取得部４２３は、データ管理サーバ１００に、隔離鍵取得要求を送信する。するとデータ管理サーバ１００の隔離鍵提供依頼部１５０により、データ提供サーバ２００，３００に隔離鍵提供依頼が送信される。隔離鍵提供依頼に応じて、例えばデータ提供サーバ２００の隔離鍵提供部２３５が、隔離鍵を端末装置４００に送信する。そして隔離鍵取得部４２３は、端末装置４００から送信された隔離鍵を取得する。隔離鍵取得部４２３は、取得した隔離鍵を、隔離鍵記憶部４２２に格納する。
【００７７】
検索要求部４２４は、患者データの利用者が入力した検索クエリを取得し、取得した検索クエリを、辞書データを用いて平文ベクトルにコード化する。次に検索要求部４２４は、コード化された検索クエリを、隔離鍵を用いて暗号化し、暗号文の検索 クエリ を含む検索要求をデータ管理サーバ１００に送信する。検索要求部４２４は、データ管理サーバ１００から検索結果を受信すると、検索結果の内容（例えば検索クエリに合致した患者データの患者ＩＤや合致した患者数）を表示する。
【００７８】
図４に示した機能により、データ管理サーバ１００の管理者に対しても患者データの内容を秘匿したまま、データ管理サーバ１００において患者データを管理すると共に、製薬企業３４，３５による検索内容を秘匿した上での患者データの利用を可能とすることができる。なお、図４に示した各要素の機能は、例えば、その要素に対応するプログラムモジュールをコンピュータに実行させることで実現することができる。
【００７９】
次に、データ提供サーバ２００，３００が有する平文の患者データのＤＢについて説明する。
図５は、平文の患者データのＤＢの一例を示す図である。ＤＢ２１０には、例えば患者ごとのレコードが、行番号に対応付けて登録されている。各レコードには、属性名で示されたフィールドに、その属性名に対応する属性の値が設定されている。図５の例では、属性名として「患者ＩＤ」、「性別」、「身長」などがある。属性名「患者ＩＤ」のフィールドには、患者の識別子（患者ＩＤ）が設定される。属性名「性別」のフィールドには、患者の性別が設定される。属性名「身長」のフィールドには、患者の身長が設定される。データ提供サーバ２００のＤＢ２１０に登録されている各レコード内の値は、例えば平文の文字コードである。
【００８０】
データ登録要求部２３４は、患者のレコードをデータ管理サーバ１００に登録する場合、そのレコードに設定された値（平文）を平文ベクトルに変換する。属性の平文の値に対応する平文ベクトルは、データ管理サーバ１００から配布される辞書データ１１３に示されている。
【００８１】
図６は、辞書データの一例を示す図である。図６に示すように、辞書データ１１３には、平文の値に対応付けて、対応する平文に一意の平文ベクトルが設定されている。このような辞書データ１１３が、データ提供サーバ２００，３００と端末装置４００，５００とに配布される。これにより、データ提供サーバ２００，３００と端末装置４００，５００とは、それぞれ平文から平文ベクトルへの変換が可能となる。
【００８２】
そして患者のレコードに含まれる値（平文）は、データ管理サーバ１００に登録する際に平文ベクトルに変換され、さらに暗号化される。その結果、データ管理サーバ１００内の秘匿化ＤＢ１２０には、暗号文が設定される。なおデータ提供サーバ２００，３００は、患者データのうち、患者ＩＤについては暗号化せずに、平文のまま秘匿化ＤＢ１２０に登録してもよい。
【００８３】
なお平文ベクトルは、 １と０の割合が確率的に約１／２なっている。また各平文ベクトル間のハミング距離は、例えば閾値以上となっている。データ管理サーバ１００が各平文に対応する平文ベクトルを定義する際に、例えば各平文ベクトル間のハミング距離が最大化されるように、平文ベクトルの要素の値を決定してもよい。例えばデータ管理サーバ１００は、多数生成したベクトルのうち、他のベクトルとのハミング距離が小さい方から所定数を除外した残りのベクトルを、各平文の平文ベクトルとして割り当ててもよい。
【００８４】
図７は、秘匿化ＤＢの一例を示す図である。秘匿化ＤＢ１２０には、例えば患者ごとのレコードが、行番号に対応付けて登録されている。各レコードには、属性名で示されたフィールドに、その属性名に対応する属性の値が設定されている。図７の例では、属性名「患者ＩＤ」以外の属性名は暗号化されており、秘匿化ＤＢ１２０には暗号文が設定されている。また各レコードに設定された値も、属性名「患者ＩＤ」の値のみ平文であり、他の値は暗号文である。
【００８５】
次に、秘匿化検索システムで用いる暗号化方式について説明する。秘匿化検索システムでは、ＬＰＮに基づく暗号化方式の１つである。
秘匿化検索システムでは、データ管理サーバ１００は、暗号文のまま患者データと検索クエリとを照合する。このような照合が可能な暗号化技術として、例えばＬＰＮに基づく暗号化方式がある。ＬＰＮに基づく暗号化方式は、ＬＰＮ問題を解く困難性を、暗号の安全性の根拠としている。ＬＰＮ問題は、バイナリの連立一次方程式に少量でもノイズが加えられると、その連立一次方程式を解くのが困難になるというものである。ＬＰＮ問題を解くことの困難性は、前述の非特許文献１に詳しい。
【００８６】
図８は、ＬＰＮに基づく暗号化方式を説明する図である。ＬＰＮに基づく暗号化方式の基本形は、以下の通りである。
暗号化式：ｈ＝Ａｘ＋ｅ      （１）
「Ａ」は係数行列であり、この係数行列Ａは要素の１の確率が１／２のバイナリ行列である。「ｅ」はノイズベクトルであり、このノイズベクトル「ｅ」は「１」の確率が「τ」のバイナリベクトルである。「τ」は、０．５未満（例えば「１／８」）の定数である。「ｘ」は平文ベクトルである。「ｈ」は、暗号文ベクトルである。式（１）の演算子「＋」は、排他的論理和演算（ＸＯＲ）を表している。
【００８７】
例えば係数行列「Ａ」がｑ行ｎ列（ｑ，ｎは１以上の整数）の行列の場合、平文ベクトル「ｘ」はｎ行１列である。「Ａｘ」の各行は、係数行列「Ａ」の各行と平文ベクトル「ｘ」とのモジュロ２（ｍｏｄ２）上の内積であり、「Ａｘ」の計算により、ｑ行１列のベクトルが得られる。ｑ行１列のベクトル「Ａｘ」とｑ行１列のノイズベクトル「ｅ」との排他的論理和を対応する要素同士で計算することで、ｑ行１列の暗号文ベクトル「ｈ」が得られる。
【００８８】
このようなＬＰＮに基づく暗号化方式では、安全性担保のため、以下の条件が求められる。
（条件１）係数行列「Ａ」のサイズが充分に大きいこと。
（条件２）平文の種類が多く偏りが少ない（平文集合が高ｍｉｎエントロピーを有する）こと。
【００８９】
データ管理サーバ１００の検索部１６０は、ＬＰＮに基づく暗号化方式により、秘匿化ＤＢ１２０の暗号化された値（登録文）と、検索要求に含まれる暗号化された検索クエリ（検索文）とを照合する。例えば検索部１６０は、両者のハミング距離を計算し、ノイズ生成に用いる確率τに基づいて決定した閾値との比較を行うことで、両暗号文が適合するか否か（同じ平文かどうか）を判定する。なおＬＰＮに基づく暗号化方式では、異なるノイズを用いて暗号化された登録文と検索文であっても、照合が可能である。
【００９０】
以下、基本的なＬＰＮに基づく暗号化方式に関する課題について説明する。
＜第１の課題＞
係数行列「Ａ」の大きさは、暗号化方式の決定時に任意に定めることができるため、（条件１）を満たすのは容易である。それに対して、安全性担保のための（条件２）を満たせるかどうかは、秘匿化ＤＢ１２０の構造に依存する。例えば属性名「性別」に設定される値は、「男」と「女」のみとなり、種類が少ない。このように秘匿化ＤＢ１２０では、平文集合の種類が少ない場合や、偏りが大きい場合があり得る。この場合、上記（条件２）が満たされない。（条件２）が満たされず、充分な数の暗号文のサンプルが有ると、以下のような手順で暗号文の解読が可能となる。
【００９１】
エントロピーの低い平文集合を暗号化すると以下のようになる。
ｈ1＝Ａｘ1＋ｅ1
ｈ2＝Ａｘ1＋ｅ2
：
ｈk＝Ａｘ1＋ｅk
ｈk+1＝Ａｘ2＋ｅk+1
：                      （２）
「ｈ1，ｈ2，・・・，ｈk，ｈk+1，・・・」は、登録された平文ごとの暗号文ベクトルである。「ｘ1，ｘ2」は、登録された平文の値（平文ベクトル）である。「ｅ1，ｅ2，・・・，ｅk，ｅk+1，・・・」は、登録された平文ごとのノイズのノイズベクトルである。この例では、平文の値が「ｘ1，ｘ2」の２種類しか存在せず、エントロピーが低い。この場合、攻撃者は、暗号文同士の照合判定を行うことにより、「ｈ1〜ｈk」が同じ平文を暗号化したものであると知ることが可能である。すなわちハミング距離が閾値未満の暗号文同士は、同じ平文であると判断できる。
【００９２】
攻撃者は、次に同じ平文を暗号化した暗号文ベクトル「ｈ1〜ｈk」について、ビットごとの多数決を行う。すなわち攻撃者は、暗号文ベクトル「ｈ1〜ｈk」それぞれの要素番号が同じ要素の値同士を比較し、「０」と「１」とのどちらが多いのかを判断する。ノイズベクトル「ｅ」の各ビットが「１」である確率は「０」である確率より小さいため、攻撃者は、要素番号ごとの比較における「０」と「１」とのうちの多い方の値が、ベクトル「Ａｘ1」における該当要素番号の値であると判断できる。同様の判断をすべての要素番号の要素について行えば、攻撃者は、ノイズベクトルｅを消去したベクトル「Ａｘ1」を推定することができる。
【００９３】
そして攻撃者は、同様の処理を他の平文に対応する暗号文でも行えば、ノイズのない連立方程式を得ることができる。ＬＰＮ問題は、ノイズの存在によって解くことの困難性を高めたものである。そのため、攻撃者は、ノイズのない連立方程式を得ることができれば、その連立方程式を解くことが可能である。
【００９４】
このように、基本的なＬＰＮに基づく暗号化方式では、平文の種類が少なく偏りが大きい場合に暗号化の強度が低下するという問題がある。しかも、患者データには、性別を示す属性のように、設定される値の種類が少ない属性が含まれる可能性が高い。そこで平文の種類が少なく偏りが大きい場合についての暗号強度をどのようにして高めるかが課題となる。
【００９５】
＜第２の課題＞
基本的なＬＰＮに基づく暗号化方式では、暗号化式の係数行列「Ａ」と平文候補とを知っている者が攻撃者となると、攻撃者は容易に暗号文を解読可能である。例えばデータ管理サーバ１００の管理者の中に攻撃者が存在する場合、攻撃者は、暗号文同士の照合判定が可能である。
【００９６】
図９は、係数行列「Ａ」を攻撃者が知っている場合の攻撃方法の一例を示す図である。図９の例では、秘匿化ＤＢ１２０のうち、属性名「性別」の属性のみを示している。ここで、性別係数行列「Ａ」を知っている攻撃者が、属性名「性別」の暗号文は「男，女」のどちらかが暗号化されたものしか存在しないことも知っている場合を想定する。この場合、攻撃者は、以下の計算を行う。
ｈa＝Ａ×（男の平文ベクトル）＋ｅ      （３）
ｈb＝Ａ×（女の平文ベクトル）＋ｅ      （４）
次に攻撃者は、暗号文「ｈa，ｈb」それぞれと、秘匿化ＤＢ１２０内の属性名「性別」の属性に設定された暗号文「ｈ1，ｈ2，・・・」それぞれとの照合判定を行う。そして攻撃者は、暗号文「ｈa」と適合した暗号文について、平文「男」を暗号化したものであると判断できる。同様に、攻撃者は、暗号文「ｈb」と適合した暗号文について、平文「女」を暗号化したものであると判断できる。図９では、照合判断で適合する関係を実線で接続し、不適合の関係を破線で接続している。
【００９７】
なお、暗号文ベクトル「ｈa，ｈb」の計算に使用するノイズベクトルｅは、登録された患者データの暗号化に用いたノイズベクトルと異なっていても、正しく照合可能である。
このように、暗号化式の係数行列「Ａ」と平文候補とを知っている者が攻撃者になった場合、暗号文の解読が容易であるという問題がある。例えば、データ管理サーバ１００の管理者に暗号化式の係数行列「Ａ」が知られてしまった場合、管理者の中に悪意のある攻撃者が紛れ込んでいると、その攻撃者は、容易に暗号文を解読できてしまう。そこでデータ管理サーバ１００の管理者が攻撃者になった場合について、どのようにして暗号文の解読の困難性を高めるかが課題となる。
【００９８】
以上、基本的なＬＰＮに基づく暗号化方式に関する２つの課題を説明した。ここで、第１の課題の解決手段として、複数の属性を結合して、値の種類とばらつきを増やすことが考えられる。
【００９９】
図１０は、複数の属性を結合した場合の暗号化の比較例を示す図である。図１０の例では、ＤＢ４１には、属性名「性別」、「身長」の属性が含まれている。このうち属性名「性別」に設定する値は「男，女」の２種類であり、種類とばらつきが少ない。そこで、ＤＢ４１の２つの属性を結合することで、種類とばらつきを増やしたＤＢ４２を生成することが可能である。このＤＢ４２に基づいて患者データを暗号化して秘匿化ＤＢ４３に登録すれば、属性名「性別」、「身長」の属性ごとに暗号化した場合に比べ、暗号強度の高い暗号化となる。
【０１００】
この場合、ＤＢ４１内の全データを１列で格納すると、例えば「男」のみを抽出したい場合、「性別＝男，身長＝Ｘ」との照合を行うこととなる。このとき、Ｘは取り得るすべての値で検索することとなり、秘匿化ＤＢ４３検索時の処理量が著しく増大する。そのため、第１の課題の解決手段として複数の属性を結合するのは適切ではない。
【０１０１】
第２の実施の形態では、上記の２つの課題を解決するために、以下のような対策を施している。
・第１の課題の解決手段（平文ごとに異なる、平文によって一意に決まるノイズ生成）
第１の課題を解決するために、データ提供サーバ２００，３００と端末装置４００，５００は、暗号化する際のノイズベクトル「ｅ」を、平文「ｘ」の内容ごとに異なり、かつ「ｘ」によって唯一つに決まるように生成する。
【０１０２】
・第２の課題の解決手段（係数行列「Ａ」の秘匿化）
第２の課題を解決するために、データ提供サーバ２００，３００と端末装置４００，５００とは、暗号化式の係数行列「Ａ」をデータ管理サーバ１００の管理者から隠す。例えばデータ提供サーバ２００，３００と端末装置４００，５００とのうちの１台で暗号化式の係数行列「Ａ」を生成し、データ管理サーバ１００を介さずに、データ提供サーバ２００，３００と端末装置４００，５００で係数行列「Ａ」を共有する。
【０１０３】
以下、係数行列「Ａ」の秘匿化により、暗号文の安全性が向上する理由について説明する。
＜平文の候補が既知で、係数行列「Ａ」が未知の場合の暗号解読の困難性＞
平文のサンプル数「Ｑ」は、得られる連立方程式の数でもある。ここで、平文ベクトルのビット数「ｎ」が連立方程式の数「Ｑ」以上（ｎ≧Ｑ）の場合と、平文ベクトルのビット数「ｎ」が連立方程式の数「Ｑ」未満（ｎ＜Ｑ）の場合とを分けて考える。
【０１０４】
エントロピーによらず、平文ベクトルのビット数「ｎ」が連立方程式の数「Ｑ」以上（ｎ≧Ｑ）であれば、一般的なＬＰＮ問題であっても、総当たり法以外で解くことは困難である（詳細は前述の「非特許文献１」参照）。総当たり法は、すべての可能性を調査するものであり、実用的な時間での解読は困難である。そこで、以下、平文ベクトルのビット数「ｎ」が連立方程式の数「Ｑ」未満（ｎ＜Ｑ）の場合の、暗号化解読の困難性について説明する。
【０１０５】
まず、攻撃者にとって平文の一覧と暗号文の一覧が既知の場合の、攻撃者による攻撃方法を考える。
係数行列「Ａ」がｑ行ｎ列の行列の場合、ＬＰＮ問題の暗号化式をベクトル形式で変形すると以下の式となる。
ｈ＝Ａｘ＋ｅ＝［ａ1T，・・・，ａqT］Tｘ＋ｅ      （５）
ベクトルの右上の「Ｔ」は、ベクトルの転置を表す記号である。「ａ1，・・・，ａq」は、係数行列「Ａ」の行ごとの値を要素とする、各行に対応するベクトルである。
【０１０６】
式（５）において、暗号文ベクトル「ｈ」と、平文ベクトル「ｘ」の候補は既知である。 このとき攻撃者は、「ｑ」に対して十分に多くの暗号文と平文候補（候補数をｍ（ｍは１以上の整数）とする）を用いて矛盾のない係数行列「Ａ」とノイズベクトル「ｅ」を求められれば、暗号文の解読が可能となる。
【０１０７】
ここで係数行列「Ａ」とノイズベクトル「ｅ」を求める上で式（５）の各行に注目すると、各行の未知変数は独立である。そのため各行の方程式は連立できない。よって、どれか一つの行を解くことができれば、他の行も解ける。「Ａｘ＋ｅ」における「Ａ」の第１行に関する演算は以下の式（６）で表される。そこで、以下の１行を解くことを考える。
ａ1・ｘ＋ｅ1＝ｘ・ａ1＋ｅ1＝ｈ1      （６）
式（６）の「・」は、２つのベクトルのモジュロ２（ｍｏｄ２）上の内積である。実際の処理においては、モジュロ２（ｍｏｄ２）上の内積は、バイナリベクトルの演算である。バイナリベクトルの演算は、実際の処理においては、バイナリベクトルの演算である。そこで、例えばデータ提供サーバ２００，３００または端末装置４００，５００は、ベクトルの要素ごとの論理積（ＡＮＤ）を計算し、その後、全要素の排他的論理和（ＸＯＲ）を計算する。これにより、モジュロ２（ｍｏｄ２）上の内積が計算される。
【０１０８】
平文ベクトル「ｘ」の一覧と暗号文ベクトル「ｈ」の一覧から平文候補ベクトル「Ｘk」と，暗号文候補ベクトル「Ｈk」をｍ（ｍは１以上の整数）組選び１つの式にまとめると以下の式となる。
【０１０９】
【数１】
2020109447.tif 000003
【０１１０】
式（７）の「Ｈk1」は、暗号文候補ベクトル「Ｈk」の１ビット目の値である（ｋ＝１，２，・・・，ｍ）。ノイズベクトル「ｅk1」は、暗号文候補ベクトル「Ｈk」の生成に用いられたノイズベクトル「ｅk」の１ビット目の値である。
【０１１１】
データ提供サーバ２００，３００および端末装置４００，５００は、暗号化する際のノイズベクトル「ｅ」を、平文「ｘ」の内容ごとに異なり、かつ「ｘ」によって唯一つに決まるように生成する。すると、式（７）の最終項（右辺第２項）の各要素は、異なる平文に対応する異なるノイズベクトル「ｅ」から集められる。平文ごとに異なるノイズベクトル「ｅ」が生成されており、この最終項はノイズとして働く。
【０１１２】
そして、式（７）を書き直すと以下のように一般的なＬＰＮ問題に基づく暗号化方式と同じ形となる。
Ｈ1’＝ＸTａ1＋ｅ1’      （８）
式（８）では暗号文の１ビットしか求まらず、暗号文を解読するには、暗号文のビット数倍の処理を行うこととなる。さらに、式（８）で用いられる平文と暗号文ベクトルの組はあくまで候補である。そのため、ここで求めた係数行列「Ａ」もあくまで候補であり、すべての平文候補と対になる暗号文が矛盾なく生成できる「Ａ」を見つけられて初めて解読できたこととなる。したがって、１つのＬＰＮ問題よりも解くことが難しい問題となる。すなわち、攻撃者が平文候補を知っており、平文集合のエントロピーが低くても、攻撃者は、各平文候補に対応する暗号文を特定するための係数行列「Ａ」とノイズベクトル「ｅ」を求められない。
【０１１３】
ここ  で、式（８）では、一般的なＬＰＮ問題における係数行列「Ａ」に相当する係数行列が、平文ベクトルの集合である「ＸT」に置き換わっている。そのため、平文ベクトルの集合「ＸT」も「Ａ」と同じ特性を持つことが求められる。よって、各平文に割り当てる平文ベクトルは、要素が１となる確率が１／２もしくは約１／２とすることで安全性が保たれる。さらに、各平文ベクトルは、解読するために解くべき連立方程式中のある一つの方程式の係数に相当する。そのため、平文ベクトル間のハミング距離が小さいと、連立方程式の従属項が多くなり、安全性が低下する。よって、平文ベクトルを決定する際、すべての平文ベクトル間のハミング距離がなるべく大きくなるように決定することが好ましい。
【０１１４】
以上が、係数行列「Ａ」の秘匿化により、暗号文の安全性が向上する理由である。
次に平文ごとに異なるノイズベクトルを生成する理由について説明する。例えばすべての平文に対して、暗号化の際に使用するノイズベクトルを１つに固定した場合を考える。その場合、式（８）の「ｅ1’」の項の要素は、すべて同じ値となる。すると「ｅ1’」の項の要素が「０」の場合と「１」の場合との２通りを試すことで、ノイズがないものとして扱えてしまう。そのため、平文ごとに異なるノイズベクトルを生成するのが適切である。
【０１１５】
なお、上記の平文ごとのノイズの統一に関する説明は、係数行列「Ａ」が共通であることを前提としている。係数行列「Ａ」は、患者データの登録者（病院３２，３３）ごとに異なるものを使用することも可能である。この場合、異なる登録者（病院）間では、係数行列「Ａ」が異なるので、平文ごとのノイズを統一しなくてもよい。
【０１１６】
登録者（病院３２，３３）−検索者（製薬企業３４，３５）の関係が１対１の場合であれば、平文ごとのノイズを統一しなくても、１つの平文に対するノイズは２種なので、多数決によるノイズ除去は、τを極めて小さくしない限りできない。そのため、平文ごとのノイズを統一しなくても問題は生じない。検索者が多数になると、検索者間のノイズが統一されていない場合、１つの平文に対するノイズが多数になり、検索文を蓄積することでノイズを除去できてしまう。したがって、平文ごとにノイズを統一するのが適切である。すなわち、同じ鍵「Ａ」を使う範囲にて、平文ごとに同じノイズを使用することが望ましい。
【０１１７】
ノイズ統一の手段としては、以下の方法が考えられる。
係数行列「Ａ」（後述する第３の実施の形態では関係秘密鍵「Ｓ」でも、「Ａ」と「Ｓ」の両方でもよい）と平文ベクトルｘから一意に定まるような関数にてノイズを生成する。
ｅ＝ｆ（Ａ，ｘ）    （９）
ただし、この関数「ｆ」と平文候補ベクトル「ｘ」をデータ管理サーバ１００の管理者が知っていても、管理者がノイズベクトル「ｅ」を推定できないような関数ｆが用いられる。ノイズベクトル「ｅ」を求める関数の変数として係数行列「Ａ」（または関係秘密鍵「Ｓ」）を用いているのは、データ管理サーバ１００の管理者にノイズベクトル「ｅ」が推定されることを抑止するためである。すなわち、データ管理サーバ１００の管理者は、データ提供ソフトウェア１１１とデータ利用ソフトウェア１１２との設計も行っている場合がある。この場合、管理者は関数の形を知っている。ノイズベクトル生成用の関数を平文ベクトル「ｘ」のみの関数にしてしまうと、データ管理サーバ１００の管理者は、「ｘ」の候補から容易にノイズベクトル「ｅ」を生成できてしまう。それに対して、係数行列「Ａ」（または関係秘密鍵「Ｓ」）を変数として用いた関数でノイズベクトルを生成すれば、関数「ｆ」と平文候補ベクトル「ｘ」が既知でもノイズベクトル「ｅ」の推定が困難となる。
【０１１８】
また、データ提供サーバ２００，３００と端末装置４００，５００とでノイズベクトル「ｅ」を共有するためには、係数行列「Ａ」のような共有の情報からノイズベクトルを生成できれば、効率的である。すなわちある装置で生成したノイズベクトルを他の装置に送信することでノイズベクトルの共有を図ったのでは、平文の種類が多数ある場合に、共有のための秘密の通信のデータ量や、ノイズベクトルを記憶するための記憶の量が増加する。各装置が共有する情報に基づいて、各装置がノイズベクトルを生成できることで、通信データ量の削減や、ノイズベクトルの記憶に使用するメモリ容量が削減される。
【０１１９】
ノイズベクトルの生成に使用可能な関数として、ＭＡＣ（Message Authentication Code）関数がある。例えばＡＥＳ（Advanced Encryption Standard）−ＣＢＣ（Cipher Block Chaining）−ＭＡＣがある。また例えばハッシュ関数「Ｈａｓｈ（Ａ，Ｓ）」でノイズベクトルを生成することもできる。ハッシュ関数としては、例えばＳＨＡ（Secure Hash Algorithm）−２を用いることができる。ノイズベクトル内の値が「１」の確率「τ」を１／８にする場合、確率「１／２」の乱数を３個作って、得られた乱数の論理積をとることで実現できる。
【０１２０】
なお、係数行列「Ａ」と平文ベクトル「ｘ」に基づき生成したベクトル（第１プレノイズベクトル）と、ランダムに生成したベクトル（第２プレノイズベクトル）とを加算（排他的論理和）したものを、暗号化に使用するノイズベクトルとすることもできる。第１プレノイズベクトルを利用するのは、データ管理サーバ１００の管理者による解読を困難にするためである。第２プレノイズベクトルを利用するのは、暗号文の患者データが外部に漏えいしたとき、データ管理サーバ１００の管理者以外の攻撃者からの攻撃に対する安全性を高めるためである。暗号化に使用するノイズベクトルの生成に第２プレノイズベクトルを用いることで、同じ平文でも異なる暗号文となり、暗号文の安全性が向上する。
【０１２１】
なお２種類のプレノイズベクトルを加算してノイズベクトルを生成する場合におけるノイズベクトル内の「１」の要素の確率は、以下のようにして設定できる。
ここで、第１・第２プレノイズベクトルそれぞれの要素の値が「１」の確率を「ｐ」、２種のベクトルを加算して得られるノイズベクトルの要素の値が「１」の確率を「ｐsum」とおく。このとき、プレノイズベクトルの和（排他的論理和）が「１」となるのは、２つのベクトルの対応する要素が互いに異なる値のときでる。そのため、確率「ｐsum」は、以下の式で与えられる。
ｐsum＝２ｐ（１−ｐ)      （１０）
式（１０）を確率「ｐ」について解くと、以下の式となる。
【０１２２】
【数２】
2020109447.tif 000004
【０１２３】
式（１１）によって、所望の確率「ｐsum」を得るための２つのプレノイズベクトルにおける要素の値が「１」の確率ｐを決定できる。
次に秘匿化検索システムにおける患者データの登録および利用の処理手順について詳細に説明する。
【０１２４】
図１１は、患者データの登録および利用処理の概要を示す図である。データ提供サーバ２００は、係数行列「Ａn」を生成する（ステップＳ１１）。次にデータ提供サーバ２００は、生成した係数行列「Ａn」を、隔離鍵として端末装置４００に送信する（ステップＳ１２）。端末装置４００は、データ提供サーバ２００から隔離鍵を取得する（ステップＳ１３）。
【０１２５】
その後、データ提供サーバ２００は、患者データを暗号化する（ステップＳ１４）。例えばデータ提供サーバ２００は、患者データ内の単語の平文を、平文ベクトル「ｘi」に変換する。次にデータ提供サーバ２００は、係数行列「Ａn」と平文ベクトル「ｘi」とを用いて、ノイズベクトル「ｅn,i」を生成する。例えばノイズベクトル「ｅn,i」は、以下の式で生成される。
ｅn,i＝ｆe（Ａn，ｘi）＋ｅa       （１２）
式（１２）のｅaは、ランダムな値を設定したベクトル（前述の第２プレノイズベクトル）である。式（１２）の「＋」は、排他的論理和を示す。次にデータ提供サーバ２００は、ノイズベクトル「ｅn,i」を用いて、以下の式により暗号ベクトル「ｈn」を生成する。
ｈn＝Ａnｘi＋ｅn,i      （１３）
式（１３）の「＋」は、排他的論理和を示す。患者データの暗号化が完了すると、データ提供サーバ２００は、暗号ベクトル「ｈn」を登録暗号文として含むデータ登録要求を、データ管理サーバ１００に送信する（ステップＳ１５）。送信された登録暗号文は、データ管理サーバ１００の秘匿化ＤＢ１２０に格納される。
【０１２６】
その後、製薬企業３４の検索担当者が端末装置４００に検索クエリとなる文字列を入力すると、端末装置４００は、検索クエリを暗号化する（ステップＳ１６）。例えば端末装置４００は、検索クエリの平文を、平文ベクトル「ｙi」に変換する。次に端末装置４００は、係数行列「Ａn」と平文ベクトル「ｙi」とを用いて、ノイズベクトル「ｅn,j」を生成する。例えばノイズベクトル「ｅn,j」は、以下の式で生成される。
ｅn,j＝ｆe（Ａn，ｘj）＋ｅ      （１４）
式（１４）のｅは、ランダムな値を設定したベクトル（前述の第２プレノイズベクトル）である。式（１４）の「＋」は、排他的論理和を示す。次にデータ提供サーバ２００は、ノイズベクトル「ｅn,j」を用いて、以下の式により暗号ベクトル「ｈm」を生成する。
ｈm＝Ａnｘj＋ｅn,j      （１５）
式（１５）の「＋」は、排他的論理和を示す。検索クエリの暗号化が完了すると、端末装置４００は、暗号ベクトル「ｈm」を検索暗号文として含むデータ検索要求を、データ管理サーバ１００に送信する（ステップＳ１７）。
【０１２７】
データ管理サーバ１００は、秘匿化ＤＢ１２０に格納された暗号文と検索暗号文とを照合する（ステップＳ１８）。例えばデータ管理サーバ１００は、暗号ベクトル「ｈn」と暗号ベクトル「ｈm」とを照合する場合、暗号ベクトル「ｈn」と暗号ベクトル「ｈm」とのハミング距離を計算する。例えばデータ管理サーバ１００は、以下の式により、２つのベクトルの排他的論理和「ｒ」を計算する。
【０１２８】
【数３】
2020109447.tif 000005
【０１２９】
式（１６）は、展開すると以下のように表すことができる。
【０１３０】
【数４】
2020109447.tif 000006
【０１３１】
データ提供サーバ２００と端末装置４００とで同じ係数行列「Ａn」を使用している。そのため、患者データ内の単語を示す平文ベクトル「ｘi」と検索クエリを示す平文ベクトル「ｙj」とが等しければ「Ａnｘi」と「Ａnｙj」とは一致する。この場合、「Ａnｘi」と「Ａnｙj」の排他的論理和をとると、すべての要素の値は「０」となる。したがって式（１７）は、平文ベクトル「ｘi」と平文ベクトル「ｙj」とが同じであれば、第１プレノイズベクトルも同じであり、第２プレノイズベクトル同士の排他的論理和となる。第２プレノイズベクトルの要素の値が「１」である確率「τ」は例えば「１／８」程度に抑えられているため、２つのノイズベクトルの排他的論理和における値が「１」の要素の数も、所定値以下となる。
【０１３２】
データ管理サーバ１００は、式（１６）の計算後、排他的論理和「ｒ」のハミング重み「ＨＷ（ｒ）」を計算する。ハミング重みは、ベクトルの「０」以外の要素の数である。得られたハミング重み「ＨＷ（ｒ）」が、暗号ベクトル「ｈn」と暗号ベクトル「ｈm」とのハミング距離を表している  。
【０１３３】
なお第２プレノイズベクトルは、検索性能と外部への漏えいに対するリスクとを考慮して、省略してもよい。この場合、同じ平文に対する暗号文は完全に一致する。そのため、照合処理は全ビットの一致／不一致判定でよい。また、第１プレノイズベクトルの「１」の確率は１／２以上であってもよい。
【０１３４】
データ管理サーバ１００は、「ＨＷ（ｒ）」が所定の閾値「θ」（θは１以上の整数）未満か否かを判断する。データ管理サーバ１００は、「ＨＷ（ｒ）」が閾値「θ」未満であれば（ＨＷ（ｒ）＜θ）、照合に成功したと判断する。またデータ管理サーバ１００は、「ＨＷ（ｒ）」が閾値「θ」以上であれば（ＨＷ（ｒ）≧θ）、照合に失敗したと判断する。
【０１３５】
データ管理サーバ１００は、秘匿化ＤＢ１２０に格納されたすべての暗号文についての検索暗号文との照合が終了すると、照合に成功した暗号文を含むレコードの患者ＩＤを、検索結果として端末装置４００に送信する（ステップＳ１９）。
【０１３６】
このようにして、係数行列「Ａn」をデータ管理サーバ１００の管理者に対して秘匿した状態でも、秘匿化ＤＢ１２０内の暗号文を、暗号状態のまま検索暗号文と照合することができる。しかもデータ管理サーバ１００の管理者は係数行列「Ａn」を知らないため、患者データの内容や検索クエリを知ることができない。
【０１３７】
以下、秘匿化検索システムにおける各装置間の連携処理を詳細に説明する。
図１２は、患者データ登録処理の手順の一例を示すシーケンス図である。データ管理サーバ１００のソフトウェア提供部１３０は、データ提供ソフトウェア１１１をデータ提供サーバ２００に送信する（ステップＳ２１）。例えばデータ提供サーバ２００の管理担当者がデータ提供サーバ２００へデータ提供ソフトウェア１１１のインストール指示を入力すると、データ提供サーバ２００からデータ管理サーバ１００へ、データ提供ソフトウェア１１１の取得要求が送信される。ソフトウェア提供部１３０は、データ提供サーバ２００からのデータ提供ソフトウェア１１１の取得要求に応じて、データ提供ソフトウェア１１１を送信する。この際、ソフトウェア提供部１３０は、例えばデータ提供ソフトウェア１１１と共に、隔離鍵生成およびデータ登録依頼をデータ提供サーバ２００に送信する。
【０１３８】
データ提供サーバ２００では、データ提供機能導入部２２０がデータ提供ソフトウェア１１１を受信し、データ提供ソフトウェア１１１をデータ提供サーバ２００にインストールする（ステップＳ２２）。データ提供機能導入部２２０は、インストールが完了すると、データ提供部起動指示を出力する（ステップＳ２３）。データ提供部起動指示に応じて、データ提供サーバ２００がデータ提供部２３０を起動する。
【０１３９】
データ提供部２３０が起動されると、データ提供部２３０内の隔離鍵生成部２３３が、隔離鍵生成用のキーワード「ｓｅｅｄ１」の入力を受け付ける（ステップＳ２４）。隔離鍵生成部２３３は、キーワード「ｓｅｅｄ１」に基づいて係数行列「Ａ」を生成する（ステップＳ２５）。隔離鍵生成部２３３は、生成した係数行列「Ａ」を、隔離鍵として隔離鍵記憶部２３２に格納する。
【０１４０】
データ登録要求部２３４は、平文の患者データをＤＢ２１０から取得する（ステップＳ２６）。データ登録要求部２３４は、平文内容に一意であり、かつ平文の内容に対して唯一のノイズを生成する（ステップＳ２７）。データ登録要求部２３４は、生成したノイズを用いて、平文のデータを暗号化する（ステップＳ２８）。データ登録要求部２３４は、暗号化によって生成された暗号文を、データ管理サーバ１００に送信する（ステップＳ２９）。データ管理サーバ１００では、データ登録部１４０が暗号文を受信し、受信した暗号文を秘匿化ＤＢ１２０に格納する（ステップＳ３０）。
【０１４１】
このようにして、患者データの暗号文が秘匿化ＤＢ１２０に登録される。その後、製薬企業３４において患者データを利用する場合、製薬企業の３４の検索担当者は、まず端末装置４００にデータ利用環境を構築する。
【０１４２】
図１３は、データ利用環境の構築手順の一例を示すシーケンス図である。データ管理サーバ１００のソフトウェア提供部１３０は、データ利用ソフトウェア１１２を端末装置４００に送信する（ステップＳ４１）。例えば検索担当者が端末装置４００にデータソフトウェアのインストール指示を入力すると、端末装置４００からデータ管理サーバ１００へ、データ利用ソフトウェア１１２の取得要求が送信される。ソフトウェア提供部１３０は、端末装置４００からのデータ利用ソフトウェア１１２の取得要求に応じて、データ利用ソフトウェア１１２を送信する。この際、ソフトウェア提供部１３０は、例えばデータ利用ソフトウェア１１２と共に、隔離鍵取得依頼を端末装置４００に送信する。
【０１４３】
端末装置４００では、データ利用機能導入部４１０がデータ利用ソフトウェア１１２を受信し、データ利用ソフトウェア１１２を端末装置４００にインストールする（ステップＳ４２）。データ利用機能導入部４１０は、インストールが完了すると、データ利用部起動指示を出力する（ステップＳ４３）。データ利用部起動指示に応じて、端末装置４００がデータ利用部４２０を起動する。
【０１４４】
データ利用部４２０が起動されると、データ利用部４２０内の隔離鍵取得部４２３が、データ利用部４２０の起動完了通知をデータ管理サーバ１００に送信する（ステップＳ４４）。起動完了通知は、例えば隔離鍵取得要求を兼ねているものとする。
【０１４５】
データ管理サーバ１００では、隔離鍵提供依頼部１５０が起動完了通知を受信する。そして隔離鍵提供依頼部１５０は、隔離鍵提供依頼をデータ提供サーバ２００に送信する（ステップＳ４５）。
【０１４６】
データ提供サーバ２００では、データ提供部２３０内の隔離鍵提供部２３５が、隔離鍵提供依頼を受信する。隔離鍵提供部２３５は、病院３２におけるデータ提供サーバ２００の管理担当者からの隔離鍵提供許可の入力を受け付ける（ステップＳ４６）。隔離鍵提供部２３５は、隔離鍵提供許可が入力されると、隔離鍵記憶部２３２から隔離鍵を取得する。そして隔離鍵提供部２３５は、取得した隔離鍵を端末装置４００に送信する（ステップＳ４７）。
【０１４７】
端末装置４００では、データ利用部４２０内の隔離鍵取得部４２３が隔離鍵を受信する。隔離鍵取得部４２３は、受信した隔離鍵を隔離鍵記憶部４２２に格納する（ステップＳ４８）。
【０１４８】
このようにして、端末装置４００に、データ管理サーバ１００において暗号文で管理されている患者データの利用環境が構築される。その後、検索担当者は、検索クエリの入力により、データ管理サーバ１００で管理されている患者データの検索を行う。
【０１４９】
図１４は、検索処理の手順の一例を示すシーケンス図である。端末装置４００のデータ利用部４２０は、検索担当者からの平文の検索クエリの入力を受け付ける（ステップＳ５１）。受け付けた検索クエリは、検索要求部４２４が取得する。検索要求部４２４は、検索クエリに示される平文の内容に一意であり、かつ平文の内容に対して唯一のノイズを生成する（ステップＳ５２）。さらに検索要求部４２４は、隔離鍵記憶部４２２に格納されている隔離鍵と生成したノイズとを用いて検索クエリを暗号化する（ステップＳ５３）。そして検索要求部４２４は、暗号文の検索クエリを含む検索要求をデータ管理サーバ１００に送信する（ステップＳ５４）。
【０１５０】
データ管理サーバ１００では、検索部１６０が検索要求を受信する。検索部１６０は、検索要求に示される検索クエリの暗号文と、秘匿化ＤＢ１２０に格納されている各暗号文とを照合する（ステップＳ５５）。照合処理の詳細は後述する（図１５参照）。そして検索部１６０は、照合により一致した暗号文を含むレコードの患者ＩＤまたは一致患者数を、検索結果として端末装置４００に送信する（ステップＳ５６）。検索結果を受信した端末装置４００では、検索要求部４２４が検索結果をモニタに表示する（ステップＳ５７）。
【０１５１】
このようにして検索クエリに合致する値を含む患者データを検索することができる。以下、照合処理について詳細に説明する。
図１５は、照合処理の詳細を示すフローチャートである。以下、図１５に示す処理をステップ番号に沿って説明する。
【０１５２】
［ステップＳ６１］検索部１６０は、秘匿化ＤＢ１２０から、未選択のレコードを１つ選択する。
［ステップＳ６２］検索部１６０は、選択したレコード内のデータ（暗号文）と検索クエリ（暗号文）とのハミング距離を計算する。例えば検索部１６０は、暗号文同士の排他的論理和（ＸＯＲ）を計算し、排他的論理和の計算結果に含まれる値が「１」の要素数（ハミング重み）を計数する。計数した値がハミング距離である。
【０１５３】
［ステップＳ６３］検索部１６０は、ハミング距離が閾値未満か否かを判断する。検索部１６０は、ハミング距離が閾値未満であれば、処理をステップＳ６４に進める。また検索部１６０は、ハミング距離が閾値以上であれば、処理をステップＳ６５に進める。
【０１５４】
［ステップＳ６４］検索部１６０は、選択したレコードの患者ＩＤを、一致患者リストに記録する。
［ステップＳ６５］検索部１６０は、秘匿化ＤＢ１２０内に未選択のレコードがあるか否かを判断する。検索部１６０は、未選択のレコードがある場合、処理をステップＳ６１に進める。また検索部１６０は、すべてのレコードが選択済みであれば、処理をステップＳ６６に進める。
【０１５５】
［ステップＳ６６］検索部１６０は、一致患者リストもしくは一致患者数を 検索 結果として端末装置４００に送信する。
このようにして製薬企業３４の検索担当者は、暗号文で管理された患者データの検索結果を得ることができる。
【０１５６】
第２の実施の形態に係る秘匿化検索システムでは、患者データおよび検索クエリを暗号化する際のノイズを、平文の内容ごとに異なり、かつ平文の内容に唯一に決まるように決定している。これにより、平文集合の種類が少ない場合や偏りが大きい場合の暗号強度の低下を抑止することができる。
【０１５７】
また第２の実施の形態に係る秘匿化検索システムでは、係数行列「Ａ」を、データ管理サーバ１００を経由せずに、データ提供サーバ２００，３００と端末装置４００，５００とで共有している。これにより、データ管理サーバ１００の管理者が攻撃者となった場合であっても、患者データの暗号文の攻撃者による解読を抑止することができる。
【０１５８】
〔第３の実施の形態〕
次に第３の実施の形態について説明する。第３の実施の形態に係る秘匿化検索システムは、秘匿化ＤＢ１２０に対する参照権を製薬企業３４，３５ごとに予め与えておき、その参照権を示すプレ照合鍵をデータ管理サーバ１００で管理するようにしたものである。以下、第３の実施の形態における第２の実施の形態との相違点を中心に説明する。
【０１５９】
図１６は、参照権の制御を伴う患者データの登録および利用手順の一例を示す図である。第３の実施の形態では、図４に示した第２の実施の形態の各装置の要素に加え、データ管理サーバ１００にプレ照合鍵記憶部１７０が設けられている。なお図１６の例では、データ提供ソフトウェア１１１とデータ利用ソフトウェア１１２とが、それぞれデータ提供サーバ２００と端末装置４００にインストール済みであるものとする。
【０１６０】
病院３２のシステム担当者は、データ提供サーバ２００に鍵生成のための任意の文字列を入力する。データ提供サーバ２００は、例えば入力された文字列と現在の時刻とを結合したデータを「ｓｅｅｄ１」として、「ｓｅｅｄ１」に基づいて関係秘密鍵と秘密鍵とを生成する。次にデータ提供サーバ２００は、関係秘密鍵と秘密鍵とを用いてプレ照合鍵を生成する。そしてデータ提供サーバ２００は、プレ照合鍵をデータ管理サーバ１００に登録する。データ管理サーバ１００では、データ提供サーバ２００から渡されたプレ照合鍵を、登録者（病院３２）の組織名「登録者Ａ」に対応付けて、プレ照合鍵記憶部１７０に格納する。なお、データ提供サーバ２００が生成したプレ照合鍵は、第１の実施の形態に示す第１照合鍵の一例である。
【０１６１】
その後、データ提供サーバ２００は、ＤＢ２１０内の患者データの属性ごとの値を暗号化して、暗号文をデータ管理サーバ１００に登録する。データ管理サーバ１００では、データ提供サーバ２００から渡された暗号文を、秘匿化ＤＢ１２０に格納する。
【０１６２】
ここで、病院３２において、製薬企業３４に対して患者データの利用を許可した場合、データ提供サーバ２００から端末装置４００へ隔離鍵を送信する。送信される隔離鍵には、第２の実施の形態で説明した係数行列に加え、関係秘密鍵が含められる。なお隔離鍵は、データ管理サーバ１００を経由せずに送信される。端末装置４００は、受信した隔離鍵を、隔離鍵の提供元（病院３２）の組織名「登録者Ａ」に対応付けて、隔離鍵記憶部４２２に格納する。
【０１６３】
製薬企業３４の検索担当者は、端末装置４００に鍵生成のための任意の文字列を入力する。端末装置４００は、例えば入力された文字列と現在の時刻とを結合したデータを「ｓｅｅｄ２」として、「ｓｅｅｄ２」に基づいて秘密鍵を生成する。次に端末装置４００は、生成した秘密鍵と、隔離鍵記憶部４２２に格納されている関係秘密鍵とを用いて、プレ照合鍵を生成する。そして端末装置４００は、プレ照合鍵をデータ管理サーバ１００に登録する。データ管理サーバ１００では、端末装置４００から渡されたプレ照合鍵を、検索者（製薬企業３４）の組織名「検索者Ｂ」に対応付けて、プレ照合鍵記憶部１７０に格納する。なお、端末装置４００が生成したプレ照合鍵は、第１の実施の形態に示す第２照合鍵の一例である。
【０１６４】
その後、製薬企業３４において病院３２が提供した患者データを検索する場合、検索担当者は、検索クエリを入力する。端末装置４００は、入力された検索クエリを暗号化し、暗号文の検索クエリを含む検索要求をデータ管理サーバ１００に送信する。データ管理サーバ１００は、端末装置４００から検索要求を受信すると、患者データを登録した病院３２「登録者Ａ」のプレ照合鍵と検索者である製薬企業３４「検索者Ｂ」とのプレ照合鍵を用いて、照合鍵を生成する。そしてデータ管理サーバ１００は、照合鍵を用いて、暗号文のままで検索クエリと患者データとの照合を行い、一致した患者のＩＤまたは一致患者数を示す検索結果を端末装置４００に送信する。
【０１６５】
図１７は、参照権の制御を伴う暗号化方式の一例を示す図である。データ提供サーバ２００は、複数の鍵を生成する（ステップＳ７１）。生成する鍵は、秘密鍵「ｋn」、プレ照合鍵「Ｐn」、係数行列「Ａn」、および関係秘密鍵「Ｓn」である。プレ照合鍵「Ｐn」は、例えば秘密鍵「ｋn」と関係秘密鍵「Ｓn」との排他的論理和により生成される。そしてデータ提供サーバ２００は、プレ照合鍵「Ｐn」をデータ管理サーバ１００に送信する（ステップＳ７２）。
【０１６６】
さらにデータ提供サーバ２００は、患者データを暗号化する（ステップＳ７３）。例えばデータ提供サーバ２００は、患者データの属性の値に対応する平文ベクトル「ｘi」と係数行列「Ａn」とに基づいて、第１プレノイズベクトル「ｆe（Ａn，ｘi）」を生成する。次にデータ提供サーバ２００は、乱数によって第２プレノイズベクトル「ｅ」を生成する。そしてデータ提供サーバ２００は、２つのプレノイズベクトルの排他的論理和をノイズベクトル「ｅn,i」とする。
【０１６７】
データ提供サーバ２００は、係数行列「Ａn」、ノイズベクトル「ｅn,i」、および秘密鍵「ｋn」を用いて、平文ベクトル「ｘi」を暗号化する。例えばデータ提供サーバ２００は、以下の式により平文ベクトル「ｘi」を暗号化した暗号文ベクトル「ｈn」を生成する。
【０１６８】
【数５】
2020109447.tif 000007
【０１６９】
式（１８）では、係数行列「Ａn」の各行と平文ベクトル「ｘi」とのモジュロ２（ｍｏｄ２）上の内積の計算結果を各要素とするベクトルと、ノイズベクトル「ｅn,i」および秘密鍵「ｋn」それぞれとの排他的論理和が、暗号文ベクトル「ｈn」となっている。
【０１７０】
暗号文ベクトル「ｈn」を生成後、データ提供サーバ２００は、データ管理サーバ１００に、暗号文ベクトル「ｈn」を登録暗号文として含むデータ登録要求を送信する（ステップＳ７４）。これにより、データ管理サーバ１００には、患者データが暗号化されて秘匿化ＤＢ１２０に格納される。
【０１７１】
その後、データ提供サーバ２００は、端末装置４００に係数行列「Ａn」と関係秘密鍵「Ｓn」とを含む隔離鍵を送信する（ステップＳ７５）。端末装置４００は、隔離鍵を取得する（ステップＳ７６）。次に端末装置４００は、秘密鍵「ｋm」とプレ照合鍵「Ｐm」とを生成する（ステップＳ７７）。そして端末装置４００は、プレ照合鍵「Ｐm」をデータ管理サーバ１００に送信する（ステップＳ７８）。
【０１７２】
データ管理サーバ１００は、プレ照合鍵「Ｐm」をプレ照合鍵記憶部１７０に格納する。そしてデータ管理サーバ１００は、データ提供サーバ２００から取得したプレ照合鍵「Ｐn」と端末装置４００から取得したプレ照合鍵「Ｐm」とに基づいて、照合鍵「Ｐnm」を生成する（ステップＳ７９）。例えばデータ管理サーバ１００は、プレ照合鍵「Ｐn」とプレ照合鍵「Ｐm」との排他的論理和を、照合鍵「Ｐnm」とする。
【０１７３】
その後、端末装置４００は、検索クエリが入力されると、その検索クエリを暗号化する（ステップＳ８０）。例えば端末装置４００は、検索クエリに対応する平文ベクトル「ｙj」と係数行列「Ａn」とに基づいて、第１プレノイズベクトル「ｆe（Ａn，ｙj）」を生成する。次に端末装置４００は、乱数によって第２プレノイズベクトル「ｅj」を生成する。そして端末装置４００は、２つのプレノイズベクトルの排他的論理和をノイズベクトル「ｅn,j」とする。
【０１７４】
端末装置４００は、係数行列「Ａn」、ノイズベクトル「ｅn,j」、および秘密鍵「ｋm」を用いて、平文ベクトル「ｙj」を暗号化する。例えば端末装置４００は、以下の式により平文ベクトル「ｙj」を暗号化した暗号文ベクトル「ｈm」を生成する。
【０１７５】
【数６】
2020109447.tif 000008
【０１７６】
式（１９）では、係数行列「Ａn」の各行と平文ベクトル「ｙi」とのモジュロ２（ｍｏｄ２）上の内積の計算結果を各要素とするベクトルと、ノイズベクトル「ｅn,j」および秘密鍵「ｋm」それぞれとの排他的論理和が、暗号文ベクトル「ｈm」となっている。
【０１７７】
暗号文ベクトル「ｈm」を生成後、端末装置４００は、データ管理サーバ１００に、暗号文ベクトル「ｈm」を検索暗号文として含む検索要求を送信する（ステップＳ８１）。データ管理サーバ１００は、検索要求に応じて、検索クエリと秘匿化ＤＢ１２０内の暗号化された患者データとを照合する（ステップＳ８２）。データ管理サーバ１００は、暗号ベクトル「ｈn」と暗号ベクトル「ｈm」とを照合する場合、暗号ベクトル「ｈn」と暗号ベクトル「ｈm」について、照合鍵「Ｐnm」で復号を行った後、照合を行う。例えばデータ管理サーバ１００は、以下の式により、２つのベクトルの排他的論理和「ｒ」を計算する。
【０１７８】
【数７】
2020109447.tif 000009
【０１７９】
式（２０）は、展開すると以下のように表すことができる。
【０１８０】
【数８】
2020109447.tif 000010
【０１８１】
式（２１）の右辺は、第２の実施の形態で説明した式（１７）の右辺と同じである。すなわち、式（２０）の計算により、重複して存在する関係秘密鍵「Ｓn」と照合鍵「ｋn」、「ｋm」が消去され、第２の実施の形態と同様の値が得られる。そこでデータ管理サーバ１００は、式（２０）の計算後、排他的論理和「ｒ」のハミング重み「ＨＷ（ｒ）」を計算する。データ管理サーバ１００は、「ＨＷ（ｒ）」が所定の閾値「θ」未満か否かを判断する。データ管理サーバ１００は、「ＨＷ（ｒ）」が閾値「θ」未満であれば（ＨＷ（ｒ）＜θ）、照合に成功したと判断する。またデータ管理サーバ１００は、「ＨＷ（ｒ）」が閾値「θ」以上であれば（ＨＷ（ｒ）≧θ）、照合に失敗したと判断する。
【０１８２】
データ管理サーバ１００は、秘匿化ＤＢ１２０に格納されたすべての暗号文についての検索暗号文との照合が終了すると、照合に成功した暗号文を含むレコードの患者ＩＤまたは一致患者数を、検索結果として端末装置４００に送信する（ステップＳ８３）。
【０１８３】
このような暗号化方式を採用することにより、病院３２および製薬企業３４それぞれのデータの安全性が向上する。例えば病院３２が提供した患者データは、第２の実施の形態と同様に、平文集合のエントロピーが低くても解読が困難なように暗号化して管理されている。そのため、例えば属性の値（男性、女性など）ごとの単位で暗号化しても、安全な暗号文が生成される。また、データ管理サーバ１００の管理者は、係数行列「Ａn」を知ることができないため、登録された患者データの暗号文や検索クエリの暗号文を解読することができない。
【０１８４】
また病院３２は検索文を見ることはできないため、製薬企業３４にとって、検索内容を病院３２に把握されることも抑止されている。
さらに、製薬企業３４とは別の製薬企業３５にも、病院３２から隔離鍵が渡された場合であっても、各製薬企業３４，３５で生成される秘密鍵「ｋm」が異なる。そのため他社に検索要求が盗聴されたとしても、他社は秘密鍵「ｋm」を有していないことから検索クエリの暗号文を解読することはできない。従って、製薬企業３４，３５による検索内容の外部への漏洩が抑止される。
【０１８５】
次に、秘匿化検索システムにおける各装置間の連携処理を詳細に説明する。
図１８は、患者データ登録処理の手順の一例を示すシーケンス図である。データ管理サーバ１００のソフトウェア提供部１３０は、データ提供ソフトウェア１１１をデータ提供サーバ２００に送信する（ステップＳ９１）。データ提供サーバ２００では、データ提供機能導入部２２０がデータ提供ソフトウェア１１１を受信し、データ提供ソフトウェア１１１をデータ提供サーバ２００にインストールする（ステップＳ９２）。データ提供機能導入部２２０は、インストールが完了すると、データ提供部起動指示を出力する（ステップＳ９３）。データ提供部起動指示に応じて、データ提供サーバ２００がデータ提供部２３０を起動する。
【０１８６】
データ提供部２３０が起動されると、データ提供部２３０内の隔離鍵生成部２３３が、隔離鍵生成用のキーワード「ｓｅｅｄ１」の入力を受け付ける（ステップＳ９４）。隔離鍵生成部２３３は、キーワード「ｓｅｅｄ１」に基づいて隔離鍵、秘密鍵、およびプレ照合鍵を生成する（ステップＳ９５）。隔離鍵には、係数行列と関係秘密鍵が含まれる。隔離鍵生成部２３３は、生成した隔離鍵を隔離鍵記憶部２３２に格納する。
【０１８７】
データ提供部２３０のデータ登録要求部２３４は、プレ照合鍵をデータ管理サーバ１００に送信する（ステップＳ９６）。データ管理サーバ１００では、データ登録部１４０がプレ照合鍵を受信し、プレ照合鍵記憶部１７０に格納する（ステップＳ９７）。
【０１８８】
データ提供サーバ２００では、データ提供部２３０内のデータ登録要求部２３４が、平文の患者データをＤＢ２１０から取得する（ステップＳ９８）。データ登録要求部２３４は、平文内容に一意であり、かつ平文の内容に対して唯一のノイズを生成する（ステップＳ９９）。データ登録要求部２３４は、生成したノイズを用いて、平文のデータを暗号化する（ステップＳ１００）。データ登録要求部２３４は、暗号化によって生成された暗号文を、データ管理サーバ１００に送信する（ステップＳ１０１）。データ管理サーバ１００では、データ登録部１４０が暗号文を受信し、受信した暗号文を秘匿化ＤＢ１２０に格納する（ステップＳ１０２）。
【０１８９】
次に、データ利用環境の構築手順について説明する。
図１９は、データ利用環境の構築手順の一例を示すシーケンス図である。図１９に示す処理のステップＳ１１１〜Ｓ１１６は、図１３に示した第２の実施の形態のステップＳ４１〜Ｓ４６と同様である。以下、第２の実施の形態と異なるステップＳ１１７，Ｓ１１８について説明する。
【０１９０】
データ提供サーバ２００では、データ提供部２３０内の隔離鍵提供部２３５は、隔離鍵提供許可が入力されると、隔離鍵記憶部２３２から係数行列「Ａn」と関係秘密鍵「Ｓn」を取得する。そして隔離鍵提供部２３５は、取得した係数行列「Ａn」と関係秘密鍵「Ｓn」を、隔離鍵として端末装置４００に送信する（ステップＳ１１７）。
【０１９１】
端末装置４００では、データ利用部４２０内の隔離鍵取得部４２３が隔離鍵を受信する。隔離鍵取得部４２３は、受信した隔離鍵に示される係数行列「Ａn」と関係秘密鍵「Ｓn」を隔離鍵記憶部４２２に格納する（ステップＳ１１８）。
【０１９２】
次に、検索処理の手順について詳細に説明する。
図２０は、検索処理の手順の一例を示すシーケンス図である。端末装置４００のデータ利用部４２０は、検索担当者からの「ｓｅｅｄ２」に用いる文字列の入力を受け付ける（ステップＳ１２１）。受け付けた「ｓｅｅｄ２」は、検索要求部４２４が取得する。検索要求部４２４は、キーワード「ｓｅｅｄ２」に基づいて秘密鍵とプレ照合鍵とを生成する（ステップＳ１２２）。なおプレ照合鍵の生成には、隔離鍵記憶部４２２に格納されている関係秘密鍵が使用される。その後、検索要求部４２４は、プレ照合鍵をデータ管理サーバ１００に送信する（ステップＳ１２３）。
【０１９３】
データ管理サーバ１００では、データ登録部１４０がプレ照合鍵を受信し、プレ照合鍵記憶部１７０に格納する（ステップＳ１２４）。次にデータ登録部１４０は、端末装置４００から受信したプレ照合鍵とデータ提供サーバ２００から受信したプレ照合鍵とに基づいて、照合鍵を生成する（ステップＳ１２５）。データ登録部１４０は、生成した照合鍵を、例えば病院３２の組織名「登録者Ａ」と製薬企業３４の組織名「検索者Ｂ」との組に対応付けて、プレ照合鍵記憶部１７０に格納する。端末装置４００では、プレ照合鍵送信後、検索要求部４２４は関係秘密鍵「Ｓn」を削除する（ステップＳ１２６）。
【０１９４】
その後、端末装置４００のデータ利用部４２０は、検索担当者からの平文の検索クエリの入力を受け付ける（ステップＳ１２７）。受け付けた検索クエリは、検索要求部４２４が取得する。検索要求部４２４は、検索クエリに示される平文の内容に一意であり、かつ平文の内容ごとに唯一となるノイズを生成する（ステップＳ１２８）。さらに検索要求部４２４は、隔離鍵記憶部４２２に格納されている係数行列と、予め生成した秘密鍵と、生成したノイズとを用いて検索クエリを暗号化する（ステップＳ１２９）。そして検索要求部４２４は、暗号文の検索クエリを含む検索要求をデータ管理サーバ１００に送信する（ステップＳ１３０）。
【０１９５】
データ管理サーバ１００では、検索部１６０が検索要求を受信する。検索部１６０は、検索要求に示される検索クエリの暗号文と、秘匿化ＤＢ１２０に格納されている各暗号文とを照合する（ステップＳ１３１）。照合には、患者データを提供した病院３２（組織名「登録者Ａ」）と検索者である製薬企業（組織名「検索者Ｂ」）との組に対応する照合鍵が用いられる。そして検索部１６０は、照合により一致した暗号文を含むレコードの患者ＩＤまたは一致患者数を、検索結果として端末装置４００に送信する（ステップＳ１３２）。検索結果を受信した端末装置４００では、検索要求部４２４が検索結果をモニタに表示する（ステップＳ１３３）。
【０１９６】
このように、データ管理サーバ１００において、正当な検索者をプレ照合鍵によって管理することができる。すなわち、プレ照合鍵は、検索者（端末装置４００，５００）ごとに異なる秘密鍵を用いて生成されている。そのため、同じ病院から患者データの利用許諾を受けた製薬企業が複数存在する場合でも、ある製薬企業の検索内容が他の製薬企業に漏洩することが抑止される。
【０１９７】
また登録者ごとに個別の関係秘密鍵が生成されるため、検索者が利用できる患者データを、その検索者が利用許諾を受けた登録者によって提供された患者データに制限することができる。
【０１９８】
図２１は、登録者と検索者とが複数存在する場合の患者データの登録および利用手順の一例を示す図である。「登録者Ａ」である病院３２のデータ提供サーバ２００は、データ提供サーバ２００で任意に生成した「ｓｅｅｄ」（例えば文字列ａ＋時刻ａ）を用いて、関係秘密鍵と秘密鍵を生成する。データ提供サーバ２００は、生成した関係秘密鍵と秘密鍵とを用いてプレ照合鍵を生成する。図示していないが、データ提供サーバ２００は係数行列やノイズベクトルも生成する。そしてデータ提供サーバ２００は、プレ照合鍵をデータ管理サーバ１００のプレ照合鍵記憶部１７０に登録する。またデータ提供サーバ２００は、係数行列とノイズベクトルとを用いてＤＢ２１０内の患者データを暗号化し、暗号文となった患者データをデータ管理サーバ１００の秘匿化ＤＢ１２１に登録する。
【０１９９】
「登録者Ｂ」である病院３３のデータ提供サーバ３００は、データ提供サーバ３００で任意に生成した「ｓｅｅｄ」（例えば文字列ｂ＋時刻ｂ）を用いて、関係秘密鍵と秘密鍵を生成する。データ提供サーバ３００は、生成した関係秘密鍵と秘密鍵とを用いてプレ照合鍵を生成する。図示していないが、データ提供サーバ３００は係数行列やノイズベクトルも生成する。そしてデータ提供サーバ３００は、プレ照合鍵をデータ管理サーバ１００のプレ照合鍵記憶部１７０に登録する。またデータ提供サーバ３００は、係数行列とノイズベクトルとを用いてＤＢ３１０内の患者データを暗号化し、暗号文となった患者データをデータ管理サーバ１００の秘匿化ＤＢ１２２に登録する。
【０２００】
その後、病院３２は、製薬企業３４に対して、病院３２が登録した患者データの利用を許諾したものとする。また病院３３は、製薬企業３５に対して、病院３３が登録した患者データの利用を許諾したものとする。この場合、病院３２のデータ提供サーバ２００は、製薬企業３４の端末装置４００へ、係数行列と関係秘密鍵とを含む隔離鍵を送信する。また、病院３３のデータ提供サーバ３００は、製薬企業３５の端末装置５００へ、係数行列と関係秘密鍵とを含む隔離鍵を送信する。
【０２０１】
端末装置４００は、端末装置４００で任意に生成した「ｓｅｅｄ」（例えば文字列ｃ＋時刻ｃ）を用いて秘密鍵を生成する。端末装置４００は、データ提供サーバ２００から受信した隔離鍵のうちの関係秘密鍵と、自身が生成した秘密鍵とを用いてプレ照合鍵を生成する。図示していないが、端末装置４００はノイズベクトルも生成する。そして端末装置４００は、プレ照合鍵をデータ管理サーバ１００のプレ照合鍵記憶部１７０に登録する。
【０２０２】
端末装置４００は、検索担当者から検索クエリが入力されると、係数行列とノイズベクトルとを用いて検索クエリを暗号化し、暗号文となった検索クエリを含む検索要求を、データ管理サーバ１００に送信する。データ管理サーバ１００では、端末装置４００からの検索要求に応じ、データ提供サーバ２００が登録したプレ照合鍵と端末装置４００が登録したプレ照合鍵に基づいて生成した照合鍵を用いて、検索クエリと秘匿化ＤＢ１２１内の暗号文とを照合する。なお端末装置４００が登録したプレ照合鍵の生成には、データ提供サーバ２００が生成した関係秘密鍵が用いられていると共に、検索クエリの暗号化にはデータ提供サーバ２００が生成した係数行列が用いられている。そのためデータ管理サーバ１００は、端末装置４００が送信した検索要求に示される暗号文の検索クエリと、データ提供サーバ３００が提供した患者データが登録された秘匿化ＤＢ１２２内の暗号文とを照合することはできない。
【０２０３】
端末装置５００は、端末装置５００で任意に生成した「ｓｅｅｄ」（例えば文字列ｄ＋時刻ｄ）を用いて秘密鍵を生成する。端末装置５００は、データ提供サーバ３００から受信した隔離鍵のうちの関係秘密鍵と、自身が生成した秘密鍵とを用いてプレ照合鍵を生成する。図示していないが、端末装置５００はノイズベクトルも生成する。そして端末装置５００は、プレ照合鍵をデータ管理サーバ１００のプレ照合鍵記憶部１７０に登録する。
【０２０４】
端末装置５００は、検索担当者から検索クエリが入力されると、係数行列とノイズベクトルとを用いて検索クエリを暗号化し、暗号文となった検索クエリを含む検索要求を、データ管理サーバ１００に送信する。データ管理サーバ１００では、端末装置５００からの検索要求に応じ、データ提供サーバ３００が登録したプレ照合鍵と端末装置５００が登録したプレ照合鍵に基づいて生成した照合鍵を用いて、検索クエリと秘匿化ＤＢ１２２内の暗号文とを照合する。なお端末装置５００が登録したプレ照合鍵の生成には、データ提供サーバ３００が生成した関係秘密鍵が用いられていると共に、検索クエリの暗号化にはデータ提供サーバ３００が生成した係数行列が用いられている。そのためデータ管理サーバ１００は、端末装置５００が送信した検索要求に示される暗号文の検索クエリと、データ提供サーバ２００が提供した患者データが登録された秘匿化ＤＢ１２１内の暗号文とを照合することはできない。
【０２０５】
このようにして、データ管理サーバ１００において、患者データの提供元の異なる秘匿化ＤＢ１２１，１２２を管理し、各秘匿化ＤＢ１２１，１２２の利用を、登録者から利用許諾を受けた検索者に制限することができる。
【０２０６】
〔その他の実施の形態〕
第２・第３の実施の形態では、データ提供サーバ２００，３００から端末装置４００，５００へ、データ管理サーバ１００で盗聴できない通信経路で隔離鍵を送信しているが、適切な暗号化技術を用いればデータ管理サーバ１００を介して隔離鍵を送信してもよい。例えばデータ提供サーバ２００，３００と端末装置４００，５００とが、ディフィー・ヘルマン鍵共有プロトコルを用いて隔離鍵の暗号化通信を行えば、データ管理サーバ１００を経由する通信経路で隔離鍵を送信することができる。
【０２０７】
第１〜第３の実施の形態の暗号化方式としては、鍵生成アルゴリズム、暗号化アルゴリズム、及び解読アルゴリズムを含むＩＮＤ＿ＣＣＡ（INDistinguishability under Chosen Ciphertext Attack）セキュア公開鍵暗号化方式を用いることができる。このような暗号化方式として、例えば関係暗号化方式がある。関係暗号化方式を用いる場合、例えば照合処理において、ハミング距離の観点で、患者データ内の暗号文と検索クエリの暗号文との間の線形関係を発見する。検索部１６０は、線形関係を、以下の検証アルゴリズムに従い実行することができる。
（１）検索部１６０は、「ｓｋＲｌｉｎ：＝（τ，ｓｋ＿３）」を計算する。
（２）検索部１６０は、ｃｙ，ｃｘ，ｓｋＲｌｉｎに基づいて、以下の不等式をチェックする。
ｄｉｓｔ（ＤｅｃＣＰＡ（ｓｋ＿３，ｃｘ＿０＋ｃｙ＿０））＜２×τ×ｍ）  （２２）
式（２２）において、ｃｘは患者データに含まれる値の暗号文（第１暗号文）である。ｃｙは、検索クエリの暗号文（第２暗号文）である。「ｓｋＲｌｉｎ」は、関係秘密鍵である。「τ」は、ノイズ確率である。「ｓｋ＿３」は、ＩＮＤ＿ＣＣＡセキュア公開鍵暗号化方式の秘密鍵である。「ｃｘ＿０」は、第１暗号文の第１要素である。「ｃｙ＿０」は、第２暗号文の第１要素である。「ＤｅｃＣＰＡ」は、解読アルゴリズムである。「ｄｉｓｔ」は、ハミング距離演算子である。「ｍ」は、前記ＤｅｃＣＰＡ（ｓｋ＿３，ｃｘ＿０＋ｃｙ＿０）のビット長である。
【０２０８】
式（２２）が満たされる場合、検索部１６０は、第１暗号文と第２暗号文とが合致する（それぞれの平文が同一である）と判断する。このような線形関係の発見も、ハミング距離を用いており、ハミング距離に基づく照合処理の一例である。なお線形関係の発見方法は、前述の「特許文献４」に詳しい。
【０２０９】
また、データ提供サーバ２００，３００と端末装置４００，５００は、ノイズベクトルを係数行列「Ａ」、平文の平文ベクトル、およびその平文が属する属性の属性名の平文ベクトルを変数として含む関数に基づいて生成してもよい。これにより、暗号文の安全性を高めることができる。すなわち、秘匿化ＤＢ１２０内の異なる列に同じ暗号文がある場合、頻度分析攻撃などに対する安全性が低下する。そこで、ノイズベクトルの生成に、各平文が属する列の属性名を含む関数を用いることで、同じ平文でも列が異なれば異なる暗号文を生成することができ、頻度分析攻撃などによる平文の推定を抑止することができる。
【０２１０】
またデータ提供サーバ２００，３００と端末装置４００，５００は、平文を暗号化する際、「平文が属する属性の属性名 ＋平文」を暗号化してもよい。「+」はビット結合である。例えば属性名「身長」の平文ベクトルが「０１１０」で、患者の身長をｃｍ単位で示す平文「１００」の平文ベクトルが「１０１０」の場合、データ提供サーバ２００，３００と端末装置４００，５００は、「０１１０１０１０」を暗号化する。これにより、同じ平文でも列が異なれば異なる暗号文を生成することができ、頻度分析攻撃などによる平文の推定を抑止することができる。
【０２１１】
辞書データ１１３内の各平文の平文ベクトルは、データ管理サーバ１００が計算によって算出することができる。
図２２は、平文ベクトル生成処理の第１の例を示す図である。以下、図２２に示す処理をステップ番号に沿って説明する。
【０２１２】
［ステップＳ２０１］データ管理サーバ１００は、１つ目の平文ベクトルＸ（１）を生成する。例えばデータ管理サーバ１００は、「１」と「０」とがそれぞれＮ個（Ｎは１以上の整数）の任意のバイナリベクトルを生成する。そしてデータ管理サーバ１００は、生成したバイナリベクトルをＸ（１）とする。
【０２１３】
［ステップＳ２０２］データ管理サーバ１００は、２つ目の平文ベクトルＸ（２）を生成する。例えばデータ管理サーバ１００は、Ｘ（１）の全ビットを反転させたバイナリベクトルを生成する。そしてデータ管理サーバ１００、生成したバイナリベクトルをＸ（２）とする。このときＸ（１）とＸ（２）とのハミング距離は２Ｎとなる。
【０２１４】
［ステップＳ２０３］データ管理サーバ１００は、ｍ1を初期化する（ｍ1＝１）。
［ステップＳ２０４］データ管理サーバ１００は、ｍ1＜Ｎが満たされる間、ステップＳ２０５〜Ｓ２０７の処理を繰り返す。
【０２１５】
［ステップＳ２０５］データ管理サーバ１００は、ハミング距離が「２Ｎ−２ｍ1」となる平文ベクトル群を生成する。例えばデータ管理サーバ１００は、Ｘ（１）内のｍ1個の「１」のビットとｍ1個の「０」のビットとの位置の入れ替えによって生成できるすべてのベクトルを、いずれかの平文に割り当てる平文ベクトルとする。
【０２１６】
［ステップＳ２０６］データ管理サーバ１００は、生成した平文ベクトルの数が所定数に達したか中を判断する。所定数は、例えば暗号化対象の平文の数である。データ管理サーバ１００は、所定数に達した場合、繰り返し処理から抜けて、平文ベクトル生成処理を終了する。またデータ管理サーバ１００は、所定数に達していなければ、処理をステップＳ２０７に進める。
【０２１７】
［ステップＳ２０７］データ管理サーバ１００は、ｍ1に１を加算する（ｍ1＝ｍ1＋１）。
［ステップＳ２０８］データ管理サーバ１００は、ｍ1≧Ｎとなった場合、処理をステップＳ２０９に進める。
【０２１８】
［ステップＳ２０９］データ管理サーバ１００は、ビット数不足のため平文ベクトルの生成に失敗したことを示すアラートを出力する。この場合、データ管理サーバ１００の管理者は、係数行列のビット数などを含め、平文ベクトルの再設計を行うこととなる。
【０２１９】
このようにして、ハミング距離ができるだけ大きくなるような平文ベクトルを生成することができる。データ管理サーバ１００は、生成した複数の平文ベクトルそれぞれを、平文に対応付けて辞書データ１１３に登録する。
【０２２０】
また、データ管理サーバ１００は、ハミング距離が所定の閾値以上となるように平文ベクトルを生成することもできる。
図２３は、平文ベクトル生成処理の第２の例を示す図である。以下、図２３に示す処理をステップ番号に沿って説明する。
【０２２１】
［ステップＳ２２１］データ管理サーバ１００は、パラメータの値を設定する。例えばデータ管理サーバ１００は、ハミング距離閾値ＨＬ＿ＴＨに、予め管理者によって指定された値を設定する。またデータ管理サーバ１００は、平文ベクトル数Ｎ’（Ｎ’は１以上の整数）に、予め管理者によって指定された値を設定する。さらにデータ管理サーバ１００は、変数ｍ2に初期値「１」と設定する（ｍ2＝１）。
【０２２２】
［ステップＳ２２２］データ管理サーバ１００は、平文ベクトルＸ（１）を生成する。例えばデータ管理サーバ１００は、「１」の発生確率が約１／２の乱数発生器によりＮ’ビットのバイナリベクトルを生成し、生成したバイナリベクトルをＸ（１）とする。
【０２２３】
［ステップＳ２２３］データ管理サーバ１００は、ｍ2に１を加算する（ｍ2＝ｍ2＋１）。
［ステップＳ２２４］データ管理サーバ１００は、ｍ2≦２N’が満たされる間、ステップＳ２２５〜Ｓ２２９の処理を繰り返す。
【０２２４】
［ステップＳ２２５］データ管理サーバ１００は、平文ベクトル候補Ｘ（０）を生成する。例えばデータ管理サーバ１００は、「１」の発生確率が約１／２の乱数発生器によりＮ’ビットのバイナリベクトルを生成し、生成したバイナリベクトルをＸ（０）とする。
【０２２５】
［ステップＳ２２６］データ管理サーバ１００は、すでに生成済みの平文ベクトルそれぞれと、平文ベクトル候補Ｘ（０）とのハミング距離が、すべてハミング距離閾値ＨＬ＿ＴＨ以上か否かを判断する。データ管理サーバ１００は、すべての平文ベクトルに対してハミング距離がハミング距離閾値ＨＬ＿ＴＨ以上であれば、処理をステップＳ２２７に進める。またデータ管理サーバ１００は、少なくとも１つの平文ベクトルに対してハミング距離閾値ＨＬ＿ＴＨ未満であれば、処理をステップＳ２２９に進める。
【０２２６】
［ステップＳ２２７］データ管理サーバ１００は、平文ベクトル候補Ｘ（０）を、平文ベクトルＸ（ｍ2）とする。
［ステップＳ２２８］データ管理サーバ１００は、生成した平文ベクトルの数が所定数に到達したか否かを判断する。所定数は、例えば暗号化対象の平文の数である。データ管理サーバ１００は、所定数に達した場合、繰り返し処理から抜けて、平文ベクトル生成処理を終了する。またデータ管理サーバ１００は、所定数に達していなければ、処理をステップＳ２２９に進める。
【０２２７】
［ステップＳ２２９］データ管理サーバ１００は、ｍ2に１を加算する（ｍ2＝ｍ2＋１）。
［ステップＳ２３０］データ管理サーバ１００は、ｍ2＞２Ｎ’となった場合、処理をステップＳ２３１に進める。
【０２２８】
［ステップＳ２３１］データ管理サーバ１００は、ビット数不足のため平文ベクトルの生成に失敗したことを示すアラートを出力する。この場合、データ管理サーバ１００の管理者は、ハミング距離閾値ＨＬ＿ＴＨの変更、係数行列のビット数の変更などを含め、平文ベクトルの再設計を行うこととなる。
【０２２９】
このように生成する平文ベクトルをハミング距離閾値ＨＬ＿ＴＨ以上とすることで、複数の平文それぞれの平文ベクトルを暗号化した場合の暗号文の安全性が向上する。
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の２以上の構成（特徴）を組み合わせたものであってもよい。
【符号の説明】
【０２３０】
１  データ管理装置
１ａ  記憶部
１ｂ  処理部
２  データ提供装置
３  データ利用装置
【図１】
2020109447.tif 000011
【図２】
2020109447.tif 000012
【図３】
2020109447.tif 000013
【図４】
2020109447.tif 000014
【図５】
2020109447.tif 000015
【図６】
2020109447.tif 000016
【図７】
2020109447.tif 000017
【図８】
2020109447.tif 000018
【図９】
2020109447.tif 000019
【図１０】
2020109447.tif 000020
【図１１】
2020109447.tif 000021
【図１２】
2020109447.tif 000022
【図１３】
2020109447.tif 000023
【図１４】
2020109447.tif 000024
【図１５】
2020109447.tif 000025
【図１６】
2020109447.tif 000026
【図１７】
2020109447.tif 000027
【図１８】
2020109447.tif 000028
【図１９】
2020109447.tif 000029
【図２０】
2020109447.tif 000030
【図２１】
2020109447.tif 000031
【図２２】
2020109447.tif 000032
【図２３】
2020109447.tif 000033