(57)【要約】【課題】秘密計算に係る計算性能を向上させることに寄与する秘密計算装置を提供する。【解決手段】秘密計算装置は、少なくとも２以上の仮想マシンと、当該２以上の仮想マシン間の通信を実現する、仮想マシン間通信手段と、を含む。２以上の仮想マシンのそれぞれは、元データから分割され、分割された状態で暗号化されることによって生成された秘密データを保持している。また、当該２以上の仮想マシンのそれぞれは、仮想マシン間通信手段を介して互いにデータの授受を行いつつ、秘密データを用いた秘密計算を実行する。【選択図】図１
2018087917.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも２以上の仮想マシンと、
前記２以上の仮想マシン間の通信を実現する、仮想マシン間通信手段と、
を含み、
前記２以上の仮想マシンのそれぞれは、元データから分割され、分割された状態で暗号化されることによって生成された秘密データを保持し、
前記２以上の仮想マシンのそれぞれは、前記仮想マシン間通信手段を介して互いにデータの授受を行いつつ、前記秘密データを用いた秘密計算を実行する、秘密計算装置。
【請求項２】
前記仮想マシン間通信手段は、仮想スイッチ又は共有メモリである、請求項１の秘密計算装置。
【請求項３】
前記２以上の仮想マシンのそれぞれは、前記秘密計算をアクセラレータで実行する、請求項１の秘密計算装置。
【請求項４】
前記アクセラレータにおいて、前記２以上の仮想マシンのそれぞれに対応し、前記秘密計算を実行する、複数の秘密計算プロセスが実行され、
前記２以上の仮想マシンのそれぞれは、対応する前記秘密計算プロセスに対して、前記秘密計算の実行を指示する、秘密計算ラッパーを実行する、請求項３の秘密計算装置。
【請求項５】
前記２以上の仮想マシンそれぞれの前記秘密計算ラッパーは、
外部からの指示に応じて、対応する前記秘密計算プロセスに対して前記秘密計算の実行を指示すると共に、
対応する前記秘密計算プロセスによる前記秘密計算の計算結果を、前記外部からの指示の発行元に対して出力する、請求項４の秘密計算装置。
【請求項６】
前記アクセラレータは、前記複数の秘密計算プロセスを独立して実行可能であり、一の前記秘密計算プロセスが他の前記秘密計算プロセスが使用するメモリまたはメモリ領域にアクセスできないように構成されている、請求項４又は５の秘密計算装置。
【請求項７】
前記アクセラレータは、前記複数の秘密計算プロセスが共有する共有メモリを備え、
前記複数の秘密計算プロセスは、前記共有メモリを介して、前記秘密計算に必要なデータの授受を行う、請求項４乃至６のいずれか一項に記載の秘密計算装置。
【請求項８】
前記２以上の仮想マシンそれぞれに対応し、前記秘密計算ラッパーと前記秘密計算プロセス間の通信を中継する、複数の中継手段をさらに備える、請求項４乃至７のいずれか一項に記載の秘密計算装置。
【請求項９】
ユーザが、前記２以上の仮想マシンそれぞれが保持する秘密データへアクセスすることを制限する、権限制限手段をさらに備える、請求項１乃至８のいずれか一項に記載の秘密計算装置。
【請求項１０】
少なくとも２以上の仮想マシンと、
前記２以上の仮想マシン間の通信を実現する、仮想マシン間通信手段と、
を含む秘密計算装置において、
前記２以上の仮想マシンのそれぞれが、元データから分割され、分割された状態で暗号化されることによって生成された秘密データを取得し、
前記２以上の仮想マシンのそれぞれが、前記仮想マシン間通信手段を介して互いにデータの授受を行いつつ、前記秘密データを用いた秘密計算を実行すること、
を含む秘密計算方法。
【請求項１１】
少なくとも２以上の仮想マシンと、
前記２以上の仮想マシン間の通信を実現する、仮想マシン間通信手段と、
を含む秘密計算装置に搭載されたコンピュータに、
前記２以上の仮想マシンのそれぞれが、元データから分割され、分割された状態で暗号化されることによって生成された秘密データを取得する処理と、
前記２以上の仮想マシンのそれぞれが、前記仮想マシン間通信手段を介して互いにデータの授受を行いつつ、前記秘密データを用いた秘密計算を実行する処理と、
を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、秘密計算装置、秘密計算方法及びプログラムに関する。
【背景技術】
【０００２】
非特許文献１に秘密計算（秘密分散）と称される技術が開示されている。非特許文献１に記載された秘密計算方法では、ある体上の値である秘密Ｓを、この体上の多項式ＦでＦ（０）＝Ｓとなるものを使って複数の装置に分散する。その際、装置の数をＮ、秘密の個数がＫ未満であれば、関数の入力や出力に関する情報を得ることができないものとなっている。装置ごとに異なるこの体上の値が割り当てられているとし、ｉ番目の装置に割り当てられている体の値をＸ［ｉ］とする（なお、１≦ｉ≦Ｎとする）。
【０００３】
秘密Ａをこれら複数の装置に分散する際、各ｉ番目の装置にはＦ（０）＝Ａとなるランダムに選ばれた（Ｋ−１）次多項式Ｆに関する、Ｆ［ｉ］：＝Ｆ（Ｘ［ｉ］）を配布する。 秘密Ｂに関しても同様に、Ｇ（０）＝Ｂなる（Ｋ−１）次多項式Ｇに関する、Ｇ［ｉ］：＝Ｇ（Ｘ［ｉ］）を各ｉ番目の装置に配布する。ここで、秘密は、Ｋ個以上の装置が集まれば（Ｋ−１）次多項式を解くことが可能となり、ＦやＧの係数を求めることができ、Ｆ（０）やＧ（０）が計算可能となる。
【０００４】
秘密ＡとＢの加算Ａ＋Ｂを各装置に分散した値により計算するには、各ｉ番目の装置はＨ［ｉ］＝Ｆ［ｉ］＋Ｇ［ｉ］を計算する。この値は、多項式ＦとＧのそれぞれに対応する係数を足したものを係数とする多項式Ｈに、Ｘ［ｉ］を代入して得られた値Ｈ（Ｘ［ｉ］）と等しいので、秘密Ａや秘密Ｂと同様にＡ＋Ｂを複数の装置に分散したものとなる。秘密Ａや秘密Ｂの場合と同様に、Ｋ個以上の装置が集まれば（Ｋ−１）次多項式を解くことが可能で、Ｈの係数を求めることができ、Ｈ（０）を計算することが可能になる。
【０００５】
さらに、Ｋ＊２≦Ｎ＋１という条件の下で、秘密ＡとＢの乗算Ａ＊Ｂを分散した値により計算するには、各ｉ番目の装置は Ｈ［ｉ］＝Ｆ［ｉ］＊Ｇ［ｉ］を計算する。この値は、２Ｋ次多項式Ｈ（Ｘ）＝Ｆ（Ｘ）＊Ｇ（Ｘ）にＸ［ｉ］を代入して得られた値Ｈ（Ｘ［ｉ］）と等しいので、秘密Ａや秘密Ｂと同様にＡ＊Ｂを複数の装置に分散したものとなる。ただし、秘密Ａや秘密Ｂの場合とは異なりＨの次数は２Ｋとなるので、２Ｋ個以上の装置が集まれば２Ｋ次多項式を解くことが可能で、Ｈの係数を求めることができ、Ｈ（０）が計算可能となる。このように、Ａ＊Ｂの分散方法は、秘密Ａや秘密Ｂとは分散のされ方が異なる。
【０００６】
Ａ＊Ｂを秘密Ａや秘密Ｂと同様に、（Ｋ−１）次多項式を用いた形で分散するには、それぞれｉ番目の装置がＨ［ｉ］からＫ−１次多項式Ｇを生成し、他のそれぞれｊ番目の装置にＧ［Ｘ（ｊ）］を配布することで実現できる。このようにして、非特許文献１記載の秘密計算方法によれば、加算と乗算からなる全ての関数が計算可能となる。
【０００７】
なお、非特許文献１に記載の秘密計算方法は、体上の乗算と加算が容易に行われるが、２Ｋ≦Ｎ＋１が条件として存在する。Ｋは２以上でなければ装置単独で秘密を求めることができるため、Ｎは３以上となる。このように、秘密計算では、秘密にしたいデータを複数に分割し、別々の計算機に配置する。
【０００８】
また、秘密計算では、元データに対する計算の結果を、分割されたデータに対して計算することによって行うことを可能としている。つまり、各装置において計算された内容を合わせると、元データに対する計算結果が得られる。なお、原則として、分割された個々のデータからは元データを復元不可能なため、特定の装置（計算機）管理者が信頼できない場合にも堅牢であり、また計算過程でデータを復元する必要が無いため計算途中の漏洩にも堅牢であるといえる。
【０００９】
さらに、特許文献１〜４において、各種の秘密計算に係るアルゴリズム等の技術が開示されている。また、近年、コンピュータが扱うデータの量の増加に伴いコンピューティングシステム内部に含まれるコアやプロセッサの数が増加している。特許文献５には、プロセッサコアを利用するための技法は、オペレーティングシステムから独立的に使用するためにプロセッサコアを隔離することを含む、と記載されている。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】国際公開第２０１６／０４２６９３号
【特許文献２】特開２０１６−１３６１９０号公報
【特許文献３】特開２０１４−２３８７５２号公報
【特許文献４】特開２００６−０３９７９４号公報
【特許文献５】特表２０１３−５１６０２１号公報
【非特許文献】
【００１１】
【非特許文献１】Tal Rabin, Michael Ben-Or, “Verifiable Secret Sharing and Multiparty Protocols with Honest Majority (Extended Abstract)” STOC 1989: P73-P83
【発明の概要】
【発明が解決しようとする課題】
【００１２】
上記説明した秘密計算は、秘密にしたいデータを複数に分割し、各装置に分割したデータを配布する技術である。配布されたデータは、各装置にて個別に管理される。また、分割された秘密データ単独では元データを復元することはできず、複数に分割された秘密データが所定の数以上揃わないとデータの復元は不可能となっている。その結果、複数の装置のうち、特定の装置の管理者が不正にデータを漏洩させても元データが知られることはない。あるいは、特定の装置がクラッキング等の攻撃を受けて秘密データの一部が流出したとしても、元データは安全である。
【００１３】
さらに、上記秘密計算は、分散された秘密データを用いて、元データに対する計算が可能という特徴も有する。このように、上記秘密計算は、元データの機密性を確保しつつ、元データに対する計算も可能という利点を備える技術である。
【００１４】
しかし、上記秘密計算では、分割されたデータに対して計算を行う際、元データに対して計算するよりも計算量が増加することと、装置間の通信が必要になることから、元データを用いて直接計算するよりも計算性能（計算速度）が低下するという問題がある。
【００１５】
本発明は、秘密計算に係る計算性能を向上させることに寄与する、秘密計算装置、秘密計算方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１６】
本発明の第１の視点によれば、少なくとも２以上の仮想マシンと、前記２以上の仮想マシン間の通信を実現する、仮想マシン間通信手段と、を含み、前記２以上の仮想マシンのそれぞれは、元データから分割され、分割された状態で暗号化されることによって生成された秘密データを保持し、前記２以上の仮想マシンのそれぞれは、前記仮想マシン間通信手段を介して互いにデータの授受を行いつつ、前記秘密データを用いた秘密計算を実行する、秘密計算装置が提供される。
【００１７】
本発明の第２の視点によれば、少なくとも２以上の仮想マシンと、前記２以上の仮想マシン間の通信を実現する、仮想マシン間通信手段と、を含む秘密計算装置において、前記２以上の仮想マシンのそれぞれが、元データから分割され、分割された状態で暗号化されることによって生成された秘密データを取得し、前記２以上の仮想マシンのそれぞれが、前記仮想マシン間通信手段を介して互いにデータの授受を行いつつ、前記秘密データを用いた秘密計算を実行すること、を含む秘密計算方法が提供される。
【００１８】
本発明の第３の視点によれば、少なくとも２以上の仮想マシンと、前記２以上の仮想マシン間の通信を実現する、仮想マシン間通信手段と、を含む秘密計算装置に搭載されたコンピュータに、前記２以上の仮想マシンのそれぞれが、元データから分割され、分割された状態で暗号化されることによって生成された秘密データを取得する処理と、前記２以上の仮想マシンのそれぞれが、前記仮想マシン間通信手段を介して互いにデータの授受を行いつつ、前記秘密データを用いた秘密計算を実行する処理と、を実行させるプログラムが提供される。
なお、このプログラムは、コンピュータが読み取り可能な記憶媒体に記録することができる。記憶媒体は、半導体メモリ、ハードディスク、磁気記録媒体、光記録媒体等の非トランジェント（non-transient）なものとすることができる。本発明は、コンピュータプログラム製品として具現することも可能である。
【発明の効果】
【００１９】
本発明の各視点によれば、秘密計算に係る計算性能を向上させることに寄与する、秘密計算装置、秘密計算方法及びプログラムが、提供される。
【図面の簡単な説明】
【００２０】
【図１】一実施形態の概要を説明するための図である。
【図２】第１の実施形態に係る秘密計算システムの概略構成の一例を示す図である。
【図３】第１の実施形態に係る秘密計算システムの動作概略を説明するための図である。
【図４】第１の実施形態に係る秘密計算システムの動作概略を説明するための図である。
【図５】第１の実施形態に係る秘密計算システムの管理者を説明するための図である。
【図６】第１の実施形態に係る秘密計算装置のハードウェア構成の一例を示すブロック図である。
【図７】第１の実施形態に係る秘密計算装置の処理モジュール（ソフトウェア構成）の一例を示す図である。
【図８】第１の実施形態に係る秘密計算装置の処理モジュール（ソフトウェア構成）の一例を示す図である。
【図９】第１の実施形態に係る管理装置の処理モジュールの一例を示す図である。
【図１０】第１の実施形態に係る秘密計算システムの動作の一例を示すシーケンス図である。
【図１１】第２の実施形態に係る秘密計算装置のハードウェア構成の一例を示す図である。
【図１２】第２の実施形態に係るアクセラレータの内部構成の一例を示す図である。
【図１３】第２の実施形態に係る秘密計算装置の処理構成の一例を示す図である。
【図１４】第２の実施形態に係る秘密計算システムの動作の一例を示すシーケンス図である。
【図１５】秘密計算装置の処理構成の他の一例を示す図である。
【発明を実施するための形態】
【００２１】
初めに、一実施形態の概要について説明する。なお、この概要に付記した図面参照符号は、理解を助けるための一例として各要素に便宜上付記したものであり、この概要の記載はなんらの限定を意図するものではない。
【００２２】
一実施形態に係る秘密計算装置１００は、少なくとも２以上の仮想マシン１０１と、当該２以上の仮想マシン間の通信を実現する、仮想マシン間通信部１０２と、を含む（図１参照）。２以上の仮想マシン１０１のそれぞれは、元データから分割され、分割された状態で暗号化されることによって生成された秘密データを保持している。また、当該２以上の仮想マシン１０１のそれぞれは、仮想マシン間通信部１０２を介して互いにデータの授受を行いつつ、秘密データを用いた秘密計算を実行する。
【００２３】
秘密計算装置１００は、内部の仮想マシン１０１にて秘密データを保持する。また、外部から秘密データに関する秘密計算の指示を受け付けると、秘密計算装置１００は、各仮想マシン１０１にて実行されるプロセス（後述するＭＰＣプロセス）を用いて、上記秘密計算を実行する。その際、各仮想マシン１０１は、仮想マシン間通信部１０２（例えば、仮想マシン１０１に提供される共有メモリ）を用いて秘密計算に必要なデータの授受を行う。仮想マシン間通信部１０２は、１台の物理マシン（サーバ）内に構築される通信部であるため、その内部に存在する仮想マシン間の通信は、通常の物理マシン間の通信よりも高速となる。その結果、複数の装置に分散配置された秘密データに対する秘密計算のオーバーヘッド（装置間の通信時間）が減少し、秘密計算に係る計算性能（スループット）が向上する。
【００２４】
以下に具体的な実施の形態について、図面を参照してさらに詳しく説明する。なお、各実施形態において同一構成要素には同一の符号を付し、その説明を省略する。また、各図におけるブロック間の接続線は、双方向及び単方向の双方を含む。一方向矢印については、主たる信号（データ）の流れを模式的に示すものであり、双方向性を排除するものではない。
【００２５】
［第１の実施形態］
第１の実施形態について、図面を用いてより詳細に説明する。
【００２６】
図２は、第１の実施形態に係る秘密計算システムの概略構成の一例を示す図である。図２を参照すると、秘密計算システムは、管理装置１０と、秘密計算装置２０と、を含んで構成される。管理装置１０と秘密計算装置２０は、インターネット等のネットワークにより接続され、相互に通信が可能に構成されている。あるいは、管理装置１０と秘密計算装置２０が直接接続されていてもよい。
【００２７】
管理装置１０は、秘密計算に関する管理を担う装置である。秘密計算装置２０は、秘密計算の実行主体である。秘密計算装置２０の内部には少なくとも２台以上の仮想マシン（ＶＭ；Virtual Machine）が生成される。
【００２８】
［システム動作の概略］
次に、図３、図４を参照しつつ、第１の実施形態に係る秘密計算システムの動作概略を説明する。
【００２９】
図３を参照すると、管理装置１０は、元データ（秘密にしたいデータ）を分割し、当該分割したデータを暗号化することで、複数の秘密データセットを生成する。以降の説明では、説明の便宜上、秘密データセットを単に「秘密データ」と称する場合がある。その後、管理装置１０は、秘密計算装置２０に生成された仮想マシン３０−１〜３０−ｎ（ｎは正の整数、以下同じ）それぞれに対し、生成した秘密データを配布する。
【００３０】
なお、以降の説明において、各構成要素がハイフンにより結合された数字等の符号にて表記されている場合には、ハイフンよりも前の数字により各構成要素を代表するものとする。例えば、仮想マシン３０−１〜３０−ｎを区別する特段の理由がない場合には、単に「仮想マシン３０」と表記する。
【００３１】
仮想マシン３０のそれぞれは、取得した秘密データを自装置に割り当てられた記憶媒体（例えば、仮想ハードディスク等）に格納し、記憶する。秘密計算装置２０に生成された複数の仮想マシン３０のそれぞれは、元データから分割され、分割された状態で暗号化されることによって生成された秘密データを保持する。
【００３２】
次に、図４を参照すると、管理装置１０は、複数の仮想マシン３０それぞれに対し、各装置が保持する秘密データを使用した秘密計算を指示する。その際、仮想マシン３０それぞれにおいて、秘密計算の実行を担うプロセス（アプリケーションプログラム）が上記管理装置１０からの指示を処理する。なお、本願開示において、秘密計算の実行を担うプロセスをＭＰＣ（Multiple Partially Computing）プロセスと表記する。なお、秘密計算の実行を担うプロセスは、秘密計算プロセスとも称される。
【００３３】
複数の仮想マシン３０のそれぞれは、後述する仮想マシン間通信部を介して互いにデータの授受を行いつつ、秘密データを用いた秘密計算を実行する。より具体的には、仮想マシン３０にて起動されるＭＰＣプロセスは、他の仮想マシン３０のＭＰＣプロセスとの間でデータの送受信を行い、秘密計算を完了させる。
【００３４】
複数の仮想マシン３０はそれぞれ、計算結果を管理装置１０に送信する。より具体的には、各仮想マシン３０は、自身の秘密計算による計算結果を、外部から受信した秘密計算の指示の発行元（管理装置１０）に送信する。管理装置１０は、各仮想マシン３０からの計算結果をまとめて、元データに対する計算結果を得る。
【００３５】
なお、管理装置１０における秘密データの生成（元データの分割、暗号化）や仮想マシン３０にて実行される秘密計算（ＭＰＣプロセスが実行する秘密計算）には、例えば、非特許文献１に記載された手法を適用することができる。但し、秘密データの生成や秘密計算方法は、非特許文献１に記載の方法に限定されず、他の方法が用いられてもよい。つまり、元データが複数のデータに分割され機密性が保たれ、暗号化されたデータのまま計算が行えれば、どのような秘密計算方法であってもよい。
【００３６】
また、以降の説明において、秘密計算装置２０に生成された仮想マシン３０が秘密計算に関する処理を実行するものとする。しかし、秘密計算装置２０に生成された複数の仮想マシン３０のうち、一部の仮想マシン３０（少なくとも２台以上の仮想マシン３０）が秘密計算に関する処理を実行すれば十分であることは勿論である。
【００３７】
次に、第１の実施形態に係る秘密計算システムに関わる管理者について説明する。
【００３８】
図５を参照すると、秘密計算システムには、管理装置１０の管理者（以下、データ管理者と表記する）と、秘密計算装置２０の管理者（以下、ホスト管理者と表記する）と、各仮想マシン３０の管理者（以下、仮想マシン管理者と表記する）と、が含まれる。
【００３９】
データ管理者２０１は、管理装置１０のメンテナンスを行う管理者である。また、データ管理者２０１は、管理装置１０を操作して（管理装置１０を用いて）、元データから生成した秘密データを各仮想マシン３０に配布したり、秘密データに対する計算を各仮想マシン３０に指示したりする。データ管理者２０１は、元データを保有する主体であるので、データ保有者と称することもできる。
【００４０】
ホスト管理者２０２は、秘密計算装置２０をメンテナンスする管理者である。例えば、ホスト管理者２０２は、秘密計算装置２０のハードウェアに関する管理業務（例えば、メモリ増強等）や、秘密計算装置２０のソフトウェアに関する管理業務（例えば、アプリケーションのバージョン管理等）を担当する管理者である。
【００４１】
また、ホスト管理者２０２は、仮想マシン３０の生成に関する管理を行う。具体的には、ホスト管理者２０２は、仮想マシン管理者２０３等のユーザから要求された仕様の仮想マシン３０を起動できる環境を秘密計算装置２０に構築する。
【００４２】
なお、ホスト管理者２０２は、仮想マシン３０を起動できる環境を構築し、各仮想マシン３０が起動した後は、秘密計算装置２０における権限が制限される。即ち、ホスト管理者２０２は、１台の物理マシン（ＰＭ；Physical Machine）にＯＳ（Operating System）や仮想化ソフトウェアをインストールし、必要な仮想マシン３０の生成が完了した後は、秘密計算装置２０にて実行できる作業等が制限される。換言すると、必要な仮想マシン３０が起動し、物理マシンが秘密計算装置２０として動作を開始した後（物理マシンが秘密計算装置２０に特化した動作を開始した後）は、ホスト管理者２０２であっても実行できない作業等が生じ得る。具体的には、秘密計算装置２０に内蔵されたメモリに関するコマンド等の実行が制限される。なお、このような制限をホスト管理者２０２に課したとしても、秘密計算装置２０が正常動作を開始した後であれば問題は生じない。ホスト管理者２０２に対する権限を制限する方法については後述する。
【００４３】
仮想マシン管理者２０３は、仮想マシン３０それぞれを管理する管理者である。具体的には、仮想マシン管理者２０３は、自身が管理する仮想マシン３０のリソース（記憶媒体、ＣＰＵ等）の管理やソフトウェア（ＯＳ、アプリケーション）の管理等を行う。また、仮想マシン管理者２０３は、データ管理者２０１（データ保有者）からの依頼により秘密データを管理する主体でもある。
【００４４】
ここで、秘密計算装置２０に生成される仮想マシン３０のそれぞれは、概念的には別個の異なる装置であり、各仮想マシン３０に対し少なくとも１人の管理者が割り当てられる。これは、仮想マシン管理者２０３は、自身が担当する仮想マシン３０に記憶された秘密データの内容を知ることができるが、他の仮想マシン３０に格納された秘密データの内容は知ることができない（他の仮想マシン３０を管理する権限はない）ことを意味する。
【００４５】
［ハードウェア構成］
次に、第１の実施形態に係る秘密計算システムに含まれる各装置のハードウェア構成を説明する。
【００４６】
図６は、第１の実施形態に係る秘密計算装置２０のハードウェア構成の一例を示すブロック図である。
【００４７】
秘密計算装置２０は、いわゆる情報処理装置（コンピュータ）により構成可能であり、例えば、図６に例示する構成を備える。例えば、秘密計算装置２０は、内部バスにより相互に接続される、ＣＰＵ（Central Processing Unit）２１、メモリ２２、ＨＤＤ（Hard Disk Drive）２３及び通信インターフェイスであるＮＩＣ（Network Interface Card）２４等を備える。
【００４８】
但し、図６に示す構成は、秘密計算装置２０のハードウェア構成を限定する趣旨ではない。秘密計算装置２０は、図示しないハードウェアを含んでもよい。また、秘密計算装置２０に含まれるＣＰＵ２１等の数も図６の例示に限定する趣旨ではなく、例えば、複数のＣＰＵ２１が秘密計算装置２０に含まれていてもよい。秘密計算装置２０の機能は、例えば、ＨＤＤ２３に格納されたプログラムをＣＰＵ２１が実行することで実現される。また、そのプログラムは、ネットワークを介してダウンロードするか、あるいは、プログラムを記憶した記憶媒体を用いて、更新することができる。
【００４９】
なお、管理装置１０もコンピュータにより構成可能であり、そのハードウェア構成を秘密計算装置２０と同様とすることができるので、説明を省略する。
【００５０】
［処理モジュール］
次に、第１の実施形態に係る秘密計算システムに含まれる各装置の処理モジュールについて説明する。
【００５１】
図７は、第１の実施形態に係る秘密計算装置２０の処理モジュール（ソフトウェア構成）の一例を示す図である。
【００５２】
図７を参照すると、秘密計算装置２０の起動と共に、ホストＯＳ４０が起動する。当該ホストＯＳ４０上で、仮想化ソフトウェア（図示せず）が実行され、複数の仮想マシン３０が生成される。仮想マシン３０のそれぞれには、仮想化されたハードウェア資源（仮想ＣＰＵ、仮想ＮＩＣ等）が割り当てられる。
【００５３】
各仮想マシン３０には、ゲストＯＳ３１がインストールされ、ゲストＯＳ３１上で種々のアプリケーションが実行される。図７の例では、ゲストＯＳ３１上で実行されるアプリケーションの１つとして、ＭＰＣプロセス３２を表記している。ＭＰＣプロセス３２は、上述のとおり、他の装置（他の仮想マシン３０）と協調して秘密計算を実行するプロセスである。
【００５４】
各仮想マシン３０は、複数の仮想マシン３０間の通信を実現する仮想マシン間通信部４１により、相互に通信を行う。例えば、仮想マシン間通信部４１は仮想スイッチ（vSwitch）であり、各仮想マシン３０は、自装置に割り当てられた仮想ＮＩＣを用いて他の仮想マシン３０と秘密計算に必要なデータの授受を行う。あるいは、図８に示すように、仮想マシン間通信部４１として、共有メモリ４３を使用することもできる。即ち、透過的ページシェアリングと称される手法により、物理メモリ（メモリ２２）の同一メモリページを各仮想マシン３０のゲストＯＳが参照できるように構成することで、秘密計算に必要なデータの授受を実現してもよい。
【００５５】
また、ホスト管理者２０２は、図７、図８に示す権限制限シェル４２を通じて、秘密計算装置２０の管理を行う。権限制限シェル４２は、ホスト管理者２０２を含むユーザが、複数の仮想マシン３０それぞれが保持する秘密データへアクセスすることを制限する。より具体的には、権限制限シェル４２は、ホスト管理者２０２が秘密計算装置２０にて実行できるコマンド等を制限するためのものであり、例えば、予め定めたリスト情報等を用いて実現される。
【００５６】
例えば、ホストＯＳ４０が、ホスト管理者２０２が実行可能なコマンドのリスト（ホワイトリスト）が記載されたファイルを読み込み、当該コマンドの実行に限りホスト管理者２０２に許可することで、権限制限シェル４２を実現する。あるいは、ホストＯＳ４０が、ホスト管理者２０２による実行を禁止するコマンドのリスト（ブラックリスト）が記載されたファイルを読み込み、ホスト管理者２０２による当該コマンドの実行を禁止することで、権限制限シェル４２を実現してもよい。
【００５７】
権限制限シェル４２により制限されるコマンドとしては、各仮想マシン３０に割り当てられたメモリをダンプするコマンド等が想定される。即ち、権限制限シェル４２は、各仮想マシン３０が記憶、管理する秘密データをホスト管理者２０２が取得することを防止するために設けられる。
【００５８】
図９は、第１の実施形態に係る管理装置１０の処理モジュールの一例を示す図である。図９を参照すると、管理装置１０は、通信制御部１１と、データ管理部１２と、秘密計算管理部１３と、を含んで構成される。
【００５９】
通信制御部１１は、ＮＩＣ等を制御して他の装置（秘密計算装置２０）との間の通信を制御する。
【００６０】
データ管理部１２は、元データ及び各仮想マシン３０に配布する秘密データを管理する。具体的には、データ管理部１２は、元データを分割し、暗号化して秘密データを生成し、当該秘密データを各仮想マシン３０に配布する。
【００６１】
秘密計算管理部１３は、各仮想マシン３０にて実行される秘密計算を管理する。具体的には、秘密計算管理部１３は、各仮想マシン３０に秘密計算の実行を指示し、各仮想マシン３０から得られる計算結果に基づき元データに対する計算結果を生成する。
【００６２】
［秘密計算システムの動作］
次に、第１の実施形態に係る秘密計算システムの動作について説明する。
【００６３】
図１０は、第１の実施形態に係る秘密計算システムの動作の一例を示すシーケンス図である。
【００６４】
ステップＳ０１において、管理装置１０から各仮想マシン３０に秘密データが配布され、各仮想マシン３０に送信される。各仮想マシン３０は、取得した秘密データを仮想ハードディスク等に格納し、記憶する。なお、仮想マシン３０における秘密データの取得等はＭＰＣプロセス３２が行ってもよいし、秘密データの取得及び格納を行うプロセスが実行されてもよい。
【００６５】
ステップＳ０２において、管理装置１０は、秘密計算の詳細（計算内容、計算式、使用するデータ等）を伴いつつ、各仮想マシン３０に対し秘密計算を指示する。
【００６６】
当該指示を受けた仮想マシン３０は、自身が管理するデータ（シェア）に対して秘密計算を実行する（ステップＳ０３）。その際、各仮想マシン３０は、他の仮想マシン３０とデータの授受を行いつつ、秘密計算を実行する。より具体的には、各仮想マシン３０のＭＰＣプロセス３２は、仮想スイッチや共有メモリといった仮想マシン間通信部４１を使用してデータを交換し、秘密計算を実行する。このように、各仮想マシン３０のＭＰＣプロセス３２は、秘密計算の計算中に発生するノード間通信を、仮想マシン間通信部４１を用いて実現する。なお、仮想マシン間通信部４１を介して送受信されるデータを用いて元データを復元することはできない。
【００６７】
各仮想マシン３０は、秘密計算が終了すると、計算結果を管理装置１０に送信する（ステップＳ０４−１〜Ｓ０４−ｎ）。
【００６８】
各仮想マシン３０からの計算結果を受け取った管理装置１０は、各装置による計算結果をまとめて元データに対する最終的な計算結果とし、外部に出力する等の動作を行う。
【００６９】
以上のように、第１の実施形態に係る秘密計算システムでは、元来、複数のサーバ等で行われていた秘密計算を１台の物理マシン（サーバ）に生成された複数の仮想マシン３０上で秘密計算を実行する。各仮想マシン３０は、同一の物理マシン上に生成された装置であるため、共有メモリ等を用いることで仮想マシン３０間の通信を高速に行うことができる。その結果、秘密計算に伴うボトルネックが解消され、複数のサーバを用いて秘密計算を実行するよりも高速に計算結果を得ることができる。
【００７０】
なお、仮想マシン３０を秘密計算に用いることで、秘密データの漏洩等のリスクが懸念される。しかし、第１の実施形態に係る秘密計算システムでは、権限制限シェル４２を使用することで実質的なリスク上昇は生じ得ない。つまり、権限制限シェル４２の使用により、ホスト管理者２０２であっても各仮想マシン３０が管理する秘密データにアクセスすることができない。その結果、ホスト管理者２０２は、元データの復元に必要な数の秘密データを取得することはできない。
【００７１】
また、各仮想マシン３０には少なくとも１人の仮想マシン管理者２０３が割り当てられている。各仮想マシン管理者２０３は、自身が管理する仮想マシン３０の秘密データを知ることはできる。あるいは、仮想マシン３０が攻撃を受けて秘密データが外部に漏洩することも生じ得る。つまり、仮想マシン管理者２０３による不正行為等により、秘密データが外部に漏洩する可能性がある。しかしながら、元データを復元するためには、１個の秘密データを知るだけでは足りず、所定の数以上の秘密データが必要となる。この点で、第１の実施形態に係る秘密計算方法によるデータの機密性は、複数の物理マシンによる秘密計算の機密性と相違なく、必要なセキュリティは確保される。
【００７２】
［第２の実施形態］
続いて、第２の実施形態について図面を参照して詳細に説明する。
【００７３】
第１の実施形態では、複数の仮想マシン３０に秘密データを分散配置してデータの機密性を確保すると共に、秘密計算に必要な装置間のデータ授受を仮想スイッチや共有メモリを用いて実現することで、秘密計算の計算速度を向上させている。第２の実施形態では、第１の実施形態と同等の安全性を確保しながら、より秘密計算の計算速度を向上させる秘密計算装置２０ａについて説明する。
【００７４】
［ハードウェア構成］
図１１は、第２の実施形態に係る秘密計算装置２０ａのハードウェア構成の一例を示す図である。
【００７５】
第１の実施形態に係る秘密計算装置２０との相違点は、アクセラレータ２５が追加されている点である。
【００７６】
アクセラレータ２５とＣＰＵ２１は、ＰＣＩｅ（Peripheral Component Interconnect express）等のバスにより接続される。また、秘密計算の用途に応じて、必要なアクセラレータ２５が選択されＣＰＵ２１に接続される。例えば、画像データや映像データを秘密データとして扱い、当該データに対して秘密計算を実行する場合には、ＧＰＵ（Graphics Processing Unit）と称される画像処理に特化したアクセラレータが用いられる。あるいは、汎用のＧＰＵが使用できない場合や、画像処理以外の秘密計算を実行する場合には、ＦＰＧＡ（Field Programmable Gate Array）やベクトル演算に対応した演算装置（ＰＵ；Processing Unit）をアクセラレータ２５として用いてもよい。第２の実施形態では、ベクトル演算に対応した演算装置をアクセラレータ２５として用いるものとして説明する。
【００７７】
アクセラレータ２５は、複数のプロセス（ＭＰＣプロセス）を独立して実行可能であり、一のＭＰＣプロセスが他のＭＰＣプロセスが使用するメモリにアクセスできないように構成されている。具体的には、アクセラレータ２５には、図１２に示すような構造を有するものを使用する。図１２を参照すると、アクセラレータ２５は、少なくともコア２７とデバイスメモリ２８を備える、複数のプロセッサ２６−１〜２６−ｍ（ｍはｎ以上の正の整数、以下同じ）を含んで構成される。
【００７８】
コア２７は、所定の処理を実行するデバイスである。デバイスメモリ２８は、コア２７が上記処理を実行する際に使用する内部メモリである。
【００７９】
各プロセッサ２６は、独立して所定の処理を実行するように構成されている。また、各プロセッサ２６に含まれるコア２７は、対応するデバイスメモリ２８にはアクセス可能に構成されているが、他のプロセッサ２６に含まれるデバイスメモリ２８にはアクセスできない。
【００８０】
なお、図１２に示すアクセラレータ２５は、同種のＦＰＧＡや演算装置を複数用意し、当該複数の演算装置等をバスによりＣＰＵ２１と接続できるように構成することで得られる。例えば、各プロセッサ２６に固有の識別子を設定し、当該識別子を用いて通信対象のプロセッサ２６を指定することで、１系統のバスにより複数のプロセッサ２６とＣＰＵ２１を通信可能とすることができる。
【００８１】
［ソフトウェア構成］
次に、第２の実施形態に係る秘密計算装置２０ａのソフトウェア構成（処理モジュール）について説明する。
【００８２】
図１３は、第２の実施形態に係る秘密計算装置２０ａの処理構成の一例を示す図である。図１３を参照すると、秘密計算装置２０ａには、アクセラレータ２５に対応したアクセラレータドライバ４５がインストールされる。ホストＯＳ４０上で実行されるプロセスは、アクセラレータドライバ４５を介してアクセラレータ２５にアクセス可能となっている。なお、アクセラレータドライバ４５は、アクセラレータ２５のベンダ等から提供されるソフトウェアである。また、ＦＰＧＡ等を用いたアクセラレータ２５を使用する場合には、複数のＭＰＣラッパー３３からの通信を制御するような機能を持ったアクセラレータドライバ４５を開発し、秘密計算装置２０ａにインストールすればよい。
【００８３】
また、第１の実施形態と同様に、ホストＯＳ４０上で仮想化ソフトウェアが実行され、複数の仮想マシン３０−１〜３０−ｎが生成される。複数の仮想マシン３０のそれぞれは、秘密計算をアクセラレータ２５上で実行する。
【００８４】
さらに、ホストＯＳ４０は、仮想マシン３０のそれぞれに対応するプロキシ４４−１〜４４−ｎを生成する。プロキシ４４は、複数の仮想マシン３０それぞれに対応し、後述する秘密計算ラッパーと秘密計算プロセス間の通信を中継する。より詳細には、プロキシ４４は、対応する仮想マシン３０がアクセラレータドライバ４５にアクセスすることを可能とするプロセスである。通常、アクセラレータのようなデバイスは仮想環境に対応していないことが多く、各仮想マシン３０は直接アクセラレータドライバ４５にアクセスすることはできないことが多い。そこで、仮想マシン３０とアクセラレータドライバ４５間のデータ授受を実現するためにプロキシ４４が実行される。
【００８５】
各仮想マシン３０では、第１の実施形態にて実行されていたＭＰＣプロセス３２に替えて、ＭＰＣラッパー３３が実行される。ＭＰＣラッパー３３は、管理装置１０に対し、秘密計算に係るインターフェイスを提供するラッパープロセス（Wrapper Process）である。
【００８６】
第１の実施形態において仮想マシン３０上で実行されていたＭＰＣプロセス３２は、アクセラレータ２５上で実行される。
【００８７】
ここで、各仮想マシン３０にはアクセラレータ２５に含まれるプロセッサ２６が割り当てられている。そして、仮想マシン３０に対応するプロセッサ２６上で、ＭＰＣプロセス５１が実行される。例えば、仮想マシン３０−１にはプロセッサ２６−１が割り当てられ、当該プロセッサ２６−１にてＭＰＣプロセス５１−１が実行される。
【００８８】
ＭＰＣラッパー３３は、上記対応するＭＰＣプロセス５１の動作を管理、制御する。具体的には、ＭＰＣラッパー３３は、管理装置１０から秘密計算の指示を受信すると、当該指示をプロキシ４４及びアクセラレータドライバ４５を介して、ＭＰＣプロセス５１に秘密計算の実行を指示する。なお、ＭＰＣラッパーは、秘密計算ラッパーと称することもできる。
【００８９】
ＭＰＣラッパー３３は、対応するＭＰＣプロセス５１が秘密計算の計算を終了すると、計算結果をアクセラレータドライバ４５及びプロキシ４４を介して取得し、当該取得した計算結果を管理装置１０に転送する。
【００９０】
アクセラレータ２５の各プロセッサ２６にて実行されるＭＰＣプロセス５１は、第１の実施形態にて説明したＭＰＣプロセス３２と実質的に同じ動作を行う。具体的には、各ＭＰＣプロセス５１は、他のＭＰＣプロセス５１とデータを送受信しつつ、秘密計算を実行する。
【００９１】
その際、各ＭＰＣプロセス５１は、アクセラレータ内通信部５２を用いて必要なデータの授受を実現する。例えば、イーサネット（登録商標）のような通信規格により各ＭＰＣプロセス間のデータ授受を実現してもよいし、アクセラレータ２５の内部に共有メモリ（各プロセッサ２６がアクセスできるメモリ）を設け、当該共有メモリをアクセラレータ内通信部５２として用いてもよい。
【００９２】
なお、ＭＰＣプロセス５１は、アクセラレータ２５内部のコア２７がプログラムを実行することで実現される。そのため、当該プログラムをアクセラレータ２５にロードする必要があるが、当該プログラムのロードは各仮想マシン３０に対応するプロキシ４４により行われてもよいし、ＭＰＣラッパー３３により行われてもよい。例えば、プロキシ４４が起動する際に、秘密計算装置２０の記憶媒体に予め格納されたプログラムを読み出し、当該読み出したプログラムをアクセラレータ２５のコア２７にロードしてもよい。
【００９３】
但し、セキュリティの観点からは、プロキシ４４が必要なプログラムをコア２７にロードする形態が好ましい。プロキシ４４が実行されるホストとＭＰＣラッパー３３が実行される仮想マシン３０を比較した場合に、ＭＰＣラッパー３３の方が外部からの攻撃等に対して耐性が低いと想定されるためである。つまり、仮想マシン３０とホスト（仮想マシン３０を提供する物理マシン）では、ホスト側の方がより強固なセキュリティ対策が行われていると考えられる。
【００９４】
［秘密計算システムの動作］
次に、第２の実施形態に係る秘密計算システムの動作について説明する。
【００９５】
図１４は、第２の実施形態に係る秘密計算システムの動作の一例を示すシーケンス図である。なお、図１４に示すシーケンス図において、各コア２７には必要なプログラムがロードされると共に、秘密計算に必要なデータも各プロセッサ２６（デバイスメモリ２８）に格納されているものとする。
【００９６】
ステップＳ１１において、管理装置１０から各仮想マシン３０のＭＰＣラッパー３３に対して秘密計算の指示が行われる。
【００９７】
当該指示を受信したＭＰＣラッパー３３は、対応するプロキシ４４に対して秘密計算に係る指示を送信する（ステップＳ１２）。
【００９８】
各プロキシ４４は、受信した指示（秘密計算に係る指示）を対応するＭＰＣプロセス５１に送信する（ステップＳ１３）。
【００９９】
各ＭＰＣプロセス５１は、他のＭＰＣプロセス５１とデータの交換をしながら、秘密計算を実行する（ステップＳ１４）。なお、各ＭＰＣラッパー３３からＭＰＣプロセス５１に提供する秘密データの全てが、デバイスメモリ２８に格納できない場合には、秘密データを分割し、当該分割した秘密データごとに秘密計算を実行してもよい（分割したデータを入れ替えつつ、秘密計算を実行してもよい）。
【０１００】
秘密計算の終了した各ＭＰＣプロセス５１は、計算結果を対応するプロキシ４４に送信する（ステップＳ１５）。
【０１０１】
計算結果を受信した各プロキシ４４は、当該計算結果を対応するＭＰＣラッパー３３に送信する（ステップＳ１６）。
【０１０２】
各ＭＰＣラッパー３３は、受信した計算結果を管理装置１０に送信する（ステップＳ１７）。
【０１０３】
以上のように、第２の実施形態に係る秘密計算装置２０ａは、アクセラレータ２５を用いて秘密計算を実行する。その結果、第１の実施形態に係る秘密計算装置２０よりも高速に秘密計算を実行することができる。また、秘密計算の実行に使用されるアクセラレータ２５では、複数のＭＰＣプロセス５１が独立して動作し、且つ、使用するメモリが分離されている。つまり、アクセラレータ２５上はプロセスレベルのメモリ空間の分離により、特定のプロセスが他のプロセスが扱うデータを参照不能に構成されている。その結果、アクセラレータ２５を介して秘密データが漏洩する可能性は極めて低くなり、第１の実施形態にて説明した秘密計算（秘密分散）と実質的に同等レベルのセキュリティが確保できる。
【０１０４】
なお、第１及び第２の実施形態にて説明した秘密計算システムは例示であって、システム構成等を限定する趣旨ではない。例えば、ホスト管理者２０２が信頼できる管理者であれば、権限制限シェルは存在しなくともよい。
【０１０５】
あるいは、権限制限シェルに加えて、又は、権限制限シェルに替えて、ホスト管理者２０２の不正行為を監視する機能を設けてもよい。例えば、ログを採取する、カメラでホスト管理者２０２の行動を監視する、２人１組にて秘密計算装置２０を操作する、等を実現する機能を秘密計算装置２０に設けることができる。
【０１０６】
上記実施形態では、管理装置１０から秘密データが各仮想マシン３０に配布され、管理装置１０から秘密計算に係る指示が各仮想マシン３０に送信される場合について説明したが、これらの動作は別々の装置により行われてもよい。つまり、元データを管理し、仮想マシン３０に配布するデータ保持者（装置）と、各仮想マシン３０に秘密計算を指示する指示者（装置）は異なっていてもよい。
【０１０７】
上記実施形態では、ホストＯＳ上で仮想マシンが生成されるホスト型の仮想環境について説明したが、所謂、ハイパーバイザー型の仮想環境やコンテナ型の仮想環境が用いられてもよい。つまり、１台の物理マシン上で複数のＭＰＣプロセスやＭＰＣラッパーが動作可能であり、且つ、これらのプロセスが高速にデータの送受信が可能な環境であれば、どのような仮想環境であってよい。但し、各仮想マシンやコンテナに配布される秘密データが、他の仮想マシン等からアクセスされないことが必要となる。
【０１０８】
上記実施形態では、仮想マシン３０間の通信やプロセッサ２６間の通信方法について言及していないが、上記通信において平文をやり取りしても良いし、送受信するデータを暗号化してもよい。送受信するデータを暗号化する際には、送信側のＭＰＣプロセス３２やＭＰＣプロセス５１は、暗号鍵（例えば、共通鍵や秘密鍵）を用いて送信データを暗号化し、受信側のＭＰＣプロセス３２等は対応する復号鍵（例えば、公開鍵等）を用いて暗号化されたデータを復号する。
【０１０９】
第２の実施形態では、ＭＰＣラッパー３３又はプロキシ４４が、ＭＰＣプロセス５１に係るプログラムをアクセラレータ２５にロードする場合について説明したが、予め必要なプログラムがアクセラレータ２５に実装されている場合には上記のようなロード動作は不要である。
【０１１０】
第２実施形態では、使用するアクセラレータ２５が仮想化に対応していない場合を想定し、プロキシ４４を用いる場合を説明したが、仮想化に対応したアクセラレータ２５を使用可能な場合には、プロキシ４４を使用しなくともよい場合がある。具体的には、ホストＯＳ４０とゲストＯＳ３１の双方に仮想化に対応したアクセラレータドライバ４５をインストールし、当該ドライバを用いて必要なデータの送受信を行えばよい。
【０１１１】
上記実施形態では、１台の物理マシン（１台の秘密計算装置２０）にて秘密計算を完結させる場合について説明したが、秘密計算装置２０と通常の計算機（サーバ；物理マシン）が連携して秘密計算を実行しても良い。例えば、図１５に示すように、仮想マシン３０−１に替えて、計算機６０が秘密計算の一部を担っても良い。図１５に示す場合であっても、計算機６０のＭＰＣラッパー３３ａがアクセラレータドライバ４５にアクセス可能なように、対応するプロキシ４４ａが生成される。ＭＰＣラッパー３３ａは、プロキシ４４ａ及びアクセラレータドライバ４５を介して、アクセラレータ２５にアクセスすればよい。
【０１１２】
上記の実施形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限られない。
［付記１］
上述の第１の視点に係る秘密計算装置のとおりである。
［付記２］
前記仮想マシン間通信手段は、仮想スイッチ又は共有メモリである、付記１の秘密計算装置。
［付記３］
前記２以上の仮想マシンのそれぞれは、前記秘密計算をアクセラレータで実行する、付記１の秘密計算装置。
［付記４］
前記アクセラレータにおいて、前記２以上の仮想マシンのそれぞれに対応し、前記秘密計算を実行する、複数の秘密計算プロセスが実行され、
前記２以上の仮想マシンのそれぞれは、対応する前記秘密計算プロセスに対して、前記秘密計算の実行を指示する、秘密計算ラッパーを実行する、付記３の秘密計算装置。
［付記５］
前記２以上の仮想マシンそれぞれの前記秘密計算ラッパーは、
外部からの指示に応じて、対応する前記秘密計算プロセスに対して前記秘密計算の実行を指示すると共に、
対応する前記秘密計算プロセスによる前記秘密計算の計算結果を、前記外部からの指示の発行元に対して出力する、付記４の秘密計算装置。
［付記６］
前記アクセラレータは、前記複数の秘密計算プロセスを独立して実行可能であり、一の前記秘密計算プロセスが他の前記秘密計算プロセスが使用するメモリまたはメモリ領域にアクセスできないように構成されている、付記４又は５の秘密計算装置。
［付記７］
前記アクセラレータは、前記複数の秘密計算プロセスが共有する共有メモリを備え、
前記複数の秘密計算プロセスは、前記共有メモリを介して、前記秘密計算に必要なデータの授受を行う、付記４乃至６のいずれか一に記載の秘密計算装置。
［付記８］
前記２以上の仮想マシンそれぞれに対応し、前記秘密計算ラッパーと前記秘密計算プロセス間の通信を中継する、複数の中継手段をさらに備える、付記４乃至７のいずれか一に記載の秘密計算装置。
［付記９］
ユーザが、前記２以上の仮想マシンそれぞれが保持する秘密データへアクセスすることを制限する、権限制限手段をさらに備える、付記１乃至８のいずれか一に記載の秘密計算装置。
［付記１０］
上述の第２の視点に係る秘密計算方法のとおりである。
［付記１１］
上述の第３の視点に係るプログラムのとおりである。
なお、付記１０の形態及び付記１１の形態は、付記１の形態と同様に、付記２の形態〜付記９の形態に展開することが可能である。
【０１１３】
なお、引用した上記の特許文献等の各開示は、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の全開示の枠内において種々の開示要素（各請求項の各要素、各実施形態ないし実施例の各要素、各図面の各要素等を含む）の多様な組み合わせ、ないし、選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。
【符号の説明】
【０１１４】
１０  管理装置
１１  通信制御部
１２  データ管理部
１３  秘密計算管理部
２０、２０ａ、２０ｂ、１００  秘密計算装置
２１  ＣＰＵ（Central Processing Unit）
２２  メモリ
２３  ＨＤＤ（Hard Disk Drive）
２４  ＮＩＣ（Network Interface Card）
２５  アクセラレータ
２６、２６−１〜２６−ｍ  プロセッサ
２７、２７−１〜２７−ｍ  コア
２８、２８−１〜２８−ｍ  デバイスメモリ
３０、３０−１〜３０−ｎ、１０１  仮想マシン
３１、３１−１〜３１−ｎ  ゲストＯＳ
３２、３２−１〜３２−ｎ、５１、５１−１〜５１−ｎ  ＭＰＣプロセス
３３、３３−１〜３３−ｎ、３３ａ  ＭＰＣラッパー
４０  ホストＯＳ
４１、１０２  仮想マシン間通信部
４２  権限制限シェル
４３  共有メモリ
４４、４４−１〜４４−ｎ、４４ａ  プロキシ
４５  アクセラレータドライバ
５２  アクセラレータ内通信部
６０  計算機
２０１  データ管理者
２０２  ホスト管理者
２０３、２０３−１〜２０３−ｎ  仮想マシン管理者
【図１】
2018087917.tif 000003
【図２】
2018087917.tif 000004
【図３】
2018087917.tif 000005
【図４】
2018087917.tif 000006
【図５】
2018087917.tif 000007
【図６】
2018087917.tif 000008
【図７】
2018087917.tif 000009
【図８】
2018087917.tif 000010
【図９】
2018087917.tif 000011
【図１０】
2018087917.tif 000012
【図１１】
2018087917.tif 000013
【図１２】
2018087917.tif 000014
【図１３】
2018087917.tif 000015
【図１４】
2018087917.tif 000016
【図１５】
2018087917.tif 000017