以下、図面を参照して本発明の実施の形態の一例を詳細に説明する。
< 第1の実施の形態>
まず、第1の実施の形態の構成を説明する。
図1に示すように、第1の実施の形態の秘密情報分散秘匿演算システムは、ネットワーク10を介して相互に接続された、入力者装置12、複数(N個)のマシン14N0~14Nn-1を備えている。マシン14N0~14Nn-1は、ニューラルネットワークマシン(NNマシン)である。なお、以下では、マシン14N0~14Nn-1の各々を、マシン14Niで標記する場合もある。
入力者装置12及びマシン14N0~14Nn-1は、同様の構成になっているので、入力者装置12の構成のみを、図2を参照して説明する。図2に示すように、入力者装置12は、コンピュータを備え、CPU22、ROM24、RAM26、メモリ28、入力装置30、送受信装置32、表示装置34がバス36を介して相互に接続されて、構成されている。入力者装置12及びマシン14N0~14Nn-1のメモリ28には、後述するプログラムが記憶されている。
次に、図3を参照して、入力者装置12のCPU22がプログラムを実行することで実現される機能について説明する。プログラムは、分散機能を備えている。CPU22がこの機能を有するプログラムを実行することで、CPU22は、図3に示すように、分散部42として機能する。なお、上記プログラムは、復元機能を備え、CPU22がこの機能を有するプログラムを実行することで、CPU22は、図示しない復元部として機能する。
次に、図4を参照して、マシン14N0~14Nn-1の各々のCPU22がプログラムを実行することで実現される機能について説明する。プログラムは、秘匿積和演算機能及び秘匿除算機能を備えている。CPU22がこの機能を有するプログラムを実行することで、CPU22は、図4に示すように、秘匿積和演算部44及び秘匿除算部46として機能する。
次に、本実施の形態の作用を説明する。
本実施の形態では、秘密分散法を用いる。最初に、秘密分散法を説明する。代表的な秘密分散法であるShamirの(k、n)閾値秘密分散法(以降、Shamir法)は、1つの秘密情報をn個の分散値に変換し、n台のサーバに分散する。Shamir法の特徴は、分散したn個の分散値から、k個の分散値を集めれば、元の秘密情報を復元することができるが、k個未満の情報からは、秘密情報に関する情報を一切得ることができないということである。Shamir法のアルゴリズムを以下に示す。また、秘密分散法を用いた秘匿計算法として以下に示すTUS方式がある。
Shamirの(k、n)閾値秘密分散法
(分散処理)
ユーザはs<pかつn<pの条件を満たす任意の素数pを選択する。
ユーザはGF(p)の元からn個のxi(i=0、1、2、・・・、n-1)を選び、サーバIDとする。
ユーザはGF(p)の元からk-1個の乱数al(l=1、2、・・・、k-1)を選び、以下の分散式を生成する。
Wi=s+a1xi+a2xi2+・・・+ak-1xi
k-1(modp)
ユーザは上式のxiに各サーバIDを代入し、分散値Wiを計算し、各サーバSiに送信する。
(復元処理)
復元に用いる分散情報をWi(i=0、1、2、・・・、k-1)として、その分散情報に対応するサーバIDをxiとする。
分散式にxiとWiを代入し、k個の連立方程式を解いて、元の秘密情報sを復元する。ただし、秘密情報sを復元する際に、ラグランジュの補間公式を使うと便利である。
また、秘密情報をL個に分割し、分散式の係数として含ませるランプ型秘密分散方式も知られている。これによって、分散値の小型化が実現できる。
TUS方式
従来の秘匿乗算はShamir法による分散値をそのまま用いて乗算するため多項式の次数が変化し、復元に必要な分散値の数が2k-1個に増加する。しかし、以下の文献1で提案されたTUS方式は、秘密情報に乱数を乗じて秘匿化秘密情報を生成し、それを秘密分散する。秘匿乗算を行う際には、秘匿化秘密情報を一時的に復元してスカラー量として扱い、他の分散値と乗算を行う。これにより、乗算した際に多項式の次数は増加しないので、閾値を変化させない秘匿乗算を行うことができる。ただし、秘匿乗算においては秘密情報が漏洩する可能性があるため、秘密情報a、bは0を含まず、乱数も0を含まない(秘匿乗算以外では秘密情報に0を含んでもよい)。TUS方式は秘密分散の処理も含めてすべての秘匿演算はpを法として行われる。
文献1:神宮武志、岩村惠市:“除算を含む四則演算に適応可能な秘密分散法を用いた秘匿計算手法の提案”、信学技報115(122)、51-57、2015-07-02。
文献2:青井健、神宮武志、岩村惠市:“n<2k-1における秘匿計算の安全性検討及び非対称秘密分散との応用”、信学技報116(129)、237-243、2016-07-14。
TUS方式の問題点
TUS方式は秘匿加減算と秘匿乗除算が別々に構成され、それら単独であれば安全であることが、上記文献2に示されている。しかし、秘匿乗算と秘匿加算を組み合わせて、f(x)=ab+cのような積和演算を行う場合安全でない。以下に、手順1~5でTUS方式の秘匿乗算abを行い、手順6~10で秘匿加算ab+cを行う場合を示す。なお、秘密情報a、b、cはa、b、c∈Z/pZであり、分散処理および秘匿加算で生成する乱数αj、βj、λj、γjもαj、βj、λj、γj∈Z/pZである(ただし、乗算において一旦復元されるaと乱数は0ではない)。以下において、
はaに対する分散値を表す。秘密分散の処理も含めてすべての秘匿演算はpを法として行われる。
手順1:サーバS
0はk台のサーバより
を収集し、一時的にαaのスカラー量を復元し、全サーバS
iに送信する。
手順2:全サーバS
iは以下の式を用いて、
を計算する。
手順3:k台のサーバS
jは
と
を収集し、α
jとβ
jを復元し、α
jβ
jを計算する。
手順4:k台のサーバSjは乱数αjβjをShamirの(k、n)閾値秘密分散法で全サーバSiに分散する。
手順5:サーバS
i(i=0、1、2、・・・、n-1)は秘密情報abに関する分散情報として
を保持する。
手順6:k台のサーバS
jは
と
を収集し、α
jβ
jとλ
jを復元する。それから、k台のサーバS
jは乱数γ
jを生成し、サーバS
0にγ
j/α
jβ
j、γ
j/λ
jを送信する。
手順7:サーバS
0はγ
j/α
jβ
j、γ
j/λ
jを用いて、以下の式よりγ/αβ、γ/λを計算し、全サーバS
iに送信する。
手順8:全サーバS
iは以下の式を用いて、
を計算する。
手順9:k台のサーバSjは乱数γjをShamirの(k、n)閾値秘密分散法で全サーバSiに分散する。
手順10:サーバS
i(i=0、1、2、・・・、n-1)は秘密情報ab+cに関する分散情報として
を保持する。
(復号処理)
手順a:復元者はK台のサーバよりk個の分散情報[ab+c]jを収集する。
手順b:収集した分散情報の
からγ(ab+c)、γ
0、・・・、γ
k-1を復元し、乱数
を計算する。
手順c:復元した秘匿した秘密情報γ(ab+c)と乱数γを用いて、以下の式より秘密情報ab+cを復元する。
γ(ab+c)×γ-1=ab+c
積和演算は3入力1出力の演算であるため、入力者は3人、出力者は1人想定される。ここで、攻撃者として復元者かつ1つの値の入力者である場合を考える。例えば、攻撃者が秘密情報bの入力者かつ復元者である場合、攻撃者は入力者が入力した秘密情報b、乱数β、演算結果を復元するための乱数γ、演算結果ab+cおよびk-1台のサーバから漏洩するαa、γ/αβ、γ/λの情報を持っている。攻撃者は乱数β、γ、γ/αβの情報を用いて、乱数αを求めることができる。攻撃者は求めた乱数αと演算途中に得られるαaより秘密情報aを計算することができる。それから、攻撃者は秘密情報a、bと演算結果ab+cを用いて、秘密情報cを知ることができる。これによって、攻撃者は入力者Bの入力情報、復元者の持つ情報およびk-1台のサーバから漏洩する情報を持っていれば、残りの入力者の情報が漏洩してしまうという問題がある。
一般に、ビッグデータなどに対する秘匿計算においては、秘密情報の入力者は複数存在し、秘匿演算結果を復元する復元者も入力者と異なる、または入力者と一部同一であり、その利害は他者と対立すると想定する。それに対して、NNでは入力者はある問題を解こうとする1名または同一組織(以降、入力者と呼ぶ)であることが多く、入力者は多くの学習データを準備して、すべての秘密情報と演算結果を知る。ここでは、入力者がNNマシン及びNNマシンを監視できる攻撃者に対して入力および解こうとする問題を秘匿したい場合を想定する。秘密分散を用いる場合、最小n=2であるが、以降ではn=1をめざし、n=1、2の場合に対して有効な秘匿計算法を提案する。
まず、秘密分散を用いてNNマシンで問題を解こうとする場合、TUS方式以外では最小閾値であるn=k=2としたくても秘匿乗算が含まれれば、nに相当するNNマシンは3台以上必要とすることが知られている。また、TUS方式では安全な積和演算が実現できない。
そこで、第1の実施の形態として、入力者及び復元者を同一の1名として、最小2台のNNマシンで秘匿計算を実現する場合を考える。この場合、入力者及び復元者が異なり利害が対立するとするTUS方式を上記状況に合わせて効率化することと、入力される情報に0が含まれないとは保証されないため、TUS方式では対応できなかった秘密情報に0を含む積和演算を実現することが課題となる。
四則演算は積和演算ab+cの組み合わせで実現できる。TUS方式では積和演算を安全に実行できなかったが、秘匿積和演算を安全に実現できれば、任意の四則演算はその組み合わせによって実現される。ただし、本実施の形態では一人の入力者が全秘密情報a、b、cを入力するとする。また、以下ではn台のNNマシンを例に説明するが、最小にしたい場合n=k=2とできる。また、前記TUS方式では秘密情報に直接乱数をかけて分散したため、秘匿乗算においてαaをスカラー量として復元したとき、秘密情報がa=0の場合、αa=0となるため秘密情報に0を含むことができなかった。また、秘匿加算ではαaを復元しないため、a=0であってもよいが、そのためαaは必ず秘密分散しておく必要があり、αを構成する乱数α0、α1、・・・、αk-1を含む全情報は全て秘密分散しておく必要があった。よって、その全秘密情報の分散及び復元に大きな手間が生じた。以下では秘密情報に直接乱数をかけるだけで分散せず、秘密情報aに1を加えることから、a=0であってもα(a+1)=0とならない。そのためα(a+1)を分散することなくそのまま配布することができる。また、入力者は全ての秘密を知るためαを直接使用できる。すなわち、α0、α1、・・・、αk-1などに分解する必要がなく、これによって秘密分散に関する手間を大きく効率化できる。
以下において、秘密情報a、b、cは1を加えるためa、b、c<p-1であり、生成する乱数α、β、γ、δはα、β、γ、δ∈Z/pZである(ただし、乱数として0は選択されない)。また、秘密分散の処理も含めてすべての演算はpを法として行われる。また、以下の記号を定義する。また、値を公開するとは秘匿演算を行う全マシンにその値を送ることを意味する。
(記号定義)
[a]iは、マシン14Niが保持する値aに対する分散値を示す。
[分散1]
次に、図5を参照して、入力者装置12のCPU22における分散部42が実行する分散1を説明する。
ステップ52で、分散部42は、乱数α、β、γを生成する。なお、乱数α、β、γは、真正乱数でも疑似乱数でもよい。以下の各乱数も同様である。
ステップ54で、分散部42は、α(a+1)、β(b+1)、γ(c+1)を、次のように計算する。
α(a+1)=α×(a+1)
β(b+1)=β×(b+1)
γ(c+1)=γ×(c+1)
ステップ56で、分散部42は、α(a+1)、β(b+1)、γ(c+1)を、全マシン14N0~14Nn-1に送信する。
ステップ58で、分散部42は、乱数δを生成し、ステップ60で、分散部42は、δ/αβ、δ/α、δ/β、δ/γ、δを計算し、ステップ62で、分散部42は、その秘密分散の分散値[δ/αβ]i、[δ/α]i、[δ/β]i、[δ/γ]i、[δ]iを計算する(i=0,・・・,k-1)。
ステップ64で、分散部42は、分散値[δ/αβ]i、[δ/α]i、[δ/β]i、[δ/γ]i、[δ]iを、対応するマシン14N0~14Nn-1中のマシン14Niに送信する。
なお、入力者装置12のCPU22における分散部42はδを入力者装置12のメモリ28に保存する。
[秘匿積和演算1]
次に、図6を参照して、マシン14N0~14Nn-1の予め定められたk台以上のマシン(マシン14Ni(i=0,・・・,k-1)のCPU22における秘匿積和演算部44が実行する秘匿積和演算1を説明する。
ステップ72で、秘匿積和演算部44は、以下を計算する。
[δ(ab+c+1)]i=α(a+1)×β(b+1)×[δ/αβ]i-α(a+1)×[δ/α]i-β(b+1)×[δ/β]i+γ(c+1)×[δ/γ]i+[δ]i
ステップ74で、秘匿積和演算部44は、予め定められたk台以上のマシンが協力してδ(ab+c+1)を復元する。
ステップ76で、秘匿積和演算部44は、δ(ab+c+1)を各マシン14N0~14Nn-1のメモリ28に保存する。
入力者が計算結果を得る場合、入力者装置12は、δ(ab+c+1)をどれかのマシンから得て、保存しているδで割って1を引くことによって積和演算結果であるab+cを得る。もしくは、[δ]iを集めて復元し、δで割って1を引く。また、分散1では1を加えるが、加える値は1に限定されず、その他の値、例えば、2であれば下記を積和演算として計算すればよい。
[δ(ab+c+2)]i=α(a+2)×β(b+2)×[δ/αβ]i-2α(a+2)×[δ/α]i-2β(b+2)×[δ/β]i+γ(c+2)×[δ/γ]i+4[δ]i
その他の値は、例えば、-1、-2に相当するZ/pZ上の値でもよい。入力者装置12は、δ(ab+c-1)を保存しているδで割って、1(または2等)を加えることによって積和演算結果であるab+cを得るようにしてもよい。
また、秘匿積和演算1においてc=0とすれば秘匿乗算となり、a=1とすれば秘匿加算となる。また、図6のステップ72の+γ(c+1)を-γ(c+1)とすれば秘匿減算となる。秘匿積和演算1では公開されたα(a+1),β(b+1),γ(c+1)以外のステップ72における秘匿積和演算に必要な情報は分散され、入力者装置12以外知らないため、攻撃者は公開された情報以外知ることができず情報理論的に安全である。
[秘密分散1]
また、秘匿除算は以下のように行う。図7には、秘匿除算のための、入力者装置12のCPU22における分散部42が実行する秘密分散1のフローチャートが示されている。
ステップ82で、分散部42は、乱数α′を生成し、ステップ84で、分散部42は、α′/αを計算する。
ステップ86で、分散部42は、α′/αの秘密分散の分散値とα′の秘密分散値とを計算する。
ステップ88で、分散部42は、α′/αの秘密分散の分散値とα′の秘密分散値とを、対応するマシン14Niに送信する。
[秘匿除算1]
図8には、マシン14N0~14Nn-1の各々のCPU22における秘匿除算部46が実行する秘匿除算1のフローチャートが示されている。
ステップ92で、秘匿除算部46は、以下を計算する。
[α’a]i=α(a+1)×[α′/α]i-[α′]i
ステップ94で、秘匿除算部46は、他のマシンと協力して[α′a]iを復元する。
ステップ96で、秘匿除算部46は、α′a=0であるか否かを判断する。α′a=0であれば、秘匿除算1は終了する。
α′a=0でなければ、ステップ98で、秘匿除算部46は、1/α′aを計算する、
ステップ100で、秘匿除算部46は、1/α′aをα(a+1)として秘匿積和演算1のために秘匿積和演算部44に送る。これにより、秘匿積和演算部44により、乗算を除算に変えた結果が得られる。ただし、秘匿積和演算1のステップ72における-β(b+1)×[δ/β]iの計算は1/α′aに1が足されていないため省略される。
上記秘匿除算においてα′a=0である場合、a=0であることが漏洩するが、除数が0の場合演算できず、それを検知して演算を中止する必要があるので、除算において除数が0であることがわかるのは問題ない。よって、入力者があらかじめ[α′a]iを生成しておき、必要な時に入力してもよい。
演算を連続する場合、復元したδ(ab+c+1)を、α(a+1)、β(b+1)、γ(c+1)の1つとし、同様の演算によって計算された他の秘匿演算結果をα(a+1)、β(b+1)、γ(c+1)の残りとすればよい。また、新たにδを生成し、α、β、γとなった乱数に対してδ/αβ、δ/α、δ/β、δ/γ、δを計算すればよい。
また、以上によって入力を秘匿することができるが、四則演算は積和演算の組み合わせで表せることから、解きたい問題をダミーの積和演算(a=b=c=0とすれば加算用のダミー積和演算処理となり、a=b=0、c=1とすれば乗算用のダミー積和演算処理となる)を含めて定型の秘匿積和演算の繰り返しで表すことにより、解こうとする問題も秘匿することができる。
また、入力者装置12のCPU22における分散部42は、演算を繰り返す場合、分散1(図5参照)において、新たにδを生成し新たにα、β、γとなった乱数に対してδ/αβ、δ/α、δ/β、δ/γ、δを計算するが、演算手順が予め分かっている場合、予め計算しておくこともできる。
ただし、この場合、分散部42が演算手順に応じて予め計算しておく必要があり、分散部42の負担が大きい可能性がある。よって、分散部42の負担を減らしたい場合、以下によって分散部42は乱数を生成して分散するだけでよく、以降の処理はマシン14N0~14Nn-1だけで実行できる。以下では、n=kとしてn台のマシンの中から演算を行うマシン14Niは定まっているとし、αを構成する乱数を直接マシンに送付する場合を説明する。分散1’と秘匿積和演算1’が連続して行われず、演算を行うマシン14Niが定まっていない場合は、αi、βi、γi(i=0、・・・、k-1)などをn台のマシンに秘密分散し、秘匿演算時に演算に参加するマシンがその中から対応する乱数のk個の分散値を集めて復元してもよい。
[分散1′]
次に、上記の場合において入力者装置12のCPU22における分散部42が実行する分散1′を、図9を参照して説明する。
ステップ102で、分散部42は、k個の乱数の組α0、α1、・・・、αk-1及びβ0、β1、・・・、βk-1、γ0、γ1、・・・、γk-1を生成する。
ステップ104で、分散部42は、以下を計算する。
まず、分散部42は、α=α0×α1×・・・×αk-1を計算し、α(a+1)=α×(a+1)を計算する。
分散部42は、β=β0×β1×・・・×βk-1を計算し、β(b+1)=β×(b+1)を計算する。
分散部42は、γ=γ0×γ1×・・・×γk-1を計算し、γ(c+1)=γ×(c+1)を計算する。
ステップ106で、分散部42は、α(a+1)、β(b+1)、γ(c+1)を、全マシン14N0~14Nn-1に送信する。
ステップ110で、分散部42は、αi、βi、γi(i=0、・・・、k-1)を、対応するマシン14Niに送信する。
ステップ112で、分散部42は、k個の乱数の組ε0、ε1、・・・、εk-1及びφ0、φ1、・・・、φk-1、λ0、λ1、・・・、λk-1、η0、η1、・・・、ηk-1、μ0、μ1、・・・、μk-1を生成する。
ステップ114で、分散部42は、以下を計算する。
ε=ε0×ε1×・・・×εk-1
φ=φ0×φ1×・・・×φk-1
λ=λ0×λ1×・・・×λk-1
η=η0×η1×・・・×ηk-1
μ=μ0×μ1×・・・×μk-1
ステップ116で、分散部42は、ε、φ、λ、η、μの分散値[ε]i、[φ]i、[λ]i、[η]i、[μ]iを計算する。
ステップ118で、分散部42は、分散値[ε]i、[φ]i、[λ]i、[η]i、[μ]iとεi、φi、λi、ηi、μiを、対応するマシンに送信する。
[秘匿積和演算1’]
次に、マシン14N0~14Nn-1の各々のCPU22における秘匿積和演算部44が実行する秘匿積和演算1’を、図10を参照して、説明する。
ステップ122で、秘匿積和演算部44は、乱数δiを生成する。
ステップ124で、秘匿積和演算部44は、δi/αiβiεi、δi/αiφi、δi/βiλi、δi/γiηi、δiμiを計算する。
ステップ126で、秘匿積和演算部44は、δi/αiβiεi、δi/αiφi、δi/βiλi、δi/γiηi、δiμiを、予め定められたマシン14N0に送信する(n=k=2のとき、2台のマシン間で互いに交換してもよい)。
図11に示すように、予め定められたマシン14N0のCPU22における秘匿積和演算部44は、ステップ142で、以下のδ/αβε、δ/αφ、δ/βλ、δ/γη、μを計算し、ステップ146で、ステップ142で当該計算された各値を、全マシンに送信する(ステップ126で互いに値を交換した場合、図11の処理は不要で、全マシンがδ/αβε、δ/αφ、δ/βλ、δ/γη、μを計算する。すなわち、ステップ128は「δ/αβε、δ/αφ、δ/βλ、δ/γη、μを計算」に変更される)。
ステップ128で、秘匿積和演算部44は、予め定められたマシン14N0から送信されたδ/αβε、δ/αφ、δ/βλ、δ/γη、μを受信する。
ステップ130で、秘匿積和演算部44は、以下を計算する。
[αβε(a+1)(b+1)]i=α(a+1)×β(b+1)×[ε]i
[αφ(a+1)]i=α(a+1)×[φ]i、[βλ(b+1)]i=β(b+1)×[λ]i、[γη(c+1)]i=γ(c+1)×[η]i
ステップ132で、秘匿積和演算部44は、以下を計算する。
[δ(ab+c+1)]i=δ/αβε×[αβε(a+1)(b+1)]i-δ/αφ×[αφ(a+1)]i-δ/βλ×[βλ(b+1)]i+δ/γη×[γη(c+1)]i+δ/μ×[μ]i
分散1’におけるステップ112~118で生成され各マシンに送付される([ε]i、εi)、([φ]i、φi)、([λ]i、λi)、([η]i、ηi)、([μ]i、μi)は後述するように変換用乱数と呼ぶが、入力者装置が必ず生成する必要はなく、第3の実施の形態に示されるようにマシン間または他のマシンによって生成されてもよい。また、([ε]i、εi)、([φ]i、φi)、([λ]i、λi)、([η]i、ηi)、([μ]i、μi)は予め準備されているとしてもよい。秘匿積和演算1’では次のα,β,γに相当するδは演算中に分散され、新たなδも演算中にマシン14N0~14Nn-1が生成するため、演算途中で分散部42の処理がなくても演算継続できる。
近年、NNマシンを公開して自由に利用できるようにする動きが広がっている。このようなパブリックのNNマシンが2台あったとき、第1の実施の形態によって全NNマシンの情報が漏洩しない限り安全であり、準備するNNマシンも2台で済むという従来法では実現できない利点を実現できる。また、TUS方式では安全にできなかった積和演算の定型の組み合わせによって解いている問題も秘匿しながら、効率的に秘匿演算結果を得ることができる。また、入力者装置が復元者装置であり、すべての情報を知るため多くの処理を効率化できる。これによって、個人または同一組織が自分の秘密情報及び解こうとする問題をNNマシンまたは攻撃者に漏らすことなく、公開されたNNマシンを利用して望む秘匿演算を実行できるようになる。
<第2の実施の形態>
第2の実施の形態の秘密情報分散秘匿演算システムは、第1の実施の形態と同様の構成であるので、同様の構成部分には同一の符号を付して、その説明を省略する。ただし、入力者装置12は、演算支援装置でもある。
また、第2の実施の形態では、マシン14N0~14Nn-1の内の予め定められた1台のマシン14NNが秘匿演算を行う。
秘密分散法においては、秘密情報の分散数と演算を行うマシン数は同じである。本実施の形態においては、演算を行うマシン数と秘密分散における分散数が異なるため、演算を行うマシン数をN(本実施の形態では1)台とし、秘密分散に関する分散数と閾値はn及びkで表現する(n,kは任意の数を選択できるが、以下では説明を簡単にするため最小値のn=k=2とする)。
秘密分散を用いた秘匿演算を1台のマシン14NNでいかに安全に実行させるか、または演算を行うマシン数と秘密情報の分散数が異なる場合どのように秘匿演算を行うかは大きな課題であり、今までそれを実現した例はない。
第2の実施の形態では、1台のNNマシンで秘密分散を安全に実行するために、詳細には後述するが、2つの乱数δ0、δ1を導入し、分散値毎に異なる乱数をかけて演算を行うことが特徴である。
次に、第2の実施の形態における入力者装置12のCPU22がプログラムを実行することで実現される機能について説明する。プログラムは、分散機能及び演算支援機能を備えている。CPU22がこれらの機能を有するプログラムを実行することで、CPU22は、図12に示すように、分散部42及び演算支援部150として機能する。
[分散2]
まず、図13を参照して、入力者装置12のCPU22における分散部42が実行する分散2を説明する。
ステップ152で、分散部42は、乱数α、β、γを生成する。
ステップ154で、分散部42は、α(a+1)、β(b+1)、γ(c+1)を、以下のように計算する。
α(a+1)=α×(a+1)
β(b+1)=β×(b+1)
γ(c+1)=γ×(c+1)
ステップ156で、分散部42は、α(a+1)、β(b+1)、γ(c+1)を1台のマシン14NNに送信する。
ステップ158で、分散部42は、乱数δ0、δ1を生成する。
ステップ160で、分散部42は、δ0/αβ、δ0/α、δ0/β、δ0/γの秘密分散の分散値を計算し、[δ0/αβ]0、[δ0/α]0、[δ0/β]0、[δ0/γ]0とδ0/αβ]1、[δ0/α]1、[δ0/β]1、[δ0/γ]1を得る。
ステップ162で、分散部42は、以下を計算する(δ=δ0δ1)。
[δ/αβ]1=δ1×[δ0/αβ]1
[δ/α]1=δ1×[δ0/α]1
[δ/β]1=δ1×[δ0/β]1
[δ/γ]1=δ1×[δ0/γ]1
ステップ164で、分散部42は、[δ0/αβ]0、[δ0/α]0、[δ0/β]0、[δ0/γ]0と[δ/αβ]1、[δ/α]1、[δ/β]1、[δ/γ]1をマシン14NNに送信する。
[積和演算2]
次に、マシン14NNのCPU22における秘匿積和演算部44が実行する積和演算2を、図14を参照して説明する。
ステップ172で、秘匿積和演算部44は、以下を計算する。
[δ0(ab+c)]0=α(a+1)×β(b+1)×[δ0/αβ]0-α(a+1)×[δ0/α]0-β(b+1)×[δ0/β]0+γ(c+1)×[δ0/γ]0
[δ(ab+c)]1=α(a+1)×β(b+1)×[δ/αβ]1-α(a+1)×[δ/α]1-β(b+1)×[δ/β]1+γ(c+1)×[δ/γ]1
[演算支援2]
次に、演算を継続または終了する場合、入力者装置12のCPU22における演算支援部150が実行する演算支援2を、図15を参照して説明する。
ステップ182で、演算支援部150は、[δ0(ab+c)]0と[δ(ab+c)]1を収集する。
ステップ184で、演算支援部150は、[δ(ab+c)]0=δ1[δ0(ab+c)]0を計算する。
ステップ186で、演算支援部150は、δ(ab+c)を復元する。
ステップ187で、演算支援部150は、演算を継続するか否かを判断する。これは実行している演算処理がそこで終わるか、継続する処理があるかによって判断される、すなわち入力者が設定したプログラムによる。演算を継続する場合には、ステップ188で、演算支援部150は、δ(ab+c+1)=δ(ab+c)+δを計算する。
その後、ステップ190で、演算支援部150は、δ(ab+c+1)をマシン14NNに送信する。
演算を継続せず演算結果を得る場合は、ステップ192で、演算支援部150は、δ(ab+c)をδで割って、ab+cを計算する。
ただし、加減算を継続する演算を行う場合、演算支援2を行わずに他の[δ0(ab+c)]0,[δ(ab+c)]1と係数を合わせて加減算を継続してもよい。また、乗除残においてもα(a+1)×β(b+1)のように直接繰り返すことができる。すなわち、加減算または乗除算の繰返しにおいては演算支援処理を行わなくてもよく、積和演算のような加減算と乗除算を組み合わせる場合に1度行えば良い。積和演算2において計算される[δ0(ab+c)]0,[δ(ab+c)]1は独立に定められた異なる乱数δ0,δがかかっているため、k=2であっても正しく復元できず、情報理論的安全性が達成できる。
[演算支援2′]
次に、入力者装置12のCPU22における演算支援部150が実行する演算支援2′を、図16を参照して説明する。
ステップ202で、演算支援部150は、[δ0(ab+c)]0と[δ(ab+c)]1を収集する。
ステップ203で、演算支援部150は、以下を計算する。
[δ0(ab+c+1)]0=[δ0(ab+c+1)]0+[0]0+δ0
[δ(ab+c+1)]1=[δ(ab+c+1)]1+[0]1+δ
ここで、[0]0、[0]1は定数項0の分散値であり、事前に準備できる。
ステップ204で、演算支援部150は、演算を継続するか否かを判断する。
演算を継続する場合には、ステップ205で計算結果をマシン14NNに送信する。
演算を継続しない場合(ステップ204:N)、ステップ206で、演算支援部150は、[δ0(ab+c+1)]0にδ1を掛けて[δ(ab+c+1)]0を生成する。その後、ステップ207で、[δ(ab+c+1)]0と[δ(ab+c+1)]1からδ(ab+c+1)を復元してδで割って1を引きab+cを得る。
このようにすれば、演算支援2′により最終の演算結果を得る場合以外、入力者装置12の復元の手間はなくなる。
演算を継続する場合、マシン14NNはδ(ab+c+1)を復元し、それをα(a+1)、β(b+1)、γ(c+1)の1つとすれば、演算が連続できることは明らかである。
また、秘匿積和演算においてc=0とすれば秘匿乗算となり、a=1とすれば秘匿加算となる。また、図14のステップ172で、ab+cの+を-とし、ab-cとする、すなわち+γ(c+1)を-γ(c+1)とすれば秘匿減算となる。
[秘匿除算2]
次に、入力者装置12のCPU22における演算支援部150(分散部42でもよい)が実行する秘匿除算2を、図17を参照して説明する。なお、秘匿除算のための、入力者装置12のCPU22における分散部42は、図7のステップ82~86を実行する。
ステップ220で、演算支援部150は、乱数α″を生成する。
ステップ222で、演算支援部150は、以下を計算する。
[α″/α]1=(α″/α′)[α′/α]1
[α″]1=(α″/α′)[α′]1
ステップ226で、秘匿除算部46は、[α′/α]0、[α′]0、[α″/α]1、[α″]1をマシン14NNに送信する。
マシン14NNは、以下を計算して、入力者装置12に送る。
[α′a]0=α(a+1)×[α′/α]0-[α′]0
[α″a]1=α(a+1)×[α″/α]1-[α″]1
そこで、ステップ228で、演算支援部150は、[α′a]0、[α″a]1を受信する。
ステップ230で、演算支援部150は、[α″a]0=(α″/α′)[α′a]0と[α″a]1からα″aを復元する。
ステップ232で、演算支援部150は、α″a=0であるか否かを判断する。α″a=0であれば、秘匿除算2を終了する。
α″a=0でなければ、ステップ234で、演算支援部150は、1/α″aを計算する。
ステップ236で、演算支援部150は、1/α″aをα(a+1)として秘匿積和演算2のために秘匿積和演算部44に送る。これにより、秘匿積和演算部44により、乗算を除算に変えた結果が得られる。ただし、1/α″aには1が加えられていないため、秘匿積和演算2のステップ172においてβ(b+1)を減算する計算は省略される。
秘匿除算2において、図17のステップ222~228は事前に実行でき、ステップ230~236が秘匿除算における演算支援となる。また、ステップ228~236の処理を演算支援部が行わず、そのままマシン14NNが行ってもよい。
また、分散2の図13のステップ156の後に、α、β、γを秘密分散する処理を加え、ステップ164の後に、α、β、γを復元する処理を加えれば、分散2のステップ152~156と、ステップ158~164との間の実行開始時間が大きく異なっても、入力者装置12のCPU22における分散部42は、秘密情報の秘匿に用いたα、β、γを記憶しておくことなく実行でき、ステップ158~164を事前に計算しておかなくても、演算支援として演算中に処理できる。
第2の実施の形態によってマシン14NNが1台しかなくても、入力者装置12の秘密情報及び解こうとする問題が漏洩しないようにすることができる。従来、1台のNNマシンしかないとき、秘密分散法は適用できず膨大な計算量を必要とする準同型暗号を用いるしかなかったが、第2の実施の形態によってこの問題を解決できる。
<第3の実施の形態>
次に、第3の実施の形態を説明する。第3の実施の形態の構成は、第1の実施の形態の構成と同様の部分を有するので、同様の部分には、同様の符号を付してその詳細な説明を省略する。
図18に示すように、第3の実施の形態の秘密情報分散秘匿演算システムは、ネットワーク10を介して相互に接続された、複数、例えば、3台の入力者装置12A~12C、複数(N個)のマシン14N0~14Nn-1、及び復元者装置18を備えている。第3の実施の形態では、秘密情報a、b、cをそれぞれ有する3台の入力者装置12A~12Cを備え、下記復元者装置18を備えている点で、第1の実施の形態と異なる。
次に、第3の実施の形態における復元者装置18のCPU22がプログラムを実行することで実現される機能について説明する。プログラムは、分散値を集めて秘密情報の復元を行う復元機能を備えている。CPU22がこれらの機能を有するプログラムを実行することで、復元者装置18のCPU22は、図19に示すように、復元部242として機能する。
次に、第3の実施の形態におけるマシン14N0~14Nn-1の各々のCPU22がプログラムを実行することで実現される機能について説明する。プログラムは、変換用乱数生成機能、秘匿積和演算機能及び秘匿除算機能を備えている。CPU22がこの機能を有するプログラムを実行することで、CPU22は、図20に示すように、変換用乱数生成部244、秘匿積和演算部44及び秘匿除算部46として機能する。
マシン14N0~14Nn-1は更に、変換用乱数生成部として機能する。
第3の実施の形態では、複数(例えば、3台)の入力者装置12A~12Cと、結果を知る復元者装置18とが異なり、複数(最小はn=k=2)のマシン14N0~14Nn-1で秘匿計算する場合を考える。
TUS方式では秘匿加算と秘匿乗算は単独では安全であるが、積和演算のように乗算と加算を組み合わせると、入力者の秘密情報が漏洩するなど安全性に問題があることが知られている。そこで、そのような場合においても安全に秘匿計算が実現できるように変換用乱数の生成が課題となる。なお、第1、2の実施の形態では同一の入出力者装置を仮定するため、TUS方式で積和演算を行っても利害が対立する複数の入出力者が存在しないので、上記問題が発生しなかった。
ここでは、秘密情報a,b,cをもつ入力者装置(以下、第3の実施の形態では、「入力者」ともいう)が異なり、復元者装置(以下、第3の実施の形態では、「復元者」ともいう)も異なり、利害が対立する場合を考える。また、マシンは複数(最小はN=n=k=2)あるとする。また、他の入力者や復元者から自らの秘密情報を守るために以下の変換用乱数を生成する。この変換用乱数は複数の信頼できない入力者によって秘密に生成する方法は知られていなかった。例えば、第1の実施の形態の分散1’の図9のステップ112~118のように一台の入力者が生成する方法は知られているが、この入力者は変換用乱数の値を知る。よって、入力者装置が攻撃者であれば、それを用いた秘匿計算は安全ではなく、第1の実施の形態のように入力者装置は信頼できなければならない。それに対して信頼できる入力者がいない場合でも、変換用乱数が特定されない生成方法を以下に示す。
下記文献3、文献4において、2k次の多項式を用いて生成された分散値をk次の多項式に対する分散値に変換する方法が示されている。例えば文献3の手法では、ある規則によって生成された定数を要素とする下記行列Aを用いて、2k次の多項式に対する分散値ベクトルW=(W0,W1,・・・,W2k-1)に対してR=W・Aを計算し、k次の多項式に対する分散値ベクトルR=(R0,R1,・・・,R2k-1)に変換することができる(文献4の手法もほぼ同様の処理で実現できる)。ただし、文献3、4の手法はマシン台数NがN≧2k-1の場合に有効であるが、本実施例ではN<2k-1、すなわち実際のマシン台数NがN≧2k-1を満たさない場合を扱う。
文献3:M. Ben-Or, S. Goldwasser, and A. Wigderson, “Completeness theorems for non-cryptographic fault-tolerant distributed computation,” STOC ’88, 1988, pp. 1-10, ACM Press.
文献4:Rosario Gennaro, Michael O. Rabin, and Tal Rabin, “Simplified VSS and fast-track multiparty computations with applications to threshold cryptography,” In Brian A. Coen and Yehuda Afek, editors, PODC, 1998, pp. 101-111, ACM.
以下に、u人の入力者による変換用乱数生成部がN=t=k台のマシンの変換用乱数生成部244を用いて変換用乱数を生成する場合を、図21を参照して説明する。以下において、入力者は入力者装置を意味し、Siはマシン14Niとすることができる。ただし、この入力者及びSiなどは後述の秘匿積和演算を行う各装置と同じである必要はなく、他の秘匿演算システムによって生成されてもよいし、そのシステム自体を変換用乱数生成システムとして専用化してもよい。
[変換用乱数生成3]
(処理3(1))
入力者i(i=0,・・・,u-1)は乱数λi,0,・・・,λi,t-1,αi,0,・・・,αi,t-1,βi,0,・・・,βi,t-1,・・・,γi,0,・・・,γi,t-1を生成し、以下を計算する。
λi=λ,0×・・・×λi,t-1,αi=αi,0×・・・×αi,t-1,βi=βi,0×・・・×βi,t-1,・・・,γi=γi,0×・・・×γi,t-1
(処理3(2))
入力者iはk=t、n=ut(厳密にはn=u(k-1)+1以上)として、λiをShamir法を用いて秘密分散し、[λi]0,・・・,[λi]ut-1を得る。
(処理3(3))
入力者iは生成した分散値をt毎に分割して以下のように乱数を乗じる。
[αiλi]t=αi×[λi]t,・・・,[αiλi]2t-1=αi×[λi]2t-1,
[βiλi]2t=βi×[λi]2t,・・・,[βiλi]3t-1=βi×[λi]3t-1,
:
[γiλi](u-1)t=γi×[λi](u-1)t,・・・,[γiλi]ut-1=γi×[λi]ut-1
(処理3(4))
入力者iは[λi]j,[αiλi]j+t,[βiλi]j+2t,・・・,[γiλi]j+(u-1)t,λi,j,αi,j,βi,j,・・・,γi,jをマシン14NjであるマシンSj(j=0,・・・,t-1)に送る。
(処理3(5))
Si(i=0,・・・,t-1)は以下を計算する。ただし、下記乗算は分散値同士の乗算であるので、乗算結果はk=u(t-1)+1、n=utとしたShamir法による分散値と等価である。
[λ0λ1・・・λ3]i=[λ0]i×[λ1]i×・・・×[λu-1]i,
[α0α1・・・α3λ0λ1・・・λ3]i+t=[α0λ0]i+t×[α1λ1]i+t×・・・×[αu-1λu-1]i+t
[β0β1・・・β3λ0λ1・・・λ3]i+2t=[β0λ0]i+2t×[β1λ1]i+2t×・・・×[βu-1λu-1]i+2t
:
[γ0γ1・・・γ3λ0λ1・・・λ3]i+(u-1)t=[γ0λ0]i+(u-1)t×[γ1λ1]i+(u-1)t×・・・×[γu-1λu-1]i+(u-1)t
(処理3(6))
Si(i=0,・・・,t-1)はα0,i×α1,i・・・×αu-1,i,β0,i×β1,i・・・×βu-1,i,・・・,γ0,i×γ1,i・・・×γu-1,iを計算し、S0に送る。また、λ′i=λ0,i×λ1,i×λ2,i×・・・×λu-1,iを計算する。
(処理3(7))
S0は送られてきた全てのα0,i×α1,i・・・×αu-1,iをかけあわせα0α1・・・αu-1を、β0,i×β1,i・・・×βu-1をかけあわせβ0β1・・・βu-1を、・・・、γ0,i×γ1,i・・・×γu-1,iをかけあわせγ0γ1・・・γu-1を計算し、全マシンに送る。
(処理3(8))
Si(i=0,・・・,t-1)は以下を計算する。ただし、λ=λ0λ1・・・λu-1とする。
[λ]i+t=[α0α1・・・α3λ0λ1・・・λ3]i+t/(α0α1・・・α3)
[λ]i+2t=[β0β1・・・β3λ0λ1・・・λ3]i+2t/(β0β1・・・β3)
:
[λ]i+(u-1)t=[γ0γ1・・・γ3λ0λ1・・・λ3]i+(u-1)t/(γ0γ1・・・γ3)
(処理3(9))
Si(i=0,・・・,t-1)は0をk=u(t-1)/2+1,n=ut/2としてShamir法を用いて秘密分散した[0i]jを計算し、以下を計算してRi,j,Ri,j+t,・・・,Ri,j+u‘tをSjに送る。ただし、h=0,・・・,2t-1,u’=u/4であり、ai,hは行列Aの各要素である。
Ri,h=ai,h×[λ]i+ai+t,h×[λ]i+t+ai+2t,h×[λ]i+2t+・・・+ai+(u-1)t,h×[λ]i+(u-1)t+[0i]h,
(処理3(10))
Si(i=0,・・・,t-1)は以下を計算して得られた[λ]i,・・・,[λ]i+u”-1を次数が半減された(u”+1,ut/2)における分散値とする。ただし、u”=u(t-1)/2
[λ]i=R0,i+・・・+Rt-1,i,[λ]i+u′=R0,i+u′+・・・+Rt-1,i+u′,,・・・,
(処理3(11))
Si(i=0,・・・,t-1)は必要な次数になるまで(9)(10)の次数変換処理を繰り返し、変換用乱数{λ}i=([λ]i,λ′i)を生成する。
上記は記述が複雑であるので、u=4,N=t=k=2の場合を以下に具体的に記す(図22も参照)。
[変換用乱数生成3’]
(処理3′(1))
入力者0は乱数λ0,0,λ0,1,α0,0,α0,1,β0,0,β0,1,γ0,0,γ0,1を生成し、以下を計算する。
λ0=λ0,0×λ0,1,α0=α0,0×α0,1,β0=β0,0×β0,1,γ0=γ0,0×γ0,1
(処理3′(2))
入力者0はλ0を(2,8)Shamir法で秘密分散し、[λ0]0,・・・,[λ0]7を得る。
(処理3′(3))
入力者0は以下を計算する。
[α0λ0]2=α0×[λ0]2,[α0λ0]3=α0×[λ0]3
[β0λ0]4=β0×[λ0]4,[β0λ0]5=β0×[λ0]5
[γ0λ0]6=γ0×[λ0]6,[γ0λ0]7=γ0×[λ0]7
(処理3′(4))
入力者0は[λ0]0,[α0λ0]2,[β0λ0]4,[γ0λ0]6,λ0,0,α0,0,β0,0,γ0,0をマシンS0に送る。
(処理3′(5))
入力者0は[λ0]1,[α0λ0]3,[β0λ0]5,[γ0λ0]7,λ0,1,α0,1,β0,1,γ0,1をマシンS1に送る。
(処理3′(6))
入力者1は乱数λ1,0,λ1,1,α1,0,α1,1,β1,0,β1,1,γ1,0,γ1,1を生成し、以下を計算する。
λ1=λ1,0×λ1,1,α1=α1,0×α1,1,β1=β1,0×β1,1,γ1=γ1,0×γ1,1
(処理3′(7))
入力者1はλ1を(2,8)Shamir法で秘密分散し、[λ1]0,・・・,[λ1]7を得る。
(処理3′(8))
入力者1は以下を計算する。
[α1λ1]2=α1×[λ1]2,[α1λ1]3=α1×[λ1]3
[β1λ1]4=β1×[λ1]4,[β1λ1]5=β1×[λ1]5
[γ1λ1]6=γ1×[λ1]6,[γ1λ1]7=γ1×[λ1]7
(処理3′(9))
入力者1は[λ1]0,[α1λ1]2,[β1λ1]4,[γ1λ1]6,λ1,0,α1,0,β1,0,γ1,0をマシンS0に送る。
(処理3′(10))
入力者1は[λ1]1,[α1λ1]3,[β1λ1]5,[γ1λ1]7,λ1,1,α1,1,β1,1,γ1,1をマシンS0に送る。
(処理3′(12))
入力者2,3も同様の処理を行う。よって、S0は以下を保持する。
[λ0]0,[λ1]0,[λ2]0,[λ3]0,[α0λ0]2,[α1λ1]2,[α2λ2]2,[α3λ3]2,[β0λ0]4,[β1λ1]4,[β2λ2]4,[β3λ3]4,[γ0λ0]6,[γ1λ1]6,[γ2λ2]6,[γ3λ3]6,
λ0,0,λ1,0λ2,0λ3,0,α0,0,α1,0,α2,0,α3,0,β0,0,β1,0,β2,0,β3,0,γ0,0,γ1,0,γ2,0,γ3,0
(処理3′(13))
S1は以下を保持する。
[λ0]1,[λ1]1,[λ2]1,[λ3]1,[α0λ0]3,[α1λ1]3,[α2λ2]3,[α3λ3]3,[β0λ0]5,[β1λ1]5,[β2λ2]5,[β3λ3]5,[γ0λ0]7,[γ1λ1]7,[γ2λ2]7,[γ3λ3]7,
λ0,1,λ1,1λ2,1λ3,1,α0,1,α1,1,α2,1,α3,1,β0,1,β1,1,β2,1,β3,1,γ0,1,γ1,1,γ2,1,γ3,1
(処理3′(14))
S0は以下を計算する。乗算結果は(5,8)Shamir法による分散値と等価である。
[λ0λ1λ2λ3]0=[λ0]0×[λ1]0×[λ2]0×[λ3]0,
[α0α1α2α3λ0λ1λ2λ3]2=[α0λ0]2×[α1λ1]2×[α2λ2]2×[α3λ3]2
[β0β1β2β3λ0λ1λ2λ3]4=[β0λ0]4×[β1λ1]4×[β2λ2]4×[β3λ3]4
[γ0γ1γ2γ3λ0λ1λ2λ3]6=[γ0λ0]6×[γ1λ1]6×[γ2λ2]6×[γ3λ3]6
(処理3′(15))
S1は以下を計算する。乗算結果は(5,8)Shamir法による分散値と等価である。
[λ0λ1λ2λ3]1=[λ0]1×[λ1]1×[λ2]1×[λ3]1,
[α0α1α2α3λ0λ1λ2λ3]3=[α0λ0]3×[α1λ1]3×[α2λ2]3×[α3λ3]3
[β0β1β2β3λ0λ1λ2λ3]5=[β0λ0]5×[β1λ1]5×[β2λ2]5×[β3λ3]5
[γ0γ1γ2γ3λ0λ1λ2λ3]7=[γ0λ0]7×[γ1λ1]7×[γ2λ2]7×[γ3λ3]7
(処理3′(16))
S0はα0,0×α1,0×α2,0×α3,0,β0,0×β1,0×β2,0×β3,0,γ0,0×γ1,0×γ2,0×γ3,0を計算する。また、λ′0=λ0,0×λ1,0×λ2,0×λ3,0を計算する。
(処理3′(17))
S1はα0,1×α1,1×α2,1×α3,1,β0,1×β1,1×β2,1×β3,1,γ0,1×γ1,1×γ2,1×γ3,1を計算してS0に送る。また、λ′1=λ0,1×λ1,1×λ2,1×λ3,1を計算する。
(処理3′(18))
S0は以下を計算し、S1に送る。
α
0α
1α
2α
3=α
0,0α
1,0α
2,0α
3,0×α
0,1α
1,1α
2,1α
3,1,
β
0β
1β
2β
3=β
0,0β
1,0β
2,0β
3,0×β
0,1β
1,1β
2,1β
3,1,
γ
0γ
1γ
2γ
3=γ
0,0γ
1,0γ
2,0γ
3,0×γ
0,1γ
1,1γ
2,1γ
3,1
(処理3′(19))
S
0は以下を計算する。ただし、λ=λ
0λ
1λ
2λ
3とする。
(処理3′(21))
S0は0を(3,4)Shamir法で秘密分散した[00]jを計算し、以下を計算してR0,1とR0,3をS1に送る。ただし、ai,jは4次式を2次式に変換する行列Aにおける位置i,jにおける要素である。
R0,0=a0,0×[λ]0+a2,0×[λ]2+a4,0×[λ]4+a6,0×[λ]6+[00]0,
R0,1=a0,1×[λ]0+a2,1×[λ]2+a4,1×[λ]4+a6,1×[λ]6+[00]1,
R0,2=a0,2×[λ]0+a2,2×[λ]2+a4,2×[λ]4+a6,2×[λ]6+[00]2,
R0,3=a0,3×[λ]0+a2,3×[λ]2+a4,3×[λ]4+a6,3×[λ]6+[00]3,
(処理3′(22))
S1は0を(3,4)Shamir法で秘密分散した[01]jを計算し、以下を計算してR1,0とR1,2をS0に送る。
R1,0=a1,0×[λ]1+a3,0×[λ]3+a5,0×[λ]5+a7,0×[λ]7+[01]0,
R1,1=a1,1×[λ]1+a3,1×[λ]3+a5,1×[λ]5+a7,1×[λ]7+[01]1,
R1,2=a1,2×[λ]1+a3,2×[λ]3+a5,2×[λ]5+a7,2×[λ]7+[01]2,
R1,3=a1,3×[λ]1+a3,3×[λ]3+a5,3×[λ]5+a7,3×[λ]7+[01]3,
(処理3′(23))
S0は[λ]0=R0,0+R1,0,[λ]2=R0,2+R1,2を(3,4)Shamir法における分散値とし、(2,2)Shamir法で秘密分散した[00]jを計算して以下を計算する。S0はR′0,1をS1に送る。ただし、a′i,jは2次式を1次式に変換する行列A’における位置i,jにおける要素である。
R′0,0=a′0,0×[λ]0+a′2,0×[λ]2+[00]0,
R′0,1=a′0,1×[λ]0+a′2,1×[λ]2+[00]1,
(処理3′(24))
S1は[λ]1=R0,1+R1,1,[λ]3=R0,3+R1,3を(3,4)Shamir法における分散値とし、(2,2)Shamir法で秘密分散した[00]jを計算して以下を計算する。S1はR′1,0をS0に送る。
R′1,0=a′1,0×[λ]1+a′3,0×[λ]3+[01]0,
R′1,1=a′1,1×[λ]1+a′3,1×[λ]3+[01]1,
(処理3′(25))
S0は[λ]0=R′0,0+R′1,0を(2,2)Shamir法における分散値とし、{λ}0=([λ]0,λ′0)を変換用乱数とする。
(処理3′(26))
S1は[λ]1=R′0,1+R′1,1を(2,2)Shamir法における分散値とし、{λ}1=([λ]1,λ′1)を変換用乱数とする。
変換用乱数生成3においてu=2,k=2であれば、(7)においてα0α1が復元されるが、入力者が1台のマシンを観察できれば、それから自らが入力した例えばα0でα0α1を割った結果がもう一人の入力者のα1であることがわかる。よって、もう一人の入力者の秘密情報はα1で秘匿されているが、それが解除され2つの分散値が判るため秘密情報λ1が復元され漏洩する。入力者が3人以上であればα0α1α2が復元されるが、残りの乱数を分解できないため各入力者の秘密情報は漏洩しない。ただし、u=2としたい場合、一人の入力者が入力者0,1となり、もう一人の入力者が入力者2,3となって4つの秘密情報及び乱数を用いれば、例えば入力者0,1は入力者2,3のα2α3を分解できないので、個別の秘密情報は漏洩しない。よって、マシンS0,S1が各々入力者0,1及び入力者2,3となれば変換用乱数をマシン間で自動的に生成できる。逆に、u>4であっても、(1)~(4)の処理を各入力者が行うことにより実現できることは明らかである。また例えば、u=3,t=4,k=3として入力者i(i=0,1,2)は秘密情報λiを(3,12)Shamir法で秘密分散し、3つの分散値を乗算して(7,12)Shamir法に対応する乗算結果を得るが、1回次数変換処理を行えば(4,6)Shamir法に対応する変換用乱数を得ることができる。この(4,6)Shamir法に対応する変換用乱数を各マシンが1つずつ持つことにより(4,4)Shamir法に対応する変換用乱数とできる。よって、演算を行うマシン数tとkは同じとする必要はなく、最終的に設定されるkも当初のkと変えることができる。また、(9)~(10)の次数変換を行う回数もu,t,kの設定及び最終的に必要な分散式の次数により異なる。変換用乱数生成3’においてu=4とする理由は上記よりu>2である必要があり、u=3,t=k=2であれば乗算結果はu(k-1)より3次式となり、半減できないためである。
また、変換用乱数生成の安全性としては以下が言える。変換用乱数生成3’において、例えばS0は一つの秘密情報λ3について[λ3]0,[α3λ3]2,[β3λ3]4,[γ3λ3]6と4個の分散値を持つが、これらは異なる乱数がかけられているため、k=2であっても解くことができない。また、処理3′(19)、(20)において乱数が外され、例えばS0は[λ]0,[λ]2,[λ]4,[λ]6の4個の分散値を持つが、この分散値は分散値同士の乗算結果であるので、5個集めなければ解けない。また、(23)において次数が半減され3個集めればよくなるが、S0は[λ]0,[λ]2の2個しか持たない。最後に、もう1度次数削減され、2個集めればよくなるが、S0は[λ]0しか持たないので解けない。よって、この手法によって生成された変換用乱数の値は二人以上の入力者が結託しないならば、誰も知らない値となる。よって、この手法は情報理論的安全性をもつといえる。ただし上記において、行列AとA’の積をA”としてその各要素をかけて2回の次数変換を1回にしてもよい。
以下では上記変換用乱数生成処理によって、変換用乱数
が事前に準備されているとする。
[分散3]
次に、入力者装置12AのCPU22における分散部42が実行する分散3を、図23を参照して説明する。
ステップ402で、分散部42は、k個の乱数α0、α1、・・・、αk-1を生成する。
ステップ404で、分散部42は、以下を計算する。
α(a+1)=α×(a+1)(α=α0α1・・・αk-1)
ステップ406で、分散部42は、α=α0α1・・・αk-1を構成する乱数αiを対応するマシン14Niに送信する。
入力者装置12B、12Cも、図23と同様の処理を実行する。例えば、ステップ404では、入力者装置12B、12Cの分散部42はそれぞれ、β0、β1、・・・、βk-1、γ0、γ1、・・・、γk-1を生成し、以下を計算する。
β(b+1)=β×b(β=β0β1・・・βk-1)
γ(c+1)=γ×c(γ=γ0γ1・・・γk-1)
αi、βi、γi(i=0、・・・、k-1)を秘密分散して、必要時にマシンSiがαi、βi、γiを復元してもよい。
[秘匿積和演算3]
次に、マシン14N0~14Nn-1のCPU22における秘匿積和演算部44が実行する秘匿積和演算3を、図24を参照して説明する。
ステップ412で、秘匿積和演算部44は、以下を計算する。
[φωαβ(a+1)(b+1)]i=α(a+1)×β(b+1)×[φ]i
[εηα(a+1)]i=α(a+1)×[ε]i
[λμβ(b+1)]i=β(b+1)×[μ]i
[τργ(c+1)]i=γ(c+1)×[ρ]i
ステップ414で、秘匿積和演算部44は、乱数δj∈Z/pZを生成する。
ステップ416で、秘匿積和演算部44は、以下を計算し、ステップ418で、秘匿積和演算部44は、以下の計算値を、予め定めたマシン14N0に送信する。
予め定めたマシン14N0は、以下を計算し、他のマシンに送信するので、ステップ420で、秘匿積和演算部44は、以下の計算値を受信する。
ステップ422で、秘匿積和演算部44は、以下を計算する。
ステップ424で、秘匿積和演算部44は、δjを保存する。
δjをSjが秘密分散して、権限をもつ復元者が必要時に復元してもよい。
演算結果を得るには復元者装置18の復元部242は[δ(ab+c)]iをk個集めて復元し、保存しているδiを集めて、復元したδで割れば積和演算結果であるab+cが得られる。
また、秘匿積和演算においてc=0とすれば秘匿乗算となり、a=1とすれば秘匿加算となる。また、ステップ422のγ(c+1)の前の+を-とすれば秘匿減算となる。
(秘匿除算3)
また、秘匿除算は以下のように行う。ただし、分散3においてマシン14Niは徐算用の分散値[α′a]iとα′を構成するα′iをもつとする。
予め定められたマシン14N0は、k台のサーバより[α′a]iを収集し、一時的にα′aを復元する。このとき、α′a=0となった場合、除数が0であるので演算を中止する。α′a=0でない場合、マシン14N0は、1/α′aを計算し、他のマシンに送信する。その後、積和演算3において1/α′aをα(a+1)として扱うことによって、秘匿除算が実行される。ただし、1/α′aは1が加えられていないので、ステップ422でμβ(b+1)を削減する処理は省略される。
演算の連続及び演算の秘匿も第1の実施の形態と同様に実現できることは明らかである。また、変換用乱数は誰も知らないので、攻撃者となる1入力の入力者と復元者が結託した場合でも秘密情報にかけられた乱数を知ることができず、TUS方式の問題点で説明した解析ができなくなり、利害関係が対立する入出力者間であっても情報理論的に安全な秘匿積和演算が実現される。
第3の実施の形態によって多くの人または組織が協力してNNマシンの学習などを実現することができる。これによって、各入力者装置の入力情報は他の入力者装置及び復元者装置に漏えいせず、その学習結果などを公開できるようになる。また、第3の実施の形態は最小n=k=2台のNNマシンによって実現でき、少なくとも1つのNNマシンの情報が漏えいしなければ安全であり、一般のビッグデータへの応用が可能である。よって、第3の実施の形態によって、TUS方式で実現できなかった積和演算を含むどのような場合にも適用できる安全な秘匿演算を実現する。
<第4の実施の形態>
第4の実施の形態の構成は、図25に示すように、第3の実施の形態の構成(図18)と同様の構成があるので、同一部分には同一の符号を付して、その説明を省略し、異なる部分を説明する。第4の実施の形態では、演算支援装置16を備えている。第4の実施の形態における入力者装置12A0~12C0は、演算支援部を備えていない。演算支援装置16が、演算支援部を備えている。第4の実施の形態では、マシン14N0~14Nn-1の内の予め定められた1台のマシン14NN(マシン数N=1、n=k=2)が秘匿演算を行う。ただし、演算支援装置16は後述するように復元処理も行えるので、復元者装置18はなくてもよい。第2の実施の形態と同様に秘密分散に関するn及びkは最小値である2(任意の数を選択できる)として説明する。
入力者装置12A~12Cの各々のCPU22の機能部は、図3に示すように、分散部42を備える。マシン14NNのCPU22の機能部は、図4に示すように、秘匿積和演算部44及び秘匿除算部46を備える。演算支援装置16のCPU22の機能部は、図12に示すように、分散部42と演算支援部150を備える。
第4の実施の形態では、複数の秘密情報の入力者装置12A~12Cと、結果を知る復元者装置18とが異なり、かつ1台の演算支援装置と1台のマシン14NNで秘匿演算を実行する。
第4の実施の形態では、利害が対立する入力者装置12A~12Cの間で1台のマシン14NNによって秘匿計算を実現するために、信頼できる演算支援装置が1台あるとする。また、各入力者装置12A~12Cはその演算支援装置と暗号などを用いた安全な通信路を確保しているとする。
演算支援装置はマシン14N0~14Nn-1に比べて非常に小さな処理でよく、マシン14NNの処理は攻撃者が知ることができるが、演算支援装置の処理は漏えいしないとする。
詳細は後述するが、1台のNNマシンで秘匿計算を行う第2の実施の形態との大きな違いは入力者からの攻撃を想定する点である。第2の実施の形態における入力者は全ての情報を知るため攻撃する必要はなく、NNマシン及びそれを観察できる者だけが攻撃者であった。それに対して、本実施の形態における入力者は部分的な情報しか知らず、他の入力者及び演算結果を知るための攻撃を行う可能性がある、よって、積和演算自体を入力者から秘匿するため、1のような定数ではなく、第1の乱数a1を秘密情報に加算して第2の乱数αを乗じたα(a+a1)を公開する。これによって、入力者による攻撃を防ぐ。
[分散4]
各入力者装置12A~12Cから安全な通信路を介して得た秘密情報a,b,cに対する演算支援装置のCPU22における分散部42が実行する分散4を、図26を参照して説明する。
ステップ432で、分散部42は、乱数α、β、γと乱数a1、b1、c1を生成する。
ステップ434で、分散部42は、以下を計算する。
α(a+a1)=α×(a+a1)
β(b+b1)=β×(b+b1)
γ(c+c1)=γ×(c+c1)
ステップ436で、分散部42は、α(a+a1)、β(b+b1)、及びγ(c+c1)を、1台のマシン14NNに送信する。
ステップ438で、分散部42は、乱数δ0、δ1を生成する。
ステップ440で、分散部42は、δ0/αβ、δ0b1/α、δ0a1/β、δ0/γを計算する。
ステップ442で、分散部42は、δ0/αβ、δ0b1/α、δ0a1/β、δ0/γの秘密分散における以下の分散値[δ0/αβ]0、[δ0b1/α]0、[δ0a1/β]0、[δ0/γ]0と[δ0/αβ]1、[δ0b1/α]1、[δ0a1/β]1、[δ0/γ]1を計算する。
ステップ444で、分散部42は、以下の計算(δ=δ0δ1)をする。
[δ/αβ]1=δ1[δ0/αβ]1
[δb1/α]1=δ1[δ0b1/α]1
[δa1/β]1=δ1[δ0a1/β]1
[δ/γ]1=δ1[δ0/γ]1
ステップ446で、分散部42は、[δ0/αβ]0、[δ0b1/α]0、[δ0a1/β]0、[δ0/γ]0と[δ/αβ]1、[δb1/α]1、[δa1/β]1、[δ/γ]1を1台のマシン14NNに送信する。
[積和演算4]
次に、マシン14NNのCPU22における秘匿積和演算部44が実行する積和演算4を、図27を参照して説明する。
ステップ452で、秘匿積和演算部44は、以下の計算をする。
[δ0{(ab+c)-(a1b1-c1)}]0=α(a+a1)×β(b+b1)×[δ0/αβ]0-α(a+a1)×[δ0b1/α]0-β(b+b1)×[δ0a1/β]0+γ(c+c1)×[δ0/γ]0
[δ{(ab+c)-(a1b1-c1)}]1=α(a+1)×β(b+1)×[δ/αβ]1-α(a+1)×[δb1/α]1-β(b+1)×[δa1/β]1+γ(c+1)×[δ/γ]1
[演算支援4]
次に、演算支援装置16のCPU22における演算支援部が実行する演算支援4を、図28を参照して説明する。
ステップ462で、演算支援部は、[δ0{(ab+c)-(a1b1-c1)}]0と[δ{(ab+c)-(a1b1-c1)}]1を収集する。
ステップ464で、演算支援部は、以下を計算する。
[δ{(ab+c)-(a1b1-c1)]0=δ1[δ0{(ab+c)-(a1b1-c1)}]0
ステップ466で、演算支援部は、[δ{(ab+c)-(a1b1-c1)}]0と[δ{(ab+c)-(a1b1-c1)}]1からδ{(ab+c)-(a1b1-c1)を復元する。
ステップ468で、演算支援部は、δ(ab+c+d1)を計算する。ここで、d1=(c1-a1b1)としてもよいが、δ{(ab+c)-(a1b1-c1)}にδ(a1b1-c1)を足して、新たに生成した乱数δd1を足してもよい。
ステップ470で、演算支援部は、演算を継続するか否かを判断し、演算を継続しない場合には、ステップ472で、演算支援部は、上記においてδd1を足さずにδで割ることによりab+cを計算する。
演算を継続する場合、分散4の図26のステップ438~444の処理は演算手順が判っていれば事前に実行できる。よって、演算中に行われる必須の演算支援処理は演算支援処理4のみとなる。また、演算支援処理は積和演算毎に実行しなくても必要に応じて実行すればよい。例えば、Σδ0(ai+1)(bi+1)などの処理では演算後に1度演算支援処理をするだけでよい。
[秘匿除算4]
次に、演算支援装置16のCPU22における演算支援部254が実行する秘匿除算4を説明する。本実施の形態における秘匿除算4は、前述した秘匿除算2(図17)において、入力者装置12のCPU22における演算支援部150が実行した処理を、演算支援装置16のCPU22における演算支援部254が実行する点のみが異なるので、その説明を省略する。
第4の実施の形態によって1台のマシン14NNと1台の演算支援装置の組み合わせによって、入力者装置及び復元者装置などの利害関係が対立しても安全な秘匿計算が実現できるようになる。一般に、マシン14NNはその制御を担当するICチップまたは専用の制御装置などとセットで動作する場合が多い。よって、そのICチップまたは専用の制御装置に耐タンパ性を持たせ、第4の実施の形態による演算支援機能を追加すれば、大きなシステム変更を伴わず本実施の形態が実現できる。すなわち、マシン14NNは高速演算器として動作し、その動作を観察されてもICチップまたは制御装置が安全であれば、入力情報や解こうとする問題が漏えいしないシステムが構成できる。ただし、演算支援装置16は第2の実施の形態における1個の入力者装置と同様に全ての情報を知るので、演算支援装置16が解析されると秘密情報及び秘匿演算結果が漏洩する。
<第5の実施の形態>
次に、第5の実施の形態を説明する。
第5の実施の形態の構成は、第4の実施の形態の構成(図25参照)と同様であるので、その説明を省略する。
第5の実施の形態において、第4の実施の形態のように演算支援装置を絶対としなくても第3の実施の形態のような安全性が実現できる手法を考える。第4の実施の形態においては演算支援装置が解析できれば、全ての秘密情報が漏洩する。これは、演算支援装置が第2の実施の形態における入力者のように全ての情報を1元的に管理するためである。これに第3の実施の形態の要素を加え、秘密分散における処理量がNNマシンは大きく演算支援装置は小さいという特徴を生かしながら、1台のマシン14NNと演算支援装置の両方を解析しなければ秘密情報が漏洩しないようにすることが課題である。第5の実施の形態においてもN=1,n=k=2として説明する。
第4の実施の形態では演算支援装置は全ての秘密情報を知るため、演算支援装置だけ攻撃できれば全秘密情報が漏えいする。そこで、第4の実施の形態のように利害が対立する入力者装置間でも1台のマシンで演算可能で、かつ第3の実施の形態のように1台のマシンと演算支援装置の2つが解析されない限り安全な実施の形態を示す。また、第3の実施の形態と同様に変換用乱数を生成するが、演算支援装置は信頼できるとするので、第1の実施の形態の(1-2)と同等に変換用乱数は演算支援装置が生成する。よって、分散5において変換用乱数{μ′}i、{ν′}i、{ε′}i、{ρ′}i、{ω′}iは準備されているとする。
[分散5]
分散5を、入力者装置12Aの分散5のプログラムのフローチャート(図29A)、入力者装置12Bの分散5のプログラムのフローチャート(図29B)、入力者装置12Cの分散5のプログラムのフローチャート(図29C)、演算支援装置16の分散5のプログラムのフローチャート(図29D)、マシン14NNの分散5のプログラムのフローチャート(図29E)、及び分散5のシーケンス図(図29F)を参照して説明する。
(分散5(1))
入力者装置12Aは乱数α′0、α′1を生成して以下を計算してα′(a+1)をマシン14NNと演算支援装置16に送信し、マシン14NNにα′0を送信し、演算支援装置16にα′1を送信する(図29Aのステップ502A~508A、図29Dのステップ512、図29Eのステップ552も参照)。
α′=α′0×α′1、 α′(a+1)=α′×(a+1)
入力者装置12Bは乱数β′0、β′1を生成して以下を計算してβ′(b+1)をマシン14NNと演算支援装置16に送信し、マシン14NNにβ′0を送信し、演算支援装置16にβ′1を送信する(図29Bのステップ502B~508B、図29Dのステップ514、図29Eのステップ554も参照)。
β′=β′0×β′1、 β′(b+1)=β′×(b+1)
入力者装置12Cは乱数γ′0、γ′1を生成して以下を計算してγ′(c+1)をマシン14NNと演算支援装置16に送信し、マシン14NNにγ′0を送信し、演算支援装置16にγ′1を送信する(図29Cのステップ502C~508C、図29Dのステップ516、図29Eのステップ556も参照)。
γ′=γ′0×γ′1、 γ′(c+1)=γ′×(c+1)
α′i、β′i、γ′i(i=0、・・・、k-1)を秘密分散して、必要時にマシン14NN及び演算支援装置16がα′i、β′i、γ′iを復元してもよい。
(分散5(2))
マシン14NNは、2以上の乱数a00、a01を生成し、a0=a00×a01を計算して、a0からa0′=a0-1を計算し、乱数ξa0、0、ξa0.1とξ′a0、0、ξ′a0.1を生成して、ξa0=ξa0、0×ξa0.1、ξ′a0=ξa0×a0を計算し、ξ′a0×a0′と、ξa0.1、ξ′a0、1、a01を演算支援装置16に送信する(図29Eのステップ558~568、図29Dのステップ518参照)。
(分散5(3))
演算支援装置16は、0でない乱数a10、a11、ξa1、0、ξa1.1を生成してa1=a10×a11、ξa1=ξa1、0×ξa1.1を計算してξa1×a1とξa1、0をマシン14NNに送信する(図29Dのステップ520~524、図29Eのステップ570参照)。
マシン14NNは乱数α0、α′0を生成し(図29Eのステップ572参照)、演算支援装置16は乱数α1、α′1を生成し(図29Dのステップ526)、マシン14NNは、以下を計算し(図29Eのステップ574)、演算支援装置16は以下を計算し、マシン14NNに送る(図29Dステップ528、図29Eのステップ576参照)(以降、マシン14NNはi=0、演算支援装置16はi=1に対応する計算を行う)。
(分散5(4))
マシン14NNは、
をi=0,1について掛け合わせ、(A)、(B)、(C)、(D)、(E)、即ち、それぞれ
を計算して、演算支援装置16に送る(図29Eのステップ578、580、図29Dのステップ530参照)。
(分散5(5))
マシン14NNはi=0に対応する下記式を計算し(図29Eのステップ582)、演算支援装置16はi=1に対応する下記式を計算する(図29Dのステップ532)。ただし、a0+a1=a2とする。
(分散5(6))
演算支援装置16はi=1に対応する[α″a2]1、[α(a+a2)]1をマシン14NNに送信し(図29Dのステップ534、図29Eのステップ584参照)、マシン14NNはα″a2、α(a+a2)を復元する(図29Eのステップ586参照)。
(分散5(7))
マシン14NNと演算支援装置16は分散5(1)~(6)をb、cに対しても実行し、β(b+b2)、β″b2、γ(c+c2)、γ″c2を得る(図29Dのステップ536、図29Eのステップ588、図29A~29Cも参照)。
(分散5(8))
演算支援装置16は乱数χと乱数ε、τ、ω、λ、κ、ζを生成して、ε、τ、ω、λ、κ、ζを秘密分散して以下を計算し、変換用乱数{ε}、{τ}、{ω}、{λ}、{κ}、{ζ}をマシン14N0に送る(図29Dのステップ540、542参照)。
[χε]1=χ×[ε]1
[χτ]1=χ×[τ]1
[χφω]1=χ×[φ]1
[χλ]1=χ×[λ]1
[χκ]1=χ×[κ]1
[χζ]1=χ×[ζ]1
{ε}=([ε]0、[χε]1、ε0)
{ρ}=([ρ]0、[χρ]1、ρ0)
{ω}=([ω]0、[χω]1、ω0)
{μ}=([μ]0、[χμ]1、μ0)
{ν}=([ν]0、[χν]1、ν0)
{ζ}=([ζ]0、[χζ]1、ζ0)
第3の実施の形態で説明した複数の入力者による変換用乱数生成3’を用いて変換用乱数が生成されている場合、S1に相当する演算支援装置16が最終結果である例えば[ε]1とε1を得、S0に相当するマシン14N0が[ε]0とε0を既に得ている。この場合、演算支援装置16はステップ538の乱数生成を省略でき、ステップ540の処理を行った後、ステップ542において例えば[χε]1のみをマシン14N0に送ればよい(他のτ、ω、λ、κ、ζも同様)。
[秘匿積和演算5]
次に、マシン14NNのCPU22における秘匿積和演算部44が実行する秘匿積和演算5と、演算支援装置16のCPU22における演算支援部150が実行する演算支援5とをそれぞれ、図30、図31を参照して説明する。
図30のステップ602で、マシン14NNの秘匿積和演算部44は、乱数δ0∈Z/pZを生成する。
図31のステップ612で、演算支援装置16の演算支援部150は、乱数δ1∈Z/pZを生成する。
図30のステップ604で、マシン14NNの秘匿積和演算部44は、i=0として以下を計算する。
を送信する。
図31のステップ614で、演算支援装置16の演算支援部150は、i=1として以下を計算して、ステップ616でマシン14NNに送る。
図30のステップ606で、マシン14NNのCPU22における秘匿積和演算部44は、上記2つの式(i=0,1)を掛け合わせ、以下を計算する。
図30のステップ608で、マシン14NNのCPU22における秘匿積和演算部44は、以下を計算する。
[演算支援処理5]
次に、演算支援装置16のCPU22における演算支援部150が実行する演算支援処理5を、図32を参照して、説明する。
ステップ622で、演算支援部150は、[δ0(ab+c)]0と[δ(ab+c)]1を収集する。
ステップ624で、演算支援部150は、以下を計算する。
[δ{(ab+c)]0=δ1[δ0(ab+c)]0
ステップ626で、演算支援部150は、[δ(ab+c)]0と[δ(ab+c)]1からδ(ab+c)を復元する。
演算を継続する場合、マシン14N0と演算支援装置16は新たにa0、a1に相当する乱数を生成し、それらを秘匿加算したものを新たなα″a2、さらに復元したδ(ab+c)とα″a2を秘匿加算したものを新たなα(a+a2)とすればよい。
秘匿徐算はa2を秘匿徐算4におけるa1とすれば、同様に実現可能である。
本実施の形態において演算支援装置16は秘密情報a,b,cを知らず、それらを復元することなく、演算支援装置16はとマシン14NNによって生成された乱数の秘匿加算を行い、入力者が知らない第1の乱数の加算と第2の乱数の乗算を行う。よって、攻撃者が演算支援装置16を攻撃しただけでは秘密情報は漏洩せず、マシン14NNも一緒に解析しなければ秘密情報は漏洩しない。よって、第5の実施の形態によって演算支援装置のみが解析されても安全なシステムが構築できる。
また、第2、第4の実施の形態において演算を継続する場合、入力者装置12は新たなα,β,γに対して新たなδ0を生成し、δ0/αβ、δ0/α、δ0/β、δ0/γを計算する必要があるが、本実施の形態と同様に、例えば{ε}=([ε]0、[χε]1、ε0)となる変換用乱数をマシン14NNに送り(他の変換用乱数も同様)、秘匿積和演算2及び4において秘匿積和演算5と同様の演算を行えば、演算を継続するためにδ0/αβ、δ0/α、δ0/β、δ0/γを演算中に計算する必要がなくなる(ただし、図30でa0=b0=0、α″=β″=γ″=0であり、第2の実施の形態のみa1=b1=c2=1とする。それに伴いa0、b0等に関する図30、31の演算は省略される)。すなわち、{ε}=([ε]0、[χε]1、ε0)の形式の変換用乱数が事前に準備されていればよい。
第1の実施の形態~第5の実施の形態では、秘匿演算するマシンが1台または2台を例として説明されたが、1台または2台のマシンを用いて秘匿計算を行う場合に汎用的に用いることができる。
以上より、秘匿演算するマシンが1台の場合、入力者装置が1台であれば第2の実施の形態が最も高速であり、複数台であり演算支援装置が耐タンパ性を有していれば第4の実施の形態が、複数名であり演算装置も解析される可能性がある場合、第5の実施の形態が推奨される。
また、秘匿演算するマシンを2台利用できる場合、入力者装置が1台であれば第1の実施の形態が最も高速であり、複数台であれば第3の実施の形態が推奨される。