(57)【要約】【課題】  秘密計算の高速化を図ることができるＦＰＧＡを設計する。【解決手段】  設計支援装置７０は、処理順決定部７１と変換部７２を備える。処理順決定部７１は、半導体集積回路の設計に利用される情報であり、かつ、秘密計算を実行する複数の論理ゲートの入力と出力の接続先を表す接続情報を受け取る。また、処理順決定部７１は、接続情報における論理ゲートのそれぞれの処理順を、当該論理ゲートの前段における論理ゲートの演算種別が関連する通信の要否に応じて、通信の実行タイミングに基づいて区分される処理順位区分の早い順位の区分から割り当てていくことにより、論理ゲートの処理順を決定する。変換部７２は、決定された論理ゲートの処理順の情報を含む秘匿回路を、通信の経路に応じた形式のコンピュータプログラムに変換する。【選択図】      図１８
2019057181.tif 000002
【特許請求の範囲】
【請求項１】
半導体集積回路の設計に利用される情報であり、かつ、秘密計算を実行する複数の論理ゲートの入力と出力の接続先を表す接続情報における前記論理ゲートのそれぞれの処理順を、当該論理ゲートの前段における前記論理ゲートの演算種別が関連する通信の要否に応じて、前記通信の実行タイミングに基づいて区分される処理順位区分の早い順位の区分から割り当てていくことにより、前記論理ゲートの処理順を決定する処理順決定部と、
決定された前記論理ゲートの処理順の情報を含む秘匿回路を、前記通信の経路に応じた形式のコンピュータプログラムに変換する変換部と
を備える設計支援装置。
【請求項２】
前記処理順決定部は、演算に前記通信が必要な論理ゲートである論理積ゲートの演算結果を利用せずに入力を得ることができる前記論理ゲートを前記接続情報から検知し、当該検知した前記論理ゲートを最も早い順位の処理順位区分に割り当てることにより、秘密計算において実行される前記通信の回数の最小化を図る
請求項１に記載の設計支援装置。
【請求項３】
前記通信は、前記半導体集積回路を搭載する互いに異なるコンピュータ装置間の通信、同じコンピュータ装置内における互いに異なる半導体集積回路間の通信、あるいは、同じ半導体集積回路内での通信である
請求項１又は請求項２に記載の設計支援装置。
【請求項４】
前記半導体集積回路は、ＦＰＧＡ（Field-Programmable Gate Array）である請求項１乃至請求項３の何れか一つに記載の設計支援装置。
【請求項５】
半導体集積回路の設計に利用される情報であり、かつ、秘密計算を実行する複数の論理ゲートの入力と出力の接続先を表す接続情報における前記論理ゲートのそれぞれの処理順を、当該論理ゲートの前段における前記論理ゲートの演算種別が関連する通信の要否に応じて、前記通信の実行タイミングに基づいて区分される処理順位区分の早い順位の区分から割り当てていくことにより、前記論理ゲートの処理順を決定し、
決定された前記論理ゲートの処理順の情報を含む秘匿回路を、前記通信の経路に応じた形式のコンピュータプログラムに変換し、
前記コンピュータプログラムに基づいて設計対象の前記半導体集積回路における配線の配置を決定する設計支援方法。
【請求項６】
半導体集積回路の設計に利用される情報であり、かつ、秘密計算を実行する複数の論理ゲートの入力と出力の接続先を表す接続情報における前記論理ゲートのそれぞれの処理順を、当該論理ゲートの前段における前記論理ゲートの演算種別が関連する通信の要否に応じて、前記通信の実行タイミングに基づいて区分される処理順位区分の早い順位の区分から割り当てていくことにより、前記論理ゲートの処理順を決定する処理と、
決定された前記論理ゲートの処理順の情報を含む秘匿回路を、前記通信の経路に応じた形式のコンピュータプログラムに変換する処理と、
前記コンピュータプログラムに基づいて設計対象の前記半導体集積回路における配線の配置を決定する処理と
をコンピュータに実行させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体集積回路であるＦＰＧＡ（Field-Programmable Gate Array）の設計に用いる技術に関する。
【背景技術】
【０００２】
個人情報保護の重要性が高まりつつある中、個人情報に該当する情報を扱う顔認証等のコンピュータ処理において個人情報の保護を図りながら個人情報を処理する技術として、秘密計算の技術が注目されている。秘密計算とは、暗号化されたデータを復号処理せずに暗号化したまま処理（計算）する技術である。
【０００３】
秘密計算を実現する技術として、非特許文献１に開示されている秘密分散を用いた技術が知られている。また、秘密計算は当該計算に特有な計算手続きに従って計算する。この特有な計算手続きが記載されたファイルは秘匿回路と呼ばれる。非特許文献２には秘匿回路を生成する手法が開示されている。
【０００４】
さらに、非特許文献３と非特許文献４には、秘密分散を用いた秘密計算の技術が開示されている。これら非特許文献３，４に開示されている秘密計算では、複数のサーバにデータを分散し各サーバで計算が行われる。また、非特許文献３，４における秘密計算では、論理積を計算する場合にサーバ間でデータの通信が行われる。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】David Chaum, Claude Crepeau, Ivan Damgard, ”Multiparty Unconditionally Secure Protocols”, Proceedings of the Twentieth Annual ACM Symposium on Theory of Computing (STOC), pp. 11-19, 1988
【非特許文献２】Ebrahim M. Songhori, Siam U. Hussain, Ahmad-Reza Sadeghi, Thomas Schneider, and Farinaz Koushanfar, ”Tinygarble: Highly compressed and scalable sequential garbled circuits”, IEEE Symposium on Security and Privacy, SP 2015, San Jose, CA, USA, May 17-21, 2015, pages 411-428, 2015
【非特許文献３】Dan Bogdanov, Sven Laur, and Jan Willemson, ”Sharemind: A Framewoek for Fast Privacy-Preserving Computations”, ESORICS 2008, LNCS 5283, pp.192-206, 2008
【非特許文献４】Toshinori Araki and et al., ”High-Throughput Semi-Honest Secure Three-Party Computation with an Honest Majority”, Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security, pp.805-817, 2016
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、秘密計算には、計算の高速化（計算時間の短縮化）が要求されている。秘密計算を高速化する手法として、ＦＰＧＡ（Field-Programmable Gate Array）を利用することが考えられる。ＦＰＧＡは、製造後に、回路構成を設定できる集積回路である。
【０００７】
本発明は、上記のような秘密計算の高速化という課題を解決するために考え出された。すなわち、本発明の主な目的は、秘密計算の高速化を図ることができるＦＰＧＡを設計する技術を提供することにある。
【課題を解決するための手段】
【０００８】
上記目的を達成するために、本発明の設計支援装置は、
半導体集積回路の設計に利用される情報であり、かつ、秘密計算を実行する複数の論理ゲートの入力と出力の接続先を表す接続情報における前記論理ゲートのそれぞれの処理順を、当該論理ゲートの前段における前記論理ゲートの演算種別が関連する通信の要否に応じて、前記通信の実行タイミングに基づいて区分される処理順位区分の早い順位の区分から割り当てていくことにより、前記論理ゲートの処理順を決定する処理順決定部と、
決定された前記論理ゲートの処理順の情報を含む秘匿回路を、前記通信の経路に応じた形式のコンピュータプログラムに変換する変換部と
を備える。
【０００９】
また、本発明の設計支援方法は、
半導体集積回路の設計に利用される情報であり、かつ、秘密計算を実行する複数の論理ゲートの入力と出力の接続先を表す接続情報における前記論理ゲートのそれぞれの処理順を、当該論理ゲートの前段における前記論理ゲートの演算種別が関連する通信の要否に応じて、前記通信の実行タイミングに基づいて区分される処理順位区分の早い順位の区分から割り当てていくことにより、前記論理ゲートの処理順を決定し、
決定された前記論理ゲートの処理順の情報を含む秘匿回路を、前記通信の経路に応じた形式のコンピュータプログラムに変換し、
前記コンピュータプログラムに基づいて設計対象の前記半導体集積回路における配線の配置を決定する。
【００１０】
さらに、本発明のコンピュータプログラムは、
半導体集積回路の設計に利用される情報であり、かつ、秘密計算を実行する複数の論理ゲートの入力と出力の接続先を表す接続情報における前記論理ゲートのそれぞれの処理順を、当該論理ゲートの前段における前記論理ゲートの演算種別が関連する通信の要否に応じて、前記通信の実行タイミングに基づいて区分される処理順位区分の早い順位の区分から割り当てていくことにより、前記論理ゲートの処理順を決定する処理と、
決定された前記論理ゲートの処理順の情報を含む秘匿回路を、前記通信の経路に応じた形式のコンピュータプログラムに変換する処理と、
前記コンピュータプログラムに基づいて設計対象の前記半導体集積回路における配線の配置を決定する処理と
をコンピュータに実行させる。
【発明の効果】
【００１１】
本発明によれば、秘密計算の高速化を図るＦＰＧＡを設計できる。
【図面の簡単な説明】
【００１２】
【図１】本発明に係る第１実施形態の設計支援装置の機能構成を簡略化して表すブロック図である。
【図２】第１実施形態の設計支援装置のハードウェア構成の一例を簡略化して表すブロック図である。
【図３】第１実施形態の設計支援装置の動作例を説明するフローチャートである。
【図４】ゲートレベルネットリストの一例を表す図である。
【図５】図４におけるゲートレベルネットリストを回路図により表す図である。
【図６】第１実施形態の設計支援装置の動作例を図３と共に説明する図である。
【図７】さらに、第１実施形態の設計支援装置の動作例を図３と共に説明する図である。
【図８】さらに、第１実施形態の設計支援装置の動作例を図３と共に説明する図である。
【図９】さらにまた、第１実施形態の設計支援装置の動作例を図３と共に説明する図である。
【図１０】第１実施形態の設計支援装置により生成される秘匿回路の一例を表す図である。
【図１１】さらに、第１実施形態の設計支援装置の動作例を説明するフローチャートである。
【図１２】秘匿回路の別の例を表す図である。
【図１３】秘匿回路から変換されたインスタンスモジュールの一例を表す図である。
【図１４】論理否定ゲートに対応するインスタンスモジュールの一例を表す図である。
【図１５】論理積ゲートに対応するインスタンスモジュールの一例を表す図である。
【図１６】排他的論理和ゲートに対応するインスタンスモジュールの一例を表す図である。
【図１７】第１実施形態の設計支援装置により生成されるハードウェア記述言語プログラムの一例を表す図である。
【図１８】本発明に係るその他の実施形態を説明する図である。
【発明を実施するための形態】
【００１３】
以下に、本発明に係る実施形態を図面を参照しつつ説明する。
【００１４】
＜第１実施形態＞
図１は、本発明に係る第１実施形態の設計支援装置の機能構成を表すブロック図である。この設計支援装置１０は、秘密計算を分散して処理する秘密分散により行うＦＰＧＡを設計する装置である。当該設計支援装置１０は、機能部として、高位合成部１００と、論理合成部１１０と、秘匿回路生成部１２０と、ハードウェア記述言語変換部（変換部）１３０と、論理合成部１４０と、配線部１５０と、ビットストリーム生成部１６０とを備えている。
【００１５】
なお、図２は、設計支援装置１０のハードウェア構成の一例を簡略化して表すブロック図である。設計支援装置１０は、例えば、ＣＰＵ（Central Processing Unit）３０と、通信ユニット４０と、メモリ５０と、入出力ＩＦ（Interface）６０とを有する。通信ユニット４０は、他の装置と情報通信網を介した通信を実現する機能を備えている。入出力ＩＦ６０は、例えば、表示（ディスプレイ）装置（図示せず）や、装置の操作者（ユーザ）が情報を入力するキーボード等の入力装置（図示せず）等に接続し、これら装置との情報（信号）の通信を実現する機能を備えている。
【００１６】
メモリ５０は、データやコンピュータプログラム（以下、プログラムとも記す）を格納する非一時的（non-transitory）な記憶装置（記憶媒体）である。記憶装置には様々な種類が有り、１つの装置に複数種の記憶装置が搭載されることがあるが、ここでは、包括的に１つのメモリとして表している。メモリ５０に格納されるデータやプログラムは、例えば、そのデータやプログラムを記憶した可搬型の非一時的（non-transitory）な記憶媒体からメモリ５０に書き込まれる場合や、情報通信網を通して設計支援装置１０が受け取って書き込まれる場合などが有る。可搬型の記憶媒体としては、例えば、ＤＶＤ（Digital Versatile Disc），ＣＤ−ＲＯＭ（Compact Disc- Read Only Memory），ＵＳＢ（Universal Serial Bus）メモリなどが有る。
【００１７】
ＣＰＵ３０は、演算回路であり、メモリ５０に格納されているプログラムを読み出し当該プログラムを実行することにより、設計支援装置１０の動作を制御する機能を備える。つまり、図１に表される各機能部１００〜１６０は、ＣＰＵ３０により実現される。
【００１８】
高位合成部１００は、設計対象の回路の動作（アルゴリズム）を表すプログラミング言語で書かれたプログラムから、ハードウェア記述言語で記述されたプログラムを高位合成により生成する機能を備える。なお、高位合成の手法には、高位合成ツールである例えば日本電気株式会社のCyberWorkBench（登録商標）に採用されている手法やXilinx（登録商標）社のVivado（登録商標）に採用されている手法を始め様々な手法が提案されている。ここでは、高位合成の手法として、何れの手法が採用されてもよく、その説明は省略する。
【００１９】
論理合成部１１０は、ハードウェア記述言語で記述されたプログラムから、ゲートレベルネットリストを生成する論理合成の機能を備える。ゲートレベルネットリストとは、基本論理回路（ゲート）間の接続状態を表しているリスト（つまり、接続情報）である。なお、論理合成の手法には、論理合成ツールである例えばSynopsys（登録商標）社のDesign Compiler（登録商標）に採用されている手法やIntel（登録商標）社のQuartus（登録商標）に採用されている手法を始め様々な手法が提案されている。ここでは、論理合成の手法として、何れの手法が採用されてもよく、その説明は省略する。
【００２０】
秘匿回路生成部１２０は、秘密計算に係るゲートレベルネットリストから、通信に着目した秘匿回路（秘密計算に特有な計算手続きを表すファイル）を生成する機能を備える。
【００２１】
すなわち、第１実施形態では、秘密分散を利用して秘密計算を行うＦＰＧＡを設計することが想定されている。秘密分散では、論理積の値を算出するためには通信が必要であることが知られている。ここでの通信とは、複数のサーバ間での通信あるいは複数のＦＰＧＡ間での通信あるいはＦＰＧＡ内での通信である。以下の説明では、単に“通信”と述べる。
【００２２】
発明者は、秘密計算の実行時間の短縮化（計算の高速化）を図るためには、通信時間を削減すればよいことに着目し、通信時間を削減すべく通信回数を減少することを考えた。そこで、発明者は、通信に着目した秘匿回路を次のように生成する秘匿回路生成部１２０を考えた。
【００２３】
すなわち、論理積の演算には通信が必要であることから、ゲートレベルネットリストに論理積（論理積ゲート）が存在する場合には、論理積ゲートのアウトプットがインプットに接続される論理ゲート（基本論理回路）は通信後でないと計算できない。このため、そのような論理積ゲートの計算値（出力値）を利用する後段の論理ゲートも計算できない。これに対し、ゲートレベルネットリストに論理積ゲートが無い場合は、１回も通信することなく、ゲートレベルネットリストに関連する計算を処理することができる。発明者は、そのような論理ゲートと通信との関係を考慮して通信回数を最小化するために次のような処理により秘匿回路を生成することを考え出した。
【００２４】
まず、秘匿回路生成部１２０は、ゲートレベルネットリストを参照し、論理積ゲートの後段に配置されていない（つまり、通信せずに値が得られる）全ての論理ゲート（基本論理回路）を検知する。次に、秘匿回路生成部１２０は、１回の通信後に計算できる全ての論理ゲートを検知する。さらに、秘匿回路生成部１２０は、２回の通信後に計算できる全ての論理ゲートを検知する。このように、秘匿回路生成部１２０は、上記のような処理を繰り返すことにより、ゲートレベルネットリストにおける全ての論理ゲートに関し、通信との関係を検知する。
【００２５】
秘匿回路生成部１２０が、通信せずに演算可能な全ての論理ゲートを検知し、当該検知した論理ゲートの処理順が他の論理ゲートの処理順よりも早い秘匿回路を生成することにより、通信回数の最小化を図ることができる。例えば、ゲートレベルネットリストには８個の排他的論理和ゲートと２個の論理積ゲートが含まれているとする。さらに、このゲートレベルネットリストによれば、通信せずに８個の排他的論理和ゲートが計算でき、１回の通信で２個の論理積ゲートが計算可能だとする。しかしながら、通信せずに演算可能な論理ゲートを検知せず、論理ゲートと通信との関係を気にせずに秘匿回路が生成される場合には、次のような秘匿回路が生成されることも考えられる。その秘匿回路では、例えば、４個の排他的論理和ゲートの後段に１個の論理積ゲートの処理順が配置され、その後段に残りの４個の排他的論理和ゲートの処理順が配置され、さらにまた、その後段に１個の論理積ゲートの処理順が配置される。このような回路構成では、２回の通信が必要となってしまう。これに対し、前述したように、通信せずに計算可能な全ての論理ゲートを検知し、論理ゲートと通信との関係を考慮して秘匿回路を生成することによって、２個の論理積ゲートの計算を並行させることが可能となり、通信回数を削減することが可能となる。
【００２６】
秘匿回路生成部１２０は、上記のように、通信せずに計算できる全ての論理ゲートを検知し、当該検知結果と通信を考慮して複数の論理積の計算を並行させるような秘匿回路を生成することにより、通信回数を最小化する秘匿回路を生成可能である。この秘匿回路生成部１２０は、接続情報に含まれる論理ゲートの処理順を決定する処理順決定部として機能する。
【００２７】
ハードウェア記述言語変換部１３０は、秘匿回路生成部１２０により生成された秘匿回路から、ハードウェア記述言語で記述されたプログラムを生成（変換）する機能を備える。ここでは、ハードウェア記述言語変換部１３０は、通信を考慮して、秘密計算用の論理積と、秘密計算用の排他的論理和と、秘密計算用の論理否定とのそれぞれに対応するモジュールを生成する。
【００２８】
論理合成部１４０は、ハードウェア記述言語で記述されたプログラムから、論理合成部１１０と同様に、ゲートレベルネットリストを生成する論理合成の機能を備える。
【００２９】
配線部１５０は、ゲートレベルネットリストから、ＦＰＧＡ向けの配置配線情報を生成する機能を備える。ＦＰＧＡ向けの配置配線情報を生成する手法には、Intel（登録商標）社のQuartus（登録商標）に採用されている手法を始め様々な手法が提案されている。ここでは、ＦＰＧＡ向けの配置配線情報を生成する手法として、何れの手法が採用されてもよく、その説明は省略する。
【００３０】
ビットストリーム生成部１６０は、ＦＰＧＡ向けの配置配線情報から、ビットストリームを生成する機能を備える。ビットストリームを生成する手法には、Intel（登録商標）社のQuartus（登録商標）に採用されている手法を始め様々な手法が提案されている。ここでは、ビットストリームを生成する手法として、何れの手法が採用されてもよく、その説明は省略する。
【００３１】
以下に、秘匿回路生成部１２０の動作例を図３のフローチャートを参照しつつ説明する。なお、図３のフローチャートはコンピュータの処理手順を表している。
【００３２】
ここでは、図４に表されているようなゲートレベルネットリストが論理合成部１１０から秘匿回路生成部１２０に入力されたとする。図５は、図４のゲートレベルネットリストを回路図に変換した図である。図５に表されている回路１２２は、論理積（ＡＮＤ）ゲートｇ１，ｇ３，ｇ６と、排他的論理和（ＸＯＲ）ゲートｇ２，ｇ４，ｇ５とを有する。この回路１２２では、１段目に論理積ゲートｇ１，ｇ３と排他的論理和ゲートｇ２が配置され、各論理ゲートｇ１〜ｇ３の２つの入力部にはネットｎ１〜ｎ６を通して外部からインプット（プライマリインプット）が加えられる。２段目には排他的論理和ゲートｇ４，ｇ５が配置される。排他的論理和ゲートｇ４，ｇ５のそれぞれの２つの入力部には、ネットｎ７，ｎ８，ｎ９を通して、１段目の論理積ゲートｇ１，ｇ３と排他的論理和ゲートｇ２から出力されたアウトプットが加えられる。３段目には論理積ゲートｇ６が配置される。論理積ゲートｇ６の２つの入力部には、ネットｎ１０，ｎ１１を通して２段目の排他的論理和ゲートｇ４，ｇ５から出力されたアウトプットが加えられる。また、論理積ゲートｇ６のアウトプットはネットｎ１２を通して外部に出力される。
【００３３】
図６〜図９は、秘匿回路生成部１２０が下記のような処理に使用するパラメータＧ，Ｎ，ｒ，ｇの変化を図３におけるフローチャートの各ステップに対応させて表す図である。また、何回目の通信でどの論理ゲートが計算されるのかを表すのが、“０回目の通信後に計算”、“１回目の通信後に計算”、“２回目の通信後に計算”の欄である。つまり、“０回目の通信後に計算”の欄は、通信を必要とせず値が入力する論理ゲートを表す。“１回目の通信後に計算”の欄は、１回目の通信後に入力する値が決定して計算できる論理ゲートを表す。この例では、“２回目の通信後に計算”の欄に表されている論理ゲートが無い。これは、２回目の通信で全ての論理ゲートが計算され、２回目の通信後に未処理の論理ゲートが存在しないことを示す。すなわち、通信回数が２回で全ての論理ゲートを計算できることとなる。
【００３４】
まず、秘匿回路生成部１２０は、図４のようなゲートレベルネットリストが入力されると、ゲートレベルネットリストに含まれる全ての論理ゲートを要素として持つ集合Ｇ＝｛ｇ１，ｇ２，ｇ３，ｇ４，ｇ５，ｇ６｝を生成する（図３、図６のステップＳ１２０１）。なお、集合Ｇの要素である論理ゲートは、論理ゲートに付された符号により表されている。
【００３５】
次に、秘匿回路生成部１２０は、割り当て可能なネットの集合Ｎを生成する（ステップＳ１２０２）。割り当て可能なネットとは、ゲートレベルネットリストに含まれているネット（input, output, wire）であって、かつ、値が決定されたネットを意味する。プライマリインプット（input）は、回路１２２に入力する値であり、計算せずに値が定まっていることから、プライマリインプットに対応するネットは、割り当て可能なネットである。これにより、ここでは、割り当て可能なネットの集合Ｎとして、集合Ｎ＝｛ｎ１、ｎ２、ｎ３、ｎ４、ｎ５、ｎ６｝が生成される。
【００３６】
また、秘匿回路生成部１２０は、通信回数を表す“ｒ”を零に初期化する（ステップＳ１２０３）。つまり、プライマリインプットのみをインプットに持つ論理ゲートは通信を必要としないで計算できるため、まず、通信回数ｒは零に設定される。通信回数ｒが零の時に割り当てられた論理ゲートは、論理ゲートの値を決定するために通信が不要な論理ゲートであることを意味する。
【００３７】
また、秘匿回路生成部１２０は、集合Ｇにおける論理ゲート（ｇ１，ｇ２，ｇ３，ｇ４，ｇ５，ｇ６）のうち、集合Ｎにおけるネットのみが接続される論理ゲートｇを抽出する（ステップＳ１２０４）。つまり、ここでは、秘匿回路生成部１２０は、プライマリインプットが与えられることにより計算可能な論理ゲートｇ（ｇ１，ｇ２，ｇ３）を抽出する（図６における“ｇ”の欄を参照）。なお、計算可能な論理ゲートを論理ゲートｇとも記す。
【００３８】
然る後に、秘匿回路生成部１２０は、抽出された論理ゲートｇが有るか否かを判断する（ステップＳ１２０５）。ここでは、論理ゲートｇ（ｇ１，ｇ２，ｇ３）が抽出されているので、秘匿回路生成部１２０は、論理ゲートｇが有ると判断する。そして、秘匿回路生成部１２０は、論理ゲートｇの一つ（ここでは、論理ゲートｇ１とする）を注目の論理ゲートとして選択し、論理ゲートｇ１が論理積か否かを判断する（ステップＳ１２０６）。論理ゲートｇ１は論理積であるから、秘匿回路生成部１２０は、ステップＳ１２０８の処理に進み、論理ゲートｇ１を集合Ｇから削除する（ステップＳ１２０８）。また、秘匿回路生成部１２０は、抽出された論理ゲートｇから論理ゲートｇ１を外す。
【００３９】
さらに、論理ゲートｇ１はプライマリインプットのみに接続され通信せずに値を算出することができる。このことにより、秘匿回路生成部１２０は、論理ゲートｇ１を“ｒ回目（０回目）の通信後に計算”に割り当てる（ステップＳ１２０９）。
【００４０】
然る後に、秘匿回路生成部１２０は、ステップＳ１２０５以降の処理を繰り返す。つまり、秘匿回路生成部１２０は、抽出された論理ゲートｇ（ｇ２，ｇ３）が有るか否かを判断する（ステップＳ１２０５）。そして、秘匿回路生成部１２０は、論理ゲートｇがあるから、論理ゲートｇの一つ（ここでは、論理ゲートｇ２とする）を注目の論理ゲートとして選択し、注目の論理ゲートｇ２が論理積か否かを判断する（ステップＳ１２０６）。論理ゲートｇ２は排他的論理和ゲートであって論理積ゲートではないから、秘匿回路生成部１２０は、ステップＳ１２０７の処理に進む。排他的論理和ゲートは通信を必要とせずに値を算出できる。このことにより、秘匿回路生成部１２０は、論理積ではない論理ゲートｇ２のアウトプットに対応するネットｎ８を割り当て可能なネットであるとして集合Ｎに追加する（ステップＳ１２０７）。そして、秘匿回路生成部１２０は、論理ゲートｇ２を集合Ｇから削除し（ステップＳ１２０８）、また、論理ゲートｇから論理ゲートｇ２を外す。さらに、論理ゲートｇ２はプライマリインプットのみに接続され通信せずに値を算出することができることにより、秘匿回路生成部１２０は、論理ゲートｇ２を“ｒ回目（０回目）の通信後に計算”に割り当てる（ステップＳ１２０９）。
【００４１】
然る後に、秘匿回路生成部１２０は、ステップＳ１２０５以降の処理をさらに繰り返す。すなわち、秘匿回路生成部１２０は、抽出された論理ゲートｇ（ｇ３）が有るか否かを判断する（ステップＳ１２０５）。そして、秘匿回路生成部１２０は、論理ゲートｇがあるから、論理ゲートｇの一つ（ここでは、論理ゲートｇ３）を注目の論理ゲートとして選択し、注目の論理ゲートｇ３が論理積か否かを判断する（ステップＳ１２０６）。さらに、注目の論理ゲートｇ３は論理積であるから、秘匿回路生成部１２０は、ステップＳ１２０８の処理に進み、論理ゲートｇ３を集合Ｇから削除する（ステップＳ１２０８）。また、秘匿回路生成部１２０は、論理ゲートｇから論理ゲートｇ３を外す。さらに、論理ゲートｇ３はプライマリインプットのみに接続され通信せずに値を算出することができる。このことにより、秘匿回路生成部１２０は、論理ゲートｇ３を“ｒ回目（０回目）の通信後に計算”に割り当てる（ステップＳ１２０９）。
【００４２】
然る後に、秘匿回路生成部１２０は、ステップＳ１２０５以降の処理をさらに繰り返す。すなわち、秘匿回路生成部１２０は、抽出された論理ゲートｇが有るか否かを判断する（ステップＳ１２０５）。抽出された論理ゲートｇは無いから、秘匿回路生成部１２０は、ステップＳ１２１０の処理に進む。そして、秘匿回路生成部１２０は、抽出した論理ゲートｇ（ｇ１，ｇ２，ｇ３）に論理積があったか否かを判断する（ステップＳ１２１０）。換言すれば、ここでは、抽出した論理ゲートｇ（ｇ１，ｇ２，ｇ３）の計算に通信が必要であるか否かが判断される。
【００４３】
この例では、論理ゲートｇ１，ｇ３が論理積である。このことにより、秘匿回路生成部１２０は、論理ゲートｇ（ｇ１，ｇ３）の計算に通信が必要であるとして、ステップＳ１２１１の処理に進む。
【００４４】
そして、秘匿回路生成部１２０は、その論理積の論理ゲートｇ１，ｇ３のアウトプットが算出されたとして、論理ゲートｇ１，ｇ３のアウトプットに対応するネットｎ７，ｎ９を割り当て可能なネットとして集合Ｎに追加する（ステップＳ１２１１）。また、秘匿回路生成部１２０は、通信回数ｒに“１”を加算する（ステップＳ１２１２）。
【００４５】
然る後に、秘匿回路生成部１２０は、集合Ｇが空集合か否かを判断する（ステップＳ１２１３）。換言すれば、秘匿回路生成部１２０は、スケジューリングされていない論理ゲートがあるか否かを判断する。ここでは、集合Ｇには論理ゲートｇ４，ｇ５，ｇ６が残っているため、秘匿回路生成部１２０は、論理ゲートｇ４，ｇ５，ｇ６のスケジューリングを行うべく、ステップＳ１２０４以降の処理を繰り返す。
【００４６】
すなわち、秘匿回路生成部１２０は、集合Ｎの要素であるネットのみを通してインプットが加えられる論理ゲートを論理ゲートｇとして集合Ｇから抽出する（ステップＳ１２０４）。ここでは、論理ゲートｇ４，ｇ５が論理ゲートｇとして抽出される。然る後に、秘匿回路生成部１２０は、抽出された論理ゲートｇ（ｇ４，ｇ５）が有るか否かを判断する（ステップＳ１２０５）。論理ゲートｇ４，ｇ５が有るから、秘匿回路生成部１２０は、論理ゲートｇの一つ（ここでは、論理ゲートｇ４とする）を注目の論理ゲートとして選択し、注目の論理ゲートｇ４が論理積か否かを判断する（ステップＳ１２０６）。論理ゲートｇ４は論理積ゲートではないから、秘匿回路生成部１２０は、ステップＳ１２０７の処理に進む。そして、秘匿回路生成部１２０は、論理積ではない論理ゲートｇ４のアウトプットに対応するネットｎ１０を割り当て可能なネットであるとして集合Ｎに追加する（ステップＳ１２０７）。さらに、秘匿回路生成部１２０は、論理ゲートｇ４を集合Ｇから削除し（ステップＳ１２０８）、また、論理ゲートｇから論理ゲートｇ４を外す。さらにまた、論理ゲートｇ４は通信せずに値を算出できることにより、秘匿回路生成部１２０は、論理ゲートｇ４を“ｒ回目（１回目）の通信後に計算”に割り当てる（ステップＳ１２０９）。
【００４７】
然る後に、秘匿回路生成部１２０は、ステップＳ１２０５以降の処理を繰り返す。すなわち、上記同様に、秘匿回路生成部１２０は、抽出された論理ゲートｇ（ｇ５）が有るか否かを判断する（ステップＳ１２０５）。論理ゲートｇ５が有るから、秘匿回路生成部１２０は、論理ゲートｇの一つ（ここでは、論理ゲートｇ５）を注目の論理ゲートとして選択し、注目の論理ゲートｇ５が論理積か否かを判断する（ステップＳ１２０６）。論理ゲートｇ５は論理積ゲートではないから、秘匿回路生成部１２０は、ステップＳ１２０７の処理に進む。そして、秘匿回路生成部１２０は、論理積ではない論理ゲートｇ５のアウトプットに対応するネットｎ１１を割り当て可能なネットであるとして集合Ｎに追加する（ステップＳ１２０７）。さらに、秘匿回路生成部１２０は、論理ゲートｇ５を集合Ｇから削除し（ステップＳ１２０８）、また、論理ゲートｇから論理ゲートｇ５を外す。さらにまた、論理ゲートｇ５は通信せずに値を算出できることにより、秘匿回路生成部１２０は、論理ゲートｇ５を“ｒ回目（１回目）の通信後に計算”に割り当てる（ステップＳ１２０９）。
【００４８】
然る後に、秘匿回路生成部１２０は、ステップＳ１２０５以降の処理をさらに繰り返す。すなわち、秘匿回路生成部１２０は、論理ゲートｇが有るか否かを判断する（ステップＳ１２０５）。論理ゲートｇは無いから、秘匿回路生成部１２０は、ステップＳ１２１０の処理に進む。そして、秘匿回路生成部１２０は、抽出した論理ゲートｇ（ｇ４，ｇ５）に論理積があったか否かを判断する（ステップＳ１２１０）。換言すれば、論理ゲートｇ（ｇ４，ｇ５）の計算に通信が必要であるか否かが判断される。この例では、論理ゲートｇ４，ｇ５は論理積ではない。このことにより、秘匿回路生成部１２０は、ステップＳ１２０４以降の処理を再び繰り返す。
【００４９】
つまり、秘匿回路生成部１２０は、集合Ｎの要素であるネットのみを通してインプットが加えられる論理ゲートｇを集合Ｇから抽出する（ステップＳ１２０４）。ここでは、論理ゲートｇ６が論理ゲートｇとして抽出される。然る後に、秘匿回路生成部１２０は、抽出された論理ゲートｇ（ｇ６）が有るか否かを判断する（ステップＳ１２０５）。論理ゲートｇ６が有るから、秘匿回路生成部１２０は、論理ゲートｇの一つ（ここでは、論理ゲートｇ６）を注目の論理ゲートとして選択し、注目の論理ゲートｇ６が論理積か否かを判断する（ステップＳ１２０６）。さらに、注目の論理ゲートｇ６は論理積であるから、秘匿回路生成部１２０は、ステップＳ１２０８の処理に進み、論理ゲートｇ６を集合Ｇから削除する（ステップＳ１２０８）。また、秘匿回路生成部１２０は、論理ゲートｇから論理ゲートｇ６を外す。さらに、論理ゲートｇ６は通信せずに値を算出することができる。このことにより、秘匿回路生成部１２０は、論理ゲートｇ６を“ｒ回目（１回目）の通信後に計算”に割り当てる（ステップＳ１２０９）。
【００５０】
然る後に、秘匿回路生成部１２０は、ステップＳ１２０５以降の処理をさらに繰り返す。秘匿回路生成部１２０は、論理ゲートｇが有るか否かを判断し（ステップＳ１２０５）、抽出された論理ゲートｇは無いから、ステップＳ１２１０の処理に進む。そして、秘匿回路生成部１２０は、抽出した論理ゲートｇ（ｇ６）が論理積であったか否かを判断する（ステップＳ１２１０）。論理ゲートｇ（ｇ６）は論理積であることから、秘匿回路生成部１２０は、通信を伴う計算により論理ゲートｇ６のアウトプットが算出されたとして、論理ゲートｇ６のアウトプットに対応するネットｎ１２を集合Ｎに追加する（ステップＳ１２１１）。また、秘匿回路生成部１２０は、通信回数ｒに“１”を加算する（ステップＳ１２１２）。
【００５１】
然る後に、秘匿回路生成部１２０は、集合Ｇが空集合か否かを判断し（ステップＳ１２１３）、これにより、スケジューリングされていない論理ゲートがあるか否かを判断する。ここでは、集合Ｇは、空集合であり、スケジューリングされていない論理ゲートはないことから、ゲートレベルネットリストに含まれる全ての論理ゲートは、どの通信のタイミングで計算するかが割り当てられた。これにより、秘匿回路生成部１２０は、図１０に示されるような秘匿回路１２４を出力する（ステップＳ１２１４）。
【００５２】
以下に、ハードウェア記述言語変換部１３０の動作を図１１のフローチャートを参照しつつ説明する。ここでは、図１０に示されるような秘匿回路１２４がハードウェア記述言語変換部１３０に入力されるとする。なお、ここでの通信は、ＦＰＧＡ内での通信とする。
【００５３】
まず、ハードウェア記述言語変換部１３０は、秘匿回路１２４が入力されると、秘匿回路１２４を通信種別に応じたインスタンスモジュールに変換する（図１１におけるステップＳ１３０１）。つまり、ハードウェア記述言語変換部１３０から出力されるモジュールの数やモジュールのインプットとアウトプットは、通信種別に応じたものとなる。ここでの通信種別はＦＰＧＡ内での通信であり、当該通信種別では、秘匿回路内の全ての論理ゲートがインスタンスモジュールに変換される。これにより、秘匿回路１２４におけるＡＮＤの行は、“SMPC_AND INST_AND ・・・”というインスタンスモジュールに変換される。また、ＸＯＲの行は、“SMPC_XOR INST_XOR ・・・”というインスタンスモジュールに変換される。
【００５４】
ハードウェア記述言語変換部１３０は、上記のようなインスタンスモジュールへの変換動作により、秘匿回路１２４に基づいた図１３に表されるような１つのモジュール１３１を生成する。
【００５５】
然る後に、ハードウェア記述言語変換部１３０は、秘密分散を利用した秘密計算用の論理否定モジュールを生成する（ステップＳ１３０２）。ハードウェア記述言語変換部１３０は、論理否定ゲートに対応するモジュールとして、例えば図１４に表されるようなモジュール１３２を生成する。
【００５６】
その後、ハードウェア記述言語変換部１３０は、秘密分散を利用した秘密計算用の論理積モジュールを生成する（ステップＳ１３０３）。具体的には、ハードウェア記述言語変換部１３０は、例えば図１３における“SMPC_AND”に対応するモジュールとして、図１５に表されるようなモジュール１３３を生成する。
【００５７】
さらに、ハードウェア記述言語変換部１３０は、秘密分散を利用した秘密計算用の排他的論理和モジュールを生成する（ステップＳ１３０４）。具体的には、ハードウェア記述言語変換部１３０は、例えば図１３における“SMPC_XOR”に対応するモジュールとして、図１６に表されるようなモジュール１３４を生成する。
【００５８】
然る後に、ハードウェア記述言語変換部１３０は、上記のように生成した秘密計算用のモジュールを１つのファイルにまとめることにより、秘匿回路に対応するハードウェア記述言語プログラムを生成し、当該プログラムを出力する（ステップＳ１３０５）。具体的には、ハードウェア記述言語変換部１３０は、秘匿回路１２４に対応するハードウェア記述言語プログラムとして、図１７に表されるようなプログラム１３５を生成し出力する。
【００５９】
第１実施形態の設計支援装置１０は、秘匿回路生成部１２０を備え、当該秘匿回路生成部１２０によって、ゲートレベルネットリストから、通信せずに計算ができる全ての論理ゲートを検知している。これにより、秘匿回路生成部１２０は、通信回数を最小とする秘匿回路を生成することができる。また、設計支援装置１０は、ハードウェア記述言語変換部１３０を備え、ハードウェア記述言語変換部１３０によって、秘密計算の通信を考慮したハードウェア記述言語のプログラムを生成できる。
【００６０】
すなわち、設計支援装置１０は、秘密分散を用いる秘密計算を行うＦＰＧＡの設計を行うことが可能である上に、秘密計算中の通信時間を抑制でき秘密計算の高速化を図るＦＰＧＡの設計を可能にする。
【００６１】
＜その他の実施形態＞
なお、本発明は第１実施形態に限定されず、様々な実施の態様を採り得る。例えば、ハードウェア記述言語変換部１３０の図１１に表されるようなステップＳ１３０２〜ステップＳ１３０４の処理は、その順番を変更してもよい。また、それら処理は時系列に順番に行われるのではなく、並列的に行われてもよい。
【００６２】
また、本発明に係る設計支援装置は、図１８に表されるような構成を含んでいればよく、図１に表される構成に限定されない。図１８における設計支援装置７０は、処理順決定部７１と変換部７２を備える。処理順決定部７１は、半導体集積回路の設計に利用される情報であり、かつ、秘密計算を実行する複数の論理ゲートの入力と出力の接続先を表す接続情報を受け取る。また、処理順決定部７１は、接続情報における論理ゲートのそれぞれの処理順を、当該論理ゲートの前段における論理ゲートの演算種別が関連する通信の要否に応じて、通信の実行タイミングに基づいて区分される処理順位区分の早い順位の区分から割り当てていくことにより、論理ゲートの処理順を決定する機能を備える。変換部７２は、決定された論理ゲートの処理順の情報を含む秘匿回路を、通信の経路に応じた形式のコンピュータプログラムに変換する機能を備える。
【符号の説明】
【００６３】
１０  設計支援装置
１００  高位合成部
１１０，１４０  論理合成部
１２０  秘匿回路生成部
１３０  ハードウェア記述言語変換部
【図１】
2019057181.tif 000003
【図２】
2019057181.tif 000004
【図３】
2019057181.tif 000005
【図４】
2019057181.tif 000006
【図５】
2019057181.tif 000007
【図６】
2019057181.tif 000008
【図７】
2019057181.tif 000009
【図８】
2019057181.tif 000010
【図９】
2019057181.tif 000011
【図１０】
2019057181.tif 000012
【図１１】
2019057181.tif 000013
【図１２】
2019057181.tif 000014
【図１３】
2019057181.tif 000015
【図１４】
2019057181.tif 000016
【図１５】
2019057181.tif 000017
【図１６】
2019057181.tif 000018
【図１７】
2019057181.tif 000019
【図１８】
2019057181.tif 000020