(57)【要約】  秘密計算実行環境を容易に構築可能とする変換装置を提供する。変換装置は、入力部と、変換部と、を備える。入力部は、ソースコードを入力する。変換部は、複数の秘密計算サーバに実行させる秘密計算に関する設定情報に基づき、入力されたソースコードを秘密計算コンパイラが処理可能に変換する。
2020059063.tif 000002
【特許請求の範囲】
【請求項１】
ソースコードを入力する、入力部と、
複数の秘密計算サーバに実行させる秘密計算に関する設定情報に基づき、前記入力されたソースコードを秘密計算コンパイラが処理可能に変換する、変換部と、
を備える、変換装置。
【請求項２】
前記変換部は、
前記ソースコードに含まれる所定の入力関数を秘密計算用の入力関数に置換する、請求項１に記載の変換装置。
【請求項３】
前記変換部は、
前記秘密計算用の入力関数に、前記複数の秘密計算サーバのうち秘密分散するデータを取得する秘密計算サーバの情報を設定する、請求項２に記載の変換装置。
【請求項４】
前記変換部は、
前記所定の入力関数により取得されるデータの格納先となる第１パラメータを秘密分散の対象に設定し、前記第１パラメータが秘密分散されるように前記ソースコードを変換する、請求項２又は３に記載の変換装置。
【請求項５】
前記変換部は、
前記第１パラメータから影響を受ける第２パラメータを秘密分散の対象に設定し、前記第２パラメータが秘密分散されるように前記ソースコードを変換する、請求項４に記載の変換装置。
【請求項６】
前記変換部は、
前記第１及び第２パラメータとは異なる第３パラメータと、前記ソースコードに含まれる定数と、を秘密分散の対象に設定し、前記秘密分散の対象に設定された第３パラメータ及び定数が秘密分散されるように前記ソースコードを変換する、請求項５に記載の変換装置。
【請求項７】
前記入力部は、秘密分散の対象となるパラメータ、定数を指定するリストを入力し、
前記変換部は、前記リストにより指定されたパラメータ、定数が秘密分散されるように前記ソースコードを変換する、請求項１乃至６のいずれか一項に記載の変換装置。
【請求項８】
前記変換部は、ユーザから指定されたパラメータ、定数が秘密分散されるように前記ソースコードを変換する、請求項１乃至７のいずれか一項に記載の変換装置。
【請求項９】
前記変換部は、
前記ソースコードに含まれる所定の出力関数を秘密計算用の出力関数に置換する、請求項１乃至８のいずれか一項に記載の変換装置。
【請求項１０】
前記変換部は、
前記複数の秘密計算サーバにより実行された秘密計算の結果を復号する秘密計算サーバの情報を前記秘密計算用の出力関数に設定する、請求項９に記載の変換装置。
【請求項１１】
ソースコードを入力するステップと、
複数の秘密計算サーバに実行させる秘密計算に関する設定情報に基づき、前記入力されたソースコードを秘密計算コンパイラが処理可能に変換するステップと、
を含む、変換方法。
【請求項１２】
ソースコードを入力する処理と、
複数の秘密計算サーバに実行させる秘密計算に関する設定情報に基づき、前記入力されたソースコードを秘密計算コンパイラが処理可能に変換する処理と、
をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、変換装置、変換方法及びプログラムに関する。
【背景技術】
【０００２】
秘密計算（マルチパーティ計算；ＭＰＣ（Multi Party Computation））と称される技術が存在する（例えば、特許文献１参照）。秘密計算（秘密分散型計算）では、複数のパーティ（秘密計算サーバ）がそれぞれの持つ秘密情報を隠しながら当該秘密情報を用いた種々の計算を行う。【０００３】
各秘密計算サーバは、互いに連携して所定の処理を実行する。その際、各秘密計算サーバに秘密計算を実行させるためのバイナリコード（以下、秘密計算実行コードと表記する）を入力する必要がある。秘密計算実行コードの生成は、例えば、非特許文献１に記載された秘密計算コンパイラにソースコードを入力することで行われる。秘密計算コンパイラが実行されることで、各秘密計算サーバに入力（配付）する秘密計算実行コードが得られる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１８−０４５０１９号公報
【非特許文献】
【０００５】
【非特許文献１】“SCALE-MAMBA Software”、２０１８年８月２０日、［online］、［平成３０年８月２０日検索］、インターネット〈URL：https://homes.esat.kuleuven.be/~nsmart/SCALE/〉
【発明の概要】
【発明が解決しようとする課題】
【０００６】
なお、上記先行技術文献の各開示を、本書に引用をもって繰り込むものとする。以下の分析は、本発明者らによってなされたものである。【０００７】
上述のように、秘密計算の実行には秘密計算実行コードの生成が必要である。その際、秘密計算コンパイラが使用されるが、当該秘密計算コンパイラが処理可能なソースコードは秘密計算用に作成されたソースコード（以下、秘密計算専用コードと表記する）である。つまり、秘密計算コンパイラは、Ｃ言語やＰｙｔｈｏｎ等の汎用的な言語で記載されたソースコードから秘密計算実行コードを生成することができない。そのため、秘密計算に精通した専門家が、汎用の言語で記載されたソースコードを改編するなどして秘密計算専用コードを生成したりしている。換言すれば、秘密計算に関する専門的な知識を有さない技術者が、秘密計算専用コードを生成するのは困難な状況にある。【０００８】
ここで、欧州における一般データ保護規則（ＧＤＰＲ；General Data Protection Regulation）の施行に代表されるように、事業者が個人情報を第三者に提供することが困難になってきている。一方で、自身が保持する情報だけでなく、他者が保持する情報を活用することで、有益なサービスを提供する取り組みがなされている。例えば、異なる医療機関が有する情報（氏名、病歴、遺伝子情報等）を統合し、これらの情報を解析することで特定の疾患に影響する遺伝子等を特定するといったサービスが検討されている。【０００９】
しかし、各医療機関のそれぞれが保持する情報をその内容が特定できる形式にて第三者に提供することは困難である。そのため、個人情報を秘匿しつつ各医療機関の有する情報の解析を実現するための技術として秘密計算の活用が期待される。具体的には、上記解析処理に使用する情報（各医療機関が保持する個人情報）が、各秘密計算サーバに秘密分散される。各秘密計算サーバは、秘密分散された情報（シェア情報）を用いて各種の統計処理を実行し、統計結果を出力する。【００１０】
このように秘密計算を活用することで、各医療機関が保持する個人情報を秘密にしたまま、複数の医療機関が有する情報から有益な情報を引き出すことができる。【００１１】
上記説明したように、個人情報の保護がより一層求められる状況において、秘密計算の応用範囲、適用範囲は増加すると見込まれる。しかし、上述のように、秘密計算の実現には秘密計算に関する専門知識が必要となっており、各種システムへ秘密計算技術を導入する際の障害となっている。【００１２】
本発明は、秘密計算実行環境を容易に構築可能とすることに寄与する、変換装置、変換方法及びプログラムを提供することを主たる目的とする。
【課題を解決するための手段】
【００１３】
本発明乃至開示の第１の視点によれば、ソースコードを入力する、入力部と、複数の秘密計算サーバに実行させる秘密計算に関する設定情報に基づき、前記入力されたソースコードを秘密計算コンパイラが処理可能に変換する、変換部と、を備える、変換装置が提供される。【００１４】
本発明乃至開示の第２の視点によれば、ソースコードを入力するステップと、複数の秘密計算サーバに実行させる秘密計算に関する設定情報に基づき、前記入力されたソースコードを秘密計算コンパイラが処理可能に変換するステップと、を含む、変換方法が提供される。【００１５】
本発明乃至開示の第３の視点によれば、ソースコードを入力する処理と、複数の秘密計算サーバに実行させる秘密計算に関する設定情報に基づき、前記入力されたソースコードを秘密計算コンパイラが処理可能に変換する処理と、をコンピュータに実行させるプログラムが提供される。
なお、このプログラムは、コンピュータが読み取り可能な記憶媒体に記録することができる。記憶媒体は、半導体メモリ、ハードディスク、磁気記録媒体、光記録媒体等の非トランジェント（non-transient）なものとすることができる。本発明は、コンピュータプログラム製品として具現することも可能である。
【発明の効果】
【００１６】
本発明乃至開示の各視点によれば、秘密計算実行環境を容易に構築可能とすることに寄与する、変換装置、変換方法及びプログラムが、提供される。
【図面の簡単な説明】
【００１７】
【図１】一実施形態の概要を説明するための図である。
【図２】第１の実施形態に係る秘密計算システムの概略構成の一例を示す図である。
【図３】第１の実施形態に係る秘密計算サーバの処理構成の一例を示す図である。
【図４】第１の実施形態に係るコード生成装置の処理構成の一例を示す図である。
【図５】第１の実施形態に係るコード変換装置の処理構成の一例を示す図である。
【図６】第１の実施形態に係るコード変換装置が入力するソースコードの一例を示す図である。
【図７】第１の実施形態に係る変換部が参照する設定情報の一例を示す図である。
【図８】秘密計算専用コードの一例を示す図である。
【図９】秘密計算専用コードの一例を示す図である。
【図１０】第１の実施形態に係るコード変換装置のハードウェア構成の一例を示す図である。
【図１１】第１の実施形態に係る秘密計算システムの動作の一例を示すシーケンス図である。
【図１２】第２の実施形態に係るパラメータ等の秘密分散要否を判断するためのリストの一例を示す図である。
【図１３】第２の実施形態に係るコード変換装置の動作を説明するための図である。
【発明を実施するための形態】
【００１８】
初めに、一実施形態の概要について説明する。なお、この概要に付記した図面参照符号は、理解を助けるための一例として各要素に便宜上付記したものであり、この概要の記載はなんらの限定を意図するものではない。また、各図におけるブロック間の接続線は、双方向及び単方向の双方を含む。一方向矢印については、主たる信号（データ）の流れを模式的に示すものであり、双方向性を排除するものではない。さらに、本願開示に示す回路図、ブロック図、内部構成図、接続図などにおいて、明示は省略するが、入力ポート及び出力ポートが各接続線の入力端及び出力端のそれぞれに存在する。入出力インターフェイスも同様である。
【００１９】
一実施形態に係る変換装置１００は、入力部１０１と、変換部１０２と、を備える（図１参照）。入力部１０１は、ソースコードを入力する。変換部１０２は、複数の秘密計算サーバに実行させる秘密計算に関する設定情報に基づき、入力されたソースコードを秘密計算コンパイラが処理可能に変換する。
【００２０】
上記変換装置１００によれば、ユーザが用意したソースコードから秘密計算コンパイラが処理可能な秘密計算専用コードが得られる。その結果、秘密計算に関数する専門知識を有しないユーザであっても、容易に秘密計算実行環境を構築することができる。
【００２１】
以下に具体的な実施の形態について、図面を参照してさらに詳しく説明する。なお、各実施形態において同一構成要素には同一の符号を付し、その説明を省略する。
【００２２】
［第１の実施形態］
第１の実施形態について、図面を用いてより詳細に説明する。
【００２３】
図２は、第１の実施形態に係る秘密計算システムの概略構成の一例を示す図である。図２を参照すると、秘密計算システムには、複数の秘密計算サーバ１０−１〜１０−３と、コード生成装置２０と、コード変換装置３０と、ユーザ装置４０と、が含まれる。
【００２４】
図２に示す各装置は相互に接続され、互いにデータの送受信が可能に構成されている。なお、以降の説明において、秘密計算サーバ１０−１〜１０−３を区別する特段の理由がない場合には、単に「秘密計算サーバ１０」と表記する。また、図２に示すシステム構成は例示であって、秘密計算サーバ１０等の数を限定する趣旨ではないことは勿論である。
【００２５】
秘密計算サーバ１０は、秘密計算を実行するサーバである。秘密計算サーバ１０は、ユーザ装置４０から入力データ（秘密分散するデータ）を受け取る。各秘密計算サーバ１０は、他のサーバと協働し上記入力データを用いた所定の処理を実行する。秘密計算サーバ１０は、計算結果をユーザ装置４０に送信する。あるいは、秘密計算サーバ１０は、計算結果をユーザ装置４０とは異なる外部装置に送信してもよい。
【００２６】
コード生成装置２０は、秘密計算サーバ１０に配付する秘密計算実行コードを生成する装置である。コード生成装置２０には、例えば、非特許文献１に開示された秘密計算コンパイラがインストールされている。
【００２７】
コード変換装置３０は、ユーザの操作によりソースコードを取得し、当該取得したソースコードをコード生成装置２０が処理可能（受け付け可能）な秘密計算専用コードに変換する装置である。なお、コード変換装置３０は、例えば、ネットワークを介してソースコードを取得する。
【００２８】
続いて、秘密計算システムに含まれる各装置について説明する。
【００２９】
［秘密計算サーバ］
図３は、第１の実施形態に係る秘密計算サーバ１０の処理構成（処理モジュール）の一例を示す図である。図３を参照すると、秘密計算サーバ１０は、通信制御部２０１と、秘密計算実行部２０２と、記憶部２０３と、を含んで構成される。
【００３０】
通信制御部２０１は、他の装置との間の通信を制御する手段である。通信制御部２０１は、コード生成装置２０から取得する秘密計算実行コードやユーザ装置４０から取得する入力データを秘密計算実行部２０２に引き渡す。通信制御部２０１は、秘密計算実行部２０２による秘密計算の実行結果を他の装置（例えば、ユーザ装置４０）に送信する。
【００３１】
秘密計算実行部２０２は、秘密計算を実行する。秘密計算実行部２０２は、通信制御部２０１を介して取得したデータ（秘密計算実行コード、入力データ等）を記憶部２０３に格納する。
【００３２】
記憶部２０３は、上記データに加え、種々の情報を保持する。具体的には、記憶部２０３は、自装置が何番目の「パーティ」として動作するかを規定する情報や他の秘密計算サーバ（他のパーティ）に関する情報（例えば、ＩＰ（Internet protocol）アドレス等）を記憶する。
【００３３】
秘密計算実行部２０２は、記憶部２０３に格納された情報を用いて秘密計算を行う。秘密計算実行部２０２は、秘密分散データ生成部２１１と、秘密計算部２１２と、秘密分散データ復元部２１３とからなるサブモジュールを含む。
【００３４】
秘密分散データ生成部２１１は、秘密分散実行コードに「自装置にて入力データを秘密分散して他のサーバに配付する」旨の記述がある場合に、動作するモジュールである。自装置のパーティ番号（識別子）と秘密分散実行コードにて指定されたパーティ番号が一致する秘密計算サーバ１０の秘密分散データ生成部２１１は、取得した入力データを秘密分散して秘密情報（シェア情報）を他の秘密計算サーバ１０に配付する。
【００３５】
秘密計算部２１２は、秘密計算実行コードを実行する。秘密分散を利用したマルチパーティ計算では、シェア情報の加算（減算）に関しては自装置内部で閉じた演算を行う（ローカルで計算する）。対して、シェア情報の乗算（除算）に関しては、自装置の計算結果が他の秘密計算サーバ１０に送信され、処理が進められる。
【００３６】
秘密分散データ復元部２１３は、秘密分散実行コードに「自装置にて計算結果を復号する」旨の記述がある場合に、動作するモジュールである。自装置のパーティ番号と秘密分散実行コードにて指定されたパーティ番号が一致する秘密計算サーバ１０の秘密分散データ復元部２１３は、各サーバに分散している計算結果を収集し、復元する。
【００３７】
［コード生成装置］
図４は、第１の実施形態に係るコード生成装置２０の処理構成（処理モジュール）の一例を示す図である。図４を参照すると、コード生成装置２０は、通信制御部３０１と、秘密計算コンパイル部３０２と、記憶部３０３と、を含んで構成される。
【００３８】
通信制御部３０１は、他の装置との間の通信を制御する手段である。通信制御部３０１は、コード変換装置３０から取得した秘密計算専用コードを秘密計算コンパイル部３０２に引き渡す。
【００３９】
秘密計算コンパイル部３０２は、例えば、非特許文献１に開示されたプログラムにより実現される。秘密計算コンパイル部３０２は、記憶部３０３に格納された設定ファイル等を参照し、上記秘密計算専用コードのコンパイル処理を実行する。秘密計算コンパイル部３０２は、コンパイル処理により生成された秘密計算実行コードを各秘密計算サーバ１０に配付する。
【００４０】
なお、上述のように、秘密計算コンパイル部３０２は、非特許文献１に開示されプログラムにより実現できるので詳細な説明は省略するが、概略以下のような処理を実行する。
【００４１】
秘密計算では乗算を完結させるために他の秘密計算サーバ１０との間の通信が必要となる。他の秘密計算サーバ１０との間の通信は、秘密計算の速度が低下する要因となる。秘密計算コンパイル部３０２は、上記通信の回数が限りなく少なくなるように秘密計算実行コードを生成する。具体的には、秘密計算コンパイル部３０２は、乗算に伴うサーバ間の通信回数が少なくなるように秘密計算専用コードに記載された乗算の順序を変更する等の処理を行う。
【００４２】
なお、秘密計算コンパイル部３０２は、例えば、秘密計算専用コードがＣ言語を基本として記載されていれば、上記乗算に関する処理を行いつつＣ言語コンパイラとして動作する。秘密計算コンパイル部３０２は、他の言語に関しても同様に、秘密計算専用コードに用いられている言語に対応するコンパイルをしつつ、上記乗算に関する処理（コード生成）を行う。なお、システム管理者が、秘密計算専用コードの言語を予めコード生成装置２０に入力してもよいし、秘密計算コンパイル部３０２が使用されている言語を自動判別してもよい。
【００４３】
［コード変換装置］
図５は、第１の実施形態に係るコード変換装置３０の処理構成（処理モジュール）の一例を示す図である。図５を参照すると、コード変換装置３０は、入力部４０１と、変換部４０２と、出力部４０３と、記憶部４０４と、を含んで構成される。
【００４４】
入力部４０１は、ソースコードを入力する手段である。入力部４０１は、ユーザの操作によりソースコードを取得する。あるいは、入力部４０１は、ネットワークを介してソースコードを取得してもよい。
【００４５】
変換部４０２は、複数の秘密計算サーバ１０に実行させる秘密計算に関する設定情報に基づき、入力されたソースコードを秘密計算コンパイラが処理可能に変換する手段である。変換部４０２は、ユーザが入力したソースコードを秘密計算実行コードに変換する。変換部４０２の詳細な動作は後述する。
【００４６】
出力部４０３は、生成された秘密計算実行コードをコード生成装置２０に出力する手段である。
【００４７】
記憶部４０４は、例えば、変換部４０２による変換処理に必要となる設定情報等を記憶する。記憶部４０４が記憶する設定情報の具体的な内容は変換部４０２の動作と併せて後述する。
【００４８】
次に、図面を参照しつつ、変換部の動作を説明する。
【００４９】
変換部４０２は、入力部４０１を介してソースコードを取得する。ここでは、変換部４０２は、図６に示すソースコードを取得したものとする。図６に示すソースコードは、パイソン（Ｐｙｔｈｏｎ）により記述されている。なお、ソースコードの言語をパイソンに限定する趣旨ではないことは勿論である。コード変換装置３０は、Ｃ言語、Ｂａｓｉｃ、アセンブラ等の任意の言語により記載されたソースコードを取り扱うことができる。
【００５０】
当該ソースコードは、外部から取得する入力データを１０倍し、当該１０倍された入力データの平均値算出を実現する。図６に示すプログラムは、メイン関数（ｍａｉｎ）とサブ関数（ｆｕｎｃｔｉｏｎ）を含み、上記平均値を算出する。
【００５１】
変換部４０２は、図６に示すソースコードを変換し、コード生成装置２０に提供する「秘密計算専用コード」を生成する。その際、変換部４０２は、記憶部４０４に格納された設定情報を参照する。
【００５２】
図７は、変換部４０２が参照する設定情報の一例を示す図である。設定情報には、秘密計算サーバ１０に関する情報や変換部４０２の変換動作を決定する種々の規則（ルール）が含まれる。例えば、入力関数、出力関数の変換処理に関する規則や、パラメータや型に関する変換処理に関する規則が設定情報には含まれる。
【００５３】
図７（ａ）は、秘密計算サーバ１０に関する情報の一例を示す。図７（ａ）には、秘密計算サーバ１０に関する情報として、「データの入力形態」と「データの復元主体」に関する設定が記載されている。
【００５４】
データの入力形態は、秘密計算サーバ１０が秘密計算を実行する際に必要となるデータをどのようにして取得するかを定める設定である。
【００５５】
当該設定の取り得る設定としては、図７（ａ）に示すように複数の秘密計算サーバ１０のうち代表サーバに定められたサーバが、入力データを受け取り、当該サーバが入力データを秘密分散して他の秘密計算サーバ１０に配付する形態がある。図２及び図７（ａ）の例では、代表サーバである秘密計算サーバ１０−１がユーザ装置４０からデータを取得する。秘密計算サーバ１０−１は、当該取得した入力データを秘密分散し、他の秘密計算サーバ１０−２、１０−３に配付する。
【００５６】
データの入力形態に関する他の設定としては、外部装置にてデータを秘密分散し、当該外部装置が秘密計算サーバ１０に秘密分散されたデータを配付する形態がある（外部装置による配付）。例えば、図２の例では、ユーザ装置４０がデータを秘密分散し、当該データを３台の秘密計算サーバ１０に配付する。
【００５７】
データの復元主体に関する設定は、秘密計算により得られた結果を復元する主体（サーバ）を定める。例えば、図７（ａ）の例では、代表サーバである秘密計算サーバ１０−１が、他の秘密計算サーバ１０−２、１０−３から秘密計算の結果を収集し、自身が所有する計算結果及び上記収集した計算結果の復元を行う。図６に示す例では、１０倍後の入力データの平均値が各秘密計算サーバ１０に分散して配置されているので、代表サーバである秘密計算サーバ１０−１は当該平均値を復元する。
【００５８】
データの復元主体に関する他の設定としては、外部装置にてデータを復元する形態がある（外部装置による復元）。例えば、図２の例では、ユーザ装置４０が各秘密計算サーバ１０から計算結果を収集し、秘密計算の結果を復元してもよい。
【００５９】
図７（ｂ）は、入力関数の変換処理に関する規則の一例を示す図である。変換部４０２は、当該規則により指定された入力関数を秘密計算に適した関数に変換する。
【００６０】
図７（ｂ）の例では、変換部４０２は、ソースコードの中に「ｇｅｔ＿ｉｎｐｕｔ」が含まれると当該入力関数を「ｇｅｔ＿ｉｎｐｕｔ＿ｆｒｏｍ（）」に書き換える。なお、上記関数のｆｒｏｍに続く括弧には入力データを取得する代表サーバの識別子が設定される。また、外部装置がデータを秘密分散し、各秘密計算サーバ１０に秘密分散されたデータを配付する場合には、変換部４０２は、「ｇｅｔ＿ｉｎｐｕｔ」を「ｇｅｔ＿ｉｎｐｕｔ（ｅｘｔｅｒｎａｌ）」のように書き換える。
【００６１】
図７（ｃ）は、出力関数の変換処理に関する規則の一例を示す図である。変換部４０２は、当該規則により指定された出力関数を秘密計算に適した関数に変換する。
【００６２】
図７（ｃ）の例では、変換部４０２は、ソースコードの中に「ｐｒｉｎｔ＿ｌｎ」が含まれると当該出力関数の引数に「ｒｅｖｅａｌ（）」を追加する。なお、「ｒｅｖｅａｌ」に続く括弧には計算結果を復元する代表サーバの識別子が設定される。
【００６３】
図７（ｄ）は、パラメータの変換処理に関する設定の一例を示す図である。変換部４０２は、外部装置（ユーザ装置４０）から取得する入力データに関しては秘密にする。変換部４０２は、入力データ以外のパラメータ、定数等に関して秘密分散するか否かを当該設定に基づき決定する。例えば、当該パラメータに関する変換処理に関する設定には、「最小」又は「最大」といった設定値が設定され得る。
【００６４】
当該設定が「最小」であれば、秘密分散される入力データと、当該入力データから影響を受けるパラメータと、が秘密分散の対象となる。また、上記設定が「最大」であれば、ソースコードに含まれるパラメータ、定数の全てが秘密分散の対象となる。なお、上記設定（最小、最大）の具体例については変換部４０２の動作と併せて後述する。
【００６５】
図７（ｅ）は、型の変換処理に関する設定の一例を示す図である。変換部４０２は、ソースコードにパラメータの型に関する明記があれば、当該パラメータを明記された型に対応する秘密計算用の型に変換する。
【００６６】
しかし、言語によっては型に関する明記がない場合もある。そのような場合、変換部４０２は、型の変換処理に関する設定を参照し、当該設定に応じた秘密計算用の型を用いる。図７（ｅ）の例では、変換部４０２は、型の明示がないパラメータを秘密計算用の整数型に変換する。
【００６７】
また、除算結果を「固定小数点」とするのか、「浮動小数点」とするのかに関する設定も型の変換処理に関する設定に含まれる。図７（ｅ）の例では、秘密分散されたパラメータの除算結果は固定小数点とすることが定められている。
【００６８】
続いて、図６に示すソースコードを参照しつつ、上記設定情報を用いた変換部４０２の変換処理を具体的に説明する。初めに、変換部４０２は、設定情報のうち入力関数に関する設定により指定された関数をソースコードから検出（抽出）する。
【００６９】
図７の例では、変換部４０２は、「ｇｅｔ＿ｉｎｐｕｔ」の検出を試みる。変換部４０２は、図６に示すソースコードの５行目にて当該関数を検出する。変換部４０２は、設定情報の秘密計算サーバに関する設定を参照し、「データの入力形態」に関する設定値を確認する。
【００７０】
図７では、代表サーバ（秘密計算サーバ１０−１）による秘密分散が設定されており、変換部４０２は、図７（ｂ）に記載された「ｇｅｔ＿ｉｎｐｕｔ＿ｆｒｏｍ（）」におけるｆｒｏｍの括弧に秘密計算サーバ１０−１の識別子（例えば、「１」）を設定する。その結果、図８の５行目に示すように、「ｇｅｔ＿ｉｎｐｕｔ」は「ｓｉｎｔ．ｇｅｔ＿ｉｎｐｕｔ＿ｆｒｏｍ（１）」に変換される。
【００７１】
なお、「ｇｅｔ＿ｉｎｐｕｔ」には型の明記がないので、変換部４０２は、図７（ｅ）の設定に従い、秘密計算用の整数型であるｓｉｎｔを上記関数に設定している。
【００７２】
このように、変換部４０２は、設定情報に含まれる入力関数であって、ソースコードに含まれる所定の入力関数を秘密計算用の入力関数に置換する。その際、変換部４０２は、必要に応じて、秘密計算用の入力関数に、複数の秘密計算サーバのうち秘密分散するデータを取得する秘密計算サーバ（代表サーバ）の情報を設定する。
【００７３】
ここで、変換部４０２は、上記入力関数（外部装置からデータを取得するための関数）により取得するデータの格納先となるパラメータを秘密分散の対象の１つとする。図６の例では、３行目、５行目等に記載された「ｉｎｐｕｔ＿ｖａｌｕｅｓ」が秘密分散の対象となるパラメータである。
【００７４】
次に、変換部４０２は、設定情報におけるパラメータの秘密分散に関する設定を参照する。
【００７５】
図７（ｄ）の例では、当該設定に関して「最小」が設定されているので、変換部４０２は、入力関数から定まる秘密分散の対象パラメータと、当該パラメータに影響を受けるパラメータを秘密分散の対象とする。
【００７６】
図６の例では、「ｉｎｐｕｔ＿ｖａｌｕｅｓ」が秘密分散の対象パラメータである。また、図６の７行目を確認すると、当該パラメータは関数ｍｅａｎの第１引数として用いられている。当該関数では、第１引数（ｖａｌｕｅ）は、１４行目にて１０倍され、パラメータｓｕｍに加算されている。従って、当該パラメータｓｕｍも秘密分散のパラメータから影響を受けるので秘密分散の対象となる。
【００７７】
また、当該パラメータｓｕｍと関数ｍｅａｎの第２引数（ｎｕｍ）は、１５行目にて除算されるので、パラメータｍｅａｎも秘密分散のパラメータから影響を受ける（間接的に影響を受ける）。従って、当該パラメータｍｅａｎも秘密分散の対象となる。
【００７８】
まとめると、図６の例では、ｉｎｐｕｔ＿ｖａｌｕｅｓ、ｓｕｍ、ｍｅａｎの各パラメータが秘密分散の対象となる。
【００７９】
変換部４０２は、設定情報における「型の変換処理に関する設定」を確認し、秘密分散の対象となるパラメータの型を決定し、ソースコードに反映する。
【００８０】
図７（ｄ）の例では、型の明記がなければ「秘密計算用の整数型」に変換することが定められている。パラメータ「ｉｎｐｕｔ＿ｖａｌｕｅｓ」には型の明記がないので、変換部４０２は、当該パラメータの型は整数型として扱う。具体的には、図８の３行目に示すように、変換部４０２は、関数Ａｒｒａｙの型を秘密計算の整数型を示す（秘密計算コンパイラにて秘密分散の整数型として扱われる）ｓｉｎｔに変換する。
【００８１】
パラメータ「ｓｕｍ」の型に関しては、図６の１２行目に示すように整数型であることが明記されているので、変換部４０２は、当該パラメータに関しては変換前の整数型を維持しつつ、秘密分散の対象であること示すｓｉｎｔを設定する。具体的には、図８の１２行目に示すように、パラメータｓｕｍの型が「ｓｉｎｔ」に設定される。なお、図８の１２行目では、当該パラメータの初期値として「０」が設定されている。
【００８２】
パラメータｍｅａｎの型に関し、変換部４０２は、当該パラメータが秘密分散の対象パラメータであるｓｕｍを定数（ｎｕｍ、ｎｕｍ＿ｉｎｐｕｔ）で除算した結果を格納する点に着目する。
【００８３】
除算であるので、変換部４０２は、図７（ｅ）に示す設定（除算時の型）を参照し、パラメータｍｅａｎを秘密計算用の固定小数点型となるように変換する。具体的には、変換部４０２は、図８の１６〜１９行までの処理を追加する。
【００８４】
より詳細には、変換部４０２は、除算の対象（ｓｕｍ、ｎｕｍ）となるパラメータに対応する新たなパラメータを固定小数点型のパラメータとして定義する。具体的には、パラメータｓｕｍに対応する固定小数点型のパラメータＳｆと、定数ｎｕｍに対応する固定小数点型のパラメータＮｆが定義される（図８の１６行目、１８行目）。
【００８５】
変換部４０２は、パラメータｓｕｍ、ｎｕｍの型を整数型から固定小数点型に変換すると共に、これらの値を新たなパラメータＳｆ、Ｎｆにロードする（図８の１７行目、１９行目）。パラメータｓｕｍ、ｎｕｍは新たなパラメータに置換されているので、変換部４０２は、これらのパラメータを使った除算を新たなパラメータＳｆ、Ｎｆに置き替える（図８の２０行目）。
【００８６】
このように、変換部４０２は、所定の入力関数により取得されるデータの格納先となる第１パラメータ（上記例では、ｉｎｐｕｔ＿ｖａｌｕｅｓ）を秘密分散の対象に設定し、当該第１パラメータが秘密分散されるようにソースコードを変換する。さらに、変換部４０２は、上記第１パラメータから影響を受ける第２パラメータ（上記例では、ｓｕｍ等）を秘密分散の対象に設定し、当該第２パラメータが秘密分散されるようにソースコードを変換する。
【００８７】
次に、変換部４０２は、設定情報のうち出力関数に関する設定により指定された関数をソースコードから検出（抽出）する。
【００８８】
図７（ｃ）の例では、変換部４０２は、「ｐｒｉｎｔ＿ｌｎ」の検出を試みる。その結果、変換部４０２は、図６に示すソースコードの８行目にて当該関数を検出する。変換部４０２は、設定情報の秘密計算サーバに関する設定を参照し、「データの復元主体」に関する設定値を確認する。
【００８９】
図７（ａ）の例では、代表サーバ（秘密計算サーバ１０−１）による処理結果の復元が規定されている。そのため、変換部４０２は、図７（ｃ）に記載された「ｐｒｉｎｔ＿ｌｎ（−、ｒｅｓｕｌｔ．ｒｅｖｅａｌ（））」における括弧に秘密計算サーバ１０−１の識別子（例えば、「１」）を設定する。その結果、図８の８行目に示すように、「ｐｒｉｎｔ＿ｌｎ（’ｍｅａｎ＝％ｓ’￥ｎ、ｒｅｓｕｌｔ）」は「ｐｒｉｎｔ＿ｌｎ（’ｍｅａｎ＝％ｓ’￥ｎ、ｒｅｓｕｌｔ．ｒｅｖｅａｌ（１））」に変換される。
【００９０】
このように、変換部４０２は、設定情報に含まれる出力関数であって、ソースコードに含まれる所定の出力関数を秘密計算用の出力関数に置換する。その際、変換部４０２は、必要に応じて、複数の秘密計算サーバ１０により実行された秘密計算の結果を復号する秘密計算サーバ（代表サーバ）の情報を秘密計算用の出力関数に設定する。
【００９１】
続いて、図７（ｄ）に示すパラメータの変換処理に関する設定に「最大」が設定されている場合の変換部４０２の動作について説明する。
【００９２】
当該設定が「最大」である場合には、変換部４０２は、ソースコードに含まれる全てのパラメータ、定数を秘密分散する。図６の例では、２行目に記載されたｎｕｍ＿ｉｎｐｕｔ、１４行目に記載された定数「１０」も秘密分散される。
【００９３】
図６のソースコードにおいて、パラメータの変換処理に関する設定が「最大」であれば、変換部４０２は、例えば、図９に示す秘密計算専用コードを生成する。図８と図９に示す秘密計算専用コードの相違点は、図９の２行目においてｎｕｍ＿ｉｎｐｕｔを秘密分散用の整数型に定義し、その値に「１０００」を設定している点が異なる。さらに、２つの秘密計算専用コードは、図９の１３行目に秘密分散用の整数型パラメータｐ１が追加されている点と、１５行目の定数「１０」が上記パラメータｐ１に置き替えられている点で相違する。
【００９４】
このように、パラメータの変換処理に関する設定に「最大」が設定されていれば、変換部４０２は、外部から取得するパラメータ及びその影響を受けるパラメータに加え、ソースコードの記載された他のパラメータや定数を秘密分散する。
【００９５】
当該秘密分散により、ソースコードに含まれる情報の漏洩を強固に防止することができる。例えば、図６の１４行目に記載された定数「１０」にユーザの知見（ノウハウ）が集約されている場合には、当該定数も秘密とすることが望ましい。第１の実施形態に係るコード変換装置３０は、当該要望を満たす秘密計算専用コードも作成することができる。
【００９６】
［ユーザ装置］
ユーザ装置４０は、秘密計算サーバ１０に秘密計算させる処理の入力データを提供する装置である。あるいは、ユーザ装置４０は、秘密計算サーバ１０による秘密計算の結果を取得してもよい。ユーザ装置４０の構成及び動作は、当業者に取って明らかであるため、その詳細な説明を省略する。
【００９７】
［ハードウェア構成］
続いて、秘密計算システムをなす各装置のハードウェア構成について説明する。
【００９８】
図１０は、コード変換装置３０のハードウェア構成の一例を示す図である。コード変換装置３０は、所謂、情報処理装置（コンピュータ）により実現され、図１０に例示する構成を備える。例えば、コード変換装置３０は、内部バスにより相互に接続される、ＣＰＵ（Central Processing Unit）３１、メモリ３２、入出力インターフェイス３３、通信手段であるＮＩＣ（Network Interface Card）３４等を備える。
【００９９】
但し、図１０に示す構成は、コード変換装置３０のハードウェア構成を限定する趣旨ではない。コード変換装置３０は、図示しないハードウェアを含んでもよい。コード変換装置３０に含まれるＣＰＵ等の数も図１０の例示に限定する趣旨ではなく、例えば、複数のＣＰＵ３１がコード変換装置３０に含まれていてもよい。
【０１００】
メモリ３２は、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）、補助記憶装置（ハードディスク等）等である。
【０１０１】
入出力インターフェイス３３は、図示しない入出力装置のインターフェイスである。入出力装置には、例えば、表示装置、操作デバイス等が含まれる。表示装置は、例えば、液晶ディスプレイ等である。操作デバイスは、例えば、キーボードやマウス等である。
【０１０２】
コード変換装置３０の機能は、上述の処理モジュールにより実現される。当該処理モジュールは、例えば、メモリ３２に格納されたプログラムをＣＰＵ３１が実行することで実現される。また、そのプログラムは、ネットワークを介してダウンロードするか、あるいは、プログラムを記憶した記憶媒体を用いて、更新することができる。さらに、上記処理モジュールは、半導体チップにより実現されてもよい。即ち、上記処理モジュールが行う機能は、何らかのハードウェア、或いはハードウェアを利用して実行されるソフトウェアにより実現できればよい。
【０１０３】
なお、コード生成装置２０、秘密計算サーバ１０及びユーザ装置４０も情報処理装置（コンピュータ）により実現可能であり、そのハードウェア構成は当業者にとって明らかであるため詳細な説明を省略する。
【０１０４】
［システムの動作］
図１１は、第１の実施形態に係る秘密計算システムの動作の一例を示すシーケンス図である。
【０１０５】
初めに、コード変換装置３０は、ユーザからソースコードを取得する（ステップＳ０１）。
【０１０６】
その後、コード変換装置３０は、設定情報を参照しつつ、取得したソースコードを秘密計算専用コードに変換する（ステップＳ０２）。
【０１０７】
コード変換装置３０は、秘密計算専用コードをコード生成装置２０に出力する（ステップＳ０３）。
【０１０８】
コード生成装置２０は、秘密計算コンパイラを用いて、上記秘密計算専用コードをコンパイルし、秘密計算実行コードを生成する（ステップＳ０４）。
【０１０９】
コード生成装置２０は、生成した秘密計算実行コードを各秘密計算サーバ１０に配付する（ステップＳ０５）。
【０１１０】
上記処理により、各秘密計算サーバ１０は、秘密計算を実行するための準備が完了する。その後、ユーザ装置４０は、秘密計算サーバ１０に入力データを出力する（ステップＳ１１）。例えば、ユーザ装置４０は、代表サーバに設定された秘密計算サーバ１０に向けて入力データを出力する。なお、秘密計算システムをなす各装置にて、いずれの秘密計算サーバ１０が代表サーバとして動作するのかに関する情報を共有しておく。
【０１１１】
各秘密計算サーバ１０は、秘密計算実行コードと入力データを用いて秘密計算を実行する（ステップＳ１２）。
【０１１２】
代表サーバに設定された秘密計算サーバ１０は、秘密計算の結果を復元する（ステップＳ１３）。
【０１１３】
当該秘密計算サーバ１０は、復元結果をユーザ装置４０に向けて送信する（ステップＳ１４）。
【０１１４】
以上のように、第１の実施形態に係るコード変換装置３０は、複数の秘密計算サーバ１０に実行させる秘密計算に関する設定情報に基づき、入力されたソースコードを秘密計算コンパイラが処理可能に変換する。その結果、秘密計算に関数する専門知識を有しないユーザであっても、容易に秘密計算実行環境を構築することができる。
【０１１５】
［第２の実施形態］
続いて、第２の実施形態について図面を参照して詳細に説明する。
【０１１６】
第１の実施形態では、パラメータの秘密分散に関し、設定値を「最小」、「最大」とする場合について説明した。第２の実施形態では、パラメータの秘密分散に関する他の設定について説明する。
【０１１７】
ソースコードの規模が小さい場合には、上記「最大」の設定でも対象となるパラメータ、定数の数が少なく、大きな問題は生じない。しかし、ソースコードの規模が大きくなるつれ、コード変換により生成された秘密計算実行コードによる秘密計算の性能（実行速度等）が問題となる。
【０１１８】
そこで、第２の実施形態では、ユーザが秘密計算の対象となるパラメータ、定数等を選択できるコード変換装置３０を説明する。
【０１１９】
例えば、入力部４０１は、ソースコードと共に、当該ソースコードに含まれるパラメータ、定数を秘密にするか否かが記載されたリストを取得してもよい。コード変換装置３０の変換部４０２は、当該リストに従いパラメータ、定数を秘密分散するか否かを判断してもよい。図６に示すソースコードの例では、図１２に示すようなリストに基づき、変換部４０２は、パラメータ等の秘密分散の要否を判断してもよい。
【０１２０】
このように、第２の実施形態に係るコード変換装置３０は、秘密分散の対象となるパラメータ、定数を指定するリストを入力し、当該リストにより指定されたパラメータ、定数が秘密分散されるようにソースコードを変換してもよい。
【０１２１】
あるいは、コード変換装置３０は、取得したソースコードを液晶ディスプレイ等に表示しつつ、当該ソースコードに含まれるパラメータ等の秘密分散要否をユーザが入力するためのＧＵＩ（Graphical User Interface）を提供してもよい（図１３参照）。このように、コード変換装置３０は、ＧＵＩによりユーザから指定されたパラメータ、定数が秘密分散されるようにソースコードを変換してもよい。
【０１２２】
以上のように、第２の実施形態では、ユーザの設定、操作に基づき、秘密分散するパラメータ等を決定できるので、ユーザが真に秘密にしたい情報に限り隠蔽することができる。その結果、秘密分散するパラメータ等が絞り込まれ、必要な秘密計算の性能を確保できる。
【０１２３】
［変形例］
なお、第１及び第２の実施形態にて説明した秘密計算システムの構成及び動作は例示であって、種々の変形が可能である。例えば、図２に示すコード生成装置２０の機能とコード変換装置３０の機能が同じ装置により実現されてもよい。つまり、コード生成装置２０に「コード変換機能」が含まれていてもよいし、コード変換装置３０に「コード生成機能」が含まれていてもよい。
【０１２４】
あるいは、上記コード変換機能又はコード生成機能のうち少なくとも一方がユーザ装置４０に含まれていてもよい。
【０１２５】
図２の例では、１台のユーザ装置４０を図示し、当該ユーザ装置４０が秘密計算用のデータを秘密計算サーバ１０に供給しているが、複数のユーザ装置が上記秘密計算用のデータを秘密計算サーバ１０に供給してもよい。
【０１２６】
上記実施形態では、コード変換装置３０の内部に設定情報を格納する記憶部４０４が配置された例を説明したが、コード変換動作時に参照される設定情報はネットワーク上のデータベースサーバ等に格納されていてもよい。この場合、設定情報に秘密分散の対象とするパラメータの設定（パラメータの一覧）を含めつつ、ユーザが編集可能とすることで、ユーザがコード変換装置３０の変換動作を定めることができる。
【０１２７】
上記実施形態では、秘密計算用の入力関数や出力関数に代表サーバに関する情報（パーティ番号）を設定情報に明記する場合を説明した。しかし、当該設定を省略してもよい。この場合、コード変換装置３０は、予め定められた秘密計算サーバ１０を代表サーバに設定すればよい。
【０１２８】
第２の実施形態では、リストにより秘密分散するパラメータ等を指定する場合と、ＧＵＩを用いて当該パラメータを指定する場合を説明した。これらのパラメータ指定方法は互いに排他な関係にはなく、２つのパラメータ指定方法が併用されてもよい。例えば、コード変換装置３０は、ソースコードにリストにより指定された内容（各パラメータの秘密分散要否）を重ねて表示し、ユーザは当該表示を確認しつつ秘密分散するパラメータ、秘密分散しないパラメータを変更してもよい。
【０１２９】
上記実施形態では、コード変換装置３０による出力結果は、直ちにコード生成装置２０にて活用される場合を説明した。しかし、秘密計算の専門家が、コード変換装置３０による出力結果を確認し、適宜修正を加えてもよい。また、上記専門家による修正前の秘密計算専用コードと修正後の秘密計算専用コードの関係を蓄積し、当該蓄積された情報をＡＩ（Artificial Intelligence）等の学習装置に入力して学習モデルを構築してもよい。さらに、当該学習モデルを用いてコード変換装置３０が出力する秘密計算専用コードを修正する装置が秘密計算システムに含まれていてもよい。
【０１３０】
さらに、コンピュータの記憶部に、上述したコンピュータプログラムをインストールすることにより、コンピュータをコード変換装置３０として機能させることができる。さらにまた、上述したコンピュータプログラムをコンピュータに実行させることにより、コンピュータによりコード変換方法を実行することができる。
【０１３１】
なお、引用した上記の特許文献等の各開示は、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の全開示の枠内において種々の開示要素（各請求項の各要素、各実施形態ないし実施例の各要素、各図面の各要素等を含む）の多様な組み合わせ、ないし、選択（部分的削除を含む）が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。
【符号の説明】
【０１３２】
１０、１０−１〜１０−３  秘密計算サーバ
２０  コード生成装置
３０  コード変換装置
３１  ＣＰＵ（Central Processing Unit）
３２  メモリ
３３  入出力インターフェイス
３４  ＮＩＣ（Network Interface Card）
４０  ユーザ装置
１００  変換装置
１０１、４０１  入力部
１０２、４０２  変換部
２０１、３０１  通信制御部
２０２  秘密計算実行部
２１１  秘密分散データ生成部
２１２  秘密計算部
２１３  秘密分散データ復元部
２０３、３０２、４０４  記憶部
３０２  秘密計算コンパイル部
４０３  出力部
【図１】
2020059063.tif 000003
【図２】
2020059063.tif 000004
【図３】
2020059063.tif 000005
【図４】
2020059063.tif 000006
【図５】
2020059063.tif 000007
【図６】
2020059063.tif 000008
【図７】
2020059063.tif 000009
【図８】
2020059063.tif 000010
【図９】
2020059063.tif 000011
【図１０】
2020059063.tif 000012
【図１１】
2020059063.tif 000013
【図１２】
2020059063.tif 000014
【図１３】
2020059063.tif 000015
【国際調査報告】
2020059063.tif 000016
2020059063.tif 000017