(57)【要約】【課題】データベースのインデックス値を秘匿する。【解決手段】本方法は、第1インデックス値と当該第1インデックス値に関連付けられている第2インデックス値と当該第1インデックス値の変換後の複数の第3インデックス値とを関連付けるデータブロックを複数格納するデータ格納部から、入力されたインデックス値に関連付けられている、当該入力されたインデックス値の変換後の複数の第3インデックス値を取得する処理、データ格納部から、入力されたインデックス値に関連付けられている第2インデックス値を取得する処理、データ格納部から、取得された第2インデックス値に関連付けられている、当該取得された第2インデックス値の変換後の複数の第3インデックス値を取得する処理、入力されたインデックス値の変換後の複数の第3インデックス値及び取得された第2インデックス値の変換後の複数の第3インデックス値から、クエリを生成する処理を含む。【選択図】図１３
2014098989.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（変換後値）を算出する。
【００７１】
そして、秘匿化処理部３５は、未処理のインデックス値が存在するか判断し（ステップＳ６７）、未処理のインデックス値が存在する場合には処理はステップＳ６１に戻る。一方、未処理のインデックス値が存在しない場合には、処理は呼び出し元の処理に戻る。
【００７２】
例えば図２３のようなインデックス値を処理すれば、図２４に示すような変換後値のハッシュ値が得られるようになる。このように、元のインデックス値は、変換後値のハッシュ値により置換されることになる。
【００７３】
図１２の処理フローの説明に戻って、秘匿化処理部３５は、検索用データに含まれる各レコードのデータ部分を、暗号鍵Ｋで暗号化し、第４データ格納部３６に格納する（ステップＳ５）。秘匿化処理部３５は、第４データ格納部３６に格納されており、且つ変換及び秘匿化されたインデックス値及び暗号化データを含むレコード群を、秘匿化検索用データを、検索サーバ７に送信して、データベース７１に登録させる（ステップＳ７）。
【００７４】
このような処理を実施すれば、例えば図２５に示すようなデータが、データベース７１に登録されるようになる。
【００７５】
なお、上で述べた例では、１つの種類のインデックスについての処理なので、複数種類のインデックスが存在する場合には、各インデックスについて上で述べた処理を行うことになる。
【００７６】
次に、図２６乃至図２８を用いて、データ検索装置５に関連する処理を説明する。ユーザは、平文検索キーＷを含む検索指示を入力部５１に対して入力する。そうすると、入力部５１は、平文検索キーＷを含む検索指示を受け付け、第１データ格納部５２に格納する（図２６：ステップＳ１０１）。
【００７７】
そうすると、クエリ生成部５４は、第１データ格納部５２に格納されている平文検索キーＷについて、第２データ格納部５３に格納されているデータを用いてクエリ生成処理を実行し、第３データ格納部５５に格納する（ステップＳ１０３）。クエリ生成処理については、図２７及び図２８を用いて説明する。
【００７８】
クエリ生成部５４は、平文検索キーＷの全ての変換後値を、第２データ格納部５３に格納されているグループ情報から読み出す（図２７：ステップＳ１２１）。図１３の例で、「佐藤」が平文検索キーＷであれば、「佐藤１」乃至「佐藤５」が読み出される。
【００７９】
また、クエリ生成部５４は、読み出された変換後値を、例えば第２データ格納部５３に格納されている暗号鍵Ｋでハッシュ化し、第３データ格納部５５に格納し、さらに集合Ｓに設定する（ステップＳ１２３）。集合Ｓは、後に検索結果から抽出すべきデータを特定するために用いられる。
【００８０】
さらに、クエリ生成部５４は、グループ情報から、平文検索キーのインデックス値と同時にクエリに含めるべきインデックス値を抽出する（ステップＳ１２５）。図１３の例では、「佐藤」に対して「鈴木」「高橋」が抽出される。
【００８１】
その後、クエリ生成部５４は、抽出されたインデックス値のうち未処理のインデックス値を１つ選択する（ステップＳ１２７）。そして、クエリ生成部５４は、選択されたインデックス値に対応する全ての変換後値を、グループ情報から読み出す（ステップＳ１２９）。「鈴木」が選択された場合には、「鈴木１」乃至「鈴木４」が読み出される。
【００８２】
また、クエリ生成部５４は、読み出された変換後値を暗号鍵Ｋでハッシュ化し、第３データ格納部５５に格納する（ステップＳ１３１）。そして、クエリ生成部５４は、抽出されたインデックス値のうち未処理のインデックス値が存在しているか判断する（ステップＳ１３３）。未処理のインデックス値が存在する場合には、処理はステップＳ１２７に戻る。一方、未処理のインデックス値が存在しない場合には、クエリ生成部５４は、１又は複数のハッシュ化された変換後値を含むクエリを生成し、第３データ格納部５５に格納する（ステップＳ１３５）。クエリは１つだけではなく、複数のクエリが生成されるようにしてもよい。そして、処理は呼び出し元の処理に戻る。
【００８３】
なお、以下の処理を実行するため、例えば図２８に示すようなデータを、第３データ格納部５５に格納しておく。図２８の例では、ハッシュ化された変換後値と、集合Ｓに含まれるか否かを表すフラグとが格納されるようになっている。上でも述べたように、「佐藤１」乃至「佐藤５」については、元々の平文検索キーに対応するインデックス値の変換後値である。
【００８４】
図２６の処理の説明に戻って、送信部５６は、第３データ格納部５５に格納されているクエリを検索サーバ７に送信する（ステップＳ１０５）。上でも述べたようにクエリは複数の場合もある。
【００８５】
検索サーバ７は、データ検索装置５からクエリを受信し（ステップＳ１０７）、データベース７１に対してクエリによる検索を実行する（ステップＳ１０９）、そして、検索サーバ７は、検索結果を、クエリの送信元のデータ検索装置５へ送信する（ステップＳ１１１）。
【００８６】
これに対して、データ検索装置５の受信部５７は、検索サーバ７から検索結果を受信し、検索結果を第４データ格納部５８に格納する（ステップＳ１１３）。
【００８７】
そして、抽出部５９は、第３データ格納部５５に格納されているデータを用いて、第４データ格納部５８に格納されている検索結果から平文検索キーＷに対応する検索結果を抽出する（ステップＳ１１５）。図２８の例では、集合Ｓに含まれていることを表すフラグがＯＮ（すなわち「Ｙ」）になっており且つハッシュ化された変換後値に対応する検索結果を抽出する。
【００８８】
そして、抽出部５９は、抽出された検索結果に含まれる暗号化データを、第２データ格納部５３に格納されている暗号鍵Ｋを用いて復号し、第５データ格納部６０に格納し、出力部６１は、第５データ格納部６０に格納されているデータを、出力装置（印刷装置、表示装置など）に出力する（ステップＳ１１７）。
【００８９】
上でも述べたように、「佐藤」を検索する場合においても、「佐藤１」乃至「佐藤５」、「鈴木１」乃至「鈴木４」及び「高橋１」乃至「高橋３」についてのレコードが検索結果として抽出される。これらのレコードは、常に同時に共起するレコードであり、図１４で模式的に示したように、同一値を含むレコードの頻度は均一ではなくても少なくとも３つについては同一となるので、いずれが「佐藤」についてのレコードであるかは、弁別できない。従ってデータ検索の秘匿性が担保されている。
【００９０】
以上本技術の実施の形態を説明したが、本技術はこれに限定されるものではない。上で示したデータ検索装置５及びデータ登録装置３の機能ブロック図は一例であって、プログラムモジュール構成とは一致しない場合もある。
【００９１】
また、処理フローについても、処理結果が変わらない限りにおいて、処理ステップの順番を入れ替えたり、複数の処理ステップの実行順番を入れ替えたりすることも可能である。
【００９２】
なお、グループ情報については、データ検索時には、確率のデータは用いられないので、検索時のグループ情報は、データ登録時のグループ情報の一部としてもよい。
【００９３】
さらに、グループ情報には、変換後値を登録するのではなく、ハッシュ化された変換後値を登録しておいても良い。
【００９４】
また、グループ情報を自動的に生成する例を示したが、知見のあるユーザが別途用意するようにしても良い。
【００９５】
なお、上で述べた検索サーバ７、データ登録装置３及びデータ検索装置５は、コンピュータ装置であって、図２９に示すように、メモリ２５０１とＣＰＵ（Central Processing Unit）２５０３とハードディスク・ドライブ（ＨＤＤ：Hard Disk Drive）２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ：Operating System）及び本実施例における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。ＣＰＵ２５０３は、アプリケーション・プログラムの処理内容に応じて表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ２５０１に格納されるが、ＨＤＤ２５０５に格納されるようにしてもよい。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【００９６】
以上述べた本実施の形態をまとめると、以下のようになる。
【００９７】
本実施の形態の第１の態様に係る検索処理方法は、（Ａ）第１のインデックス値と当該第１のインデックス値に関連付けられている第２のインデックス値と当該第１のインデックス値の変換後の複数の第３のインデックス値とを関連付けるデータブロックを複数格納するデータ格納部から、入力されたインデックス値に関連付けられている、当該入力されたインデックス値の変換後の複数の第３のインデックス値を取得する処理と、（Ｂ）データ格納部から、入力されたインデックス値に関連付けられている第２のインデックス値を取得する処理と、（Ｃ）データ格納部から、取得された第２のインデックス値に関連付けられている、当該取得された第２のインデックス値の変換後の複数の第３のインデックス値を取得する処理と、（Ｄ）入力されたインデックス値の変換後の複数の第３のインデックス値及び取得された第２のインデックス値の変換後の複数の第３のインデックス値から、クエリを生成する処理とを含む。
【００９８】
このようにすればクエリの内容が秘匿化される。さらに、常に同じ変換後の第３のインデックス値についてのクエリが付加されるので、入力されたインデックス値が同じであれば常に同じ検索結果が得られる。すなわち、検索結果の共起を観察しても、インデックス値が推測しにくくなっている。
【００９９】
また、上記検索方法は、（Ｅ）クエリの検索結果に含まれるデータのうち、入力されたインデックス値の変換後の複数の第３のインデックス値についてのデータを抽出する処理をさらに含むようにしても良い。これによって、要求された検索結果のみを抽出できる。
【０１００】
さらに、上記クエリの検索結果において、（Ｆ）入力されたインデックス値の変換後の複数の第３のインデックス値のうちいずれかのグループに属する第３のインデックス値についての検索結果の頻度と、入力されたインデックス値に関連付けられている第２のインデックス値の変換後の複数の第３のインデックス値のうちいずれかのグループに属する第３のインデックス値についての検索結果の頻度とが一致し、（Ｇ）上記頻度が一致する第３のインデックス値の種類数が予め定められた数以上となっていることが好ましい。このような検索結果が得られるデータベースがあれば、元々のインデックス値の出現頻度の偏りから、インデックス値を推定することが困難になる。
【０１０１】
本実施の形態の第２の態様に係るデータ生成方法は、（Ａ）第１のインデックス値と当該第１のインデックス値に関連付けられている第２のインデックス値と当該第１のインデックス値の変換後の複数の第３のインデックス値と当該複数の第３のインデックス値の各々についての出現確率とを関連付けるデータブロックを複数格納するデータ格納部から、検索対象データに含まれるインデックス値に関連するデータブロックを特定する処理と、（Ｂ）特定されたデータブロックに含まれる出現確率に従って、検索対象データに含まれるインデックス値に対応する第３のインデックス値を特定する処理と、（Ｃ）特定された第３のインデックス値又は当該特定された第３のインデックス値の秘匿化値で、検索対象データに含まれるインデックス値を置換することで、秘匿化された検索対象データを生成する処理とを含む。そして、第１のインデックス値の変換後の複数の第３のインデックス値及び第２のインデックス値の変換後の複数の第３のインデックス値から生成されるクエリにより検索が行われた場合に、（Ｄ）第１のインデックス値に関連付けられている複数の第３のインデックス値のうちいずれかのグループに属する第３のインデックス値についての検索結果の頻度と、第１のインデックス値に関連付けられている第２のインデックス値に関連付けられている複数の第３のインデックス値のうち第一群の第３のインデックス値についての検索結果の頻度とが一致し、且つ（Ｅ）頻度が一致する第３のインデックス値の数が予め定められた数以上となるという条件を満たすように、出現確率が設定されている。
【０１０２】
このような出現確率が設定されていれば、検索結果と、元々のインデックス値の出現頻度の偏りから、インデックス値を推定しにくくなる。なお、第３のインデックス値の数は少ない方が好ましい。
【０１０３】
上で述べたデータ登録方法は、第１のインデックス値を当該第１のインデックス値の相対頻度を降順にソートする処理と、相対頻度が大きい順に、第１のインデックス値を、予め定められた数以上の第１のインデックス値が含まれるようにグループ化する処理と、各グループにおいて、当該グループに含まれる第１のインデックス値についての変換後の第３のインデックス値の種類数を最小化し、且つ条件を満たすように、当該グループに含まれる第１のインデックス値の各々について、第３のインデックス値の種類数及び当該第３のインデックス値の各々についての出現確率を決定する処理をさらに含むようにしても良い。
【０１０４】
このようにすれば、クエリのデータ量を抑えつつ秘匿性が十分なデータブロック群を生成できるようになる。
【０１０５】
なお、上で述べたような処理をコンピュータに実行させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、ＣＤ−ＲＯＭなどの光ディスク、光磁気ディスク、半導体メモリ（例えばＲＯＭ）、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。
【０１０６】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１０７】
（付記１）
第１のインデックス値と当該第１のインデックス値に関連付けられている第２のインデックス値と当該第１のインデックス値の変換後の複数の第３のインデックス値とを関連付けるデータブロックを複数格納するデータ格納部から、入力されたインデックス値に関連付けられている、当該入力されたインデックス値の変換後の複数の第３のインデックス値を取得し、
前記データ格納部から、前記入力されたインデックス値に関連付けられている第２のインデックス値を取得し、
前記データ格納部から、取得された前記第２のインデックス値に関連付けられている、当該取得された前記第２のインデックス値の変換後の複数の第３のインデックス値を取得し、
前記入力されたインデックス値の変換後の複数の第３のインデックス値及び取得された前記第２のインデックス値の変換後の複数の第３のインデックス値から、クエリを生成する
処理を、コンピュータに実行させるためプログラム。
【０１０８】
（付記２）
前記クエリの検索結果に含まれるデータのうち、前記入力されたインデックス値の変換後の複数の第３のインデックス値についてのデータを抽出する処理
をさらに前記コンピュータに実行させるための付記１記載のプログラム。
【０１０９】
（付記３）
前記クエリの検索結果において、
前記入力されたインデックス値の変換後の複数の第３のインデックス値のうちいずれかのグループに属する第３のインデックス値についての検索結果の頻度と、前記入力されたインデックス値に関連付けられている第２のインデックス値の変換後の複数の第３のインデックス値のうちいずれかのグループに属する第３のインデックス値についての検索結果の頻度とが一致し、
前記頻度が一致する前記第３のインデックス値の種類数が予め定められた数以上となっている
付記２記載のプログラム。
【０１１０】
（付記４）
第１のインデックス値と当該第１のインデックス値に関連付けられている第２のインデックス値と当該第１のインデックス値の変換後の複数の第３のインデックス値と当該複数の第３のインデックス値の各々についての出現確率とを関連付けるデータブロックを複数格納するデータ格納部から、検索対象データに含まれるインデックス値に関連するデータブロックに含まれる出現確率に従って、前記検索対象データに含まれるインデックス値に対応する第３のインデックス値を特定し、
特定された前記第３のインデックス値又は当該特定された前記第３のインデックス値の秘匿化値で、前記検索対象データに含まれるインデックス値を置換することで、秘匿化された検索対象データを生成する
処理をコンピュータに実行させ、
前記第１のインデックス値の変換後の複数の第３のインデックス値及び前記第２のインデックス値の変換後の複数の第３のインデックス値から生成されるクエリにより検索が行われた場合に、
前記第１のインデックス値に関連付けられている複数の第３のインデックス値のうちいずれかのグループに属する第３のインデックス値についての検索結果の頻度と、前記第１のインデックス値に関連付けられている第２のインデックス値に関連付けられている複数の第３のインデックス値のうちいずれかのグループに属する第３のインデックス値についての検索結果の頻度とが一致し、且つ
前記頻度が一致する前記第３のインデックス値の数が予め定められた数以上となるという条件を満たすように、前記出現確率が設定されている
プログラム。
【０１１１】
（付記５）
前記第１のインデックス値を当該第１のインデックス値の相対頻度を降順にソートし、
前記相対頻度が大きい順に、前記第１のインデックス値を、予め定められた数以上の第１のインデックス値が含まれるようにグループ化し、
各グループにおいて、当該グループに含まれる第１のインデックス値についての変換後の第３のインデックス値の種類数を最小化し、且つ前記条件を満たすように、当該グループに含まれる第１のインデックス値の各々について、前記第３のインデックス値の種類数及び当該第３のインデックス値の各々についての出現確率を決定する
処理をさらに含む付記４記載のプログラム。
【０１１２】
（付記６）
第１のインデックス値と当該第１のインデックス値に関連付けられている第２のインデックス値と当該第１のインデックス値の変換後の複数の第３のインデックス値とを関連付けるデータブロックを複数格納するデータ格納部から、入力されたインデックス値に関連付けられている、当該入力されたインデックス値の変換後の複数の第３のインデックス値を取得し、
前記データ格納部から、前記入力されたインデックス値に関連付けられている第２のインデックス値を取得し、
前記データ格納部から、取得された前記第２のインデックス値に関連付けられている、当該取得された前記第２のインデックス値の変換後の複数の第３のインデックス値を取得し、
前記入力されたインデックス値の変換後の複数の第３のインデックス値及び取得された前記第２のインデックス値の変換後の複数の第３のインデックス値から、クエリを生成する
処理を、コンピュータが実行する検索処理方法。
【０１１３】
（付記７）
第１のインデックス値と当該第１のインデックス値に関連付けられている第２のインデックス値と当該第１のインデックス値の変換後の複数の第３のインデックス値と当該複数の第３のインデックス値の各々についての出現確率とを関連付けるデータブロックを複数格納するデータ格納部から、検索対象データに含まれるインデックス値に関連するデータブロックに含まれる出現確率に従って、前記検索対象データに含まれるインデックス値に対応する第３のインデックス値を特定し、
特定された前記第３のインデックス値又は当該特定された前記第３のインデックス値の秘匿化値で、前記検索対象データに含まれるインデックス値を置換することで、秘匿化された検索対象データを生成する
処理を、コンピュータが実行し、
前記第１のインデックス値の変換後の複数の第３のインデックス値及び前記第２のインデックス値の変換後の複数の第３のインデックス値から生成されるクエリにより検索が行われた場合に、
前記第１のインデックス値に関連付けられている複数の第３のインデックス値のうちいずれかのグループに属する第３のインデックス値についての検索結果の頻度と、前記第１のインデックス値に関連付けられている第２のインデックス値に関連付けられている複数の第３のインデックス値のうちいずれかのグループに属する第３のインデックス値についての検索結果の頻度とが一致し、且つ
前記頻度が一致する前記第３のインデックス値の数が予め定められた数以上となるという条件を満たすように、前記出現確率が設定されている
データ生成方法。
【０１１４】
（付記８）
第１のインデックス値と当該第１のインデックス値に関連付けられている第２のインデックス値と当該第１のインデックス値の変換後の複数の第３のインデックス値とを関連付けるデータブロックを複数格納するデータ格納部と、
前記データ格納部から、入力されたインデックス値に関連付けられている、当該入力されたインデックス値の変換後の複数の第３のインデックス値を取得し、前記データ格納部から、前記入力されたインデックス値に関連付けられている第２のインデックス値を取得し、前記データ格納部から、取得された前記第２のインデックス値に関連付けられている、当該取得された前記第２のインデックス値の変換後の複数の第３のインデックス値を取得し、前記入力されたインデックス値の変換後の複数の第３のインデックス値及び取得された前記第２のインデックス値の変換後の複数の第３のインデックス値から、クエリを生成する生成部と、
を有する情報処理装置。
【０１１５】
（付記９）
第１のインデックス値と当該第１のインデックス値に関連付けられている第２のインデックス値と当該第１のインデックス値の変換後の複数の第３のインデックス値と当該複数の第３のインデックス値の各々についての出現確率とを関連付けるデータブロックを複数格納するデータ格納部と、
前記データ格納部から、検索対象データに含まれるインデックス値に関連するデータブロックを特定し、特定された前記データブロックに含まれる出現確率に従って、前記検索対象データに含まれるインデックス値に対応する第３のインデックス値を特定し、特定された前記第３のインデックス値又は当該特定された前記第３のインデックス値の秘匿化値で、前記検索対象データに含まれるインデックス値を置換することで、秘匿化された検索対象データを生成する生成部と、
を有し、
前記第１のインデックス値の変換後の複数の第３のインデックス値及び前記第２のインデックス値の変換後の複数の第３のインデックス値から生成されるクエリにより検索が行われた場合に、
前記第１のインデックス値に関連付けられている複数の第３のインデックス値のうちいずれかのグループに属する第３のインデックス値についての検索結果の頻度と、前記第１のインデックス値に関連付けられている第２のインデックス値に関連付けられている複数の第３のインデックス値のうちいずれかのグループに属する第３のインデックス値についての検索結果の頻度とが一致し、且つ
前記頻度が一致する前記第３のインデックス値の数が予め定められた数以上となるという条件を満たすように、前記出現確率が設定されている
情報処理装置。
【０１１６】
（付記１０）
情報処理装置と、
検索処理装置と、
を有し、
前記情報処理装置は、
第１のインデックス値と当該第１のインデックス値に関連付けられている第２のインデックス値と当該第１のインデックス値の変換後の複数の第３のインデックス値とを関連付けるデータブロックを複数格納するデータ格納部と、
前記データ格納部から、入力されたインデックス値に関連付けられている、当該入力されたインデックス値の変換後の複数の第３のインデックス値を取得し、前記データ格納部から、前記入力されたインデックス値に関連付けられている第２のインデックス値を取得し、前記データ格納部から、取得された前記第２のインデックス値に関連付けられている、当該取得された前記第２のインデックス値の変換後の複数の第３のインデックス値を取得し、前記入力されたインデックス値の変換後の複数の第３のインデックス値及び取得された前記第２のインデックス値の変換後の複数の第３のインデックス値から、クエリを生成する生成部と、
前記クエリを前記検索処理装置に送信する送信部と、
前記検索処理装置から、前記クエリの検索結果を受信する受信部と、
前記クエリの検索結果に含まれるデータのうち、前記入力されたインデックス値の変換後の複数の第３のインデックス値についてのデータを抽出する抽出部と、
を有し、
前記検索処理装置は、
前記クエリを前記情報処理装置から受信すると、前記クエリに従ってデータベースに対して検索処理を実行して、前記クエリの検索結果を前記情報処理装置に送信し、
前記第１のインデックス値の変換後の複数の第３のインデックス値のうちいずれかのグループに属する第３のインデックス値についての検索結果の頻度と、前記第１のインデックス値に関連付けられている第２のインデックス値の変換後の複数の第３のインデックス値のうちいずれかのグループに属する第３のインデックス値についての検索結果の頻度とが一致し、且つ
前記頻度が一致する前記第３のインデックス値の種類数が予め定められた数以上となるように、
前記第３のインデックス値についてのデータが前記データベースに格納されている
システム。
【符号の説明】
【０１１７】
３１  第１データ格納部
３２  第２データ格納部
３３  生成部
３４  第３データ格納部
３５  秘匿化処理部
３６  第４データ格納部
３７  登録処理部
５１  入力部
５２  第１データ格納部
５３  第２データ格納部
５４  クエリ生成部
５５  第３データ格納部
５６  送信部
５７  受信部
５８  第４データ格納部
５９  抽出部
６０  第５データ格納部
６１  出力部
【図１】
2014098989.tif 000003
【図２】
2014098989.tif 000004
【図３】
2014098989.tif 000005
【図４】
2014098989.tif 000006
【図５】
2014098989.tif 000007
【図６】
2014098989.tif 000008
【図７】
2014098989.tif 000009
【図８】
2014098989.tif 000010
【図９】
2014098989.tif 000011
【図１０】
2014098989.tif 000012
【図１１】
2014098989.tif 000013
【図１２】
2014098989.tif 000014
【図１３】
2014098989.tif 000015
【図１４】
2014098989.tif 000016
【図１５Ａ】
2014098989.tif 000017
【図１５Ｂ】
2014098989.tif 000018
【図１５Ｃ】
2014098989.tif 000019
【図１６】
2014098989.tif 000020
【図１７】
2014098989.tif 000021
【図１８】
2014098989.tif 000022
【図１９】
2014098989.tif 000023
【図２０】
2014098989.tif 000024
【図２１】
2014098989.tif 000025
【図２２】
2014098989.tif 000026
【図２３】
2014098989.tif 000027
【図２４】
2014098989.tif 000028
【図２５】
2014098989.tif 000029
【図２６】
2014098989.tif 000030
【図２７】
2014098989.tif 000031
【図２８】
2014098989.tif 000032
【図２９】
2014098989.tif 000033