JP5858938B2 - 計算装置、計算システム、計算方法 - Google Patents

計算装置、計算システム、計算方法 Download PDF

Info

Publication number
JP5858938B2
JP5858938B2 JP2013006444A JP2013006444A JP5858938B2 JP 5858938 B2 JP5858938 B2 JP 5858938B2 JP 2013006444 A JP2013006444 A JP 2013006444A JP 2013006444 A JP2013006444 A JP 2013006444A JP 5858938 B2 JP5858938 B2 JP 5858938B2
Authority
JP
Japan
Prior art keywords
node
carry
operator
log
carry operator
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2013006444A
Other languages
English (en)
Other versions
JP2014137740A (ja
Inventor
鈴木 幸太郎
幸太郎 鈴木
一樹 米山
一樹 米山
一真 大原
一真 大原
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nippon Telegraph and Telephone Corp
Original Assignee
Nippon Telegraph and Telephone Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nippon Telegraph and Telephone Corp filed Critical Nippon Telegraph and Telephone Corp
Priority to JP2013006444A priority Critical patent/JP5858938B2/ja
Publication of JP2014137740A publication Critical patent/JP2014137740A/ja
Application granted granted Critical
Publication of JP5858938B2 publication Critical patent/JP5858938B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明は、ビット表現された2つの整数を秘匿計算でビット加算する計算装置、計算システム、計算方法に関する。
秘密情報を秘匿したまま、その秘密情報を入力とした関数を計算する秘匿計算を実現する手法として、マルチパーティ計算(Multi-Party Computation:MPC)が知られている。MPCでは,秘密情報を持つ2台以上の計算装置が、秘匿された秘密情報を入力値として協調計算を行うことによって求める関数値を計算する。しかし、一般的な手法によって実現されるプロトコルは効率的でないことが多いため、特定の関数を効率よく構成することを目的とした発明がある。
閾値型秘密分散法に基づくMPCとして、非特許文献1が知られている。秘密分散を用いたMPCは、掛け算や足し算を含む算術演算を論理回路演算と比べて高速に実行することができる。しかし、大小比較や等号判定、剰余演算などの一部の基本的な演算は、算術回路で効率的に実現することが難しいと考えられていた。
非特許文献2では、いくつかの重要な関数を定数ラウンドで実行するMPCプロトコルが示されている。ラウンド数はプロトコルの実行時間に強く影響する処理コストであり、定数ラウンドのプロトコルは入力のサイズに依らずに常に一定の計算時間を保証するため、大きなサイズのデータを扱う場合などにおいて都合がよい。特に、秘匿された整数を、その整数のビットごとの秘匿された値に変換するビット分解(Bit-Decomposition,BD)プロトコルは非常に強力であり、BDによって算術回路への入力を論理回路への入力に変換することによって、算術回路だけでは難しい演算を効率的に行うことが可能である。また、非特許文献3には、大小比較プロトコルを拡張することによってBDを構成することによって、ビット演算の効率化を図った発明が示されている。
M. Ben-Or, S. Goldwasser, and A. Wigderson, "Completeness Theorems for Non-Cryptographic Fault-Tolerant Distributed Computation", In STOC 1988, pages 1-10, 1988. I. Damgard, M. Fitzi, E. Kiltz, J. B. Nielsen, and T. Toft, "Unconditionally Secure Constant-Rounds Multi-party Computation for Equality, Comparison, Bits and Exponentiation", In TCC 2006, pages 285-304, 2006. T. Toft, "Constant-Rounds, Almost-Linear Bit-Decomposition of Secret Shared Values", In CT-RSA 2009, pages 357-371, 2009.
しかしながら、BDは非常に大きな通信量を要するという問題があり、非特許文献3においてもビット加算(Bit-Addition)プロトコルについては解決されていない。本件出願人の知る限りにおいては、ビット加算を行うプロトコルは非特許文献2の方式が最良であり、L桁でビット表現された整数同士をビット加算する場合、L・logLのオーダ(以下、O(L・logL)のように表現する)であった。ただし、logは底が2の対数である。加算は多くの関数で用いられる汎用的な演算の一つであり、ビット表現は大小比較や等号判定などを効率よく行うことが可能であるので、ビット加算を効率よく行うことが出来れば、BDを経由せずこれらを組み合わせた計算の効率を向上できると期待される。ところが、ビット加算の計算は桁上がり(キャリー)の計算の取り扱いが難しい。定数ラウンドのMPCの多くは、入力の長さをLとしたとき,L個の計算を並列に行うことで、定数ラウンドかつ線形な通信量(O(L))を実現している。一方で、キャリーの計算は通常、キャリーの伝搬を下位のビットから順に処理していく必要があるため、ビットごとに並列に計算を行うことは難しい。それゆえ、非特許文献2でもキャリーの計算はO(L・logL)の通信量でしか実現できていない。そして、これがビット加算をO(L・logL)の通信量でしか実現できていない原因である。
本発明は、このような課題に鑑みてなされたものであり、ビット加算プロトコルの通信量削減を妨げているキャリーの計算での通信量を削減することを目的とする。
本発明の計算装置システムは、ビット表現された2つの整数をビット加算したときに発生するキャリービットを秘匿計算で求める計算システムであり、ネットワークで接続されたN台の計算装置で構成される。本発明の計算装置は、この計算システムの中の1つの計算装置である。まず、Nは2以上の整数、nは1以上N以下の整数、^はべき乗を示す記号、Lは((2^2)^・・・)^2のように2に対して2乗を0回以上繰り返した整数、qはLビットの素数、Zは0以上q−1以下の整数の集合、aとbはL桁でビット表現された有限体上の整数、[a]は整数aがN台の前記計算装置で秘匿された状態であることを示す記号、logは底が2の対数、log*(1)xを、
Figure 0005858938
とする。
本発明の計算装置は、キャリー演算子算出部、Log分岐木作成部、ノード演算実行部、キャリー伝搬処理部、ルート演算実行部、出力部を備える。キャリー演算子算出部は、他の計算装置と協調して[a]と[b]に対して、ビット表現された桁ごとに、両方とも1であることを示す秘匿された演算子S、一方だけ1であることを示す秘匿された演算子P、両方とも0であることを示す秘匿された演算子Kのいずれか1つを求め、各桁のキャリー演算子とする。Log分岐木作成部は、キャリー演算子の列を1つのノードに割り当て、キャリー演算子の列をlog(ノードに割り当てられたキャリー演算子の数)個ごとに分割してそれぞれ別のノードに割り当てる処理をキャリー演算子の数が1になるまで繰り返すことで、Log分岐木を作成する。ノード演算実行部は、Log分岐木のノードごとに、割り当てられたキャリー演算子の列に対して、
xをS,P,Kのいずれかとするときに、
S=Sx,K=Kx,x=Px
の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とする。
キャリー伝搬処理部は、プレフィックスLog演算手段を有し、同じキャリー演算子の列から分割されたキャリー演算子の列が割り当てられたノード同士の間で、そのノードのノードキャリー演算子とそのノードよりも下の桁のキャリー演算子が割り当てられたノードのノードキャリー演算子で構成されるキャリー演算子の列に対して、プレフィックスLog演算手段の処理を実行し、その結果を各ノードのノードキャリー演算子にする。プレフィックスLog演算手段は、以下の(1),(2),(3)の処理を行う。
(1)キャリー演算子の列を1つのノードに割り当て、キャリー演算子の列を2分割してそれぞれ別のノードに割り当てる処理をキャリー演算子の数が1になるまで繰り返すことで、2分岐木を作成する。
(2)前記2分岐木のノードごとに、割り当てられたキャリー演算子の列に対して、
xをS,P,Kのいずれかとするときに、
S=Sx,K=Kx,x=Px
の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とする。
(3)前記2分岐木の作成のときに1つのキャリー演算子が割り当てられたノードと、そのノードよりも下の桁のキャリー演算子が割り当てられたノードが属する部分木のルートノードのノードキャリー演算子とで構成されるキャリー演算子の列に対して、
xをS,P,Kのいずれかとするときに、
S=Sx,K=Kx,x=Px
の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とする。
ルート演算実行部は、Log分岐木作成部の処理で1つのキャリー演算子が割り当てられたノードと、そのノードよりも下の桁のキャリー演算子が割り当てられたノードが属する部分木のルートノードのノードキャリー演算子とで構成されるキャリー演算子の列に対して、
xをS,P,Kのいずれかとするときに、
S=Sx,K=Kx,x=Px
の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とする。出力部は、ルート演算実行部の処理の結果、ノードキャリー演算子がSとなった桁から1つ上の桁へのキャリービットが1であることを示す秘匿された情報を出力し、その他の結果の桁はキャリービットが0であることを示す秘匿された情報を出力する。
本発明の計算システムによれば、キャリー演算子の列をlog(ノードに割り当てられたキャリー演算子の数)個ごとに分割してLog分岐木を作成するので、分岐木の深さをlog*(1)Lにできる。よって、非特許文献2の分岐木の深さlogLよりも浅くできる。また、プレフィックスLog演算手段を用いて兄弟ノード間でのキャリー伝搬を処理するので、3以上に分割した場合でもルート演算実行部の処理量を減らすことができる。したがって、本発明の計算システムでは、キャリーの計算での通信量をO(L・log*(1)L)にできる。
本発明の計算システムの構成例を示す図。 加算結果の断片を秘密分散する処理フローを示す図。 秘匿された値同士の乗算結果の断片を秘密分散する処理フローを示す図。 定数との乗算結果の断片を秘密分散する処理フローを示す図。 i+1桁目のaとbのビット[a],[b]とキャリー演算子を示すビットである[s],[p],[k]との関係を示す図。 i+1桁目のaとbのビット[a],[b]からキャリー演算子を求める処理フローを示す図。 2分岐木を用いた計算装置の構成例を示す図。 図7の計算装置で構成した計算システムの処理フローを示す図。 a=“11011011”,b=“01100001”の場合のキャリー演算子と演算結果とキャリーの関係を例示する図。 図9の例のときに作成される2分岐木を示す図。 図9の例のときに得られるノードキャリー演算子を示す図。 図9の例のときの2分岐ルート演算実行部850の処理を説明するための図。 実施例1の計算装置の機能構成例を示す図。 実施例1の計算装置を用いた計算システムの処理フローを示す図。 Log分岐木を説明するための図。 a=“0010110011011011”,b=“0001100001100001”の場合のキャリー演算子と演算結果とキャリーの関係を例示する図。 図16の例のときに作成されるLog分岐木を示す図。 図16の例のときに得られるノードキャリー演算子を示す図。 図16の例のときのキャリー伝搬処理部140の処理(S140)を説明する図。 図16の例のときのキャリー伝搬処理部140の処理(S140)後のLog分岐木を示す図。 図16の例のときのルート演算実行部150の処理を説明するための図。 実施例2の計算装置の機能構成例を示す図。 実施例2の計算システムの処理フローの例を示す図。 Log*(C−1)分岐木を説明するための図。
以下、本発明の実施の形態について、詳細に説明する。なお、同じ機能を有する構成部には同じ番号を付し、重複説明を省略する。
図1に本発明の計算システムの構成例を示す。計算システムは、ネットワーク900に接続されたN台の計算装置100,…,100で構成される。実施例1の説明では、Nは2以上の整数、nは1以上N以下の整数、^はべき乗を示す記号、Lは((2^2)^・・・)^2のように2に対して2乗を0回以上繰り返した整数、iは0以上L−1以下の整数、qはLビットの素数、Zは0以上q−1以下の整数の集合、aとbはL桁でビット表現された有限体上の整数、[a]は整数aが計算装置100,…,100で秘密分散された状態であることを示す記号、[a]はビット表現された整数aのi+1桁目が計算装置100,…,100で秘密分散された状態であることを示す記号、logは底が2の対数、log*(1)xを、
Figure 0005858938
とする。なお、aとaとの関係は、
Figure 0005858938
である。
<予備的説明>
まず、秘匿計算について説明する。N台の計算装置で有限体Zに属する整数aを秘密分散する方法として、K−1次多項式f_a(x)を用いる方法などがある(ただし、K<N/2)。この方法では、例えば、f_a(0)=aとし、計算装置100にはf_a(n)を配る。配られる情報f_a(n)を整数aの断片と呼ぶことにする。このとき、K台の計算装置が協力すればK−1次多項式f_a(x)を解くことができるので、f_a(0)を求めることができる。
図2に加算結果の断片を秘密分散する処理フローを示す。a+b mod qに対する断片を求めるためには、計算装置100は個別に
f_a+b(n)=f_a(n)+f_b(n) mod q
を計算する(S910)。各計算装置が個別に計算すればよいので、計算装置間での通信は不要である。
図3に秘匿された値同士の乗算結果の断片を秘密分散する処理フローを示す。乗算(a×b mod q)の場合は、
f_ab(n)=f_a(n)×f_b(n) mod q
を計算する(S921)。しかし、f_ab(x)は2(K−1)次の多項式になってしまう。そこで、計算装置100は、K−1次多項式F_(f_ab(n))(x)を用いて、f_ab(n)の断片F_(f_ab(n))(1),…,F_(f_ab(n))(N)を計算し、計算装置100に断片F_(f_ab(n))(m)を配る(S922)。したがって、N(N−1)回の通信、つまり通信量がO(N)の通信が必要になる。次に、計算装置100は、断片F_(f_ab(1))(n),…,F_(f_ab(N))(n)から、個別に、ラグランジェ多項式補間によって断片F_ab(n)を求める(S923)。
図4に定数との乗算(k×a mod q)の結果の断片を秘密分散する処理フローを示す。この場合は、計算装置100は個別に、
f_ka(n)=k×f_a(n) mod q
を計算する(S930)。各計算装置が個別に計算すればよいので、計算装置間での通信は不要である。したがって、秘匿された値同士の乗算の場合に通信が必要になることが分かる。
図5に、i+1桁目のaとbのビット[a],[b]とキャリー演算子を示すビットである[s],[p],[k]との関係を示す。図6にi+1桁目のaとbのビット[a],[b]からキャリー演算子を求める処理フローを示す。[s]は[a]と[b]とが両方とも1であり、桁上がり(キャリー)があることを示すビットである。[p]は[a]と[b]のいずれか一方が1であり、下位の桁の結果によって桁上がり(キャリー)があるか否かが決まることを示すビットである。[k]は[a]と[b]とが両方とも0であり、桁上がり(キャリー)がないことを示すビットである。
計算装置100,…,100は、[s]
[s]=[a]×[b]
の秘匿計算によって求める(S811)。この計算では、秘匿されたビット同士の乗算なので計算装置間での通信が必要である。そして、計算装置100,…,100は、[p]
[p]=[a]+[b]−2[s]
のように秘匿計算によって求め(S812)、[k]
[k]=1−[s]−[p]
のように秘匿計算によって求める(S813)。そして、[s],[p],[k]の組[e]を出力する(S814)。ステップS812〜S814の処理では計算装置間で通信の必要はない。
求められた組[e]は、[a]と[b]のi+1桁のビットが、両方とも1であることを示す秘匿された演算子S、一方だけ1であることを示す秘匿された演算子P、両方とも0であることを示す秘匿された演算子Kを示す情報である。
<2分岐木を用いたキャリー計算>
図7に2分岐木を用いた計算装置の構成例を示す。この構成は、非特許文献2に示された方式に基づいた計算装置800であり、計算システムは図1のようにネットワーク900に接続されたN台の計算装置800,…,800で構成されている。計算装置800は、キャリー演算子算出部810、2分岐木作成部820、ノード演算実行部830、2分岐ルート演算実行部850、出力部880、記録部890を備える。記録部890は、整数a,bの断片などを記録しておく。図8に図7の計算装置で構成した計算システムの処理フローを示す。また、図9に、a=“11011011”,b=“01100001”の場合のキャリー演算子と演算結果とキャリーの関係を例示する。図9では、2分岐木を用いたキャリーの計算を説明しやすいように、L=8の例を示している。以下では、一連の処理によって演算結果の行に示されたキャリー演算子の列が得られることを示す。
計算装置800,…,800のキャリー演算子算出部810,…,810は、例えば図6に示した方法で、[a]と[b]に対して、ビット表現された桁ごとに、両方とも1であることを示す秘匿された演算子S、一方だけ1であることを示す秘匿された演算子P、両方とも0であることを示す秘匿された演算子Kのいずれか1つを求め、各桁のキャリー演算子とする(S810)。この処理では、秘匿されたビット同士の乗算の処理がL桁分の処理に必要なので、計算装置800,…,800間でのO(N)の通信がO(L)回必要である。つまり、O(L)のオーダの通信量が必要である。図9に示したaとbの場合、S810,…,S810では、“PSPPPKPS”というキャリー演算子の列が算出される。
2分岐木作成部820,…,820は、キャリー演算子の列を1つのノードに割り当て、キャリー演算子の列を2分割してそれぞれ別のノードに割り当てる処理をキャリー演算子の数が1になるまで繰り返すことで、2分岐木を作成する(S820)。この処理では、通信は必要ない。図10に、図9の例のときに作成される2分岐木を示す。最初にノード821−0−1に“PSPPPKPS”が割り当てられる。そして、このキャリー演算子の列が2分割され、ノード821−1−1には下位の桁側の“PKPS”が、ノード821−1−2には上位の桁側の“PSPP”が割り当てられる。同じ処理を繰り返すと、図10に示した2分岐木が作成される。2分岐木の場合、分岐木の深さはlogLになる。したがって、L=8の場合の深さは3であり、L=16ならば深さは4である。
ノード演算実行部830,…,830は、2分岐木のノードごとに、割り当てられたキャリー演算子の列に対して、
xをS,P,Kのいずれかとするときに、
S=Sx,K=Kx,x=Px
の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とする。図11は、図9の例のときに得られるノードキャリー演算子を示す図である。1回のキャリー演算子同士の演算では、1回の秘匿されたビット同士の乗算だから、1回のO(N)のオーダの通信が必要である。よって、1つのノードに割り当てられたキャリー演算子が1つになるまで演算を行うには(ノードに割り当てられた数−1)回のO(N)のオーダの通信が必要である(つまり、O(ノードに割り当てられた数)のオーダの通信量となる)。そして、分岐木の深さがlogLであることから、2分岐木全体に対してステップS830の処理を行うには、O(L・logL)のオーダの通信量が必要となる。
2分岐ルート演算実行部850,…,850は、2分岐木作成部の処理で1つのキャリー演算子が割り当てられたノードと、そのノードよりも下の桁のキャリー演算子が割り当てられたノードが属する部分木のルートノードのノードキャリー演算子とで構成されるキャリー演算子の列に対して、
xをS,P,Kのいずれかとするときに、
S=Sx,K=Kx,x=Px
の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とする(S850)。図12に、図9の例のときの2分岐ルート演算実行部850の処理のイメージを示す。例えば、点線で丸印を付したノード821−3−6の場合、このノードよりも下の桁のキャリー演算子が割り当てられたノードは、ノード821−3−1〜5なので、ノード821−3−1〜6に割り当てられたキャリー演算子の列の演算を行えばよい。例えば、ノード821−3−1〜4に割り当てられたキャリー演算子を演算した結果はノード821−1−1に割り当てられているので、ノード821−3−6,821−3−5,821−1−1に割り当てられたキャリー演算子の列“PPK”を演算し、演算結果“K”を得る。もしくは、ノード821−3−1〜4の結果はノード821−1−1に割り当てられ、ノード821−3−6,821−3−5の結果はノード821−2−3に割り当てられているので、“PK”を演算し、演算結果“K”を得てもよい。この処理でも、整数a,bのビット長Lと分岐木の深さlogLを考慮すると、O(L・logL)のオーダの通信量が必要である。
そして、出力部880,…,880は、2分岐ルート演算実行部850,…,850の処理の結果、ノードキャリー演算子がSの桁から1つ上の桁へのキャリービットが1であることを示す秘匿された情報を出力し、その他の結果の桁はキャリービットが0であることを示す秘匿された情報を出力する(S880)。図9の例の場合であれば、図12に示されているように“SSKKKKSS”を出力する。これのキャリー演算子の列は、図9の演算結果の行に示されたキャリー演算子の列と一致する。そして、このキャリー演算子の列は、それぞれ、1つ上の桁へのキャリービットが1であるか0であるかをそれぞれ示している。
計算装置800,…,800で構成された計算システムの場合、最も通信量が必要な処理の通信量のオーダがO(L・logL)なので、全体としてO(L・logL)のオーダの通信量が必要である。
<実施例1の構成と処理フロー>
本実施例の計算システムの構成例は、図1に示したとおりである。図13に、実施例1の計算装置の機能構成例を示す。図14に、実施例1の計算装置を用いた計算システムの処理フローを示す。計算装置100は、キャリー演算子算出部810、Log分岐木作成部120、ノード演算実行部830、キャリー伝搬処理部140、ルート演算実行部150、出力部180、記録部190を備える。記録部190は、整数a,bの断片などを記録しておく。本実施例では、図15に示したLog分岐木を作成する。Log分岐木は、1つの子ノードに割り当てるキャリー演算子の数がlog(親ノードに割り当てられたキャリー演算子の数)となるようにキャリー演算子の列を分割する。したがって、子ノードの数は(親ノードに割り当てられたキャリー演算子の数)/log(親ノードに割り当てられたキャリー演算子の数)となる。図16は、a=“0010110011011011”,b=“0001100001100001”の場合のキャリー演算子と演算結果とキャリーの関係を例示する。図16では、Log分岐木を用いたキャリーの計算を説明しやすいように、L=16の例を示している。以下では、一連の処理によって演算結果の行に示されたキャリー演算子の列が得られることを示す。
キャリー演算子算出部810は、他の計算装置と協調して[a]と[b]に対して、ビット表現された桁ごとに、両方とも1であることを示す秘匿された演算子S、一方だけ1であることを示す秘匿された演算子P、両方とも0であることを示す秘匿された演算子Kのいずれか1つを求め、各桁のキャリー演算子とする(S810)。この処理は、計算装置800と同じである。この処理では、秘匿されたビット同士の乗算の処理がL桁分の処理に必要なので、計算装置100,…,100間でのO(N)の通信がO(L)回必要である。つまり、O(L)のオーダの通信量が必要である。図16に示したaとbの場合、S810,…,S810では、“KKPPSPKKPSPPPKPS”というキャリー演算子の列が算出される。
Log分岐木作成部120は、キャリー演算子算出部810で算出したキャリー演算子の列を1つのノードに割り当て、キャリー演算子の列をlog(ノードに割り当てられたキャリー演算子の数)個ごとに分割してそれぞれ別のノードに割り当てる処理をキャリー演算子の数が1になるまで繰り返すことで、分岐木を作成する(S120)。本明細書では、この分岐木をLog分岐木と呼ぶことにする。この処理では、通信は必要ない。図17に、図16の例のときに作成されるLog分岐木を示す。最初にノード121−0−1に“KKPPSPKKPSPPPKPS”が割り当てられる。ノード121−0−1に割り当てられたキャリー演算子の数は16なので、その子ノードの1つには、4(=log16)個ずつのキャリー演算子が割り当てられるので、4分割されることになる。したがって、ノード121−1−1には最下位の“PKPS”が、ノード121−1−2には“PSPP”が、ノード121−1−3には“SPKK”が、ノード121−1−4には“KKPP”が割り当てられる。同じ処理を繰り返すと、図17に示したLog分岐木が作成される。Log分岐木の場合、分岐木の深さはlog*(1)Lになる。したがって、L=16=(2^2)^2の場合の深さは3である。2分岐木の場合はL=16=2^4のときは深さが4になるので、Log分岐木の方が、深さが浅くなることが分かる。logL分岐木の場合、深さが4になるのは65536=((2^2)^2)^2(つまり、log*(1)65536=4)である。2分岐木の場合、65536は2^16なので深さが16となる。このように、桁数Lが大きくなるほどLog分岐木と2分岐木との深さに差がでることが分かる。また、Log分岐木の深さが5になるのは2^65536なので、実際のシステムでは、log*(1)Lは4または5になると考えられる。
ノード演算実行部830は、Log分岐木のノードごとに、割り当てられたキャリー演算子の列に対して、
xをS,P,Kのいずれかとするときに、
S=Sx,K=Kx,x=Px
の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とする。なお、“規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め”とは、規則にしたがった演算を忠実に実行するという意味に限定するものではなく、忠実に実行したのと同じ結果が得られるように演算することを意味している。例えば、SとKは、その演算子よりも下位の桁の演算子に関わらず、演算結果が決まっている。つまり、上位側から演算し、SまたはKが出現すれば、それよりも下位の桁については演算しなくても、忠実に演算したのと同じ結果が得られるので、それより下位側の演算は省略してもよい。図18は、図16の例のときに得られるノードキャリー演算子を示す図である。1回のキャリー演算子同士の演算では、1回の秘匿されたビット同士の乗算だから、1回のO(N)のオーダの通信が必要である。よって、1つのノードに割り当てられたキャリー演算子が1つになるまで演算を行うには(ノードに割り当てられた数−1)回のO(N)のオーダの通信が必要である(つまり、O(ノードに割り当てられた数)のオーダの通信量となる)。そして、分岐木の深さがlog*(1)Lであることから、Log分岐木全体に対してステップS830の処理を行うには、O(L・log*(1)L)のオーダの通信量が必要となる。
キャリー伝搬処理部140は、プレフィックスLog演算手段160(0) を有し、同じキャリー演算子の列から分割されたキャリー演算子の列が割り当てられたノード同士(このようなノードを「兄弟ノード」と呼ぶことにする。)の間で、そのノードのノードキャリー演算子とそのノードよりも下の桁のキャリー演算子が割り当てられたノードのノードキャリー演算子で構成されるキャリー演算子の列に対して、プレフィックスLog演算手段の処理を実行し、その結果を各ノードのノードキャリー演算子にする(S140)。この処理で兄弟ノード間でのキャリーの伝搬を考慮したノードキャリー演算子を設定できる。プレフィックスLog演算手段160(0) は、図7に示した2分岐木作成部820、ノード演算実行部830、2分岐ルート演算実行部850をまとめた機能を持つ手段であり、以下の(1),(2),(3)の処理を行う。
(1)キャリー演算子の列を1つのノードに割り当て、キャリー演算子の列を2分割してそれぞれ別のノードに割り当てる処理をキャリー演算子の数が1になるまで繰り返すことで、2分岐木を作成する(2分岐木作成部820の処理に相当する。)。
(2)前記2分岐木のノードごとに、割り当てられたキャリー演算子の列に対して、
xをS,P,Kのいずれかとするときに、
S=Sx,K=Kx,x=Px
の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とする(ノード演算実行部830の処理に相当する。)。
(3)前記2分岐木の作成のときに1つのキャリー演算子が割り当てられたノードと、そのノードよりも下の桁のキャリー演算子が割り当てられたノードが属する部分木のルートノードのノードキャリー演算子とで構成されるキャリー演算子の列に対して、
xをS,P,Kのいずれかとするときに、
S=Sx,K=Kx,x=Px
の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とする(2分岐ルート演算実行部850の処理に相当する。)。これらの処理によって、兄弟ノード内の下位の桁側のキャリー演算子の影響を含んだキャリー演算子が、各ノードのノードキャリー演算子として設定される。
図19は、図16の例のときのキャリー伝搬処理部140の処理(S140)を説明する図である。図19(A)のLog分岐木は、図18と同じであり、兄弟ノードの考え方が分かるように、いくつかの兄弟ノードを点線の丸でまとめている。兄弟ノードAに含まれるノードは、どれも同一のノード121−0−1(親ノード)から分割されたノードである。兄弟ノードBに含まれるノードや兄弟ノードCに含まれるノードも同じように、同一のノードから分割されている。図19(B)は、兄弟ノードAに含まれるノードのノードキャリー演算子を並べてノード141−1−1に割り当て、2分岐木を作成した例を示している。つまり、兄弟ノードAに対しての上記の(1)の処理が終了した状態である。図19(C)は、図19(B)の2分岐木に対して上記の(2)、(3)の処理を行った状態を示している。この例では、(1),(2),(3)の処理ではノードキャリー演算子の変更はなかった。同様の処理をすべての兄弟ノードに対して行う。図20は、図16の例のときのキャリー伝搬処理部140の処理(S140)後のLog分岐木を示す図である。例えば、兄弟ノード内の下位側のキャリー演算子の影響によって、ノード121−3−4のノードキャリー演算子が“P”から“K”に変更されている。
キャリー伝搬処理部140の処理(S140)にも秘匿されたビットの乗算が含まれている。1段目の兄弟ノードに含まれるノードの数はL/logLであり、これに対して2分岐木を用いたキャリー計算を行うので、通信量はO((L/logL)・log(L/logL))のオーダとなる。また、(L/logL)・log(L/logL)≦Lなので、結局、1段目の兄弟ノードに対する処理に必要な通信量は高々O(L)のオーダである。2段目以下も、兄弟ノードの数は増えるがその分兄弟ノードに含まれるノード数は減るので、段ごとに高々O(L)のオーダの通信量となる。そして、Log分岐木の深さがlog*(1)Lであることから、Log分岐木全体に対してステップS140の処理を行うには、O(L・log*(1)L)のオーダの通信量が必要となる。
ルート演算実行部150は、Log分岐木作成部120の処理(S120)で1つのキャリー演算子が割り当てられたノード(葉ノード:分岐木の末端に相当するノード)と、そのノードよりも下の桁のキャリー演算子が割り当てられたノードが属する部分木のルートノードのノードキャリー演算子とで構成されるキャリー演算子の列に対して、
xをS,P,Kのいずれかとするときに、
S=Sx,K=Kx,x=Px
の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とする(S150)。図21に、図16の例のときのルート演算実行部150の処理を示す。例えば、点線で丸印を付したノード121−3−7の場合、このノードよりも下の桁のキャリー演算子が割り当てられたノードは、ノード121−3−1〜6なので、ノード121−3−1〜7に割り当てられたキャリー演算子の列の演算を行えばよい。例えば、ノード121−3−1〜4に割り当てられたキャリー演算子を演算した結果はノード121−1−1に割り当てられ、ノード121−3−5,6に割り当てられたキャリー演算子を演算した結果はノード121−2−3に割り当てられているので、ノード121−3−7,121−2−2,121−1−1に割り当てられたキャリー演算子の列“SPK”を演算し、演算結果“S”を得る。この処理でも、整数a,bのビット長Lと分岐木の深さlog*(1)Lを考慮すると、O(L・log*(1)L)のオーダの通信量が必要である。
出力部180は、ルート演算実行部150の処理(S150)の結果、ノードキャリー演算子がSとなった桁から1つ上の桁へのキャリービットが1であることを示す秘匿された情報を出力し、その他の結果の桁はキャリービットが0であることを示す秘匿された情報を出力する(S180)。図16の例の場合であれば、図21に示されているように“KKSSSKKKSSKKKKSS”を出力する。これのキャリー演算子の列は、図16の演算結果の行に示されたキャリー演算子の列と一致する。そして、このキャリー演算子の列は、それぞれ、1つ上の桁へのキャリービットが1であるか0であるかをそれぞれ示している。
計算装置100,…,100で構成された計算システムの場合、最も通信量が必要な処理の通信量のオーダがO(L・log*(1)L)なので、全体としてO(L・log*(1)L)のオーダの通信量が必要である。前述したように、logL分岐木の場合、深さが4になるのは65536=((2^2)^2)^2(つまり、log*(1)65536=4)である。それに対し、2分岐木の場合、65536は2^16なので深さが16となる。したがって、桁数Lが大きくなるほどLog分岐木と2分岐木との深さに差がでることが分かる。そして、Log分岐木の深さが5になるのは2^65536なので、実際のシステムでは、log*(1)Lは4または5になると考えられる。言い換えると、Log分岐木の場合、実際には、深さを高々5と考えれば通信量をO(L)のオーダと考えることもできる。
実施例1の計算システムによれば、キャリー演算子の列をlog(ノードに割り当てられたキャリー演算子の数)個ごとに分割してLog分岐木を作成するので、分岐木の深さをlog*(1)Lにできる。よって、非特許文献2の分岐木の深さlogLよりも浅くできる。また、プレフィックスLog演算手段を用いて兄弟ノード間でのキャリー伝搬を処理するので、3以上に分割した場合でもルート演算実行部の処理量を減らすことができる。したがって、本発明の計算システムでは、キャリーの計算での通信量をO(L・log*(1)L)にできる。
実施例1では、
Figure 0005858938
という式を用いた方法を示した。実施例2では、より一般化した例を示す。具体的には、
Figure 0005858938
を用いる。実施例2では、Nは2以上の整数、nは1以上N以下の整数、Lはlog*(C−1)の演算を演算結果が1になるまで繰り返したときにすべての計算結果が整数となる1以上の整数、qはLビットの素数、Zは0以上q−1以下の整数の集合、aとbはL桁でビット表現された有限体上の整数、[a]は整数aがN台の前記計算装置で秘匿された状態であることを示す記号、Cは1以上の整数、cは1以上C以下の整数、logは底が2の対数とする。実施例2の計算システムの構成も図1と同じであり、ネットワーク900で接続された計算装置100(C) ,…,100(C) で構成される。
図22に実施例2の計算装置の機能構成例を、図23に実施例2の計算システムの処理フローの例を、図24に実施例2で作成する分岐木を示す。計算装置100(C) は、キャリー演算子算出部810、Log*(C−1)分岐木作成部120(C) 、ノード演算実行部830、キャリー伝搬処理部140(C) 、ルート演算実行部150(C) 、出力部180(C) 、記録部190(C) 備える。記録部190(C) は、整数a,bの断片などを記録しておく。
キャリー演算子算出部810は、他の計算装置と協調して[a]と[b]に対して、ビット表現された桁ごとに、両方とも1であることを示す秘匿された演算子S、一方だけ1であることを示す秘匿された演算子P、両方とも0であることを示す秘匿された演算子Kのいずれか1つを求め、各桁のキャリー演算子とする(S810)。キャリー演算子算出部810は計算装置100と同じであり、O(L)のオーダの通信量が必要である。
Log*(C−1)分岐木作成部120(C) は、キャリー演算子の列を1つのノードに割り当て、キャリー演算子の列をlog*(C−1)(ノードに割り当てられたキャリー演算子の数)個ごとに分割してそれぞれ別のノードに割り当てる処理をキャリー演算子の数が1になるまで繰り返すことで、図24に示した分岐木を作成する(S120(C) )。本明細書では、この分岐木をLog*(C−1)分岐木と呼ぶことにする。この処理では、通信は必要ない。キャリー演算子を分割する数が異なるだけで、処理の概要は、実施例1と同じである。Log*(C−1)分岐木の深さはlog*(C)Lである。そして、log*(C)L≦log*(1)Lなので、Log*(C−1)分岐木の方がLog分岐木(実施例1で示した分岐木)よりも深さが浅い。
ノード演算実行部830は、Log*(C−1)分岐木のノードごとに、割り当てられたキャリー演算子の列に対して、
xをS,P,Kのいずれかとするときに、
S=Sx,K=Kx,x=Px
の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とする(S830)。ノード演算実行部830は、計算装置100と同じである。よって、1つのノードに割り当てられたキャリー演算子が1つになるまで演算を行うには、O(ノードに割り当てられた数)のオーダの通信量が必要である。そして、分岐木の深さがlog*(C−1)Lなので、通信量はO(L・log*(C−1)L)のオーダである。
キャリー伝搬処理部140(C) は、プレフィックスLog*(C−1)演算手段160(C−1) を有し、同じキャリー演算子の列から分割されたキャリー演算子の列が割り当てられたノード同士の間(兄弟ノード間)で、そのノードのノードキャリー演算子とそのノードよりも下の桁のキャリー演算子が割り当てられたノードのノードキャリー演算子で構成されるキャリー演算子の列に対して、プレフィックスLog*(C−1)演算手段の処理を実行し、その結果を各ノードのノードキャリー演算子にする(S140(C) )。この処理のイメージも実施例1と同じである。ただし、キャリー伝搬処理部140(C) は、Cの値が1つ小さいプレフィックスLog*(C−1)演算手段160(C−1) を有している点には注意されたい。以下で詳しく説明するが、キャリー伝搬処理部140(C) は入れ子構造になっているので、1つずつ小さくしながら繰り返す処理を行う。
図22には、Log*(C−1)分岐木作成部120(C) 、ノード演算実行部830、キャリー伝搬処理部140(C) 、ルート演算実行部150(C) で、プレフィックスLog*(C)演算手段160(C) を構成することを示している。同様に、プレフィックスLog*(C−1)演算手段160(C−1) (図示していない)は、Log*(C−2)分岐木作成部120(C−1) 、ノード演算実行部830、キャリー伝搬処理部140(C−1) 、ルート演算実行部150(C−1) で構成されている。このように入れ子構造なので、cが2以上のときは、キャリー伝搬処理部140(c) はプレフィックスLog*(c−1)演算手段160(c−1) を有しており、プレフィックスLog*(c−1)演算手段160(c−1) は、Log*(c−2)分岐木作成部120(c−1) 、ノード演算実行部830、キャリー伝搬処理部140(c−1) 、ルート演算実行部150(c−1) で構成されている。また、c=1のときはキャリー伝搬処理部140(1) はプレフィックスLog*(0)演算手段160(0) を有しており、プレフィックスLog*(0)演算手段160(0) は、実施例1に示したプレフィックスLog演算手段160(0) と同じである。つまり、プレフィックスLog*(0)演算手段は、2分岐木作成部820、ノード演算実行部830、2分岐ルート演算実行部850と同じ機能を有している。
したがって、cが2以上のときは、プレフィックスLog*(c−1)演算手段は、以下の(1−1)〜(1−4)の処理を行う。
(1−1)キャリー演算子の列を1つのノードに割り当て、キャリー演算子の列をlog*(c−2)(ノードに割り当てられたキャリー演算子の数)個ごとに分割してそれぞれ別のノードに割り当てる処理をキャリー演算子の数が1になるまで繰り返すことで、Log*(c−2)分岐木を作成する(Log*(c−2)分岐木作成部120(c−1) の処理に相当する。)。
(1−2)Log*(c−2)分岐木のノードごとに、割り当てられたキャリー演算子の列に対して、
xをS,P,Kのいずれかとするときに、
S=Sx,K=Kx,x=Px
の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とする(ノード演算実行部830の処理に相当する。)。
(1−3)プレフィックスLog*(c−2)演算手段を有し、(1−1)の処理で同じキャリー演算子の列から分割されたキャリー演算子の列が割り当てられたノード同士の間で、そのノードのノードキャリー演算子とそのノードよりも下の桁のキャリー演算子が割り当てられたノードのノードキャリー演算子で構成されるキャリー演算子の列に対して、プレフィックスLog*(c−2)演算手段の処理を実行し、その結果を各ノードのノードキャリー演算子にする(キャリー伝搬処理部140(c−1) の処理に相当する。)。
(1−4)(1−1)の処理で1つのキャリー演算子が割り当てられたノードと、そのノードよりも下の桁のキャリー演算子が割り当てられたノードが属する部分木のルートノードのノードキャリー演算子とで構成されるキャリー演算子の列に対して、
xをS,P,Kのいずれかとするときに、
S=Sx,K=Kx,x=Px
の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とする(ルート演算実行部150(c−1) の処理に相当する。)。
そして、c=1のとき、すなわちプレフィックスLog*(0)演算手段は、以下の(2−1),(2−2),(2−3)の処理を行う。
(2−1)キャリー演算子の列を1つのノードに割り当て、キャリー演算子の列を2分割してそれぞれ別のノードに割り当てる処理をキャリー演算子の数が1になるまで繰り返すことで、2分岐木を作成する(2分岐木作成部820の処理に相当する。)。
(2−2)前記2分岐木のノードごとに、割り当てられたキャリー演算子の列に対して、
xをS,P,Kのいずれかとするときに、
S=Sx,K=Kx,x=Px
の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とする(ノード演算実行部830の処理に相当する。)。
(2−3)前記2分岐木の作成のときに1つのキャリー演算子が割り当てられたノードと、そのノードよりも下の桁のキャリー演算子が割り当てられたノードが属する部分木のルートノードのノードキャリー演算子とで構成されるキャリー演算子の列に対して、
xをS,P,Kのいずれかとするときに、
S=Sx,K=Kx,x=Px
の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とする(2分岐ルート演算実行部850の処理に相当する。)。
キャリー伝搬処理部140(C) の処理(S140(C) )にも秘匿されたビットの乗算が含まれている。1段目の兄弟ノードに含まれるノードの数はL/log*(C−1)Lであり、これに対してLog*(C−2)分岐木を用いたキャリー計算を行うので、通信量はO((L/log*(C−1)L)・log*(C−1)(L/log*(C−1)L))のオーダとなる。また、(L/log*(C−1)L)・log*(C−1)(L/log*(C−1)L)≦Lなので、結局、1段目の兄弟ノードに対する処理に必要な通信量は高々O(L)のオーダである。2段目以下も、兄弟ノードの数は増えるがその分兄弟ノードに含まれるノード数は減るので、段ごとに高々O(L)のオーダの通信量となる。そして、Log*(C−1)分岐木の深さがlog*(C)Lであることから、Log*(C−1)分岐木全体に対してステップS140(C) の処理を行うには、O(L・log*(C)L)のオーダの通信量が必要となる。
ルート演算実行部150(C) は、Log*(C−1)分岐木作成部120(C) の処理(S120(C) )で1つのキャリー演算子が割り当てられたノード(葉ノード)と、そのノードよりも下の桁のキャリー演算子が割り当てられたノードが属する部分木のルートノードのノードキャリー演算子とで構成されるキャリー演算子の列に対して、
xをS,P,Kのいずれかとするときに、
S=Sx,K=Kx,x=Px
の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とする(S150(C) )。この処理も実施例1のルート演算実行部150の処理(S150)と同様の処理であり、整数a,bのビット長Lと分岐木の深さlog*(C)Lを考慮すると、O(L・log*(C)L)のオーダの通信量が必要である。
出力部180(C) は、ルート演算実行部150(C) の処理(S150(C) )の結果、ノードキャリー演算子がSの桁から1つ上の桁へのキャリービットが1であることを示す秘匿された情報を出力し、その他の結果の桁はキャリービットが0であることを示す秘匿された情報を出力する(S180(C) )。
計算装置100(C) ,…,100(C) で構成された計算システムの場合、最も通信量が必要な処理の通信量のオーダがO(L・log*(C)L)なので、全体としてO(L・log*(C)L)のオーダの通信量が必要である。そして、log*(C)Lはlog*(1)L以下の値になるので、理論的には実施例1よりもさらに通信量を少なくできる。ただし、実施例1で説明したようにLog分岐木でも実用上は十分に深さが浅いので、実用上の効果は実施例1と同じか少しよい程度だと考えられる。
実施例2の計算システムによれば、キャリー演算子の列をlog*(C−1)(ノードに割り当てられたキャリー演算子の数)個ごとに分割してLog*(C−1)分岐木を作成するので、分岐木の深さをlog*(C)Lにできる。よって、非特許文献2の分岐木の深さlogLよりも浅くできる。また、プレフィックスLog*(C−1)演算手段を用いて兄弟ノード間でのキャリー伝搬を処理するので、3以上に分割した場合でもルート演算実行部の処理量を減らすことができる。したがって、本発明の計算システムでは、キャリーの計算での通信量をO(L・log*(C)L)にできる。
[プログラム、記録媒体]
上述の各種の処理は、記載に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。その他、本発明の趣旨を逸脱しない範囲で適宜変更が可能であることはいうまでもない。
また、上述の構成をコンピュータによって実現する場合、各装置が有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等どのようなものでもよい。
また、このプログラムの流通は、例えば、そのプログラムを記録したDVD、CD−ROM等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としてもよい。
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の記憶装置に格納する。そして、処理の実行時、このコンピュータは、自己の記録媒体に格納されたプログラムを読み取り、読み取ったプログラムに従った処理を実行する。また、このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよく、さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。また、サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるASP(Application Service Provider)型のサービスによって、上述の処理を実行する構成としてもよい。なお、本形態におけるプログラムには、電子計算機による処理の用に供する情報であってプログラムに準ずるもの(コンピュータに対する直接の指令ではないがコンピュータの処理を規定する性質を有するデータ等)を含むものとする。
また、この形態では、コンピュータ上で所定のプログラムを実行させることにより、本装置を構成することとしたが、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。
本発明は、データを秘匿した状態で計算する秘密計算システムに利用できる。
100,800 計算装置 120 Log分岐木作成部
121,141,821 ノード 140 キャリー伝搬処理部
150 ルート演算実行部 160(0) プレフィックスLog演算手段
180,880 出力部 190,890 記録部
810 キャリー演算子算出部 820 2分岐木作成部
830 ノード演算実行部 850 2分岐ルート演算実行部
900 ネットワーク

Claims (7)

  1. ビット表現された2つの整数をビット加算したときに発生するキャリービットを秘匿計算で求める計算システムを構成するN台の計算装置の中の1つの計算装置であって、
    Nは2以上の整数、nは1以上N以下の整数、^はべき乗を示す記号、Lは((2^2)^・・・)^2のように2に対して2乗を0回以上繰り返した整数、qはLビットの素数、Zは0以上q−1以下の整数の集合、aとbはL桁でビット表現された有限体上の整数、[a]は整数aがN台の前記計算装置で秘匿された状態であることを示す記号、logは底が2の対数、log*(1)xを、
    Figure 0005858938

    とし、
    [a]と[b]に対して、ビット表現された桁ごとに、両方とも1であることを示す秘匿された演算子S、一方だけ1であることを示す秘匿された演算子P、両方とも0であることを示す秘匿された演算子Kのいずれか1つを求め、各桁のキャリー演算子とするキャリー演算子算出部と、
    前記キャリー演算子の列を1つのノードに割り当て、キャリー演算子の列をlog(ノードに割り当てられたキャリー演算子の数)個ごとに分割してそれぞれ別のノードに割り当てる処理をキャリー演算子の数が1になるまで繰り返すことで、Log分岐木を作成するLog分岐木作成部と、
    前記Log分岐木のノードごとに、割り当てられたキャリー演算子の列に対して、
    xをS,P,Kのいずれかとするときに、
    S=Sx,K=Kx,x=Px
    の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とするノード演算実行部と、
    プレフィックスLog演算手段を有し、同じキャリー演算子の列から分割されたキャリー演算子の列が割り当てられたノード同士の間で、そのノードのノードキャリー演算子とそのノードよりも下の桁のキャリー演算子が割り当てられたノードのノードキャリー演算子で構成されるキャリー演算子の列に対して、前記プレフィックスLog演算手段の処理を実行し、その結果を各ノードのノードキャリー演算子にするキャリー伝搬処理部と、
    前記Log分岐木作成部の処理で1つのキャリー演算子が割り当てられたノードと、そのノードよりも下の桁のキャリー演算子が割り当てられたノードが属する部分木のルートノードのノードキャリー演算子とで構成されるキャリー演算子の列に対して、
    xをS,P,Kのいずれかとするときに、
    S=Sx,K=Kx,x=Px
    の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とするルート演算実行部と、
    前記ルート演算実行部の処理の結果、ノードキャリー演算子がSの桁から1つ上の桁へのキャリービットが1であることを示す秘匿された情報を出力し、その他の結果の桁はキャリービットが0であることを示す秘匿された情報を出力する出力部と
    を備え、
    前記プレフィックスLog演算手段は、
    (1)キャリー演算子の列を1つのノードに割り当て、キャリー演算子の列を2分割してそれぞれ別のノードに割り当てる処理をキャリー演算子の数が1になるまで繰り返すことで、2分岐木を作成し、
    (2)前記2分岐木のノードごとに、割り当てられたキャリー演算子の列に対して、
    xをS,P,Kのいずれかとするときに、
    S=Sx,K=Kx,x=Px
    の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とし、
    (3)前記2分岐木の作成のときに1つのキャリー演算子が割り当てられたノードと、そのノードよりも下の桁のキャリー演算子が割り当てられたノードが属する部分木のルートノードのノードキャリー演算子とで構成されるキャリー演算子の列に対して、
    xをS,P,Kのいずれかとするときに、
    S=Sx,K=Kx,x=Px
    の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とする
    ことを特徴とする計算装置。
  2. ビット表現された2つの整数をビット加算したときに発生するキャリービットを秘匿計算で求める計算システムを構成するN台の計算装置の中の1つの計算装置であって、
    Nは2以上の整数、nは1以上N以下の整数、Lはlog*(C−1)の演算を演算結果が1になるまで繰り返したときにすべての計算結果が整数となる1以上の整数、qはLビットの素数、Zは0以上q−1以下の整数の集合、aとbはL桁でビット表現された有限体上の整数、[a]は整数aがN台の前記計算装置で秘匿された状態であることを示す記号、Cは1以上の整数、cは1以上C以下の整数、logは底が2の対数、log*(c)xを、
    Figure 0005858938

    とし、
    [a]と[b]に対して、ビット表現された桁ごとに、両方とも1であることを示す秘匿された演算子S、一方だけ1であることを示す秘匿された演算子P、両方とも0であることを示す秘匿された演算子Kのいずれか1つを求め、各桁のキャリー演算子とするキャリー演算子算出部と、
    前記キャリー演算子の列を1つのノードに割り当て、キャリー演算子の列をlog*(C−1)(ノードに割り当てられたキャリー演算子の数)個ごとに分割してそれぞれ別のノードに割り当てる処理をキャリー演算子の数が1になるまで繰り返すことで、Log*(C−1)分岐木を作成するLog*(C−1)分岐木作成部と、
    前記Log*(C−1)分岐木のノードごとに、割り当てられたキャリー演算子の列に対して、
    xをS,P,Kのいずれかとするときに、
    S=Sx,K=Kx,x=Px
    の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とするノード演算実行部と、
    プレフィックスLog*(C−1)演算手段を有し、同じキャリー演算子の列から分割されたキャリー演算子の列が割り当てられたノード同士の間で、そのノードのノードキャリー演算子とそのノードよりも下の桁のキャリー演算子が割り当てられたノードのノードキャリー演算子で構成されるキャリー演算子の列に対して、前記プレフィックスLog*(C−1)演算手段の処理を実行し、その結果を各ノードのノードキャリー演算子にするキャリー伝搬処理部と、
    前記Log*(C−1)分岐木作成部の処理で1つのキャリー演算子が割り当てられたノードと、そのノードよりも下の桁のキャリー演算子が割り当てられたノードが属する部分木のルートノードのノードキャリー演算子とで構成されるキャリー演算子の列に対して、
    xをS,P,Kのいずれかとするときに、
    S=Sx,K=Kx,x=Px
    の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とするルート演算実行部と、
    前記ルート演算実行部の処理の結果、ノードキャリー演算子がSの桁から1つ上の桁へのキャリービットが1であることを示す秘匿された情報を出力し、その他の結果の桁はキャリービットが0であることを示す秘匿された情報を出力する出力部と、
    を備え、
    cが2以上のときは、プレフィックスLog*(c−1)演算手段は、
    (1−1)キャリー演算子の列を1つのノードに割り当て、キャリー演算子の列をlog*(c−2)(ノードに割り当てられたキャリー演算子の数)個ごとに分割してそれぞれ別のノードに割り当てる処理をキャリー演算子の数が1になるまで繰り返すことで、Log*(c−2)分岐木を作成し、
    (1−2)前記Log*(c−2)分岐木のノードごとに、割り当てられたキャリー演算子の列に対して、
    xをS,P,Kのいずれかとするときに、
    S=Sx,K=Kx,x=Px
    の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とし、
    (1−3)プレフィックスLog*(c−2)演算手段を有し、(1−1)の処理で同じキャリー演算子の列から分割されたキャリー演算子の列が割り当てられたノード同士の間で、そのノードのノードキャリー演算子とそのノードよりも下の桁のキャリー演算子が割り当てられたノードのノードキャリー演算子で構成されるキャリー演算子の列に対して、前記プレフィックスLog*(c−2)演算手段の処理を実行し、その結果を各ノードのノードキャリー演算子にし、
    (1−4)(1−1)の処理で1つのキャリー演算子が割り当てられたノードと、そのノードよりも下の桁のキャリー演算子が割り当てられたノードが属する部分木のルートノードのノードキャリー演算子とで構成されるキャリー演算子の列に対して、
    xをS,P,Kのいずれかとするときに、
    S=Sx,K=Kx,x=Px
    の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とし、
    プレフィックスLog*(0)演算手段は、
    (2−1)キャリー演算子の列を1つのノードに割り当て、キャリー演算子の列を2分割してそれぞれ別のノードに割り当てる処理をキャリー演算子の数が1になるまで繰り返すことで、2分岐木を作成し、
    (2−2)前記2分岐木のノードごとに、割り当てられたキャリー演算子の列に対して、
    xをS,P,Kのいずれかとするときに、
    S=Sx,K=Kx,x=Px
    の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とし、
    (2−3)前記2分岐木の作成のときに1つのキャリー演算子が割り当てられたノードと、そのノードよりも下の桁のキャリー演算子が割り当てられたノードが属する部分木のルートノードのノードキャリー演算子とで構成されるキャリー演算子の列に対して、
    xをS,P,Kのいずれかとするときに、
    S=Sx,K=Kx,x=Px
    の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とする
    ことを特徴とする計算装置。
  3. 請求項1または2記載の計算装置であって、
    前記のキャリー演算子の列に対して、
    xをS,P,Kのいずれかとするときに、
    S=Sx,K=Kx,x=Px
    の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求める処理は、
    P以外のキャリー演算子の中で最も上位の桁のキャリー演算子を求める処理である
    ことを特徴とする計算装置。
  4. ネットワークで接続されたN台の計算装置で構成され、ビット表現された2つの整数をビット加算したときに発生するキャリービットを秘匿計算で求める計算システムであって、
    Nは2以上の整数、nは1以上N以下の整数、^はべき乗を示す記号、Lは((2^2)^・・・)^2のように2に対して2乗を0回以上繰り返した整数、qはLビットの素数、Zは0以上q−1以下の整数の集合、aとbはL桁でビット表現された有限体上の整数、[a]は整数aがN台の前記計算装置で秘匿された状態であることを示す記号、logは底が2の対数、log*(1)xを、
    Figure 0005858938

    とし、
    各計算装置は、
    [a]と[b]に対して、ビット表現された桁ごとに、両方とも1であることを示す秘匿された演算子S、一方だけ1であることを示す秘匿された演算子P、両方とも0であることを示す秘匿された演算子Kのいずれか1つを求め、各桁のキャリー演算子とするキャリー演算子算出部と、
    前記キャリー演算子の列を1つのノードに割り当て、キャリー演算子の列をlog(ノードに割り当てられたキャリー演算子の数)個ごとに分割してそれぞれ別のノードに割り当てる処理をキャリー演算子の数が1になるまで繰り返すことで、Log分岐木を作成するLog分岐木作成部と、
    前記Log分岐木のノードごとに、割り当てられたキャリー演算子の列に対して、
    xをS,P,Kのいずれかとするときに、
    S=Sx,K=Kx,x=Px
    の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とするノード演算実行部と、
    プレフィックスLog演算手段を有し、同じキャリー演算子の列から分割されたキャリー演算子の列が割り当てられたノード同士の間で、そのノードのノードキャリー演算子とそのノードよりも下の桁のキャリー演算子が割り当てられたノードのノードキャリー演算子で構成されるキャリー演算子の列に対して、前記プレフィックスLog演算手段の処理を実行し、その結果を各ノードのノードキャリー演算子にするキャリー伝搬処理部と、
    前記Log分岐木作成部の処理で1つのキャリー演算子が割り当てられたノードと、そのノードよりも下の桁のキャリー演算子が割り当てられたノードが属する部分木のルートノードのノードキャリー演算子とで構成されるキャリー演算子の列に対して、
    xをS,P,Kのいずれかとするときに、
    S=Sx,K=Kx,x=Px
    の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とするルート演算実行部と、
    前記ルート演算実行部の処理の結果、ノードキャリー演算子がSの桁から1つ上の桁へのキャリービットが1であることを示す秘匿された情報を出力し、その他の結果の桁はキャリービットが0であることを示す秘匿された情報を出力する出力部と
    を備え、
    前記プレフィックスLog演算手段は、
    (1)キャリー演算子の列を1つのノードに割り当て、キャリー演算子の列を2分割してそれぞれ別のノードに割り当てる処理をキャリー演算子の数が1になるまで繰り返すことで、2分岐木を作成し、
    (2)前記2分岐木のノードごとに、割り当てられたキャリー演算子の列に対して、
    xをS,P,Kのいずれかとするときに、
    S=Sx,K=Kx,x=Px
    の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とし、
    (3)前記2分岐木の作成のときに1つのキャリー演算子が割り当てられたノードと、そのノードよりも下の桁のキャリー演算子が割り当てられたノードが属する部分木のルートノードのノードキャリー演算子とで構成されるキャリー演算子の列に対して、
    xをS,P,Kのいずれかとするときに、
    S=Sx,K=Kx,x=Px
    の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とする
    ことを特徴とする計算システム。
  5. ネットワークで接続されたN台の計算装置で構成され、ビット表現された2つの整数をビット加算したときに発生するキャリービットを秘匿計算で求める計算システムであって、
    Nは2以上の整数、nは1以上N以下の整数、Lはlog*(C−1)の演算を演算結果が1になるまで繰り返したときにすべての計算結果が整数となる1以上の整数、qはLビットの素数、Zは0以上q−1以下の整数の集合、aとbはL桁でビット表現された有限体上の整数、[a]は整数aがN台の前記計算装置で秘匿された状態であることを示す記号、Cは1以上の整数、cは1以上C以下の整数、logは底が2の対数、log*(c)xを、
    Figure 0005858938

    とし、
    各計算装置は、
    [a]と[b]に対して、ビット表現された桁ごとに、両方とも1であることを示す秘匿された演算子S、一方だけ1であることを示す秘匿された演算子P、両方とも0であることを示す秘匿された演算子Kのいずれか1つを求め、各桁のキャリー演算子とするキャリー演算子算出部と、
    前記キャリー演算子の列を1つのノードに割り当て、キャリー演算子の列をlog*(C−1)(ノードに割り当てられたキャリー演算子の数)個ごとに分割してそれぞれ別のノードに割り当てる処理をキャリー演算子の数が1になるまで繰り返すことで、Log*(C−1)分岐木を作成するLog*(C−1)分岐木作成部と、
    前記Log*(C−1)分岐木のノードごとに、割り当てられたキャリー演算子の列に対して、
    xをS,P,Kのいずれかとするときに、
    S=Sx,K=Kx,x=Px
    の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とするノード演算実行部と、
    プレフィックスLog*(C−1)演算手段を有し、同じキャリー演算子の列から分割されたキャリー演算子の列が割り当てられたノード同士の間で、そのノードのノードキャリー演算子とそのノードよりも下の桁のキャリー演算子が割り当てられたノードのノードキャリー演算子で構成されるキャリー演算子の列に対して、前記プレフィックスLog*(C−1)演算手段の処理を実行し、その結果を各ノードのノードキャリー演算子にするキャリー伝搬処理部と、
    前記Log*(C−1)分岐木作成部の処理で1つのキャリー演算子が割り当てられたノードと、そのノードよりも下の桁のキャリー演算子が割り当てられたノードが属する部分木のルートノードのノードキャリー演算子とで構成されるキャリー演算子の列に対して、
    xをS,P,Kのいずれかとするときに、
    S=Sx,K=Kx,x=Px
    の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とするルート演算実行部と、
    前記ルート演算実行部の処理の結果、ノードキャリー演算子がSの桁から1つ上の桁へのキャリービットが1であることを示す秘匿された情報を出力し、その他の結果の桁はキャリービットが0であることを示す秘匿された情報を出力する出力部と、
    を備え、
    cが2以上のときは、プレフィックスLog*(c−1)演算手段は、
    (1−1)キャリー演算子の列を1つのノードに割り当て、キャリー演算子の列をlog*(c−2)(ノードに割り当てられたキャリー演算子の数)個ごとに分割してそれぞれ別のノードに割り当てる処理をキャリー演算子の数が1になるまで繰り返すことで、Log*(c−2)分岐木を作成し、
    (1−2)前記Log*(c−2)分岐木のノードごとに、割り当てられたキャリー演算子の列に対して、
    xをS,P,Kのいずれかとするときに、
    S=Sx,K=Kx,x=Px
    の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とし、
    (1−3)プレフィックスLog*(c−2)演算手段を有し、(1−1)の処理で同じキャリー演算子の列から分割されたキャリー演算子の列が割り当てられたノード同士の間で、そのノードのノードキャリー演算子とそのノードよりも下の桁のキャリー演算子が割り当てられたノードのノードキャリー演算子で構成されるキャリー演算子の列に対して、前記プレフィックスLog*(c−2)演算手段の処理を実行し、その結果を各ノードのノードキャリー演算子にし、
    (1−4)(1−1)の処理で1つのキャリー演算子が割り当てられたノードと、そのノードよりも下の桁のキャリー演算子が割り当てられたノードが属する部分木のルートノードのノードキャリー演算子とで構成されるキャリー演算子の列に対して、
    xをS,P,Kのいずれかとするときに、
    S=Sx,K=Kx,x=Px
    の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とし、
    プレフィックスLog*(0)演算手段は、
    (2−1)キャリー演算子の列を1つのノードに割り当て、キャリー演算子の列を2分割してそれぞれ別のノードに割り当てる処理をキャリー演算子の数が1になるまで繰り返すことで、2分岐木を作成し、
    (2−2)前記2分岐木のノードごとに、割り当てられたキャリー演算子の列に対して、
    xをS,P,Kのいずれかとするときに、
    S=Sx,K=Kx,x=Px
    の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とし、
    (2−3)前記2分岐木の作成のときに1つのキャリー演算子が割り当てられたノードと、そのノードよりも下の桁のキャリー演算子が割り当てられたノードが属する部分木のルートノードのノードキャリー演算子とで構成されるキャリー演算子の列に対して、
    xをS,P,Kのいずれかとするときに、
    S=Sx,K=Kx,x=Px
    の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とする
    ことを特徴とする計算システム。
  6. ネットワークで接続されたN台の計算装置を用いて、ビット表現された2つの整数をビット加算したときに発生するキャリービットを秘匿計算で求める計算方法であって、
    Nは2以上の整数、nは1以上N以下の整数、^はべき乗を示す記号、Lは((2^2)^・・・)^2のように2に対して2乗を0回以上繰り返した整数、qはLビットの素数、Zは0以上q−1以下の整数の集合、aとbはL桁でビット表現された有限体上の整数、[a]は整数aがN台の前記計算装置で秘匿された状態であることを示す記号、logは底が2の対数、log*(1)xを、
    Figure 0005858938

    とし、
    N台の前記計算装置が、[a]と[b]に対して、ビット表現された桁ごとに、両方とも1であることを示す秘匿された演算子S、一方だけ1であることを示す秘匿された演算子P、両方とも0であることを示す秘匿された演算子Kのいずれか1つを求め、各桁のキャリー演算子とするキャリー演算子算出ステップと、
    N台の前記計算装置が、前記キャリー演算子の列を1つのノードに割り当て、キャリー演算子の列をlog(ノードに割り当てられたキャリー演算子の数)個ごとに分割してそれぞれ別のノードに割り当てる処理をキャリー演算子の数が1になるまで繰り返すことで、Log分岐木を作成するLog分岐木作成ステップと、
    N台の前記計算装置が、前記Log分岐木のノードごとに、割り当てられたキャリー演算子の列に対して、
    xをS,P,Kのいずれかとするときに、
    S=Sx,K=Kx,x=Px
    の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とするノード演算実行ステップと、
    N台の前記計算装置が、プレフィックスLog演算サブステップを有し、同じキャリー演算子の列から分割されたキャリー演算子の列が割り当てられたノード同士の間で、そのノードのノードキャリー演算子とそのノードよりも下の桁のキャリー演算子が割り当てられたノードのノードキャリー演算子で構成されるキャリー演算子の列に対して、前記プレフィックスLog演算サブステップの処理を実行し、その結果を各ノードのノードキャリー演算子にするキャリー伝搬処理ステップと、
    N台の前記計算装置が、前記Log分岐木作成ステップで1つのキャリー演算子が割り当てられたノードと、そのノードよりも下の桁のキャリー演算子が割り当てられたノードが属する部分木のルートノードのノードキャリー演算子とで構成されるキャリー演算子の列に対して、
    xをS,P,Kのいずれかとするときに、
    S=Sx,K=Kx,x=Px
    の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とするルート演算実行ステップと、
    N台の前記計算装置が、前記ルート演算実行ステップの結果、ノードキャリー演算子がSの桁から1つ上の桁へのキャリービットが1であることを示す秘匿された情報を出力し、その他の結果の桁はキャリービットが0であることを示す秘匿された情報を出力する出力ステップと
    を備え、
    前記プレフィックスLog演算サブステップは、
    (1)キャリー演算子の列を1つのノードに割り当て、キャリー演算子の列を2分割してそれぞれ別のノードに割り当てる処理をキャリー演算子の数が1になるまで繰り返すことで、2分岐木を作成し、
    (2)前記2分岐木のノードごとに、割り当てられたキャリー演算子の列に対して、
    xをS,P,Kのいずれかとするときに、
    S=Sx,K=Kx,x=Px
    の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とし、
    (3)前記2分岐木の作成のときに1つのキャリー演算子が割り当てられたノードと、そのノードよりも下の桁のキャリー演算子が割り当てられたノードが属する部分木のルートノードのノードキャリー演算子とで構成されるキャリー演算子の列に対して、
    xをS,P,Kのいずれかとするときに、
    S=Sx,K=Kx,x=Px
    の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とする
    ことを特徴とする計算方法。
  7. ネットワークで接続されたN台の計算装置を用いて、ビット表現された2つの整数をビット加算したときに発生するキャリービットを秘匿計算で求める計算方法であって、
    Nは2以上の整数、nは1以上N以下の整数、Lはlog*(C−1)の演算を演算結果が1になるまで繰り返したときにすべての計算結果が整数となる1以上の整数、qはLビットの素数、Zは0以上q−1以下の整数の集合、aとbはL桁でビット表現された有限体上の整数、[a]は整数aがN台の前記計算装置で秘匿された状態であることを示す記号、Cは1以上の整数、cは1以上C以下の整数、logは底が2の対数、log*(c)xを、
    Figure 0005858938

    とし、
    N台の前記計算装置が、[a]と[b]に対して、ビット表現された桁ごとに、両方とも1であることを示す秘匿された演算子S、一方だけ1であることを示す秘匿された演算子P、両方とも0であることを示す秘匿された演算子Kのいずれか1つを求め、各桁のキャリー演算子とするキャリー演算子算出ステップと、
    N台の前記計算装置が、前記キャリー演算子の列を1つのノードに割り当て、キャリー演算子の列をlog*(C−1)(ノードに割り当てられたキャリー演算子の数)個ごとに分割してそれぞれ別のノードに割り当てる処理をキャリー演算子の数が1になるまで繰り返すことで、Log*(C−1)分岐木を作成するLog*(C−1)分岐木作成ステップと、
    N台の前記計算装置が、前記Log*(C−1)分岐木のノードごとに、割り当てられたキャリー演算子の列に対して、
    xをS,P,Kのいずれかとするときに、
    S=Sx,K=Kx,x=Px
    の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とするノード演算実行ステップと、
    N台の前記計算装置が、プレフィックスLog*(C−1)演算サブステップを有し、同じキャリー演算子の列から分割されたキャリー演算子の列が割り当てられたノード同士の間で、そのノードのノードキャリー演算子とそのノードよりも下の桁のキャリー演算子が割り当てられたノードのノードキャリー演算子で構成されるキャリー演算子の列に対して、前記プレフィックスLog*(C−1)演算サブステップを実行し、その結果を各ノードのノードキャリー演算子にするキャリー伝搬処理ステップと、
    N台の前記計算装置が、前記Log*(C−1)分岐木作成ステップで1つのキャリー演算子が割り当てられたノードと、そのノードよりも下の桁のキャリー演算子が割り当てられたノードが属する部分木のルートノードのノードキャリー演算子とで構成されるキャリー演算子の列に対して、
    xをS,P,Kのいずれかとするときに、
    S=Sx,K=Kx,x=Px
    の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とするルート演算実行ステップと、
    N台の前記計算装置が、前記ルート演算実行ステップの結果、ノードキャリー演算子がSの桁から1つ上の桁へのキャリービットが1であることを示す秘匿された情報を出力し、その他の結果の桁はキャリービットが0であることを示す秘匿された情報を出力する出力ステップと、
    を備え、
    cが2以上のときは、プレフィックスLog*(c−1)演算サブステップは、
    (1−1)キャリー演算子の列を1つのノードに割り当て、キャリー演算子の列をlog*(c−2)(ノードに割り当てられたキャリー演算子の数)個ごとに分割してそれぞれ別のノードに割り当てる処理をキャリー演算子の数が1になるまで繰り返すことで、Log*(c−2)分岐木を作成し、
    (1−2)前記Log*(c−2)分岐木のノードごとに、割り当てられたキャリー演算子の列に対して、
    xをS,P,Kのいずれかとするときに、
    S=Sx,K=Kx,x=Px
    の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とし、
    (1−3)プレフィックスLog*(c−2)演算サブステップを有し、(1−1)の処理で同じキャリー演算子の列から分割されたキャリー演算子の列が割り当てられたノード同士の間で、そのノードのノードキャリー演算子とそのノードよりも下の桁のキャリー演算子が割り当てられたノードのノードキャリー演算子で構成されるキャリー演算子の列に対して、前記プレフィックスLog*(c−2)演算サブステップの処理を実行し、その結果を各ノードのノードキャリー演算子にし、
    (1−4)(1−1)の処理で1つのキャリー演算子が割り当てられたノードと、そのノードよりも下の桁のキャリー演算子が割り当てられたノードが属する部分木のルートノードのノードキャリー演算子とで構成されるキャリー演算子の列に対して、
    xをS,P,Kのいずれかとするときに、
    S=Sx,K=Kx,x=Px
    の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とし、
    プレフィックスLog*(0)演算サブステップは、
    (2−1)キャリー演算子の列を1つのノードに割り当て、キャリー演算子の列を2分割してそれぞれ別のノードに割り当てる処理をキャリー演算子の数が1になるまで繰り返すことで、2分岐木を作成し、
    (2−2)前記2分岐木のノードごとに、割り当てられたキャリー演算子の列に対して、
    xをS,P,Kのいずれかとするときに、
    S=Sx,K=Kx,x=Px
    の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とし、
    (2−3)前記2分岐木の作成のときに1つのキャリー演算子が割り当てられたノードと、そのノードよりも下の桁のキャリー演算子が割り当てられたノードが属する部分木のルートノードのノードキャリー演算子とで構成されるキャリー演算子の列に対して、
    xをS,P,Kのいずれかとするときに、
    S=Sx,K=Kx,x=Px
    の規則にしたがった演算を繰り返すと得られる1つのキャリー演算子を求め、ノードキャリー演算子とする
    ことを特徴とする計算方法。
JP2013006444A 2013-01-17 2013-01-17 計算装置、計算システム、計算方法 Active JP5858938B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2013006444A JP5858938B2 (ja) 2013-01-17 2013-01-17 計算装置、計算システム、計算方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013006444A JP5858938B2 (ja) 2013-01-17 2013-01-17 計算装置、計算システム、計算方法

Publications (2)

Publication Number Publication Date
JP2014137740A JP2014137740A (ja) 2014-07-28
JP5858938B2 true JP5858938B2 (ja) 2016-02-10

Family

ID=51415192

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013006444A Active JP5858938B2 (ja) 2013-01-17 2013-01-17 計算装置、計算システム、計算方法

Country Status (1)

Country Link
JP (1) JP5858938B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6474741B2 (ja) * 2016-01-18 2019-02-27 日本電信電話株式会社 秘匿決定木計算システム、装置、方法及びプログラム
US11468796B2 (en) 2017-05-18 2022-10-11 Nec Corporation Numerical splitting device, transmission information generating device, secure computation device, method, program recording medium, and secure computation system

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6055557A (en) * 1997-01-08 2000-04-25 International Business Machines Corp. Adder circuit and method therefor
JP4300838B2 (ja) * 2003-03-25 2009-07-22 沖電気工業株式会社 分散計算装置及び分散計算システム

Also Published As

Publication number Publication date
JP2014137740A (ja) 2014-07-28

Similar Documents

Publication Publication Date Title
JP5957126B1 (ja) 秘密計算装置、秘密計算方法、およびプログラム
JP2017515195A (ja) 断熱量子計算を介してデジタル論理制約問題を解く
US10003460B2 (en) Secret quotient transfer device, secret bit decomposition device, secret modulus conversion device, secret quotient transfer method, secret bit decomposition method, secret modulus conversion method, and programs therefor
CN111783130A (zh) 隐私保护的数据处理方法、装置及服务器
JPWO2018034079A1 (ja) 秘密計算システム、秘密計算方法、秘密計算装置、分散情報生成装置およびそれらの方法とプログラム
JP6732959B2 (ja) 秘密計算方法、秘密計算システム、秘密計算装置、およびプログラム
JP7031682B2 (ja) 秘密計算装置、システム、方法、プログラム
CN102393812A (zh) 椭圆曲线密码体制中的快速点乘算法的实现方法
JP5858938B2 (ja) 計算装置、計算システム、計算方法
Pedersen et al. Network coding over the 2 32− 5 prime field
WO2018211675A1 (en) Bit decomposition secure computation apparatus, bit combining secure computation apparatus, method and program
JP6253803B2 (ja) ペアワイズ距離計算のためのシステム及び方法
KR101925614B1 (ko) 타원곡선 암호화 시스템에서의 스칼라 곱셈 처리 방법 및 타원곡선 암호화 시스템
CN117254902A (zh) 数据处理方法、装置、设备及存储介质
KR20190022023A (ko) 하드웨어 구현된 모듈러 역원 모듈
JP2015068999A (ja) 秘密計算装置、秘匿検索システム、秘密計算方法、秘匿検索方法、プログラム
JP5980178B2 (ja) プログラム変換装置、プログラム変換方法及びプログラム
CN110275693B (zh) 用于随机计算的多加数加法电路
JP5636078B1 (ja) 仮想ネットワークの物理ネットワークへの配置装置及び方法
JP7380843B2 (ja) 秘密計算システム、秘密計算サーバ装置、秘密計算方法および秘密計算プログラム
JP2016157053A (ja) 暗号化システム、暗号化装置、復号装置、暗号化方法
JP4861369B2 (ja) リカバリ署名システム、署名生成装置、署名検証装置、それらの方法、及びプログラム
JP4692022B2 (ja) 楕円曲線暗号におけるスカラー倍計算装置、及び、そのプログラム
JP5554357B2 (ja) 演算装置
TWI776416B (zh) 分層確定性錢包的門檻式簽章系統及其方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150114

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20151126

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20151208

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20151215

R150 Certificate of patent or registration of utility model

Ref document number: 5858938

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150