(57)【要約】  本発明はデータベースと秘密計算方式を統合化した場合の計算量、通信量、転送する情報量の増大を抑止するか削減する。アプリケーション装置からの要求を受け、前記要求に応じて、複数の秘密計算装置に対して秘密計算処理を指示する中間装置により、前記要求の演算の一部の演算を、前記要求に含まれるデータの一部、又は、前記複数の秘密計算装置から受け取った複数のシェアから復元したデータの少なくとも一方に対して実行する（図２）。
2016178291.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションが稼働するアプリケーション装置と、
複数の秘密計算装置と、
前記アプリケーション装置からの要求を受け、前記要求に応じて、前記複数の秘密計算装置に対して演算の指示を行う中間装置と、
を備え、
前記各秘密計算装置は、データを秘密分散したシェアに対して、前記中間装置から指示された前記演算を秘密計算で処理した結果のシェアを、前記中間装置に送信する手段を備え、
前記中間装置は、
複数の前記秘密計算装置から送信された複数の前記シェアからデータを復元する手段と、
前記アプリケーション装置からの前記要求の演算の一部の演算処理を、
前記復元したデータ、又は、
前記復元したデータと前記要求に含まれる少なくとも一部のデータ、
に対して行う手段と、
を備えた、ことを特徴とする秘密計算データ利用システム。
【請求項２】
前記中間装置は、
前記アプリケーション装置からの前記要求を解析する手段と、
前記要求の演算から、前記複数の秘密計算装置で秘密計算処理される演算を抽出し、前記複数の秘密計算装置に対して前記抽出した演算を指示する手段と、
前記要求の演算から、前記複数の秘密計算装置で秘密計算処理される前記演算以外の演算を分離し、
前記分離した演算を、
前記復元したデータ、又は、
前記復元したデータと前記要求に含まれる少なくとも一部のデータ、
に対して実行する、ことを特徴とする請求項１に記載の秘密計算データ利用システム。
【請求項３】
前記中間装置は、前記複数の秘密計算装置での秘密計算処理に必要なデータのシェアを生成し、前記複数の秘密計算装置に送信する手段を備えた、ことを特徴とする請求項１又は２に記載の秘密計算データ利用システム。
【請求項４】
前記複数の秘密計算装置は、データを秘密分散したシェアを保持する複数のデータベースにそれぞれ接続され、
前記中間装置は、前記アプリケーション装置からの要求としてデータベース操作コマンドを受け、
前記複数の秘密計算装置は、前記中間装置から、前記データベース操作コマンドに応じた演算指示を少なくとも受け、
前記複数のデータベースに保持されるシェアに対して、前記演算指示に対応した秘密計算処理を行う、ことを特徴とする請求項１乃至３のいずれか１項に記載の秘密計算データ利用システム。
【請求項５】
前記中間装置は、前記データベース操作コマンドを解析し、
前記データベース操作コマンドが、
順序の入れ替え、
データ形式の変換、
所定の算術計算、
順序付け、
文字列の結合、
のうちいずれか一つ又は複数個の組み合わせからなる演算処理を含む場合、
前記データベース操作コマンドの演算から、前記演算処理を除いた演算の実行を前記複数の秘密計算装置に対して指示し、
前記演算処理を、前記中間装置で実行する、ことを特徴とする請求項４に記載の秘密計算データ利用システム。
【請求項６】
前記中間装置は、前記データベース操作コマンドを解析し、
前記データベースのデータ又はメタデータの少なくとも一方を秘密分散したシェアを生成し、前記複数の秘密計算装置に送信する、ことを特徴とする請求項４又は５に記載の秘密計算データ利用システム。
【請求項７】
アプリケーションが稼働するアプリケーション装置からの要求を受けた中間装置が、前記要求に応じて、複数の秘密計算装置に対して演算の指示を行い、
複数の前記秘密計算装置は、データを秘密分散したシェアに対して、前記中間装置から指示された前記演算を秘密計算で処理し、前記秘密計算の処理結果のシェアを、前記中間装置に送信し、
前記中間装置では、
複数の前記秘密計算装置から受信した複数の前記シェアからデータを復元し、
前記アプリケーション装置からの前記要求の演算の一部の演算処理を、
前記復元したデータ、又は、
前記復元したデータと前記要求に含まれる少なくとも一部のデータ、
に対して行う、ことを特徴とする秘密計算データ利用方法。
【請求項８】
前記中間装置は、
前記要求を解析し、
前記要求の演算から、前記複数の秘密計算装置で秘密計算処理される演算を抽出し、
前記複数の秘密計算装置に対して、前記抽出した演算を指示し、
前記要求の演算から、前記秘密計算処理される前記演算を除いた演算を分離し、
前記分離した演算を、
前記復元したデータ、又は、
前記復元したデータと、前記要求に含まれる少なくとも一部のデータ、
に対して実行する、ことを特徴とする請求項７に記載の秘密計算データ利用方法。
【請求項９】
前記中間装置は、前記複数の秘密計算装置での秘密計算に必要なデータのシェアを生成して、前記複数の秘密計算装置に送信する、ことを特徴とする請求項７又は８に記載の秘密計算データ利用方法。
【請求項１０】
前記複数の秘密計算装置は、データを秘密分散したシェアを保持する複数のデータベースに接続され、
前記中間装置は、前記アプリケーション装置からの要求として、データベース操作コマンドを受け、
前記複数の秘密計算装置は、前記中間装置から前記データベース操作コマンドに応じた演算指示を少なくとも受け、
前記複数のデータベースに保持されるシェアに対して、前記演算指示に対応した秘密計算処理を行う、ことを特徴とする請求項７乃至９のいずれか１項に記載の秘密計算データ利用方法。
【請求項１１】
前記中間装置は、前記データベース操作コマンドを解析し、前記データベース操作コマンドが、
順序の入れ替え、
データ形式の変換、
所定の算術計算、
順序付け、
文字列の結合、
のうちいずれか一つ又は複数個の組み合わせからなる演算処理を含む場合、
前記データベース操作コマンドの演算のうち、前記演算処理を除いた演算の実行を前記複数の秘密計算装置に指示し、
前記演算処理を前記中間装置で実行する、ことを特徴とする請求項１０に記載の秘密計算データ利用方法。
【請求項１２】
前記中間装置は、前記データベース操作コマンドを解析し、
前記データベースのデータ又はメタデータの少なくとも一方を秘密分散したシェアを生成し、前記複数の秘密計算装置に送信する、ことを特徴とする請求項１０又は１１に記載の秘密計算データ利用方法。
【請求項１３】
アプリケーションが稼働するアプリケーション装置と、
データを秘密分散したシェアに対して中間装置から指示された演算を秘密計算で処理し、処理結果のシェアを前記中間装置に送信する複数の秘密計算装置と、
の間に配置される前記中間装置であって、
前記アプリケーション装置からの要求を受け、前記要求に応じて、前記複数の秘密計算装置に対して演算の指示を行う第１の手段と、
複数の前記秘密計算装置から送信された複数の前記シェアからデータを復元する第２の手段と、
前記アプリケーション装置からの前記要求の演算の一部の演算処理を、
前記復元したデータ、又は、
前記復元したデータと前記要求に含まれる少なくとも一部のデータ
に対して行う第３の手段と、
を備えた、ことを特徴とする中間装置。
【請求項１４】
前記アプリケーション装置からの前記要求を解析し、前記要求の演算を抽出する第４の手段と、
抽出された前記要求の演算から、前記複数の秘密計算装置で秘密計算処理される演算と、前記秘密計算処理される前記演算以外の演算とに分離する第５の手段と、
を備え、
前記第１の手段は、前記秘密計算処理される演算を、前記複数の秘密計算装置に対して指示し、
前記第３の手段は、
前記秘密計算処理される演算以外の演算処理を、
前記復元したデータ、又は、
前記復元したデータと前記要求に含まれる少なくとも一部のデータ、
に対して実行する、ことを特徴とする請求項１３に記載の中間装置。
【請求項１５】
前記中間装置は、前記複数の秘密計算装置での秘密計算に必要なデータのシェアを生成して、前記複数の秘密計算装置に送信する第６の手段を備えた、ことを特徴とする請求項１３又は１４に記載の中間装置。
【請求項１６】
前記複数の秘密計算装置は、データを秘密分散したシェアを保持する複数のデータベースに接続され、
前記中間装置は、前記アプリケーション装置からの要求として、データベース操作コマンドを受け、
前記複数の秘密計算装置は、前記中間装置から前記データベース操作コマンドに応じた演算指示を少なくとも受け、
前記複数のデータベースに保持されるシェアに対して前記演算指示に対応した秘密計算処理を行う、ことを特徴とする請求項１３乃至１５のいずれか１項に記載の中間装置。
【請求項１７】
前記中間装置は、前記データベース操作コマンドを解析し、
前記データベース操作コマンドが、
順序の入れ替え、
データ形式の変換、
所定の算術計算、
順序付け、
文字列の結合、
のうちいずれか一つ又は複数個の組み合わせからなる演算処理を含む場合、
前記データベース操作コマンドの演算のうち、前記演算処理を除いた演算の実行を前記複数の秘密計算装置に指示し、
前記演算処理を前記中間装置で実行する、ことを特徴とする請求項１６に記載の中間装置。
【請求項１８】
前記データベース操作コマンドを解析し、
前記データベースのデータ又はメタデータの少なくとも一方を秘密分散したシェアを生成し、前記複数の秘密計算装置に送信する、ことを特徴とする請求項１６又は１７に記載の中間装置。
【請求項１９】
アプリケーションが稼働するアプリケーション装置と、
データを秘密分散したシェアに対して中間装置から指示された演算を秘密計算で処理し、処理結果のシェアを前記中間装置に送信する複数の秘密計算装置と、
の間に配置される前記中間装置を構成するコンピュータに、
前記アプリケーション装置からの要求を受け、前記要求に応じて、前記複数の秘密計算装置に対して演算の指示を行う処理と、
複数の前記秘密計算装置から送信された複数の前記シェアからデータを復元する処理と、
前記アプリケーション装置からの前記要求の演算の一部の演算処理を、
前記復元したデータ、又は、
前記復元したデータと前記要求に含まれる少なくとも一部のデータ、
に対して行う処理と、
を実行させるプログラム。
【請求項２０】
前記アプリケーション装置からの前記要求を解析し、前記要求の演算を抽出する処理と、
抽出された前記要求の演算から、前記複数の秘密計算装置で秘密計算処理される演算と、前記秘密計算処理される演算以外の演算とに分離する処理と、
前記秘密計算処理される演算を、前記複数の秘密計算装置に対して指示する処理と、
第３の処理では、前記秘密計算処理される演算以外の演算を、
前記復元したデータ、又は、
前記復元したデータと前記要求に含まれる少なくとも一部のデータ、
に対して実行する処理を、前記コンピュータに実行させる請求項１９に記載のプログラム。
【請求項２１】
前記複数の秘密計算装置での秘密計算に必要なデータのシェアを生成して、前記複数の秘密計算装置に送信する処理を、前記コンピュータに実行させる請求項１９又は２０に記載のプログラム。
【請求項２２】
前記アプリケーション装置からの前記要求としてデータベース操作コマンドを受け、前記データベース操作コマンドが、
順序の入れ替え、
データ形式の変換、
所定の算術計算、
順序付け、
文字列の結合、
のうちいずれか一つ又は複数個の組み合わせからなる演算処理を含む場合、
前記データベース操作コマンドの演算のうち、前記演算処理を除いた演算の実行を前記複数の秘密計算装置に指示し、
前記演算処理を前記中間装置で実行する処理を、前記コンピュータに実行させる請求項１９乃至２１のいずれか１項に記載のプログラム。
【請求項２３】
前記データベース操作コマンドを解析し、
前記データベースのデータ又はメタデータの少なくとも一方を秘密分散したシェアを生成し、前記複数の秘密計算装置に送信する処理を、前記コンピュータに実行させる請求項２１又は２２に記載のプログラム。
【請求項２４】
アプリケーションが稼働するアプリケーション装置からの要求を受け、前記要求に応じて、前記複数の秘密計算装置に対して秘密計算処理を指示する中間装置に接続された秘密計算装置であって、
前記中間装置から指示された前記要求の演算の一部の演算を受け取る手段と、
前記一部の演算について、前記複数の秘密計算装置間で保持するシェアを用いて秘密計算を行う手段と、
秘密計算結果であるシェアを前記中間装置に返す手段と、
を備え、
前記中間装置で前記シェアから復元したデータに対して、前記要求の演算の残りの演算処理を行わせる、ことを特徴とする秘密計算装置。
【請求項２５】
アプリケーション装置からの要求を受け、前記要求に応じて、前記複数の秘密計算装置に対して秘密計算処理を指示する中間装置に接続された秘密計算装置を構成するコンピュータに、
前記中間装置から指示された前記要求の演算の一部の演算を受け取る処理と、
前記一部の演算について、前記複数の秘密計算装置間で保持するシェアを用いて秘密計算を行う処理と、
秘密計算結果であるシェアを前記中間装置に返す処理と、
を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、秘密計算データ利用システムと方法と装置並びにプログラムに関する。
【背景技術】
【０００２】
以下、関連技術を説明する。【０００３】
本発明者らを一部に含む発明者らは、情報漏洩対応のデータベースシステムをすでに提案している（例えば特許文献１参照）。図１は、特許文献１の開示の一つの側面の概略を例示するために、今回本発明者らが新たに作成した説明図である。以下に、その概要を説明する。なお、図１は、特許文献１の図面で開示された構成要素の名称や参照符号とは一致していない。【０００４】
アプリケーションソフトウェア（プログラム）が稼働するアプリケーション装置１１０がデータベースシステム１３０に保存されているあるデータ（暗号化されて保存されている）に対して、ある加工を施して送付するように要求する。この要求は、中間装置（特許文献１ではユーザシステム）１２０において、データベースでの暗号プロトコルの適用方法とその適用結果の要求（問合せ文１）に変更され、データベースシステム１３０に送られる。この要求の結果は、例えば暗号文であるが、これを復号しただけでは、アプリケーション装置１１０が要求する加工済みデータとはならない場合がある。【０００５】
データベース制御手段１３１は、中間装置１２０からの要求を受けて暗号プロトコル１３３を利用して、暗号文であるデータを加工した結果を、中間装置１２０に送付する。中間装置１２０は、受け取ったデータを復号し、必要に応じて、さらなる加工（問合せ文２に対応）を施したうえで、アプリケーション装置１１０に、データを送付する。【０００６】
データベースシステム１３０では、暗号文を暗号プロトコル１３３により加工するため、アプリケーション装置１１０が要求するデータの暗号文を迅速に生成することができるとは限らない。また、データベース制御手段１３１において、データを暗号文のままフィルタリングしたり統計値を計算する等して、中間装置１２０に返送するデータ量（転送量）を減らすことができる場合がある。さらに中間装置１２０では、秘密鍵１２１を用いて暗号データを復号した平文を加工することにより、暗号文のままの処理ではできなかったデータ加工を行うことができる。その結果、アプリケーション装置１１０の望んだデータを送付することができる。【０００７】
この様な手法により、アプリケーション装置１１０がデータベースシステム１３０に対して、あたかもデータが暗号化されていないかのように、データの要求を出した時に、データベースシステム１３０では、当該データが暗号化されており、かつ、暗号の鍵をデータベース１３０側に具備せずとも、アプリケーション装置１１０に対して所望するデータを渡すことができる。また、データベースシステム１３０から、中間装置１２０に転送されるデータ量を、要求に関係する暗号文を全て渡す場合と比べて、縮減可能としている。【０００８】
情報セキュリティ技術として、秘密分散法（Secret Sharing Schemes）が広く知られている（非特許文献１、２参照）。例えばデータベースやメモリシステムに秘密分散法を用いて情報を複数に分散させることで、情報の漏洩の可能性やデータの破損等による元の情報の損失の可能性を低くするシステムが実現できる。【０００９】
多項式補間による(k, n) 閾値秘密分散法は、以下の分散と復号からなる（非特許文献１、２等参照）。【００１０】
＜分散＞秘密sを定数項a0とするランダムなk-1次多項式
F(x)＝a0 + a1・x + a2・x＾2 + . . . + ak-1・x＾(k-1)
を生成する（a1〜ak-1は整数、＾は冪乗演算子）。秘密sの保有者は、F(i)をシェアWiとし、識別子iのシェア保有者（装置）に送信する。なお、ｎ個のシェア保有者には１〜ｎの識別子が割り当てられているものとする。【００１１】
＜復号＞
ｋ人のシェア保有者の（i, Wi）を集めることで、秘密ｓ（＝a0）が求められる。【００１２】
qを素数とする有限素体Z/qZ上で(k,n)閾値法を実現する場合、多項式の係数a0〜ak-1もZ/qZ上で元であり、加減乗除もZ/qZ上で行われ、秘密s（＝F(0)）もZ/qZ上の元である。保有者ｉのシェアはF(i) mod qである。秘密s（＝F(0) mod q）は、ラグランジュ補間を用いて、集合S=｛i1,…,ik｝⊂｛1,2,…,n｝を選び、以下で与えられる。
2016178291.tif 000003
【００１３】
有限素体Z/qZ上で(k,n)閾値秘密分散法を実現する場合、k-1個のシェアを得たとしても、秘密ｓの情報を全く得ることができない。【００１４】
なお、パラメタを三つとし（ｋは閾値：ｋ個のシェアからは秘密ｓの情報を得ることができ、ｋ−Ｌ個のシェアからは秘密ｓの情報を全く得ることはできず、ｌ個（k-L+1≦ｌ≦k-1）のシェアからは秘密ｓの何らかの情報を得ることができるようにした（k,L,n）閾値ランプ型秘密分散法等も知られている（例えば非特許文献２参照）。【００１５】
データAが秘密分散されていると言った時、これはデータAを秘密分散して作られた複数のシェアのそれぞれが、装置集合のそれぞれに所持されている場合と、同じ状態である場合のことを言う。【００１６】
なお、秘密計算（Secure Multiparty Computation）は、データを秘密分散したシェアを複数の装置に送り、複数の装置で秘密分散されたシェアの部分計算を繰り返し行うことで、データを秘匿したまま各種計算を行うことをいう。【００１７】
例えば、マルチパーティプロトコルでは、各装置ｉ（i=1〜n）は、該装置の秘密ｓiを秘密分散したシェアw1i,…, wii,…, wniを、各装置に分配する。各装置ｉ（i=1〜n）は秘密ｓiのシェア wiiのほか、他の装置j（ｊ=1〜n, ただしｊ≠i）から装置ｉに分配されたシェアwi1,…wii-1, wii+1,…, winを保持しており、関数h(w11,w21,…,w1i, w2i, …, wnn）＝(v1,…,vi,… vn)を計算する。ここで、v1,…,vi,… vnは秘密情報ｓ1,ｓ2,…ｓnの関数値v=g(s1,s2,…sn）のシェアである（非特許文献３等参照）。非特許文献３には、マルチパーティプロトコルを用いた関係代数演算の実行を可能とし、秘密分散法によって分散されたデータベース上でデータを１度も復号することなく全ての構造演算を可能とする構成が提案されている。【００１８】
秘密分散されたデータＡを秘密計算して秘密分散されたデータＢを生成するとは、データＡが秘密分散されている状態から、秘密計算が始まり、データＢが秘密分散されている状態に終わることを言う。マルチパーティプロトコルでは、複数の参加者がそれぞれ秘密情報を有し、秘密情報を秘匿したまま、秘密情報の関数を計算する。【００１９】
上記したように、あるデータが秘密分散されたとき、このシェアを一定数集めることで、元のデータを復元できる。あるいは、あるデータを秘密分散したときにできるシェアと同じシェアが何らかの方法で生成されても、これらのシェアを一定数集めることで、この対応するあるデータを復元することができる。
【先行技術文献】
【特許文献】
【００２０】
【特許文献１】特許第５３４４１０９号公報
【非特許文献】
【００２１】
【非特許文献１】Shamir, Adi (1979), “How to share a secret”, Communications of the ACM 22 (11): 612-613
【非特許文献２】土井洋, 秘密分散法とその応用について, 情報セキュリティ総合科学, 第4巻, 2012年11月
【非特許文献３】志村正法，宮崎邦彦，西出隆志，吉浦裕，秘密分散データベースの構造演算を可能にするマルチパーティプロトコルを用いた関係代数演算，情報処理学会論文誌，Vol.51, No.9, pp.1563-1578, 2010．
【発明の概要】
【発明が解決しようとする課題】
【００２２】
以下に関連技術の分析を与える。【００２３】
データベースシステムと、秘密計算システムとの統合化を図る場合、秘密計算処理の計算量が大きく、その実用化は容易ではない。【００２４】
本発明は、上記課題に鑑みて創案されたものであって、その目的は、データベースシステムと、秘密計算システムとの統合化にあたり、計算量、転送情報量の増大を抑止するか削減可能とするシステム、方法、装置、プログラムを提供することにある。
【課題を解決するための手段】
【００２５】
本発明の１つの側面によれば、アプリケーションが稼働するアプリケーション装置と、
複数の秘密計算装置と、前記アプリケーション装置からの要求を受け、前記要求に応じて、前記複数の秘密計算装置に対して演算の指示を行う中間装置と、を備え、前記各秘密計算装置は、データを秘密分散したシェアに対して、前記中間装置から指示された前記演算を秘密計算で処理した結果のシェアを、前記中間装置に送信する手段を備え、
前記中間装置は、複数の前記秘密計算装置から送信された複数の前記シェアからデータを復元する手段と、
前記アプリケーション装置からの前記要求の演算の一部の演算処理を、
前記復元したデータ、又は、
前記復元したデータと前記要求に含まれる少なくとも一部のデータに対して行う手段と、を備えた秘密計算データ利用システムが提供される。【００２６】
本発明の他の側面によれば、
アプリケーションが稼働するアプリケーション装置からの要求を受けた中間装置が、前記要求に応じて、複数の秘密計算装置に対して演算の指示を行い、
複数の前記秘密計算装置は、データを秘密分散したシェアに対して、前記中間装置から指示された前記演算を秘密計算で処理し、前記秘密計算の処理結果のシェアを、前記中間装置に送信し、
前記中間装置では、
複数の前記秘密計算装置から受信した複数の前記シェアからデータを復元し、
前記アプリケーション装置からの前記要求の演算の一部の演算処理を、
前記復元したデータ、又は、
前記復元したデータと前記要求に含まれる少なくとも一部のデータに対して行う秘密計算データ利用方法が提供される。【００２７】
本発明のさらに他の側面によれば、アプリケーションが稼働するアプリケーション装置と、データを秘密分散したシェアに対して中間装置から指示された演算を秘密計算で処理し、処理結果のシェアを前記中間装置に送信する複数の秘密計算装置と、の間に配置される前記中間装置であって、
前記アプリケーション装置からの要求を受け、前記要求に応じて、前記複数の秘密計算装置に対して演算の指示を行う第１の手段と、
複数の前記秘密計算装置から送信された複数の前記シェアからデータを復元する第２の手段と、
前記アプリケーション装置からの前記要求の演算の一部の演算処理を、
前記復元したデータ、又は、
前記復元したデータと前記要求に含まれる少なくとも一部のデータに対して行う第３の手段と、
を備えた中間装置が提供される。【００２８】
本発明のさらに他の側面によれば、アプリケーションが稼働するアプリケーション装置と、データを秘密分散したシェアに対して中間装置から指示された演算を秘密計算で処理し、処理結果のシェアを前記中間装置に送信する複数の秘密計算装置と、の間に配置される前記中間装置を構成するコンピュータに、
前記アプリケーション装置からの要求を受け、前記要求に応じて、前記複数の秘密計算装置に対して演算の指示を行う処理と、
複数の前記秘密計算装置から送信された複数の前記シェアからデータを復元する処理と、
前記アプリケーション装置からの前記要求の演算の一部の演算処理を、
前記復元したデータ、又は、
前記復元したデータと前記要求に含まれる少なくとも一部のデータに対して行う処理と、を実行させるプログラムが提供される。本発明のさらに他の側面によれば、該プログラムを記録したコンピュータ読み出し可能な、半導体メモリや磁気／光記録媒体等の記録媒体（non-transitory computer readable recording medium）が提供される。【００２９】
本発明のさらに他の側面によれば、アプリケーションが稼働するアプリケーション装置からの要求を受け、前記要求に応じて、前記複数の秘密計算装置に対して秘密計算処理を指示する中間装置に接続された秘密計算装置であって、
前記中間装置から指示された前記要求の演算の一部の演算を受け取る手段と、
前記一部の演算について、前記複数の秘密計算装置間で保持するシェアを用いて秘密計算を行う手段と、
秘密計算結果であるシェアを前記中間装置に返す手段と、
を備え、前記中間装置で前記シェアから復元したデータに対して前記要求の演算の残りの演算処理を行わせる秘密計算装置が提供される。【００３０】
本発明のさらに他の側面によれば、アプリケーション装置からの要求を受け、前記要求に応じて、前記複数の秘密計算装置に対して秘密計算処理を指示する中間装置に接続された秘密計算装置を構成するコンピュータに、
前記中間装置から指示された前記要求の演算の一部の演算を受け取る処理と、
前記一部の演算について、前記複数の秘密計算装置間で保持するシェアを用いて秘密計算を行う処理と、
秘密計算結果であるシェアを前記中間装置に返す処理と、を実行させるプログラムが提供される。本発明のさらに他の側面によれば、該プログラムを記録したコンピュータ読み出し可能な、半導体メモリや磁気／光記録媒体等の記録媒体（non-transitory computer readable recording medium）が提供される。
【発明の効果】
【００３１】
本発明によれば、データベースと秘密計算方式を統合化した場合の計算量、通信量、転送する情報量の増大を抑止するか削減可能としている。
【図面の簡単な説明】
【００３２】
【図１】関連技術（特許文献１）を説明する図である。
【図２】本発明の例示的な実施形態を説明する図である。
【図３】本発明の例示的な実施形態の中間装置を説明する図である。
【図４】本発明の例示的な実施形態の秘密計算装置を説明する図である。
【発明を実施するための形態】
【００３３】
本発明の前提となる関連発明について説明する。図１等のデータベースシステムを、複数の秘密計算装置で構成し、データベースに保存されるデータを、複数の秘密計算装置に秘密分散して保存し、アプリケーション装置１１０からのデータベースシステムへの問合せを、中間装置に対して行うシステムについて検討する。この場合、図１の中間装置１２０は、データを分散してシェアを生成して複数の秘密計算装置に秘密分散させる処理と、複数の秘密計算装置で秘密計算された計算結果のシェアを集めてデータを復元する処理を行う。
【００３４】
中間装置は、アプリケーション装置からデータベースに対する要求を受けると、秘密計算装置の集合に対して、秘密計算装置の集合に秘密分散して保存されているデータ（シェア）から、要求された加工を加えたデータが秘密分散されたものを秘密計算することを要求する。例えば、各秘密計算装置には、それぞれ複数の秘密情報SA、SBのシェアが与えられているものとすると、ｊ番目の秘密計算装置が持つ秘密情報SA、SBのシェアをSA,j、SB,jと表すと、SA,j + SB,j mod q (qは素数)は、SA+SB mod qのシェアとなっている。したがって、秘密情報を秘匿したまま（秘密情報を復元することなく）、秘密情報の関数f(SA、SB）（ｆは例えば加算演算）を計算することができる。
【００３５】
中間装置は、秘密計算装置の集合に対して、秘密計算装置の集合による秘密計算結果であって、秘密計算装置の集合に分散されて保持されているシェアを、中間装置に返すことを、要求する。
【００３６】
中間装置は、秘密計算装置の集合から得た複数のシェアから、アプリケーション装置が要求したデータを復元して、当該アプリケーション装置に送る。
【００３７】
上記したシステムでは、データベースが、複数の秘密計算装置により構成されており、各秘密計算装置の管理者は、保存されているデータや、要求されてアプリケーションに返答したデータがなんであるか等に関する情報を得ることができない。これは、秘密計算装置がデータを漏洩することができないことを意味している。
【００３８】
しかしながら、上記システムにおいては、要求されたデータの加工を秘密分散で実行できるが、処理内容は、その性能に大きく影響する。
【００３９】
例えば、
・データ形式の変換、
・データの順序の並び替え、
・並び替えの結果
に基づく値の導出、
・平均値計算における実数の割り算処理、
等を、複数の秘密計算装置間で秘密計算する場合、計算量が大きい。このため、実用化が困難である。
【００４０】
以下で開示する形態では、計算の効率化を図り、実用化を可能としたものである。
【００４１】
＜例示的な実施形態＞  
図２は、本発明の例示的な実施形態の一例を説明する図である。図２を参照すると、このシステムは、例えば、データベースへのアクセス要求を発行するアプリケーションソフトウェアが稼働するアプリケーション装置１０と、秘密分散されたデータ（シェア）をそれぞれデータベース３０１〜３０ｎに格納し、当該データ（シェア）を用いて秘密計算する秘密計算装置４０１〜４０ｎと、アプリケーション装置１０と秘密計算装置４０１〜４０ｎとの間に配置された中間装置２０と、を備える。
【００４２】
特に制限されないが、データベース３０１〜３０ｎには、データをｎ個に分割したシェアが格納される。データベース３０１〜３０ｎのカラム（列）のカラム名や、ロウ（行）数等のデータ構造は同一である。
【００４３】
アプリケーション装置１０からのデータベースアクセス要求（コマンド）は、中間装置２０を経て、秘密計算装置４０１〜４０ｎに伝達される。
【００４４】
秘密計算装置４０１〜４０ｎからの応答は中間装置２０を経てアプリケーション装置１０に返される。
【００４５】
アプリケーション装置１０からの要求を中間装置２０が受け取ると、中間装置２０では、例えば以下の処理が行われる。
【００４６】
・中間装置２０は、当該要求に含まれるデータのみを用いて実行可能な加工（演算）がある場合、当該加工（演算）を行う。
【００４７】
・中間装置２０は、秘密計算装置４０１〜４０ｎでの加工（秘密計算）に必要なデータを秘密分散し、秘密計算装置４０１〜４０ｎにそれぞれ該当するシェアを渡す。中間装置２０では、合わせて、加工（演算）の指示を秘密計算装置４０１〜４０ｎに対して発行する。その際、一部のデータは、中間装置２０にも保存しておくようにしてもよい。
【００４８】
中間装置２０から加工（演算）の指示と、前記シェアを受け取った秘密計算装置４０１〜４０ｎは、データベース３０１〜３０ｎに秘密分散されたデータと、前記シェアを用いて秘密計算したシェアを生成する。(k,n)閾値秘密分散法の場合、n個の秘密計算装置４０１〜４０ｎのうちｋ個（ｋ＜ｎ）の秘密計算装置が、秘密計算の結果のシェアを中間装置２０に送る。なお、(n,n)方式の秘密分散法の場合、元の情報を復元するには、全てのシェアが必要であるため、ｎ個の秘密計算装置４０１〜４０ｎの秘密計算の結果のシェアが中間装置２０に送られる。以下では、ｎ個の秘密計算装置４０１〜４０ｎのうちの少なくともｋ個（ただし、ｋ≦ｎ）の秘密計算装置を、簡単のため、秘密計算装置４０の集合ともいう。
【００４９】
中間装置２０は、秘密計算装置４０の集合から送られたシェアから、秘密計算装置４０の集合で秘密計算された結果（データ）を復元（reconstruct）する。
【００５０】
中間装置２０は、復元したデータを用いて必要な演算を行ってアプリケーション装置１０が要求しているデータを生成する。なお、中間装置２０が、復元したデータに対して行う演算は、アプリケーション装置１０からの当該要求に含まれる演算のうちの一部であり、秘密計算装置４０１〜４０ｎによる秘密計算は行わず、復元データに対して中間装置２０で行うものと判断して、当該要求の演算から分離した部分演算に対応する。なお、この部分演算において、中間装置２０は、復元データと中間装置２０に保存されたデータとを用いて演算を行うようにしてもよい。
【００５１】
中間装置２０は、生成したデータを、アプリケーション装置１０からの当該要求に対する応答として、アプリケーション装置１０に送る。
【００５２】
例示的な実施形態によれば、アプリケーション装置１０から要求（データを含む場合もある）されたデータ処理の一部が、中間装置２０で実行される。
【００５３】
アプリケーション装置１０からの要求に含まれる演算が、秘密計算装置４０１〜４０ｎで秘密計算することが苦手とされる演算、例えば、
（A）順序の入れ替え、
（B）データ形式の変換（データの値に応じたデータの置き換え等も含む）、
（C）平均値計算（総和を総数で割る処理）、
（D）順序付け、
（E）文字列の結合、
等のうちの少なくとも一つの演算処理を含む場合、当該演算処理を分離し、これらの演算処理は、秘密計算装置４０１〜４０ｎで秘密計算処理を行わず、中間装置２０側で処理する。ただし、秘密計算装置４０１〜４０ｎで秘密計算することが苦手とされる演算は、上記演算に制限されるものでないことは勿論である。
【００５４】
なお、図２において、秘密計算装置４０１〜４０ｎに接続するデータベース３０１〜３０ｎは、１つの記憶装置に実装してもよいことは勿論である。この場合、例えば当該記憶装置をパーティション化し、ｎ個のパーティションにデータベース３０１〜３０ｎをそれぞれ実装し、一つの秘密計算装置に対応したデータベースが、他からアクセスができないようにセキュリティ管理するようにしてもよい。
【００５５】
＜中間装置＞
図３は、上記した例示的な実施形態における中間装置２０の一例を説明する図である。特に制限されるものではないが、以下では、(k, n) 閾値秘密分散法を用いる。
【００５６】
図３を参照すると、中間装置２０は、要求解析部２０１、演算分離部２０２、シェア生成部２０３、演算指示部２０４、復元部２０５、部分演算処理部２０６、アプリケーション装置１０からの要求（コマンド）を受信する受信部２０７、アプリケーション装置１０に対して要求（コマンド）の応答を送信する送信部２０８、秘密計算装置４０１〜４０ｎに対してシェア１〜ｎを送信する送信部２０９、及び、秘密計算装置４０１〜４０ｎで秘密計算されたシェア１〜ｎのうち少なくともｋ個のシェア１〜ｋ（ただし、ｋ＜ｎ）を受信する受信部２１０を備えている。
【００５７】
要求解析部２０１は、受信部２０７で受信したアプリケーション装置１０からの要求（コマンド）を解析し、コマンドから、演算（関数）とデータを抽出・分離し、演算（関数）を演算分離部２０２に供給し、秘密分散させて、秘密計算装置４０１〜４０ｎに送信するデータを、シェア生成部２０３に供給する。要求解析部２０１でコマンドを解析した結果、中間装置２０で処理するデータについては、中間装置２０に保持する。
【００５８】
演算分離部２０２では、要求解析部２０１から供給されたコマンドに含まれる演算が、例えば複合演算の場合、秘密計算装置４０１〜４０ｎによる秘密計算が苦手とされる演算１（関数１）（例えば上記（A）乃至（E）等）と、例えば和の演算等、秘密計算装置４０１〜４０ｎによる秘密計算が比較的容易な演算２（関数２）と、に分離する。図３では、単に、説明の簡単のため、要求に含まれる演算を演算１と演算２に分離した例を説明したが、分離する演算の個数は二つに制限されるものでないことは勿論である。
【００５９】
なお、アプリケーション装置１０からの要求（コマンド）が、アプリケーション装置１０からのデータを、秘密分散したシェアをデータベース３０１〜３０ｎに格納する処理の場合（複合演算でない場合）、秘密計算装置４０１〜４０ｎでの秘密計算は行われない。このため、演算１は空（null）、演算２は、秘密計算の演算ではなく、データベース３０１〜３０ｎの指定テーブルの指定列等にシェアをそれぞれ格納する挿入コマンドとなる。
【００６０】
また、アプリケーション装置１０からの要求（コマンド）が、データベースからのデータの読み出し（例えば指定テーブルの指定列、指定行のデータの読み出し等）の場合、秘密計算装置４０１〜４０ｎで秘密計算は行われない。このため、演算１は空（null）、演算２は、データベース３０１〜３０ｎの指定テーブルの指定列、指定行等からのシェアを読み出すコマンドとなる。
【００６１】
シェア生成部２０３は、要求解析部２０１からのデータ（秘密分散対象のデータ）を受け、当該データを分割してｎ個のシェア１〜ｎを生成し、送信部２０９を介して秘密計算装置４０１〜４０ｎに渡す。
【００６２】
演算指示部２０４は、演算分離部２０２で分離された演算２を、送信部２０９を介して、秘密計算装置４０１〜４０ｎに通知する。演算２は、秘密計算装置４０１〜４０ｎで実行される秘密計算で演算（関数）を含む。
【００６３】
あるいは、演算分離部２０２に関連して説明したように、演算指示部２０４から秘密計算装置４０１〜４０ｎに通知される演算２は、秘密計算装置４０１〜４０ｎで秘密計算せず、データベースへのシェアの書込み、又は、シェアの読み出しという演算であってもよい。
【００６４】
受信部２１０は、秘密計算装置４０１〜４０ｎのうち少なくともｋ個の秘密計算装置４０からｋ個のシェア１〜ｋを受信する。
【００６５】
復元部２０５は、ｋ個のシェア１〜ｋから、データを復元する。
【００６６】
部分演算処理部２０６は、復元部２０５で復元されたデータ（１つ又は複数のデータ）に対して、演算分離部２０２で分離された演算１を施す。部分演算処理部２０６は、演算結果を、アプリケーション装置１０からの上記要求に対する応答として、送信部２０８からアプリケーション装置１０に送信する。
【００６７】
なお、要求解析部２０１で抽出されたデータの一部が、部分演算処理部２０６での部分演算処理として用いられる場合、部分演算処理部２０６に転送して保持し、復元部２０５で復元された１つ又は複数のデータと、保持したデータの一部を用いて、演算１を施すようにしてもよい。
【００６８】
図３の各部２０１〜２１０の一部又は全部は、中間装置２０を構成するコンピュータで実行されるプログラムによりその処理・機能を実現するようにしてもよい。
【００６９】
なお、受信部２０７、送信部２０８はアプリケーション装置１０との通信を行う第１の通信部を構成し、受信部２１０、送信部２０９は、秘密計算装置４０１〜４０ｎとの通信を行う第２の通信部を構成している。アプリケーション装置１０と、秘密計算装置４０１〜４０ｎが共通のネットワークに接続されている場合、第１、第２の通信部を共通の通信部で構成し、それぞれを個別のポートに割り当てるようにしてもよい。
【００７０】
＜秘密計算装置＞
図４は、上記した例示的な実施形態における秘密計算装置４０１〜４０ｎの一例を説明する図である。秘密計算装置４０１〜４０ｎは互いに同一の構成とされ、図４には、秘密計算装置４０１の構成が模式的に示されている。図４を参照すると、秘密計算装置４０１は、接続するデータベース３０１にアクセスするデータべースアクセス部４０１と、中間装置２０から秘密分散されたシェア１を受けとるシェア受信部４０２と、中間装置２０からの演算の指示を受け取り、秘密計算処理部４０４に設定する演算指示受信部４０３と、データベース３０に保持されるシェア、中間装置２０から秘密分散されたシェア１、必要に応じて他の秘密計算装置４０２〜４０ｎのシェアを用いて、演算指示受信部４０３で受信した演算指示に関する秘密計算を行う秘密計算処理部４０４と、秘密計算結果であるシェアを、中間装置２０に返すシェア送信部４０５を備えている。秘密計算装置４０の各部４０１〜４０５の一部又は全ての処理・機能はコンピュータで実行されるプログラムで実現するようにしてもよい。
【００７１】
なお、アプリケーション装置１０を、通信端末等で構成し、中間装置２０をプロキシ装置として構成してもよい。中間装置２０をサーバ仮想化技術を用いてサーバ上に仮想化して構成してもよい。
【００７２】
秘密計算装置４０１〜４０ｎをサーバ上の仮想マシン上にそれぞれ実装してもよいことは勿論である。
【００７３】
以下では、いくつかの例を説明する。なお、以下の例で、システムの基本構成は図３に示したものと同様とされる。
【００７４】
＜実施形態１＞
アプリケーション装置１０が、あるデータ列を辞書順序に整列して返すことを要求する。この要求は中間装置２０に伝えられる。
【００７５】
アプリケーション装置１０が要求したデータ列（複数のデータ）を生成するための各データは、それぞれ、例えば中間装置２０において、複数のシェアに秘密分散され、それぞれのシェアが、秘密計算装置４０１〜４０ｎの各々に保存されている。
【００７６】
中間装置２０は、アプリケーション装置１０からの要求を受けると、要求を構成する文を文法解析して、データ列の各データの秘密分散は、秘密計算する処理であり、辞書順序での整列は、中間装置２０で実行する処理であると判断する。
【００７７】
中間装置２０は、秘密計算装置４０1〜４０ｎにそれぞれ接続されたデータベース３０1〜３０ｎに保存されているデータ（秘密分散されたデータ）から、当該データ列を秘密計算することを、秘密計算装置４０1〜４０ｎに要求する。
【００７８】
ここで、データ列の代わりに、当該データ列をランダムにその順番を入れ替えた列を秘密計算してもよい。
【００７９】
秘密計算装置４０1〜４０ｎは、それぞれ、データ列を秘密計算し、秘密計算結果であるシェアを、中間装置２０に送付する。
【００８０】
中間装置２０は、秘密計算装置４０の集合から受け取った複数のシェアから、前記データ列を復元する。
【００８１】
そして、中間装置２０は、復元したデータ列に対して、辞書順序に整列し、アプリケーション装置１０から要求されたデータ列を生成する。
【００８２】
中間装置２０は、辞書順序に整列した前記データ列を、アプリケーション装置１０に送付する。
【００８３】
秘密分散されたデータの辞書順序での整列を、秘密計算装置４０1〜４０ｎで秘密計算する処理は、多大な計算量を必要とする。
【００８４】
これに対して、本実施形態によれば、復元してから辞書順序に整列させる処理は、計算量も大きくはなく、容易である。
【００８５】
なお、秘密計算装置４０1〜４０ｎから中間装置２０に送られるデータ量は、整列していようとも整列していなくとも同じである。
【００８６】
さらに整列していないデータ列を、中間装置２０に開示しても、データ列を整列させてから開示する場合と比べて、中間装置２０に開示される情報量は、さほど大きくはならない。
【００８７】
また、データ列をランダムにその順番を入れ替えてから中間装置２０に開示する場合も、中間装置２０に開示される情報量は、さほど大きくなく、ランダムに順番を入れ替える処理は、整列させる処理と比べて、処理は大きくない。
【００８８】
中間装置２０では、演算の一部を行うことにより、計算量、通信量、中間装置２０に開示する情報量のいずれも、削減、あるいは同等に保つことができる。
【００８９】
ただし、あるデータ列を使って整列した他の列を要求する様な場合は、最初のデータ列を、追加的に、中間装置２０に送る必要があるため、データ量は増加する。
【００９０】
＜具体例１＞
アプリケーション装置１０からのSQL（Structured Query Language）言語によるデータベースへの問い合わせ：
select column-X from table-A order by column-X 
に関して、「order by」が、上記した「整列の要求」に対応する。
【００９１】
この問い合わせ（SQLコマンド）を受けた中間装置２０では、
・秘密計算装置４０1〜４０ｎにより、データべース３０１〜３０ｎをアクセスして、
「select column-X from table-A」を処理し、
・中間装置２０で、「カラムX（column-X）の順序を整列」（「order by column-X」）を処理する、
と判断する。
【００９２】
中間装置２０は、秘密計算装置４０1〜４０ｎに対して、前半の処理（select column-X from table-A）のみ要求する。
【００９３】
後半の処理（「order by column-X」）を秘密計算装置４０1〜４０ｎで実行するという手間をかけなくとも、中間装置２０で実行することで、アプリケーション装置１０は全ての処理を一括して中間装置２０に要求することができる。
【００９４】
なお、SQL言語における順序の整列は、「order by 句」だけでなく、「group by 句」（同列内の値の中で同じ値を持つデータごとにグループ化する）等にも適用可能である。この場合にも、順序の整列を中間装置２０に任せることができる場合がある。
【００９５】
＜実施形態２＞
アプリケーション装置１０が、あるデータからそのデータ形式を変更してできた結果のデータを要求する。この要求は、中間装置２０に伝えられる。当該データは秘密分散されて、それぞれのシェアが、秘密計算装置４０1〜４０ｎのそれぞれに保存されているとする。
【００９６】
中間装置２０は、前記要求を受けると、要求を構成する文を文法解析し、
・当該データの取り出し処理を、秘密計算装置４０1〜４０ｎに依頼し、
・データ形式の変換は、中間装置２０で処理する、
と判断する。
【００９７】
中間装置２０は、秘密分散されている保存データのシェアを、秘密計算装置４０1〜４０ｎに要求する。
【００９８】
秘密計算装置４０の集合は、秘密分散されている保存データのシェアを、中間装置２０に送付する。
【００９９】
中間装置２０は、秘密計算装置４０の集合から受け取ったシェアから、前記あるデータを復元し、そのデータ形式を変更して、アプリケーション装置１０から要求されたデータを生成する。
【０１００】
中間装置２０は生成したデータをアプリケーション装置１０に送付する。
【０１０１】
＜具体例２＞
例えば、アプリケーション装置１０からのSQL言語によるデータベースへの問い合わせ：
select ASCII(column-X) from table-A 
について、「ASCII()」が「データ形式の変換」の要求に対応する。
【０１０２】
この場合、当該問い合わせ（SQLコマンド）を受けた中間装置２０では、
・秘密計算装置４０1〜４０ｎにより、データべース３０１〜３０ｎをアクセスして、
「select column-X from table-A」を処理し、
・中間装置２０で、「ASCII(column-X)」を処理する、
と判断する。
【０１０３】
中間装置２０は、秘密計算装置４０1〜４０ｎに対して、前半の処理（「select column-X from table-A」）のみ要求して、後半の処理（「ASCII(column-X)」）は、秘密計算装置４０1〜４０ｎで実行するという手間をかけなくとも、中間装置２０で実行することできる。なお、アプリケーション装置１０は、これらの処理を一括して一つのSQLコマンドで中間装置２０に要求する。
【０１０４】
本実施形態によれば、以下の作用効果を奏する。
【０１０５】
秘密分散されたデータのデータ形式を変更する処理は大きな計算を必要とするが、復元してからデータ形式を変換する処理は、容易である。
【０１０６】
秘密計算装置４０の集合から中間装置２０に送られるデータ量は、データ形式の変換前でも後でもあまり変わらないことが多い。
【０１０７】
データ形式を変換する前のデータを中間装置２０に開示しても、変換してから開示するのに比べて、一対一の変換であり、且つ、そのルールが開示されていれば、中間装置２０に開示される情報量は変わらない。
【０１０８】
本実施形態によれば、中間装置２０でアプリケーション装置１０から要求されるデータ処理・演算の一部である変換処理を行うことにより、計算量、通信量、中間装置２０に開示する情報量のいずれも削減、あるいは同等に保つことができる。
【０１０９】
＜実施形態３＞
アプリケーション装置１０があるデータを示し、秘密計算装置４０1〜４０ｎに秘密分散されたあるテーブル（データベースの指定テーブル）から、前記提示されたデータの形式を変換してできた値に一致する値を持つ行を選んだ結果を要求する。この要求は中間装置２０に伝えられる。
【０１１０】
アプリケーション装置１０から当該要求を受けると、中間装置２０は、提示されたデータの形式を変換し、この変換後の値を秘密分散したシェアを、秘密計算装置４０1〜４０ｎに送信する。
【０１１１】
中間装置２０は、変換後の値が含まれている行を、前記テーブルから秘密計算により選んで送ることを、秘密計算装置４０1〜４０ｎに要求する。
【０１１２】
秘密計算装置４０の集合は、秘密分散された前記変換後の値のシェアと、前記秘密分散されたテーブルを用いて、秘密計算により前記テーブルから行を選び出し、結果のシェアを中間装置２０に送付する。
【０１１３】
中間装置２０は、前記秘密計算装置４０の集合から受け取った複数のシェアから抜き出された行からなるテーブルのデータを復元し、アプリケーション装置１０から要求されたデータを生成する。中間装置２０は、生成したデータをアプリケーション装置１０に送付する。
【０１１４】
＜具体例３＞
アプリケーション装置１０からのSQL言語によるデータベースへの問い合わせ：
select * from table-A where ASCII(value)=column-X; 
について、「ASCII()」 が「データ形式の変換」の要求に対応する。
【０１１５】
この場合、
・当該問い合わせ（SQLコマンド）を受けた中間装置２０で、「V=ASCII(value)」の演算を処理し、
・秘密計算装置４０1〜４０ｎにより、データべース３０１〜３０ｎをアクセスして、
「select * from table-A where V=column-X」を処理する、
ことに対応する。
【０１１６】
中間装置２０は、秘密計算装置４０1〜４０ｎに対して、後半の処理（「select * from table-A where V=column-X」）のみ要求して、前半の処理（V=ASCII(value)）を秘密計算装置４０の集合で実行するという手間をかけなくとも、中間装置２０で実行することができる。アプリケーション装置１０は、これらの処理を一括して、一つのSQLコマンドで中間装置２０に要求することができる。
【０１１７】
本実施形態によれば、以下の作用効果を奏する。
【０１１８】
秘密分散されたデータのデータ形式を変更する処理は大きな計算を必要とするが、秘密分散する前にデータ形式を変換する処理は、容易である。
【０１１９】
また、秘密計算装置４０の集合から中間装置２０に送られるデータ量は、提示されたデータ形式の変換を中間装置２０で行っても、あまり変わらないことが多い。
【０１２０】
中間装置２０がデータ形式を変換する処理は、中間装置２０に開示される情報量を変えない。
【０１２１】
中間装置２０で、アプリケーション装置１０からの要求のデータ処理・演算の前半の変換処理を行うことにより、計算量、通信量、中間装置２０に開示する情報量のいずれも削減、あるいは同等に保つことができる。
【０１２２】
＜実施形態４＞
アプリケーション装置１０があるデータ列の要素の平均値を要求する。この要求は中間装置２０に伝えられる。前記データ列を生成するためのデータは複数のシェアに秘密分散されて、それぞれのシェアは、秘密計算装置４０1〜４０ｎのそれぞれに保存されているものとする。
【０１２３】
中間装置２０は、前記要求を受けると、要求を構成する文を文法解析し、
・データ列の要素の総和を取る処理を秘密計算する処理とし、
・データ列の要素数でこの総和を割る処理を中間装置２０で行う処理、
と判断する。
【０１２４】
中間装置２０は、前記データ列の要素の総和と、データ列の要素数を秘密計算することを、秘密計算装置４０1〜４０ｎに要求する。
【０１２５】
秘密計算装置４０1〜４０ｎは、前記データ列の総和を秘密計算しそのシェアを中間装置２０に送付する。
【０１２６】
秘密計算装置４０1〜４０ｎは、データ列の要素数を計算し、中間装置２０に送付する。
【０１２７】
中間装置２０は、秘密計算装置４０の集合から受け取ったシェアから、前記データ列の要素の総和を計算する。
【０１２８】
中間装置２０は、この総和をデータ列の要素数で割ることで、データ列の平均値を計算し、アプリケーション装置１０に送付する。
【０１２９】
＜具体例４＞
アプリケーション装置１０からのSQL言語によるデータベースへの問い合わせ：
「select AVG(column-X) from table-A」
について、「AVG(column-X) 」が「平均」の要求に対応する。
【０１３０】
この場合、当該問い合わせ（SQLコマンド）を受けた中間装置２０では、
・秘密計算装置４０1〜４０ｎにより、データべース３０１〜３０ｎをアクセスして、
「select SUM(column-X) as S from table-A」（指定したカラムXの合計値をS）と、
「select COUNT(column-X) as N from table-A」（指定したカラムXのレコード数をN）と、
を処理し、
・中間装置２０で、秘密計算装置４０の集合から送信されたＳのシェアとＮのシェアとから、それぞれ、ＳとＮを復元して、Ｓ／Ｎを計算する、
と判断する。
【０１３１】
中間装置２０は、秘密計算装置４０1〜４０ｎに対して、前半の処理（select SUM、select COUNT）のみ要求して、後半の処理（Ｓ／Ｎ）は自身で実行するという手間をかけなくとも、全ての処理を一括して要求することができている。
【０１３２】
本実施形態によれば、以下の作用効果を奏する。
【０１３３】
秘密分散されたデータ列の平均値を秘密計算する処理は大きな計算を必要とするが、総和を計算する処理は、容易である。
【０１３４】
秘密計算装置４０の集合から中間装置２０に送られるデータ量は、総和と要素数の対と、平均値とではあまり変わらない。
【０１３５】
データ数は大きな秘密でない場合が多い。データベースにこれを秘匿するのは難しく、隠すべき情報でない場合も多い。
【０１３６】
中間装置２０で、アプリケーション装置１０からの要求のデータ処理・演算の一部である平均演算を行うことにより、計算量、通信量、中間装置２０に開示する情報量のいずれも削減、あるいは同等に保つことができる。
【０１３７】
なお、上記実施形態において、データベース３０１〜３０ｎに、テーブル名、列名等、データベースのメタデータを秘密分散したシェアを格納する構成としてもよい。この場合、SQL文（select column-X from table-A）を受けた中間装置は、例えばテーブル名（table-A）等の検索文字列を秘密分散したシェアを秘密計算装置４０１〜４０ｎに送信する。
【０１３８】
以上説明したように、上記実施形態によれば、複数の装置の集合にデータを秘密分散して保存し、各装置にデータを隠ぺいしたままアプリケーション装置１０の要求した任意の処理を実行することで、データの漏洩を防ぎつつもその活用を図ることができる。
【０１３９】
アプリケーション装置１０からの処理要求において秘密計算の性能限界を考慮しなくとも、中間装置２０が秘密計算の性能を落とす処理を自動的に受け持つことで、高速な秘密計算による強固なデータ漏洩対策を伴ったデータ活用が実現される。
【０１４０】
なお、上記の特許文献、非特許文献の各開示を、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素（各請求項の各要素、各実施例の各要素、各図面の各要素等を含む）の多様な組み合わせ乃至選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
【符号の説明】
【０１４１】
１０、１１０  アプリーション装置
２０、１２０  中間装置
３０１〜３０ｎ  データベース
４０１〜４０ｎ  秘密計算装置
１２１  秘密鍵
１３０  データベースシステム
１３１  データベース制御手段
１３２  データベース
１３３  暗号プロトコル
２０１  要求解析部
２０２  演算分離部
２０３  シェア生成部
２０４  演算指示部
２０５  復元部
２０６  部分演算処理部
２０７、２１０  受信部
２０８、２０９  送信部
４０１  データベースアクセス部
４０２  シェア受信部
４０３  演算指示受信部
４０４  秘密計算処理部
４０５  シェア送信部
【図１】
2016178291.tif 000004
【図２】
2016178291.tif 000005
【図３】
2016178291.tif 000006
【図４】
2016178291.tif 000007
【国際調査報告】
2016178291.tif 000008
2016178291.tif 000009
2016178291.tif 000010
2016178291.tif 000011