(57)【特許請求の範囲】
【請求項１】
第１のユーザのコンピュータにより実行される情報処理方法であって、
第２のユーザと共通して使用される識別子及び属性値を各々有する複数のデータブロックを格納する第１のデータ格納部から、予め定められた個数以下のデータブロックに含まれる各識別子を読み出し、読み出された各前記識別子について、前記第２のユーザと共通して使用されるハッシュ関数を用いて、前記予め定められた個数に制限させたハッシュ値のいずれかを算出し、算出されたハッシュ値に対応付けて前記識別子を第２のデータ格納部に格納する処理と、
前記予め定められた個数のハッシュ値の各々について、前記第２のデータ格納部において当該ハッシュ値に１又は複数の識別子が対応付けられている場合にはいずれか１つの識別子を含むデータブロックに含まれる属性値に応じて０又は１を特定し、当該ハッシュ値に前記識別子が対応付けられていない場合には０を特定することで、前記予め定められた個数の要素値を有するベクトルを生成する生成処理と、
前記ベクトルの各要素値を所定の方式で暗号化し、他の装置に送信する処理と、
前記他の装置から暗号化された前記ベクトルの内積値を受信し、前記ベクトルの内積値を復号化する処理と、
を含む情報処理方法。
【請求項２】
前記他の装置が、前記第２のユーザ以外の第三者の装置であり、
前記他の装置が、前記第１のユーザのコンピュータ及び前記第２のユーザのコンピュータから、暗号化された前記ベクトルの各要素値を受信し、暗号化されたままで前記ベクトルの内積値を算出し、
前記他の装置が、前記第１のユーザのコンピュータ及び前記第２のユーザのコンピュータへ、暗号化された前記ベクトルの内積値を送信する
請求項１記載の情報処理方法。
【請求項３】
前記他の装置が、前記第２のユーザのコンピュータであり、
前記第２のユーザのコンピュータから、暗号化された前記ベクトルの各要素値を受信する処理と、
前記生成処理において生成された前記ベクトルの要素値と、暗号化された前記ベクトルの各要素値から、暗号化された前記ベクトルの内積値を算出する処理と、
暗号化された前記ベクトルの内積値を、前記他の装置に送信する処理と、
をさらに含む請求項１記載の情報処理方法。
【請求項４】
第１のユーザのコンピュータに、
第２のユーザと共通して使用される識別子及び属性値を各々有する複数のデータブロックを格納する第１のデータ格納部から、予め定められた個数以下のデータブロックに含まれる各識別子を読み出し、読み出された各前記識別子について、前記第２のユーザと共通して使用されるハッシュ関数を用いて、前記予め定められた個数に制限させたハッシュ値のいずれかを算出し、算出されたハッシュ値に対応付けて前記識別子を第２のデータ格納部に格納する処理と、
前記予め定められた個数のハッシュ値の各々について、前記第２のデータ格納部において当該ハッシュ値に１又は複数の識別子が対応付けられている場合にはいずれか１つの識別子を含むデータブロックに含まれる属性値に応じて０又は１を特定し、当該ハッシュ値に前記識別子が対応付けられていない場合には０を特定することで、前記予め定められた個数の要素値を有するベクトルを生成する生成処理と、
前記ベクトルの各要素値を所定の方式で暗号化し、他の装置に送信する処理と、
前記他の装置から暗号化された前記ベクトルの内積値を受信し、前記ベクトルの内積値を復号化する処理と、
を、実行させるためのプログラム。
【請求項５】
他のユーザと共通して使用される識別子及び属性値を各々有する複数のデータブロックを格納する第１のデータ格納部から、予め定められた個数以下のデータブロックに含まれる各識別子を読み出し、読み出された各前記識別子について、前記他のユーザと共通して使用されるハッシュ関数を用いて、前記予め定められた個数に制限させたハッシュ値のいずれかを算出し、算出されたハッシュ値に対応付けて前記識別子を第２のデータ格納部に格納する識別子処理部と、
前記予め定められた個数のハッシュ値の各々について、前記第２のデータ格納部において当該ハッシュ値に１又は複数の識別子が対応付けられている場合にはいずれか１つの識別子を含むデータブロックに含まれる属性値に応じて０又は１を特定し、当該ハッシュ値に前記識別子が対応付けられていない場合には０を特定することで、前記予め定められた個数の要素値を有するベクトルを生成するベクトル生成部と、
前記ベクトルの各要素値を所定の方式で暗号化し、他の装置に送信し、前記他の装置から暗号化された前記ベクトルの内積値を受信し、前記ベクトルの内積値を復号化する処理部と、
を有する情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、相関ルールの抽出技術に関する。
【背景技術】
【０００２】
例えば異なる組織が保有するデータから、相関ルールを抽出したい場合がある。例えば、図１Ａに示すように、Ａ社が、楽曲売上表を管理しているものとする。楽曲売上表では、レコードのＩＤとして電話番号を用いており、当該電話番号の顧客が国家という楽曲を購入したか否かを表す属性が含まれる。一方、図１Ｂに示すように、Ｂ社が、書籍売上表を管理しているものとする。書籍売上表では、Ａ社と同様にレコードのＩＤとして電話番号を用いており、当該電話番号の顧客が国語辞典を購入したか否かを表す属性が含まれる。
【０００３】
ここでは、あるレコードがある属性値についてある条件を満たしている時、そのレコードは、その属性を生起しているということにする。図１Ａの楽曲売上表における生起条件は、黒丸印を有していることとする。例えば、電話番号「１２３４」のレコードは、図１Ａにおいて「国歌」を生起しているが、図１Ｂにおいて「国語辞典」は生起していない。また、複数の属性を同時に生起している場合には、共起していると呼ぶことにする。例えば、図１Ａ及び図１Ｂの表からすると、「国歌」と「国語辞典」とを共起しているレコードは、電話番号「１２３６」及び「２３４９」の２レコードである。
【０００４】
そして、異なるデータ保有者が有する表の属性について、共起数、すなわち共起しているレコードの数を計数したいことがある。共起数と、共有レコード数（すなわち共有しているレコードＩＤの数）とが分かれば、それぞれのデータ保有者が相関ルールを生成することができる。相関ルールとは、生起している事象間の関係のことである。例えば、図１Ａ及び図１Ｂでは、「国歌」と「国語辞典」の共起数は「２」であり、共有レコード数は５（「１２３４」「１２３５」「１２３６」「１３５６」「２３４９」）である。ここで、Ｂ社の書籍売上表のレコード数は６であり、「国語辞典」の生起数は３であるため、「国語辞典」を購入している人は高割合（２／（３×５／６）＝８０％）で「国歌」を購入しているという相関ルールをＢ社が推測できる。
【０００５】
共起数は、両方の表を突き合わせれば簡単に算出できるが、異なる組織間では詳しいデータを教えない場合がある。これは、企業秘密、法律や契約による制限、プライバシー保護といった要因による。
【０００６】
データ保有者が互いにできるだけ情報を教え合わずに共起数を知る従来方法として、秘匿内積計算プロトコルがある。しかし、秘匿内積計算プロトコルは、対応するレコードの数と順序が揃っていることが前提になっている。
【０００７】
なお、対応するレコードの数と順序を揃える方法として、共有レコードＩＤ集合を教え合うプロトコルを採用することが考えられる。共有レコードＩＤ集合がわかれば、数が揃い、レコードＩＤについて辞書順等でソートすれば順序も揃う。しかし、共有レコードＩＤも教えたくないデータ保有者がいる場合にはこの方法は使えない。また、この方法は、あるデータ保有者が偽ることで、他のデータ保有者の共有レコードＩＤ以外のレコードＩＤの存在／不在を知ることができてしまうという問題もある。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００９−２７２９９５号公報
【特許文献２】特開２００１−２５６３９５号公報
【非特許文献】
【０００９】
【非特許文献１】Jaideep Vaidya and Chris Clifton. Privacy Preserving Association Rule Mining in Vertically Partitioned Data. Proceedings of the eighth ACM SIGKDD, pp. 639-644, 2002.
【発明の概要】
【発明が解決しようとする課題】
【００１０】
従って、本技術の目的は、一側面においては、データ保有者間で可能な限りデータを明かさずに特定の２属性について共起数を得るための技術を提供することである。
【課題を解決するための手段】
【００１１】
本技術に係る情報処理方法は、第１のユーザのコンピュータにより実行される情報処理方法であって、（Ａ）第２のユーザと共通して使用される識別子及び属性値を各々有する複数のデータブロックを格納する第１のデータ格納部から、予め定められた個数以下のデータブロックに含まれる各識別子を読み出し、読み出された各識別子について、第２のユーザと共通して使用されるハッシュ関数を用いて、予め定められた個数に制限させたハッシュ値のいずれかを算出し、算出されたハッシュ値に対応付けて識別子を第２のデータ格納部に格納する処理と、（Ｂ）予め定められた個数のハッシュ値の各々について、第２のデータ格納部において当該ハッシュ値に１又は複数の識別子が対応付けられている場合にはいずれか１つの識別子を含むデータブロックに含まれる属性値に応じて０又は１を特定し、当該ハッシュ値に識別子が対応付けられていない場合には０を特定することで、予め定められた個数の要素値を有するベクトルを生成する生成処理と、（Ｃ）ベクトルの各要素値を所定の方式で暗号化し、他の装置に送信する処理と、（Ｄ）他の装置から暗号化されたベクトルの内積値を受信し、ベクトルの内積値を復号化する処理とを含む。
【発明の効果】
【００１２】
データ保有者間で可能な限りデータを明かさずに特定の２属性について共起数を得ることができるようになる。
【図面の簡単な説明】
【００１３】
【図１Ａ】図１Ａは、Ａ社のデータ例を示す図である。
【図１Ｂ】図１Ｂは、Ｂ社のデータ例を示す図である。
【図２】図２は、第１の実施の形態におけるシステムの概要を示す図である。
【図３】図３は、第１の実施の形態におけるコンピュータＡ及びＢの構成を示す図である。
【図４】図４は、コンピュータＣの構成を示す図である。
【図５】図５は、第１の実施の形態におけるメインの処理フローを示す図である。
【図６】図６は、ｎ次元ベクトル生成処理の処理フローを示す図である。
【図７】図７は、ハッシュ表の最初の状態を示す図である。
【図８】図８は、Ａ社のハッシュ表の一例を示す図である。
【図９】図９は、重複ＩＤを削除した後におけるＡ社のハッシュ表の一例を示す図である。
【図１０】図１０は、Ｂ社のハッシュ表の一例を示す図である。
【図１１】図１１は、重複ＩＤを削除した後におけるＢ社のハッシュ表の一例を示す図である。
【図１２】図１２は、ｎ次元ベクトル生成処理の処理フローを示す図である。
【図１３】図１３は、Ａ社のベクトルの一例を表す図である。
【図１４】図１４は、Ｂ社のベクトルの一例を表す図である。
【図１５】図１５は、第１の実施の形態における内積取得処理の処理フローを示す図である。
【図１６】図１６は、第２の実施の形態におけるコンピュータＡ及びＢの構成を示す図である。
【図１７】図１７は、第２の実施の形態における内積取得処理の処理フローを示す図である。
【図１８】図１８は、コンピュータの機能ブロック図である。
【発明を実施するための形態】
【００１４】
［実施の形態１］
本実施の形態に係るシステムの概要を図２に示す。例えば、インターネットなどのネットワーク１には、Ａ社が保有するコンピュータＡと、Ｂ社が保有するコンピュータＢと、Ａ社及びＢ社以外の第三者であるＣ社が保有するコンピュータＣとが接続されている。本実施の形態では、Ａ社及びＢ社の２社が自己が有するデータに含まれるある属性と相手方が有するデータに含まれる他の属性との共起数を得ることを目的とする。コンピュータＣは、例えばSemi-Trusted Third Party（他者とは結託しないが、不正を働くかも知れない第三者）として、コンピュータＡ及びＢと協働するものとする。なお、Semi-Trusted Third Partyについては、例えばM.K.Franklin, M.K.Reiter, “Fair Exchange with a Semi-Trusted Third Party”, Proc. 4th ACM Conf. on Computer and Communication Security, April 1997.を参照のこと。
【００１５】
コンピュータＡ及びＢは、例えば図３に示すような構成を有する。例えばコンピュータＡは、第１データ格納部３１と、設定データ格納部３２と、識別子処理部３３と、第２データ格納部３４と、ベクトル生成部３５と、内積取得処理部３６とを有する。
【００１６】
第１データ格納部３１は、例えば図１Ａ又は図１Ｂのような、生成すべき相関ルールの元となるデータを格納する。設定データ格納部３２は、例えば、使用するレコード数ｎ、使用するハッシュ関数の種別、暗号処理に用いるデータ（例えば、共有する秘密鍵及び公開鍵）、コンピュータＣのアドレスなどを格納する。
【００１７】
識別子処理部３３は、第１データ格納部３１に格納されているデータに対して、設定データ格納部３２に格納されたデータに従って処理を行い、第２データ格納部３４に格納する。ベクトル生成部３５は、設定データ格納部３２に格納されているデータに従って、第２データ格納部３４に格納されているデータ及び第１データ格納部３１に格納されているデータを用いて処理を行ってｎ次元のベクトルを生成し、第２データ格納部３４に格納する。内積取得部３６は、暗号処理部３６１を有しており、コンピュータＣと連携して処理を行う。その際、内積取得部３６の暗号処理部３６１は、第２データ格納部３４に格納されているベクトルの各要素値を暗号化し、コンピュータＣから暗号化された演算結果を受信すると、演算結果を復号化して、第２データ格納部３４に格納する。
【００１８】
コンピュータＣは、例えば図４に示すような構成を有する。コンピュータＣは、データ受信部５１と、データ送信部５２と、秘匿計算部５３とを有する。データ受信部５１は、コンピュータＡ及びＢから、暗号化されたベクトルの要素値を受信すると、秘匿計算部５３に出力する。秘匿計算部５３は、暗号化されたベクトルの要素値を受け取ると、暗号化されたベクトルの内積値が得られるように暗号化したまま所定の演算を実施し、演算結果をデータ送信部５２に出力する。データ送信部５２は、コンピュータＡ及びＢに対して、演算結果を送信する。
【００１９】
次に、図５乃至図１５を用いて、図２に示したシステムの処理内容について説明する。まず、事前に、コンピュータＡ及びＢが、空間サイズｎと、使用するハッシュ関数の種別、共有する秘密鍵及び公開鍵などを、設定データ格納部３２に格納する初期設定処理を実施する（図５：ステップＳ１）。
【００２０】
そして、識別子処理部３３は、設定データ格納部３２に格納されている空間サイズｎに従って、第１データ格納部３１に格納されているレコード群において最大ｎレコードを選択する（ステップＳ３）。第１データ格納部３１に格納されているレコード数がｎ以下であれば、全レコードを選択しても良い。レコード数がｎより多い場合には、データ保有者が予め指定した方針に沿って選択する。例えば、最初のｎレコードを選択したり、ランダムにｎレコード選択する。
【００２１】
その後、識別子処理部３３及びベクトル生成部３５は、ｎ次元ベクトル生成処理を実施する（ステップＳ５）。このｎ次元ベクトル生成処理については、図６乃至図１４を用いて説明する。
【００２２】
識別子処理部３３は、ステップＳ３で選択したレコードのうち、未処理のレコードを１つ特定する（図６：ステップＳ１１）。そして、識別子処理部３３は、特定されたレコードのＩＤについて、空間サイズｎのハッシュ値を算出する（ステップＳ１３）。例えば、設定データ格納部３２に格納されているハッシュ関数の種別に従ってハッシュ関数を特定し、当該ハッシュ関数にレコードのＩＤを入力し、ハッシュ関数の出力を、空間サイズｎで除した結果を採用する。
【００２３】
その後、識別子処理部３３は、算出されたハッシュ値とレコードのＩＤとを対応付けて、第２データ格納部３４におけるハッシュ表のエントリとして格納する（ステップＳ１５）。
【００２４】
例えば、ｎ＝８であり、図１Ａにおける「１２３４」をＳＨＡ−２５６に入力して下位３ビット（ｎ＝８＝２3のため）を採用すると、「４」が得られる。従って、図７に示すようなハッシュ表が最初に得られる。図７に示すように、ハッシュ表には、ハッシュ値とレコードＩＤの集合とが対応付けられている。なお、ハッシュ値はハッシュ関数の出力をｎ個に制限しているので、異なるレコードＩＤを入力しても同じハッシュ値になってしまう場合がある。
【００２５】
そして、識別子処理部３３は、ステップＳ３で選択したレコードのうち未処理のレコードが存在しているか判断する（ステップＳ１７）。未処理のレコードが存在する場合には、処理はステップＳ１１に戻る。一方、未処理のレコードが存在しない場合には、識別子処理部３３は、複数のＩＤが対応付けられたハッシュ値がハッシュ表内に存在しているか確認する（ステップＳ１９）。例えば、図１Ａのレコードを処理すると、図８に示すようなハッシュ表が得られる。上でも述べたように、ハッシュ関数の出力をｎ個に制限しているので、異なるレコードＩＤを入力しても同じハッシュ値になってしまう場合がある。図８の例では、ハッシュ値「１」及び「４」については複数のＩＤが対応付けられている。
【００２６】
そして、複数のＩＤが対応付けられているハッシュ値が存在する場合には、識別子処理部３３は、複数のＩＤのうち１つを選択し、他を削除する（ステップＳ２１）。例えば、ランダムに１つを選択する。図８の例では、ハッシュ値「１」については、「１２３５」及び「２２２２」のうち「１２３５」が選択され、ハッシュ値「４」については、「１２３４」「１２３６」及び「２３４９」のうち、「２３４９」が選択されたものとする。そうすると、ハッシュ表は図９のような状態になる。このようにすれば、ハッシュ値からレコードのＩＤを得るための写像ｆが得られたことになる。すなわち、ｆ（ハッシュ値）＝レコードのＩＤと表される。写像ｆについては、このようなハッシュ表ではなく他の形態にて生成するようにしても良い。
【００２７】
なお、図１Ｂのレコードを処理すると、最初は図１０に示すようなハッシュ表が得られる。図１０の例では、ハッシュ値「４」について複数のＩＤが対応付けられている。従って、「１２３４」「１２３６」及び「２３４９」のうち「１２３６」を選択すると、図１１に示すようなハッシュ表が得られる。なお、図９においてはハッシュ値「４」についてはＩＤ「２３４９」が対応付けられており、図１１においてはＩＤ「１２３６」が対応付けられている。これは、空間サイズｎにハッシュ値を制限しているのでやむを得ないが、ｎが十分大きなサイズであれば、同じハッシュ値に異なるＩＤが対応付けられることは避けられる。
【００２８】
処理は端子Ａを介して図１２の処理に移行して、ベクトル生成部３５は、空間サイズｎのｎ次元ベクトルｖ（ｉ）を初期化する（ステップＳ２３）。すなわち、全ての要素値を０に設定する。また、ベクトル生成部３５は、カウンタｉを０に設定する（ステップＳ２５）。そして、ベクトル生成部３５は、第２データ格納部３４内のハッシュ表においてハッシュ値ｉに対応するレコードＩＤが登録されているか判断する（ステップＳ２７）。ハッシュ値ｉに対応するレコードＩＤが登録されている場合には、ベクトル生成部３５は、ハッシュ値ｉに対応するレコードＩＤのレコードに含まれる特定の属性の属性値に応じて０又は１を、ベクトルｖ（ｉ）に設定する（ステップＳ２９）。そして処理はステップＳ３３に移行する。
【００２９】
例えば図９に示すようなハッシュ表の場合、ハッシュ値ｉ＝０に対してレコードＩＤ「１２５７」が対応付けられているので、第１データ格納部３１におけるレコード（図１Ａ）のうち、レコードＩＤ「１２５７」のレコードにおける属性「国歌」に属性値「黒丸」が登録されているか否かを確認する。図１Ａの例では「黒丸」が登録されていないので、「０」が特定され、ｖ（０）に設定される。
【００３０】
一方、ハッシュ値ｉに対応するレコードＩＤが登録されていない場合には、ベクトル生成部３５は、ｖ（ｉ）＝０を設定する（ステップＳ３１）。その後、処理はステップＳ３３に移行する。
【００３１】
例えば図９に示すようなハッシュ表の場合、ハッシュ値ｉ＝３に対してレコードＩＤが対応付けられていない。従って、ｖ（３）＝０と設定する。
【００３２】
そして、ベクトル生成部３５は、カウンタｉが（ｎ−１）以上となったか判断する（ステップＳ３３）。ｉが（ｎ−１）未満であれば、ベクトル生成部３５は、ｉを１インクリメントし（ステップＳ３５）、処理はステップＳ２７に移行する。一方、ｉが（ｎ−１）以上となった場合には、ベクトル生成部３５は、生成されたベクトルｖを第２データ格納部３４に格納する（ステップＳ３７）。そして、処理は呼び出し元の処理に戻る。
【００３３】
このようにすれば、ユーザＩＤは秘匿され、さらに空間サイズｎに揃えられ、ハッシュ値に係るレコードにおいて特定の属性値が生起しているか否かを表しているベクトルｖが得られるようになる。
【００３４】
このような処理を実施すると、Ａ社のコンピュータＡは、図１３に示すようなベクトルｖaを生成する。一方、Ｂ社のコンピュータＢは、図１４に示すようなベクトルｖbを生成する。
【００３５】
図５の処理の説明に戻って、内積取得処理部３６等は、内積取得処理を実施する（ステップＳ７）。この内積取得処理については、図１５を用いて説明する。
【００３６】
コンピュータＡの内積取得処理部３６の暗号処理部３６１は、設定データ格納部３２に格納されている共有鍵を用いて、第２データ格納部３４に格納されているベクトルｖの各要素値を、所定の完全準同型暗号方式に従って暗号化する（ステップＳ４１）。
【００３７】
但し、暗号方式のアルゴリズムは、任意回の加算と１回以上の乗算についての準同型性があれば何でも良く、たとえばＢＧＮ方式（D. Boneh, E. Goh, and K. Nissim. Evaluating 2-DNF Formulas on Ciphertexts. In Proceedings of Theory of Cryptography Conference 2005, Lecture Notes in Computer Science, Vol. 3378, pp. 325-341, 2005.）を使っても良い。
【００３８】
例えば、暗号化処理をＥ（ｒ，ｍ）（ｒは乱数、ｍは平文）と表し、復号化処理をＤ（ｃ）（ｃは暗号文、Ｄ（Ｅ（ｒ，ｍ））＝ｍ）と表す。また、Ｅ’（ｍ）を、Ｄ（Ｅ’（ｍ））＝ｍを満たす性質とする。つまり、Ｅ（ｒ，ｍ）はＥ’（ｍ）とも書ける。準同型性により、公開鍵を知っていれば（秘密鍵を知らなくても）、Ｅ’（ｍ１）とＥ’（ｍ２）から、Ｅ’（ｍ１＊ｍ２）及びＥ’(ｍ１＋ｍ２）を算出できるものとする。
【００３９】
本実施の形態では、ステップＳ４１で、Ｅ（ｒa1，ｖa（０））、Ｅ（ｒa2，ｖa（１））、．．．．、Ｅ（ｒan，ｖa（ｎ−１））を算出する。
【００４０】
そして、内積取得処理部３６は、暗号化された、ベクトルの各要素値を、コンピュータＣに送信する（ステップＳ４３）。コンピュータＣのデータ受信部５１は、コンピュータＡから、暗号化された、ベクトルの各要素値を受信し、秘匿計算部５３に出力する（ステップＳ４５）。
【００４１】
なお、上でも述べたように、コンピュータＣは、Semi-Trusted Third Partyとして機能するので、その処理のために用いられるデータについては、コンピュータＡとコンピュータＣとの間でやりとりされるものとする。但し、この部分は本実施の形態の主旨ではないので、説明は省略する。
【００４２】
一方、コンピュータＢの内積取得処理部３６の暗号処理部３６１は、設定データ格納部３２に格納されている共有鍵を用いて、第２データ格納部３４に格納されているベクトルｖの各要素値を、所定の完全準同型暗号方式に従って暗号化する（ステップＳ４７）。
【００４３】
本実施の形態では、ステップＳ４７で、Ｅ（ｒb1，ｖb（０））、Ｅ（ｒb2，ｖb（１））、．．．．、Ｅ（ｒbn，ｖb（ｎ−１））を算出する。
【００４４】
そして、内積取得処理部３６は、暗号化された、ベクトルの各要素値を、コンピュータＣに送信する（ステップＳ４９）。コンピュータＣのデータ受信部５１は、コンピュータＢから、暗号化された、ベクトルの各要素値を受信し、秘匿計算部５３に出力する（ステップＳ５１）。
【００４５】
なお、上でも述べたように、コンピュータＣは、Semi-Trusted Third Partyとして機能するので、その処理のために用いられるデータについては、コンピュータＢとコンピュータＣとの間でやりとりされるものとする。但し、この部分は本実施の形態の主旨ではないので、説明は省略する。
【００４６】
コンピュータＣの秘匿計算部５３は、ベクトルｖaとベクトルｖbの内積値が得られるように、演算を実施する（ステップＳ５３）。すなわち、Ｅ’（ｖa（０）＊ｖb（０）＋ｖa（１）＊ｖb（１）＋．．．．＋ｖa（ｎ−１）＊ｖb（ｎ−１））が得られるように演算を実施する。これを実現するための演算は、採用した完全準同型暗号方式によって異なる。秘匿計算部５３は、暗号化された、ベクトルの内積値をデータ送信部５２に出力する。
【００４７】
データ送信部５２は、演算結果（すなわち暗号化された、ベクトルの内積値）を、コンピュータＡ及びコンピュータＢに送信する（ステップＳ５５）。コンピュータＡの内積取得処理部３６は、コンピュータＣから演算結果を受信すると（ステップＳ５７）、暗号処理部３６１は、設定データ格納部３２に格納されている共有鍵を用いて完全準同型暗号方式に従って演算結果を復号して、ベクトルの内積値、すなわち共起数を例えば第２データ格納部３４に格納する（ステップＳ６１）。
【００４８】
一方、コンピュータＢの内積取得処理部３６は、コンピュータＣから演算結果を受信すると（ステップＳ５９）、暗号処理部３６１は、設定データ格納部３２に格納されている共有鍵を用いて完全準同型暗号方式に従って演算結果を復号して、ベクトルの内積値、すなわち共起数を第２データ格納部３４に格納する（ステップＳ６３）。
【００４９】
このようにすれば、コンピュータＡが保持するデータにおける特定の属性の属性値と、コンピュータＢが保持するデータにおける特定の属性の属性値との共起数を、互いが自己のデータを他方に明かすことなく得ることができるようになる。共起数が得られれば、上でも述べたように、「国語辞典」を購入している人は高割合で「国歌」を購入しているというような相関ルールなどを推定できるようになる。
【００５０】
なお、図１３及び図１４で示したベクトルｖa及びベクトルｖbの内積値は「１」となってしまっている。実際には、上で述べたように「２」であるから、得られた値は共起数の概数となるが、これは上で述べたようにｎが小さいため１つのハッシュ値に複数のＩＤが対応付けられてしまったために生ずる。ｎが大きな値になればこの誤差は十分小さくなる。
【００５１】
［実施の形態２］
第１の実施の形態では、コンピュータＣが存在する例を示したが、コンピュータＣが存在しなくても良い。この場合、コンピュータＡとコンピュータＢとでデータを交換して共起数を得ることになる。
【００５２】
具体的には、コンピュータＡ及びコンピュータＢは、図１６に示すような構成を有する。なお、図３と同じ構成要素については、同じ符号が付されている。具体的には、例えばコンピュータＡは、内積取得処理部３６の代わりに、秘匿データ交換処理部３８を有する。秘匿データ交換処理部３８は、暗号処理部３８１を有し、コンピュータＢと暗号化されたデータを交換することで、ベクトルの内積値、即ち共起数を算出する。
【００５３】
処理は、図５における内積取得処理だけが、第１の実施の形態と異なる。この内積取得処理の具体的な処理を図１７を用いて説明する。
【００５４】
コンピュータＡにおける秘匿データ交換処理部３８の暗号処理部３８１は、設定データ格納部３２に格納されている自己の公開鍵を用いて準同型暗号方式に従って、ベクトルの各要素値（以下区別するため第１要素値と呼ぶ）を暗号化する（ステップＳ７１）。ｖa（０）、ｖa（１）、．．．ｖa（ｎ−１）を所定のアルゴリズムで暗号化して、Ｅ（ｖa（０））、Ｅ（ｖa（１））、．．．Ｅ（ｖa（ｎ−１））を得る。
【００５５】
そして、コンピュータＡの秘匿データ交換処理部３８は、暗号化された各第１要素値を、コンピュータＢに送信する（ステップＳ７３）。コンピュータＢの秘匿データ交換処理部３８は、コンピュータＡから、暗号化された各第１要素値を受信し、例えばメインメモリなどの記憶装置に格納する（ステップＳ７４）。
【００５６】
また、コンピュータＢにおける秘匿データ交換処理部３８の暗号処理部３８１は、設定データ格納部３２に格納されている自己の公開鍵を用いて準同型暗号方式に従って、ベクトルの各要素値（以下区別するため第２要素値と呼ぶ）を暗号化する（ステップＳ７５）。ｖb（０）、ｖb（１）、．．．ｖb（ｎ−１）を所定のアルゴリズムで暗号化して、Ｅ（ｖb（０））、Ｅ（ｖb（１））、．．．Ｅ（ｖb（ｎ−１））を得る。
【００５７】
そして、コンピュータＢの秘匿データ交換処理部３８は、暗号化された各第２要素値を、コンピュータＡに送信する（ステップＳ７７）。コンピュータＡの秘匿データ交換処理部３８は、コンピュータＢから、暗号化された各第２要素値を受信し、例えばメインメモリなどの記憶装置に格納する（ステップＳ７９）。
【００５８】
その後、コンピュータＢにおける秘匿データ交換処理部３８の暗号処理部３８１は、暗号化された、ベクトルの内積値を得られるように所定の演算を、暗号化された各第２要素値を用いて実施することで、第１の演算結果（すなわち、暗号化された、ベクトルの内積値）を生成する（ステップＳ８１）。
【００５９】
例えば、準同型暗号方式としてＰａｉｌｌｉｅｒ暗号を使用する場合には、以下の演算を実施する。Ｍは、他方のユーザの公開鍵に含まれる。
ｅ＝（Ｅ（ｖa（０））vb(0)×（Ｅ（ｖa（１））vb(1)×・・・×（Ｅ（ｖa（ｎ−１））vb(n-1)）  ｍｏｄ  Ｍ
＝Ｅ（ｖa（０）×ｖb（０）＋ｖa（１）×ｖb（１）＋・・・＋ｖa（ｎ−１）×ｖb（ｎ−１））
【００６０】
そして、コンピュータＢの秘匿データ交換処理部３８は、第１の演算結果をコンピュータＡに返信する（ステップＳ８５）。これに対して、コンピュータＡの秘匿データ交換処理部３８は、第１の演算結果を、コンピュータＢから受信し、メインメモリなどの記憶装置に格納する（ステップＳ８７）。
【００６１】
一方、コンピュータＡにおける秘匿データ交換処理部３８の暗号処理部３８１は、暗号化された、ベクトルの内積値を得られるように所定の演算を、暗号化された各第１要素値を用いて実施することで、第２の演算結果（すなわち、暗号化された、ベクトルの内積値）を生成する（ステップＳ８３）。コンピュータＢで行われたものと同様の処理を実施する。
【００６２】
具体的には、以下のような演算を実施する。
ｅ＝（Ｅ（ｖb（０））va(0)×（Ｅ（ｖb（１））va(1)×・・・×（Ｅ（ｖb（ｎ−１））va(n-1)）  ｍｏｄ  Ｍ
＝Ｅ（ｖb（０）×ｖa（０）＋ｖb（１）×ｖa（１）＋・・・＋ｖb（ｎ−１）×ｖa（ｎ−１））
【００６３】
そして、コンピュータＡの秘匿データ交換処理部３８は、第２の演算結果をコンピュータＢに返信する（ステップＳ８９）。これに対して、コンピュータＢの秘匿データ交換処理部３８は、第２の演算結果を、コンピュータＡから受信し、メインメモリなどの記憶装置に格納する（ステップＳ９１）。
【００６４】
最終的に、コンピュータＡにおける秘匿データ交換処理部３８の暗号処理部３８１は、第１の演算結果を自己の秘密鍵を用いて復号することで、ベクトルの内積値、すなわち共起数を取得する（ステップＳ９３）。同様に、コンピュータＢにおける秘匿データ交換処理部３８の暗号処理部３８１は、第２の演算結果を自己の秘密鍵を用いて復号することで、ベクトルの内積値、すなわち共起数を取得する（ステップＳ９５）。
【００６５】
以上のようにすれば、第１の実施の形態と同様の結果を得ることができるようになる。
【００６６】
以上、本技術の実施の形態を述べたが、本技術はこれに限定されるものではない。例えば、上で述べた機能ブロック図は一例であって、必ずしも実際のプログラムモジュール構成とは一致しない場合もある。また、処理フローについても、処理結果が変わらない限り、処理ステップの処理順番を入れ替えたり、並列実行するようにしても良い。
【００６７】
また、暗号化方式については様々な方式が採用できるため、上で述べたようなベクトルの内積を算出できるような方式であれば、どのような方式であっても良い。
【００６８】
また、コンピュータＡ乃至Ｃの各々については、複数台でその機能を果たすように構成するようにしても良い。
【００６９】
なお、上で述べたコンピュータＡ乃至Ｃは、コンピュータ装置であって、図１８に示すように、メモリ２５０１とＣＰＵ（Central Processing Unit）２５０３とハードディスク・ドライブ（ＨＤＤ：Hard Disk Drive）２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ：Operating System）及び本実施例における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。ＣＰＵ２５０３は、アプリケーション・プログラムの処理内容に応じて表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ２５０１に格納されるが、ＨＤＤ２５０５に格納されるようにしてもよい。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【００７０】
以上述べた本実施の形態をまとめると、以下のようになる。
【００７１】
本実施の形態に係る情報処理方法は、第１のユーザのコンピュータにより実行される情報処理方法であって、（Ａ）第２のユーザと共通して使用される識別子及び属性値を各々有する複数のデータブロックを格納する第１のデータ格納部から、予め定められた個数以下のデータブロックに含まれる各識別子を読み出し、読み出された各識別子について、第２のユーザと共通して使用されるハッシュ関数を用いて、予め定められた個数に制限させたハッシュ値のいずれかを算出し、算出されたハッシュ値に対応付けて識別子を第２のデータ格納部に格納するステップと、（Ｂ）予め定められた個数のハッシュ値の各々について、第２のデータ格納部において当該ハッシュ値に１又は複数の識別子が対応付けられている場合にはいずれか１つの識別子を含むデータブロックに含まれる属性値に応じて０又は１を特定し、当該ハッシュ値に識別子が対応付けられていない場合には０を特定することで、予め定められた個数の要素値を有するベクトルを生成する生成ステップと、（Ｃ）ベクトルの各要素値を所定の方式で暗号化し、他の装置に送信するステップと、（Ｄ）他の装置から暗号化されたベクトルの内積値を受信し、ベクトルの内積値を復号化するステップとを含む。
【００７２】
このようにすることで、共起数を表す、ベクトルの内積値を、他のユーザに対して、識別子を含むデータを明かすことなく得ることができるようになる。この共起数によって、相関ルールを生成することもできる。なお、所定の方式は、例えば準同型暗号方式である。
【００７３】
なお、上で述べた他の装置が、第２のユーザ以外の第三者の装置である場合もある。この場合、上で述べた他の装置が、第１のユーザのコンピュータ及び第２のユーザのコンピュータから、暗号化されたベクトルの各要素値を受信し、暗号化されたままでベクトルの内積値を算出し、第１のユーザのコンピュータ及び第２のユーザのコンピュータへ、暗号化されたベクトルの内積値を送信するようにしても良い。第三者を介することで不正を防止することも可能となる。
【００７４】
また、上で述べた他の装置が、第２のユーザのコンピュータである場合もある。この場合、（Ｄ）第２のユーザのコンピュータから、暗号化されたベクトルの各要素値を受信するステップと、（Ｅ）生成処理において生成されたベクトルの要素値と、暗号化されたベクトルの各要素値から、暗号化されたベクトルの内積値を算出するステップと、（Ｆ）暗号化されたベクトル値の内積値を、上で述べた他の装置に送信するステップとをさらに含むようにしても良い。第三者が存在しなくても、他のユーザに対してベクトルそのものを明かすこともない。
【００７５】
なお、上で述べたような処理をコンピュータに実施させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、ＣＤ−ＲＯＭなどの光ディスク、光磁気ディスク、半導体メモリ（例えばＲＯＭ）、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。
【００７６】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００７７】
（付記１）
第１のユーザのコンピュータにより実行される情報処理方法であって、
第２のユーザと共通して使用される識別子及び属性値を各々有する複数のデータブロックを格納する第１のデータ格納部から、予め定められた個数以下のデータブロックに含まれる各識別子を読み出し、読み出された各前記識別子について、前記第２のユーザと共通して使用されるハッシュ関数を用いて、前記予め定められた個数に制限させたハッシュ値のいずれかを算出し、算出されたハッシュ値に対応付けて前記識別子を第２のデータ格納部に格納する処理と、
前記予め定められた個数のハッシュ値の各々について、前記第２のデータ格納部において当該ハッシュ値に１又は複数の識別子が対応付けられている場合にはいずれか１つの識別子を含むデータブロックに含まれる属性値に応じて０又は１を特定し、当該ハッシュ値に前記識別子が対応付けられていない場合には０を特定することで、前記予め定められた個数の要素値を有するベクトルを生成する生成処理と、
前記ベクトルの各要素値を所定の方式で暗号化し、他の装置に送信する処理と、
前記他の装置から暗号化された前記ベクトルの内積値を受信し、前記ベクトルの内積値を復号化する処理と、
を含む情報処理方法。
【００７８】
（付記２）
前記他の装置が、前記第２のユーザ以外の第三者の装置であり、
前記他の装置が、前記第１のユーザのコンピュータ及び前記第２のユーザのコンピュータから、暗号化された前記ベクトルの各要素値を受信し、暗号化されたままで前記ベクトルの内積値を算出し、
前記他の装置が、前記第１のユーザのコンピュータ及び前記第２のユーザのコンピュータへ、暗号化された前記ベクトルの内積値を送信する
付記１記載の情報処理方法。
【００７９】
（付記３）
前記他の装置が、前記第２のユーザのコンピュータであり、
前記第２のユーザのコンピュータから、暗号化された前記ベクトルの各要素値を受信する処理と、
前記生成処理において生成された前記ベクトルの要素値と、暗号化された前記ベクトルの各要素値から、暗号化された前記ベクトルの内積値を算出する処理と、
暗号化された前記ベクトル値の内積値を、前記他の装置に送信する処理と、
をさらに含む付記１記載の情報処理方法。
【００８０】
（付記４）
前記所定の方式が、準同型暗号方式である
付記１乃至３のいずれか１つ記載の情報処理方法。
【００８１】
（付記５）
第１のユーザのコンピュータに、
第２のユーザと共通して使用される識別子及び属性値を各々有する複数のデータブロックを格納する第１のデータ格納部から、予め定められた個数以下のデータブロックに含まれる各識別子を読み出し、読み出された各前記識別子について、前記第２のユーザと共通して使用されるハッシュ関数を用いて、前記予め定められた個数に制限させたハッシュ値のいずれかを算出し、算出されたハッシュ値に対応付けて前記識別子を第２のデータ格納部に格納する処理と、
前記予め定められた個数のハッシュ値の各々について、前記第２のデータ格納部において当該ハッシュ値に１又は複数の識別子が対応付けられている場合にはいずれか１つの識別子を含むデータブロックに含まれる属性値に応じて０又は１を特定し、当該ハッシュ値に前記識別子が対応付けられていない場合には０を特定することで、前記予め定められた個数の要素値を有するベクトルを生成する生成処理と、
前記ベクトルの各要素値を所定の方式で暗号化し、他の装置に送信する処理と、
前記他の装置から暗号化された前記ベクトルの内積値を受信し、前記ベクトルの内積値を復号化する処理と、
を、実行させるためのプログラム。
【００８２】
（付記６）
他のユーザと共通して使用される識別子及び属性値を各々有する複数のデータブロックを格納する第１のデータ格納部から、予め定められた個数以下のデータブロックに含まれる各識別子を読み出し、読み出された各前記識別子について、前記他のユーザと共通して使用されるハッシュ関数を用いて、前記予め定められた個数に制限させたハッシュ値のいずれかを算出し、算出されたハッシュ値に対応付けて前記識別子を第２のデータ格納部に格納する識別子処理部と、
前記予め定められた個数のハッシュ値の各々について、前記第２のデータ格納部において当該ハッシュ値に１又は複数の識別子が対応付けられている場合にはいずれか１つの識別子を含むデータブロックに含まれる属性値に応じて０又は１を特定し、当該ハッシュ値に前記識別子が対応付けられていない場合には０を特定することで、前記予め定められた個数の要素値を有するベクトルを生成するベクトル生成部と、
前記ベクトルの各要素値を所定の方式で暗号化し、他の装置に送信し、前記他の装置から暗号化された前記ベクトルの内積値を受信し、前記ベクトルの内積値を復号化する処理部と、
を有する情報処理装置。
【符号の説明】
【００８３】
３１  第１データ格納部
３２  設定データ格納部
３３  識別子処理部
３４  第２データ格納部
３５  ベクトル生成部
３６  内積取得処理部
３６１  暗号処理部
３８  秘匿データ交換処理部
３８１  暗号処理部
５１  データ受信部
５２  データ送信部
５３  秘匿計算部
【図１Ａ】
0005772558.tif 000002
【図１Ｂ】
0005772558.tif 000003
【図２】
0005772558.tif 000004
【図３】
0005772558.tif 000005
【図４】
0005772558.tif 000006
【図５】
0005772558.tif 000007
【図６】
0005772558.tif 000008
【図７】
0005772558.tif 000009
【図８】
0005772558.tif 000010
【図９】
0005772558.tif 000011
【図１０】
0005772558.tif 000012
【図１１】
0005772558.tif 000013
【図１２】
0005772558.tif 000014
【図１３】
0005772558.tif 000015
【図１４】
0005772558.tif 000016
【図１５】
0005772558.tif 000017
【図１６】
0005772558.tif 000018
【図１７】
0005772558.tif 000019
【図１８】
0005772558.tif 000020