(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-12-04
(45)【発行日】2023-12-12
(54)【発明の名称】秘密計算システム、秘密計算サーバ装置、秘密計算方法および秘密計算プログラム
(51)【国際特許分類】
G09C 1/00 20060101AFI20231205BHJP
【FI】
G09C1/00 650Z
(21)【出願番号】P 2021572116
(86)(22)【出願日】2020-01-20
(86)【国際出願番号】 JP2020001631
(87)【国際公開番号】W WO2021149092
(87)【国際公開日】2021-07-29
【審査請求日】2022-07-19
(73)【特許権者】
【識別番号】000004237
【氏名又は名称】日本電気株式会社
(74)【代理人】
【識別番号】100080816
【氏名又は名称】加藤 朝道
(74)【代理人】
【識別番号】100098648
【氏名又は名称】内田 潔人
(72)【発明者】
【氏名】土田 光
【審査官】上島 拓也
(56)【参考文献】
【文献】国際公開第2017/038761(WO,A1)
【文献】五十嵐 大,MEVAL2 vs. CCS Best paper on MPC-AES,SCIS2017 暗号と情報セキュリティシンポジウム2017予稿集,2017年01月24日,pp.1-8、特にpp.1-3
【文献】古川 潤,スループットの大きいマルチパーティー計算,SCIS2016 コンピュータセ キュリティシンポジウム2016予稿集,2016年01月19日,pp.1-7、特にpp.1-4
(58)【調査した分野】(Int.Cl.,DB名)
G09C 1/00
(57)【特許請求の範囲】
【請求項1】
相互にネットワークで接続した少なくとも3台以上の秘密計算サーバ装置を備える秘密計算システムであって、
前記秘密計算サーバ装置のそれぞれが、
前記秘密計算サーバ装置の間で疑似乱数生成器を共有する乱数生成部と、
前記乱数生成部における乱数の生成に用いるシードを分散して記憶するシード記憶部と、
前記乱数生成部が生成した乱数を記憶する事前生成乱数記憶部と、
少なくとも処理対象となるシェアを記憶するシェア値記憶部と、
前記乱数と前記処理対象となるシェアとを用いて、前記秘密計算サーバ装置の間で送受信するためのキャリーを少なくとも計算する論理演算部と、
前記キャリーからマスクを除去する内積計算部と、
前記キャリーを消去して処理結果を得る処理を少なくとも行う算術演算部と、
を有する、秘密計算システム。
【請求項2】
前記乱数は、論理演算の乱数と算術演算の乱数とを含む、請求項1に記載の秘密計算システム。
【請求項3】
前記算術演算の乱数は、前記論理演算の乱数にビット埋め込みの処理をすることで得られる、請求項2に記載の秘密計算システム。
【請求項4】
前記処理対象となるシェアから前記処理結果へは、法の変換を伴う型変換になっている、請求項1から請求項3のいずれか1項に記載の秘密計算システム。
【請求項5】
前記処理対象となるシェアから前記処理結果へは、前記処理対象となるシェアに含まれるビットを結合するビット結合の処理である請求項4に記載の秘密計算システム。
【請求項6】
前記処理対象となるシェアから前記処理結果へは、前記処理対象となるシェアから値が1であるビットの個数をカウントする処理である請求項4に記載の秘密計算システム。
【請求項7】
前記秘密計算サーバ装置と相互にネットワークで接続した、前記キャリーを用いて不正検知を行う補助サーバ装置を備える、請求項1から請求項6のいずれか1項に記載の秘密計算システム。
【請求項8】
前記秘密計算サーバ装置と相互にネットワークで接続し、不正検知用の乱数を生成するためのシードと疑似乱数生成器を共有する2つの補助サーバ装置を備える、請求項1から請求項7のいずれか1項に記載の秘密計算システム。
【請求項9】
相互にネットワークで接続した少なくとも3台以上の秘密計算サーバ装置の一つであって、
前記秘密計算サーバ装置の間で疑似乱数生成器を共有する乱数生成部と、
前記乱数生成部における乱数の生成に用いるシードを分散して記憶するシード記憶部と、
前記乱数生成部が生成した乱数を記憶する事前生成乱数記憶部と、
少なくとも処理対象となるシェアを記憶するシェア値記憶部と、
前記乱数と前記処理対象となるシェアとを用いて、前記秘密計算サーバ装置の間で送受信するためのキャリーを少なくとも計算する論理演算部と、
前記キャリーからマスクを除去する内積計算部と、
前記キャリーを消去して処理結果を得る処理を少なくとも行う算術演算部と、
を備える、秘密計算サーバ装置。
【請求項10】
相互にネットワークで接続した少なくとも3台以上の秘密計算サーバ装置を用いる秘密計算方法であって、
前記秘密計算サーバ装置の間で共有した疑似乱数生成器を用いて
前記秘密計算サーバ装置が乱数を生成し、
前記乱数と処理対象となるシェアとを用いて、前記秘密計算サーバ装置の間で送受信するためのキャリーを
前記秘密計算サーバ装置が計算し、
前記秘密計算サーバ装置が内積計算を用いて前記キャリーからマスクを除去し、
前記秘密計算サーバ装置が前記キャリーを消去して処理結果を得る、秘密計算方法。
【請求項11】
前記乱数は、論理演算の乱数と算術演算の乱数とを含む、請求項10に記載の秘密計算方法。
【請求項12】
前記算術演算の乱数は、前記論理演算の乱数にビット埋め込みの処理をすることで得られる、請求項11に記載の秘密計算方法。
【請求項13】
前記乱数は、不正検知用の乱数を含む、請求項10から請求項12のいずれか1項に記載の秘密計算方法。
【請求項14】
前記秘密計算サーバ装置ではないサーバ装置にて前記キャリーを用いて不正検知をした後に前記内積計算を行う、請求項10から請求項13のいずれか1項に記載の秘密計算方法。
【請求項15】
前記内積計算は、不正検知可能な内積計算である、請求項10から請求項14のいずれか1項に記載の秘密計算方法。
【請求項16】
前記秘密計算サーバ装置ではない2つのサーバ装置から受信した乱数を用いて不正検知を行う、請求項10から請求項15のいずれか1項に記載の秘密計算方法。
【請求項17】
相互にネットワークで接続した少なくとも3台以上の秘密計算サーバ装置に実行させる秘密計算プログラムであって、
前記秘密計算サーバ装置の間で共有した疑似乱数生成器を用いて乱数を生成し、
前記乱数と処理対象となるシェアとを用いて、前記秘密計算サーバ装置の間で送受信するためのキャリーを計算し、
内積計算を用いて前記キャリーからマスクを除去し、
前記キャリーを消去して処理結果を得る、秘密計算プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、秘密計算システム、秘密計算サーバ装置、秘密計算方法および秘密計算プログラムに関するものである。
【背景技術】
【0002】
近年、秘密計算と呼ばれる技術の研究開発が盛んに行われている(例えば、特許文献1または非特許文献1参照)。秘密計算は、第三者に対して計算過程とその結果を秘匿しつつ所定の処理を実行する技術の一つである。秘密計算における代表的な技術の一つとして、マルチパーティ計算技術が挙げられる。マルチパーティ計算技術では、秘匿するデータを複数のサーバ(秘密計算サーバ)に分散配置し、秘匿したまま当該データの任意の演算を実行する。以降、特に断りがない限り、本書で「秘密計算」という語を用いた場合は、マルチパーティ計算技術を意味するものとする。
【0003】
非特許文献2および非特許文献3には、ビット分解やビット結合などの秘密計算に用いられる型変換処理が記載されている。
【先行技術文献】
【特許文献】
【0004】
【非特許文献】
【0005】
【文献】Toshinori ARAKI, 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. ACM, 2016. p. 805-817、2016
【文献】Toshinori ARAKI, et al、"Generalizing the SPDZ Compiler For Other Protocols. "、Proceedings of the 2018 ACM SIGSAC Conference on Computer and Communications Security. ACM, 2018. p. 880-895、2018
【文献】Toshinori ARAKI, et al、"How to Choose Suitable Secure Multiparty Computation Using Generalized SPDZ"、CCS ’18, October 15-19, 2018
【文献】Payman Mohassel and Peter Rindal、"ABY3: A Mixed Protocol Framework for Machine Learning"、Proceedings of the 2018 ACM SIGSAC Conference on Computer and Communications Security. ACM, 2018. p. 35-52、2018
【文献】Jun FURUKAWA, et al、"High-Throughput Secure Three-Party Computation for Malicious Adversaries and an Honest Majority"、In J. Coron and J. B. Nielsen, editors, Advances in Cryptology - EUROCRYPT 2017 - 36th Annual International Conference on the Theory and Applications of Cryptographic Techniques, Paris, France, April 30 - May 4, 2017, Proceedings, Part II, volume 10211 of Lecture Notes in Computer Science, pages 225-255, 2017.
【文献】Toshinori ARAKI, et al、"Optimized Honest-Majority MPC for Malicious Adversaries - Breaking the 1 Billion-Gate Per Second Barrier"、In the IEEE S&P, 2017.
【発明の概要】
【発明が解決しようとする課題】
【0006】
なお、上記先行技術文献の各開示を、本書に引用をもって繰り込むものとする。以下の分析は、本発明者らによってなされたものである。
【0007】
ところで、秘密計算は、任意の演算を実行することが可能であるが、データが複数の秘密計算サーバに分散配置されているという特殊性から秘密計算に特有な処理が存在する。上記非特許文献3等に開示された型変換の1つである「ビット埋め込み」も秘密計算に特有な処理といえる。秘密計算において、特定のアプリケーションの実現にあたりビット埋め込みをサブルーチンとして実行することがある。
【0008】
例えば、「ビット結合」のような型変換では、ビット埋め込みを並列に実行することがある。そして、ビット埋め込みの並列度が増加すると、秘密計算サーバ間の通信量も増加してしまう。例えば、ビット埋め込みをk回並列に実行したとすると、通信量はO(k2)になり、並列度の増加に比べて通信量が顕著に増加してしまう。このことは、ビット埋め込みの並列度が大きい場合に、通信量に大きな影響を与えることになる。
【0009】
本発明の目的は、上述した課題を鑑み、効率的な処理に寄与する秘密計算システム、秘密計算サーバ装置、秘密計算方法および秘密計算プログラムを提供する。
【課題を解決するための手段】
【0010】
本発明の第1の視点によれば、相互にネットワークで接続した少なくとも3台以上の秘密計算サーバ装置を備える秘密計算システムであって、前記秘密計算サーバ装置のそれぞれが、前記秘密計算サーバ装置の間で疑似乱数生成器を共有する乱数生成部と、前記乱数生成部における乱数の生成に用いるシードを分散して記憶するシード記憶部と、前記乱数生成部が生成した乱数を記憶する事前生成乱数記憶部と、少なくとも処理対象となるシェアを記憶するシェア値記憶部と、前記乱数と前記処理対象となるシェアとを用いて、前記秘密計算サーバ装置の間で送受信するためのキャリーを少なくとも計算する論理演算部と、前記キャリーからマスクを除去する内積計算部と、前記キャリーを消去して処理結果を得る処理を少なくとも行う算術演算部と、を有する秘密計算システムが提供される。
【0011】
本発明の第2の視点によれば、相互にネットワークで接続した少なくとも3台以上の秘密計算サーバ装置の一つであって、前記秘密計算サーバ装置の間で疑似乱数生成器を共有する乱数生成部と、前記乱数生成部における乱数の生成に用いるシードを分散して記憶するシード記憶部と、前記乱数生成部が生成した乱数を記憶する事前生成乱数記憶部と、少なくとも処理対象となるシェアを記憶するシェア値記憶部と、前記乱数と前記処理対象となるシェアとを用いて、前記秘密計算サーバ装置の間で送受信するためのキャリーを少なくとも計算する論理演算部と、前記キャリーからマスクを除去する内積計算部と、前記キャリーを消去して処理結果を得る処理を少なくとも行う算術演算部と、を備える秘密計算サーバ装置が提供される。
【0012】
本発明の第3の視点は、相互にネットワークで接続した少なくとも3台以上の秘密計算サーバ装置を用いる秘密計算方法であって、前記秘密計算サーバ装置の間で共有した疑似乱数生成器を用いて乱数を生成し、前記乱数と処理対象となるシェアとを用いて、前記秘密計算サーバ装置の間で送受信するためのキャリーを計算し、内積計算を用いて前記キャリーからマスクを除去し、前記キャリーを消去して処理結果を得る、秘密計算方法が提供される。
【0013】
本発明の第4の視点は、相互にネットワークで接続した少なくとも3台以上の秘密計算サーバ装置に実行させる秘密計算プログラムであって、前記秘密計算サーバ装置の間で共有した疑似乱数生成器を用いて乱数を生成し、前記乱数と処理対象となるシェアとを用いて、前記秘密計算サーバ装置の間で送受信するためのキャリーを計算し、内積計算を用いて前記キャリーからマスクを除去し、前記キャリーを消去して処理結果を得る、秘密計算プログラムが提供される。
なお、このプログラムは、コンピュータが読み取り可能な記憶媒体に記録することができる。記憶媒体は、半導体メモリ、ハードディスク、磁気記録媒体、光記録媒体等の非トランジェント(non-transient)なものとすることができる。本発明は、コンピュータプログラム製品として具現することも可能である。
【発明の効果】
【0014】
本発明の各視点によれば、効率的な処理に寄与する秘密計算システム、秘密計算サーバ装置、秘密計算方法および秘密計算プログラムを提供することができる。
【図面の簡単な説明】
【0015】
【
図1】
図1は、本発明の第1の実施形態による秘密計算システムの機能構成例を示すブロック図である。
【
図2】
図2は、秘密計算サーバ装置の機能構成例を示すブロック図である。
【
図3】
図3は、ビット結合に関する動作例を示すフローチャートである。
【
図4】
図4は、本発明の第2の実施形態による秘密計算システムの機能構成例を示すブロック図である。
【
図5】
図5は、秘密計算サーバ装置の機能構成例を示すブロック図である。
【
図6】
図6は、ビット結合に関する動作例を示すフローチャートである。
【
図7】
図7は、本発明の第3の実施形態による秘密計算システムの機能構成例を示すブロック図である。
【
図8】
図8は、秘密計算サーバ装置の機能構成例を示すブロック図である。
【
図9】
図9は、ビット結合に関する動作例を示すフローチャートである。
【
図10】
図10は、秘密計算サーバ装置のハードウェア構成例を示す図である。
【発明を実施するための形態】
【0016】
以下、図面を参照しながら、本発明の実施形態について説明する。ただし、以下に説明する実施形態により本発明が限定されるものではない。さらに、図面は模式的なものであり、各要素の寸法の関係、各要素の比率などは、現実のものとは異なる場合があることに留意する必要がある。図面の相互間においても、互いの寸法の関係や比率が異なる部分が含まれている場合がある。
【0017】
[準備]
以下、実施形態の説明にあたり、記法の定義および処理要素の説明を行う。以下で説明する記法および演算要素は、各実施形態の説明の中で共通して用いられる。
【0018】
2を法とする剰余類環をZ2とし、2kを法とする剰余類環をZ2
kとする。なお、kは2以上の自然数である。また、インデックスi=1,2,3に対して秘密計算サーバをPiと表すことがある。また、XORは排他的論理和を意味する。
【0019】
算術演算のシェアを[x]:=x1+x2+x3 mod 2k (x,xi∈Z2
k)としたとき、以下のように各秘密計算サーバPiは分散データ[x]iを有する(i=1,2,3)。
P1:[x]1=(x1,x2)
P2:[x]2=(x2,x3)
P3:[x]3=(x3,x1)
【0020】
論理演算のシェアを[[x]]:=x1 XOR x2 XOR x3 mod 2 (x,xi∈Z2)としたとき、以下のように各秘密計算サーバPiは分散データ[[x]]iを有する(i=1,2,3)。
P1:[[x]]1=(x1,x2)
P2:[[x]]2=(x2,x3)
P3:[[x]]3=(x3,x1)
【0021】
〔Correlated Randomness〕
Correlated Randomness αi(i=1,2,3)は、以下のように生成する。
αi=H(ki,vid) XOR H(ki+1,vid)
ここで、暗号学的に安全な疑似乱数生成器Hは、セキュリティパラメータκに対し、H:{0,1}κ×{0,1}κ→{0,1}となるように定められた2項演算である。また、各αi(i=1,2,3)を生成するために用いるシードki(i=1,2,3)は、各秘密計算サーバPiが以下のように所有しており、vidはカウンタなどの公開された値である。
Pi:(ki,ki+1) ただし、k3+1=k1とする。
【0022】
このように生成されたαiは、乱数と見做すことができるが、以下の関係が成り立つ。
α1 XOR α2 XOR α3=0
なお、Correlated Randomnessの処理の呼び出しは、αi←CR(Pi,(ki,ki+1),vid)と表す。
【0023】
〔ランダムシェア〕
論理演算のランダムシェア[[r]](r=r1 XOR r2 XOR r3)は、以下のように生成する。
【0024】
まず、Correlated Randomnessの説明の中でも用いた、シードki(i=1,2,3)およびカウンタなどの公開された値vidを用いて、各ri=H(ki,vid)を生成する。そして、以下のように、この生成された各riを各秘密計算サーバPiが分散データ[[r]]iとして有する(i=1,2,3)。
P1:[[r]]1=(r1,r2)
P2:[[r]]2=(r2,r3)
P3:[[r]]3=(r3,r1)
なお、ランダムシェアの処理の呼び出しとしては、[[r]]←RandGen(Pi,(ki,ki+1),vid)と表す。
【0025】
〔ビット埋め込み〕
ビット埋め込みとは、論理演算向けのシェア[[x]]を入力として、算術演算向けのシェア[x]を出力する処理である。ビット埋め込みの処理の呼び出しとしては、[x]←BitInjection([[x]])と記載する。ビット埋め込みの具体的な処理は、例えば非特許文献2、非特許文献3、非特許文献4に記載の方法を用いることできるが、本発明の実施形態にあたり、その他の適切なビット埋め込みの処理を用いることが可能である。
【0026】
〔内積計算〕
内積計算とは、2つのベクトルx=(x1,...,xn),y=(y1,...,yn)に関する2つの算術演算シェアのベクトル([x1],...,[xn]),([y1],...,[yn])を入力として、[Σi=0
nxiyi]を出力する処理である。処理の呼び出しとしては、[Σi=0
nxiyi]←InnerProduct(([x1],...,[xn]),([y1],...,[yn]))と表す。内積計算の具体的な処理は、例えば非特許文献1や非特許文献4に記載の方法を用いることができるが、本発明の実施形態にあたり、その他の適切な内積計算の処理を用いることが可能である。
【0027】
〔算術シェア同士の減算〕
算術シェア同士の減算とは、2つの算術演算シェア[a],[b]を入力として、[a-b]を出力する処理である。算術シェア同士の減算の処理の呼び出しとしては、[a-b]←Sub([a],[b])と表す。算術シェア同士の減算の具体的な処理は、例えば非特許文献1や非特許文献4に記載の方法を用いることができるが、本発明の実施形態にあたり、その他の適切な算術シェア同士の減算の処理を用いることが可能である。
【0028】
〔再分散〕
再分散とは、論理演算シェア[[x]]を入力として、x=x1 XOR x2 XOR x3 mod2となる([x1],[x2],[x3])を出力する処理である。再分散の処理の呼び出しとしては、([x1],[x2],[x3])←LocalReshare([[x]])と表す。再分散の具体的な処理は、例えば非特許文献2に記載の方法を用いることできるが、本発明の実施形態にあたり、その他の適切な再分散の処理を用いることが可能である。
【0029】
〔算術演算に関する不正検知用乱数生成〕
算術演算に関する不正検知用乱数生成とは、[a],[b],[c]もしくは不正を検知したことを意味する⊥を出力する処理である。ここで、a,b,c∈Z2
kであり、c=abを満たすランダムな値とする。この処理はシェア同士の算術乗算に関する不正検知に用いる。処理の呼び出しとしては、([a],[b],[c])←A-TripleGenと表す。具体的な処理は、例えば非特許文献5、非特許文献6に記載の方法を用いることができるが、本発明の実施形態にあたり、その他の適切な算術演算に関する不正検知用乱数生成の処理を用いることが可能である。
【0030】
〔行列演算に関する不正検知用乱数生成〕
行列演算に関する不正検知用乱数生成とは、[A],[B],[C]もしくは不正を検知したことを意味する⊥を出力する処理である。ここで、A,B,Cは、C=ABを満たすZ2
k上の値を要素にもつランダムな行列である。この処理は行列積演算に関する不正検知に用いる。ここで、行列積には内積演算が含まれる。なお、処理の呼び出しとしては、([A],[B],[C])←M-TripleGenと表す。具体的な処理は、例えば非特許文献4に記載の方法を用いることできるが、その他の適切な行列演算に関する不正検知用乱数生成の処理を用いることが可能である。
【0031】
〔不正検知可能ビット埋め込み〕
不正検知可能ビット埋め込みとは、[[x]]、([aj],[bj],[cj])、および([a′j],[b′j],[c′j])を入力として、[x]もしくは不正を検知したことを意味する⊥を出力する処理である。なお、処理の呼び出しとしては、[x]←m-BitInjection([[x]],([aj],[bj],[cj]),([a′j],[b′j],[c′j]))と表す。具体的な処理は、例えば非特許文献2、非特許文献3、非特許文献4に記載の方法と非特許文献5、非特許文献6に記載の方法とを組み合わせることで実現できるが、その他の適切な不正検知可能ビット埋め込みの処理を用いることが可能である。
【0032】
〔不正検知可能内積計算〕
不正検知可能内積計算とは、2つのベクトルx=(x1,...,xn),y=(y1,...,yn)に関する2つの算術演算シェアのベクトル([x1],...,[xn]),([y1],...,[yn])と([A],[B],[C])とを入力として、[Σi=0
nxiyi]もしくは不正を検知したことを意味する⊥を出力する処理である。不正検知可能内積計算の処理の呼び出しとしては、m-InnerProduct(([x1],...,[xn]),([y1],...,[yn],([A],[B],[C]))と記載する。具体的な処理は、例えば非特許文献4に記載の方法を用いることできるが、その他の適切な不正検知可能内積計算の処理を用いることが可能である。
【0033】
[第1の実施形態]
以下、
図1、
図2、
図3を参照して、本発明の第1の実施形態に係る秘密計算システムおよび秘密計算方法について説明する。
【0034】
図1は、本発明の第1の実施形態による秘密計算システムの機能構成例を示すブロック図である。
図1に示すように、本発明の第1の実施形態による秘密計算システム100は、第1の秘密計算サーバ装置100_1と第2の秘密計算サーバ装置100_2と第3の秘密計算サーバ装置100_3とを備えている。第1の秘密計算サーバ装置100_1、第2の秘密計算サーバ装置100_2、および第3の秘密計算サーバ装置100_3は、それぞれが互いにネットワーク経由で通信可能に接続されている。
【0035】
図2は、秘密計算サーバ装置の機能構成例を示すブロック図である。
図2に示される秘密計算サーバ装置100_i(i=1,2,3)は、第1の秘密計算サーバ装置100_1、第2の秘密計算サーバ装置100_2、および第3の秘密計算サーバ装置100_3を代表して例示した機能構成例である。
【0036】
図2に示すように、秘密計算サーバ装置100_iは、算術演算部101_iと、論理演算部102_iと、内積計算部103_iと、乱数生成部104_iと、シード記憶部105_iと、シェア値記憶部106_iと、事前生成乱数記憶部107_iと、を含む。これら算術演算部101_i、論理演算部102_i、内積計算部103_i、乱数生成部104_i、シード記憶部105_i、シェア値記憶部106_i、および事前生成乱数記憶部107_iは、後に例示するハードウェア構成によって、メモリに記憶されたプログラムをプロセッサが実行することによって実現することも可能である。
【0037】
上記構成の第1~第3の秘密計算サーバ装置100_i(i=1,2,3)を備える秘密計算システム100においては、第1~第3の秘密計算サーバ装置100_i(i=1、2、3)の内のいずれかの秘密計算サーバ装置100_iが入力した値x0,...,xk-1(x=Σj=0
k-1 2jxj,xj∈Z2)に対し、その入力や計算過程の値からx0,...,xk-1(x=Σj=0
k-1 2jxj,xj∈Z2)の値を知られることなくシェア[x]を計算し、これを第1~第3の秘密計算サーバ装置100_i(i=1,2,3)における各シェア値記憶部106_iに記憶する。
【0038】
また、上記構成の第1~第3の秘密計算サーバ装置100_i(i=1,2,3)を備える秘密計算システム100においては、第1~第3の秘密計算サーバ装置100_i(i=1,2,3)における各シェア値記憶部106_iに記憶されたシェア[[x0]],...,[[xk-1]](x=Σj=0
k-1 2ixj,xj∈Z2)に対し、その計算過程の値からx0,...,xk-1(x=Σj=0
k-1 2ixj,xj∈Z2)の値を知られることなくシェア[x]を計算し、これを第1~第3の秘密計算サーバ装置100_i(i=1,2,3)における各シェア値記憶部106_iに記憶する。
【0039】
また、上記構成の第1~第3の秘密計算サーバ装置100_i(i=1,2,3)を備える秘密計算システム100においては、第1~第3の秘密計算サーバ装置100_i(i=1、2、3)以外から入力されたシェア[[x0]],...,[[xk-1]](x=Σj=0
k-1 2jxj,xj∈Z2)に対し、その計算過程の値からx0,...,xk-1(x=Σj=0
k-1 2jxj,xj∈Z2)の値を知られることなくシェア[x]を計算し、これを第1~第3の秘密計算サーバ装置100_i(i=1,2,3)における各シェア値記憶部106_iに記憶する。
【0040】
なお、上記計算結果のシェアは、第1~第3の秘密計算サーバ装置100_1~100_3とシェアを送受信することで、復元してもよい。あるいは、第1~第3の秘密計算サーバ装置100_1~100_3ではない外部にシェアを送信することで、復元してもよい。
【0041】
次に、本発明の第1の実施形態における秘密計算方法について詳細に説明を行う。すなわち、上記説明した第1~第3の秘密計算サーバ装置100_i(i=1,2,3)を備える秘密計算システム100の動作について説明する。
図3は、ビット結合に関する動作例を示すフローチャートである。以下、各ステップを説明する。
【0042】
(ステップA1)
秘密計算システム100は、第1~第3の秘密計算サーバ装置100_i(i=1,2,3)の各シード記憶部105_iにそれぞれシード(ki,ki+1)を記憶する。なお、第1~第3の秘密計算サーバ装置100_i(i=1,2,3)は、乱数生成部104_iに疑似乱数生成器Hを共有している。
【0043】
(ステップA4)
次に、秘密計算システム100は、論理演算の乱数を生成する。秘密計算サーバ装置100_iをPiと表せば、各秘密計算サーバ装置100_iは、処理(rj,i,rj,i+1)←RandGen(Pi,(ki,ki+1),vid)を実行する(i=1,2,3かつj=0,...,k-1)。rj=rj,i XORrj,i XOR rj,i mod 2としたとき、各秘密計算サーバ装置100_i(i=1,2,3)は、[[rj]]iを事前生成乱数記憶部107_iに記憶する。
【0044】
(ステップA5)
さらに、秘密計算システム100は、算術演算の乱数を生成する。第1~第3の秘密計算サーバ装置100_i(i=1,2,3)における各算術演算部101_iは、事前生成乱数記憶部107_iに記憶されている[[rj]]iを用いて、ビット埋め込みの処理[rj]←BitInjection([[rj]])を実行する(j=0,...,k-1)。そして、第1~第3の秘密計算サーバ装置100_i(i=1,2,3)は、計算された乱数のシェア[rj]iを事前生成乱数記憶部107_iに記憶する。
【0045】
(ステップA6)
ここで、秘密計算システム100は、各シェア値記憶部106_iに記憶されているビット結合の対象となるシェア[[x0]]i,...,[[xk-1]]i(x=Σj=0
k-1 2jxj,xj∈Z2)を初めて処理に用いる。すなわち、本発明の第1の実施形態における秘密計算方法では、ステップA1からステップA5までの処理において、ビット結合の対象を用いる必要がない。本発明の第1の実施形態における秘密計算方法では、第1~第3の秘密計算サーバ装置100_i(i=1,2,3)の各シェア値記憶部106_iには、ビット結合の対象となるシェア[[x0]]i,...,[[xk-1]]i(x=Σj=0
k-1 2jxj,xj∈Z2)が既に記憶されているとしてもよいし、ステップA6にて、ビット結合の対象となる入力を受け付けるとしてもよい。
【0046】
秘密計算システム100は、キャリーの復元を行う。具体的には、第1~第3の秘密計算サーバ装置100_i(i=1,2,3)の各論理演算部102_iは、ビット結合の対象となるシェア[[x0]]i,...,[[xk-1]]i(x=Σj=0
k-1 2jxj,xj∈Z2)と論理演算の乱数のシェア[[r0]]i,...,[[rk-1]]iを用いて、以下のようにキャリーCj,iを計算する。
αi←CR(Pi,(ki,ki+1),vidj,α) (for j=0,...,k-1)
Cj,i=αj,i XOR rj,i XOR (xj,i xj,i+1) (for j=0,...,k-1)
【0047】
次に、第3の秘密計算サーバ装置100_3の論理演算部102_3は、第1の秘密計算サーバ装置100_1の論理演算部102_1と第2の秘密計算サーバ装置100_2の論理演算部102_2とに、Cj,3 (j=0,...,k-1)を送信する。一方、第1の秘密計算サーバ装置100_1の論理演算部102_1は、第2の秘密計算サーバ装置100_2の論理演算部102_2にCj,2 (j=0,...,k-1)を送信し、第2の秘密計算サーバ装置100_2の論理演算部102_2は、第1の秘密計算サーバ装置100_1の論理演算部102_1にCj,1 (j=0,...,k-1)を送信する。
【0048】
そして、第1の秘密計算サーバ装置100_1の論理演算部102_1および第2の秘密計算サーバ装置100_2の論理演算部102_2は、以下のようにしてCj XOR rj(j=0,...,k-1)を計算する。
Cj XOR rj=Cj,1 XOR Cj,2 XOR Cj,3 mod 2
【0049】
計算後、第1の秘密計算サーバ装置100_1の論理演算部102_1および第2の秘密計算サーバ装置100_2の論理演算部102_2は、各Cjをそれぞれ、第1の秘密計算サーバ装置100_1の算術演算部101_1および第2の秘密計算サーバ装置100_2の算術演算部101_2に送信する。そして、各算術演算部101_iは、以下のように[Cj XOR rj]を得る。
P1:[Cj XOR rj]1=(0,Cj)
P2:[Cj XOR rj]2=(Cj,0)
P3:[Cj XOR rj]3=(0,0)
【0050】
さらに、各算術演算部101_iは、[Cj XOR rj] (j=0,...,k-1)をそれぞれシェア値記憶部106_iに送信し、シェア値記憶部106_iは、[Cj XOR rj] (j=0,...,k-1)を記憶する。
【0051】
(ステップA8)
秘密計算システム100は、キャリーと乱数の減算を行う。具体的には、第1~第3の秘密計算サーバ装置100_i(i=1,2,3)における算術演算部101_iは、以下のように、[Cj XOR rj]と[rj] (j=0,...,k-1)を用いて、[(Cj XOR rj)-rj] (j=0,...,k-1)を計算する。
[(Cj XOR rj)-rj]←Sub([Cj XOR rj],[rj])
【0052】
計算後、各算術演算部101_iは、[(Cj XOR rj)-rj] (j=0,...,k-1)をそれぞれのシェア値記憶部106_iに送信し、シェア値記憶部106_iは、[(Cj XOR rj)-rj] (j=0,...,k-1)を記憶する。
【0053】
(ステップA9)
秘密計算システム100は、内積を用いたキャリーのマスクを取り除く計算を行う。具体的には、第1~第3の秘密計算サーバ装置100_i(i=1,2,3)における内積計算部103_iは、[(Cj XOR rj)-rj] (j=0,...,k-1)を用いて、以下のような計算を行う。ここで、[y]=[Σj=0
k-1 2j(-2)cj]とする。
【0054】
【0055】
計算後、各内積計算部103_iは、[y]iをシェア値記憶部106_iに送信し、シェア値記憶部106_iは、[y]iを記憶する。
【0056】
(ステップA10)
秘密計算システム100は、再分散を行う。具体的には、第1~第3の秘密計算サーバ装置100_i(i=1,2,3)における算術演算部101_iは、[[x0]]i,...,[[xk-1]]i(x=Σj=0
k-1 2jxj,xj∈Z2,xj=xj,1 XOR xj,2 XOR xj,3 mod 2)を用いて、以下の計算をする。
([xj,1],[xj,2],[xj,3])←LocalReshare([[xj]]) (for j=0,...,k-1)
【0057】
(ステップA11)
秘密計算システム100は、キャリーの消去を行う。具体的には、第1~第3の秘密計算サーバ装置100_i(i=1,2,3)の算術演算部101_iは、再分散された算術シェアと([xj,1],[xj,2],[xj,3])(j=0,...,k-1)と[y]iを用いて、以下の計算を行う。
【0058】
【0059】
計算後、各算術演算部101_iは、[x]iをシェア値記憶部106_iに送信し、シェア値記憶部106_iは、[x]iを記憶する。これにより、第1~第3の秘密計算サーバ装置100_i(i=1,2,3)は、ビット結合の対象となるシェア[[x0]]i,...,[[xk-1]]i(x=Σj=0
k-1 2jxj,xj∈Z2)からビット結合後の[x]iを得ることができる。
【0060】
以上説明した本発明の第1の実施形態においては、以下のような効果を奏する。
【0061】
本発明の第1の実施形態においては、ビット結合のような、ビット埋め込みが並列実行される際の効率が良くなる。上記説明したように、本発明の第1の実施形態においては、ステップA1~A5までは入力と独立して実行可能であるので、実際に入力を伴って計算するのは、ステップA6~A11のみである。そして、ステップA6~A11における通信量はO(k)で抑えられる。先述したように、ビット埋め込みをk回並列に実行したとすると、通信量はO(k2)になるので、入力がされた後の通信量で比較すると、本発明の第1の実施形態は、通信量がオーダーで改善している。つまり、本発明の第1の実施形態は顕著に効率がよい。
【0062】
なお、本発明の第1の実施形態は、ビット結合に限らず、法の変換を伴う型変換に適用することができる。なお、ここでいう「法」とは、先述した2を法とする剰余類環をZ2とし、2kを法とする剰余類環をZ2
kとした場合の法のことである。したがって、本発明の第1の実施形態をPopCount(値が1であるビットの個数をカウントする処理)にも適用可能である。
【0063】
具体的には、上記ステップA9における処理とステップA11における処理をそれぞれ以下のように変更することで、本発明の第1の実施形態をPopCountにも適用可能である。
【0064】
(ステップA9)
【数3】
(ステップA11)
【数4】
【0065】
また、本発明の第1の実施形態のステップA9における処理とステップA11における処理をそれぞれ上記のように変更しても、ステップA6~A11における通信量はO(k)で抑えられる。
【0066】
[第2の実施形態]
以下、
図4、
図5、
図6を参照して、本発明の第2の実施形態に係る秘密計算システムおよび秘密計算方法について説明する。
【0067】
図4は、本発明の第2の実施形態による秘密計算システムの機能構成例を示すブロック図である。
図4に示すように、本発明の第2の実施形態による秘密計算システム200は、第1の秘密計算サーバ装置200_1と第2の秘密計算サーバ装置200_2と第3の秘密計算サーバ装置200_3と補助サーバ装置208とを備えている。第1の秘密計算サーバ装置100_1、第2の秘密計算サーバ装置200_2、第3の秘密計算サーバ装置200_3、および補助サーバ装置208は、それぞれが互いにネットワーク経由で通信可能に接続されている。
【0068】
図5は、秘密計算サーバ装置の機能構成例を示すブロック図である。
図5に示される秘密計算サーバ装置200_i(i=1,2,3)は、第1の秘密計算サーバ装置200_1、第2の秘密計算サーバ装置200_2、および第3の秘密計算サーバ装置200_3を代表して例示した機能構成例である。
【0069】
図5に示すように、秘密計算サーバ装置200_iは、算術演算部201_iと、論理演算部202_iと、内積計算部203_iと、乱数生成部204_iと、シード記憶部205_iと、シェア値記憶部206_iと、事前生成乱数記憶部207_iと、を含む。これら算術演算部201_i、論理演算部202_i、内積計算部203_i、乱数生成部204_i、シード記憶部205_i、シェア値記憶部206_i、および事前生成乱数記憶部207_iは、後に例示するハードウェア構成によって、メモリに記憶されたプログラムをプロセッサが実行することによって実現することも可能である。
【0070】
上記構成の第1~第3の秘密計算サーバ装置200_i(i=1,2,3)を備える秘密計算システム200においては、第1~第3の秘密計算サーバ装置200_i(i=1、2、3)の内のいずれかの秘密計算サーバ装置200_iが入力した値x0,...,xk-1(x=Σj=0
k-1 2jxj,xj∈Z2)に対し、その入力や計算過程の値からx0,...,xk-1(x=Σj=0
k-1 2jxj,xj∈Z2)の値を知られることなくシェア[x]を計算し、これを第1~第3の秘密計算サーバ装置200_i(i=1,2,3)における各シェア値記憶部206_iに記憶する。
【0071】
また、上記構成の第1~第3の秘密計算サーバ装置200_i(i=1,2,3)を備える秘密計算システム200においては、第1~第3の秘密計算サーバ装置200_i(i=1,2,3)における各シェア値記憶部206_iに記憶されたシェア[[x0]],...,[[xk-1]](x=Σj=0
k-1 2ixj,xj∈Z2)に対し、その計算過程の値からx0,...,xk-1(x=Σj=0
k-1 2ixj,xj∈Z2)の値を知られることなくシェア[x]を計算し、これを第1~第3の秘密計算サーバ装置200_i(i=1,2,3)における各シェア値記憶部206_iに記憶する。
【0072】
また、上記構成の第1~第3の秘密計算サーバ装置200_i(i=1,2,3)を備える秘密計算システム200においては、第1~第3の秘密計算サーバ装置200_i(i=1、2、3)以外から入力されたシェア[[x0]],...,[[xk-1]](x=Σj=0
k-1 2jxj,xj∈Z2)に対し、その計算過程の値からx0,...,xk-1(x=Σj=0
k-1 2jxj,xj∈Z2)の値を知られることなくシェア[x]を計算し、これを第1~第3の秘密計算サーバ装置200_i(i=1,2,3)における各シェア値記憶部206_iに記憶する。
【0073】
なお、上記計算結果のシェアは、第1~第3の秘密計算サーバ装置200_1~200_3とシェアを送受信することで、復元してもよい。あるいは、第1~第3の秘密計算サーバ装置200_1~200_3ではない外部にシェアを送信することで、復元してもよい。
【0074】
次に、本発明の第2の実施形態における秘密計算方法について詳細に説明を行う。すなわち、上記説明した第1~第3の秘密計算サーバ装置200_i(i=1,2,3)と補助サーバ装置208とを備える秘密計算システム200の動作について説明する。
図6は、ビット結合に関する動作例を示すフローチャートである。以下、各ステップを説明する。
【0075】
(ステップB1)
秘密計算システム200は、先述したステップA1と同じ処理を行う。すなわち、第1~第3の秘密計算サーバ装置200_i(i=1,2,3)の各シード記憶部205_iにそれぞれシード(ki,ki+1)を記憶する。なお、第1~第3の秘密計算サーバ装置200_i(i=1,2,3)は、乱数生成部204_iに疑似乱数生成器Hを共有している。
【0076】
(ステップB2)
次に、秘密計算システム200は、不正検知用乱数を生成する。具体的には、第1~第3の秘密計算サーバ装置200_i(i=1,2,3)における各乱数生成部204_iは、以下のように算術演算および行列演算に関する不正検知用乱数の生成を行う。
([aj],[bj],[cj])←A-TripleGen (for j=0,...,k-1)
([a′j],[b′j],[c′j])←A-TripleGen (for j=0,...,k-1)
([Aj],[Bj],[Cj])←M-TripleGen (for j=0,...,k-1)
【0077】
なお、不正検知用乱数を生成する過程で不正が検知された場合(ステップB2;⊥)、⊥が出力され、abortとなる。その後、各乱数生成部204_iは、事前生成乱数記憶部207_iに([aj],[bj],[cj])、([a′j],[b′j],[c′j])、および([Aj],[Bj],[Cj])を記憶する。なお、abortとは、異常を検出したとの判断から処理を停止することである。
【0078】
(ステップB4)
秘密計算システム200は、先述したステップA4と同じ処理を用いて、論理演算の乱数の生成を行う。すなわち、第1~第3の秘密計算サーバ装置200_i(i=1,2,3)は、論理演算の乱数[[rj]]iを生成し、[[rj]]iを事前生成乱数記憶部207_iに記憶する。
【0079】
(ステップB5)
次に、秘密計算システム200は、算術演算の乱数の生成を行う。具体的には、第1~第3の秘密計算サーバ装置200_i(i=1,2,3)における算術演算部201_iは、[[rj]]i、([aj],[bj],[cj])、および([a′j],[b′j],[c′j])を用いて、以下の処理を行う。
[rj]←m-BitInjection([[rj]],([aj],[bj],[cj]),([a′j],[b′j],[c′j])) (for j=0,...,k-1)
【0080】
なお、上記処理の過程で不正が検知された場合(ステップB5;⊥)、⊥が出力され、abortとなる。その後、各算術演算部201_iは、事前生成乱数記憶部207_iに[rj] iを記憶する。
【0081】
(ステップB6)
秘密計算システム200は、先述したステップA6と同じ処理を用いて、キャリーの復元を行う。なお、本発明の第2の実施形態の秘密計算方法においても、秘密計算システム200は、各シェア値記憶部206_iに記憶されているビット結合の対象となるシェア[[x0]]i,...,[[xk-1]]i(x=Σj=0
k-1 2jxj,xj∈Z2)をステップB6にて初めて処理に用いる。
【0082】
(ステップB7)
次に、秘密計算システム200は、ステップB6にて送信されたキャリーCj,i(i=1,2,3)に不正がないか検証する。
【0083】
最初に論理演算部202_1が受信したキャリーCj,3の検証を説明する。まず、論理演算部202_1は、受信したキャリーCj,3を乱数でマスクした値と、他の値を補助サーバ装置208に送信する。そして、補助サーバ装置208は、論理演算部202_1と論理演算部202_2から送信された値を用いることで論理演算部202_1および論理演算部202_2が受信したCj,3の値に改ざんがないかを判定する。後述の検証式(*)が成立するのであれば、以降の処理を継続する。成立しなかった場合(ステップB7;⊥)、⊥を出力し、abortする。
【0084】
続いて、論理演算部202_1は、以下を計算する。計算後、論理演算部202_1はm′j、mj,1,1、mj,1,2を補助サーバ装置208に送信する。
【0085】
【0086】
一方、論理演算部202_2は、以下を計算する。計算後、論理演算部202_2はmj,2,1、mj,2,2を補助サーバ装置208に送信する。
【0087】
【0088】
補助サーバ装置208は、以下の等式が成り立つか否かを判定する。等式が成り立つ場合、処理を継続し、不成立である場合(ステップB7;⊥)、⊥を出力し、abortする。
【0089】
【0090】
なお、Cj,1およびCj,2および論理演算部202_2が受信したキャリーCj,3の検証についても同様に行う。
【0091】
(ステップB8)
秘密計算システム200は、先述したステップA8と同じ処理を用いて、キャリーと乱数の減算を行う。
【0092】
(ステップB9)
次に、秘密計算システム200は、内積を用いたキャリーのマスクを取り除く計算を行う。具体的には、第1~第3の秘密計算サーバ装置200_i(i=1,2,3)における内積計算部203_iは、[(Cj XOR rj)-rj] (j=0,...,k-1)を用いて、以下のような計算を行う。ここで、[y]=[Σj=0
k-1 2j(-2)cj]とする。なお、ここでは不正検知可能内積計算を行い、不正が検知された場合(ステップB9;⊥)、⊥を出力し、abortする。
【0093】
【0094】
計算後、各内積計算部203_iは、[y]iをシェア値記憶部206_iに送信し、シェア値記憶部206_iは、[y]iを記憶する。
【0095】
(ステップB10)
秘密計算システム200は、先述したステップA10と同じ処理を用いて、再分散を行う。
【0096】
(ステップB11)
秘密計算システム200は、先述したステップA11と同じ処理を用いて、キャリーの消去を行う。これにより、第1~第3の秘密計算サーバ装置200_i(i=1,2,3)は、ビット結合の対象となるシェア[[x0]]i,...,[[xk-1]]i(x=Σj=0
k-1 2jxj,xj∈Z2)からビット結合後の[x]iを得ることができる。
【0097】
以上説明した本発明の第2の実施形態においては、以下のような効果を奏する。
【0098】
本発明の第2の実施形態においては、不正検知可能なビット結合のような、不正検知可能なビット埋め込みが並列実行される際の効率が良くなる。上記説明したように、本発明の第2の実施形態においては、ステップB1~B5までは入力と独立して実行可能であるので、実際に入力を伴って計算するのは、ステップB6~B11のみである。そして、ステップB6~B11における通信量はO(k)で抑えられる。先述したように、ビット埋め込みをk回並列に実行したとすると、通信量はO(k2)になるので、入力がされた後の通信量で比較すると、本発明の第2の実施形態は、通信量がオーダーで改善している。つまり、本発明の第2の実施形態は、不正検知可能でありつつ、顕著に効率がよい。
【0099】
なお、本発明の第2の実施形態は、不正検知可能なビット結合に限らず、不正検知可能なPopCount(値が1であるビットの個数をカウントする)といった処理にも適用することができる。その場合、上記ステップB9における処理とステップB11における処理を第1の実施形態の場合と同様に修正すればよい。
【0100】
[第3の実施形態]
以下、
図7、
図8、
図9を参照して、本発明の第3の実施形態に係る秘密計算システムおよび秘密計算方法について説明する。
【0101】
図7は、本発明の第3の実施形態による秘密計算システムの機能構成例を示すブロック図である。
図7に示すように、本発明の第3の実施形態による秘密計算システム300は、第1の秘密計算サーバ装置300_1と第2の秘密計算サーバ装置300_2と第3の秘密計算サーバ装置300_3と第1の補助サーバ装置308_1と第2の補助サーバ装置308_2とを備えている。第1の秘密計算サーバ装置300_1、第2の秘密計算サーバ装置300_2、第3の秘密計算サーバ装置300_3、第1の補助サーバ装置308_1、および第2の補助サーバ装置308_2は、それぞれが互いにネットワーク経由で通信可能に接続されている。
【0102】
図8は、秘密計算サーバ装置の機能構成例を示すブロック図である。
図8に示される秘密計算サーバ装置300_i(i=1,2,3)は、第1の秘密計算サーバ装置300_1、第2の秘密計算サーバ装置300_2、および第3の秘密計算サーバ装置300_3を代表して例示した機能構成例である。
【0103】
図8に示すように、秘密計算サーバ装置300_iは、算術演算部301_iと、論理演算部302_iと、内積計算部303_iと、乱数生成部304_iと、シード記憶部305_iと、シェア値記憶部306_iと、事前生成乱数記憶部307_iと、を含む。これら算術演算部301_i、論理演算部302_i、内積計算部303_i、乱数生成部304_i、シード記憶部305_i、シェア値記憶部306_i、および事前生成乱数記憶部307_iは、後に例示するハードウェア構成によって、メモリに記憶されたプログラムをプロセッサが実行することによって実現することも可能である。
【0104】
上記構成の第1~第3の秘密計算サーバ装置300_i(i=1,2,3)を備える秘密計算システム300においては、第1~第3の秘密計算サーバ装置300_i(i=1、2、3)の内のいずれかの秘密計算サーバ装置300_iが入力した値x0,...,xk-1(x=Σj=0
k-1 2jxj,xj∈Z2)に対し、その入力や計算過程の値からx0,...,xk-1(x=Σj=0
k-1 2jxj,xj∈Z2)の値を知られることなくシェア[x]を計算し、これを第1~第3の秘密計算サーバ装置300_i(i=1,2,3)における各シェア値記憶部306_iに記憶する。
【0105】
また、上記構成の第1~第3の秘密計算サーバ装置300_i(i=1,2,3)を備える秘密計算システム300においては、第1~第3の秘密計算サーバ装置300_i(i=1,2,3)における各シェア値記憶部306_iに記憶されたシェア[[x0]],...,[[xk-1]](x=Σj=0
k-1 2ixj,xj∈Z2)に対し、その計算過程の値からx0,...,xk-1(x=Σj=0
k-1 2ixj,xj∈Z2)の値を知られることなくシェア[x]を計算し、これを第1~第3の秘密計算サーバ装置300_i(i=1,2,3)における各シェア値記憶部306_iに記憶する。
【0106】
また、上記構成の第1~第3の秘密計算サーバ装置300_i(i=1,2,3)を備える秘密計算システム300においては、第1~第3の秘密計算サーバ装置300_i(i=1、2、3)以外から入力されたシェア[[x0]],...,[[xk-1]](x=Σj=0
k-1 2jxj,xj∈Z2)に対し、その計算過程の値からx0,...,xk-1(x=Σj=0
k-1 2jxj,xj∈Z2)の値を知られることなくシェア[x]を計算し、これを第1~第3の秘密計算サーバ装置300_i(i=1,2,3)における各シェア値記憶部306_iに記憶する。
【0107】
なお、上記計算結果のシェアは、第1~第3の秘密計算サーバ装置300_1~300_3とシェアを送受信することで、復元してもよい。あるいは、第1~第3の秘密計算サーバ装置300_1~300_3ではない外部にシェアを送信することで、復元してもよい。
【0108】
次に、本発明の第3の実施形態における秘密計算方法について詳細に説明を行う。すなわち、上記説明した第1~第3の秘密計算サーバ装置300_i(i=1,2,3)と第1の補助サーバ装置308_1と第2の補助サーバ装置308_2とを備える秘密計算システム300の動作について説明する。
図9は、ビット結合に関する動作例を示すフローチャートである。以下、各ステップを説明する。
【0109】
(ステップC1)
秘密計算システム300における秘密計算サーバ装置300_1~300_3は、ステップA1と等しい動作を行う。その上で、第1の補助サーバ装置308_1と第2の補助サーバ装置308_2は、シードseed′と疑似乱数生成器Hを共有する。
【0110】
(ステップC2)
次に、第1の補助サーバ装置308_1と第2の補助サーバ装置308_2は、共有したシードseed′と疑似乱数生成器Hを用いて、乱数a,b∈Z2
kを生成する。さらに、第1の補助サーバ装置308_1と第2の補助サーバ装置308_2は、共有したシードseed′と疑似乱数生成器Hを用いて、([a],[b],[ab])を生成し、第1~第3の秘密計算サーバ装置300_1~300_3に分散する。
【0111】
(ステップC3)
第1~第3の秘密計算サーバ装置300_1~300_3は、ステップC2にて、第1の補助サーバ装置308_1と第2の補助サーバ装置308_2のそれぞれから受信した値が一致しているか否かを判定する。一致していた場合は、以降の処理を継続し、不一致だった場合(ステップC3;⊥)、⊥を出力し、abortする。
【0112】
以降、ステップC4~C11では、秘密計算システム300は、先述したステップB4~B11と同等の処理を行う。すなわち、秘密計算システム300は、ステップC4で論理演算の乱数の生成を行い、ステップC5で算術演算の乱数の生成を行い、ステップC6でキャリーの復元を行い、ステップC7でキャリーに不正がないか検証し、ステップC8でキャリーと乱数の減算を行い、ステップC9で内積を用いたキャリーのマスクを取り除く計算を行い、ステップC10で再分散を行い、ステップC11でキャリーの消去を行う。これにより、第1~第3の秘密計算サーバ装置300_i(i=1,2,3)は、ビット結合の対象となるシェア[[x0]]i,...,[[xk-1]]i(x=Σj=0
k-1 2jxj,xj∈Z2)からビット結合後の[x]iを得ることができる。
【0113】
なお、本発明の第3の実施形態における秘密計算方法においても、秘密計算システム300は、各シェア値記憶部306_iに記憶されているビット結合の対象となるシェア[[x0]]i,...,[[xk-1]]i(x=Σj=0
k-1 2jxj,xj∈Z2)をステップC6にて初めて処理に用いる。
【0114】
以上説明した本発明の第3の実施形態においては、以下のような効果を奏する。
【0115】
本発明の第3の実施形態においては、不正検知可能なビット結合のような、不正検知可能なビット埋め込みが並列実行される際の効率が良くなる。上記説明したように、本発明の第2の実施形態においては、ステップB1~B5までは入力と独立して実行可能であるので、実際に入力を伴って計算するのは、ステップB6~B11のみである。そして、ステップB6~B11における通信量はO(k)で抑えられる。先述したように、ビット埋め込みをk回並列に実行したとすると、通信量はO(k2)になるので、入力がされた後の通信量で比較すると、本発明の第2の実施形態は、通信量がオーダーで改善している。つまり、本発明の第2の実施形態は、不正検知可能でありつつ、顕著に効率がよい。
【0116】
ただし、本発明の第3の実施形態においては、第2の実施形態とは異なり、決定的な不正検知が可能となる。第2の実施形態における第1の効果では、確率的な不正検知しか行えなかった。このため、不正検知の確率を向上させようとすると、通信量が増加してしまう問題があった。一方で、第3の実施形態では、不正検知は決定的に行われる。
【0117】
なお、本発明の第3の実施形態は、不正検知可能なビット結合に限らず、不正検知可能なPopCount(値が1であるビットの個数をカウントする)といった処理にも適用することができる。その場合、上記ステップC9における処理とステップC11における処理を第1の実施形態の場合と同様に修正すればよい。本発明の第3の実施形態を適用したPopCountでも、ビット結合と同様に、決定的な不正検知が可能となる。
【0118】
[ハードウェア構成例]
図10は、秘密計算サーバ装置のハードウェア構成例を示す図である。すなわち、
図10に示すハードウェア構成例は、秘密計算サーバ装置100_i,200_i,300_i(i=1,2,3)のハードウェア構成例である。
図10に示すハードウェア構成を採用した情報処理装置(コンピュータ)は、上記説明した秘密計算方法をプログラムとして実行することで、秘密計算サーバ装置100_i,200_i,300_iの各機能を実現することを可能にする。
【0119】
ただし、
図10に示すハードウェア構成例は、秘密計算サーバ装置100_i,200_i,300_i(i=1,2,3)の各機能を実現するハードウェア構成の一例であり、秘密計算サーバ装置100_i,200_i,300_i(i=1,2,3)のハードウェア構成を限定する趣旨ではない。秘密計算サーバ装置100_i,200_i,300_i(i=1,2,3)は、
図10に示さないハードウェアを含むことができる。
【0120】
図10に示すように、秘密計算サーバ装置100_i,200_i,300_i(i=1,2,3)が採用し得るハードウェア構成10は、例えば内部バスにより相互に接続される、CPU(Central Processing Unit)11、主記憶装置12、補助記憶装置13、およびIF(Interface)部14を備える。
【0121】
CPU11は、秘密計算サーバ装置100_i,200_i,300_i(i=1,2,3)が実行する秘密計算プログラムに含まれる各指令を実行する。主記憶装置12は、例えばRAM(Random Access Memory)であり、秘密計算サーバ装置100_i,200_i,300_i(i=1,2,3)が実行する秘密計算プログラムなどの各種プログラムなどをCPU11が処理するために一時記憶する。
【0122】
補助記憶装置13は、例えば、HDD(Hard Disk Drive)であり、秘密計算サーバ装置100_i,200_i,300_i(i=1,2,3)が実行する秘密計算プログラムなどの各種プログラムなどを中長期的に記憶しておくことが可能である。秘密計算プログラムなどの各種プログラムは、非一時的なコンピュータ可読記録媒体(non-transitory computer-readable storage medium)に記録されたプログラム製品として提供することができる。補助記憶装置13は、非一時的なコンピュータ可読記録媒体に記録された秘密計算プログラムなどの各種プログラムを中長期的に記憶することに利用することが可能である。
【0123】
IF部14は、秘密計算サーバ装置100_i,200_i,300_i(i=1,2,3)間の入出力に関するインターフェイスを提供する。また、補助サーバ装置208,308_1,308_2との間における入出力に関するインターフェイスとして用いてもよい。
【0124】
上記のようなハードウェア構成10を採用した情報処理装置は、先述した秘密計算方法をプログラムとして実行することで、秘密計算サーバ装置100_i,200_i,300_i(i=1,2,3)の各機能を実現する。
【0125】
上記の実施形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限られない。
[付記1]
相互にネットワークで接続した少なくとも3台以上の秘密計算サーバ装置を備える秘密計算システムであって、
前記秘密計算サーバ装置のそれぞれが、
前記秘密計算サーバ装置の間で疑似乱数生成器を共有する乱数生成部と、
前記乱数生成部における乱数の生成に用いるシードを分散して記憶するシード記憶部と、
前記乱数生成部が生成した乱数を記憶する事前生成乱数記憶部と、
少なくとも処理対象となるシェアを記憶するシェア値記憶部と、
前記乱数と前記処理対象となるシェアとを用いて、前記秘密計算サーバ装置の間で送受信するためのキャリーを少なくとも計算する論理演算部と、
前記キャリーからマスクを除去する内積計算部と、
前記キャリーを消去して処理結果を得る処理を少なくとも行う算術演算部と、
を有する、秘密計算システム。
[付記2]
前記乱数は、論理演算の乱数と算術演算の乱数とを含む、付記1に記載の秘密計算システム。
[付記3]
前記算術演算の乱数は、前記論理演算の乱数にビット埋め込みの処理をすることで得られる、付記2に記載の秘密計算システム。
[付記4]
前記処理対象となるシェアから前記処理結果へは、法の変換を伴う型変換になっている、付記1から付記3のいずれか1に記載の秘密計算システム。
[付記5]
前記処理対象となるシェアから前記処理結果へは、前記処理対象となるシェアに含まれるビットを結合するビット結合の処理である付記4に記載の秘密計算システム。
[付記6]
前記処理対象となるシェアから前記処理結果へは、前記処理対象となるシェアから値が1であるビットの個数をカウントする処理である付記4に記載の秘密計算システム。
[付記7]
前記秘密計算サーバ装置と相互にネットワークで接続した、前記キャリーを用いて不正検知を行う補助サーバ装置を備える、付記1から付記6のいずれか1に記載の秘密計算システム。
[付記8]
前記秘密計算サーバ装置と相互にネットワークで接続し、不正検知用の乱数を生成するためのシードと疑似乱数生成器を共有する2つの補助サーバ装置を備える、付記1から7のいずれか1に記載の秘密計算システム。
[付記9]
相互にネットワークで接続した少なくとも3台以上の秘密計算サーバ装置の一つであって、
前記秘密計算サーバ装置の間で疑似乱数生成器を共有する乱数生成部と、
前記乱数生成部における乱数の生成に用いるシードを分散して記憶するシード記憶部と、
前記乱数生成部が生成した乱数を記憶する事前生成乱数記憶部と、
少なくとも処理対象となるシェアを記憶するシェア値記憶部と、
前記乱数と前記処理対象となるシェアとを用いて、前記秘密計算サーバ装置の間で送受信するためのキャリーを少なくとも計算する論理演算部と、
前記キャリーからマスクを除去する内積計算部と、
前記キャリーを消去して処理結果を得る処理を少なくとも行う算術演算部と、
を備える、秘密計算サーバ装置。
[付記10]
相互にネットワークで接続した少なくとも3台以上の秘密計算サーバ装置を用いる秘密計算方法であって、
前記秘密計算サーバ装置の間で共有した疑似乱数生成器を用いて乱数を生成し、
前記乱数と処理対象となるシェアとを用いて、前記秘密計算サーバ装置の間で送受信するためのキャリーを計算し、
内積計算を用いて前記キャリーからマスクを除去し、
前記キャリーを消去して処理結果を得る、秘密計算方法。
[付記11]
前記乱数は、論理演算の乱数と算術演算の乱数とを含む、付記10に記載の秘密計算方法。
[付記12]
前記算術演算の乱数は、前記論理演算の乱数にビット埋め込みの処理をすることで得られる、付記11に記載の秘密計算方法。
[付記13]
前記乱数は、不正検知用の乱数を含む、付記10から付記12のいずれか1に記載の秘密計算方法。
[付記14]
前記秘密計算サーバ装置ではないサーバ装置にて前記キャリーを用いて不正検知をした後に前記内積計算を行う、付記10から付記13のいずれか1に記載の秘密計算方法。
[付記15]
前記内積計算は、不正検知可能な内積計算である、付記10から付記14のいずれか1に記載の秘密計算方法。
[付記16]
前記秘密計算サーバ装置ではない2つのサーバ装置から受信した乱数を用いて不正検知を行う、付記10から付記15のいずれか1に記載の秘密計算方法。
[付記17]
相互にネットワークで接続した少なくとも3台以上の秘密計算サーバ装置に実行させる秘密計算プログラムであって、
前記秘密計算サーバ装置の間で共有した疑似乱数生成器を用いて乱数を生成し、
前記乱数と処理対象となるシェアとを用いて、前記秘密計算サーバ装置の間で送受信するためのキャリーを計算し、
内積計算を用いて前記キャリーからマスクを除去し、
前記キャリーを消去して処理結果を得る、秘密計算プログラム。
【0126】
なお、引用した上記の特許文献等の各開示は、本書に引用をもって繰り込むものとする。本発明の全開示(請求の範囲を含む)の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の全開示の枠内において種々の開示要素(各請求項の各要素、各実施形態ないし実施例の各要素、各図面の各要素等を含む)の多様な組み合わせ、ないし、選択(部分的削除を含む)が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。さらに、上記引用した文献の各開示事項は、必要に応じ、本発明の趣旨に則り、本発明の開示の一部として、その一部又は全部を、本書の記載事項と組み合わせて用いることも、本願の開示事項に含まれるものと、みなされる。
【符号の説明】
【0127】
100,200,300 秘密計算システム
100_i,200_i,300_i 秘密計算サーバ装置
101_i,201_i,301_i 算術演算部
102_i,202_i,302_i 論理演算部
103_i,203_i,303_i 内積計算部
104_i,204_i,304_i 乱数生成部
105_i,205_i,305_i シード記憶部
106_i,206_i,306_i シェア値記憶部
107_i,207_i,307_i 事前生成乱数記憶部
208,308_1,308_1 補助サーバ装置