(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-11-13
(45)【発行日】2023-11-21
(54)【発明の名称】検索システム、検索装置、および検索方法
(51)【国際特許分類】
G09C 1/00 20060101AFI20231114BHJP
G06F 16/903 20190101ALI20231114BHJP
【FI】
G09C1/00 660D
G06F16/903
(21)【出願番号】P 2020077986
(22)【出願日】2020-04-27
【審査請求日】2022-12-26
(73)【特許権者】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110002365
【氏名又は名称】弁理士法人サンネクスト国際特許事務所
(72)【発明者】
【氏名】吉野 雅之
(72)【発明者】
【氏名】藤原 啓成
【審査官】金沢 史明
(56)【参考文献】
【文献】特開2005-134990(JP,A)
【文献】国際公開第2019/117978(WO,A1)
【文献】米国特許出願公開第2012/0078914(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G09C 1/00
G06F 16/903
(57)【特許請求の範囲】
【請求項1】
データが暗号化された暗号化データを閲覧する閲覧機からのクエリが暗号化された暗号化クエリに対する検索を行い、前記閲覧機に検索結果を提供する提供機を備える検索システムであって、
前記提供機での検索に用いられる検索キーが暗号化された暗号化検索キーと、前記暗号化検索キーと対応付けられている、暗号化データを識別可能な識別情報が暗号化された暗号化IDと、が対応付けられた管理用情報を、前記提供機の管理者が閲覧不可能な第1の記憶領域において記憶し、
前記提供機での検索に用いられる暗号化検索キーおよび前記暗号化検索キーに対応付けられた1つ以上の暗号化IDを複数まとめた組として管理し、前記管理用情報のうち、前記閲覧機からの暗号化クエリに対応する暗号化検索キー
が含まれる組のうち少なくとも1つの暗号化検索キーと、前記
少なくとも1つの暗号化検索キーに対応する暗号化IDと、を復号化して
、復号化された当該少なくとも1つの暗号化検索キーおよび暗号化IDの暗号化
として、当該少なくとも1つの暗号化検索キーおよび暗号化IDを前記管理用情報に含まれる他の暗号化検索キーおよび暗号化IDに変更する第1の管理部と、
前記提供機での検索に用いられる暗号化検索キーと、前記暗号化検索キーに対応付けられた1つ以上の暗号化IDと、が対応付けられたインデックス情報を第2の記憶領域に記憶し、前記インデックス情報のうち、
前記少なくとも1つの暗号化検索キーおよび暗号化IDを、前記第1の管理部により復号化および暗号化された暗号化検索キーおよび暗号化ID
である前記他の暗号化検索キーおよび暗号化IDに更新する第2の管理部と、
を備える検索システム。
【請求項2】
前記管理用情報には、ダミーの暗号化検索キーおよびダミーの暗号化IDが含まれている、
請求項
1に記載の検索システム。
【請求項3】
前記閲覧機および前記提供機において、暗号化および復号化に用いる暗号鍵を共有し、
前記第1の記憶領域は、前記提供機に設けられ、
前記第1の管理部は、前記第1の記憶領域において前記暗号鍵を記憶する、
請求項1に記載の検索システム。
【請求項4】
暗号化されたデータである暗号化データと、前記暗号化データを検索するための暗号化検索キーと、が対応付けられている複数のデータを記憶する記憶部を備え、
前記第2の管理部は、前記記憶部により記憶されているデータのうち、前記閲覧機からの暗号化クエリに対応する暗号化検索キーを、前記第1の管理部により前記暗号化検索キーが復号化されて暗号化された暗号化検索キーに更新する、
請求項1に記載の検索システム。
【請求項5】
暗号化されたデータである暗号化データと、前記暗号化データを検索するための暗号化検索キーと、前記暗号化データおよび前記暗号化検索キーを識別可能な識別情報であるIDとが対応付けられている複数のデータを記憶する記憶部を備え、
前記第2の管理部は、前記インデックス情報を用いて、前記閲覧機からの暗号化クエリと同じ暗号化検索キーに対応付けられている暗号化IDを前記第1の管理部に渡し、
前記第1の管理部は、前記提供機での検索に用いられる暗号化検索キーおよび前記暗号化検索キーに対応付けられた1つ以上の暗号化IDを複数まとめた組として管理し、前記第2の管理部から受け取った暗号化IDと、前記暗号化IDが含まれる組の暗号化IDとを復号化し、復号化したIDにより識別される暗号化データを前記第2の管理部に渡し、
前記第2の管理部は、前記第1の管理部から受け取った暗号化データのうち、前記暗号化検索キーの暗号化データを前記閲覧機に送信する、
請求項1に記載の検索システム。
【請求項6】
前記提供機は、TEE機能を備える装置を備え、
前記第1の記憶領域は、前記提供機に設けられ、
前記第1の記憶領域は、前記TEE機能によりメモリ上に確保されている、
請求項1に記載の検索システム。
【請求項7】
前記第1の記憶領域および第1の管理部は、前記閲覧機に設けられている、
請求項1に記載の検索システム。
【請求項8】
データが暗号化された暗号化データを閲覧する閲覧機からのクエリが暗号化された暗号化クエリに対する検索を行い、前記閲覧機に検索結果を提供する検索装置であって、
前記検索装置での検索に用いられる検索キーが暗号化された暗号化検索キーと、前記暗号化検索キーと対応付けられている、暗号化データを識別可能な識別情報が暗号化された暗号化IDと、が対応付けられた管理用情報を、前記検索装置の管理者が閲覧不可能な第1の記憶領域において記憶し、
前記検索装置での検索に用いられる暗号化検索キーおよび前記暗号化検索キーに対応付けられた1つ以上の暗号化IDを複数まとめた組として管理し、前記管理用情報のうち、前記閲覧機からの暗号化クエリに対応する暗号化検索キー
が含まれる組のうち少なくとも1つの暗号化検索キーと、前記
少なくとも1つの暗号化検索キーに対応する暗号化IDと、を復号化して
、復号化された当該少なくとも1つの暗号化検索キーおよび暗号化IDの暗号化
として、当該少なくとも1つの暗号化検索キーおよび暗号化IDを前記管理用情報に含まれる他の暗号化検索キーおよび暗号化IDに変更する第1の管理部と、
前記検索装置での検索に用いられる暗号化検索キーと、前記暗号化検索キーに対応付けられた1つ以上の暗号化IDと、が対応付けられたインデックス情報を第2の記憶領域に記憶し、前記インデックス情報のうち、
前記少なくとも1つの暗号化検索キーおよび暗号化IDを、前記第1の管理部により復号化および暗号化された暗号化検索キーおよび暗号化ID
である前記他の暗号化検索キーおよび暗号化IDに更新する第2の管理部と、
を備える検索装置。
【請求項9】
データが暗号化された暗号化データを閲覧する閲覧機からのクエリが暗号化された暗号化クエリに対する検索を行い、前記閲覧機に検索結果を提供する提供機を備える検索システムにおける検索方法であって、
第1の管理部が、前記提供機での検索に用いられる検索キーが暗号化された暗号化検索キーと、前記暗号化検索キーと対応付けられている、暗号化データを識別可能な識別情報が暗号化された暗号化IDと、が対応付けられた管理用情報を、前記提供機の管理者が閲覧不可能な第1の記憶領域において記憶し、
前記提供機での検索に用いられる暗号化検索キーおよび前記暗号化検索キーに対応付けられた1つ以上の暗号化IDを複数まとめた組として管理し、前記管理用情報のうち、前記閲覧機からの暗号化クエリに対応する暗号化検索キー
が含まれる組のうち少なくとも1つの暗号化検索キーと、前記
少なくとも1つの暗号化検索キーに対応する暗号化IDと、を復号化して
、復号化された当該少なくとも1つの暗号化検索キーおよび暗号化IDの暗号化
として、当該少なくとも1つの暗号化検索キーおよび暗号化IDを前記管理用情報に含まれる他の暗号化検索キーおよび暗号化IDに変更することと、
第2の管理部が、前記提供機での検索に用いられる暗号化検索キーと、前記暗号化検索キーに対応付けられた1つ以上の暗号化IDと、が対応付けられたインデックス情報を第2の記憶領域に記憶し、前記インデックス情報のうち、
前記少なくとも1つの暗号化検索キーおよび暗号化IDを、前記第1の管理部により復号化および暗号化された暗号化検索キーおよび暗号化ID
である前記他の暗号化検索キーおよび暗号化IDに更新することと、
を含む検索方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、概して、暗号化されたデータを検索する技術に関する。
【背景技術】
【0002】
情報システムの開発の効率化、情報システムの運用にかかる管理費の効率化等を目的として、他組織が提供するクラウド上のサーバ装置でデータ処理を行うことが一般化しつつある。クラウドを利用する場合、自組織のデータを他組織が管理するサーバ装置に預けることとなる。そのため、情報の漏洩の予防を目的とし、計算機に搭載されるTEE(Trusted Execution Environment)機能の活用が注目されている。例えば、非特許文献1では、TEE機能を用い、クラウド上のサーバ装置の管理者からもデータの秘匿性を確保したまま、データにアクセスできる手段が開示されている。
【0003】
非特許文献1で開示されている技術は、データへのアクセスを秘匿する方法であり、検索処理は秘匿できない。この点、非特許文献2で開示されている技術を用いれば、データを暗号化したまま検索できる。
【先行技術文献】
【特許文献】
【0004】
【文献】Oblivious Memory Primitives from Intel SGX, Sajin Sasy, SergeyGorbunov, Christopher Fletcher. 25th Annual Network and Distributed SystemSecurity Symposium (NDSS 2018).
【文献】Muhammad Naveed, Seny Kamara, Charles V. Wright. Inference Attackson Property-Preserving Encrypted Databases. ACM Conference on Computer andCommunications Security 2015 (ACM CCS 2015).
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、非特許文献2で開示されている技術では、検索結果は、秘匿されず、結果、安全ではない。例えば、非特許文献2で開示されている技術を用いれば、検索結果の頻度から検索用のキーワードが解読できてしまう。
【0006】
本発明は、以上の点を考慮してなされたもので、秘匿性の高い検索を実現し得る検索システム等を提案しようとするものである。
【課題を解決するための手段】
【0007】
かかる課題を解決するため本発明においては、データが暗号化された暗号化データを閲覧する閲覧機からのクエリが暗号化された暗号化クエリに対する検索を行い、前記閲覧機に検索結果を提供する提供機を備える検索システムであって、前記提供機での検索に用いられる検索キーが暗号化された暗号化検索キーと、前記暗号化検索キーと対応付けられている、暗号化データを識別可能な識別情報が暗号化された暗号化IDと、が対応付けられた管理用情報を、前記提供機の管理者が閲覧不可能な第1の記憶領域において記憶し、前記管理用情報のうち、前記閲覧機からの暗号化クエリに対応する暗号化検索キーと、前記暗号化検索キーに対応する暗号化IDと、を復号化して再び暗号化する第1の管理部と、前記提供機での検索に用いられる暗号化検索キーと、前記暗号化検索キーに対応付けられた1つ以上の暗号化IDと、が対応付けられたインデックス情報を第2の記憶領域に記憶し、前記インデックス情報のうち、前記閲覧機からの暗号化クエリに対応する暗号化検索キーおよび暗号化IDを、前記第1の管理部により復号化および暗号化された暗号化検索キーおよび暗号化IDに更新する第2の管理部と、を設けるようにした。
【0008】
上記構成では、管理者が閲覧不可能な領域で、暗号化検索キーおよび暗号化IDが再暗号化され、再暗号化された暗号化検索キーおよび暗号化IDでインデックス情報が更新される。このように、インデックス情報を更新することで、例えば、検索結果の頻度を解読され難くすることができる。上記構成によれば、例えば、検索の頻度から元のデータが漏洩してしまう事態を回避することができる。また、暗号化データの検索が安全に実施されることで、提供機のユーザは、情報の漏洩を心配することなく、安心してデータを提供機に預けることができる。
【発明の効果】
【0009】
本発明によれば、信頼性の高い検索システムを実現することができる。
【図面の簡単な説明】
【0010】
【
図1】第1の実施の形態による検索システムに係る構成の一例を示す図である。
【
図2】第1の実施の形態による提供機に係る構成の一例を示す図である。
【
図3】第1の実施の形態によるデータベースの一例を示す図である。
【
図4】第1の実施の形態によるデータベースの一例を示す図である。
【
図5】第1の実施の形態による検索した結果の一例を示す図である。
【
図6】第1の実施の形態による検索結果を復号化した結果の一例を示す図である。
【
図7】第1の実施の形態による平文インデックスの一例を示す図である。
【
図8】第1の実施の形態による暗号化インデックスの一例を示す図である。
【
図9】第1の実施の形態による平文クエリの一例を示す図である。
【
図10】第1の実施の形態による暗号化クエリの一例を示す図である。
【
図11】第1の実施の形態によるハードウェアに係る構成の一例を示す図である。
【
図12】第1の実施の形態によるシーケンス図の一例を示す図である。
【
図13】第1の実施の形態による処理の詳細の一例を示す図である。
【
図14】第1の実施の形態による暗号化インデックス管理表の一例を示す図である。
【
図15】第1の実施の形態による置換用テーブルの一例を示す図である。
【
図16】第1の実施の形態によるシーケンス図の一例を示す図である。
【
図17】第1の実施の形態によるフローチャートの一例を示す図である。
【
図18A】第1の実施の形態によるシーケンス図の一例を示す図である。
【
図18B】第1の実施の形態によるフローチャートの一例を示す図である。
【
図18C】第1の実施の形態によるフローチャートの一例を示す図である。
【
図19】第1の実施の形態による暗号化インデックス管理表と置換用テーブルとの一例を示す図である。
【
図20】第1の実施の形態による暗号化インデックス管理表と置換用テーブルとの一例を示す図である。
【
図21】第1の実施の形態による暗号化インデックス管理表と置換用テーブルとの一例を示す図である。
【
図22】第1の実施の形態による暗号化された検索キーおよび暗号化されたIDの管理方法を説明するための図である。
【発明を実施するための形態】
【0011】
(1)第1の実施の形態
以下、本発明の一実施の形態を詳述する。本実施の形態では、暗号データを検索する技術に関して説明する。
【0012】
本実施の形態に示す検索システムは、例えば、検索キーとクエリとを暗号化しながら比較可能な検索システムである。本検索システムでは、検索キーは、暗号化されている。また、本検索システムでは、検索キーと組となるID(identification)も暗号化されている。本検索システムでは、検索するたびに、検索装置の管理者が閲覧不可能な領域で、検索キーおよびIDを復号化(復号)し、再び暗号化する。
【0013】
本検索システムでは、例えば、クラウド上のサーバ管理者でもアクセスできない領域を提供するTEE機能、または、暗号化データの閲覧を要求する、サーバ管理者でもアクセスできない閲覧機を活用し、データを暗号化したまま検索しつつ、検索の頻度を秘匿することにより、クラウド上のサーバ管理者から検索を秘匿化する。
【0014】
本検索システムでは、検索するたびに、検索装置の管理者が閲覧不可能な領域で、検索キーおよびIDを復号化し、再び暗号化する。かかる構成により、例えば、暗号化データの検索処理において、検索の頻度から元のデータが漏洩する問題を解消し、暗号化データの検索を安全に実施できる。結果、検索装置の利用者(ユーザ)は、情報の漏洩が心配なくなり、安心してデータを検索装置に委託できる。
【0015】
また、例えば、本検索システムは、検索するたびに、検索キーをシャッフルし、そのシャッフル用の置換用テーブルを検索装置の管理者が閲覧不可能な領域で管理してもよい。
【0016】
また、例えば、本検索システムは、暗号化および復号化用の暗号鍵を、暗号化データの閲覧を要求する閲覧機と検索装置とが共有し、当該検索装置は、暗号鍵を検索装置の管理者が閲覧不可能な領域で管理してもよい。
【0017】
また、例えば、本検索システムは、検索キーとデータとを暗号化して管理し、検索するたびに検索キーとデータとをシャッフルしてもよい。
【0018】
次に、本発明の実施形態を図面に基づいて説明する。ただし、本発明は、実施の形態に限定されるものではない。また、実施の形態において、同一の要素には原則として同一の符号を付け、繰り返しの説明は省略する。
【0019】
なお、以下の説明では、同種の要素を区別しないで説明する場合には、枝番を含む参照符号のうちの共通部分(枝番を除く部分)を使用し、同種の要素を区別して説明する場合は、枝番を含む参照符号を使用することがある。例えば、登録機を特に区別しないで説明する場合には、「登録機110」と記載し、個々の登録機を区別して説明する場合には、「登録機110-1」、「登録機110-2」のように記載することがある。
【0020】
図1において、100は全体として第1の実施の形態による検索システムを示す。まず、本実施の実施で使用する主な用語について説明する。
【0021】
(A)登録機110
登録機110は、登録機110-1、登録機110-2、・・・、登録機110-nの何れか、または、全てを指す。
【0022】
(B)暗号鍵
後述の(I)に示すブロック暗号用の暗号鍵と、後述の(J)に示す検索可能暗号用の暗号鍵とがある。暗号鍵を「sk(secret key)」と記すことがある。なお、ブロック暗号用の暗号鍵と検索可能暗号用の暗号鍵とは、同じであってもよいし、異なっていてもよい。
【0023】
(C)データ
暗号化の対象のデータを「平文データ」または単に「データ」と記す。データが暗号化された後は、「暗号化データ」と記す。
【0024】
(D)クエリ
インデックスとの比較の対象を「クエリ」と記す。暗号化されていない平文のクエリを「平文クエリ」または単に「クエリ」と記す。クエリが暗号化された後は、「暗号化クエリ」と記す。
【0025】
(E)インデックス
インデックスは、検索キーとIDとの組からなる配列である。検索時には、検索キーとクエリとが比較され、クエリと一致した検索キーの組であるIDが検索結果である。暗号化対象のインデックスを「平文インデックス」または単に「インデックス」と記す。暗号化された平文インデックスを「暗号化インデックス」と記す。暗号化インデックスは、暗号化された検索キーと暗号化されたIDとの組からなる配列である。
【0026】
(F)インデックス管理表
インデックス管理表では、検索キーとIDとの組からなる配列表であるインデックスに位置が追加されている。この位置を追加した平文インデックスを「平文インデックス管理表」と記す。また、暗号化インデックスに位置を追加した場合、「暗号化インデックス管理表」と記す。
【0027】
(G)レコード
行と列とから構成される表形式でデータを管理するデータベース、インデックス等において、同じ行に所属する平文データの集合を「レコード」と記す。同様に、同じ行に所属する暗号化データの集合を「暗号化レコード」と記す。
【0028】
(H)セル
行と列とから構成される表形式でデータを管理するデータベースにおいて、行番号と列番号とで指定されるマス目を「セル」と記す。本実施の形態では、簡単のため、1つのセルには、1つのデータが入るものとする。
【0029】
(I)ブロック暗号
検索システム100は、データ暗号化関数とデータ復号化関数とを備える。データ暗号化関数は、平文データと暗号鍵とを入力とし、暗号化データを出力する。データ復号化関数は、暗号化データと暗号鍵とを入力とし、平文データを出力する。
【0030】
(J)検索可能暗号
検索システム100は、暗号化された状態のまま、復号化せずにデータを比較できる、という特徴を備える。また、検索システム100は、インデックス暗号化関数、クエリ暗号化関数、比較関数を備える。インデックス暗号化関数は、平文インデックスと暗号鍵とを入力とし、暗号化インデックスを出力する。クエリ暗号化関数は、平文クエリと暗号鍵とを入力とし、暗号化クエリを出力する。比較関数は、暗号化インデックスにおける暗号化された検索キーと暗号化クエリとを入力とし、暗号化される前の検索キーと平文クエリの値とが等しいかを判別する関数である。比較関数は、無視可能な確率を除き、それぞれの値が等しい場合は「1」を出力し、異なる場合は「0」を出力する。
【0031】
(K)E(x)
E(x)は、平文データxを暗号化した暗号化データを表す。
【0032】
(L)log(x)
log(x)は、変数xを真数、底を「2」とする対数関数とする。例えば、log(2)=1、log(4)=2、log(8)=3である。
【0033】
(M)[x]
[x]は、実数xの小数点第一位を切り捨てる丸め関数である。例えば、[4.3]=4である。
【0034】
(N)『x』
『x』は、実数xの小数点第一位を切り上げる丸め関数である。例えば『4.3』=5である。
【0035】
(O)Power(x,y)
Power(x,y)は、変数xのy乗を計算するべき乗関数である。例えば、Power(2,3)=23=8である。
【0036】
上記の説明において、ブロック暗号と検索可能暗号とは、共通鍵暗号方式の場合を説明した。しかしながら、本実施の形態は、共通鍵暗号方式に限定されず、公開鍵暗号方式を用いてもよい。その場合、上記で説明した一部の関数に入力する暗号鍵は、暗号鍵の代わりに、公開鍵を入力すればよい。
【0037】
なお、上記の説明において、検索可能暗号の比較関数は、「0」または「1」を出力値としたが、他の出力値を用いる検索可能暗号を用いても構わない。例えば、検索キーと平文クエリとの大小比較結果として「1」(大きい)、「0」(等しい)、「-1」(小さい)を出力する検索可能暗号でも構わない。また、検索キーと平文クエリとが特定の関係を満たすか否かによって、「0」または「1」を出力する検索可能暗号を用いてもよい。
【0038】
図1は、検索システム100に係る構成の一例を示す図である。
図1に示すように、検索システム100は、鍵管理局と、事業主体A(1~n)と、事業主体Bと、事業主体Cと、により実施される。検索システム100は、鍵管理局が所有する鍵配布機120と、事業主体A(1~n)が所有する登録機110-1~110-nと、事業主体Bが所有する提供機130と、事業主体Cが所有する閲覧機140とを備える。登録機110-1~110-nと鍵配布機120と提供機130と閲覧機140とは、それぞれがネットワーク150を介して通信可能に接続されている。
【0039】
以下では、本検索システム100を健康診断事業への適用例として説明する。以下、事業主体A(1~n)を「医療機関」、事業主体Bを「クラウドサービス提供者」、事業主体Cを「医療研究者」と想定する。
【0040】
医療研究者は、自社の情報システムをクラウドサービス提供者の提供機130に預託する運用をしている。故に、医療機関から取得する診療データとその検索用のインデックスとを提供機130に預託する。診療データは、医療機関の個人情報であり、他者に漏洩しないようインデックスも含めて慎重に取り扱う必要がある。
【0041】
そのため、医療機関は、登録機110-1に入力した診療データにおいて指定した項目を、鍵管理局の鍵配布機120が発行する暗号鍵で暗号化した上で、クラウドサービス提供者の提供機130に預託する。同様に、平文インデックスにおける検索キーも、暗号鍵で暗号化した上で、クラウドサービス提供者の提供機130に預託される。
【0042】
従って、クラウドサービス提供者には、個々の診療データにおいて暗号化された項目の内容がデータベースにもインデックスにも開示されない。
【0043】
クラウドサービス提供者の提供機130は、診療データを暗号化した状態で管理する。医療研究者は、クラウドサービス提供者に対し、閲覧機140から暗号化クエリを提供機130に送信し、暗号化クエリを用いて検索処理を行い、検索結果に該当する診療データを出力するように提供機130に要求する。提供機130は、暗号化インデックスに含まれる暗号化された検索キーと暗号化クエリとを比較し、その比較結果に基づいた暗号化データを暗号化データベースから出力する。
【0044】
図2は、提供機130に係る構成の一例を示す図である。提供機130は、検索を行う検索装置の一例である。提供機130は、特別なアクセス制御が施されない通常領域(記憶領域)を管理する通常領域管理部210と、提供機130の管理者にもデータが閲覧不可能なアクセス制御が施された信頼領域(記憶領域)を管理する信頼領域管理部220とを備える。
【0045】
通常領域は、例えば、外部記憶装置内またはメモリ内に設けられ、暗号化データを格納した暗号化データベース211と暗号化インデックス管理表212とを保持する。信頼領域は、例えば、メモリ内に設けられ、置換用テーブル221と暗号鍵222とを保持する。暗号鍵222は、鍵配布機120(鍵管理局)が配布する暗号鍵222である。
【0046】
図3は、登録機110が管理するデータベースの一例を示す図である。当該データベースの一例を平文データベース300と記す。平文データベース300は、登録機110が登録する診療データの一覧を記憶する。鍵管理局の鍵配布機120は、指定された項目毎に暗号鍵222を発行し、医療機関の登録機110は、発行された暗号鍵222を用いて診療データを項目毎に暗号化する。以降は、簡単のため、1項目が1列に相当するものとする。
【0047】
図4は、提供機130が管理するデータベース(暗号化データベース211)の一例を示す図である。暗号化データベース211は、提供機130が保管する診療データの一覧を記憶する。暗号化データベース211の一例を暗号化データベース400と記す。暗号化データベース400は、暗号化された平文データベース300のデータを記憶する。
【0048】
図5は、提供機130が暗号化データベース211を検索した結果の一例を示す図である。暗号化データベース400の検索結果の一例を暗号化データベース検索結果500と記す。暗号化データベース検索結果500は、提供機130が暗号化データベース400から抽出した暗号化された診療データを記憶する。本例では、検索結果としてIDが「2」の暗号化レコードと「4」の暗号化レコードとが出力されたものとして説明する。
【0049】
図6は、閲覧機140が検索結果を復号化した結果の一例を示す図である。暗号化データベース検索結果500を復号化した結果の一例を検索結果600と記す。
【0050】
図7は、登録機110が管理する平文インデックスの一例を示す図である。平文インデックスの一例を平文インデックス700と記す。
【0051】
図8は、提供機130が管理する暗号化インデックスの一例を示す図である。平文インデックス700が暗号化された暗号化インデックスの一例を暗号化インデックス800と記す。鍵管理局の鍵配布機120は、指定された列毎に暗号鍵222を発行し、医療機関の登録機110は、発行された暗号鍵222を用いて診療データの平文インデックス700を列毎に暗号化する。データベース同様、以降は、簡単のため、1項目が1列に相当するものとする。
【0052】
図9は、平文クエリの一例を示す図である。平文クエリの一例を平文クエリ900と記す。平文クエリ900では、閲覧機140が、検索項目として保険者番号「0145678901」を選択したときの平文クエリが示されている。
【0053】
図10は、暗号化クエリの一例を示す図である。平文クエリ900が暗号化された暗号化クエリの一例を暗号化クエリ1000と記す。暗号化クエリ1000では、閲覧機140が作成した暗号化クエリ「E(0145678901)」が示されている。
【0054】
図11は、鍵配布機120のハードウェアに係る構成の一例を示す図である。鍵配布機120は、主な構成要素として、CPU1110、メモリ1120、記憶装置1130、入力装置1140、出力装置1150、読書装置1160、通信装置1170を備える。各構成要素は、内部信号線1180で連結されている。
【0055】
登録機110、閲覧機140、提供機130も同様のハードウェアを備える。それぞれの詳細は、繰り返しの記載となるので省略する。ただし、提供機130のCPU1110には、TEE機能が搭載されていて、TEE機能により信頼領域がメモリ1120上に設けられる。
【0056】
提供機130の機能(通常領域管理部210、信頼領域管理部220等)は、例えば、CPU1110が記憶装置1130に格納されたプログラムをメモリ1120に読み出して実行すること(ソフトウェア)により実現されてもよいし、専用の回路等のハードウェアにより実現されてもよいし、ソフトウェアとハードウェアとが組み合わされて実現されてもよい。また、提供機130の機能の一部は、提供機130と通信可能な他のコンピュータにより実現されてもよい。
【0057】
次に、検索システム100が行うデータ登録処理とデータ取得処理とについて説明する。まずは、データ登録処理について説明する。
【0058】
図12は、データ登録処理のシーケンス図の一例を示す図である。以下、シーケンス図の各ステップを説明する。
【0059】
S1211では、登録機110は、平文データベースから、検索用の項目を選択し、検索用の項目から平文データベースのレコードが識別できる番号を割り振った平文インデックスを作成する。例えば、平文インデックス700では、平文データベース300をもとに、1列目には、検索用の項目として保険者番号、2列目には、レコードを識別する番号としてレコードのIDを記憶する。
【0060】
S1212では、登録機110は、鍵配布機120に対して暗号鍵222を要求する。
【0061】
S1221では、鍵配布機120は、暗号鍵222を登録機110に送信する。
【0062】
S1213では、登録機110は、暗号化する平文データベースの列を指定し、指定した列のデータを暗号化する。登録機110は、指定した列における各セル内の平文データとS1221で送信された暗号鍵222とを入力とし、ブロック暗号のデータ暗号化関数により暗号化データを生成する。
【0063】
S1214では、登録機110は、暗号化する平文インデックスとS1221で送信された暗号鍵222とを入力とし、検索可能暗号のインデックス暗号化関数により暗号化インデックスを生成する。
【0064】
S1215では、登録機110は、S1213で生成した暗号化データとS1214で生成した暗号化インデックスとを提供機130に送信する。
【0065】
S1231では、提供機130は、S1215で送信された暗号化データをデータベースに登録する。暗号化データベース400は、暗号化データを記憶したデータベースの一例である。なお、提供機130は、ダミーの暗号化データをデータベースに登録してもよい。
【0066】
S1232では、提供機130は、S1215で送信された暗号化インデックスを登録する。暗号化インデックス800は、暗号化インデックスの一例である。
【0067】
S1233では、提供機130は、S1231とS1232とで暗号化データと暗号化インデックスとを登録した処理の結果を登録機110に送信する。
【0068】
なお、上述の処理手順はあくまで一例であり、必要に応じて処理順序と処理内容との両方または一方を変更してもよい。例えば、登録機110と鍵配布機120とが同一の主体に属している場合には、一部の処理を省いてもよい。
【0069】
S1232の暗号化インデックスの登録処理は、
図13に示すように、提供機130内の通常領域管理部210の処理フローと信頼領域管理部220の処理フローとに分けられる。
【0070】
図13は、S1232の処理の詳細の一例を示す図である。
【0071】
S1311では、提供機130の通常領域管理部210は、暗号化インデックスの各レコードにおける位置を作成する。各レコードの位置の値は、重複しなければ自由に定めてよい。通常領域管理部210は、作成した位置を暗号化インデックスに追加して暗号化インデックス管理表212を作成する。
【0072】
図14は、暗号化インデックス管理表212の一例を示す図である。以下では、7件のレコードを管理する暗号化インデックス管理表212の一例を暗号化インデックス管理表1400と記す。
【0073】
S1312では、通常領域管理部210は、信頼領域管理部220に置換用テーブル221の作成を依頼する。
【0074】
S1321では、信頼領域管理部220は、置換用テーブル221を作成する。
【0075】
図15は、置換用テーブル221の一例を示す図である。以下では、初期状態を示す置換用テーブル221を置換用テーブル1500と記す。なお、置換用テーブル1500には、ダミーの暗号化データに対応するダミーのデータが登録されていてもよい。
【0076】
S1322では、通常領域管理部210は、信頼領域管理部220から置換用テーブル221の作成結果の成否を受信する。
【0077】
次に、データ取得処理について説明する。
【0078】
図16は、データ取得処理のシーケンス図の一例を示す図である。以下、シーケンス図の各ステップを説明する。
【0079】
S1641では、閲覧機140は、鍵配布機120に対して暗号鍵222を要求する。
【0080】
S1621では、鍵配布機120は、閲覧機140により要求された暗号鍵222を閲覧機140に送信する。
【0081】
S1642では、閲覧機140は、暗号化する項目を指定する。平文クエリ900は、保険者番号が指定された例である。
【0082】
S1643では、閲覧機140は、S1642で指定した項目を検索する平文クエリを作成し、当該平文クエリとS1621で送信された暗号鍵222とを入力とし、検索可能暗号のクエリ暗号化関数により暗号化クエリを生成する。
【0083】
S1644では、閲覧機140は、S1643で作成した暗号化クエリを提供機130に送信する。
【0084】
S1631では、提供機130は、暗号化クエリで指定された項目における暗号化クエリ内の検索キーと、暗号化インデックス管理表212とを比較する処理を行う。ここでは、
図14に示す暗号化インデックス管理表1400を例に挙げて説明する。提供機130は、暗号化インデックス管理表1400から保険者番号に該当する列を抽出し、抽出した列と暗号化クエリ内の検索キーとを比較し、比較結果が等しい場合は、該当行のIDを抽出する。暗号化インデックス管理表1400の例では、4行目の保険者番号「0145678901」が検索キーと等しいので、提供機130は、組となるID「E(2,4)」を抽出する。
【0085】
S1632では、提供機130は、暗号化されたIDを復号化し、該当する暗号化データを暗号化データベース211から抽出し、閲覧機140に送信する。例えば、暗号化データベース検索結果500は、暗号化データベース400から抽出されたIDが「2」と「4」の暗号化レコードである。
【0086】
なお、S1631およびS1632における暗号化データの検索に係る処理(以下、「検索処理」と記す)については
図17を用いて詳細を述べる。
【0087】
S1645では、閲覧機140は、鍵配布機120によりS1221で送信された暗号鍵222を用いて、送信された暗号化レコードを復号化する。例えば、検索結果600は、暗号化データベース検索結果500(暗号化レコード)を復号化した結果である。
【0088】
S1633では、提供機130は、検索された暗号化インデックス(暗号化インデックス管理表212)を更新する。この際、提供機130は、検索された暗号化データについて、暗号化データベースに格納されている位置を更新してもよいし、復号化して暗号化した暗号化データに更新してもよい。なお、暗号化インデックスを更新する処理については、
図18~
図21を用いて詳細を述べる。
【0089】
図17は、検索処理に係るフローチャートの一例を示す図である。
【0090】
S1711では、提供機130の通常領域管理部210は、暗号化インデックス管理表212から未読のレコードを1つ読み込む。既に全てのレコードを読み込んだ場合は、検索処理を終了する。
【0091】
S1712では、通常領域管理部210は、レコードから抽出した検索キーと暗号化クエリとを検索可能暗号の比較関数を用いて比較する。通常領域管理部210は、検索キーと暗号化クエリとが等しいと判定した場合は、S1713に処理を移し、検索キーと暗号化クエリとが異なると判定した場合は、S1711に処理を戻す。
【0092】
S1713では、通常領域管理部210は、暗号化されたIDを信頼領域管理部220に渡す。
【0093】
S1721では、信頼領域管理部220は、暗号化されたIDと暗号鍵222とを入力とし、ブロック暗号の復号関数を用いてIDを得る。
【0094】
S1722では、信頼領域管理部220は、ORAM(Oblivious RAM)技術を用いて暗号化データを取得する。ORAM技術は、暗号データに対して演算が行われるたびに、当該暗号化データの格納位置を変更させてデータを管理する技術である。
【0095】
例えば、信頼領域管理部220において、暗号化された検索キーおよび暗号化されたID(以下、「管理データ」と記すことがある)は、
図22に示すような、木構造が用いられて管理される。木構造における木については、特に限定するものではなく、二分木であってもよいし、多分木であってもよい。以下では、説明の簡略化のため、二分木2200を例に挙げて説明する。
【0096】
二分木2200においては、根ノード2210を深さ0番目、葉ノード2220を深さL番目とし、各ノードであるバケットの数をバケット数Mとした場合、Lは、『log(M)』-1として表される。二分木2200のバケット数Mは、「7」であるので、葉ノード2220の深さLは、「2」(=L+1=『log(M)』)となる。また、葉ノード2220の数は、2Lて表されるので、「4」(=22)となる。また、バケットには、Z個(本例では、「1」)の管理データが格納されている。なお、バケットに格納される管理データがZ個より少ない場合は、ダミーのデータが格納されることにより、バケットの大きさZが維持される。
【0097】
また、二分木2200において、左からx(x∈{1,…,2L})番目の葉ノード2220を「葉ノードx」とし、葉ノードxから根ノード2210に辿る経路(パス)を「パスP(x)」とした場合、例えば、パス2230は、パスP(1)と表される。なお、管理データは、1つ以上のパスに存在している。
【0098】
例えば、信頼領域管理部220は、通常領域管理部210から、位置「4」を受け取った場合、位置「4」が含まれるパス2230(なお、パスP(2)であってもよい。)を特定する。次に、信頼領域管理部220は、パス2230を構成する他のバケット(位置「2」のバケットおよび位置「1」のバケット)に含まれる管理データ(保険者番号およびIDの組)を取得する。次に、信頼領域管理部220は、取得した管理データのIDを復号化する。次に、信頼領域管理部220は、復号化した全てのIDについて、暗号化データベース211から、各IDに対応する暗号化データを抽出する。
【0099】
なお、信頼領域管理部220を用いてORAMを実現する方法は、例えば、非特許文献1に記載されている。
【0100】
S1723では、信頼領域管理部220は、暗号化データを提供機130の通常領域管理部210に渡す。なお、通常領域管理部210は、検索可能暗号の比較関数を用いて、信頼領域管理部220から受け取った暗号化データから、暗号化クエリに対応する暗号化された検索キーの暗号化データを検索し、検索結果を閲覧機140に送信する。
【0101】
なお、上述の処理手順はあくまで一例であり、必要に応じて処理順序と処理内容との両方または一方を変更してもよい。例えば、閲覧機140と鍵配布機120とが同一の主体に属している場合には、一部の処理を省いてもよい。
【0102】
図18~
図21を用いて、S1633の暗号化インデックス管理表212を更新する処理(以下、「更新処理」と記す)について説明する。
【0103】
図18Aは、更新処理において、提供機130の通常領域管理部210と信頼領域管理部220とにおけるデータのやり取りを表すシーケンス図の一例を示す図である。
【0104】
S1811では、通常領域管理部210は、S1712で検索に該当した暗号化インデックス管理表212の位置を信頼領域管理部220に渡す。例えば、暗号化インデックス管理表1400において、4行目のレコード内の保険者番号「E(0145678901)」が暗号化クエリと等しい場合、同レコード内の位置「2」、信頼領域管理部220に渡す。
【0105】
S1821では、信頼領域管理部220は、暗号化インデックス管理表212の更新用の位置を計算する。
【0106】
以下、S1822~S1823のやり取りは、一定回数繰り返される。
【0107】
S1822では、信頼領域管理部220は、通常領域管理部210に暗号化インデックス管理表212の位置を指示する。
【0108】
S1812では、通常領域管理部210は、指示された暗号化インデックスのレコードを渡す。
【0109】
S1823では、信頼領域管理部220は、暗号化インデックス管理表212の更新用のレコードを作成する。
【0110】
S1824では、信頼領域管理部220は、暗号化インデックス管理表212の更新用のレコードを通常領域管理部210に渡す。
【0111】
S1813では、通常領域管理部210は、暗号化インデックス管理表212を更新する。
【0112】
このように、通常領域管理部210と信頼領域管理部220とが連携して暗号化インデックス管理表212を更新する。
【0113】
図18Bおよび
図18Cは、更新処理に係るフローチャートの一例を示す図である。S1821-1~S1821-3は、S1821の処理の詳細である。S1812-1~S1812-2は、S1812の処理の詳細である。S1823-1~S1823-11は、S1823の処理の詳細である。
【0114】
S1821-1では、信頼領域管理部220は、取得した暗号化インデックス管理表212の位置を変数posに格納する。
【0115】
S1821-2では、信頼領域管理部220は、変数posがN/2以上であればS1822に処理を移し、変数posがN/2未満であればS1821-3に処理を移す。なお、Nは、暗号化インデックス管理表212のレコードの総数である。
【0116】
S1821-3では、信頼領域管理部220は、「0」か「1」の値を取る乱数ビットrをランダムに生成する。さらに、信頼領域管理部220は、変数posを2倍し、乱数ビットrを加算した値に変数posを更新する。即ち、信頼領域管理部220は、pos←2pos+rとする。信頼領域管理部220は、変数posを更新した後、S1821-2に処理を戻す。
【0117】
S1822では、信頼領域管理部220は、変数posを変数pos’にコピーし、通常領域管理部210に変数pos’を渡す。
【0118】
S1812-1では、通常領域管理部210は、変数pos’と同じ値を位置とする、暗号化インデックス管理表212のレコードを信頼領域管理部220に渡す。
【0119】
S1812-2では、通常領域管理部210は、pos’←[pos’/2]に更新し、pos’>0であれば、S1812-1に処理を戻し、path≦0であれば、S1823-1に処理を移す。
【0120】
S1823-1では、信頼領域管理部220は、変数xを初期化し、変数hに[log(N)]を格納する。即ち、信頼領域管理部220は、x←0かつh←[log(N)]とする。さらに、信頼領域管理部220は、pos’から[N/2]を減算した値を変数pathに格納する。即ち、信頼領域管理部220は、path←pos’-[N/2]とする。信頼領域管理部220は、変数yにpathの値をコピーする。
【0121】
S1823-2では、信頼領域管理部220は、S1812-1で受け取ったレコードから最も位置(pos)の値が高いレコードを抽出する。なお、S1823-2の実施が2回目の場合は、2番目にposの値が高いレコードを、3回目の場合は3番目にposの値が高いレコードを抽出する。
【0122】
S1823-3では、信頼領域管理部220は、S1812で取得したレコードから位置(pos)を削除し、当該レコードに変数pathを追加する。
【0123】
S1823-4では、信頼領域管理部220は、レコードをいったん復号化し、再暗号化してから置換用テーブル221に格納する。暗号化は、確率的な手法でなされるため、再暗号化した後の暗号化データの値は、以前とは異なる。
【0124】
S1823-5では、信頼領域管理部220は、xを1つ増やし、hを1つ減らし、h<0ならば、S1823-7に処理を移し、h≧0ならばS1823-6に処理を移す。
【0125】
S1823-6では、信頼領域管理部220は、power(2,x『path/2』-1)<y≦power(2,x『path/2』)を満たす整数をランダムに生成し、これを変数yに格納する。そして、信頼領域管理部220は、S1823-2に処理を戻す。
【0126】
S1823-7では、信頼領域管理部220は、変数xを再度初期化し、変数hに[log(N)]を格納する。即ち、信頼領域管理部220は、x←0かつh←[log(N)]とする。
【0127】
S1823-8では、信頼領域管理部220は、posから[N/2]を減算した値を変数pathに格納する。即ち、信頼領域管理部220は、path←pos-[N/2]とする。また、信頼領域管理部220は、変数yにpathの値をコピーする。
【0128】
S1823-9では、信頼領域管理部220は、yと同じ値をもつレコードを置換用テーブル221からランダムに取得し、取得したレコードを置換用テーブル221から削除する。
【0129】
S1823-10では、信頼領域管理部220は、xを1つ増やし、hを1つ減らし、h<0ならば、S1824に処理を移し。h≧0ならば、S1823-11に処理を移す。
【0130】
S1823-11では、信頼領域管理部220は、power(2,x『path/2』-1)<path≦power(2,x『path/2』)を満たすレコードをランダムに置換用テーブル221から取得し、S1823-9に処理を戻す。
【0131】
S1824では、信頼領域管理部220は、取得したレコード(暗号化インデックス管理表212の更新用のレコード)を全て通常領域管理部210に渡す。
【0132】
S1813では、通常領域管理部210は、暗号化インデックス管理表212のレコードを更新する。例えば、通常領域管理部210は、S1812-1のレコードの保険者番号とIDとを、S1823-9の保険者番号とIDとで上書きする。
【0133】
【0134】
図19~
図21は、通常領域管理部210に格納されている暗号化インデックス管理表212と信頼領域管理部220に格納されている置換用テーブル221との一例を示す図である。
【0135】
暗号化インデックス管理表1910は、7件のレコードを保有し、各レコードは、検索キーである保険者番号、ID、位置の組で構成される。Nは、レコードの総数であるので、N=7である。置換用テーブル1920には、ダミーのデータとして2件のレコードがあり、各レコードは、保険者番号、ID、Pathの組で構成される。以下では、暗号化インデックス管理表1910の4行目のレコード内の保険者番号「E(0145678901)」が暗号化クエリと等しい場合を例に挙げて説明する。
【0136】
S1821-1では、提供機130の信頼領域管理部220は、取得した暗号化インデックス管理表2110の位置「2」を変数posに格納する。
【0137】
S1821-2では、信頼領域管理部220は、変数posの値「2」は、N/2(=7/2)未満であるので、S1821-3に処理を移す。
【0138】
S1821-3では、信頼領域管理部220は、乱数ビットrをランダムに生成し、値「0」を得た(r=0)。
【0139】
さらに、信頼領域管理部220は、変数posの値「2」を2倍し、乱数ビットr=0を加算した値を変数posとする。即ち、pos←2×2+0=4である。信頼領域管理部220は、変数posを更新した後、S1821-2に処理を移す。
【0140】
S1821-2では、信頼領域管理部220は、変数posの値「4」は、N/2(=7/2)以上であるので、S1822に処理を移す。
【0141】
S1822では、信頼領域管理部220は、変数pos’←pos=4とし、通常領域管理部210に変数pos’=4を渡す。
【0142】
このように、S1821-2およびS1821-3では、信頼領域管理部220は、暗号化データが格納されている位置を含むパス(以下では、「更新対象のパス」と記す)を決定する。例えば、位置「4」のノード、位置「2」のノード、位置「1」のノードからなるパスを決定する。なお、値「1」を得た場合は、他のパス(位置「5」のノード、位置「2」のノード、位置「1」のノードからなるパス)が決定される。
【0143】
S1812-1では、通常領域管理部210は、変数pos’の値「4」を位置とする、暗号化インデックス管理表1910のレコードを信頼領域管理部220に渡す。本例では、2行目のレコード「E(3323456789), E(12,13), 4」が該当する。
【0144】
S1812-2では、通常領域管理部210は、pos’←[pos’/2]=[4/2]=2としpos’>0なので、S1812-1に処理を戻す。
【0145】
S1812-1では、通常領域管理部210は、変数pos’の値「2」を位置とする、暗号化インデックス管理表1910のレコードを信頼領域管理部220に渡す。本例では、4行目のレコード「E(0145678901), E(2,4), 2」が該当する。
【0146】
S1812-2では、通常領域管理部210はpos’←[pos’/2]=[2/2]=1としpos’>0なので、S1812-1に処理を戻す。
【0147】
S1812-1では、通常領域管理部210は、変数pos’の値「1」を位置とする、暗号化インデックス管理表212のレコードを信頼領域管理部220に渡す。暗号化インデックス管理表1910では、6行目のレコード「E(0378901234), E(6,7), 1」が該当する。
【0148】
S1812-2では、通常領域管理部210は、pos’←[pos’/2]=[1/2]=0とし、pos’≦0なので、S1823-1に処理を移す。
【0149】
このように、S1812-1およびS1812-2では、通常領域管理部210は、更新対象のパスに係る暗号化インデックス管理表212のレコードを特定し、信頼領域管理部220に渡す。本例では、暗号化インデックス管理表1910の2番目のレコードと、4番目のレコードと、6番目のレコードとが信頼領域管理部220に渡される。
【0150】
S1823-1では、信頼領域管理部220は、変数xを初期化し、変数hに[log(7)]を格納する。即ち、信頼領域管理部220は、x←0かつh←[log(N)]=2とする。さらに、信頼領域管理部220は、pos[N/2]を変数pathに格納する。即ち、信頼領域管理部220は、path←pos-[N/2]=4-[7/2]=1とする。変数yの値をy←path=1とする。
【0151】
S1823-2では、信頼領域管理部220は、S1812-1で受け取ったレコードから最も位置(pos)の値が高いレコードを抽出する。
【0152】
S1823-3では、信頼領域管理部220は、当該レコードから位置(pos)=4を削除し、変数pathとしてy=1を追加する。
【0153】
S1823-4では、信頼領域管理部220は、当該レコードの保険者番号およびIDを復号化し、再暗号化してから置換用テーブル2020に格納する。置換用テーブル2020では、3行目のレコード「E(3323456789), E(12,13), 1」が格納したレコードに該当する。
【0154】
S1823-5では、信頼領域管理部220は、x←x+1=0+1=1、h←2-1=1とし、h≧0なので、S1823-6に処理を移す。
【0155】
S1823-6では、信頼領域管理部220は、power(2,x『path/2』-1)<y≦power(2,x『path/2』)を満たす整数をランダムに生成し、pathに格納する。
power(2,x『path/2』-1)=power(2,『1/2』-1)=power(2,0)=20=1
power(2,x『path/2』)=power(2,『1/2』)=power(2,1)=21=2
信頼領域管理部220は、1<y≦2を満たす整数をランダムに生成し、y=2とする。信頼領域管理部220は、S1823-2に処理を戻す。
【0156】
S1823-2では、信頼領域管理部220は、2番目にposの値が高いレコードを抽出する。
【0157】
S1823-3では、信頼領域管理部220は、当該レコードから位置(pos)=2を削除し、変数pathとしてy=2を追加する。
【0158】
S1823-4では、信頼領域管理部220は、当該レコードの保険者番号およびIDを復号化し、再暗号化してから置換用テーブル2020に格納する。置換用テーブル2020では、4行目のレコード「E(0145678901), E(2,4), 2」が格納したレコードに該当する。
【0159】
このように、パスの更新においては、当該レコードの位置が含まれるパスからランダムにパスが選ばれる。例えば、位置「2」のノードについては、パス「1」またはパス「2」に含まれるため、更新後のパスとして、パス「1」とパス「2」との一方がランダムに選ばれる。
【0160】
S1823-5では、信頼領域管理部220は、x←x+1=1+1=2、h←1-1=0とし、h≧0なので、S1823-6に処理を移す。
【0161】
S1823-6では、信頼領域管理部220は、power(2,x『path/2』-1)<y≦power(2,x『path/2』)を満たす整数をランダムに生成し、pathに格納する。
power(2,x『path/2』-1)=power(2,2『1/2』-1)=power(2,0)=20=1
power(2,x『path/2』)=power(2,2『1/2』)=power(2,2)=22=4
信頼領域管理部220は、1<y≦4を満たす整数をランダムに生成し、y=3とする。信頼領域管理部220は、S1823-2に処理を戻す。
【0162】
S1823-2では、信頼領域管理部220は、3番目にposの値が高いレコードを抽出する。
【0163】
S1823-3では、信頼領域管理部220は、当該レコードから位置(pos)=1を削除し、変数pathとしてy=3を追加する。
【0164】
S1823-4では、信頼領域管理部220は、当該レコードの保険者番号およびIDを復号化し、再暗号化してから置換用テーブル2020に格納する。置換用テーブル2020では、5行目のレコード「E(0378901234), E(6,7), 3」が格納したレコードに該当する。
【0165】
例えば、位置「1」のノードについては、パス「1」~パス「4」の何れかに含まれるため、更新後のパスとして、パス「1」~パス「4」の中から1つランダムに選ばれる。
【0166】
S1823-5では、信頼領域管理部220は、x←x+1=2+1=3,h←0-1=-1とし、h<0なので、S1823-7に処理を移す。
【0167】
なお、更新後のパスの決定方法については、上述に限られるものではなく、例えば、ノードの位置にかかわらず、全てのパスの中からランダムに決定する方法を採用してもよい。
【0168】
S1823-7では、信頼領域管理部220は、変数xを再度初期化し、変数hに[log(N)]を格納する。即ち、信頼領域管理部220は、x←0かつh←[log(N)]=[log(7)]=2とする。
【0169】
S1823-8では、信頼領域管理部220は、変数pathにpos-[n/2]=4-[7/2]=1を格納し、変数y=1とする。
【0170】
S1823-9では、信頼領域管理部220は、yと同じ値をもつレコードを置換用テーブル2020からランダムに取得し、取得したレコードを置換用テーブル2020から削除する。さらに、信頼領域管理部220は、取得したレコードを通常領域管理部210に渡してもよい。置換用テーブル2020では、信頼領域管理部220は、1行目のレコード「E(1267890123), E(1,2), 1」を取得したとする。
【0171】
S1823-10では、信頼領域管理部220は、x←x+1=0+1=1,h←2-1=1とし、h≧0なので、S1823-11に処理を移す。
【0172】
S1823-11では、信頼領域管理部220は、power(2,x『path/2』-1)<y≦power(2,x『path/2』)を満たす整数をランダムに生成し、pathに格納する。
power(2,x『path/2』-1)=power(2,『1/2』-1)=power(2,0)=20=1
power(2, x『path/2』)=power(2,『1/2』)=power(2,1)=21=2
信頼領域管理部220は、1<y≦2を満たす整数をランダムに生成し、y=2とする。信頼領域管理部220は、S1823-9に処理を戻す。
【0173】
S1823-9では、信頼領域管理部220は、y=2と同じ値をもつレコードを置換用テーブル2020からランダムに取得し、取得したレコードを置換用テーブル2020から削除する。さらに、信頼領域管理部220は、取得したレコードを通常領域管理部210に渡してもよい。置換用テーブル2020では、信頼領域管理部220は、2行目のレコード「E(1378901234), E(14,15), 2」を取得したとする。
【0174】
このように、暗号化インデックス管理表212における更新対象のレコードの位置が含まれる全てのパスを対象として、置換用テーブル221から、当該パスのレコードが1つ取得される。例えば、暗号化インデックス管理表2010における更新対象のレコードの位置が「2」である場合、位置が「2」のノードが含まれるパスは、パス「1」またはパス「2」であるので、置換用テーブル2020からは、pathが「1」または「2」であるレコードのうちから、ランダムに1つのレコード(本例では、2行目のレコード)が取得される。
【0175】
S1823-10では、信頼領域管理部220は、x←x+1=1+1=2、h←1-1=0とし、h≧0なので、S1823-11に処理を移す。
【0176】
S1823-11では、信頼領域管理部220は、power(2,x『path/2』-1)<y≦power(2,x『path/2』)を満たす整数をランダムに生成し、pathに格納する。
power(2,2『path/2』-1)=power(2,2『1/2』-1)=power(2,0)=20=1
power(2,2『path/2』)=power(2,2『1/2』)=power(2,1)=22=4
信頼領域管理部220は、1<y≦4を満たす整数をランダムに生成し、y=3とする。信頼領域管理部220は、S1823-9に処理を戻す。
【0177】
S1823-9では、信頼領域管理部220は、y=3と同じ値をもつレコードを置換用テーブル2020からランダムに取得し、取得したレコードを置換用テーブル2020から削除する。さらに、信頼領域管理部220は、取得したレコードを通常領域管理部210に渡してもよい。置換用テーブル2020では、5行目のレコード「E(0378901234), E(6,7), 3」を取得したとする。
【0178】
例えば、暗号化インデックス管理表2010における更新対象のレコードの位置が「1」である場合、位置が「1」のノードが含まれるパスは、パス「1」~パス「4」の何れかであるので、置換用テーブル2020からは、pathが「1」~「4」の何れかであるレコードのうちから、ランダムに1つのレコード(本例では、5行目のレコード)が取得される。
【0179】
S1813では、通常領域管理部210は、S1812-1のレコードの保険者番号およびIDをS1823-9のレコードの保険者番号およびIDで上書きする。
【0180】
上述の例では、暗号化インデックス管理表1910は、更新処理により、暗号化インデックス管理表2110となる。また、置換用テーブル1920は、更新処理により、置換用テーブル2120となる。
【0181】
このように、通常領域管理部210で暗号化インデックスを検索した後に、暗号化インデックスから検索結果に等しいレコードを含む複数のレコードを信頼領域管理部220に読み込み、該レコードを復号化し、再暗号化した上で、置換用テーブル221のレコードとランダムにシャッフルした上で、通常領域管理部210の暗号化インデックスを更新することにより、通常領域管理部210しか閲覧できないサービス提供者から検索頻度を秘匿できる。結果、検索頻度から元のデータが漏洩する問題を解消し、ユーザである医療機関や医療研究者も情報の漏洩の心配なく、安心して提供機130の検索機能を利用できる。
【0182】
(2)付記
上述の実施の形態においては、本発明を検索システムに適用するようにした場合について述べたが、本発明はこれに限らず、この他種々のシステム、装置、方法、プログラムに広く適用することができる。
【0183】
また、上述の実施の形態においては、暗号化インデックス管理表212を更新するための置換用テーブル221を採用する場合について述べたが、本発明はこれに限らない。例えば、暗号化データベースを更新するための置換用テーブルを採用するようにしてもよい。この場合、例えば、置換用テーブルにおいて復号化されて再び暗号化された暗号化検索キーが管理され、再暗号化された暗号化検索キーで暗号化データベースの暗号化検索キーが更新される。また、例えば、暗号化データベースには、位置の列が設けられてもよい。この場合、信頼領域管理部220は、暗号化データベースに格納されている暗号化データの格納位置を管理するための二分木または多分木を備える。かかる木のバケットには、管理データとして複数の暗号化検索キーが含まれていてもよい。上記構成によれば、暗号化データベースの暗号化データの位置またはデータ内容が無作為に入れ替えられるので、例えば、検索結果の頻度を解読され難くすることができる。
【0184】
また、上述の実施の形態においては、通常領域管理部210は、信頼領域管理部220から受け取った暗号化データのうち、暗号化検索キーの暗号化データを閲覧機140に送信する場合について述べたが、本発明はこれに限らない。例えば、通常領域管理部210は、信頼領域管理部220から受け取った暗号化データ全てを閲覧機140に送信し、閲覧機140において、暗号化検索キーの暗号化データを特定するようにしてもよい。
【0185】
また、上述の実施の形態においては、通常領域管理部210は、暗号化されたIDを信頼領域管理部220に渡して暗号化データを取得する場合について述べたが、本発明はこれに限らない。例えば、通常領域管理部210は、暗号化されたIDを閲覧機140に返信し、閲覧機140で暗号化されたIDおよび当該暗号化されたIDと同じ組の暗号化されたIDを復号化したID群を提供機130に送信して暗号化データを取得するようにしてもよい。
【0186】
また、上述の実施の形態において、各テーブルの構成は一例であり、1つのテーブルは、2以上のテーブルに分割されてもよいし、2以上のテーブルの全部または一部が1つのテーブルであってもよい。
【0187】
また、上述の実施の形態において、説明の便宜上、XXテーブルを用いて各種のデータを説明したが、データ構造は限定されるものではなく、XX情報等と表現してもよい。
【0188】
また、上記の説明において、各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記憶装置、または、ICカード、SDカード、DVD等の記録媒体に置くことができる。
【0189】
上述した実施の形態は、例えば、以下の特徴的な構成を備える。
【0190】
データが暗号化された暗号化データを閲覧する閲覧機(例えば、閲覧機140)からのクエリ(例えば、平文クエリ900)が暗号化された暗号化クエリ(例えば、暗号化クエリ1000)に対する検索を行い、上記閲覧機に検索結果を提供する提供機(例えば、あ提供機130)を備える検索システム(例えば、検索システム100)は、上記提供機での検索に用いられる検索キーが暗号化された暗号化検索キー(例えば、暗号化された保険者番号)と、上記暗号化検索キーと対応付けられている、暗号化データを識別可能な識別情報が暗号化された暗号化ID(例えば、暗号化されたID)と、が対応付けられた管理用情報(例えば、置換用テーブル221)を、上記提供機の管理者が閲覧不可能な第1の記憶領域(例えば、信頼領域。なお、閲覧機140の記憶領域であってもよい。)において記憶し、上記管理用情報のうち、上記閲覧機からの暗号化クエリに対応する暗号化検索キーと、上記暗号化検索キーに対応する暗号化IDと、を復号化して再び暗号化する第1の管理部(例えば、信頼領域管理部220)と、上記提供機での検索に用いられる暗号化検索キーと、上記暗号化検索キーに対応付けられた1つ以上の暗号化IDと、が対応付けられたインデックス情報(例えば、暗号化インデックス管理表212)を第2の記憶領域(例えば、通常領域。なお、信頼領域であってもよい。)に記憶し、上記インデックス情報のうち、上記閲覧機からの暗号化クエリに対応する暗号化検索キーおよび暗号化IDを、上記第1の管理部により復号化および暗号化された暗号化検索キーおよび暗号化IDに更新(例えば、位置および/またはデータ内容を更新)する第2の管理部(例えば、通常領域管理部210)と、を備える。
【0191】
上記構成では、管理者が閲覧不可能な領域で、暗号化検索キーおよび暗号化IDが再暗号化され、再暗号化された暗号化検索キーおよび暗号化IDでインデックス情報が更新される。このように、インデックス情報を更新することで、例えば、検索結果の頻度を解読され難くすることができる。上記構成によれば、例えば、検索の頻度から元のデータが漏洩してしまう事態を回避することができる。また、暗号化データの検索が安全に実施されることで、提供機のユーザは、情報の漏洩を心配することなく、安心してデータを提供機に預けることができる。
【0192】
上記第1の管理部は、上記提供機での検索に用いられる暗号化検索キーおよび上記暗号化検索キーに対応付けられた1つ以上の暗号化IDを複数まとめた組(例えば、木構造におけるパス)として管理し、上記管理用情報のうち、上記閲覧機からの暗号化クエリに対応する暗号化検索キーが含まれる組のうち少なくとも1つの暗号化検索キーおよび暗号化ID(なお、当該パスに含まれる全てのノードのバケットに含まれる管理データの暗号化検索キーおよび暗号化IDであってもよいし、当該パスに含まれる一部のノードのバケットに含まれる管理データの暗号化検索キーおよび暗号化IDであってもよい。)を、上記管理用情報に含まれる他の暗号化検索キーおよび暗号化IDに変更し、上記第2の管理部は、上記インデックス情報のうち、上記少なくとも1つの暗号化検索キーおよび暗号化IDを、上記他の暗号化検索キーおよび暗号化IDに更新する。
【0193】
上記構成では、インデックス情報において暗号化検索キーおよび暗号化IDの位置および/またはデータ内容が無作為に入れ替えられるので、例えば、検索結果の頻度をより解読され難くすることができる。
【0194】
上記管理用情報には、ダミーの暗号化検索キーおよびダミーの暗号化IDが含まれている(例えば、
図19参照)。
【0195】
上記構成では、インデックス情報においてダミーの暗号化検索キーおよびダミーの暗号化IDが含まれるので、例えば、検索結果の頻度をより解読され難くすることができる。
【0196】
上記閲覧機および上記提供機において、暗号化および復号化に用いる暗号鍵(例えば、共通鍵暗号方式で用いられる共通鍵、公開鍵暗号方式で用いられる秘密鍵等)を共有し、上記第1の記憶領域は、上記提供機に設けられ、上記第1の管理部は、上記第1の記憶領域において上記暗号鍵を記憶する(例えば、
図2参照)。
【0197】
上記構成では、提供機においては、提供機の管理者が閲覧不可能な第1の記憶領域に暗号鍵が記憶される。上記構成によれば、例えば、提供機の管理者が暗号鍵を不正に取得してしまう事態を回避できるので、情報の漏洩をより防ぐことができるようになる。
【0198】
暗号化されたデータである暗号化データと、上記暗号化データを検索するための暗号化検索キーと、が対応付けられている複数のデータ(例えば、レコード)を記憶する記憶部(例えば、暗号化データベース211)を備え、上記第2の管理部は、上記記憶部により記憶されているデータのうち、上記閲覧機からの暗号化クエリに対応する暗号化検索キーを、上記第1の管理部により上記暗号化検索キーが復号化されて暗号化された暗号化検索キーに更新する。
【0199】
上記構成では、暗号化データの内容が検索するたびに更新されるので、例えば、検索結果の頻度をより解読され難くすることができる。
【0200】
暗号化されたデータである暗号化データと、上記暗号化データを検索するための暗号化検索キーと、上記暗号化データおよび上記暗号化検索キーを識別可能な識別情報であるIDとが対応付けられている複数のデータ(例えば、レコード)を記憶する記憶部(例えば、暗号化データベース211)を備え、上記第2の管理部は、上記インデックス情報を用いて、上記閲覧機からの暗号化クエリと同じ暗号化検索キーに対応付けられている暗号化IDを上記第1の管理部に渡し(例えば、S1711~S1713参照)、上記第1の管理部は、上記提供機での検索に用いられる暗号化検索キーおよび上記暗号化検索キーに対応付けられた1つ以上の暗号化IDを複数まとめた組として管理し、上記第2の管理部から受け取った暗号化IDと、上記暗号化IDが含まれる組の暗号化IDとを復号化し、復号化したIDにより識別される暗号化データを上記第2の管理部に渡し(例えば、S1721~S1723参照)、上記第2の管理部は、上記第1の管理部から受け取った暗号化データのうち、上記暗号化検索キーの暗号化データを上記閲覧機に送信する(例えば、S1632参照)。
【0201】
上記構成によれば、例えば、暗号化IDを閲覧機に返信し、閲覧機で暗号化IDおよび当該暗号化IDと同じ組の暗号化IDを復号化したID群を提供機に送信して暗号化データを取得する場合と比較して、提供機および閲覧機における通信の回数を増やすことなく、検索結果の頻度を解読され難くすることができる。
【0202】
上記提供機は、TEE機能を備える装置(例えば、TEE機能を備えるCPU1110)を備え、上記第1の記憶領域は、上記提供機に設けられ、上記第1の記憶領域は、上記TEE機能によりメモリ(例えば、メモリ1120)上に確保されている。
【0203】
上記構成によれば、提供機および閲覧機における通信の回数を増やすことなく、検索結果の頻度を解読され難くすることができる。
【0204】
上記第1の記憶領域および第1の管理部は、上記閲覧機に設けられている。
【0205】
上記構成によれば、TEE機能を備える装置を用いることなく、検索結果の頻度を解読され難くすることができる。
【0206】
なお、本発明は、上述の実施形態に限定されるものではなく、その趣旨の範囲内で様々な変形が可能である。例えば、上記した実施の形態は、本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施の形態の構成の一部を他の実施の形態の構成に置き換えることも可能であり、また、ある実施の形態の構成に他の実施の形態の構成を加えることも可能である。また、各実施の形態の構成の一部について、他の構成の追加、削除、置換等をすることが可能である。
【0207】
また、データの値は、整数に限定されるものではなく、実数としてもよい。
【0208】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部または全部を、例えば、集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、ICカード、SDカード、DVD等の記録媒体に置くことができる。
【0209】
また、制御線、情報線等は、説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線、情報線等を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
【0210】
また上述した構成については、本発明の要旨を超えない範囲において、適宜に、変更したり、組み替えたり、組み合わせたり、省略したりしてもよい。
【0211】
「A、B、およびCのうちの少なくとも1つ」という形式におけるリストに含まれる項目は、(A)、(B)、(C)、(AおよびB)、(AおよびC)、(BおよびC)または(A、B、およびC)を意味することができると理解されたい。同様に、「A、B、またはCのうちの少なくとも1つ」の形式においてリストされた項目は、(A)、(B)、(C)、(AおよびB)、(AおよびC)、(BおよびC)または(A、B、およびC)を意味することができる。
【符号の説明】
【0212】
100……検索システム、130……提供機、140……閲覧機。