(57)【要約】【課題】データベースのインデックス値を秘匿する。【解決手段】本方法は、データ格納部に格納された複数のデータブロックに含まれるインデックスの複数の値をグループ化し、複数のデータブロックの各々について、当該データブロックに含まれるインデックスの値が属するグループを識別するデータを特定し、複数のデータブロックの各々について、当該データブロックについて特定された上記データと当該データブロックの暗号化データとを含む検索用データを生成する処理を含む。【選択図】図１７
2014098990.tif 000002
【特許請求の範囲】
【請求項１】
データ格納部に格納された複数のデータブロックに含まれるインデックスの複数の値をグループ化し、
前記複数のデータブロックの各々について、当該データブロックに含まれるインデックスの値が属するグループを識別するデータを特定し、
前記複数のデータブロックの各々について、当該データブロックについて特定された前記データと当該データブロックの暗号化データとを含む検索用データを生成する
処理を含み、コンピュータにより実行されるデータ生成方法。
【請求項２】
前記グループを識別するデータが、グループの識別子又はグループに含まれるインデックスのハッシュ値である
請求項１記載のデータ生成方法。
【請求項３】
前記グループ化する処理が、
所属するインデックスの値を含むデータブロックの数のばらつきが最小又は所定の許容範囲内であるように、前記インデックスの値をグループ化する処理
を含む請求項１又は２記載のデータ生成方法。
【請求項４】
前記グループ化する処理が、
前記インデックスの複数の値のうち最も多く出現する値の出現回数に応じてグループ数を決定する処理
を含む請求項１乃至３のいずれか１つ記載のデータ生成方法。
【請求項５】
前記グループ化する処理が、
前記インデックスの複数の値のうち最も多く出現する値の出現回数とグループ数との積が前記複数のデータブロックの数を超えないように前記グループ数を決定する処理
を含む請求項１乃至３のいずれか１つ記載のデータ生成方法。
【請求項６】
第１のコンピュータが、
インデックスの値を含む検索条件を受け付け、
インデックスの値が属するグループを特定するためのデータを格納するデータ格納部から、前記検索条件に含まれる前記インデックスの値が属するグループを特定し、
前記グループを識別するデータを含む検索要求を生成して、所属するグループを識別するデータと対応する暗号化データブロックとを各々含む複数の検索用データブロックを保持する第２のコンピュータに対して送信し、
前記第２のコンピュータから、前記検索要求に応じた１又は複数の暗号化データブロックを受信し、
前記検索要求に応じた１又は複数の暗号化データブロックを復号することで１又は複数の平文データブロックを生成し、
前記１又は複数の平文データブロックから、前記検索条件を満たす平文データブロックを抽出する
処理を実行する検索方法。
【請求項７】
前記グループを識別するデータが、前記グループの識別子又は前記グループに属するインデックスのハッシュ値である
請求項６記載の検索方法。
【請求項８】
データ格納部に格納された複数のデータブロックに含まれるインデックスの複数の値をグループ化し、
前記複数のデータブロックの各々について、当該データブロックに含まれるインデックスの値が属するグループを識別するデータを特定し、
前記複数のデータブロックの各々について、当該データブロックについて特定された前記データと当該データブロックの暗号化データとを含む検索用データを生成する
処理を、コンピュータに実行させるためのデータ生成プログラム。
【請求項９】
第１のコンピュータに、
インデックスの値を含む検索条件を受け付け、
インデックスの値が属するグループを特定するためのデータを格納するデータ格納部から、前記検索条件に含まれる前記インデックスの値が属するグループを特定し、
前記グループを識別するデータを含む検索要求を生成して、所属するグループを識別するデータと対応する暗号化データブロックとを各々含む複数の検索用データブロックを保持する第２のコンピュータに対して送信し、
前記第２のコンピュータから、前記検索要求に応じた１又は複数の暗号化データブロックを受信し、
前記検索要求に応じた１又は複数の暗号化データブロックを復号することで１又は複数の平文データブロックを生成し、
前記１又は複数の平文データブロックから、前記検索条件を満たす平文データブロックを抽出する
処理を実行させるための検索プログラム。
【請求項１０】
データ格納部に格納された複数のデータブロックに含まれるインデックスの複数の値をグループ化するグループ化部と、
前記複数のデータブロックの各々について、当該データブロックに含まれるインデックスの値が属するグループを識別するデータを特定し、前記複数のデータブロックの各々について、当該データブロックについて特定された前記データと当該データブロックの暗号化データとを含む検索用データを生成する生成部と、
を有する情報処理装置。
【請求項１１】
インデックスの値を含む検索条件を受け付ける入力部と、
インデックスの値が属するグループを特定するためのデータを格納するデータ格納部から、前記検索条件に含まれる前記インデックスの値が属するグループを特定し、前記グループを識別するデータを含む検索要求を生成する生成部と、
所属するグループを識別するデータと対応する暗号化データブロックとを各々含む複数の検索用データブロックを保持する他のコンピュータに対して、前記検索要求を送信する送信部と、
前記他のコンピュータから、前記検索要求に応じた１又は複数の暗号化データブロックを受信する受信部と、
前記検索要求に応じた１又は複数の暗号化データブロックを復号することで１又は複数の平文データブロックを生成し、前記１又は複数の平文データブロックから、前記検索条件を満たす平文データブロックを抽出する抽出部と、
を有する情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、情報の秘匿検索技術に関する。
【背景技術】
【０００２】
検索のためのインデックス値を秘匿化してデータベースに登録し、当該データベースに対する検索時にもキーワードを秘匿したまま検索するという要求が存在する。このため、例えば、検索のためのインデックス値を、鍵付ハッシュ関数で暗号化してデータベースに登録して検索に用いる方法がある。
【０００３】
例えば図１のようなデータを考える。一番右の「詳細」の列以外の５列は検索用インデックスだとする。図１のまま登録するとデータベースの管理者からデータを秘匿できないので、暗号化して登録する。
【０００４】
そこで、例えば図２のように暗号化することが考えられる。Ｈk（）は鍵付ハッシュ関数で、例えばＨＭＡＣ（Keyed-Hashing for Message Authentication code）などである。Ｅk（）は可逆暗号化関数で、たとえばＡＥＳ（Advanced Encryption Standard）などである。
【０００５】
図２を見ても、鍵Ｋを知らないデータベースの管理者等からは平文（すなわち元データ）を一般的には知ることはできない。一方、鍵Ｋを知っている利用者は検索用インデックス値を使って検索をすることができる。例えば、「姓＝佐藤」の行を知りたい場合は、「姓＝Ｈk（佐藤）」を指定した検索クエリーを用いれば、データベースから検索結果（１行目、... など）を得ることができる。
【０００６】
しかしながら、攻撃者（データベースの管理者など）が平文の出現頻度を知っている場合には、攻撃者は検索用インデックス値の平文を推測できてしまうという問題がある。
【０００７】
例えば、「姓」の平文として、「佐藤」が最頻出であることを攻撃者が知っているとする。そこで、図３に模式的に示すように、図２の「姓」列の出現頻度についてヒストグラムを生成すると、「姓」列の値「ＨK(佐藤)」が最頻出であると分かれば、攻撃者は、その値の平文は「佐藤」であると容易に推測できる。
【０００８】
また、平文をいくつかの別の平文に変換し、秘匿化文（例えばハッシュ値）の頻度を均一にすることで、頻度情報からの平文推測を防ぐ技術がある。例えば、「姓」の頻度情報として、図４左に示すように、「佐藤」は「山田」の２．５倍頻出するものとする。そうすると、図４右に模式的に示すように、例えば「佐藤」を「佐藤１」乃至「佐藤５」の５種類の値のいずれかにランダムに変換し、「山田」を「山田１」と「山田２」の２種類の値のどちらかにランダムに変換する。そうすると、「佐藤」と「山田」についての変換後のインデックス値の出現頻度は均一化される。そして、図５に示すように、変換後のインデックス値の鍵付ハッシュ値の頻度も均一化されるため、データベースの管理者は暗号文の出現頻度から平文を推測することができない。この例では、少なくとも「佐藤」と「山田」のいずれであるかは分からない。
【０００９】
しかし、この従来技術には、検索結果の頻度から平文を推測されることへの対策がない。例えば、上で述べた例において、利用者が「姓＝佐藤」の行を抽出する状況を考える。「佐藤」から「佐藤１」乃至「佐藤５」への変換はランダムであるので、それら個々の値を独立に検索する理由はない。すなわち、「姓＝佐藤」の行を知りたい場合、「姓＝Ｈk（佐藤１）」乃至「姓＝ＨK（佐藤５）」の５種類の検索クエリーを短時間内に発行することになる。
【００１０】
その検索結果の行数の総和は、元々「姓＝佐藤」だった行数に一致する。よって、データベースの管理人等が、図６に模式的に示すように、検索クエリーとその結果を何度も観測していると、「姓」に対する検索クエリーについて、短時間内の検索結果に含まれる行番号のうち他の検索結果でも必ず共起する行番号の集合を抽出し、図７に示すようにヒストグラムを生成してみる。そうすると、含まれる行の数が最も多い集合が、「姓」が平文「佐藤」の行の集合であることが推定できる。また、含まれる行の数が最も多い集合の行数×約０．４が行数となっている集合についても、「姓」が平文「山田」の行の集合であることを推測できる。このような検索結果における共起をも考慮に入れないと、検索用インデックス値を推測されてしまう。
【００１１】
なお、別の従来技術として、検索クエリーに偽データを含めることで検索クエリーの秘匿性を確保する技術がある。しかし、この従来技術は、あくまで検索クエリーの秘匿性を確保するためのものであり、検索結果における頻度から平文を推測されることへの対策にはならない。
【００１２】
たとえば、前述の例で、「姓＝佐藤」の行を知りたい場合、この従来技術では「姓＝ＨK（佐藤１）」乃至「姓＝ＨK（佐藤５）」の５種類に加え「姓＝ランダム値」の検索クエリーを短時間内に発行し、「姓＝ＨK（佐藤１）」乃至「姓＝ＨK（佐藤５）」の５種類の検索結果の行を抽出する。しかし、ランダム値が鍵付ハッシュ値に一致することはほぼ無いので、やはり、データベースの管理者等が検索結果を観測すれば、上と同じ方法で、「姓」が平文「佐藤」の行の集合を推定することができる。また、たとえランダム値が「ＨK（山田１）」などに一致することがあっても、別のランダム値を使った検索結果との共通行集合を求めることで、やはりその共通行集合に含まれる行の「姓」が平文「佐藤」であることを推測できる。
【００１３】
例えば、７行のレコードが登録されていて、「佐藤」に相当する行は {1, 3, 4, 6, 7}行目だとする。短時間内のある検索結果は {1, 2, 3, 4, 6, 7} 行目であり、他のある検索結果は {1, 3, 4, 5, 6, 7}行目であるかもしれない。しかし、どの検索結果を見ても、１行目が含まれているときは常に {1, 3, 4, 6, 7} 行目が含まれているため、その集合に含まれる{1, 3, 4, 6, 7} 行は、頻度が最多の「佐藤」であると推測できてしまう。
【先行技術文献】
【特許文献】
【００１４】
【特許文献１】特開２０１０−２６７２２７号公報
【非特許文献】
【００１５】
【非特許文献１】伊藤 隆, 服部 充洋, 松田 規, 坂井 祐介, 太田 和夫. 頻度分析耐性を持つ高速秘匿検索方式. 電子情報通信学会技術研究報告. ISEC, 情報セキュリティ, Vol. 110, Num. 443, pp. 1-6, 2011.
【発明の概要】
【発明が解決しようとする課題】
【００１６】
従って、本技術の目的は、一側面によれば、データベースのインデックス値を秘匿するための技術を提供することである。
【課題を解決するための手段】
【００１７】
本技術の第１の態様に係るデータ生成方法は、（Ａ）データ格納部に格納された複数のデータブロックに含まれるインデックスの複数の値をグループ化し、（Ｂ）複数のデータブロックの各々について、当該データブロックに含まれるインデックスの値が属するグループを識別するデータを特定し、（Ｃ）複数のデータブロックの各々について、当該データブロックについて特定された上記データと当該データブロックの暗号化データとを含む検索用データを生成する処理を含む。
【００１８】
本技術の第２の態様に係る検索方法は、第１のコンピュータにより実行され、（Ａ）インデックスの値を含む検索条件を受け付け、（Ｂ）インデックスの値が属するグループを特定するためのデータを格納するデータ格納部から、検索条件に含まれるインデックスの値が属するグループを特定し、（Ｃ）グループを識別するデータを含む検索要求を生成して、所属するグループを識別するデータと対応する暗号化データブロックとを各々含む複数の検索用データブロックを保持する第２のコンピュータに対して送信し、（Ｄ）第２のコンピュータから、検索要求に応じた１又は複数の暗号化データブロックを受信し、（Ｅ）検索要求に応じた１又は複数の暗号化データブロックを復号することで１又は複数の平文データブロックを生成し、（Ｆ）１又は複数の平文データブロックから、検索条件を満たす平文データブロックを抽出する処理を含む。
【発明の効果】
【００１９】
一側面によれば、データベースのインデックス値を秘匿できるようになる。
【図面の簡単な説明】
【００２０】
【図１】図１は、検索対象データの一例を示す図である。
【図２】図２は、暗号化された検索対象データの一例を示す図である。
【図３】図３は、攻撃者による攻撃を説明するための図である。
【図４】図４は、従来技術を説明するための図である。
【図５】図５は、従来技術を説明するための図である。
【図６】図６は、従来技術の問題点を説明するための図である。
【図７】図７は、従来技術の問題点を説明するための図である。
【図８】図８は、本技術の実施の形態におけるシステム概要図である。
【図９】図９は、データ登録装置の機能ブロック図である。
【図１０】図１０は、データ登録装置の第１データ格納部に格納されるデータの一例を示す図である。
【図１１】図１１は、データ検索装置の機能ブロック図である。
【図１２】図１２は、データ登録装置により実行される処理の処理フローを示す図である。
【図１３】図１３は、インデックス値の出現回数の計数結果の一例を示す図である。
【図１４】図１４は、グループ構成データの一例を示す図である。
【図１５】図１５は、グループ構成データの一例を示す図である。
【図１６】図１６は、データ登録装置により実行される処理の処理フローを示す図である。
【図１７】図１７は、秘匿化データの一例を示す図である。
【図１８】図１８は、データ検索装置により実行される処理の処理フローを示す図である。
【図１９】図１９は、第１の実施の形態に係るクエリ生成処理の処理フローを示す図である。
【図２０】図２０は、抽出処理の処理フローの一例を示す図である。
【図２１】図２１は、第２の実施の形態におけるグループ構成のデータの一例を示す図である。
【図２２】図２２は、第２の実施の形態においてデータ登録処理により実行される処理の処理フローを示す図である。
【図２３】図２３は、第２の実施の形態における秘匿化データの一例を示す図である。
【図２４】図２４は、第２の実施の形態におけるクエリ生成処理の処理フローを示す図である。
【図２５】図２５は、第３の実施の形態においてデータ登録処理により実行される処理の処理フローを示す図である。
【図２６】図２６は、コンピュータの機能ブロック図である。
【発明を実施するための形態】
【００２１】
［実施の形態１］
本技術の実施の形態に係るシステムの概要を図８に示す。例えばインターネットなどのネットワーク１には、クラウドなどに含まれる検索サーバ７と、１又は複数のデータ検索装置５と、データ登録装置３とが接続されている。検索サーバ７は、秘匿化されたデータを蓄積しているデータベース（ＤＢ）７１を管理し、データ検索装置５からの検索要求（すなわちクエリ）に応じて検索を行って、検索結果を返信する。検索サーバ７自体の処理は従前とほぼ同様であるからここではこれ以上説明しない。データ検索装置５は、特定のインデックス値を含む検索条件を受け付けると、以下で述べるような処理を行って処理結果を含むクエリを検索サーバ７に送信する。そして、データ検索装置５は、検索サーバ７から検索結果を受信し、検索結果から検索条件に合致する検索結果を抽出する。データ登録装置３は、以下で述べるような処理が行われたデータを、検索サーバ７のデータベース７１に登録する処理を実行する。
【００２２】
図９に、データ登録装置３の機能ブロック図を示す。データ登録装置３は、第１データ格納部３１と、グループ構成生成部３２と、第２データ格納部３３と、秘匿化データ生成部３４と、第４データ格納部３５と、第３データ格納部３６と、登録処理部３７とを有する。
【００２３】
第１データ格納部３１には、例えば図１０に示すようなデータが格納されている。図１０の例では、姓と名と生年月日とが検索用インデックス（検索キーとも呼ぶ）として設定されており、姓と名と生年月日とで特定される患者の属性データとしてカルテの内容が登録されている。このようなデータにおけるレコードをデータブロックとも呼ぶことにする。
【００２４】
グループ構成生成部３２は、以下で述べる処理を行うことで、検索用インデックスの各々についてインデックス値のグループ化を行って、グループ構成を表すデータを第２データ格納部３３に格納する。第４データ格納部３５は、共通鍵暗号の暗号鍵Ｋのデータを格納している。
【００２５】
秘匿化データ生成部３４は、第２データ格納部３３に格納されているグループ構成のデータを用いて、第１データ格納部３１に格納されている各レコードに含まれる各検索用インデックスの値に対して、当該検索用インデックスの値が属するグループの識別子（又はグループを特定するためのデータ）を特定する。そして秘匿化データ生成部３４は、第４データ格納部３５に格納されている暗号鍵で各レコードを暗号化すると共に、特定されたグループの識別子を検索用インデックスとして付加した秘匿化データを生成し、第３データ格納部３６に格納する。
【００２６】
登録処理部３７は、第３データ格納部３６に格納されている秘匿化データを検索サーバ７に送信し、検索サーバ７が、その秘匿化データをデータベース７１へ登録させる。
【００２７】
図１１に、データ検索装置５の機能ブロック図を示す。データ検索装置５は、入力部５１と、第１データ格納部５２と、第２データ格納部５３と、クエリ生成部５４と、第３データ格納部５５と、送信部５６と、受信部５７と、第４データ格納部５８と、抽出部５９と、第５データ格納部６０と、出力部６１と、第６データ格納部６２とを有する。
【００２８】
入力部５１は、ユーザから検索用インデックスの値を含む検索条件の入力を受け付け、第１データ格納部５２に格納する。
【００２９】
第２データ格納部５３は、データ登録装置３のグループ構成生成部３２により生成されたグループ構成のデータを格納する。グループ構成のデータについては、検索サーバ７に登録しておき、データ検索装置５が検索サーバ７からダウンロードしても良いし、データ登録装置３が、データ検索装置５へ配布するようにしても良い。グループ構成のデータを配布する手法は、これ以外のどのような手法を採用しても良い。
【００３０】
クエリ生成部５４は、第２データ格納部５３に格納されているグループ構成のデータに従って、第１データ格納部５２に格納されている検索条件に含まれる検索用インデックスの値に対応するグループの識別子（又はグループを特定されるためのデータ）を特定し、入力された検索条件を当該グループの識別子を含む検索条件に変換してクエリを生成し、第３データ格納部５５に格納する。
【００３１】
送信部５６は、第３データ格納部５５にクエリのデータが格納されると、検索サーバ７に送信する。
【００３２】
受信部５７は、検索サーバ７から検索結果を受信すると、第４データ格納部５８に格納する。検索結果については、暗号化されたレコードを含む。また、第６データ格納部６２は、共通鍵暗号の暗号鍵Ｋのデータを格納している。この暗号鍵Ｋのデータについても、グループ構成のデータと同様に配布されるものとする。
【００３３】
抽出部５９は、第４データ格納部５８に格納されている暗号化されたレコードを、第６データ格納部６２に格納されている暗号鍵Ｋで復号すると共に、第１データ格納部５２に格納されている検索条件を満たしているか否かを判断して、この検索条件を満たしていると判断した場合には、第５データ格納部６０に格納する。
【００３４】
出力部６１は、第５データ格納部６０に格納されているレコードのデータを表示装置や印刷装置などの出力装置に出力する。
【００３５】
次に、本実施の形態に係るデータ登録装置３により実行される処理について図１２乃至図１７を用いて説明する。
【００３６】
まず、グループ構成生成部３２は、第１データ格納部３１に格納されているデータにおける未処理の検索用インデックスを１つ特定する（図１２：ステップＳ１）。そして、グループ構成生成部３２は、特定されたインデックスについて、出現する各インデックス値の出現回数を計数する（ステップＳ３）。例えば、図１３に示すようなデータが生成される。図１３の例では、インデックス値（Ａ乃至Ｇ）と、対応する出現回数とが格納される。
【００３７】
その後、グループ構成生成部３２は、出現回数の最大値を特定する（ステップＳ５）。図１３の例では「Ａ」が特定される。
【００３８】
そして、グループ構成生成部３２は、出現回数最大値×グループ数Ｇがレコード総数を超えないように、グループ数Ｇを決定する（ステップＳ７）。
【００３９】
グループの数は多い方がよいので、例えばレコード総数／出現回数最大値における整数部分をグループ数Ｇとして採用する。グループ数が得られれば、レコード総数／グループ数により１グループあたりのレコード数が得られる。
【００４０】
例えば、図１３の例では、レコード総数は「３３」であり、出現回数最大値は１０であって、３３／１０＝３．３であるからグループ数Ｇ＝３となる。また、３３／３＝１１であるから、１グループあたりのレコード数は「１１」となる。
【００４１】
その後、グループ構成生成部３２は、出現するインデックス値についての全グループ構成のうち、グループに所属するインデックス値を含むレコードの数のうち最多レコード数と最少レコード数との比が最小となるグループ構成を特定し、第２データ格納部３３に格納する（ステップＳ９）。
【００４２】
このステップでは、できるだけグループに属するインデックス値を含むレコードの数が均等になるようにグループ構成を決定するものである。すなわち、グループに属するレコードの数にばらつきが可能な限り小さくなるようにグループ構成を決定する。ここでは、上で述べたように、最多レコード数／最少レコード数が最小となるようなグループ構成を特定するため、各グループに属するインデックス値の組み合わせのバリエーションを全て抽出して、最多レコード数／最小レコード数で得られる評価値が最小となるようなバリエーションを最適なグループ構成として特定する。なお、最適化のアルゴリズムを適用して総当たりではなく効率的に最適なグループ構成を特定するようにしても良い。
【００４３】
図１３の例では、第１のグループにはインデックス値「Ａ」及び「Ｇ」が属し、第２のグループにはインデックス値「Ｂ」及び「Ｅ」が属し、第３のグループにはインデックス値「Ｃ」「Ｄ」及び「Ｆ」が属するようなグループ構成であれば、上記評価値が「１」となり、各グループについてのレコード数が「１１」で均等になるので、最適なグループ構成であると特定される。
【００４４】
従って、図１３の例では、図１４に示すようなデータが、グループ構成のデータとして第２データ格納部３３に格納される。図１４の例では、インデックス名と、グループＩＤと、当該グループに属するインデックス値とが対応付けて格納されている。
【００４５】
その後、グループ構成生成部３２は、第１データ格納部３１に未処理の検索用インデックスが存在しているか判断する（ステップＳ１１）。未処理の検索用インデックスが存在する場合には、処理ステップＳ１に戻る。一方、未処理の検索用インデックスが存在しない場合には、処理は端子Ａを介して図１６の処理に移行する。
【００４６】
なお、このようなループの処理が終了すると、図１０のようなデータについて図１５に示すようなデータが生成される。図１５の例では、インデックス名と、グループＩＤと、当該グループに属するインデックス値集合とが登録されるようになっている。
【００４７】
図１６の処理の説明に移行して、秘匿化データ生成部３４は、第１データ格納部３１に格納されているレコードのうち、未処理のレコードを１つ特定する（ステップＳ１３）。そして、秘匿化データ生成部３４は、特定されたレコードにおける各検索用インデックスについてのグループＩＤを特定する（ステップＳ１５）。
【００４８】
また、秘匿化データ生成部３４は、特定されたレコードのデータを、第４データ格納部３５に格納されている暗号鍵Ｋを用いて暗号化する（ステップＳ１７）。そして、秘匿化データ生成部３４は、各検索用インデックスのグループＩＤ及び暗号化データを１レコード分のデータとして、第３データ格納部３６に格納する（ステップＳ１９）。
【００４９】
その後、秘匿化データ生成部３４は、第１データ格納部３１に未処理のレコードが存在しているか判断する（ステップＳ２１）。未処理のレコードが存在していれば、処理はステップＳ１３に戻る。一方、未処理のレコードが存在していない場合には、処理はステップＳ２３に移行する。
【００５０】
このような処理を実行することで、図１０に示すようなデータに対して、図１７に示すような秘匿化データが生成される。図１７の例では、検索用インデックスとして、姓についてのグループＩＤと、名についてのグループＩＤと、生年月日についてのグループＩＤとが登録され、レコードの実データの暗号化データもさらに登録されている。ＥK（Ｘ）は、暗号鍵Ｋで暗号化されたデータＸを意味する。
【００５１】
その後、登録処理部３７は、第３データ格納部３６に格納されている秘匿化データを、検索サーバ７へ送信することで、検索サーバ７が管理するＤＢ７１に登録させる（ステップＳ２３）。
【００５２】
このような処理を実行することで、図１７に示すような秘匿化データがＤＢ７１に登録されるようになっている。検索サーバ７は、このような秘匿化データを受信すると、ＤＢ７１に登録する。なお、検索サーバ７は、検索用インデックスを用いて検索を行って、該当するレコードの暗号化データを抽出する処理を行う。
【００５３】
次に、図１８乃至図２０を用いて、データ検索装置５の処理内容について説明する。まず、入力部５１は、ユーザから、インデックス値を含む検索条件の入力を受け付け、第１データ格納部５２に格納する（ステップＳ３１）。例えば「姓」について「佐藤」を検索するといったような検索条件の入力がなされる。「姓」＝「佐藤」といった検索条件のデータが、第１データ格納部５２に格納される。
【００５４】
そして、クエリ生成部５４は、第２データ格納部５３に格納されているグループ構成のデータを用いて、第１データ格納部５２に格納されている検索条件のデータに対して、クエリ生成処理を実行し、クエリのデータを第３データ格納部５５に格納する（ステップＳ３３）。このクエリ生成処理については、図１９を用いて説明する。
【００５５】
まず、クエリ生成部５４は、検索条件に含まれるインデックス値を１つ特定する（図１９：ステップＳ５１）。そして、クエリ生成部５４は、第２データ格納部５３に格納されているグループ構成のデータから、特定されたインデックス値が属するグループＩＤを特定する（ステップＳ５３）。「姓」＝「佐藤」というインデックス値が検索条件に含まれる場合には、図１５のデータから、グループＩＤとして「グループ１」という値が得られる。
【００５６】
そして、クエリ生成部５４は、未処理のインデックス値が検索条件に含まれているか判断する（ステップＳ５５）。未処理のインデックス値が検索条件に含まれている場合には、処理はステップＳ５１に戻る。一方、未処理のインデックス値が検索条件に含まれていない場合には、クエリ生成部５４は、特定されたグループＩＤを含む検索条件を含むクエリを生成し、第３データ格納部５５に格納する（ステップＳ５７）。例えば、「姓」＝「グループ１」という検索条件を含むクエリを生成する。
【００５７】
これによって、検索サーバ７においてＤＢ７１に対する検索ができるようになる。
【００５８】
図１８の処理の説明に戻って、送信部５６は、第３データ格納部５５に格納されているクエリを、検索サーバ７に送信する（ステップＳ３５）。検索サーバ７は、データ検索装置５からクエリを受信すると（ステップＳ３７）、ＤＢ７１に対してクエリによる検索処理を実行する（ステップＳ３９）。そして、検索サーバ７は、検索結果として、該当するレコードに含まれる暗号化データを抽出する。
【００５９】
そして、検索サーバ７は、検索結果を、クエリの送信元であるデータ検索装置５に送信する（ステップＳ４１）。これに対してデータ検索装置５の受信部５７は、検索結果を検索サーバ７から受信すると、第４データ格納部５８に格納する（ステップＳ４３）。
【００６０】
そうすると、抽出部５９は、検索結果からの抽出処理を実行し、抽出結果を第５データ格納部６０に格納する（ステップＳ４５）。抽出処理については、図２０を用いて説明する。
【００６１】
その後、出力部６１は、第５データ格納部６０に格納されている抽出結果を、表示装置などの出力装置に出力する（ステップＳ４７）。
【００６２】
これによって適切な検索結果をユーザに提示することができるようになる。
【００６３】
次に、抽出処理について説明する。抽出部５９は、第４データ格納部５８に格納されている検索結果における未処理のレコードを１つ特定する（図２０：ステップＳ６１）。そうすると、抽出部５９は、第６データ格納部６２に格納されている暗号鍵Ｋを用いて、特定されたレコードを復号することで、平文レコードを生成する（ステップＳ６３）。
【００６４】
その後、抽出部５９は、生成された平文レコードが、第３データ格納部５５に格納されている検索条件に合致するものであるか判断する（ステップＳ６５）。平文レコードには、図１７に示すように「姓」などの検索用インデックスの値も含まれているので、第３データ格納部５５に含まれている検索条件に合致するものであるか否かを判断できる。
【００６５】
生成された平文レコードが、第３データ格納部５５に格納されている検索条件に合致していない場合には、処理はステップＳ６９に移行する。生成された平文レコードが、第３データ格納部５５に格納されている検索条件に合致する場合には、抽出部５９は、生成された平文レコードを、第５データ格納部６０における抽出結果に追加する（ステップＳ６７）。
【００６６】
そして、抽出部５９は、検索結果において未処理のレコードが存在しているか判断し（ステップＳ６９）、未処理のレコードが存在する場合には、処理はステップＳ６１に戻る。一方、未処理のレコードが存在しない場合には呼出元の処理に戻る。
【００６７】
このようにすれば、余分に抽出されたレコードの中から実際に検索条件に合致しているレコードのみが抽出されるようになる。
【００６８】
以上のように、本実施の形態によれば、グループ間で検索頻度や検索結果数が同程度になるので、グループＩＤから本来のインデックス値を推測することはできない。
【００６９】
［実施の形態２］
第１の実施の形態では、各グループについてグループＩＤを付与してグループＩＤをインデックス値の代わりに用いる例を示したが、グループＩＤを別途付与せずに処理することも可能である。
【００７０】
例えば、本実施の形態では、図１５の代わりに、図２１に示すようなグループ構成のデータをステップＳ９で生成する。図２１の例では、１行が１グループを表しており、インデックス名と、１グループに属するインデックス値の集合とが対応付けられている。
【００７１】
そして、本実施の形態では、グループＩＤの代わりに、インデックス値集合のハッシュ値を用いる。
【００７２】
このため、本実施の形態では、第１の実施の形態における図１６の処理の代わりに、図２２の処理を実行する。
【００７３】
秘匿化データ生成部３４は、第１データ格納部３１に格納されているレコードのうち、未処理のレコードを１つ特定する（ステップＳ７１）。そして、秘匿化データ生成部３４は、特定されたレコードにおける各検索用インデックスについて、該当するグループ（すなわち図２１に示すようなレコード）に属するインデックス値集合のハッシュ値を算出する（ステップＳ７３）。
【００７４】
また、秘匿化データ生成部３４は、特定されたレコードのデータを、第４データ格納部３５に格納されている暗号鍵Ｋを用いて暗号化する（ステップＳ７５）。そして、秘匿化データ生成部３４は、各検索用インデックスについてのハッシュ値及び暗号化データを１レコード分のデータとして、第３データ格納部３６に格納する（ステップＳ７７）。
【００７５】
その後、秘匿化データ生成部３４は、第１データ格納部３１に未処理のレコードが存在しているか判断する（ステップＳ７９）。未処理のレコードが存在していれば、処理はステップＳ７１に戻る。一方、未処理のレコードが存在していない場合には、処理はステップＳ８１に移行する。
【００７６】
このような処理を実行することで、図１０に示すようなデータを処理すると、図２３に示すような秘匿化データが生成される。図２３の例では、検索用インデックスとして、姓についてのハッシュ値ＨKと、名についてのハッシュ値ＨKと、生年月日についてのハッシュ値ＨKとが登録され、レコードの実データの暗号化データもさらに登録されている。ＥK（Ｘ）は、暗号鍵Ｋで暗号化されたデータＸを意味する。また、ＨK（Ｙ）は、暗号鍵Ｋでハッシュ化したデータＹを意味する。
【００７７】
その後、登録処理部３７は、第３データ格納部３６に格納されている秘匿化データを、検索サーバ７へ送信することで、検索サーバ７が管理するＤＢ７１に登録させる（ステップＳ８１）。
【００７８】
このような処理を実行することで、図２３に示すような秘匿化データがＤＢ７１に登録されるようになっている。検索サーバ７は、このような秘匿化データを受信すると、ＤＢ７１に登録する。なお、検索サーバ７は、検索用インデックスを用いて検索を行って、該当するレコードの暗号化データを抽出する処理を行う。
【００７９】
また、本実施の形態では、図１９に示されたクエリ生成処理の代わりに、図２４に示すような処理を実行する。
【００８０】
まず、クエリ生成部５４は、検索条件に含まれるインデックス値を１つ特定する（図２４：ステップＳ９１）。そして、クエリ生成部５４は、第２データ格納部５３に格納されているグループ構成のデータ（図２３）から、特定されたインデックス値が属するグループ（すなわち図２３におけるレコード）に属するインデックス値集合のハッシュ値を算出する（ステップＳ９３）。「姓」＝「佐藤」というインデックス値が検索条件に含まれる場合には、図２３のデータから、「佐藤，．．．」についてのハッシュ値が算出される。
【００８１】
そして、クエリ生成部５４は、未処理のインデックス値が検索条件に含まれているか判断する（ステップＳ９５）。未処理のインデックス値が検索条件に含まれている場合には、処理はステップＳ９１に戻る。一方、未処理のインデックス値が検索条件に含まれていない場合には、クエリ生成部５４は、算出されたハッシュ値を含む検索条件を含むクエリを生成し、第３データ格納部５５に格納する（ステップＳ９７）。例えば、「姓」＝ＨK（佐藤，．．．）というような検索条件を含むクエリを生成する。
【００８２】
これによって、検索サーバ７においてＤＢ７１に対する検索ができるようになる。
【００８３】
このような実施の形態でも第１の実施の形態と同様の効果を得ることができる。
【００８４】
［実施の形態３］
第１の実施の形態においてグループ構成のデータを生成する処理は、可能な限りグループ間においてレコード数のばらつきを抑えるための処理を含む。
【００８５】
一方、以下で説明するように、一定の許容誤差内にばらつきを抑えるような処理を採用するようにしても良い。
【００８６】
本実施の形態では、図１２の処理の代わりに、図２５に示すような処理を実行する。
【００８７】
まず、グループ構成生成部３２は、第１データ格納部３１に格納されているデータにおける未処理の検索用インデックスを１つ特定する（図２５：ステップＳ１０１）。そして、グループ構成生成部３２は、特定されたインデックスについて、出現する各インデックス値の出現回数を計数する（ステップＳ１０３）。
【００８８】
その後、グループ構成生成部３２は、出現回数の最大値を特定する（ステップＳ１０５）。
【００８９】
そして、グループ構成生成部３２は、出現回数最大値×グループ数Ｇがレコード総数を超えないように、グループ数Ｇ及び１グループあたりのレコード数を決定する（ステップＳ１０７）。
【００９０】
グループの数は多い方がよいので、例えばレコード総数／出現回数最大値における整数部分をグループ数Ｇとして採用する。グループ数が得られれば、レコード総数／グループ数により１グループあたりのレコード数が得られる。
【００９１】
その後、グループ構成生成部３２は、１グループあたりのレコード数に、予め設定されている許容誤差内で近づくように、レコード数が多いインデックス値から順に、インデックス値をグループに設定することで、グループ構成を特定し、第２データ格納部３３に格納する（ステップＳ１０９）。
【００９２】
図１３の例では、３グループ生成することになるので、レコード数が多い「Ａ」「Ｂ」「Ｃ」の順に、グループ１、グループ２、グループ３に所属させる。その後、グループ１には、１グループあたりのレコード数「１１」に近づけるために、「Ｇ」を所属させることになる。また、グループ２には、同様に１グループあたりのレコード数「１１」に近づけるために、「Ｅ」を所属させることになる。さらに、グループ３には、同様に１グループあたりのレコード数「１１」に近づけるために、「Ｄ」を所属させることになる。但し、１グループあたりのレコード数「１１」には「２」少なく、「Ｆ」が残っているので、「Ｆ」も、グループ３に所属させることにする。このような処理を実行することで、ステップＳ１０９で、許容誤差内においてレコード数のばらつきが均一化されたグループ構成が簡易に特定されるようになる。
【００９３】
本実施の形態でも図１５に示すようなグループ構成のデータを第２データ格納部３３に格納するようにしても良いし、グループＩＤを含まないようにする図２１に示すようなグループ構成のデータを第２データ格納部３３に格納するようにしても良い。
【００９４】
その後、グループ構成生成部３２は、第１データ格納部３１に未処理の検索用インデックスが存在しているか判断する（ステップＳ１１１）。未処理の検索用インデックスが存在する場合には、処理ステップＳ１０１に戻る。一方、未処理の検索用インデックスが存在しない場合には、処理は端子Ａを介して図１６の処理に移行する。
【００９５】
上でも述べたように第２の実施の形態についても本実施の形態に適用するようにしても良い。
【００９６】
以上本技術の実施の形態を説明したが、本技術はこれに限定されるものではない。
【００９７】
例えば、処理フローについても処理結果が変わらない限り、処理順番を入れ替えたり、ステップを並列に実行したりすることも可能である。また、機能ブロック図についても、プログラムモジュール構成とは一致しない場合もある。
【００９８】
検索頻度や検索結果数が同程度になると推測さえされれば、実際のレコード数に偏りがあったとしても、攻撃者には検索頻度や検索結果数から本来の情報を推測することはできない。これにより、レコードの追加、削除等により、レコード数に変動があったとしてもグループ構成を変更しなくても良い。
【００９９】
なお、上で述べた検索サーバ７、データ登録装置３及びデータ検索装置５は、コンピュータ装置であって、図２６に示すように、メモリ２５０１とＣＰＵ（Central Processing Unit）２５０３とハードディスク・ドライブ（ＨＤＤ：Hard Disk Drive）２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ：Operating System）及び本実施例における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。ＣＰＵ２５０３は、アプリケーション・プログラムの処理内容に応じて表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ２５０１に格納されるが、ＨＤＤ２５０５に格納されるようにしてもよい。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【０１００】
以上述べた本実施の形態をまとめると、以下のようになる。
【０１０１】
本実施の形態の第１の態様に係るデータ生成方法は、（Ａ）データ格納部に格納された複数のデータブロックに含まれるインデックスの複数の値をグループ化し、（Ｂ）複数のデータブロックの各々について、当該データブロックに含まれるインデックスの値が属するグループを識別するデータを特定し、（Ｃ）複数のデータブロックの各々について、当該データブロックについて特定された上記データと当該データブロックの暗号化データとを含む検索用データを生成する処理を含む。
【０１０２】
このようにすれば、インデックス値の秘匿化がなされて、クエリなどからデータベースのインデックス値を推察できなくなる。
【０１０３】
さらに、上で述べたグループを識別するデータが、グループの識別子又はグループに含まれるインデックスのハッシュ値である場合もある。いずれの場合も容易に設定できる。
【０１０４】
また、上で述べたグループ化する処理が、所属するインデックスの値を含むデータブロックの数のばらつきが最小又は所定の許容範囲内であるように、インデックスの値をグループ化する処理を含むようにしても良い。このようにすれば、秘匿化のレベルが高くなる。
【０１０５】
さらに、上で述べたグループ化する処理が、インデックスの複数の値のうち最も多く出現する値の出現回数に応じてグループ数を決定する処理を含むようにしても良い。また、上で述べたグループ化する処理が、インデックスの複数の値のうち最も多く出現する値の出現回数とグループ数との積が複数のデータブロックの数を超えないようにグループ数を決定する処理を含むようにしても良い。このようにすれば、適切なグループ数を設定できるようになる。
【０１０６】
本実施の形態の第２の態様に係る検索方法は、第１のコンピュータにより実行され、（Ａ）インデックスの値を含む検索条件を受け付け、（Ｂ）インデックスの値が属するグループを特定するためのデータを格納するデータ格納部から、検索条件に含まれるインデックスの値が属するグループを特定し、（Ｃ）グループを識別するデータを含む検索要求を生成して、所属するグループを識別するデータと対応する暗号化データブロックとを各々含む複数の検索用データブロックを保持する第２のコンピュータに対して送信し、（Ｄ）第２のコンピュータから、検索要求に応じた１又は複数の暗号化データブロックを受信し、（Ｅ）検索要求に応じた１又は複数の暗号化データブロックを復号することで１又は複数の平文データブロックを生成し、（Ｆ）１又は複数の平文データブロックから、検索条件を満たす平文データブロックを抽出する処理を含む。
【０１０７】
このように第２のコンピュータでの検索に加えて第１のコンピュータにおける抽出処理にて、検索結果が得られるようになる。
【０１０８】
なお、上で述べたグループを識別するデータが、グループの識別子又はグループに属するインデックスのハッシュ値である場合もある。
【０１０９】
なお、上で述べたような処理をコンピュータに実行させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、ＣＤ−ＲＯＭなどの光ディスク、光磁気ディスク、半導体メモリ（例えばＲＯＭ）、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。
【０１１０】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１１１】
（付記１）
データ格納部に格納された複数のデータブロックに含まれるインデックスの複数の値をグループ化し、
前記複数のデータブロックの各々について、当該データブロックに含まれるインデックスの値が属するグループを識別するデータを特定し、
前記複数のデータブロックの各々について、当該データブロックについて特定された前記データと当該データブロックの暗号化データとを含む検索用データを生成する
処理を含み、コンピュータにより実行されるデータ生成方法。
【０１１２】
（付記２）
前記グループを識別するデータが、グループの識別子又はグループに含まれるインデックスのハッシュ値である
付記１記載のデータ生成方法。
【０１１３】
（付記３）
前記グループ化する処理が、
所属するインデックスの値を含むデータブロックの数のばらつきが最小又は所定の許容範囲内であるように、前記インデックスの値をグループ化する処理
を含む付記１又は２記載のデータ生成方法。
【０１１４】
（付記４）
前記グループ化する処理が、
前記インデックスの複数の値のうち最も多く出現する値の出現回数に応じてグループ数を決定する処理
を含む付記１乃至３のいずれか１つ記載のデータ生成方法。
【０１１５】
（付記５）
前記グループ化する処理が、
前記インデックスの複数の値のうち最も多く出現する値の出現回数とグループ数との積が前記複数のデータブロックの数を超えないように前記グループ数を決定する処理
を含む付記１乃至３のいずれか１つ記載のデータ生成方法。
【０１１６】
（付記６）
第１のコンピュータが、
インデックスの値を含む検索条件を受け付け、
インデックスの値が属するグループを特定するためのデータを格納するデータ格納部から、前記検索条件に含まれる前記インデックスの値が属するグループを特定し、
前記グループを識別するデータを含む検索要求を生成して、所属するグループを識別するデータと対応する暗号化データブロックとを各々含む複数の検索用データブロックを保持する第２のコンピュータに対して送信し、
前記第２のコンピュータから、前記検索要求に応じた１又は複数の暗号化データブロックを受信し、
前記検索要求に応じた１又は複数の暗号化データブロックを復号することで１又は複数の平文データブロックを生成し、
前記１又は複数の平文データブロックから、前記検索条件を満たす平文データブロックを抽出する
処理を実行する検索方法。
【０１１７】
（付記７）
前記グループを識別するデータが、前記グループの識別子又は前記グループに属するインデックスのハッシュ値である
付記６記載の検索方法。
【０１１８】
（付記８）
データ格納部に格納された複数のデータブロックに含まれるインデックスの複数の値をグループ化し、
前記複数のデータブロックの各々について、当該データブロックに含まれるインデックスの値が属するグループを識別するデータを特定し、
前記複数のデータブロックの各々について、当該データブロックについて特定された前記データと当該データブロックの暗号化データとを含む検索用データを生成する
処理を、コンピュータに実行させるためのデータ生成プログラム。
【０１１９】
（付記９）
第１のコンピュータに、
インデックスの値を含む検索条件を受け付け、
インデックスの値が属するグループを特定するためのデータを格納するデータ格納部から、前記検索条件に含まれる前記インデックスの値が属するグループを特定し、
前記グループを識別するデータを含む検索要求を生成して、所属するグループを識別するデータと対応する暗号化データブロックとを各々含む複数の検索用データブロックを保持する第２のコンピュータに対して送信し、
前記第２のコンピュータから、前記検索要求に応じた１又は複数の暗号化データブロックを受信し、
前記検索要求に応じた１又は複数の暗号化データブロックを復号することで１又は複数の平文データブロックを生成し、
前記１又は複数の平文データブロックから、前記検索条件を満たす平文データブロックを抽出する
処理を実行させるための検索プログラム。
【０１２０】
（付記１０）
データ格納部に格納された複数のデータブロックに含まれるインデックスの複数の値をグループ化するグループ化部と、
前記複数のデータブロックの各々について、当該データブロックに含まれるインデックスの値が属するグループを識別するデータを特定し、前記複数のデータブロックの各々について、当該データブロックについて特定された前記データと当該データブロックの暗号化データとを含む検索用データを生成する生成部と、
を有する情報処理装置。
【０１２１】
（付記１１）
インデックスの値を含む検索条件を受け付ける入力部と、
インデックスの値が属するグループを特定するためのデータを格納するデータ格納部から、前記検索条件に含まれる前記インデックスの値が属するグループを特定し、前記グループを識別するデータを含む検索要求を生成する生成部と、
所属するグループを識別するデータと対応する暗号化データブロックとを各々含む複数の検索用データブロックを保持する他のコンピュータに対して、前記検索要求を送信する送信部と、
前記他のコンピュータから、前記検索要求に応じた１又は複数の暗号化データブロックを受信する受信部と、
前記検索要求に応じた１又は複数の暗号化データブロックを復号することで１又は複数の平文データブロックを生成し、前記１又は複数の平文データブロックから、前記検索条件を満たす平文データブロックを抽出する抽出部と、
を有する情報処理装置。
【符号の説明】
【０１２２】
３１  第１データ格納部
３２  グループ構成生成部
３３  第２データ格納部
３４  秘匿化データ生成部
３５  第４データ格納部
３６  第３データ格納部
３７  登録処理部
５１  入力部
５２  第１データ格納部
５３  第２データ格納部
５４  クエリ生成部
５５  第３データ格納部
５６  送信部
５７  受信部
５８  第４データ格納部
５９  抽出部
６０  第５データ格納部
６１  出力部
６２  第６データ格納部
【図１】
2014098990.tif 000003
【図２】
2014098990.tif 000004
【図３】
2014098990.tif 000005
【図４】
2014098990.tif 000006
【図５】
2014098990.tif 000007
【図６】
2014098990.tif 000008
【図７】
2014098990.tif 000009
【図８】
2014098990.tif 000010
【図９】
2014098990.tif 000011
【図１０】
2014098990.tif 000012
【図１１】
2014098990.tif 000013
【図１２】
2014098990.tif 000014
【図１３】
2014098990.tif 000015
【図１４】
2014098990.tif 000016
【図１５】
2014098990.tif 000017
【図１６】
2014098990.tif 000018
【図１７】
2014098990.tif 000019
【図１８】
2014098990.tif 000020
【図１９】
2014098990.tif 000021
【図２０】
2014098990.tif 000022
【図２１】
2014098990.tif 000023
【図２２】
2014098990.tif 000024
【図２３】
2014098990.tif 000025
【図２４】
2014098990.tif 000026
【図２５】
2014098990.tif 000027
【図２６】
2014098990.tif 000028