(57)【要約】  ユーザ環境に適した秘密計算実行コードを推奨する検証装置を提供する。検証装置は、取得部と、コンパイル部と、検証環境制御部と、評価部と、出力部と、を備える。取得部は、秘密計算用のソースコードを取得する。コンパイル部は、秘密計算コンパイラに設定可能なオプションの組み合わせを変更しつつ、オプションの組み合わせごとにソースコードをコンパイルし、複数の秘密計算実行コードを生成する。検証環境制御部は、複数の秘密計算実行コードから少なくとも１以上の秘密計算実行コードを検証コードとして選択すると共に、当該１以上の検証コードを秘密計算の検証環境に提供する。評価部は、検証環境による１以上の検証コードの実行結果に関する評価指標を生成する。出力部は、１以上の検証コードに対応する評価指標に基づき、複数の秘密計算実行コードから少なくとも１以上の推奨コードを選択して出力する。
2020144768.tif 000002
【特許請求の範囲】
【請求項１】
秘密計算用のソースコードを取得する、取得部と、
秘密計算コンパイラに設定可能なオプションの組み合わせを変更しつつ、オプションの組み合わせごとに前記ソースコードをコンパイルし、複数の秘密計算実行コードを生成する、コンパイル部と、
前記複数の秘密計算実行コードから少なくとも１以上の秘密計算実行コードを検証コードとして選択すると共に、前記１以上の検証コードを秘密計算の検証環境に提供する、検証環境制御部と、
前記検証環境による前記１以上の検証コードの実行結果に関する評価指標を生成する、評価部と、
前記１以上の検証コードに対応する評価指標に基づき、前記複数の秘密計算実行コードから少なくとも１以上の推奨コードを選択して出力する、出力部と、
を備える、検証装置。
【請求項２】
前記取得部は、秘密計算が実行される環境のネットワークに関する情報を取得し、
前記検証環境制御部は、前記ネットワークに関する情報を用いて、前記検証環境に前記秘密計算が実行される環境を再現する、請求項１に記載の検証装置。
【請求項３】
前記検証環境制御部と前記評価部は、前記検証コードの前記検証環境への提供と、前記検証コードの実行結果に関する評価指標の生成と、を繰り返し、
前記出力部は、前記複数の検証コードの実行結果に関する評価指標のうち最も良い性能を示す評価指標に対応する検証コードを前記推奨コードとして選択する、請求項２に記載の検証装置。
【請求項４】
前記出力部は、秘密計算の性能に関する情報に基づき、前記複数の検証コードから少なくとも１以上の前記推奨コードを選択する、請求項１又は２に記載の検証装置。
【請求項５】
前記検証環境制御部は、複数の前記検証環境それぞれに、前記１以上の検証コードを提供し、
前記評価部は、前記複数の検証環境ごとに前記検証コードの実行結果に関する評価指標を生成し、
前記出力部は、前記評価指標に基づいて前記推奨コードを選択すると共に、前記選択した推奨コードに対応する検証環境を推奨環境として出力する、請求項１に記載の検証装置。
【請求項６】
前記コンパイル部は、ユーザからの要求仕様に基づき前記秘密計算コンパイラに設定可能なオプションのうち一部のオプションを固定し、前記複数の秘密計算実行コードを生成する、請求項１乃至５のいずれか一項に記載の検証装置。
【請求項７】
前記検証環境制御部は、複数の前記検証環境それぞれに、前記１以上の検証コードを提供し、
前記評価部は、前記複数の検証環境ごとに前記検証コードの実行結果に関する評価指標を生成し、
前記出力部は、ユーザからの要求仕様に含まれる第１の要求を満たす評価指標を提供する前記検証環境が複数存在する場合、前記要求仕様に含まれる第２の要求に基づき前記複数の検証環境のなかから前記推奨環境を選択し出力する、請求項５に記載の検証装置。
【請求項８】
前記ソースコードを前記秘密計算コンパイラが処理可能なソースコードに変換する、変換部をさらに備える、請求項１乃至７のいずれか一項に記載の検証装置。
【請求項９】
前記変換部は、秘密計算に関する設定情報に基づき、前記ソースコードの変換を行い、
前記コンパイル部は、前記評価指標に基づき前記設定情報を書き換えると共に、前記変換部に対して前記書き換えられた設定情報を用いてソースコードの再変換を指示する、請求項８に記載の検証装置。
【請求項１０】
前記検証環境には、複数の秘密計算サーバが含まれ、
前記検証環境制御部は、前記複数の秘密計算サーバそれぞれに前記１以上の検証コードを提供する、請求項１乃至９のいずれか一項に記載の検証装置。
【請求項１１】
前検証環境には、前記複数の秘密計算サーバと接続された配布・復元サーバが含まれ、
前記配布・復元サーバは、秘密分散された入力データを前記複数の秘密計算サーバに配布すると共に、前記複数の秘密計算サーバによる秘密分散された実行結果を復元し、
前記検証環境制御部は、前記配布・復元サーバを介して前記検証コードの実行結果を取得する、請求項１０に記載の検証装置。
【請求項１２】
複数の秘密計算サーバからなる検証環境と、
前記検証環境と接続された検証装置と、
を含み、
前記検証装置は、
秘密計算用のソースコードを取得する、取得部と、
秘密計算コンパイラに設定可能なオプションの組み合わせを変更しつつ、オプションの組み合わせごとに前記ソースコードをコンパイルし、複数の秘密計算実行コードを生成する、コンパイル部と、
前記複数の秘密計算実行コードから少なくとも１以上の秘密計算実行コードを検証コードとして選択すると共に、前記１以上の検証コードを前記検証環境に提供する、検証環境制御部と、
前記検証環境による前記１以上の検証コードの実行結果に関する評価指標を生成する、評価部と、
前記１以上の検証コードに対応する評価指標に基づき、前記複数の秘密計算実行コードから少なくとも１以上の推奨コードを選択して出力する、出力部と、を備える、秘密計算検証システム。
【請求項１３】
秘密計算用のソースコードを取得するステップと、
秘密計算コンパイラに設定可能なオプションの組み合わせを変更しつつ、オプションの組み合わせごとに前記ソースコードをコンパイルし、複数の秘密計算実行コードを生成するステップと、
前記複数の秘密計算実行コードから少なくとも１以上の秘密計算実行コードを検証コードとして選択すると共に、前記１以上の検証コードを秘密計算の検証環境に提供するステップと、
前記検証環境による前記１以上の検証コードの実行結果に関する評価指標を生成するステップと、
前記１以上の検証コードに対応する評価指標に基づき、前記複数の秘密計算実行コードから少なくとも１以上の推奨コードを選択して出力するステップと、
を含む、秘密計算実行コードの検証方法。
【請求項１４】
コンピュータに、
秘密計算用のソースコードを取得する処理と、
秘密計算コンパイラに設定可能なオプションの組み合わせを変更しつつ、オプションの組み合わせごとに前記ソースコードをコンパイルし、複数の秘密計算実行コードを生成する処理と、
前記複数の秘密計算実行コードから少なくとも１以上の秘密計算実行コードを検証コードとして選択すると共に、前記１以上の検証コードを秘密計算の検証環境に提供する処理と、
前記検証環境による前記１以上の検証コードの実行結果に関する評価指標を生成する処理と、
前記１以上の検証コードに対応する評価指標に基づき、前記複数の秘密計算実行コードから少なくとも１以上の推奨コードを選択して出力する処理と、
を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、検証装置、秘密計算検証システム、秘密計算実行コードの検証方法及びプログラムに関する。
【背景技術】
【０００２】
秘密計算（マルチパーティ計算；ＭＰＣ（Multi Party Computation））と称される技術が存在する（例えば、特許文献１参照）。秘密計算（秘密分散型計算）では、複数のパーティ（秘密計算サーバ）がそれぞれの持つ秘密情報を隠しながら当該秘密情報を用いた種々の計算を行う。【０００３】
各秘密計算サーバは、互いに連携して所定の処理を実行する。その際、各秘密計算サーバに秘密計算を実行させるための秘密計算実行コード（バイトコード）を入力する必要がある。なお、本書において、特段の釈明がなく「バイトコード」又は「コード」と表記した場合には、秘密計算実行コードを示すものとする。【０００４】
バイトコードの生成は、例えば、非特許文献１に記載された秘密計算コンパイラにソースコードを入力することで行われる。秘密計算コンパイラが実行されることで、各秘密計算サーバに入力（配付）するバイトコードが得られる。【０００５】
また、各秘密計算サーバにて秘密計算を実行する際、各サーバ間で通信が発生する。この場合の通信コストは、多くの場合、通信量（サーバ間で送受信されるデータサイズ）と通信ラウンド数（サーバ間の通信回数）で評価される。この通信コストは、各秘密計算サーバにて実行するバイトコードに応じて変化する。具体的には、上記秘密計算コンパイラに入力するソースコードが同一であったとしても、当該コンパイラに指定するオプションが異なれば、異なるバイトコードが生成される。従って、当該生成されたバイトコードごとに通信コストは異なることになる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１８−０４５０１９号公報
【非特許文献】
【０００７】
【非特許文献１】“SCALE-MAMBA Software”、２０１８年１２月１１日、［online］、［平成３０年１２月１１日検索］、インターネット〈URL：https://homes.esat.kuleuven.be/~nsmart/SCALE/〉
【発明の概要】
【発明が解決しようとする課題】
【０００８】
なお、上記先行技術文献の各開示を、本書に引用をもって繰り込むものとする。以下の分析は、本発明者らによってなされたものである。【０００９】
上述のように、秘密計算コンパイラに入力するソースコードが同じであっても、コンパイルオプションによっては生成されるバイトコードが異なる。バイトコードが異なると、通信コストも異なる。ここで、秘密計算により所定のサービス、アプリケーションを実現しようとするユーザの環境（秘密計算サーバが置かれる環境）は、千差万別である。つまり、各サーバ間の通信特性（通信帯域、遅延等）等はユーザ環境に依存する。【００１０】
ユーザ環境の通信特性が異なれば、当該環境で秘密計算を実行する際に最適なバイトコードも異なることになる。より具体的には、通信特性のうち通信帯域が良好なユーザ環境と遅延が良好な（遅延が少ない）ユーザ環境では、最適なバイトコードは異なるのが通常である。各ユーザ環境に適したバイトコードを用いなければ、ユーザが希望する秘密計算の性能が得られない可能性がある。【００１１】
従って、ユーザ環境に適したバイトコードの生成が要望されるが、そのようなバイトコードの生成は容易ではない。上述のように、秘密計算コンパイラに設定するオプションを変更することで性能の異なるバイトコードが得られる。しかし、当該オプションの選択には秘密計算に関する専門的な知見が必要であり、通常のユーザであれば、ある程度に最適なオプションですら選択することが難しい。【００１２】
秘密計算の専門家であれば、ユーザの実行環境における通信経路の特性（例えば、通信帯域、通信遅延）等により、ある程度最適なオプションを予想することが可能である。しかし、専門家であっても、真に最適か否かは、各環境にてバイトコードを実行しなければ正確な判断はできない。例えば、単に通信帯域が「狭い」、「広い」といった条件だけが異なり、他の条件が一致するのであれば、予想された最適なバイトコードと真に最適なバイトコードとの差は小さい可能性が高い。しかしながら、通信帯域と通信遅延は多くの場合、両者が一緒に変化する。そのため、例えば、並列処理における並列度によっては、特定の並列度においてバイトコードの有利、不利が逆転することがある。このような逆転を引き起こす並列度は、実環境にてバイトコードを実行しなければ確認が困難である。【００１３】
このように、通信経路の特性や秘密計算の内容によっては、秘密計算の専門家であっても、ユーザ環境に最適なバイトコードを生成するためのコンパイルオプションを選択することは困難である。【００１４】
本発明は、ユーザ環境に適したバイトコード（秘密計算実行コード）を推奨することに寄与する、検証装置、秘密計算検証システム、秘密計算実行コードの検証方法及びプログラムを提供することを主たる目的とする。
【課題を解決するための手段】
【００１５】
本発明乃至開示の第１の視点によれば、秘密計算用のソースコードを取得する、取得部と、秘密計算コンパイラに設定可能なオプションの組み合わせを変更しつつ、オプションの組み合わせごとに前記ソースコードをコンパイルし、複数の秘密計算実行コードを生成する、コンパイル部と、前記複数の秘密計算実行コードから少なくとも１以上の秘密計算実行コードを検証コードとして選択すると共に、前記１以上の検証コードを秘密計算の検証環境に提供する、検証環境制御部と、前記検証環境による前記１以上の検証コードの実行結果に関する評価指標を生成する、評価部と、前記１以上の検証コードに対応する評価指標に基づき、前記複数の秘密計算実行コードから少なくとも１以上の推奨コードを選択して出力する、出力部と、を備える、検証装置が提供される。【００１６】
本発明乃至開示の第２の視点によれば、複数の秘密計算サーバからなる検証環境と、前記検証環境と接続された検証装置と、を含み、前記検証装置は、秘密計算用のソースコードを取得する、取得部と、秘密計算コンパイラに設定可能なオプションの組み合わせを変更しつつ、オプションの組み合わせごとに前記ソースコードをコンパイルし、複数の秘密計算実行コードを生成する、コンパイル部と、前記複数の秘密計算実行コードから少なくとも１以上の秘密計算実行コードを検証コードとして選択すると共に、前記１以上の検証コードを前記検証環境に提供する、検証環境制御部と、前記検証環境による前記１以上の検証コードの実行結果に関する評価指標を生成する、評価部と、前記１以上の検証コードに対応する評価指標に基づき、前記複数の秘密計算実行コードから少なくとも１以上の推奨コードを選択して出力する、出力部と、を備える、秘密計算検証システムが提供される。【００１７】
本発明乃至開示の第３の視点によれば、秘密計算用のソースコードを取得するステップと、秘密計算コンパイラに設定可能なオプションの組み合わせを変更しつつ、オプションの組み合わせごとに前記ソースコードをコンパイルし、複数の秘密計算実行コードを生成するステップと、前記複数の秘密計算実行コードから少なくとも１以上の秘密計算実行コードを検証コードとして選択すると共に、前記１以上の検証コードを秘密計算の検証環境に提供するステップと、前記検証環境による前記１以上の検証コードの実行結果に関する評価指標を生成するステップと、前記１以上の検証コードに対応する評価指標に基づき、前記複数の秘密計算実行コードから少なくとも１以上の推奨コードを選択して出力するステップと、を含む、秘密計算実行コードの検証方法が提供される。【００１８】
本発明乃至開示の第４の視点によれば、秘密計算用のソースコードを取得する処理と、秘密計算コンパイラに設定可能なオプションの組み合わせを変更しつつ、オプションの組み合わせごとに前記ソースコードをコンパイルし、複数の秘密計算実行コードを生成する処理と、前記複数の秘密計算実行コードから少なくとも１以上の秘密計算実行コードを検証コードとして選択すると共に、前記１以上の検証コードを秘密計算の検証環境に提供する処理と、前記検証環境による前記１以上の検証コードの実行結果に関する評価指標を生成する処理と、前記１以上の検証コードに対応する評価指標に基づき、前記複数の秘密計算実行コードから少なくとも１以上の推奨コードを選択して出力する処理と、を実行させるプログラムが提供される。
なお、このプログラムは、コンピュータが読み取り可能な記憶媒体に記録することができる。記憶媒体は、半導体メモリ、ハードディスク、磁気記録媒体、光記録媒体等の非トランジェント（non-transient）なものとすることができる。本発明は、コンピュータプログラム製品として具現することも可能である。
【発明の効果】
【００１９】
本発明乃至開示の各視点によれば、ユーザ環境に適したバイトコード（秘密計算実行コード）を推奨することに寄与する、検証装置、秘密計算検証システム、秘密計算実行コードの検証方法及びプログラムが、提供される。
【図面の簡単な説明】
【００２０】
【図１】一実施形態の概要を説明するための図である。
【図２】第１の実施形態に係る秘密計算検証システムの概略構成の一例を示す図である。
【図３】第１の実施形態に係る秘密計算サーバの処理構成の一例を示す図である。
【図４】通信環境パラメータの一例を示す図である。
【図５】第１の実施形態に係る検証装置の処理構成の一例を示す図である。
【図６】コンパイルオプションリストの一例を示す図である。
【図７】検証コードと評価指標の結果の一例を示す図である。
【図８】第１の実施形態に係る秘密計算検証システムの動作の一例を示すシーケンス図である。
【図９】第３の実施形態に係る秘密計算検証システムの概略構成の一例を示す図である。
【図１０】第３の実施形態に係る検証装置の処理構成の一例を示す図である。
【図１１】検証環境ごとの検証コードと評価指標の結果の一例を示す図である。
【図１２】第４の実施形態に係る検証装置の処理構成の一例を示す図である。
【図１３】第５の実施形態に係る検証装置の処理構成の一例を示す図である。
【図１４】第６の実施形態に係る検証装置の処理構成の一例を示す図である。
【図１５】第６の実施形態に係る検証装置が入力するソースコードの一例を示す図である。
【図１６】第６の実施形態に係る変換部が参照する設定情報の一例を示す図である。
【図１７】秘密計算専用コードの一例を示す図である。
【図１８】秘密計算専用コードの一例を示す図である。
【図１９】検証装置のハードウェア構成の一例を示す図である。
【図２０】秘密計算検証システムの概略構成の一例を示す図である。
【発明を実施するための形態】
【００２１】
初めに、一実施形態の概要について説明する。なお、この概要に付記した図面参照符号は、理解を助けるための一例として各要素に便宜上付記したものであり、この概要の記載はなんらの限定を意図するものではない。また、各図におけるブロック間の接続線は、双方向及び単方向の双方を含む。一方向矢印については、主たる信号（データ）の流れを模式的に示すものであり、双方向性を排除するものではない。さらに、本願開示に示す回路図、ブロック図、内部構成図、接続図などにおいて、明示は省略するが、入力ポート及び出力ポートが各接続線の入力端及び出力端のそれぞれに存在する。入出力インターフェイスも同様である。
【００２２】
一実施形態に係る検証装置１００は、取得部１０１と、コンパイル部１０２と、検証環境制御部１０３と、評価部１０４と、出力部１０５と、を備える（図１参照）。取得部１０１は、秘密計算用のソースコードを取得する。コンパイル部１０２は、秘密計算コンパイラに設定可能なオプションの組み合わせを変更しつつ、オプションの組み合わせごとにソースコードをコンパイルし、複数の秘密計算実行コードを生成する。検証環境制御部１０３は、複数の秘密計算実行コードから少なくとも１以上の秘密計算実行コードを検証コードとして選択すると共に、当該１以上の検証コードを秘密計算の検証環境に提供する。評価部１０４は、検証環境による１以上の検証コードの実行結果に関する評価指標を生成する。出力部１０５は、１以上の検証コードに対応する評価指標に基づき、複数の秘密計算実行コードから少なくとも１以上の推奨コードを選択して出力する。
【００２３】
検証装置１００は、ユーザから秘密計算用のソースコードを取得し、当該ソースコードをコンパイルする際にコンパイルオプションの組み合わせを変更して複数のバイトコードを生成する。検証装置１００は、当該生成された複数のバイトコードのそれぞれを、ユーザ環境を再現した検証環境に実行させる。検証装置１００は、検証環境における各検証コードの実行結果を評価し、ユーザ環境に適した検証コードを推奨コードとしてユーザに提供する。その結果、コンパイルオプションの組み合わせにより生成可能な複数のバイトコードのうちユーザ環境に適合するバイトコードをユーザに提供できる。即ち、ユーザに対してユーザ環境に適したバイトコード（秘密計算実行コード）の推奨が行える。
【００２４】
以下に具体的な実施の形態について、図面を参照してさらに詳しく説明する。なお、各実施形態において同一構成要素には同一の符号を付し、その説明を省略する。
【００２５】
［第１の実施形態］
第１の実施形態について、図面を用いてより詳細に説明する。
【００２６】
図２は、第１の実施形態に係る秘密計算検証システムの概略構成の一例を示す図である。図２を参照すると、秘密計算検証システムは、複数の秘密計算サーバ１０−１〜１０−３と、検証装置２０と、を含んで構成される。秘密計算サーバ１０−１〜１０−３は検証環境３０を構成すると共に、検証装置２０と接続されている。なお、以降の説明において、秘密計算サーバ１０−１〜１０−３を区別する特別な理由がない場合には、単に「秘密計算サーバ１０」と表記する。
【００２７】
第１の実施形態では、特許文献１に開示されたようなマルチパーティ計算による秘密計算方式を使用するものとして説明を行う。従って、秘密計算検証システムには、少なくとも２台以上の秘密計算サーバ１０が含まれていればよい。また、図２に示すシステム構成は例示であって、秘密計算サーバ１０等の数を限定する趣旨ではないことは勿論である。
【００２８】
秘密計算サーバ１０は、秘密計算を実行するサーバである。秘密計算サーバ１０は、秘密計算を実行する際に必要なデータを検証装置２０から取得する。具体的には、秘密計算サーバ１０は、所定の秘密計算を実現するためのバイトコード（秘密計算実行コード；秘密計算回路が記述されたコード）を検証装置２０から取得する。
【００２９】
以下の説明では、バイトコードの内部に秘密計算の実行に必要なデータ（入力データ、秘密分散するデータ）が含まれているものとする。バイトコードに入力データが含まれない場合には、検証装置２０は、バイトコードと併せて入力データも秘密計算サーバ１０に提供する。
【００３０】
秘密計算サーバ１０は、他のサーバと協働して所定の秘密計算を実行する。３台の秘密計算サーバ１０のうち１台の秘密計算サーバ１０が、秘密計算の実行結果を検証装置２０に送信する。
【００３１】
秘密計算サーバ１０による実行結果には、実行される秘密計算の内容に応じて種々の形式が考えられる。例えば、１セットの入力データを用いた統計値等の算出では、計算結果である「統計値」が上記実行結果に該当する。あるいは、同一の処理を複数の入力セットに繰り返し適用する場合では、１つの入力セットに関する処理が終了した旨が上記実行結果に該当する。例えば、ＲＤＢ（Relational Database）における１クエリの処理が終了した旨の通知が上記実行結果に該当する。
【００３２】
検証装置２０は、ユーザから、秘密計算の処理が記載されたソースコードと、秘密計算に関するユーザの要求仕様（以下、単に要求仕様と表記する）と、を取得する。上述のように、バイトコードの生成に秘密計算コンパイラが使用されるが、当該秘密計算コンパイラが処理可能なソースコードは秘密計算用に作成されたソースコード（以下、秘密計算専用ソースコードと表記する）である。
【００３３】
秘密計算コンパイラは、Ｃ言語やＰｙｔｈｏｎ等の汎用的な言語で記載されたソースコードから直接、バイトコード（秘密計算実行コード）を生成することができず、Ｃ言語等で記載されたソースコードに対して所定の変換、編集作業が必要となる。第１の実施形態では、ユーザは、秘密計算コンパイラが処理可能なソースコード（秘密計算専用ソースコード）を「秘密計算用のソースコード」として検証装置２０に入力する。
【００３４】
検証装置２０が取得する要求仕様は、ユーザによる秘密計算に対する様々な要求を含む。第１の実施形態では、要求仕様に秘密計算が実行される環境（以下、ユーザ環境と表記する）のネットワークに関する情報が含まれる場合を説明する。より具体的には、秘密計算を実行するサーバの台数、各サーバ間の通信回線の特性（通信帯域、通信遅延等）、通信経路の構成（双方向通信可能、片方向、専用回線等）がユーザ環境のネットワークを規定する情報として考えられる。
【００３５】
検証装置２０は、上記ネットワークに関する情報（要求仕様）を用いて、ユーザにより秘密計算が実行される環境を再現（シミュレート）する。その後、検証装置２０は、再現したユーザ環境にてバイトコードを評価し、その結果に基づきユーザ環境（秘密計算の実行を予定しているユーザのネットワーク構成）に最適なコードを「推奨コード」としてユーザに提供する。なお、秘密計算が実行される環境を再現とは、秘密計算が行われる環境（例えば、使用する秘密計算サーバの台数やサーバ間の通信特性）に関して数値化できる特性を別の環境で再現することである。
【００３６】
ここで、検証装置２０は、取得したソースコードをコンパイルする際、コンパイラに設定可能なオプションを可変し、複数のバイトコードを生成する。当該生成された複数のバイトコードはその基礎となったソースコードが同一なので、秘密計算の実行結果は同一となる。但し、コンパイラに設定するオプションが異なるため、生成された各バイトコードのそれぞれでは、通信コスト（サーバ間の通信量、通信回数）等が異なる。通信コストが異なれば、各バイトコードにより実現される秘密計算の性能、即ち、単位時間あたりの処理データ量（スループット）や応答時間（レイテンシ）が異なる。
【００３７】
検証装置２０は、上記生成された複数のバイトコードから１つのコードを選択し、当該選択したコードを「検証コード」として各秘密計算サーバ１０に提供する。
【００３８】
秘密計算サーバ１０は、取得した検証コードを用いて秘密計算を実行し、実行結果を検証装置２０に出力する。検証装置２０と秘密計算サーバ１０は、上記処理（検証コードの提供、実行結果の出力）を生成された複数のバイトコードそれぞれについて繰り返す。
【００３９】
検証装置２０は、取得した実行結果から各バイトコードを評価し、ユーザ環境に最適なバイトコードを「推奨コード」としてユーザに提供する。例えば、検証装置２０は、ユーザが秘密計算の実行を予定しているユーザ環境にて実行可能なバイトコードであって、最も性能の良いコードを「推奨コード」として出力する。
【００４０】
あるいは、検証装置２０は、複数のバイトコードを「推奨コード」として出力してもよい。具体的には、検証装置２０は、複数の検証コードの実行結果に関する評価指標のうち最も良い性能を示す評価指標に対応する検証コードを推奨コードとして選択してもよい。あるいは、検証装置２０は、複数の評価指標に対して閾値処理を施し、所定の性能以上を示す評価指標に対応する検証コードを「推奨コード」として選択してもよい。
【００４１】
なお、推奨コードの提供には、バイトコード自体（バイナリデータ）に限らず、当該推奨コードを生成可能な情報（例えば、コンパイラの種類、バージョン、選択したコンパイルオプション）の提供も含まれる。
【００４２】
このように、検証装置２０は、複数の秘密計算サーバ１０を、生成された複数のバイトコードそれぞれを評価するための「検証環境」として利用する。即ち、検証環境３０とは、検証装置２０により生成されたバイトコード（秘密計算用回路）の性能を評価するための環境と言える。
【００４３】
検証装置２０は、要求仕様に含まれる情報を用いてユーザ環境を再現（シミュレート）するための「通信環境パラメータ」を生成し、当該パラメータを秘密計算サーバ１０に設定することで、検証環境３０を構築する。つまり、通信環境パラメータは、ユーザ環境を再現するための情報であって、例えば、サーバ間の通信帯域、通信遅延に関する情報を含む。
【００４４】
続いて、秘密計算検証システムに含まれる各装置について説明する。
【００４５】
［秘密計算サーバ］
図３は、第１の実施形態に係る秘密計算サーバ１０の処理構成（処理モジュール）の一例を示す図である。図３を参照すると、秘密計算サーバ１０は、通信制御部２０１と、秘密計算実行部２０２と、記憶部２０３と、を含んで構成される。
【００４６】
通信制御部２０１は、他の装置との間の通信を制御する手段である。通信制御部２０１は、検証装置２０から取得する検証コードを記憶部２０３に格納する。通信制御部２０１は、秘密計算実行部２０２が生成するデータ（例えば、乗算処理を完了させるためのデータ）を他の秘密計算サーバ１０に向けて送信する。
【００４７】
通信制御部２０１は、検証装置２０から通信環境パラメータを取得する。通信制御部２０１は、当該取得した通信環境パラメータを用いて、ユーザが秘密計算を実行する予定の環境（ユーザ環境）を再現する。
【００４８】
例えば、秘密計算サーバ１０に対して、図４に示すような通信環境パラメータが入力されたものとする。この場合、秘密計算サーバ１０−１は、秘密計算サーバ１０−２との間の通信帯域を１０Ｍｂｐｓ（メガビット毎秒）、通信遅延を１００ｍｓ（ミリ秒）に設定する。また、秘密計算サーバ１０−１は、秘密計算サーバ１０−３との間の通信帯域を１００Ｍｂｐｓ、通信遅延を１０ｍｓに設定する。
【００４９】
なお、各秘密計算サーバ１０間の本来の通信経路は極めて高い性能（理想的な特性）を有するものとする。各秘密計算サーバ１０の通信制御部２０１は、理想的な特性を有する通信経路を通信環境パラメータにて指定された特性に制限することで、ユーザが秘密計算の実行を予定している環境を再現（シミュレート）する。
【００５０】
通信帯域の再現（制限）は、ＮＩＣ（Network Interface Card）等のハードウェアを活用して実現しても良いし、ソフトウェアにより再現してもよい。例えば、ハードウェアを活用する場合には、通信環境パラメータに合わせてＮＩＣに設定する通信帯域（１０Ｍｂｐｓ、１００Ｍｂｐｓ等）を選択すればよい。また、通信遅延に関しても同様に、ハードウェアを活用して実現してもよいし、ソフトウェアにより実現してもよい。例えば、１つのデータを送信してから次のデータを送信するまでの時間を調整することで、通信環境パラメータに記載された「通信遅延」を実現してもよい。
【００５１】
なお、通信環境パラメータに「片方向」が設定されていれば、当該パラメータを取得した秘密計算サーバ１０は、対象となる秘密計算サーバ１０に向けてデータを送信しなければよい。あるいは、通信環境パラメータとして「専用線」が設定されていれば、当該パラメータを取得した秘密計算サーバ１０は、本来の理想的な特性を非制限とすることで「専用線」を再現してもよい。
【００５２】
図３に説明を戻す。秘密計算実行部２０２は、秘密計算を実行する。秘密計算実行部２０２は、記憶部２０３に格納されたバイトコード（検証コード）による秘密計算を実行する。
【００５３】
記憶部２０３は、上記バイトコードに加え、種々の情報を保持する。具体的には、記憶部２０３は、自装置が何番目の「パーティ」として動作するかを規定する情報や他の秘密計算サーバ（他のパーティ）に関する情報（例えば、ＩＰ（Internet protocol）アドレス等）を記憶する。
【００５４】
秘密計算実行部２０２は、記憶部２０３に格納された情報を用いて秘密計算を行う。秘密計算実行部２０２は、秘密分散データ生成部２１１と、秘密計算部２１２と、秘密分散データ復元部２１３とからなるサブモジュールを含む。
【００５５】
秘密分散データ生成部２１１は、秘密分散実行コードに「自装置にて入力データを秘密分散して他のサーバに配付する」旨の記述がある場合に、動作するモジュールである。自装置のパーティ番号（識別子）と秘密分散実行コードにて指定されたパーティ番号が一致する秘密計算サーバ１０の秘密分散データ生成部２１１は、入力データを秘密分散して秘密情報（シェア情報）を他の秘密計算サーバ１０に配付する。
【００５６】
秘密計算部２１２は、バイトコードを実行する。秘密分散を利用したマルチパーティ計算では、シェア情報の加算（減算）に関しては自装置内部で閉じた演算を行う（ローカルで計算する）。対して、シェア情報の乗算（除算）に関しては、自装置の計算結果が他の秘密計算サーバ１０に送信され、処理が進められる。
【００５７】
秘密分散データ復元部２１３は、秘密分散実行コードに「自装置にて計算結果を復号する」旨の記述がある場合に、動作するモジュールである。自装置のパーティ番号と秘密分散実行コードにて指定されたパーティ番号が一致する秘密計算サーバ１０の秘密分散データ復元部２１３は、各サーバに分散している計算結果を収集し、復元する。秘密分散データ復元部２１３は、復元した計算結果を検証装置２０に送信する。
【００５８】
［検証装置］
図５は、第１の実施形態に係る検証装置２０の処理構成（処理モジュール）の一例を示す図である。図５を参照すると、検証装置２０は、通信制御部３０１と、取得部３０２と、コンパイル部３０３と、検証環境制御部３０４と、評価部３０５と、出力部３０６と、記憶部３０７と、を含んで構成される。
【００５９】
通信制御部３０１は、他の装置（秘密計算サーバ１０）との間の通信を制御する。
【００６０】
取得部３０２は、ユーザがソースコードや要求仕様を入力するためのＧＵＩ（Graphical User Interface）を生成する。取得部３０２は、取得したソースコード及び要求仕様を記憶部３０７に格納する。
【００６１】
コンパイル部３０３は、例えば、非特許文献１に開示されたプログラムにより実現される。コンパイル部３０３は、秘密計算コンパイラに設定可能なオプションの組み合わせを変更しつつ、オプションの組み合わせごとにソースコードをコンパイルして、複数の秘密計算実行コード（バイトコード）を生成する。
【００６２】
具体的には、コンパイル部３０３は、記憶部３０７に予め格納されたコンパイルオプションリストを参照し、当該リストに記載されたコンパイルオプションの組み合わせを網羅するように使用するオプションを変更しつつ、ソースコードのコンパイルを行う。なお、検証装置２０が、コンパイルオプションリストが格納されたデータベースサーバ等にアクセスして当該リストを取得してもよい。
【００６３】
図６は、コンパイルオプションリストの一例を示す図である。図６に示すように、コンパイラに設定可能なオプションの一覧がコンパイルオプションリストに記載されている。
【００６４】
例えば、図６に示すように、コンパイルオプションには、「コードサイズ」に関するオプションが存在し、当該オプションを有効にすると、サイズの小さいバイトコードが生成される。あるいは、「型変換」に関するオプションも存在する。秘密計算には、ビット分解と称される「型変換処理」が存在する。当該ビット分解を実現する際に、単位時間あたりの処理件数を優先するか、単一処理に関する応答時間を優先するか、に関するオプションが存在する。
【００６５】
なお、図６に示すコンパイルオプションは例示であって、他にも多数のオプションが存在する。例えば、「固定（浮動）小数点における精度に関するオプション」や「安全性に関するオプション」が存在する。なお、安全性に関するオプションとは、不正検知を可能とするか否かを定めるオプションである。
【００６６】
あるいは、コンパイルオプションには、使用する秘密計算方式自体の選択が含まれていてもよい。この場合、第１の秘密計算方式用のコンパイルオプションリストと、第２の秘密計算方式用のコンパイルオプションリストと、を用意すればよい。例えば、第１の秘密計算方式は、秘密にする情報Ｓから秘密計算に参加するパーティに配付するシェア（秘密分散情報）を生成する際の法Ｎ（Ｎは自然数、以下同じ）が２の冪数である方式である。第２の秘密計算方式は、上記法Ｎが素数である方式である。
【００６７】
コンパイル部３０３は、ソースコードをコンパイルすることにより生成された複数のバイトコードを検証環境制御部３０４に引き渡す。
【００６８】
なお、上述のように、コンパイル部３０３は、非特許文献１に開示されたプログラムにより実現できるので詳細な説明は省略するが、概略以下のような処理を実行する。
【００６９】
秘密計算では乗算を完結させるために他の秘密計算サーバ１０との間の通信が必要となる。他の秘密計算サーバ１０との間の通信は、秘密計算の速度が低下する要因となる。コンパイル部３０３は、上記通信の回数が限りなく少なくなるようにバイトコードを生成する。具体的には、コンパイル部３０３は、乗算に伴うサーバ間の通信回数が少なくなるようにソースコードに記載された乗算の順序を変更する等の処理を行う。
【００７０】
なお、コンパイル部３０３は、例えば、秘密計算専用ソースコードがＣ言語を基本として記載されていれば、上記乗算に関する処理を行いつつＣ言語コンパイラとして動作する。コンパイル部３０３は、他の言語に関しても同様に、秘密計算専用ソースコードに用いられている言語に対応するコンパイルをしつつ、上記乗算に関する処理（バイトコード生成）を行う。なお、システム管理者が、秘密計算専用ソースコードの言語を予め検証装置２０に入力してもよいし、コンパイル部３０３が使用されている言語を自動判別してもよい。
【００７１】
検証環境制御部３０４は、検証環境３０を制御する。具体的には、検証環境制御部３０４は、複数のバイトコードから少なくとも１以上のバイトコードを検証コードとして選択すると共に、当該１以上の検証コードを検証環境３０に提供する。例えば、検証環境制御部３０４は、生成された複数のバイトコードのうち１つを選択し、「検証コード」として各秘密計算サーバ１０に送信する。
【００７２】
また、検証環境制御部３０４は、ユーザから取得した要求仕様に含まれるユーザ環境のネットワークに関する情報に基づき「通信環境パラメータ」を生成し、当該生成した通信環境パラメータを各秘密計算サーバ１０に送信する。
【００７３】
検証環境制御部３０４は、３台の秘密計算サーバ１０のうちの１台から実行結果を取得する。検証環境制御部３０４は、取得した実行結果と対応する検証コードを対応づけて記憶部３０７に格納する。検証環境制御部３０４は、上記処理（検証コードの送信、実行結果の格納）をコンパイル部３０３により生成された全てのバイトコードについて繰り返す。
【００７４】
評価部３０５は、記憶部３０７に格納された検証コードごとの実行結果に基づき、各検証コードによる実行結果に関する評価指標を生成する。例えば、評価部３０５は、各検証コードについて、単位時間（例えば、１秒間）あたりの処理件数（スループット）を上記評価指標として生成する。あるいは、評価部３０５は、検証コードを出力してから実行結果を得るまでの応答時間（レイテンシ）を上記評価指標として生成する。
【００７５】
なお、上記評価指標の信頼度を高めるため、評価部３０５は、同一の検証コードによる複数の実行結果に対する平均値、中央値、最頻値等を計算して上記評価指標としてもよい。
【００７６】
図７は、評価部３０５により生成された検証コードと評価指標（スループット）の結果の一例を示す図である。図７に示すように、評価部３０５は、検証コードごとの評価指標を計算しその結果を検証コードと対応づけて管理する。なお、図７には、各検証コード生成の基礎となったコンパイルオプション（コード生成時に選択されたオプション）も併記している。
【００７７】
このように、評価部３０５は、少なくとも、検証コードと当該検証コードに対応する評価指標を対応づけた情報を生成する。
【００７８】
出力部３０６は、各検証コードの評価指標に基づき、複数の秘密計算実行コードから少なくとも１以上の推奨コードを選択して出力する。より具体的には、出力部３０６は、コンパイル部３０３により生成された複数のバイトコード（検証コード）のうち性能が最も良いコードを選択する。例えば、評価指標として応答時間（レイテンシ）が算出されていれば、出力部３０６は、応答時間の最も短いバイトコードを選択する。あるいは、評価指標として単位時間あたりの処理件数（スループット）が算出されていれば、出力部３０６は、処理件数の最も多いバイトコードを選択する。なお、出力部３０６は、最も性能の良いコードを選択することに変え、一定の条件を満たしたコードのいずれかを所定の基準に基づき選択してもよい。例えば、評価指標が応答時間（レイテンシ）であれば、レイテンシが一定時間以下となるコードの中から所定の基準に従って１つのコードが選択されてもよい。あるいは、上記所定の基準は特に定めず、レイテンシが一定時間以下となるコードの中から任意のコードを選択してもよい（ランダムにコードを選択してもよい）。
【００７９】
出力部３０６は、選択したバイトコードを「推奨コード」として外部に出力する。例えば、出力部３０６は、ＵＳＢ（Universal Serial Bus）メモリ等の外部記憶装置に推奨コードを書き込む。あるいは、出力部３０６は、推奨コードのファイル名や格納場所に関する情報を液晶モニタ等に表示しても良いし、ネットワークを介して他の装置に推奨コードを送信してもよい。
【００８０】
［システムの動作］
次に、図８を参照しつつ、第１の実施形態に係る秘密計算検証システムの動作を説明する。
【００８１】
はじめに、検証装置２０は、ユーザから「ソースコード」、「要求仕様」を取得する（ステップＳ０１）。
【００８２】
検証装置２０は、要求仕様に含まれる情報から「通信環境パラメータ」を生成し、当該パラメータを各秘密計算サーバ１０に送信する（ステップＳ０２）。
【００８３】
検証装置２０は、秘密計算コンパイラに設定可能なコンパイルオプションの組み合わせを網羅しつつ、上記取得したソースコードをコンパイルし、複数のバイトコードを生成する（ステップＳ０３）。
【００８４】
検証装置２０は、生成された複数のバイトコードから１つのコードを選択し、「検証コード」として各秘密計算サーバ１０に送信する（ステップＳ０４）。
【００８５】
各秘密計算サーバ１０は、取得した検証コードを用いて秘密計算を実行する（ステップＳ１１）。
【００８６】
３台の秘密計算サーバ１０のうち秘密分散されたデータを複合するサーバ（代表サーバ）が、秘密計算の実行結果を検証装置２０に送信する（ステップＳ１２）。
【００８７】
検証装置２０と秘密計算サーバ１０は、ステップＳ０４、ステップＳ１１、Ｓ１２の処理を全てのバイトコードについて繰り返す。
【００８８】
検証装置２０は、各検証コードについて評価指標を生成する（ステップＳ０５）。
【００８９】
検証装置２０は、各検証コードの評価指標に基づき、推奨コードを選択する（ステップＳ０６）。例えば、検証装置２０は、最も性能の良い（高スループット、又は、低レイテンシ）検証コードを推奨コードとして選択する。
【００９０】
検証装置２０は、選択された推奨コードを外部に出力する（ステップＳ０７）。
【００９１】
［第１の実施形態の変形例］
第１の実施形態では、検証環境３０として、検証コードによる性能を検証するための専用環境を利用している。しかし、検証環境３０は、専用の環境でなくともよい。
【００９２】
例えば、ユーザが実際に秘密計算の実行を予定しているオンプレミスな環境（ユーザ所有のサーバ、設備）が検証環境３０として使用されても良い。つまり、検証装置２０は、実際にユーザが秘密計算を実行することを予定している環境にて各バイトコードの検証を行い最適なバイトコード（推奨コード）を決定してもよい。
【００９３】
あるいは、ユーザが秘密計算の実行を予定しているクラウド環境が検証環境として使用されても良い。
【００９４】
このように、種々のコンパイルオプションを組み合わせて生成された複数のバイトコードを検証するための環境は、専用に用意された環境であっても、ユーザの実使用環境（オンプレミスな環境、クラウド環境）であってもよい。即ち、バイトコードを検証するための環境と実際に秘密計算が実行される環境は同じであっても異なっていてもよい。
【００９５】
なお、オンプレミスな環境や事業者が提供するクラウド環境を「検証環境」として利用する場合には、当該環境の再現は不要であるので「通信環境パラメータ」を用いたユーザ環境の再現（シミュレート）は不要である。なお、上記説明では、検証装置２０が秘密計算サーバ１０に「通信環境パラメータ」を設定することで、ユーザ環境を再現する場合を説明したが、秘密計算サーバ１０に予め上記通信環境パラメータが設定されていてもよい。つまり、検証装置２０は、ユーザからユーザ環境のネットワークに関する情報を「要求仕様」として取得しなくとも、当該ユーザ環境を再現するための情報が予め秘密計算サーバ１０に設定されていればよい。
【００９６】
ここで、ユーザ環境がシミュレートされた環境下で選択された推奨コードよりも、ユーザの実環境にて選択された推奨コードの方がより適切である可能性がある。そのため、時間的制約や使用権限等の制約がなければ、ユーザが秘密計算の実行を予定している実環境下にて推奨コードが決定されることが望ましい。
【００９７】
以上のように、第１の実施形態では、検証装置２０が、ユーザから秘密計算用のソースコードを取得し、当該ソースコードをコンパイルする際にコンパイルオプションの組み合わせを変更して複数のバイトコードを生成する。検証装置２０は、当該生成された複数のバイトコードのそれぞれを、ユーザが秘密計算の実行を予定している環境を再現した検証環境３０に実行させる。検証装置２０は、検証環境３０における各検証コードの実行結果を評価し、ユーザ環境に適した検証コード（バイトコード）を推奨コードとしてユーザに提供（外部に出力）する。その結果、コンパイルオプションの組み合わせにより生成可能な複数のバイトコードのうちユーザ環境（ユーザのネットワーク構成）に適合するバイトコードを確実に検出することができる。即ち、ユーザ環境に適したバイトコード（秘密計算実行コード）の推奨が行える。
【００９８】
［第２の実施形態］
続いて、第２の実施形態について図面を参照して詳細に説明する。
【００９９】
第１の実施形態では、要求仕様にユーザ環境を再現するための情報（ユーザ環境のネットワークに関する情報）が含まれる場合を説明したが、要求仕様には他の情報も含まれ得る。第２の実施形態では、ユーザ環境のネットワーク構成以外の情報が要求仕様に含まれる場合について説明する。
【０１００】
なお、第２の実施形態について、システムの構成や各装置の処理構成は第１の実施形態と同一とすることができるので、図２、図３、図５等に相当する説明は省略する。
【０１０１】
例えば、秘密計算に関する性能（スループット、レイテンシ）に関する情報が要求仕様に含まれる場合が考えられる。例えば、「１秒間に１００件以上のスループット」の実現が要求仕様となることも考えられる。あるいは、「レイテンシが１０ｓ以下」といった条件を要求仕様とすることも考えられる。
【０１０２】
第２の実施形態に係る検証装置２０は、このような要求仕様に適合する検証コードを選択し、当該検証コードを「推奨コード」としてユーザに提供してもよい。例えば、ユーザから取得した要求仕様が「１秒間に１００件以上のスループット」という内容であって、各検証コードの評価指標が図７の場合を考える。この場合、図７を参照すると、コード２又はコード３が上記要求仕様を満たすので、検証装置２０は、いずれか一方、又は、両方を「推奨コード」としてユーザに提供する。
【０１０３】
なお、第２の実施形態では、第１の実施形態と同様に「通信環境パラメータ」を生成するための情報と上記性能に関する情報が要求仕様に含まれていてもよいし、上記性能に関する情報だけが要求仕様に含まれていてもよい。つまり、ユーザ環境は予め検証環境３０にて再現されており、当該検証環境３０で実行可能なバイトコードのうちユーザからの要求仕様を満たす１以上のバイトコード（検証コード）が推奨コードとして提供されてもよい。
【０１０４】
以上のように、第２の実施形態では、出力部３０６は、秘密計算の性能に関する情報（要求仕様）に基づき、複数の検証コードから少なくとも１以上の推奨コードを選択する。このように、要求仕様に秘密計算の性能に関する情報を含ませることで、ユーザ環境にて実行可能なバイトコードのうちユーザの要求を満たすバイトコードを抽出して「推奨コード」としてユーザに提供することができる。
【０１０５】
［第３の実施形態］
続いて、第３の実施形態について図面を参照して詳細に説明する。
【０１０６】
第３の実施形態では、複数の検証環境４０を用いて推奨コード及び推奨環境を決定する場合について説明する。なお、第３の実施形態では、通信環境パラメータを用いてユーザ環境を再現することはしない。
【０１０７】
図９は、第３の実施形態に係る秘密計算検証システムの概略構成の一例を示す図である。図９を参照すると、複数の検証環境４０が秘密計算検証システムに含まれている。
【０１０８】
各検証環境４０は、例えば、ＥＣ（Electronic Commerce）事業者等がサービスを提供するクラウドシステムが該当する。
【０１０９】
第３の実施形態では、検証環境であるクラウドシステムにより提供されるインスタンス（仮想マシン）を第１の実施形態にて説明した秘密計算サーバ１０として扱う。また、複数の検証環境４０それぞれは、異なる特性を持っている。例えば、各検証環境４０により提供されるインスタンス（仮想マシン）の性能や、インスタンス間の通信特性がそれぞれ異なる。従って、各検証環境４０に含まれる秘密計算サーバ１０に対して、同じバイトコード（検証コード）を提供したとしても当該コードにより得られる秘密計算の性能は異なるものとなる。例えば、検証環境４０−１と検証環境４０−２に同じ検証コードを提供して秘密計算を実行させたとしても、その性能（スループット、レイテンシ）は互いに異なることがある。
【０１１０】
上述のように、要求仕様には、秘密計算に関する性能（スループット、レイテンシ）に関する情報が含まれる。第３の実施形態に係る検証装置２０ａは、このような要求仕様に適合する検証環境４０を選択し、当該選択した検証環境４０を「推奨環境」としてユーザに提供する。また、検証装置２０ａは、推奨環境下にて秘密計算の実行が推奨されるバイトコードを「推奨コード」としてユーザに提供する。
【０１１１】
例えば、図９において、ユーザから要求された秘密計算の性能（スループット、レイテンシ）を満足する検証環境が検証環境４０−１であれば、当該検証環境４０−１にて実行可能なバイトコードのうち性能が最も良いコードが１つ選択される。この場合、検証装置２０ａは、要求仕様を満たす秘密計算の実行環境として「検証環境（クラウド）４０−１」を推奨すると共に、当該環境下での推奨コードを出力する。
【０１１２】
図１０は、第３の実施形態に係る検証装置２０ａの処理構成（処理モジュール）の一例を示す図である。図５に示す検証装置２０と図１０に示す検証装置２０ａでは、検証環境制御部３０４、評価部３０５、出力部３０６の動作が異なる。以下、相違点について中心に説明する。
【０１１３】
検証環境制御部３０４ａは、複数の検証環境４０それぞれに対して検証コードを送信し、当該検証コードによる秘密計算の実行結果を得る。検証環境制御部３０４ａは、１つの検証環境４０に関する制御（検証コードの提供、実行結果の収集）が終了した後に、次の検証環境４０を制御しても良いし、２以上の検証環境４０を並列に制御してもよい。
【０１１４】
検証環境制御部３０４ａは、コンパイル部３０３が生成した複数のバイトコード（検証コード）を漏れなく各検証環境４０に提供し、その実行結果を収集できればどのような態様で検証環境４０を制御してもよい。
【０１１５】
評価部３０５ａの基本的動作は第１の実施形態にて説明した評価部３０５の動作と同じである。評価部３０５ａは、複数の検証環境４０ごとに検証コードの実行結果に関する評価指標を生成する。具体的には、評価部３０５ａは、各検証環境４０について、図７に示すような情報を生成する。
【０１１６】
出力部３０６ａは、評価部３０５ａが生成した評価指標に基づいて推奨コードを選択すると共に、選択した推奨コードに対応する検証環境４０を「推奨環境」として出力する。具体的には、出力部３０６ａは、検証環境４０ごとに最も性能のよい検証コードを選出する。例えば、出力部３０６ａは、図１１に示すような検証環境４０ごとの評価結果（最も性能の良い検証コード）を抽出する。なお、図１１には、ユーザからの要求仕様に「スループットが１００件以上」という条件が含まれる場合の結果を示す。
【０１１７】
図１１に示すように、検証環境４０−１及び４０−２のそれぞれには、上記要求仕様を満たす検証コードが存在する。対して、検証環境４０−３には、ユーザからの要求仕様を満たす検証コードは存在しない。
【０１１８】
図１１の例では、検証環境４０−２の実行結果が最も良い結果であるので、出力部３０６ａは、検証環境４０−２を「推奨環境」、当該環境下で最も良い性能が得られるコード２１を「推奨コード」に定める。出力部３０６ａは、これらの情報（推奨環境、推奨コード）をユーザに提供する。
【０１１９】
あるいは、要求仕様に具体的な性能値ではなく、「性能重視」といった内容の場合も考えられる。この場合、出力部３０６ａは、性能が最も良い検証環境４０−２を推奨環境としてユーザに提供する。
【０１２０】
また、ユーザから取得する要求仕様は、性能に関する情報を含まない場合もある。例えば、要求仕様が「コスト重視」という内容で性能に関する情報を含まない場合が考えられる。このような場合、出力部３０６ａは、ユーザから取得したソースコードに係る秘密計算の実行が可能な検証環境４０のうちコストが最も低い環境を推奨する。例えば、図１１の例では、検証環境４０−３のコストが最も低い場合には、出力部３０６ａは、当該環境と対応するバイトコードを推奨する。
【０１２１】
あるいは、要求仕様に「法的要件重視」といった内容が含まれる場合も考えられる。近年、ＧＤＰＲ（General Data Protection Regulation：一般データ保護規則）に代表されるように、個人情報の保護が強く求められ、データ（情報）の移転に制限が課せられることが想定される。
【０１２２】
複数の秘密計算サーバ１０を用いた秘密計算では、各サーバ間で情報を送受信するため、サーバが設置された地域（リージョン）によっては上記ＧＤＰＲの規則に反すると認定される可能性がある。従って、要求仕様に「法的要件重視」といった内容が含まれる場合には、出力部３０６ａは、複数の検証環境４０のうち法的リスクが少なくなるような検証環境４０を選択して推奨してもよい。
【０１２３】
例えば、法的要件重視の対象として上記ＧＤＰＲを想定すると、検証環境４０−１に含まれる全ての秘密計算サーバ１０がＥＵ（European Union）加盟国に設置されたサーバであれば法的リスクが低いと判断され、当該検証環境４０−１が推奨環境として選択される。
【０１２４】
あるいは、検証環境４０−２に含まれる全ての秘密計算サーバ１０が、ＧＤＰＲの適用を受けない地域（リージョン）に設置されている場合も法的リスクが低いと判断される。この場合、検証環境４０−２が推奨環境として選択される。
【０１２５】
なお、各検証環境４０の詳細情報（例えば、コストやサーバの設置地域等）は予め検証装置２０ａに格納してもよいし、検証装置２０ａが外部のサーバ等から取得してもよい。
【０１２６】
以上のように、第３の実施形態では、評価部３０５ａの生成した評価結果に基づき、ユーザに推奨する環境（クラウド）と対応する検証コードが選択され、これらの情報がユーザに提供される。具体的には、出力部３０６ａが、検証環境４０ごとの評価指標に基づき、ユーザの要求仕様（例えば、性能に関する要求仕様）を満たすバイトコードを提供可能な検証環境４０のうち最も性能の良い秘密計算を実現する検証環境４０を選択する。その結果、複数の検証環境のなかからユーザの要求に適合した環境と当該環境にて実行するバイトコードが、それぞれ「推奨環境」、「推奨コード」としてユーザに提供される。
【０１２７】
［第４の実施形態］
続いて、第４の実施形態について図面を参照して詳細に説明する。
【０１２８】
第４の実施形態では、要求仕様に複数の要求が含まれる場合について説明する。図１２は、第４の実施形態に係る検証装置２０ｂの処理構成（処理モジュール）の一例を示す図である。
【０１２９】
第３の実施形態に係る検証装置２０ａと第４の実施形態に係る検証装置２０ｂは、出力部３０６ｂの動作、機能が異なる。以下、相違点について中心に説明する。
【０１３０】
第３の実施形態では、ユーザからの要求仕様を満たす検証環境４０が複数存在する場合、例えば、秘密計算の性能が最も良い環境を推奨している。しかし、ユーザからの要求仕様を満たしていれば、必ずしも性能が最良な環境を選ばなくともよいこともある。例えば、図１１の例では、検証環境４０−１及び４０−２が、ユーザからの要求仕様（スループットが１００件以上）を満たし、性能の良い検証環境４０−２が推奨されている。
【０１３１】
しかし、検証環境４０−２ではなく、検証環境４０−１がユーザに真に推奨する環境となることもあり得る。例えば、検証環境４０が異なれば、時間あたりの利用料金が異なる。この場合、検証環境４０−２よりも検証環境４０−１の方が秘密計算の実行に要するコスト（つまり、時間あたりの利用料金）が低ければ、ユーザに対して真に推奨する環境は検証環境４０−１である可能性が高い。
【０１３２】
第４の実施形態に係る検証装置２０ｂは、秘密計算の性能以外に基づいてユーザに推奨する環境を決定する。例えば、ユーザから取得する要求仕様に、スループットが１００件以上（第１の要求）、且つ、コスト重視（第２の要求）という条件が含まれる場合を考える。この場合、出力部３０６ｂは、上記性能（スループット）に関する要求を満たす検証環境４０のうち、よりコスト（ランニングコスト）が低い環境を推奨する。
【０１３３】
例えば、図１１の例では、検証環境４０−２よりも検証環境４０−１の方が低コストであれば、出力部３０６ｂは、検証環境４０−１を推奨環境、コード１１を推奨コードとして出力する。
【０１３４】
以上のように、第４の実施形態に係る検証装置２０ｂは、要求仕様に含まれる第１の要求を満たす評価指標を提供する検証環境４０が複数存在する場合、要求仕様に含まれる第２の要求に基づき複数の検証環境４０のなかから推奨環境を選択し出力する。その結果、ユーザが真に必要とする推奨環境及び推奨コードが提供される。
【０１３５】
［第５の実施形態］
続いて、第５の実施形態について図面を参照して詳細に説明する。
【０１３６】
第５の実施形態では、コンパイル部３０３がバイトコードを生成する際に使用するコンパイルオプションを絞り込む場合について説明する。上記実施形態では、コンパイル部３０３が、取り得る組み合わせの全てについてオプションを可変し、複数のバイトコードを生成する場合について説明した。
【０１３７】
第５の実施形態では、全てのオプションを使用するのではなく、ユーザから取得する要求仕様に基づいて使用するオプションを絞り込む場合を説明する。なお、第５の実施形態に関し、システムの構成は第１の実施形態と同一とすることができるので、図２に相当する説明を省略する。
【０１３８】
図１３は、第５の実施形態に係る検証装置２０ｃの処理構成（処理モジュール）の一例を示す図である。図１３を参照すると、第５の実施形態に係る検証装置２０ｃは、コンパイル部３０３ｃの機能、動作が第１の実施形態に係る検証装置２０と相違する。以下、当該相違点を中心に説明する。
【０１３９】
上述のように、ユーザから取得する要求仕様には種々の情報が含まれ得る。例えば、「コードサイズ優先」という要求が要求仕様に含まれる場合がある。この場合、コンパイル部３０３ｃは、コードサイズが増大すると予想されるオプションを除外して複数のバイトコードを生成する。例えば、図６に示すコンパイルオプションリストを参照すると、コンパイル部３０３ｃは、コードサイズのオプションを「１」に固定すると共に、他のオプションを可変して複数のバイトコードを生成する。
【０１４０】
あるいは、要求仕様には、ユーザが必要な情報（ソースコード、要求仕様）を検証装置２０ｃに入力してから推奨コードを得るまでの時間に関する要求が含まれることがある。通常、秘密計算のコンパイルには比較的長い時間を要する。そのため、コンパイルオプションを可変して大量のバイトコードを生成する際に多くの時間が必要となる。しかし、ユーザによっては、システムの稼働を急ぎたいなどの事情から結果（推奨コード）を短時間で得たいという要望もある。
【０１４１】
このような場合、コンパイル部３０３ｃは、全てのコンパイルオプションを選択するのではなく、要求仕様に応じて一部のオプションを選択し、限られた数のバイトコードを生成する。検証装置２０ｃは、限られた数のバイトコード（検証コード）からユーザにとって最適なコードを選択し、「推奨コード」としてユーザに提供する。
【０１４２】
例えば、ユーザが秘密計算の実行を予定している環境により、ある程度、最適なコンパイルオプションは推定可能である。具体的には、ユーザの実行環境が通信帯域の広い環境であれば、秘密計算サーバ１０間の１回の通信における通信量が少ないバイトコードが有利であることが多い。逆に、通信帯域が狭い環境であれば、秘密計算サーバ１０間の通信回数が多いバイトコードが有利であることが多い。
【０１４３】
秘密計算のコンパイルでは、各オプションを設定（有効）した場合の必要な通信量や通信回数は把握可能である。そこで、コンパイル部３０３ｃは、要求仕様に含まれる通信経路の特性（例えば、通信帯域、通信遅延）に応じて、一部のコンパイルオプションを非選択とすることで生成するバイトコードの数を絞り込んでもよい。
【０１４４】
あるいは、ユーザからの要求仕様が「安全性重視」といった内容も考えられる。この場合、コンパイル部３０３ｃは、安全性に関するオプション（例えば、不正検知に関するオプション）については有効にして固定し、他のオプションを可変して複数のバイトコードを生成してもよい。
【０１４５】
以上のように、第５の実施形態に係る検証装置２０ｃは、要求仕様に基づき秘密計算コンパイラに設定可能なオプションのうち一部のオプションを固定し、複数の秘密計算実行コードを生成する。その結果、ユーザの要求に的確に応えつつ、検証するバイトコードの数が削減され、推奨環境や推奨コードの提供を迅速に行うことができる。
【０１４６】
［第６の実施形態］
続いて、第６の実施形態について図面を参照して詳細に説明する。
【０１４７】
第１乃至第５の実施形態では、ユーザは、秘密計算コンパイラが処理可能なソースコード（秘密計算専用ソースコード）を入力する。第６の実施形態では、ユーザが、上記秘密計算専用ソースコードの入力に代えて、汎用的な言語で記載された通常のソースコードを検証装置２０ｄに入力する場合を説明する。
【０１４８】
図１４は、第６の実施形態に係る検証装置２０ｄの処理構成（処理モジュール）の一例を示す図である。図１４を参照すると、第６の実施形態に係る検証装置２０ｄは、第１の実施形態に係る検証装置２０と比較すると、変換部３０８が追加されている。以下、当該相違点を中心に説明する。
【０１４９】
変換部３０８は、秘密計算用のソースコードを前記秘密計算コンパイラ（コンパイル部３０３）が処理できない場合、秘密計算コンパイラが処理できないソースコードを秘密計算コンパイラが処理可能なソースコードに変換する。より具体的には、変換部３０８は、複数の秘密計算サーバ１０に実行させる秘密計算に関する設定情報に基づき、取得部３０２を介して入力されたソースコードを秘密計算コンパイラが処理可能に変換する。即ち、変換部３０８は、ユーザが入力したソースコードを秘密計算専用ソースコードに変換する。変換部３０８の詳細な動作は後述する。なお、上記秘密計算コンパイラが処理できないソースコードは、秘密計算で処理することの指定が行われていないソースコード（汎用的なソースコード）である。換言すれば、秘密計算コンパイラが処理できるソースコードは、特定の処理について秘密計算で処理することが指定された（指定可能な）ソースコードである。
【０１５０】
記憶部３０７は、例えば、変換部３０８による変換処理に必要となる設定情報等を記憶する。記憶部３０７が記憶する設定情報の具体的な内容は変換部３０８の動作と併せて後述する。
【０１５１】
次に、図面を参照しつつ、変換部３０８の動作を説明する。
【０１５２】
変換部３０８は、取得部３０２を介してソースコードを取得する。ここでは、変換部３０８は、図１５に示すソースコードを取得したものとする。図１５に示すソースコードは、パイソン（Ｐｙｔｈｏｎ）により記述されている。なお、ソースコードの言語をパイソンに限定する趣旨ではないことは勿論である。変換部３０８は、Ｃ言語、Ｂａｓｉｃ、アセンブラ等の任意の言語により記載されたソースコードを取り扱うことができる。
【０１５３】
図１５に示すソースコードは、外部から取得する入力データを１０倍し、当該１０倍された入力データの平均値算出を実現する。図１５に示すプログラムは、メイン関数（ｍａｉｎ）とサブ関数（ｆｕｎｃｔｉｏｎ）を含み、上記平均値を算出する。
【０１５４】
変換部３０８は、図１５に示すソースコードを変換し、コンパイル部３０３に提供する「秘密計算専用ソースコード」を生成する。その際、変換部３０８は、記憶部３０７に格納された設定情報を参照する。
【０１５５】
図１６は、変換部３０８が参照する設定情報の一例を示す図である。設定情報には、秘密計算サーバ１０に関する情報や変換部３０８の変換動作を決定する種々の規則（ルール）が含まれる。例えば、入力関数、出力関数の変換処理に関する規則や、パラメータや型に関する変換処理に関する規則が設定情報には含まれる。
【０１５６】
図１６（ａ）は、秘密計算サーバ１０に関する情報の一例を示す。図１６（ａ）には、秘密計算サーバ１０に関する情報として、「データの入力形態」と「データの復元主体」に関する設定が記載されている。
【０１５７】
データの入力形態は、秘密計算サーバ１０が秘密計算を実行する際に必要となるデータをどのようにして取得するかを定める設定である。
【０１５８】
当該設定の取り得る設定としては、図１６（ａ）に示すように複数の秘密計算サーバ１０のうち代表サーバに定められたサーバが、入力データを受け取り、当該サーバが入力データを秘密分散して他の秘密計算サーバ１０に配付する形態がある。図２及び図１６（ａ）の例では、代表サーバである秘密計算サーバ１０−１が入力データを秘密分散し、他の秘密計算サーバ１０−２、１０−３に配付する。
【０１５９】
データの復元主体に関する設定は、秘密計算により得られた結果を復元する主体（サーバ）を定める。例えば、図１６（ａ）の例では、代表サーバである秘密計算サーバ１０−１が、他の秘密計算サーバ１０−２、１０−３から秘密計算の結果を収集し、自身が所有する計算結果及び上記収集した計算結果の復元を行う。図１５に示す例では、１０倍後の入力データの平均値が各秘密計算サーバ１０に分散して配置されているので、代表サーバである秘密計算サーバ１０−１は当該平均値を復元する。
【０１６０】
図１６（ｂ）は、入力関数の変換処理に関する規則の一例を示す図である。変換部３０８は、当該規則により指定された入力関数を秘密計算に適した関数に変換する。
【０１６１】
図１６（ｂ）の例では、変換部３０８は、ソースコードの中に「ｇｅｔ＿ｉｎｐｕｔ」が含まれると当該入力関数を「ｇｅｔ＿ｉｎｐｕｔ＿ｆｒｏｍ（）」に書き換える。なお、上記関数のｆｒｏｍに続く括弧には入力データを取得する代表サーバの識別子が設定される。
【０１６２】
図１６（ｃ）は、出力関数の変換処理に関する規則の一例を示す図である。変換部３０８は、当該規則により指定された出力関数を秘密計算に適した関数に変換する。
【０１６３】
図１６（ｃ）の例では、変換部３０８は、ソースコードの中に「ｐｒｉｎｔ＿ｌｎ」が含まれると当該出力関数の引数に「ｒｅｖｅａｌ（）」を追加する。なお、「ｒｅｖｅａｌ」に続く括弧には計算結果を復元する代表サーバの識別子が設定される。
【０１６４】
図１６（ｄ）は、パラメータの変換処理に関する設定の一例を示す図である。変換部３０８は、入力データ以外のパラメータ、定数等に関して秘密分散するか否かを当該設定に基づき決定する。例えば、当該パラメータに関する変換処理に関する設定には、「最小」又は「最大」といった設定値が設定され得る。
【０１６５】
当該設定が「最小」であれば、秘密分散される入力データと、当該入力データから影響を受けるパラメータと、が秘密分散の対象となる。また、上記設定が「最大」であれば、ソースコードに含まれるパラメータ、定数の全てが秘密分散の対象となる。
【０１６６】
図１６（ｅ）は、型の変換処理に関する設定の一例を示す図である。変換部３０８は、ソースコードにパラメータの型に関する明記があれば、当該パラメータを明記された型に対応する秘密計算用の型に変換する。
【０１６７】
しかし、言語によっては型に関する明記がない場合もある。そのような場合、変換部３０８は、型の変換処理に関する設定を参照し、当該設定に応じた秘密計算用の型を用いる。図１６（ｅ）の例では、変換部３０８は、型の明示がないパラメータを秘密計算用の整数型に変換する。
【０１６８】
また、除算結果を「固定小数点」とするのか、「浮動小数点」とするのかに関する設定も型の変換処理に関する設定に含まれる。図１６（ｅ）の例では、秘密分散されたパラメータの除算結果は固定小数点とすることが定められている。
【０１６９】
続いて、図１５に示すソースコードを参照しつつ、上記設定情報を用いた変換部３０８の変換処理を具体的に説明する。初めに、変換部３０８は、設定情報のうち入力関数に関する設定により指定された関数をソースコードから検出（抽出）する。
【０１７０】
図１６の例では、変換部３０８は、「ｇｅｔ＿ｉｎｐｕｔ」の検出を試みる。変換部３０８は、図１５に示すソースコードの５行目にて当該関数を検出する。変換部３０８は、設定情報の秘密計算サーバに関する設定を参照し、「データの入力形態」に関する設定値を確認する。
【０１７１】
図１６では、代表サーバ（秘密計算サーバ１０−１）による秘密分散が設定されており、変換部３０８は、図１６（ｂ）に記載された「ｇｅｔ＿ｉｎｐｕｔ＿ｆｒｏｍ（）」におけるｆｒｏｍの括弧に秘密計算サーバ１０−１の識別子（例えば、「１」）を設定する。その結果、図１７の５行目に示すように、「ｇｅｔ＿ｉｎｐｕｔ」は「ｓｉｎｔ．ｇｅｔ＿ｉｎｐｕｔ＿ｆｒｏｍ（１）」に変換される。
【０１７２】
なお、「ｇｅｔ＿ｉｎｐｕｔ」には型の明記がないので、変換部３０８は、図１６（ｅ）の設定に従い、秘密計算用の整数型であるｓｉｎｔを上記関数に設定している。
【０１７３】
このように、変換部３０８は、設定情報に含まれる入力関数であって、ソースコードに含まれる所定の入力関数を秘密計算用の入力関数に置換する。その際、変換部３０８は、必要に応じて、秘密計算用の入力関数に、複数の秘密計算サーバのうち秘密分散するデータを取得する秘密計算サーバ（代表サーバ）の情報を設定する。
【０１７４】
ここで、変換部３０８は、上記入力関数（外部装置からデータを取得するための関数）により取得するデータの格納先となるパラメータを秘密分散の対象の１つとする。図１５の例では、３行目、５行目等に記載された「ｉｎｐｕｔ＿ｖａｌｕｅｓ」が秘密分散の対象となるパラメータである。
【０１７５】
次に、変換部３０８は、設定情報におけるパラメータの秘密分散に関する設定を参照する。
【０１７６】
図１６（ｄ）の例では、当該設定に関して「最小」が設定されているので、変換部３０８は、入力関数から定まる秘密分散の対象パラメータと、当該パラメータに影響を受けるパラメータを秘密分散の対象とする。
【０１７７】
図１５の例では、「ｉｎｐｕｔ＿ｖａｌｕｅｓ」が秘密分散の対象パラメータである。また、図１５の７行目を確認すると、当該パラメータは関数ｍｅａｎの第１引数として用いられている。当該関数では、第１引数（ｖａｌｕｅ）は、１４行目にて１０倍され、パラメータｓｕｍに加算されている。従って、当該パラメータｓｕｍも秘密分散のパラメータから影響を受けるので秘密分散の対象となる。
【０１７８】
また、当該パラメータｓｕｍと関数ｍｅａｎの第２引数（ｎｕｍ）は、１５行目にて除算されるので、パラメータｍｅａｎも秘密分散のパラメータから影響を受ける（間接的に影響を受ける）。従って、当該パラメータｍｅａｎも秘密分散の対象となる。
【０１７９】
まとめると、図１５の例では、ｉｎｐｕｔ＿ｖａｌｕｅｓ、ｓｕｍ、ｍｅａｎの各パラメータが秘密分散の対象となる。
【０１８０】
変換部３０８は、設定情報における「型の変換処理に関する設定」を確認し、秘密分散の対象となるパラメータの型を決定し、ソースコードに反映する。
【０１８１】
図１６（ｅ）の例では、型の明記がなければ「秘密計算用の整数型」に変換することが定められている。パラメータ「ｉｎｐｕｔ＿ｖａｌｕｅｓ」には型の明記がないので、変換部３０８は、当該パラメータの型は整数型として扱う。具体的には、図１７の３行目に示すように、変換部３０８は、関数Ａｒｒａｙの型を秘密計算の整数型を示す（秘密計算コンパイラにて秘密分散の整数型として扱われる）ｓｉｎｔに変換する。
【０１８２】
パラメータ「ｓｕｍ」の型に関しては、図１５の１２行目に示すように整数型であることが明記されているので、変換部３０８は、当該パラメータに関しては変換前の整数型を維持しつつ、秘密分散の対象であること示すｓｉｎｔを設定する。具体的には、図１７の１２行目に示すように、パラメータｓｕｍの型が「ｓｉｎｔ」に設定される。なお、図１７の１２行目では、当該パラメータの初期値として「０」が設定されている。
【０１８３】
パラメータｍｅａｎの型に関し、変換部３０８は、当該パラメータが秘密分散の対象パラメータであるｓｕｍを定数（ｎｕｍ、ｎｕｍ＿ｉｎｐｕｔ）で除算した結果を格納する点に着目する。
【０１８４】
除算であるので、変換部３０８は、図１６（ｅ）に示す設定（除算時の型）を参照し、パラメータｍｅａｎを秘密計算用の固定小数点型となるように変換する。具体的には、変換部３０８は、図１７の１６〜１９行までの処理を追加する。
【０１８５】
より詳細には、変換部３０８は、除算の対象（ｓｕｍ、ｎｕｍ）となるパラメータに対応する新たなパラメータを固定小数点型のパラメータとして定義する。具体的には、パラメータｓｕｍに対応する固定小数点型のパラメータＳｆと、定数ｎｕｍに対応する固定小数点型のパラメータＮｆが定義される（図１７の１６行目、１８行目）。
【０１８６】
変換部３０８は、パラメータｓｕｍ、ｎｕｍの型を整数型から固定小数点型に変換すると共に、これらの値を新たなパラメータＳｆ、Ｎｆにロードする（図１７の１７行目、１９行目）。パラメータｓｕｍ、ｎｕｍは新たなパラメータに置換されているので、変換部３０８は、これらのパラメータを使った除算を新たなパラメータＳｆ、Ｎｆに置き替える（図１７の２０行目）。
【０１８７】
このように、変換部３０８は、所定の入力関数により取得されるデータの格納先となる第１パラメータ（上記例では、ｉｎｐｕｔ＿ｖａｌｕｅｓ）を秘密分散の対象に設定し、当該第１パラメータが秘密分散されるようにソースコードを変換する。さらに、変換部３０８は、上記第１パラメータから影響を受ける第２パラメータ（上記例では、ｓｕｍ等）を秘密分散の対象に設定し、当該第２パラメータが秘密分散されるようにソースコードを変換する。
【０１８８】
次に、変換部３０８は、設定情報のうち出力関数に関する設定により指定された関数をソースコードから検出（抽出）する。
【０１８９】
図１６（ｃ）の例では、変換部３０８は、「ｐｒｉｎｔ＿ｌｎ」の検出を試みる。その結果、変換部３０８は、図１５に示すソースコードの８行目にて当該関数を検出する。変換部３０８は、設定情報の秘密計算サーバに関する設定を参照し、「データの復元主体」に関する設定値を確認する。
【０１９０】
図１６（ａ）の例では、代表サーバ（秘密計算サーバ１０−１）による処理結果の復元が規定されている。そのため、変換部３０８は、図１６（ｃ）に記載された「ｐｒｉｎｔ＿ｌｎ（−、ｒｅｓｕｌｔ．ｒｅｖｅａｌ（））」における括弧に秘密計算サーバ１０−１の識別子（例えば、「１」）を設定する。その結果、図１７の８行目に示すように、「ｐｒｉｎｔ＿ｌｎ（’ｍｅａｎ＝％ｓ’￥ｎ、ｒｅｓｕｌｔ）」は「ｐｒｉｎｔ＿ｌｎ（’ｍｅａｎ＝％ｓ’￥ｎ、ｒｅｓｕｌｔ．ｒｅｖｅａｌ（１））」に変換される。
【０１９１】
このように、変換部３０８は、設定情報に含まれる出力関数であって、ソースコードに含まれる所定の出力関数を秘密計算用の出力関数に置換する。その際、変換部３０８は、必要に応じて、複数の秘密計算サーバ１０により実行された秘密計算の結果を復号する秘密計算サーバ（代表サーバ）の情報を秘密計算用の出力関数に設定する。
【０１９２】
続いて、図１６（ｄ）に示すパラメータの変換処理に関する設定に「最大」が設定されている場合の変換部３０８の動作について説明する。
【０１９３】
当該設定が「最大」である場合には、変換部３０８は、ソースコードに含まれる全てのパラメータ、定数を秘密分散する。図１５の例では、２行目に記載されたｎｕｍ＿ｉｎｐｕｔ、１４行目に記載された定数「１０」も秘密分散される。
【０１９４】
図１５のソースコードにおいて、パラメータの変換処理に関する設定が「最大」であれば、変換部３０８は、例えば、図１８に示す秘密計算専用コードを生成する。図１７と図１８に示す秘密計算専用コードの相違点は、図１８の２行目においてｎｕｍ＿ｉｎｐｕｔを秘密分散用の整数型に定義し、その値に「１０００」を設定している点が異なる。さらに、２つの秘密計算専用コードは、図１８の１３行目に秘密分散用の整数型パラメータｐ１が追加されている点と、１５行目の定数「１０」が上記パラメータｐ１に置き替えられている点で相違する。
【０１９５】
このように、パラメータの変換処理に関する設定に「最大」が設定されていれば、変換部３０８は、外部から取得するパラメータ及びその影響を受けるパラメータに加え、ソースコードの記載された他のパラメータや定数を秘密分散する。
【０１９６】
当該秘密分散により、ソースコードに含まれる情報の漏洩を強固に防止することができる。例えば、図１５の１４行目に記載された定数「１０」にユーザの知見（ノウハウ）が集約されている場合には、当該定数も秘密とすることが望ましい。変換部３０８は、当該要望を満たす秘密計算専用ソースコードも作成することができる。
【０１９７】
コンパイル部３０３は、変換部３０８が生成する秘密計算専用ソースコードにおいて、コンパイルオプションの組み合わせを変更し、複数のバイトコードを生成する。
【０１９８】
以上のように、第６の実施形態に係る検証装置２０ｄは、通常のソースコードをユーザから取得し、当該ソースコードを秘密計算専用ソースコードに変換する。その結果、ユーザは、秘密計算専用ソースコードを用意することなく、自身の環境に最適なバイトコードを得ることができる。即ち、本願開示の検証装置は、「秘密計算用のソースコード」として通常のソースコード（Ｃ言語等で記載されたソースコード）を受け入れることもできるし、秘密計算専用ソースコードを受け入れることもできる。
【０１９９】
［第６の実施形態の変形例］
上記説明したように、秘密計算専用ソースコードを生成する際、パラメータの変換処理に関する設定を変更することができる。具体的には、秘密にする情報を最小化にしたり、秘密にする情報を最大化したりすることができる。ここで、秘密分散のレベル（最小、最大）は、秘密計算の性能（スループット、レイテンシ）に影響を与える。つまり、秘密分散のレベルが小さければ性能が上昇し、秘密分散のレベルが大きければ性能が低下する。
【０２００】
そこで、コンパイル部３０３は、通常のソースコードを秘密計算専用ソースコードに変換する際の各種設定（特に、秘密分散のレベル）もコンパイルオプションとして扱って、複数のバイトコードを生成してもよい。
【０２０１】
より具体的には、コンパイル部３０３は、各秘密分散のレベル（例えば、最小、最大）を変化させて複数のバイトコードを生成してもよい。
【０２０２】
あるいは、ユーザの要求仕様が「安全性重視」であれば、コンパイル部３０３は、秘密分散のレベルを「最大」に固定し、他のオプションを可変して複数のバイトコードを生成してもよい。あるいは、ユーザの要求仕様が「性能重視」であれば、コンパイル部３０３は、秘密分散のレベルを「最小」に固定し、他のオプションを可変して複数のバイトコードを生成してもよい。この場合、コンパイル部３０３は、要求仕様に基づき設定情報を書き換えると共に、変換部３０８に対して当該書き換えられた設定情報を用いてソースコードの再変換を指示すればよい。
【０２０３】
あるいは、コンパイル部３０３は、評価指標に基づき設定情報を書き換え、変換部３０８に対して当該書き換えられた設定情報を用いてソースコードの再変換を指示してもよい。例えば、当初の秘密分散のレベルでは要求仕様を満たす推奨コード、推奨環境を得ることができない場合に、上記設定情報を書き換え検証コードの選択肢を広げてもよい。具体的には、コンパイル部３０３は、当初の設定（例えば、秘密分散のレベルが最大）ではユーザの要求仕様を満たすバイトコードが得られない場合に、変換部３０８が参照する設定情報を変更（例えば、秘密分散のレベルが最小）してもよい。つまり、コンパイル部３０３は、評価部３０５の評価結果（評価指標）を変換部３０８の動作にフィードバックしてもよい。
【０２０４】
以上のように、第６の実施形態に係る変形例では、評価指標又は要求仕様に基づき、変換部３０８が参照する設定情報を書き換え、複数の検証コードを生成する。その結果、ユーザの要望に適する推奨コード等が迅速に特定できたり、確実に提供できたりする。
【０２０５】
［ハードウェア構成］
続いて、秘密計算検証システムをなす各装置のハードウェア構成について説明する。
【０２０６】
図１９は、検証装置２０のハードウェア構成の一例を示す図である。検証装置２０は、所謂、情報処理装置（コンピュータ）により実現され、図１９に例示する構成を備える。例えば、検証装置２０は、内部バスにより相互に接続される、ＣＰＵ（Central Processing Unit）２１、メモリ２２、入出力インターフェイス２３、通信手段であるＮＩＣ（Network Interface Card）２４等を備える。
【０２０７】
但し、図１９に示す構成は、検証装置２０のハードウェア構成を限定する趣旨ではない。検証装置２０は、図示しないハードウェアを含んでもよい。検証装置２０に含まれるＣＰＵ等の数も図１９の例示に限定する趣旨ではなく、例えば、複数のＣＰＵ２１が検証装置２０に含まれていてもよい。
【０２０８】
メモリ２２は、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）、補助記憶装置（ハードディスク等）等である。
【０２０９】
入出力インターフェイス２３は、図示しない入出力装置のインターフェイスである。入出力装置には、例えば、表示装置、操作デバイス等が含まれる。表示装置は、例えば、液晶ディスプレイ等である。操作デバイスは、例えば、キーボードやマウス等である。
【０２１０】
検証装置２０の機能は、上述の処理モジュールにより実現される。当該処理モジュールは、例えば、メモリ２２に格納されたプログラムをＣＰＵ２１が実行することで実現される。また、そのプログラムは、ネットワークを介してダウンロードするか、あるいは、プログラムを記憶した記憶媒体を用いて、更新することができる。さらに、上記処理モジュールは、半導体チップにより実現されてもよい。即ち、上記処理モジュールが行う機能は、何らかのハードウェア、或いはハードウェアを利用して実行されるソフトウェアにより実現できればよい。
【０２１１】
なお、秘密計算サーバ１０も情報処理装置（コンピュータ）により実現可能であり、そのハードウェア構成は当業者にとって明らかであるため詳細な説明を省略する。
【０２１２】
［変形例］
なお、第１乃至第６の実施形態にて説明した秘密計算検証システムの構成及び動作は例示であって、種々の変形が可能である。
【０２１３】
上記実施形態では、検証装置２０に接続された操作デバイス、表示デバイスを用いてユーザが情報の入出力を行う場合を想定している。しかし、ユーザは、ネットワークを介して接続された端末を用いて必要な情報の入出力を行っても良い。
【０２１４】
上記実施形態では、１つの推奨コード、１つの推奨環境をユーザに提供することを基本としている。しかし、ユーザの要求仕様を満たすバイトコードは複数存在するのが通常である。この場合、ユーザの要求仕様を満たすバイトコードの所定の規則に合致するバイトコードは一律に「推奨コード」としてユーザに提供してもよい。例えば、ユーザの要求仕様が「性能重視」であれば、検証装置２０は、最も性能の良いバイトコードを「推奨コード」として出力することになるが、要求仕様を満たすバイトコードの中にはより安全性の高いコードやサイズの小さいコードが含まれる可能性がある。この場合、ユーザの用途等によっては、性能と安全性、又は、性能とコードサイズのバランスがとれているコードが最適な可能性もある。そこで、検証装置２０は、要求仕様を満たすバイトコードのなかから、性能の良いコードから順に所定数だけ選択し、ユーザに提供してもよい。つまり、検証装置２０は、複数の推奨コードを出力してもよい。また、このような場合、検証装置２０は、各推奨コードに付帯情報（使用したオプションの詳細やコードサイズ等）を付してユーザに提供してもよい。ユーザの側から、推奨コードとして出力するバイトコードの数を指定してもよい。
【０２１５】
第３の実施形態等では、検証装置２０が、複数のバイトコードを生成し、検証環境４０にて各バイトコードの検証を行う場合について説明した。しかし、検証装置２０が１つのバイトコードを生成し、当該バイトコードの要求仕様への適合性を複数の検証環境４０にて検証してもよい。つまり、検証コードを固定し、要求仕様に適合する検証環境４０を探索してもよい。当該探索された検証環境４０が、「推奨環境」としてユーザに推奨されてもよい。
【０２１６】
上記実施形態では、ソースコードに加え要求仕様を検証装置２０に入力することを基本としているが、明示的な要求仕様の入力を省略しても良い。例えば、検証装置２０は、要求仕様が入力されない場合には、「性能重視」という要求仕様が入力されたものとして推奨コード、推奨環境の提供を行っても良い。
【０２１７】
上記実施形態では、検証環境３０、４０におけるバイトコードの検証は、当該バイトコードに記載された全ての処理を実行することを基本としている。しかし、このような検証方法では、秘密計算の処理内容によっては１つのバイトコードの検証に長い時間を要することもあり得る。その結果、最終的な推奨コードの決定に膨大な時間を要することになる。このような不都合を解消するため、検証装置２０は、バイトコードに記載された処理の全てを実行して評価するのではなく、バイトコードに記載された処理の一部を実行して評価してもよい。例えば、コンパイル部３０３は、コンパイルを実行する前にソースコードの一部を改編し、メイン関数が所定の回数実行された場合にその旨を外部に通知（実行結果として通知）させる。検証装置２０は、当該通知を実行結果として扱い、評価指標を算出してもよい。
【０２１８】
上記実施形態では、複数の秘密計算サーバ１０のうち１台を代表サーバとして扱い、当該代表サーバが、秘密分散する入力データの配布や秘密分散された実行結果の復元を行う場合について説明した。しかし、このような構成ではなく、秘密分散された入力データを各秘密計算サーバ１０に配布し、各秘密計算サーバ１０により秘密分散された実行結果を復元する配布・復元サーバをシステムに組み込んでもよい。例えば、図２０に示すように、配布・復元サーバ５０を設置してもよい。この場合、検証装置２０は、配布・復元サーバ５０を介して検証コードを各秘密計算サーバ１０に配布しても良いし、直接各サーバに配布しても良い。また、検証装置２０は、配布・復元サーバ５０を介して実行結果を取得してもよい。
【０２１９】
図２０に示すように、配布・復元サーバ５０をシステムに組み込むことがある。そこで、このような配布・復元サーバ５０の使用有無をコンパイルオプションに設定してもよい。また、配布・復元サーバ５０を使用するコンパイルオプションを有効にした場合には、当該配布・復元サーバ５０の設置箇所をユーザからの要求仕様に基づき推奨してもよい。多くの場合、配布・復元サーバ５０は正直な参加者であると仮定される。そもそも、配布・復元サーバ５０が不正な参加者である場合や、あるいは不正な参加者によってコントロールされている場合は、配布前の値が不正な参加者に知られることとなり、秘匿性が実現できない。また、そのような場合、値の復元時に改ざんが可能となるため、正当性も実現できない。そのため、配布・復元サーバ５０の設置は、誰がどこに設置し、どのように管理されるかを考慮する必要がある。ここで、安全性が高いと考えられるのが、ユーザのオンプレミスな環境に配布・復元サーバ５０を設置することである。しかし、このような対応はコストが上昇し、ユーザから敬遠されることも多い。対して、配布・復元サーバ５０をクラウド上に設置すると、コストは低減される。しかしながら、クラウドサービス提供事業者によって配布・復元サーバ５０が管理されている以上、クラウドサービス提供事業者が入力を覗き見る可能性や復元時の値を改ざんする可能性がある。また、配布・復元サーバ５０を第三者（政府）が運営するという場合もあり得る。このように、配布・復元サーバ５０の設置は安全性やコストと密接に関わることになる。そこで、例えば、ユーザの要求仕様が「安全性重視」であれば、検証装置２０は、配布・復元サーバ５０をユーザ環境に設置するように推奨する。あるいは、ユーザの要求仕様が「コスト重視」であれば、検証装置２０は、配布・復元サーバ５０をクラウド環境に設置するように推奨する。
【０２２０】
上記実施形態では、複数の秘密計算サーバ１０を用いた秘密分散方式で秘密計算を実行する場合について説明した。しかし、準同型暗号、完全同型暗号等を用いて秘密計算を行っても良い。この場合、少なくとも１台のサーバが検証環境３０、４０に含まれていればよい。また、このような秘密分散方式の違いをコンパイルオプションにより区別してもよい。
【０２２１】
上記実施形態では、各秘密計算サーバ１０はサーバ（物理マシン）により実現されることを前提としている。しかし、複数の秘密計算サーバ１０が１台のサーバ上で仮想マシンとして実現されていてもよい。また、秘密計算検証システムには、仮想マシンにより実現される秘密計算サーバ１０と、物理マシンにより実現される秘密計算サーバ１０が混在していてもよい。
【０２２２】
第５の実施形態では、一部のコンパイルオプションを非選択とすることで生成するバイトコードの数を制限している。しかし、このような対応ではユーザの要求仕様を満たすバイトコード（推奨コード）が得られない可能性がある。その場合、コンパイル部３０３は、非選択としたコンパイルオプションを選択し、検証するコードを増やすような対応も可能である。
【０２２３】
上述の説明で用いたシーケンス図では、複数の工程（処理）が順番に記載されているが、各実施形態で実行される工程の実行順序は、その記載の順番に制限されない。各実施形態では、例えば各処理を並行して実行する等、図示される工程の順番を内容的に支障のない範囲で変更することができる。また、上述の各実施形態は、内容が相反しない範囲で組み合わせることができる。即ち、上記各実施形態の任意の組み合わせが更なる実施形態として含まれる。
【０２２４】
コンピュータの記憶部に秘密計算実行コード検証プログラムをインストールすることにより、コンピュータを検証装置として機能させることができる。また、秘密計算実行コード検証プログラムをコンピュータに実行させることにより、コンピュータにより秘密計算実行コードの検証方法を実行することができる。
【０２２５】
なお、引用した上記の特許文献等の各開示は、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の全開示の枠内において種々の開示要素（各請求項の各要素、各実施形態ないし実施例の各要素、各図面の各要素等を含む）の多様な組み合わせ、ないし、選択（部分的削除を含む）が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。
【符号の説明】
【０２２６】
１０、１０−１〜１０−３、１０−１１〜１０−１３、１０−２１〜１０−２３、１０−３１〜１０−３３  秘密計算サーバ
２０、２０ａ〜２０ｄ、１００  検証装置
２１  ＣＰＵ（Central Processing Unit）
２２  メモリ
２３  入出力インターフェイス
２４  ＮＩＣ（Network Interface Card）
３０、４０、４０−１〜４０−３  検証環境
５０  配布・復元サーバ
１０１、３０２  取得部
１０２、３０３、３０３ｃ  コンパイル部
１０３、３０４、３０４ａ  検証環境制御部
１０４、３０５、３０５ａ  評価部
１０５、３０６、３０６ａ、３０６ｂ  出力部
２０１、３０１  通信制御部
２０２  秘密計算実行部
２０３、３０７  記憶部
２１１  秘密分散データ生成部
２１２  秘密計算部
２１３  秘密分散データ復元部
３０８  変換部
【図１】
2020144768.tif 000003
【図２】
2020144768.tif 000004
【図３】
2020144768.tif 000005
【図４】
2020144768.tif 000006
【図５】
2020144768.tif 000007
【図６】
2020144768.tif 000008
【図７】
2020144768.tif 000009
【図８】
2020144768.tif 000010
【図９】
2020144768.tif 000011
【図１０】
2020144768.tif 000012
【図１１】
2020144768.tif 000013
【図１２】
2020144768.tif 000014
【図１３】
2020144768.tif 000015
【図１４】
2020144768.tif 000016
【図１５】
2020144768.tif 000017
【図１６】
2020144768.tif 000018
【図１７】
2020144768.tif 000019
【図１８】
2020144768.tif 000020
【図１９】
2020144768.tif 000021
【図２０】
2020144768.tif 000022
【国際調査報告】
2020144768.tif 000023
2020144768.tif 000024
2020144768.tif 000025
2020144768.tif 000026