(57)【要約】      （修正有）【課題】複数の機関が秘密データとして保持しているベクトルの内積の結果を、秘密データの情報を他に一切知られることなく計算する秘匿ベクトル計算システムを提供する。【解決手段】２以上のデータ処理装置１００で構成され、１のデータ処理装置１００は非公開データを記憶する記憶部１３０と、非公開データを複数の分割データに分割し、分割データの並びである分割データ列を作成する分割データ列作成部１１１と、分割データ列と乱数データ列を暗号鍵列で暗号化し、暗号化分割データ列組を作成する暗号化分割データ列組作成部１１２と、他のデータ処理装置により作成される演算適用後暗号化データ列を自己の暗号鍵列で復号したのち統合する結果統合部１１４とを有する。別のデータ処理装置１００は、他のデータ処理装置により作成された暗号化分割データ列組に２つの異なる演算を適用する、演算適用後暗号化データ列作成部１１３を有する。【選択図】図６
2016027391.tif 000002
【特許請求の範囲】
【請求項１】
２以上のデータ処理装置で構成される秘匿ベクトル内積計算システムであって、前記データ処理装置は秘匿ベクトル内積計算処理Aか秘匿ベクトル内積計算処理Bを担当し、
前記秘匿ベクトル内積計算処理Aを担当するデータ処理装置は、
非公開データを記憶する非公開データ記憶手段と、
前記非公開データの暗号化に使用する複数の暗号鍵の並びである暗号鍵列を記憶する暗号鍵列記憶手段と、
前記非公開データを複数の分割データに分割し、分割データの並びである分割データ列を作成する分割データ列作成手段と、
前記分割データ列の各列位置にある前記分割データを前記暗号鍵列の同じ列位置にある前記暗号鍵で暗号化し、暗号化分割データを作成し、前記列位置の要素とすることで暗号化分割データ列を作成し、前記分割データ列とは異なる第２データ列を作成し、前記第２データ列の各列位置にあるデータを前記暗号鍵列の前記列位置にある前記暗号鍵で暗号化し、暗号化データを作成し、作成した前記暗号化データを前記列位置の要素とすることで暗号化データ列を作成し、前記暗号化分割データ列と前記暗号化データ列を組として暗号化分割データ列組を作成する暗号化分割データ列組作成手段と、
他のデータ処理装置により作成される演算適用後暗号化データを並べた演算適用後暗号化データ列を取得する演算適用後暗号化データ列取得手段と、
前記演算適用後暗号化データ列の各列位置にある演算適用後暗号化データを前記暗号鍵列の前記列位置にある暗号鍵、または、それに対応する復号鍵で復号し、前記列位置の要素とすることで演算適用後データ列を作成し、前記演算適用後データ列に属する演算適用後データを統合する結果統合手段とを有し、
前記秘匿ベクトル内積計算処理Bを担当するデータ処理装置は、
他のデータ処理装置により作成された暗号化分割データ列組に属する暗号化分割データ列の全列位置の要素に適用する演算である第１演算と、
前記暗号化分割データ列組に属する暗号化データ列の各列位置の要素に適用する演算を列とした第２演算列を記憶する適用演算記憶手段と、
他のデータ処理装置により作成された暗号化分割データ列組を取得する暗号化分割データ列組取得手段と、
前記暗号化分割データ列組に属する前記暗号化分割データ列の各列位置の前記暗号化分割データに前記第１演算を適用し、第１演算結果を作成し、前記暗号化分割データ列組に属する暗号化データ列の前記列位置にある暗号化データに第２演算列の前記列位置にある演算を適用し、第２演算結果を作成し、前記第１演算結果と前記第２演算結果を統合し、前記列位置の演算適用後暗号化データを作成し、演算適用後暗号化データを並べ演算適用後暗号化データ列を作成する演算適用後暗号化データ列作成手段とを有し、
前記暗号化分割データ列作成手段では、
前記分割データ列のある列位置の分割データが０または空である場合に、前記暗号化分割データ列の前記列位置の要素を０以外の他の値とし、
前記結果統合手段では、
前記分割データ列のある列位置の分割データが０または空である場合に、取得した前記演算適用後暗号化データ列の前記列位置の前記演算適用後暗号化データを統合に使用しない、
ことを特徴とする秘匿ベクトル内積計算システム。
【請求項２】
前記演算適用後暗号化データ列作成手段は、
前記第１演算か前記第２演算列のうちの少なくとも１つは他のデータ処理装置に対し非公開とする、
ことを特徴とする請求項１に記載の秘匿ベクトル内積計算システム。
【請求項３】
前記演算適用後暗号化データ列作成手段は、
前記第１演算と前記第２演算列の全てを他のデータ処理装置に対し非公開とする、
ことを特徴とする請求項１に記載の秘匿ベクトル内積計算システム。
【請求項４】
前記非公開データは、
複数のデータブロックで構成されるベクトルデータであり、
前記暗号鍵列記憶手段は、
前記非公開データをデータブロックごとに暗号化するために使用する暗号鍵を並べた暗号鍵ベクトルの複数の並びである暗号鍵ベクトル列を記憶し、
前記分割データ列作成手段は、
前記非公開データの各データブロックを複数の分割データに分割し、データブロックごとの分割データを並べ分割データベクトルとし、分割データベクトルの並びである分割データベクトル列を作成し、
前記暗号化分割データ組作成手段は、
前記分割データベクトル列の各位置にある前記分割データベクトルを前記暗号鍵ベクトル列の同じ位置にある前記暗号鍵ベクトルで暗号化し、暗号化分割データベクトルを作成し、前記位置の要素とすることで暗号化分割データベクトル列を作成し、前記分割データベクトル列とは異なるデータベクトル列である第２データベクトル列を作成し、前記第２データベクトル列の各位置にあるデータベクトルを前記暗号鍵ベクトル列の前記位置にある前記暗号鍵ベクトルで暗号化し、暗号化データベクトルを作成し、作成した前記暗号化データベクトルを前記位置の要素とすることで暗号化データベクトル列を作成し、前記暗号化データベクトル列と前記暗号化データベクトル列を組として暗号化分割データベクトル列組を作成し、
前記演算適用後暗号化データ列取得手段は、
他のデータ処理装置により作成される演算適用後暗号化データベクトルを並べた演算適用後暗号化データベクトル列を取得し、
前記結果統合手段は、
前記演算適用後暗号化データベクトル列の各位置にある演算適用後暗号化データベクトルを前記暗号鍵ベクトル列の前記位置になる暗号鍵ベクトル、または、それに対応する復号鍵のベクトルで復号し、前記位置の要素とすることで演算適用後データベクトル列を作成し、前記演算適用後データベクトル列に属する要素を統合し、
前記適用演算記憶手段は、
他のデータ処理装置により作成された暗号化分割データベクトル列組に属する暗号化分割データベクトル列の全ベクトルの各ベクトル位置に適用する演算を並べた第１演算ベクトルと、
前記暗号化分割データベクトル列組に属する暗号化データベクトル列に属する各ベクトルの各要素に適用する演算を並べベクトルとし、かつ、ベクトルを列状にならべた第２演算ベクトル列を記憶し、
前記暗号化分割データ列組取得手段は、
他のデータ処理装置により作成された暗号化分割データベクトル列組を取得し、
前記演算適用後暗号化データ列作成手段は、
前記暗号化分割データベクトル列組に属する前記暗号化分割データベクトル列の全位置の前記暗号化分割データベクトルの各位置の要素に前記第１演算ベクトルの前記位置の演算を適用し、第１演算結果ベクトルを作成し、前記暗号化分割データベクトル列組に属する暗号化データベクトル列の各列位置にある暗号化データベクトルの各ベクトル位置にある要素に第２演算ベクトル列の前記列位置にある演算ベクトルの前記ベクトル位置にある演算を適用し、第２演算結果ベクトルを作成し、前記第１演算結果ベクトルと前記第２演算結果ベクトルを統合し演算適用後暗号化データベクトルを作成し、前記演算適用後暗号化データベクトルを列に並べ演算適用後暗号化データベクトル列を作成し、
前記暗号化分割データ列作成手段では、
前記分割データベクトル列のある列位置にある分割データベクトルのあるベクトル位置にある要素が０または空である場合に、０を暗号化するのではなく他の値を前記暗号化分割データベクトル列の前記列位置のベクトルの前記ベクトル位置の要素とし、
前記結果統合手段では、
前記分割データベクトル列のある列位置のベクトルのあるベクトル位置の要素が０または空である場合に、取得した前記演算適用後暗号化データベクトル列の前記列位置のベクトルの前記ベクトル位置の要素を統合に使用せず、
前記演算適用後暗号化データ列作成手段では、
前記第１演算ベクトルか前記第２演算ベクトル列のうちの少なくとも１つは他のデータ処理装置に対し非公開とする、
ことを特徴とする請求項１及至３のいずれか１項に記載の秘匿ベクトル内積計算システム。
【請求項５】
他のデータ処理装置と連携してデータを処理するデータ処理装置であって、
前記データ処理装置は秘匿ベクトル内積計算処理Aか秘匿ベクトル内積計算処理Bを担当し、
前記秘匿ベクトル内積計算処理Aを担当するデータ処理装置は、
非公開データを記憶する非公開データ記憶手段と、
前記非公開データの暗号化に使用する複数の暗号鍵の並びである暗号鍵列を記憶する暗号鍵列記憶手段と、
前記非公開データを複数の分割データに分割し、分割データの並びである分割データ列を作成する分割データ列作成手段と、
前記分割データ列の各列位置にある前記分割データを前記暗号鍵列の同じ列位置にある前記暗号鍵で暗号化し、暗号化分割データを作成し、前記列位置の要素とすることで暗号化分割データ列を作成し、前記分割データ列とは異なる第２データ列を作成し、前記第２データ列の各列位置にあるデータを前記暗号鍵列の前記列位置にある前記暗号鍵で暗号化し、暗号化データを作成し、作成した前記暗号化データを前記列位置の要素とすることで暗号化データ列を作成し、前記暗号化データ列と前記暗号化データ列を組として暗号化分割データ列組を作成する暗号化分割データ列組作成手段と、
他のデータ処理装置により作成される演算適用後暗号化データを並べた演算適用後暗号化データ列を取得する演算適用後暗号化データ列取得手段と、
前記演算適用後暗号化データ列の各列位置にある演算適用後暗号化データを前記暗号鍵列の前記列位置にある暗号鍵、または、それに対応する復号鍵で復号し、前記列位置の要素とすることで演算適用後データ列を作成し、前記演算適用後データ列に属する演算適用後データを統合する結果統合手段とを有し、
前記秘匿ベクトル内積計算処理Bを担当するデータ処理装置は、
他のデータ処理装置により作成された暗号化分割データ列組に属する暗号化分割データ列の全列位置の要素に適用する演算である第１演算と、
前記暗号化分割データ列組に属する暗号化データ列の各列位置の要素に適用する演算を列とした第２演算列を記憶する適用演算記憶手段と、
他のデータ処理装置により作成された暗号化分割データ列組を取得する暗号化分割データ列組取得手段と、
前記暗号化分割データ列組に属する前記暗号化分割データ列の各列位置の前記暗号化分割データに前記第１演算を適用し、第１演算結果を作成し、前記暗号化分割データ列組に属する暗号化データ列の前記列位置にある暗号化データに第２演算列の前記列位置にある演算を適用し、第２演算結果を作成し、前記第１演算結果と前記第２演算結果を統合し、前記列位置の演算適用後暗号化データを作成し、演算適用後暗号化データを並べ演算適用後暗号化データ列を作成する演算適用後暗号化データ列作成手段とを有し、
前記暗号化分割データ列作成手段では、
前記分割データ列のある列位置の分割データが０または空である場合に、前記暗号化分割データ列の前記列位置の要素を０以外の他の値とし、
前記結果統合手段では、
前記分割データ列のある列位置の分割データが０または空である場合に、取得した前記演算適用後暗号化データ列の前記列位置の前記演算適用後暗号化データを統合に使用しない、
ことを特徴とするデータ処理装置。
【請求項６】
他のデータ処理装置と連携してデータを処理するデータ処理装置により実行される秘匿ベクトル内積計算方法であって、
非公開データを記憶する非公開データ記憶ステップと、
前記非公開データの暗号化に使用する複数の暗号鍵の並びである暗号鍵列を記憶する暗号鍵列記憶ステップと、
前記非公開データを複数の分割データに分割し、分割データの並びである分割データ列を作成する分割データ列作成ステップと、
前記分割データ列の各列位置にある前記分割データを前記暗号鍵列の同じ列位置にある前記暗号鍵で暗号化し、暗号化分割データを作成し、前記列位置の要素とすることで暗号化分割データ列を作成し、前記分割データ列とは異なる第２データ列を作成し、前記第２データ列の各列位置にあるデータを前記暗号鍵列の前記列位置にある前記暗号鍵で暗号化し、暗号化データを作成し、作成した前記暗号化データを前記列位置の要素とすることで暗号化データ列を作成し、前記暗号化データ列と前記暗号化データ列を組として暗号化分割データ列組を作成する暗号化分割データ列組作成ステップと、
他のデータ処理装置により作成される演算適用後暗号化データを並べた演算適用後暗号化データ列を取得する演算適用後暗号化データ列取得ステップと、
前記演算適用後暗号化データ列の各列位置にある演算適用後暗号化データを前記暗号鍵列の前記列位置にある暗号鍵、または、それに対応する復号鍵で復号し、前記列位置の要素とすることで演算適用後データ列を作成し、前記演算適用後データ列に属する演算適用後データを統合する結果統合ステップとを有し、
さらに、
他のデータ処理装置により作成された暗号化分割データ列組に属する暗号化分割データ列の全列位置の要素に適用する演算である第１演算と、
前記暗号化分割データ列組に属する暗号化データ列の各列位置の要素に適用する演算を列とした第２演算列を記憶する適用演算記憶ステップと、
他のデータ処理装置により作成された暗号化分割データ列組を取得する暗号化分割データ列組取得ステップと、
前記暗号化分割データ列組に属する前記暗号化分割データ列の各列位置の前記暗号化分割データに前記第１演算を適用し、第１演算結果を作成し、前記暗号化分割データ列組に属する暗号化データ列の前記列位置にある暗号化データに第２演算列の前記列位置にある演算を適用し、第２演算結果を作成し、前記第１演算結果と前記第２演算結果を統合し、前記列位置の演算適用後暗号化データを作成し、演算適用後暗号化データを並べ演算適用後暗号化データ列を作成する演算適用後暗号化データ列作成ステップとを有し、
前記暗号化分割データ列作成ステップでは、
前記分割データ列のある列位置の分割データが０または空である場合に、前記暗号化分割データ列の前記列位置の要素を０以外の他の値とし、
前記結果統合ステップでは、
前記分割データ列のある列位置の分割データが０または空である場合に、取得した前記演算適用後暗号化データ列の前記列位置の前記演算適用後暗号化データを統合に使用しない、
ことを特徴とする秘匿ベクトル内積計算方法。
【請求項７】
他のコンピュータと連携してデータを処理するコンピュータにより実行される秘匿ベクトル内積計算プログラムであって、
非公開データを記憶する非公開データ記憶ステップと、
前記非公開データの暗号化に使用する複数の暗号鍵の並びである暗号鍵列を記憶する暗号鍵列記憶ステップと、
前記非公開データを複数の分割データに分割し、分割データの並びである分割データ列を作成する分割データ列作成ステップと、
前記分割データ列の各列位置にある前記分割データを前記暗号鍵列の同じ列位置にある前記暗号鍵で暗号化し、暗号化分割データを作成し、前記列位置の要素とすることで暗号化分割データ列を作成し、前記分割データ列とは異なる第２データ列を作成し、前記第２データ列の各列位置にあるデータを前記暗号鍵列の前記列位置にある前記暗号鍵で暗号化し、暗号化データを作成し、作成した前記暗号化データを前記列位置の要素とすることで暗号化データ列を作成し、前記暗号化データ列と前記暗号化データ列を組として暗号化分割データ列組を作成する暗号化分割データ列組作成ステップと、
他のデータ処理装置により作成される演算適用後暗号化データを並べた演算適用後暗号化データ列を取得する演算適用後暗号化データ列取得ステップと、
前記演算適用後暗号化データ列の各列位置にある演算適用後暗号化データを前記暗号鍵列の前記列位置にある暗号鍵、または、それに対応する復号鍵で復号し、前記列位置の要素とすることで演算適用後データ列を作成し、前記演算適用後データ列に属する演算適用後データを統合する結果統合ステップとを有し、
さらに、
他のコンピュータにより作成された暗号化分割データ列組に属する暗号化分割データ列の全列位置の要素に適用する演算である第１演算と、
前記暗号化分割データ列組に属する暗号化データ列の各列位置の要素に適用する演算を列とした第２演算列を記憶する適用演算記憶ステップと、
他のコンピュータにより作成された暗号化分割データ列組を取得する暗号化分割データ列組取得ステップと、
前記暗号化分割データ列組に属する前記暗号化分割データ列の各列位置の前記暗号化分割データに前記第１演算を適用し、第１演算結果を作成し、前記暗号化分割データ列組に属する暗号化データ列の前記列位置にある暗号化データに第２演算列の前記列位置にある演算を適用し、第２演算結果を作成し、前記第１演算結果と前記第２演算結果を統合し、前記列位置の演算適用後暗号化データを作成し、演算適用後暗号化データを並べ演算適用後暗号化データ列を作成する演算適用後暗号化データ列作成ステップとを有し、
前記暗号化分割データ列作成ステップでは、
前記分割データ列のある列位置の分割データが０または空である場合に、前記暗号化分割データ列の前記列位置の要素を０以外の他の値とし、
前記結果統合ステップでは、
前記分割データ列のある列位置の分割データが０または空である場合に、取得した前記演算適用後暗号化データ列の前記列位置の前記演算適用後暗号化データを統合に使用しない、
ことを特徴とする秘匿ベクトル内積計算プログラム。
【請求項８】
請求項７に記載の秘匿ベクトル内積計算プログラムが記録されていることを特徴とするコンピュータ読み取り可能な記録媒体。
【請求項９】
前記暗号化分割データ列組作成手段は、
前記非公開データの内容に依存することなく、前記暗号化分割データ列組を定値とすることが可能であり、
前記演算適用後暗号化データ列作成手段は、
相手のデータ処理装置の非公開データの内容に依存することなく自己の保有する前記非公開データの内容のみによって前記演算適用後暗号化データ列を作成することが可能である、
ことを特徴とする請求項１及至５のいずれか１項に記載の秘匿ベクトル内積計算システム。
【請求項１０】
前記結果統合手段は、
ベクトル内積結果以外の自己の保有する前記非公開データの内容に依存して変化しない内容の統合結果を算出することが可能である、
ことを特徴とする請求項１及至５、請求項９のいずれか１項に記載の秘匿ベクトル内積計算システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の機関が秘密データとして保持するベクトルの内積計算の結果を秘密データの情報を漏らすことなく計算するための秘匿ベクトル内積計算システム、データ処理装置、秘匿ベクトル内積計算方法、秘匿ベクトル内積プログラム、および、記録媒体に関する。
【背景技術】
【０００２】
非特許文献１には、確率公開鍵暗号方式を使った秘匿ベクトル内積計算方法が開示されている（以下、「従来方法」という）。ここで、公開鍵暗号方式とは暗号化するときに使う鍵と復号するときに使う鍵が異なるため、暗号化に利用する鍵を公開することで、誰でも暗号文を作成できるが、復号は復号するための鍵（秘密鍵）を知っている人以外には困難である非対称な暗号方式である。また、確率暗号とは、同一の平文を同一の鍵で暗号化すると必ず同一の暗号文を生成するRSA暗号方式のような確定暗号とは異なり、暗号化に毎回異なる乱数を利用可能なため、同じ平文であっても鍵の種類と同程度の数の暗号文に変換可能な暗号方式である。上記の性質を満たす公開鍵暗号方式の１つにElGamal暗号方式がある。確率公開鍵暗号方式を使った秘匿ベクトル内積方法では、暗号文に対して、演算を適用することで平文に演算を施せるという準同型性を利用し、かつ、確率的に暗号文を変化させることで、暗号文に対してどのような演算が適用されたのかを特定することを困難にしながら、平文に対して演算を施して、秘匿ベクトルの内積を計算する。
【０００３】
以下、機関P１とP２は図２、図３に示すような各家庭の利用電力量を把握している配電事業者と送電網コストを見積もることを要求された送電事業社とする。配電事業者は各世帯の利用電力量を、送電事業社は各家庭までの送電コストを距離に応じて変化させるパラメータを秘密データとして保持すると仮定する。
【０００４】
最初に、機関P１とP２は図４、図５に示すような秘密ベクトルXとYを用意する。ここで、機関P１は各世帯の利用電力量、機関P２は各世帯への単位電力量あたりの送電コストをベクトルの要素としてもつこととする。以降では、世帯を１からnで番号付け、ベクトルの大きさをnとし、各ベクトルの要素をXi、Yiと表す（ここでiは１以上n以下の整数とする）。
【０００５】
次に、機関P１は自分の公開鍵K＝g S (mod P) （ここgは原子元、Pは素数、Sは秘密鍵とする。以降暗号の計算では（mod P）を省略する）を公開した上で、各世帯の利用電力量Xiの暗号値（2X]Kri, gri）(ここで、riは乱数)からなる暗号文ベクトルを作成し、機関P２に送信する。
【０００６】
機関P１より暗号文ベクトルを受け取った機関P２は暗号文の１項目、２項目ともにパラメータYiを指数乗したのち、各暗号文の１項目の要素をすべて乗算し、２項目の要素同士をすべて乗算した１つの暗号文（2X1Y1+X2Y2+…+XnYn Kr1Y1+r2Y2+…+rnYn, gr1Y1+r2Y2+…+rnYn）を作成し、最後に乱数Rで撹乱した暗号文（2X1Y1+X2Y2+…+XnYn Kr1Y1+r2Y2+…+rnYn+R, gr1Y1+r2Y2+…+rnYn+R）に変換し、変換後の暗号文を機関P２へ送信する。
【０００７】
暗号文を受け取った機関P１は暗号文２項組を復号することにより値E=Σ1≦i≦n XiYi+Rを得る。値Eと値Rを機関P１、P２で交換することにより、互いに内積結果を計算することができる。
【先行技術文献】
【非特許文献】
【０００８】
【非特許文献１】Wei Jiang and Chris Clifton, “A secure distributed framework for achieving k-anonymity,” The VLDB Journal, vol. 15, pp. 316-333, 2006.
【発明の概要】
【発明が解決しようとする課題】
【０００９】
非特許文献１の従来方法では暗号文を得た機関P２が機関P１の秘密情報を得ることができるかどうかはある整数i（1≦i≦n）において、(KriYi, griYi) という組合せと（Z, griYi）（ここでZは乱数）という組合せの違いを区別できるかどうかという離散対数問題に抽象化することができる。
【００１０】
現在のところ、離散対数問題は解くことが難しいと予測されている問題であるが、将来も解くことができないことを意味する不可能性は証明されていない。また、ElGamal暗号方式では、離散対数問題を解くこと以外の方法で情報を引き出せる可能性がないとの証明もなく、離散対数問題よりも簡単に暗号解析できる可能性が残っている。
【００１１】
さらに、（2XiKri）Yi, (gri )Yiなどの指数乗の計算は計算コストが非常に大きい。
よって、上記の確率公開暗号方式による秘匿ベクトル内積計算は、現在の計算環境では安全と想定の上で利用されているが、将来的には安全面、効率面双方で問題となる可能性がある。
【００１２】
本発明はこれらの問題を鑑みてなされたものであり、複数の機関が秘密データとして保持しているベクトルの内積の結果を、無関係な情報を他に一切知られることなく、計算することができる秘匿ベクトル内積計算システム、データ処理装置、秘匿ベクトル内積計算方法、秘匿ベクトル内積計算プログラム、および、該秘匿ベクトル内積計算プログラムを記録した記録媒体を提供することを目的とする。
【課題を解決するための手段】
【００１３】
上記目的を達成するため、本発明の第１の観点にかかる秘匿ベクトル内積計算システムは、２以上のデータ処理装置で構成される秘匿ベクトル内積計算システムであって、
前記データ処理装置は秘匿ベクトル内積計算処理Aか秘匿ベクトル内積計算処理Bを担当し、
前記秘匿ベクトル内積計算処理Aを担当するデータ処理装置は、
非公開データを記憶する非公開データ記憶手段と、
前記非公開データの暗号化に使用する複数の暗号鍵の並びである暗号鍵列を記憶する暗号鍵列記憶手段と、
前記非公開データを複数の分割データに分割し、分割データの並びである分割データ列を作成する分割データ列作成手段と、
前記分割データ列の各列位置にある前記分割データを前記暗号鍵列の同じ列位置にある前記暗号鍵で暗号化し、暗号化分割データを作成し、前記列位置の要素とすることで暗号化分割データ列を作成し、前記分割データ列とは異なる第２データ列を作成し、前記第２データ列の各列位置にあるデータを前記暗号鍵列の前記列位置にある前記暗号鍵で暗号化し、暗号化データを作成し、作成した前記暗号化データを前記列位置の要素とすることで暗号化データ列を作成し、前記暗号化データ列と前記暗号化データ列を組として暗号化分割データ列組を作成する暗号化分割データ列組作成手段と、
他のデータ処理装置により作成される演算適用後暗号化データを並べた演算適用後暗号化データ列を取得する演算適用後暗号化データ列取得手段と、
前記演算適用後暗号化データ列の各列位置にある演算適用後暗号化データを前記暗号鍵列の前記列位置にある暗号鍵、または、それに対応する復号鍵で復号し、前記列位置の要素とすることで演算適用後データ列を作成し、前記演算適用後データ列に属する演算適用後データを統合する結果統合手段とを有し、
前記秘匿ベクトル内積計算処理Bを担当するデータ処理装置は、
他のデータ処理装置により作成された暗号化分割データ列組に属する暗号化分割データ列の全列位置の要素に適用する演算である第１演算と、
前記暗号化分割データ列組に属する暗号化データ列の各列位置の要素に適用する演算を列とした第２演算列を記憶する適用演算記憶手段と、
他のデータ処理装置により作成された暗号化分割データ列組を取得する暗号化分割データ列組取得手段と、
前記暗号化分割データ列組に属する前記暗号化分割データ列の各列位置の前記暗号化分割データに前記第１演算を適用し、第１演算結果を作成し、前記暗号化分割データ列組に属する暗号化データ列の前記列位置にある暗号化データに第２演算列の前記列位置にある演算を適用し、第２演算結果を作成し、前記第１演算結果と前記第２演算結果を統合し、前記列位置の演算適用後暗号化データを作成し、演算適用後暗号化データを並べ演算適用後暗号化データ列を作成する演算適用後暗号化データ列作成手段とを有し、
前記暗号化分割データ列作成手段では、
前記分割データ列のある列位置の分割データが０または空である場合に、前記暗号化分割データ列の前記列位置の要素を０以外の他の値とし、
前記結果統合手段では、
前記分割データ列のある列位置の分割データが０または空である場合に、取得した前記演算適用後暗号化データ列の前記列位置の前記演算適用後暗号化データを統合に使用しない、
ことを特徴とする。
【００１４】
前記演算適用後暗号化データ列作成手段は、
前記第１演算か前記第２演算列のうちの少なくとも１つは他のデータ処理装置に対し非公開としてもよい。
【００１５】
前記演算適用後暗号化データ列作成手段は、
前記第１演算と前記第２演算列の全てを他のデータ処理装置に対し非公開としてもよい。
【００１６】
前記非公開データは、
複数のデータブロックで構成されるベクトルデータであり、
前記暗号鍵列記憶手段は、
前記非公開データをデータブロックごとに暗号化するために使用する暗号鍵を並べた暗号鍵ベクトルの複数の並びである暗号鍵ベクトル列を記憶し、
前記分割データ列作成手段は、
前記非公開データの各データブロックを複数の分割データに分割し、データブロックごとの分割データを並べ分割データベクトルとし、分割データベクトルの並びである分割データベクトル列を作成し、
前記暗号化分割データ組作成手段は、
前記分割データベクトル列の各位置にある前記分割データベクトルを前記暗号鍵ベクトル列の同じ位置にある前記暗号鍵ベクトルで暗号化し、暗号化分割データベクトルを作成し、前記位置の要素とすることで暗号化分割データベクトル列を作成し、前記分割データベクトル列とは異なるデータベクトル列である第２データベクトル列を作成し、前記第２データベクトル列の各位置にあるデータベクトルを前記暗号鍵ベクトル列の前記位置にある前記暗号鍵ベクトルで暗号化し、暗号化データベクトルを作成し、作成した前記暗号化データベクトルを前記位置の要素とすることで暗号化データベクトル列を作成し、前記暗号化データベクトル列と前記暗号化データベクトル列を組として暗号化分割データベクトル列組を作成し、
前記演算適用後暗号化データ列取得手段は、
他のデータ処理装置により作成される演算適用後暗号化データベクトルを並べた演算適用後暗号化データベクトル列を取得し、
前記結果統合手段は、
前記演算適用後暗号化データベクトル列の各位置にある演算適用後暗号化データベクトルを前記暗号鍵ベクトル列の前記位置になる暗号鍵ベクトル、または、それに対応する復号鍵のベクトルで復号し、前記位置の要素とすることで演算適用後データベクトル列を作成し、前記演算適用後データベクトル列に属する要素を統合し、
前記適用演算記憶手段は、
他のデータ処理装置により作成された暗号化分割データベクトル列組に属する暗号化分割データベクトル列の全ベクトルの各ベクトル位置に適用する演算を並べた第１演算ベクトルと、
前記暗号化分割データベクトル列組に属する暗号化データベクトル列に属する各ベクトルの各要素に適用する演算を並べベクトルとし、かつ、ベクトルを列状にならべた第２演算ベクトル列を記憶し、
前記暗号化分割データ列組取得手段は、
他のデータ処理装置により作成された暗号化分割データベクトル列組を取得し、
前記演算適用後暗号化データ列作成手段は、
前記暗号化分割データベクトル列組に属する前記暗号化分割データベクトル列の全位置の前記暗号化分割データベクトルの各位置の要素に前記第１演算ベクトルの前記位置の演算を適用し、第１演算結果ベクトルを作成し、前記暗号化分割データベクトル列組に属する暗号化データベクトル列の各列位置にある暗号化データベクトルの各ベクトル位置にある要素に第２演算ベクトル列の前記列位置にある演算ベクトルの前記ベクトル位置にある演算を適用し、第２演算結果ベクトルを作成し、前記第１演算結果ベクトルと前記第２演算結果ベクトルを統合し演算適用後暗号化データベクトルを作成し、前記演算適用後暗号化データベクトルを列に並べ演算適用後暗号化データベクトル列を作成し、
前記暗号化分割データ列作成手段では、
前記分割データベクトル列のある列位置にある分割データベクトルのあるベクトル位置にある要素が０または空である場合に、０を暗号化するのではなく他の値を前記暗号化分割データベクトル列の前記列位置のベクトルの前記ベクトル位置の要素とし、
前記結果統合手段では、
前記分割データベクトル列のある列位置のベクトルのあるベクトル位置の要素が０または空である場合に、取得した前記演算適用後暗号化データベクトル列の前記列位置のベクトルの前記ベクトル位置の要素を統合に使用せず、
前記演算適用後暗号化データ列作成手段では、
前記第１演算ベクトルか前記第２演算ベクトル列のうちの少なくとも１つは他のデータ処理装置に対し非公開としてもよい。
【００１７】
上記目的を達成するため、本発明の第２の観点にかかるデータ処理装置は、
他のデータ処理装置と連携してデータを処理するデータ処理装置であって、
前記データ処理装置は秘匿ベクトル内積計算処理Aか秘匿ベクトル内積計算処理Bを担当し、
前記秘匿ベクトル内積計算処理Aを担当するデータ処理装置は、
非公開データを記憶する非公開データ記憶手段と、
前記非公開データの暗号化に使用する複数の暗号鍵の並びである暗号鍵列を記憶する暗号鍵列記憶手段と、
前記非公開データを複数の分割データに分割し、分割データの並びである分割データ列を作成する分割データ列作成手段と、
前記分割データ列の各列位置にある前記分割データを前記暗号鍵列の同じ列位置にある前記暗号鍵で暗号化し、暗号化分割データを作成し、前記列位置の要素とすることで暗号化分割データ列を作成し、前記分割データ列とは異なる第２データ列を作成し、前記第２データ列の各列位置にあるデータを前記暗号鍵列の前記列位置にある前記暗号鍵で暗号化し、暗号化データを作成し、作成した前記暗号化データを前記列位置の要素とすることで暗号化データ列を作成し、前記暗号化データ列と前記暗号化データ列を組として暗号化分割データ列組を作成する暗号化分割データ列組作成手段と、
他のデータ処理装置により作成される演算適用後暗号化データを並べた演算適用後暗号化データ列を取得する演算適用後暗号化データ列取得手段と、
前記演算適用後暗号化データ列の各列位置にある演算適用後暗号化データを前記暗号鍵列の前記列位置にある暗号鍵、または、それに対応する復号鍵で復号し、前記列位置の要素とすることで演算適用後データ列を作成し、前記演算適用後データ列に属する演算適用後データを統合する結果統合手段とを有し、
前記秘匿ベクトル内積計算処理Bを担当するデータ処理装置は、
他のデータ処理装置により作成された暗号化分割データ列組に属する暗号化分割データ列の全列位置の要素に適用する演算である第１演算と、
前記暗号化分割データ列組に属する暗号化データ列の各列位置の要素に適用する演算を列とした第２演算列を記憶する適用演算記憶手段と、
他のデータ処理装置により作成された暗号化分割データ列組を取得する暗号化分割データ列組取得手段と、
前記暗号化分割データ列組に属する前記暗号化分割データ列の各列位置の前記暗号化分割データに前記第１演算を適用し、第１演算結果を作成し、前記暗号化分割データ列組に属する暗号化データ列の前記列位置にある暗号化データに第２演算列の前記列位置にある演算を適用し、第２演算結果を作成し、前記第１演算結果と前記第２演算結果を統合し、前記列位置の演算適用後暗号化データを作成し、演算適用後暗号化データを並べ演算適用後暗号化データ列を作成する演算適用後暗号化データ列作成手段とを有し、
前記暗号化分割データ列作成手段では、
前記分割データ列のある列位置の分割データが０または空である場合に、前記暗号化分割データ列の前記列位置の要素を０以外の他の値とし、
前記結果統合手段では、
前記分割データ列のある列位置の分割データが０または空である場合に、取得した前記演算適用後暗号化データ列の前記列位置の前記演算適用後暗号化データを統合に使用しない、
ことを特徴とする。
【００１８】
上記目的を達成するため、本発明の第３の観点にかかる秘匿ベクトル内積計算方法は、
他のデータ処理装置と連携してデータを処理するデータ処理装置により実行される秘匿ベクトル内積計算方法であって、
非公開データを記憶する非公開データ記憶ステップと、
前記非公開データの暗号化に使用する複数の暗号鍵の並びである暗号鍵列を記憶する暗号鍵列記憶ステップと、
前記非公開データを複数の分割データに分割し、分割データの並びである分割データ列を作成する分割データ列作成ステップと、
前記分割データ列の各列位置にある前記分割データを前記暗号鍵列の同じ列位置にある前記暗号鍵で暗号化し、暗号化分割データを作成し、前記列位置の要素とすることで暗号化分割データ列を作成し、前記分割データ列とは異なる第２データ列を作成し、前記第２データ列の各列位置にあるデータを前記暗号鍵列の前記列位置にある前記暗号鍵で暗号化し、暗号化データを作成し、作成した前記暗号化データを前記列位置の要素とすることで暗号化データ列を作成し、前記暗号化データ列と前記暗号化データ列を組として暗号化分割データ列組を作成する暗号化分割データ列組作成ステップと、
他のデータ処理装置により作成される演算適用後暗号化データを並べた演算適用後暗号化データ列を取得する演算適用後暗号化データ列取得ステップと、
前記演算適用後暗号化データ列の各列位置にある演算適用後暗号化データを前記暗号鍵列の前記列位置にある暗号鍵、または、それに対応する復号鍵で復号し、前記列位置の要素とすることで演算適用後データ列を作成し、前記演算適用後データ列に属する演算適用後データを統合する結果統合ステップとを有し、
さらに、
他のデータ処理装置により作成された暗号化分割データ列組に属する暗号化分割データ列の全列位置の要素に適用する演算である第１演算と、
前記暗号化分割データ列組に属する暗号化データ列の各列位置の要素に適用する演算を列とした第２演算列を記憶する適用演算記憶ステップと、
他のデータ処理装置により作成された暗号化分割データ列組を取得する暗号化分割データ列組取得ステップと、
前記暗号化分割データ列組に属する前記暗号化分割データ列の各列位置の前記暗号化分割データに前記第１演算を適用し、第１演算結果を作成し、前記暗号化分割データ列組に属する暗号化データ列の前記列位置にある暗号化データに第２演算列の前記列位置にある演算を適用し、第２演算結果を作成し、前記第１演算結果と前記第２演算結果を統合し、前記列位置の演算適用後暗号化データを作成し、演算適用後暗号化データを並べ演算適用後暗号化データ列を作成する演算適用後暗号化データ列作成ステップとを有し、
前記暗号化分割データ列作成ステップでは、
前記分割データ列のある列位置の分割データが０または空である場合に、前記暗号化分割データ列の前記列位置の要素を０以外の他の値とし、
前記結果統合ステップでは、
前記分割データ列のある列位置の分割データが０または空である場合に、取得した前記演算適用後暗号化データ列の前記列位置の前記演算適用後暗号化データを統合に使用しない、
ことを特徴とする。
【００１９】
上記目的を達成するため、本発明の第４の観点にかかる秘匿ベクトル内積計算プログラムは、
他のコンピュータと連携してデータを処理するコンピュータにより実行される秘匿ベクトル内積計算プログラムであって、
非公開データを記憶する非公開データ記憶ステップと、
前記非公開データの暗号化に使用する複数の暗号鍵の並びである暗号鍵列を記憶する暗号鍵列記憶ステップと、
前記非公開データを複数の分割データに分割し、分割データの並びである分割データ列を作成する分割データ列作成ステップと、
前記分割データ列の各列位置にある前記分割データを前記暗号鍵列の同じ列位置にある前記暗号鍵で暗号化し、暗号化分割データを作成し、前記列位置の要素とすることで暗号化分割データ列を作成し、前記分割データ列とは異なる第２データ列を作成し、前記第２データ列の各列位置にあるデータを前記暗号鍵列の前記列位置にある前記暗号鍵で暗号化し、暗号化データを作成し、作成した前記暗号化データを前記列位置の要素とすることで暗号化データ列を作成し、前記暗号化データ列と前記暗号化データ列を組として暗号化分割データ列組を作成する暗号化分割データ列組作成ステップと、
他のデータ処理装置により作成される演算適用後暗号化データを並べた演算適用後暗号化データ列を取得する演算適用後暗号化データ列取得ステップと、
前記演算適用後暗号化データ列の各列位置にある演算適用後暗号化データを前記暗号鍵列の前記列位置にある暗号鍵、または、それに対応する復号鍵で復号し、前記列位置の要素とすることで演算適用後データ列を作成し、前記演算適用後データ列に属する演算適用後データを統合する結果統合ステップとを有し、
さらに、
他のコンピュータにより作成された暗号化分割データ列組に属する暗号化分割データ列の全列位置の要素に適用する演算である第１演算と、
前記暗号化分割データ列組に属する暗号化データ列の各列位置の要素に適用する演算を列とした第２演算列を記憶する適用演算記憶ステップと、
他のコンピュータにより作成された暗号化分割データ列組を取得する暗号化分割データ列組取得ステップと、
前記暗号化分割データ列組に属する前記暗号化分割データ列の各列位置の前記暗号化分割データに前記第１演算を適用し、第１演算結果を作成し、前記暗号化分割データ列組に属する暗号化データ列の前記列位置にある暗号化データに第２演算列の前記列位置にある演算を適用し、第２演算結果を作成し、前記第１演算結果と前記第２演算結果を統合し、前記列位置の演算適用後暗号化データを作成し、演算適用後暗号化データを並べ演算適用後暗号化データ列を作成する演算適用後暗号化データ列作成ステップとを有し、
前記暗号化分割データ列作成ステップでは、
前記分割データ列のある列位置の分割データが０または空である場合に、前記暗号化分割データ列の前記列位置の要素を０以外の他の値とし、
前記結果統合ステップでは、
前記分割データ列のある列位置の分割データが０または空である場合に、取得した前記演算適用後暗号化データ列の前記列位置の前記演算適用後暗号化データを統合に使用しない、
ことを特徴とする。
【００２０】
上記目的を達成するため、本発明の第５の観点にかかる記憶媒体は、
上記秘匿ベクトル内積計算プログラムが記録されていることを特徴とする。
【００２１】
さらに、上記目的を達成するため、本発明の第１の観点にかかる秘匿ベクトル内積計算システムの
前記暗号化分割データ列組作成手段は、
前記非公開データの内容に依存することなく、前記暗号化分割データ列組を定値とすることが可能であり、
前記演算適用後暗号化データ列作成手段は、
相手のデータ処理装置の非公開データの内容に依存することなく自己の保有する前記非公開データの内容のみによって前記演算適用後暗号化データ列を作成することが可能であってもよい。
【００２２】
さらに、前記結果統合手段は、
ベクトル内積結果以外の自己の保有する前記非公開データの内容に依存して変化しない内容の統合結果を算出することが可能であってもよい。
【発明の効果】
【００２３】
本発明によれば、複数の機関が秘密データとして保持しているベクトルの内積の結果を、無関係な情報を他に一切知られることなく、計算することができる。
【図面の簡単な説明】
【００２４】
【図１】本発明の実施の形態１にかかる秘匿ベクトル内積計算システムの構成例を示すブロック図である。
【図２】複数の機関による事前の取り決めに基づいて決定されている対象地域に存在する世帯の順序付けにより、機関P1がもつ世帯ごとの利用電力量を列状に並べた表である。
【図３】複数の機関による事前の取り決めに基づいて決定されている対象地域に存在する世帯の順序付けにより、機関P２がもつ世帯ごとの単位電力量あたりの送電コストを列状に並べた表である。
【図４】図２に示した表を要約し作成された機関P１がもつ秘密ベクトルXである。
【図５】図３に示した表を要約し作成された機関P２がもつ秘密ベクトルYである。
【図６】図１に示す制御部によって実現される機能を示す機能ブロック図である。
【図７】本発明の実施の形態１にかかる「秘匿ベクトル内積計算処理A」と「秘匿ベクトル内積計算処理B」の概要を説明するための処理概要図である。
【図８】本発明の実施の形態１にかかる「秘匿ベクトル内積計算処理A」と「秘匿ベクトル内積計算処理B」を説明するためのフローチャートである。
【図９】図８に示す「秘匿ベクトル内積計算処理A」で実行される「分割データ列作成処理」を説明するためのフローチャートである。
【図１０】図８に示す「秘匿ベクトル内積計算処理A」で実行される「暗号化分割データ列組作成処理」と「秘匿ベクトル内積計算処理B」で実行される「演算適用後暗号化データ列作成処理」を説明するためのフローチャートである。
【図１１】図８に示す「秘匿ベクトル内積計算処理A」で実行される「結果統合処理」と「秘匿ベクトル内積計算処理B」で実行される「結果復号処理」を説明するためのフローチャートである。
【図１２】図８に示す「秘匿ベクトル内積計算処理A」、「秘匿ベクトル内積計算処理B」で実行される「最終結果算出処理」を説明するためのフローチャートである。
【図１３】本発明の実施の形態２にかかる「秘匿ベクトル内積計算処理A」と「秘匿ベクトル内積計算処理B」の概要を説明するための処理概要図である。
【図１４】本発明の実施の形態２にかかる秘匿ベクトル内積計算システムの構成例を示すブロック図である。
【図１５】本発明の実施の形態２にかかる「秘匿ベクトル内積計算処理A」と「秘匿ベクトル内積計算処理B」を説明するためのフローチャートである。
【図１６】本発明の実施の形態３にかかる秘匿ベクトル内積計算システムの構成例を示すブロック図である。
【図１７】本発明の実施の形態３にかかる「秘匿ベクトル内積計算処理A」と「秘匿ベクトル内積計算処理B」を説明するためのフローチャートである。
【図１８】本発明の実施の形態３にかかる「秘匿ベクトル内積計算処理A」と「秘匿ベクトル内積計算処理B」の概要を説明するための処理概要図である。
【図１９】本発明の実施の形態３にかかる「秘匿ベクトル内積計算処理A」と「秘匿ベクトル内積計算処理B」の前提条件を説明するための処理前提条件説明図である。
【発明を実施するための形態】
【００２５】
（実施の形態１）
本実施の形態の秘匿ベクトル内積計算システム１は機関P１もしくは機関P２のもつ秘密データである秘密ベクトルの内積結果を、内積結果以外の機関P１の情報を機関P２に一切知られることなく、互いに知るため秘匿ベクトル内積計算システムである。以下、秘匿ベクトル内積計算システム１について図面を参照しながら説明する。また、図１を参照して秘匿ベクトル内積計算システム１の構成について説明する。
【００２６】
秘匿ベクトル内積計算システム１は図１に示すように、機関P１と機関P２それぞれに設置された２台のデータ処理装置１００と、それらを接続する通信線２００とで構成される。２台のデータ処理装置１００は通信線２００を通じて互いにデータを送受信することで連携して２つの処理を協調しながら実行する。
【００２７】
データ処理装置１００は、例えば、PCサーバやメインフレームなどで構成され、計測データ等の非公開情報を格納している。データ処理装置１００は図１に示すように制御部１１０、通信部１２０、記憶部１３０、操作部１４０、インタフェース部１５０から構成される。
【００２８】
制御部１１０はCPU(Central Processing Unit)などで構成され、データ処理装置１００の各部を制御する。また、制御部１１０は操作部１４０から「秘匿ベクトル内積計算処理A開始通知」を受信すると、後述の「秘匿ベクトル内積計算処理A」を、「秘匿ベクトル内積計算処理B開始通知」を受信すると、後述の「秘匿ベクトル内積計算処理B」を実行する。「秘匿ベクトル内積計算処理A」と「秘匿ベクトル内積計算処理B」は２台のデータ処理装置で別々に実行されるが、２つの処理が協調して実行されることにより秘匿ベクトル内積計算結果が算出される。以降では、「秘匿ベクトル内積計算処理A」は機関P１に設置されたデータ処理装置１００で、「秘匿ベクトル内積計算処理B」は機関P２に設置されたデータ処理装置１００で実行されるとする。
【００２９】
通信部１２０はLANコネクタや送受信処理用のプロセッサなどから構成され、通信線２００を通じて外部の装置（例えばパーソナルコンピュータ）との通信を行う。
【００３０】
記憶部１３０はハードディスクやRAM(Random Access Memory)などから構成され、データ処理装置１００の動作に必要なデータ（例えば「秘密ベクトル」や「暗号鍵ベクトル」）などを記憶する。
【００３１】
ここで「秘密ベクトル」とは「ある世帯の利用電力量」や「世帯までの送電コスト」などの非公開な情報を列状に並べたものをいう。また、「世帯に利用電力量」とは、配電事業社が記録として持っている各世帯の利用電力量という数値データであり、「世帯までの送電コスト」とは、送電事業社が想定する各世帯への単位電力量あたりの送電コストという数値データである。機関P１を配電事業社とし、機関P２を送電事業社としたときに、機関P１とP２は世帯のある集合に対する「世帯の利用電力量」を世帯順に並べたベクトルXと「世帯までの送電コスト」を世帯順に並べたベクトルYをそれぞれもつとする。暗号化や復号は特に定めないかぎり、世帯ごとの数値データ、つまり、ベクトル要素に対して実行される。
【００３２】
また、「暗号鍵ベクトル」とは、ベクトル要素の暗号化に使用する鍵を列状に並べたものであり、暗号鍵ベクトルのベクトル要素はデータの暗号化に使用するための鍵となる数値であり、各機関において任意に選択される。本実施の形態では、記憶部１３０に暗号鍵ベクトルが保存される。「秘匿ベクトル内積計算処理A」を実行する機関P１では、複数の暗号鍵ベクトルを利用し、暗号文ベクトルC１、C２、D１、D２を作成する。「秘密ベクトル内積計算処理B」を実行する機関P２では、１つの暗号鍵ベクトルを利用し、暗号文ベクトルE1、E2を作成する（詳細は後述する）。
【００３３】
操作部１４０は、データ処理装置１００の外面上に構成されている各種ボタンなどによって構成される。ユーザにより所定のボタンが押されると、制御部１１０に対し「秘匿ベクトル内積計算処理A開始通知」または「秘匿ベクトル内積計算処理B開始通知」を送信する。秘匿ベクトル内積計算処理A、Bの開始通知は、秘匿ベクトル内積計算処理AまたはBを開始するためのトリガーとなるデータである。
【００３４】
インタフェース部１５０は、例えば、USB(Universal Serial Bus)コネクタやビデオ出力端子などから構成され、外部の装置（例えばPCやモニタなど）へ処理結果を送信する。
【００３５】
以上、秘匿ベクトル内積計算システム１の構成について説明したが、次に、制御部１１０の備える機能について、図６の機能ブロック図、および、図７の処理概略図を参照しながら説明する。
【００３６】
制御部１１０は複数の機関で各自が持つ秘密ベクトルのベクトル内積結果を計算するための「秘匿ベクトル内積計算処理A」、「秘匿ベクトル内積計算処理B」を実行する。秘匿ベクトル内積計算処理Aは操作部１４０からの「秘匿ベクトル内積計算処理A開始通知」により開始され、秘匿ベクトル内積計算処理Bは操作部１４０からの「秘匿ベクトル内積計算処理B開始通知」により開始される。以下に説明する各機能は秘匿ベクトル内積計算処理A、Bを実現するための機能である。
【００３７】
分割データ列作成部１１１は、自己のもつ秘密ベクトルを複数のベクトルに分割し、複数の分割データ列を作成する。ここで、ベクトルを分割するとは、複数の分割データ列を統合することで初めて元の秘密ベクトルを構成できるよう、複数のベクトルに情報を分散することである。分割方法の一例としては、２つのベクトルのベクトル和が秘密ベクトルとなるよう複数のベクトルを作成することである。分割データ列作成部１１１は秘匿ベクトル内積計算処理Aを実行するデータ処理装置が保持する。
【００３８】
暗号化分割データ列組作成部１１２は複数の自己のもつ分割データ列を自己のもつ暗号鍵ベクトルを用い、暗号化することで暗号化分割データ列を作成し、その暗号化分割データ列と同じ暗号鍵ベクトルで乱数ベクトルを暗号化することにより作成した暗号化データ列を組として相手機関に送信する。さらに、相手機関が暗号化分割データ列組に相手機関の暗号鍵ベクトルに演算を施したベクトルを暗号鍵ベクトルとして暗号化した演算適用後暗号化分割データ列を取得する（図７(a)）。暗号化分割データ列組作成部１１２は秘匿ベクトル内積計算処理Aを実行するデータ処理装置が保持する。
【００３９】
演算適用後暗号化データ列作成部１１３は他の機関の暗号化分割データ列組作成部１１２にて作成された暗号化分割データ列組を自己のもつ秘密ベクトルと暗号鍵ベクトルに演算を施すことで作成するベクトルを鍵ベクトルとして暗号化し、演算適用後暗号化データ列を作成し、演算適用後暗号化データ列を相手機関に送信する（図７(a)）。演算適用後暗号化データ列作成部１１３は秘匿ベクトル内積計算処理Bを実行するデータ処理装置が保持する。
【００４０】
結果統合部１１４は他の機関より演算適用後暗号化データ列を受信し、演算適用後暗号化データ列を自己のもつ暗号鍵ベクトル、もしくは、対応する復号鍵のベクトルで復号した後、統合し、暗号化統合データ列を作成し、暗号化統合ベクトルを相手機関に送信する（図７(b)）。次に、暗号化分割データ列組の作成時に用いた乱数ベクトルの要素の総和を求め、部分内積結果aとする（図７(d)）。結果統合部１１４は秘匿ベクトル内積計算処理Aを実行するデータ処理装置が保持する。
【００４１】
結果復号部１１５は相手機関が作成した暗号化統合データ列を取得し、自己のもつ暗号鍵ベクトル、もしくは、対応する復号鍵のベクトルで暗号化統合データ列を復号し、統合データ列を作成し、統合データ列の要素の総和をもとめ部分内積結果bとする（図７（c））。結果復号部１１５は秘匿ベクトル内積計算処理Bを実行するデータ処理装置が保持する。
【００４２】
最終結果算出部１１６は結果統合部１１４で計算された部分内積結果aと結果復号部１１５で計算された部分内積結果bを相手機機関と交換し、部分内積結果aと部分内積結果bを取得し、部分内積結果aと部分内積結果bを統合し、内積結果を算出する。さらに、インタフェース部１５０を通じて外部の装置へ内積結果を送信する（図７（e））。最終結果算出部１１６は秘匿ベクトル内積計算処理A、Bを実行する双方のデータ処理装置が保持する。
【００４３】
以上、制御部１１０の機能について説明したが、次に、データ処理装置１００で実行される「秘匿ベクトル内積計算処理A」と「秘匿ベクトル内積計算処理B」について図８のフローチャートを参照しながら説明する。機関P１および機関P２に設置された２台のデータ処理装置１００の一方が、「秘匿ベクトル内積計算処理A」を実行し、他方が「広くベクトル内積計算処理B」を実行する。以降では、機関P１のデータ処理装置１００が「秘匿ベクトル内積計算処理A」を実行し、機関P２のデータ処理装置１００が「秘匿ベクトル内積計算処理B」を実行するとする。
【００４４】
最初に、ステップS１００の分割データ列作成処理について説明する。制御部１１０は自己の「秘密ベクトル」を複数のベクトルに分割した「分割データ列」（図９）を作成する。
【００４５】
次にステップS２００の暗号化分割データ列組作成処理について説明する。制御部１１０は分割データ列作成処理で作成した複数の分割ベクトルを自己のもつ暗号鍵ベクトルで暗号化し、暗号化分割ベクトルを複数個作成し、それらのベクトルを列状に並べる。さらに、乱数ベクトルを用意し、乱数ベクトルを暗号化分割ベクトルを作成した同じ暗号鍵ベクトルで暗号化し、暗号化ベクトルの列を作成する。暗号化分割ベクトルの列と暗号化ベクトルの列を組とし、暗号化分割データ列組を作成し、相手機関に送信する。さらに、作成した暗号化分割データ列組に相手機関の秘密ベクトルと暗号鍵ベクトルに演算を施してできたベクトルを鍵ベクトルとして暗号化した演算適用後暗号化データ列を取得する。
【００４６】
次にステップS３００の演算結果適用後暗号化データ列作成処理について説明する。制御部１１０は他の機関が作成した暗号化分割データ列組を取得し、取得した暗号化分割データ列組の暗号化分割ベクトルの各要素に自己がもつ秘密ベクトルの同じ位置の要素を乗算し、暗号化乗算分割ベクトルを作成し、さらに、暗号化乗算分割ベクトルを自己のもつ暗号鍵ベクトルで暗号化し、複数の演算適用後暗号化ベクトルを作成し、それらの演算適用後暗号化ベクトルを列状に並べ演算適用後暗号化データ列とし、演算適用後暗号化データ列を相手機関に送信する。
【００４７】
次にステップS４００の結果統合処理について説明する。制御部１１０はステップS２００で取得した演算適用後暗号化データ列を、暗号化分割データ列組を作成するときに用いた暗号鍵ベクトル、もしくは、対応する復号鍵ベクトルで復号した後、統合し、暗号化統合データ列を作成する。作成した暗号化統合データ列を相手機関に送信する。その後、制御部１１０は演算適用後暗号化データ列組を作成するときに用いた乱数ベクトルの要素の総和を求め、部分内積結果aとする。
【００４８】
次にステップS５００の結果復号処理について説明する。制御部は、相手機関により作成された暗号化統合データ列を取得する。その後、制御部１１０は暗号化統合データ列を自己の保持する暗号鍵ベクトル、もしくは、暗号鍵ベクトルに対応する復号鍵ベクトルで復号し、復号後のベクトル要素を加算することで部分内積結果bを取得する。
【００４９】
ここで暗号化分割データ列組作成処理および結果統合処理を実施する機関P１は複数の分割ベクトルを暗号化しているとはいえ、全ての分割ベクトルに関する情報を相手機関に渡し、かつ、部分内積結果の復号値を全て機関P２が知ることにより、機関P１の秘密ベクトルに関連する内積結果以外の何らかの情報が機関P２に漏れているのではないかという疑問が生じる。しかしながら、本実施の形態では、暗号化に加え、得られた結果だけからはオペランドの一方が明確にならない限り、元々の演算前のオペランドの二数を割り出すことができないという２項演算の不可逆性を利用する方法により、機関P１の秘密ベクトルに関して完全な秘匿を実現する。
【００５０】
最後にステップS６００の最終結果算出処理について説明する。最終結果算出処理は秘匿ベクトル内積計算処理A, Bどちらを実行するデータ処理装置上でも実行される。制御部１１０は自己のもつ部分内積結果を相手機関に送信する。例えば、機関P１の場合は部分内積結果aを機関P２へ、機関P２の場合は、部分内積結果bを機関P１へ送信する。その後、部分内積結果aと部分内積結果bを統合させる演算を実行し、演算結果を算出する。
【００５１】
以上、秘匿ベクトル内積計算処理A、Bの概要について説明したが、次に、秘匿ベクトル内積計算処理A、Bについて詳細に説明する。最初にステップS１００の「分割データ列作成処理」について説明する。ステップS１００は図８の「分割データ列作成処理」に対応している。以下、図９のフローチャートおよび図７の処理概略図を参照して「分割データ列作成処理」について説明する。なお、分割データ列作成処理は、分割データ列作成部１１１で実行される。
【００５２】
分割データ列作成部１１１は秘密ベクトル（「ベクトルX」）を２つの分割ベクトルα、βに分割する。ここで、分割ベクトルのベクトル和は元の秘密ベクトルであるという条件を分割ベクトルが満たすとする（ベクトルα、βについてはα＋β＝X）。
【００５３】
ここでの分割はランダムに実行される。つまり、i番目の分割ベクトル要素をαiとするときに、αiをランダムに選択する。次に、もう一方の分割ベクトルβの要素βiにXi-αiなる値を設定する。以上により、分割ベクトルの一方は完全な乱数ベクトルと見なせることとなる。
【００５４】
以上の処理により、分割データ列作成部１１１は一方の分割ベクトルが乱数ベクトルになるような複数の分割ベクトルを作成する。分割ベクトルα、βの作成が完了すると、制御部１１０は図８のフローに戻り、ステップS２００の暗号化分割データ列組作成処理とステップS３００の演算適用後暗号化データ列作成処理を開始する。以下、図１０のフローチャートおよび図７の処理概略図を参照して「暗号化分割データ列作成処理」、「演算適用後暗号化データ列作成処理」について説明する。暗号化分割データ列組作成処理は機関P１のデータ処理装置の暗号化分割データ列組作成部１１２で実行され、演算適用後暗号化データ列作成処理は機関P２のデータ処理装置の演算適用後暗号化データ列作成部１１３で実行される。
【００５５】
暗号化分割データ列組作成部１１２は分割ベクトルα、βに加え、乱数ベクトルλ、μベクトルを作成する。次に分割ベクトルαと乱数ベクトルλを同じ暗号鍵ベクトルKA1で暗号化した暗号文ベクトルC１、D１を作成する。また、同様に分割ベクトルβと乱数ベクトルμを同じ暗号鍵ベクトルKA2で暗号化した暗号文ベクトルC２、D２を作成する。ここで、分割ベクトルαの要素が０、または、空である場合には０を暗号化した暗号値をC1の要素とするのではなく、０以外の他の値を暗号値として用いる。分割ベクトルβの要素が０であった場合も同様とする。作成した暗号文ベクトルC１、D１、C２、D２を暗号化分割データ列組として相手機関へ送信し、相手機関から演算適用後暗号化データ列に対応する２つの暗号文ベクトルが送信されるまで待つ。
【００５６】
演算適用後暗号化データ列作成部１１３は相手機関より４つの暗号文ベクトルC1、C2、D1、D2が送られるまで待ち、受信した暗号文ベクトルC１、C２に自己がもつ秘密ベクトルYをベクトル要素ごとに乗算し、２つの乗算結果ベクトルを作成する。その後、２つの乗算結果ベクトルとD１、D２ベクトルをそれぞれベクトル加算した上で共通の暗号鍵ベクトルKBで２つのベクトルを暗号化し、暗号化ベクトルG１、G２を作成する。作成した暗号化ベクトルを演算適用後暗号化データ列として相手機関に送信する。
【００５７】
以上の処理により、ステップS２００の暗号化分割データ列組作成処理とステップS３００の演算適用後暗号化データ列作成処理が終了すると、制御部１１０は図８のフローに戻り、ステップS４００の結果統合処理とステップS５００の結果復号処理を開始する。以下、図１１のフローチャートおよび図７の処理概略図を参照して「結果統合処理」、「結果復号処理」について説明する。結果統合処理は機関P１のデータ処理装置の結果統合部１１４で実行され、結果復号処理は機関P２のデータ処理装置の結果復号部１１５で実行される。
【００５８】
結果統合部１１４は相手機関より演算適用後暗号化データ列に対応する２つの暗号文ベクトルを受信したら、暗号文ベクトルそれぞれを異なる暗号鍵ベクトルKA1, KA2、または暗号鍵ベクトルKA1, KA2に対応する復号鍵ベクトルによって復号し、得られた２つの暗号文ベクトルのベクトル和を求め、暗号文ベクトルJとする。ここで、分割ベクトルαの要素が０である場合には、対応する演算適用後暗号化ベクトルの要素を統合に使用しない。分割ベクトルβの要素が０である場合にも、同様である。その後、乱数ベクトルλ、μの要素和を求め、部分内積結果Hとする。部分内積結果Hを計算した後、制御部１１０は図８のフローに戻り、ステップS６００の最終結果算出処理を開始する。最終結果算出処理は機関P１のデータ処理装置の最終結果算出部１１６で実行される。
【００５９】
結果復号部１１５は相手機関より暗号化統合データ列に対応する暗号文ベクトルJが送信されるまで待つ。結果復号部１１５は相手機関より暗号値ベクトルJを受信したら、暗号鍵ベクトルKBか暗号鍵ベクトルKBに対応する復号鍵ベクトルにて暗号値ベクトルJを復号し、復号後、得られたベクトル要素をすべて加算することで値Eを求める。値Eを計算した後、制御部１１０は図８のフローに戻り、ステップS６００の最終結果算出処理を開始する。最終結果算出処理は機関P２のデータ処理装置の最終結果算出部１１６で実行される。以下では、「最終結果算出処理」について図１２のフローチャート、図７の処理概要図を参照しながら説明する。
【００６０】
最終結果算出部１１６は自己のもつ値Hか値Jを相手機関に送信し、相手機関の値Hか値Jを受信した後、値Hと値Jの和を内積結果NewXYとして算出する。内積結果NewXYを算出したら、インタフェース部１５０を通じて処理結果を外部の装置へ出力する（ステップS６００）。
【００６１】
本実施の形態によれば、機関P１は秘密ベクトルのベクトル要素と乱数ベクトルの要素を暗号化して渡し、機関P２の秘密ベクトル要素と機関P１の秘密ベクトル要素との乗算値を、乱数ベクトル要素を加算することで機関P２に知られないようにできる。また、秘密ベクトルの要素と乱数ベクトルの要素の値をそれぞれ二つに分割した後、別々の暗号鍵で分割することにより相手機関に秘密ベクトルの要素と乱数ベクトルの要素の値の比率を推測されることを防ぐ。
【００６２】
また、意味のない値を暗号値の代わりに相手機関に送信することを許すことにより、秘密ベクトル要素と乱数ベクトル要素を必ず分割しなくても、内積結果を計算できる仕組みとなっている。これにより、暗号値の比率と同じ比率をもつ秘密ベクトル要素と乱数ベクトル要素も送信できる可能性を残すことができ、暗号値から可能性のない秘密ベクトル要素と乱数ベクトル要素の組合せを推定することを不可能にする。
【００６３】
このように本実施の形態の方法は同じ暗号鍵で暗号化した複数の暗号値は暗号値を加算するのみで平文を加算できるという効率面で非常に大きい利点をもつ一方で、元の平文の比率を特定できてしまうという弱点があるという理由から、簡潔な暗号化方式の利用が難しかった安全面の問題点を克服した機密性の高い方法となっている。よって、本実施の形態の方法を使用すれば、効率よく機関P１の安全性を完全に保証することが可能となる。
【００６４】
（実施の形態２）
本実施の形態の秘匿ベクトル内積計算システム１は、秘匿ベクトル内積計算処理Bを実行するデータ処理装置が分割データ列作成部１１１をもつという以外は実施の形態１と同じ構成をもち、また、そのシステムが備えるデータ処理装置１００も実施の形態１のシステムが備えるデータ処理装置１００とほぼ同じ構成をもつ。しかしながら、データ処理装置１００の機能が実施の形態１のデータ処理装置の機能と異なる。以下では、本実施の形態のシステムを図１３の処理概要図、図１４のブロック図、図１５のフローチャートを参照しながら説明する。
【００６５】
実施の形態１では演算適用後暗号化データ列作成処理を実施する機関P２は、その後、暗号化するとはいえ、同じ秘密ベクトルを複数の暗号化分割ベクトルの要素に対して乗算し、それら複数の暗号化統合ベクトルを機関P１に作成できるようにすることで、機関P２の秘密ベクトルに関連する内積計算結果以外の何らかの情報が機関P１に漏れているのではないかという疑問が生じる。よって、本実施の形態では同じ分割ベクトルを乗算した複数の暗号化乗算分割ベクトルに対して、異なる関数を適用し、かつ、統合値が満たすべき条件を維持できる仕組みを導入することにより、機関P２の秘密ベクトルに関しても完全な秘匿を実現する。
【００６６】
データ処理装置１００で実行される「秘匿ベクトル内積計算処理A」と「秘匿ベクトル内積計算処理B」について説明する。機関P１および機関P２に設置された２台のデータ処理装置１００の一方が「秘匿ベクトル内積計算処理A」を実行し、他方が「秘匿ベクトル内積計算処理B」を実行する。以降では、機関P１のデータ処理装置１００が「秘匿ベクトル内積計算処理A」を実行し、機関P２のデータ処理装置１００が「秘匿ベクトル内積計算処理B」を実行するとする。
【００６７】
最初にステップS１００の分割データ列作成処理について説明する。制御部１１０は自己の「秘密ベクトル」を１つの分割ベクトルα、β（機関P１側）またはγ、δ（機関P２側）に分割した「分割ベクトル」（図１３（a）、（b））を作成する。
【００６８】
次にステップS２００の暗号化分割データ列組作成処理について説明する。制御部１１０は分割データ列作成処理で作成した複数の分割ベクトルα、βをα１、β１とし、さらに、α１＋β１＝α２＋β２を満たす２つの分割ベクトルα２、β２を作成する。さらに、４つの乱数ベクトルλ１、μ１、λ２、μ２をλ１＋μ１-Γ１＝λ２＋μ２-Γ２＝Λを満たすよう作成する。ここで、Γ１、Γ２は機関１、機関２が予め共に知っている定数ベクトルとする。また、機関P１が定めるλ１＋μ１-Γ１なるベクトルをΛベクトルと呼ぶ。次に、ベクトルα１、λ１を暗号鍵ベクトルKA1で、ベクトルβ１、λ２を暗号鍵ベクトルKA2で、ベクトルα２、μ１を暗号鍵ベクトルKA３で、ベクトルβ２、μ２を暗号鍵ベクトルKA４で暗号化し、それぞれ暗号文ベクトルC１、D１、C２、D２、C３、D３、C４、D４とする。作成した８つの暗号文ベクトルを相手機関へ送信する（図１３（c））。
【００６９】
さらに演算適用後暗号化データ列作成処理について説明する。まず、演算的用語分割データ列作成部１１４は分割ベクトルδをさらに２つのベクトルδ１、δ２に分割する。ここでδ１＋δ２＝δとする。また、乱数ベクトルθを設定する。そして、４つの暗号値ベクトルF１、F２、F３、F４を計算する。ここで、各暗号値ベクトルの要素F1i, F2i, F3i, F4i（1≦i≦n）は以下の式を満たすとする。４つの暗号値ベクトルF１、F２、F３、F４を相手機関に送信する（図１３（d））。
【数１】
2016027391.tif 000003
【００７０】
次に結果復号部１１４は４つの暗号値ベクトルF１、F２、F３、F４を相手機関より受信し、ベクトルF１、F２、F３、F４をそれぞれ暗号鍵ベクトルKA1, KA2, KA3, KA4により復号するか、暗号鍵ベクトルそれぞれに対応する復号鍵ベクトルを用いて復号した後、ベクトル和をもとめ暗号値ベクトルGを作成する。作成した暗号値ベクトルGを相手機関に送信する（図１３（e））。その後、結果統合部１１５は乱数ベクトルΛのベクトル要素の総和を求め、部分内積結果Hとする（図１３（g））。
【００７１】
結果復号部１１６は暗号値ベクトルGを相手機関より受信し、暗号鍵ベクトルKB、もしくは、暗号鍵ベクトルKBに対応する復号鍵ベクトルを用いて復号した後、ベクトル要素を全て加算し、得られた値から（θΓ１＋（１−θ）Γ２）なるベクトルの要素の総和を減算することで値Jを計算する（図１３（f））。その後、結果統合部１１４、結果復号部１１５は制御を制御部１１０に戻す。制御部１１０は図１５のフローに戻り、最終結果算出処理を実行する。最終結果算出処理は実施の形態１の最終結果算出処理と同一である（図１３（h））。
【００７２】
本実施の形態によれば、機関P１だけでなく、機関P２においても乗算する値を分割し、かつ、θというパラメータを導入することによりベクトル内積結果を正しく計算することを保証しながら、暗号文を自己の乗算する値に制限を受けることなく自由に変更することが可能となる。また、ベクトルJの要素が０という値になるかならないかにより、Yなるベクトル要素がなり得ない値（Jのi番目の要素Jiが０のときだけ、Yのi番目の要素YiはΛi／Xiという値を取るが、Jiが０以外ならばYiはΛi／Xiではない）を確定できる状況を(θΓ１＋（１−θ）Γ２)というベクトルを加算することにより回避することが可能となる。
【００７３】
このように、本実施の形態の方法は機関P１、機関P２の双方ともにおいて、暗号文を得ることにより、相手の秘密データとして想定される候補を暗号文取得前の候補からより小さい集合に限定することを許さない方法である。よって、本実施の形態の方法を使用すれば、完全に不必要な情報を漏らすことなくベクトル内積結果を得ることが可能となる。
【００７４】
（実施の形態３）
本実施の形態の秘匿ベクトル内積計算システム１では機関P２は自己のもつ秘密データである秘密ベクトルとある定数ベクトルとの内積結果のみを機関P１に知らせ、機関P１は自己のもつ秘密データである秘密ベクトルと機関P２の秘密ベクトルの内積結果のみを機関P２に知らせるための秘匿ベクトル内積計算システムである。実施の形態１および２と異なり、本実施の形態では機関P２は相手機関に知らせる情報を相手の秘密データの内容に依らず、独立に、かつ、一意に定めることができる。
【００７５】
機関P２が複数の機関と繰り返し内積を計算する可能性のある計算サーバ等の場合には、内積計算の度に異なる内積結果を他機関に知らせることは、内積結果だけしか互いに知ることができないとしても、安全上の問題となる。例えば、ベクトル次数が２の場合、２つの異なる内積結果が求まれば、秘密ベクトルの全ての値を特定できてしまう。本実施の形態は、上記の安全上の問題を解決するための秘匿ベクトル内積計算システムである。以下、秘匿ベクトル内積計算システム１について図面を参照しながら説明する。また、図１６を参照して秘匿ベクトル内積計算システム１の構成について説明する。
【００７６】
秘匿ベクトル内積計算システム１は図１６に示すように、機関P１と機関P２それぞれに設置された２台のデータ処理装置１００と、それらを接続する通信線２００とで構成される。２台のデータ処理装置１００は通信線２００を通じて互いにデータを送受信することで連携して２つの処理を協調しながら実行する。以下、秘匿ベクトル内積計算システム１の構成について説明する。なお、データ処理装置１００の構成と機能については、制御部１１０以外は実施の形態１と同様であるので説明を省略する。
【００７７】
次に、制御部１１０の備える機能について、図１６の機能ブロック図、および、図１８の処理概略図、図１９の処理前提条件説明図を参照しながら説明する。
【００７８】
制御部１１０は、複数の機関で各自がもつ秘密ベクトルのベクトル内積結果を機関P２に知らせるため、「秘匿ベクトル内積計算処理A」、「秘匿ベクトル内積計算処理B」を実行する。秘匿ベクトル内積計算処理Aは操作部１４０からの「秘匿ベクトル内積計算処理A開始通知」により開始され、秘匿ベクトル内積計算処理Bは操作部１４０からの「秘匿ベクトル内積計算処理B開始通知」により開始される。以下に説明する各機能は秘匿ベクトル内積計算処理A、Bを実現するための機能である。以降では、「秘匿ベクトル内積計算処理A」は機関P１に設置されたデータ処理装置１００の制御部１１０で、「秘匿ベクトル内積計算処理B」は機関P２に設置されたデータ処理装置１００の制御部１１０で実行されるとする。
【００７９】
分割データ列作成部１１１は、自己のもつ秘密ベクトルを複数のベクトルに分割し、複数の分割データ列を作成する。ここで分割方法の一例としては、２つ以上のベクトルのベクトル和が秘密ベクトルとなるように複数のベクトルを作成することである。分割データ列作成部１１１は秘匿ベクトル内積計算処理Aを実行するデータ処理装置、秘匿ベクトル内積計算処理Bを実行するデータ処理装置の両方が保持してもよい（図１８（Step1、Step2、 Step3、Step4））。
【００８０】
暗号化分割データ列組作成部１１２は複数の自己のもつ分割データ列を自己のもつ暗号鍵ベクトルを用い、暗号化することで暗号化分割データ列を作成し、その暗号化分割データ列と同じ暗号鍵ベクトルで乱数ベクトルを暗号化することにより暗号化データ列組を作成するが、このとき、機関P１、機関P２が予め共通情報として定めた値の列の暗号化データ列の組を作成する。定められた暗号化データ列の組を作成するため、分割データ列、暗号鍵ベクトル、乱数ベクトルを逆算する（図１９）。作成した暗号化データ列の組は共通情報であり、既に機関P１、機関P２にとって公知なので相手機関には送信しない。一方、相手機関が暗号化分割データ列組に演算を施したベクトルを暗号鍵ベクトルとして暗号化した演算適用後暗号化分割データ列を取得する（図１８ （Step5、Step8））。暗号化分割データ列組作成部１１２は秘匿ベクトル内積計算処理Aを実行するデータ処理装置が保持する。
【００８１】
演算適用後暗号化データ列作成部１１３は他の機関の暗号化分割データ列組作成部１１２にて作成されたと想定できる暗号化分割データ列組、もしくは、対応する公知情報を自己のもつ秘密ベクトルと暗号鍵ベクトル、および乱数ベクトルに演算を施すことで作成するベクトルを鍵ベクトルとして暗号化し、演算適用後暗号化データ列を作成し、演算適用後暗号化データ列を相手機関に送信する（図１８（Step6、Step7、Step9））。ここでも、暗号化データ列の組を予め共通情報として定めた値の列とするため、暗号鍵ベクトル、乱数ベクトルを逆算し（図１９）、算出された暗号鍵ベクトルを演算に用いる。
【００８２】
結果統合部１１４は、他の機関より演算適用後暗号化データ列を受信し、演算適用後暗号化データ列を自己のもつ暗号鍵ベクトル、もしくは、公知の値の暗号化データ列組を作成するために逆算した暗号鍵ベクトルで復号した後、統合し、暗号化統合データ列を作成し、暗号化統合ベクトルを相手機関に送信する（図１８（Step10））。結果統合部１１４は秘匿ベクトル内積計算処理Aを実行するデータ処理装置が保持する。
【００８３】
結果復号部１１５は相手機関が作成した暗号化統合データ列を取得し、自己のもつ暗号鍵ベクトル、もしくは、自己のもつ秘密ベクトルと公知の値の列と乱数ベクトルに演算を施すことで作成した鍵ベクトルで暗号化統合データ列を復号し、統合データ列を作成し、暗号データ列の要素の総和を求め部分内積結果aとする（図１８（Step11））。結果復号部１１５は秘匿ベクトル内積計算処理Bを実行するデータ処理装置が保持する。
【００８４】
最終結果算出部１１６は、演算適用後暗号化データ列作成時に用いた乱数ベクトルの要素の総和を求め、部分内積結果bとする。さらに、結果統合部１１４で計算された部分内積結果aと部分内積結果bを統合し、内積結果を算出する。最後に、インタフェース部１５０を通じて外部の装置へ内積結果を送信する（図１８（Step12））。最終結果算出部１１６は秘匿ベクトル内積計算処理Bを実行するデータ処理装置が保持する。
【００８５】
以上、制御部１１０の機能について説明したが、次に、データ処理装置１００で実行される「秘匿ベクトル内積計算処理A」と「秘匿ベクトル内積計算処理B」について図１７のフローチャート、および、図１８の処理概要図、図１９の処理前提条件説明図を参照しながら説明する。
【００８６】
最初に、ステップS１００の分割データ列作成処理について説明する。制御部１１０は自己の「秘密ベクトル」を複数のベクトルに分割した「分割データ列」を作成する。ここでは、単に１次元の秘密ベクトル要素を複数の要素に分割するだけではなく、秘密ベクトルの複数の要素の値に演算を適用し、要素の値を混合した後に分割データ列を作成することもある（図１８（Step1、Step2、Step3、Step4））。
【００８７】
次に、ステップS２００の暗号化分割データ列組作成処理について説明する。制御部１１０は分割データ列作成処理で作成した複数の分割ベクトルを自己のもつ暗号鍵ベクトルで暗号化し、暗号化分割ベクトルを複数個作成し、それらのベクトルを列状に並べる。さらに、乱数ベクトルを用意し、乱数ベクトルを暗号化分割ベクトルの作成時と同じ暗号鍵ベクトルで暗号化し、暗号化ベクトルの列を作成する。このとき、機関P１、機関P２が予め共通情報として定めた値の暗号化データ列の組を作成できるよう、分割データ列、暗号鍵ベクトル、乱数ベクトルを逆算し、メモリに記録する（図１９）。作成した暗号化データ列の組は共通情報なので、相手機関に送信する必要がない。さらに、作成したと想定される暗号化分割データ列組に相手機関の秘密ベクトルを暗号鍵ベクトルに演算を施してできたベクトルを鍵ベクトルとして、暗号化した演算適用後暗号化データ列を取得する（図１８（Step5、Step8））。
【００８８】
次にステップS３００の演算結果適用後暗号化データ列作成処理について説明する。制御部１１０は他の機関の暗号化分割データ列組作成部１１２にて作成されたと想定できる暗号化分割データ列組、もしくは、対応する公知情報を取得し、取得した暗号化分割データ列組の暗号化分割ベクトルの各要素に自己がもつ秘密ベクトルと暗号鍵ベクトルおよび乱数ベクトルに演算を施すことで作成するベクトルを鍵ベクトルとして暗号化し、演算適用後暗号化データ列を作成し、演算適用後暗号化データ列を相手機関に送信する（図１８（Step6、Step7、Step9））。ここで、鍵ベクトルを作成する上で、ステップS２００での暗号化分割データ列組作成処理と同様に、予め共通情報として定めた値の暗号化データ列組を作成できるよう、分割データ列、暗号鍵ベクトル、乱数ベクトルを逆算する（図１９、図１８（Step6、Step7））。逆算した値に演算を施すことで作成された鍵ベクトルを用い、演算適用後暗号化データ列を作成する（図１８（Step9））。
【００８９】
ここで、演算適用後暗号化データ列作成処理は、一見すると相手機関の暗号化分割データ列組の値に依存した変化する可能性のある情報である演算適用後暗号化データ列を相手機関に渡しているように見える。しかし、本実施の形態では、演算適用後暗号化データ列作成処理以前に、相手機関より何の情報も実際には受信せず、演算適用後暗号化データ列を作成しているため、演算適用後暗号化データ列は、秘匿ベクトル内積計算処理Bを実行するデータ処理装置が自己の秘密ベクトルと公知の情報のみに依って決定することのできる情報である。また、公知の情報を複数の相手機関に対しても、固定することによって、演算適用後暗号化データ列の内容を一意に定めることも可能である。
【００９０】
次にステップS４００の結果統合処理について説明する。制御部１１０はステップS２００で取得した演算適用後暗号化データ列を、暗号化分割データ列組を作成するときに用いたと想定される、もしくは、逆算した暗号鍵ベクトルで復号した後、統合し、暗号化統合データ列組を作成する。作成した暗号化統合データ列組は、秘匿ベクトル内積計算処理Bが最終的に算出する内積結果と同じ内積結果をもつ別の秘密ベクトルを秘密入力としたときにも同じ暗号化統合データ列組を作成可能な値の列である。つまり、作成された暗号化統合データ列組は秘密ベクトルの内積計算結果のみに依存して変化する（図１８（Step10））。
【００９１】
次にステップS５００の結果復号処理について説明する。制御部１１０は、相手機関より作成された暗号化統合データ列を取得する。その後、制御部１１０は暗号化統合データ列を自己が逆算した暗号鍵ベクトルで復号し、復号後のベクトル要素を加算することで部分内積結果aを取得する（図１８（Step11））。
【００９２】
最後にステップS６００の最終結果算出処理について説明する。最終結果算出処理は秘匿ベクトル内積計算処理Bを実行するデータ処理装置上でのみ実行される。制御部１１０は演算適用後暗号化データ列組を作成するときに用いた乱数ベクトルの要素の総和、および、乱数ベクトルに演算を施すことにより部分内積結果bを算出する。その後、部分内積結果aと部分内積結果bを統合させる演算を実行し、ベクトル内積演算結果を算出する（図１８（Step12））。
【００９３】
実施の形態１、２および３では、複数のデータブロックで構成されるベクトルを対象に本方法を適用したが、本方法はデータブロック単体を対象に適用してもよい。この場合、データ処理装置１００は、データブロック同士の乗算結果を計算するが、最終的な内積結果を算出すると相手のデータブロックの値が判明してしまうので、最終結果以前の値を別の計算に利用する。また、一方の機関のデータブロックを単位ブロック（例えば値１）に設定し、他の機関のデータブロックを秘密データブロックとするベクトルを対象に本方法を適用した場合、データ処理装置１００は秘匿加算計算を実行することができる。
【００９４】
本システムの適用は配電事業社、送電事業社の間の秘匿ベクトル計算に限られない。研究機関間、会社間、部署間等、さまざまな組織間の秘匿ベクトル内積計算に適用可能である。また、個人間の秘匿ベクトル内積計算にも適用可能である。
【００９５】
データ処理装置１００は、専用のシステムによらず、通常のコンピュータシステムを用いても実現可能である。例えば、上述の動作を実行するためのプログラムをコンピュータ読み取り可能な記憶媒体に格納して配布し、該プログラムをコンピュータにインストールして、上述の処理を実行することによってデータ処理装置１００を構成してもよい。また、インターネット等のネットワーク状のサーバ装置が備えるディスク装置に格納しておき、例えばコンピュータにダウンロード等できるようにしてもよい。また、上述の機能を、OSとアプリケーションソフトの共同より実現してもよい。また、コンピュータにダウンロード等してもよい。
【００９６】
上記のプログラムを記録する記録媒体としては、USBメモリ、CD、DVD、MO、SDカード、その他、磁気ディスク、光ディスク、光磁気ディスク、半導体メモリ、磁気デープ等のコンピュータ読取り可能な記録媒体を使用することができる。また、HDD（ハードディスク）やSSD（ソリッドステートドライブ）等、通常、システム又は装置に固定して使用する記録媒体を使用することもできる。
【符号の説明】
【００９７】
１              秘匿ベクトル内積計算システム
１００          データ処理装置
１１０          制御部
１１１          分割データ列作成部
１１２          暗号化分割データ列組作成部
１１３          演算適用後暗号化データ列作成部
１１４          結果統合部
１１５          結果復号部
１１６          最終結果算出部
１２０          通信部
１３０          記憶部
１４０          操作部
１５０          インタフェース部
２００          通信線
３００          データ記憶装置
【図１】
2016027391.tif 000004
【図２】
2016027391.tif 000005
【図３】
2016027391.tif 000006
【図４】
2016027391.tif 000007
【図５】
2016027391.tif 000008
【図６】
2016027391.tif 000009
【図７】
2016027391.tif 000010
【図８】
2016027391.tif 000011
【図９】
2016027391.tif 000012
【図１０】
2016027391.tif 000013
【図１１】
2016027391.tif 000014
【図１２】
2016027391.tif 000015
【図１３】
2016027391.tif 000016
【図１４】
2016027391.tif 000017
【図１５】
2016027391.tif 000018
【図１６】
2016027391.tif 000019
【図１７】
2016027391.tif 000020
【図１８】
2016027391.tif 000021
【図１９】
2016027391.tif 000022