(57)【要約】  秘密情報から、秘密情報を秘匿化した秘匿化秘密情報の分散値を得る。ｋ個以上の秘密情報である乱数α1〜αkから合成値αを生成する（４２）。合成値αを新たな秘密情報ａに乗算させて秘匿化秘密情報αａを生成し、秘匿化秘密情報の分散値Ｗａ'（ｘｉ）及びｋ個以上の秘密情報である乱数の各々の分散値Ｗａ1（ｘｉ）〜Ｗａk（ｘｉ）を計算する（４４）。分散値Ｗａ'（ｘｉ）、Ｗａ1（ｘｉ）〜Ｗａk（ｘｉ）を、第１〜第ｎのサーバに送信する（４６）。秘密情報α1〜αkから、秘密情報α1〜αkを秘匿化した秘匿化秘密情報αａの分散値Ｗａ'（ｘｉ）を得ることができる。
2016129363.tif 000002
【特許請求の範囲】
【請求項１】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて分散値を計算する計算装置であって、
ｋ個以上の秘密情報の各々の分散値を計算する手段と、
前記ｋ個以上の秘密情報から合成値を生成する手段と、
前記合成値を新たな秘密情報に作用させた秘匿化秘密情報を生成する手段と、
を備える計算装置。
【請求項２】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて秘匿演算をする計算装置であって、
第１の秘匿化秘密情報に用いられた第１の乱数を構成する複数の乱数のうちの１部である第１の部分乱数の分散値と、第２の秘匿化秘密情報に用いられた第２の乱数を構成する複数の乱数うちの１部である第２の部分乱数の分散値とを集めて、前記第１の部分乱数と前記第２の部分乱数を復元する手段と、
前記復元した第１の部分乱数と第２の部分乱数を合成する手段と、
を備える計算装置。
【請求項３】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて秘匿演算をする計算装置であって、
ｋ個以上の乱数を用いて秘匿化された秘匿化秘密情報を復元する手段と、
前記復元した秘匿化秘密情報と他の値とに基づいて所定の演算をする手段と、
を備える計算装置。
【請求項４】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて秘密情報を復元する計算装置であって、
ｋ個以上の乱数を用いて秘匿化された秘匿化秘密情報を復元する手段と、
前記乱数を合成する手段と、
前記合成された乱数を用いて、前記復元された前記秘匿化秘密情報の秘匿化を解除する手段と、
を備える計算装置。
【請求項５】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて秘匿演算をする計算装置であって、
ｋ個以上の乱数を用いて秘匿化された秘匿化秘密情報における第１の合成乱数と、第２の合成乱数を構成するｋ個以上の乱数とを組み合わせて、前記第１の合成乱数を変換する手段
を備える計算装置。
【請求項６】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて秘匿演算をする計算装置であって、
秘匿化されていない分散値に、別の秘匿化秘密情報を構成するｋ個以上の乱数を作用させて秘匿化する手段
を備える計算装置。
【請求項７】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて分散値を計算する計算装置であって、
複数の新たな秘密情報を秘匿化して複数の分散値を計算する手段と、
前記複数の分散値の各々の並び順を、前記秘匿化する前の前記複数の新たな秘密情報の予め定められた並び順に応じて指定する手段と、
を備える計算装置。
【請求項８】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて検索する秘密情報を指定する計算装置であって、
検索用秘密情報に乱数を作用させ秘匿化する手段と、
前記システムから受信した値に前記乱数を作用させる手段と、
を備える計算装置。
【請求項９】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて指定された秘密情報を検索する計算装置であって、
前記秘密情報に対応する第１の検索用秘密情報を第１の乱数で秘匿化すると共に、入力された第２の検索用秘密情報を第２の乱数で秘匿化する手段と、
前記秘匿化された前記第１の検索用秘密情報に基づく第１の値と前記秘匿化された前記第２の検索用秘密情報に基づく第２の値との差に基づいて、前記第１の検索用秘密情報と前記第２の検索用秘密情報との差を取得する手段と、
を備える計算装置。
【請求項１０】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて分散値の更新を行う計算装置であって、
乱数で秘密情報が秘匿化されて得られた分散値に対して、新たな乱数を生成し、前記生成した新たな乱数を新たな分散値として保存する手段
を備える計算装置。
【請求項１１】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて分散値の更新を行う計算装置であって、
ｋ個以上の補正情報から秘密情報を更新する更新値を計算する手段
を備える計算装置。
【請求項１２】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて分散値を計算する計算装置であって、
生成されたｈ（１〜ｋ−１までの整数）個の乱数を分散値として定め、前記ｈ個の分散値と前記秘密情報とに基づいて、ｎ−ｈ個の分散値を計算する手段と、
ｋ個以上の秘密情報から合成値を生成する手段と、
前記合成値を新たな秘密情報に作用させた秘匿化秘密情報を計算する手段と、
を備える計算装置。
【請求項１３】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて分散値を計算する計算装置であって、
秘密情報をｅ進数ｄ桁の数値としたとき、前記秘密情報をＬ(ｎ−１)分割を行ってｅ進数ｄ／Ｌ（ｎ−１）桁の数値とする手段と、
前記数値とされた秘密情報の分散、復元、及び秘匿演算の少なくとも１つを、
【数１】
2016129363.tif 000033
より大きな素数を法として、乗算及び除算を加算及び減算に分解することなく、加算と減算だけで行う手段と、
を備える計算装置。
【請求項１４】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて秘匿演算または復元をする計算装置であって、
秘匿化され複数の桁に分割された秘匿化秘密情報の桁に合わせて所定の演算を行う手段
を備える計算装置。
【請求項１５】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて秘匿演算をする計算装置であって、
前記秘密情報をｐ１以下の整数、乱数をｐ２以下の整数として、それらを乗算したｐ１*ｐ２以下の秘匿化秘密情報をｐ１*ｐ２より大きな素数を法として秘密分散または復号する手段
を備える計算装置。
【請求項１６】
ｎを整数、ｋをｎより小さい整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおける秘匿演算または復元を行う計算装置であって、
乱数の加算によって秘密情報を秘匿した秘匿化秘密情報と、前記乱数が秘密分散された分散値とを加減算する手段を備える計算装置。
【請求項１７】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて秘密情報の格納位置を検索する計算装置であって、
第１の検索用秘密情報と第２の検索用秘密情報の差を取得する手段と、
前記差に応じて前記格納位置を定める手段と、
を備える計算装置。
【請求項１８】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて秘密情報を更新する計算装置であって、
秘密情報の分散値に、予め定められた第１の乱数を乗算しかつ予め定められた第２の乱数を加算する手段
を備える計算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、秘密分散を用いた秘匿演算システムに関する計算装置に関する。
【背景技術】
【０００２】
近年、新たなネットワーク技術としてクラウドコンピューティングが注目されている。クラウドコンピューティングとはユーザの持つデータをクラウドと呼ばれるネットワーク上の複数のサーバにより構成される仮想の大容量ストレージに分散・保管し、そのデータをどこからでもネットワーク経由でユーザが必要に応じてアクセスすることを可能にする技術である。さらに、保管データを有効活用するために、単にデータをストレージするだけでなく、クラウド上に分散・保管されたデータを用いて個々のデータを秘匿しながら任意の計算を行う秘匿計算を実現する技術が求められている。【０００３】
この秘匿計算を実現する技術の１つとして秘密分散法の利用が注目されている。秘密分散法とは1個の秘密情報をn個に分散し、n個に分散した分散値のうち、k個(k≦n) を集めることで元の秘密情報が復元できるという技術である。また、k個未満の分散値からは一切秘密情報に関する情報を得ることができない。この秘密分散法として、Shamirによる(k,n)秘密分散法が良く知られている。Shamirの(k,n)秘密分散法を含む従来の秘密分散システムは分散値を保存するn台のデータサーバと、秘密情報を分散するディーラまたは秘密情報を復元する復元端末からなる。すなわち、秘密分散時にオーナは自分が所有する秘密情報の分散をディーラに依頼し、ディーラは秘密分散法を用いてn個の分散値を計算して、その値を各々n個のデータサーバに分散保管する。一般に、ディーラは秘密分散時のみ存在するとされる。一方、復元を希望するユーザは復元したい秘密情報に対する分散値をk個のデータサーバから復元端末に集めて復元を行う。この復元端末も一般には、データ復元時のみ存在する。【０００４】
具体的に、Shamirの(k,n)秘密分散法は式（１）のようなk-1次の多項式を設定（sは秘密情報、a 1〜a k-1は乱数）し、n個のサーバ各々のIDをxj(j=1,…,n)としたときのW(xj)を各サーバに保存し分散値とする。このk-1次多項式はk個の分散値W(x1),…,W(xk)が集まれば解く（秘密情報sを求める）ことができる。それに対して、分散値がk個未満では解は不定となり全く定めることはできない。
W(x)=s+a1x+a2x2+…+ak-1xk-1                            （１）【０００５】
さらに、２つの秘密aとbに対して２つの分散値Wa(xj) (式（２）)とWb(xj) (式（３）)がn個のサーバに分散して保管されていた(j=1,…,n)時、その分散値同士の加算(式（４）)を考える。
Wa(xj)=a+a1xj+a2xj2+…+ak-1xjk-1                        （２）
Wb(xj)=b+b1xj+b2xj2+…+bk-1xjk-1                        （３）
Wa(xj)+Wb(xj)＝(a+b)+(a1+b1)xj+(a2+b2)xj2+…+(ak-1+bk-1)xjk-1          （４）【０００６】
この場合、加算結果である式（４）もまたk-1次多項式で表されることから、その分散値の和Wa(xj)+Wb(xj)をk個集めて多項式を解けばa,bという個別の情報でなくa+bという秘密情報の和が得られる。乗算に対しても同様にWa(xj)とWb(xj)の積の定数項はa・bという秘密情報同志の積となることから分散値の積を計算してその多項式を解けば、秘密情報同志の積が得られる[1]。このように、a,bという個別情報を得ることなくその和や積といった結果を得る計算を秘匿計算と言い、秘密分散法はそのままで加減算と乗算に関して秘匿計算に適用できることが知られている。ただし、秘密分散を用いた秘匿計算には以下のような問題点が未解決であることが知られている。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】M.Ben-Or,S.Goldwasser,and A.Wigderson, Complete-ness Theorems for Non-Crypto-graphic Fault-Tolerant Distributed Computation,STOC'88,pp.1-10,ACM Press,(1988)
【非特許文献２】渡辺 泰平、岩村 惠市：“秘密分散法を用いたサーバ台数変化がない乗算手法”，第63回コンピュータセキュリティ研究会，pp.1-6，Dec.2013.
【非特許文献３】古田英之, 須賀祐治, 岩村恵市：“秘密分散システムにおける分散データの更新手法”，第65回コンピュータセキュリティ研究会，pp.1-6，May.2014.
【非特許文献４】高橋慧, 岩村恵市. ”非対称秘密分散法を用いたアプリケーションの検討”. 研究報告セキュリティ心理学とトラスト（SPT）. コンピュータセキュリティ研究会（CSEC）, pp.1-8 (2013).
【非特許文献５】高橋加寿子, 須賀祐治, 岩村惠市：“XORを用いる秘密分散法の多値化とそれを用いた秘匿計算法”，第65回コンピュータセキュリティ研究会，pp.7-12，May.2014.
【発明の概要】
【発明が解決しようとする課題】
【０００８】
(Ｉ)乗算においてのみ必要なサーバ台数が変化する問題
k-1次の多項式同士の乗算結果は、2k-2次の多項式となる。よってその多項式を解く（各係数を求める）ためには、2k-1個の分散値が必要になり、集める分散値の数が乗算の場合のみ増加するという問題が生じる。すなわち、(k,n)秘密分散法において１つのサーバに１つの分散値を保存している場合、k個のサーバがあれば秘密情報の復元や秘匿加減算は可能であるが、乗算に対しては2k-1個のサーバが必要になり、乗算の場合だけ復元に必要なサーバの数が増加する。例えば、(3,5)秘密分散法や(2,3)秘密分散法の場合、秘密情報の復元と加減算に対しては各々３つ、２つの分散値を集めればよいため、全サーバ数のうち2つまたは1つのサーバが破損しても問題ない。しかし、(3,5)秘密分散法や(2,3)秘密分散法を乗算に用いる場合は、各々2k-1=5個、2k-1=3個のサーバが必要になる。よって、乗算は実現できるが、１つのサーバの破損も許されなくなる。また、(3,4)秘密分散法を用いる場合、秘密情報の復元と加減算は問題ないが、乗算に関しては2k-1=5個の分散値が必要なため、４つのサーバで構成されたシステムでは乗算が実現できない。すなわち、乗算の場合のみシステム構成を変える、または破損耐性を変える必要がある。従って、多項式の次数変化がなく乗算を行える手法があれば、これらの問題を解決することができる。サーバの台数変化のない乗算手法として[2]が提案されている。この手法は以下のように１つのサーバに２つの分散値を持たせ、１つの分散値を秘匿化して乗算を行い、その後乱数を削除するため、サーバ台数を変える必要はないとしている。【０００９】
秘匿乗算[2]
[分散]
(1)秘密情報aをもつオーナAは乱数αを生成し、以下をサーバxi(i=1,・・・,n)用に秘密分散する（ai,jは乱数）。
Wa(xi)=a+a0,1xi+・・・+a0,k-1xik-1
Wa’(n+xi)=α(a+a0,1(n+xi)+・・・+a0,k-1(n+xi)k-1)
Wa1(xi)=α+a1,1xi+・・・+a1,k-1xik-1   【００１０】
(2)秘密情報bをもつオーナBは乱数βを生成し、以下をサーバxi(i=1,・・・,n)用に秘密分散する。
Wb(xi)=b+b0,1xi+・・・+b0,k-1xik-1
Wb’(n+xi)=β(b+b0,1(n+xi)+・・・+b0,k-1(n+xi)k-1)
Wb1(xi)=β+b1,1xi+・・・+b1,k-1xik-1【００１１】
[乗算]
各サーバはWab(xi)=Wa(xi)Wb(xi)とWab’(xi)=Wa’(n+xi)Wb’(n+xi)を計算する(i=1,…,n)。
[復元]
(1)サーバj(j=1,…,k)はWab(xj)、Wab’(xj)、Wa1(xj)、Wb1(xj)を復元者に送る。
(2)復元者の復元端末はWa1(xj)からαを、Wb1(xj)からβを復元し、Wab’(xj)をαとβで割り、Wab(n+xj)を作る。
(3)復元者の復元端末はWab(xj)とWab(n+xj)から2k-1個の分散値を用いてabを復元する。【００１２】
[2]は外部からの攻撃者に対しては安全である。しかし、内部からの攻撃、すなわちabの演算結果のみを知ることができる復元者が元の秘密情報a,b自体を知るために攻撃者となる場合、安全ではない。なぜならば、復元者は[復元](2)においてαとβを個別に知るため、復元者がサーバの盗聴を行う場合、k/2個のサーバを盗聴すればk個のaの分散値と、k個のbの分散値が得られるため、元の秘密情報が漏洩する。よって、攻撃者には秘匿演算に関する情報を何も知らない外部の攻撃者と、演算結果を知る立場にある復元者が、演算結果の元情報である秘密情報を知るために攻撃者となる場合の2種類がある。後者の攻撃者に対して、[2]では復元時に各サーバが乱数rj、qjを交換して送信情報を変化させる以下の対策を提案している。以降、攻撃者といえば外部からの攻撃者を指し、後者の攻撃者をさす場合は復元者という名前をそのまま用いる。外部の攻撃者には演算結果も漏らすことはできないが、後者は演算結果を知る立場にあるという違いがある。【００１３】
[復元]
(1)サーバj(j=1,…,n)は各々１つずつの乱数rjとqjを生成して、互いに交換しr=r1・・・rn、q=q1・・・qnを生成する。
(2)サーバj(j=1,…,k)はWab(xj)とWab’(xj)にrq、Wa1(xj)にr、Wb1(xj)にqをかけて復元者に送る。
(3)復元者の復元端末はr・Wa1(xj)からrαを、q・Wb1(xj)からqβを復元し、Wab’(xj)をrαとrβで割り、Wab(n+xj)を作る。
(4)復元者の復元端末はWab(xj)とWab(n+xj)から2k-1個の分散値を用いてabを復元する。【００１４】
この手法は復元者が盗聴できるのは上記秘匿乗算において[乗算]や[復元]処理中以外の分散値保存時だけとするならば、復元者が保存時に盗聴したk個の分散値にかかった乱数と[復元]時に得る乱数の対応が異なるため、元の秘密情報は復元できない。しかし、復元者が1台のサーバを[復元]中においても盗聴できれば、全サーバはrとqを知るため、復元したrα、qβを各々rとqで割ればαとβが個別に得られるため、復元者はやはり秘密情報a,bを得ることができ安全でない。よって、[2]の手法は(k,n)秘密分散法においてサーバ台数を変化させずに乗算可能としているが、復元者が攻撃者である場合、秘密情報そのものが漏洩するため安全ではない。よって、(k,n)秘密分散法においてサーバ台数を変化させずに、かつ秘密情報漏えいのない手法は今まで存在していないといえる。また、この手法は後述する(ＩＩＩ)秘匿演算の連続に関する問題についても考慮されていない。すなわち、１つのサーバが２つの分散値を持ち、かつ１つが秘匿化されたままでは以下に述べる次数変換を適用できず、連続演算できない。また、(ＩＩ)の除算に関する問題も全く考慮されていない。さらに、（VI）の分散値の小型化や（VII）の多値化法式による高速化も考慮されていない。【００１５】
(ＩＩ)除算に関する問題
次に、除算について考える。上記（２）（３）を乗算することによって定数項にa・bを持つ分散値を作れるが、（２）を（３）で割ってもb/aを定数項に持つ分散値は得られない。すなわち、分散値を用いて秘密情報同士の除算を実現する手法は難しく、少なくとも乗算と同様の手法では実現できないことが知られている。よって、従来法及び[2]の手法では除算用に特殊な手段を用意する必要がある。よって、除算も乗算と同様の手段で実現できれば秘匿演算の効率化が実現できる。【００１６】
(ＩＩＩ)秘匿演算の連続に関する問題
前述した秘匿演算の連続について考える。例として、秘密情報aを定数項にもつ多項式Wa(x)、秘密情報bを定数項に持つ多項式Wb(x)、秘密情報cを定数項に持つ多項式Wc(x)を用いてa・b+cの積和演算を求める場合、一般的にはまずWa(x)Wb(x)の乗算を行い、その後Wa(x)Wb(x)+Wc(x)の加算を連続して行う。この場合、各多項式の次数をk-1次とすると、Wa(x)Wb(x)の次数は2k-2になっているのでk-1次のWc(x)との加算は整合性がよくない。できれば、Wa(x)Wb(x)をk-1次の多項式に変換して、Wc(x)と加算することが望まれる。それに対しては、積多項式について以下に示す次数の変換法が知られている[1]。ここでは簡単のため、2k次の多項式をk次の多項式に変換する場合を示す。ここで、h(x)を2k次多項式、f(x)とg(x)をk次多項式とする。さらに、n台のサーバに対するh(x)の分散値をW=（W1,W2,・・・,Wn）とする。
h(x)=h0+h1x+・・・+h2kx2k
Wi=h(xi)=f(xi)g(xi)  (i=1,・・・,n)【００１７】
すなわち、f(x)g(x)の乗算結果であるh(x)は2k個のWiがあれば解ける。ここで、h(x)のk次までの係数で構成される多項式をh’(x)とし、その分散値をRiとすると、W=（W1,W2,・・・,Wn）とR=（R1,R2,・・・,Rn）との間にはR=W・Aの関係がある。ただし、xiをサーバIDとして、BとPを以下に定義する。
h’(x)=h0+h1x+・・・+hkxk
Ri=h’(xi)【００１８】
【数１】
2016129363.tif 000003
【００１９】
Aは秘密情報を含まない予め計算可能な行列である。Aがわかれば、RはWにAをかけることによって得られる。すなわち、乗算結果であるh(x)の分散値として得られるWiはi番目のサーバi(i=1,・・・,n)が持っているので、そのWiに上記Aをかける、すなわち以下を計算することで新たな分散値であるRi(i=1,…,n)が得られる。この分散値Riはh(x)と同じ定数項をもつk-1次の多項式h’(x)に対する分散値であるため、k個あれば解くことができる。【００２０】
【数２】
2016129363.tif 000004
【００２１】
よって、Rからk個の分散値を集めればa・bの復元が可能である。すなわち、f(x)=Wa(x)、g(x)=Wb(x)とすればh(x)=Wa(x)Wb(x)であるが、（７）式または（８）式の変換により、h(x)の下位半分の次数をもつh’(x)=Wa(x)Wb(x)に変換でき、Rはh’(x)の分散値となる。よって、Rのk個の分散値にWc(x)のk個の分散値を足せばWa(x)Wb(x)+Wc(x)に対するk個の分散値が得られる。ただし（８）の演算のために、n個のサーバに分散されたWiを１つの装置に集めて、その装置が各iに対する（８）式の計算（W・Aの演算）を行う場合、その装置を盗聴することで乗算結果であるabが漏洩する可能性がある。また、サーバiが自分のもつ分散値WiにaiiをかけたRi=Wi・aiiを次のサーバに送り、次のサーバi+1が自分のもつWi+1にai+1,iをかけて送られてきた値と足すことでRi=Wi・aii+Wi+1・ai+1,i=Ri+Wi+1・ai+1,iを計算し、さらに次のサーバi+2に送り、全サーバを回ればサーバiはRiが得られる。しかしこのときも、攻撃者が１つのサーバを盗聴していれば、以下のように全てのWi(i=1,…,n)を得ることができる。例えば、攻撃者がサーバi+1を盗聴していた場合、攻撃者は元々サーバi+1がもつ分散値Wi+1を知る。次に、サーバiから送られてきたWi・aiiを公知のaiiで割ることでWiを得る。次にWi-1・ai-1,i+1+Wi・ai,i+1が来れば、Wiは得ているため公知のai-1,i+1とai,i+1と組み合わせてWi-1を得る。これを繰り返せば攻撃者は全てのWi(i=1,…,n)を得ることができる。よって、攻撃者は得たn個の分散値を用いて、演算結果であるabを得ることができる。ab+cの積和演算等においてその途中結果であるabが復元者以外の攻撃者に漏洩することは問題がある。よって、積和演算のように乗算と加算を連続して行う場合、連続演算が可能なアルゴリズムとすることに加えて、その途中結果を秘匿して次の演算につなげることも重要である。【００２２】
(ＩＶ)秘匿検索に関する問題
(Ｉ)〜(ＩＩＩ)は、秘匿乗算を含む秘匿演算に関連する問題であるが、最初に述べたように秘密情報が分散値として大容量ストレージに分散・保管され、その分散値をネットワーク経由でユーザがアクセスする場合、検索に関する以下のような問題も生じる。例えば、企業の経理処理を行うようなアプリを考え、その入金や出金に関する金額を秘匿するために上記秘密分散法を用いているとする。すなわち、企業の社員Aは自分の業務上発生した入金や出金を企業のn台のサーバに秘密分散しており、企業は全社員からの入金や出金に関する分散値を用いて合計や平均、分散などを計算し管理しているとする。この場合、n台のサーバには入出金に関する金額の分散値と一緒に、その金額が生じた日時を検索IDとして保存している必要がある。これによって、例えば社員Aがある日時の入出金を確認したい場合、その日時を検索IDとしてk個のサーバに送れば、各サーバはその検索IDを用いて対応する分散値を検索し社員Aに伝え、社員Aはそれを復元して金額情報を確認できる。また、そのアプリの秘匿計算を利用する場合、ある期間を指定すれば、そのアプリはその期間内にある分散値を、日時を検索IDとして集め、その期間内の金額の合計や、平均値、分散などといった各種統計値を、秘密情報である各金額をサーバに知られることなく計算でき、企業の会計担当者などに伝えることができる。しかし逆に、金額を指定し、その金額が発生した日時を特定するといった検索はできない。例えば社員Aが発生した金額のみ記憶しており、それが発生した日時を検索しようとしても、その金額は秘密分散されているため、その分散値がわからなければ検索IDを逆引きすることはできない。さらに、日時から金額を検索する場合においても、日時情報は秘匿されていないため、どの日時の情報が検索されているかサーバは知ることができる。すなわち、企業Aがデータ保管のためのサーバシステムをアウトソーシングしている場合、アウトソーシング先の企業は企業Aにおいて重要な取引があった日（よく検索されている日）などを知ることができる。これに対して、検索IDである日時を暗号化して保存したとすれば、サーバはいつの日時のデータが検索されているかわからないが、暗号化したユーザしか金額の検索ができない。企業の取引に関する金額データなどの場合、そのデータは複数の人によってアクセスされると考えられるが、この場合、暗号化に用いたその暗号鍵を複数の人で共有する必要ができ安全性が低下する。よって、ユーザが何を検索しているかサーバにわからせず、暗号鍵のような特殊な情報を共有しなくても秘密分散した分散値を検索できる仕組みが必要である。また、秘密情報と検索IDは相互に検索されることがあるので、秘密情報の分散値が秘匿演算可能な形であれば、検索IDの分散値も同様の形をしていることが望まれる。【００２３】
(Ｖ)分散値の秘匿更新に関する問題
さらに、秘密分散によって秘匿演算及び秘匿検索を実装できるシステムがネットワーク上に実現できた場合、そのシステムが保管している情報の更新は安全性を向上させるために必要なもう1つの大きな課題である。すなわち、n台のサーバからなるシステムがネットワーク上に構成された場合、秘密分散法によりk-1台までの情報漏えい（不正アクセス）があったとしても秘密情報は安全であるが、k-1台以下の情報漏えいがあった場合それをそのままにしていては、攻撃を受け続けた場合、いつかk台の情報が漏洩する可能性がある。よって、定期的にまたはその情報を使用するたびに保管している情報を更新できれば安全性が保たれる。具体的には、（１）の形で保存されている分散値の秘密情報sを変えずに乱数a 1〜a k-1を新たな乱数に更新できれば、前の不正アクセスで漏洩した分散値を無効にできる。また、安全性を向上させるため式（１）の閾値kの値を大きくする場合も、秘密情報sは変えずに多項式の次数及び乱数を変更しなければならない。さらに、秘密情報s自体も使用する毎に変更する場合も分散値の更新が必要になる。これらに対して自明な方法としては、システムが一旦k個の分散値を集め、秘密情報sを復元して新たな多項式をたてて再分散を行うことが考えられるが、この場合更新の過程で秘密情報sが復元されるため安全性が低下する。一方、分散値の更新に関しては[3]が知られているが、この手法はn-k台のサーバが分散値の差分情報の復元処理を行うため効率的ではない。さらに、n-k台のサーバが全サーバの更新に必要な差分情報を知るため、n-k台のうちの1台のサーバを盗聴されると他のサーバの更新値が漏洩し、安全性が低下する。よって、安全性を低下させず、かつ効率的に分散値を更新できる手法が必要である。また、従来手法は秘密情報及び各係数が秘匿化されていない、すなわち分散値が秘匿化されていない場合を想定した更新法であり、後述する実施の形態に示す秘密情報及び各係数が秘匿化されている、すなわち分散値が秘匿化されてい場合の更新法は知られていない。よって、秘匿化された分散値に対しても適用できる更新法が望まれる。【００２４】
(ＶＩ)記憶容量の小型化に関する問題
秘密分散法は１つの秘密情報をn個に分散するため、大きな記憶容量を必要とする。記憶容量の小型化を実現するために、分散情報サイズを小型化する(k,L,n)ランプ型秘密分散法や、分散情報の数を削減する(k,n)非対称秘密分散法[4]などが知られている。ランプ型秘密分散法は最も大きな記憶容量削減を実現する一方、秘密情報の復元はk台のサーバがあれば実行できるため、サーバを提供している企業などがｋ台のサーバの情報を集めれば秘密情報の所有者であるユーザの意思に関係なく秘密情報の復元が可能である。それに対して、非対称秘密分散は記憶容量の小型化と、秘密情報の復元にユーザ自身が参加可能という特徴を持ち、ユーザが参加しなければ秘密情報は復元されないので、個人情報の利用などにおいて大きな役割を果たす。よって、ランプ型秘密分散法と非対称秘密分散に対して、かつ上記(Ｉ)〜(Ｖ)の特徴をもつ秘匿計算、秘匿検索、秘匿更新が実現できれば、個人情報の秘匿演算に同様の効果をもたらすことが期待される。さらに、これらの手法の組み合わせは考慮されておらず、その組合せによって最適な小型化が期待できる。【００２５】
(ＶＩＩ)処理の高速化の問題
以上ではShamirの(k,n)秘密分散法を基本として説明したが、Shamir法は多項式の合成や多項式を解く処理が必要であり、処理が効率的でない。それに対して、多項式処理を行わず、XOR演算のみを用いて高速に(k,n)秘密分散を実行する手法（以降、XOR法）なども知られている。しかし、XOR法は秘密情報をビット列として扱うために、秘密情報を数値として扱う演算、すなわち秘匿演算を実現することができなかった。そこで、本発明ではXOR法を拡張し、秘密情報をビット列ではなく数値として扱い、秘匿演算できる手法にする。ただし、XOR法の秘密情報をビット列ではなく数値として扱い秘匿加算を行う手法に関しては既に提案されている[5]が、秘匿乗算については提案されていない。このXOR法の拡張法（以降、多値化法）は秘密情報の復元は分散値の加算と減算だけで実現できるため、多項式を解く必要があるShamir法と比べ、高速に演算が実行できる。よって、XOR法の拡張方式に関しても上記(Ｉ)〜(Ｖ)の特徴をもつ秘匿演算、秘匿検索、秘匿更新が実現できれば非常に効率的な処理が実現できる。【００２６】
(ＶＩＩＩ)総合的な秘密分散及び秘匿計算に関する問題
よって、上記の特徴を全て実現する(k,n)秘密分散法に適した手法が実現されることは重要である。特に、XOR法に対するランプ型秘密分散法は提案されているが、XOR法を拡張した多値化法に対応するランプ型秘密分散法は提案されていない。また、非対称秘密分散法と多値化法の組み合わせ、非対称秘密分散法をランプ型秘密分散法の組み合わせ、非対称秘密分散法と多値化法のランプ型秘密分散法との組み合わせも提案されておらず、さらにそれらを用いた秘匿演算も提案されていない。特に、非対称秘密分散法と多値化法の組み合わせ、非対称秘密分散法とランプ型秘密分散法、非対称秘密分散法と多値化法に対応するランプ型秘密分散法の組合せは記憶容量の小型化と高速化を同時に実現できる。【００２７】
１つの側面として、上記何れかの問題を解決することが目的である。
【課題を解決するための手段】
【００２８】
上記目的達成するため請求項１に記載の発明は、ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて分散値を計算する計算装置であって、ｋ個以上の秘密情報の各々の分散値を計算する手段と、前記ｋ個以上の秘密情報から合成値を生成する手段と、前記合成値を新たな秘密情報に作用させた秘匿化秘密情報を生成する手段と、を備える。【００２９】
請求項２に記載の発明は、ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて秘匿演算をする計算装置であって、
第１の秘匿化秘密情報に用いられた第１の乱数を構成する複数の乱数のうちの１つである第１の部分乱数の分散値と、第２の秘匿化秘密情報に用いられた第２の乱数を構成する複数の乱数うちの１つである第２の部分乱数の分散値とを集めて、前記第１の部分乱数と前記第２の部分乱数を復元する手段と、
前記復元した第１の部分乱数と第２の部分乱数を合成する手段と、
を備える計算装置。【００３０】
請求項３に記載の発明は、ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて秘匿演算をする計算装置であって、ｋ個以上の乱数を用いて秘匿化された秘匿化秘密情報を復元する手段と、前記復元した秘匿化秘密情報と他の値とに基づいて所定の演算をする手段と、を備える。【００３１】
請求項４に記載の発明は、ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて秘密情報を復元する計算装置であって、ｋ個以上の乱数を用いて秘匿化された秘匿化秘密情報を復元する手段と、前記乱数を合成する手段と、前記合成された乱数を用いて、前記復元された前記秘匿化秘密情報の秘匿化を解除する手段と、を備える。【００３２】
請求項５に記載の発明は、ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて秘匿演算をする計算装置であって、ｋ個以上の乱数を用いて秘匿化された秘匿化秘密情報における第１の合成乱数と、第２の合成乱数を構成するｋ個以上の乱数とを組み合わせて、前記第１の合成乱数を変換する手段を備える。【００３３】
請求項６に記載の発明は、ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて秘匿演算をする計算装置であって、秘匿化されていない分散値に、別の秘匿化秘密情報を構成するｋ個以上の乱数を作用させて秘匿化する手段を備える。【００３４】
請求項７に記載の発明は、ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて分散値を計算する計算装置であって、複数の新たな秘密情報を秘匿化して複数の分散値を計算する手段と、前記複数の分散値の各々の並び順を、前記秘匿化する前の前記複数の新たな秘密情報の予め定められた並び順に応じて指定する手段と、を備える。【００３５】
請求項８に記載の発明は、ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて検索する秘密情報を指定する計算装置であって、検索用秘密情報に乱数を作用させ秘匿化する手段と、前記システムから受信した値に前記乱数を作用させる手段と、を備える。【００３６】
請求項９に記載の発明は、ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて指定された秘密情報を検索する計算装置であって、前記秘密情報に対応する第１の検索用秘密情報を第１の乱数で秘匿化すると共に、入力された第２の検索用秘密情報を第２の乱数で秘匿化する手段と、前記秘匿化された前記第１の検索用秘密情報に基づく第１の値と前記秘匿化された前記第２の検索用秘密情報に基づく第２の値との差に基づいて、前記第１の検索用秘密情報と前記第２の検索用秘密情報との差を取得する手段と、を備える。【００３７】
請求項１０に記載の発明は、ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて分散値の更新を行う計算装置であって、乱数で秘密情報が秘匿化されて得られた分散値に対して、新たな乱数を生成し、前記生成した新たな乱数を新たな分散値として保存する手段を備える。【００３８】
請求項１１に記載の発明は、ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて分散値の更新を行う計算装置であって、ｋ個以上の補正情報から秘密情報を更新する更新値を計算する手段を備える。【００３９】
請求項１２に記載の発明は、ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて分散値を計算する計算装置であって、生成されたｈ（１〜ｋ−１までの整数）個の乱数を分散値として定め、前記ｈ個の分散値と前記秘密情報とに基づいて、ｎ−ｈ個の分散値を計算する手段と、ｋ個以上の秘密情報から合成値を生成する手段と、前記合成値を新たな秘密情報に作用させた秘匿化秘密情報を計算する手段と、を備える。【００４０】
請求項１３に記載の発明は、ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて分散値を計算する計算装置であって、秘密情報をｅ進数ｄ桁の数値としたとき、前記秘密情報をＬ(ｎ−１)分割を行ってｅ進数ｄ／Ｌ（ｎ−１）桁の数値とする手段と、前記数値とされた秘密情報の分散、復元、及び秘匿演算の少なくとも１つを、
【数３】
2016129363.tif 000005
より大きな素数を法として、乗算及び除算を加算及び減算に分解することなく、加算と減算だけで行う手段と、を備える。【００４１】
請求項１４に記載の発明は、ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて秘匿演算または復元をする計算装置であって、秘匿化され複数の桁に分割された秘匿化秘密情報の桁に合わせて所定の演算を行う手段を備える。【００４２】
請求項１５に記載の発明は、ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて秘匿演算をする計算装置であって、前記秘密情報をｐ１以下の整数、乱数をｐ２以下の整数として、それらを乗算したｐ１*ｐ２以下の秘匿化秘密情報をｐ１*ｐ２より大きな素数を法として秘密分散または復号する手段を備える計算装置。【００４３】
請求項１６に記載の発明は、ｎを整数、ｋをｎより小さい整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおける秘匿演算または復元を行う計算装置であって、乱数の加算によって秘密情報を秘匿した秘匿化秘密情報と、前記乱数が秘密分散された分散値とを加減算する手段を備える。
請求項１７に記載の発明は、ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステム秘密情報の格納位置を検索する計算装置であって、第１の検索用秘密情報と第２の検索用秘密情報の差を取得する手段と、前記差に応じて前記格納位置を定める手段と、を備える。
請求項１８に記載の発明は、ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分散し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて秘密情報を更新する計算装置であって、秘密情報の分散値に、予め定められた第１の乱数を乗算しかつ予め定められた第２の乱数を加算する手段を備える。
【発明の効果】
【００４４】
本願発明は、乗算を、必要なサーバの台数を変えず、かつ安全に行うことができる。
本願発明は、除算を、乗算と同様の手段で実現できる。
本願発明は、連続した秘匿演算を矛盾なく実現できる。
本願発明は、例えば、検索ＩＤから秘密情報への及び秘密情報から検索ＩＤへの双方向の検索を実現できる。
本願発明は、効率的かつ安全にその分散値を更新することができる。
本願発明は、記憶容量の小型化を実現できる。
本願発明は、処理の高速化を実現できる。
本願発明は、記憶容量の小型化と共に処理の高速化を実現できる。
【図面の簡単な説明】
【００４５】
【図１】第１〜第１０の実施の形態のシステムを示す図である。
【図２】第１のディーラ装置１２Ａの構成を示すブロック図である。
【図３】分散処理プログラムを示すフローチャートである。
【図４】各サーバの分散値を示す図である。
【図５】分散処理プログラムを示すフローチャートである。
【図６】各サーバの分散値を示す図である。
【図７】αaの復元・送信処理プログラムを示すフローチャートである。
【図８】図７の復元・送信処理の内容を示す図である。
【図９】（Ａ）は乗算処理プログラムを示すフローチャートであり、（Ｂ）は各サーバの分散値を示す図である。
【図１０】αｊβｊの復元・計算・送信処理プログラムを示すフローチャートである。
【図１１】図１０の復元・計算・送信処理の内容を示す図である。
【図１２】乗算結果取得処理プログラムを示すフローチャートである。
【図１３】図１２の乗算結果取得処理の内容を示す図である。
【図１４】分散処理プログラムを示すフローチャートである。
【図１５】各サーバの分散値を示す図である。
【図１６】γｃの復元・送信処理プログラムを示すフローチャートである。
【図１７】図１６のγｃの復元・送信処理の内容を示す図である。
【図１８】（Ａ）は乗算処理プログラムを示すフローチャートであり、（Ｂ）は各サーバの分散値を示す図である。
【図１９】αｊβｊγｊの復元・計算・送信処理プログラムを示すフローチャートである。
【図２０】図１９のαｊβｊγｊの復元・計算・送信処理の内容を示す図である。
【図２１】乗算結果取得処理プログラムを示すフローチャートである。
【図２２】図２１の乗算結果取得処理の内容を示す図である。
【図２３】分散処理プログラムを示すフローチャートである。
【図２４】分散処理プログラムを示すフローチャートである。
【図２５】αｊβｊの復元・送信処理プログラムを示すフローチャートである。
【図２６】復元処理プログラムを示すフローチャートである。
【図２７】αβabの送信処理プログラムを示すフローチャートである。
【図２８】（ａ）は除算処理プログラムを示すフローチャートであり、（Ｂ）は各サーバの分散値を示す図である。
【図２９】αｊ／βｊの復元・計算・送信処理プログラムを示すフローチャートである。
【図３０】図２９のαｊ／βｊの復元・計算・送信処理の内容を示す図である。
【図３１】除算結果取得処理プログラムを示すフローチャートである。
【図３２】図３１の除算結果取得処理の内容を示す図である。
【図３３】（Ａ）は除算処理プログラムを示すフローチャートであり、（Ｂ）は各サーバの分散値を示す図である。
【図３４】αｊβｊの復元・計算・送信処理プログラムを示すフローチャートである。
【図３５】図３４のαｊβｊの復元・計算・送信処理の内容を示す図である。
【図３６】乗算結果取得処理プログラムを示すフローチャートである。
【図３７】図３６の乗算結果取得処理の内容を示す図である。
【図３８】βｊ／αｊの復元・計算・送信処理プログラムを示すフローチャートである。
【図３９】図３８のβｊ／αｊの復元・計算・送信処理の内容を示す図である。
【図４０】βｊ／αｊの計算・送信処理プログラムを示すフローチャートである。
【図４１】（Ａ）はβａ、βｂの計算・送信処理プログラムを示すフローチャートであり、（Ｂ）はβａ、βｂの計算・送信処理の内容を示す図である。
【図４２】積和処理プログラムを示すフローチャートである。
【図４３】復元処理プログラムを示すフローチャートである。
【図４４】乗算処理プログラムを示すフローチャートである。
【図４５】αｊβｊの復元・送信処理プログラムを示すフローチャートである。
【図４６】復元処理プログラムを示すフローチャートである。
【図４７】分散処理プログラムを示すフローチャートである。
【図４８】分散処理プログラムを示すフローチャートである。
【図４９】乗算処理プログラムを示すフローチャートである。
【図５０】次数変換処理プログラムを示すフローチャートである。
【図５１】αβの計算送信処理プログラムを示すフローチャートである。
【図５２】ｒｊｇｊの復元・送信処理プログラムを示すフローチャートである。
【図５３】復元処理プログラムを示すフローチャートである。
【図５４】Ｕｉの計算・送信処理プログラムを示すフローチャートである。
【図５５】Ｗｊ’の計算・送信処理プログラムを示すフローチャートである。
【図５６】新たな分散値の記憶処理プログラムを示すフローチャートである。
【図５７】δｉの生成・送信処理プログラムを示すフローチャートである。
【図５８】更新処理プログラムを示すフローチャートである。
【図５９】更新処理プログラムを示すフローチャートである。
【図６０】（Ａ）は更新処理プログラムを示すフローチャートであり、（Ｂ）は復元処理プログラムを示すフローチャートである。
【図６１】（Ａ）は分散処理プログラムを示すフローチャートであり、（Ｂ）は復元処理プログラムを示すフローチャートである。
【図６２】分散処理プログラムを示すフローチャートである。
【図６３】（Ａ）、（Ｂ）は、第１のサーバ１４Ｘ１の記憶装置３４に記憶されている分散値の記憶状態を示すである。
【図６４】検索処理プログラムを示すフローチャートである。
【図６５】分散値Ｆｊ’（ｘｉ）の計算・送信処理プログラムを示すフローチャートである。
【図６６】差ｔｊの計算・送信処理プログラムを示すフローチャートである。
【図６７】分散値Ｆｕ（ｘｉ）の計算・送信処理プログラムを示すフローチャートである。
【図６８】分散値Ｆo（ｘｉ）の計算・送信処理プログラムを示すフローチャートである。
【図６９】差の計算・送信処理プログラムを示すフローチャートである。
【図７０】検索処理プログラムを示すフローチャートである。
【図７１】分散処理プログラムを示すフローチャートである。
【図７２】乗算処理プログラムを示すフローチャートである。
【図７３】乗算処理プログラムを示すフローチャートである。
【図７４】αｊβｊの計算・送信処理プログラムを示すフローチャートである。
【図７５】復元処理プログラムを示すフローチャートである。
【図７６】復元処理プログラムを示すフローチャートである。
【図７７】積和処理及び復元処理プログラムを示すフローチャートである。
【図７８】秘匿乗算（乗算及び復元）処理プログラムを示すフローチャートである。
【図７９】分散値の計算・送信処理プログラムを示すフローチャートである。
【図８０】差の計算・送信処理プログラムを示すフローチャートである。
【図８１】検索処理プログラムを示すフローチャートである。
【図８２】分散処理プログラムを示すフローチャートである。
【図８３】分散処理プログラムを示すフローチャートである。
【図８４】復元処理プログラムを示すフローチャートである。
【図８５】復元処理プログラムを示すフローチャートである。
【図８６】（Ａ）は分散処理プログラムを示すフローチャートであり、（Ｂ）は第１のサーバ１４Ｘ１の記憶装置３４に記憶されている分散値の記憶状態を示す図である。
【図８７】ｊの指示処理プログラムを示すフローチャートである。
【図８８】Ｆj'(xi)の計算送信処理プログラムを示すフローチャートである。
【図８９】検索処理プログラムを示すフローチャートである。
【図９０】分散処理プログラムを示すフローチャートである。
【図９１】復元処理プログラムを示すフローチャートである。
【図９２】復元処理プログラムを示すフローチャートである。
【図９３】分散処理プログラムを示すフローチャートである。
【図９４】分散処理プログラムを示すフローチャートである。
【図９５】αjβjの計算送信処理プログラムを示すフローチャートである。
【発明を実施するための最良の形態】
【００４６】
＜第１の実施の形態＞
（全体構成）
最初に、第１の実施の形態〜第１０の実施の形態の全体の構成を説明する。
（ｋ,ｎ）秘密分散法を用いて秘密情報の分散保管、秘匿計算、秘匿検索、秘匿更新を行う図１に示すシステムを考える。システムは、秘密情報の分散を行う複数のディーラ装置を備えている。図１では、３つのディーラ装置、即ち、第１のディーラ装置１２Ａ、第２のディーラ装置１２Ｂ、及び第３のディーラ装置１２Ｃを備えている例を示している。また、システムは、分散されたｎ個の分散値を独立に保管するｎ個のサーバ、即ち、第１のサ−バ１４ｘ１、第２のサ−バ１４ｘ２、・・・第ｎ個のサ−バ１４ｘｎ（以降、サ−バシステムともいう）を備えている。更に、システムは、秘密情報または秘匿演算された結果の復元を行う復元装置１６を備えている。図１では、復元装置１６は１つのみ示しているが、複数の復元装置１６を備えることもできる。なお、複数の復元装置１６を備える場合でも、各復元装置１６は以下に示す処理を実行する。また、システムは、検索サーバ１８を備える場合もある。第１のディーラ装置１２Ａ〜第３のディーラ装置１２Ｃ、第１のサ−バ１４ｘ１〜第ｎ個のサ−バ１４ｘｎ、及び復元装置１６は、インタ−ネット等のネットワ−ク１０を介して相互に接続されている。これに対し、検索サーバ１８は、ネットワ−ク１０を介さずに、第１のサ−バ１４ｘ１〜第ｎ個のサ−バ１４ｘｎの各々に直接接続されている。【００４７】
第１のディーラ装置１２Ａ〜第３のディーラ装置１２Ｃ、第１のサ−バ１４ｘ１〜第ｎ個のサ−バ１４ｘｎ、復元装置１６、及び検索サーバ１８は同様の構成となっているので、以下、第１のディーラ装置１２Ａの構成を説明し、その他の装置の説明を省略する。【００４８】
図２には、第１のディーラ装置１２Ａの構成を示すブロック図である。図２に示すようにある第１のディーラ装置１２Ａは、ＣＰＵ２２、ＲＯＭ２４、及びＲＡＭ２６を備えている。また、第１のディーラ装置１２Ａは、表示装置３０、入力装置３２、記憶装置３４、及びインターフェース（Ｉ／Ｆ）３６を備えている。これらの各装置は、バス２８を介して相互に接続されている。インターフェース（Ｉ／Ｆ）３６は、ネットワ−ク１０に接続されている。なお、検索サーバ１８のインターフェース（Ｉ／Ｆ）３６は、ネットワ−ク１０を介さずに、第１のサ−バ１４ｘ１〜第ｎ個のサ−バ１４ｘｎのインターフェース（Ｉ／Ｆ）３６に接続されている。ＲＯＭ２４には、後述する各処理のプログラムが記憶されている。【００４９】
秘密情報をもつオ−ナは第１のディーラ装置１２Ａ〜第３のディーラ装置１２Ｃを操作する。演算結果を知ることができるユ−ザ（復元者）は復元装置１６を操作する。第１のサ−バ１４ｘ１〜第ｎ個のサ−バ１４ｘｎは正当なオ−ナまたは復元者からの通信だけを受け付け、不正な通信は拒否する。さらに、第１のディーラ装置１２Ａ〜第３のディーラ装置１２Ｃ、及び第１のサ−バ１４ｘ１〜第ｎ個のサ−バ１４ｘｎと復元装置１６との通信は暗号などにより安全な通信路が構築されている。一般に、第１のディーラ装置１２Ａ〜第３のディーラ装置１２Ｃや復元装置１６は各オ−ナや復元者が個別に有する。第１のディーラ装置１２Ａ〜第３のディーラ装置１２Ｃをサ−バシステムの入力口、復元装置１６をサ−バシステムの出力口として備えることもできる。【００５０】
まず、図１のシステムが持つ秘匿検索機能について説明する。オ−ナが第1のディーラ装置を使う場合を考える。オーナは自分の秘密情報の分散値を第１のディーラ装置１２Ａによって計算し、自分に割り当てられた各サ−バの領域にその分散値を保管する。ただし、各分散値はそれを検索するための識別データ、即ち、検索ＩＤまたは検索ＩＤに関する分散値とともにサ−バシステムに保存される。【００５１】
秘匿検索を行う場合、オーナは第６の実施の形態に示す手法を用いて検索ＩＤを分散する。情報の検索・復元を望む正当な復元者は検索ＩＤを復元装置１６に示し、復元装置１６は第６の実施の形態において説明する手法を用いてそれに対応する情報をサ−バシステムに送る。サ−バシステムは送られてきた情報に対応する秘密情報の分散値があればそれを復元装置１６に送信、当該秘密情報の分散値がなければ、当該秘密情報の分散値がないことを伝える。検索ＩＤに対応する秘密情報の分散値を得た復元装置１６はそれから秘密情報または秘匿計算の結果の復元を行う。ここで、システムは第６の実施の形態に示す秘匿検索を行うとしたが、システムは複数の機能を有しているので、秘匿検索の機能が必要ない場合、秘匿検索の機能を使わず通常の検索を行うこともできる。【００５２】
次に図１のシステムがもつ加減乗除を含む演算を秘密に行う秘匿演算機能について説明する。復元者が検索ＩＤ（またはその条件式など）により演算対象と、それに対する演算法を復元装置１６に示すと、復元装置１６は上述の秘匿検索機能（秘匿検索を使わない場合、通常の検索機能）を用いて検索ＩＤを秘匿検索し、そのＩＤに対応するサ−バシステムに保存されている演算対象となる分散値を得る。サーバシステムはそれを用いて指定された演算を秘匿計算し、最終結果の分散値を得る。最終結果の分散値を得た復元装置１６はそれを復元して最終結果を得る。第１の実施の形態〜第４の実施の形態は本発明による秘匿乗算法、秘匿除算法、連続秘匿演算法（秘匿加算法、秘匿減算法を含む）について、各ディーラ装置、サ−バシステム、復元装置１６が行う処理を説明する。ただし、本発明において秘匿演算は主にサ−バシステムが担当するが、復元装置１６または各ディーラ装置が秘匿演算に協力することがある。一般に、秘匿演算は秘密情報に対して行われるが、検索ＩＤに対して行えば検索ＩＤによる条件式の秘匿演算となる。よって、検索ＩＤを秘匿して条件式を演算する場合もこの秘匿計算機能は用いられる。ただし、秘匿検索や秘匿更新などの機能のみを使いたい場合、この秘匿演算機能は使われず、通常の演算機能をもつ。【００５３】
また、図１のサ−バシステムは定期的またはある秘密情報に対する分散値を使用する毎などの定められたタイミングで行う保管情報の秘匿更新機能をもつ。これは第５の実施の形態において、種々の場合に対する更新法が説明される。ただし、秘匿更新を行わない場合、この機能は使われないこともある。【００５４】
さらに、第１の実施の形態〜第６の実施の形態はＳｈａｍｉｒの（ｋ,ｎ）秘密分散法を例として説明されるが、第７の実施の形態において、記憶容量の削減を実現しながら秘匿検索、秘匿演算、秘匿更新をする非対称秘密分散法に対して、記憶容量の削減と計算量の削減を同時に実現する手法を示す。即ち、本発明が非対称秘密分散法に対しても有効であることを示す。ただし、全体構成は図１と同様である。【００５５】
また、第８の実施の形態に非対称秘密分散法と異なるやり方で記憶容量の削減を行うランプ型秘密分散法に対して、記憶容量の削減と計算量の削減を同時に実現しながら秘匿検索、秘匿演算、秘匿更新をする手法を示す。即ち、本発明がランプ型秘密分散法に対しても有効であることを示す。ただし、全体構成は図１と同様である。【００５６】
さらに、第９の実施の形態において秘密情報をビット列として扱い、秘密情報の分散と復元をＸＯＲのみで行う（ｋ,ｎ）秘密分散法を拡張し、秘密情報を数値として扱う手法（多値化法）について説明する。これを用いることによって計算量が削減され、第１の実施の形態〜第６の実施の形態の秘匿検索、秘匿検索、秘匿更新の各機能が高速に行えることを示す。即ち、本発明が多値化法に対しても有効であることを示す。ただし、全体構成は図１と同様である。【００５７】
最後に、非対称型秘密分散法と多値化法またはランプ型多値化法を組み合わせた方法に対しても、本発明による提案が有効であることを第１０の実施の形態に示す。これによって、第１の実施の形態〜第６の実施の形態に示す各機能が小型かつ高速に行えるシステム（第１の実施の形態）が実現され、本発明の有効性が示される。【００５８】
（第１の実施の形態の具体的内容）
Ｓｈａｍｉｒの（ｋ,ｎ）秘密分散法に対して閾値ｋを変化させない秘匿乗算法を以下に示す。第１のディーラ装置１２Ａが秘密情報ａを持ち、第２のディーラ装置１２Ｂが秘密情報ｂを持つ。以下では、ａ,ｂを秘匿したままａ・ｂの乗算結果を得る場合を示す。
前提として、生成する乱数は０を含まないとし、第１のサ−バ１４ｘ１〜第ｎ個のサ−バ１４ｘｎの識別データ（サ−バＩＤ）であるｘ１〜ｘｎは公開の値である、即ち、他の装置は、各サーバＩＤを記憶しているとする。また、ａ,ｂは素数ｐ以下の整数とし、演算はｑ（>ｐｕ、ｕは１以上の整数。ただし、元々ｐを大きくとった場合はｐ＝ｑとしてもよい）を素数として、ｑを超えた値に対してはその余りをとる法演算を用いて行われる。αiやβi（ｉ＝１,…,ｋ）などの乱数は素数q以下の整数とする。さらに、パラメ−タが実数の場合でも、以下のようにすれば整数として扱える。まず、実数は小数点以下の位が定められているとする。例えば、小数点第２位までとされる場合、１００倍すれば整数として扱える。よって、実数を秘密分散する場合、実数は桁上げをして整数として表す（これを実数の整数表現と呼ぶ）。その小数点位置は別に記憶されている、または規定によって予め定められているとする。よって、実数の整数表現同士の和は整数の和と同様に扱え、小数点位置も変化しない。それに対して、実数の整数表現同士の積も整数の積と同様に扱えるが、小数点位置に変化が生じる。例えば、小数点第２位の実数同士の積を計算する場合、小数点第４位の実数となる。前述のように、全ての実数は小数点以下の位が定められているとする場合、小数点第３位以下は切り捨てまたは四捨五入されて、積も小数点第２位の実数とする。このように小数点位置の規定に従って小数点位置の調整を行い実数に戻すことを実数化と呼ぶ。一般に、実数はコンピュ−タ上では固定小数点表現と浮動小数点表現があるが、これらはあくまで表現であるので上記のような規則が定められていればどちらにも対応できる。以上の前提は全実施の形態を通して共通である。【００５９】
（秘匿乗算１（基本形））
以下、秘匿乗算１（基本形）を説明する。秘匿乗算１（基本形）は、分散、乗算、及び復元の各処理により実行される。
［分散］
まず、分散（秘匿分散）を、図３〜図６を参照して説明する。
第１のディーラ装置１２ＡのＣＰＵ２２は、図３に示す分散値処理を実行する。
ステップ４２で、ｋ個の乱数αｉを生成し、その積α＝α１・α２・・・αｋを計算する。
ステップ４４で、以下の分散値を計算する。
Ｗａ’（ｘｉ）＝α（ａ＋ａ０,１ｘｉ＋・・・＋ａ０,ｋ−１ｘｉｋ−１）
Ｗａ１（ｘｉ）＝α１＋ａ１,１ｘｉ＋・・・＋ａ１,ｋ−１ｘｉｋ−１
：
Ｗａｋ（ｘｉ）＝αｋ＋ａｋ,１ｘｉ＋・・・＋ａｋ,ｋ−１ｘｉｋ−１
ただし、ａｈ,ｊ（ｈ＝０,・・・,ｋ、ｊ＝１,・・・,ｋ−１）は乱数，ｘｉは上記のように公開されているサ−バＩＤ（ｉ＝１,…,ｎ）である。【００６０】
ステップ４６で、第１のサ−バ１４ｘ１〜第ｎのサ−バ１４ｘｎに分散値Ｗａ’（ｘｉ）〜Ｗａｋ（ｘｉ）を送信する。
ｎ＝４、ｋ＝３とすると、第１のサ−バ１４ｘ１〜第ｎのサ−バ１４ｘｎの分散値Ｗａ’（ｘｉ）〜Ｗａｋ（ｘｉ）は、図４に示す通りである。【００６１】
第２のディーラ装置１２ＢのＣＰＵ２２は図５に示す分散処理を実行する。
ステップ５２で、ｋ個の乱数βｉを生成し、その積β＝β１・β２・・・βｋを計算する。
ステップ５４で、以下の分散値を計算する。
Ｗｂ’（ｘｉ）＝β（ｂ＋ｂ０,１ｘｉ＋・・・＋ｂ０,ｋ−１ｘｉｋ−１）
Ｗｂ１（ｘｉ）＝β１＋ｂ１,１ｘｉ＋・・・＋ｂ１,ｋ−１ｘｉｋ−１
：
Ｗｂｋ（ｘｉ）＝βｋ＋ｂｋ,１ｘｉ＋・・・＋ｂｋ,ｋ−１ｘｉｋ−１
ただし、ｂｈ,ｊ（ｈ＝０,・・・,ｋ、ｊ＝１,・・・,ｋ−１）は乱数，ｘｉはサ−バＩＤ（ｉ＝１,…,ｎ）【００６２】
ステップ５６で、第１のサ−バ１４ｘ１〜第ｎのサ−バ１４ｘｎに分散値Ｗｂ’（ｘｉ）〜Ｗｂｋ（ｘｉ）を送信する。
ｎ＝４、ｋ＝３とすると、第１のサ−バ１４ｘ１〜第ｎのサ−バ１４ｘｎの分散値Ｗｂ’（ｘｉ）〜Ｗｂｋ（ｘｉ）は、図６に示す通りである。【００６３】
［乗算］
次に、乗算を図７〜図９を参照して説明する。
サ−バシステム内の、例えば予め定められた１つのサ−バ、例えば、第１のサ−バ１４ｘ１のＣＰＵ２２は、図７に示すαaの復元・送信処理を実行する。図７のステップ６２（図８も参照）で、自身のサーバ１４ｘ１及び他のサ−バ１４ｘ２〜１４ｘｋから、Ｗａ’（ｘｉ）をｋ個集め、ステップ６４でαａを復元し、ステップ６６で、αａを、演算に参加する他のサ−バ、例えば、他の全てのサ−バ１４ｘ２〜１４ｘｎに送信する。その様子を図８に示す。【００６４】
サ−バｊ（ｊ＝１,…,ｎ）、例えば、全てのサーバ（第１のサーバ１４ｘ１〜第ｎのサーバ１４ｘｎ）の各々のＣＰＵ２２は、図９（Ａ）に示す乗算処理を実行する。即ち、ステップ６８で、自分がもつＷｂ’（ｘｊ）に送られてきたαａをかけて、以下のＷａｂ’（ｘｊ）を生成する。
Ｗａｂ’（ｘｊ）＝αβａ（ｂ＋ｂ０,１ｘｊ＋・・・＋ｂ０,ｋ−１ｘｊｋ−１）
ｎ＝４、ｋ＝３の場合の、第1のサーバ１４ｘ１〜第４のサーバ１４ｘ４におけるＷａｂ’（ｘ１）〜Ｗａｂ’（ｘ４）は、図９（Ｂ）に示す通りである。【００６５】
［復元］
次に、復元を、図１０〜図１３を参照して説明する。
復元に参加するサ−バｊ（ｊ＝１,…,ｋ）、即ち、例えば、予め定められた第１のサ−バ１４ｘ１〜第ｋのサ−バ１４ｘｋの各々のＣＰＵ２２は、図１０のαｊβｊの復元・計算・送信処理を実行する。即ち、ステップ７２（図１１も参照）で、指定されたｊに応じたＷａｊ（ｘｉ）とＷｂｊ（ｘｉ）を集め（ｉ＝１,…,ｋ）、ステップ７４で、αｊとβｊを１つずつ復元する。図１１では、第１のサ−バ１４ｘ１はｊ＝１が指定されてα1とβ1を復元し、第２のサ−バ１４ｘ2はｊ＝２が指定されてα2とβ2を復元し、第３のサ−バ１４ｘ3はｊ＝３が指定されてα3とβ3を復元する。【００６６】
ステップ７６（図１１も参照）で、積αｊβｊを計算し、ステップ７８で、Ｗａｂ’（ｘｊ）とαｊβｊを復元装置１６に送信する。図１１では第１のサ−バ１４ｘ１はＷａｂ’（ｘ1）とα1β1を、第２のサ−バ１４ｘ2はＷａｂ’（ｘ2）とα2β2を、第３のサ−バ１４ｘ3はＷａｂ’（ｘ3）とα3β3を復元装置１６に送信する。よって、上記例では、復元装置１６には、図１１に示すデータが送信されている。【００６７】
復元装置１６のＣＰＵ２２は、図１２の乗算結果取得処理を実行する。即ち、ステップ８２（図１３も参照）で、ｋ個のＷａｂ’（ｘｊ）からαβａｂを復元する。
ステップ８４（図１３も参照）で、αｊβｊ（ｊ＝１,・・・,ｋ）からαβを合成し、ステップ８６（図１３も参照）で、αβａｂをαβで割ってａｂを得る。【００６８】
上記演算の第１の特徴を説明する。まず、請求項１に示すように［分散］のステップ４２（図３）、ステップ５２（図５）で、それぞれｋ個の乱数αｉとβｉ（ｉ＝１,…,ｋ）を個別に生成した後、ステップ４４（図３）、ステップ５４（図５）で分散値を計算し、ステップ４６（図３）、ステップ５６（図５）で分散する。請求項２に示すように［復元］のステップ７４（図１０）においてサ−バ毎に１つの乱数を復元させ、図１０のステップ７６〜ステップ７８においてその積を計算して復元装置１６に送信する。これによって、全てのサ−バの乱数がわからなければ、合成値αまたはβはわからない。換言すると、ｋ−１個のサ−バを盗聴してもα，βは個別に復元できない方式となる。よって、αaからａまたはβｂからｂはわからない。【００６９】
次に、上記演算の第２の特徴を説明する。請求項１に示すように［分散］のステップ４４〜ステップ４６（図３）、ステップ５４〜ステップ５６（図５）で秘密情報に合成値をかけて分散し、請求項３に示すように［乗算］のステップ６２〜ステップ６４（図７）で一旦復元し、ステップ７６（図１０）でその復元値を用いて演算を行う。これによって、分散値の次数ｋ−１を変えずに乗算を可能とする。【００７０】
第３の特徴は、請求項４に示すように[復元]における図１２のステップ８２〜８６では、分散値Ｗａｂ’（ｘｉ）から秘匿化された演算結果（αβａｂ）を復元し、合成したαβで割ることになされる点にある。【００７１】
上記において、簡単のため［分散］のステップ４４（図３）、ステップ５４（図５）、おいて、分散値Ｗａ’（ｘｉ）,Ｗｂ’（ｘｉ）などの秘匿化分散値は、分散値に乱数をかけているが、秘密情報に乱数をかけて直接それを秘密分散してもよい。【００７２】
また［乗算］のステップ６４（図７）で、あるサ−バ１４ｘｄ、上記例では、第１のサーバ１４ｘ１がαaを復元するとしたが、複数のサ−バでαaを復元して、当該復元したサーバ以外のサ−バに伝えるとしてもよい。全てのサ−バでαaを復元する場合、他のサ−バにαaの値を伝える必要はない。また、サ−バ１４ｘｄは他のサ−バにαaを伝えるとしたが、復元に参加するｋ台が定まっている場合、少なくともそのｋ台のサ−バに伝えればよい。また、αaでなくβbを復元してもよい。【００７３】
また、［復元］のステップ７２（図１０）では、サ−バｊは指定されたｊに応じたＷａｊ（ｘｉ）とＷｂｊ（ｘｉ）を集めるとしたが、指定は重なりがなければどのように定めても良い。例えば、ｊを参加するサ−バＩＤの昇順に応じて１,２,…,ｋと定めてもよいし、降順に定めても良い。また、各サ−バが早いもの順で自分のｊの値を定めるとしてもよい。【００７４】
また、[復元]の図１０のステップ７８において、各サーバはαjβjを復元者に送り、復元装置１６が図１２のステップ８２でαβを復元するとしたが、次のようにしてもよい。即ち、例えば、図１０のステップ７８では、サーバ１４x1はα1β1をサーバ１４x2に送り、サーバ１４x2はそれにα2β2をかけて次のサーバに送ることを繰り返し、最後のサーバ１４xkにおいてαβを復元する。その後、サーバ１４xkはαβを他のサーバに伝え、各サーバはWab’(xi)/αβを計算する。この場合、図１２のステップ８２は、復元装置１６はk個のサーバからWab’(xi)/αβを集め、abを復元するとなり、ステップ８４と８６は省略される。また、各サーバはαjβjを復元者ではなく検索サーバに送り、検索サーバがαβを復元して各サーバに戻し、各サーバはWab’(xi)/αβを計算して、その結果を復元者に送ってもよい。【００７５】
また、[乗算]の図９のステップ６８では、サーバ１４xdはWb’(xi)を集めてβｂを復元し、αaとかけてαβabを計算して復元装置１６に送ってもよい。その場合、[復元]における図１２のステップ８２は削除される。【００７６】
また、生成する乱数αiなどはk個とし、各サーバはその中の１つを復号するとしたが、k個以上の乱数を生成し、各サーバが複数の乱数を復元し、合成してもよい。例えば、[分散]の図３のステップ４２においてt・k個の乱数を生成して、qを法としてその積αを計算し、[復元]の図１０のステップ７４において、１つのサーバはt個の乱数を復元し、ステップ７６で乗算する。
以上は、以降の実施の形態についても同様である。【００７７】
（秘匿乗算２（繰り返し））
次に、乗算を繰り返してａｂｃを計算する場合を説明する。なお、乗算の後に加算を行う場合は第３の実施の形態に示す。
［分散］
［分散］においてａ,ｂは秘匿乗算１と同様に分散されているとする。即ち、第１のディーラ装置１２Ａ、第２のディーラ装置１２Ｂはそれぞれ、図３、図５の分散処理を実行する。
第３のディーラ装置１２ＣのＣＰＵ２２は、図１４の分散処理を実行する。即ち、ステップ９２で、ｋ個の乱数γｉを生成し、その積γ＝γ１・γ２・・・γｋを計算する。【００７８】
ステップ９４で、以下の分散値を計算する。
Ｗｃ’（ｘｉ）＝γ（ｃ＋ｃ０,１ｘｉ＋・・・＋ｃ０,ｋ−１ｘｉｋ−１）
Ｗｃ１（ｘｉ）＝γ１＋ｃ１,１ｘｉ＋・・・＋ｃ１,ｋ−１ｘｉｋ−１
：
Ｗｃｋ（ｘｉ）＝γｋ＋ｃｋ,１ｘｉ＋・・・＋ｃｋ,ｋ−１ｘｉｋ−１
ステップ９６で、ｎ個の第１のサ−バ１４ｘ１〜第ｎのサ−バ１４ｘｎに、分散値Ｗｃ’（ｘｉ）〜Ｗｃｋ（ｘｉ）を送信する。
なお、ｎ＝４、ｋ＝３の場合、上記分散値Ｗｃ’（ｘｉ）〜Ｗｃｋ（ｘｉ）は、図１５に示す通りである。【００７９】
［乗算］
秘匿乗算１の上記処理（図７、図９）を実行し、Ｗａｂ’（ｘｉ）を計算する。
予め定められたサ−バ、例えば、第１のサ−バ１４ｘ１のＣＰＵ２２は、図１６のγｃの復元・送信処理を実行する。即ち、ステップ１０２（図１６も参照）で、Ｗｃ’（ｘｊ）をｋ個集め、ステップ１０４（図１６も参照）で、γｃを復元し、ステップ１０６（図１６も参照）で、γｃを他のサ−バに送信する。上記例では、γｃをサーバ１４ｘ２〜１４ｘ４に送信する。その様子を図１７に示す。【００８０】
各サ−バ１４ｘ１〜１４ｘｎのＣＰＵ２２は、図１８（Ａ）の乗算処理を実行する。即ち、ステップ１０８で、自分がもつＷａｂ’（ｘｊ）にγｃをかけてＷａｂｃ’（ｘｊ）を生成する。
Ｗａｂｃ’（ｘｊ）＝αβγｃ（ａｂ＋ａｂ０,１ｘｉ＋・・・＋ａｂ０,ｋ−１ｘｉｋ−１）
ｎ＝４、ｋ＝３の場合、第１のサーバ１４ｘ１〜第４のサーバ１４ｘ４におけるＷａｂｃ’（ｘ１）〜Ｗａｂｃ’（ｘ４）は、図１８（Ｂ）に示す通りである。【００８１】
［復元］
復元に参加する予め定められたサ−バｊ（ｊ＝１,…,ｋ）、即ち、例えば、第１のサーバ１４ｘ１〜第ｋのサーバ１４ｘｋの各々のＣＰＵ２２は、図１９のαｊβｊγｊの復元・計算・送信処理を実行する。即ち、ステップ１１２で、指定されたｊに応じたＷａｊ（ｘｉ），Ｗｂｊ（ｘｉ），Ｗｃｊ（ｘｉ）（ｉ＝１,…,ｋ）を集める（ｎ＝４、ｋ＝３の場合の例を示す図２０も参照）。ステップ１１４で、１サ−バ当たりαｊ,βｊ,γｊを１つずつ復元する。ステップ１１６で、積αｊβｊγｊを計算し、ステップ１１８で、Ｗａｂｃ’（ｘｊ）とαｊβｊγｊを復元装置１６に送信する。【００８２】
復元装置１６のＣＰＵ２２は、図２１の乗算結果取得処理を実行する。即ち、ステップ１２２（図２２も参照）で、ｋ個のＷａｂｃ’（ｘｊ）からαβγａｂｃを復元し、ステップ１２４（図２２も参照）で、αｊβｊγｊ（ｊ＝１,・・・,ｋ）からαβγを合成し、ステップ１２６（図２２も参照）で、αβγａｂｃをαｊβｊγｊ（ｊ＝１,・・・,ｋ）で割ってａｂｃを得る。【００８３】
以上より、秘匿乗算の繰り返しは秘匿乗算１の［乗算］の繰り返しを基本として、少しの変形で実現できることがわかる。また、秘匿乗算１の［乗算］処理で得られるＷａｂ’（ｘｉ）は乱数がかかったままであるので、復元が行われるまで途中結果が漏洩することはない。【００８４】
以上から、本実施例は秘匿乗算及びその繰り返しに対して有効であることが言える。【００８５】
また、実数を対象とする場合、小数点位置に対しても秘密分散を行い、小数点をずらす処理を秘匿計算として実行することができる。例えば、全ての小数点位置が小数点第二位である場合は、前述のように加減算では小数点位置が変わらず、乗除算の場合のみ小数点位置が変化する。しかし、この小数点位置の変化は加減算によって演算できるので、秘密分散した小数点位置を秘匿加算すればよい。すなわち、小数点第二位までの数Aと小数点第三位までの数Bをかけると小数点第五位の数となるが、Aの小数点位置を表すa=２、とBの小数点位置を表すb=３を秘密分散して秘匿加算すれば、その和を表す５の分散値が得られることは明らかである。【００８６】
よって、実数対応の秘匿乗算を以下に示す。処理の流れは秘匿乗算１とほぼ同様であるが、実数対応の詳細を理解するために、以下の秘匿乗算３を示す。ただし、実数を対象とする場合、秘密情報や乱数は以下のような実数とし、秘密分散部分以外の演算は全てqなどを法とせず、実数演算で行われる。すなわち、[分散]におけるa,b,乱数αi,βi(i=1,・・,k)及びαを整数化すれば素数p以下となる実数（αi,βiはpでなくてもよいがここでは小数点位置を含めてp以下とする）とし、αa及びβbを整数化すれば素数q以下となる実数とする。よって、[分散]における秘密分散であるαiとβiの分散はpを法として整数化して分散し、αaとβbの分散はqを法として整数化して秘密分散する。この場合、[復元]でαiとβiの復元処理はpを法として行い、αaとβbの復元処理はqを法として行うが、復元した後のαi,βi，α,βに関連する演算はqを法とせず、実数として演算する。この場合、αａに加えてβbも復元し、その後実数演算する。【００８７】
追加される処理としては、[分散]において小数点位置を示す値を秘密分散することと、[乗算]において上記のように秘匿加算して新たな小数点位置を計算することである。【００８８】
秘匿乗算３（実数対応）
［分散］
秘密情報ａ（実数）をもつ第１のディーラ装置１２ＡのＣＰＵ２２は、図２３に示す分散処理を実行する。即ち、第１のディーラ装置１２ＡのＣＰＵ２２は、ステップ１０１で、ｋ個の乱数αｉを実数として生成し、その積α＝α１・α２・・・αｋを実数計算する。乱数αｉは、定められた小数点位置をもつ実数として表されるとする。【００８９】
第１のディーラ装置１２ＡのＣＰＵ２２は、ステップ１０３で、以下の分散値を計算する。ただし、aとαi(i=1,・・・,k)とαを、整数表現すればp以下の整数で表せる定められた小数点位置をもつ実数とする。α＝α１・α２・・・αｋの計算は丸め方により値がずれるが、ここでは簡単のため、αはα１・α２・・・αｋを計算した後、小数点位置を調整するとする。すなわち、例えば全パラメータが小数点2位の実数とすると、αは小数点位置が2kとなるが、小数点位置を調整して小数点3位を切り捨てまたは四捨五入して小数点2位の値とし、かつ整数表現すればp以下の整数となる。また、αaを整数表現すればq以下の整数で表せる定められた小数点位置をもつ実数（ここでは小数点2位とする）として、αaを整数表現し、素数qを法として以下の分散値を計算する。また、αi(i=1,…,k)もp以下の整数の形にし、pを法として以下を計算する。さらに、αiの小数点位置を表す値d1（p以下の整数）とαaの小数点位置を表す値d3もここではpを法として秘密分散する。
Ｗａ’（ｘｉ）＝α（ａ＋ａ０,１ｘｉ＋・・・＋ａ０,ｋ−１ｘｉｋ−１）
Ｗａ１（ｘｉ）＝α１＋ａ１,１ｘｉ＋・・・＋ａ１,ｋ−１ｘｉｋ−１
：
Ｗａｋ（ｘｉ）＝αｋ＋ａｋ,１ｘｉ＋・・・＋ａｋ,ｋ−１ｘｉｋ−１
Ｗｄ１（ｘｉ）＝ｄ1＋ｄ１,１ｘｉ＋・・・＋ｄ１,ｋ−１ｘｉｋ−１
Ｗｄ３（ｘｉ）＝ｄ３＋ｄ３,１ｘｉ＋・・・＋ｄ３,ｋ−１ｘｉｋ−１
ただし、ａｈ,ｊ及びｄ1,j、ｄ３,j（ｈ＝０,・・・,ｋ、ｊ＝１,・・・,ｋ−１）は乱数（整数），ｘｉはサ−バＩＤ（ｉ＝１,…,ｎ）【００９０】
ステップ１０５で、第１のサ−バ１４ｘ１〜第ｎのサ−バ１４ｘｎに送信する。【００９１】
秘密情報ｂ（実数）をもつオ−ナＢの第２のディーラ装置１２ＢのＣＰＵ２２は、図２４に示す分散処理を実行する。即ち、ステップ１１１で、ｋ個の乱数βｉを実数として生成し、その積β＝β１・β２・・・βｋを実数計算する。βiは、定められた小数点位置をもつ実数として表されるとする。【００９２】
ステップ１１３で、以下の分散値を計算する。この場合、ｂとβiとβを、整数表現すればp以下の整数で表せる定められた小数点位置をもつ実数とし、βbを整数表現すればq以下の整数で表せる定められた小数点位置をもつ実数として、βbを整数表現し、素数qを法として以下の分散値を計算する。また、βi(i=1,…,k)もp以下の整数の形にし、pを法として以下を計算する。さらに、βiの小数点位置を表す値d2（p以下の整数）とβｂaの小数点位置を表す値d4もpを法として秘密分散する。
Ｗｂ’（ｘｉ）＝β（ｂ＋ｂ０,１ｘｉ＋・・・＋ｂ０,ｋ−１ｘｉｋ−１）
Ｗｂ１（ｘｉ）＝β１＋ｂ１,１ｘｉ＋・・・＋ｂ１,ｋ−１ｘｉｋ−１
：
Ｗｂｋ（ｘｉ）＝βｋ＋ｂｋ,１ｘｉ＋・・・＋ｂｋ,ｋ−１ｘｉｋ−１
Ｗｄ２（ｘｉ）＝ｄ2＋ｄ２,１ｘｉ＋・・・＋ｄ２,ｋ−１ｘｉｋ−１
Ｗｄ４（ｘｉ）＝ｄ4＋ｄ４,１ｘｉ＋・・・＋ｄ４,ｋ−１ｘｉｋ−１
ただし、ｂｈ,ｊ及びｄ2,j、d4,j（ｈ＝０,・・・,ｋ、ｊ＝１,・・・,ｋ−１）は乱数，ｘｉはサ−バＩＤ（ｉ＝１,…,ｎ）【００９３】
ステップ１１５で、第１のサ−バ１４ｘ１〜第ｎのサ−バ１４ｘｎに送信する。【００９４】
［復元］
復元に参加するサーバ、例えば、予め定められた第１のサ−バ１４ｘ１〜第ｋのサ−バ１４ｘｋの各ＣＰＵ２２は、図２５に示すαｊβｊの復元・送信処理を実行する。即ち、ステップ１２１で、指定されたｊに応じたＷａｊ（ｘｊ）とＷｂｊ（ｘｊ）を、ｊに対応するサーバから集め、ステップ１２３で、αｊとβｊを素数pを法として１つずつ復元する。ステップ１２５で、実数化したαjとβjを用いてαｊβｊを実数演算し、ステップ１２７で、計算したαｊβｊを復元装置１６に送信する。【００９５】
復元装置１６のＣＰＵ２２は、図２６に示す復元処理を実行する。即ち、ステップ１３１で、αｊβｊ（ｊ＝１,…,ｋ）を受信し、ステップ１３３で、αｊβｊを実数演算で掛けてαβを計算する。このとき必要があれば、以下の処理を行う。【００９６】
各サーバはWd1(xi)＋Wd3(xi)を計算して、復元装置に送る。
復元装置はWd1(xi)＋Wd3(xi)を復元して、それをk倍した値からαβの小数点位置を知り、αβの小数点位置を調整する。【００９７】
第１のサ−バｘ１のＣＰＵ２２は、図２７に示すαβabの送信処理を実行する。即ち、ステップ１４１で、各サーバから対応するＷａ’（ｘｉ）をｋ個集め、ステップ１４３で、αａを素数ｑを法として復元する。ステップ１４５で、各サーバから対応するＷｂ’（ｘｉ）をｋ個集め、ステップ１４７で、βｂを素数ｑを法として復元する。ステップ１４９で、実数としてαβabを計算し、ステップ１５１で、αβabを復元装置１６に送信する。このとき必要があれば、以下の処理を行う。【００９８】
各サーバはWd2(xi)＋Wd4(xi)を計算して、復元装置に送る。
復元装置はWd2(xi)＋Wd4(xi)を復元して、その値からαβabの小数点位置を知り、αβabの小数点位置を調整する。【００９９】
復元装置１６は、図２６のステップ１３５で、αβabを受信し、ステップ１３７で、αβで割ってａｂを得る。【０１００】
上記の特徴はaとαを整数表現すればp以下の実数、αaを整数表現すればq以下の実数としたことであるである。例えばp=11、q=127として、αとaを整数とした場合、αa=21であればαとaは7と3の組合せに限定される。しかし、αとaを小数点1位の実数、αaを小数点0位の実数とすればαa=21であっても、(α,a)は(7,3)以外に(7.1,2.9),(6.9,3.0),・・・,(1.1,19.1),・・・,(30.0,0.7),・・・など種々の組合せが存在し、特定不能になる。よって、αとaを整数とする場合、乱数αをq以下の整数とすることによってαとaの組み合わせの限定を防ぐが、αとaが実数であれば、αとaをp以下とし、αaをq以下とすることにより、秘密分散と実数演算を両立させる。よって、αaやβbを公開しても安全であるといえる。この特徴は請求項１５に示される。
また、上記では小数点位置を表す値も秘密分散し、演算結果の小数点位置を調整したが、例えば小数点位置がある値に固定されている場合、小数点位置を表す分散値及び秘匿演算は省略できる。例えば、全てのパラメータは小数点第2位の実数と定められていれば、上記アルゴリズムではαβの小数点位置は2kであり、αβabの小数点位置は4であることは明らかである。【０１０１】
秘匿乗算は整数または実数に関わらず、秘匿乗算１によって実現できる。ただし、秘匿除算は第２の実施の形態で述べるように、秘匿乗算１を除算対応にするだけ（秘匿除算１）では実現できない。よって、秘匿乗算３は秘匿乗算と秘匿除算を同形態にする（秘匿除算３に対応させる）ためのものである。その特徴は第２の実施の形態において述べる。
以上は、以降の実施の形態についても同様である。【０１０２】
＜第２の実施の形態＞
次に、秘匿除算を行う場合を説明する。ここでは第２のディーラ装置１２Ｂが持つ秘密情報ｂを第１のディーラ装置１２Ａが持つ秘密情報ａで割る、即ちｂ／ａを計算する場合を考える。
（秘匿除算１（基本形））
まず、秘匿除算１（基本形）について説明する。秘匿除算１（基本形）は、分散、除算、及び復元の処理により実行される。
［分散］
秘匿除算１（基本形）の分散は、秘匿乗算１の分散処理（図３、図５）と同様であるので、その説明を省略する。
［除算］
次に、除算を説明する。あるサ−バ１４ｘｄ、例えば、予め定められた第１のサ−バ１４ｘ１のＣＰＵ２２は、図７に示すαaの復元・送信処理を実行する（図８も参照）。即ち、Ｗａ’（ｘｉ）をｋ個集め（ステップ６２）、αaを復元し（ステップ６４）、αaを他のサ−バに分散する（ステップ６６）。【０１０３】
各サ−バｊ（ｊ＝１,…,ｎ）、即ち、第１のサ−バ１４ｘ１〜第ｎのサ−バ１４ｘｎの各々のＣＰＵ２２は、図２８（Ａ）に示す除算処理実行する。即ち、ステップ１２８で、自分がもつＷｂ’（ｘｊ）をαaで割ってＷａｂ’（ｘｊ）を生成する。
Ｗａｂ’（ｘｊ）＝（β／αa）（ｂ＋ｂ０,１ｘｊ＋・・・＋ｂ０,ｋ−１ｘｊｋ−１）
ｎ＝４．ｋ＝３の場合の、第１のサーバ１４ｘ１〜第４のサーバ１４ｘ４におけるＷａｂ’（ｘｊ）は、図２８（Ｂ）に示す通りである。【０１０４】
［復元］
次に、復元を説明する。
復元に参加するサ−バｊ（ｊ＝１,…,ｋ）、即ち、例えば、第１のサーバ１４ｘ１〜第ｋのサーバ１４ｘｋの各ＣＰＵ２２は、図２９のβｊ／αｊの復元・計算・送信処理を実行する。即ち、ステップ１３２（図３０も参照）で、予め指定されたｊに応じたＷａj（ｘi）とＷｂj（ｘi）（i=1,…,k）を集め、ステップ１３４（図３０も参照）で、１サ−バ当たりαｊとβｊを１つずつ復元する。【０１０５】
ステップ１３６（図３０も参照）で、商βｊ／αｊを計算し、ステップ１３８（図３０も参照）で、Ｗａｂ’（ｘｊ）とβｊ／αｊを復元装置１６に送信する。
ｎ＝４、ｋ＝３の場合、上記処理により、復元装置１６には、図３０に示す各データが送信されている。【０１０６】
復元者の復元装置１６のＣＰＵ２２は、図３１の除算結果取得処理を実行する。即ち、ステップ１４２（図３２も参照）で、ｋ個のＷａｂ’（ｘｊ）からβb／αaを復元し、ステップ１４４（図３２も参照）で、βｊ／αｊ（ｊ＝１,…,ｋ）からβ／αを合成する。ステップ１４６（図３２も参照）で、βb／αaをβ／αで割ってｂ／ａを得る。【０１０７】
以上より、秘匿除算も秘匿乗算と非常に似た処理で実現できることがわかる。よって、分散は請求項１で表現される。請求項２も同一であるが、具体的には「前記復元した第１の部分乱数と第２の部分乱数を合成する」仕方が異なる。すなわち、秘匿乗算ではαｊとβｊからαｊβｊを合成するが、秘匿除算ではβｊ／αｊを合成する。請求項３も同一であるが、具体的な行う所定の演算が異なる。請求項４も同一であるが、具体的には合成する乱数が異なる。【０１０８】
ただし、上記において各サーバはステップ１３６においてβｊ／αｊを計算し、ステップ１３８で復元装置に送ったが、ステップ１３６でαｊ／βｊを計算し、ステップ１３８でそれを復元装置に送り、復元装置はステップ１４４でαｊ／βｊからα／βを合成し、ステップ１４６でβb／αaにα／βをかけてb/aを得るようにすることもできる。【０１０９】
（秘匿除算２（繰り返し））
次に、秘匿除算２（繰り返し）を説明する。秘匿除算２（繰り返し）では、秘密情報ｃによる秘匿除算を連続させる。この場合、第１の実施の形態の秘匿乗算２の［乗算］と［復元］において、以下の変更を行うことにより実行できる。【０１１０】
［分散］
秘匿除算２（繰り返し）における分散は、秘匿乗算２の分散処理（図３、図５、図１４）と同様であるので、その説明を省略する。
［除算］
各サ−バ１４ｘ１〜１４ｘｎのＣＰＵ２２（Ａ）は、前述した図２３（Ａ）に示す除算処理を実行して、Ｗａｂ’（ｘｉ）（図２３（Ｂ））を計算する。【０１１１】
また、あるサ−バ、例えば、第１のサ−バ１４ｘ１のＣＰＵ２２は、前述した図１６に示すγｃの復元・分散処理を実行する。即ち、Ｗｃ’（ｘｊ）をｋ個集め（ステップ１０２）、γｃを復元し（ステップ１０４）、γｃを他のサ−バに送信する（ステップ１０６）（図１７も参照）。【０１１２】
サ−バｊ（ｊ＝１,…,ｎ）、即ち、例えば、第１のサ−バ１４ｘ１〜第ｎのサ−バ１４ｘｎの各ＣＰＵ２２は、図３３（Ａ）の除算処理を実行する。即ち、ステップ１４８で、γｃで自分がもつＷａｂ’（ｘｊ）を割ってＷａｂｃ’（ｘｊ）を生成する
Ｗａｂｃ’（ｘｊ）＝（β／αａγｃ）（ｂ＋ｂ０,１ｘｉ＋・・・＋ｂ０,ｋ−１ｘｉｋ−１）
ｎ＝４、ｋ＝３の場合の、第１のサーバ１４ｘ１〜第４のサーバ１４ｘ４のＷａｂｃ’（ｘ１）〜Ｗａｂｃ’（ｘ４）は、図３３（Ｂ）に示す通りである。【０１１３】
［復元］
復元に参加するサーバ、例えば、予め定められたサ−バ１４ｘ１〜１４ｘｋの各ＣＰＵ２２は、図３４のαｊβｊの復元・計算・送信処理を実行する。即ち、ステップ１５２（図３５も参照）で、指定されたｊに応じたＷａｊ（ｘｉ），Ｗｂｊ（ｘｉ），Ｗｃｊ（ｘｉ）を集め（ｉ＝１,…,ｋ）、ステップ１５４（図３５も参照）で、１サ−バ当たりαｊ,βｊ,γｊを１つずつ復元する。【０１１４】
ステップ１５６（図３５も参照）で、βｊ／αｊγｊを計算し、ステップ１５８で、Ｗａｂｃ’（ｘｊ）とβｊ／αｊγｊを復元装置１６に送信する。【０１１５】
以上の処理により、復元装置１６は、図３５に示す各データが送信されている。【０１１６】
復元装置１６のＣＰＵ２２は、図３６の乗算結果取得処理を実行する。即ち、ステップ１６２（図３７も参照）で、ｋ個のＷａｂｃ’（ｘｊ）から（β／αγ）(b/aｃ)を復元し、ステップ１６４（図３７も参照）で、β／αγを合成し、ステップ１６６（図３７も参照）で、（β／αγ）(ｂ/ａｃ)をβ／αγで割ってｂ／aｃを得る。
秘匿除算と乗算を組み合わせた連続の場合も同様の拡張が可能であることは明らかである。【０１１７】
（秘匿除算３（実数対応））
次に、パラメ−タが実数の場合の秘匿除算を説明する。加減算や乗算は上述したように、実数を整数表現し、素数ｐまたはｑに対応してパラメータを設定することで対応可能である。【０１１８】
上記秘匿除算１においてはｂ／ａが必ず割り切れる場合前記と同様で問題はない。しかし、ｂ／ａが割り切れない場合、実数対応にしなければ秘匿除算１では対応できない（素数ｑを法とする場合、必ず割り切れるため、実際の商と値が異なる）。よって、以下のようにする。秘匿乗算３で説明したように、a，b及びα，βも実数とし、その整数化した値が素数ｐ以下となるようにする。以下では小数点位置は固定として小数点位置に関する処理を省略する。【０１１９】
［分散］
秘密情報ａ（実数）をもつ第１のディーラ装置１２ＡのＣＰＵ２２は、図３に示す分散処理を実行する。即ち、第１のディーラ装置１２ＡのＣＰＵ２２は、ｋ個の乱数αｉを実数として生成し、その積α＝α１・α２・・・αｋを実数計算する（ステップ４２）。乱数αｉは、定められた小数点位置をもつ実数として表されるとする。【０１２０】
第１のディーラ装置１２ＡのＣＰＵ２２は、図３のステップ４４で、以下の分散値を計算する。この場合、aとαを、整数表現すればp以下の整数で表せる定められた小数点位置をもつ実数とし、αaを実数計算した後αaを整数表現し、素数qを法として以下の分散値を計算する。また、αi(i=1,…,k)もp以下の整数の形にし、pを法として以下を計算する。
Ｗａ’（ｘｉ）＝α（ａ＋ａ０,１ｘｉ＋・・・＋ａ０,ｋ−１ｘｉｋ−１）
Ｗａ１（ｘｉ）＝α１＋ａ１,１ｘｉ＋・・・＋ａ１,ｋ−１ｘｉｋ−１
：
Ｗａｋ（ｘｉ）＝αｋ＋ａｋ,１ｘｉ＋・・・＋ａｋ,ｋ−１ｘｉｋ−１
ただし、ａｈ,ｊ（ｈ＝０,・・・,ｋ、ｊ＝１,・・・,ｋ−１）は乱数（整数），ｘｉはサ−バＩＤ（ｉ＝１,…,ｎ）【０１２１】
図３のステップ４６で、第１のサ−バ１４ｘ１〜第ｎのサ−バ１４ｘｎに送信する。【０１２２】
秘密情報ｂ（実数）をもつオ−ナＢの第２のディーラ装置１２ＢのＣＰＵ２２は、図５のステップ５２で、ｋ個の乱数βｉを実数として生成し、その積β＝β１・β２・・・βｋを実数計算する。βiは、定められた小数点位置をもつ実数として表されるとする。
ステップ５４で、以下の分散値を計算する。この場合、ｂとβを、整数表現すればp以下の整数で表せる定められた小数点位置をもつ実数とし、βｂを実数計算した後、βｂを整数表現し、素数qを法として以下の分散値を計算する。また、βi(i=1,…,k)もp以下の整数の形にし、pを法として以下を計算する。
Ｗｂ’（ｘｉ）＝β（ｂ＋ｂ０,１ｘｉ＋・・・＋ｂ０,ｋ−１ｘｉｋ−１）
Ｗｂ１（ｘｉ）＝β１＋ｂ１,１ｘｉ＋・・・＋ｂ１,ｋ−１ｘｉｋ−１
：
Ｗｂｋ（ｘｉ）＝βｋ＋ｂｋ,１ｘｉ＋・・・＋ｂｋ,ｋ−１ｘｉｋ−１
ただし、ｂｈ,ｊ（ｈ＝０,・・・,ｋ、ｊ＝１,・・・,ｋ−１）は乱数，ｘｉはサ−バＩＤ（ｉ＝１,…,ｎ）
ステップ５６で、第１のサ−バ１４ｘ１〜第ｎのサ−バ１４ｘｎに送信する。【０１２３】
［復元］
復元に参加するサーバ、例えば、予め定められた第１のサ−バ１４ｘ１〜第ｋのサ−バ１４ｘｋの各ＣＰＵ２２は、図３８のβｊ／αｊの復元・送信処理を実行する。即ち、ステップ１７２（図３９も参照）で、指定されたｊに応じたＷａｊ（ｘｊ）とＷｂｊ（ｘｊ）を集め、ステップ１７４（図３９も参照）で、αｊとβｊを素数ｑを法として１つずつ復元する。ステップ１７６（図３９も参照）で、実数化したαjとβjを用いてβｊ／αｊを素数ｑを実数演算し、ステップ１７８（図３９も参照）で、計算したβｊ／αｊを復元装置１６に送信する。【０１２４】
復元装置１６のＣＰＵ２２は、図４０のβ／αの計算・送信処理を実行する。即ち、ステップ１８２で、βｊ／αｊ（ｊ＝１,…,ｋ）を、実数演算で掛けてβ／αを計算する。【０１２５】
第１のサ−バｘ１のＣＰＵ２２は、図４１（Ａ）のステップ１９２（図４１（Ｂ）も参照）で、Ｗａ’（ｘｉ）をｋ個集め、αａを素数ｑを法として復元する。ステップ９４で、Ｗｂ’（ｘｉ）をｋ個集めβｂを素数ｑを法として復元する。ステップ１９６で、実数としてβb/αaを計算し、ステップ１９８で、βb/αaを復元装置１６に送信する。【０１２６】
復元装置１６は、図４０のステップ１８６で、βb/αaを受信し、ステップ１８８で、βｂ／αａをβ/αで割ってｂ／ａを得る。【０１２７】
秘匿除算３（実数対応）の特徴は、以下の通りである。秘匿乗算１や秘匿除算１では秘密情報a（p以下の整数）に作用させる乱数αは法演算を行うq（p2より大きな素数）以下の整数であり、その乗算結果はqで法演算されるため秘匿化秘密情報であるαaは実際の値と異なる。しかしこれによって、秘匿化秘密情報αaは乱数化され安全になる。その後、乗算ではαβabが計算されるが、この値も実際の値と異なる。乱数の削除時にはαβabをαjβjで割っていくが、αjβjの値も法演算されるため実際の値と異なる。しかし、αβabをαjβjで割る演算もqを法として行われるため、正しくαβが除去されその結果であるabは正しく復元される。よって、qを法とする演算上でなければ上記秘匿乗算及び秘匿除算は正しく実行されない。よって、秘匿乗算１及び秘匿除算１では最後までqを法とする演算が行われる。しかし除算の場合、前述したようにqを法とする除算b/aはbに1/aをかける演算となるが、1/aが実際の値と異なるため、bがaの倍数の場合しか正しい実数上のb/aとならない。また、分散値を復元したαaとβbを用いて直接βb/αaを計算しても、復元されるβbとαaは実際の値と異なるため、正しいb/aとならない。ここで、乱数αをaと同じp以下の値とするとαaは必ずq以下の値となるため、実際の値となる。しかし、この場合素因数分解するとαaを構成するαとaが絞られ安全ではない。よって一般に、p以下の２つの値の合成値より大きなqを法として秘密分散することはない（通常はどちらかまたは両方がq以下の整数）。そこで、実数演算と組み合わせることにより、αとaを絞れないようにしている。この特徴は、請求項１５に示される。
秘匿乗算３は秘匿除算３が行われる際、同じ分散値を用いて乗算にも対応できるようにしたものである。【０１２８】
また、実数化されたｃとの乗算を連続させる場合は、次のようにする。即ち、［復元］の図３８のステップ１７２と１７４との間に、Ｗｃｈ（ｘｉ）からγｊを復元する処理を加え、図３８のステップ１７６、ステップ１７８では、βｊ／αｊγｊを計算かつ送信する。図４０のステップ１８２、ステップ１８４では、復元装置１６のＣＰＵ２２はβ／αγを計算してサ−バｘｄに送信し、図４１のステップ１９４とステップ１９６との間に、Ｗｃ’（ｘｉ）からγｃを復元する処理を追加し、図４１のステップ１９６で、第１のサ−バ１４ｘ１のＣＰＵ２２は、αａとβｂとγｃを実数としてβb／(αaγc)を計算し、復元装置１６に送信する。端末装置１６のＣＰＵ２２は、図４０のステップ１８８で、復元装置１６はβb／(αaγc)をβ／αγで割ってｂ／ａｃを得る。ただし、ｃ及びそれに関連する値もａ,ｂと同様の実数として、整数化して分散されているとする。さらに、秘匿除算２も実数の連続除算も同様に可能であることは明らかである。【０１２９】
以上より、秘匿除算も秘匿乗算と同様の処理で基本演算及び繰り返し演算が行え、実数に対しても全て対応できることがわかる。
上記において、［復元］におけるサ−バｘｄは秘密情報ａ,ｂ及び演算結果ｂ／ａに関する情報は得られないので、どのサ−バがなってもよい。【０１３０】
＜第３の実施の形態＞
次に、演算の連続の例として乗算と加算を連続させる積和演算ａｂ＋ｃについて示す。演算の基本は四則演算であり、加算と減算は代替可能で、第１の実施の形態及び第２の実施の形態より乗算と除算は容易に代替可能であるので、積和演算ができれば全ての演算の組合せに対応できることが言える。ａ＝ｄｅ＋ｆとすれば（ｄｅ＋ｆ）ｂ＋ｃとなり、ｆ＝０とすればｄｅｂ＋ｃとなる。また、ｃ＝ｄｅ＋ｆとすればａｂ＋ｄｅ＋ｆとなり、種々の演算が可能である。ここでは、第１のディーラ装置１２Ａが持つ秘密情報ａと第２のディーラ装置１２Ｂが持つ秘密情報ｂと第３のディーラ装置１２Ｃが持つ秘密情報ｃを用いてａｂ＋ｃを計算する場合を考える。ただし、今回は［積和］において復元装置１６が秘匿演算に協力するが、復元装置１６は第２の実施の形態の第１のサ−バ１４ｘ１のように秘密情報や途中結果について何の情報も得られない。【０１３１】
（秘匿積和１（基本形））
まず、秘匿積和１（基本形）について説明する。秘匿積和１（基本形）は、分散、積和、及び復元により実行される。
［分散］
オ−ナＡ,Ｂ,Ｃのそれぞれは第１のディーラ装置１２Ａ〜第３のディーラ装置１２Ｃを用いて、秘密情報ａ,ｂ,ｃに対して独立に以下の分散値を計算し、ｎ台のサ−バに分散保管する（ｉ＝１,…,ｎ）（図３、図５、図１４）。
Ｗａ’（ｘｉ）＝α（ａ＋ａ０,１ｘｉ＋・・・＋ａ０,ｋ−１ｘｉｋ−１）
Ｗｂ’（ｘｉ）＝β（ｂ＋ｂ０,１ｘｉ＋・・・＋ｂ０,ｋ−１ｘｉｋ−１）
Ｗｃ’（ｘｉ）＝γ（ｃ＋ｃ０,１ｘｉ＋・・・＋ｃ０,ｋ−１ｘｉｋ−１）
Ｗａ１（ｘｉ）＝α１＋ａ１,１ｘｉ＋・・・＋ａ１,ｋ−１ｘｉｋ−１
：
Ｗａｋ（ｘｉ）＝αｋ＋ａｋ,１ｘｉ＋・・・＋ａｋ,ｋ−１ｘｉｋ−１
Ｗｂ１（ｘｉ）＝β１＋ｂ１,１ｘｉ＋・・・＋ｂ１,ｋ−１ｘｉｋ−１
：
Ｗｂｋ（ｘｉ）＝βｋ＋ｂｋ,１ｘｉ＋・・・＋ｂｋ,ｋ−１ｘｉｋ−１
Ｗｃ１（ｘｉ）＝γ１＋ｃ１,１ｘｉ＋・・・＋ｃ１,ｋ−１ｘｉｋ−１
：
Ｗｃｋ（ｘｉ）＝γｋ＋ｃｋ,１ｘｉ＋・・・＋ｃｋ,ｋ−１ｘｉｋ−１【０１３２】
［積和］及び［復元］
例えば、第１のサ−バ１４ｘ１は、図７のαaの復元・分散処理を実行する。第１のサ−バ１４ｘ１〜第ｋのサ−バ１４ｘｋは、図９（Ａ）の乗算処理を実行する。よって、第１のサ−バ１４ｘ１〜第ｋのサ−バ１４ｘｋは以下のＷａｂ’（ｘｊ）を得る（図９（Ｂ）参照）。
Ｗａｂ’（ｘｊ）＝αβａ（ｂ＋ａｂ０,１ｘｉ＋・・・＋ａｂ０,ｋ−１ｘｉｋ−１）【０１３３】
第１のサ−バ１４ｘ１〜第ｋのサ−バ１４ｘｋのＣＰＵ２２は、図４２の積和処理を実行する。即ち、ステップ２００で、指定されたｊに応じたＷａｊ（ｘｉ），Ｗｂｊ（ｘｉ），Ｗｃｊ（ｘｉ）（ｉ＝１,…,ｋ）を集め、ステップ２０２で、αｊ，βｊ，γｊを１つずつ復元する。【０１３４】
ステップ２０４で、乱数μｊを生成し、αｊβｊ／μｊとγｊ／μｊを計算し、ステップ２０６で、αｊβｊ／μｊとγｊ／μｊを復元装置１６に送信する。【０１３５】
復元装置１６のＣＰＵ２２は、図４３の復元処理を実行する。即ち、ステップ２２２で、αｊβｊ／μｊとγｊ／μｊを受信し、ステップ２２４で、αｊβｊ／μｊとγｊ／μｊをかけてαβ／μとγ／μを計算し、ステップ２２６で、αβ／μとγ／μを各サ−バ、即ち、第１のサ−バ１４ｘ１〜第ｋのサ−バ１４ｘｋに送信する。【０１３６】
第１のサ−バ１４ｘ１〜第ｋのサ−バ１４ｘｋのＣＰＵ２２は、図４２のステップ２０８で、αβ／μとγ／μを受信し、ステップ２１０で、Ｗａｂ’（ｘｊ）をαβ／μで、Ｗｃ’（ｘｊ）をγ／μで割り、Ｗａｂ’（ｘｊ）＝μ（ａｂ＋ａｂ０,１ｘｊ＋・・・＋ａｂ０,ｋ−１ｘｊ^ｋ−１）とＷｃ’（ｘｊ）＝μ（ｃ＋ｃ０,１ｘｉ＋・・・＋ｃ０,ｋ−１ｘｉｋ−１）を計算する。【０１３７】
ステップ２１２で、Ｗａｂｃ’（ｘｊ）＝Ｗａｂ’（ｘｊ）＋Ｗｃ’（ｘｊ）＝μ{（ａｂ＋ｃ）＋ａｂｃ０,１ｘｉ＋・・・＋ａｂｃ０,ｋ−１ｘｉｋ−１}を計算し、ステップ２１４で、Ｗａｂｃ’（ｘｊ）を復元装置１６に送信し、ステップ２１６で、μｊを復元装置１６に送信する。【０１３８】
復元装置１６のＣＰＵ２２は、図４３のステップ２２８で、第１のサ−バ１４ｘ１〜第ｋのサ−バ１４ｘｋから、Ｗａｂｃ’（ｘｊ）を受信し、ステップ２３０で、μ（ａｂ＋ｃ）を復元する。【０１３９】
ステップ２３２で、第１のサ−バ１４ｘ１〜第ｋのサ−バ１４ｘｋから、μｊを受信し、ステップ２３４で、μ＝μ１・μ２…μｋを合成し、ステップ２３６で、μ（ａｂ＋ｃ）をμで割って、（ａｂ＋ｃ）を得る。【０１４０】
また、ここでは新たな乱数μjを用いたが、μjを生成せず図４２のステップ２０４においてαjβj/γjを計算して２０５においてそれを送信し、復元装置１６は図４３のステップ２２２においてそれを受信し、２２４においてαβ/γを合成して２２６で各サーバにその値を戻し、図４２のステップ２０８でそれを受信し、２１０でWab’(xi)をαβ/γで割る、またはWc(xi)にαβ/γをかけることにより、２つの分散値に係る乱数をμではなくαβまたはγに合わせることができる。【０１４１】
上記［積和］の図７のαβの復元・分散処理及び図９の乗算処理を実行せずに、以降ｂに関連する処理を省略すればａ＋ｃの和が計算できることがわかる。また、［積和］の図４２の積和処理でｃに関連する処理を行わなければａｂの積が計算できる。さらに、［積和］の図４２のステップ２１２で得られたＷａｂｃ’（ｘｊ）をＷａ’（ｘｉ）として処理を繰り返せば、（ａｂ＋ｃ）ｂ＋ｃの秘匿演算が、Ｗａｂｃ’（ｘｊ）をＷｃ’（ｘｉ）として処理を繰り返せばａｂ＋ａｂ＋ｃの秘匿演算が実現できることがわかる。【０１４２】
また、２回目の処理においてＷａｂｃ’（ｘｊ）をＷａ’（ｘｉ）、Ｗｂ’（ｘｊ）をＷｄ’（ｘｉ）、Ｗｃ’（ｘｊ）をＷｅ’（ｘｉ）とすれば（ａｂ＋ｃ）ｄ＋ｅが得られ、種々の演算が実現できることがわかる。さらに、秘匿積和１においてａ,ｃに関する処理を省略すると、Ｗｂ’（ｘｉ）にかかる乱数βをμに変更することができる。【０１４３】
μｊは使い捨てにすることもできるが、サ−バｊがμｊを秘密分散して全サ−バでその分散値を保存すれば、必要なときに使うこともできる。また、パラメ−タが実数であっても今までの実施例から演算の連続に対応できることは明らかである。【０１４４】
上記における特徴は請求項５に示されるようにオーナA,B,Cが独立に設定したα，β，γのような乱数をαj，βj，γjを用いて、または新たにμjなどを用いて変換し、次の秘匿演算に便利な形に変換することである。【０１４５】
以上、第1の実施の形態〜第３の実施の形態により秘匿計算によって四則演算が実現できることが示された。【０１４６】
＜第４の実施の形態＞
第１の実施の形態に示した秘匿乗算は秘密情報に乱数をかけることにより秘匿化して、それを一旦復元することにより閾値ｋを変えない秘匿演算を可能にしている。第１の実施の形態の問題点は、秘密情報が０である場合、秘匿化秘密情報を一旦復元すれば、その値が０となるので秘密情報が０であることがわかる点である（秘匿化に用いられる乱数は０以外のため）。
ただし、第２の実施の形態に示す秘匿除算の場合は一旦復元した秘匿化秘密情報が０の場合、除算できないことがわかるためこの性質は有効である。【０１４７】
（秘匿乗算４（０対応））
以下、秘匿乗算において秘密情報に０を含む場合の手法を以下に示す。
［分散］
秘密情報ａをもつオ−ナＡの第１のディーラ装置１２ＡのＣＰＵ２２は、図３の分散処理を実行し、ｋ個の乱数αｉを生成し、その積α＝α１・α２・・・αｋを計算する（ステップ４２）。【０１４８】
第１のディーラ装置１２ＡのＣＰＵ２２は、以下の分散値を計算し（ステップ４４）、ｎ個のサ−バに分散する（ステップ４６）。
Ｗａ（ｘｉ）＝ａ＋ａ０,１ｘｉ＋・・・＋ａ０,ｋ−１ｘｉｋ−１
Ｗａ’（ｘｉ）＝α（ａ＋ａ０,１（ｎ＋ｘｉ）＋・・・＋ａ０,ｋ−１（ｎ＋ｘｉ）ｋ−１）
Ｗａ１（ｘｉ）＝α１＋ａ１,１ｘｉ＋・・・＋ａ１,ｋ−１ｘｉｋ−１
：
Ｗａｋ（ｘｉ）＝αｋ＋ａｋ,１ｘｉ＋・・・＋ａｋ,ｋ−１ｘｉｋ−１
ただし、ａｈ,ｊ（ｈ＝０,・・・,ｋ、ｊ＝１,・・・,ｋ−１）は乱数，ｘｉはサ−バＩＤ（ｉ＝１,…,ｎ）【０１４９】
秘密情報ｂをもつオ−ナＢの第２のディーラ装置１２ＢのＣＰＵ２２は、図５の分散処理を実行し、ｋ個の乱数βｉを生成し、その積β＝β１・β２・・・βｋを計算する（ステップ５２）。【０１５０】
第２のディーラ装置１２ＢのＣＰＵ２２は、図５の分散処理を実行し、以下の分散値を計算し（ステップ５４）、ｎ個のサ−バに分散する（ステップ５６）。
Ｗｂ（ｘｉ）＝ｂ＋ｂ０,１ｘｉ＋・・・＋ｂ０,ｋ−１ｘｉｋ−１
Ｗｂ’（ｘｉ）＝β（ｂ＋ｂ０,１（ｎ＋ｘｉ）＋・・・＋ｂ０,ｋ−１（ｎ＋ｘｉ）ｋ−１）
Ｗｂ１（ｘｉ）＝β１＋ｂ１,１ｘｉ＋・・・＋ｂ１,ｋ−１ｘｉｋ−１
：
Ｗｂｋ（ｘｉ）＝βｋ＋ｂｋ,１ｘｉ＋・・・＋ｂｋ,ｋ−１ｘｉｋ−１
ただし、ｂｈ,ｊ（ｈ＝０,・・・,ｋ、ｊ＝１,・・・,ｋ−１）は乱数，ｘｉはサ−バＩＤ（ｉ＝１,…,ｎ）【０１５１】
［乗算］
第１のサ−バ１４ｘ１〜第ｎのサ−バ１４ｘｎの各ＣＰＵ２２は、図４４の乗算処理を実行する。即ち、ステップ２４２で、Ｗａｂ（ｘｉ）＝Ｗａ（ｘｉ）Ｗｂ（ｘｉ）とＷａｂ’（ｘｉ）＝Ｗａ’（ｘｉ）Ｗｂ’（ｘｉ）を計算する。
［復元］
復元に参加するサーバ、例えば、予め定められた第１のサ−バ１４ｘ１〜第ｋのサ−バ１４ｘｋの各ＣＰＵ２２は、図４５のαｊβｊの復元処理を実行する。即ち、ステップ２４４で、指定されたｊに応じたＷａｊ（ｘｉ）とＷｂｊ（ｘｉ）を集め、ステップ２４６で、αｊとβｊを１つずつ復元する。【０１５２】
ステップ２４８で、αｊβｊを計算し、ステップ２５０で、Ｗａｂ（ｘｊ）とＷａｂ’（ｘｊ）とαｊβｊを復元装置１６に送信する。【０１５３】
復元装置１６のＣＰＵ２２は、図４６の復元処理を実行する。即ち、ステップ２５２で、Ｗａｂ（ｘｊ）、Ｗａｂ’（ｘｊ）、αｊβｊを受信し、ステップ２５４で、全てのαｊβｊをかけてαβ＝α１・α２…αｋβ１・β２…βｋを計算し、Ｗａｂ’（ｘｊ）／αβを計算する。【０１５４】
復元装置１６のＣＰＵ２２は、ステップ２５６で、Ｗａｂ（ｘｊ）とＷａｂ’（ｘｊ）／αβから２ｋ−１個の分散値を用いてａｂを復元する。【０１５５】
この方式は文献［２］の方式を改良し、安全にしたものである。よって、［分散］において１つのサ−バが２つの分散値Ｗａ（ｘｉ）とＷｂ（ｘｉ）を持ち、１つの分散値が乱数αまたはβによって秘匿化されるという点は同じである。文献［２］との違いは請求項１に示すように［分散］において各オ−ナがｋ個の乱数を生成し、その合成値α、βを秘密情報にかけて分散している点である。文献［２］では乱数αとβをαiやβiから合成せず、直接分散しているためαとβが直接復元者に知られる。よって、請求項１は従来法にない特徴となる。【０１５６】
文献［２］では復元者がαとβを知った後で、ｋ／２台のサ−バを盗聴すればａとｂに関するｋ個の分散値が集められるため、秘密情報であるａ,ｂが漏洩する。また、文献［２］ではこの復元者による攻撃に対応するために、各サ−バが乱数を生成して交換し、合成乱数を生成してそれを分散値にかけて分散値を更新することを提案しているが、この乱数は攻撃者が１台のサ−バを盗聴しているだけでその過程が全て知られるので漏洩する。よって、文献［２］の手法は安全ではない。それに対して、秘匿乗算４は請求項２に示すようにｋ台のサ−バが各々異なる秘密情報を１つずつ復元して、その合成値を復元者に示すため１台のサ−バが安全（盗聴不能）であれば、攻撃者はαとβを直接知ることはできないため、攻撃者は秘密情報を得ることができず安全である。よって、請求項２も従来法にない特徴となる。【０１５７】
（秘匿乗算５（繰り返し））
上記秘匿乗算４は分散値同士の乗算となっているため次数変化が生じている。次に、連続演算に対応するために次数変換を行う場合を考える。
［分散］
秘密情報ａを第１のディーラ装置１２ＡのＣＰＵ２２は、図４７に示す分散処理を実行する。即ち、ステップ２６２で、ｋ個の０以外の乱数αｉ、ｒｉ（以降もαｉ、ｒｉは０以外）を生成し、その積α＝α１・α２・・・αｋ、ｒ＝ｒ１・ｒ２・・・ｒｋを計算する。【０１５８】
ステップ２６４で、以下の分散値を計算する。なお、ｎ＋ｘｉに対する分散値はサ−バ１４ｘｉのサ−バに送られる。よって、各サ−バ１４ｘｉは、ｘｉとｎ＋ｘｉに対する分散値をもつ。
Ｗａ（ｘｉ）＝r（ａ＋ａ０,１ｘｉ＋・・・＋ａ０,ｋ−１ｘｉｋ−１）
Ｗａ’（ｘｉ）＝rα（ａ＋ａ０,１（ｎ＋ｘｉ）＋・・・＋ａ０,ｋ−１（ｎ＋ｘｉ）ｋ−１）
Ｗａ１（ｘｉ）＝α１＋ａ１,１ｘｉ＋・・・＋ａ１,ｋ−１ｘｉｋ−１
：
Ｗａｋ（ｘｉ）＝αｋ＋ａｋ,１ｘｉ＋・・・＋ａｋ,ｋ−１ｘｉｋ−１
Ｗr１（ｘｉ）＝r１＋ａｋ＋１,１ｘｉ＋・・・＋ａｋ＋１,ｋ−１ｘｉｋ−１
：
Ｗrｋ（ｘｉ）＝rｋ＋ａ２ｋ,１ｘｉ＋・・・＋ａ２ｋ,ｋ−１ｘｉｋ−１
ただし、ａｈ,ｊ（ｈ＝０,・・・,ｋ、ｊ＝１,・・・,ｋ−１）は乱数，ｘｉはサ−バＩＤ（ｉ＝１,…,ｎ）である。
ステップ２６６で、分散値を第１のサ−バ１４ｘ１〜第ｎのサ−バ１４ｘｎに送信する。【０１５９】
秘密情報ｂをもつオ−ナＢの第２のディーラ装置１２ＢのＣＰＵ２２は、図４８の分散処理を実行する。即ち、ステップ２７２で、ｋ個の０以外の乱数βｉ、ｑｉ（以降もβｉ、ｑｉは０以外）を生成し、その積β＝β１・β２・・・βｋ、ｑ＝ｑ１・ｑ２・・・ｑｋ、を計算する。【０１６０】
ステップ２７４で、以下の分散値を計算する。
Ｗｂ（ｘｉ）＝ｑ（ｂ＋ｂ０,１ｘｉ＋・・・＋ｂ０,ｋ−１ｘｉｋ−１）
Ｗｂ’（ｘｉ）＝ｑβ（ｂ＋ｂ０,１（ｎ＋ｘｉ）＋・・・＋ｂ０,ｋ−１（ｎ＋ｘｉ）ｋ−１）
Ｗｂ１（ｘｉ）＝β１＋ｂ１,１ｘｉ＋・・・＋ｂ１,ｋ−１ｘｉｋ−１
：
Ｗｂｋ（ｘｉ）＝βｋ＋ｂｋ,１ｘｉ＋・・・＋ｂｋ,ｋ−１ｘｉｋ−１
Ｗｑ１（ｘｉ）＝ｑ１＋ｂｋ＋１,１ｘｉ＋・・・＋ｂｋ＋１,ｋ−１ｘｉｋ−１
：
Ｗｑｋ（ｘｉ）＝ｑｋ＋ｂ２ｋ,１ｘｉ＋・・・＋ｂ２ｋ,ｋ−１ｘｉｋ−１
ただし、ｂｈ,ｊ（ｈ＝０,・・・,ｋ、ｊ＝１,・・・,ｋ−１）は乱数，ｘｉはサ−バＩＤ（ｉ＝１,…,ｎ）である。【０１６１】
ステップ２７６で、分散値を第１のサ−バ１４ｘ１〜第ｎのサ−バ１４ｘｎに分散する。【０１６２】
［乗算］
第１のサ−バ１４ｘ１〜第ｎのサ−バ１４ｘｎの各ＣＰＵ２２は、図４９の乗算処理を実行する。即ち、ステップ２７８で、Ｗａｂ（ｘｉ）＝Ｗａ（ｘｉ）Ｗｂ（ｘｉ）とＷａｂ’（ｘｉ）＝Ｗａ’（ｘｉ）Ｗｂ’（ｘｉ）を計算する（ｉ＝１,…,ｎ）。【０１６３】
［次数変換］
第１のサ−バ１４ｘ１〜第ｋのサ−バ１４ｘｋの各ＣＰＵ２２は、図５０の次数変換処理を実行する。即ち、ステップ２８２で、指定されたｊに応じたＷａｊ（ｘｉ）とＷｂｊ（ｘｉ）を集め（ｉ＝１,…,ｋ）、ステップ２８４で、αｊとβｊを１つずつ復元し、ステップ２８６で、αｊβｊを計算し、ステップ２８８で、αｊβｊを復元装置１６に送信する。【０１６４】
復元装置１６のＣＰＵ２２は、図５１のαβの計算送信処理を実行する。即ち、ステップ３２２で、第１のサ−バ１４ｘ１〜第ｎのサ−バ１４ｘｎからαｊβｊを受信し、ステップ３２４で、全てのαｊβｊをかけてαβを計算し、ステップ３２６で、αβを第１のサ−バ１４ｘ１〜第ｎのサ−バ１４ｘｎに送信する。【０１６５】
第１のサ−バ１４ｘ１〜第ｋのサ−バ１４ｘｋの各ＣＰＵ２２は、図５０ステップ２９０で、αβを受信し、ステップ２９２で、αβでＷａｂ’（ｘｊ）を割り、Ｗａｂ（ｘｊ＋ｎ）＝Ｗａｂ’（ｘｊ）／αβを計算する。【０１６６】
式（８）に示すRｊを秘密に計算するために、以下を計算する。まず、ステップ２９４で、Ｗａｂ（ｘｊ）とＷａｂ（ｘｊ＋ｎ）にａｘｊ,ｊとａｘｊ＋ｎ,ｊを乗算したRｊ,ｊ＝ａｘｊ,ｊＷａｂ（ｘｊ）＋ａｎ＋ｘｊ,ｊＷａｂ（ｎ＋ｘｊ）と、ａｘｊ,ｊ＋ｎとａｎ＋ｘｊ,ｊ＋ｎを乗算したRｊ,ｊ＋ｎ＝ａｘｊ,ｊ＋ｎＷａｂ（ｘｊ）＋ａｎ＋ｘｊ,ｊ＋ｎＷａｂ（ｎ＋ｘｊ）を計算する。【０１６７】
ここで、Rｉ,ｊにおけるｉは式（７）の縦方向の最初の位置を表し、ｊは横方向の位置を表す。よって、ｉが１からｎまでの縦方向の和がＲｊ＝Σ（Rｊ,ｊ＋Rｊ,ｊ＋ｎ）なる。【０１６８】
ステップ２９６で、乱数r１ｊとr２ｊを生成し、R’ｊ,ｊ＝R ｊ,ｊ＋r１ｊとR’ｊ,ｊ＋ｎ＝R ｊ,ｊ＋ｎ＋r２,ｊを計算し、ステップ２９８で、R’ｊ,ｊと R’ｊ,ｊ＋ｎとを予め定められた順番の次のサ−バ１４ｘ（ｊ＋１）に送信する。【０１６９】
ステップ３００で、前のサーバ１４ｘ（ｊ−１）から送信されたｈ番目（ｈ＝１,…,ｎ−１）の２つの値、即ち、R’ｊ−ｈ,ｊ−ｈとR’ｊ−ｈ,ｊ＋ｎ−ｈを受信し、ステップ３０２で、ｈ番目（ｈ＝１,…,ｎ−１）の２つの値R’ｊ−ｈ,ｊ−ｈとR’ｊ−ｈ,ｊ＋ｎ−ｈに、R’ｊ,ｊ−ｈ＝ａｘｊ,ｊ−ｈＷａｂ（ｘｊ）＋ａｎ＋ｘｊ,ｊ−ｈＷａｂ（ｎ＋ｘｊ）＋r１ｊとRｊ＋ｎ,ｊ−ｈ＝ａｘｊ,ｊ＋ｎ−ｈＷａｂ（ｘｊ）＋ａｎ＋ｘｊ,ｊ＋ｎ−ｈＷａｂ（ｎ＋ｘｊ）＋r２ｊを足して、R’ｊ,ｊとR’ｊ,ｊ＋ｎを計算し、ステップ３０４で、R’ｊ,ｊとR’ｊ,ｊ＋ｎを次の予め定められた順番のサ−バ１４ｘ（ｉ＋１）に送信する。【０１７０】
ステップ３０６で、全てのサ−バを回ってきた２つの値R’ｊ,ｊとR’ｊ,ｊ＋ｎを受信し、ステップ３０８で、R’ｊ,ｊとR’ｊ,ｊ＋ｎからをr１ｊとr２ｊを各々引いて、ステップ３１０で、R’ｊ,ｊとR’ｊ,ｊ＋ｎを予め定められた順番の次のサ−バ１４ｘ（ｉ＋１）に送信する。【０１７１】
ステップ３１２で、前のサ−バ１４ｘ（ｊ−１）から送られてきた２つの値R’ｊ−ｈ,ｊ−ｈとR’ｊ−ｈ,ｊ＋ｎ−ｈを受信し、ステップ３１４で、Ｒ’ｊ−ｈ,ｊ−ｈとR’ｊ−ｈ,ｊ＋ｎ−ｈからr１ｊとr２ｊを各々引いて、ステップ３１６で、R’ｊ−ｈ,ｊ−ｈとR’ｊ−ｈ,ｊ＋ｎ−ｈを次のサ−バ１４ｘ（ｉ＋１）に送信する。【０１７２】
ステップ３１８で、全てのサ−バを回ってきた２つの値R’ｊ,ｊとR’ｊ,ｊ＋ｎを受信し、ステップ３２０で、R’ｊ,ｊとR’ｊ,ｊ＋ｎのR’ｊ,ｊ＋ｎにαβをかけて、各々をRｊ,Rｊ＋ｎとして保存する。【０１７３】
［復元］
第１のサ−バ１４ｘ１〜第ｋのサ−バ１４ｘｋの各ＣＰＵ２２は、図５２のｒｊｇｊの復元・送信処理を実行する。即ち、ステップ３３２で、指定されたｊに応じたＷrｊ（ｘｉ）とＷｑｊ（ｘｉ）を集め（ｉ＝１,…,ｋ）、ステップ３３４で、１サ−バ当たりrｊとｑｊを１つずつ復元する。【０１７４】
ステップ３３６で、積rｊｑｊを計算し、ステップ３３８で、Rｊとrｊｑｊを復元装置１６に送信する。【０１７５】
復元装置１６のＣＰＵ２２は、図５３のステップ３４２で、Rｊとrｊｑｊを受信し、ステップ３４４で、全てのrｊｑｊをかけてrｑを計算し、ステップ３４６で、Rｊをrｑで割ってＷａｂ（ｘｊ）＝Rｊ／rｑを計算する。【０１７６】
ステップ３４８で、Ｗａｂ（ｘｊ）からｋ−１個を用いてａｂを復元する。【０１７７】
本発明の［分散］における特徴は、秘密情報ａ,ｂを最後まで秘匿するために、ａ,ｂに最後まで秘匿する乱数rとｑをかけていることである（請求項１に含む）。これによって、Ｗａｂ（ｘｉ）とＷａｂ’（ｎ＋ｘｉ）は共通の乱数rｑが常に係り、［次数変換］の図５１のステップ３２４においてαβは復元装置１６で計算されて知られるが、rｑは最後まで復元装置１６に知られない。よって、中間結果であるRｊ,Rｊ＋ｎを攻撃者または復元者が得ても中間結果であるａｂは漏洩しない。ただし、従来と同様の安全性でよい場合、すなわち復元者による中間値取得を許可する場合、ｒ,ｑを用いる必要はなく、[分散]を秘匿乗算１と同様にすることができる。この場合、図５０のステップ２９２でＷａｂ’（ｘｊ）をαβで割る代わりにＷａｂ（ｘｊ）にαβをかけることにより、ｒ,ｑの代わりにα,βを用いることができる。【０１７８】
また、［次数変換］における第１の特徴は、１つのサ−バが形の異なる２つの分散値を持つため、［次数変換］の図５０のステップ２８２〜ステップ２８８、及び図５１のステップ３２２〜ステップ３２４において乱数変換を行い、分散値にかかる乱数を同じにしている点である（請求項５に含む）。ここではαβを削除するが、rｑは常にかかっている。また、前述のように従来と同じ安全性でよい場合にはｒ＝ｑ＝１とすることができる。この特徴は請求項６に示される。【０１７９】
［次数変換］の図５０のステップ２９２において、サ−バはＷａｂ’（ｘｉ）をαβで割ったが、Ｗａｂ（ｘｉ）にαβをかけて、Ｗａｂ（ｘｉ）＝αβＷａｂ（ｘｉ），Ｗａｂ（ｎ＋ｘｉ）＝Ｗａｂ’（ｘｉ）としてもよい。また、［次数変換］の図５０のステップ３２０において、各サ−バはαβをかけたが、別の乱数をかけてもよい。【０１８０】
また、第２の特徴は、rｑは最後には復元者に知られる（rｑは知られるが、rとｑは個別に知られないので秘密情報ａとｂは漏洩しない）ので、分散値Rｉを保存していれば、Ｗａｂ（ｘｉ）とＷａｂ’（ｎ＋ｘｉ）から乱数rｑを除いた値を復元装置１６に知られる可能性がある。よって、Ｗａｂ（ｘｉ）とＷａｂ’（ｘｉ＋ｎ）を秘匿するために、Ｗａｂ（ｘｉ）に乱数r１ｊを、Ｗａｂ（ｘｉ＋ｎ）に乱数r２ｊを足しこみ、元のＷａｂ（ｘｉ）及びＷａｂ（ｘｉ＋ｎ）を分からないようにして、サ−バを回していることである。これによって、［次数変換］の図５０のステップ３０６で得られる全てのサ−バを回ってきた値R’ｊ,ｊにはΣr１ｊが、R’ｊ,ｊ＋ｎにはΣr２ｊが足されているので、［次数変換］の図５０のステップ３１２〜ステップ３１６のサ−バ巡回でΣr１ｊとΣr２ｊを除去し、通常のRｉを得ることができる。【０１８１】
また、加えた乱数Σr１ｊ=0、Σr2ｊ=0となるようにしておけば2回目のサーバ巡回は不要である。さらに、サーバ巡回させずに復元者に送信して、復元者が加算を行いその結果を各サーバに送り返すようにしてもよい。【０１８２】
さらに、Ｗａｂ（ｘｉ）とＷａｂ’（ｘｉ＋ｎ）を秘匿するために、Ｗａｂ（ｘｉ）に乱数r１ｊを、Ｗａｂ（ｘｉ＋ｎ）に乱数r２ｊを足しこみ、元のＷａｂ（ｘｉ）及びＷａｂ（ｘｉ＋ｎ）を秘匿化して、それを解除するためにサ−バを回しているが、秘密情報を秘匿するための乱数r１ｊ及びr２ｊを各々秘密分散して各サーバに配布し、各サーバは送られた分散値を加算して、Σr１ｊ及びΣr２ｊを計算し、最終結果のR’ｊ,ｊやR’ｊ,ｊ＋ｎから引くことによってもr１ｊ及びr２ｊを削除することができる。この特徴は請求項１６に示される。【０１８３】
最後に、［次数変換］の図５０のステップ３１８、３２０でRｊ（ｊ＝ｎ＋１〜２ｎ）に相当するR’ｊ,ｊ＋ｎにαβをかけて、［分散］に示す形に戻している。これによって、攻撃者がｋ−１個のサ−バを盗聴していたとしても、２ｋ−２個のＷｉしか得られず、途中結果であるａ・ｂが漏えいすることはない。【０１８４】
また、今までは秘匿乗算のみ説明したが、秘匿乗算４のように分散が行われている場合、加減算はWa(xi)やWb(xi)に対してはそのまま加算すればよく、Wa’(xi)やWb’(xi)に対しては積和演算のときに説明したように分散値にかかる乱数を合わせて加算を行えばよい。また、除算は第２の実施の形態で説明したようにWa’(xi)やWb’(xi)を用いて除算を行う。この場合、Wa’(xi)を復元してαaを復元したとき、αa=0ならば０で割ることになるので除算を中止する。また、αaが０でないときWb’(xi)に対してはWb’(xi)/αaを計算した後、各サーバがαjとβjを復元してαj/βjを復元装置に送ってα/βが得られ、それをWb’(xi)/αaにかければ定数項にb/aをもつ分散値が出来上がる。そのとき、Wb(xi)もαaで割ってα/βを書ければ定数項にb/aを持ち、乱数として1/βをもつ分散値が得られる。これらの場合、復元は乱数がかかっていない分散値を用いて行えば、最終的な乱数除去は不要にすることができる。以上によって、本実施の形態によっても秘匿計算により四則演算が実現できることがわかる。【０１８５】
＜第５の実施の形態＞
まず、ｎ台のサ−バ１４ｘ１〜１４ｘｎに対して閾値ｋを変えずに分散値を更新する場合を示す。第１の実施の形態〜第４の実施の形態に示すように秘密情報ａに乱数αがかけられて分散されている場合を考える。今まで、乱数がかかった分散値の更新法は知られていない。【０１８６】
（秘匿更新１（乱数付き分散値更新））
第１のサ−バ１４ｘ１〜第ｋのサ−バ１４ｘｋの内から、復元処理を行うサーバ、例えば、第ｋのサ−バ１４ｘｋがランダムに予め１台選ばれている。【０１８７】
第ｋのサ−バ１４ｘｋ以外のｋ−１台の第１のサ−バ１４ｘ１〜第（ｋ−１）のサ−バ１４ｘ（ｋ−１）の各ＣＰＵ２２は、図５４のＵｉの計算・送信処理を実行する。即ち、サーバ１４ｘiは現在の分散値として以下のＷａ’（ｘｊ）をもつとする。【０１８８】
Ｗａ’（ｘｉ）＝α（ａ＋ａ１ｘｉ＋ａ２ｘｉ２＋・・・＋ａｋ−１ｘｉｋ−１）（ｉ＝１,・・・,ｋ−１）【０１８９】
ステップ３５６で、以下の新たな分散値として乱数Ｗａ’ｉを生成する。ａｊ’（ｊ＝１,…,ｋ−１）は（４）で多項式を解く事によって得られる乱数である。
Ｗａ’ｉ＝α（ａ＋ａ１’ｘｉ＋ａ２’ｘｉ２＋・・・＋ａｋ−１’ｘｉｋ−１）【０１９０】
ステップ３５８で、自分が持つ前の分散値Ｗａ’（ｘｉ）と新たに生成したＷａ’ｉとの差Ｕｉ’を次のように計算する。
Ｕｉ’＝Ｗａ’（ｘｉ）−Ｗａ’ｉ＝α{（ａ１−ａ１’）ｘｉ＋（ａ２−ａ２’）ｘｉ２＋・・・＋（ａｋ−１−ａｋ−１’）ｘｉｋ−１}【０１９１】
ステップ３６０で、差Ｕｉ’を第ｋのサ−バ１４ｘｋに送信する。【０１９２】
第ｋのサ−バ１４ｘｋは、図５５のＷｊ’の計算・送信処理を実行する。即ち、ステップ３６２で、差Ｕｊを受信し、ステップ３６４で、ｋ−１個の多項式を解き、α（ａ１−ａ１’）,α（ａ２−ａ２’）,・・・,α（ａｋ−１−ａｋ−１’）を求め、ステップ３６６で、残りのｎ−ｋ台のサ−バに対する以下の差分値を求める。
Ｗｊ’＝α{（ａ１−ａ１’）ｘｊ＋（ａ２−ａ２’）ｘｊ２＋・・・＋（ａｋ−１−ａｋ−１’）ｘｊｋ−１} （ただし、ｊ＝ｋ,・・・,ｎ）【０１９３】
ステップ３６８で、差分値Ｗｊ’を第（ｋ＋１）のサ−バ１４ｘ（ｋ＋１）〜第ｎのサ−バ１４ｘｎに送信する。【０１９４】
第（ｋ＋１）のサ−バ１４ｘ（ｋ＋１）〜第ｎのサ−バ１４ｎは、図５６の新たな分散値の記憶処理を実行する。即ち、ステップ３７０で、Ｗｊ’を受信し、ステップ３７２で、Ｗｊ’と前に持っていた分散値と足して新たな分散値とする。【０１９５】
以上の特徴は、乱数がかかった分散値に対して乱数を変えることなく、新たな乱数をそのまま新しい係数を持つ多項式からなる新たな分散値として更新できることである。この特徴は請求項１０に示される。【０１９６】
文献［３］に示す従来法は乱数αがかかっていない通常の分散値に対する更新法であるが、それに対しても以下の違いがある。文献［３］では図５６のステップ３７０の処理がなく、第１のサ−バ１４ｘ１〜第（ｋ−１）のサ−バ１４ｘ（ｋ−１）は残りの第（ｋ＋１）のサ−バ１４ｘ（ｋ＋１）〜第ｎのサ−バ１４ｘｎに差分値を送り、図５５のステップ３６４及びステップ３６６の処理に対応する処理を第（ｋ＋１）のサ−バ１４ｘ（ｋ＋１）〜第ｎのサ−バ１４ｘｎが行うことにより分散値の更新を行う。それに対して上記秘匿更新１は処理を行う第ｋのサ−バ１４ｘｋを１台に指定し、第ｋのサ−バ１４ｘｋだけが図５４のステップ３５８及びステップ３６０の処理を行うため通信量と計算量が削減できるという特徴ももつ。【０１９７】
文献［３］はｋ−１台のサ−バがｎ−ｋ＋１台のサ−バに差分値を送るため、（ｋ−１）（ｎ−ｋ＋１）の通信が必要であり、ｎ−ｋ＋１台のサ−バが図５４のステップ３５８及びステップ３６０の処理に対応する処理を行うため（ｎ−ｋ＋１）の多項式処理が必要である。それに対して、本発明は第ｋのサ−バ１４ｘｋのみが図５４のステップ３５８及びステップ３６０の処理を行い、その結果をｎ−ｋのサ−バに送るため、ステップ３６０での（ｋ−１）の通信、ステップ３７０で（ｎ−ｋ）の通信が発生し、計ｎ＋１回の通信ですむ。本発明では、計算は１つの多項式処理のみでよい。【０１９８】
文献［３］の手法は復元処理を行うｎ−ｋ＋１台のサ−バの選択法に関して何の言及もないが、ｎ−ｋ＋１台のサ−バを固定している場合、攻撃者がｎ−ｋ＋１台のサ−バのうちの１つを盗聴し続ければ、更新値は常に漏洩する。その漏洩を防ぐために、復元処理を行うサ−バをランダムに選択する。攻撃者が盗聴しているサ−バを第ｏのサーバ１４ｘｉｘｏとすると、他の第ｋのサ−バ１４ｘｋが指定されれば、その時点で攻撃者は他のサ−バの分散値を知っていたとしても、第ｋのサ−バ１４ｘｋによる更新によって、第ｏのサーバ１４ｘｉ以外の新たな分散値を知ることはできない。また、ある時点で第ｏのサーバ１４ｘｉが第ｋの他のサ−バ１４ｘｋに選ばれたとしても、他のサ−バの分散値を知らないならば、その差分値が得られても新たな分散値はわからない。よって、上記方式は文献［３］に対して、汎用性を持たせ、かつ効率化と安全性向上を同時に実現している。【０１９９】
（秘匿更新法２（ｕ≧ｋ対応））
次に、ｎ台のサ−バに対して閾値をｋからｕ（ｕ≧ｋ）に増やす場合の更新法を示す。
第ｉのサ−バ１４ｘｉのＣＰＵ２２は、図５７のδｉの生成送信処理を実行する。即ち、ステップ３８２で、ｕ−１個の乱数ｄｉ１,・・・,ｄｉｕ−１を生成し、ステップ３８４で、以下の多項式を生成する。
δｉ（ｘ）＝ｄｉ１ｘ＋ｄｉ２ｘ２＋・・・ｄｉｕ−１ｘｕ−１【０２００】
ステップ３８６で、δｉ（ｘ）のｘに全サ−バＩＤを入れた値δｉ（ｘ１）,δｉ（ｘ２）,・・・,δｉ（ｘｎ）を生成し、ステップ３５８で、δｉ（ｘｊ）を第ｊのサ−バ１４ｘｊ（ｊ＝１,・・・,ｎ）に送信する。【０２０１】
第ｊのサーバ１４ｘｊ、即ち、第１のサ−バ１４ｘ１〜第ｎのサ−バ１４ｘｎの各ＣＰＵ２２は、図５８の更新処理を実行する。即ち、ステップ３９２で、δｉ（ｘｉ）を受信し、ステップ３９４で、自分がもつ閾値ｋに対する分散値Ｗａ’（ｘｉ）に全ての値を足しこんで以下を計算する。
Ｗａ’（ｘｉ）＝Ｗａ’（ｘｉ）＋Σδｊ（ｘｉ）
＝α（ａ＋ａ１ｘｉ＋ａ２ｘｉ２＋・・・＋ａｋ−１ｘｉｋ−１）＋Σδｊ（ｘｉ）
＝α{ａ＋（ａ１＋Σｄｉ１／α）ｘｉ＋・・・＋（ａｋ−１＋Σｄｉｋ−１／α）ｘｉｋ−１＋・・・＋（Σｄｉｕ−１／α）ｘｉｕ−１}
ステップ３９６で、Ｗａ’（ｘｉ）を新たな分散値として保存する。【０２０２】
提案法の特徴は従来のｋではなくｕを対象としたｕ−１次多項式をたててδｉ（ｘ）を構成することである。提案法は［秘匿更新法１］の図５５のステップ３６４の、多項式処理を行わないため、処理が簡易であり、どのサ−バを盗聴していても１つのサ−バの盗聴ではそのサ−バ以外の更新値はわからないという安全性をもつ。【０２０３】
秘匿更新１では分散値にかかる乱数を変えずに多項式のみ変更した。以下に、分散値にかかる乱数を変更して更新する場合を考える。秘匿更新１，２では秘密情報自体は変更しないため、この更新によってサ−バが得る情報はない。しかし、分散値にかかる乱数を直接変更すると、サ−バは秘密情報が何倍されたかという情報を得る。そこで、更新者がサ−バから分散値を集めて更新するが、サ−バに秘密情報が何倍されたかわからせずに更新する手法を示す。【０２０４】
（秘匿更新法３（乱数変更付き分散値更新））
予め定められたサーバ、例えば、第１のサ−バ１４ｘ１のＣＰＵ２２は、図５９の更新処理を実行する。即ち、ステップ４０２で、第１のサ−バ１４ｘ１〜第ｎのサ−バ１４ｘｎから、第１のサ−バ１４ｘ１〜第ｎのサ−バ１４ｘｎに格納されている分散値Ｗ（ｘｉ）を集め、ステップ４０４で、乱数βとｋ−１個の乱数ｄ１〜ｄｋ−１を生成し、ステップ４０６で、以下を計算する。
Ｗａ’（ｘｉ）＝βＷａ’（ｘｉ）＋δ（ｘｉ）＝αβ{ａ＋（ａ１＋ｄ１／β）ｘｉ＋・・・＋（ａｋ−１＋ｄｋ−１／β）ｘｉｋ−１}
δ（ｘ）＝ｄ１ｘ＋ｄ２ｘ２＋・・・ｄｋ−１ｘｋ−１【０２０５】
ステップ４０８で、Ｗａ’（ｘｉ）を各サ−バ、即ち、第１のサ−バ１４ｘ１〜第ｎのサ−バ１４ｘｎに送信する。第１のサ−バ１４ｘ１〜第ｎのサ−バ１４ｘｎは、受信したＷａ’（ｘｉ）を新たな分散値として記憶する。【０２０６】
上記における特徴はＷ（ｘｉ）はα倍されるが、さらにδ（ｘｉ）が足されることにより、Ｗ’（ｘｉ）／Ｗ（ｘｉ）としてもαにならない、即ち何倍したかサ−バにわからないことである。δ（ｘｉ）はｋ−１個集まらなければ解けない乱数であるが、サ−バはαがわからないので、一体化したＷ’（ｘｉ）はｋ個集まってもαsしかわからず安全である。この特徴は請求項１８に示される。【０２０７】
秘匿更新法４
以上の更新法は定数項を必ず０とするので、k-1次の多項式を用いていてもk-1個の分散値があれば更新に用いた多項式が解ける。すなわち、安全性に問題がある。よって、以下のように更新を行うことによりk個の分散値がなければ更新に用いた値がわからないようにすることができる。【０２０８】
[更新]
第ｉのサーバ１４ｘｉにおいては、ｘｉを第１ＩＤとし、また、ｘｉ'を、第２ＩＤとして、ｘ1〜ｘｎの中から、全てのサーバで第１ＩＤと第２ＩＤの重なりがなく、かつｋ−１個のサーバ内でその組合せが閉じることがないように、ランダムに定められている。例えば、ｎ＝ｋの場合、どのようなｋ−１個のサーバ内でその組合せは閉じない。なぜならば、ｉ番目のサーバの第１ＩＤと第２ＩＤが同じとすると、残りのｋ−１台のサーバ内でＩＤの組合せが閉じていることになるが、この場合、全てのサーバで第１ＩＤと第２ＩＤの重なりがないという条件を満たしていない。よって、ｎ＝ｋの場合は全てのサーバで第１ＩＤと第２ＩＤの重なりがないように選択すればよい。それに対してｎ＞ｋの場合、ｋ−１個のサーバ内でその組合せは閉じていても、残り２台のサーバの第１ＩＤと第２ＩＤが逆になっていれば全てのサーバで第１ＩＤと第２ＩＤの重なりがないという条件を満たす。よってまず、ｘ１のサーバがｘ１以外のサーバＩＤｘj2をランダムに選び、選ばれたｘj2のサーバがサーバIDｘj3をランダムに選ぶことを順に行い、ｋ−１台目のサーバになる前に選ばれたサーバが既に第２ＩＤを選択したサーバでないようにすればよい。これは、第２ＩＤを既に選択しているサーバは新たな第２ＩＤを選択することができないので、そこで閉じることになるためである。各ＩＤの情報は公開される。【０２０９】
第ｉのサーバ１４ｘｉのＣＰＵ２２は、図６０（Ａ）の更新処理を実行する。即ち、ステップ３８１で、それぞれｋ個の乱数ｄi0、ｄi1、・・・、ｄik-1と、ｒi1、・・・、ｒik-1を生成し、以下の多項式を生成する。
δi(x)=di0+di1x+di2x2+・・・diu-1xu-1
λi(x)=di0+ri1x+ri2x2+・・・riu-1xu-1【０２１０】
ステップ３８３で、全サーバの第１ＩＤを入れた値δi(ｘ1)、δi(ｘ2)、・・・、δi(ｘn)を成し、ステップ３８５で、δi(ｘj)を第ｊのサーバ１４ｘj(j=1,・・・,n)に送信する。これにより、第ｉのサーバ１４ｘｉは、他のサーバから送信されたδj(ｘi)を受信する。【０２１１】
ステップ３８７で、ｘに全サーバの第２ＩＤを入れた値λi(ｘ1’)、λi(ｘ2’)、・・・、λi(ｘn’)を生成して、ステップ３８９で、λi(ｘj’)を、第ｊのサーバ１４ｘj(j=1,・・・,n)に送信する。これにより、第ｉのサーバ１４ｘｉは、他のサーバから送信されたλj(ｘi’)を受信する。【０２１２】
ステップ４０１で、自分がもつ分散値Ｗａ’(ｘi)に、受信した全てのδj(xi)を足しこんで以下を計算し、それを新たな分散値として保存する。
Wa’(xi)=Wa(xi)+Σδj(xi)=a+a1xi+a2xi2+・・・+ak-1xik-1+Σδj(xi)
=(a+Σdi0)+(a1+Σdi1)xi +・・・+(ak-1+Σdik-1)xik-1【０２１３】
ステップ４０３で、受信した全てのλj(ｘi’)を足しこんで以下を計算し保存する。
λ(xi’)=Σλj(xi’)=(Σdi0)+(Σri1)xi’ +・・・+(Σrik-1)xi’k-1【０２１４】
[復元]
復元装置１６のＣＰＵ２２は、図６０（Ｂ）の復元処理を実行する。即ち、ステップ４１１で、ｋ個のサーバからＷａ’(ｘi)を集めて、解いて（ａ＋Σｄi0)を計算する。ステップ４１３で、ｋ個のサーバからλ(xi’)を集めて、解いて（Σｄi0）を計算する。
ステップ４１５で、（ａ＋Σｄi0)から（Σｄi0）を引いて秘密情報aを計算する。【０２１５】
以上の特徴は従来定数項を０とする多項式によって更新されていたが、それを定数項を０としない。以上では更新処理だけではなく、それに伴い復元においても処理が必要になる。また、λ(ｘi)を保存するため記憶容量が増加する。しかし、攻撃者はｋ−１個のサーバを盗聴できたとしても、Ｗａ’(ｘi)とλ(ｘi’)の秘密情報は全く得られないため、更新値もわからない。【０２１６】
この更新法は、ｋをｕ（＞ｋ）とすればｋの拡大にも対応可能である。また、[復元]は以下のようにすることもできる。【０２１７】
（１）各サーバはλi(ｘj’)をサーバｘj’に送信する。
（２）各サーバはＷａ’(ｘi)+λ(ｘi)を計算して復元装置１６に送信する。
（３）復元装置１６はｋ個のサーバからＷａ’(ｘi)+λ(ｘi)を集めて、解いてａを計算する。【０２１８】
また、第２ＩＤをランダムに選ばなくても例えば、ｘiに対してｘi+ｃを第2ID（ｃは１以上の整数）とすることもできる。さらに、秘匿更新法１に対応する手法を以下に示す。【０２１９】
秘匿更新５
[分散]
図６１（Ａ）を参照して、サーバが実行する分散処理を説明する。この処理では秘匿更新４と同様に各サーバは第１ＩＤと第２ＩＤをもつ。以下ではことわりがない限り、サーバＩＤは第１ＩＤを指す。【０２２０】
第１のサーバ１４ｘ１〜第ｎのサーバ１４ｘｎの内、復元処理を行う１台のサーバがランダムに選択されている。選択されたサーバを、第ｄのサーバ１４ｘｄとする。例えば、第（ｋ＋１）のサーバ１４ｘ(k+1)とする。【０２２１】
第ｄのサーバ１４ｘｄを以下のｋ台のサーバに含めることもできるが、説明を簡単にするためｋ台のサーバは第ｄのサーバ１４ｘｄ以外とする。第ｄのサーバ１４ｘｄ以外のｋ台のサーバ、例えば、第１のサーバ１４ｘ１〜第ｋのサーバ１４ｘｋは、ステップ４２１で、乱数Ｗａ’iを生成する。第１のサーバ１４ｘ１〜第ｋのサーバ１４ｘｋは、ステップ４２３で、自分が既に持つ分散値Ｗａ’(ｘi)と新たに生成したＷａ’iとの差分Ｕｉ’を計算する。
Wa’(xi)=α(a+a1xi+a2xi2+・・・+ak-1xik-1)  （i=1,・・・,k-1）
Wa’i=α(a’+a1’xi+a2’xi2+・・・+ak-1’xik-1)
Ui’=Wa’(xi)-Wa’i=α{(a-a’)+(a1-a1’)xi+(a2-a2’)xi2+・・・+(ak-1-ak-1’)xik-1}【０２２２】
なお、ａj’(j=1,…,k-1)は、ステップ４２７で多項式を解く事によって得られる乱数である。【０２２３】
第１のサーバ１４ｘ１〜第ｋのサーバ１４ｘｋは、ステップ４２５で、差分Ｕｉ’を第ｄのサーバ１４ｘｄに送信する。【０２２４】
第ｄのサーバ１４ｘｄは、ステップ４２７で、ｋ個の多項式を解き、α(a-a’),α(a1-a1’),・・・,α(ak-1-ak-1’)を求め、残りのｎ−（ｋ＋１）台のサーバ１４ｘｊ、例えば、第（ｋ＋２）のサーバ１４ｘ(k+2)〜第ｎのサーバ１４ｘｎと、自身の第ｄのサーバ１４ｘｄに対する以下の差分値Ｗj’を計算する。
Wj’=α{(a1-a1’)xj+(a2-a2’)xj2+・・・+(ak-1-ak-1’)xjk-1}  （ただし、j=k+1,・・・,n）【０２２５】
第ｄのサーバ１４ｘｄは、ステップ４２９で、差分値Ｗj’をサーバ１４ｘｊ(j=k+1,・・・,n)に送信する。サーバ１４ｘjは送られたＷj’と、既に持っている分散値Ｗａ’(ｘi)とを足して新たな分散値Ｗａ’(ｘi)とする。【０２２６】
第ｄのサーバ１４ｘｄは、ステップ４３３で、α(a1-a1’)を以下のように分散する。
Wd’(xi’)=α(a-a’)+d1xi’+d2xi’2+・・・+dk-1xi’k-1【０２２７】
第ｄのサーバ１４ｘｄは、ステップ４３５で、サーバ１４xi(i=1,・・・,n)に第２ＩＤの値であるＷｄ’(ｘi’)を送信する。なお、第ｄのサーバ１４ｘｄは、自身のＷａ’(ｘk+1’)を、自身の記憶装置３４に保存する。【０２２８】
[復元]
次に、図６１（Ｂ）を参照して、各サーバ（第１のサーバ１４ｘ１〜第ｎのサーバ１４ｘm）が実行する復元処理を説明する。即ち、ステップ４３７で、Ｗｄ’(ｘi’)をサーバ１４ｘi’に送信し、よって、ステップ４３９で、Ｗｄ’(ｘi)を受信する。【０２２９】
ステップ４４１で、Wd’(xi)＋Wa’(xi)=α{a+(d1+a1’)xi+(d2+a2’)xi2+・・・+(dk-1+ak-1’)xik-1}を計算する。
第１のサーバ１４ｘ１〜第ｎのサーバ１４ｘmの内の、復元装置１６から指示されたｋ個のサーバは、ステップ４４３で、Wd’(xi)＋Wa’(xi)を復元装置１６に送信する。
そして、復元装置１６は、ｋ個のサーバからWa’(xi)+Wd’(xi)を受信し、解いてαaを計算する。
この場合、Wd’(xi)＋Wa’(xi)を新たな分散値として、秘匿演算を継続可能であることは明らかである。
秘匿更新４と５の特徴は、定数項を０としないｋ個の補正情報δj(xi)またはUj’から分散値の更新情報Σδj(xi)またはWj’を計算することであり、これによってｋ−１台の盗聴を行っても更新情報は得られない。このような手法は今まで提案されておらず、この特徴は請求項１１に示される。【０２３０】
＜第６の実施の形態＞
次に、秘匿検索について示す。ここでは秘密情報を持つオ−ナが、秘密情報に対応する検索ＩＤを分散して秘密情報の分散値とともにサ−バシステムに保管し、ある秘密情報の検索を希望するユ−ザは秘密情報に対応する検索ＩＤを分散して、分散値同志で検索を行う。
（秘匿検索１（基本形：検索サーバ１８を用いない））
［分散］
第１のディーラ装置１２Ａでは、m個の秘密情報（前述した第１の実施の形態〜第５の実施の形態の何れかの分散により上記のように分散されている）に対応するm個の検索ＩＤをｋｊ（ｊ＝１,…,m）としている。第１のディーラ装置１２ＡのＣＰＵ２２は、図６２の分散処理を実行する。即ち、ステップ４１２で、検索ＩＤごとの乱数rｊを生成し、ステップ４１４で、下記の分散値Ｆｊ（ｘｉ）、Rｊ（ｘｉ）を計算する。
Ｆｊ（ｘｉ）＝rｊ（ｋｊ＋ａｊ１ｘｉ＋ａｊ２ｘｉ２＋…＋ａｊｋ−１ｘｉｋ−１）（ｉ＝１,…,ｎ）
Rｊ（ｘｉ）＝rｊ＋rｊ１ｘｉ＋rｊ２ｘｉ２＋…＋rｊｋ−１ｘｉｋ−１【０２３１】
ステップ４１６で、分散値Ｆｊ（ｘｉ）、Rｊ（ｘｉ）を第ｉのサ−バ１４ｘｉ（ｉ＝１,…,ｎ）に送信して保管させる。【０２３２】
よって、各サ−バ、例えば、第１のサ−バ１４ｘ１の記憶装置３４には、図６３（Ａ）に示すように、検索ＩＤであるｋｊ（ｊ＝１,２…,m／２,…m）に対応して、分散値Ｆｊ（ｘｉ）、Rｊ（ｘｉ）が記憶されている。ただし、分散値Ｆｊ（ｘｉ）、Rｊ（ｘｉ）は検索ＩＤ＝ｋｊに応じて昇順に並べられている。さらに、検索IDに対応する秘密情報に対する分散値もＦｊ（ｘｉ）、Rｊ（ｘｉ）と並んで保存されている。【０２３３】
［検索］
各サ−バは保管している分散値の中央値、即ちｊ＝m／２により識別される分散値から検索を始めるようになっている。【０２３４】
復元装置１６のＣＰＵ２２は、図６４の検索処理を実行する。即ち、ステップ４２０で、検索を希望するユ−ザの操作に従って検索ＩＤ＝ｋｊ’を入力し、ステップ４２２で、検索ＩＤ＝ｋｊ’に乱数ｑを乗じたｑ・ｋｊ’をオ−ナの第１のディーラ装置１２Ａに送信する。【０２３５】
第１のディーラ装置１２Ａは、図６５の分散値Ｆｊ（ｘｉ）の計算・送信処理を実行する。即ち、ステップ４５２で、ｑ・ｋｊ’を受信し、ステップ４５４で、ｑ・ｋｊ’を、以下のように秘密分散するための分散値Ｆｊ’（ｘｉ）を計算する。
Ｆｊ’（ｘｉ）＝ｑ・ｋｊ’＋ｂｊ１ｘｉ＋ｂｊ２ｘｉ２＋…＋ｂｊｋ−１ｘｉｋ−１（ｉ＝１,…,ｋ）【０２３６】
ステップ４５６で、分散値Ｆｊ’（ｘｉ）を第ｉのサ−バ１４ｘｉに送信する。
第ｉのサ−バ１４ｘｉ、即ち、第１のサ−バ１４ｘｉ〜第ｋのサ−バ１４ｘｋの各ＣＰＵ２２は、図６６の差ｔｊの計算・送信処理を実行する。即ち、ステップ４６２で、分散値Ｆｊ’（ｘｉ）を受信し、ステップ４６４で、検索ＩＤのｊを設定する。本処理が最初に実行されるとき、ステップ４６４では、ｊには、m／２が設定される。ステップ４６６で、ｊに対応する分散値Ｆｊ（ｘｉ）、Rｊ（ｘｉ）を、記憶装置３４から読み出し、ステップ４６８で、分散値Ｆ（ｘｉ）（ｉ＝１,…,ｋ）をユ−ザの復元装置１６に送信する。これにより、復元装置１６は、図６４のステップ４２４で、分散値Ｆｊ（ｘｉ）を受信する。【０２３７】
図６４のステップ４２６で、δ（０）＝０となる多項式δ（ｘ）を生成し、ステップ４２８で、以下の分散値Ｆｊ（ｘｉ）を計算する。
Ｆｊ（ｘｉ）＝ｑ・Ｆｊ（ｘｉ）＋δ（ｘｉ）（ｉ＝１,…,ｋ）【０２３８】
ステップ４３０で、分散値Ｆｊ（ｘｉ）を第ｉのサ−バ１４ｘｉに送信する。これにより、第ｉのサ−バ１４ｘｉは、図６６のステップ４７０で、分散値Ｆｊ（ｘｉ）を受信する。
ステップ４７２で、ｋ個の分散値Rｊ（ｘｉ）からrｊを復元する。
ステップ４７４で、乱数tｊを生成し、以下の差tｊ{Ｆｊ（ｘｉ）−rｊＦｊ’（ｘｉ）}を計算する。
tｊ{Ｆｊ（ｘｉ）−rｊＦｊ’（ｘｉ）}＝tｊ・rｊ・ｑ{（ｋｊ−ｋｊ’）＋（ａｊ１−ｂｊ１）ｘｉ＋…＋（ａｊｋ−１−ｂｊｋ−１）ｘｉｋ−１}
ステップ４７６で、差tｊ{Ｆｊ（ｘｉ）−rｊＦｊ’（ｘｉ）}を復元装置１６に送信する。【０２３９】
復元装置１６は、図６４のステップ４３２で、差tｊ{Ｆｊ（ｘｉ）−rｊＦｊ’（ｘｉ）}を受信し、ステップ４３４で、差tｊ{Ｆｊ（ｘｉ）−rｊＦｊ’（ｘｉ）}の多項式を解き、定数項を求め、ステップ４３６で、定数項ｒｊ・ｑ（ｋｊ−ｋｊ’）が０か否かを判断する。定数項ｒｊ・ｑ（ｋｊ−ｋｊ’）が０であると判断された場合には、検索ＩＤが一致してとして、ステップ４３８で、検索ＩＤを現在のｊとする。定数項ｒｊ・ｑ（ｋｊ−ｋｊ’）が０でないと判断された場合、ステップ４４０で、本処理（ステップ４２４〜４３６）が所定回数、例えば、ｌｏｇ２ｍ回実行したか否かを判断する。本処理（ステップ４２４〜４３６）がｌｏｇ２ｍ回実行したと判断された場合には、ステップ４４２で、検索ＩＤなしとする。【０２４０】
本処理（ステップ４２４〜４３６）がｌｏｇ２ｍ回実行したと判断されなかった場合には、ステップ４４４で、定数項ｒｊ・ｑ（ｋｊ−ｋｊ’）は正か否かを判断する。定数項ｒｊ・ｑ（ｋｊ−ｋｊ’）が正と判断された場合には、ステップ４４６で、ｊを、当該ｊより小さい値に設定して、第ｉのサーバ１４ｘｉに指示する。例えば、検索ＩＤの検索領域をｊより小さい領域として設定し、設定した検索領域の中央値をｊに設定、設定されたｊを、第ｉのサーバ１４ｘｉに指示する。その後、検索処理はステップ４２４に戻る。【０２４１】
定数項ｒｊ・ｑ（ｋｊ−ｋｊ’）が正と判断されなかった場合には、ステップ４４８で、ｊを、当該ｊより大きい値に設定して、第ｉのサーバ１４ｘｉに指示する。例えば、検索ＩＤの検索領域をｊより大きい領域として設定し、設定した検索領域の中央値をｊに設定、設定されたｊを、第ｉのサーバ１４ｘｉに指示する。その後、検索処理はステップ４２４に戻る。【０２４２】
例えば、本処理（ステップ４２４〜４３６）が最初に実行され、定数項ｒｊ・ｑ（ｋｊ−ｋｊ’）が正と判断された場合には、ステップ４４２で、検索ＩＤの検索領域をｊより小さい領域、１〜（ｍ／２）−１として設定し、設定した検索領域の中央値、３ｍ／４をｊに設定する。本処理（ステップ４２４〜４３６）が再度実行され、定数項ｒｊ・ｑ（ｋｊ−ｋｊ’）が正と判断されなかった場合には、ステップ４４８で、検索ＩＤの検索領域（１〜（ｍ／２）−１）をｊ＝３ｍ／４より大きい領域、（３ｍ／４）＋１〜（１〜（ｍ／２）−１）として設定し、設定した検索領域の中央値をｊに設定する。【０２４３】
上記のようにｊの値が第ｉのサーバ１４ｘｉに対して指示されると、図６６におけるステップ４７８のｊが指示されたか否かの判定結果が肯定判定となって、差ｔｊの計算処理はステップ４６４に戻る。これにより、図６６のステップ４６４では、検索ＩＤのｊとして、上記指示された値を設定する。その後の処理（ステップ４６６〜ステップ４７６）は、上記設定されたｊに基づいて、実行される。【０２４４】
第１の特徴は［分散］において、請求項７の１例として分散値を検索ＩＤ＝ｋｊに応じて昇順に並べ、［検索］において最初の検索をm個の検索ＩＤの中央値、即ちｊ＝m／２から始めることである。【０２４５】
また、請求項９の１例として［検索］で得られる定数項rｊ・ｑ（ｋｊ−ｋｊ’）を出力する。rｊ・ｑは正の値であるので、その値が正であればｋｊ−ｋｊ’>０、即ちｋｊ>ｋｊ’を意味するので、ｋｊの小さい方の中央値、即ちｊ＝３m／４として再び検索を行う。もし、次の検索における定数項が同様に正であればやはりｋｊ>ｋｊ’を意味するので、さらにｋｊの小さい方の中央値を検索する。逆に、次の検索における定数項が負であればｋｊ<ｋｊ’を意味するので、ｋｊの大きい方の中央値を検索する。即ち、mが大きくてもlog２m回の検索で終了する。よって、［検索］でlog２m回探索しても一致する検索ＩＤがない場合は、その検索ＩＤは保存されていないと判断できる。【０２４６】
第２の特徴は［検索］においてオ−ナはユ−ザからｑ・ｋｊ’を得るが、乱数ｑがかかっているためユ−ザの検索ＩＤであるｋｊ’はわからない。また、ユ−ザはサ−バからＦｊ（ｘｉ）を得るが、rｊがかかっているのでサ−バの検索ＩＤであるｋｊはわからない。さらに、ユ−ザはtｊ{Ｆｊ（ｘｉ）−rｊＦｊ’（ｘｉ）}も得るが、Ｆｊ（ｘｉ）以外不明であるのでrｊは得られない。また、サ−バはＦｊ（ｘｉ）とＦｊ’（ｘｉ）とrｊを得るが、ｋ個が結託しなければ秘密情報は復元されない。【０２４７】
上記［分散］において、分散値はｋｊの昇順に並べるとしているが、降順に並べ［検索］の方向を逆にしてもよい。［検索］において、オ−ナがｑ・ｋｊ’を分散させるが、ユ−ザが分散してもよい。【０２４８】
秘匿検索１は単純であるが、オ−ナ、ユ−ザともに毎回検索に参加するため、１つのｋｊ’に対する検索に対して、最大log２m回の演算を行う必要があり、最大負担が大きい。そこで、検索を専門に行う（計算能力が高い）検索部を設け、オ−ナ、ユ−ザともに１つの検索ＩＤに対して１回の演算だけですむ方式を以下に示す。検索部はディーラ装置、サ−バシステム、復元装置と別の装置としてもよいが、サ−バシステムの中に存在するとしてもよい。【０２４９】
（秘匿検索２（検索サーバ１８を用いる））
［分散］
オ−ナの第１のディーラ装置１２Ａは、m個の秘密情報（前述した第１の実施の形態〜第５の実施の形態の何れかの分散により上記のように分散されている）に対応するm個の検索ＩＤをｋｊ（ｊ＝１,…,m）とし、共通の乱数rと検索ＩＤごとの乱数rｊを生成して、下記分散値Ｆｊ（ｘｉ）、Rｊ（ｘｉ）を計算し、第ｉのサ−バ１４ｘｉ（ｉ＝１,…,ｎ）、即ち、第１のサ−バ１４ｘ１~第ｎのサ−バ１４ｘｎに分散保管させる（ａｊｉ，rｊｉ，tｊｉも乱数）。よって、例えば、第１のサーバ１４ｘ１の記憶装置３４には、図６３（Ｂ）に示すように、各分散値Ｆｊ（ｘｉ）、Rｊ（ｘｉ）が記憶されている。さらに、検索IDに対応する秘密情報に対する分散値もＦｊ（ｘｉ）、Rｊ（ｘｉ）と並んで保存されている。【０２５０】
Ｆｊ（ｘｉ）＝rｊ・（ｋｊ＋t’ｊ１ｘｉ＋t’ｊ２ｘｉ２＋…＋t’ｊｋ−１ｘｉｋ−１）（ｉ＝１,…,ｎ）
Rｊ（ｘｉ）＝r・rｊ＋rｊ１ｘｉ＋rｊ２ｘｉ２＋…＋rｊｋ−１ｘｉｋ−１
ただし、分散値は検索ＩＤであるｋｊに応じて昇順に並べられているとする。【０２５１】
［検索］
各サ−バは保管している分散値の中央値、即ちｊ＝m／２により識別される分散値から検索を始める。【０２５２】
復元装置１６のＣＰＵ２２は、図６７の分散値Ｆｕ（ｘｉ）の計算・送信処理を実行する。即ち、ステップ４８２で、検索を希望するユ−ザの操作に従って、検索ＩＤであるｋｊ’を入力し、ステップ４８４で、検索ＩＤであるｋｊ’に乱数ｑを乗じたｑ・ｋｊ’を第１のディーラ装置１２Ａに送信する。【０２５３】
第１のディーラ装置１２ＡのＣＰＵ２２は、図６８の分散値Ｆo（ｘｉ）の計算・送信処理を実行する。即ち、ステップ５０２で、ｑ・ｋｊ’を受信する。【０２５４】
ステップ５０４で、tｊを生成し、ステップ５０６でtｊ・rを計算し、ステップ５０８で、tｊ・rを復元装置１６に送信する。これにより、復元装置１６は、図６７のステップ４８６で、tｊ・rを受信する。【０２５５】
また、第１のディーラ装置１２Ａは、図６８のステップ５１０で、以下の分散値Ｆo（ｘｉ）を計算する。【０２５６】
Ｆo（ｘｉ）＝tｊ・ｑ・ｋｊ’＋ｂｊ１ｘｉ＋ｂｊ２ｘｉ２＋…＋ｂｊｋ−１ｘｉｋ−１（ｉ＝１,…,ｎ）【０２５７】
第１のディーラ装置１２Ａは、ステップ５１２で、分散値Ｆｏ（ｘｉ）を各サ−バ（１４ｘ１〜１４ｘｎ）に送信する。【０２５８】
各サ−バは、図６９の差の計算・送信処理を実行する。即ち、ステップ５２２で、分散値Ｆｏ（ｘｉ）を受信する。【０２５９】
一方、復元装置１６は、図６７のステップ４８８で、以下の分散値Ｆｕ（ｘｉ）を計算する。
Ｆｕ（ｘｉ）＝tｊ・r・ｑ＋ｃｊ１ｘｉ＋ｃｊ２ｘｉ２＋…＋ｃｊｋ−１ｘｉｋ−１（ｉ＝１,…,ｎ）【０２６０】
ステップ４９０で、分散値Ｆｕ（ｘｉ）を各サ−バに送信する。これにより、各サ−バは、図６９のステップ５２４で、分散値Ｆｕ（ｘｉ）を受信する。【０２６１】
各サーバは、ステップ５２５で、Rｊ（ｘｉ）、Tｊ（ｘｉ）を検索サーバ１８に送信する。検索サーバ１８のＣＰＵ２２は、図７０の検索処理を実行する。即ち、ステップ５４２で、各サーバが送信してRｊ（ｘｉ）とTｊ（ｘｉ）をｋ個集め、ステップ５４４で、r・rｊとrｊ・ｋｊを復元し、ステップ５４６で、各サ−バに送信する。これにより、各サ−バは、図６９のステップ５２６で、r・rｊとrｊ・ｋｊを受信する。【０２６２】
各サ−バは、ステップ５２８で、以下の差を計算する。
ｒｊ・ｋｊ・Ｆｕ（ｘｉ）−ｒ・ｒｊ・Ｆｏ（ｘｉ）＝ｔｊ・ｒ・ｒｊ・ｑ{（ｋｊ−ｋｊ’）＋（ｃｊ１−ｂｊ１）ｘｉ＋…＋（ｃｊｋ−１−ｂｊｋ−１）ｘｉｋ−１}【０２６３】
ステップ５３０で、差を検索サーバ１８に送信する。これにより、検索サーバ１８は、図７０のステップ５４８で、差を受信する。【０２６４】
検索サーバ１８はステップ５５０で、差の多項式を解き、定数項を求め、ステップ５５２〜ステップ５６４を実行する。なお、ステップ５５２〜ステップ５６４は、図６４のステップ４３６〜４４８と同様であるので、その説明を省略する。【０２６５】
図７０のステップ５６２、５６４で上記指示がされると、図６８、図６７図６９のステップ５３２が肯定判定となって、ステップ５２５〜５３２の処理が実行され、これに伴って、図７０の検索処理が実行される。【０２６６】
上記の特徴はユーザの処理を1度で終わらせるために、ユーザは乱数qを生成して自分の検索IDkjを秘匿化してオーナに示し、オーナから送られた検索IDに関連する乱数tj・rに自分が定めた乱数qを乗じて返すことである。この特徴は請求項８に示される。
また、最初のオーナまたは異なるオーナが検索IDを追加する場合、そのオーナをユーザとし、追加IDをユーザの検索IDとして検索する。一致するIDがあった場合、そのユーザはその検索IDを変える。なければ、最終位置の隣接ID（追加IDが検索ID中にない場合、最後まで一致はしないが、最終位置では隣接IDの検索結果の方向が逆になり、追加IDがその中間位置に入るべきであることがわかる）の中間位置に追加IDの分散値を追加する。ただし、最初のオーナーが追加を行う場合はこれでよいが、異なるオーナがデータの追加を行う場合、データは昇順に並んでも、オーナーの順番がバラバラとなるため、検索のたびにオーナーの許可が必要となる。よってこの場合、オーナーはシステムに検索を許可するユーザの条件を示し、検索の許諾をシステムに委託するなどすれば効率的となる。以上の特徴は請求項１７に示される。
ところで、第１の実施の形態〜第４の実施の形態に示した例では、α＝α１・・・αｋを生成するが、αは秘密情報毎に異なる乱数であるので、α＝rｊとすれば秘匿検索におけるTｊ（ｘｉ）は秘匿演算のＷａ’（ｘｉ）などと同じ形式の式となる。ただし、秘匿検索に対してはr・rｊに対する分散値Rｊ（ｘ）が増えるので、秘密情報と検索ＩＤ間の相互検索を行えるようにするためには、各サ−バは秘匿演算のために第１の実施の形態〜第４の実施の形態の［分散］に示すように１つの秘密情報に対してｋ＋１個の分散値、秘匿検索のためにRｊ（ｘｉ）に対応する分散値で、ｋ＋２個の分散値を保存する必要がある。これによって、秘匿演算と秘匿検索の２つが同時に実現できる。【０２６７】
＜第７の実施の形態＞
秘匿乗算１’（非対称秘密分散対応）
文献［４］に示される非対称秘密分散に適した秘匿乗算法を以下に示す。ただし、ｈは１〜ｋ−１までの整数のうち、小型化を実現するための鍵サ−バ数を示すとする。ここでは、オ−ナがその鍵サ−バを持つとする。以下に説明する秘匿乗算ｉ’などは秘匿乗算ｉに対応する手法である。以下では、秘密情報ａをもつオ−ナＡがｈ個の鍵サーバの処理を第１のディーラ装置１２Ａによって実行する場合を示すが、鍵サーバは外部にあって、そこから乱数を得ても実行することも可能である。また、秘密情報bをもつオ−ナBの処理もディーラ装置１２Ｂで行うが、鍵サーバが外部にあってそこから乱数を得ても実行することが可能である。また、ディーラ装置がh個の鍵サーバの処理を実行する場合、h個の鍵サーバが各々管理する鍵（全部でh個）をディーラ装置が管理する１つの鍵を用いて鍵サーバのIDを暗号化するなどして、それを各鍵サーバの鍵としてもよい。この場合、ディーラ装置は１つの鍵を管理するだけでh台分の鍵サーバの役割を果たすことができる（具体例は後述の特徴参照）。【０２６８】
［分散］
秘密情報ａをもつオ−ナＡの第１のディーラ装置１２ＡのＣＰＵ２２は、図７１の分散処理を実行する。即ち、ステップ５７２で、分散値Ｗａ（ｘ１）〜Ｗａ（ｘｈ）（ｈはｋ−１以下の整数）として、管理する１つの鍵からｈ個の乱数を生成する。生成した乱数は、分散値Ｗａ（ｘ１）〜Ｗａ（ｘｈ）として、第１のディーラ装置１２Ａの記憶装置３４に記憶される。【０２６９】
ステップ５７４で、秘密情報ａに対して、ｋ−１−ｈ個の乱数ａ0,ｈ＋１〜ａ0,ｋ−１を定め、分散値Ｗａ（ｘ１）〜Ｗａ（ｘｈ）を以下の多項式として解いて残りのｈ個の乱数ａ０,１〜ａ０,h-1を求める。
Ｗａ（ｘｉ）＝ａ＋ａ０,１ｘｉ＋・・・＋ａ０,ｋ−１ｘｉｋ−１（ｉ＝１,・・・,ｈ）【０２７０】
ステップ５７６で、ａとａ０,１〜ａ０,ｋ−１を用いて、以下の式から第（ｈ＋１）のサーバ１４ｘ（ｈ＋１）〜第ｎのサーバ１４ｘｎの分散値Ｗａ（ｘｉ）を求める。
Ｗａ（ｘｉ）＝ａ＋ａ０,１ｘｉ＋・・・＋ａ０,ｋ−１ｘｉｋ−１（ｉ＝ｈ＋１,・・・,ｎ）【０２７１】
ステップ５７８で、ステップ５７６で求めら分散値Ｗａ（ｘｉ）を第（ｈ＋１）のサーバ１４ｘ（ｈ＋１）〜第ｎのサーバ１４ｘｎに送信する。【０２７２】
また、秘密情報ｂを持つオ−ナＢの第２のディーラ装置１２ＢのＣＰＵ２２は、上記説明した図７１のステップ５７２〜ステップ５７８の各処理を独立に実行し、自らの分散値Ｗｂ（ｘ１）〜Ｗｂ（ｘｈ）と、第（ｈ＋１）のサーバ１４ｘ（ｈ＋１）〜第ｎのサーバ１４ｘｎの分散値Ｗｂ（ｘｈ＋１）〜Ｗｂ（ｘｎ）を求め、第（ｈ＋１）のサーバ１４ｘ（ｈ＋１）〜第ｎのサーバ１４ｘｎに送信する。ただし、上記乱数ａ０,ｉはｂ０,ｉになる。【０２７３】
［乗算］
第１のディーラ装置１２ＡのＣＰＵ２２は、図７２の乗算処理を実行する。即ち、ステップ５８２で、ｋ個の乱数αｉ（ｉ＝１,・・・,ｋ）を生成し、ステップ５８４で、その積α＝α１・α２・…αｋを計算する。【０２７４】
ステップ５８６で、自身の第１のディーラ装置１２Ａを含むｋ個のサ−バから分散値Ｗａ（ｘｉ）を集め、ステップ５８８で、ｋ個の分散値Ｗａ（ｘｉ）を解き、ａを求め、ステップ６００で、ａにαをかけたαａを求め、ステップ６０２で、αａを第１のサーバ１４ｘ１〜第ｎのサーバ１４ｘｎ及び第２のディーラ装置１２Bに送信する。なお、第１のディーラ装置１２Ａの記憶装置３４にｋ個の乱数αｉを記憶する。【０２７５】
第２のディーラ装置１２ＢのＣＰＵ２２は、図７３の乗算処理を実行する。即ち、ステップ６１２で、ｋ個の乱数βｉ（ｉ＝１,・・・,ｋ）を生成し、ステップ６１４で、その積β＝β１・β２・…βｋを計算する。【０２７６】
ステップ６１６で、自身の第２のディーラ装置１２Ｂを含むｋ個以上のサ−バから分散値Ｗｂ（ｘｉ）を集め、ステップ６１８で、以下を計算する。ただし、δ（ｘ）はδ（０）＝０となるｋ−１次の多項式である。
Ｗａｂ’（ｘｉ）＝αａ・β・Ｗｂ（ｘｉ）＋δ（ｘｉ）【０２７７】
ステップ６２０で、分散値Ｗａｂ’（ｘｉ）を、元のサーバに送信する。なお、第２のディーラ装置１２Ｂの記憶装置３４にｋ個の乱数βｉを記憶する。【０２７８】
［復元］
第１のディーラ装置１２Ａは、自身の第１のディーラ装置１２Ａ及び第２のディーラ装置１２Ｂを含むｋ個のサ−バｘｊ（ｊ＝１,・・・,ｋ）にαｊを送信する。第２のディーラ装置１２Ｂは、自身の第２のディーラ装置１２Ｂと第１のディーラ装置１２Ａを含むｋ個のサ−バｘｊ（ｊ＝１,・・・,ｋ）にβｊを送信する。【０２７９】
ここで、ｋ個のサ−バｘｊには、第１のディーラ装置１２Ａ、第２のディーラ装置１２Ｂ、及び第１のサーバ１２ｘ１〜第（ｋ−２）サーバ１２ｘｋ−２が含まれる。ここでは簡単のため、ｊ＝ｋ−１で、第１のディーラ装置１２Ａが識別され、ｊ＝ｋで、第２のディーラ装置１２Ｂが識別されるとする。よって、第１のディーラ装置１２Ａには、αｊ＝αｋ−１、βｊ＝βｋ−１が送信され、第２のディーラ装置１２Ｂには、αｊ＝αｋ、βｊ＝βｋが送信される。【０２８０】
上記ｋ個のサ−バｘｊ（ｊ＝１,…,ｋ）のＣＰＵ２２は、図７４のαｊβｊの計算・送信処理を実行する。即ち、ステップ６２２で、第１のディーラ装置からαｊ（＝αｋ−１）を受信し、ステップ６２４で、第２のディーラ装置からβｊを受信し、ステップ６２６で、積αｊβｊを計算する。ステップ６２８で、Ｗａｂ’（ｘｊ）とαｊβｊを復元装置１６に送信する。【０２８１】
復元者の復元装置１６のＣＰＵ２２は図７５の復元処理を実行する。即ち、ステップ６３０で、第１のディーラ装置１２Ａ及び第２のディーラ装置１２Ｂを含むｋ個のサーバから、Ｗａｂ’（ｘｊ）、αｊβｊを受信し、ステップ６３２で、Ｗａｂ’（ｘｊ）からαβａｂを復元する。復元装置１６は、ステップ６３４で、αβａｂをαｊβｊ（ｊ＝１,・・・,ｋ）で割ってａｂを得る。【０２８２】
以上説明した提案方式の第１の特徴は、［分散］の図７１のステップ５７２において、第１のディーラ装置１２Ａ及び第２のディーラ装置１２Ｂが各々鍵を１つ管理するだけで、ｈ台のサ−バが保存すべきだった分散値を削減できる点である。例えばサ−バＩＤであるｘ１〜ｘｈを第１のディーラ装置１２Ａの鍵を用いて暗号化したものをｋｊ（ｊ＝１,・・・,ｈ）とし、ｋｊ用いてａのＩＤを暗号化したものをＷａ（ｘｉ）とすることができる。即ち、第１のディーラ装置１２Ａは鍵１つを持つだけで［分散］の図７１の処理が実現できる。第２のディーラ装置１２Ｂも同様である。すなわち、第１のディーラ装置１２Ａと第２のディーラ装置１２Ｂは分散値を保存しなくても計算によって求められるため、ｈ台のサーバを不要にできる。これは、非対称秘密分散の特徴であるが、上記秘匿乗算においても有効であることがわかる。【０２８３】
第２の特徴は、請求項１２に示すように上記特徴をもつシステムにおいて、ステップ５７２に示されるようにｈ個の乱数を分散値として、ステップ５７４で残りのサーバに対する分散値を計算する点である。よって、［分散］の図７１のステップ５７８で１つの秘密情報ａに対して、ｎ−ｈ台の各サ−バは１台当たり１個の分散値Ｗａ（ｘｉ）を記憶するだけでよい。秘匿乗算１では、ａに対して全サ−バがｋ＋１個の分散値（Ｗａ’（ｘｉ）,Ｗａｈ（ｘｉ）（ｈ＝１,・・・.ｋ））を記憶する必要があったが、秘匿乗算１’ではｎ−ｈ台のサーバが1個のＷａ(xi)を記憶するだけでよい。る。よって、第１の特徴と合わせると、第７の実施の形態の分散は、秘匿乗算１に比べ大幅な記憶容量の削減が実現できる。以上が非対称秘密分散による記憶容量削減の特徴である。また、記憶容量削減に伴う通信量も削減できる。【０２８４】
秘匿乗算１では［分散］においてディーラ装置Ａはｎ個のサ−バにｋ＋１個の分散値を送る必要があった。これに対し、秘匿乗算１’では［分散］の図７１のステップ５７８においてディーラ装置Ａがｎ−ｈ個のサ−バに１個の分散値を送るだけでよい。さらに、秘匿乗算１の［復元］ではｋ個のサ−バがｋ個の分散値を集める必要があるが、秘匿乗算１’では請求項１２に示すように第１のディーラ装置１２Ａがステップ５８２でｋ個の乱数を生成し、ｋ台のサ−バに各々１つの乱数を送信するだけでよい。ただし、その乱数はステップ５８４で合成され、ステップ６００で秘匿化秘密情報αaを生成するために用いられる。これによって、通信量も大きく削減できることがわかる。［乗算］の図７３のステップ６１６、ステップ６１８でＷｂ（ｘｉ）を集めてＷａｂ’（ｘｉ）を送信するため２（ｎ―ｈ）回通信が増えるが、全体的には削減される。【０２８５】
計算量に関しては、秘匿乗算１［分散］においてｋ個のαｊの分散処理と［復元］においてその復元処理が不要になるが、秘匿乗算１’では［分散］の図７１のステップ５７２において乱数生成（暗号化）とステップ５７４において多項式を解く処理が増す。よって、計算量に関してｋ,ｎの値により得失は拮抗する。【０２８６】
秘匿除算１において、秘密情報の［分散］処理を秘匿乗算１’と同様に実行し、αｊ（ｊ＝１,・・・,ｋ）などのｋ個の乱数及びそれを合成した乱数の生成、及びαａ及びＷａｂ’（ｘｉ）の生成を秘匿乗算１’［乗算］と同様に演算中に行い、ｋ個の乱数の配布を［復元］と同様にディーラ装置が直接行えば、そのまま秘匿除算１’が実現できることは明らかである。ただし、ステップ６１６ではＷａｂ’（ｘｉ）＝αａ・β・Ｗｂ（ｘｉ）＋δ（ｘｉ）ではなく、Ｗａｂ’（ｘｉ）＝(β/αａ)・Ｗｂ（ｘｉ）＋δ（ｘｉ）を計算し、ステップ６２６でαjβjではなくβj/αjを計算する。【０２８７】
秘匿除算３’（非対称秘密分散及び実数対応）
実数による除算も以下のようにすれば実現できることも明らかである。以下では、ｂ／ａを計算する場合を説明する。
［分散］
図７６を参照して、第１のディーラ装置１２Ａ、第２のディーラ装置１２Ｂ、サーバｘｊ及び復元装置１６が実行する復元処理を説明する。なお、サーバｘｊには、後述する特定の１台のサーバｘｄが含まれる。
秘匿除算３’の［分散］は、非対称秘密分散対応(図７１)と同様であるので、その説明を省略する。【０２８８】
［復元］
第１のディーラ装置１２Ａは、ステップ６４２で、自身の第１のディーラ装置１２Ａが生成した実数αｊを、ｋ個のサーバｘｊ（ｊ＝１,…,ｋ）に各々送信する。
第２のディーラ装置１２Ｂは、ステップ６４４で、自身の第２のディーラ装置１２Ｂが生成した実数βｊを、ｋ個のサーバｘｊ（ｊ＝１,…,ｋ）に各々送信する。
各サ−バ１４ｘｊ（ｊ＝１,…,ｋ）は、ステップ６４６で、βｊ／αｊを実数として計算し、ステップ６４８で、復元装置１６にβｊ／αｊを送信する。【０２８９】
復元装置１６は、ステップ６５０で、βｊ／αｊ（ｊ＝１,…,ｋ）を実数として掛けてβ／αを計算する。【０２９０】
第１のディーラ装置１２Ａは、ステップ６５４で、サーバｘｊ（合計ｋ個の装置）からＷａ（ｘｉ）を集め、ａを復元して実数化し、ステップ６５６で、実数αjからαを実数計算して、さらにαａを計算し、ステップ６５８で、特定のサーバｘｄにαａを送信する。【０２９１】
第２のディーラ装置１２Ｂは、ステップ６６０で、サーバｘｊからＷｂ（ｘｉ）を集め、ｂを復元して実数化し、ステップ６６２で、実数βjからβを実数計算して、さらにβｂを計算し、ステップ６６４で、特定のサーバｘｄにβｂを送信する。【０２９２】
特定のサーバｘｄは、ステップ６６６で、βｂをαａで実数として割り、ステップ６６８で、βｂ/αａを復元装置１６に送信する。【０２９３】
復元装置１６は、ステップ６７０で、βｂ/αａをβ/αで割り実数、計算しｂ／ａを得る。
実数演算に関して乗算や加算、積和にも同様に対応できることは明らかである。【０２９４】
以上説明した例では、第１のディーラ装置１２Ａは、実数αｊを、サーバｘｊに送信し、第２のディーラ装置１２Ｂは、実数βｊを、サーバｘｊに送信する。即ち、第１のディーラ装置１２Ａは、実数αｊを、第２のディーラ装置１２Ｂには送信せず、また、第２のディーラ装置１２Ｂは、実数βｊを、第１のディーラ装置１２Ａに送信していない。しかし、第１のディーラ装置１２Ａは、実数αｊを、第２のディーラ装置１２Ｂと、合計ｋ−１個のサーバに送信し、第２のディーラ装置１２Ｂは、実数βｊを、第１のディーラ装置１２Ａと、合計ｋ−１個のサーバに送信して、以上と同様の処理をしてもよい。以下も同様である。【０２９５】
秘匿積和１’（非対称秘密分散対応）
演算の繰り返しに関して、秘匿積和は種々の演算に用いられるので、改めて非対称秘密分散を用いた場合を示す。これによって、かかる乱数が異なる秘匿分散値同士の和や乱数を変換した復元も同様に実現できることは明らかである。また、秘匿乗算２や秘匿除算２などの繰り返しも同様に実現できることは明らかである。
なお、以下では、ａ・ｂ＋ｃを計算する場合を説明する。【０２９６】
［分散］
オ−ナＡ,Ｂ,Ｃの各指示に従って、各々の第１のディーラ装置１２Ａ〜第３のディーラ装置１２Ｃは、秘密情報ａ,ｂ,ｃに対して独立に以下の分散値を計算し、ｎ台のサ−バ１４ｘ１〜１４ｘｎに分散保管する（ｉ＝１,…,ｎ）。すなわち、第３のディーラ装置１４ＣのＣＰＵ２２も図７１の分散処理を実行する。なお、ａ0,jはｃ0,jとなる。
Ｗａ（ｘｉ）＝ａ＋ａ０,１ｘｉ＋・・・＋ａ０,ｋ−１ｘｉｋ−１
Ｗｂ（ｘｉ）＝ｂ＋ｂ０,１ｘｉ＋・・・＋ｂ０,ｋ−１ｘｉｋ−１
Ｗｃ（ｘｉ）＝ｃ＋ｃ０,１ｘｉ＋・・・＋ｃ０,ｋ−１ｘｉｋ−１【０２９７】
［積和］
図７７を参照して、第１のディーラ装置１４Ａ〜第３のディーラ装置１４Ｃ、サーバｘｊ、及び復元装置１６のＣＰＵ２２が実行する積和処理及び復元処理を説明する。即ち、秘匿乗算１’の[分散]及び［乗算］（図７１及び図７２の処理）を実行する。サ−バ１４ｘｉ（ｊ＝１,…,ｋ）は、αａを受信し（図７７のステップ６０２（図７２も参照））、Ｗａｂ’（ｘｊ）＝αａ・β・Ｗｂ（ｘｉ）＋δ（ｘｉ）を得る（図７７のステップ６２０参照）。【０２９８】
第３のディーラ装置１２Ｃは、図７７のステップ６７２で、ｋ個の乱数γｉ（ｉ＝１,・・・,ｋ）を生成し、その積γを計算する。【０２９９】
第３のディーラ装置１２Ｃは、ステップ６７４で、ｋ個のサーバｘｊから分散値Ｗｃ（ｘｉ）を集めて、ステップ６７６で、以下の分散値Ｗｃ’（ｘｉ）を計算し、ステップ６７８で、サーバｘｊに分散値Ｗｃ’（ｘｉ）送信する。ただし、δ２（ｘ）はδ２（０）＝０となるｋ−１次の多項式。
Ｗｃ’（ｘｉ）＝γ・Ｗｃ（ｘｉ）＋δ２（ｘｉ）【０３００】
ディーラ装置１２Ａ,１２Ｂ,１２Ｃはそれぞれステップ６７８、６８０、６８２で、ｋ個のサーバｘｊ（ｊ＝１,・・・,ｋ）にそれぞれのαｊ,βｊ,γｊを送信する。【０３０１】
サーバｘｊ（ｊ＝１,…,ｋ）は、ステップ６８４で、乱数μｊを生成し、αｊβｊ／μｊを計算し、ステップ６８６で、αｊβｊ／μｊを復元装置１６に送信する。サーバｘｊは、ステップ６８８で、γｊ／μｊを計算し、ステップ６９０で、γｊ／μｊを復元装置１６に送信する。【０３０２】
復元装置１６は、ステップ６９２で、各αｊβｊ／μｊとαｊβｊ／μｊをかけて、αβ／μとγ／μとを計算し、ステップ６９４で、αβ／μとγ／μとをサーバｘｊに送信する。【０３０３】
サーバｘｊ（ｊ＝１,…,ｋ）は、ステップ６９６で、Ｗａｂ’（ｘｊ）をαβ／μで割り、Ｗｃ’（ｘｊ）をγ／μで割り、Ｗａｂ’（ｘｊ）＝μ（ａｂ＋ａｂ０,１ｘｊ＋・・・＋ａｂ０,ｋ−１ｘｊ^ｋ−１）とＷｃ’（ｘｊ）＝μ（ｃ＋ｃ０,１ｘｉ＋・・・＋ｃ０,ｋ−１ｘｉｋ−１）を計算する。【０３０４】
サーバｘｊ（ｊ＝１,…,ｋ）は、ステップ６９８で、Ｗａｂｃ’（ｘｊ）＝Ｗａｂ’（ｘｊ）＋Ｗｃ’（ｘｊ）＝μ{（ａｂ＋ｃ）＋ａｂｃ０,１ｘｉ＋・・・＋ａｂｃ０,ｋ−１ｘｉｋ−１}を計算する。【０３０５】
［復元］
復元者の復元装置１６は、ステップ７０１で、サーバｘｊからＷａｂｃ’（ｘｊ）を得て、ステップ７０３で、μ（ａｂ＋ｃ）を復元する。
復元装置１６は、ステップ７０５で、サーバｘｊからμｊを得て、ステップ７０７で、（ａｂ＋ｃ）を計算する。【０３０６】
秘匿積和１’は、秘匿積和１に対応しても、αｊ（ｊ＝１,・・・.ｋ）などのｋ個の乱数が不要であるため、大きな記憶容量の削減が実現できる。また、それに伴う通信量の削減も実現できる。また、ここではμを用いて乱数変換を行ったが、例えばαjβj/γjを計算することにより、Wc’(xj)のみγをαβに乱数変換して、乱数をαβにそろえてもよい。【０３０７】
秘匿乗算４’
秘密情報として０を扱う秘匿乗算４に対しても以下のように変形すれば、秘匿乗算４’への対応も可能である。【０３０８】
［分散］
秘匿乗算１’（図７１）と同じであるので（図７８のステップ５７８も参照）、その説明を省略する。
図７８（ステップ６７２以降）を参照して、サーバｘｊ及び復元装置１６が実行する秘匿乗算（乗算及び復元）処理を説明する。【０３０９】
［乗算］
第１のディーラ装置１２Ａは、ステップ６７２で、ｋ個の乱数αｉ（ｉ＝１,・・・,ｋ）を生成し、その積αを計算する。第２のディーラ装置１２Ｂは、ステップ６７４で、ｋ個の乱数βｉ（ｉ＝１,・・・,ｋ）を生成し、その積βを計算する。
第１のディーラ装置１２Ａは、ステップ６７６で、ｋ個のサーバｘｊから分散値Ｗａ（ｘｉ）を集め、ステップ６７８で、サ−バＩＤｎ＋ｘｉに対応する分散値Ｗａ（ｘ（ｎ＋ｘｉ））を計算し、ステップ６８０で、その分散値Ｗａ（ｘ（ｎ＋ｘｉ））にαをかけた分散値Ｗａ’（ｘｉ）をサーバｘｊに送信する。【０３１０】
第２のディーラ装置１２Ｂは、ステップ６８２で、ｋ個のサーバｘｊから分散値Ｗｂ（ｘｉ）を集めて、ステップ６８４で、サ−バＩＤｎ＋ｘｉに対応する分散値Ｗｂ（ｘ（ｎ＋ｘｉ））を計算し、ステップ６８６で、その分散値Ｗｂ（ｘ（ｎ＋ｘｉ））にβをかけた分散値Ｗｂ’（ｘｉ）をサーバｘｊに送信する。【０３１１】
サーバｘｊは、ステップ６８８で、Ｗａｂ（ｘｉ）＝Ｗａ（ｘｉ）・Ｗｂ（ｘｉ）とＷａｂ’（ｘｉ）＝Ｗａ’（ｘｉ）・Ｗｂ’（ｘｉ）を計算する（ｉ＝１,…,ｎ）。【０３１２】
［復元］
第１のディーラ装置１２Ａは、ステップ６９０で、第２のディーラ装置１２Ｂを含むｋ個のサーバｘｊ（ｊ＝１,・・・,ｋ）にαｊを送信する。【０３１３】
第２のディーラ装置１２Ｂは、ステップ６９２で、第１のディーラ装置１２Ａを含むｋ個のサーバｘｊ（ｊ＝１,・・・,ｋ）にβｊを送信する。
サーバｘｊ（ｊ＝１,…,ｋ）は、ステップ６９４で、積αｊβｊを計算する。
サーバｘｊ（ｊ＝１,…,ｋ）は、ステップ６９６で、Ｗａｂ（ｘｊ）とＷａｂ’（ｘｊ）とαｊβｊを復元者の復元装置１６に送信する。【０３１４】
復元装置１６は、ステップ６９８で、全てのαｊβｊをかけてαβを計算し、Ｗａｂ’（ｘｊ）を割って、Ｗａｂ’（ｘｊ）／αβを計算する。
復元装置１６は、ステップ７００で、Ｗａｂ（ｘｊ）とＷａｂ’（ｘｊ）／αβから２ｋ−１個の分散値を用いてａｂを復元する。
秘匿乗算５に関しても演算中、αｊ,βｊなどと同様にｒｊ,ｑｊを処理すればよい。［次数変換］に関しても、αｊ,βｊを直接ディーラ装置からもらうようにすればよい。
秘匿更新１については以下のようにする。非対称秘密分散の特徴の１つはオ−ナが秘匿【０３１５】
演算に参加可能という点である。よって、ｋ−１台のサ−バをオ−ナとし、オ−ナが直接他のサ−バに対する差分値を計算すればサ−バｘｋは不要となる。オ−ナの計算負荷は増えるが、オ−ナは異なる乱数を今までの鍵を用いて出力する、または自分が管理する鍵を変えて異なる乱数を出力するだけで更新ができる。秘匿更新２〜５においてもオーナが更新処理（乱数発生と計算処理など）を行えば安全性は向上する。【０３１６】
秘匿検索２’（検索サーバ１８を利用する）
秘匿検索に対しても、Ｔｊ（ｘｉ）とＲｊ（ｘｉ）のうちｈ個をオ−ナが１つの鍵から生成できるため、ｈ台のサ−バの削減ができる。また、各サ−バが保存する情報も秘密情報に相当するｋｊを秘匿化せずに秘密分散した分散値１つだけであるので、記憶容量は削減される。また、計算量もＲｊ（ｘｉ）を解くことがないため削減される。【０３１７】
ただし、乱数rｊに対する分散値Ｒｊ（ｘｉ）が必要なため、他の実施例と同様にＲｊ（ｘｉ）も削除する場合は以下のようになる。これにより、非対称秘密分散では秘匿検索に対しても１つの秘密情報に対して１つの分散値を記憶していればよい。以下では実用的な秘匿検索２に対する手法を示すが、秘匿検索１に対しても同様の対応ができることは明らかである。【０３１８】
［分散］
オ−ナの第１のディーラ装置１２ＡのＣＰＵ２２は、ｍ個の秘密情報に対する検索ＩＤをｋｊ（ｊ＝１,…,ｍ）として、第７の実施の形態の秘匿乗算１’（図７１のステップ５７２〜５７８）の各処理を実行する。即ち、１つの鍵から下記の形を持つ自らの分散値Ｔｊ（ｘ１）〜Ｔｊ（ｘｈ）を生成し、それらと秘密情報を用いて他のサ−バｘｈ＋１〜ｘｎが持つ分散値Ｔｊ（ｘｈ＋１）〜Ｔｊ（ｘｎ）を求め、各サ−バに送る（ｈはｋ−１以下の整数）。ただし、分散値は検索ＩＤであるｋｊに応じて昇順に並べられているとする。
Ｔｊ（ｘｉ）＝ｋｊ＋t’ｊ１ｘｉ＋t’ｊ２ｘｉ２＋…＋t’ｊｋ−１ｘｉｋ−１
（ｉ＝１,…,ｎ）【０３１９】
［検索］
ユーザの復元装置１６のＣＰＵ２２は、図６５のステップ４８２〜４９０の処理を実行し、オーナの第１のディーラ装置１２ＡのＣＰＵ２２は、図７９の分散値の計算・送信処理を実行し、第ｉのサーバ１４ｘｉのＣＰＵ２２は、図８０の差の計算・送信処理を実行し、検索サーバ１８のＣＰＵ２２は、図８１の検索処理を実行する。なお、図７９の分散値の計算・送信処理のステップ５０２〜５１２は、図６６のステップ５０２〜５１２とほぼ同様である。【０３２０】
検索を希望するユ−ザの復元装置１６は、検索ＩＤ＝ｋｊ’に乱数ｑを乗じたｑ・ｋｊ’をオ−ナの第1のディーラ装置１２Ａに送信する（図６５のステップ４８２、４８４）。【０３２１】
第1のディーラ装置１２Ａは、図７９のステップ５０２で、ｑ・ｋｊ’を受信し、ステップ５０４で、ｔｊとｒを生成し、ステップ５０６で、ｔｊ・ｒを計算し、ステップ５０８で、ｔｊ・ｒを復元装置１６に送信する。第１のディーラ装置１２Ａは、ステップ５１０で、ｑ・ｋｊ’にｔｊをかけて以下の分散値Ｆ0を計算し、ステップ５１２で、分散値Ｆ0をサ−バに送信する。
Ｆo（ｘｉ）＝tｊ・ｑ・ｋｊ’＋ｂｊ１ｘｉ＋ｂｊ２ｘｉ２＋…＋ｂｊｋ−１ｘｉｋ−１
よって、第ｉのサーバ１４ｘｉは、図８０のステップ５２２で、分散値Ｆo（ｘｉ）を受信する。【０３２２】
復元装置１６は、ｔｊ・ｒにｑをかけて以下の分散値Ｆｕ（ｘｉ）を計算し（図６５のステップ４８８）、分散値Ｆｕ（ｘｉ）を各サ−バに送信する（ステップ４９０）。
Ｆｕ（ｘｉ）＝ｔｊ・ｒ・ｑ＋ｃｊ１ｘｉ＋ｃｊ２ｘｉ２＋…＋ｃｊｋ−１ｘｉｋ−１
よって、第ｉのサーバ１４ｘｉは、図８０のステップ５２４で、分散値Ｆｕ（ｘｉ）を受信する。【０３２３】
第ｉのサーバ１４ｘｉ（ｉ＝１、２、・・・ｋ）は、ステップ５２５Ａで、Tｊ（ｘｉ）を第１のディーラ装置１２Ａに送信する。第１のディーラ装置１２Ａは、図７９のステップ５１３で、Tｊ（ｘｉ）を、ｋ個集めて、ステップ５１５で、以下の分散値T’ｊ（ｘｉ）を計算し、ステップ５１７で、分散値T’ｊ（ｘｉ）を第ｉのサーバ１４ｘｉに送信する。【０３２４】
T’ｊ（ｘｉ）＝rｊ・Tｊ（ｘｉ）＋δ（ｘｉ）
ただし、rｊはｋｊ毎に定まる乱数であり、δ（ｘｉ）はδ（０）＝０となるｋ−１次の多項式である。【０３２５】
第ｉのサーバ１４ｘｉは、図８０のステップ５２７で、分散値T’ｊ（ｘｉ）を受信する。【０３２６】
第１のディーラ装置１２Ａは、図７９のステップ５１９で、r・rｊを第ｉのサーバ１４ｘｉに送信する。第ｉのサーバ１４ｘｉは、図８０のステップ５２９で、r・rｊを受信し、ステップ５３０Ａで、分散値T’ｊ（ｘｉ）を検索サーバ１８に送信する。【０３２７】
検索サーバ１８は、図８１のステップ５４１で、T’ｊ（ｘｉ）を受信し、ステップ５４３で、rｊ・ｋｊを計算し、ステップ５４５で、rｊ・ｋｊを第ｉのサーバ１４ｘｉに送信する。
第ｉのサーバ１４ｘｉは、図８０のステップ５３１で、rｊ・ｋｊを受信し、ステップ５３３で、以下の差を計算して、ステップ５３５で、差を検索サーバ１８に送信する。
rｊ・ｋｊ・Ｆｕ（ｘｉ）−r・rｊ・Ｆo（ｘｉ）＝tｊ・r・rｊ・ｑ{（ｋｊ−ｋｊ’）＋（ｃｊ１−ｂｊ１）ｘｉ＋…＋（ｃｊｋ−１−ｂｊｋ−１）ｘｉｋ−１}【０３２８】
検索サーバ１８は、図８１のステップ５４７で、差を受信し、ステップ５４９で、差の多項式を解いて定数項を求める。
以後、検索サーバ１８のＣＰＵ２２は、ステップ５５１〜５６３の処理を実行する。なお、ステップ５５１〜５６３は、図６８のステップ５５２〜５６４に対応するので、その説明を省略する。なお、検索サーバ１８が、図８１のステップ５６１、５６３でｊを指示すると、第ｉのサーバ１４ｘiは、ｊの指示を受信し、これにより、図８０のステップ５３７だ肯定判定され、差の計算・送信処理はステップ５２５Aに戻る。【０３２９】
＜第８の実施の形態＞
分散値の記憶容量を削減する手法としてランプ型秘密分散法が知られている。ランプ型秘密分散法は秘密情報SをL(≦k)個に分割してs1,・・・,sLとし、aL+1,・・・,ak-1を乱数としてk-1次多項式の係数とする。すなわち、以下の多項式を立て、W(xi)を第ｉのサーバ１４ｘｉの分散値とする。この場合、Sをdビットで素数p(>2d)未満の数とすると、siはd/Lビットで素数p’(>2d/L)未満の数となり、演算もp’を法として行えるので、分散値のサイズが1/Lになり記憶容量の削減が可能になる。
W(x)=s1+s2x+・・・+sLxL+aL+1xL+1+・・・+ak-1xk-1
この場合、k-L個までの分散値を集めても乱数aiが残るため秘密情報は漏洩しないが、k-L+1以上の分散値を集めると乱数であるai(i=L+1,・・・,k-1)が失われるので、si(i=1,・・・, L)間の関係がわかることから、情報が部分的に漏洩する。最後に、k個の分散値がわかるとすべてのsiが特定されて、秘密情報Sが復元されるという特徴をもつ。【０３３０】
秘匿乗算１”（ランプ型基本形）
秘匿乗算１に対応するランプ型秘密分散を用いた秘匿乗算を以下に示す。ただし、秘密情報a,bをe進数d桁で表される素数p(>ed)未満の整数とし、a,bをL分割したah,j,bh,j、パラメータα,β,αj,βjなどは素数p’(>e(d/L))未満の整数とし、秘密分散に関する演算は素数q’(>p’u：uは１以上の整数）を法として行われる。以下に示す秘匿乗算１”において、上記以外は秘匿乗算１と同様である。よって、実数演算に対しても秘密情報a,b（実数）を整数表現してp以下の整数とすれば同様に対応できる。【０３３１】
[分散]
秘密情報aをもつオーナＡの第１のディーラ装置１２ＡのＣＰＵ２２は、図８２に示す分散処理を実行する。即ち、ステップ７０２で、素数p’未満のk個の乱数αiを生成し、q’を法としてその積αを計算する。
α=α1・α2・・・αk
ステップ７０４で、素数p未満の秘密情報aをL分散して素数p’未満のa0,0,・・・,a0,L-1とし、以下の分散値を計算する。
Wa’(xi)=α(a0,0+a0,1xi+・・・+a0,k-1xik-1)
Wa1(xi)=α1+a1,1xi+・・・+a1,k-1xik-1
：
Wak(xi)=αk+ak,1xi+・・・+ak,k-1xik-1
ただし、ah,j(h=0,j=L,・・・,k-1とh=1,・・・,k、j=1,・・・,k-1)はp’未満の乱数，xiはq’未満のサーバID（i=1,…,n）である。【０３３２】
ステップ７０６で、分散値Wa’(xi)、Wak(xi)を、第１のサーバ１４ｘ１〜第ｎのサーバ１４ｎに送信する。【０３３３】
秘密情報bをもつオーナBの第２のディーラ装置１２ＢのＣＰＵ２２は、図８３に示す分散処理を実行する。即ち、ステップ７１２で、素数p’未満のk個の乱数βiを生成し、q’を法としてその積βを計算する。
β=β1・β2・・・βk【０３３４】
ステップ７１４で、素数p未満の秘密情報bをL分散して素数p’未満のb0,0,・・・,b0,L-1とし、以下の分散値を計算する（Wa’(xi)とWah(xi)はqを法とする）。
Wb’(xi)=β(b0,0+b0,1xi+・・・+b0,k-1xik-1)
Wb1(xi)=β1+b1,1xi+・・・+b1,k-1xik-1
：
Wbk(xi)=βk+bk,1xi+・・・+bk,k-1xik-1
ただし、bh,j(h=0,j=L,・・・,k-1とh=1,・・・,k、j=1,・・・,k-1)はp’未満の乱数，xiはq’未満のサーバID（i=1,…,n）である。【０３３５】
ステップ７１６で、分散値Ｗｂ’（ｘｉ）、Ｗｂ1（ｘｉ）〜Ｗｂｋ（ｘｉ）を第１のサーバ１４ｘ１〜第ｎのサーバ１４ｘｎに送信する。【０３３６】
[復元]
図８４を参照して、サーバシステムのサーバ及び復元装置１６が実行する復元処理を説明する。サーバシステム内の１つの第ｄのサーバ１４ｘｄは、図８４のステップ７２２で、他の第ｊのサーバ１４ｘｊ（ｊ＝１,・・・,ｋ）からWa’(xi)をk個集め、ステップ７２４で、q’を法としてαa0,j (j=0,・・・,k-1)を復元し、桁合わせを考慮してαa0,jを加算しながらαaを計算する。【０３３７】
第ｄのサーバ１４ｘｄは、ステップ７２６で、他の第ｊのサーバ１４ｘｊ（ｊ＝１,・・・,ｋ）からWb’(xi)をk個集め、ステップ７２８で、q’を法としてβb0,j (j=0,・・・,k-1)を復元し、桁合わせを考慮してβb0,jを加算しながらβbを計算する。【０３３８】
復元に参加する第ｊのサーバ１４ｘｊ(j=1,…,k)は、ステップ７３０、７３４のそれぞれで、指定されたjに応じたWaj(xi)とWbj(xi)を集め（i=1,…,k）、ステップ７３２、７３６で、q’を法として１サーバ当たりαjとβjを１つずつ復元する【０３３９】
第ｊのサーバ１４ｘｊ(j=1,…,k)は、ステップ７３８で、積αjβjを計算し、ステップ７４０で、復元装置１６に送信する。復元装置１６は、ステップ７４２で、αjβjからαβを合成する。【０３４０】
第ｄのサーバ１４ｘｄは、ステップ７４４で、αaとβbとの積αaβbを計算し、ステップ７４６で、αβabを復元装置１６に送信する。復元装置１６は、ステップ７４８で、αβでαβabを割ってabを計算する。【０３４１】
以下に、以上の処理の具体例を示す。秘密情報を10進数2桁のa=12, b=20の場合を考える。よって、p=101(>102)，p’=11(>10),q'=101(>102)，k=n=2とする。【０３４２】
[分散]
（図８２のステップ７０２）
k=2より、オーナＡの第１のディーラ装置１２Ａは、２つの乱数をα1＝２、α2＝２としα=α1・α2=２×２＝４を計算する。【０３４３】
（ステップ７０４）
a（＝１２）を２分割してa0,0=2，a0,1=1とし、Wa1,Wa2に用いる乱数をa1,1=3,a2,1=5とすると、以下が計算される。
Wa'(1)=4(2+1*1)=12
Wa'(2)=4(2+1*2)=16
Wa1(1)=2+3=5
Wa1(2)=2+3*2=8
Wa2(1)=2+5=8
Wa2(2)=2+5*2=12【０３４４】
（図８３のステップ７１２）
β1=1,β2=2とし、β=β1・β2=１×２＝２を計算する。【０３４５】
（ステップ７１４）
b（＝２０）を２分割してb0,0=0，b0,1=2とし、Wb1,Wb2に用いる乱数をb1,1=4,b2,1=6とすると、以下が計算される。
Wb'(1)=2(0+2*1)=4
Wb'(2)=2(0+2*2)=8
Wb1(x1)=1+4=5
Wb1(x2)=1+4*2=9
Wb2(x1)=2+6=8
Wb2(x2)=2+6*2=14【０３４６】
[復元]
（図８４のステップ７２２、７２４）
Wa'(1)＝１２＝s1+s2、Wa'(2)＝１６＝s1+s2*2より、Wa'(2)−Wa'(1)を計算し、4=s2=αa0,1、s1=12-4=8=αa0,0より、桁あわせをしてαa0,1*10+αa0,0=8+4*10=48を得る。【０３４７】
（ステップ７２６、７２８）
βb0,1=4、βb0,0=4-4=0を復元し、βb0,1*10+b0,0=4*10+0=40を得る。【０３４８】
（ステップ７３０〜７３６）
第１のサーバ１４ｘ１は、α1=2、β1=1を復元し、第２のサーバ１４ｘ２は、α2=2、β2=2を復元する。【０３４９】
（ステップ７３８、７４０）
第１のサーバ１４ｘ１は、α1*β1=2*1=2を、第２のサーバ１４ｘ２は、α2*β2=2*2=4を計算し、復元装置１６に送信する。【０３５０】
（ステップ７４４、７４６）
αa*βb=48*40=1920を復元装置１６に送信する。【０３５１】
（ステップ７４２、７４８）
1920/(2*4)=240を計算する。【０３５２】
秘匿乗算１では十進数3桁で考えてaを0〜999とすると、pは103より大きいp=1009とすることができる。よって、最も小さなqはq(>106)の素数であるのでq=1000003となる。よって、[分散]では1000003以下の分散値をk+1個記憶する必要がある。【０３５３】
それに対して、秘匿乗算１”ではL=3とすると、a0,0,a0,1,a0,2が0〜9となり、e=10,d=3,L=3よりp’=11(>e(d/L))とすることができる。qはu=2とするとq(>e(d/L)u)より、q=101とすることができる。よって、秘匿乗算１”の[分散]では101以下の分散値をk+1個記憶すればよく記憶容量が削減されていることがわかる。【０３５４】
また、[復元]にある桁上げを注意しながらは、例えば、a=583とすると、a0,0=5,a0,1=8, a0,2=3となる。α=9とするとq=101を法として、各々αa0,0=45、αa0,1=72、αa0,2=27が復元される。a0,0,a0,1,a0,2は十進数で一桁ずつ桁がずれているので、十進数で一桁ずつずらしながら加算することによってαa0,0*102+αa0,0*10+αa0,0=45*100+72*10+27=5247=9*583=αaが得られる。これらの特徴は請求項１４に示される。【０３５５】
また提案方式の記憶容量削減以外の利点として、各係数はαやβなどの乱数が最後までかかるので、従来のランプ型と異なり、k-L個以上の分散値があっても情報が漏洩せず、安全性が向上する。また、以下のように鍵rでxを暗号化する暗号e_r(x)を用いることにより、さらに安全性向上を向上させることができる。同じサイズの暗号文を作る手法としては、秘密情報と同じサイズの乱数をEXORする、またはq’を法として乱数をかけるなどが考えられる。【０３５６】
秘匿乗算１”（ランプ型拡張形）
[分散]
（ランプ型拡張形）の秘匿乗算１”では、ランプ型基本形の図８２のステップ７０２，７０６、図８３のステップ７１２、７１６を実行するが、第１に、図８２のステップ７０４に代えて、以下の処理を実行する。即ち、鍵r1を用いてαa0,jを暗号化して同じサイズの暗号文e_r1(αa0,j)を作り、以下の分散値Wa’(xi)、Wr1(xi)を計算する。
Wa’(xi)=e_r1(αa0,0)+e_r1(αa0,1)xi+・・・+e_r1(αa0,k-1)xik-1
Wr1(xi)=r1+r1,1xi+・・・+r1,k-1xik-1
ただし、ah,j(h=0,j=L,・・・,k-1とh=1,・・・,k、j=1,・・・,k-1)はp’未満の乱数，xiはq’未満のサーバID（i=1,…,n）
第２に、図８３のステップ７１４に代えて、以下の処理を実行する。即ち、鍵r1を用いてαa0,jを暗号化して同じサイズの暗号文e_r1(αa0,j)を作り、以下の分散値Wb’(xi)、Wr2(xi)を計算する。
Wb’(xi)=e_r2(βb0,0)+e_r2(βb0,1)xi+・・・+e_r2(βb0,k-1)xik-1
Wr2(xi)=r2+r2,1xi+・・・+r2,k-1xik-1
ただし、ah,j(h=0,j=L,・・・,k-1とh=1,・・・,k、j=1,・・・,k-1)はp’未満の乱数，xiはq’未満のサーバID（i=1,…,n）【０３５７】
[復元]
図８５を参照して、サーバシステム内のサーバ、及び復元装置１６が実行する復元処理を説明する。
サーバシステム内の１つの第ｄのサーバ１４ｘｄは、図８５のステップ７２２’、７２６’のそれぞれで、他のサーバからWr1(xi)とWr2(xi)を各々k個集め、ステップ７２４’、７２８’で、r1とr2を復元する。【０３５８】
第ｄのサーバ１４ｘｄは、ステップ７２２”で、他のサーバからWa’(xi)をk個集め、ステップ７２４”で、e_r1(αa0,j)(j=0,・・・,k-1)を復元し、r1を用いてαa0,jを復元し、桁合わせを考慮してαa0,jを加算しながらαaを計算する。【０３５９】
第ｄのサーバ１４ｘｄは、ステップ７２６”で、他のサーバからWb’(xi)をk個集め、ステップ７２８”で、qe_r2(βb0,j)(j=0,・・・,k-1)を復元し、r2を用いてβb0,jを復元し、桁合わせを考慮してβb0,jを加算しながらβbを計算する。【０３６０】
以後、秘匿乗算１”[復元]の図８４のステップ７３０以降の処理と同様の処理を実行して、abを得る。【０３６１】
秘匿乗算の繰り返し（秘匿乗算２）に関しても、基本形、拡張系ともに途中段階で復元した際の桁合わせに考慮すれば同様に拡張できることは明らかである。【０３６２】
また、第２の実施の形態の秘匿除算、第３の実施の形態の演算の繰り返しに関しても、基本形、拡張系ともに途中段階で復元した際の桁合わせに考慮すれば同様に拡張できることは明らかである。ただし、分散値同士の加算は基本形では乱数変換を行えば桁毎の加算となっているため、そのまま適用できる。拡張系では桁毎にかかる乱数が異なるため、一度復元をして乱数を合わせて桁あわせをしながら加算する必要がある。以下に基本形のアルゴリズムを示す。【０３６３】
[分散]
オーナＡの第１のディーラ装置１２Ａは、秘密情報aをL分割してa0,0,・・・,a0,L-1とし、以下の分散値を計算する。ただし、ah,j(h=0,j=L,・・・,k-1とh=1,・・・,k、j=1,・・・,k-1)はp’未満の乱数，xiはq’未満のサーバID（i=1,…,n）である。
Wa(xi)=a0,0+a0,1xi+・・・+a0,k-1xik-1【０３６４】
オーナＢの第２のディーラ装置１２Ｂは、秘密情報bをL分割してb0,0,・・・,b0,L-1とし、以下の分散値を計算する。ただし、bh,j(h=0,j=L,・・・,k-1とh=1,・・・,k、j=1,・・・,k-1)はp’未満の乱数，xiはq’未満のサーバID（i=1,…,n）である。
Wb(xi)=b0,0+b0,1xi+・・・+b0,k-1xik-1
分散値Wa(xi)とWb(xi)を第１のサーバ１４ｘｉ〜第ｎのサーバ１４ｘｎに送信する。【０３６５】
[加算]
第ｉのサーバ１４ｘi(i=1,・・・,n)は以下を計算する。
Wab(xi)=Wa(xi)+Wb(xi)=(a0,0+b0,0)+(a0,1+b0,1)xi+・・・+(a0,k-1+b0,k-1)xik-1【０３６６】
[復元]
復元装置１６は第ｉのサーバ１４ｘiの中のｋ個のサーバからk個の分散値の和Wab(xi)を集め、それを解いて(a0,0+b0,0)，・・・，(a0,L+b0,L)を得る。【０３６７】
復元装置１６は(a0,0+b0,0)，・・・，(a0,L+b0,L)を桁合わせしながら加算してa+bを得る。【０３６８】
第４の実施の形態の分散値同士の乗算の場合、途中段階で復元しないためそのまま適用できない。しかし、例えばe進数で考えると秘密情報aはa=a0,0+a0,1e+・・・+a0,k-1ek-1のように表せ、abの積は、
ab=(a0,0+a0,1e+・・・+a0,k-1ek-1)(b0,0+b0,1e+・・・+b0,k-1ek-1)=(a0,0b0,0)+(a0,0b0,1+a0,1b0,0)e+・・・+(a0,k-1b0,k-1)e2k-1となる。
よって、基本形の秘密分散では、Wa(x)=a0,0+a0,1x+・・・+a0,k-1xk-1、Wb(x)=b0,0+b0,1x+・・・+b0,k-1xk-1とすれば、その積はWa(x)Wb(x)=(a0,0+a0,1x+・・・+a0,k-1xk-1)(b0,0+b0,1x +・・・+b0,k-1xk-1)= (a0,0b0,0)+(a0,0b0,1+a0,1b0,0)x+・・・+(a0,k-1b0,k-1)x2k-1となり、各係数はそのまま積の各桁を表す。よって、以下のようにして秘匿乗算が実現できる。ただし、[復元]における桁合わせ（ステップ７２４”、７２８”）は上記のように各係数を各桁の値として扱うことである。【０３６９】
秘匿乗算３”（０対応）
[分散]
秘匿乗算１”における図８２のステップ７０４に、Wa(xi)=a0,0+a0,1xi+・・・+a0,k-1xik-1、図８３のステップ７１４に、Wb(xi)=b0,0+b0,1xi+・・・+b0,k-1xik-1を計算する処理を追加する。
[乗算]
秘匿乗算３と同様であるので、その説明を省略する。
[復元]【０３７０】
復元者の復元装置１６はWab(xj)とWab’(xj)/αβから2k-1個の分散値を用いて各係数を得て、桁あわせをしながらabを復元する。【０３７１】
上記において、Wa(xi)ちWb(xi)は乱数をかけずに秘密分散したが、例えば[分散]においてWa(xi)=γWa(xi)，Wb(xi)=δWb(xi)，γ=γ1・・・γk，δ=δ1・・・δkとして、[乗算]を行い、 [復元]においてWa’(xi)Wb’(xi)からαβをはずすのと同様に、Wa(xi)Wb(xi)からγδをはずす処理を行ってもよい。この場合、全ての分散値に乱数がかかるため、ランプ型秘密分散のk-1以下の分散値から秘密情報が部分的に漏れるという問題点がなくなり、安全性が向上する。【０３７２】
第５の実施の形態の更新では秘密情報Sは変更しないので、定数項以外の係数を操作した。ランプ型では秘密情報は定数項以外の係数にもあるので、秘密情報を含まない係数を操作することによって基本形は同様に実現できる。よって、秘匿乗算１の[分散]のように秘密情報が分散されているとすると、秘匿更新１は乱数を生成するサーバをk-L台とし、差分値を受けるサーバをn-k+L台とすればよい。また、秘匿更新２ではu-L個の乱数diL,・・・,diu-1からδi(x)=diLxL+diL+1xL+1+・・・diu-1xu-1を生成すればよい。秘匿更新３もδ(x)をδi(x)と同様の形にすればよい。拡張形において暗号の復元が必要な部分は秘密情報が含まれる係数であって、この部分は更新されない。また、乱数部分は形式上暗号化を行ったが暗号化する必要はない。よって、乱数部分の更新は基本形と同様に可能である。さらに、秘匿更新４，５においても同様に実現できることは明らかである。【０３７３】
秘匿検索１”（基本形：検索装置１８を利用しない）
第６の実施の形態にある秘匿検索では検索IDであるkjをL分割して各係数の一致不一致を確認すれば、以下のように部分検索が可能になる。【０３７４】
[分散]
第１のディーラ装置１２ＡのＣＰＵ２２は、図８６（Ａ）の分散処理を実行する。即ち、ステップ７５２で、m個の秘密情報（上記各実施の形態における分散により分散されている）に対応するm個の検索IDを、kj(j=1,…,m)をＬ分割し、kj0,・・・,kjL-1とし、ステップ７５４で、kj毎の乱数rjを生成し、ステップ７５６で、下記分散値Tj(xi) 、Rj(xi)を計算する（rji，tjiも乱数）。
Tj(xi)=rj・(kj0+・・・+kjL-1xiL-1+tjLxiL+…+tjk-1xik-1)（i=1,…,n)
Rj(xi)=rj+rj1xi+rj2xi2+…+rjk-1xik-1
ステップ７５８で、分散値Tj(xi) 、Rj(xi)をサーバxi(i=1,…,n)に送信して、分散保管させる。【０３７５】
分散値は検索IDであるkjに応じて昇順に並べられているとする。例えば、第１のサーバ１４ｘ１の記憶装置３４には、図８６（Ｂ）に示すように、分散値Tj(xi)、Rj(xi)が、ｋｊに応じて昇順に並べて、記憶されている。なお、分散値Tj(xi)、Rj(xi)に対応して、秘密情報に対応する分散値が対応付けられている。【０３７６】
[検索]【０３７７】
復元装置１６のＣＰＵ２２は、図８７のｊの指示処理を実行し、第１のディーラ装置１２ＡのＣＰＵ２２は、図８８のＦj'(xi)の計算送信処理を実行し、第ｉのサーバ１４ｘｉ（第１のサーバ１４ｘ１〜第ｎのサーバ１４ｘｎ）のＣＰＵ２２は図８９の検索処理を実行する。第ｉのサーバ１４ｘｉは保管分散値の中央値、すなわちj=m/2から検索を始める。【０３７８】
復元装置１６は、図８７のステップ７６２で、検索を希望するユーザの操作に従って、検索IDであるkj’を入力し、ステップ７６４で、kj’をL分割し、ステップ７６６で、kj’に乱数qを乗じたq・k’ji(i=0,・・・, L-1)を計算し、ステップ７６８で、q・k’jiを第１のディーラ装置１２Ａに送信する。【０３７９】
第１のディーラ装置１２Ａは、図８８のステップ８０４で、q・k’jiを受信し、ステップ８０６、８０８で、q・k’jiをランプ型秘密分散する。即ち、第１のディーラ装置１２Ａは、ステップ８０６で、以下のＦj'(xi)を計算し（L次以上の乱数はb’ji=q・bjiとなる）、ステップ８０８で、Ｆj'(xi)を第iのサーバ１４ｘiに送信する。
Ｆj'(xi)=q(k’j0+・・・+kjL-1xiL-1+bjLxiL+・・・+bjk-1xik-1）(i=1,…,n)【０３８０】
第ｉのサーバ１４ｘｉは、図８９のステップ８１２で、第１のディーラ装置１２ＡからＦj'(xi)を受信し、ステップ８１４で、ｊを設定する。なお、本処理が最初に実行されるとき、ｊは、m/2に設定される。ステップ８１６で、ｊに対応するTj(xi)(i=1,…,k)を読み出し、ステップ８１８で、Tj(xi)をユーザの復元装置１６に送信する。【０３８１】
復元装置１６は、図８７のステップ７７０で、Tj(xi)を受信し、ステップ７７２で、δ(x)=dLxiL+・・・+dk-1xik-1を生成し、ステップ７７４で、以下のFj(xi)を計算し、ステップ７７６で、Fj(xi)を第ｉのサーバ１４ｘｉに送信する。
Fj(xi)=q・Tj(xi)+δ(xi) (i=1,…,k)【０３８２】
第ｉのサーバ１４ｘｉは、図８９のステップ８２０で、復元装置１６からFj(xi)を受信し、ステップ８２２で、Rj(xi)からrjを復元する。【０３８３】
ステップ８２４で、乱数tjを生成し、ステップ８２６で、以下の差を計算し、ステップ８２８で、差を復元装置１６に送信する。
tj{Fj(xi)-rjFj’(xi)}=tj・rj・q{(k’j0-kj0)+・・・+(k’jL-1-kjL-1)xiL-1+(bjL-t’jL)xiL+・・・+(bjk-1- t’jk-1)xik-1}
ただし、t’ji=tji+di/q【０３８４】
復元装置１６は、図８７のステップ７７８で、差を受信し、ステップ７８０で、差の多項式を解いて、定数項を求め、ステップ７８２で、何れかの定数項の係数差分が０か否かを判断する。部分一致が１つでよいとする場合には、ステップ７８２以降を図８１のステップ５５１以降の処理と同様の処理を実行することができる。しかし、最初に見つかった部分一致検索ＩＤに連続してその上位の部分検索ＩＤが一致しているかを見る場合の処理を以下に説明する。これも中央値から検索すとする。また、第５の実施の形態のＬ個に分解していない検索ＩＤの差分は上位桁の結果が支配的であるので、全体の検索位置は最上位桁の差分値を第５の実施の形態における全体の差分値と同様にみなして検索を行う。また、部分一致があった場合、簡単のためそのＩＤの上位桁のＩＤの部分一致を検索するとする。【０３８５】
上記のように、ステップ７８２で、係数差分による検索を行って、どこかの係数差分に0があるか否かを判断する。どこかの係数差分に0がなければ最上位桁の係数差分を全体の差分として第５の実施の形態と同様に、ｊを１インクリメントして、次の検索位置を定め、ステップ７７０にに戻る。【０３８６】
（１）ステップ７８２で、0となる係数差分があると判断されれば、そのＩＤの下位桁の係数差分を見る。以降簡単のため、最初に見つかった部分検索ＩＤをkjiとし、その上位桁の部分検索IDをkji-1として説明を行う。即ち、ステップ７８６では、桁を識別する変数ｉを１デクリメントする。
ステップ７８８で、下位の桁ｉの係数差分が０か否かを判断する、下位の桁ｉが０と判断された場合には、ステップ７９０で、検索ＩＤをｊとして本処理を終了する。下位の桁ｉが０と判断されなかった場合には、ステップ７９２で、下位の桁ｉにおけるkji-1の係数差分は正か否かを判断する。正と判断されれば、ステップ７９４で、検索位置ｊを１インクリメントし、負と判断されれば、ステップ７９６で、検索位置を１デクリメントする。
ステップ７９８で、前回と今回とのkjiの係数差分が0のままであるか否かを判断する。【０３８７】
（２）前回と今回とのkjiの係数差分が0でない場合には、条件を満たさないとして、ステップ８００で、検索ＩＤなしとして、処理を終了し、前回と今回とのkjiの係数差分が0であれば、ステップ７９４又はステップ７９６におけるｊを指示して、本処理はステップ７７０に戻って、係数差分により検索を行う。【０３８８】
上記はある部分一致とその上位桁の連続一致としたが、一致する部分検索IDを指定する場合、ステップ７８２で、「指定された係数差分が０であるか？」とすればよい。また、上位桁の連続一致であればkji-1の係数差分による次の検索方向を逆（ｉ←ｉ＋１）にすればよい。更に、連続一致でなくてもよい場合、ステップ７８６の「ｉ←ｉ−１」を「ｉ←ｒ(r=1,・・・L,i≠r)」とし、ステップ７８８)の「下位桁の係数差分」を「その他の係数差分」とし、ステップ７８８の「下位桁ｉの係数差分が０が」を「どこかに係数差分が0となるkjrがあるか」とし、ステップ７９０では、「予め定められた方向に検索位置を１ずらして係数差分による検索を行う。」とする。また、３つ以上の一致を見たい場合は２つ一致している状態を１つ一致している状態に置き換えて処理を繰り返せばよい。【０３８９】
ところで、上記[検索]を秘匿検索１[検索]と同様の処理とし、検索ID全ての差分が0となる分散値を検索するようにすれば、通常の秘匿検索が実現できる。また、通常の秘匿検索を行い、完全に一致する検索IDが見つからないときに、検索課程で最も部分一致が多かった位置に戻り、上記定数項の係数差分の判定処理（ステップ７８２以降の処理）の部分検索の拡大処理を行うこともできる。さらに、[検索]においてユーザがq・k’ji(i=0,・・・, L-1)をオーナの第１のディーラ装置１２Ａに送るときに、その重要度をq・k’ji(i=0,・・・, L-1)毎に指示していればその重要度に応じた部分検索も可能である。例えば、k’j3が最も重要である場合、検索課程においてその前後のk’j2やk’j4などにおいて部分一致があった場合、その中間を検索することによりk’j3の部分一致に絞り込んでいくことも可能である。【０３９０】
また、拡張形に対しては暗号e_r(x)がAESのような暗号である場合適用は難しいが、例えば係数aiに乱数tiをかけることによって暗号化する場合には以下のような拡張が可能である。【０３９１】
秘匿検索１”（拡張形：検索装置１８を利用しない）
[分散]
分散処理は、上記図８６（Ａ）と同様である。即ち、オーナの第１のディーラ装置１２Ａは、m個の秘密情報に対応するm個の検索IDを、kj(j=1,…,m)をL分割してkj0,・・・,
kjL-1とし（ステップ７５２）、kj毎の乱数rjとtを生成し（ステップ７５４）、下記分散値Ｔj(xi)を計算し（ステップ７５６）、分散値Ｔj(xi)、Rj(xi)を第ｉのサーバ１４xi(i=1,…,n)に分散保管させる（rji，tjiも乱数）（ステップ７５８）。
Ｔj(xi)=rj・(kj0+・・・+tL-1kjL-1xiL-1+tLtjLxiL+…+tk-1tjk-1xik-1)（i=1,…,n)
Rj(xi)=rj+rj1xi+rj2xi2+…+rjk-1xik-1
ただし、分散値は検索IDであるkjに応じて昇順に並べられているとする。
[検索]【０３９２】
復元装置１６のＣＰＵ２２は、図８７に示すｊの指示処理を実行し、第１のディーラ装置１２ＡのＣＰＵ２２は、図８８のＦｊ’（ｘｊ）の計算・送信処理を実行し、第ｉのサーバ１４ｘｉのＣＰＵ２２は、図８９の検索処理を実行する。【０３９３】
検索を希望するユーザの復元装置１６は、検索IDであるkj’をL分割して乱数qを乗じたq・k’ji(i=0,・・・, L-1)をオーナの第１のディーラ装置１２Ａに送信する（図８７のステップ７６２〜７６８）。【０３９４】
オーナの第１のディーラ装置１２Ａは、q・k’ji0にtiをかけてランプ型秘密分散して以下を第ｉのサーバ１４ｘｉに送信する（L次以上の乱数はb’ji=tiq・bjiとなる）（図８８のステップ８０４〜８０８）。
Fj’(xi)=q(k’j0+・・・+tL-1kjL-1xiL-1+tLbjLxiL+・・・+tk-1bjk-1xik-1）(i=1,…,n)【０３９５】
第ｉのサーバ１４ｘｉは保存しているTj(xi)(i=1,…,k)をユーザの復元装置１６に送信する（図８９のステップ８１４〜８１８）。【０３９６】
復元装置１６は、δ(x)=dLxiL+・・・+dk-1xik-1を生成し、以下を計算して第ｉのサーバ１４ｘｉに送信する（図８７のステップ７７０〜７７６）。
Fj(xi)=q・Tj(xi)+δ(xi) (i=1,…,k)【０３９７】
第ｉのサーバ１４ｘｉは、Rj(xi)からrjを復元する（図８９のステップ８２２）。【０３９８】
第ｉのサーバ１４ｘｉは、乱数tjを生成し、以下の差を計算して復元装置１６に送信する（ステップ８２６、８２８）。
tj{Fj(xi)-rjFj’(xi)}=tj・rj・q{(k’j0-kj0)+・・・+tL-1(k’jL-1-kjL-1)xiL-1+tL(bjL-t’jL)xiL+・・・+tk-1(bjk-1- t’jk-1)xik-1}  ただし、t’ji=tji+di/q【０３９９】
以後の処理（図８７のステップ７８２以降）は、秘匿検索１”[検索]と同様である。【０４００】
次に、第７の実施の形態の小型化と第８の実施の形態のランプ型による小型化は両立可能であることを説明する。例えばk=3である場合、サーバの削減数はk-1=2、秘密情報の分割はk=3まで可能であるので、L=2として秘密情報を2分割し、サーバ台数を1台削減することが可能である。すなわち、サーバの削減数をh、分割数をLとするとh+L≦kとすれば両立できる。以下、例としてh+L=kとなる場合について示す。【０４０１】
秘匿乗算１”（非対称秘密分散対応）
[分散]
秘密情報aをもつオーナＡの第１のディーラ装置１２Ａは、管理する１つの鍵からh個の乱数を生成し、それを自身が持つ分散値Wa(x1)〜Wa(xh)とする（hはk-1以下の整数）（図７１のステップ５７２）。【０４０２】
第１のディーラ装置１２Ａは、秘密情報aをL=k-h分割してa0,0〜a0,L-1とし、h個の分散値Wa(x1)〜Wa(xh)を以下の多項式として解いて残りのk-L=h個の乱数a0,L〜a0,k-1を求める（図７１のステップ５７４）。
Wa(xi)=a0,0+a0,1xi+・・・+a0,k-1xik-1 （i=1,・・・,h）【０４０３】
第１のディーラ装置１２Ａは、Wa(xi)を用いて残りの第（ｈ+１）のサーバ１４ｘh+1〜１４xnの分散値を求め、第ｉのサーバ１４ｘｉに送信する（ステップ５７６）。
Wa(xi)=a0,0+a0,1xi+・・・+a0,k-1xik-1 （i=h+1,・・・,n）【０４０４】
秘密情報ｂを持つオーナＢの第２のディーラ装置１２Ｂは、管理する１つの鍵を用いて、上記の図７１のステップ５７２〜５７８の処理を独立に実行し、自らの分散値Wb(x1)〜Wb(xh)と、サーバxh+1〜xnが持つ分散値Wb(xh+1)〜Wb(xn)を求め、各サーバに送る。【０４０５】
[乗算]
第１のディーラ装置１２Ａは、k個の乱数αi(i=1,・・・,k)を生成し、その積αを計算する（図７２のステップ５８２、５８４）。【０４０６】
第２のディーラ装置１２Ｂは、k個の乱数βi(i=1,・・・,k)を生成し、その積βを計算する（図７３のステップ６１２、６１４）。【０４０７】
第１のディーラ装置１２Ａは、自身を含むk個のサーバから分散値Wa(xi)を集め、k個の分散値Wa(xi)を解き、ai,jを求めて桁あわせをしながらaを計算し、αをかけたαaを復元装置１６に送信する（図７２のステップ５８６〜６０２）。【０４０８】
第２のディーラ装置１２Ｂは、自身を含むk個のサーバから分散値Wb(xi)を集め、k個の分散値Wb(xi)を解き、bi,jを求めて桁あわせをしながらbを計算し、βをかけたβbを復元装置１６に送信する（図７３の６１６〜６２０）。【０４０９】
[復元]
第１のディーラ装置１２Ａは、自身と第２のディーラ装置１２Ｂを含むk個のサーバxj(j=1,・・・,k)にαjを送信する（図７４のステップ６２２）。
第２のディーラ装置１２Ｂは自身と第１のディーラ装置１２Ａを含むk個のサーバxj(j=1,・・・,k)にβjを送信する（ステップ６２４）。
上記k個のサーバｘj(j=1,…,k)は積αjβjを計算する（ステップ６２６）。
サーバｘj(j=1,…,k)はWab’(xj)とαjβjを復元装置１６に送信する（ステップ６２８）。
復元装置１６は、αjβj(j=1,・・・,k)をかけてαβを計算する（図７５のステップ６３０、６３２）。
復元装置１６は、αa・βb/αβを計算してabを得る（図７５のステップ６３４）。
このように、第７の実施の形態の小型化と第８の実施の形態のランプ型による小型化は両立可能である。【０４１０】
＜第９の実施の形態＞
(k,n)閾値秘密分散法における計算量を少なくする方式として、秘密情報をビット列として扱いXORによる演算だけで秘密分散を実現する手法（以降XOR法）が提案されている。このXOR法は準同型性を持たないため，秘匿計算に対応できないという問題がある。それに対してXOR法を拡張し、秘密情報をビット列ではなく多値の数値として扱い、XORの代わりに加減算のみで秘密分散が行える手法（以降、多値化法）を提案されている[5]。しかし、[5]の手法は法とする数が大きく効率的でない。さらに、この手法は秘密情報の分散法、復元法、及び加減算は提案されているが、乗算法は提案されていない。【０４１１】
よって、法を最適な値とした基本的な多値化法の分散と復元アルゴリズムを以下に示す。
S(<ed)を素数p未満のe進数d桁の整数とし、それをn-1分割したものをSi(<ed/(n-1))とし(i=1,・・・,n-1)、乱数rijもSiと同サイズの整数とし、素数p’(<ed/(n-1))を法として演算が行われる（[5]の手法はpを法として演算されている）。この特徴は請求項１３に示される。
第９の実施の形態では、第ｎのサーバ１４ｘｎは、第０のサーバ１４ｘ０とする。【０４１２】
多値化法１（基本形）
[分散]
第１のディーラ装置１２ＡのＣＰＵ２２は、図９０の分散処理を実行する。即ち、ステップ８３２で、秘密情報Ｓを、次のようにｎ−１個の部分秘密情報に分割する。ただし、Ｓ０＝０とする。
【数４】
2016129363.tif 000006
【０４１３】
ステップ８３４で、Ｓと同じサイズの乱数rαβを全て独立に(k-1)n-1個生成する。
【数５】
2016129363.tif 000007
【０４１４】
ステップ８３６で、部分分散情報W(i,j)を以下の式により0≦i≦n-1,0≦j≦n-2においてそれぞれ生成する。
【数６】
2016129363.tif 000008
【０４１５】
ただし、i=1かつj=2,3，i≧2かつj=1のときのSj-iの符号を反転する。{  }はｈ＝０からｋ-２までの加算（Σ）を意味する。【０４１６】
ステップ８３８で、0≦i≦n-1において各部分分散情報W(i,0),W(i,1),…,W(i,n-2)を連結して分散情報Wiを生成する。
【数７】
2016129363.tif 000009
【０４１７】
ステップ８４０で、分散情報Wiを第ｉサーバ１４ｘiに送信する。【０４１８】
[復元]
復元装置１６のＣＰＵ２２は、図９１の復元処理を実行する。即ち、ステップ８４２で、復元に用いるk個の分散情報Wt0,…,Wtk-1(0≦t0≦…≦tk≦n-1)をk個のサーバから集める。ステップ８４４で、k個の分散情報Wt0,…,Wtk-1を、以下の部分分散情報に分割する。【０４１９】
【数８】
2016129363.tif 000010
【０４２０】
ステップ８４６で、上記分割した部分分散情報を用いて2進数ベクトルV(ti,j)を生成する。【０４２１】
例えば、部分分散情報Ｗ(ti,j)の場合には、２進数ベクトルV(ti,j)は、次の通りである。
【数９】
2016129363.tif 000011
【０４２２】
ステップ８４８で、ベクトルV(t0,0),…,V(tk-1,n-2)から以下の行列を生成する。
【数１０】
2016129363.tif 000012
【０４２３】
ステップ８５０で、部分分散情報を以下のベクトルW(t0,…,tk-1)のように表す。
【数１１】
2016129363.tif 000013
【０４２４】
ステップ８５２で、Gauss-Jordanの消去法を用いて
【数１２】
2016129363.tif 000014
を2進数の
【数１３】
2016129363.tif 000015
に変形することにより、全ての部分秘密情報のベクトルS(k,n)を求める。【０４２５】
G(k,n)は以下のように表す。
【数１４】
2016129363.tif 000016
【０４２６】
この際，(4)の式にGauss-Jordanの消去法を用いることで以下のような式が求まる。
S(k,n)=G(k,n) ・R(k,n)【０４２７】
また，S(k,n)は以下のように表せる。【０４２８】
S(k,n)=(S1,S2,…,Sn-1,*,…,*)T【０４２９】
よって，全ての部分秘密情報を得る。【０４３０】
ステップ８５４で、全ての部分秘密情報を連結し，秘密情報Sを得る。
【数１５】
2016129363.tif 000017
【０４３１】
以下、多値化法１（基本系）に対する例を説明する。
[分散]
以下に、上記に対する例として、ｋ＝３、ｎ＝５の場合について示す。秘密情報Ｓを、Ｓ＝３５８２（０≦ｉ≦４、０≦ｊ≦３）とし、n-1個(桁毎)に分割する場合を考える。よって、S(<104)であり、Si(<10)となる。よって、演算はp’=11を法として行う（[5]は104を超えるpを法としている）。
秘密情報Ｓ（＝３５８２）は以下のように分割される（ステップ８３２）。
【数１６】
2016129363.tif 000018
【０４３２】
擬似乱数ｒを以下の値とする（ステップ８３４）。
【数１７】
2016129363.tif 000019
【０４３３】
ステップ８３６で、以下を計算する。なお、ｈ＝０からｋ−２＝１までが加算されるので、以下のように、ｒ０ｊ、ｊ＝１でのｒ１ｉ+ｊが加算される。【０４３４】
【数１８】
2016129363.tif 000020
ただし、次の時にＳj-iの符号を反転する。ｉ＝１かつｊ＝２、３、ｉ≧２かつｊ＝１【０４３５】
以下の表1にユーザに配布される部分分散情報の構成表を示す。
【表１】
2016129363.tif 000021
部分分散情報の構成表【０４３６】
サーバＰ０の分散情報Ｗ０は、６３９２となる。
サーバＰ１の分散情報Ｗ１は、１０６９１０となる。
サーバＰ２の分散情報Ｗ２は、０１０３となる。
サーバＰ３の分散情報Ｗ３は、５５９２となる。
サーバＰ４の分散情報Ｗ０は、２４６１０となる。【０４３７】
[復元]
ユーザＰ０、Ｐ１、Ｐ２の分散情報Ｗ０、Ｗ１、Ｗ２が集まった場合（ステップ８４２）の復元処理を考える。
全ての部分分散情報を表すベクトルＷ(0,1,2),【０４３８】
【数１９】
2016129363.tif 000022
は以下のようになる（ステップ８４４〜８４６）。【０４３９】
【数２０】
2016129363.tif 000023
【０４４０】
Gauss-Jordanの消去法を用いることによって
【数２１】
2016129363.tif 000024
を、
【数２２】
2016129363.tif 000025
【０４４１】
に変形することにより，全ての部分秘密情報のベクトルS(3,5)を求める（ステップ８５２）。【０４４２】
【数２３】
2016129363.tif 000026
【０４４３】
よって，全ての部分秘密情報が復元されたので，これらを連結して秘密情報Sを復元する（ステップ８５４）。
【数２４】
2016129363.tif 000027
【０４４４】
秘匿加算１”’
次に、文献[5]に示される分散値同士の加算による秘密情報の秘匿加算について以下に示す。ただし、この場合、Siが素数p’(<ed/(n-1))未満の整数であるのでSi+Si’より大きな素数q(<ed/(n-1)+1)を法として演算が行われる。【０４４５】
[分散]
秘密情報aをもつオーナの第１のディーラ装置１２AのＣＰＵ２２は多値化法[分散]の図９０のステップ８３２〜ステップ８４０を実行する。即ち、秘密情報Ｓに代えて秘密情報aをn-1個の部分秘密情報に分割してA1,・・・,An-1を生成し、第ｉのサーバ１４ｘｉに対する分散値Wai=Wa(i,0),・・・,Wa(i,n-1)を計算し、第ｉのサーバ１４ｘｉに送信する。【０４４６】
また、秘密情報bをもつオーナBの第２のディーラ装置１２BのＣＰＵ２２は多値化法[分散] の図９０のステップ８３２〜ステップ８４０を実行する。即ち、秘密情報Ｓに代えて秘密情報bをn-1個の部分秘密情報に分割してB1,・・・,Bn-1を生成し、第ｉのサーバ１４ｘｉに対する分散値Wbi=Wb(i,0),・・・,Wb(i,n-1)を計算し、第ｉのサーバ１４ｘｉに送信する。【０４４７】
[加算]
第ｉのサーバ１４ｘｉは以下を計算する。
Wabi=Wai+Wbi=W(i,0),W(i,1),・・・,W(i,n-1)
ただし、W(i,j)=Wa(i,j)+Wb(i,j)【０４４８】
[復元]
復元者の復元装置１６のＣＰＵ２２は、図９２の復元処理を実行する。即ち、ステップ８６２で、Wabiを集め、ステップ８６４で、Wabjを用いて、以下の式に基づいて2進数ベクトルV(ti,j)を生成する。
【数２５】
2016129363.tif 000028
【０４４９】
ステップ８６６で、加算結果a+bを復元する。すなわち、Ｗ(ti,j)とＲ(k,n)の関係は上記のようになるので、Gauss-Jordanの消去法を用いてＲ(k,n)を求めることにより、(A1+B1,・・・,An-1+Bn-1,＊＊＊)となる加算結果S＝a+bを求める。【０４５０】
次に、多値化法の秘匿加算１”’に対する例を説明する。
以下にk=2,n=3,A=23,B=68の場合の例を示す。ここではA,Bとも2桁の値であるのでp=101とし、p’=11よりq=23とし、演算はqを法として行われるとする。【０４５１】
[分散]
ユーザAの第１のディーラ装置１２Ａは保持している秘密情報Ａ＝２３を2分割してA1=2,A2=3とし、多値化法により秘密分散する（ただし、A0=0）（図９０のステップ８３２〜ステップ８４０）。ここでは、(k-1)n-1=2個の乱数をr0=5,r1=4とする。【０４５２】
Wa0=(Wa00)(Wa01)=(A0+r0)(A1+r1)=(5)(6)を、第０のサーバ１４ｘ０へ送信する。
Wa1=(Wa10)(Wa11)=(A2+r0)(A0+r1)=(8)(4)を、第１のサーバ１４ｘ１へ送信する。
Wa2=(Wa20)(Wa21)=(A1+r0)(-A2+r1)=(7)(1)を、第２のサーバ１４ｘ２へ送信する。【０４５３】
ユーザBは第２のディーラ装置１２Ｂ保持している秘密情報B＝６８を2分割してB1=6,B2=8とし、多値化法により秘密分散する（ただし、B0=0）（図９０のステップ８３２〜ステップ８４０）。ここでは、(k-1)n-1=2個の乱数をt0=7,t1=8とする。
Wb0=(Wb00)(Wb01)=(B0+t0)(B1+t1)=(7)(14) を、第０のサーバ１４ｘ０へ送信する。
Wb1=(Wb10)(Wb11)=(B2+t0)(B0+t1)=(15)(8) を、第１のサーバ１４ｘ１へ送信する。
Wb2=(Wb20)(Wb21)=(B1+t0)(-B2+t1)=(13)(0) を、第２のサーバ１４ｘ２へ送信する。【０４５４】
[加算]
各サーバは以下を計算する。
第０のサーバ１４ｘ０は、Wab0を計算する。
Wab0=(Wa00+Wb00)(Wa01+Wb01)=(W00)(W01)= (5+7)(6+14)=(12)(20) 
第１のサーバ１４ｘ１は、Wab1を計算する。
Wab1=(Wa10+Wb20)(Wa11+Wb21)=(W10)(W11)= (8+15)(4+8)=(0)(12) 【０４５５】
Wab2=(Wa20+Wb20)(Wa21+Wb21)=(W20)(W21)=(7+13)(1+0)=(20)(0) 【０４５６】
[復元]
W00=Wa00+Wb00=(A0+r0)+(B0+t0)=0・(A1+B1)+0・(A2+B2)+1・(r0+t0)+0(r1+t1)よりV00=(0010)となる。同様に、V01=(1001)，V10=(0110)，V11=(0001)，V20=(1010)，V21=(0-101) となるので、全体は以下のようになる。【０４５７】
【数２６】
2016129363.tif 000029
【０４５８】
Gauss-Jordanの消去法を用いて、上記を解くことにより以下が求まる。
【数２７】
2016129363.tif 000030
【０４５９】
よって、A1+B1=W01-W11=20-12=8、A2+B2=W10-W00=0-12=-12=11(mod23)となり、桁あわせをすると、8*10+11=91=23+68=A+Bとなる。【０４６０】
以上より、提案の多値化法によって秘密情報の分散、復元、加算（減算も同様）が実現できることが言える。【０４６１】
秘匿乗算１”’
次に、秘匿乗算を示す。
以降ではa,bをe進数d桁で、素数p(>ed)以下の整数とし、aをL分割してAi(i=1,・・・,L)としたとき、Aiは素数p’(>ed/L)以下の整数とする。秘密分散に関する演算は素数q’(>p’u：uは１以上の整数)上で演算が行われる。まず、定数乗算が可能であることを示す。【０４６２】
[分散]
秘密情報aをもつオーナAの第１のディーラ装置１２ＡのＣＰＵ２２は、図９３に示す分散処理を実行する。即ち、ステップ８７２で、素数q未満のk個の乱数αiを生成し、q’を法としてその積αを計算する。
α=α1・α2・・・αk【０４６３】
ステップ８７４で、秘密情報aを分散したものにαをかけて、多値化法[分散]の処理（図８７のステップ８３２〜ステップ８４０）を実行する。これにより、サーバ１４ｘｉ(ｉ=０,…,ｎ−１)に、分散値Wa’i=Wa’(i,0),・・・,Wa’(i,n-1)を送信する。ステップ８７６で、各αj(j=1,…,k)について、多値化法[分散]の処理（図９０のステップ８３２〜ステップ８４０）を実行する。これにより、サーバ４ｘｉ(i=1,…,n)に分散値Wαji=Wαj(i,0),・・・,Wαj(i,n-1)(j=1,…,k)を送信する。【０４６４】
秘密情報bをもつオーナBの第２のディーラ装置１２ＡのＣＰＵ２２は、図９４に示す分散処理を実行する。即ち、ステップ８８２で、素数q未満のk個の乱数βiを生成し、q’を法としてその積βを計算する。
β=β1・β2・・・βk【０４６５】
ステップ８４８で、秘密情報bを分散したものにβをかけて、多値化法[分散]の処理（図９０のステップ８３２〜ステップ８４０）を実行する。これにより、第ｉのサーバ１４xi(i=1,…,n)に分散値Wb’i=Wb’(i,0),・・・,Wb’(i,n-1)を送信する。ステップ８８６で、各βj(j=1,…,k)について多値化法[分散]の処理（図９０のステップ８３２〜ステップ８４０）を実行する。これにより、第ｉのサーバ１４ｘｉ(ｉ=０,…, ｎ−１)に分散値Wβji=Wβj(i,0),・・・,Wβj(i,n-1)(j=1,…,k)送信する。【０４６６】
[乗算]
サーバシステム内の１つのサーバ１４ｘｄのＣＰＵ２２は、多値化法[復元]の処理（図９１のステップ８４２〜ステップ８５４）を実行する。即ち、他のｋ個のサーバからWa’iを集め、αaを復元する。そして、サーバ１４ｘｄは、αａを他のサーバ１４ｘｊ(j=1,…,n)に送信する。
サーバ１４ｘｊ(j=1,…,n)は自分がもつWb’jにαaをかけてWab’jを生成する。
Wab’j=Wab’(j,0),…,Wab’(j,n-1)  ただし、Wab’(j,i)=αaWb’(j,i)【０４６７】
[復元]
復元に参加するサーバ１４ｘｊ(j=1,…,k)のＣＰＵ２２は、図９５のαjβjの計算送信処理を実行する。即ち、ステップ８９２で、Wαjiについて多値化法[復元]の処理（図９１のステップ８４２〜ステップ８５４）を実行し、ステップ８９４で、Wβjiについて多値化法[復元]の処理（図８８のステップ８４２〜ステップ８５４）を実行する。即ち、指定されたjに応じたWαjiとWβjiをｋ個集め（i=1,…,k）、多値化法[復元]により１サーバ当たりαjとβjを１つずつ復元する。【０４６８】
ステップ８９６で、積αjβjを計算し、ステップ８９８で、Ｗab'(xj)とαjβjを復元者に送信する。【０４６９】
復元者の復元装置１６はk個のWab’jからαβabj(j=1,…,ｋ)を復元し、桁合わせをしながらαβabを計算する。【０４７０】
復元装置１６はαjβj(j=1,・・・,k)からαβを合成し、αβabを割ってabを得る。【０４７１】
次に、多値化法の秘匿乗算”’に対する例を説明する。以下では、k=2,n=3,a=23,b=68の場合の例を示す。a,bとも十進2桁の値であり、α,βも同サイズの整数とすると、分散するαa、βbは10進4桁の数であるのでp=10007とし、これを２分割するためp’=101、q’=10007より、演算はq’=10007を法として行われるとする。【０４７２】
[分散]
ユーザAの第１のディーラ装置１２Ａはα1=11,α2=2を生成し、α=α1・α2=22とする（図９３のステップ８７２）。【０４７３】
ユーザAの第１のディーラ装置１２Ａは保持している秘密情報ａ＝２３を2分割してA2=2,A1=3とし、多値化法により秘密分散したWa0,Wa1,Wa2にαをかけてWa’0,Wa’1,Wa’2を得る（ただし、A0=0）（図９３のステップ８７４）。ここでは、(k-1)n-1=2個の乱数をr0=4,r1=5とする。その他にαjを多値化法によりWαji(i=1,・・・,n)を計算・分散する（図９３のステップ８７６）。
Wa0=(Wa00)(Wa01)=(A0+r0)(A1+r1)=(4)(8)に、２２をかけたWa’0=(88)(176) を、第０のサーバ１４ｘ０に送信する。
Wa1=(Wa10)(Wa11)=(A2+r0)(A0+r1)=(6)(5) に、２２をかけたWa’1=(132)(110) を、第１のサーバ１４ｘ１に送信する。
Wa2=(Wa20)(Wa21)=(A1+r0)(-A2+r1)=(7)(3) に、２２をかけたWa’2=(154)(66) を、第２のサーバ１４ｘ２に送信する。【０４７４】
ユーザBの第２のディーラ装置１２Ｂはβ1=61，β2=51を生成し、β=3111とする（図９４のステップ８８２）。【０４７５】
ユーザBの第２のディーラ装置１２Ｂは保持している秘密情報ｂ＝６８を2分割してB2=6,B1=8とし、多値化法により秘密分散する（ただし、B0=0）（図９４のステップ８８４）。ここで、乱数をt0=37,t1=18とする。その他にβjを多値化法によりWb’0、Wb’2 、Wb’3計算・分散する（図９４のステップ８８６）。
Wb0=(Wb00)(Wb01)=(B0+t0)(B1+t1)=(37)(26)に、
3111をかけたWb’0=(115107=5030)(80886=830)を、第０のサーバ１４ｘ０に送信する。
Wb1=(Wb10)(Wb11)=(B2+t0)(B0+t1)=(43)(18) に、
3111をかけたWb’1=(133773=3682)(55998=5963) を第１のサーバ１４ｘ１に送信する。
Wb2=(Wb20)(Wb21)=(B1+t0)(-B2+t1)=(45)(12) に、
3111をかけたWb’2=(139995=9904)(37332=7311) を第２のサーバ１４ｘ２に送信する。【０４７６】
[乗算]
サーバ１４ｘｄは下記によりWa’0とWa’1からαA1=66とαA2=44を復元し、αA2*10+αA1= 506=αaを計算する。【０４７７】
【数２８】
2016129363.tif 000031
【０４７８】
サーバ１４ｘｊは下記によりWb’0とWb’1からβB1(=24888)=4874(modq’)とβB2(=18666) =8659(modq’)を復元し、βB2*10+βB1=91464=(211548=)βbを計算し、αa*βb=46280784=8416(modq’)を復元者に送る。【０４７９】
【数２９】
2016129363.tif 000032
【０４８０】
[復元]
サーバ１４x1はα1=11、β1=61を復元し、サーバ１４x2はα2=2、β2=51を復元する。
サーバ１４x1はα1β1=11*61=671を、x2はα2β2=2*51=102を計算する。
サーバ１４x1はα1β1を、x2はα2β2を復元装置１６に送信する。
復元装置１６はα1β1α2β2より68442=8400(modq’)を得て、q’を法としたその逆数である1974を計算し、αa*βb=8416にかけてq’で法をとると、ab=1564が得られる。
以上は秘匿計算１に対応したものであるが、Shamirの秘密分散法の部分を多値化法に置き換えたものといえる。よって、Shamirの秘密分散法を多値化法に置き換えれば第１の実施の形態〜第８の実施の形態の各手法に対応できることは明らかである。【０４８１】
第９の実施の形態における高速化は次の通りである。第８の実施の形態までのShamir法は多項式演算のため、復元には必ず多項式の連立方程式をとく、すなわち乗算やべき乗演算が必要であった。しかし、XOR型の復元はXORのみで処理ができる。第９の実施の形態では、XORを多値にしたものであり、秘匿乗算の場合、復元は加減算だけでよいので高速化が図られる。【０４８２】
また、法とする数については次の通りである。第７の実施の形態までは秘密情報Sのサイズまたはそのu倍のサイズで演算している。これに対し、第９の実施の形態では、Sを分解したサイズまたはそのu倍のサイズで演算する。よって、法とする数は大きくない。この特徴は請求項１３に示される。【０４８３】
また、多値化法の分散値の大きさを１／Ｌにするランプ型秘密分散法も、Shamir法をランプ型にした第８の実施の形態と同様に可能であることは明らかであり、この場合S(<ed)を素数p未満のe進数d桁の整数とすると、それをL(n-1)分割したSi(<ed/L(n-1))を用いて、同様の処理が行われる。このとき、乱数rijもSiと同サイズの整数とし、素数p’(<edu/L(n-1))（uは１以上の整数）を法として演算が行われる（[5]の手法はpを法として演算されている）。この特徴は請求項１３に示される。【０４８４】
以上のように、ランプ型多値化法は多値化法と同様に実現できるので、Shamirの秘密分散法をランプ型多値化法に置き換えれば第１の実施の形態〜第８の実施の形態の各手法に対応できることは明らかである。【０４８５】
また、ランプ型多値化法と多値化法の違いは、多値化法がSを分割したサイズで演算しても、最後はこれらを集めるため分散値は秘密情報を同じサイズに戻りるのに対し、ランプ型多値化法では、分散値を集めても元の秘密情報の1/Lになっており、高速化と記憶容量の削減も同時に実現している点にある。【０４８６】
２０１５年２月１２日に出願された日本国特許出願２０１５−０２５８２５号の開示は、その全体が参照により本明細書に取り込まれる。
【図１】
2016129363.tif 000034
【図２】
2016129363.tif 000035
【図３】
2016129363.tif 000036
【図４】
2016129363.tif 000037
【図５】
2016129363.tif 000038
【図６】
2016129363.tif 000039
【図７】
2016129363.tif 000040
【図８】
2016129363.tif 000041
【図９】
2016129363.tif 000042
【図１０】
2016129363.tif 000043
【図１１】
2016129363.tif 000044
【図１２】
2016129363.tif 000045
【図１３】
2016129363.tif 000046
【図１４】
2016129363.tif 000047
【図１５】
2016129363.tif 000048
【図１６】
2016129363.tif 000049
【図１７】
2016129363.tif 000050
【図１８】
2016129363.tif 000051
【図１９】
2016129363.tif 000052
【図２０】
2016129363.tif 000053
【図２１】
2016129363.tif 000054
【図２２】
2016129363.tif 000055
【図２３】
2016129363.tif 000056
【図２４】
2016129363.tif 000057
【図２５】
2016129363.tif 000058
【図２６】
2016129363.tif 000059
【図２７】
2016129363.tif 000060
【図２８】
2016129363.tif 000061
【図２９】
2016129363.tif 000062
【図３０】
2016129363.tif 000063
【図３１】
2016129363.tif 000064
【図３２】
2016129363.tif 000065
【図３３】
2016129363.tif 000066
【図３４】
2016129363.tif 000067
【図３５】
2016129363.tif 000068
【図３６】
2016129363.tif 000069
【図３７】
2016129363.tif 000070
【図３８】
2016129363.tif 000071
【図３９】
2016129363.tif 000072
【図４０】
2016129363.tif 000073
【図４１】
2016129363.tif 000074
【図４２】
2016129363.tif 000075
【図４３】
2016129363.tif 000076
【図４４】
2016129363.tif 000077
【図４５】
2016129363.tif 000078
【図４６】
2016129363.tif 000079
【図４７】
2016129363.tif 000080
【図４８】
2016129363.tif 000081
【図４９】
2016129363.tif 000082
【図５０】
2016129363.tif 000083
【図５１】
2016129363.tif 000084
【図５２】
2016129363.tif 000085
【図５３】
2016129363.tif 000086
【図５４】
2016129363.tif 000087
【図５５】
2016129363.tif 000088
【図５６】
2016129363.tif 000089
【図５７】
2016129363.tif 000090
【図５８】
2016129363.tif 000091
【図５９】
2016129363.tif 000092
【図６０】
2016129363.tif 000093
【図６１】
2016129363.tif 000094
【図６２】
2016129363.tif 000095
【図６３】
2016129363.tif 000096
【図６４】
2016129363.tif 000097
【図６５】
2016129363.tif 000098
【図６６】
2016129363.tif 000099
【図６７】
2016129363.tif 000100
【図６８】
2016129363.tif 000101
【図６９】
2016129363.tif 000102
【図７０】
2016129363.tif 000103
【図７１】
2016129363.tif 000104
【図７２】
2016129363.tif 000105
【図７３】
2016129363.tif 000106
【図７４】
2016129363.tif 000107
【図７５】
2016129363.tif 000108
【図７６】
2016129363.tif 000109
【図７７】
2016129363.tif 000110
【図７８】
2016129363.tif 000111
【図７９】
2016129363.tif 000112
【図８０】
2016129363.tif 000113
【図８１】
2016129363.tif 000114
【図８２】
2016129363.tif 000115
【図８３】
2016129363.tif 000116
【図８４】
2016129363.tif 000117
【図８５】
2016129363.tif 000118
【図８６】
2016129363.tif 000119
【図８７】
2016129363.tif 000120
【図８８】
2016129363.tif 000121
【図８９】
2016129363.tif 000122
【図９０】
2016129363.tif 000123
【図９１】
2016129363.tif 000124
【図９２】
2016129363.tif 000125
【図９３】
2016129363.tif 000126
【図９４】
2016129363.tif 000127
【図９５】
2016129363.tif 000128
【手続補正書】
【提出日】平成28年8月31日(2016.8.31)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分割し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘密演算を行うシステムにおいて分散値を計算する計算装置であって、
秘密情報と演算を行うｋ個以上の乱数の分散値を計算する分散手段と、
前記ｋ個以上の乱数と秘密情報から秘匿化秘密情報を生成する生成手段と、
を備える計算装置。
【請求項２】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分割し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘密演算を行うシステムにおいて分散値を計算する計算装置であって、
請求項１に記載の計算装置に含まれる分散手段によって分散されたｋ個以上の乱数の一部である第１の乱数を含む分散値と、請求項１に記載の計算装置に含まれる分散手段によってｋ個以上の乱数の一部である第２の乱数を含む分散値とを集めて、前記第１の乱数と前記第２の乱数を含む値を復元する手段と、
前記復元した第１の乱数と第２の乱数を含む値を合成する手段と、
を備える計算装置。
【請求項３】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分割し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘密演算を行うシステムにおいて分散値を計算する計算装置であって、
請求項１に記載の計算装置に含まれる分散手段によって分散されたｋ個以上の乱数の一部である第１の乱数を含む分散値を集めて第１の乱数を含む値を復元する手段と、
新たな乱数を生成し、生成した新たな乱数と、復元された第１の乱数とを合成する手段と、
合成された値を秘匿化秘密情報に作用させて秘匿化秘密情報に用いられた第１の乱数を含む値を第２の乱数に変換する手段と、
を備える計算装置。
【請求項４】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分割し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘密演算を行うシステムにおいて分散値を計算する計算装置であって、
請求項１に記載の計算装置に含まれる生成手段によって生成された第１の秘匿化秘密情報、又は、請求項３に記載の計算装置で秘匿化秘密情報として用いられる第１の秘匿化秘密情報と、請求項１に記載の計算装置に含まれる生成手段によって生成された第２の秘匿化秘密情報、又は、請求項３に記載の計算装置で秘匿化秘密情報として用いられる第２の秘匿化秘密情報とを用いて所定の演算を行い、演算結果の分散値を得る手段
を備える計算装置。
【請求項５】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分割し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘密演算を行うシステムにおいて分散値を計算する計算装置であって、
請求項１に記載の計算装置に含まれる生成手段によって生成された秘匿化秘密情報、請求項３に記載の計算装置で用いられる秘匿化秘密情報、又は請求項４に記載の計算装置で用いられた第１及び第２の秘匿化秘密情報である秘匿化秘密情報を復元する手段と、
請求項１に記載の計算装置又は請求項２に記載の計算装置で用いられるｋ個以上の乱数を復元する手段と、
復元した乱数と復元した秘匿化秘密情報を用いて演算を行い、秘匿化を解除する手段と、
を備える計算装置。
【請求項６】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分割し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘密演算を行うシステムにおいて分散値を計算する計算装置であって、
ある実数に対する小数点位置を表す整数を秘密情報として秘密分散する手段と、
前記実数を整数に変換して、それを秘密情報又はｋ個の乱数として用いる請求項１に記載の計算装置に含まれる分散手段及び生成手段と、
を備える計算装置。
【請求項７】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分割し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘密演算を行うシステムにおいて分散値を計算する計算装置であって、
小数点位置に対する分散値を秘匿演算に応じて秘匿加減算した結果を復元する手段と、
その出力を請求項１〜請求項５の何れか１項に記載の計算装置による秘匿計算結果に作用させる手段と、
を備える計算装置。
【請求項８】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分割し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘密演算を行うシステムにおいて分散値を計算する計算装置であって、
秘密情報を所定の規則によって分割した値に対して請求項１に記載の計算装置に含まれる生成手段によって生成された秘匿化秘密情報、及びその秘匿化に用いられたｋ個の乱数を用いて請求項２〜請求項５の何れか１項に記載の計算装置によって行われた秘匿計算に関する分割された秘匿計算結果に対して、その分割された秘匿計算結果を前記所定の規則に対応する規則に従って合成する手段
を備える計算装置。
【請求項９】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分割し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘密演算を行うシステムにおいて分散値を計算する計算装置であって、
ｈ（≦ｋ−Ｌ）個の鍵からある秘密情報に対するｈ個の分散値を計算し、そのｈ個の分散値と秘密情報から残りのｎ−ｈ個の分散値を計算した分散値からｋ個の分散値を集める手段と、
前記秘密情報と演算を行うｋ個以上の乱数を生成する手段と、
前記ｋ個以上の乱数と前記秘密情報から秘匿化秘密情報を生成する手段と、
を備える計算装置。
【請求項１０】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分割し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘密演算を行うシステムにおいて分散値を計算する計算装置であって、
秘密情報を所定の規則によって分割する手段と、
分割した秘密情報に対して請求項１〜請求項５に記載の計算装置によって得られた秘匿計算結果とほぼ同等若しくは僅かに大きい素数を法として、分散値を生成する手段と、
を備える計算装置。
【請求項１１】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分割し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘密演算を行うシステムにおいて分散値を計算する計算装置に含まれるコンピュータを、
秘密情報と演算を行うｋ個以上の乱数の分散値を計算する分散手段、及び、
前記ｋ個以上の乱数と秘密情報から秘匿化秘密情報を生成する生成手段として機能させるためのプログラム。
【請求項１２】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分割し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘密演算を行うシステムにおいて分散値を計算する計算装置に含まれるコンピュータを、
請求項１に記載の計算装置に含まれる分散手段によって分散されたｋ個以上の乱数の一部である第１の乱数を含む分散値と、請求項１に記載の計算装置に含まれる分散手段によってｋ個以上の乱数の一部である第２の乱数を含む分散値とを集めて、前記第１の乱数と前記第２の乱数を含む値を復元する手段、及び、
前記復元した第１の乱数と第２の乱数を含む値を合成する手段として機能させるためのプログラム。
【請求項１３】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分割し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘密演算を行うシステムにおいて分散値を計算する計算装置に含まれるコンピュータを、
請求項１に記載の計算装置に含まれる分散手段によって分散されたｋ個以上の乱数の一部である第１の乱数を含む分散値を集めて第１の乱数を含む値を復元する手段、
新たな乱数を生成して復元された第１の乱数と合成する手段、及び、
合成された値を秘匿化秘密情報に作用させて秘匿化秘密情報に用いられた第１の乱数を含む値を第２の乱数に変換する手段として機能させるためのプログラム。
【請求項１４】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分割し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘密演算を行うシステムにおいて分散値を計算する計算装置に含まれるコンピュータを、
請求項１に記載の計算装置に含まれる生成手段によって生成された第１の秘匿化秘密情報、又は、請求項３に記載の計算装置で秘匿化秘密情報として用いられる第１の秘匿化秘密情報と、請求項１に記載の計算装置に含まれる生成手段によって生成された第２の秘匿化秘密情報、又は、請求項３に記載の計算装置で秘匿化秘密情報として用いられる第２の秘匿化秘密情報とを用いて所定の演算を行い、演算結果の分散値を得る手段として機能させるためのプログラム。
【請求項１５】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分割し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘密演算を行うシステムにおいて分散値を計算する計算装置に含まれるコンピュータを、
請求項１に記載の計算装置に含まれる生成手段によって生成された秘匿化秘密情報、請求項３に記載の計算装置で用いられる秘匿化秘密情報、又は請求項４に記載の計算装置で用いられた第１及び第２の秘匿化秘密情報である秘匿化秘密情報を復元する手段、
請求項１に記載の計算装置又は請求項２に記載の計算装置で用いられるｋ個以上の乱数を復元する手段、及び、
復元した乱数と復元した秘匿化秘密情報を用いて演算を行い、秘匿化を解除する手段として機能させるためのプログラム。
【請求項１６】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分割し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘密演算を行うシステムにおいて分散値を計算する計算装置に含まれるコンピュータを、
ある実数に対する小数点位置を表す整数を秘密情報として秘密分散する手段、及び、
前記実数を整数に変換して、それを秘密情報又はｋ個の乱数として用いる請求項１に記載の計算装置に含まれる分散手段及び生成手段として機能させるためのプログラム。
【請求項１７】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分割し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘密演算を行うシステムにおいて分散値を計算する計算装置に含まれるコンピュータを、
小数点位置に対する分散値を秘匿演算に応じて秘匿加減算した結果を復元する手段、及び、
その出力を請求項１〜請求項５の何れか１項に記載の計算装置による秘匿計算結果に作用させる手段として機能させるためのプログラム。
【請求項１８】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分割し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘密演算を行うシステムにおいて分散値を計算する計算装置に含まれるコンピュータを、
秘密情報を所定の規則によって分割した値に対して請求項１に記載の計算装置に含まれる生成手段によって生成された秘匿化秘密情報、及びその秘匿化に用いられたｋ個の乱数を用いて請求項２〜請求項５の何れか１項に記載の計算装置によって行われた秘匿計算に関する分割された秘匿計算結果に対して、その分割された秘匿計算結果を前記所定の規則に対応する規則に従って合成する手段として機能させるためのプログラム。
【請求項１９】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分割し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘密演算を行うシステムにおいて分散値を計算する計算装置に含まれるコンピュータを、
ｈ（≦ｋ−Ｌ）個の鍵からある秘密情報に対するｈ個の分散値を計算し、そのｈ個の分散値と秘密情報から残りのｎ−ｈ個の分散値を計算した分散値からｋ個の分散値を集める手段、
前記秘密情報と演算を行うｋ個以上の乱数を生成する手段、及び、
前記ｋ個以上の乱数と前記秘密情報から秘匿化秘密情報を生成する手段として機能させるためのプログラム。
【請求項２０】
ｎを整数、ｋをｎ以下の整数、Ｌを１以上ｋ以下の整数とし、秘密情報をｎ個に分割し、ｎ個のうちｋ個の分散値を集めれば秘密情報を復元でき、ｋ−Ｌ個以下では秘密情報を復元できない手段を用いて秘密演算を行うシステムにおいて分散値を計算する計算装置に含まれるコンピュータを、
秘密情報を所定の規則によって分割する手段、及び、
分割した秘密情報に対して請求項１〜請求項５に記載の計算装置によって得られた秘匿計算結果とほぼ同等若しくは僅かに大きい素数を法として、分散値を生成する手段として機能させるためのプログラム。
【手続補正書】
【提出日】平成28年12月20日(2016.12.20)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
分散装置及び演算・復元装置を含み、ｎを整数とし、ｋをｎ以下の整数とし、整数をｎ個に分散し、ｎ個の分散値のうちｋ個以上を使って、２つ以上の整数間の秘密演算を行うシステムに含まれる分散装置であって、
ｋ個以上の乱数を生成する乱数生成手段と、
前記乱数生成手段によって生成された前記ｋ個以上の乱数の積を前記整数に直接作用させることで前記整数を秘匿化した秘匿化整数を生成する秘匿化整数生成手段と、
を備える分散装置。
【請求項２】
分散装置及び演算・復元装置を含み、ｎを整数とし、ｋをｎ以下の整数とし、第１整数及び第２整数の各々をｎ個に分散し、前記第１整数及び前記第２整数の各々についてｎ個の分散値のうちｋ個以上を使って、前記第１整数と前記第２整数との間の秘密演算を行うシステムに含まれる演算・復元装置であって、
前記第１整数についての秘匿化に用いられるｋ個以上の乱数の一部である第１の乱数を含む分散値と、前記第２整数についての秘匿化に用いられるｋ個以上の乱数の一部である第２の乱数を含む分散値とを集めて、前記第１の乱数を含む値と前記第２の乱数を含む値とを復元する手段と、
前記復元した第１の乱数を含む値と第２の乱数を含む値とを合成する手段と、
を備える演算・復元装置。
【請求項３】
分散装置及び演算・復元装置を含み、ｎを整数とし、ｋをｎ以下の整数とし、第１整数及び第２整数の各々をｎ個に分散し、前記第１整数及び前記第２整数の各々についてｎ個の分散値のうちｋ個以上を使って、前記第１整数と前記第２整数との間の秘密演算を行うシステムに含まれる演算・復元装置であって、
前記第１整数についての秘匿化に用いられるｋ個以上の乱数の一部である第１の乱数を含む分散値と、前記第２整数についての秘匿化に用いられるｋ個以上の乱数の一部である第２の乱数を含む分散値とを集めて、前記第１の乱数を含む値と前記第２の乱数を含む値とを復元する手段と、
新たな第３の乱数を生成し、前記第３の乱数を含む値を、前記復元した第１の乱数を含む値と合成する手段と、
前記第３の乱数を含む値と前記復元した第２の乱数を含む値とを合成する手段と、
を備える演算・復元装置。
【請求項４】
分散装置及び演算・復元装置を含み、ｎを整数とし、ｋをｎ以下の整数とし、第１整数及び第２整数の各々をｎ個に分散し、前記第１整数及び前記第２整数の各々についてｎ個の分散値のうちｋ個以上を使って、前記第１整数と前記第２整数との間の秘密演算を行うシステムに含まれる演算・復元装置であって、
前記第１整数についての秘匿化に用いられるｋ個以上の乱数の一部である第１の乱数を含む値と、新たに生成した第３の乱数を含む値とを合成した値を第１秘匿化整数に作用させることで前記第１の乱数を含む値を第３の乱数を含む値に変換する第１変換手段と、
前記第２整数についての秘匿化に用いられるｋ個以上の乱数の一部である第２の乱数を含む値と、新たに生成した第３の乱数を含む値とを合成した値を第２秘匿化整数に作用させることで前記第２の乱数を含む値を第３の乱数を含む値に変換する第２変換手段と、
前記第１変換手段によって変換されて得られた前記第３の乱数を有する前記第１秘匿化整数と、前記第２変換手段によって得られた第３の乱数を有する前記第２秘匿化整数とを合成する合成手段と、
を備える演算・復元装置。
【請求項５】
分散装置及び演算・復元装置を含み、ｎを整数とし、ｋをｎ以下の整数とし、第１整数及び第２整数の各々をｎ個に分散し、前記第１整数及び前記第２整数の各々についてｎ個の分散値のうちｋ個以上を使って、前記第１整数と前記第２整数との間の秘密演算を行うシステムに含まれる演算・復元装置であって、
前記第１整数についての秘匿化に用いられるｋ個以上の乱数の積を前記第１整数に直接作用させることで前記第１整数を秘匿化し、前記第２整数についての秘匿化に用いられるｋ個以上の乱数の積を前記第２整数又は前記第２整数の分散値に直接作用させることで、前記第１整数と前記第２整数とを秘匿化したまま用いて所定の演算を行う手段
を備える演算・復元装置。
【請求項６】
分散装置及び演算・復元装置を含み、ｎを整数とし、ｋをｎ以下の整数とし、整数をｎ個に分散し、ｎ個の分散値のうちｋ個以上を使って、２つ以上の整数間の秘密演算を行うシステムに含まれる演算・復元装置であって、
秘匿化整数を復元する手段と、
ｋ個以上の乱数を復元する手段と、
復元した乱数と復元した秘匿化整数とを用いて演算を行い、秘匿化を解除する手段と、
を備える演算・復元装置。
【請求項７】
分散装置及び演算・復元装置を含み、ｎを整数とし、ｋをｎ以下の整数とし、整数をｎ個に分散し、ｎ個の分散値のうちｋ個以上を使って、２つ以上の整数間の秘密演算を行うシステムに含まれる演算・復元装置であって、
ｋ個以上の乱数を生成する乱数生成手段と、
前記乱数生成手段によって生成された前記ｋ個以上の乱数の積を、ｅ進数表現によって複数の桁に分解した整数の各々に直接作用させることで前記整数を秘匿化した秘匿化整数を生成する秘匿化整数生成手段と、
を備える演算・復元装置。
【請求項８】
分散装置及び演算・復元装置を含み、ｎを整数とし、ｋをｎ以下の整数とし、整数をｎ個に分散し、ｎ個の分散値のうちｋ個以上を使って、２つ以上の整数間の秘密演算を行うシステムに含まれる演算・復元装置であって、
ｅ進数で表現された秘匿化整数を復元する復元手段と、
前記復元手段によって復元された前記秘匿化整数を、整数を復元することなく、ｅ進数の原理に従って１つの数値に合成する合成手段と、
を備える演算・復元装置。
【請求項９】
分散装置及び演算・復元装置を含み、ｎを整数とし、ｋをｎ以下の整数とし、整数をｎ個に分散し、ｎ個の分散値のうちｋ個以上を使って、２つ以上の整数間の秘密演算を行うシステムに含まれる分散装置であって、
ｎ個の分散値のうちｋ個以上の分散値を集める収集手段と、
ｋ個以上の乱数を生成する乱数生成手段と、
前記乱数生成手段によって生成された前記ｋ個以上の乱数の積を、前記収集手段によって集めたｋ個以上の分散値を用いて復元した前記整数に直接作用させることで前記整数を秘匿化した秘匿化整数を生成する秘匿化整数生成手段と、
を備える分散装置。
【請求項１０】
分散装置及び演算・復元装置を含み、ｎを整数とし、
ｋをｎ以下の整数とし、整数をｎ個に分散し、ｎ個の分散値のうちｋ個以上を使って、２つ以上の整数間の秘密演算を行うシステムに含まれる分散装置に含まれるコンピュータを、
ｋ個以上の乱数を生成する乱数生成手段、及び、
前記乱数生成手段によって生成された前記ｋ個以上の乱数の積を前記整数に直接作用させることで前記整数を秘匿化した秘匿化整数を生成する秘匿化整数生成手段として機能させるためのプログラム。
【請求項１１】
分散装置及び演算・復元装置を含み、ｎを整数とし、ｋをｎ以下の整数とし、第１整数及び第２整数の各々をｎ個に分散し、前記第１整数及び前記第２整数の各々についてｎ個の分散値のうちｋ個以上を使って、前記第１整数と前記第２整数との間の秘密演算を行うシステムに含まれる演算・復元装置に含まれるコンピュータを、
前記第１整数についての秘匿化に用いられるｋ個以上の乱数の一部である第１の乱数を含む分散値と、前記第２整数についての秘匿化に用いられるｋ個以上の乱数の一部である第２の乱数を含む分散値とを集めて、前記第１の乱数を含む値と前記第２の乱数を含む値とを復元する手段、及び、
前記復元した第１の乱数を含む値と第２の乱数を含む値とを合成する手段として機能させるためのプログラム。
【請求項１２】
分散装置及び演算・復元装置を含み、ｎを整数とし、ｋをｎ以下の整数とし、第１整数及び第２整数の各々をｎ個に分散し、前記第１整数及び前記第２整数の各々についてｎ個の分散値のうちｋ個以上を使って、前記第１整数と前記第２整数との間の秘密演算を行うシステムに含まれる演算・復元装置に含まれるコンピュータを、
前記第１整数についての秘匿化に用いられるｋ個以上の乱数の一部である第１の乱数を含む分散値と、前記第２整数についての秘匿化に用いられるｋ個以上の乱数の一部である第２の乱数を含む分散値とを集めて、前記第１の乱数を含む値と前記第２の乱数を含む値とを復元する手段、及び、
新たな第３の乱数を生成し、前記第３の乱数を含む値を、前記復元した第１の乱数を含む値と合成する手段、及び、前記第３の乱数を含む値と前記復元した第２の乱数を含む値とを合成する手段として機能させるためのプログラム。
【請求項１３】
分散装置及び演算・復元装置を含み、ｎを整数とし、ｋをｎ以下の整数とし、第１整数及び第２整数の各々をｎ個に分散し、前記第１整数及び前記第２整数の各々についてｎ個の分散値のうちｋ個以上を使って、前記第１整数と前記第２整数との間の秘密演算を行うシステムに含まれる演算・復元装置に含まれるコンピュータを、
前記第１整数についての秘匿化に用いられるｋ個以上の乱数の一部である第１の乱数を含む値と、新たに生成した第３の乱数を含む値とを合成した値を第１秘匿化整数に作用させることで前記第１の乱数を含む値を第３の乱数を含む値に変換する第１変換手段、
前記第２整数についての秘匿化に用いられるｋ個以上の乱数の一部である第２の乱数を含む値と、新たに生成した第３の乱数を含む値とを合成した値を第２秘匿化整数に作用させることで前記第２の乱数を含む値を第３の乱数を含む値に変換する第２変換手段、及び
前記第１変換手段によって変換されて得られた前記第３の乱数を有する前記第１秘匿化整数と、前記第２変換手段によって得られた第３の乱数を有する前記第２秘匿化整数とを合成する合成手段として機能させるためのプログラム。
【請求項１４】
分散装置及び演算・復元装置を含み、ｎを整数とし、ｋをｎ以下の整数とし、第１整数及び第２整数の各々をｎ個に分散し、前記第１整数及び前記第２整数の各々についてｎ個の分散値のうちｋ個以上を使って、前記第１整数と前記第２整数との間の秘密演算を行うシステムに含まれる演算・復元装置に含まれるコンピュータを、    前記第１整数についての秘匿化に用いられるｋ個以上の乱数の積を前記第１整数に直接作用させることで前記第１整数を秘匿化し、前記第２整数についての秘匿化に用いられるｋ個以上の乱数の積を前記第２整数又は前記第２整数の分散値に直接作用させることで、前記第１整数と前記第２整数とを秘匿化したまま用いて所定の演算を行う手段として機能させるためのプログラム。
【請求項１５】
分散装置及び演算・復元装置を含み、ｎを整数とし、ｋをｎ以下の整数とし、整数をｎ個に分散し、ｎ個の分散値のうちｋ個以上を使って、２つ以上の整数間の秘密演算を行うシステムに含まれる演算・復元装置に含まれるコンピュータを、
秘匿化整数を復元する手段、
ｋ個以上の乱数を復元する手段、及び、
復元した乱数と復元した秘匿化整数とを用いて演算を行い、秘匿化を解除する手段として機能させるためのプログラム。
【請求項１６】
分散装置及び演算・復元装置を含み、ｎを整数とし、ｋをｎ以下の整数とし、整数をｎ個に分散し、ｎ個の分散値のうちｋ個以上を使って、２つ以上の整数間の秘密演算を行うシステムに含まれる演算・復元装置に含まれるコンピュータを、
ｋ個以上の乱数を生成する乱数生成手段、及び、
前記乱数生成手段によって生成された前記ｋ個以上の乱数の積を、ｅ進数表現によって複数の桁に分解した整数の各々に直接作用させることで前記整数を秘匿化した秘匿化整数を生成する秘匿化整数生成手段として機能させるためのプログラム。
【請求項１７】
分散装置及び演算・復元装置を含み、ｎを整数とし、ｋをｎ以下の整数とし、整数をｎ個に分散し、ｎ個の分散値のうちｋ個以上を使って、２つ以上の整数間の秘密演算を行うシステムに含まれる演算・復元装置に含まれるコンピュータを、
ｅ進数で表現された秘匿化整数を復元する復元手段、及び、
前記復元手段によって復元された前記秘匿化整数を、整数を復元することなく、ｅ進数の原理に従って１つの数値に合成する合成手段として機能させるためのプログラム。
【請求項１８】
分散装置及び演算・復元装置を含み、ｎを整数とし、ｋをｎ以下の整数とし、整数をｎ個に分散し、ｎ個の分散値のうちｋ個以上を使って、２つ以上の整数間の秘密演算を行うシステムに含まれる分散装置に含まれるコンピュータを、
ｎ個の分散値のうちｋ個以上の分散値を集める収集手段、
ｋ個以上の乱数を生成する乱数生成手段、及び、
前記乱数生成手段によって生成された前記ｋ個以上の乱数の積を、前記収集手段によって集めたｋ個以上の分散値を用いて復元した前記整数に直接作用させることで前記整数を秘匿化した秘匿化整数を生成する秘匿化整数生成手段として機能させるためのプログラム。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０００１
【補正方法】変更
【補正の内容】
【０００１】
技術分野
［０００１］
本発明は、分散装置、演算・復元装置、及びプログラムに関する。
背景技術
［０００２］
近年、新たなネットワーク技術としてクラウドコンピューティングが注目されている。クラウドコンピューティングとはユーザの持つデータをクラウドと呼ばれるネットワーク上の複数のサーバにより構成される仮想の大容量ストレージに分散・保管し、そのデータをどこからでもネットワーク経由でユーザが必要に応じてアクセスすることを可能にする技術である。さらに、保管データを有効活用するために、単にデータをストレージするだけでなく、クラウド上に分散・保管されたデータを用いて個々のデータを秘匿しながら任意の計算を行う秘匿計算を実現する技術が求められている。
［０００３］
この秘匿計算を実現する技術の１つとして秘密分散法の利用が注目されている。秘密分散法とは１個の秘密情報をｎ個に分散し、ｎ個に分散した分散値のうち、ｋ個（ｋ≦ｎ）を集めることで元の秘密情報が復元できるという技術である。また、ｋ個未満の分散値からは一切秘密情報に関する情報を得ることができない。この秘密分散法として、Ｓｈａｍｉｒによる（ｋ，ｎ）秘密分散法が良く知られている。Ｓｈａｍｉｒの（ｋ，ｎ）秘密分散法を含む従来の秘密分散システムは分散値を保存するｎ台のデータサーバと、秘密情報を分散するディーラまたは秘密情報を復元する復元端末からなる。すなわち、秘密分散時にオーナは自分が所有する秘密情報の分散をディーラに依頼し、ディーラは秘密分散法を用いてｎ個の分散値を計算して、その値を各々ｎ個のデータサーバに分散保管する。一般に、ディーラは秘密分散時のみ存在するとされる。一方、復元を希望するユーザは復元したい秘密情報に対する分散値をｋ個のデータサーバから復元端末
【国際調査報告】
2016129363.tif 000129
2016129363.tif 000130
2016129363.tif 000131
2016129363.tif 000132
2016129363.tif 000133
2016129363.tif 000134
2016129363.tif 000135
2016129363.tif 000136
2016129363.tif 000137
2016129363.tif 000138
2016129363.tif 000139
2016129363.tif 000140
2016129363.tif 000141