(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024033698
(43)【公開日】2024-03-13
(54)【発明の名称】秘匿計算システム、サーバー、情報処理装置、コンピュータプログラムおよび秘匿計算方法
(51)【国際特許分類】
G09C 1/00 20060101AFI20240306BHJP
【FI】
G09C1/00 650Z
G09C1/00 650B
【審査請求】有
【請求項の数】7
【出願形態】OL
(21)【出願番号】P 2022137457
(22)【出願日】2022-08-31
(11)【特許番号】
(45)【特許公報発行日】2022-11-15
(71)【出願人】
【識別番号】515120589
【氏名又は名称】株式会社ZenmuTech
(74)【代理人】
【識別番号】100123984
【弁理士】
【氏名又は名称】須藤 晃伸
(74)【代理人】
【識別番号】100102314
【弁理士】
【氏名又は名称】須藤 阿佐子
(74)【代理人】
【識別番号】100159178
【弁理士】
【氏名又は名称】榛葉 貴宏
(72)【発明者】
【氏名】石田 祐介
(72)【発明者】
【氏名】國井 淳
(72)【発明者】
【氏名】桶谷 純一
(72)【発明者】
【氏名】小川 知之
(57)【要約】 (修正有)
【課題】秘匿計算に用いる乱数を適切に供給する秘匿計算システム、サーバー、情報処理装置、コンピュータプログラム及び秘匿計算方法を提供する。
【解決手段】秘匿計算システム1において、クライアント10は、不足する乱数の有無を一定間隔で照会し必要乱数情報の回答があった場合には必要乱数情報を乱数プール手段に送信する不足乱数照会手段と、必要乱数情報に基づいて乱数を生成し複数のサーバー30、40に送信する乱数供給手段とを備える。各サーバーは、秘匿計算に必要となる乱数の種類及び数を見積もり必要乱数情報としてクライアントに送信する乱数見積手段と、秘匿計算を実行するための乱数をプールする乱数プール手段と、秘匿計算を実行し実行結果をクライアントに送信する秘匿計算手段と、秘匿計算の実行において不足する乱数を検知し不足する乱数の種類及び数を必要乱数情報としてクライアントに回答する不足乱数検知手段と、を備える。
【選択図】
図1
【特許請求の範囲】
【請求項1】
秘匿計算を実行する複数のサーバーと、前記複数のサーバーに秘匿計算を実行するために必要な乱数を供給するクライアントと、を備える秘匿計算システムであって、
前記クライアントは、ユーザが入力したデータのクエリーを前記複数のサーバーの少なくとも1つに送信するクエリー入力手段と、
受信した必要乱数情報に基づいて乱数を生成し、前記複数のサーバーに送信する乱数供給手段と、を備え、
前記サーバーは、前記クライアントから受信した前記クエリーに基づいて秘匿計算に必要となる乱数の種類および数を見積もり、見積もった乱数の種類および数を必要乱数情報として前記クライアントに送信する乱数見積手段と、
前記クライアントから受信した前記クエリーに基づく秘匿計算を実行するための乱数をプールする乱数プール手段と、
前記クライアントから受信した前記クエリーに基づく秘匿計算を実行し、実行結果を前記クライアントに送信する秘匿計算手段と、
前記秘匿計算手段による秘匿計算の実行において不足する乱数を検知し、前記クライアントの不足乱数照会手段による照会があった際に不足する乱数の種類および数を必要乱数情報として前記クライアントに回答する不足乱数検知手段と、を備え、
前記クライアントが、前記サーバーに前記クエリーに基づく秘匿計算の実行時に不足する乱数の有無を一定間隔で照会し、前記不足乱数検知手段から前記必要乱数情報の回答があった場合には、当該必要乱数情報を前記乱数プール手段に送信する不足乱数照会手段をさらに備える、秘匿計算システム。
【請求項2】
前記秘匿計算手段は、前記不足乱数検知手段が秘匿計算の実行において不足する乱数を検知した場合には、当該不足する乱数を前記乱数供給手段から受信するまで実行中の秘匿計算を一時的に中断する機能を有する、請求項1に記載の秘匿計算システム。
【請求項3】
秘匿計算を実行する複数のサーバーと、前記複数のサーバーに秘匿計算に必要な乱数を供給するクライアントとを有し、前記サーバーが前記クライアントから供給された乱数を用いて前記秘匿計算を行う、秘匿計算システムであって、
前記サーバーは、秘匿計算に使用する乱数が不足しているかを繰り返し検知し、秘匿計算に必要となる乱数が不足する場合に、不足する乱数の種類および数の情報を含む乱数の要求情報を前記クライアントに送信し、
前記クライアントは、前記要求情報を受信した場合に、前記要求情報に基づく種類および数の乱数を前記サーバーに送信する、秘匿計算システム。
【請求項4】
秘匿計算を実行するために必要な乱数を供給するクライアントと通信可能に構成された秘匿計算を実行するためのサーバーであって、
前記クライアントは、ユーザが入力したデータのクエリーを複数のサーバーの少なくとも1つに送信するクエリー入力手段と、
受信した必要乱数情報に基づいて乱数を生成し、前記複数のサーバーに送信する乱数供給手段と、を備え、
前記サーバーは、前記クライアントから受信した前記クエリーに基づいて秘匿計算に必要となる乱数の種類および数を見積もり、見積もった乱数の種類および数を必要乱数情報として前記クライアントに送信する乱数見積手段と、
前記クライアントから受信した前記クエリーに基づく秘匿計算を実行するための乱数をプールする乱数プール手段と、
前記クライアントから受信した前記クエリーに基づく秘匿計算を実行し、実行結果を前記クライアントに送信する秘匿計算手段と、
前記秘匿計算手段による秘匿計算の実行において不足する乱数を検知し、前記クライアントの不足乱数照会手段による照会があった際に不足する乱数の種類および数を必要乱数情報として前記クライアントに回答する不足乱数検知手段と、を備えるサーバー。
【請求項5】
秘匿計算を実行するための複数のサーバーと通信可能に構成された情報処理装置であって、
ユーザが入力したデータのクエリーを前記複数のサーバーの少なくとも1つに送信するクエリー入力手段と、
受信した必要乱数情報に基づいて乱数を生成し、前記複数のサーバーに送信する乱数供給手段と、を備え、
前記サーバーは、前記情報処理装置から受信した前記クエリーに基づいて秘匿計算に必要となる乱数の種類および数を見積もり、見積もった乱数の種類および数を必要乱数情報として前記情報処理装置に送信する乱数見積手段と、
前記情報処理装置から受信した前記クエリーに基づく秘匿計算を実行するための乱数をプールする乱数プール手段と、
前記情報処理装置から受信した前記クエリーに基づく秘匿計算を実行し、実行結果を前記情報処理装置に送信する秘匿計算手段と、
前記秘匿計算手段による秘匿計算の実行において不足する乱数を検知し、前記情報処理装置の不足乱数照会手段による照会があった際に不足する乱数の種類および数を必要乱数情報として回答する不足乱数検知手段と、を備え、
さらに、前記サーバーに前記クエリーに基づく秘匿計算の実行時に不足する乱数の有無を一定間隔で照会し、前記不足乱数検知手段から前記必要乱数情報の回答があった場合には、当該必要乱数情報を前記乱数プール手段に送信する不足乱数照会手段を備える、情報処理装置。
【請求項6】
秘匿計算を実行するための複数のサーバーと通信可能に構成された情報処理装置のプロセッサを、
ユーザが入力したデータのクエリーを前記複数のサーバーの少なくとも1つに送信するクエリー入力手段と、
受信した必要乱数情報に基づいて乱数を生成し、前記複数のサーバーに送信する乱数供給手段と、として機能させるためのコンピュータプログラムであって、
前記サーバーは、前記情報処理装置から受信した前記クエリーに基づいて秘匿計算に必要となる乱数の種類および数を見積もり、見積もった乱数の種類および数を必要乱数情報として前記情報処理装置に送信する乱数見積手段と、
前記情報処理装置から受信した前記クエリーに基づく秘匿計算を実行するための乱数をプールする乱数プール手段と、
前記情報処理装置から受信した前記クエリーに基づく秘匿計算を実行し、実行結果を前記情報処理装置に送信する秘匿計算手段と、
前記秘匿計算手段による秘匿計算の実行において不足する乱数を検知し、前記情報処理装置の不足乱数照会手段による照会があった際に不足する乱数の種類および数を必要乱数情報として回答する不足乱数検知手段と、を備え、
さらに、前記プロセッサを、前記サーバーに前記クエリーに基づく秘匿計算の実行時に不足する乱数の有無を一定間隔で照会し、前記不足乱数検知手段から前記必要乱数情報の回答があった場合には、当該必要乱数情報を前記乱数プール手段に送信する不足乱数照会手段として機能させる、コンピュータプログラム。
【請求項7】
秘匿計算を実行する複数のサーバーと、前記複数のサーバーに秘匿計算を実行するために必要な乱数を供給するクライアントと、を用いた秘匿計算方法であって、
前記クライアントが、ユーザが入力したデータのクエリーを前記複数のサーバーの少なくとも1つに送信することと、
前記サーバーが、前記クライアントから受信した前記クエリーに基づいて秘匿計算に必要となる乱数の種類および数を見積もり、見積もった乱数の種類および数を必要乱数情報として前記クライアントに送信することと、
前記クライアントが、受信した必要乱数情報に基づいて乱数を生成して前記複数のサーバーに送信することと、
前記クライアントから受信した前記クエリーに基づく秘匿計算を実行するための乱数をプールすることと、
前記サーバーが、前記クライアントから受信した前記クエリーに基づく秘匿計算を実行し、実行結果を前記クライアントに送信することと、を含み、
前記サーバーが、前記秘匿計算の実行において不足する乱数を検知すると、前記クライアントからの照会があった際に不足する乱数の種類および数を必要乱数情報として回答することと、
前記クライアントが、前記サーバーに前記クエリーに基づく秘匿計算の実行時に不足する乱数の有無を一定間隔で照会し、前記サーバーから前記必要乱数情報の回答があった場合には、当該必要乱数情報に基づいて不足する乱数を生成して前記複数のサーバーに送信することと、をさらに含む、秘匿計算方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、秘匿計算を実行する秘匿計算システム、当該秘匿計算システムを構成するサーバー、情報処理装置、コンピュータプログラムおよび秘匿計算方法に関する。
【背景技術】
【0002】
近年、情報漏洩に対する意識の高まりから、データを暗号化したまま計算する秘匿計算(秘密計算とも言われる。以下同じ。)技術が注目されている。秘匿計算の方法として、主に、暗号鍵を用いる完全準同形暗号式の方法と、データをシェアと呼ばれる暗号化された情報に分割し、分割したシェアを複数のサーバーに分散して格納しておき、各サーバーにおいてそれぞれデータ(シェア)を暗号化したまま計算する、秘密分散式との秘匿計算が知られている。秘密分散式の秘匿計算では、完全準同形暗号式の秘匿計算と比べて、複数サーバー間の通信制御や同期処理が必要で、システム構築難度は高い一方、計算速度が速いという特徴がある。
【0003】
秘密分散式の秘匿計算では、サーバー間で相関を持つ乱数を用いることで、秘匿計算を実現するプロトコルが多く提案されている。相関を持つ乱数を生成する方法としては、秘匿計算を行うサーバー間のみで乱数を生成する方法が知られている。しかしこの場合、公開鍵暗号と、サーバー間での多くの通信回数及び通信量が必要となり、計算速度が低下してしまうという問題があった。
そこで、非特許文献1では、秘匿計算において必要な乱数を生成するための信頼できる第三者として乱数生成サーバーを秘匿計算用のサーバーとは別に設けておき、秘匿計算に必要な乱数を予め見積もっておくことで、秘匿計算において用いられる乱数を予め生成しておく技術が開示されている。このような構成では、相関を持つ乱数を信頼できる第三者の内部で生成できる。その結果、乱数生成において公開鍵暗号とそれに伴う通信が、秘匿計算用サーバー間では不要となり、計算速度が向上する。
また、非特許文献2では、信頼できる第三者の役割をクライアントが担い、クライアントから、秘密情報とともに相関を持つ乱数をサーバーに送信することで、同様に秘匿計算用サーバーの負荷を軽減し、秘匿計算の効率を高める方法が開示されている。
【先行技術文献】
【非特許文献】
【0004】
【非特許文献1】石田祐介他、「秘匿計算における乱数生成サーバーの設計と実装」、2021年暗号と情報セキュリティシンポジウム (SCIS 2021)予稿集、2021年
【非特許文献2】荒木俊則他、「秘密分散法を用いた3者秘密計算の有用性」、情報処理Vol.59 No.10 2018年10月
【発明の概要】
【発明が解決しようとする課題】
【0005】
秘匿計算においては、加算や減算では乱数は不要であるが、乗算や除算に加えて、数値の大小比較、テーブル構造データのから所定の条件に合うデータを抽出するフィルタリング計算、テーブル構造データの並び替えなどを行う場合などに乱数が用いられる。しかしながら、テーブル構造データについて秘匿計算を行う場合には、テーブル構造データの行数に応じた数の乱数が必要となり、秘匿計算の途中で計算対象とする行数が変化する場合には、乱数の見積もりを予め行えない場合がある。たとえば、テーブル構造データにおいて、一定の条件に合致する行データを抽出(フィルタリング)した後に、抽出したデータを並び替える場合には、並び替え時に、抽出した行データの数に応じた乱数が必要となるところ、行データの抽出が完了するまでは、抽出後の行データの数が確定しないため必要な乱数の数を見積もることができない。このように、必要とする乱数を予め見積もれない場合があり、秘匿計算の途中で乱数が不足してしまうおそれがあった。そして、乱数が不足してしまうと、今まで行われていた秘匿計算が中断され、演算結果を得ることができない場合もあった。
【0006】
本発明は、秘匿計算において乱数が不足してしまい、秘匿計算の処理が中断されることを防止することができる、秘匿計算システム、サーバー、情報処理装置、コンピュータプログラムおよび秘匿計算方法を提供することを目的とする。
【課題を解決するための手段】
【0007】
本発明に係る第1の観点に係る秘匿計算システムは、秘匿計算を実行する複数のサーバーと、前記複数のサーバーに秘匿計算を実行するために必要な乱数を供給するクライアントと、を備え、前記クライアントは、ユーザが入力したデータのクエリーを前記複数のサーバーの少なくとも1つに送信するクエリー入力手段と、受信した必要乱数情報に基づいて乱数を生成し、前記複数のサーバーに送信する乱数供給手段と、を備え、前記サーバーは、前記クライアントから受信した前記クエリーに基づいて秘匿計算に必要となる乱数の種類および数を見積もり、見積もった乱数の種類および数を必要乱数情報として前記クライアントに送信する乱数見積手段と、前記クライアントから受信した前記クエリーに基づく秘匿計算を実行するための乱数をプールする乱数プール手段と、前記クライアントから受信した前記クエリーに基づく秘匿計算を実行し、実行結果を前記クライアントに送信する秘匿計算手段と、前記秘匿計算手段による秘匿計算の実行において不足する乱数を検知し、前記クライアントの不足乱数照会手段による照会があった際に不足する乱数の種類および数を必要乱数情報として前記クライアントに回答する不足乱数検知手段と、を備え、前記クライアントが、前記サーバーに前記クエリーに基づく秘匿計算の実行時に不足する乱数の有無を一定間隔で照会し、前記不足乱数検知手段から前記必要乱数情報の回答があった場合には、当該必要乱数情報を前記乱数プール手段に送信する不足乱数照会手段をさらに備える。
上記秘匿計算システムにおいて、前記秘匿計算手段は、前記不足乱数検知手段が秘匿計算の実行において不足する乱数を検知した場合には、当該不足する乱数を前記乱数供給手段から受信するまで実行中の秘匿計算を一時的に中断する機能を有する構成とすることができる。
本発明の第2の観点に係る秘匿計算システムは、秘匿計算を実行する複数のサーバーと、前記複数のサーバーに秘匿計算に必要な乱数を供給するクライアントとを有し、前記サーバーが前記クライアントから供給された乱数を用いて前記秘匿計算を行う、秘匿計算システムであって、前記サーバーは、秘匿計算に使用する乱数が不足しているかを繰り返し検知し、秘匿計算に必要となる乱数が不足する場合に、不足する乱数の種類および数の情報を含む乱数の要求情報を前記クライアントに送信し、前記クライアントは、前記要求情報を受信した場合に、前記要求情報に基づく種類および数の乱数を前記サーバーに送信する構成とすることができる。
本発明に係るサーバーは、秘匿計算を実行するために必要な乱数を供給するクライアントと通信可能に構成された秘匿計算を実行するためのサーバーであって、前記クライアントは、ユーザが入力したデータのクエリーを前記複数のサーバーの少なくとも1つに送信するクエリー入力手段と、受信した必要乱数情報に基づいて乱数を生成し、前記複数のサーバーに送信する乱数供給手段と、を備え、前記サーバーは、前記クライアントから受信した前記クエリーに基づいて秘匿計算に必要となる乱数の種類および数を見積もり、見積もった乱数の種類および数を必要乱数情報として前記クライアントに送信する乱数見積手段と、前記クライアントから受信した前記クエリーに基づく秘匿計算を実行するための乱数をプールする乱数プール手段と、前記クライアントから受信した前記クエリーに基づく秘匿計算を実行し、実行結果を前記クライアントに送信する秘匿計算手段と、前記秘匿計算手段による秘匿計算の実行において不足する乱数を検知し、前記クライアントの不足乱数照会手段による照会があった際に不足する乱数の種類および数を必要乱数情報として前記クライアントに回答する不足乱数検知手段と、を備える。
本発明に係る情報処理装置は、秘匿計算を実行するための複数のサーバーと通信可能に構成された情報処理装置であって、ユーザが入力したデータのクエリーを前記複数のサーバーの少なくとも1つに送信するクエリー入力手段と、受信した必要乱数情報に基づいて乱数を生成し、前記複数のサーバーに送信する乱数供給手段と、を備え、前記サーバーは、前記情報処理装置から受信した前記クエリーに基づいて秘匿計算に必要となる乱数の種類および数を見積もり、見積もった乱数の種類および数を必要乱数情報として前記情報処理装置に送信する乱数見積手段と、前記情報処理装置から受信した前記クエリーに基づく秘匿計算を実行するための乱数をプールする乱数プール手段と、前記情報処理装置から受信した前記クエリーに基づく秘匿計算を実行し、実行結果を前記情報処理装置に送信する秘匿計算手段と、前記秘匿計算手段による秘匿計算の実行において不足する乱数を検知し、前記情報処理装置の不足乱数照会手段による照会があった際に不足する乱数の種類および数を必要乱数情報として回答する不足乱数検知手段と、を備え、さらに、前記サーバーに前記クエリーに基づく秘匿計算の実行時に不足する乱数の有無を一定間隔で照会し、前記不足乱数検知手段から前記必要乱数情報の回答があった場合には、当該必要乱数情報を前記乱数プール手段に送信する不足乱数照会手段を備える。
本発明に係るコンピュータプログラムは、秘匿計算を実行するためのサーバーと通信可能に構成された情報処理装置のプロセッサを、ユーザが入力したデータのクエリーを前記複数のサーバーの少なくとも1つに送信するクエリー入力手段と、受信した必要乱数情報に基づいて乱数を生成し、前記複数のサーバーに送信する乱数供給手段と、として機能させるためのコンピュータプログラムであって、前記サーバーは、前記情報処理装置から受信した前記クエリーに基づいて秘匿計算に必要となる乱数の種類および数を見積もり、見積もった乱数の種類および数を必要乱数情報として前記情報処理装置に送信する乱数見積手段と、前記情報処理装置から受信した前記クエリーに基づく秘匿計算を実行するための乱数をプールする乱数プール手段と、前記情報処理装置から受信した前記クエリーに基づく秘匿計算を実行し、実行結果を前記情報処理装置に送信する秘匿計算手段と、前記秘匿計算手段による秘匿計算の実行において不足する乱数を検知し、前記情報処理装置の不足乱数照会手段による照会があった際に不足する乱数の種類および数を必要乱数情報として回答する不足乱数検知手段と、を備え、さらに、前記プロセッサを、前記サーバーに前記クエリーに基づく秘匿計算の実行時に不足する乱数の有無を一定間隔で照会し、前記不足乱数検知手段から前記必要乱数情報の回答があった場合には、当該必要乱数情報を前記乱数プール手段に送信する不足乱数照会手段として機能させる。
本発明に係る秘匿計算方法は、秘匿計算を実行する複数のサーバーと、前記複数のサーバーに秘匿計算を実行するために必要な乱数を供給するクライアントと、を用いた秘匿計算方法であって、前記クライアントが、ユーザが入力したデータのクエリーを前記複数のサーバーの少なくとも1つに送信することと、前記サーバーが、前記クライアントから受信した前記クエリーに基づいて秘匿計算に必要となる乱数の種類および数を見積もり、見積もった乱数の種類および数を必要乱数情報として前記クライアントに送信することと、前記クライアントが、受信した必要乱数情報に基づいて乱数を生成して前記複数のサーバーに送信することと、前記クライアントから受信した前記クエリーに基づく秘匿計算を実行するための乱数をプールすることと、前記サーバーが、前記クライアントから受信した前記クエリーに基づく秘匿計算を実行し、実行結果を前記クライアントに送信することと、を含み、前記サーバーが、前記秘匿計算の実行において不足する乱数を検知すると、前記クライアントからの照会があった際に不足する乱数の種類および数を必要乱数情報として回答することと、前記クライアントが、前記サーバーに前記クエリーに基づく秘匿計算の実行時に不足する乱数の有無を一定間隔で照会し、前記サーバーから前記必要乱数情報の回答があった場合には、当該必要乱数情報に基づいて不足する乱数を生成して前記複数のサーバーに送信することと、をさらに含む。
【発明の効果】
【0008】
本発明によれば、クライアントが、サーバーから乱数の要求情報を受信した場合に、要求情報に基づく種類および数の乱数をサーバーに送信することで、秘匿計算に用いる乱数を適切にサーバーに提供することができる。
【図面の簡単な説明】
【0009】
【
図1】本実施形態に係る秘匿計算システムの構成図である。
【
図2】本実施形態に係る乱数供給処理を説明するための概要図である。
【
図3】第1サーバーにおける秘匿乗算処理を示すフローチャートである。
【
図4】第2サーバーにおける秘匿乗算処理を示すフローチャートである。
【
図5】秘匿乗算処理を説明するための概要図である。
【
図6】秘匿データ抽出処理を示すフローチャートである。
【
図7】秘匿データ抽出処理を説明するための概要図である。
【
図8】本実施形態に係るクライアント側乱数供給処理を示すフローチャートである。
【
図9】本実施形態に係るサーバー側乱数供給処理を示すフローチャートである。
【
図10】本実施形態に係る乱数供給処理におけるクライアントとサーバーとの情報の授受を説明するための図である。
【発明を実施するための形態】
【0010】
本発明に係る秘匿計算システムの実施形態を、図を参照して説明する。
図1は、本実施形態に係る秘匿計算システム1を示す構成図である。
図1に示すように、本実施形態に係る秘匿計算システム1は、クライアント10と、ゲートウェイ20と、第1サーバー30と、第2サーバー40とから構成される。また、
図1に示すように、クライアント10は、ゲートウェイ20により通信制限が行われているLAN(Local Area Network)内に配置されている。また、クライアント10およびゲートウェイ20と、第1サーバー30と、第2サーバー40とは、インターネット2を介して、互いに通信が可能となっている。なお、
図1に示す図では、クライアント10およびゲートウェイ20を1つのみ図示するが、クライアント10やゲートウェイ20を複数備える構成とすることができる。また、
図1に示す例では、サーバー30,40を2台用いて秘匿計算を行う2者間秘匿計算を実行する構成を例示しているが、これに限定されず、たとえば3台以上のサーバーを用いて秘匿計算を行う構成とすることができる。
【0011】
本実施形態では、サーバー30,40に、暗号化されていないデータ(以下、「平文データ」という。)が秘密分散して記憶されている。秘密分散(法)とは、平文データを、単独では意味をなさないシェアと言われる断片に分割し、複数のサーバーに分散させる暗号化技術である。秘密分散(法)によれば、情報は複数の断片へと分散され、所定数以上の断片が集まらない限り元の情報は復元不能とされる。各サーバー30,40は、シェアを平文データに戻すことなく、平文データの計算結果のシェアを算出する秘匿計算を実行する。ここで、秘匿計算のうち、乗算および除算や、大小比較、テーブル構造データのフィルタリングおよび並び替えなどの計算では、秘匿計算において乱数が必要となる。従来は、秘匿計算を実行する各サーバーが互いに通信して乱数を生成する方法が提案されていたが、この場合、公開鍵暗号などを用いる必要があり、計算速度が低下してしまうという問題があった。そこで、本実施形態では、クライアント10が、秘匿計算に必要な乱数を生成し、生成した乱数をサーバー30,40に送信する構成(Client-Aidedモデルとも言われる)を採用している。
【0012】
また、本実施形態では、クライアント10が予め必要となる乱数を予測し、秘匿計算が開始される前に乱数をサーバー30,40に送信するのではなく、秘匿計算が開始されると、
図2(A)に示すように、クライアント10からサーバー30,40に対して、秘匿計算で不足している乱数があるか問い合わせを行い、当該問い合わせに応答して、
図2(B)に示すように、サーバー30,40から乱数の要求情報を送信してもらう。そして、
図2(C)に示すように、クライアント10は、受信した要求情報に基づいて乱数を生成し、生成した乱数をサーバー30,40に供給することを特徴としている。なお、
図2は、本実施形態に係る乱数供給処理を説明するための概要図である。以下、秘匿計算システム1を構成する各装置について説明する。
【0013】
クライアント10は、ユーザが操作するパソコンなどの情報端末装置であり、演算装置、記憶装置、および通信装置を有する。本実施形態では、ユーザの操作により、クライアント10からサーバー30,40に秘匿計算の指示が送信され、これにより、サーバー30,40で秘匿計算が行われる。また、本実施形態に係る秘匿計算システム1において、クライアント10は、秘匿計算の指示を送信し、サーバー30,40で秘匿計算が開始されると、定期的に乱数の供給に関する問い合わせをサーバー30,40に対して行い、乱数が必要である場合には、秘匿計算で使用される乱数を生成し、生成した乱数をサーバー30,40に供給する機能も有する。なお、クライアント10からサーバー30,40への乱数供給方法の詳細については後述する。
【0014】
ゲートウェイ20は、クライアント10およびサーバー30,40間の通信を制御する。具体的には、ゲートウェイ20は、クライアント10からサーバー30,40へのコネクション確立要求の伝送を許可する一方で、サーバー30、40からクライアント10へのコネクション確立要求の伝送を禁止する。一旦クライアント10とサーバー30、40の間でコネクションが確立すれば、当該コネクションが有効である間は相互に通信することが可能である。本実施形態では、ゲートウェイ20は、クライアント10からサーバー30、40とのコネクション確立要求を伝送し、コネクション確立後に、当該コネクションを使用して乱数供給の問い合わせがクライアント10からサーバー30,40に送信され、これに応答して、サーバー30,40から乱数の要求情報が同コネクションを使用してクライアント10に送信される。また、ゲートウェイ20は、サーバー30,40からクライアント10へと、秘匿計算の計算結果を送信する場合にも、同手順に従いクライアント10がサーバー30、40とのコネクションを確立させた後、サーバー30,40がクライアント10の指示に基づいて、当該コネクションを使用してクライアント10への計算結果を伝送する。
このようなゲートウェイ20の機能は、ゲートウェイが一般的に有する機能であり、かつLAN外部からクライアント10へ侵入されること防ぐために導入される一般的なネットワーク構成である。本実施形態では、ゲートウェイ20が一般的に有する機能と一般的なネットワーク構成を利用することができるため、本実施形態に係る秘匿計算システム1の既存システムへの汎用性は高いと言える。
【0015】
サーバー30,40は、演算装置、記憶装置、通信装置、およびデータベースを有しており、データベースに、データを秘密分散してシェアとして記憶している。シェアは、秘密分散された特定の数のシェアが揃わないと平文データを復号することができず、仮に、第1サーバー30または第2サーバー40の一方のみでシェアが漏洩した場合でも、もう一方のシェアが漏洩していない場合には、平文データを復号することができず、秘密状態を担保することができる。本実施形態において、サーバー30,40は、秘匿計算を行うためのサーバー側プログラムを記憶装置に記憶しており、当該プログラムを演算装置で実行することで、秘匿計算を実行することができる。特に、本実施形態では、第1サーバー30と第2サーバー40とは、インターネット2を介して互いに通信が可能であり、サーバー30,40が秘密分散されたシェアを復号することなくデータを秘匿したまま、サーバー30,40で行った計算結果を互いにやり取りしながら秘匿計算を行うことで、所望の計算結果を得るマルチパーティ計算(Multi-Party Computation、MPC)が行われる。また、秘匿計算において、サーバー30,40は、乗算、大小比較、フィルタリング計算、データの並び替えなどの秘匿計算では、クライアント10から乱数を受信し、受信した乱数を用いて秘匿計算を実行する。
【0016】
さらに、サーバー30,40は、秘匿演算で必要となる乱数を見積るためのプログラムを記憶部に記憶しており、当該乱数見積プログラムを実行することで、秘匿計算に必要な乱数を予め見積もることができる。具体的には、サーバー30,40は、クライアント10から実行する秘匿計算の計算情報を取得し、乱数見積プログラムを実行することで、クライアント10から取得した計算情報にある秘匿計算を行う場合の乱数を見積もる。計算情報は、サーバー30,40で実行される秘匿計算を示す情報であれば特に限定されないが、本実施形態では、クライアント10から出力されるクエリー情報(たとえばwhere句を有するselect構文など)が計算情報として、クライアント10から送信され、サーバー30,40により取得される。なお、当該乱数見積プログラムで見積可能な乱数は、計算対象となるテーブル構造データの行数が変化する前の計算で使用される乱数であり、行数が変化した後の計算で使用される乱数までは見積もることができない。たとえば、秘匿乗算ではテーブル構造データの行数は変化しないため、2回の秘匿乗算を行う場合も、これらの計算で使用される乱数を見積もることができるが、行数が変化するフィルタリング計算(where句)を行った後に秘匿乗算を行う計算では、フィルタリング後の秘匿乗算で使用する乱数までは見積もることができない。
【0017】
以下においては、まず、
図3ないし
図6を参照して、サーバー30,40による秘匿計算のうち、乱数を用いる秘匿乗算の一例について説明する。なお、
図3は、第1サーバー30で実行される秘匿乗算処理を示すフローチャートであり、
図4は、第2サーバー40で実行される秘匿乗算処理を示すフローチャートであり、
図5は、秘匿乗算処理を説明するための概要図である。
【0018】
(秘匿乗算処理)
秘匿乗算処理は、2入力1出力の整数乗算において、入出力に関する情報を一切知ることなく、その演算結果を得ることができる処理である。具体的には、2つの暗号化データを入力とし、それらを一切復号することなく後述する所定の演算(所定の秘匿乗算アリゴリズム)を実施し、乗算結果を暗号化データとして得る演算処理である。秘匿乗算処理では、
図5に示すように、サーバー30,40に、平文データx,yを秘密分散したシェア[[x]]
1,[[x]]
2,[[y]]
1,[[y]]
2がそれぞれ記憶されている。
図3ないし
図5に示す秘匿乗算処理では、サーバー30,40により、x,yのシェアをそのまま用いて、x×y=zの乗算を行い、計算結果であるzのシェア[[z]]
1,[[z]]
2を得る場面を例示して説明する。なお、以下においては、第1サーバー30に記憶されているxのシェアを[[x]]
1、yのシェアを[[y]]
1とする。同様に、第2サーバー40に記憶されているxのシェアを[[x]]
2、yのシェアを[[y]]
2とする。さらに、第1サーバー30に記憶されるzのシェアを[[z]]
1とし、第2サーバー40に記憶されるzのシェアを[[z]]
2とする。なお、平文データと、秘密分散されたシェアとは、以下のような関係を有している。たとえば、平文データxと、そのシェアである[[x]]
1,[[x]]
2は、x=[[x]]
1+[[x]]
2の関係にあり、[[x]]
1=rおよび[[x]]
2=x-rの関係にある。ここで、xとrは2
lの剰余環で表現される整数であり、rは一様乱数となる。lは演算対象の値域を表すビット数であり、1ビット整数の演算の場合はl=1、32ビット整数の演算の場合はl=32となる。平文データとシェアとがこのような関係にあるため、[[x]]
1+[[x]]
2により平文データxを復号することが可能となる。
【0019】
秘匿乗算処理では、クライアント10により生成された3つの乱数a,b,cを用いて計算が行われる。なお、これら3つの乱数はc=a×bの関係にある相関乱数である。クライアント10は、乱数aを秘密分散して乱数シェア[[a]]1,[[a]]2を生成し、乱数bを秘密分散して乱数シェア[[b]]1,[[b]]2を生成し、乱数cを秘密分散して乱数シェア[[c]]1,[[c]]2を生成する。そして、クライアント10は、乱数a,b,cを秘密分散したシェア[[a]]1,[[b]]1,[[c]]1を第1サーバー30に送信し、乱数a,b,cを秘密分散したシェア[[a]]2,[[b]]2,[[c]]2を第2サーバー40へと送信する。これにより、第1サーバー30は、乱数a,b,cのシェア[[a]]1,[[b]]1,[[c]]1を用いて秘匿乗算を実行することができ、また、第2サーバー40は、乱数a,b,cのシェア[[a]]2,[[b]]2,[[c]]2を用いて秘匿乗算を実行することができる。
【0020】
まず、
図3を参照して、第1サーバー30で実行される秘匿乗算処理について説明する。なお、以下においては、平文データxのシェア[[x]],[[y]]を一次シェア、一次シェア[[x]],[[y]]に基づいて算出されたシェア[[x’]],[[y’]]を二次シェアと称す。まず、ステップS101では、第1サーバー30により、平文データxの一次シェア[[x]]
1から乱数aのシェア[[a]]
1を引いた数が、二次シェア[[x’]]
1として算出される。また、ステップS102では、第1サーバー30により、平文データyの一次シェア[[y]]
1から乱数bのシェア[[b]]
1を引いた数が、二次シェア[[y’]]
1として算出される。
【0021】
また、ステップS103およびS104では、
図5に示すように、サーバー30,40間の相互通信により、一方のサーバー30,40で行われた計算結果を他方のサーバー30,40と送受信する処理が行われる。具体的には、ステップS103では、第1サーバー30により、ステップS101で算出した二次シェア[[x’]]
1と、ステップS102で算出した二次シェア[[y’]]
1とが、第2サーバー40へと送信される。また、ステップS104では、第1サーバー30により、第2サーバー40で生成された二次シェア[[x’]]
2および二次シェア[[y’]]
2が受信される。なお、二次シェア[[x’]]
2は、第2サーバー40において、平文データxの一次シェア[[x]]
2から乱数aのシェア[[a]]
2を引いて求めた数である。また、二次シェア[[y’]]
2は、第2サーバー40において算出された、平文データyの一次シェア[[y]]
2から乱数bのシェア[[b]]
2を引いて求めた数である。二次シェア[[x’]]
2および二次シェア[[y’]]
2の算出方法については、後述する
図4に示す、第2サーバー40で実行される秘匿乗算処理でも説明する。
【0022】
続いて、ステップS105では、第1サーバー30により、ステップS101で算出した二次シェア[[x’]]1と、ステップS104で取得した二次シェア[[x’]]2とが加算され、データx’が算出される。また、ステップS106では、第1サーバー30により、ステップS102で算出した二次シェア[[y’]]1と、ステップS104で取得した二次シェア[[y’]]2とが加算され、データy’が算出される。なお、データx’およびデータy’は、平文データxおよび平文データyを乱数aおよび乱数bを用いて暗号化したデータであり、それ単独で意味をなさないデータとなる。
【0023】
ステップS107では、第1サーバー30により、ステップS105で算出したデータx’、ステップS106で算出したデータy’、クライアント10から受信した乱数a,b,cのシェア[[a]]1,[[b]]1,[[c]]1を用いて、x×yの計算結果であるzのシェア[[z]]1が算出される。具体的には、第1サーバー30は、x’×y’+x’× [[b]]1+y’× [[a]]1+[[c]]1の計算結果を、シェア[[z]]1として算出することができる。そして、第1サーバー30は、算出したシェア[[z]]1を、データベースに記憶し、あるいは、クライアント10の指示に基づいて、クライアント10へと送信する。
【0024】
また、
図4は、第2サーバー40で実行される秘匿乗算処理を示すフローチャートである。
図4に示すように、まず、ステップS201では、第2サーバー40により、平文データxの一次シェア[[x]]
2から乱数aのシェア[[a]]
2を引いた数が二次シェア[[x’]]
2として算出される。また、ステップS202では、第2サーバー40により、平文データyの一次シェア[[y]]
2から乱数bのシェア[[b]]
2を引いた数が、二次シェア[[y’]]
2として算出される。
【0025】
ステップS203およびS204では、
図3のステップS103,S104と同様に、サーバー30,40間の相互通信により、一方のサーバー30,40で行われた計算結果を他方のサーバー30,40に送受信する処理が行われる。すなわち、ステップS203では、第2サーバー40により、ステップS201で算出した二次シェア[[x’]]
2と、ステップS202で算出した二次シェア[[y’]]
2とが、第1サーバー30へと送信される。なお、上述したように、
図3のステップS104で第1サーバー30が受信する二次シェア[[x’]]
2および二次シェア[[y’]]
2は、このステップS203で第2サーバー40から送信される二次シェア[[x’]]
2および二次シェア[[y’]]
2である。また、ステップS204では、第2サーバー40により、第1サーバー30で生成された二次シェア[[x’]]
1および二次シェア[[y’]]
1が受信される。なお、二次シェア[[x’]]
1および二次シェア[[y’]]
1は、上述した
図3のステップS103において第1サーバー30により送信された二次シェア[[x’]]
1および二次シェア[[y’]]
1である。
【0026】
そして、ステップS205では、第2サーバー40により、ステップS201で算出した二次シェア[[x’]]2と、ステップS204で取得した二次シェア[[x’]]1とを加算して、データx’が復号される。また、ステップS206では、第2サーバー40により、ステップS202で算出した二次シェア[[y’]]2と、ステップS204で取得した二次シェア[[y’]]1とを加算して、データy’が復号される。
【0027】
ステップS207では、第2サーバー40により、ステップS205で算出したデータx’、ステップS206で算出したデータy’、クライアント10から受信した乱数a,b,cのシェア[[a]]2,[[b]]2,[[c]]2を用いて、乗算x×yの計算結果であるデータzのシェア[[z]]2が算出される。具体的には、第2サーバー40は、x’×[[b]]2+y’×[[a]]2+ [[c]]2の計算結果をシェア[[z]]2として算出する。そして、第2サーバー40は、算出したシェア[[z]]2を、データベースに記憶し、あるいは、クライアント10の指示に基づいて、クライアント10へと送信する。
【0028】
これにより、第1サーバー30には、平文データxとyとを乗算した計算結果であるzのシェア[[z]]1が記憶され、第2サーバー40には、zのシェア[[z]]2が記憶される。また、クライアント10は、第1サーバー30からシェア[[z]]1を取得し、第2サーバー40からシェア[[z]]2を取得して、シェア[[z]]1とシェア[[z]]2とを加算することで、平文データxとyとを乗算した結果の平文データzを算出することができる。
【0029】
このように、1回の秘匿乗算では、3つの相関乱数a,b,cのシェア[[a]]1,[[b]]1,[[c]]1,[[a]]2,[[b]]2,[[c]]2が必要とされる。また、データが複数の行(行数n)を有するテーブル構造データである場合に、各行のデータを秘匿乗算する場合には、3つの相関乱数a,b,cのシェア[[a]]1,[[b]]1,[[c]]1,[[a]]2,[[b]]2,[[c]]2が行数n分必要となる。このように、秘匿乗算では、秘匿乗算の回数やテーブル構造データの行数nが予め分かれば、必要となる乱数の数も分かることとなる。本実施形態では、クライアント10が、乱数を生成する機能を有し、計算を開始する前からこれらの相関乱数のシェアを生成しプールしておくことで、必要に応じて生成した相関乱数をサーバー30,40に送信することもでき、また、後述するように、サーバー30,40の要求に応じて、相関乱数のシェアを生成しサーバー30,40に送信することもできる。
【0030】
(秘匿データ抽出処理)
次に、
図6および
図7に基づいて、秘匿データ抽出処理について説明する。なお、
図6は、第1サーバー30および第2サーバー40で実行される秘匿データ抽出処理を示すフローチャートであり、
図7は、秘匿データ抽出処理を説明するための概要図である。本実施形態に係るデータ抽出処理では、SQL文などを用いて、秘密分散したテーブル構造データの中から、一定の条件を満たす行データを抽出する処理である。以下においては、X、Yという数値属性の列データを有する、n行の行データを有するテーブル構造データの中から、X列のデータxがY列のデータyよりも小さい(x<y)という条件を満たす行データにおけるX列データの数値xを抽出する計算を例示して説明する。すなわち、SQL文で記載するところの、“select x from テーブル構造データ where x<y”の計算を例示して説明する。なお、各サーバー30,40には、
図7に示すように、計算対象であるテーブル構造データのシェアが予め記憶されているものとする。より具体的には、サーバー30,40は、X列データxのシェア[[x[i]]]およびY列データyのシェア[[y[i]]]を行数nの分だけ記憶しているものとする。以下では、n行あるテーブル構造データの各行のX列データxのシェア[[x[i]]]の数列をシェア[[x]]と称し、n行あるテーブル構造データの各行のY列データyのシェア[[y[i]]]の数列をシェア[[y]]と称す。また、iは整数でテーブル構造データのうちi行目のデータを意味するものとし、0≦i<nとする。
【0031】
図6に示す秘匿データ抽出処理は、主に、2つの処理により行われる。すなわち、x<yの大小比較を行う処理と、フィルタリング条件(
図6に示す例ではx<y)に合致する行のX列データxを抽出するフィルタリング処理である。大小比較処理においては、比較対象整数の表現ビット数に応じて必要な相関乱数の個数が異なるが、例えば、32ビット整数の場合、1回の比較当たり、1ビットの相関乱数のシェアの組み合わせ([[a]],[[b]],[[c]])が163組必要となる。さらに、テーブル構造データがn行である場合は、n倍の相関乱数のシェアの組み合わせが必要となる。また、フィルタリング処理においては、抽出対象データ(抽出するデータ列のデータ、SQL文ではselect文に記載されるデータ)が32ビット整数1列である場合、1回のフィルタリングあたり、シャッフルと呼ばれる乱数(以下、単にシャッフルと称す)と相関乱数の数列の組み合わせ((r1,r1’,a1,a1’,b1,b1’),(r2,r2’,a2,a2’,b2,b2’))が1組必要となる。なお、シャッフルr1,r1’,r2,r2’は、ランダム置換を構成するn個の数列(乱数列)であり、計算対象となるテーブル構造データの行数が多くなるほど、シャッフルに含まれる乱数の数(乱数列の要素数)は多くなる。また、a1,a1’,b1,b1’ ,a2,a2’,b2,b2’は相関乱数の数列である。本実施形態では、抽出対象がX列データxの1つだけのため、相関乱数はa,b(具体的には、a1,a1’,b1,b1’,a2,a2’,b2,b2’)の組み合わせとなるが、抽出対象の列数が増加すれば、相関乱数の組み合わせもa,b,c・・・と増えていく。このように、秘匿データ抽出処理においては、実行する計算処理に応じて乱数の種類が変わり、また、計算対象となるテーブル構造データの行数nや抽出対象の列数に応じて必要となる乱数の数が変化する。さらに、本実施例においてテーブル構造データの行数は公開されている(秘匿されない)値であるが、フィルタリング結果のテーブル構造データの行数については、当該フィルタリング処理が実行完了するまでは不明である。そのため、データ分析においては、フィルタリング処理後に集計等何らかの演算を実施する場合が多いが、前段のフィルタリング処理が完了するまでは、その後の秘匿計算に必要な乱数を予め見積もってプールしておくことが難しいという問題がある。本実施形態では、クライアント10が必要に応じて乱数を生成しサーバー30,40に提供することで、このような問題を解決することが可能となる。以下に、
図6に示す秘匿データ抽出処理のフローチャートに基づいて、本実施形態に係る秘匿データ抽出処理を説明する。
【0032】
図6に示すように、ステップS301では、サーバー30,40により、フィルタリング条件の評価が行われる。本実施形態では、計算対象となるテーブル構造データの中から、x<yとなる行データを抽出する計算であるため、サーバー30,40は、自身が記憶するテーブル構造データのシェア、より具体的には、テーブル構造データのX列データxのシェア[[x]]およびY列データyのシェア[[y]]に基づいて、xとyとの大小関係を秘匿計算で評価し、評価結果fのシェア[[f]]を出力として得る。具体的には、テーブル構造データの各行のX列データxのシェア[[x[i]]]と、Y列データyのシェア[[y[i]]]とを用いて、各行におけるxとyの大小関係を秘匿計算で評価する。なお、シェア[[x]]とシェア[[y]]とに基づいて各行のX列データxとY列データyとの大小関係を秘匿計算で評価する方法は、サーバー30,40に格納済みの1ビットの相関乱数のシェアの組み合わせ([[a]],[[b]],[[c]])を使用する公知の方法を用いることができる(たとえば、大畑幸矢および縫田光司、「効率的な秘匿大小比較プロトコルとその応用」、暗号と情報セキュリティシンポジウム(SCIS 2019)予稿集、2019年を参照)。
【0033】
ステップS302では、サーバー30,40により、ステップS301で得たフィルタリング条件評価の評価結果のシェア[[f]]にランダム置換Πを適用した[[Π(f)]]P(要素数は行数n)が生成される。ここで、ステップS301のフィルタリング条件評価では、テーブル構造データの行ごとに、x<yである場合には1を秘密分散した数値がシェア[[f(i)]]として出力され、x<yでない場合には0を秘密分散した数値がシェア[[f(i)]]として出力される。このように、各行におけるx<yの評価に応じて出力された0または1のシェア[[f]]を、さらにランダム置換したものが[[Π(f)]]Pとなる。なお、上記iはテーブル構造データのi行目のデータであることを示す。また、[[Π(f)]]Pは、テーブル構造データの全ての行の評価結果である1または0のシェア[[f(i)]]をランダム置換したものであり、要素数はテーブル構造データの行数nとなる。このように、[[Π(f)]]Pでは、評価結果fを秘匿計算でシェア[[f]]として求めることで、フィルタリング条件(x<y)を満たすか否かが不明となるだけではなく、シェア[[f]]にランダム置換を適用することで、シェア[[f]]の何行目のデータが、元のテーブル構造データの何行目のデータに相当するか不明となり、セキュリティを高めることが可能となる。なお、上述したランダム置換は、サーバー30,40に格納済みのシャッフルと相関乱数の数列の組み合わせ((r1,r1’,a1,a1’,b1,b1’),(r2,r2’,a2,a2’,b2,b2’))を使用する公知の方法により実行することができる(たとえば、N.Attrapadung他、”Oblivious Linear Group Actions and Applications”,In Proceedings of CCS 2021, 630‐650頁を参照。)。
【0034】
なお、
図6に示す秘匿データ抽出計算処理は、第1サーバー30および第2サーバー40でそれぞれ実行されるため、
図6において、自サーバーで算出したシェアを「P」を用いて示し、相手サーバーで算出したシェアを「Q」を用いて示す(以下においても同様。)。たとえば、フィルタリング条件評価の評価結果は、第1サーバー30が保持する評価結果にランダム置換を適用したシェア[[Π(f)]]
1と、第2サーバー40が保持する評価結果にランダム置換を適用したシェア[[Π(f)]]
2とに秘密分散されるが、第1サーバー30が
図6に示す秘匿データ抽出処理を行う場合には、評価結果にランダム置換を適用したシェア[[Π(f)]]
Pは、第1サーバー30が保持する評価結果にランダム置換を適用したシェア[[Π(f)]]
1を示すものとなり、第2サーバー40が
図6に示す秘匿データ抽出処理を行う場合には、評価結果にランダム置換を適用したシェア[[Π(f)]]
Pは、第2サーバー40が保持する評価結果にランダム置換を適用したシェア[[Π(f)]]
2を示すものとなる。
【0035】
ステップS303では、サーバー30,40により、抽出対象データであるX列データxのシェア[[x]]にランダム置換Πを適用し、シェア[[Π(x)]]Pが生成される。なお、ステップS303で用いられるX列データxは、テーブル構造データの全行のX列データx(要素数がテーブル構造データの行数nであるデータ)であり、行数nのX列データxのシェア[[x]]をランダム置換したシェア[[Π(x)]]Pも、何行目のデータが元のテーブル構造データの何行目のデータに相当するか不明となり、要素数はテーブル構造データの行数nとなる。X列データxのシェア[[x]]のランダム置換は、ステップS302と同様の方法で実行することができる。
【0036】
ステップS304,S305では、
図7に示すように、サーバー30,40間の相互通信により、一方のサーバー30,40で行われた計算結果を他方のサーバー30,40に送受信する処理が行われる。すなわち、ステップS304では、サーバー30,40により、ステップS302で生成された評価結果にランダム置換を適用したシェア[[Π(f)]]
Pが、相手側サーバーに出力される。また、ステップS305では、サーバー30,40により、相手側サーバーで生成された評価結果にランダム置換を適用したシェア[[Π(f)]]
Qが受信される。そして、ステップS306では、サーバー30,40により、リスト[[L]]
Pの準備が行われる。リスト[[L]]
Pは、テーブル構造データのうちx<yの条件を満たす行のX列データxのシェアを挿入するためのリストであり、ステップS306の時点では空となっている。
【0037】
ステップS307~S309は、計算対象であるテーブル構造データの行ごとに行われ、全ての行についてステップS307~S309が行われるまで処理が繰り返される。本実施形態では、テーブル構造データの行数がnであるため、ステップS307~S309の処理がn回繰り返されることとなる。
【0038】
具体的には、ステップS307では、サーバー30,40により、ステップS302で生成した評価結果にランダム置換を適用したシェア[[Π(f)]]P(要素数は行数n)のm個目の要素となるシェア[[Π(f)[m]]]Pと、ステップS305で受信した評価結果にランダム置換を適用したシェア[[Π(f)]]Q(要素数は行数n)のm個目の要素となるシェア[[Π(f)[m]]]Qに基づいて、m行目のデータの評価結果の復号が行われる。なお、mはランダム置換後のシェア[[Π(f)]のm行目(行番号m)のデータであることを意味し、元のテーブル構造データの行番号(i行目)の数とは相違する。本実施形態では、ステップS301のフィルタリング条件評価において、x<yを満たすm行目の行データについては、復号結果が1となるように評価結果のシェア[[Π(f)[m]]]Pおよび[[Π(f)[m]]]Qが生成されており、x<yを満たさないm行目の行データについては、復号結果が0となるように評価結果のシェア[[Π(f)[m]]]Pおよび[[Π(f)[m]]]Pが生成されている。よって、ステップS307では、x<yを満たす行データについては復号結果が1として算出され、x<yを満たさない行データについては復号結果が0として算出される。
【0039】
ステップS308では、サーバー30,40により、対象となる行データが、フィルタリング条件に適合しているか否かの判断が行われる。上述したように、本実施形態では、x<yを満たす行データについては復号結果が1として算出され、x<yを満たさない行データについては復号結果が0として算出される。そのため、サーバー30,40は、ステップS307で取得した複合結果が1である場合には、フィルタリング条件であるx<yに適合しているとして、ステップS309に進み、一方、ステップS307で取得した複合結果が0である場合には、フィルタリング条件であるx<yに適合していないとして、ステップ310に進む。
【0040】
ステップS309では、対象となる行データにおいて、フィルタリング条件であるx<yに適合しているため、サーバー30,40により、ステップS303で生成されたシャッフル後のm行目の行データにおけるX列データxのシェア[[Π(x)[m]]]Pが、ステップS306で生成したリスト[[L]] Pに挿入される。すなわち、本実施形態では、フィルタリング条件に適合した行のX列データxのシェア[[Π(x)[m]]]Pのみがリスト[[L]] Pに代入され、フィルタリング条件に適合していない行のX列データxのシェア[[Π(x)[m]]]Pはリスト[[L]] Pから排除されることとなる。
【0041】
ステップS310では、サーバー30,40により、テーブル構造データの全ての行について、ステップS307~S309の処理を実行したか判断される。テーブル構造データの全ての行について、ステップS307~S309の処理が実行された場合には、ステップS311に進み、サーバー30,40により、秘匿データ抽出処理の計算結果として、リスト[[L]] Pが出力される。
【0042】
これにより、第1サーバー30および第2サーバー40は、テーブル構造データの中から、x<yを満たす行データのうちのX列データxのリストのシェア[[L]] Pを算出し、データベースに記憶することができる。また、クライアント10は、第1サーバー30からリストのシェア[[L]]1を取得し、第2サーバー40からリストのシェア[[L]]2を取得し、リストのシェア[[L]]1とシェア[[L]]2とを加算して復号することで、x<yを満たす行データのうちのX列データxのリストLを算出することができる。
【0043】
このように、本実施形態に係る秘匿データ抽出においては、実行する計算処理に応じて乱数の種類が変わり、また、計算対象となるテーブル構造データの行数nや抽出対象データの列数に応じて必要となる乱数の数が変化する。そのため、特に、フィルタリングのように出力テーブル構造データの行数が変化する計算の後に続いて、別の処理を開始したい場合、前段のフィルタリング処理が完了するまでは、その後の秘匿計算に必要な乱数を予め見積もってプールしておくことが難しい。しかしながら、本実施形態では、クライアント10が、各処理に必要な乱数を生成し、サーバー30,40に提供することで、秘匿データ抽出処理のような必要な乱数の種類や数を予め見積ることが困難な場合も、適切に、秘匿計算に必要な乱数を提供することができる。以下に、クライアント10とサーバー30,40との間で行われる乱数供給処理について説明する。
【0044】
図8は、本実施形態に係るクライアント側乱数供給処理を示すフローチャートである。また、
図9は、本実施形態に係るサーバー側乱数供給処理を示すフローチャートである。さらに、
図10は、本実施形態に係る乱数供給処理を説明するための図である。以下においては、まず、
図8および
図9に基づいて、クライアント側乱数供給処理およびサーバー側乱数供給処理について説明した後に、
図10に基づいて、乱数供給処理におけるクライアント10とサーバー30,40との情報の授受について説明する。
【0045】
図8は、本実施形態に係る乱数供給処理のうち、クライアント10により実行される処理である。
図8に示すように、ステップS401では、乱数の見積要求が行われる。具体的には、クライアント10は、第1サーバー30に実行させる秘匿計算の計算情報とともに、秘匿計算において必要となる乱数を見積もるための見積プログラムを実行させるための指示を見積要求として、第1サーバー30に対して出力する。これにより、第1サーバー30は、クライアント10から送信された計算情報の秘匿計算を行うために必要な乱数を見積もる、乱数見積もりプログラムを実行する(後述するステップS502)。なお、本実施形態において、クライアント10は、計算情報として、第1サーバー30および第2サーバー40に秘匿計算させるクエリー情報を送信する。
【0046】
ステップS402では、第1サーバー30の乱数見積プログラムにより見積もられた乱数見積結果が受信される。そして、ステップS403では、ステップS402で受信した乱数見積結果に基づいて、乱数の生成が行われる。なお、クライアント10による乱数の生成は、公知の方法で行うことができる。続くステップS404では、ステップS403で生成した乱数を、サーバー30,40に供給する処理が行われる。このように、本実施形態では、乱数見積プログラムを第1サーバー30のみに実行させるが、見積結果に基づいて生成した乱数は、第1サーバー30および第2サーバー40に供給される。そして、ステップS405では、第1サーバー30および第2サーバー40に対して、秘匿計算の実行指示が送信される。たとえば、クライアント10は、秘匿計算の内容を記載したSQL文を、当該秘匿計算の実行指示として、第1サーバー30および第2サーバー40に送信することができる。
【0047】
ステップS406では、ステップS404の乱数の供給、ステップS407の問い合わせ情報の送信、または、ステップS411の乱数の送信から一定時間が経過したか否か判断される。一定時間が経過するまでは、ステップS406で待機し、一定期間が経過すると、ステップS407に進む。なお、ステップS404の乱数の供給に代えて、ステップS405の秘匿計算の実行指示から一定時間が経過したか判断する構成としてもよい。
【0048】
ステップS407では、第1サーバー30に対して、乱数の不足の問い合わせが行われる。問い合わせを受信した第1サーバー30は、現時点で不足している乱数を検出し(後述するステップS509)、必要な乱数の情報を、乱数要求情報としてクライアント10に送信する(後述するステップS510)。ステップS408では、第1サーバー30から送信された乱数要求情報が受信され、続くステップS409では、受信された乱数要求情報に基づいて、乱数が不足しているか否かの判断が行われる。乱数が不足していると判断された場合には、ステップS410に進み、不足している乱数が生成され、ステップS411において、生成した乱数が第1サーバー30および第2サーバー40に送信される。その後、ステップS412に進む。一方、ステップS409において、乱数が不足していないと判断された場合には、ステップS410,S411の処理を行わずに、ステップS412に進む。このように、本実施形態において、クライアント10は、乱数が不足しているかの問い合わせの送信と乱数要求情報の受信は第1サーバー30との間でのみ行い、乱数が不足する場合には、第1サーバー30および第2サーバー40に乱数を供給する。通常、第1サーバー30と第2サーバー40とは同一の種類および数の乱数を用いて同一の種類の秘匿計算を行うため、第1サーバー30で乱数が不足する場合は、第2サーバー40でも、同一の種類および数の乱数が不足することから、第1サーバー30のみに問い合わせを送信する構成とすることで、通信量を削減することが可能となる。
【0049】
ステップS412では、秘匿計算が終了したかの判断が行われる。たとえば、クライアント10は、第1サーバー30から秘匿計算が終了した旨の情報を取得することができ、この場合、秘匿計算が終了したと判断することができる。秘匿計算が終了していない場合は、ステップS406に戻り、ステップS406~S411の処理が繰り返される。一方、秘匿計算が終了している場合には、
図8に示すクライアント側乱数供給処理を終了する。
【0050】
次に、
図9に基づいて、サーバー側乱数供給処理について説明する。
図9に示すサーバー側乱数供給処理は、本実施形態に係る乱数供給処理のうち、サーバー30,40によりそれぞれ実行される処理である(なお、本実施形態では、ステップS501~S503,S508,S509は第1サーバー30のみが実行する。)。
【0051】
図9に示すように、ステップS501では、第1サーバー30により、クライアント10から送信された乱数の見積要求が受信される。ステップS502では、第1サーバー30により、ステップS501で受信した見積要求をトリガーとして、乱数見積プログラムが実行される。ここで、クライアント10から送信される乱数の見積要求には、実行予定の秘匿計算の計算情報が含まれており、乱数見積プログラムは、計算情報にある秘匿計算に必要とされる乱数を見積もる。なお、本実施形態において、第1サーバー30は、乱数見積プログラムを記憶部に予め記憶しており、クライアント10の乱数見積要求に含まれる秘匿計算の計算情報に基づいて、乱数見積プログラムを実行する。
【0052】
ステップS503では、第1サーバー30により、ステップS502で見積もりした乱数見積結果がクライアント10に送信される。これにより、クライアント10において見積もりに応じた乱数が生成され(ステップS403)、第1サーバー30および第2サーバー40に生成した乱数が送信される(ステップS404)。そのため、ステップS504において、サーバー30,40により、クライアント10により生成され、送信された乱数が受信されることとなる。
【0053】
ステップS505では、ステップS504で受信した乱数を用いて、秘匿計算が実行される。ただし、乱数の見積では、秘匿計算において行数が変更するまでの計算に用いられる乱数しか見積もることができないため、秘匿計算の内容によっては、ステップS504で受信した乱数だけでは秘匿計算を完了することができない。そのため、秘匿計算の途中で秘匿計算に必要な乱数の不足が生じる場合があり(ステップS506=Yes)、このような場合、ステップS507に進み、乱数が不足しているために、秘匿計算が一時的に中断される。
【0054】
本実施形態では、秘匿計算が開始されると、クライアント10は乱数の不足の問い合わせを定期的に第1サーバー30に送信する(ステップS407)。そして、ステップS508では、第1サーバー30により、クライアント10から送信される問い合わせが受信され、続くステップS509では、第1サーバー30により、当該問い合わせに対して、秘匿計算において不足している乱数の種類と数の情報と、秘匿計算の進捗情報とが、乱数要求情報として、クライアント10に送信される。なお、本実施形態において、第1サーバー30は、内部で、不足乱数情報および進捗情報を比較的短い周期で更新しており、クライアント10から問い合わせを受信した時点で最新の不足乱数情報と進捗情報とを、乱数要求情報としてクライアント10に送信する。クライアント10は、第1サーバー30から乱数の要求情報を受信すると、不足している乱数を生成し、第1サーバー30および第2サーバー40の両方に送信する(ステップS410,S411)。これにより、ステップS510では、サーバー30,40により、クライアント10から送信された乱数が受信され、受信した乱数を用いて秘匿計算が継続される。
【0055】
また、ステップS511では、サーバー30,40により、秘匿計算が終了したか否かの判断が行われる。秘匿計算が終了していない場合は、ステップS506に戻り、ステップS506~S510の処理が繰り返される。一方、秘匿計算が終了している場合には、
図9に示すサーバー側乱数供給処理を終了する。
【0056】
次に、
図10に基づいて、乱数供給処理における、クライアント10とサーバー30,40との情報の授受について説明する。まず、乱数供給処理が開始されると、時刻T1において、クライアント10により、秘匿計算情報を含む乱数の見積要求が第1サーバー30へと送信される(ステップS401)。これにより、第1サーバー30により、乱数見積プログラムが実行され、秘匿計算情報に含まれる秘匿計算を行うために必要な乱数の見積もりが行われる(ステップS502)。そして、時刻T2では、第1サーバー30からクライアント10に、乱数の見積結果が送信される(ステップS503)。これに対して、クライアント10は、第1サーバー30からの乱数の見積結果に応じた乱数を生成し(ステップS403)、時刻T3で、生成した乱数を第1サーバー30および第2サーバー40に送信する(ステップS404)。そして、時刻T4で、クライアント10から、第1サーバー30および第2サーバー40に秘匿計算の実行が指示され、第1サーバー30および第2サーバー40により、秘匿計算が開始される。
【0057】
また、秘匿計算が開始されて一定期間が経過した時刻T5では、クライアント10により、第1サーバー30に乱数の問い合わせが送信される(ステップS407)。これに対して、第1サーバー30は、時刻T6において、不足している乱数の情報を、進捗情報と共に、乱数要求情報としてクライアント10に送信する(ステップS509)。たとえば、
図10に示す例において、時刻T6では、進捗が10%、不足乱数が「None」(不足なし)との乱数要求情報が、第1サーバー30からクライアント10へと送信される。クライアント10は、乱数要求情報における必要な乱数が「None」であるため、クライアント10による乱数の生成および供給は行わない。
【0058】
また、前回の問い合わせから一定期間が経過した時刻T7では、クライアント10により、第1サーバー30に対して乱数の問い合わせが再び送信される(ステップS407)。これに対して、第1サーバー30は、時刻T8において、不足している乱数の情報を、進捗情報と共に、乱数要求情報としてクライアント10に送信する(ステップS509)。時刻T8では、第1サーバー30において、秘匿計算に使用される「A2」という種類の乱数が1000個不足しているものとする。この場合、時刻T8において、第1サーバー30は、進捗が30%、不足乱数が「A2:1000個」との乱数要求情報を、クライアント10に送信する。これにより、時刻T9において、クライアント10は、不足している乱数が「A2:1000個」であるため、種類「A2」の乱数を1000個生成する処理を行い(ステップS410)、生成した種類「A2」の乱数1000個を、第1サーバー30および第2サーバー40に送信する(ステップS411)。なお、本実施形態において、「A2」とは、相関乱数の1種(たとえば32ビット長に対応する相関乱数)を意味するものとする。
【0059】
さらに、前回の乱数供給から一定期間が経過した時刻T10でも、クライアント10により、第1サーバー30に乱数の問い合わせが再び送信される(ステップS407)。これに対して、第1サーバー30は、時刻T11において、不足している乱数の情報を、進捗情報と共に、乱数要求情報としてクライアント10に送信する(ステップS509)。時刻T11では、第1サーバー30において、秘匿計算に使用される「SR」という種類の乱数が3個不足しているものとする。この場合、時刻T11において、第1サーバー30は、進捗が50%、不足乱数が「SR:3個」との乱数要求情報を、クライアント10に送信する。これにより、時刻T12において、クライアント10は、不足している乱数が「SR:3個」であるため、種類「SR」の乱数を3個生成する処理を行い(ステップS410)、生成した種類「SR」の乱数3個を、第1サーバー30に送信する(ステップS411)。なお、本実施形態において、「SR」は、n行からなる指定列(columns)をシャッフルするためのシャッフル乱数を意味するものとする。
【0060】
また、時刻T12以降においても、サーバー30,40およびクライアント10は、サーバー30,40間での秘匿計算が終了するまで、乱数の問い合わせと、問い合わせに対する乱数要求情報の送信と、乱数要求情報に基づく乱数の供給を繰り返し、秘匿計算が終了すると、乱数供給処理を終了する。
【0061】
以上のように、本実施形態に係る秘匿計算システム1では、秘匿計算を行う複数のサーバー30,40と、複数のサーバー30,40に秘匿計算に必要な乱数を供給するクライアント10と、を有し、複数のサーバー30,40のうち少なくとも1つの第1サーバー30は、秘匿計算に必要となる乱数の種類および数を含む乱数の要求情報をクライアント10に送信し、クライアント10は、乱数の要求情報を受信した場合に、乱数の要求情報に基づいて、乱数を生成して複数のサーバー30,40に送信する。このように、本実施形態に係る秘匿計算システム1では、クライアント10から第1サーバー30に対して定期的に乱数の供給に関する問い合わせを行い、第1サーバー30からクライアント10に乱数の要求情報を繰り返し送信させることで、乱数が不足しており乱数の供給が必要な場合には、クライアント10が必要な種類の乱数を必要な数だけ生成し秘匿計算を行う全てのサーバー30,40に供給することができるため、秘匿計算の途中で乱数が不足してしまうことを防止することができる。
【0062】
以上、本発明の好ましい実施形態例について説明したが、本発明の技術的範囲は上記実施形態の記載に限定されるものではない。上記実施形態例には様々な変更・改良を加えることが可能であり、そのような変更または改良を加えた形態のものも本発明の技術的範囲に含まれる。
【0063】
たとえば、上述した実施形態では、クライアント10とサーバー30,40との通信を制御するための装置としてゲートウェイ20を例示したが、この構成に限定されず、ファイアウォールやルーターなどの通信制御コンポーネントを用いる構成としてもよい。
【0064】
また、上述した実施形態では、
図3ないし
図6において、秘匿乗算処理および秘匿データ抽出処理のアルゴリズムの一例を例示して説明したが、上記アルゴリズムに限定されるものではなく、公知である別のアルゴリズムを用いることもできる。また、アルゴリズムが変わると、必要とされる乱数の数や種類も変化するが、本発明による秘匿計算システム1では、第1サーバー30から要求された種類および数の乱数を、クライアント10が生成することは、どのアルゴリズムを用いた場合でも同様である。
【0065】
さらに、上述した実施形態では、秘匿計算システム1が、ゲートウェイ20を有する構成を例示したが、ゲートウェイ20を備えない構成とすることもできる。この場合、クライアント10は、ゲートウェイ20を介さずに、第1サーバー30に乱数供給の問い合わせを直接送信することができ、第1サーバー30も、ゲートウェイ20を介さずに、クライアント10の要求に応答して必要な情報(乱数の要求情報や秘匿計算の結果)をクライアント10に送信することができる。
【0066】
加えて、上述した実施形態では、乱数を使用する秘匿計算として、乗算、除算、大小比較、テーブル構造データのフィルタリングおよび並び替えを例示して説明したが、乱数を使用する秘匿計算はこれに限定されない。たとえば、乗算や除算、大小比較のように、行数nに依存しない乱数を必要する秘匿計算として、クエリーのjoin構文に該当する内部結合や、集約関数Avgの平均値の算出、Trim,LTrim,RTrim,Upper,Lower,Replace,Split,ZenToHan,HanToZenなどの文字列操作関数、ContainsやNotContainsなどの文字列評価関数、Argmax,Dotなどの数学演算、LinregFit,LinregPredictなどの分析演算、Expandなどのカラム操作、「&」(AND)や「|」(OR)などの論理演算が挙げられる。また、where句に相当するフィルタリングやorder by句に相当する並び替えなどのように、行数nに依存するシャッフル乱数を必要する秘匿計算として、group by句に相当する合計の算出、MinやMaxに相当する最小値や最大値の算出が挙げられる。
【0067】
また、上述した実施形態では、第1サーバー30において、乱数見積プログラムを実行する構成を例示したが、この構成に限定されず、第2サーバー40が乱数見積プログラムを実行する構成としてもよい。
【0068】
さらに、上述した実施形態では、クライアント10から乱数の問い合わせを行った場合、第1サーバー30は、現在不足している乱数の情報を乱数要求情報としてクライアント10に返信するが、この構成に限定されず、将来不足する予定の乱数も含めて、クライアント10に乱数要求情報として送信する構成とすることができる。たとえば、第1サーバー30は、クライアント10から乱数の問い合わせ(ステップS407)があった場合も、乱数見積プログラムを実行することで、現在不足している乱数だけではなく、現時点で見積もり可能な乱数を見積り、乱数要求情報として送信することができる。特に、クライアント10により乱数が生成されている間、第1サーバー30において乱数が不足している場合は、クライアント10から乱数が供給されるまで、第1サーバー30での秘匿計算は停止した状態となるため、将来不足する乱数も特定し要求することで、秘匿計算を早めることが可能となる。ただし、この場合も、フィルタリングなどで行数が変化してしまう場合には、行数変化後に必要な乱数までは見積もることはできない。
【0069】
また、上述した実施形態では、乱数として、「A2」で表す32ビット長に対応する相関乱数と、「SR」で表すシャッフル乱数を例示したが、乱数の種類は上記に限定されず、64ビット長、128ビット長、1ビット長が32組などの相関乱数や、上記以外のシャッフル乱数を用いる構成とすることもできる。
【0070】
さらに、上述した実施形態では、クライアント10は、乱数が不足しているかの問い合わせを第1サーバー30のみに送信し、問い合わせに応答する乱数要求情報を第1サーバー30から受信する構成を例示したが、この構成に限定されず、クライアント10は、乱数が不足しているかの問い合わせを第1サーバー30および第2サーバー40に送信し、問い合わせに応答する乱数要求情報を第1サーバー30および第2サーバー40から受信する構成としてもよい。
【符号の説明】
【0071】
1…秘匿計算システム
10…クライアント
20…ゲートウェイ
30…第1サーバー
40…第2サーバー
2…インターネット