【手続補正書】
【提出日】平成29年1月10日(2017.1.10)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】０００３
【補正方法】変更
【補正の内容】
【０００３】
Ｇａｒｂｌｅｄ  Ｃｉｒｃｕｉｔでは二者間での秘匿関数計算を考えるとき、２者のうち１者を回路作成者、他者を回路評価者という役割で相互通信させる。回路作成者は計算したい関数の論理関数表現が与えられたときに、その論理関数を実現するある論理回路をまず作成する。論理回路を構成するブロックは例えば論理積ゲート、論理和ゲート、排他的論理和ゲートである。このとき、各ブロックへの配線に対して取りうる値、例えば、‘０’や‘１’にランダムな暗号鍵を割り当てる。次に、各ブロックにおいて暗号化した真理値表を作成する。このとき、例えば、入力線が２本ｗｉ、ｗｊで出力線が１本でｗｋとなる論理積ブロックを考える。入力線ｗｉの値が０のときに対応した暗号鍵をｗｉ０、値が１のときに対応した暗号鍵をｗｉ１とする。同様にｗｊ０，ｗｊ１，ｗｋ０，ｗｋ１を定める。このとき、真理値表ではｗｉ１とｗｊ１が入力されたときだけｗｋ１が出力され、その他の入力の組合せではｗｋ０が出力されるよう指定する。この真理値表を暗号的に実現するために真理値表の各行に対応する暗号文をｗｉｂｉとｗｊｂｊを連結した鍵がそろったときにｗｋＡＮＤ（ｂｉ，ｂｊ）が復号できるよう作成する。ここで、ｂｉ、ｂｊはそれぞれ０か１の値を取りうる変数とする。つまり、２入力のゲートの場合、４つの暗号文を作成する。回路作成者は各ブロックで作成された暗号文の集合を各集合内でランダムに並び替え、かつ、ブロックとの対応が明確になるようにして回路評価者へ渡す。最後に回路作成者は自分が入力すべき各配線の秘密入力に対応する暗号鍵を直に、または、回路評価者が入力すべき配線の秘密入力に対応する暗号鍵を忘却通信技術（Ｏｂｌｉｖｉｏｕｓ  Ｔｒａｎｓｆｅｒ）を使って送信する。回路評価者は、各入力ビットに対応する暗号鍵を組み合わせて、各ブロック内の暗号文全ての復号を試みるため、復号関数を適用する。作成された復号関数適用文のうち１つが出力ビットの暗号鍵に対応する。この動作を繰り返した後に最終的に得られた復号関数適用文のうちの１つが値０であるか値１であるかを回路評価者が評価できる情報を回路作成者が与えることで最終結果のみを復号する。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００８
【補正方法】変更
【補正の内容】
【０００８】
しかしながら、上記準同型暗号方式による秘匿関数計算にも問題がある。準同型暗号方式では基本的な演算の準同型性を保証するため一般的な暗号で利用できる平文の値域よりも限定された狭い値域しか扱うことができない。また、いつくかのブロックはやはりＧａｒｂｌｅｄ  Ｃｉｒｃｕｉｔによって実現せざるを得ず、各ゲートに対応する真理値表を作成しなければならない。よって、大規模な入力を複雑な関数に適用する場合には汎用Ｇａｒｂｌｅｄ  Ｃｉｒｃｕｉｔと同じ欠点をもつ。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０００９
【補正方法】変更
【補正の内容】
【０００９】
医療を扱っている機関Ｐ１とＰ２が図２に示すような「住民番号表」を用意する。この表は機関Ｐ１とＰ２が住民基本台帳等に従って、国民１人１人に一意の番号を付したものである。機関Ｐ１とＰ２はこの番号表を使って、それぞれが担当したことのある受診者の番号の位置には‘１’をそうでない番号の位置には‘０’を記載した「受診者リスト」（図３：「リストＸ」、「リストＹ」）を作成する。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００１０
【補正方法】変更
【補正の内容】
【００１０】
次に、機関Ｐ１は加法準同型な公開鍵暗号方式での公開鍵ＰＫｅｙＰ１、秘密鍵ＳＫｅｙＰ１を決定し、公開鍵ＰＫｅｙＰ１を機関Ｐ２に対して公開する。さらに、自分のリスト「リストＸ」の内容をインデックス順に個別に自分の公開鍵ＰＫｅｙＰ１により暗号化する。これにより暗号文リストＡＸを作成する。その後、機関Ｐ１は暗号文リストＡＸを機関Ｐ２に送信する。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００１１
【補正方法】変更
【補正の内容】
【００１１】
機関Ｐ１より暗号文リストＡＸを受信した機関Ｐ２は自身のリストＹで値が‘１’となっている位置に対応する暗号文リストＡＸの位置に格納されている暗号文を全て抜き出し、それらの暗号文を暗号的に加算し、新しい暗号文Ｂを作成する。さらに機関Ｐ２はランダムに選択した値をＲとし、Ｒを機関Ｐ１の公開鍵ＰＫｅｙＰ１で暗号化し、暗号文Ｂと暗号的に加算し暗号文ＢＲを作成する。ここで暗号文ＢＲの平文が表す値は、機関Ｐ１のリストＸと機関Ｐ２のリストＹの両方のリストで該当位置に格納されている値が‘１’である配列位置の数、つまり、共通受診者の数ＮＩに乱数Ｒを加算した値である。機関Ｐ２は暗号文ＢＲを機関Ｐ１に送信する。暗号文ＢＲを受信した機関Ｐ１は自身の秘密鍵ＳＫｅｙＰ１で暗号文ＢＲを復号し、値Ｃを得る。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００１４
【補正方法】変更
【補正の内容】
【００１４】
理解を深めるため、図２９を参照して数値を具体的に追ってみる。まず、機関Ｐ１はリストＸに格納されている‘０’か‘１’を、１つの平文を様々な暗号文に変換可能である確率的暗号方式のＥｌＧａｍａｌ暗号を用いて暗号化する。具体的には、平文Ｍを暗号文の2項組（２Ｍ（ＫｅｙＰ１）r, ｇr）の形式に暗号化する。ここで、公開鍵ＰＫｅｙＰ１と秘密鍵ＳｋｅｙＰ１の関係はＰＫｅｙＰ１≡ｇＳｋｅｙＰ１（ｍｏｄ ｐ）であり、ｐは素数、gは原始元である。以降では暗号鍵および暗号文作成において行うｐを法とする計算についての記載を省略する。このような方式で作成した暗号文リストＡＸを受信した機関Ｐ２は自己のリストＹで‘１’の内容をもつ配列位置に対応する暗号文リストＡＸ
の暗号文を抜き出し、それらの第一項どうし、第二項どうしを乗算する。これにより（２Ｍ１＋Ｍ２＋．．．＋Ｍｌｙｒ１＋ｒ２＋…＋ｒｌ、ｇｒ１＋ｒ２＋…＋ｒｌ）という暗号文Ｂを作成する。さらに、乱数Ｒを（２Ｒｙｒｐ２,ｇｒｐ２）によって暗号化し、暗号文Ｂと暗号文（２Ｒｙｒｐ２, ｇｒｐ２）と第１項どうし、第２項どうしを乗算することで、暗号文ＢＲ＝（２Ｍ１＋Ｍ２ +…＋Ｍｌ＋Ｒｙｒ１＋ｒ２＋．．．＋ｒｌ＋ｒｐ２，  ｇｒ１＋ｒ２＋．．．＋ｒｌ＋ｒｐ２）を作成する。この暗号文ＢＲを機関Ｐ２は機関Ｐ１に送信し、機関Ｐ１は暗号文の第２項に秘密鍵ＳｋｅｙＰ１を指数乗することよりＥｘｐＣ＝２（Ｍ１＋Ｍ２＋．．．＋Ｍｌ＋Ｒ）ｙｒ１＋ｒ２＋…＋ｒｌ＋ｒｐ２／（gｒ１＋ｒ２＋．．．＋ｒｌ＋ｒｐ２）ＳｋｅｙＰ１を計算し、Ｃ＝ｌｏｇ２ＥｘｐＣ=Ｍ１＋Ｍ２＋…＋Ｍｌ＋Ｒを得る。機関Ｐ１は値Ｃを得るだけであり、値Ｃがどのような成分の加算によって構成されたか、機関Ｐ２の１の数等の機関Ｐ２に関する情報を知ることはできない。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】００１７
【補正方法】変更
【補正の内容】
【００１７】
上記目的と達成するために、本発明の第１の観点に係る秘匿関数計算システムは、
関数評価処理かビット列撹乱処理の一方を担当する２以上のデータ処理装置で構成される秘匿関数計算システムであって、
前記ビット列撹乱処理を担当する前記データ処理装置は、
撹乱データの一部である第１の撹乱部分データを他のデータ処理装置に送信し、前記第１の撹乱部分データと加算対象秘密データを組み合わせて撹乱後加算対象秘密データを作成し、段数変数に設定された段数での主暗号鍵で前記撹乱データの一部である第２の撹乱部分データを暗号化して暗号化撹乱データを作成し、該暗号化撹乱データを他のデータ処理装置に送信し、二重暗号化撹乱後加算対象秘密データを前記他のデータ処理装置から受信し、前記二重暗号化撹乱後加算対象秘密データを前記主暗号鍵、もしくは、前記暗号鍵に対応する復号鍵によって復号した結果と前記撹乱後加算対象秘密データを暗号化したまま加算した結果を暗号化撹乱加算結果とし、前記暗号化撹乱加算結果を他のデータ処理装置へ送信する秘匿加算撹乱（加算）手段と、
最終交換データとなる撹乱データを、自らの最終交換データとして設定する最終交換データ設定（加算）手段と、
を有し、
前記関数評価処理を担当するデータ処理装置は、
他のデータ処理装置より前記第１の撹乱部分データと前記暗号化撹乱データを受信し、受信した前記第１の撹乱部分データと加算対象秘密データを組み合わせて加算対象データ変形を作成し、該加算対象データ変形と前記暗号化撹乱データを組み合わせて二重暗号化撹乱後加算対象秘密データを作成し、前記二重暗号化撹乱後加算対象秘密データを他のデータ処理装置に送信し、他のデータ処理装置より、前記暗号化撹乱加算結果を受信し、前記暗号化撹乱加算結果を前記主暗号鍵、もしくは、前記暗号鍵に対応する復号鍵により復号し、撹乱加算結果を作成し、前記撹乱加算結果の二進数表現を加算結果ビット配列とする秘匿加算撹乱（結果取得）手段と、
前記加算結果ビット配列より、加算前の２つのビット列をあいまいに推測してあいまい推測ビット列１とあいまい推測ビット列２を導出する加算前ビット列あいまい推測手段と、
前記段数変数の値の段数にて適用すべき可換性論理演算を前記あいまい推測ビット列１の配列位置のビットと前記あいまい推測ビット列２の配列位置のビットに適用した演算結果を導出し、前記演算結果を論理演算結果ビット配列の前記配列位置に設定し、該論理演算結果ビット配列を出力秘密データとして記憶する論理演算適用手段と、
前記出力秘密データを、最終交換データとして設定する最終交換データ設定（結果取得）手段と、
を有し、
前記加算前ビット列あいまい推測手段は、２つの数である加算前入力１としての前記二重暗号化撹乱後加算対象秘密データを前記主暗号鍵、もしくは、前記暗号鍵に対応する復号鍵によって復号した結果と加算前入力２としての前記撹乱後加算対象秘密データの加算結果の二進数表現が加算結果ビット配列に設定されているとき、あいまい推測後に前記あいまい推測ビット列１に設定されたビット列の任意のビット位置のビットと前記あいまい推測ビット列２に設定されたビット列の前記ビット位置のビットに対して任意の可換性二項論理演算を適用したときの結果が前記加算前入力１の二進数表現のビット列の前記ビット位置のビットと前記加算前入力２の二進数表現のビット列の前記ビット位置のビットに対して前記可換性二項論理演算を適用したときの結果と等しいということを満たす前記あいまい推測ビット列１と前記あいまい推測ビット列２を生成し、
前記データ処理装置はそれぞれ、
段数変数に初期値を初期化後、前記秘匿加算撹乱（結果取得）手段又は前記秘匿加算撹乱（結果取得）手段及び前記論理演算適用手段が、その段数での処理を行う度に、前記段数変数の値が指定段数に等しくなるまで前記段数変数の値を１だけ増加させる段数管理手段と、
該他のデータ処理装置の最終交換データを受信し、受信した値を受信最終交換データとし、前記自らの最終交換データと前記受信最終交換データとに基づいて、最終結果を算出する最終結果算出手段と、を有する、
ことを特徴とする
【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】００１８
【補正方法】変更
【補正の内容】
【００１８】
前記ビット列撹乱処理を担当する前記データ処理装置では、
前記秘匿加算撹乱（結果取得）手段は、
前記段数変数の値の段数での主暗号鍵、秘密データの名前、撹乱データの名前を記憶手段からそれぞれ読み出し、読み出した暗号鍵と、読み出した前記秘密データ名に対応する秘密データと、読み出した撹乱データ名に対応する撹乱データとを用いて、その段数での処理を行い、
前記最終交換データ設定（加算）手段は、
前記段数変数の値の段数での撹乱データの名前をもつ前記撹乱データを、自らの前記最終交換データとして設定し、
前記関数評価処理を担当するデータ処理装置では、
前記秘匿加算撹乱（結果取得）手段は、
前記段数変数の値の段数での暗号鍵、秘密データの名前である加算対象秘密データ名をもつ秘密データを用いて処理を行い、
前記論理演算適用手段は、
前記段数変数の値が前記初期値から前記指定段数までの各段において、各配列位置で前記あいまい推測ビット配列１と前記あいまい推測ビット配列２の前記配列位置の２つのビットに適用する可換性論理演算の種類を列形式で記している指定論理演算型配列の各配列位置で指定されている型の可換性論理演算を行い、得られた前記論理演算結果ビット配列を、前記各段における加算対象秘密データ名をつけて記憶する、
ことを特徴としてもよい。
【手続補正９】
【補正対象書類名】明細書
【補正対象項目名】００１９
【補正方法】変更
【補正の内容】
【００１９】
前記秘匿加算撹乱（加算）手段は、
前記段数変数の値の段数で定められた繰り返し数分、その繰り返し回に対応する正順と逆順の加算対象秘密データと、暗号鍵と、撹乱データとを用いて処理を繰り返し行い、その都度、前記正順と逆順の暗号化撹乱加算結果を他のデータ処理装置に送信し、
前記秘匿加算撹乱（結果取得）手段は、
前記段数変数の値の段数で定められた繰り返し数分、その繰り返し回に対応する暗号鍵、正順と逆順との加算対象秘密データを用いて、処理を繰り返し行い、その都度、前記加算結果（正順）ビット配列と前記加算結果（逆順）ビット配列の二進数表現を求め、
前記加算前ビット列あいまい推測手段は、
前記加算結果（正順）ビット配列と前記加算結果（逆順）ビット配列より、加算前の２つのビット列をあいまいに推測し、あいまい推測ビット列１とあいまい推測ビット列２を導出し、
前記あいまい推測ビット列１と前記あいまいビット列２は、
２つの数である加算前入力１と加算前入力２の加算結果の二進数表現が加算結果（正順）ビット配列に設定され、加算前入力１、加算前入力２それぞれを二進数表現の最上位ビット位置から最下位ビット位置までのビットの並びを逆順序にしたときのビットの並びをそれぞれ加算前逆順ビット列１と加算前逆順ビット列２とし、前記加算前逆順ビット列１と前記加算前逆順ビット列２の加算結果の二進数表現が加算結果（逆順）ビット配列に設定されたとき、あいまい推測後に前記あいまい推測ビット配列１に設定されたビット列の任意のビット位置のビットと前記あいまい推測ビット配列２に設定されたビット列の前記ビット位置のビットに対して任意の可換性二項論理演算を適用したときの結果が前記加算前入力１の二進数表現のビット列の前記ビット位置のビットと前記加算前入力２の二進数表現のビット列の前記ビット位置のビットに対して前記可換性二項論理演算を適用したときの結果と等しいという性質を満たす、
ことを特徴としてもよい。
【手続補正１０】
【補正対象書類名】明細書
【補正対象項目名】００２０
【補正方法】変更
【補正の内容】
【００２０】
前記撹乱データは、
撹乱のために加算対象秘密データを切断して作成する切断ブロック数と、切断する配列位置を前記切断ブロック数並べたブロック切断点順列と、切断後にブロックを転置するために各ブロックに乗算したいブロックシフト係数順列と、前記ブロックシフト係数順列により挿入した空白ブロックの内容を指定する撹乱挿入加算値を含み、
前記秘匿加算撹乱（加算）手段は、
前記切断ブロック数と前記ブロック切断点順列を前記第１の撹乱部分データとして他のデータ処理装置へ送信し、前記加算対象秘密データを前記ブロック切断点順列に従って、前記切断ブロック数のブロックに切断して切断ブロック列を作成し、該切断ブロック列と前記ブロックシフト係数順列との内積を計算して切断ブロックシフト後秘密データを作成し、前記切断ブロックシフト後秘密データと前記撹乱挿入加算値を加算して撹乱後加算対象秘密データを作成し、スカラー定数変数に前記撹乱後加算対象秘密データを設定し、前記ブロックシフト係数順列の要素で１以下の値の要素がある場合には最も小さい値の要素を探して最小値要素とし、該最小値要素の値をスカラー除数変数に設定し、１以下の値の要素がない場合にはスカラー除数変数に１を設定し、前記ブロックシフト係数順列の各要素の値に前記スカラー除数変数の逆数を乗じることで計算できる順列を内積対象ベクトルに設定し、ベクトルサイズに前記切断ブロックの値を設定するブロックシフト係数設定小部分手段と、
前記内積対象ベクトルの各ベクトル位置で、副暗号鍵ベクトルの前記ベクトル位置の要素を暗号化して暗号化内積対象ベクトルを作成し、他のデータ処理装置に該暗号化内積対象ベクトルを送信し、他のデータ処理装置より、二重暗号化内積対象乗算結果ベクトルを受信し、前記二重暗号化内積対象乗算結果ベクトルの各ベクトル位置で、前記副暗号鍵ベクトルの前記ベクトル位置に設定されている暗号鍵、もしくは前記暗号鍵に対応する復号鍵により前記二重暗号化内積対象乗算結果ベクトルの前記ベクトル位置の要素を復号して暗号化内積対象乗算結果ベクトルを作成し、前記暗号化内積対象乗算結果ベクトルの全要素を加算して暗号化内積結果を作成し、前記暗号化内積結果を前記スカラー除数で除算した結果を前記暗号化秘匿ベクトル内積結果に設定し、前記暗号化秘匿ベクトル内積結果に設定されている暗号値を他のデータ処理装置へ送信する秘匿ベクトル内積計算（加算）小部分手段と、
を備え、
前記秘匿加算撹乱（結果取得）手段は、
他のデータ処理装置より前記他のデータ処理装置の前記切断ブロック数と前記ブロック切断点順列を受信し、前記加算対象秘密データを前記ブロック切断点順列に従って、前記切断ブロック数のブロックに分割し、前記ブロックをベクトル表現として並べて内積対象ベクトルを作成する切断ブロック作成小部分手段と、
他のデータ処理装置より他のデータ処理装置の前記暗号化内積対象ベクトルを受信し、前記内積対象ベクトルの各ベクトル位置において、前記ベクトル位置の前記暗号化内積対象ベクトルの要素と、前記内積対象ベクトルの前記ベクトル位置の要素を乗算した結果を、前記主暗号鍵で暗号化して前記ベクトル位置の要素とすることで二重暗号化内積対象乗算結果ベクトルを作成し、前記二重暗号化内積対象乗算結果ベクトルを前記他のデータ処理装置へ送信し、該データ処理装置より該他のデータ処理装置の前記暗号化秘匿ベクトル内積結果に設定されている暗号値を受信して、前記暗号化秘匿ベクトル内積結果に設定し、前記暗号化秘匿ベクトル内積結果に設定されている暗号値を前記主暗号鍵、もしくは、前記暗号鍵に対応する復号鍵で復号して得られた結果をベクトル内積結果とし、結果秘密データ名をもつ秘密データとして前記ベクトル内積結果を記憶する秘匿ベクトル内積（結果取得）小部分手段と、
を備える、
ことを特徴としてもよい。
【手続補正１１】
【補正対象書類名】明細書
【補正対象項目名】００２１
【補正方法】変更
【補正の内容】
【００２１】
前記ベクトル内積結果は、前記関数評価処理を担当するデータ処理装置がもつ前記内積対象ベクトルと、前記データ列撹乱処理を担当するデータ処理装置がもつ前記内積対象ベクトルの内積結果に、前記データ列撹乱処理を担当する前記データ処理装置がもつ前記スカラー除数変数に設定されている値を除算した結果に前記データ処理装置がもつ前記スカラー定数変数に設定されている値を加算した結果と等しい、
ことを特徴としてもよい。
【手続補正１２】
【補正対象書類名】明細書
【補正対象項目名】００２２
【補正方法】変更
【補正の内容】
【００２２】
２以上の前記データ処理装置がアクセス可能なデータ記憶装置、をさらに有し、
２以上の前記データ処理装置は、それぞれ、
自己の保有する各変数に設定されたデータを前記データ記憶装置に保存し、
他のデータ処理装置が保存したデータを前記データ記憶装置から取得してもよい。
【手続補正１３】
【補正対象書類名】明細書
【補正対象項目名】００２３
【補正方法】変更
【補正の内容】
【００２３】
３以上の前記データ処理装置で構成される前記秘匿関数計算システムであって、
前記撹乱後加算対象秘密データは、２以上の他のデータ処理装置の前記主暗号鍵で順次暗号化されることによって生成されてもよい。
【手続補正１４】
【補正対象書類名】明細書
【補正対象項目名】００２４
【補正方法】変更
【補正の内容】
【００２４】
上記目的を達成するため、本発明の第2の観点にかかるデータ処理装置は、
他のデータ処理装置と連携してデータを処理するデータ処理装置であって、
関数評価処理かビット列撹乱処理の一方を担当し、
前記ビット列撹乱処理を担当する場合に、
撹乱データの一部である第１の撹乱部分データを他のデータ処理装置に送信し、前記第１の撹乱部分データと加算対象秘密データを組み合わせて撹乱後加算対象秘密データを作成し、段数変数に設定された段数での主暗号鍵で前記撹乱データの一部である第２の撹乱部分データを暗号化して暗号化撹乱データを作成し、該暗号化撹乱データを他のデータ処理装置に送信し、二重暗号化撹乱後加算対象データを前記他のデータ処理装置から受信し、前記二重暗号化撹乱後加算対象秘密データを前記主暗号鍵、もしくは、前記暗号鍵に対応する復号鍵によって復号した結果と前記撹乱後加算対象秘密データを暗号化したまま加算した結果を暗号化撹乱加算結果とし、前記暗号化撹乱加算結果を他のデータ処理装置へ送信する秘匿加算撹乱（加算）手段と、
最終交換データとなる撹乱データを、自らの最終交換データとして設定する最終交換データ設定（加算）手段と、
を有し、
前記関数評価処理を担当する場合に、
他のデータ処理装置より前記第１の撹乱部分データと前記暗号化撹乱データを受信し、受信した前記第１の撹乱部分データと加算対象秘密データを組み合わせて加算対象データ変形を作成し、該加算対象データ変形と前記暗号化撹乱データを組み合わせて二重暗号化撹乱後加算対象データを作成し、前記二重暗号化撹乱後加算対象データを他のデータ処理装置に送信し、他のデータ処理装置より、前記暗号化撹乱加算結果を受信し、前記暗号化撹乱加算結果を前記主暗号鍵、もしくは、前記暗号鍵に対応する復号鍵により復号して撹乱加算結果を作成し、該撹乱加算結果の二進数表現を加算結果ビット配列とする秘匿加算撹乱（結果取得）手段と、
前記加算結果ビット配列より、加算前の２つのビット列をあいまいに推測してあいまい推測ビット列１とあいまい推測ビット列２を導出する加算前ビット列あいまい推測手段と、
前記段数変数の値の段数にて適用すべき可換性論理演算を前記あいまい推測ビット列１の配列位置のビットと前記あいまい推測ビット列２の配列位置のビットに適用した演算結果を導出し、前記演算結果を論理演算結果ビット配列の前記配列位置に設定し、該論理演算結果ビット配列を出力秘密データとして記憶する論理演算適用手段と、
前記出力秘密データを、最終交換データとして設定する最終交換データ設定（結果取得）手段と、
を有し、
前記加算前ビット列あいまい推測手段は、２つの数である加算前入力１としての前記二重暗号化撹乱後加算対象秘密データを前記主暗号鍵、もしくは、前記暗号鍵に対応する復号鍵によって復号した結果と加算前入力２としての前記撹乱後加算対象秘密データの加算結果の二進数表現が加算結果ビット配列に設定されているとき、あいまい推測後に前記あいまい推測ビット列１に設定されたビット列の任意のビット位置のビットと前記あいまい推測ビット列２に設定されたビット列の前記ビット位置のビットに対して任意の可換性二項論理演算を適用したときの結果が前記加算前入力１の二進数表現のビット列の前記ビット位置のビットと前記加算前入力２の二進数表現のビット列の前記ビット位置のビットに対して前記可換性二項論理演算を適用したときの結果と等しいということを満たす前記あいまい推測ビット列１と前記あいまい推測ビット列２を生成し、
段数変数に初期値を初期化後、前記秘匿加算撹乱（結果取得）手段又は前記秘匿加算撹乱（結果取得）手段及び前記論理演算適用手段が、その段数での処理を行う度に、前記段数変数の値が指定段数に等しくなるまで前記段数変数の値を１だけ増加させる段数管理手段と、
該他のデータ処理装置の最終交換データを受信し、受信した値を受信最終交換データとし、前記自らの最終交換データと前記受信最終交換データとに基づいて、最終結果を算出する最終結果算出手段と、を有する、
ことを特徴とする。
【手続補正１５】
【補正対象書類名】明細書
【補正対象項目名】００２５
【補正方法】変更
【補正の内容】
【００２５】
上記目的を達成するため、本発明の第３の観点にかかる秘匿関数計算方法は、
関数評価処理かビット列撹乱処理の一方を担当する２以上のデータ処理装置を用いて行う秘匿関数計算方法であって、
前記ビット列撹乱処理を担当する前記データ処理装置が、
撹乱データの一部である第１の撹乱部分データを他のデータ処理装置に送信し、前記第１の撹乱部分データと加算対象秘密データを組み合わせて撹乱後加算対象秘密データを作成し、段数変数に設定された段数での主暗号鍵で前記撹乱データの一部である第２の撹乱部分データを暗号化して暗号化撹乱データを作成し、該暗号化撹乱データを他のデータ処理装置に送信し、二重暗号化撹乱後加算対象データを前記他のデータ処理装置から受信し、前記二重暗号化撹乱後加算対象秘密データを前記主暗号鍵、もしくは、前記暗号鍵に対応する復号鍵によって復号した結果と前記撹乱後加算対象秘密データを暗号化したまま加算した結果を暗号化撹乱加算結果とし、前記暗号化撹乱加算結果を他のデータ処理装置へ送信する秘匿加算撹乱（加算）ステップと、
最終交換データとなる撹乱データを、自らの最終交換データとして設定する最終交換データ設定（加算）ステップと、
を含み、
前記関数評価処理を担当するデータ処理装置が、
他のデータ処理装置より前記第１の撹乱部分データと前記暗号化撹乱データを受信し、受信した前記第１の撹乱部分データと加算対象秘密データを組み合わせて加算対象データ変形を作成し、該加算対象データ変形と前記暗号化撹乱データを組み合わせて二重暗号化撹乱後加算対象データを作成し、前記二重暗号化撹乱後加算対象データを他のデータ処理装置に送信し、他のデータ処理装置より、前記暗号化撹乱加算結果を受信し、前記暗号化撹乱加算結果を前記主暗号鍵、もしくは、前記暗号鍵に対応する復号鍵により復号して撹乱加算結果を作成し、該撹乱加算結果の二進数表現を加算結果ビット配列とする秘匿加算撹乱（結果取得）ステップと、
前記加算結果ビット配列より、加算前の２つのビット列をあいまいに推測してあいまい推測ビット列１とあいまい推測ビット列２を導出する加算前ビット列あいまい推測ステップと、
前記段数変数の値の段数にて適用すべき可換性論理演算を前記あいまい推測ビット列１の配列位置のビットと前記あいまい推測ビット列２の配列位置のビットに適用した演算結果を導出し、前記演算結果を論理演算結果ビット配列の前記配列位置に設定し、該論理演算結果ビット配列を出力秘密データとして記憶する論理演算適用ステップと、
前記出力秘密データを、最終交換データとして設定する最終交換データ設定（結果取得）ステップと、
を含み、
前記加算前ビット列あいまい推測ステップでは、２つの数である加算前入力１としての前記二重暗号化撹乱後加算対象秘密データを前記主暗号鍵、もしくは、前記暗号鍵に対応する復号鍵によって復号した結果と加算前入力２としての前記撹乱後加算対象秘密データの加算結果の二進数表現が加算結果ビット配列に設定されているとき、あいまい推測後に前記あいまい推測ビット列１に設定されたビット列の任意のビット位置のビットと前記あいまい推測ビット列２に設定されたビット列の前記ビット位置のビットに対して任意の可換性二項論理演算を適用したときの結果が前記加算前入力１の二進数表現のビット列の前記ビット位置のビットと前記加算前入力２の二進数表現のビット列の前記ビット位置のビットに対して前記可換性二項論理演算を適用したときの結果と等しいということを満たす前記あいまい推測ビット列１と前記あいまい推測ビット列２を生成し、
前記データ処理装置それぞれが、
段数変数に初期値を初期化後、前記秘匿加算撹乱（結果取得）ステップ又は前記秘匿加算撹乱（結果取得）ステップ及び前記論理演算適用ステップにおいて、その段数での処理を行う度に、前記段数変数の値が指定段数に等しくなるまで前記段数変数の値を１だけ増加させる段数管理ステップと、
該他のデータ処理装置の最終交換データを受信し、受信した値を受信最終交換データとし、前記自らの最終交換データと前記受信最終交換データとに基づいて、最終結果を算出する最終結果算出ステップと、を含む
ことを特徴とする。
【手続補正１６】
【補正対象書類名】明細書
【補正対象項目名】００２６
【補正方法】変更
【補正の内容】
【００２６】
上記目的を達成するため、本発明の第４の観点にかかる秘匿関数計算プログラムは、
他のコンピュータと連携してデータを処理するコンピュータにより実行される秘匿関数計算プログラムであって、
前記ビット列撹乱処理を担当するコンピュータを、
撹乱データの一部である第１の撹乱部分データを他のデータ処理装置に送信し、前記第１の撹乱部分データと加算対象秘密データを組み合わせて撹乱後加算対象秘密データを作成し、段数変数に設定された段数での主暗号鍵で前記撹乱データの一部である第２の撹乱部分データを暗号化して暗号化撹乱データを作成し、該暗号化撹乱データを他のデータ処理装置に送信し、二重暗号化撹乱後加算対象データを前記他のデータ処理装置から受信し、前記二重暗号化撹乱後加算対象秘密データを前記主暗号鍵、もしくは、前記暗号鍵に対応する復号鍵によって復号した結果と前記撹乱後加算対象秘密データを暗号化したまま加算した結果を暗号化撹乱加算結果とし、前記暗号化撹乱加算結果を他のデータ処理装置へ送信する秘匿加算撹乱（加算）手段、及び
最終交換データとなる撹乱データを、自らの最終交換データとして設定する最終交換データ設定（加算）手段、
として機能させ、
前記関数評価処理を担当するコンピュータを、
他のデータ処理装置より前記第１の撹乱部分データと前記暗号化撹乱データを受信し、受信した前記第１の撹乱部分データと加算対象秘密データを組み合わせて加算対象データ変形を作成し、該加算対象データ変形と前記暗号化撹乱データを組み合わせて二重暗号化撹乱後加算対象データを作成し、前記二重暗号化撹乱後加算対象データを他のデータ処理装置に送信し、他のデータ処理装置より、前記暗号化撹乱加算結果を受信し、前記暗号化撹乱加算結果を前記主暗号鍵、もしくは、前記暗号鍵に対応する復号鍵により復号して撹乱加算結果を作成し、前記撹乱加算結果の二進数表現を加算結果ビット配列とする秘匿加算撹乱（結果取得）手段、
前記加算結果ビット配列より、加算前の２つのビット列をあいまいに推測してあいまい推測ビット列１とあいまい推測ビット列２を導出する加算前ビット列あいまい推測手段と、
前記段数変数の値の段数にて適用すべき可換性論理演算を前記あいまい推測ビット列１の配列位置のビットと前記あいまい推測ビット列２の配列位置のビットに適用した演算結果を導出し、前記演算結果を論理演算結果ビット配列の前記配列位置に設定し、該論理演算結果ビット配列を出力秘密データとして記憶する論理演算適用手段、及び
前記出力秘密データを、最終交換データとして設定する最終交換データ設定（結果取得）手段、
として機能させ、
前記加算前ビット列あいまい推測手段は、２つの数である加算前入力１としての前記二重暗号化撹乱後加算対象秘密データを前記主暗号鍵、もしくは、前記暗号鍵に対応する復号鍵によって復号した結果と加算前入力２としての前記撹乱後加算対象秘密データの加算結果の二進数表現が加算結果ビット配列に設定されているとき、あいまい推測後に前記あいまい推測ビット列１に設定されたビット列の任意のビット位置のビットと前記あいまい推測ビット列２に設定されたビット列の前記ビット位置のビットに対して任意の可換性二項論理演算を適用したときの結果が前記加算前入力１の二進数表現のビット列の前記ビット位置のビットと前記加算前入力２の二進数表現のビット列の前記ビット位置のビットに対して前記可換性二項論理演算を適用したときの結果と等しいということを満たす前記あいまい推測ビット列１と前記あいまい推測ビット列２を生成し、
前記コンピュータをそれぞれ、
段数変数に初期値を初期化後、前記秘匿加算撹乱（結果取得）手段又は前記秘匿加算撹乱（結果取得）手段及び前記論理演算適用手段が、その段数での処理を行う度に、前記段数変数の値が指定段数に等しくなるまで前記段数変数の値を１だけ増加させる段数管理手段、及び
該他のデータ処理装置の最終交換データを受信し、受信した値を受信最終交換データとし、前記自らの最終交換データと前記受信最終交換データとに基づいて、最終結果を算出する最終結果算出手段、として機能させる、
ことを特徴とする。
【手続補正１７】
【補正対象書類名】明細書
【補正対象項目名】００３１
【補正方法】変更
【補正の内容】
【００３１】
秘匿関数計算システム１は図１に示すように、機関Ｐ１と機関Ｐ２それぞれに設置された２台のデータ処理装置１０００と、それらを接続する通信線２０００とで構成される。２台のデータ処理装置１０００は通信線２０００を通じて互いにデータを送受信することで連携して１つの処理を実行する。
【手続補正１８】
【補正対象書類名】明細書
【補正対象項目名】００３８
【補正方法】変更
【補正の内容】
【００３８】
さらに、「復号鍵」とは暗号化された暗号文を復号し、暗号化前のデータに復元するために使用する鍵となる数値であり、対応する暗号鍵と対をなして記憶される。
【手続補正１９】
【補正対象書類名】明細書
【補正対象項目名】００４６
【補正方法】変更
【補正の内容】
【００４６】
論理演算適用部１１４０は加算前ビット列あいまい推測部１１３０で求めた加算前あいまい推測ビット列１変数と加算前あいまい推測ビット列２変数に設定されている２つのビット列に対して、ビットごとに論理和、論理積、排他的論理和などの可換性二項論理演算を適用し、得られた論理演算結果を記憶部１３００に格納する。
【手続補正２０】
【補正対象書類名】明細書
【補正対象項目名】００６４
【補正方法】削除
【補正の内容】
【手続補正２１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
関数評価処理かビット列撹乱処理の一方を担当する２以上のデータ処理装置で構成される秘匿関数計算システムであって、
前記ビット列撹乱処理を担当する前記データ処理装置は、
撹乱データの一部である第１の撹乱部分データを他のデータ処理装置に送信し、前記第１の撹乱部分データと加算対象秘密データを組み合わせて撹乱後加算対象秘密データを作成し、段数変数に設定された段数での主暗号鍵で前記撹乱データの一部である第２の撹乱部分データを暗号化して暗号化撹乱データを作成し、該暗号化撹乱データを他のデータ処理装置に送信し、二重暗号化撹乱後加算対象秘密データを前記他のデータ処理装置から受信し、前記二重暗号化撹乱後加算対象秘密データを前記主暗号鍵、もしくは、前記暗号鍵に対応する復号鍵によって復号した結果と前記撹乱後加算対象秘密データを暗号化したまま加算した結果を暗号化撹乱加算結果とし、前記暗号化撹乱加算結果を他のデータ処理装置へ送信する秘匿加算撹乱（加算）手段と、
最終交換データとなる撹乱データを、自らの最終交換データとして設定する最終交換データ設定（加算）手段と、
を有し、
前記関数評価処理を担当するデータ処理装置は、
他のデータ処理装置より前記第１の撹乱部分データと前記暗号化撹乱データを受信し、受信した前記第１の撹乱部分データと加算対象秘密データを組み合わせて加算対象データ変形を作成し、該加算対象データ変形と前記暗号化撹乱データを組み合わせて二重暗号化撹乱後加算対象秘密データを作成し、前記二重暗号化撹乱後加算対象秘密データを他のデータ処理装置に送信し、他のデータ処理装置より、前記暗号化撹乱加算結果を受信し、前記暗号化撹乱加算結果を前記主暗号鍵、もしくは、前記暗号鍵に対応する復号鍵により復号し、撹乱加算結果を作成し、前記撹乱加算結果の二進数表現を加算結果ビット配列とする秘匿加算撹乱（結果取得）手段と、
前記加算結果ビット配列より、加算前の２つのビット列をあいまいに推測してあいまい推測ビット列１とあいまい推測ビット列２を導出する加算前ビット列あいまい推測手段と、
前記段数変数の値の段数にて適用すべき可換性論理演算を前記あいまい推測ビット列１の配列位置のビットと前記あいまい推測ビット列２の配列位置のビットに適用した演算結果を導出し、前記演算結果を論理演算結果ビット配列の前記配列位置に設定し、該論理演算結果ビット配列を出力秘密データとして記憶する論理演算適用手段と、
前記出力秘密データを、最終交換データとして設定する最終交換データ設定（結果取得）手段と、
を有し、
前記加算前ビット列あいまい推測手段は、２つの数である加算前入力１としての前記二重暗号化撹乱後加算対象秘密データを前記主暗号鍵、もしくは、前記暗号鍵に対応する復号鍵によって復号した結果と加算前入力２としての前記撹乱後加算対象秘密データの加算結果の二進数表現が加算結果ビット配列に設定されているとき、あいまい推測後に前記あいまい推測ビット列１に設定されたビット列の任意のビット位置のビットと前記あいまい推測ビット列２に設定されたビット列の前記ビット位置のビットに対して任意の可換性二項論理演算を適用したときの結果が前記加算前入力１の二進数表現のビット列の前記ビット位置のビットと前記加算前入力２の二進数表現のビット列の前記ビット位置のビットに対して前記可換性二項論理演算を適用したときの結果と等しいということを満たす前記あいまい推測ビット列１と前記あいまい推測ビット列２を生成し、
前記データ処理装置はそれぞれ、
段数変数に初期値を初期化後、前記秘匿加算撹乱（結果取得）手段又は前記秘匿加算撹乱（結果取得）手段及び前記論理演算適用手段が、その段数での処理を行う度に、前記段数変数の値が指定段数に等しくなるまで前記段数変数の値を１だけ増加させる段数管理手段と、
該他のデータ処理装置の最終交換データを受信し、受信した値を受信最終交換データとし、前記自らの最終交換データと前記受信最終交換データとに基づいて、最終結果を算出する最終結果算出手段と、を有する、
ことを特徴とする秘匿関数計算システム。
【請求項２】
前記ビット列撹乱処理を担当する前記データ処理装置では、
前記秘匿加算撹乱（結果取得）手段は、
前記段数変数の値の段数での主暗号鍵、秘密データの名前、撹乱データの名前を記憶手段からそれぞれ読み出し、読み出した暗号鍵と、読み出した前記秘密データ名に対応する秘密データと、読み出した撹乱データ名に対応する撹乱データとを用いて、その段数での処理を行い、
前記最終交換データ設定（加算）手段は、
前記段数変数の値の段数での撹乱データの名前をもつ前記撹乱データを、自らの前記最終交換データとして設定し、
前記関数評価処理を担当するデータ処理装置では、
前記秘匿加算撹乱（結果取得）手段は、
前記段数変数の値の段数での暗号鍵、秘密データの名前である加算対象秘密データ名をもつ秘密データを用いて処理を行い、
前記論理演算適用手段は、
前記段数変数の値が前記初期値から前記指定段数までの各段において、各配列位置で前記あいまい推測ビット配列１と前記あいまい推測ビット配列２の前記配列位置の２つのビットに適用する可換性論理演算の種類を列形式で記している指定論理演算型配列の各配列位置で指定されている型の可換性論理演算を行い、得られた前記論理演算結果ビット配列を、前記各段における加算対象秘密データ名をつけて記憶する、
ことを特徴とする請求項１に記載の秘匿関数計算システム。
【請求項３】
前記秘匿加算撹乱（加算）手段は、
前記段数変数の値の段数で定められた繰り返し数分、その繰り返し回に対応する正順と逆順の加算対象秘密データと、暗号鍵と、撹乱データとを用いて処理を繰り返し行い、その都度、前記正順と逆順の暗号化撹乱加算結果を他のデータ処理装置に送信し、
前記秘匿加算撹乱（結果取得）手段は、
前記段数変数の値の段数で定められた繰り返し数分、その繰り返し回に対応する暗号鍵、正順と逆順との加算対象秘密データを用いて、処理を繰り返し行い、その都度、前記加算結果（正順）ビット配列と前記加算結果（逆順）ビット配列の二進数表現を求め、
前記加算前ビット列あいまい推測手段は、
前記加算結果（正順）ビット配列と前記加算結果（逆順）ビット配列より、加算前の２つのビット列をあいまいに推測し、あいまい推測ビット列１とあいまい推測ビット列２を導出し、
前記あいまい推測ビット列１と前記あいまいビット列２は、
２つの数である加算前入力１と加算前入力２の加算結果の二進数表現が加算結果（正順）ビット配列に設定され、加算前入力１、加算前入力２それぞれを二進数表現の最上位ビット位置から最下位ビット位置までのビットの並びを逆順序にしたときのビットの並びをそれぞれ加算前逆順ビット列１と加算前逆順ビット列２とし、前記加算前逆順ビット列１と前記加算前逆順ビット列２の加算結果の二進数表現が加算結果（逆順）ビット配列に設定されたとき、あいまい推測後に前記あいまい推測ビット配列１に設定されたビット列の任意のビット位置のビットと前記あいまい推測ビット配列２に設定されたビット列の前記ビット位置のビットに対して任意の可換性二項論理演算を適用したときの結果が前記加算前入力１の二進数表現のビット列の前記ビット位置のビットと前記加算前入力２の二進数表現のビット列の前記ビット位置のビットに対して前記可換性二項論理演算を適用したときの結果と等しいという性質を満たす、
ことを特徴する請求項２に記載の秘匿関数計算システム。
【請求項４】
前記撹乱データは、
撹乱のために加算対象秘密データを切断して作成する切断ブロック数と、切断する配列位置を前記切断ブロック数並べたブロック切断点順列と、切断後にブロックを転置するために各ブロックに乗算したいブロックシフト係数順列と、前記ブロックシフト係数順列により挿入した空白ブロックの内容を指定する撹乱挿入加算値を含み、
前記秘匿加算撹乱（加算）手段は、
前記切断ブロック数と前記ブロック切断点順列を前記第１の撹乱部分データとして他のデータ処理装置へ送信し、前記加算対象秘密データを前記ブロック切断点順列に従って、前記切断ブロック数のブロックに切断して切断ブロック列を作成し、該切断ブロック列と前記ブロックシフト係数順列との内積を計算して切断ブロックシフト後秘密データを作成し、前記切断ブロックシフト後秘密データと前記撹乱挿入加算値を加算して撹乱後加算対象秘密データを作成し、スカラー定数変数に前記撹乱後加算対象秘密データを設定し、前記ブロックシフト係数順列の要素で１以下の値の要素がある場合には最も小さい値の要素を探して最小値要素とし、該最小値要素の値をスカラー除数変数に設定し、１以下の値の要素がない場合にはスカラー除数変数に１を設定し、前記ブロックシフト係数順列の各要素の値に前記スカラー除数変数の逆数を乗じることで計算できる順列を内積対象ベクトルに設定し、ベクトルサイズに前記切断ブロックの値を設定するブロックシフト係数設定小部分手段と、
前記内積対象ベクトルの各ベクトル位置で、副暗号鍵ベクトルの前記ベクトル位置の要素を暗号化して暗号化内積対象ベクトルを作成し、他のデータ処理装置に該暗号化内積対象ベクトルを送信し、他のデータ処理装置より、二重暗号化内積対象乗算結果ベクトルを受信し、前記二重暗号化内積対象乗算結果ベクトルの各ベクトル位置で、前記副暗号鍵ベクトルの前記ベクトル位置に設定されている暗号鍵、もしくは前記暗号鍵に対応する復号鍵により前記二重暗号化内積対象乗算結果ベクトルの前記ベクトル位置の要素を復号して暗号化内積対象乗算結果ベクトルを作成し、前記暗号化内積対象乗算結果ベクトルの全要素を加算して暗号化内積結果を作成し、前記暗号化内積結果を前記スカラー除数で除算した結果を前記暗号化秘匿ベクトル内積結果に設定し、前記暗号化秘匿ベクトル内積結果に設定されている暗号値を他のデータ処理装置へ送信する秘匿ベクトル内積計算（加算）小部分手段と、
を備え、
前記秘匿加算撹乱（結果取得）手段は、
他のデータ処理装置より前記他のデータ処理装置の前記切断ブロック数と前記ブロック切断点順列を受信し、前記加算対象秘密データを前記ブロック切断点順列に従って、前記切断ブロック数のブロックに分割し、前記ブロックをベクトル表現として並べて内積対象ベクトルを作成する切断ブロック作成小部分手段と、
他のデータ処理装置より他のデータ処理装置の前記暗号化内積対象ベクトルを受信し、前記内積対象ベクトルの各ベクトル位置において、前記ベクトル位置の前記暗号化内積対象ベクトルの要素と、前記内積対象ベクトルの前記ベクトル位置の要素を乗算した結果を、前記主暗号鍵で暗号化して前記ベクトル位置の要素とすることで二重暗号化内積対象乗算結果ベクトルを作成し、前記二重暗号化内積対象乗算結果ベクトルを前記他のデータ処理装置へ送信し、該データ処理装置より該他のデータ処理装置の前記暗号化秘匿ベクトル内積結果に設定されている暗号値を受信して、前記暗号化秘匿ベクトル内積結果に設定し、前記暗号化秘匿ベクトル内積結果に設定されている暗号値を前記主暗号鍵、もしくは、前記暗号鍵に対応する復号鍵で復号して得られた結果をベクトル内積結果とし、結果秘密データ名をもつ秘密データとして前記ベクトル内積結果を記憶する秘匿ベクトル内積（結果取得）小部分手段と、
を備える、
ことを特徴とする請求項３に記載の秘匿関数計算システム。
【請求項５】
前記ベクトル内積結果は、前記関数評価処理を担当するデータ処理装置がもつ前記内積対象ベクトルと、前記データ列撹乱処理を担当するデータ処理装置がもつ前記内積対象ベクトルの内積結果に、前記データ列撹乱処理を担当する前記データ処理装置がもつ前記スカラー除数変数に設定されている値を除算した結果に前記データ処理装置がもつ前記スカラー定数変数に設定されている値を加算した結果と等しい、
ことを特徴とする請求項４に記載の秘匿関数計算システム。
【請求項６】
２以上の前記データ処理装置がアクセス可能なデータ記憶装置、をさらに有し、
２以上の前記データ処理装置は、それぞれ、
自己の保有する各変数に設定されたデータを前記データ記憶装置に保存し、
他のデータ処理装置が保存したデータを前記データ記憶装置から取得する、
ことを特徴とする請求項１及至５のいずれか１項に記載の秘匿関数計算システム。
【請求項７】
３以上の前記データ処理装置で構成される前記秘匿関数計算システムであって、
前記撹乱後加算対象秘密データは、２以上の他のデータ処理装置の前記主暗号鍵で順次暗号化されることによって生成される、
ことを特徴とする請求項１及至６のいずれか１項に記載の秘匿関数計算システム。
【請求項８】
他のデータ処理装置と連携してデータを処理するデータ処理装置であって、
関数評価処理かビット列撹乱処理の一方を担当し、
前記ビット列撹乱処理を担当する場合に、
撹乱データの一部である第１の撹乱部分データを他のデータ処理装置に送信し、前記第１の撹乱部分データと加算対象秘密データを組み合わせて撹乱後加算対象秘密データを作成し、段数変数に設定された段数での主暗号鍵で前記撹乱データの一部である第２の撹乱部分データを暗号化して暗号化撹乱データを作成し、該暗号化撹乱データを他のデータ処理装置に送信し、二重暗号化撹乱後加算対象データを前記他のデータ処理装置から受信し、前記二重暗号化撹乱後加算対象秘密データを前記主暗号鍵、もしくは、前記暗号鍵に対応する復号鍵によって復号した結果と前記撹乱後加算対象秘密データを暗号化したまま加算した結果を暗号化撹乱加算結果とし、前記暗号化撹乱加算結果を他のデータ処理装置へ送信する秘匿加算撹乱（加算）手段と、
最終交換データとなる撹乱データを、自らの最終交換データとして設定する最終交換データ設定（加算）手段と、
を有し、
前記関数評価処理を担当する場合に、
他のデータ処理装置より前記第１の撹乱部分データと前記暗号化撹乱データを受信し、受信した前記第１の撹乱部分データと加算対象秘密データを組み合わせて加算対象データ変形を作成し、該加算対象データ変形と前記暗号化撹乱データを組み合わせて二重暗号化撹乱後加算対象データを作成し、前記二重暗号化撹乱後加算対象データを他のデータ処理装置に送信し、他のデータ処理装置より、前記暗号化撹乱加算結果を受信し、前記暗号化撹乱加算結果を前記主暗号鍵、もしくは、前記暗号鍵に対応する復号鍵により復号して撹乱加算結果を作成し、該撹乱加算結果の二進数表現を加算結果ビット配列とする秘匿加算撹乱（結果取得）手段と、
前記加算結果ビット配列より、加算前の２つのビット列をあいまいに推測してあいまい推測ビット列１とあいまい推測ビット列２を導出する加算前ビット列あいまい推測手段と、
前記段数変数の値の段数にて適用すべき可換性論理演算を前記あいまい推測ビット列１の配列位置のビットと前記あいまい推測ビット列２の配列位置のビットに適用した演算結果を導出し、前記演算結果を論理演算結果ビット配列の前記配列位置に設定し、該論理演算結果ビット配列を出力秘密データとして記憶する論理演算適用手段と、
前記出力秘密データを、最終交換データとして設定する最終交換データ設定（結果取得）手段と、
を有し、
前記加算前ビット列あいまい推測手段は、２つの数である加算前入力１としての前記二重暗号化撹乱後加算対象秘密データを前記主暗号鍵、もしくは、前記暗号鍵に対応する復号鍵によって復号した結果と加算前入力２としての前記撹乱後加算対象秘密データの加算結果の二進数表現が加算結果ビット配列に設定されているとき、あいまい推測後に前記あいまい推測ビット列１に設定されたビット列の任意のビット位置のビットと前記あいまい推測ビット列２に設定されたビット列の前記ビット位置のビットに対して任意の可換性二項論理演算を適用したときの結果が前記加算前入力１の二進数表現のビット列の前記ビット位置のビットと前記加算前入力２の二進数表現のビット列の前記ビット位置のビットに対して前記可換性二項論理演算を適用したときの結果と等しいということを満たす前記あいまい推測ビット列１と前記あいまい推測ビット列２を生成し、
段数変数に初期値を初期化後、前記秘匿加算撹乱（結果取得）手段又は前記秘匿加算撹乱（結果取得）手段及び前記論理演算適用手段が、その段数での処理を行う度に、前記段数変数の値が指定段数に等しくなるまで前記段数変数の値を１だけ増加させる段数管理手段と、
該他のデータ処理装置の最終交換データを受信し、受信した値を受信最終交換データとし、前記自らの最終交換データと前記受信最終交換データとに基づいて、最終結果を算出する最終結果算出手段と、を有する、
ことを特徴とするデータ処理装置。
【請求項９】
関数評価処理かビット列撹乱処理の一方を担当する２以上のデータ処理装置を用いて行う秘匿関数計算方法であって、
前記ビット列撹乱処理を担当する前記データ処理装置が、
撹乱データの一部である第１の撹乱部分データを他のデータ処理装置に送信し、前記第１の撹乱部分データと加算対象秘密データを組み合わせて撹乱後加算対象秘密データを作成し、段数変数に設定された段数での主暗号鍵で前記撹乱データの一部である第２の撹乱部分データを暗号化して暗号化撹乱データを作成し、該暗号化撹乱データを他のデータ処理装置に送信し、二重暗号化撹乱後加算対象データを前記他のデータ処理装置から受信し、前記二重暗号化撹乱後加算対象秘密データを前記主暗号鍵、もしくは、前記暗号鍵に対応する復号鍵によって復号した結果と前記撹乱後加算対象秘密データを暗号化したまま加算した結果を暗号化撹乱加算結果とし、前記暗号化撹乱加算結果を他のデータ処理装置へ送信する秘匿加算撹乱（加算）ステップと、
最終交換データとなる撹乱データを、自らの最終交換データとして設定する最終交換データ設定（加算）ステップと、
を含み、
前記関数評価処理を担当するデータ処理装置が、
他のデータ処理装置より前記第１の撹乱部分データと前記暗号化撹乱データを受信し、受信した前記第１の撹乱部分データと加算対象秘密データを組み合わせて加算対象データ変形を作成し、該加算対象データ変形と前記暗号化撹乱データを組み合わせて二重暗号化撹乱後加算対象データを作成し、前記二重暗号化撹乱後加算対象データを他のデータ処理装置に送信し、他のデータ処理装置より、前記暗号化撹乱加算結果を受信し、前記暗号化撹乱加算結果を前記主暗号鍵、もしくは、前記暗号鍵に対応する復号鍵により復号して撹乱加算結果を作成し、該撹乱加算結果の二進数表現を加算結果ビット配列とする秘匿加算撹乱（結果取得）ステップと、
前記加算結果ビット配列より、加算前の２つのビット列をあいまいに推測してあいまい推測ビット列１とあいまい推測ビット列２を導出する加算前ビット列あいまい推測ステップと、
前記段数変数の値の段数にて適用すべき可換性論理演算を前記あいまい推測ビット列１の配列位置のビットと前記あいまい推測ビット列２の配列位置のビットに適用した演算結果を導出し、前記演算結果を論理演算結果ビット配列の前記配列位置に設定し、該論理演算結果ビット配列を出力秘密データとして記憶する論理演算適用ステップと、
前記出力秘密データを、最終交換データとして設定する最終交換データ設定（結果取得）ステップと、
を含み、
前記加算前ビット列あいまい推測ステップでは、２つの数である加算前入力１としての前記二重暗号化撹乱後加算対象秘密データを前記主暗号鍵、もしくは、前記暗号鍵に対応する復号鍵によって復号した結果と加算前入力２としての前記撹乱後加算対象秘密データの加算結果の二進数表現が加算結果ビット配列に設定されているとき、あいまい推測後に前記あいまい推測ビット列１に設定されたビット列の任意のビット位置のビットと前記あいまい推測ビット列２に設定されたビット列の前記ビット位置のビットに対して任意の可換性二項論理演算を適用したときの結果が前記加算前入力１の二進数表現のビット列の前記ビット位置のビットと前記加算前入力２の二進数表現のビット列の前記ビット位置のビットに対して前記可換性二項論理演算を適用したときの結果と等しいということを満たす前記あいまい推測ビット列１と前記あいまい推測ビット列２を生成し、
前記データ処理装置それぞれが、
段数変数に初期値を初期化後、前記秘匿加算撹乱（結果取得）ステップ又は前記秘匿加算撹乱（結果取得）ステップ及び前記論理演算適用ステップにおいて、その段数での処理を行う度に、前記段数変数の値が指定段数に等しくなるまで前記段数変数の値を１だけ増加させる段数管理ステップと、
該他のデータ処理装置の最終交換データを受信し、受信した値を受信最終交換データとし、前記自らの最終交換データと前記受信最終交換データとに基づいて、最終結果を算出する最終結果算出ステップと、を含む、
ことを特徴とする秘匿関数計算方法。
【請求項１０】
他のコンピュータと連携してデータを処理するコンピュータにより実行される秘匿関数計算プログラムであって、
前記ビット列撹乱処理を担当するコンピュータを、
撹乱データの一部である第１の撹乱部分データを他のデータ処理装置に送信し、前記第１の撹乱部分データと加算対象秘密データを組み合わせて撹乱後加算対象秘密データを作成し、段数変数に設定された段数での主暗号鍵で前記撹乱データの一部である第２の撹乱部分データを暗号化して暗号化撹乱データを作成し、該暗号化撹乱データを他のデータ処理装置に送信し、二重暗号化撹乱後加算対象データを前記他のデータ処理装置から受信し、前記二重暗号化撹乱後加算対象秘密データを前記主暗号鍵、もしくは、前記暗号鍵に対応する復号鍵によって復号した結果と前記撹乱後加算対象秘密データを暗号化したまま加算した結果を暗号化撹乱加算結果とし、前記暗号化撹乱加算結果を他のデータ処理装置へ送信する秘匿加算撹乱（加算）手段、及び
最終交換データとなる撹乱データを、自らの最終交換データとして設定する最終交換データ設定（加算）手段、
として機能させ、
前記関数評価処理を担当するコンピュータを、
他のデータ処理装置より前記第１の撹乱部分データと前記暗号化撹乱データを受信し、受信した前記第１の撹乱部分データと加算対象秘密データを組み合わせて加算対象データ変形を作成し、該加算対象データ変形と前記暗号化撹乱データを組み合わせて二重暗号化撹乱後加算対象データを作成し、前記二重暗号化撹乱後加算対象データを他のデータ処理装置に送信し、他のデータ処理装置より、前記暗号化撹乱加算結果を受信し、前記暗号化撹乱加算結果を前記主暗号鍵、もしくは、前記暗号鍵に対応する復号鍵により復号して撹乱加算結果を作成し、前記撹乱加算結果の二進数表現を加算結果ビット配列とする秘匿加算撹乱（結果取得）手段、
前記加算結果ビット配列より、加算前の２つのビット列をあいまいに推測してあいまい推測ビット列１とあいまい推測ビット列２を導出する加算前ビット列あいまい推測手段と、
前記段数変数の値の段数にて適用すべき可換性論理演算を前記あいまい推測ビット列１の配列位置のビットと前記あいまい推測ビット列２の配列位置のビットに適用した演算結果を導出し、前記演算結果を論理演算結果ビット配列の前記配列位置に設定し、該論理演算結果ビット配列を出力秘密データとして記憶する論理演算適用手段、及び
前記出力秘密データを、最終交換データとして設定する最終交換データ設定（結果取得）手段、
として機能させ、
前記加算前ビット列あいまい推測手段は、２つの数である加算前入力１としての前記二重暗号化撹乱後加算対象秘密データを前記主暗号鍵、もしくは、前記暗号鍵に対応する復号鍵によって復号した結果と加算前入力２としての前記撹乱後加算対象秘密データの加算結果の二進数表現が加算結果ビット配列に設定されているとき、あいまい推測後に前記あいまい推測ビット列１に設定されたビット列の任意のビット位置のビットと前記あいまい推測ビット列２に設定されたビット列の前記ビット位置のビットに対して任意の可換性二項論理演算を適用したときの結果が前記加算前入力１の二進数表現のビット列の前記ビット位置のビットと前記加算前入力２の二進数表現のビット列の前記ビット位置のビットに対して前記可換性二項論理演算を適用したときの結果と等しいということを満たす前記あいまい推測ビット列１と前記あいまい推測ビット列２を生成し、
前記コンピュータをそれぞれ、
段数変数に初期値を初期化後、前記秘匿加算撹乱（結果取得）手段又は前記秘匿加算撹乱（結果取得）手段及び前記論理演算適用手段が、その段数での処理を行う度に、前記段数変数の値が指定段数に等しくなるまで前記段数変数の値を１だけ増加させる段数管理手段、及び
該他のデータ処理装置の最終交換データを受信し、受信した値を受信最終交換データとし、前記自らの最終交換データと前記受信最終交換データとに基づいて、最終結果を算出する最終結果算出手段、として機能させる、
ことを特徴とする秘匿関数計算プログラム。
【請求項１１】
請求項１０に記載の秘匿関数計算プログラムが記録されていることを特徴とするコンピュータ読み取り可能な記録媒体。
【手続補正２２】
【補正対象書類名】図面
【補正対象項目名】図１
【補正方法】変更
【補正の内容】
【図１】
2015132690.tif 000001
【手続補正２３】
【補正対象書類名】図面
【補正対象項目名】図１４
【補正方法】変更
【補正の内容】
【図１４】
2015132690.tif 000002
【手続補正２４】
【補正対象書類名】図面
【補正対象項目名】図１９
【補正方法】変更
【補正の内容】
【図１９】
2015132690.tif 000003