(57)【要約】  秘密計算において高速な右シフト演算および除算を実現する。公開値倍部１１は値aの分散値[a]から[a']=[2ua]を計算する。第一変換部１２は[a']を加法的秘密分散に変換する。右シフト演算部１３は
i=<a'>i≫b+uを計算する。第二変換部１４は
を線形秘密分散に変換する。第一ビット変換部１５は<a'>iの下位uビットを{a'i mod 2u}に変換する。商転移部１６は-Σi<m{a'imod 2u}の下位uビットを{q}として得る。第二ビット変換部１７は<a'>iの下位b+uビットを{a'iR}={a'i mod 2b+u}に変換する。加算部１８は{z}=Σi<m{a'iR}+{q}を計算し、{z}のb+uビット目以降のビット列{zQ}を得る。第三変換部１９は{q}, {zQ}を線形秘密分散に変換する。出力計算部２０は[s]-[2l-(b+u)q]+[zQ]を[a≫b]として出力する。
2020075797.tif 000002
【特許請求の範囲】
【請求項１】
[・]は値・を第一の秘密分散で分散した分散値であり、<・>は値・を加法的秘密分散で分散した分散値であり、{・}は値・のビット表現を分散した分散値であり、上記分散値[・]と上記分散値<・>とは相互に変換可能であり、aは任意の値であり、bはシフト量であり、mは3以上の分散数であり、uはlog m以上の整数であり、lは値aのビット数であり、≫は右シフト演算子であり、
m台の秘密計算装置を含み、値aの分散値[a]とシフト量bとを入力とし、値aをbビット右シフトした値の分散値[a≫b]を計算する秘密右シフト演算システムであって、
上記秘密計算装置は、
上記分散値[a]を用いて分散値[a']=[2ua]を計算する公開値倍部と、
上記分散値[a']を加法的秘密分散の分散値<a'>=<a'>0, …, <a'>m-1に変換する第一変換部と、
0以上m未満の各整数iについて、
i=<a'>i≫b+uを計算し、分散値
=
0, …, 
m-1を生成する右シフト演算部と、
上記分散値
を第一の秘密分散の分散値[s]に変換する第二変換部と、
0以上m未満の各整数iについて、上記分散値<a'>のシェア<a'>iの下位uビットをビット表現の分散値{a'i mod 2u}に変換する第一ビット変換部と、
上記分散値{a'i mod 2u}を用いて-Σi<m{a'imod 2u}の下位uビットを計算し、ビット表現の分散値{q}として得る商転移部と、
上記分散値{q}を第一の秘密分散の分散値[q]に変換する第三変換部と、
上記分散値[s], [q]を用いて[s]-[2l-(b+u)q]+1を計算し、上記分散値[a≫b]として得る出力計算部と、
を含む秘密右シフト演算システム。
【請求項２】
請求項１に記載の秘密右シフト演算システムであって、
上記秘密計算装置は、
0以上m未満の各整数iについて、上記シェア<a'>iの下位b+uビットをビット表現の分散値{a'iR}={a'imod 2b+u}に変換する第二ビット変換部と、
上記分散値{a'iR}, {q}を用いてビット表現の分散値{z}=Σi<m{a'iR}+{q}を計算し、上記分散値{z}のb+uビット目以降のビット列を分散値{zQ}として得る加算部と、
をさらに含み、
上記第三変換部は、上記分散値{q}, {zQ}を第一の秘密分散の分散値[q], [zQ]に変換するものであり、
上記出力計算部は、上記分散値[s], [q], [zQ]を用いて[s]-[2l-(b+u)q]+[zQ]を計算し、上記分散値[a≫b]として得るものである、
秘密右シフト演算システム。
【請求項３】
pは素数であり、[・]は値・をシェア数が3である第一の秘密分散で分散した分散値であり、<・>は値・をシェア数が2である加法的秘密分散で分散した分散値であり、上記分散値[・]と上記分散値<・>とは相互に変換可能であり、aは被除数であり、dは除数であり、/は小数点以下を切り捨てる除算を表す演算子であり、
3台の秘密計算装置を含み、被除数aの分散値[a]と除数dとを入力とし、被除数aの除数dによる小数点以下切り捨ての除算結果a/dの分散値[a/d]を計算する秘密除算システムであって、
上記秘密計算装置は、
上記分散値[a]を上記加法的秘密分散の分散値<a>=<a>0, <a>1に変換する入力変換部と、
上記分散値[a]と上記除数dを用いて分散値<a'>=<2a>と値d'=2dを計算する公開値倍部と、
上記分散値<a'>を用いて値a'の素数pによる商qの分散値<q>を得る商転移部と、
素数pの値d'による商p'と剰余r'を得る公開除算部と、
上記分散値<a'>と上記値d'と上記剰余r'を用いて、<b>0=(<a'>0+d'-1-r')/d', <b>1=<a'>1/d'を計算し、分散値<b>=<b>0, <b>1を生成する近似部と、
上記分散値<b>, <q>と上記商p'を用いて、<b>-(p'+1)<q>+1を計算し、上記除算結果a/dの分散値<a/d>として得る出力計算部と、
上記分散値<a/d>を上記第一の秘密分散の分散値[a/d]に変換する出力変換部と、
を含む秘密除算システム。
【請求項４】
pは素数であり、[・]は値・をシェア数がmである第一の秘密分散で分散した分散値であり、<・>は値・をシェア数がmである加法的秘密分散で分散した分散値であり、上記分散値[・]と上記分散値<・>とは相互に変換可能であり、aは被除数であり、dは除数であり、mは3以上の分散数であり、uはlog m以上の整数であり、/は小数点以下を切り捨てる除算を表す演算子であり、
m台の秘密計算装置を含み、被除数aの分散値[a]と除数dとを入力とし、被除数aの除数dによる小数点以下切り捨ての除算結果a/dの分散値[a/d]を計算する秘密除算システムであって、
上記秘密計算装置は、
上記分散値[a]を上記加法的秘密分散の分散値<a>=<a>0, …, <a>m-1に変換する入力変換部と、
上記分散値[a]と上記除数dを用いて分散値<a'>=<2ua>と値d'=2udを計算する公開値倍部と、
上記分散値<a'>を用いて値a'の素数pによる商qの分散値<q>を得る商転移部と、
素数pの値d'による商p'と剰余r'を得る公開除算部と、
r'≧d'/2ならばz=1を設定し、r'<d'/2ならばz=0を設定したフラグzを得るフラグ設定部と、
0以上m未満の各整数iについて、i=0であれば<b>i=(<a'>i+(d'-r')+(d'-r')/2)/d'を計算し、i≠0であれば<b>i=<a'>i/d'を計算し、分散値<b>=<b>0, …, <b>m-1を生成する近似部と、
0以上m未満の各整数iについて、上記分散値<b>のシェア<b>jを値d'で割った商p"と剰余r"が、r"≦d'/2-1であれば<b'>i=<p">を計算し、r"≧d'/2であれば<b'>i=<p"+1>を計算し、分散値<b'>=<b'>0, …, <b'>m-1を得る端数処理部と、
上記分散値<b'>, <q>と上記商p'と上記フラグzを用いて、<b'>-(p'+z)<q>-1を計算し、上記除算結果a/dの分散値<a/d>として得る出力計算部と、
上記分散値<a/d>を上記第一の秘密分散の分散値[a/d]に変換する出力変換部と、
を含む秘密除算システム。
【請求項５】
請求項３または４に記載の秘密除算システムであって、
μ<0, M≧0とし、aはμ≦a≦Mを満たし、
上記入力変換部は、-μ≦wd≦2|p|-uを満たすwを計算し、上記分散値[a]を分散値[wd+a]で更新するものであり、
上記出力変換部は、変換後の分散値[a/d]からwを減算した結果を上記分散値[a/d]として出力するものである、
秘密除算システム。
【請求項６】
[・]は値・を第一の秘密分散で分散した分散値であり、<・>は値・を加法的秘密分散で分散した分散値であり、{・}は値・のビット表現を分散した分散値であり、上記分散値[・]と上記分散値<・>とは相互に変換可能であり、aは任意の値であり、bはシフト量であり、mは3以上の分散数であり、uはlog m以上の整数であり、lは値aのビット数であり、≫は右シフト演算子であり、
m台の秘密計算装置を含み、値aの分散値[a]とシフト量bとを入力とし、値aをbビット右シフトした値の分散値[a≫b]を計算する秘密右シフト演算システムが実行する秘密右シフト演算方法であって、
上記秘密計算装置の公開値倍部が、上記分散値[a]を用いて分散値[a']=[2ua]を計算し、
上記秘密計算装置の第一変換部が、上記分散値[a']を加法的秘密分散の分散値<a'>=<a'>0, …, <a'>m-1に変換し、
上記秘密計算装置の右シフト演算部が、0以上m未満の各整数iについて、
i=<a'>i≫b+uを計算し、分散値
=
0, …, 
m-1を生成し、
上記秘密計算装置の第二変換部が、上記分散値
を第一の秘密分散の分散値[s]に変換し、
上記秘密計算装置の第一ビット変換部が、0以上m未満の各整数iについて、上記分散値<a'>のシェア<a'>iの下位uビットをビット表現の分散値{a'i mod 2u}に変換し、
上記秘密計算装置の商転移部が、上記分散値{a'imod 2u}を用いて-Σi<m{a'imod 2u}の下位uビットを計算し、ビット表現の分散値{q}として得、
上記秘密計算装置の第三変換部が、上記分散値{q}を第一の秘密分散の分散値[q]に変換し、
上記秘密計算装置の出力計算部が、上記分散値[s], [q]を用いて[s]-[2l-(b+u)q]+1を計算し、上記分散値[a≫b]として得る、
秘密右シフト演算方法。
【請求項７】
pは素数であり、[・]は値・をシェア数が3である第一の秘密分散で分散した分散値であり、<・>は値・をシェア数が2である加法的秘密分散で分散した分散値であり、上記分散値[・]と上記分散値<・>とは相互に変換可能であり、aは被除数であり、dは除数であり、/は小数点以下を切り捨てる除算を表す演算子であり、
3台の秘密計算装置を含み、被除数aの分散値[a]と除数dとを入力とし、被除数aの除数dによる小数点以下切り捨ての除算結果a/dの分散値[a/d]を計算する秘密除算システムが実行する秘密除算方法であって、
上記秘密計算装置の入力変換部が、上記分散値[a]を上記加法的秘密分散の分散値<a>=<a>0, <a>1に変換し、
上記秘密計算装置の公開値倍部が、上記分散値[a]と上記除数dを用いて分散値<a'>=<2a>と値d'=2dを計算し、
上記秘密計算装置の商転移部が、上記分散値<a'>を用いて値a'の素数pによる商qの分散値<q>を得、
上記秘密計算装置の公開除算部が、素数pの値d'による商p'と剰余r'を得、
上記秘密計算装置の近似部が、上記分散値<a'>と上記値d'と上記剰余r'を用いて、<b>0=(<a'>0+d'-1-r')/d', <b>1=<a'>1/d'を計算し、分散値<b>=<b>0, <b>1を生成し、
上記秘密計算装置の出力計算部が、上記分散値<b>, <q>と上記商p'を用いて、<b>-(p'+1)<q>+1を計算し、上記除算結果a/dの分散値<a/d>として得、
上記秘密計算装置の出力変換部が、上記分散値<a/d>を上記第一の秘密分散の分散値[a/d]に変換する、
秘密除算方法。
【請求項８】
pは素数であり、[・]は値・をシェア数がmである第一の秘密分散で分散した分散値であり、<・>は値・をシェア数がmである加法的秘密分散で分散した分散値であり、上記分散値[・]と上記分散値<・>とは相互に変換可能であり、aは被除数であり、dは除数であり、mは3以上の分散数であり、uはlog m以上の整数であり、/は小数点以下を切り捨てる除算を表す演算子であり、
m台の秘密計算装置を含み、被除数aの分散値[a]と除数dとを入力とし、被除数aの除数dによる小数点以下切り捨ての除算結果a/dの分散値[a/d]を計算する秘密除算システムが実行する秘密除算方法であって、
上記秘密計算装置の入力変換部が、上記分散値[a]を上記加法的秘密分散の分散値<a>=<a>0, …, <a>m-1に変換し、
上記秘密計算装置の公開値倍部が、上記分散値[a]と上記除数dを用いて分散値<a'>=<2ua>と値d'=2udを計算し、
上記秘密計算装置の商転移部が、上記分散値<a'>を用いて値a'の素数pによる商qの分散値<q>を得、
上記秘密計算装置の公開除算部が、素数pの値d'による商p'と剰余r'を得、
上記秘密計算装置のフラグ設定部が、r'≧d'/2ならばz=1を設定し、r'<d'/2ならばz=0を設定したフラグzを得、
上記秘密計算装置の近似部が、0以上m未満の各整数iについて、i=0であれば<b>i=(<a'>i+(d'-r')+(d'-r')/2)/d'を計算し、i≠0であれば<b>i=<a'>i/d'を計算し、分散値<b>=<b>0, …, <b>m-1を生成し、
上記秘密計算装置の端数処理部が、0以上m未満の各整数iについて、上記分散値<b>のシェア<b>jを値d'で割った商p"と剰余r"が、r"≦d'/2-1であれば<b'>i=<p">を計算し、r"≧d'/2であれば<b'>i=<p"+1>を計算し、分散値<b'>=<b'>0, …, <b'>m-1を得、
上記秘密計算装置の出力計算部が、上記分散値<b'>, <q>と上記商p'と上記フラグzを用いて、<b>-(p'+z)<q>-1を計算し、上記除算結果a/dの分散値<a/d>として得、
上記秘密計算装置の出力変換部が、上記分散値<a/d>を上記第一の秘密分散の分散値[a/d]に変換する、
秘密除算方法。
【請求項９】
請求項１または２に記載の秘密右シフト演算システムもしくは請求項３から５のいずれかに記載の秘密除算システムに含まれる秘密計算装置。
【請求項１０】
請求項９に記載の秘密計算装置としてコンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、秘密計算において右シフト演算および除算を行う技術に関する。
【背景技術】
【０００２】
秘密計算とは、データを秘匿したまま任意の関数を計算する暗号技術である。この特徴を活かして、システム運用者にもデータ利用者にもデータを漏らさないデータ利活用の形態が期待されている。秘密計算にはいくつかの方式が存在し、その中でも秘密分散を構成要素にするものは、データの処理単位が小さく、高速な処理が可能であることが知られている。【０００３】
秘密分散とは、秘密情報をシェアと呼ばれるいくつかの断片に変換する方法である。例えば、秘密の情報からn個のシェアを生成し、k個以上のシェアからは秘密が復元できるが、k個未満のシェアからは秘密の情報が漏れない(k, n)閾値法と呼ばれる秘密分散がある。秘密分散の具体的な構成方法は、Shamir秘密分散や複製秘密分散などが知られている。本明細書では、秘密分散により分散された値の１個の断片を「シェア」と呼ぶ。また、すべてのシェアの集合全体を「分散された値」または「分散値」と呼ぶ。【０００４】
右シフト演算はコンピュータ等での基本的な演算の一つであり、様々な場面で利用されている。例えば、右シフト演算は数値精度を落とす演算として利用することができる。また、除数が２べきの場合の除算は右シフト演算で実現することができる。非特許文献１には、秘密計算において位数２べきの整数環上でシフト演算を行う方法が開示されている。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】D. Bogdanov, M. Niitsoo, T. Toft, and J. Willemson, "High-performance secure multi-party computation for data mining applications," International Journal of Information Security, Volume 11, Issue 6, Pages 403-418, November 2012.
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、非特許文献１に開示された方法は、位数２べきの整数環上でしか利用できないため、体上で乗算などの数値精度を増大させる演算を繰り返すとオーバーフローを起こして計算ができなくなる、という課題がある。【０００７】
この発明の目的は、上記のような技術的課題に鑑みて、高速な右シフト演算および除算を実現する秘密計算技術を提供することである。
【課題を解決するための手段】
【０００８】
上記の課題を解決するために、この発明の第一の態様の秘密右シフト演算システムは、[・]は値・を第一の秘密分散で分散した分散値であり、<・>は値・を加法的秘密分散で分散した分散値であり、{・}は値・のビット表現を分散した分散値であり、分散値[・]と分散値<・>とは相互に変換可能であり、aは任意の値であり、bはシフト量であり、mは3以上の分散数であり、uはlog m以上の整数であり、lは値aのビット数であり、≫は右シフト演算子であり、m台の秘密計算装置を含み、値aの分散値[a]とシフト量bとを入力とし、値aをbビット右シフトした値の分散値[a≫b]を計算する秘密右シフト演算システムであって、秘密計算装置は、分散値[a]を用いて分散値[a']=[2ua]を計算する公開値倍部と、分散値[a']を加法的秘密分散の分散値<a'>=<a'>0, …, <a'>m-1に変換する第一変換部と、0以上m未満の各整数iについて、
i=<a'>i≫b+uを計算し、分散値
=
0, …, 
m-1を生成する右シフト演算部と、分散値
を第一の秘密分散の分散値[s]に変換する第二変換部と、0以上m未満の各整数iについて、分散値<a'>のシェア<a'>iの下位uビットをビット表現の分散値{a'i mod 2u}に変換する第一ビット変換部と、分散値{a'i mod 2u}を用いて-Σi<m{a'i mod 2u}の下位uビットを計算し、ビット表現の分散値{q}として得る商転移部と、分散値{q}を第一の秘密分散の分散値[q]に変換する第三変換部と、分散値[s], [q]を用いて[s]-[2l-(b+u)q]+1を計算し、分散値[a≫b]として得る出力計算部と、を含む。【０００９】
上記の課題を解決するために、この発明の第二の態様の秘密除算システムは、pは素数であり、[・]は値・をシェア数が3である第一の秘密分散で分散した分散値であり、<・>は値・をシェア数が2である加法的秘密分散で分散した分散値であり、分散値[・]と分散値<・>とは相互に変換可能であり、aは被除数であり、dは除数であり、/は小数点以下を切り捨てる除算を表す演算子であり、3台の秘密計算装置を含み、被除数aの分散値[a]と除数dとを入力とし、被除数aの除数dによる小数点以下切り捨ての除算結果a/dの分散値[a/d]を計算する秘密除算システムであって、秘密計算装置は、分散値[a]を加法的秘密分散の分散値<a>=<a>0, <a>1に変換する入力変換部と、分散値[a]と除数dを用いて分散値<a'>=<2a>と値d'=2dを計算する公開値倍部と、分散値<a'>を用いて値a'の素数pによる商qの分散値<q>を得る商転移部と、素数pの値d'による商p'と剰余r'を得る公開除算部と、分散値<a'>と値d'と剰余r'を用いて、<b>0=(<a'>0+d'-1-r')/d', <b>1=<a'>1/d'を計算し、分散値<b>=<b>0, <b>1を生成する近似部と、分散値<b>, <q>と商p'を用いて、<b>-(p'+1)<q>+1を計算し、除算結果a/dの分散値<a/d>として得る出力計算部と、分散値<a/d>を第一の秘密分散の分散値[a/d]に変換する出力変換部と、を含む。【００１０】
上記の課題を解決するために、この発明の第三の態様の秘密除算システムは、pは素数であり、[・]は値・をシェア数がmである第一の秘密分散で分散した分散値であり、<・>は値・をシェア数がmである加法的秘密分散で分散した分散値であり、分散値[・]と分散値<・>とは相互に変換可能であり、aは被除数であり、dは除数であり、mは3以上の分散数であり、uはlog m以上の整数であり、/は小数点以下を切り捨てる除算を表す演算子であり、m台の秘密計算装置を含み、被除数aの分散値[a]と除数dとを入力とし、被除数aの除数dによる小数点以下切り捨ての除算結果a/dの分散値[a/d]を計算する秘密除算システムであって、秘密計算装置は、分散値[a]を加法的秘密分散の分散値<a>=<a>0, …, <a>m-1に変換する入力変換部と、分散値[a]と除数dを用いて分散値<a'>=<2ua>と値d'=2udを計算する公開値倍部と、分散値<a'>を用いて値a'の素数pによる商qの分散値<q>を得る商転移部と、素数pの値d'による商p'と剰余r'を得る公開除算部と、r'≧d'/2ならばz=1を設定し、r'<d'/2ならばz=0を設定したフラグzを得るフラグ設定部と、0以上m未満の各整数iについて、i=0であれば<b>i=(<a'>i+(d'-r')+(d'-r')/2)/d'を計算し、i≠0であれば<b>i=<a'>i/d'を計算し、分散値<b>=<b>0, …, <b>m-1を生成する近似部と、0以上m未満の各整数iについて、分散値<b>のシェア<b>jを値d'で割った商p"と剰余r"が、r"≦d'/2-1であれば<b'>i=<p">を計算し、r"≧d'/2であれば<b'>i=<p"+1>を計算し、分散値<b'>=<b'>0, …, <b'>m-1を得る端数処理部と、分散値<b'>, <q>と商p'とフラグzを用いて、<b'>-(p'+z)<q>-1を計算し、除算結果a/dの分散値<a/d>として得る出力計算部と、分散値<a/d>を第一の秘密分散の分散値[a/d]に変換する出力変換部と、を含む。
【発明の効果】
【００１１】
この発明の秘密計算技術によれば、秘密計算において高速な右シフト演算および除算を実現することができる。
【図面の簡単な説明】
【００１２】
【図１】図１は秘密右シフト演算システムの機能構成を例示する図である。
【図２】図２は第一実施形態の秘密計算装置の機能構成を例示する図である。
【図３】図３は第一実施形態の秘密右シフト演算方法の処理手順を例示する図である。
【図４】図４は第二実施形態の秘密計算装置の機能構成を例示する図である。
【図５】図５は第二実施形態の秘密右シフト演算方法の処理手順を例示する図である。
【図６】図６は第三実施形態の秘密除算システムの機能構成を例示する図である。
【図７】図７は第三実施形態の秘密計算装置の機能構成を例示する図である。
【図８】図８は第三実施形態の秘密除算方法の処理手順を例示する図である。
【図９】図９は第四実施形態の秘密除算システムの機能構成を例示する図である。
【図１０】図１０は第四実施形態の秘密計算装置の機能構成を例示する図である。
【図１１】図１１は第四実施形態の秘密除算方法の処理手順を例示する図である。
【発明を実施するための形態】
【００１３】
以下、この発明の実施の形態について詳細に説明する。なお、図面中において同じ機能を有する構成部には同じ番号を付し、重複説明を省略する。また、数式等において、logの底を省略した場合、底は２である。
【００１４】
［第一実施形態］
この発明の第一実施形態は、右シフトの対象とする被シフト数を秘匿したまま、与えられたシフト量だけ被シフト数を右シフトして出力する秘密右シフト演算システムおよび方法である。以下、第一実施形態の秘密右シフト演算システムが実行する右シフトプロトコルの概要について説明する。このプロトコルはメルセンヌ素体上のプロトコルである。メルセンヌ素体は、秘密分散ベースの秘密計算で用いられる重要な構造である（参考文献１参照）。
〔参考文献１〕桐淵直人, 五十嵐大, 濱田浩気, 菊池亮, “プログラマブルな秘密計算ライブラリMEVAL3,”暗号と情報セキュリティシンポジウム（SCIS）, pp. 1-8, 2018.
【００１５】
右シフトは整数除算であり、加算および乗算からなる環演算ではない。まず、定理１で一般の整数除算を、その系１で右シフトを、加法的秘密分散の商qを用いた環演算で表現する。なお、商qは商転移により効率的に計算できる（参考文献２参照）。
〔参考文献２〕Ryo Kikuchi, Dai Ikarashi, Takahiro Matsuda, Koki Hamada, and Koji Chida, "Efficient bit-decomposition and modulus-conversion protocols with an honest majority," Proceedings of Information Security and Privacy - 23rd Australasian Conference (ACISP 2018), pp. 64-82, July 11-13, 2018.
【００１６】
＜定理１：整数環Zq上の公開値による商＞
任意の分散数m∈N、素数p∈N、除数d∈N、被除数a∈R、a=Σi<maimod pを満たすシェアa0, ..., am-1があるとする。ここで、各iに対して非負整数aiQ, aiRはそれぞれaiのdによる商と剰余、非負整数pQ, pRはそれぞれpのdによる商と剰余、非負整数qはΣi<maiのpによる商、zQはΣi<maiR+q(d-pR)のdによる商とおく。このとき、aのdによる商aQは以下の式（１）で表される。
aQ=Σi<maiQ-(pQ+1)q+zQ        （１）
【００１７】
＜定理１の証明＞
仮定a=Σi<maimod pより、aはΣi<maiのpによる剰余である。仮定“qはΣi<maiのpによる商”より、Σi<mai=qp+aである。仮定よりai=aiQd+aiR, p=pQd+pRだから、
a=(Σi<maiQ)d+ΣaiR-qpQd-qpR
=(Σi<maiQ-qpQ)d+(Σi<maiR-qpR)
である。さらにΣi<maiR-qpRのdによる商をyQとおけば、
aQ=(Σi<maiQ-qpQ)+yQ
である。一方zQはΣi<maiR+q(d-pR)のdによる商だから、yQ=zQ-qである。
【００１８】
＜系１：メルセンヌ素体上右シフト公式＞
定理１で、素数ビット長l∈Nを任意、シフトビット数b∈Nをb≦lとして、素数p=2l-1、除数d=2bとする。するとz'QはΣi<maiR+qの2bによる商であり、aQは以下の式（２）で表される。
aQ=Σi<maiQ-2l-bf+z'Q          （２）
【００１９】
＜系１の証明＞
式（１）においてp=2l-1, d=2bを代入すればよい。
【００２０】
＜系２：メルセンヌ素体上の商転移＞
任意の分散数m∈N、メルセンヌ素数pに対して、u∈Nはlog m≦uを満たし、a0, ..., am-1∈ZpはΣi<mai mod 2u=0を満たすものとする。このときqをΣi<maiのpによる商とすると、qは以下の式（３）で表される。
q=-Σi<mai mod 2u          （３）
【００２１】
＜右シフトプロトコル＞
本実施形態で実行する右シフトプロトコルを以下に示す。このプロトコルは系１の式（２）に従って計算するものである。ここでは、以下の記法を用いる。
【００２２】
[・]は、入出力の形式となる秘密分散で分散された値である。加法、公開値倍、加法的秘密分散との相互変換、ビット列からのビット合成が可能である必要がある。例えば、Shamir秘密分散、複製秘密分散などの線形秘密分散を用いることができる。
<・>は加法的秘密分散で分散された値である。加法的秘密分散は復元が加法で行われる秘密分散である。例えば、単純な加法的秘密分散、複製秘密分散を用いることができる。
{・}はビット列として分散された値である。すなわち、ビットを秘密分散した値の列として数値をビット表現した値である。例えば、Z2上の複製秘密分散の列を用いることができる。
添え字が付されていない[・], <・>, {・}は分散された値全体を表す。下付き添え字が付された[・]i, <・>i, {・}iはシェア（ここではi番目のシェア）を表す。
複製秘密分散では、各パーティがもつシェアは、「サブシェア」と呼ばれる複数の要素で構成され、複数のパーティで同じ値の要素が共有される。このサブシェアもシェアとして扱う。
【００２３】
〔アルゴリズム１：整数環Zq上の右シフトプロトコル〕
入力：被シフト数[a]、シフト量b
パラメータ：加法的秘密分散の分散数m、log m以上の整数u
出力：[a≫b]（ただし、≫は右シフト演算子であり、aの各ビットをbビットだけ右シフトすることを表す。）
１: 公開値倍により[a']=[2ua]を計算する。
２: [a']を加法的秘密分散に変換し、<a'>を得る。
３: 
を
i=<a'>i≫b+uとする。
４: 
を線形秘密分散に変換して[s]を得る。
５: 各<a'>iの下位uビットを分散して、<a'>i mod 2uのビット表現{a'i mod 2u}を得る。
６: 加算回路および符号反転回路により、-Σi<m{a'i mod 2u}の下位uビットを計算する。この出力は商転移定理よりqに等しいため、{q}とおく。
７: 各<a'>iの下位b+uビットを分散して、<a'>i mod 2b+uのビット表現{a'iR}を得る。
８: 加算回路により、{z}=Σi<m{a'iR}+{q}を計算し、b+uビット目（0スタート）以降のビット列を{zQ}とおく。このとき、一部、ステップ６で得たuビットの加算回路の処理結果を使い回すことができる。
９: {q}, {zQ}をビット合成により線形秘密分散に変換し、[q], [zQ]を得る。
10: [s]-[2l-(b+u)q]+[zQ]を出力する。
【００２４】
なお、上記プロトコルで用いる線形秘密分散と複製秘密分散を含む加法的秘密分散の相互変換、ビット合成、複製秘密分散の各ビットの分散はいずれも上記参考文献２に記載されている。
【００２５】
＜秘密右シフト演算システム１００＞
第一実施形態の秘密右シフト演算システム１００は上述したアルゴリズム１：整数環Zq上の右シフトプロトコルを実行する。秘密右シフト演算システム１００は、図１に示すように、m（≧3）台の秘密計算装置１1, …, １mを含む。この実施形態では、秘密計算装置１1, …, １mはそれぞれ通信網９へ接続される。通信網９は、接続される各装置が相互に通信可能なように構成された回線交換方式もしくはパケット交換方式の通信網であり、例えばインターネットやLAN（Local Area Network）、WAN（Wide Area Network）などを用いることができる。なお、各装置は必ずしも通信網９を介してオンラインで通信可能である必要はない。例えば、秘密計算装置１i（i=1, …, m）へ入力する情報を磁気テープやUSBメモリなどの可搬型記録媒体に記憶し、その可搬型記録媒体から秘密計算装置１iへオフラインで入力するように構成してもよい。
【００２６】
第一実施形態の秘密右シフト演算システムに含まれる秘密計算装置１i（i=1, …, m）は、例えば、図２に示すように、公開値倍部１１、第一変換部１２、右シフト演算部１３、第二変換部１４、第一ビット変換部１５、商転移部１６、第二ビット変換部１７、加算部１８、第三変換部１９、および出力計算部２０を含む。この秘密計算装置１iが他の秘密計算装置１i'（i'=1, …, m、ただしi≠i'）と協調しながら後述する各ステップの処理を行うことにより第一実施形態の秘密右シフト演算方法が実現される。
【００２７】
秘密計算装置１iは、例えば、中央演算処理装置（CPU: Central Processing Unit）、主記憶装置（RAM: Random Access Memory）などを有する公知又は専用のコンピュータに特別なプログラムが読み込まれて構成された特別な装置である。秘密計算装置１iは、例えば、中央演算処理装置の制御のもとで各処理を実行する。秘密計算装置１iに入力されたデータや各処理で得られたデータは、例えば、主記憶装置に格納され、主記憶装置に格納されたデータは必要に応じて中央演算処理装置へ読み出されて他の処理に利用される。秘密計算装置１iの各処理部は、少なくとも一部が集積回路等のハードウェアによって構成されていてもよい。
【００２８】
図３を参照して、第一実施形態の秘密右シフト演算システム１００が実行する秘密右シフト演算方法の処理手続きを説明する。
【００２９】
ステップＳ１１において、各秘密計算装置１iの公開値倍部１１は、秘密計算装置１iに入力された被シフト数aの分散値[a]を受け取り、公開値倍により[a']=[2ua]を計算する。ここで、uはlog m以上の整数であり、mは加法的秘密分散の分散数である。u, mはあらかじめ与えられているパラメータである。公開値倍部１１は、計算した分散値[a']を第一変換部１２へ入力する。
【００３０】
ステップＳ１２において、各秘密計算装置１iの第一変換部１２は、公開値倍部１１から分散値[a']を受け取り、分散値[a']を加法的秘密分散の分散値<a'>=<a'>0, …, <a'>m-1に変換する。第一変換部１２は、変換後の分散値<a'>を右シフト演算部１３、第一ビット変換部１５、および第二ビット変換部１７へ入力する。
【００３１】
ステップＳ１３において、各秘密計算装置１iの右シフト演算部１３は、第一変換部１２から分散値<a'>を受け取り、
i=<a'>i≫b+uを計算し、分散値
を得る。ただし、≫は右シフト演算子である。右シフト演算部１３は、計算した分散値
を第二変換部１４へ入力する。
【００３２】
ステップＳ１４において、各秘密計算装置１iの第二変換部１４は、右シフト演算部１３から分散値
を受け取り、分散値
を線形秘密分散に変換する。第二変換部１４は、変換後の分散値[s]を出力計算部２０へ入力する。
【００３３】
ステップＳ１５において、各秘密計算装置１iの第一ビット変換部１５は、第一変換部１２から分散値<a'>を受け取り、分散値<a'>のシェア<a'>iの下位uビットを分散して、<a'>i mod 2uのビット表現である分散値{a'i mod 2u}を得る。第一ビット変換部１５は、分散値{a'i mod 2u}を商転移部１６へ入力する。
【００３４】
ステップＳ１６において、各秘密計算装置１iの商転移部１６は、第一ビット変換部１５から分散値{a'imod 2u}を受け取り、加算回路および符号反転回路により、-Σi<m{a'imod 2u}の下位uビットを計算する。計算結果のビット列を商qの分散値{q}とする。商転移部１６は、分散値{q}を加算部１８および第三変換部１９へ入力する。
【００３５】
ステップＳ１７において、各秘密計算装置１iの第二ビット変換部１７は、第一変換部１２から分散値<a'>を受け取り、分散値<a'>のシェア<a'>iの下位b+uビットを分散して、<a'>i mod 2b+uのビット表現である分散値{a'iR}を得る。第二ビット変換部１７は、分散値{a'iR}を加算部１８へ入力する。
【００３６】
ステップＳ１８において、各秘密計算装置１iの加算部１８は、商転移部１６から分散値{q}を、第二ビット変換部１７から分散値{a'iR}を受け取り、加算回路により、{z}=Σi<m{a'iR}+{q}を計算する。計算結果のビット列{z}のb+uビット目（0スタート）以降のビット列を分散値{zQ}とする。加算部１８は、分散値{zQ}を第三変換部１９へ入力する。
【００３７】
ステップＳ１９において、各秘密計算装置１iの第三変換部１９は、商転移部１６から分散値{q}を、加算部１８から分散値{zQ}を受け取り、{q}, {zQ}をビット合成により線形秘密分散に変換する。第三変換部１９は、変換後の分散値[q], [zQ]を出力計算部２０へ入力する。
【００３８】
ステップＳ２０において、各秘密計算装置１iの出力計算部２０は、第二変換部１４から分散値[s]を、第三変換部１９から分散値[q], [zQ]を受け取り、[s]-[2l-(b+u)q]+[zQ]を計算し、被シフト数aをbビット右シフトした値a≫bの分散値[a≫b]として出力する。
【００３９】
＜効果＞
右シフトプロトコルの通信量とラウンド数を評価する。係数は考慮し、定数項は無視する。uの値はpassiveで１、activeでも２と小さいものと想定されるため、uは定数と見なして評価する。
【００４０】
通信量は以下となる。パーティあたりの送信ビット数を単位とする。線形秘密分散から加法的秘密分散への変換は０、加法的秘密分散から線形秘密分散への変換はl、下位b+uビットの分散はb、加算回路はb、符号反転回路は０、ビット合成は１回あたりlを２回であり、合計は素数ビット長l、シフト量bを使って3l+2bと表される。
【００４１】
ラウンド数は以下となる。加算回路はbラウンド、他は定数ラウンドであり、合計bラウンドである。
【００４２】
［第二実施形態］
第一実施形態の秘密右シフト演算システムでは、第二ビット変換部１７および加算部１８が右シフト演算により発生する下位ビットの誤差を近似する処理を行っていた。しかしながら、近似し得る誤差は数値計算では無視できる範囲の誤差である。秘密計算では加算回路の演算量が大きいため、この誤差を無視する（すなわち、その近似処理を省略する）ことで、より高速な右シフト演算を実現することができる。本実施形態で実行する右シフトプロトコルを以下に示す。
【００４３】
〔アルゴリズム２：高速な右シフトプロトコル〕
入力：被シフト数[a]、シフト量b
パラメータ：加法的秘密分散の分散数m、log m以上の整数u
出力：[a≫b]（ただし、≫は右シフト演算子であり、aの各ビットをbビットだけ右シフトすることを表す。）
１: 公開値倍により[a']=[2ua]を計算する。
２: [a']を加法的秘密分散に変換し、<a'>を得る。
３: 
を
i=<a'>i≫b+uとする。
４: 
を線形秘密分散に変換して[s]を得る。
５: 各<a'>iの下位uビットを分散して、<a'>i mod 2uのビット表現{a'i mod 2u}を得る。
６: 加算回路および符号反転回路により、-Σi<m{a'imod 2u}の下位uビットを計算する。この出力は商転移定理よりqに等しいため、{q}とおく。
７: {q}をビット合成により線形秘密分散に変換し、[q]を得る。
８: [s]-[2l-(b+u)q]+1を出力する。
【００４４】
＜秘密右シフト演算システム２００＞
第二実施形態の秘密右シフト演算システム２００は上述したアルゴリズム２：高速な右シフトプロトコルを実行する。第二実施形態の秘密右シフト演算システム２００に含まれる秘密計算装置２i（i=1, …, m）は、例えば、図４に示すように、公開値倍部１１、第一変換部１２、右シフト演算部１３、第二変換部１４、第一ビット変換部１５、商転移部１６、第三変換部１９、および出力計算部２０を含む。すなわち、第一実施形態の秘密計算装置１i（i=1, …, m）には含まれていた第二ビット変換部１７および加算部１８を含まない。この秘密計算装置２iが他の秘密計算装置２i'（i'=1, …, m、ただしi≠i'）と協調しながら後述する各ステップの処理を行うことにより第二実施形態の秘密右シフト演算方法が実現される。
【００４５】
図５を参照して、第二実施形態の秘密右シフト演算システム２００が実行する秘密右シフト演算方法の処理手続きを説明する。
【００４６】
ステップＳ１１において、各秘密計算装置２iの公開値倍部１１は、秘密計算装置２iに入力された被シフト数aの分散値[a]を受け取り、公開値倍により[a']=[2ua]を計算する。公開値倍部１１は、計算した分散値[a']を第一変換部１２へ入力する。
【００４７】
ステップＳ１２において、各秘密計算装置２iの第一変換部１２は、公開値倍部１１から分散値[a']を受け取り、分散値[a']を加法的秘密分散の分散値<a'>=<a'>0, …, <a'>m-1に変換する。第一変換部１２は、変換後の分散値<a'>を右シフト演算部１３および第一ビット変換部１５へ入力する。
【００４８】
ステップＳ１３において、各秘密計算装置２iの右シフト演算部１３は、第一変換部１２から分散値<a'>を受け取り、
i=<a'>i≫b+uを計算し、分散値
を得る。右シフト演算部１３は、計算した分散値
を第二変換部１４へ入力する。
【００４９】
ステップＳ１４において、各秘密計算装置２iの第二変換部１４は、右シフト演算部１３から分散値
を受け取り、分散値
を線形秘密分散に変換する。第二変換部１４は、変換後の分散値[s]を出力計算部２０へ入力する。
【００５０】
ステップＳ１５において、各秘密計算装置２iの第一ビット変換部１５は、第一変換部１２から分散値<a'>を受け取り、分散値<a'>のシェア<a'>iの下位uビットを分散して、<a'>i mod 2uのビット表現である分散値{a'i mod 2u}を得る。第一ビット変換部１５は、分散値{a'i mod 2u}を商転移部１６へ入力する。
【００５１】
ステップＳ１６において、各秘密計算装置２iの商転移部１６は、第一ビット変換部１５から分散値{a'I mod 2u}を受け取り、加算回路および符号反転回路により、-Σi<m{a'i mod 2u}の下位uビットを計算する。計算結果のビット列を商qの分散値{q}とする。商転移部１６は、分散値{q}を第三変換部１９へ入力する。
【００５２】
ステップＳ１９において、各秘密計算装置２iの第三変換部１９は、商転移部１６から分散値{q}を受け取り、{q}をビット合成により線形秘密分散に変換する。第三変換部１９は、変換後の分散値[q]を出力計算部２０へ入力する。
【００５３】
ステップＳ２０において、各秘密計算装置１iの出力計算部２０は、第二変換部１４から分散値[s]を、第三変換部１９から分散値[q]を受け取り、[s]-[2l-(b+u)q]+1を計算し、被シフト数aをbビット右シフトした値a≫bの分散値[a≫b]として出力する。
【００５４】
［第三実施形態］
右シフト演算は２べきによる除算とみなすことができる。そこで、第三実施形態では、２べき以外による除算に拡張することを考える。なお、右シフト演算でシフト量が公開であったのと同様に、除数は公開値とする。第三実施形態では、シェア数が２である加法的秘密分散を用いることを想定する。すなわち、内部の処理で用いる加法的秘密分散は(2, 2)加法的秘密分散であり、入出力の形式となる秘密分散は(2, 3)線形秘密分散である。本実施形態で実行する除数公開除算プロトコルを以下に示す。
【００５５】
〔アルゴリズム３：除数公開除算プロトコル（シェア数２、除数は符号なし整数）〕
入力：被除数[a]、除数d
出力：[a/d]（ただし、/は小数点以下を切り捨てる除算を表す。）
１: [a]を(2, 2)加法的秘密分散に変換し、<a>を得る。
２: <a'>:=<2a>, d'=2dを計算する。
３: 商転移等により、<a'>のpによる商<q>を得る。
４: pのd'による商p'と剰余r'を得る。
５: 次式を計算し、<b>を得る。ここでは、加減算はmod pではなく自然数上の加減算である。
【数１】
2020075797.tif 000003
６: <b>-(p'+1)<q>+1を計算し、<a/d>の結果として得る。
７: <a/d>を(2, 3)線形秘密分散に変換し、[a/d]を出力する。
【００５６】
＜秘密除算システム３００＞
第三実施形態の秘密除算システム３００は上述したアルゴリズム３：除数公開除算プロトコルを実行する。秘密除算システム３００は、図６に示すように、3台の秘密計算装置３1, ３2, ３3を含む。この実施形態では、秘密計算装置３1, ３2, ３3はそれぞれ通信網９へ接続される。
【００５７】
第三実施形態の秘密除算システム３００に含まれる秘密計算装置３i（i=1, …, 3）は、例えば、図７に示すように、入力変換部３１、公開値倍部３２、商転移部３３、公開除算部３４、近似部３５、出力計算部３６、および出力変換部３７を含む。この秘密計算装置３iが他の秘密計算装置３i'（i'=1, …, 3、ただしi≠i'）と協調しながら後述する各ステップの処理を行うことにより第三実施形態の秘密除算方法が実現される。
【００５８】
図８を参照して、第三実施形態の秘密除算システム３００が実行する秘密除算方法の処理手続きを説明する。
【００５９】
ステップＳ３１において、各秘密計算装置３iの入力変換部３１は、秘密計算装置３iに入力された被除数aの分散値[a]を受け取り、分散値[a]を(2, 2)加法的秘密分散の分散値<a>=<a>0, <a>1に変換する。入力変換部３１は、変換後の分散値<a>を公開値倍部３２へ入力する。
【００６０】
ステップＳ３２において、各秘密計算装置３iの公開値倍部３２は、秘密計算装置２iに入力された除数dと入力変換部３１から入力された分散値<a>を受け取り、公開値倍により<a'>=<2a>, d'=2dを計算する。公開値倍部３２は、計算した分散値<a'>と値d'を商転移部３３および近似部３５へ入力する。また、公開値倍部３２は、値d'を公開除算部３４へ入力する。
【００６１】
ステップＳ３３において、各秘密計算装置３iの商転移部３３は、公開値倍部３２から分散値<a'>と値d'を受け取り、商転移等により値a'の法pによる商qの分散値<q>を得る。具体的には、第一実施形態の第一ビット変換部１５、商転移部１６、および第三変換部１９で行った処理を実行すればよい。すなわち、分散値<a'>のシェア<a'>iの下位uビットを分散して、<a'>i mod 2uのビット表現である分散値{a'i mod 2u}を得、加算回路および符号反転回路により、-Σi<m{a'imod 2u}の下位uビットを計算し、計算結果のビット列を商qの分散値{q}として、{q}をビット合成により分散値<q>に変換する。商転移部３３は、分散値<q>を出力計算部３６へ入力する。
【００６２】
ステップＳ３４において、各秘密計算装置３iの公開除算部３４は、公開値倍部３２から値d'を受け取り、法pの値d'による商p'と剰余r'を得る。公開除算部３４は、剰余r'を近似部３５へ入力する。また、公開除算部３４は、商p'を出力計算部３６へ入力する。
【００６３】
ステップＳ３５において、各秘密計算装置３iの近似部３５は、公開値倍部３２から分散値<a'>と値d'を、公開除算部３４から剰余r'を受け取り、次式を計算する。
【数２】
2020075797.tif 000004
すなわち、i=0であれば<b>i=(<a'>i+d'-1-r')/d'を計算し、それ以外であれば<b>i=<a'>i/d'を計算し、分散値<b>を得る。近似部３５は、分散値<b>を出力計算部３６へ入力する。
【００６４】
ステップＳ３６において、各秘密計算装置３iの出力計算部３６は、商転移部３３から分散値<q>を、公開除算部３４から商p'を、近似部３５から分散値<b>を受け取り、<b>-(p'+1)<q>+1を計算する。出力計算部３６は、計算結果をa/dの分散値<a/d>として出力変換部３７へ入力する。
【００６５】
ステップＳ３７において、各秘密計算装置３iの出力変換部３７は、出力計算部３６から分散値<a/d>を受け取り、分散値<a/d>を(2, 3)線形秘密分散に変換する。出力変換部３７は、変換後の分散値[a/d]を出力する。
【００６６】
＜定理２：アルゴリズム３の誤差＞
アルゴリズム３は以下の３つの性質を満たす。これは確率的出力をもつ数値計算向けの固定小数点数向け整数除算として理想的である。なお、/, ÷はいずれも除算を表す演算子であるが、/は小数点以下を切り捨てる除算であり、÷は実数除算である。
（１）「出力の期待値の小数部分〜a÷dの小数部分」が成り立ち、その近似誤差はO(a÷p)である。
（２）出力は1-O(a÷p)の確率でa/dもしくはa/d+1であり、整数出力で期待値をa÷dに一致させるための最小誤差幅である。最悪値に関しては、O(a÷p)の確率でa/d+2となる。
（３）特にaがdで割り切れるとき、誤差は1-O(a÷p)の確率で0である。
【００６７】
＜効果＞
アルゴリズム３：除数公開除算プロトコルの通信量とラウンド数を評価する。通信量は、5/3(|p|+1)ビットとなる。ラウンド数は、2ラウンドとなる。通信量O(|p|)、ラウンド数O(1)を両立する除数公開除算は今まで存在しなかった。また、定数係数も2以下とごく小さく、例えば機械学習などの演算を反復するために右シフト（すなわち、２べきの除算）を大量に処理するアプリケーションでは特に有効であると言える。
【００６８】
［第四実施形態］
第三実施形態では、シェア数が２である加法的秘密分散を用いることを想定した。第四実施形態では、シェア数が３以上である加法的秘密分散または複製秘密分散に一般化する。本実施形態で実行する除数公開除算プロトコルを以下に示す。
【００６９】
〔アルゴリズム４：除数公開除算プロトコル（シェア数３以上）〕
入力：被除数[a]、除数d
出力：[a/d]（ただし、/は小数点以下を切り捨てる除算を表す。）
１: [a]をシェア数m（≧3）の加法的秘密分散または複製秘密分散に変換し、<a>を得る。
２: <a'>:=<2ua>, d':=2udを計算する。
３: 商転移等により、<a'>のpによる商<q>を得る。
４: pのd'による商p'と剰余r'を得る。
５: r'≧d'/2ならばz=1、それ以外であればz=0を設定する。
６: 次式を計算し、<b>を得る。ここでは、加減算はmod pではなく自然数上の加減算である。
【数３】
2020075797.tif 000005
７: <b>iをd'で割った商p"と剰余r"が、r"≦d'/2-1であれば<b'>i=<p">、r"≧d'/2であれば<b'>i=<p"+1>を計算し、<b'>を得る。d':=2udであるため、d'は偶数であることに注意されたい。
８: <b'>-(p'+z)<q>-1を計算し、<a/d>の結果として得る。
９: <a/d>をシェア数mの線形秘密分散に変換し、[a/d]を出力する。
【００７０】
＜秘密除算システム４００＞
第四実施形態の秘密除算システム４００は上述したアルゴリズム４：除数公開除算プロトコルを実行する。秘密除算システム４００は、図９に示すように、m（≧3）台の秘密計算装置４1, …, ４mを含む。この実施形態では、秘密計算装置４1, …, ４mはそれぞれ通信網９へ接続される。
【００７１】
第四実施形態の秘密除算システム４００に含まれる秘密計算装置４i（i=1, …, m）は、例えば、図１０に示すように、入力変換部３１、公開値倍部３２、商転移部３３、公開除算部３４、近似部３５、出力計算部３６、出力変換部３７、フラグ設定部３８、および端数処理部３９を含む。すなわち、第三実施形態の秘密計算装置３i（i=1, …, 3）に含まれる各処理部に加えて、フラグ設定部３８および端数処理部３９をさらに含む。この秘密計算装置４iが他の秘密計算装置４i'（i'=1, …, m、ただしi≠i'）と協調しながら後述する各ステップの処理を行うことにより第四実施形態の秘密除算方法が実現される。
【００７２】
図１１を参照して、第四実施形態の秘密除算システム４００が実行する秘密除算方法の処理手続きを、第三実施形態との相違点を中心に説明する。
【００７３】
ステップＳ３１において、各秘密計算装置３iの入力変換部３１は、秘密計算装置３iに入力された被除数aの分散値[a]を受け取り、分散値[a]をシェア数mの加法的秘密分散または複製秘密分散の分散値<a>=<a>0, …, <a>m-1に変換する。入力変換部３１は、変換後の分散値<a>を公開値倍部３２へ入力する。
【００７４】
ステップＳ３２において、各秘密計算装置３iの公開値倍部３２は、秘密計算装置２iに入力された除数dと入力変換部３１から入力された分散値<a>を受け取り、公開値倍により<a'>=<2ua>, d'=2udを計算する。公開値倍部３２は、計算した分散値<a'>と値d'を商転移部３３および近似部３５へ入力する。また、公開値倍部３２は、値d'を公開除算部３４および端数処理部３９へ入力する。
【００７５】
ステップＳ３８において、各秘密計算装置３iのフラグ設定部３８は、公開除算部３４から剰余r'を受け取り、r'≧d'/2ならばz=1、それ以外であればz=0を設定する。フラグ設定部３８は、設定したフラグzを出力計算部３６へ入力する。
【００７６】
ステップＳ３５において、各秘密計算装置３iの近似部３５は、公開値倍部３２から分散値<a'>と値d'を、公開除算部３４から剰余r'を受け取り、次式を計算する。
【数４】
2020075797.tif 000006
すなわち、i=0であれば<b>i=(<a'>i+(d'-r')+(d'-r')/2)/d'を計算し、それ以外であれば<b>i=<a'>i/d'を計算し、分散値<b>を得る。近似部３５は、分散値<b>を端数処理部３９へ入力する。
【００７７】
ステップＳ３９において、各秘密計算装置３iの端数処理部３９は、公開値倍部３２から値d'を、近似部３５から分散値<b>を受け取り、<b>iをd'で割った商p"と剰余r"が、r"≦d'/2-1であれば<b'>i=<p">、r"≧d'/2であれば<b'>i=<p"+1>を計算し、<b'>を得る。端数処理部３９は、分散値<b'>を出力計算部３６へ入力する。
【００７８】
ステップＳ３６において、各秘密計算装置３iの出力計算部３６は、商転移部３３から分散値<q>を、公開除算部３４から商p'を、フラグ設定部３８からフラグzを、端数処理部３９から分散値<b'>を受け取り、<b'>-(p'+z)<q>-1を計算する。出力計算部３６は、計算結果をa/dの分散値<a/d>として出力変換部３７へ入力する。
【００７９】
ステップＳ３７において、各秘密計算装置３iの出力変換部３７は、出力計算部３６から分散値<a/d>を受け取り、分散値<a/d>をシェア数mの線形秘密分散に変換する。出力変換部３７は、変換後の分散値[a/d]を出力する。
【００８０】
［第五実施形態］
第三実施形態および第四実施形態では、除数dは一般的な符号なし整数を用いることを想定した。第五実施形態では、除数dが符号あり整数である場合を想定する。本実施形態で実行する除算プロトコルを以下に示す。
【００８１】
〔アルゴリズム５：除数公開除算プロトコル（除数は符号あり整数）〕
入力：被除数[a]、除数d（ただし、μ<0, M≧0として、aはμ≦a≦Mを満たす。）
出力：[a/d]（ただし、/は小数点以下を切り捨てる除算を表す。）
１: -μ≦wd≦2|p|-uを満たすwを得る。
２: アルゴリズム３または４により、[(wd+a)/d]（=[w+a/d]）を得る。
３: [w+a/d]からwを減算し、[a/d]を出力する。
【００８２】
第五実施形態の秘密除算システムは上述したアルゴリズム５：除数公開除算プロトコルを実行する。第五実施形態の秘密除算システムは、第三実施形態または第四実施形態と同様に複数台の秘密計算装置を含み、各秘密計算装置は第三実施形態または第四実施形態と同様の処理部を含む。
【００８３】
各秘密計算装置の入力変換部３１は、秘密計算装置に入力された除数dを受け取り、2|p|-1をdで割って切り上げた数wを得る。また、秘密計算装置に入力された被除数aの分散値[a]を[wd+a]で更新する。そして、更新後の分散値[a]を所定の加法的秘密分散の分散値<a>に変換する。入力変換部３１は、変換後の分散値<a>を公開値倍部３２へ入力する。
【００８４】
各秘密計算装置３iの出力変換部３７は、出力計算部３６から分散値<a/d>を受け取り、分散値<a/d>を所定の線形秘密分散に変換する。この分散値[a/d]は、入力変換部３１が[a]を[wd+a]で更新しているため、実際には[(wd+a)/d]（=[w+a/d]）である。そこで、出力変換部３７は、変換後の分散値[a/d]からwを減算する。出力変換部３７は、減算後の分散値[a/d]を出力する。
【００８５】
以上、この発明の実施の形態について説明したが、具体的な構成は、これらの実施の形態に限られるものではなく、この発明の趣旨を逸脱しない範囲で適宜設計の変更等があっても、この発明に含まれることはいうまでもない。実施の形態において説明した各種の処理は、記載の順に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。
【００８６】
［プログラム、記録媒体］
上記実施形態で説明した各装置における各種の処理機能をコンピュータによって実現する場合、各装置が有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、上記各装置における各種の処理機能がコンピュータ上で実現される。
【００８７】
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等どのようなものでもよい。
【００８８】
また、このプログラムの流通は、例えば、そのプログラムを記録したDVD、CD-ROM等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としてもよい。
【００８９】
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の記憶装置に格納する。そして、処理の実行時、このコンピュータは、自己の記憶装置に格納されたプログラムを読み取り、読み取ったプログラムに従った処理を実行する。また、このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよく、さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。また、サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるASP（Application Service Provider）型のサービスによって、上述の処理を実行する構成としてもよい。なお、本形態におけるプログラムには、電子計算機による処理の用に供する情報であってプログラムに準ずるもの（コンピュータに対する直接の指令ではないがコンピュータの処理を規定する性質を有するデータ等）を含むものとする。
【００９０】
また、この形態では、コンピュータ上で所定のプログラムを実行させることにより、本装置を構成することとしたが、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。
【図１】
2020075797.tif 000007
【図２】
2020075797.tif 000008
【図３】
2020075797.tif 000009
【図４】
2020075797.tif 000010
【図５】
2020075797.tif 000011
【図６】
2020075797.tif 000012
【図７】
2020075797.tif 000013
【図８】
2020075797.tif 000014
【図９】
2020075797.tif 000015
【図１０】
2020075797.tif 000016
【図１１】
2020075797.tif 000017
【手続補正書】
【提出日】令和3年2月24日(2021.2.24)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００５３
【補正方法】変更
【補正の内容】
【００５３】
ステップＳ２０において、各秘密計算装置２iの出力計算部２０は、第二変換部１４から分散値[s]を、第三変換部１９から分散値[q]を受け取り、[s]-[2l-(b+u)q]+1を計算し、被シフト数aをbビット右シフトした値a≫bの分散値[a≫b]として出力する。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００６０
【補正方法】変更
【補正の内容】
【００６０】
ステップＳ３２において、各秘密計算装置３iの公開値倍部３２は、秘密計算装置３iに入力された除数dと入力変換部３１から入力された分散値<a>を受け取り、公開値倍により<a'>=<2a>, d'=2dを計算する。公開値倍部３２は、計算した分散値<a'>と値d'を商転移部３３および近似部３５へ入力する。また、公開値倍部３２は、値d'を公開除算部３４へ入力する。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００７３
【補正方法】変更
【補正の内容】
【００７３】
ステップＳ３１において、各秘密計算装置４iの入力変換部３１は、秘密計算装置４iに入力された被除数aの分散値[a]を受け取り、分散値[a]をシェア数mの加法的秘密分散または複製秘密分散の分散値<a>=<a>0, …, <a>m-1に変換する。入力変換部３１は、変換後の分散値<a>を公開値倍部３２へ入力する。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００７４
【補正方法】変更
【補正の内容】
【００７４】
ステップＳ３２において、各秘密計算装置４iの公開値倍部３２は、秘密計算装置４iに入力された除数dと入力変換部３１から入力された分散値<a>を受け取り、公開値倍により<a'>=<2ua>, d'=2udを計算する。公開値倍部３２は、計算した分散値<a'>と値d'を商転移部３３および近似部３５へ入力する。また、公開値倍部３２は、値d'を公開除算部３４および端数処理部３９へ入力する。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００７５
【補正方法】変更
【補正の内容】
【００７５】
ステップＳ３８において、各秘密計算装置４iのフラグ設定部３８は、公開除算部３４から剰余r'を受け取り、r'≧d'/2ならばz=1、それ以外であればz=0を設定する。フラグ設定部３８は、設定したフラグzを出力計算部３６へ入力する。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００７６
【補正方法】変更
【補正の内容】
【００７６】
ステップＳ３５において、各秘密計算装置４iの近似部３５は、公開値倍部３２から分散値<a'>と値d'を、公開除算部３４から剰余r'を受け取り、次式を計算する。
【数４】
2020075797.tif 000018
すなわち、i=0であれば<b>i=(<a'>i+(d'-r')+(d'-r')/2)/d'を計算し、それ以外であれば<b>i=<a'>i/d'を計算し、分散値<b>を得る。近似部３５は、分散値<b>を端数処理部３９へ入力する。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】００７７
【補正方法】変更
【補正の内容】
【００７７】
ステップＳ３９において、各秘密計算装置４iの端数処理部３９は、公開値倍部３２から値d'を、近似部３５から分散値<b>を受け取り、<b>iをd'で割った商p"と剰余r"が、r"≦d'/2-1であれば<b'>i=<p">、r"≧d'/2であれば<b'>i=<p"+1>を計算し、<b'>を得る。端数処理部３９は、分散値<b'>を出力計算部３６へ入力する。
【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】００７８
【補正方法】変更
【補正の内容】
【００７８】
ステップＳ３６において、各秘密計算装置４iの出力計算部３６は、商転移部３３から分散値<q>を、公開除算部３４から商p'を、フラグ設定部３８からフラグzを、端数処理部３９から分散値<b'>を受け取り、<b'>-(p'+z)<q>-1を計算する。出力計算部３６は、計算結果をa/dの分散値<a/d>として出力変換部３７へ入力する。
【手続補正９】
【補正対象書類名】明細書
【補正対象項目名】００７９
【補正方法】変更
【補正の内容】
【００７９】
ステップＳ３７において、各秘密計算装置４iの出力変換部３７は、出力計算部３６から分散値<a/d>を受け取り、分散値<a/d>をシェア数mの線形秘密分散に変換する。出力変換部３７は、変換後の分散値[a/d]を出力する。
【手続補正１０】
【補正対象書類名】明細書
【補正対象項目名】００８４
【補正方法】変更
【補正の内容】
【００８４】
各秘密計算装置の出力変換部３７は、出力計算部３６から分散値<a/d>を受け取り、分散値<a/d>を所定の線形秘密分散に変換する。この分散値[a/d]は、入力変換部３１が[a]を[wd+a]で更新しているため、実際には[(wd+a)/d]（=[w+a/d]）である。そこで、出力変換部３７は、変換後の分散値[a/d]からwを減算する。出力変換部３７は、減算後の分散値[a/d]を出力する。
【手続補正１１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
[・]は値・を第一の秘密分散で分散した分散値であり、<・>は値・を加法的秘密分散で分散した分散値であり、{・}は値・のビット表現を分散した分散値であり、上記分散値[・]と上記分散値<・>とは相互に変換可能であり、aは任意の値であり、bはシフト量であり、mは3以上の分散数であり、uはlog m以上の整数であり、lは値aのビット数であり、≫は右シフト演算子であり、
m台の秘密計算装置を含み、値aの分散値[a]とシフト量bとを入力とし、値aをbビット右シフトした値の分散値[a≫b]を計算する秘密右シフト演算システムであって、
上記秘密計算装置は、
上記分散値[a]を用いて分散値[a']=[2ua]を計算する公開値倍部と、
上記分散値[a']を加法的秘密分散の分散値<a'>=<a'>0, …, <a'>m-1に変換する第一変換部と、
0以上m未満の各整数iについて、
i=<a'>i≫b+uを計算し、分散値
=
0, …, 
m-1を生成する右シフト演算部と、
上記分散値
を第一の秘密分散の分散値[s]に変換する第二変換部と、
0以上m未満の各整数iについて、上記分散値<a'>のシェア<a'>iの下位uビットをビット表現の分散値{a'i mod 2u}に変換する第一ビット変換部と、
上記分散値{a'i mod 2u}を用いて-Σi<m{a'imod 2u}の下位uビットを計算し、ビット表現の分散値{q}として得る商転移部と、
上記分散値{q}を第一の秘密分散の分散値[q]に変換する第三変換部と、
上記分散値[s], [q]を用いて[s]-[2l-(b+u)q]+1を計算し、上記分散値[a≫b]として得る出力計算部と、
を含む秘密右シフト演算システム。
【請求項２】
請求項１に記載の秘密右シフト演算システムであって、
上記秘密計算装置は、
0以上m未満の各整数iについて、上記シェア<a'>iの下位b+uビットをビット表現の分散値{a'iR}={a'imod 2b+u}に変換する第二ビット変換部と、
上記分散値{a'iR}, {q}を用いてビット表現の分散値{z}=Σi<m{a'iR}+{q}を計算し、上記分散値{z}のb+uビット目以降のビット列を分散値{zQ}として得る加算部と、
をさらに含み、
上記第三変換部は、上記分散値{q}, {zQ}を第一の秘密分散の分散値[q], [zQ]に変換するものであり、
上記出力計算部は、上記分散値[s], [q], [zQ]を用いて[s]-[2l-(b+u)q]+[zQ]を計算し、上記分散値[a≫b]として得るものである、
秘密右シフト演算システム。
【請求項３】
pは素数であり、[・]は値・をシェア数が3である第一の秘密分散で分散した分散値であり、<・>は値・をシェア数が2である加法的秘密分散で分散した分散値であり、上記分散値[・]と上記分散値<・>とは相互に変換可能であり、aは被除数であり、dは除数であり、/は小数点以下を切り捨てる除算を表す演算子であり、
3台の秘密計算装置を含み、被除数aの分散値[a]と除数dとを入力とし、被除数aの除数dによる小数点以下切り捨ての除算結果a/dの分散値[a/d]を計算する秘密除算システムであって、
上記秘密計算装置は、
上記分散値[a]を上記加法的秘密分散の分散値<a>=<a>0, <a>1に変換する入力変換部と、
上記分散値[a]と上記除数dを用いて分散値<a'>=<2a>と値d'=2dを計算する公開値倍部と、
上記分散値<a'>を用いて値a'の素数pによる商qの分散値<q>を得る商転移部と、
素数pの値d'による商p'と剰余r'を得る公開除算部と、
上記分散値<a'>と上記値d'と上記剰余r'を用いて、<b>0=(<a'>0+d'-1-r')/d', <b>1=<a'>1/d'を計算し、分散値<b>=<b>0, <b>1を生成する近似部と、
上記分散値<b>, <q>と上記商p'を用いて、<b>-(p'+1)<q>+1を計算し、上記除算結果a/dの分散値<a/d>として得る出力計算部と、
上記分散値<a/d>を上記第一の秘密分散の分散値[a/d]に変換する出力変換部と、
を含む秘密除算システム。
【請求項４】
pは素数であり、[・]は値・をシェア数がmである第一の秘密分散で分散した分散値であり、<・>は値・をシェア数がmである加法的秘密分散で分散した分散値であり、上記分散値[・]と上記分散値<・>とは相互に変換可能であり、aは被除数であり、dは除数であり、mは3以上の分散数であり、uはlog m以上の整数であり、/は小数点以下を切り捨てる除算を表す演算子であり、
m台の秘密計算装置を含み、被除数aの分散値[a]と除数dとを入力とし、被除数aの除数dによる小数点以下切り捨ての除算結果a/dの分散値[a/d]を計算する秘密除算システムであって、
上記秘密計算装置は、
上記分散値[a]を上記加法的秘密分散の分散値<a>=<a>0, …, <a>m-1に変換する入力変換部と、
上記分散値[a]と上記除数dを用いて分散値<a'>=<2ua>と値d'=2udを計算する公開値倍部と、
上記分散値<a'>を用いて値a'の素数pによる商qの分散値<q>を得る商転移部と、
素数pの値d'による商p'と剰余r'を得る公開除算部と、
r'≧d'/2ならばz=1を設定し、r'<d'/2ならばz=0を設定したフラグzを得るフラグ設定部と、
0以上m未満の各整数iについて、i=0であれば<b>i=(<a'>i+(d'-r')+(d'-r')/2)/d'を計算し、i≠0であれば<b>i=<a'>i/d'を計算し、分散値<b>=<b>0, …, <b>m-1を生成する近似部と、
0以上m未満の各整数iについて、上記分散値<b>のシェア<b>iを値d'で割った商p"と剰余r"が、r"≦d'/2-1であれば<b'>i=<p">を計算し、r"≧d'/2であれば<b'>i=<p"+1>を計算し、分散値<b'>=<b'>0, …, <b'>m-1を得る端数処理部と、
上記分散値<b'>, <q>と上記商p'と上記フラグzを用いて、<b'>-(p'+z)<q>-1を計算し、上記除算結果a/dの分散値<a/d>として得る出力計算部と、
上記分散値<a/d>を上記第一の秘密分散の分散値[a/d]に変換する出力変換部と、
を含む秘密除算システム。
【請求項５】
請求項３または４に記載の秘密除算システムであって、
μ<0, M≧0とし、aはμ≦a≦Mを満たし、
上記入力変換部は、-μ≦wd≦2|p|-uを満たすwを計算し、上記分散値[a]を分散値[wd+a]で更新するものであり、
上記出力変換部は、変換後の分散値[a/d]からwを減算した結果を上記分散値[a/d]として出力するものである、
秘密除算システム。
【請求項６】
[・]は値・を第一の秘密分散で分散した分散値であり、<・>は値・を加法的秘密分散で分散した分散値であり、{・}は値・のビット表現を分散した分散値であり、上記分散値[・]と上記分散値<・>とは相互に変換可能であり、aは任意の値であり、bはシフト量であり、mは3以上の分散数であり、uはlog m以上の整数であり、lは値aのビット数であり、≫は右シフト演算子であり、
m台の秘密計算装置を含み、値aの分散値[a]とシフト量bとを入力とし、値aをbビット右シフトした値の分散値[a≫b]を計算する秘密右シフト演算システムが実行する秘密右シフト演算方法であって、
上記秘密計算装置の公開値倍部が、上記分散値[a]を用いて分散値[a']=[2ua]を計算し、
上記秘密計算装置の第一変換部が、上記分散値[a']を加法的秘密分散の分散値<a'>=<a'>0, …, <a'>m-1に変換し、
上記秘密計算装置の右シフト演算部が、0以上m未満の各整数iについて、
i=<a'>i≫b+uを計算し、分散値
=
0, …, 
m-1を生成し、
上記秘密計算装置の第二変換部が、上記分散値
を第一の秘密分散の分散値[s]に変換し、
上記秘密計算装置の第一ビット変換部が、0以上m未満の各整数iについて、上記分散値<a'>のシェア<a'>iの下位uビットをビット表現の分散値{a'i mod 2u}に変換し、
上記秘密計算装置の商転移部が、上記分散値{a'imod 2u}を用いて-Σi<m{a'imod 2u}の下位uビットを計算し、ビット表現の分散値{q}として得、
上記秘密計算装置の第三変換部が、上記分散値{q}を第一の秘密分散の分散値[q]に変換し、
上記秘密計算装置の出力計算部が、上記分散値[s], [q]を用いて[s]-[2l-(b+u)q]+1を計算し、上記分散値[a≫b]として得る、
秘密右シフト演算方法。
【請求項７】
pは素数であり、[・]は値・をシェア数が3である第一の秘密分散で分散した分散値であり、<・>は値・をシェア数が2である加法的秘密分散で分散した分散値であり、上記分散値[・]と上記分散値<・>とは相互に変換可能であり、aは被除数であり、dは除数であり、/は小数点以下を切り捨てる除算を表す演算子であり、
3台の秘密計算装置を含み、被除数aの分散値[a]と除数dとを入力とし、被除数aの除数dによる小数点以下切り捨ての除算結果a/dの分散値[a/d]を計算する秘密除算システムが実行する秘密除算方法であって、
上記秘密計算装置の入力変換部が、上記分散値[a]を上記加法的秘密分散の分散値<a>=<a>0, <a>1に変換し、
上記秘密計算装置の公開値倍部が、上記分散値[a]と上記除数dを用いて分散値<a'>=<2a>と値d'=2dを計算し、
上記秘密計算装置の商転移部が、上記分散値<a'>を用いて値a'の素数pによる商qの分散値<q>を得、
上記秘密計算装置の公開除算部が、素数pの値d'による商p'と剰余r'を得、
上記秘密計算装置の近似部が、上記分散値<a'>と上記値d'と上記剰余r'を用いて、<b>0=(<a'>0+d'-1-r')/d', <b>1=<a'>1/d'を計算し、分散値<b>=<b>0, <b>1を生成し、
上記秘密計算装置の出力計算部が、上記分散値<b>, <q>と上記商p'を用いて、<b>-(p'+1)<q>+1を計算し、上記除算結果a/dの分散値<a/d>として得、
上記秘密計算装置の出力変換部が、上記分散値<a/d>を上記第一の秘密分散の分散値[a/d]に変換する、
秘密除算方法。
【請求項８】
pは素数であり、[・]は値・をシェア数がmである第一の秘密分散で分散した分散値であり、<・>は値・をシェア数がmである加法的秘密分散で分散した分散値であり、上記分散値[・]と上記分散値<・>とは相互に変換可能であり、aは被除数であり、dは除数であり、mは3以上の分散数であり、uはlog m以上の整数であり、/は小数点以下を切り捨てる除算を表す演算子であり、
m台の秘密計算装置を含み、被除数aの分散値[a]と除数dとを入力とし、被除数aの除数dによる小数点以下切り捨ての除算結果a/dの分散値[a/d]を計算する秘密除算システムが実行する秘密除算方法であって、
上記秘密計算装置の入力変換部が、上記分散値[a]を上記加法的秘密分散の分散値<a>=<a>0, …, <a>m-1に変換し、
上記秘密計算装置の公開値倍部が、上記分散値[a]と上記除数dを用いて分散値<a'>=<2ua>と値d'=2udを計算し、
上記秘密計算装置の商転移部が、上記分散値<a'>を用いて値a'の素数pによる商qの分散値<q>を得、
上記秘密計算装置の公開除算部が、素数pの値d'による商p'と剰余r'を得、
上記秘密計算装置のフラグ設定部が、r'≧d'/2ならばz=1を設定し、r'<d'/2ならばz=0を設定したフラグzを得、
上記秘密計算装置の近似部が、0以上m未満の各整数iについて、i=0であれば<b>i=(<a'>i+(d'-r')+(d'-r')/2)/d'を計算し、i≠0であれば<b>i=<a'>i/d'を計算し、分散値<b>=<b>0, …, <b>m-1を生成し、
上記秘密計算装置の端数処理部が、0以上m未満の各整数iについて、上記分散値<b>のシェア<b>iを値d'で割った商p"と剰余r"が、r"≦d'/2-1であれば<b'>i=<p">を計算し、r"≧d'/2であれば<b'>i=<p"+1>を計算し、分散値<b'>=<b'>0, …, <b'>m-1を得、
上記秘密計算装置の出力計算部が、上記分散値<b'>, <q>と上記商p'と上記フラグzを用いて、<b'>-(p'+z)<q>-1を計算し、上記除算結果a/dの分散値<a/d>として得、
上記秘密計算装置の出力変換部が、上記分散値<a/d>を上記第一の秘密分散の分散値[a/d]に変換する、
秘密除算方法。
【請求項９】
請求項１または２に記載の秘密右シフト演算システムもしくは請求項３から５のいずれかに記載の秘密除算システムに含まれる秘密計算装置。
【請求項１０】
請求項９に記載の秘密計算装置としてコンピュータを機能させるためのプログラム。
【国際調査報告】
2020075797.tif 000019
2020075797.tif 000020
2020075797.tif 000021
2020075797.tif 000022