以下、本実施の形態について図面を参照して説明する。なお各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。
〔第1の実施の形態〕
まず第1の実施の形態について説明する。
図1は、第1の実施の形態に係る秘密情報検索システムを説明する図である。図1には、データ管理装置1、データ提供装置2、およびデータ利用装置3を有する秘密情報検索システムが示されている。データ管理装置1は、例えば秘匿性の高い暗号文を復号せずに検索するための秘密情報検索方法の処理手順が記述された秘密情報検索プログラムを実行することにより、秘密情報検索方法による検索を実施することができる。
データ提供装置2は、検索対象となる秘密情報を提供する装置である。データ提供装置2は、例えば秘密情報を提供するための処理手順が記述されたプログラムを実行することにより、秘密情報を提供することができる。
データ利用装置3は、秘密情報を利用する装置である。データ利用装置3は、例えば秘密情報を利用するための処理手順が記述されたプログラムを実行することにより、秘密情報を利用することができる。
データ管理装置1は、秘密情報検索方法を実現するために、記憶部1aと処理部1bとを有する。記憶部1aは、例えばデータ管理装置1が有するメモリ、またはストレージ装置である。処理部1bは、例えばデータ管理装置1が有するプロセッサ、または演算回路である。データ提供装置2とデータ利用装置3もデータ管理装置1と同様に、記憶部と処理部とを有する。
以下、秘密情報の提供と利用の手順について説明する。
データ提供装置2は、秘密情報であり、検索対象となる第1平文を有している。データ提供装置2は、第1平文をデータ利用装置3で利用可能とするために、第1平文を暗号化してデータ管理装置1に登録する。例えばデータ提供装置2は、「1」の確率が所定値のバイナリの係数行列「A」を生成する(ステップS1)。
次にデータ提供装置2は、第1平文を暗号化し、第1暗号文「h1」を生成する(ステップS2)。例えばデータ提供装置2は、第1平文によって一意に決まり、かつ第1平文以外のいずれの平文のノイズベクトルとも異なる第1ノイズベクトル「e1」を生成する。データ提供装置2は、少なくとも第1平文に基づいて第1ノイズベクトル「e1」を生成する。なおデータ提供装置2は、係数行列「A」と第1平文とに基づいて第1ノイズベクトル「e1」を生成してもよい。
そしてデータ提供装置2は、生成した第1ノイズベクトル「e1」と係数行列「A」とを用いて、LPNに基づく暗号化方式により、第1平文を暗号化する。暗号化の際には、データ提供装置2は、例えば、要素が1となる確率が1/2もしくは約1/2となる第1平文ベクトル「x」に第1平文を変換する。この際、データ提供装置2は、第1平文以外のいずれの平文の平文ベクトルとも所定の閾値以上のハミング距離を有する第1平文ベクトル「x」に第1平文を変換してもよい。さらに、データ提供装置2は、すべての平文の平文ベクトル間のハミング距離が最大化されるように、各平文の平文ベクトルを生成してもよい。
第1平文ベクトル「x」に第1平文を変換した場合、データ提供装置2は、第1平文ベクトル「x」を暗号化することで、第1暗号文「h1」を生成する。例えばデータ提供装置2は、係数行列「A」の各行と平文ベクトル「x」のモジュロ2(mod2)上の内積を求め、その各行に対応する内積を要素とするベクトルと第1ノイズベクトル「e1」との排他的論理和を、第1暗号文「h1」とする。なお、2つのベクトル間の排他的論理和の計算では、2つのベクトルの対応する要素同士の排他的論理和の値を要素とするベクトルが得られる。
そしてデータ提供装置2は、暗号化によって得られた第1暗号文「h1」を、データ管理装置1に送信する(ステップS3)。データ管理装置1は、データ提供装置が送信した第1暗号文「h1」を受信し、受信した第1暗号文「h1」を記憶部1aに格納する(ステップS4)。
その後、データ提供装置2は、係数行列「A」を、データ管理装置1を経由しない伝送路でデータ利用装置3に送信する(ステップS5)。例えばデータ利用装置3は、データ管理装置1に係数行列「A」の取得要求を送信する。データ管理装置1は、係数行列「A」の取得要求を受信すると、データ管理装置1を経由しない通信経路による、取得要求の送信元装置であるデータ利用装置3への係数行列の送信を、第1暗号文「h1」の送信元装置であるデータ提供装置2に依頼する。データ提供装置2は、データ管理装置1からの依頼に応じて、係数行列「A」のデータ利用装置3への送信を行う。データ利用装置3は、データ提供装置2が送信した係数行列「A」を受信する(ステップS6)。
データ利用装置3は、検索クエリとして第2平文が入力されると、第2平文を暗号化し、第2暗号文「h2」を生成する(ステップS7)。例えばデータ利用装置3は、第2平文によって一意に決まり、かつ第2平文以外のいずれの平文のノイズベクトルとも異なる第2ノイズベクトル「e2」を生成する。例えばデータ利用装置3は、係数行列「A」と第2平文とに基づいて第2ノイズベクトル「e2」を生成することができる。
そしてデータ利用装置3は、生成した第2ノイズベクトル「e2」と係数行列「A」とを用いて、LPNに基づく暗号化方式により第2平文を暗号化する。暗号化の際には、データ利用装置3は、例えば要素が1となる確率が1/2もしくは約1/2となる第2平文ベクトル「y」に第2平文を変換する。この際、データ利用装置3は、第2平文以外のいずれの平文の平文ベクトルとも所定の閾値以上のハミング距離を有する第2平文ベクトル「y」に第2平文を変換してもよい。さらに、データ利用装置3は、すべての平文の平文ベクトル間のハミング距離が最大化されるように、各平文の平文ベクトルを生成してもよい。
第2平文ベクトル「y」に第2平文を変換した場合、データ利用装置3は、第2平文ベクトル「y」を暗号化することで、第2暗号文「h2」を生成する。例えばデータ利用装置3は、係数行列「A」の各行と平文ベクトル「y」のモジュロ2(mod2)上の内積を求め、その内積と第1ノイズベクトル「e2」との排他的論理和を、第2暗号文「h2」とする。
データ利用装置3は、暗号化によって得られた第2暗号文「h2」を、データ管理装置1に送信する(ステップS8)。データ管理装置1は、データ利用装置3が送信した第2暗号文「h2」を受信し、第1暗号文「h1」と第2暗号文「h2」とを照合する(ステップS9)。例えばデータ管理装置1の処理部1bが、第1暗号文「h1」と第2暗号文「h2」とのハミング距離に基づいて、第1平文と第2平文とが一致するか否かを判断する。例えば処理部1bは、第1暗号文「h1」と第2暗号文「h2」とのハミング距離が所定の閾値「θ」未満であれば、第1平文と第2平文とが一致すると判断する。また処理部1bは、第1暗号文「h1」と第2暗号文「h2」とのハミング距離が所定の閾値「θ」以上であれば、第1平文と第2平文とが不一致であると判断する。そして処理部1bは、判断結果をデータ利用装置3に送信する(ステップS10)。
このようにして、暗号化したまま第1平文と第2平文とを照合することができる。しかも、第1平文および第2平文の暗号化において、平文それぞれに一意であり、かつ唯一のノイズベクトルを用いてLPNに基づく暗号化方式で暗号化している。これにより、平文の対象の種類が少ない場合や、各種類に属する平文の量の偏りが大きい場合であっても、秘匿性の高い暗号文を生成することができる。
さらにデータ提供装置2とデータ利用装置3とは、データ管理装置1を介さずに係数行列「A」を共有している。これにより、データ管理装置1の管理者に係数行列「A」を知られずにすむ。第1の実施の形態で適用したLPNに基づく暗号化方式では、係数行列「A」が知られなければ、秘匿化のアルゴリズムやDBのフォーマットを知る者に対しても、DBの内容や検索内容の平文の復元を抑止することができる。すなわち、データ管理装置1の管理者が第1暗号文「h1」または第2暗号文「h2」を解読しようとしても、解読することはできない。その結果、攻撃者がデータ管理装置1の管理者として紛れ込んだ場合であっても、第1暗号文「h1」と第2暗号文「h2」とを安全に保つことができる。
なおデータ提供装置2は、係数行列「A」と第1平文とに基づいて生成された第1プレノイズベクトルと、乱数によって生成された第2プレノイズベクトルとに基づいて、第1ノイズベクトル「e1」を生成してもよい。この場合、データ利用装置3は、係数行列「A」と第2平文とに基づいて生成された第3プレノイズベクトルと、乱数によって生成された第4プレノイズベクトルとに基づいて、第2ノイズベクトル「e2」を生成する。乱数によって生成されたプレノイズベクトルを用いることにより、同じ平文でも、暗号化後には異なる暗号文となり、暗号文の安全性が向上する。
データ提供装置2は、係数行列「A」と第1平文と第1平文の属性を示す属性名とに基づいて、第1ノイズベクトルを生成してもよい。例えばデータ提供装置2は、係数行列「A」と第1平文の平文ベクトル「x」と第1平文の属性を示す属性名(平文)に対応する平文ベクトルとに基づいて、第1ノイズベクトルを生成する。この場合、データ利用装置3は、係数行列「A」と第2平文と第2平文の属性を示す属性名とに基づいて、第2ノイズベクトルを生成する。例えばデータ利用装置3は、係数行列「A」と第2平文の平文ベクトル「y」と第2平文の属性を示す属性名(平文)に対応する平文ベクトルとに基づいて、第2ノイズベクトルを生成する。これにより、内容が同じ複数の平文について、属性が異なれば異なる暗号文を生成することができる。各列に同じ暗号文がある場合、各列の平文候補を突き合わせることで推定されやすくなるが、属性の異なる内容が同じ複数の平文それぞれを異なる暗号文とすることで、平文の候補 を突き合わせることによる平文の推定が困難となり、暗号文の安全性が向上する。
データ提供装置2は、第1平文と第1平文の属性を示す属性名との組を暗号化することで、第1暗号文を生成してもよい。例えばデータ提供装置2は、第1平文の平文ベクトル「x」と第1平文の属性を示す属性名(平文)に対応する平文ベクトルとを結合し、結合して得られたベクトルを暗号化する。この場合、データ利用装置3は、第2平文と第2平文の属性を示す属性名との組を暗号化する。例えばデータ利用装置3は、第2平文の平文ベクトル「y」と第2平文の属性を示す属性名(平文)に対応する平文ベクトルとを結合し、結合して得られたベクトルを暗号化する。これにより、内容が同じ複数の平文について、属性が異なれば異なる暗号文を生成することができる。その結果、平文の候補を突き合わせることによる平文の推定が困難となり、暗号文の安全性が向上する。
さらに、データ提供装置2とデータ利用装置3とで関係秘密鍵を共有することで、暗号文の安全性をさらに高めることもできる。この場合、秘密情報検索システムの各装置は、以下のような処理を行う。
データ提供装置2は、関係秘密鍵と第1秘密鍵とを生成する。次にデータ提供装置2は、関係秘密鍵と第1秘密鍵とに基づいて、第1照合鍵を生成する。データ提供装置2は、生成した第1照合鍵をデータ管理装置1に送信する。データ管理装置1は、第1照合鍵を受信し、受信した第1照合鍵を記憶部1aに格納する。
またデータ提供装置2は、生成した関係秘密鍵をデータ利用装置3に送信する。例えばデータ提供装置2は、係数行列「A」と共に関係秘密鍵を送信する。データ利用装置3は、関係秘密鍵を受信する。
データ利用装置3は、第2秘密鍵を生成し、関係秘密鍵と第2秘密鍵とに基づいて、第2照合鍵を生成する。データ利用装置3は、生成した第2照合鍵をデータ管理装置1に送信する。データ管理装置1は、受信した第2照合鍵を記憶部1aに格納する。
その後、データ提供装置2は、第1平文の暗号化の際に、例えば第1ノイズベクトル「e1」、係数行列「A」、および第1秘密鍵を用いて第1平文を暗号化し、第1暗号文「h1」を生成する。また、データ利用装置3は、第2平文の暗号化の際に、例えば第2ノイズベクトル「e2」、係数行列「A」、および第2秘密鍵を用いて第2平文を暗号化し、第2暗号文「h2」を生成する。このようにして生成された第1暗号文「h1」と第2暗号文「h2」とを受信したデータ管理装置1は、照合処理では、第1照合鍵と第2照合鍵とを用いて、第1暗号文「h1」と第2暗号文「h2」とを照合する。例えばデータ管理装置1は、第1暗号文「h1」と第2暗号文「h2」とから、第1照合鍵と第2照合鍵とを用いて第1秘密鍵と第2秘密鍵の影響を除去して、第1暗号文「h1」と第2暗号文「h2」とのハミング距離を計算する。
このように、データ提供装置2とデータ利用装置3それぞれの照合鍵をデータ管理装置1で保持、管理することで、予め第2照合鍵を登録したデータ利用装置3に対してのみ、登録されたデータの利用を許可することができる。しかも、第2照合鍵の生成には、データ利用装置3の秘密鍵が利用されているため、データ利用装置3が複数ある場合、各データ利用装置3が生成する第2照合鍵は、それぞれ異なる照合鍵となる。そして、第2暗号文「h2」の生成にもデータ利用装置3の秘密鍵が利用されているため、データ利用装置3が複数ある場合、各データ利用装置3が生成する第2暗号文「h2」は、同じ内容の第2平文を暗号化したものであっても、それぞれ異なる第2暗号文「h2」となる。これにより、1つのデータ利用装置3を運用する企業が、他のデータ利用装置3が送信した第2暗号文「h2」を盗聴しても、第2暗号文「h2」の解読が困難となる。
なお、図1の例では、データ提供装置2は、係数行列「A」を、データ管理装置を経由しない伝送路でデータ利用装置3に送信しているが、係数行列「A」を暗号化して送信すれば、データ管理装置を経由する伝送路で送信することも可能である。この場合、例えばは、データ管理装置1は、データ利用装置3から係数行列「A」の取得要求を受信すると、取得要求の送信元装置であるデータ利用装置3への、暗号化した係数行列の送信を、第1暗号文「h1」の送信元装置であるデータ提供装置2に依頼する。データ提供装置2は、データ管理装置1からの依頼に応じて、係数行列「A」を、データ利用装置3で復号可能な暗号化方式で暗号化し、暗号化された係数行列「A」をデータ利用装置3へ送信する。データ利用装置3は、データ提供装置2が送信した係数行列「A」を受信すると、その係数行列「A」を復号する。
〔第2の実施の形態〕
次に第2の実施の形態について説明する。第2の実施の形態は、多数の医療機関が有する患者データを、患者データ収集活用基盤を用いて有効活用するものである。例えば患者データ収集活用基盤により、複数の病院のデータを統合してビッグデータ化し、ビッグデータを複数の製薬会社で活用できるようにする。これにより、製薬会社は、臨床試験のための調査(適合患者の人数など)を容易に把握できるようになる。
患者データ収集活用基盤は、ICT(Information and Communications Technology)企業が管理するクラウドを用いて実現するのが効率的である。クラウドを用いることで、病院や製薬会社からのビッグデータへのアクセスが容易となる。しかしながら、患者データは個人情報であり、クラウドの管理者に対しても秘匿しておくのが適切である。また製薬会社による検索の内容は、現在開発中の薬やターゲットの疾病等、企業戦略に直結する内容が多いため、検索内容についても秘匿しておくことにより、データ活用が安心して利用することができる。そこで、患者データ収集活用基盤を実現するクラウドは、例えばLPNに基づく暗号化方式を用いて、暗号化された患者データをDBで管理すると共に、暗号化された検索クエリを用いて、暗号文のままでデータ検索を行う。これにより、クラウドの管理者に対しても、患者データを秘匿しておくことができる。
なお、LPNに基づく暗号化方式で秘匿化する場合、平文の対象の種類が多く、各種類に属する平文の量の偏りが少ないことが安全性を担保する上での条件となる。この条件は、情報理論上、情報が「高minエントロピーを有する」ことと言い換えることができる。
ここで、複数の組織(例えば病院)のデータを同じ仕組みで使用する場合、DBのフォーマットや格納する属性名と値は、共通の仕様として公開される。しかもクラウドの管理者は、秘匿化のアルゴリズムを熟知している。すると、クラウドの管理者の中に悪意を有する者が存在した場合、患者データを暗号文のまま管理するだけでは不十分な場合があり得る。
そこで第2の実施の形態では、悪意を持った者がクラウドを管理するICT企業内に紛れ込んでいても、DBの内容や検索内容の平文を秘匿可能な秘匿化検索システムを提供する。
図2は、秘匿化検索システムの一例を示す図である。第2の実施の形態では、患者データ収集活用基盤31がクラウドによって構築されている。患者データ収集活用基盤31はデータ管理サーバ100を有している。データ管理サーバ100は、患者データを暗号文のままで管理するコンピュータである。データ管理サーバ100は、ネットワーク20を介して、病院32,33のデータ提供サーバ200,300と製薬企業34,35の端末装置400,500に接続されている。
病院32のデータ提供サーバ200は、病院32で治療した患者の電子カルテなどの患者データを蓄積し、その患者データを暗号化してデータ管理サーバ100に提供するコンピュータである。同様に、病院33のデータ提供サーバ300は、病院33で治療した患者の電子カルテなどの患者データを蓄積し、その患者データを暗号化してデータ管理サーバ100に提供する。
製薬企業34の端末装置400は、データ管理サーバ100で管理されている患者データを検索するために、製薬企業34の社員が使用するコンピュータである。製薬企業35の端末装置500は、データ管理サーバ100で管理されている患者データを検索するために、製薬企業35の社員が使用するコンピュータである。
このような秘匿化検索システムは、例えば医療情報を活用した製薬治験の効率化に有用である。例えば、製薬企業34,35は、多数の患者に有効なブロックバスタ薬開発とは別に、少数の患者の治療用の個別化医療薬の開発も行っている。個別化医療薬の開発では、対象となる疾患を有する患者も少数である。そのため、個別化医療薬の治験を計画する場合、どの病院にどの程度、被験者候補となり得る該当疾患の患者が居るか当りを付け、計画が成り立つかを判断することとなる。これを人手で行うには手間がかかりすぎる。そこで、患者データ収集活用基盤31で多数の病院32,33に分散する患者の電子カルテから抽出した患者データを集中管理することで、目的の疾患を有する患者や治験計画の条件を満たす患者を容易に探し出すことが可能となる。
図3は、データ管理サーバのハードウェアの一例を示す図である。データ管理サーバ100は、プロセッサ101によって装置全体が制御されている。プロセッサ101には、バス109を介してメモリ102と複数の周辺機器が接続されている。プロセッサ101は、マルチプロセッサであってもよい。プロセッサ101は、例えばCPU(Central Processing Unit)、MPU(Micro Processing Unit)、またはDSP(Digital Signal Processor)である。プロセッサ101がプログラムを実行することで実現する機能の少なくとも一部を、ASIC(Application Specific Integrated Circuit)、PLD(Programmable Logic Device)などの電子回路で実現してもよい。
メモリ102は、データ管理サーバ100の主記憶装置として使用される。メモリ102には、プロセッサ101に実行させるOS(Operating System)のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、メモリ102には、プロセッサ101による処理に利用する各種データが格納される。メモリ102としては、例えばRAM(Random Access Memory)などの揮発性の半導体記憶装置が使用される。
バス109に接続されている周辺機器としては、ストレージ装置103、グラフィック処理装置104、入力インタフェース105、光学ドライブ装置106、機器接続インタフェース107およびネットワークインタフェース108がある。
ストレージ装置103は、内蔵した記録媒体に対して、電気的または磁気的にデータの書き込みおよび読み出しを行う。ストレージ装置103は、コンピュータの補助記憶装置として使用される。ストレージ装置103には、OSのプログラム、アプリケーションプログラム、および各種データが格納される。なお、ストレージ装置103としては、例えばHDD(Hard Disk Drive)やSSD(Solid State Drive)を使用することができる。
グラフィック処理装置104には、モニタ21が接続されている。グラフィック処理装置104は、プロセッサ101からの命令に従って、画像をモニタ21の画面に表示させる。モニタ21としては、有機EL(Electro Luminescence)を用いた表示装置や液晶表示装置などがある。
入力インタフェース105には、キーボード22とマウス23とが接続されている。入力インタフェース105は、キーボード22やマウス23から送られてくる信号をプロセッサ101に送信する。なお、マウス23は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
光学ドライブ装置106は、レーザ光などを利用して、光ディスク24に記録されたデータの読み取りを行う。光ディスク24は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク24には、DVD(Digital Versatile Disc)、DVD-RAM、CD-ROM(Compact Disc Read Only Memory)、CD-R(Recordable)/RW(ReWritable)などがある。
機器接続インタフェース107は、データ管理サーバ100に周辺機器を接続するための通信インタフェースである。例えば機器接続インタフェース107には、メモリ装置25やメモリリーダライタ26を接続することができる。メモリ装置25は、機器接続インタフェース107との通信機能を搭載した記録媒体である。メモリリーダライタ26は、メモリカード27へのデータの書き込み、またはメモリカード27からのデータの読み出しを行う装置である。メモリカード27は、カード型の記録媒体である。
ネットワークインタフェース108は、ネットワーク20に接続されている。ネットワークインタフェース108は、ネットワーク20を介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。
データ管理サーバ100は、以上のようなハードウェア構成によって、第2の実施の形態の処理機能を実現することができる。
なお、データ提供サーバ200,300および端末装置400,500も、データ管理サーバ100と同様のハードウェアにより実現することができる。さらに図1に示したデータ管理装置1、データ提供装置2、およびデータ利用装置3も、データ管理サーバ100と同様のハードウェアにより実現することができる。
データ管理サーバ100、データ提供サーバ200,300、および端末装置400,500は、例えばコンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第2の実施の形態の処理機能を実現する。データ管理サーバ100、データ提供サーバ200,300および端末装置400,500それぞれに実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。例えば、データ管理サーバ100に実行させるプログラムをストレージ装置103に格納しておくことができる。プロセッサ101は、ストレージ装置103内のプログラムの少なくとも一部をメモリ102にロードし、プログラムを実行する。またデータ管理サーバ100に実行させるプログラムを、光ディスク24、メモリ装置25、メモリカード27などの可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、例えばプロセッサ101からの制御により、ストレージ装置103にインストールされた後、実行可能となる。またプロセッサ101が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
次に、秘匿化検索システムの各装置の機能について説明する。
図4は、秘匿化検索システムの機能を示すブロック図である。データ管理サーバ100は、ソフトウェア記憶部110、秘匿化DB120、ソフトウェア提供部130、データ登録部140、隔離鍵提供依頼部150、および検索部160を有する。
ソフトウェア記憶部110は、データ提供ソフトウェア111、データ利用ソフトウェア112、および辞書データ113を記憶する。データ提供ソフトウェア111は、データ提供サーバ200,300が患者データを提供するために使用するソフトウェアである。データ利用ソフトウェアは、端末装置400,500が患者データを検索するために使用するソフトウェアである。辞書データ113は、電子カルテに用いられる単語や数値に対応する平文ベクトルを示す情報である。
秘匿化DB120は、データ提供サーバ200,300から収集した、暗号文の患者データを、暗号文のまま管理するDBである。
ソフトウェア提供部130は、データ提供サーバ200,300または端末装置400,500に、患者データ収集活用基盤31を利用するためのソフトウェアを提供する。例えばソフトウェア提供部130は、データ提供サーバ200,300にデータ提供ソフトウェア111と辞書データ113とを送信する。またソフトウェア提供部130は、端末装置400,500にデータ利用ソフトウェア112と辞書データ113とを送信する。
データ登録部140は、データ提供サーバ200,300からのデータ登録要求に応じて、暗号文の患者データを秘匿化DB120に登録する。
隔離鍵提供依頼部150は、データ利用ソフトウェアの導入が完了した端末装置400,500からの隔離鍵取得要求を受信すると、端末装置400,500への隔離鍵提供依頼を、データ提供サーバ200,300に送信する。
検索部160は、端末装置400,500からの暗号化された検索クエリを含むデータ検索要求に応じて、秘匿化DB120に登録された患者データを検索する。この際、検索部160は、患者データと検索クエリとを暗号文のまま照合し、検索クエリに合致する患者データに示される患者IDを、秘匿化DB120から抽出する。そして検索部160は、抽出した患者IDを、検索要求の送信元の端末装置400,500に送信する。
データ提供サーバ200は、DB210、データ提供機能導入部220、およびデータ提供部230を有する。DB210は、患者データを平文で格納するDBである。
データ提供機能導入部220は、データ管理サーバ100からデータ提供ソフトウェア111と辞書データ113とを取得し、データ提供ソフトウェア111をデータ提供サーバ200にインストールする。これにより、データ提供サーバ200内にデータ提供部230が構築される。またデータ提供機能導入部220は、データ提供部230内に設けられた辞書記憶部231に、データ管理サーバ100から取得した辞書データ113を格納する。
データ提供部230は、DB210内の患者データを暗号化してデータ管理サーバ100に登録すると共に、登録した患者データの利用を許可する製薬企業の端末装置に、患者データの検索を可能とするための隔離鍵を提供する。これらの機能を実現するために、データ提供部230は、辞書記憶部231、隔離鍵記憶部232、隔離鍵生成部233、データ登録要求部234、および隔離鍵提供部235を有する。
辞書記憶部231は、患者の電子カルテに記載されている単語の平文ベクトルを示す辞書データを記憶する。
隔離鍵記憶部232は、データ管理サーバ100に登録する患者データの暗号化に使用する隔離鍵を記憶する。隔離鍵は、データ管理サーバ100からアクセスできないように管理される。
隔離鍵生成部233は、隔離鍵を生成する。隔離鍵生成部233は、生成した隔離鍵を隔離鍵記憶部232に格納する。
データ登録要求部234は、データ管理サーバ100への登録対象の患者データの暗号文を含むデータ登録要求を、データ管理サーバ100に送信する。例えばデータ登録要求部234は、まず登録対象の患者データをDB210から取得し、秘匿化DB120のフォーマットに合わせて、患者データを加工する。例えばデータ登録要求部234は、隔離鍵を用いて、秘匿化DB120に登録する属性ごとに、患者データに含まれる値を暗号化する。そしてデータ登録要求部234は、属性の値ごとに暗号化された、暗号文の患者データを含むデータ登録要求を、データ管理サーバ100に送信する。
隔離鍵提供部235は、データ管理サーバ100からの隔離鍵提供依頼に応じて、登録した患者データの利用を許可する製薬企業の端末装置へ、隔離鍵を送信する。なお隔離鍵提供部235は、隔離鍵を、データ管理サーバ100を経由せずに端末装置に送信する。
以上、データ提供サーバ200が有する機能を説明したが、データ提供サーバ300もデータ提供サーバ200と同様の機能を有する。
端末装置400は、データ利用機能導入部410とデータ利用部420とを有する。
データ利用機能導入部410は、データ管理サーバ100からデータ利用ソフトウェア112と辞書データ113とを取得し、データ利用ソフトウェア112を端末装置400にインストールする。これにより、端末装置400内にデータ利用部420が構築される。またデータ利用機能導入部410は、データ利用部420内に設けられた辞書記憶部421に、データ管理サーバ100から取得した辞書データ113を格納する。
データ利用部420は、データ管理サーバ100に暗号文の状態で管理されている患者データを利用する環境を、製薬企業34における患者データの利用者に提供する。例えばデータ利用部420は、データ管理サーバ100への検索要求の送信、および検索結果の表示を行う。これらの機能を実現するために、データ利用部420は、辞書記憶部421、隔離鍵記憶部422、隔離鍵取得部423、および検索要求部424を有する。
辞書記憶部421は、患者の電子カルテに記載されている単語の平文ベクトルを示す辞書データを記憶する。
隔離鍵記憶部422は、検索要求に含める検索クエリの暗号化に使用する隔離鍵を記憶する。隔離鍵は、データ管理サーバ100からアクセスできないように管理される。
隔離鍵取得部423は、データ提供サーバ200,300から提供される隔離鍵を取得する。例えば隔離鍵取得部423は、データ管理サーバ100に、隔離鍵取得要求を送信する。するとデータ管理サーバ100の隔離鍵提供依頼部150により、データ提供サーバ200,300に隔離鍵提供依頼が送信される。隔離鍵提供依頼に応じて、例えばデータ提供サーバ200の隔離鍵提供部235が、隔離鍵を端末装置400に送信する。そして隔離鍵取得部423は、端末装置400から送信された隔離鍵を取得する。隔離鍵取得部423は、取得した隔離鍵を、隔離鍵記憶部422に格納する。
検索要求部424は、患者データの利用者が入力した検索クエリを取得し、取得した検索クエリを、辞書データを用いて平文ベクトルにコード化する。次に検索要求部424は、コード化された検索クエリを、隔離鍵を用いて暗号化し、暗号文の検索 クエリ を含む検索要求をデータ管理サーバ100に送信する。検索要求部424は、データ管理サーバ100から検索結果を受信すると、検索結果の内容(例えば検索クエリに合致した患者データの患者IDや合致した患者数)を表示する。
図4に示した機能により、データ管理サーバ100の管理者に対しても患者データの内容を秘匿したまま、データ管理サーバ100において患者データを管理すると共に、製薬企業34,35による検索内容を秘匿した上での患者データの利用を可能とすることができる。なお、図4に示した各要素の機能は、例えば、その要素に対応するプログラムモジュールをコンピュータに実行させることで実現することができる。
次に、データ提供サーバ200,300が有する平文の患者データのDBについて説明する。
図5は、平文の患者データのDBの一例を示す図である。DB210には、例えば患者ごとのレコードが、行番号に対応付けて登録されている。各レコードには、属性名で示されたフィールドに、その属性名に対応する属性の値が設定されている。図5の例では、属性名として「患者ID」、「性別」、「身長」などがある。属性名「患者ID」のフィールドには、患者の識別子(患者ID)が設定される。属性名「性別」のフィールドには、患者の性別が設定される。属性名「身長」のフィールドには、患者の身長が設定される。データ提供サーバ200のDB210に登録されている各レコード内の値は、例えば平文の文字コードである。
データ登録要求部234は、患者のレコードをデータ管理サーバ100に登録する場合、そのレコードに設定された値(平文)を平文ベクトルに変換する。属性の平文の値に対応する平文ベクトルは、データ管理サーバ100から配布される辞書データ113に示されている。
図6は、辞書データの一例を示す図である。図6に示すように、辞書データ113には、平文の値に対応付けて、対応する平文に一意の平文ベクトルが設定されている。このような辞書データ113が、データ提供サーバ200,300と端末装置400,500とに配布される。これにより、データ提供サーバ200,300と端末装置400,500とは、それぞれ平文から平文ベクトルへの変換が可能となる。
そして患者のレコードに含まれる値(平文)は、データ管理サーバ100に登録する際に平文ベクトルに変換され、さらに暗号化される。その結果、データ管理サーバ100内の秘匿化DB120には、暗号文が設定される。なおデータ提供サーバ200,300は、患者データのうち、患者IDについては暗号化せずに、平文のまま秘匿化DB120に登録してもよい。
なお平文ベクトルは、 1と0の割合が確率的に約1/2なっている。また各平文ベクトル間のハミング距離は、例えば閾値以上となっている。データ管理サーバ100が各平文に対応する平文ベクトルを定義する際に、例えば各平文ベクトル間のハミング距離が最大化されるように、平文ベクトルの要素の値を決定してもよい。例えばデータ管理サーバ100は、多数生成したベクトルのうち、他のベクトルとのハミング距離が小さい方から所定数を除外した残りのベクトルを、各平文の平文ベクトルとして割り当ててもよい。
図7は、秘匿化DBの一例を示す図である。秘匿化DB120には、例えば患者ごとのレコードが、行番号に対応付けて登録されている。各レコードには、属性名で示されたフィールドに、その属性名に対応する属性の値が設定されている。図7の例では、属性名「患者ID」以外の属性名は暗号化されており、秘匿化DB120には暗号文が設定されている。また各レコードに設定された値も、属性名「患者ID」の値のみ平文であり、他の値は暗号文である。
次に、秘匿化検索システムで用いる暗号化方式について説明する。秘匿化検索システムでは、LPNに基づく暗号化方式の1つである。
秘匿化検索システムでは、データ管理サーバ100は、暗号文のまま患者データと検索クエリとを照合する。このような照合が可能な暗号化技術として、例えばLPNに基づく暗号化方式がある。LPNに基づく暗号化方式は、LPN問題を解く困難性を、暗号の安全性の根拠としている。LPN問題は、バイナリの連立一次方程式に少量でもノイズが加えられると、その連立一次方程式を解くのが困難になるというものである。LPN問題を解くことの困難性は、前述の非特許文献1に詳しい。
図8は、LPNに基づく暗号化方式を説明する図である。LPNに基づく暗号化方式の基本形は、以下の通りである。
暗号化式:h=Ax+e (1)
「A」は係数行列であり、この係数行列Aは要素の1の確率が1/2のバイナリ行列である。「e」はノイズベクトルであり、このノイズベクトル「e」は「1」の確率が「τ」のバイナリベクトルである。「τ」は、0.5未満(例えば「1/8」)の定数である。「x」は平文ベクトルである。「h」は、暗号文ベクトルである。式(1)の演算子「+」は、排他的論理和演算(XOR)を表している。
例えば係数行列「A」がq行n列(q,nは1以上の整数)の行列の場合、平文ベクトル「x」はn行1列である。「Ax」の各行は、係数行列「A」の各行と平文ベクトル「x」とのモジュロ2(mod2)上の内積であり、「Ax」の計算により、q行1列のベクトルが得られる。q行1列のベクトル「Ax」とq行1列のノイズベクトル「e」との排他的論理和を対応する要素同士で計算することで、q行1列の暗号文ベクトル「h」が得られる。
このようなLPNに基づく暗号化方式では、安全性担保のため、以下の条件が求められる。
(条件1)係数行列「A」のサイズが充分に大きいこと。
(条件2)平文の種類が多く偏りが少ない(平文集合が高minエントロピーを有する)こと。
データ管理サーバ100の検索部160は、LPNに基づく暗号化方式により、秘匿化DB120の暗号化された値(登録文)と、検索要求に含まれる暗号化された検索クエリ(検索文)とを照合する。例えば検索部160は、両者のハミング距離を計算し、ノイズ生成に用いる確率τに基づいて決定した閾値との比較を行うことで、両暗号文が適合するか否か(同じ平文かどうか)を判定する。なおLPNに基づく暗号化方式では、異なるノイズを用いて暗号化された登録文と検索文であっても、照合が可能である。
以下、基本的なLPNに基づく暗号化方式に関する課題について説明する。
<第1の課題>
係数行列「A」の大きさは、暗号化方式の決定時に任意に定めることができるため、(条件1)を満たすのは容易である。それに対して、安全性担保のための(条件2)を満たせるかどうかは、秘匿化DB120の構造に依存する。例えば属性名「性別」に設定される値は、「男」と「女」のみとなり、種類が少ない。このように秘匿化DB120では、平文集合の種類が少ない場合や、偏りが大きい場合があり得る。この場合、上記(条件2)が満たされない。(条件2)が満たされず、充分な数の暗号文のサンプルが有ると、以下のような手順で暗号文の解読が可能となる。
エントロピーの低い平文集合を暗号化すると以下のようになる。
h1=Ax1+e1
h2=Ax1+e2
:
hk=Ax1+ek
hk+1=Ax2+ek+1
: (2)
「h1,h2,・・・,hk,hk+1,・・・」は、登録された平文ごとの暗号文ベクトルである。「x1,x2」は、登録された平文の値(平文ベクトル)である。「e1,e2,・・・,ek,ek+1,・・・」は、登録された平文ごとのノイズのノイズベクトルである。この例では、平文の値が「x1,x2」の2種類しか存在せず、エントロピーが低い。この場合、攻撃者は、暗号文同士の照合判定を行うことにより、「h1~hk」が同じ平文を暗号化したものであると知ることが可能である。すなわちハミング距離が閾値未満の暗号文同士は、同じ平文であると判断できる。
攻撃者は、次に同じ平文を暗号化した暗号文ベクトル「h1~hk」について、ビットごとの多数決を行う。すなわち攻撃者は、暗号文ベクトル「h1~hk」それぞれの要素番号が同じ要素の値同士を比較し、「0」と「1」とのどちらが多いのかを判断する。ノイズベクトル「e」の各ビットが「1」である確率は「0」である確率より小さいため、攻撃者は、要素番号ごとの比較における「0」と「1」とのうちの多い方の値が、ベクトル「Ax1」における該当要素番号の値であると判断できる。同様の判断をすべての要素番号の要素について行えば、攻撃者は、ノイズベクトルeを消去したベクトル「Ax1」を推定することができる。
そして攻撃者は、同様の処理を他の平文に対応する暗号文でも行えば、ノイズのない連立方程式を得ることができる。LPN問題は、ノイズの存在によって解くことの困難性を高めたものである。そのため、攻撃者は、ノイズのない連立方程式を得ることができれば、その連立方程式を解くことが可能である。
このように、基本的なLPNに基づく暗号化方式では、平文の種類が少なく偏りが大きい場合に暗号化の強度が低下するという問題がある。しかも、患者データには、性別を示す属性のように、設定される値の種類が少ない属性が含まれる可能性が高い。そこで平文の種類が少なく偏りが大きい場合についての暗号強度をどのようにして高めるかが課題となる。
<第2の課題>
基本的なLPNに基づく暗号化方式では、暗号化式の係数行列「A」と平文候補とを知っている者が攻撃者となると、攻撃者は容易に暗号文を解読可能である。例えばデータ管理サーバ100の管理者の中に攻撃者が存在する場合、攻撃者は、暗号文同士の照合判定が可能である。
図9は、係数行列「A」を攻撃者が知っている場合の攻撃方法の一例を示す図である。図9の例では、秘匿化DB120のうち、属性名「性別」の属性のみを示している。ここで、性別係数行列「A」を知っている攻撃者が、属性名「性別」の暗号文は「男,女」のどちらかが暗号化されたものしか存在しないことも知っている場合を想定する。この場合、攻撃者は、以下の計算を行う。
ha=A×(男の平文ベクトル)+e (3)
hb=A×(女の平文ベクトル)+e (4)
次に攻撃者は、暗号文「ha,hb」それぞれと、秘匿化DB120内の属性名「性別」の属性に設定された暗号文「h1,h2,・・・」それぞれとの照合判定を行う。そして攻撃者は、暗号文「ha」と適合した暗号文について、平文「男」を暗号化したものであると判断できる。同様に、攻撃者は、暗号文「hb」と適合した暗号文について、平文「女」を暗号化したものであると判断できる。図9では、照合判断で適合する関係を実線で接続し、不適合の関係を破線で接続している。
なお、暗号文ベクトル「ha,hb」の計算に使用するノイズベクトルeは、登録された患者データの暗号化に用いたノイズベクトルと異なっていても、正しく照合可能である。
このように、暗号化式の係数行列「A」と平文候補とを知っている者が攻撃者になった場合、暗号文の解読が容易であるという問題がある。例えば、データ管理サーバ100の管理者に暗号化式の係数行列「A」が知られてしまった場合、管理者の中に悪意のある攻撃者が紛れ込んでいると、その攻撃者は、容易に暗号文を解読できてしまう。そこでデータ管理サーバ100の管理者が攻撃者になった場合について、どのようにして暗号文の解読の困難性を高めるかが課題となる。
以上、基本的なLPNに基づく暗号化方式に関する2つの課題を説明した。ここで、第1の課題の解決手段として、複数の属性を結合して、値の種類とばらつきを増やすことが考えられる。
図10は、複数の属性を結合した場合の暗号化の比較例を示す図である。図10の例では、DB41には、属性名「性別」、「身長」の属性が含まれている。このうち属性名「性別」に設定する値は「男,女」の2種類であり、種類とばらつきが少ない。そこで、DB41の2つの属性を結合することで、種類とばらつきを増やしたDB42を生成することが可能である。このDB42に基づいて患者データを暗号化して秘匿化DB43に登録すれば、属性名「性別」、「身長」の属性ごとに暗号化した場合に比べ、暗号強度の高い暗号化となる。
この場合、DB41内の全データを1列で格納すると、例えば「男」のみを抽出したい場合、「性別=男,身長=X」との照合を行うこととなる。このとき、Xは取り得るすべての値で検索することとなり、秘匿化DB43検索時の処理量が著しく増大する。そのため、第1の課題の解決手段として複数の属性を結合するのは適切ではない。
第2の実施の形態では、上記の2つの課題を解決するために、以下のような対策を施している。
・第1の課題の解決手段(平文ごとに異なる、平文によって一意に決まるノイズ生成)
第1の課題を解決するために、データ提供サーバ200,300と端末装置400,500は、暗号化する際のノイズベクトル「e」を、平文「x」の内容ごとに異なり、かつ「x」によって唯一つに決まるように生成する。
・第2の課題の解決手段(係数行列「A」の秘匿化)
第2の課題を解決するために、データ提供サーバ200,300と端末装置400,500とは、暗号化式の係数行列「A」をデータ管理サーバ100の管理者から隠す。例えばデータ提供サーバ200,300と端末装置400,500とのうちの1台で暗号化式の係数行列「A」を生成し、データ管理サーバ100を介さずに、データ提供サーバ200,300と端末装置400,500で係数行列「A」を共有する。
以下、係数行列「A」の秘匿化により、暗号文の安全性が向上する理由について説明する。
<平文の候補が既知で、係数行列「A」が未知の場合の暗号解読の困難性>
平文のサンプル数「Q」は、得られる連立方程式の数でもある。ここで、平文ベクトルのビット数「n」が連立方程式の数「Q」以上(n≧Q)の場合と、平文ベクトルのビット数「n」が連立方程式の数「Q」未満(n<Q)の場合とを分けて考える。
エントロピーによらず、平文ベクトルのビット数「n」が連立方程式の数「Q」以上(n≧Q)であれば、一般的なLPN問題であっても、総当たり法以外で解くことは困難である(詳細は前述の「非特許文献1」参照)。総当たり法は、すべての可能性を調査するものであり、実用的な時間での解読は困難である。そこで、以下、平文ベクトルのビット数「n」が連立方程式の数「Q」未満(n<Q)の場合の、暗号化解読の困難性について説明する。
まず、攻撃者にとって平文の一覧と暗号文の一覧が既知の場合の、攻撃者による攻撃方法を考える。
係数行列「A」がq行n列の行列の場合、LPN問題の暗号化式をベクトル形式で変形すると以下の式となる。
h=Ax+e=[a1
T,・・・,aq
T]Tx+e (5)
ベクトルの右上の「T」は、ベクトルの転置を表す記号である。「a1,・・・,aq」は、係数行列「A」の行ごとの値を要素とする、各行に対応するベクトルである。
式(5)において、暗号文ベクトル「h」と、平文ベクトル「x」の候補は既知である。 このとき攻撃者は、「q」に対して十分に多くの暗号文と平文候補(候補数をm(mは1以上の整数)とする)を用いて矛盾のない係数行列「A」とノイズベクトル「e」を求められれば、暗号文の解読が可能となる。
ここで係数行列「A」とノイズベクトル「e」を求める上で式(5)の各行に注目すると、各行の未知変数は独立である。そのため各行の方程式は連立できない。よって、どれか一つの行を解くことができれば、他の行も解ける。「Ax+e」における「A」の第1行に関する演算は以下の式(6)で表される。そこで、以下の1行を解くことを考える。
a1・x+e1=x・a1+e1=h1 (6)
式(6)の「・」は、2つのベクトルのモジュロ2(mod2)上の内積である。実際の処理においては、モジュロ2(mod2)上の内積は、バイナリベクトルの演算である。バイナリベクトルの演算は、実際の処理においては、バイナリベクトルの演算である。そこで、例えばデータ提供サーバ200,300または端末装置400,500は、ベクトルの要素ごとの論理積(AND)を計算し、その後、全要素の排他的論理和(XOR)を計算する。これにより、モジュロ2(mod2)上の内積が計算される。
平文ベクトル「x」の一覧と暗号文ベクトル「h」の一覧から平文候補ベクトル「Xk」と,暗号文候補ベクトル「Hk」をm(mは1以上の整数)組選び1つの式にまとめると以下の式となる。
式(7)の「Hk1」は、暗号文候補ベクトル「Hk」の1ビット目の値である(k=1,2,・・・,m)。ノイズベクトル「ek1」は、暗号文候補ベクトル「Hk」の生成に用いられたノイズベクトル「ek」の1ビット目の値である。
データ提供サーバ200,300および端末装置400,500は、暗号化する際のノイズベクトル「e」を、平文「x」の内容ごとに異なり、かつ「x」によって唯一つに決まるように生成する。すると、式(7)の最終項(右辺第2項)の各要素は、異なる平文に対応する異なるノイズベクトル「e」から集められる。平文ごとに異なるノイズベクトル「e」が生成されており、この最終項はノイズとして働く。
そして、式(7)を書き直すと以下のように一般的なLPN問題に基づく暗号化方式と同じ形となる。
H1’=XTa1+e1’ (8)
式(8)では暗号文の1ビットしか求まらず、暗号文を解読するには、暗号文のビット数倍の処理を行うこととなる。さらに、式(8)で用いられる平文と暗号文ベクトルの組はあくまで候補である。そのため、ここで求めた係数行列「A」もあくまで候補であり、すべての平文候補と対になる暗号文が矛盾なく生成できる「A」を見つけられて初めて解読できたこととなる。したがって、1つのLPN問題よりも解くことが難しい問題となる。すなわち、攻撃者が平文候補を知っており、平文集合のエントロピーが低くても、攻撃者は、各平文候補に対応する暗号文を特定するための係数行列「A」とノイズベクトル「e」を求められない。
ここ で、式(8)では、一般的なLPN問題における係数行列「A」に相当する係数行列が、平文ベクトルの集合である「XT」に置き換わっている。そのため、平文ベクトルの集合「XT」も「A」と同じ特性を持つことが求められる。よって、各平文に割り当てる平文ベクトルは、要素が1となる確率が1/2もしくは約1/2とすることで安全性が保たれる。さらに、各平文ベクトルは、解読するために解くべき連立方程式中のある一つの方程式の係数に相当する。そのため、平文ベクトル間のハミング距離が小さいと、連立方程式の従属項が多くなり、安全性が低下する。よって、平文ベクトルを決定する際、すべての平文ベクトル間のハミング距離がなるべく大きくなるように決定することが好ましい。
以上が、係数行列「A」の秘匿化により、暗号文の安全性が向上する理由である。
次に平文ごとに異なるノイズベクトルを生成する理由について説明する。例えばすべての平文に対して、暗号化の際に使用するノイズベクトルを1つに固定した場合を考える。その場合、式(8)の「e1’」の項の要素は、すべて同じ値となる。すると「e1’」の項の要素が「0」の場合と「1」の場合との2通りを試すことで、ノイズがないものとして扱えてしまう。そのため、平文ごとに異なるノイズベクトルを生成するのが適切である。
なお、上記の平文ごとのノイズの統一に関する説明は、係数行列「A」が共通であることを前提としている。係数行列「A」は、患者データの登録者(病院32,33)ごとに異なるものを使用することも可能である。この場合、異なる登録者(病院)間では、係数行列「A」が異なるので、平文ごとのノイズを統一しなくてもよい。
登録者(病院32,33)-検索者(製薬企業34,35)の関係が1対1の場合であれば、平文ごとのノイズを統一しなくても、1つの平文に対するノイズは2種なので、多数決によるノイズ除去は、τを極めて小さくしない限りできない。そのため、平文ごとのノイズを統一しなくても問題は生じない。検索者が多数になると、検索者間のノイズが統一されていない場合、1つの平文に対するノイズが多数になり、検索文を蓄積することでノイズを除去できてしまう。したがって、平文ごとにノイズを統一するのが適切である。すなわち、同じ鍵「A」を使う範囲にて、平文ごとに同じノイズを使用することが望ましい。
ノイズ統一の手段としては、以下の方法が考えられる。
係数行列「A」(後述する第3の実施の形態では関係秘密鍵「S」でも、「A」と「S」の両方でもよい)と平文ベクトルxから一意に定まるような関数にてノイズを生成する。
e=f(A,x) (9)
ただし、この関数「f」と平文候補ベクトル「x」をデータ管理サーバ100の管理者が知っていても、管理者がノイズベクトル「e」を推定できないような関数fが用いられる。ノイズベクトル「e」を求める関数の変数として係数行列「A」(または関係秘密鍵「S」)を用いているのは、データ管理サーバ100の管理者にノイズベクトル「e」が推定されることを抑止するためである。すなわち、データ管理サーバ100の管理者は、データ提供ソフトウェア111とデータ利用ソフトウェア112との設計も行っている場合がある。この場合、管理者は関数の形を知っている。ノイズベクトル生成用の関数を平文ベクトル「x」のみの関数にしてしまうと、データ管理サーバ100の管理者は、「x」の候補から容易にノイズベクトル「e」を生成できてしまう。それに対して、係数行列「A」(または関係秘密鍵「S」)を変数として用いた関数でノイズベクトルを生成すれば、関数「f」と平文候補ベクトル「x」が既知でもノイズベクトル「e」の推定が困難となる。
また、データ提供サーバ200,300と端末装置400,500とでノイズベクトル「e」を共有するためには、係数行列「A」のような共有の情報からノイズベクトルを生成できれば、効率的である。すなわちある装置で生成したノイズベクトルを他の装置に送信することでノイズベクトルの共有を図ったのでは、平文の種類が多数ある場合に、共有のための秘密の通信のデータ量や、ノイズベクトルを記憶するための記憶の量が増加する。各装置が共有する情報に基づいて、各装置がノイズベクトルを生成できることで、通信データ量の削減や、ノイズベクトルの記憶に使用するメモリ容量が削減される。
ノイズベクトルの生成に使用可能な関数として、MAC(Message Authentication Code)関数がある。例えばAES(Advanced Encryption Standard)-CBC(Cipher Block Chaining)-MACがある。また例えばハッシュ関数「Hash(A,S)」でノイズベクトルを生成することもできる。ハッシュ関数としては、例えばSHA(Secure Hash Algorithm)-2を用いることができる。ノイズベクトル内の値が「1」の確率「τ」を1/8にする場合、確率「1/2」の乱数を3個作って、得られた乱数の論理積をとることで実現できる。
なお、係数行列「A」と平文ベクトル「x」に基づき生成したベクトル(第1プレノイズベクトル)と、ランダムに生成したベクトル(第2プレノイズベクトル)とを加算(排他的論理和)したものを、暗号化に使用するノイズベクトルとすることもできる。第1プレノイズベクトルを利用するのは、データ管理サーバ100の管理者による解読を困難にするためである。第2プレノイズベクトルを利用するのは、暗号文の患者データが外部に漏えいしたとき、データ管理サーバ100の管理者以外の攻撃者からの攻撃に対する安全性を高めるためである。暗号化に使用するノイズベクトルの生成に第2プレノイズベクトルを用いることで、同じ平文でも異なる暗号文となり、暗号文の安全性が向上する。
なお2種類のプレノイズベクトルを加算してノイズベクトルを生成する場合におけるノイズベクトル内の「1」の要素の確率は、以下のようにして設定できる。
ここで、第1・第2プレノイズベクトルそれぞれの要素の値が「1」の確率を「p」、2種のベクトルを加算して得られるノイズベクトルの要素の値が「1」の確率を「psum」とおく。このとき、プレノイズベクトルの和(排他的論理和)が「1」となるのは、2つのベクトルの対応する要素が互いに異なる値のときでる。そのため、確率「psum」は、以下の式で与えられる。
psum=2p(1-p) (10)
式(10)を確率「p」について解くと、以下の式となる。
式(11)によって、所望の確率「psum」を得るための2つのプレノイズベクトルにおける要素の値が「1」の確率pを決定できる。
次に秘匿化検索システムにおける患者データの登録および利用の処理手順について詳細に説明する。
図11は、患者データの登録および利用処理の概要を示す図である。データ提供サーバ200は、係数行列「An」を生成する(ステップS11)。次にデータ提供サーバ200は、生成した係数行列「An」を、隔離鍵として端末装置400に送信する(ステップS12)。端末装置400は、データ提供サーバ200から隔離鍵を取得する(ステップS13)。
その後、データ提供サーバ200は、患者データを暗号化する(ステップS14)。例えばデータ提供サーバ200は、患者データ内の単語の平文を、平文ベクトル「xi」に変換する。次にデータ提供サーバ200は、係数行列「An」と平文ベクトル「xi」とを用いて、ノイズベクトル「en,i」を生成する。例えばノイズベクトル「en,i」は、以下の式で生成される。
en,i=fe(An,xi)+ea (12)
式(12)のeaは、ランダムな値を設定したベクトル(前述の第2プレノイズベクトル)である。式(12)の「+」は、排他的論理和を示す。次にデータ提供サーバ200は、ノイズベクトル「en,i」を用いて、以下の式により暗号ベクトル「hn」を生成する。
hn=Anxi+en,i (13)
式(13)の「+」は、排他的論理和を示す。患者データの暗号化が完了すると、データ提供サーバ200は、暗号ベクトル「hn」を登録暗号文として含むデータ登録要求を、データ管理サーバ100に送信する(ステップS15)。送信された登録暗号文は、データ管理サーバ100の秘匿化DB120に格納される。
その後、製薬企業34の検索担当者が端末装置400に検索クエリとなる文字列を入力すると、端末装置400は、検索クエリを暗号化する(ステップS16)。例えば端末装置400は、検索クエリの平文を、平文ベクトル「yi」に変換する。次に端末装置400は、係数行列「An」と平文ベクトル「yi」とを用いて、ノイズベクトル「en,j」を生成する。例えばノイズベクトル「en,j」は、以下の式で生成される。
en,j=fe(An,xj)+e (14)
式(14)のeは、ランダムな値を設定したベクトル(前述の第2プレノイズベクトル)である。式(14)の「+」は、排他的論理和を示す。次にデータ提供サーバ200は、ノイズベクトル「en,j」を用いて、以下の式により暗号ベクトル「hm」を生成する。
hm=Anxj+en,j (15)
式(15)の「+」は、排他的論理和を示す。検索クエリの暗号化が完了すると、端末装置400は、暗号ベクトル「hm」を検索暗号文として含むデータ検索要求を、データ管理サーバ100に送信する(ステップS17)。
データ管理サーバ100は、秘匿化DB120に格納された暗号文と検索暗号文とを照合する(ステップS18)。例えばデータ管理サーバ100は、暗号ベクトル「hn」と暗号ベクトル「hm」とを照合する場合、暗号ベクトル「hn」と暗号ベクトル「hm」とのハミング距離を計算する。例えばデータ管理サーバ100は、以下の式により、2つのベクトルの排他的論理和「r」を計算する。
式(16)は、展開すると以下のように表すことができる。
データ提供サーバ200と端末装置400とで同じ係数行列「An」を使用している。そのため、患者データ内の単語を示す平文ベクトル「xi」と検索クエリを示す平文ベクトル「yj」とが等しければ「Anxi」と「Anyj」とは一致する。この場合、「Anxi」と「Anyj」の排他的論理和をとると、すべての要素の値は「0」となる。したがって式(17)は、平文ベクトル「xi」と平文ベクトル「yj」とが同じであれば、第1プレノイズベクトルも同じであり、第2プレノイズベクトル同士の排他的論理和となる。第2プレノイズベクトルの要素の値が「1」である確率「τ」は例えば「1/8」程度に抑えられているため、2つのノイズベクトルの排他的論理和における値が「1」の要素の数も、所定値以下となる。
データ管理サーバ100は、式(16)の計算後、排他的論理和「r」のハミング重み「HW(r)」を計算する。ハミング重みは、ベクトルの「0」以外の要素の数である。得られたハミング重み「HW(r)」が、暗号ベクトル「hn」と暗号ベクトル「hm」とのハミング距離を表している 。
なお第2プレノイズベクトルは、検索性能と外部への漏えいに対するリスクとを考慮して、省略してもよい。この場合、同じ平文に対する暗号文は完全に一致する。そのため、照合処理は全ビットの一致/不一致判定でよい。また、第1プレノイズベクトルの「1」の確率は1/2以上であってもよい。
データ管理サーバ100は、「HW(r)」が所定の閾値「θ」(θは1以上の整数)未満か否かを判断する。データ管理サーバ100は、「HW(r)」が閾値「θ」未満であれば(HW(r)<θ)、照合に成功したと判断する。またデータ管理サーバ100は、「HW(r)」が閾値「θ」以上であれば(HW(r)≧θ)、照合に失敗したと判断する。
データ管理サーバ100は、秘匿化DB120に格納されたすべての暗号文についての検索暗号文との照合が終了すると、照合に成功した暗号文を含むレコードの患者IDを、検索結果として端末装置400に送信する(ステップS19)。
このようにして、係数行列「An」をデータ管理サーバ100の管理者に対して秘匿した状態でも、秘匿化DB120内の暗号文を、暗号状態のまま検索暗号文と照合することができる。しかもデータ管理サーバ100の管理者は係数行列「An」を知らないため、患者データの内容や検索クエリを知ることができない。
以下、秘匿化検索システムにおける各装置間の連携処理を詳細に説明する。
図12は、患者データ登録処理の手順の一例を示すシーケンス図である。データ管理サーバ100のソフトウェア提供部130は、データ提供ソフトウェア111をデータ提供サーバ200に送信する(ステップS21)。例えばデータ提供サーバ200の管理担当者がデータ提供サーバ200へデータ提供ソフトウェア111のインストール指示を入力すると、データ提供サーバ200からデータ管理サーバ100へ、データ提供ソフトウェア111の取得要求が送信される。ソフトウェア提供部130は、データ提供サーバ200からのデータ提供ソフトウェア111の取得要求に応じて、データ提供ソフトウェア111を送信する。この際、ソフトウェア提供部130は、例えばデータ提供ソフトウェア111と共に、隔離鍵生成およびデータ登録依頼をデータ提供サーバ200に送信する。
データ提供サーバ200では、データ提供機能導入部220がデータ提供ソフトウェア111を受信し、データ提供ソフトウェア111をデータ提供サーバ200にインストールする(ステップS22)。データ提供機能導入部220は、インストールが完了すると、データ提供部起動指示を出力する(ステップS23)。データ提供部起動指示に応じて、データ提供サーバ200がデータ提供部230を起動する。
データ提供部230が起動されると、データ提供部230内の隔離鍵生成部233が、隔離鍵生成用のキーワード「seed1」の入力を受け付ける(ステップS24)。隔離鍵生成部233は、キーワード「seed1」に基づいて係数行列「A」を生成する(ステップS25)。隔離鍵生成部233は、生成した係数行列「A」を、隔離鍵として隔離鍵記憶部232に格納する。
データ登録要求部234は、平文の患者データをDB210から取得する(ステップS26)。データ登録要求部234は、平文内容に一意であり、かつ平文の内容に対して唯一のノイズを生成する(ステップS27)。データ登録要求部234は、生成したノイズを用いて、平文のデータを暗号化する(ステップS28)。データ登録要求部234は、暗号化によって生成された暗号文を、データ管理サーバ100に送信する(ステップS29)。データ管理サーバ100では、データ登録部140が暗号文を受信し、受信した暗号文を秘匿化DB120に格納する(ステップS30)。
このようにして、患者データの暗号文が秘匿化DB120に登録される。その後、製薬企業34において患者データを利用する場合、製薬企業の34の検索担当者は、まず端末装置400にデータ利用環境を構築する。
図13は、データ利用環境の構築手順の一例を示すシーケンス図である。データ管理サーバ100のソフトウェア提供部130は、データ利用ソフトウェア112を端末装置400に送信する(ステップS41)。例えば検索担当者が端末装置400にデータソフトウェアのインストール指示を入力すると、端末装置400からデータ管理サーバ100へ、データ利用ソフトウェア112の取得要求が送信される。ソフトウェア提供部130は、端末装置400からのデータ利用ソフトウェア112の取得要求に応じて、データ利用ソフトウェア112を送信する。この際、ソフトウェア提供部130は、例えばデータ利用ソフトウェア112と共に、隔離鍵取得依頼を端末装置400に送信する。
端末装置400では、データ利用機能導入部410がデータ利用ソフトウェア112を受信し、データ利用ソフトウェア112を端末装置400にインストールする(ステップS42)。データ利用機能導入部410は、インストールが完了すると、データ利用部起動指示を出力する(ステップS43)。データ利用部起動指示に応じて、端末装置400がデータ利用部420を起動する。
データ利用部420が起動されると、データ利用部420内の隔離鍵取得部423が、データ利用部420の起動完了通知をデータ管理サーバ100に送信する(ステップS44)。起動完了通知は、例えば隔離鍵取得要求を兼ねているものとする。
データ管理サーバ100では、隔離鍵提供依頼部150が起動完了通知を受信する。そして隔離鍵提供依頼部150は、隔離鍵提供依頼をデータ提供サーバ200に送信する(ステップS45)。
データ提供サーバ200では、データ提供部230内の隔離鍵提供部235が、隔離鍵提供依頼を受信する。隔離鍵提供部235は、病院32におけるデータ提供サーバ200の管理担当者からの隔離鍵提供許可の入力を受け付ける(ステップS46)。隔離鍵提供部235は、隔離鍵提供許可が入力されると、隔離鍵記憶部232から隔離鍵を取得する。そして隔離鍵提供部235は、取得した隔離鍵を端末装置400に送信する(ステップS47)。
端末装置400では、データ利用部420内の隔離鍵取得部423が隔離鍵を受信する。隔離鍵取得部423は、受信した隔離鍵を隔離鍵記憶部422に格納する(ステップS48)。
このようにして、端末装置400に、データ管理サーバ100において暗号文で管理されている患者データの利用環境が構築される。その後、検索担当者は、検索クエリの入力により、データ管理サーバ100で管理されている患者データの検索を行う。
図14は、検索処理の手順の一例を示すシーケンス図である。端末装置400のデータ利用部420は、検索担当者からの平文の検索クエリの入力を受け付ける(ステップS51)。受け付けた検索クエリは、検索要求部424が取得する。検索要求部424は、検索クエリに示される平文の内容に一意であり、かつ平文の内容に対して唯一のノイズを生成する(ステップS52)。さらに検索要求部424は、隔離鍵記憶部422に格納されている隔離鍵と生成したノイズとを用いて検索クエリを暗号化する(ステップS53)。そして検索要求部424は、暗号文の検索クエリを含む検索要求をデータ管理サーバ100に送信する(ステップS54)。
データ管理サーバ100では、検索部160が検索要求を受信する。検索部160は、検索要求に示される検索クエリの暗号文と、秘匿化DB120に格納されている各暗号文とを照合する(ステップS55)。照合処理の詳細は後述する(図15参照)。そして検索部160は、照合により一致した暗号文を含むレコードの患者IDまたは一致患者数を、検索結果として端末装置400に送信する(ステップS56)。検索結果を受信した端末装置400では、検索要求部424が検索結果をモニタに表示する(ステップS57)。
このようにして検索クエリに合致する値を含む患者データを検索することができる。以下、照合処理について詳細に説明する。
図15は、照合処理の詳細を示すフローチャートである。以下、図15に示す処理をステップ番号に沿って説明する。
[ステップS61]検索部160は、秘匿化DB120から、未選択のレコードを1つ選択する。
[ステップS62]検索部160は、選択したレコード内のデータ(暗号文)と検索クエリ(暗号文)とのハミング距離を計算する。例えば検索部160は、暗号文同士の排他的論理和(XOR)を計算し、排他的論理和の計算結果に含まれる値が「1」の要素数(ハミング重み)を計数する。計数した値がハミング距離である。
[ステップS63]検索部160は、ハミング距離が閾値未満か否かを判断する。検索部160は、ハミング距離が閾値未満であれば、処理をステップS64に進める。また検索部160は、ハミング距離が閾値以上であれば、処理をステップS65に進める。
[ステップS64]検索部160は、選択したレコードの患者IDを、一致患者リストに記録する。
[ステップS65]検索部160は、秘匿化DB120内に未選択のレコードがあるか否かを判断する。検索部160は、未選択のレコードがある場合、処理をステップS61に進める。また検索部160は、すべてのレコードが選択済みであれば、処理をステップS66に進める。
[ステップS66]検索部160は、一致患者リストもしくは一致患者数を 検索 結果として端末装置400に送信する。
このようにして製薬企業34の検索担当者は、暗号文で管理された患者データの検索結果を得ることができる。
第2の実施の形態に係る秘匿化検索システムでは、患者データおよび検索クエリを暗号化する際のノイズを、平文の内容ごとに異なり、かつ平文の内容に唯一に決まるように決定している。これにより、平文集合の種類が少ない場合や偏りが大きい場合の暗号強度の低下を抑止することができる。
また第2の実施の形態に係る秘匿化検索システムでは、係数行列「A」を、データ管理サーバ100を経由せずに、データ提供サーバ200,300と端末装置400,500とで共有している。これにより、データ管理サーバ100の管理者が攻撃者となった場合であっても、患者データの暗号文の攻撃者による解読を抑止することができる。
〔第3の実施の形態〕
次に第3の実施の形態について説明する。第3の実施の形態に係る秘匿化検索システムは、秘匿化DB120に対する参照権を製薬企業34,35ごとに予め与えておき、その参照権を示すプレ照合鍵をデータ管理サーバ100で管理するようにしたものである。以下、第3の実施の形態における第2の実施の形態との相違点を中心に説明する。
図16は、参照権の制御を伴う患者データの登録および利用手順の一例を示す図である。第3の実施の形態では、図4に示した第2の実施の形態の各装置の要素に加え、データ管理サーバ100にプレ照合鍵記憶部170が設けられている。なお図16の例では、データ提供ソフトウェア111とデータ利用ソフトウェア112とが、それぞれデータ提供サーバ200と端末装置400にインストール済みであるものとする。
病院32のシステム担当者は、データ提供サーバ200に鍵生成のための任意の文字列を入力する。データ提供サーバ200は、例えば入力された文字列と現在の時刻とを結合したデータを「seed1」として、「seed1」に基づいて関係秘密鍵と秘密鍵とを生成する。次にデータ提供サーバ200は、関係秘密鍵と秘密鍵とを用いてプレ照合鍵を生成する。そしてデータ提供サーバ200は、プレ照合鍵をデータ管理サーバ100に登録する。データ管理サーバ100では、データ提供サーバ200から渡されたプレ照合鍵を、登録者(病院32)の組織名「登録者A」に対応付けて、プレ照合鍵記憶部170に格納する。なお、データ提供サーバ200が生成したプレ照合鍵は、第1の実施の形態に示す第1照合鍵の一例である。
その後、データ提供サーバ200は、DB210内の患者データの属性ごとの値を暗号化して、暗号文をデータ管理サーバ100に登録する。データ管理サーバ100では、データ提供サーバ200から渡された暗号文を、秘匿化DB120に格納する。
ここで、病院32において、製薬企業34に対して患者データの利用を許可した場合、データ提供サーバ200から端末装置400へ隔離鍵を送信する。送信される隔離鍵には、第2の実施の形態で説明した係数行列に加え、関係秘密鍵が含められる。なお隔離鍵は、データ管理サーバ100を経由せずに送信される。端末装置400は、受信した隔離鍵を、隔離鍵の提供元(病院32)の組織名「登録者A」に対応付けて、隔離鍵記憶部422に格納する。
製薬企業34の検索担当者は、端末装置400に鍵生成のための任意の文字列を入力する。端末装置400は、例えば入力された文字列と現在の時刻とを結合したデータを「seed2」として、「seed2」に基づいて秘密鍵を生成する。次に端末装置400は、生成した秘密鍵と、隔離鍵記憶部422に格納されている関係秘密鍵とを用いて、プレ照合鍵を生成する。そして端末装置400は、プレ照合鍵をデータ管理サーバ100に登録する。データ管理サーバ100では、端末装置400から渡されたプレ照合鍵を、検索者(製薬企業34)の組織名「検索者B」に対応付けて、プレ照合鍵記憶部170に格納する。なお、端末装置400が生成したプレ照合鍵は、第1の実施の形態に示す第2照合鍵の一例である。
その後、製薬企業34において病院32が提供した患者データを検索する場合、検索担当者は、検索クエリを入力する。端末装置400は、入力された検索クエリを暗号化し、暗号文の検索クエリを含む検索要求をデータ管理サーバ100に送信する。データ管理サーバ100は、端末装置400から検索要求を受信すると、患者データを登録した病院32「登録者A」のプレ照合鍵と検索者である製薬企業34「検索者B」とのプレ照合鍵を用いて、照合鍵を生成する。そしてデータ管理サーバ100は、照合鍵を用いて、暗号文のままで検索クエリと患者データとの照合を行い、一致した患者のIDまたは一致患者数を示す検索結果を端末装置400に送信する。
図17は、参照権の制御を伴う暗号化方式の一例を示す図である。データ提供サーバ200は、複数の鍵を生成する(ステップS71)。生成する鍵は、秘密鍵「kn」、プレ照合鍵「Pn」、係数行列「An」、および関係秘密鍵「Sn」である。プレ照合鍵「Pn」は、例えば秘密鍵「kn」と関係秘密鍵「Sn」との排他的論理和により生成される。そしてデータ提供サーバ200は、プレ照合鍵「Pn」をデータ管理サーバ100に送信する(ステップS72)。
さらにデータ提供サーバ200は、患者データを暗号化する(ステップS73)。例えばデータ提供サーバ200は、患者データの属性の値に対応する平文ベクトル「xi」と係数行列「An」とに基づいて、第1プレノイズベクトル「fe(An,xi)」を生成する。次にデータ提供サーバ200は、乱数によって第2プレノイズベクトル「e」を生成する。そしてデータ提供サーバ200は、2つのプレノイズベクトルの排他的論理和をノイズベクトル「en,i」とする。
データ提供サーバ200は、係数行列「An」、ノイズベクトル「en,i」、および秘密鍵「kn」を用いて、平文ベクトル「xi」を暗号化する。例えばデータ提供サーバ200は、以下の式により平文ベクトル「xi」を暗号化した暗号文ベクトル「hn」を生成する。
式(18)では、係数行列「An」の各行と平文ベクトル「xi」とのモジュロ2(mod2)上の内積の計算結果を各要素とするベクトルと、ノイズベクトル「en,i」および秘密鍵「kn」それぞれとの排他的論理和が、暗号文ベクトル「hn」となっている。
暗号文ベクトル「hn」を生成後、データ提供サーバ200は、データ管理サーバ100に、暗号文ベクトル「hn」を登録暗号文として含むデータ登録要求を送信する(ステップS74)。これにより、データ管理サーバ100には、患者データが暗号化されて秘匿化DB120に格納される。
その後、データ提供サーバ200は、端末装置400に係数行列「An」と関係秘密鍵「Sn」とを含む隔離鍵を送信する(ステップS75)。端末装置400は、隔離鍵を取得する(ステップS76)。次に端末装置400は、秘密鍵「km」とプレ照合鍵「Pm」とを生成する(ステップS77)。そして端末装置400は、プレ照合鍵「Pm」をデータ管理サーバ100に送信する(ステップS78)。
データ管理サーバ100は、プレ照合鍵「Pm」をプレ照合鍵記憶部170に格納する。そしてデータ管理サーバ100は、データ提供サーバ200から取得したプレ照合鍵「Pn」と端末装置400から取得したプレ照合鍵「Pm」とに基づいて、照合鍵「Pnm」を生成する(ステップS79)。例えばデータ管理サーバ100は、プレ照合鍵「Pn」とプレ照合鍵「Pm」との排他的論理和を、照合鍵「Pnm」とする。
その後、端末装置400は、検索クエリが入力されると、その検索クエリを暗号化する(ステップS80)。例えば端末装置400は、検索クエリに対応する平文ベクトル「yj」と係数行列「An」とに基づいて、第1プレノイズベクトル「fe(An,yj)」を生成する。次に端末装置400は、乱数によって第2プレノイズベクトル「ej」を生成する。そして端末装置400は、2つのプレノイズベクトルの排他的論理和をノイズベクトル「en,j」とする。
端末装置400は、係数行列「An」、ノイズベクトル「en,j」、および秘密鍵「km」を用いて、平文ベクトル「yj」を暗号化する。例えば端末装置400は、以下の式により平文ベクトル「yj」を暗号化した暗号文ベクトル「hm」を生成する。
式(19)では、係数行列「An」の各行と平文ベクトル「yi」とのモジュロ2(mod2)上の内積の計算結果を各要素とするベクトルと、ノイズベクトル「en,j」および秘密鍵「km」それぞれとの排他的論理和が、暗号文ベクトル「hm」となっている。
暗号文ベクトル「hm」を生成後、端末装置400は、データ管理サーバ100に、暗号文ベクトル「hm」を検索暗号文として含む検索要求を送信する(ステップS81)。データ管理サーバ100は、検索要求に応じて、検索クエリと秘匿化DB120内の暗号化された患者データとを照合する(ステップS82)。データ管理サーバ100は、暗号ベクトル「hn」と暗号ベクトル「hm」とを照合する場合、暗号ベクトル「hn」と暗号ベクトル「hm」について、照合鍵「Pnm」で復号を行った後、照合を行う。例えばデータ管理サーバ100は、以下の式により、2つのベクトルの排他的論理和「r」を計算する。
式(20)は、展開すると以下のように表すことができる。
式(21)の右辺は、第2の実施の形態で説明した式(17)の右辺と同じである。すなわち、式(20)の計算により、重複して存在する関係秘密鍵「Sn」と照合鍵「kn」、「km」が消去され、第2の実施の形態と同様の値が得られる。そこでデータ管理サーバ100は、式(20)の計算後、排他的論理和「r」のハミング重み「HW(r)」を計算する。データ管理サーバ100は、「HW(r)」が所定の閾値「θ」未満か否かを判断する。データ管理サーバ100は、「HW(r)」が閾値「θ」未満であれば(HW(r)<θ)、照合に成功したと判断する。またデータ管理サーバ100は、「HW(r)」が閾値「θ」以上であれば(HW(r)≧θ)、照合に失敗したと判断する。
データ管理サーバ100は、秘匿化DB120に格納されたすべての暗号文についての検索暗号文との照合が終了すると、照合に成功した暗号文を含むレコードの患者IDまたは一致患者数を、検索結果として端末装置400に送信する(ステップS83)。
このような暗号化方式を採用することにより、病院32および製薬企業34それぞれのデータの安全性が向上する。例えば病院32が提供した患者データは、第2の実施の形態と同様に、平文集合のエントロピーが低くても解読が困難なように暗号化して管理されている。そのため、例えば属性の値(男性、女性など)ごとの単位で暗号化しても、安全な暗号文が生成される。また、データ管理サーバ100の管理者は、係数行列「An」を知ることができないため、登録された患者データの暗号文や検索クエリの暗号文を解読することができない。
また病院32は検索文を見ることはできないため、製薬企業34にとって、検索内容を病院32に把握されることも抑止されている。
さらに、製薬企業34とは別の製薬企業35にも、病院32から隔離鍵が渡された場合であっても、各製薬企業34,35で生成される秘密鍵「km」が異なる。そのため他社に検索要求が盗聴されたとしても、他社は秘密鍵「km」を有していないことから検索クエリの暗号文を解読することはできない。従って、製薬企業34,35による検索内容の外部への漏洩が抑止される。
次に、秘匿化検索システムにおける各装置間の連携処理を詳細に説明する。
図18は、患者データ登録処理の手順の一例を示すシーケンス図である。データ管理サーバ100のソフトウェア提供部130は、データ提供ソフトウェア111をデータ提供サーバ200に送信する(ステップS91)。データ提供サーバ200では、データ提供機能導入部220がデータ提供ソフトウェア111を受信し、データ提供ソフトウェア111をデータ提供サーバ200にインストールする(ステップS92)。データ提供機能導入部220は、インストールが完了すると、データ提供部起動指示を出力する(ステップS93)。データ提供部起動指示に応じて、データ提供サーバ200がデータ提供部230を起動する。
データ提供部230が起動されると、データ提供部230内の隔離鍵生成部233が、隔離鍵生成用のキーワード「seed1」の入力を受け付ける(ステップS94)。隔離鍵生成部233は、キーワード「seed1」に基づいて隔離鍵、秘密鍵、およびプレ照合鍵を生成する(ステップS95)。隔離鍵には、係数行列と関係秘密鍵が含まれる。隔離鍵生成部233は、生成した隔離鍵を隔離鍵記憶部232に格納する。
データ提供部230のデータ登録要求部234は、プレ照合鍵をデータ管理サーバ100に送信する(ステップS96)。データ管理サーバ100では、データ登録部140がプレ照合鍵を受信し、プレ照合鍵記憶部170に格納する(ステップS97)。
データ提供サーバ200では、データ提供部230内のデータ登録要求部234が、平文の患者データをDB210から取得する(ステップS98)。データ登録要求部234は、平文内容に一意であり、かつ平文の内容に対して唯一のノイズを生成する(ステップS99)。データ登録要求部234は、生成したノイズを用いて、平文のデータを暗号化する(ステップS100)。データ登録要求部234は、暗号化によって生成された暗号文を、データ管理サーバ100に送信する(ステップS101)。データ管理サーバ100では、データ登録部140が暗号文を受信し、受信した暗号文を秘匿化DB120に格納する(ステップS102)。
次に、データ利用環境の構築手順について説明する。
図19は、データ利用環境の構築手順の一例を示すシーケンス図である。図19に示す処理のステップS111~S116は、図13に示した第2の実施の形態のステップS41~S46と同様である。以下、第2の実施の形態と異なるステップS117,S118について説明する。
データ提供サーバ200では、データ提供部230内の隔離鍵提供部235は、隔離鍵提供許可が入力されると、隔離鍵記憶部232から係数行列「An」と関係秘密鍵「Sn」を取得する。そして隔離鍵提供部235は、取得した係数行列「An」と関係秘密鍵「Sn」を、隔離鍵として端末装置400に送信する(ステップS117)。
端末装置400では、データ利用部420内の隔離鍵取得部423が隔離鍵を受信する。隔離鍵取得部423は、受信した隔離鍵に示される係数行列「An」と関係秘密鍵「Sn」を隔離鍵記憶部422に格納する(ステップS118)。
次に、検索処理の手順について詳細に説明する。
図20は、検索処理の手順の一例を示すシーケンス図である。端末装置400のデータ利用部420は、検索担当者からの「seed2」に用いる文字列の入力を受け付ける(ステップS121)。受け付けた「seed2」は、検索要求部424が取得する。検索要求部424は、キーワード「seed2」に基づいて秘密鍵とプレ照合鍵とを生成する(ステップS122)。なおプレ照合鍵の生成には、隔離鍵記憶部422に格納されている関係秘密鍵が使用される。その後、検索要求部424は、プレ照合鍵をデータ管理サーバ100に送信する(ステップS123)。
データ管理サーバ100では、データ登録部140がプレ照合鍵を受信し、プレ照合鍵記憶部170に格納する(ステップS124)。次にデータ登録部140は、端末装置400から受信したプレ照合鍵とデータ提供サーバ200から受信したプレ照合鍵とに基づいて、照合鍵を生成する(ステップS125)。データ登録部140は、生成した照合鍵を、例えば病院32の組織名「登録者A」と製薬企業34の組織名「検索者B」との組に対応付けて、プレ照合鍵記憶部170に格納する。端末装置400では、プレ照合鍵送信後、検索要求部424は関係秘密鍵「Sn」を削除する(ステップS126)。
その後、端末装置400のデータ利用部420は、検索担当者からの平文の検索クエリの入力を受け付ける(ステップS127)。受け付けた検索クエリは、検索要求部424が取得する。検索要求部424は、検索クエリに示される平文の内容に一意であり、かつ平文の内容ごとに唯一となるノイズを生成する(ステップS128)。さらに検索要求部424は、隔離鍵記憶部422に格納されている係数行列と、予め生成した秘密鍵と、生成したノイズとを用いて検索クエリを暗号化する(ステップS129)。そして検索要求部424は、暗号文の検索クエリを含む検索要求をデータ管理サーバ100に送信する(ステップS130)。
データ管理サーバ100では、検索部160が検索要求を受信する。検索部160は、検索要求に示される検索クエリの暗号文と、秘匿化DB120に格納されている各暗号文とを照合する(ステップS131)。照合には、患者データを提供した病院32(組織名「登録者A」)と検索者である製薬企業(組織名「検索者B」)との組に対応する照合鍵が用いられる。そして検索部160は、照合により一致した暗号文を含むレコードの患者IDまたは一致患者数を、検索結果として端末装置400に送信する(ステップS132)。検索結果を受信した端末装置400では、検索要求部424が検索結果をモニタに表示する(ステップS133)。
このように、データ管理サーバ100において、正当な検索者をプレ照合鍵によって管理することができる。すなわち、プレ照合鍵は、検索者(端末装置400,500)ごとに異なる秘密鍵を用いて生成されている。そのため、同じ病院から患者データの利用許諾を受けた製薬企業が複数存在する場合でも、ある製薬企業の検索内容が他の製薬企業に漏洩することが抑止される。
また登録者ごとに個別の関係秘密鍵が生成されるため、検索者が利用できる患者データを、その検索者が利用許諾を受けた登録者によって提供された患者データに制限することができる。
図21は、登録者と検索者とが複数存在する場合の患者データの登録および利用手順の一例を示す図である。「登録者A」である病院32のデータ提供サーバ200は、データ提供サーバ200で任意に生成した「seed」(例えば文字列a+時刻a)を用いて、関係秘密鍵と秘密鍵を生成する。データ提供サーバ200は、生成した関係秘密鍵と秘密鍵とを用いてプレ照合鍵を生成する。図示していないが、データ提供サーバ200は係数行列やノイズベクトルも生成する。そしてデータ提供サーバ200は、プレ照合鍵をデータ管理サーバ100のプレ照合鍵記憶部170に登録する。またデータ提供サーバ200は、係数行列とノイズベクトルとを用いてDB210内の患者データを暗号化し、暗号文となった患者データをデータ管理サーバ100の秘匿化DB121に登録する。
「登録者B」である病院33のデータ提供サーバ300は、データ提供サーバ300で任意に生成した「seed」(例えば文字列b+時刻b)を用いて、関係秘密鍵と秘密鍵を生成する。データ提供サーバ300は、生成した関係秘密鍵と秘密鍵とを用いてプレ照合鍵を生成する。図示していないが、データ提供サーバ300は係数行列やノイズベクトルも生成する。そしてデータ提供サーバ300は、プレ照合鍵をデータ管理サーバ100のプレ照合鍵記憶部170に登録する。またデータ提供サーバ300は、係数行列とノイズベクトルとを用いてDB310内の患者データを暗号化し、暗号文となった患者データをデータ管理サーバ100の秘匿化DB122に登録する。
その後、病院32は、製薬企業34に対して、病院32が登録した患者データの利用を許諾したものとする。また病院33は、製薬企業35に対して、病院33が登録した患者データの利用を許諾したものとする。この場合、病院32のデータ提供サーバ200は、製薬企業34の端末装置400へ、係数行列と関係秘密鍵とを含む隔離鍵を送信する。また、病院33のデータ提供サーバ300は、製薬企業35の端末装置500へ、係数行列と関係秘密鍵とを含む隔離鍵を送信する。
端末装置400は、端末装置400で任意に生成した「seed」(例えば文字列c+時刻c)を用いて秘密鍵を生成する。端末装置400は、データ提供サーバ200から受信した隔離鍵のうちの関係秘密鍵と、自身が生成した秘密鍵とを用いてプレ照合鍵を生成する。図示していないが、端末装置400はノイズベクトルも生成する。そして端末装置400は、プレ照合鍵をデータ管理サーバ100のプレ照合鍵記憶部170に登録する。
端末装置400は、検索担当者から検索クエリが入力されると、係数行列とノイズベクトルとを用いて検索クエリを暗号化し、暗号文となった検索クエリを含む検索要求を、データ管理サーバ100に送信する。データ管理サーバ100では、端末装置400からの検索要求に応じ、データ提供サーバ200が登録したプレ照合鍵と端末装置400が登録したプレ照合鍵に基づいて生成した照合鍵を用いて、検索クエリと秘匿化DB121内の暗号文とを照合する。なお端末装置400が登録したプレ照合鍵の生成には、データ提供サーバ200が生成した関係秘密鍵が用いられていると共に、検索クエリの暗号化にはデータ提供サーバ200が生成した係数行列が用いられている。そのためデータ管理サーバ100は、端末装置400が送信した検索要求に示される暗号文の検索クエリと、データ提供サーバ300が提供した患者データが登録された秘匿化DB122内の暗号文とを照合することはできない。
端末装置500は、端末装置500で任意に生成した「seed」(例えば文字列d+時刻d)を用いて秘密鍵を生成する。端末装置500は、データ提供サーバ300から受信した隔離鍵のうちの関係秘密鍵と、自身が生成した秘密鍵とを用いてプレ照合鍵を生成する。図示していないが、端末装置500はノイズベクトルも生成する。そして端末装置500は、プレ照合鍵をデータ管理サーバ100のプレ照合鍵記憶部170に登録する。
端末装置500は、検索担当者から検索クエリが入力されると、係数行列とノイズベクトルとを用いて検索クエリを暗号化し、暗号文となった検索クエリを含む検索要求を、データ管理サーバ100に送信する。データ管理サーバ100では、端末装置500からの検索要求に応じ、データ提供サーバ300が登録したプレ照合鍵と端末装置500が登録したプレ照合鍵に基づいて生成した照合鍵を用いて、検索クエリと秘匿化DB122内の暗号文とを照合する。なお端末装置500が登録したプレ照合鍵の生成には、データ提供サーバ300が生成した関係秘密鍵が用いられていると共に、検索クエリの暗号化にはデータ提供サーバ300が生成した係数行列が用いられている。そのためデータ管理サーバ100は、端末装置500が送信した検索要求に示される暗号文の検索クエリと、データ提供サーバ200が提供した患者データが登録された秘匿化DB121内の暗号文とを照合することはできない。
このようにして、データ管理サーバ100において、患者データの提供元の異なる秘匿化DB121,122を管理し、各秘匿化DB121,122の利用を、登録者から利用許諾を受けた検索者に制限することができる。
〔その他の実施の形態〕
第2・第3の実施の形態では、データ提供サーバ200,300から端末装置400,500へ、データ管理サーバ100で盗聴できない通信経路で隔離鍵を送信しているが、適切な暗号化技術を用いればデータ管理サーバ100を介して隔離鍵を送信してもよい。例えばデータ提供サーバ200,300と端末装置400,500とが、ディフィー・ヘルマン鍵共有プロトコルを用いて隔離鍵の暗号化通信を行えば、データ管理サーバ100を経由する通信経路で隔離鍵を送信することができる。
第1~第3の実施の形態の暗号化方式としては、鍵生成アルゴリズム、暗号化アルゴリズム、及び解読アルゴリズムを含むIND_CCA(INDistinguishability under Chosen Ciphertext Attack)セキュア公開鍵暗号化方式を用いることができる。このような暗号化方式として、例えば関係暗号化方式がある。関係暗号化方式を用いる場合、例えば照合処理において、ハミング距離の観点で、患者データ内の暗号文と検索クエリの暗号文との間の線形関係を発見する。検索部160は、線形関係を、以下の検証アルゴリズムに従い実行することができる。
(1)検索部160は、「skRlin:=(τ,sk_3)」を計算する。
(2)検索部160は、cy,cx,skRlinに基づいて、以下の不等式をチェックする。
dist(DecCPA(sk_3,cx_0+cy_0))<2×τ×m) (22)
式(22)において、cxは患者データに含まれる値の暗号文(第1暗号文)である。cyは、検索クエリの暗号文(第2暗号文)である。「skRlin」は、関係秘密鍵である。「τ」は、ノイズ確率である。「sk_3」は、IND_CCAセキュア公開鍵暗号化方式の秘密鍵である。「cx_0」は、第1暗号文の第1要素である。「cy_0」は、第2暗号文の第1要素である。「DecCPA」は、解読アルゴリズムである。「dist」は、ハミング距離演算子である。「m」は、前記DecCPA(sk_3,cx_0+cy_0)のビット長である。
式(22)が満たされる場合、検索部160は、第1暗号文と第2暗号文とが合致する(それぞれの平文が同一である)と判断する。このような線形関係の発見も、ハミング距離を用いており、ハミング距離に基づく照合処理の一例である。なお線形関係の発見方法は、前述の「特許文献4」に詳しい。
また、データ提供サーバ200,300と端末装置400,500は、ノイズベクトルを係数行列「A」、平文の平文ベクトル、およびその平文が属する属性の属性名の平文ベクトルを変数として含む関数に基づいて生成してもよい。これにより、暗号文の安全性を高めることができる。すなわち、秘匿化DB120内の異なる列に同じ暗号文がある場合、頻度分析攻撃などに対する安全性が低下する。そこで、ノイズベクトルの生成に、各平文が属する列の属性名を含む関数を用いることで、同じ平文でも列が異なれば異なる暗号文を生成することができ、頻度分析攻撃などによる平文の推定を抑止することができる。
またデータ提供サーバ200,300と端末装置400,500は、平文を暗号化する際、「平文が属する属性の属性名 +平文」を暗号化してもよい。「+」はビット結合である。例えば属性名「身長」の平文ベクトルが「0110」で、患者の身長をcm単位で示す平文「100」の平文ベクトルが「1010」の場合、データ提供サーバ200,300と端末装置400,500は、「01101010」を暗号化する。これにより、同じ平文でも列が異なれば異なる暗号文を生成することができ、頻度分析攻撃などによる平文の推定を抑止することができる。
辞書データ113内の各平文の平文ベクトルは、データ管理サーバ100が計算によって算出することができる。
図22は、平文ベクトル生成処理の第1の例を示す図である。以下、図22に示す処理をステップ番号に沿って説明する。
[ステップS201]データ管理サーバ100は、1つ目の平文ベクトルX(1)を生成する。例えばデータ管理サーバ100は、「1」と「0」とがそれぞれN個(Nは1以上の整数)の任意のバイナリベクトルを生成する。そしてデータ管理サーバ100は、生成したバイナリベクトルをX(1)とする。
[ステップS202]データ管理サーバ100は、2つ目の平文ベクトルX(2)を生成する。例えばデータ管理サーバ100は、X(1)の全ビットを反転させたバイナリベクトルを生成する。そしてデータ管理サーバ100、生成したバイナリベクトルをX(2)とする。このときX(1)とX(2)とのハミング距離は2Nとなる。
[ステップS203]データ管理サーバ100は、m1を初期化する(m1=1)。
[ステップS204]データ管理サーバ100は、m1<Nが満たされる間、ステップS205~S207の処理を繰り返す。
[ステップS205]データ管理サーバ100は、ハミング距離が「2N-2m1」となる平文ベクトル群を生成する。例えばデータ管理サーバ100は、X(1)内のm1個の「1」のビットとm1個の「0」のビットとの位置の入れ替えによって生成できるすべてのベクトルを、いずれかの平文に割り当てる平文ベクトルとする。
[ステップS206]データ管理サーバ100は、生成した平文ベクトルの数が所定数に達したか中を判断する。所定数は、例えば暗号化対象の平文の数である。データ管理サーバ100は、所定数に達した場合、繰り返し処理から抜けて、平文ベクトル生成処理を終了する。またデータ管理サーバ100は、所定数に達していなければ、処理をステップS207に進める。
[ステップS207]データ管理サーバ100は、m1に1を加算する(m1=m1+1)。
[ステップS208]データ管理サーバ100は、m1≧Nとなった場合、処理をステップS209に進める。
[ステップS209]データ管理サーバ100は、ビット数不足のため平文ベクトルの生成に失敗したことを示すアラートを出力する。この場合、データ管理サーバ100の管理者は、係数行列のビット数などを含め、平文ベクトルの再設計を行うこととなる。
このようにして、ハミング距離ができるだけ大きくなるような平文ベクトルを生成することができる。データ管理サーバ100は、生成した複数の平文ベクトルそれぞれを、平文に対応付けて辞書データ113に登録する。
また、データ管理サーバ100は、ハミング距離が所定の閾値以上となるように平文ベクトルを生成することもできる。
図23は、平文ベクトル生成処理の第2の例を示す図である。以下、図23に示す処理をステップ番号に沿って説明する。
[ステップS221]データ管理サーバ100は、パラメータの値を設定する。例えばデータ管理サーバ100は、ハミング距離閾値HL_THに、予め管理者によって指定された値を設定する。またデータ管理サーバ100は、平文ベクトル数N’(N’は1以上の整数)に、予め管理者によって指定された値を設定する。さらにデータ管理サーバ100は、変数m2に初期値「1」と設定する(m2=1)。
[ステップS222]データ管理サーバ100は、平文ベクトルX(1)を生成する。例えばデータ管理サーバ100は、「1」の発生確率が約1/2の乱数発生器によりN’ビットのバイナリベクトルを生成し、生成したバイナリベクトルをX(1)とする。
[ステップS223]データ管理サーバ100は、m2に1を加算する(m2=m2+1)。
[ステップS224]データ管理サーバ100は、m2≦2N’が満たされる間、ステップS225~S229の処理を繰り返す。
[ステップS225]データ管理サーバ100は、平文ベクトル候補X(0)を生成する。例えばデータ管理サーバ100は、「1」の発生確率が約1/2の乱数発生器によりN’ビットのバイナリベクトルを生成し、生成したバイナリベクトルをX(0)とする。
[ステップS226]データ管理サーバ100は、すでに生成済みの平文ベクトルそれぞれと、平文ベクトル候補X(0)とのハミング距離が、すべてハミング距離閾値HL_TH以上か否かを判断する。データ管理サーバ100は、すべての平文ベクトルに対してハミング距離がハミング距離閾値HL_TH以上であれば、処理をステップS227に進める。またデータ管理サーバ100は、少なくとも1つの平文ベクトルに対してハミング距離閾値HL_TH未満であれば、処理をステップS229に進める。
[ステップS227]データ管理サーバ100は、平文ベクトル候補X(0)を、平文ベクトルX(m2)とする。
[ステップS228]データ管理サーバ100は、生成した平文ベクトルの数が所定数に到達したか否かを判断する。所定数は、例えば暗号化対象の平文の数である。データ管理サーバ100は、所定数に達した場合、繰り返し処理から抜けて、平文ベクトル生成処理を終了する。またデータ管理サーバ100は、所定数に達していなければ、処理をステップS229に進める。
[ステップS229]データ管理サーバ100は、m2に1を加算する(m2=m2+1)。
[ステップS230]データ管理サーバ100は、m2>2N’となった場合、処理をステップS231に進める。
[ステップS231]データ管理サーバ100は、ビット数不足のため平文ベクトルの生成に失敗したことを示すアラートを出力する。この場合、データ管理サーバ100の管理者は、ハミング距離閾値HL_THの変更、係数行列のビット数の変更などを含め、平文ベクトルの再設計を行うこととなる。
このように生成する平文ベクトルをハミング距離閾値HL_TH以上とすることで、複数の平文それぞれの平文ベクトルを暗号化した場合の暗号文の安全性が向上する。
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の2以上の構成(特徴)を組み合わせたものであってもよい。