JPWO2016129363A1 - 分散装置、演算・復元装置、及びプログラム - Google Patents

分散装置、演算・復元装置、及びプログラム Download PDF

Info

Publication number
JPWO2016129363A1
JPWO2016129363A1 JP2016574708A JP2016574708A JPWO2016129363A1 JP WO2016129363 A1 JPWO2016129363 A1 JP WO2016129363A1 JP 2016574708 A JP2016574708 A JP 2016574708A JP 2016574708 A JP2016574708 A JP 2016574708A JP WO2016129363 A1 JPWO2016129363 A1 JP WO2016129363A1
Authority
JP
Japan
Prior art keywords
secret information
secret
server
less
integer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2016574708A
Other languages
English (en)
Inventor
惠市 岩村
惠市 岩村
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zenmutech Inc
Original Assignee
Zenmutech Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Zenmutech Inc filed Critical Zenmutech Inc
Publication of JPWO2016129363A1 publication Critical patent/JPWO2016129363A1/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09CCIPHERING OR DECIPHERING APPARATUS FOR CRYPTOGRAPHIC OR OTHER PURPOSES INVOLVING THE NEED FOR SECRECY
    • G09C1/00Apparatus or methods whereby a given sequence of signs, e.g. an intelligible text, is transformed into an unintelligible sequence of signs by transposing the signs or groups of signs or by replacing them by others according to a predetermined system
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Storage Device Security (AREA)

Abstract

秘密情報から、秘密情報を秘匿化した秘匿化秘密情報の分散値を得る。k個以上の秘密情報である乱数α1〜αkから合成値αを生成する(42)。合成値αを新たな秘密情報aに乗算させて秘匿化秘密情報αaを生成し、秘匿化秘密情報の分散値Wa'(xi)及びk個以上の秘密情報である乱数の各々の分散値Wa1(xi)〜Wak(xi)を計算する(44)。分散値Wa'(xi)、Wa1(xi)〜Wak(xi)を、第1〜第nのサーバに送信する(46)。秘密情報α1〜αkから、秘密情報α1〜αkを秘匿化した秘匿化秘密情報αaの分散値Wa'(xi)を得ることができる。

Description

本発明は、秘密分散を用いた秘匿演算システムに関する計算装置に関する。
近年、新たなネットワーク技術としてクラウドコンピューティングが注目されている。クラウドコンピューティングとはユーザの持つデータをクラウドと呼ばれるネットワーク上の複数のサーバにより構成される仮想の大容量ストレージに分散・保管し、そのデータをどこからでもネットワーク経由でユーザが必要に応じてアクセスすることを可能にする技術である。さらに、保管データを有効活用するために、単にデータをストレージするだけでなく、クラウド上に分散・保管されたデータを用いて個々のデータを秘匿しながら任意の計算を行う秘匿計算を実現する技術が求められている。
この秘匿計算を実現する技術の1つとして秘密分散法の利用が注目されている。秘密分散法とは1個の秘密情報をn個に分散し、n個に分散した分散値のうち、k個(k≦n) を集めることで元の秘密情報が復元できるという技術である。また、k個未満の分散値からは一切秘密情報に関する情報を得ることができない。この秘密分散法として、Shamirによる(k,n)秘密分散法が良く知られている。Shamirの(k,n)秘密分散法を含む従来の秘密分散システムは分散値を保存するn台のデータサーバと、秘密情報を分散するディーラまたは秘密情報を復元する復元端末からなる。すなわち、秘密分散時にオーナは自分が所有する秘密情報の分散をディーラに依頼し、ディーラは秘密分散法を用いてn個の分散値を計算して、その値を各々n個のデータサーバに分散保管する。一般に、ディーラは秘密分散時のみ存在するとされる。一方、復元を希望するユーザは復元したい秘密情報に対する分散値をk個のデータサーバから復元端末に集めて復元を行う。この復元端末も一般には、データ復元時のみ存在する。
具体的に、Shamirの(k,n)秘密分散法は式(1)のような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 (1)
さらに、2つの秘密aとbに対して2つの分散値Wa(xj) (式(2))とWb(xj) (式(3))がn個のサーバに分散して保管されていた(j=1,…,n)時、その分散値同士の加算(式(4))を考える。
Wa(xj)=a+a1xj+a2xj2+…+ak-1xjk-1 (2)
Wb(xj)=b+b1xj+b2xj2+…+bk-1xjk-1 (3)
Wa(xj)+Wb(xj)=(a+b)+(a1+b1)xj+(a2+b2)xj2+…+(ak-1+bk-1)xjk-1 (4)
この場合、加算結果である式(4)もまた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.
(I)乗算においてのみ必要なサーバ台数が変化する問題
k-1次の多項式同士の乗算結果は、2k-2次の多項式となる。よってその多項式を解く(各係数を求める)ためには、2k-1個の分散値が必要になり、集める分散値の数が乗算の場合のみ増加するという問題が生じる。すなわち、(k,n)秘密分散法において1つのサーバに1つの分散値を保存している場合、k個のサーバがあれば秘密情報の復元や秘匿加減算は可能であるが、乗算に対しては2k-1個のサーバが必要になり、乗算の場合だけ復元に必要なサーバの数が増加する。例えば、(3,5)秘密分散法や(2,3)秘密分散法の場合、秘密情報の復元と加減算に対しては各々3つ、2つの分散値を集めればよいため、全サーバ数のうち2つまたは1つのサーバが破損しても問題ない。しかし、(3,5)秘密分散法や(2,3)秘密分散法を乗算に用いる場合は、各々2k-1=5個、2k-1=3個のサーバが必要になる。よって、乗算は実現できるが、1つのサーバの破損も許されなくなる。また、(3,4)秘密分散法を用いる場合、秘密情報の復元と加減算は問題ないが、乗算に関しては2k-1=5個の分散値が必要なため、4つのサーバで構成されたシステムでは乗算が実現できない。すなわち、乗算の場合のみシステム構成を変える、または破損耐性を変える必要がある。従って、多項式の次数変化がなく乗算を行える手法があれば、これらの問題を解決することができる。サーバの台数変化のない乗算手法として[2]が提案されている。この手法は以下のように1つのサーバに2つの分散値を持たせ、1つの分散値を秘匿化して乗算を行い、その後乱数を削除するため、サーバ台数を変える必要はないとしている。
秘匿乗算[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)は各々1つずつの乱数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)秘密分散法においてサーバ台数を変化させずに、かつ秘密情報漏えいのない手法は今まで存在していないといえる。また、この手法は後述する(III)秘匿演算の連続に関する問題についても考慮されていない。すなわち、1つのサーバが2つの分散値を持ち、かつ1つが秘匿化されたままでは以下に述べる次数変換を適用できず、連続演算できない。また、(II)の除算に関する問題も全く考慮されていない。さらに、(VI)の分散値の小型化や(VII)の多値化法式による高速化も考慮されていない。
(II)除算に関する問題
次に、除算について考える。上記(2)(3)を乗算することによって定数項にa・bを持つ分散値を作れるが、(2)を(3)で割ってもb/aを定数項に持つ分散値は得られない。すなわち、分散値を用いて秘密情報同士の除算を実現する手法は難しく、少なくとも乗算と同様の手法では実現できないことが知られている。よって、従来法及び[2]の手法では除算用に特殊な手段を用意する必要がある。よって、除算も乗算と同様の手段で実現できれば秘匿演算の効率化が実現できる。
(III)秘匿演算の連続に関する問題
前述した秘匿演算の連続について考える。例として、秘密情報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)
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個あれば解くことができる。
よって、Rからk個の分散値を集めればa・bの復元が可能である。すなわち、f(x)=Wa(x)、g(x)=Wb(x)とすればh(x)=Wa(x)Wb(x)であるが、(7)式または(8)式の変換により、h(x)の下位半分の次数をもつh’(x)=Wa(x)Wb(x)に変換でき、Rはh’(x)の分散値となる。よって、Rのk個の分散値にWc(x)のk個の分散値を足せばWa(x)Wb(x)+Wc(x)に対するk個の分散値が得られる。ただし(8)の演算のために、n個のサーバに分散されたWiを1つの装置に集めて、その装置が各iに対する(8)式の計算(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が得られる。しかしこのときも、攻撃者が1つのサーバを盗聴していれば、以下のように全ての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が復元者以外の攻撃者に漏洩することは問題がある。よって、積和演算のように乗算と加算を連続して行う場合、連続演算が可能なアルゴリズムとすることに加えて、その途中結果を秘匿して次の演算につなげることも重要である。
(IV)秘匿検索に関する問題
(I)〜(III)は、秘匿乗算を含む秘匿演算に関連する問題であるが、最初に述べたように秘密情報が分散値として大容量ストレージに分散・保管され、その分散値をネットワーク経由でユーザがアクセスする場合、検索に関する以下のような問題も生じる。例えば、企業の経理処理を行うようなアプリを考え、その入金や出金に関する金額を秘匿するために上記秘密分散法を用いているとする。すなわち、企業の社員Aは自分の業務上発生した入金や出金を企業のn台のサーバに秘密分散しており、企業は全社員からの入金や出金に関する分散値を用いて合計や平均、分散などを計算し管理しているとする。この場合、n台のサーバには入出金に関する金額の分散値と一緒に、その金額が生じた日時を検索IDとして保存している必要がある。これによって、例えば社員Aがある日時の入出金を確認したい場合、その日時を検索IDとしてk個のサーバに送れば、各サーバはその検索IDを用いて対応する分散値を検索し社員Aに伝え、社員Aはそれを復元して金額情報を確認できる。また、そのアプリの秘匿計算を利用する場合、ある期間を指定すれば、そのアプリはその期間内にある分散値を、日時を検索IDとして集め、その期間内の金額の合計や、平均値、分散などといった各種統計値を、秘密情報である各金額をサーバに知られることなく計算でき、企業の会計担当者などに伝えることができる。しかし逆に、金額を指定し、その金額が発生した日時を特定するといった検索はできない。例えば社員Aが発生した金額のみ記憶しており、それが発生した日時を検索しようとしても、その金額は秘密分散されているため、その分散値がわからなければ検索IDを逆引きすることはできない。さらに、日時から金額を検索する場合においても、日時情報は秘匿されていないため、どの日時の情報が検索されているかサーバは知ることができる。すなわち、企業Aがデータ保管のためのサーバシステムをアウトソーシングしている場合、アウトソーシング先の企業は企業Aにおいて重要な取引があった日(よく検索されている日)などを知ることができる。これに対して、検索IDである日時を暗号化して保存したとすれば、サーバはいつの日時のデータが検索されているかわからないが、暗号化したユーザしか金額の検索ができない。企業の取引に関する金額データなどの場合、そのデータは複数の人によってアクセスされると考えられるが、この場合、暗号化に用いたその暗号鍵を複数の人で共有する必要ができ安全性が低下する。よって、ユーザが何を検索しているかサーバにわからせず、暗号鍵のような特殊な情報を共有しなくても秘密分散した分散値を検索できる仕組みが必要である。また、秘密情報と検索IDは相互に検索されることがあるので、秘密情報の分散値が秘匿演算可能な形であれば、検索IDの分散値も同様の形をしていることが望まれる。
(V)分散値の秘匿更新に関する問題
さらに、秘密分散によって秘匿演算及び秘匿検索を実装できるシステムがネットワーク上に実現できた場合、そのシステムが保管している情報の更新は安全性を向上させるために必要なもう1つの大きな課題である。すなわち、n台のサーバからなるシステムがネットワーク上に構成された場合、秘密分散法によりk-1台までの情報漏えい(不正アクセス)があったとしても秘密情報は安全であるが、k-1台以下の情報漏えいがあった場合それをそのままにしていては、攻撃を受け続けた場合、いつかk台の情報が漏洩する可能性がある。よって、定期的にまたはその情報を使用するたびに保管している情報を更新できれば安全性が保たれる。具体的には、(1)の形で保存されている分散値の秘密情報sを変えずに乱数a 1〜a k-1を新たな乱数に更新できれば、前の不正アクセスで漏洩した分散値を無効にできる。また、安全性を向上させるため式(1)の閾値kの値を大きくする場合も、秘密情報sは変えずに多項式の次数及び乱数を変更しなければならない。さらに、秘密情報s自体も使用する毎に変更する場合も分散値の更新が必要になる。これらに対して自明な方法としては、システムが一旦k個の分散値を集め、秘密情報sを復元して新たな多項式をたてて再分散を行うことが考えられるが、この場合更新の過程で秘密情報sが復元されるため安全性が低下する。一方、分散値の更新に関しては[3]が知られているが、この手法はn-k台のサーバが分散値の差分情報の復元処理を行うため効率的ではない。さらに、n-k台のサーバが全サーバの更新に必要な差分情報を知るため、n-k台のうちの1台のサーバを盗聴されると他のサーバの更新値が漏洩し、安全性が低下する。よって、安全性を低下させず、かつ効率的に分散値を更新できる手法が必要である。また、従来手法は秘密情報及び各係数が秘匿化されていない、すなわち分散値が秘匿化されていない場合を想定した更新法であり、後述する実施の形態に示す秘密情報及び各係数が秘匿化されている、すなわち分散値が秘匿化されてい場合の更新法は知られていない。よって、秘匿化された分散値に対しても適用できる更新法が望まれる。
(VI)記憶容量の小型化に関する問題
秘密分散法は1つの秘密情報をn個に分散するため、大きな記憶容量を必要とする。記憶容量の小型化を実現するために、分散情報サイズを小型化する(k,L,n)ランプ型秘密分散法や、分散情報の数を削減する(k,n)非対称秘密分散法[4]などが知られている。ランプ型秘密分散法は最も大きな記憶容量削減を実現する一方、秘密情報の復元はk台のサーバがあれば実行できるため、サーバを提供している企業などがk台のサーバの情報を集めれば秘密情報の所有者であるユーザの意思に関係なく秘密情報の復元が可能である。それに対して、非対称秘密分散は記憶容量の小型化と、秘密情報の復元にユーザ自身が参加可能という特徴を持ち、ユーザが参加しなければ秘密情報は復元されないので、個人情報の利用などにおいて大きな役割を果たす。よって、ランプ型秘密分散法と非対称秘密分散に対して、かつ上記(I)〜(V)の特徴をもつ秘匿計算、秘匿検索、秘匿更新が実現できれば、個人情報の秘匿演算に同様の効果をもたらすことが期待される。さらに、これらの手法の組み合わせは考慮されておらず、その組合せによって最適な小型化が期待できる。
(VII)処理の高速化の問題
以上ではShamirの(k,n)秘密分散法を基本として説明したが、Shamir法は多項式の合成や多項式を解く処理が必要であり、処理が効率的でない。それに対して、多項式処理を行わず、XOR演算のみを用いて高速に(k,n)秘密分散を実行する手法(以降、XOR法)なども知られている。しかし、XOR法は秘密情報をビット列として扱うために、秘密情報を数値として扱う演算、すなわち秘匿演算を実現することができなかった。そこで、本発明ではXOR法を拡張し、秘密情報をビット列ではなく数値として扱い、秘匿演算できる手法にする。ただし、XOR法の秘密情報をビット列ではなく数値として扱い秘匿加算を行う手法に関しては既に提案されている[5]が、秘匿乗算については提案されていない。このXOR法の拡張法(以降、多値化法)は秘密情報の復元は分散値の加算と減算だけで実現できるため、多項式を解く必要があるShamir法と比べ、高速に演算が実行できる。よって、XOR法の拡張方式に関しても上記(I)〜(V)の特徴をもつ秘匿演算、秘匿検索、秘匿更新が実現できれば非常に効率的な処理が実現できる。
(VIII)総合的な秘密分散及び秘匿計算に関する問題
よって、上記の特徴を全て実現する(k,n)秘密分散法に適した手法が実現されることは重要である。特に、XOR法に対するランプ型秘密分散法は提案されているが、XOR法を拡張した多値化法に対応するランプ型秘密分散法は提案されていない。また、非対称秘密分散法と多値化法の組み合わせ、非対称秘密分散法をランプ型秘密分散法の組み合わせ、非対称秘密分散法と多値化法のランプ型秘密分散法との組み合わせも提案されておらず、さらにそれらを用いた秘匿演算も提案されていない。特に、非対称秘密分散法と多値化法の組み合わせ、非対称秘密分散法とランプ型秘密分散法、非対称秘密分散法と多値化法に対応するランプ型秘密分散法の組合せは記憶容量の小型化と高速化を同時に実現できる。
1つの側面として、上記何れかの問題を解決することが目的である。
上記目的達成するため請求項1に記載の発明は、nを整数、kをn以下の整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて分散値を計算する計算装置であって、k個以上の秘密情報の各々の分散値を計算する手段と、前記k個以上の秘密情報から合成値を生成する手段と、前記合成値を新たな秘密情報に作用させた秘匿化秘密情報を生成する手段と、を備える。
請求項2に記載の発明は、nを整数、kをn以下の整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて秘匿演算をする計算装置であって、
第1の秘匿化秘密情報に用いられた第1の乱数を構成する複数の乱数のうちの1つである第1の部分乱数の分散値と、第2の秘匿化秘密情報に用いられた第2の乱数を構成する複数の乱数うちの1つである第2の部分乱数の分散値とを集めて、前記第1の部分乱数と前記第2の部分乱数を復元する手段と、
前記復元した第1の部分乱数と第2の部分乱数を合成する手段と、
を備える計算装置。
請求項3に記載の発明は、nを整数、kをn以下の整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて秘匿演算をする計算装置であって、k個以上の乱数を用いて秘匿化された秘匿化秘密情報を復元する手段と、前記復元した秘匿化秘密情報と他の値とに基づいて所定の演算をする手段と、を備える。
請求項4に記載の発明は、nを整数、kをn以下の整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて秘密情報を復元する計算装置であって、k個以上の乱数を用いて秘匿化された秘匿化秘密情報を復元する手段と、前記乱数を合成する手段と、前記合成された乱数を用いて、前記復元された前記秘匿化秘密情報の秘匿化を解除する手段と、を備える。
請求項5に記載の発明は、nを整数、kをn以下の整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて秘匿演算をする計算装置であって、k個以上の乱数を用いて秘匿化された秘匿化秘密情報における第1の合成乱数と、第2の合成乱数を構成するk個以上の乱数とを組み合わせて、前記第1の合成乱数を変換する手段を備える。
請求項6に記載の発明は、nを整数、kをn以下の整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて秘匿演算をする計算装置であって、秘匿化されていない分散値に、別の秘匿化秘密情報を構成するk個以上の乱数を作用させて秘匿化する手段を備える。
請求項7に記載の発明は、nを整数、kをn以下の整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて分散値を計算する計算装置であって、複数の新たな秘密情報を秘匿化して複数の分散値を計算する手段と、前記複数の分散値の各々の並び順を、前記秘匿化する前の前記複数の新たな秘密情報の予め定められた並び順に応じて指定する手段と、を備える。
請求項8に記載の発明は、nを整数、kをn以下の整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて検索する秘密情報を指定する計算装置であって、検索用秘密情報に乱数を作用させ秘匿化する手段と、前記システムから受信した値に前記乱数を作用させる手段と、を備える。
請求項9に記載の発明は、nを整数、kをn以下の整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて指定された秘密情報を検索する計算装置であって、前記秘密情報に対応する第1の検索用秘密情報を第1の乱数で秘匿化すると共に、入力された第2の検索用秘密情報を第2の乱数で秘匿化する手段と、前記秘匿化された前記第1の検索用秘密情報に基づく第1の値と前記秘匿化された前記第2の検索用秘密情報に基づく第2の値との差に基づいて、前記第1の検索用秘密情報と前記第2の検索用秘密情報との差を取得する手段と、を備える。
請求項10に記載の発明は、nを整数、kをn以下の整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて分散値の更新を行う計算装置であって、乱数で秘密情報が秘匿化されて得られた分散値に対して、新たな乱数を生成し、前記生成した新たな乱数を新たな分散値として保存する手段を備える。
請求項11に記載の発明は、nを整数、kをn以下の整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて分散値の更新を行う計算装置であって、k個以上の補正情報から秘密情報を更新する更新値を計算する手段を備える。
請求項12に記載の発明は、nを整数、kをn以下の整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて分散値を計算する計算装置であって、生成されたh(1〜k−1までの整数)個の乱数を分散値として定め、前記h個の分散値と前記秘密情報とに基づいて、n−h個の分散値を計算する手段と、k個以上の秘密情報から合成値を生成する手段と、前記合成値を新たな秘密情報に作用させた秘匿化秘密情報を計算する手段と、を備える。
請求項13に記載の発明は、nを整数、kをn以下の整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて分散値を計算する計算装置であって、秘密情報をe進数d桁の数値としたとき、前記秘密情報をL(n−1)分割を行ってe進数d/L(n−1)桁の数値とする手段と、前記数値とされた秘密情報の分散、復元、及び秘匿演算の少なくとも1つを、

より大きな素数を法として、乗算及び除算を加算及び減算に分解することなく、加算と減算だけで行う手段と、を備える。
請求項14に記載の発明は、nを整数、kをn以下の整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて秘匿演算または復元をする計算装置であって、秘匿化され複数の桁に分割された秘匿化秘密情報の桁に合わせて所定の演算を行う手段を備える。
請求項15に記載の発明は、nを整数、kをn以下の整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて秘匿演算をする計算装置であって、前記秘密情報をp1以下の整数、乱数をp2以下の整数として、それらを乗算したp1*p2以下の秘匿化秘密情報をp1*p2より大きな素数を法として秘密分散または復号する手段を備える計算装置。
請求項16に記載の発明は、nを整数、kをnより小さい整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおける秘匿演算または復元を行う計算装置であって、乱数の加算によって秘密情報を秘匿した秘匿化秘密情報と、前記乱数が秘密分散された分散値とを加減算する手段を備える。
請求項17に記載の発明は、nを整数、kをn以下の整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステム秘密情報の格納位置を検索する計算装置であって、第1の検索用秘密情報と第2の検索用秘密情報の差を取得する手段と、前記差に応じて前記格納位置を定める手段と、を備える。
請求項18に記載の発明は、nを整数、kをn以下の整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて秘密情報を更新する計算装置であって、秘密情報の分散値に、予め定められた第1の乱数を乗算しかつ予め定められた第2の乱数を加算する手段を備える。
本願発明は、乗算を、必要なサーバの台数を変えず、かつ安全に行うことができる。
本願発明は、除算を、乗算と同様の手段で実現できる。
本願発明は、連続した秘匿演算を矛盾なく実現できる。
本願発明は、例えば、検索IDから秘密情報への及び秘密情報から検索IDへの双方向の検索を実現できる。
本願発明は、効率的かつ安全にその分散値を更新することができる。
本願発明は、記憶容量の小型化を実現できる。
本願発明は、処理の高速化を実現できる。
本願発明は、記憶容量の小型化と共に処理の高速化を実現できる。
第1〜第10の実施の形態のシステムを示す図である。 第1のディーラ装置12Aの構成を示すブロック図である。 分散処理プログラムを示すフローチャートである。 各サーバの分散値を示す図である。 分散処理プログラムを示すフローチャートである。 各サーバの分散値を示す図である。 αaの復元・送信処理プログラムを示すフローチャートである。 図7の復元・送信処理の内容を示す図である。 (A)は乗算処理プログラムを示すフローチャートであり、(B)は各サーバの分散値を示す図である。 αβの復元・計算・送信処理プログラムを示すフローチャートである。 図10の復元・計算・送信処理の内容を示す図である。 乗算結果取得処理プログラムを示すフローチャートである。 図12の乗算結果取得処理の内容を示す図である。 分散処理プログラムを示すフローチャートである。 各サーバの分散値を示す図である。 γcの復元・送信処理プログラムを示すフローチャートである。 図16のγcの復元・送信処理の内容を示す図である。 (A)は乗算処理プログラムを示すフローチャートであり、(B)は各サーバの分散値を示す図である。 αβγの復元・計算・送信処理プログラムを示すフローチャートである。 図19のαβγの復元・計算・送信処理の内容を示す図である。 乗算結果取得処理プログラムを示すフローチャートである。 図21の乗算結果取得処理の内容を示す図である。 分散処理プログラムを示すフローチャートである。 分散処理プログラムを示すフローチャートである。 αβの復元・送信処理プログラムを示すフローチャートである。 復元処理プログラムを示すフローチャートである。 αβabの送信処理プログラムを示すフローチャートである。 (a)は除算処理プログラムを示すフローチャートであり、(B)は各サーバの分散値を示す図である。 α/βの復元・計算・送信処理プログラムを示すフローチャートである。 図29のα/βの復元・計算・送信処理の内容を示す図である。 除算結果取得処理プログラムを示すフローチャートである。 図31の除算結果取得処理の内容を示す図である。 (A)は除算処理プログラムを示すフローチャートであり、(B)は各サーバの分散値を示す図である。 αβの復元・計算・送信処理プログラムを示すフローチャートである。 図34のαβの復元・計算・送信処理の内容を示す図である。 乗算結果取得処理プログラムを示すフローチャートである。 図36の乗算結果取得処理の内容を示す図である。 β/αの復元・計算・送信処理プログラムを示すフローチャートである。 図38のβ/αの復元・計算・送信処理の内容を示す図である。 β/αの計算・送信処理プログラムを示すフローチャートである。 (A)はβa、βbの計算・送信処理プログラムを示すフローチャートであり、(B)はβa、βbの計算・送信処理の内容を示す図である。 積和処理プログラムを示すフローチャートである。 復元処理プログラムを示すフローチャートである。 乗算処理プログラムを示すフローチャートである。 αβの復元・送信処理プログラムを示すフローチャートである。 復元処理プログラムを示すフローチャートである。 分散処理プログラムを示すフローチャートである。 分散処理プログラムを示すフローチャートである。 乗算処理プログラムを示すフローチャートである。 次数変換処理プログラムを示すフローチャートである。 αβの計算送信処理プログラムを示すフローチャートである。 の復元・送信処理プログラムを示すフローチャートである。 復元処理プログラムを示すフローチャートである。 の計算・送信処理プログラムを示すフローチャートである。 ’の計算・送信処理プログラムを示すフローチャートである。 新たな分散値の記憶処理プログラムを示すフローチャートである。 δの生成・送信処理プログラムを示すフローチャートである。 更新処理プログラムを示すフローチャートである。 更新処理プログラムを示すフローチャートである。 (A)は更新処理プログラムを示すフローチャートであり、(B)は復元処理プログラムを示すフローチャートである。 (A)は分散処理プログラムを示すフローチャートであり、(B)は復元処理プログラムを示すフローチャートである。 分散処理プログラムを示すフローチャートである。 (A)、(B)は、第1のサーバ14Xの記憶装置34に記憶されている分散値の記憶状態を示すである。 検索処理プログラムを示すフローチャートである。 分散値F’(x)の計算・送信処理プログラムを示すフローチャートである。 差tの計算・送信処理プログラムを示すフローチャートである。 分散値Fu(x)の計算・送信処理プログラムを示すフローチャートである。 分散値Fo(x)の計算・送信処理プログラムを示すフローチャートである。 差の計算・送信処理プログラムを示すフローチャートである。 検索処理プログラムを示すフローチャートである。 分散処理プログラムを示すフローチャートである。 乗算処理プログラムを示すフローチャートである。 乗算処理プログラムを示すフローチャートである。 αβの計算・送信処理プログラムを示すフローチャートである。 復元処理プログラムを示すフローチャートである。 復元処理プログラムを示すフローチャートである。 積和処理及び復元処理プログラムを示すフローチャートである。 秘匿乗算(乗算及び復元)処理プログラムを示すフローチャートである。 分散値の計算・送信処理プログラムを示すフローチャートである。 差の計算・送信処理プログラムを示すフローチャートである。 検索処理プログラムを示すフローチャートである。 分散処理プログラムを示すフローチャートである。 分散処理プログラムを示すフローチャートである。 復元処理プログラムを示すフローチャートである。 復元処理プログラムを示すフローチャートである。 (A)は分散処理プログラムを示すフローチャートであり、(B)は第1のサーバ14Xの記憶装置34に記憶されている分散値の記憶状態を示す図である。 jの指示処理プログラムを示すフローチャートである。 j'(xi)の計算送信処理プログラムを示すフローチャートである。 検索処理プログラムを示すフローチャートである。 分散処理プログラムを示すフローチャートである。 復元処理プログラムを示すフローチャートである。 復元処理プログラムを示すフローチャートである。 分散処理プログラムを示すフローチャートである。 分散処理プログラムを示すフローチャートである。 αjβjの計算送信処理プログラムを示すフローチャートである。
<第1の実施の形態>
(全体構成)
最初に、第1の実施の形態〜第10の実施の形態の全体の構成を説明する。
(k,n)秘密分散法を用いて秘密情報の分散保管、秘匿計算、秘匿検索、秘匿更新を行う図1に示すシステムを考える。システムは、秘密情報の分散を行う複数のディーラ装置を備えている。図1では、3つのディーラ装置、即ち、第1のディーラ装置12A、第2のディーラ装置12B、及び第3のディーラ装置12Cを備えている例を示している。また、システムは、分散されたn個の分散値を独立に保管するn個のサーバ、即ち、第1のサ−バ14x、第2のサ−バ14x、・・・第n個のサ−バ14x(以降、サ−バシステムともいう)を備えている。更に、システムは、秘密情報または秘匿演算された結果の復元を行う復元装置16を備えている。図1では、復元装置16は1つのみ示しているが、複数の復元装置16を備えることもできる。なお、複数の復元装置16を備える場合でも、各復元装置16は以下に示す処理を実行する。また、システムは、検索サーバ18を備える場合もある。第1のディーラ装置12A〜第3のディーラ装置12C、第1のサ−バ14x〜第n個のサ−バ14x、及び復元装置16は、インタ−ネット等のネットワ−ク10を介して相互に接続されている。これに対し、検索サーバ18は、ネットワ−ク10を介さずに、第1のサ−バ14x〜第n個のサ−バ14xの各々に直接接続されている。
第1のディーラ装置12A〜第3のディーラ装置12C、第1のサ−バ14x〜第n個のサ−バ14x、復元装置16、及び検索サーバ18は同様の構成となっているので、以下、第1のディーラ装置12Aの構成を説明し、その他の装置の説明を省略する。
図2には、第1のディーラ装置12Aの構成を示すブロック図である。図2に示すようにある第1のディーラ装置12Aは、CPU22、ROM24、及びRAM26を備えている。また、第1のディーラ装置12Aは、表示装置30、入力装置32、記憶装置34、及びインターフェース(I/F)36を備えている。これらの各装置は、バス28を介して相互に接続されている。インターフェース(I/F)36は、ネットワ−ク10に接続されている。なお、検索サーバ18のインターフェース(I/F)36は、ネットワ−ク10を介さずに、第1のサ−バ14x〜第n個のサ−バ14xのインターフェース(I/F)36に接続されている。ROM24には、後述する各処理のプログラムが記憶されている。
秘密情報をもつオ−ナは第1のディーラ装置12A〜第3のディーラ装置12Cを操作する。演算結果を知ることができるユ−ザ(復元者)は復元装置16を操作する。第1のサ−バ14x〜第n個のサ−バ14xは正当なオ−ナまたは復元者からの通信だけを受け付け、不正な通信は拒否する。さらに、第1のディーラ装置12A〜第3のディーラ装置12C、及び第1のサ−バ14x〜第n個のサ−バ14xと復元装置16との通信は暗号などにより安全な通信路が構築されている。一般に、第1のディーラ装置12A〜第3のディーラ装置12Cや復元装置16は各オ−ナや復元者が個別に有する。第1のディーラ装置12A〜第3のディーラ装置12Cをサ−バシステムの入力口、復元装置16をサ−バシステムの出力口として備えることもできる。
まず、図1のシステムが持つ秘匿検索機能について説明する。オ−ナが第1のディーラ装置を使う場合を考える。オーナは自分の秘密情報の分散値を第1のディーラ装置12Aによって計算し、自分に割り当てられた各サ−バの領域にその分散値を保管する。ただし、各分散値はそれを検索するための識別データ、即ち、検索IDまたは検索IDに関する分散値とともにサ−バシステムに保存される。
秘匿検索を行う場合、オーナは第6の実施の形態に示す手法を用いて検索IDを分散する。情報の検索・復元を望む正当な復元者は検索IDを復元装置16に示し、復元装置16は第6の実施の形態において説明する手法を用いてそれに対応する情報をサ−バシステムに送る。サ−バシステムは送られてきた情報に対応する秘密情報の分散値があればそれを復元装置16に送信、当該秘密情報の分散値がなければ、当該秘密情報の分散値がないことを伝える。検索IDに対応する秘密情報の分散値を得た復元装置16はそれから秘密情報または秘匿計算の結果の復元を行う。ここで、システムは第6の実施の形態に示す秘匿検索を行うとしたが、システムは複数の機能を有しているので、秘匿検索の機能が必要ない場合、秘匿検索の機能を使わず通常の検索を行うこともできる。
次に図1のシステムがもつ加減乗除を含む演算を秘密に行う秘匿演算機能について説明する。復元者が検索ID(またはその条件式など)により演算対象と、それに対する演算法を復元装置16に示すと、復元装置16は上述の秘匿検索機能(秘匿検索を使わない場合、通常の検索機能)を用いて検索IDを秘匿検索し、そのIDに対応するサ−バシステムに保存されている演算対象となる分散値を得る。サーバシステムはそれを用いて指定された演算を秘匿計算し、最終結果の分散値を得る。最終結果の分散値を得た復元装置16はそれを復元して最終結果を得る。第1の実施の形態〜第4の実施の形態は本発明による秘匿乗算法、秘匿除算法、連続秘匿演算法(秘匿加算法、秘匿減算法を含む)について、各ディーラ装置、サ−バシステム、復元装置16が行う処理を説明する。ただし、本発明において秘匿演算は主にサ−バシステムが担当するが、復元装置16または各ディーラ装置が秘匿演算に協力することがある。一般に、秘匿演算は秘密情報に対して行われるが、検索IDに対して行えば検索IDによる条件式の秘匿演算となる。よって、検索IDを秘匿して条件式を演算する場合もこの秘匿計算機能は用いられる。ただし、秘匿検索や秘匿更新などの機能のみを使いたい場合、この秘匿演算機能は使われず、通常の演算機能をもつ。
また、図1のサ−バシステムは定期的またはある秘密情報に対する分散値を使用する毎などの定められたタイミングで行う保管情報の秘匿更新機能をもつ。これは第5の実施の形態において、種々の場合に対する更新法が説明される。ただし、秘匿更新を行わない場合、この機能は使われないこともある。
さらに、第1の実施の形態〜第6の実施の形態はShamirの(k,n)秘密分散法を例として説明されるが、第7の実施の形態において、記憶容量の削減を実現しながら秘匿検索、秘匿演算、秘匿更新をする非対称秘密分散法に対して、記憶容量の削減と計算量の削減を同時に実現する手法を示す。即ち、本発明が非対称秘密分散法に対しても有効であることを示す。ただし、全体構成は図1と同様である。
また、第8の実施の形態に非対称秘密分散法と異なるやり方で記憶容量の削減を行うランプ型秘密分散法に対して、記憶容量の削減と計算量の削減を同時に実現しながら秘匿検索、秘匿演算、秘匿更新をする手法を示す。即ち、本発明がランプ型秘密分散法に対しても有効であることを示す。ただし、全体構成は図1と同様である。
さらに、第9の実施の形態において秘密情報をビット列として扱い、秘密情報の分散と復元をXORのみで行う(k,n)秘密分散法を拡張し、秘密情報を数値として扱う手法(多値化法)について説明する。これを用いることによって計算量が削減され、第1の実施の形態〜第6の実施の形態の秘匿検索、秘匿検索、秘匿更新の各機能が高速に行えることを示す。即ち、本発明が多値化法に対しても有効であることを示す。ただし、全体構成は図1と同様である。
最後に、非対称型秘密分散法と多値化法またはランプ型多値化法を組み合わせた方法に対しても、本発明による提案が有効であることを第10の実施の形態に示す。これによって、第1の実施の形態〜第6の実施の形態に示す各機能が小型かつ高速に行えるシステム(第1の実施の形態)が実現され、本発明の有効性が示される。
(第1の実施の形態の具体的内容)
Shamirの(k,n)秘密分散法に対して閾値kを変化させない秘匿乗算法を以下に示す。第1のディーラ装置12Aが秘密情報aを持ち、第2のディーラ装置12Bが秘密情報bを持つ。以下では、a,bを秘匿したままa・bの乗算結果を得る場合を示す。
前提として、生成する乱数は0を含まないとし、第1のサ−バ14x〜第n個のサ−バ14xの識別データ(サ−バID)であるx〜xは公開の値である、即ち、他の装置は、各サーバIDを記憶しているとする。また、a,bは素数p以下の整数とし、演算はq(>p、uは1以上の整数。ただし、元々pを大きくとった場合はp=qとしてもよい)を素数として、qを超えた値に対してはその余りをとる法演算を用いて行われる。αiやβi(i=1,…,k)などの乱数は素数q以下の整数とする。さらに、パラメ−タが実数の場合でも、以下のようにすれば整数として扱える。まず、実数は小数点以下の位が定められているとする。例えば、小数点第2位までとされる場合、100倍すれば整数として扱える。よって、実数を秘密分散する場合、実数は桁上げをして整数として表す(これを実数の整数表現と呼ぶ)。その小数点位置は別に記憶されている、または規定によって予め定められているとする。よって、実数の整数表現同士の和は整数の和と同様に扱え、小数点位置も変化しない。それに対して、実数の整数表現同士の積も整数の積と同様に扱えるが、小数点位置に変化が生じる。例えば、小数点第2位の実数同士の積を計算する場合、小数点第4位の実数となる。前述のように、全ての実数は小数点以下の位が定められているとする場合、小数点第3位以下は切り捨てまたは四捨五入されて、積も小数点第2位の実数とする。このように小数点位置の規定に従って小数点位置の調整を行い実数に戻すことを実数化と呼ぶ。一般に、実数はコンピュ−タ上では固定小数点表現と浮動小数点表現があるが、これらはあくまで表現であるので上記のような規則が定められていればどちらにも対応できる。以上の前提は全実施の形態を通して共通である。
(秘匿乗算1(基本形))
以下、秘匿乗算1(基本形)を説明する。秘匿乗算1(基本形)は、分散、乗算、及び復元の各処理により実行される。
[分散]
まず、分散(秘匿分散)を、図3〜図6を参照して説明する。
第1のディーラ装置12AのCPU22は、図3に示す分散値処理を実行する。
ステップ42で、k個の乱数αを生成し、その積α=α・α・・・αを計算する。
ステップ44で、以下の分散値を計算する。
Wa’(x)=α(a+a0,1+・・・+a0,k−1 k−1
Wa1(x)=α+a1,1+・・・+a1,k−1 k−1

Wak(x)=α+ak,1+・・・+ak,k−1 k−1
ただし、ah,j(h=0,・・・,k、j=1,・・・,k−1)は乱数,xは上記のように公開されているサ−バID(i=1,…,n)である。
ステップ46で、第1のサ−バ14x〜第nのサ−バ14xに分散値Wa’(x)〜Wak(x)を送信する。
n=4、k=3とすると、第1のサ−バ14x〜第nのサ−バ14xの分散値Wa’(x)〜Wak(x)は、図4に示す通りである。
第2のディーラ装置12BのCPU22は図5に示す分散処理を実行する。
ステップ52で、k個の乱数βを生成し、その積β=β・β・・・βを計算する。
ステップ54で、以下の分散値を計算する。
Wb’(x)=β(b+b0,1+・・・+b0,k−1 k−1
Wb(x)=β+b1,1+・・・+b1,k−1 k−1

Wb(x)=β+bk,1+・・・+bk,k−1 k−1
ただし、bh,j(h=0,・・・,k、j=1,・・・,k−1)は乱数,xはサ−バID(i=1,…,n)
ステップ56で、第1のサ−バ14x〜第nのサ−バ14xに分散値Wb’(x)〜Wb(x)を送信する。
n=4、k=3とすると、第1のサ−バ14x〜第nのサ−バ14xの分散値Wb’(x)〜Wb(x)は、図6に示す通りである。
[乗算]
次に、乗算を図7〜図9を参照して説明する。
サ−バシステム内の、例えば予め定められた1つのサ−バ、例えば、第1のサ−バ14xのCPU22は、図7に示すαaの復元・送信処理を実行する。図7のステップ62(図8も参照)で、自身のサーバ14x及び他のサ−バ14x〜14xから、Wa’(x)をk個集め、ステップ64でαaを復元し、ステップ66で、αaを、演算に参加する他のサ−バ、例えば、他の全てのサ−バ14x〜14xに送信する。その様子を図8に示す。
サ−バj(j=1,…,n)、例えば、全てのサーバ(第1のサーバ14x〜第nのサーバ14x)の各々のCPU22は、図9(A)に示す乗算処理を実行する。即ち、ステップ68で、自分がもつWb’(x)に送られてきたαaをかけて、以下のWab’(x)を生成する。
Wab’(x)=αβa(b+b0,1+・・・+b0,k−1 k−1
n=4、k=3の場合の、第1のサーバ14x〜第4のサーバ14xにおけるWab’(x)〜Wab’(x)は、図9(B)に示す通りである。
[復元]
次に、復元を、図10〜図13を参照して説明する。
復元に参加するサ−バj(j=1,…,k)、即ち、例えば、予め定められた第1のサ−バ14x〜第kのサ−バ14xの各々のCPU22は、図10のαβの復元・計算・送信処理を実行する。即ち、ステップ72(図11も参照)で、指定されたjに応じたWa(x)とWb(x)を集め(i=1,…,k)、ステップ74で、αとβを1つずつ復元する。図11では、第1のサ−バ14xはj=1が指定されてα1とβ1を復元し、第2のサ−バ14x2はj=2が指定されてα2とβ2を復元し、第3のサ−バ14x3はj=3が指定されてα3とβ3を復元する。
ステップ76(図11も参照)で、積αβを計算し、ステップ78で、Wab’(x)とαβを復元装置16に送信する。図11では第1のサ−バ14xはWab’(x1)とα1β1を、第2のサ−バ14x2はWab’(x2)とα2β2を、第3のサ−バ14x3はWab’(x3)とα3β3を復元装置16に送信する。よって、上記例では、復元装置16には、図11に示すデータが送信されている。
復元装置16のCPU22は、図12の乗算結果取得処理を実行する。即ち、ステップ82(図13も参照)で、k個のWab’(x)からαβabを復元する。
ステップ84(図13も参照)で、αβ(j=1,・・・,k)からαβを合成し、ステップ86(図13も参照)で、αβabをαβで割ってabを得る。
上記演算の第1の特徴を説明する。まず、請求項1に示すように[分散]のステップ42(図3)、ステップ52(図5)で、それぞれk個の乱数αとβ(i=1,…,k)を個別に生成した後、ステップ44(図3)、ステップ54(図5)で分散値を計算し、ステップ46(図3)、ステップ56(図5)で分散する。請求項2に示すように[復元]のステップ74(図10)においてサ−バ毎に1つの乱数を復元させ、図10のステップ76〜ステップ78においてその積を計算して復元装置16に送信する。これによって、全てのサ−バの乱数がわからなければ、合成値αまたはβはわからない。換言すると、k−1個のサ−バを盗聴してもα,βは個別に復元できない方式となる。よって、αaからaまたはβbからbはわからない。
次に、上記演算の第2の特徴を説明する。請求項1に示すように[分散]のステップ44〜ステップ46(図3)、ステップ54〜ステップ56(図5)で秘密情報に合成値をかけて分散し、請求項3に示すように[乗算]のステップ62〜ステップ64(図7)で一旦復元し、ステップ76(図10)でその復元値を用いて演算を行う。これによって、分散値の次数k−1を変えずに乗算を可能とする。
第3の特徴は、請求項4に示すように[復元]における図12のステップ82〜86では、分散値Wab’(x)から秘匿化された演算結果(αβab)を復元し、合成したαβで割ることになされる点にある。
上記において、簡単のため[分散]のステップ44(図3)、ステップ54(図5)、おいて、分散値Wa’(x),Wb’(x)などの秘匿化分散値は、分散値に乱数をかけているが、秘密情報に乱数をかけて直接それを秘密分散してもよい。
また[乗算]のステップ64(図7)で、あるサ−バ14x、上記例では、第1のサーバ14xがαaを復元するとしたが、複数のサ−バでαaを復元して、当該復元したサーバ以外のサ−バに伝えるとしてもよい。全てのサ−バでαaを復元する場合、他のサ−バにαaの値を伝える必要はない。また、サ−バ14xは他のサ−バにαaを伝えるとしたが、復元に参加するk台が定まっている場合、少なくともそのk台のサ−バに伝えればよい。また、αaでなくβbを復元してもよい。
また、[復元]のステップ72(図10)では、サ−バjは指定されたjに応じたWaj(x)とWbj(x)を集めるとしたが、指定は重なりがなければどのように定めても良い。例えば、jを参加するサ−バIDの昇順に応じて1,2,…,kと定めてもよいし、降順に定めても良い。また、各サ−バが早いもの順で自分のjの値を定めるとしてもよい。
また、[復元]の図10のステップ78において、各サーバはαjβjを復元者に送り、復元装置16が図12のステップ82でαβを復元するとしたが、次のようにしてもよい。即ち、例えば、図10のステップ78では、サーバ14x1はα1β1をサーバ14x2に送り、サーバ14x2はそれにα2β2をかけて次のサーバに送ることを繰り返し、最後のサーバ14xkにおいてαβを復元する。その後、サーバ14xkはαβを他のサーバに伝え、各サーバはWab’(xi)/αβを計算する。この場合、図12のステップ82は、復元装置16はk個のサーバからWab’(xi)/αβを集め、abを復元するとなり、ステップ84と86は省略される。また、各サーバはαjβjを復元者ではなく検索サーバに送り、検索サーバがαβを復元して各サーバに戻し、各サーバはWab’(xi)/αβを計算して、その結果を復元者に送ってもよい。
また、[乗算]の図9のステップ68では、サーバ14xdはWb’(xi)を集めてβbを復元し、αaとかけてαβabを計算して復元装置16に送ってもよい。その場合、[復元]における図12のステップ82は削除される。
また、生成する乱数αiなどはk個とし、各サーバはその中の1つを復号するとしたが、k個以上の乱数を生成し、各サーバが複数の乱数を復元し、合成してもよい。例えば、[分散]の図3のステップ42においてt・k個の乱数を生成して、qを法としてその積αを計算し、[復元]の図10のステップ74において、1つのサーバはt個の乱数を復元し、ステップ76で乗算する。
以上は、以降の実施の形態についても同様である。
(秘匿乗算2(繰り返し))
次に、乗算を繰り返してabcを計算する場合を説明する。なお、乗算の後に加算を行う場合は第3の実施の形態に示す。
[分散]
[分散]においてa,bは秘匿乗算1と同様に分散されているとする。即ち、第1のディーラ装置12A、第2のディーラ装置12Bはそれぞれ、図3、図5の分散処理を実行する。
第3のディーラ装置12CのCPU22は、図14の分散処理を実行する。即ち、ステップ92で、k個の乱数γiを生成し、その積γ=γ1・γ2・・・γkを計算する。
ステップ94で、以下の分散値を計算する。
Wc’(x)=γ(c+c0,1+・・・+c0,k−1 k−1
Wc1(x)=γ1+c1,1+・・・+c1,k−1 k−1

Wck(x)=γk+ck,1+・・・+ck,k−1 k−1
ステップ96で、n個の第1のサ−バ14x〜第nのサ−バ14xに、分散値Wc’(x)〜Wck(x)を送信する。
なお、n=4、k=3の場合、上記分散値Wc’(x)〜Wck(x)は、図15に示す通りである。
[乗算]
秘匿乗算1の上記処理(図7、図9)を実行し、Wab’(x)を計算する。
予め定められたサ−バ、例えば、第1のサ−バ14xのCPU22は、図16のγcの復元・送信処理を実行する。即ち、ステップ102(図16も参照)で、Wc’(x)をk個集め、ステップ104(図16も参照)で、γcを復元し、ステップ106(図16も参照)で、γcを他のサ−バに送信する。上記例では、γcをサーバ14x〜14xに送信する。その様子を図17に示す。
各サ−バ14x〜14xのCPU22は、図18(A)の乗算処理を実行する。即ち、ステップ108で、自分がもつWab’(x)にγcをかけてWabc’(x)を生成する。
Wabc’(x)=αβγc(ab+ab0,1+・・・+ab0,k−1 k−1
n=4、k=3の場合、第1のサーバ14x〜第4のサーバ14xにおけるWabc’(x)〜Wabc’(x)は、図18(B)に示す通りである。
[復元]
復元に参加する予め定められたサ−バj(j=1,…,k)、即ち、例えば、第1のサーバ14x〜第kのサーバ14xの各々のCPU22は、図19のαβγjの復元・計算・送信処理を実行する。即ち、ステップ112で、指定されたjに応じたWaj(x),Wbj(x),Wcj(x)(i=1,…,k)を集める(n=4、k=3の場合の例を示す図20も参照)。ステップ114で、1サ−バ当たりα ,β ,γjを1つずつ復元する。ステップ116で、積αβγjを計算し、ステップ118で、Wabc’(x)とαβγjを復元装置16に送信する。
復元装置16のCPU22は、図21の乗算結果取得処理を実行する。即ち、ステップ122(図22も参照)で、k個のWabc’(x)からαβγabcを復元し、ステップ124(図22も参照)で、αβγj(j=1,・・・,k)からαβγを合成し、ステップ126(図22も参照)で、αβγabcをαβγj(j=1,・・・,k)で割ってabcを得る。
以上より、秘匿乗算の繰り返しは秘匿乗算1の[乗算]の繰り返しを基本として、少しの変形で実現できることがわかる。また、秘匿乗算1の[乗算]処理で得られるWab’(x)は乱数がかかったままであるので、復元が行われるまで途中結果が漏洩することはない。
以上から、本実施例は秘匿乗算及びその繰り返しに対して有効であることが言える。
また、実数を対象とする場合、小数点位置に対しても秘密分散を行い、小数点をずらす処理を秘匿計算として実行することができる。例えば、全ての小数点位置が小数点第二位である場合は、前述のように加減算では小数点位置が変わらず、乗除算の場合のみ小数点位置が変化する。しかし、この小数点位置の変化は加減算によって演算できるので、秘密分散した小数点位置を秘匿加算すればよい。すなわち、小数点第二位までの数Aと小数点第三位までの数Bをかけると小数点第五位の数となるが、Aの小数点位置を表すa=2、とBの小数点位置を表すb=3を秘密分散して秘匿加算すれば、その和を表す5の分散値が得られることは明らかである。
よって、実数対応の秘匿乗算を以下に示す。処理の流れは秘匿乗算1とほぼ同様であるが、実数対応の詳細を理解するために、以下の秘匿乗算3を示す。ただし、実数を対象とする場合、秘密情報や乱数は以下のような実数とし、秘密分散部分以外の演算は全てqなどを法とせず、実数演算で行われる。すなわち、[分散]におけるa,b,乱数αii(i=1,・・,k)及びαを整数化すれば素数p以下となる実数(αiiはpでなくてもよいがここでは小数点位置を含めてp以下とする)とし、αa及びβbを整数化すれば素数q以下となる実数とする。よって、[分散]における秘密分散であるαiとβiの分散はpを法として整数化して分散し、αaとβbの分散はqを法として整数化して秘密分散する。この場合、[復元]でαiとβiの復元処理はpを法として行い、αaとβbの復元処理はqを法として行うが、復元した後のαii,α,βに関連する演算はqを法とせず、実数として演算する。この場合、αaに加えてβbも復元し、その後実数演算する。
追加される処理としては、[分散]において小数点位置を示す値を秘密分散することと、[乗算]において上記のように秘匿加算して新たな小数点位置を計算することである。
秘匿乗算3(実数対応)
[分散]
秘密情報a(実数)をもつ第1のディーラ装置12AのCPU22は、図23に示す分散処理を実行する。即ち、第1のディーラ装置12AのCPU22は、ステップ101で、k個の乱数αを実数として生成し、その積α=α・α・・・αを実数計算する。乱数αは、定められた小数点位置をもつ実数として表されるとする。
第1のディーラ装置12AのCPU22は、ステップ103で、以下の分散値を計算する。ただし、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を法として秘密分散する。
Wa’(x)=α(a+a0,1+・・・+a0,k−1 k−1
Wa(x)=α+a1,1+・・・+a1,k−1 k−1

Wa(x)=α+ak,1+・・・+ak,k−1 k−1
Wd(x)=d1+d1,1+・・・+d1,k−1 k−1
Wd(x)=d+d3,1+・・・+d3,k−1 k−1
ただし、ah,j及びd1,j、d3,j(h=0,・・・,k、j=1,・・・,k−1)は乱数(整数),xはサ−バID(i=1,…,n)
ステップ105で、第1のサ−バ14x〜第nのサ−バ14xに送信する。
秘密情報b(実数)をもつオ−ナBの第2のディーラ装置12BのCPU22は、図24に示す分散処理を実行する。即ち、ステップ111で、k個の乱数βを実数として生成し、その積β=β・β・・・βを実数計算する。βiは、定められた小数点位置をもつ実数として表されるとする。
ステップ113で、以下の分散値を計算する。この場合、bとβiとβを、整数表現すればp以下の整数で表せる定められた小数点位置をもつ実数とし、βbを整数表現すればq以下の整数で表せる定められた小数点位置をもつ実数として、βbを整数表現し、素数qを法として以下の分散値を計算する。また、βi(i=1,…,k)もp以下の整数の形にし、pを法として以下を計算する。さらに、βiの小数点位置を表す値d2(p以下の整数)とβbaの小数点位置を表す値d4もpを法として秘密分散する。
Wb’(x)=β(b+b0,1+・・・+b0,k−1 k−1
Wb(x)=β+b1,1+・・・+b1,k−1 k−1

Wb(x)=β+bk,1+・・・+bk,k−1 k−1
Wd(x)=d2+d2,1+・・・+d2,k−1 k−1
Wd(x)=d4+d4,1+・・・+d4,k−1 k−1
ただし、bh,j及びd2,j、d4,j(h=0,・・・,k、j=1,・・・,k−1)は乱数,xはサ−バID(i=1,…,n)
ステップ115で、第1のサ−バ14x〜第nのサ−バ14xに送信する。
[復元]
復元に参加するサーバ、例えば、予め定められた第1のサ−バ14x〜第kのサ−バ14xの各CPU22は、図25に示すαβの復元・送信処理を実行する。即ち、ステップ121で、指定されたjに応じたWa(x)とWb(x)を、jに対応するサーバから集め、ステップ123で、αとβを素数pを法として1つずつ復元する。ステップ125で、実数化したαjとβjを用いてαβを実数演算し、ステップ127で、計算したαβを復元装置16に送信する。
復元装置16のCPU22は、図26に示す復元処理を実行する。即ち、ステップ131で、αβ(j=1,…,k)を受信し、ステップ133で、αβを実数演算で掛けてαβを計算する。このとき必要があれば、以下の処理を行う。
各サーバはWd1(xi)+Wd3(xi)を計算して、復元装置に送る。
復元装置はWd1(xi)+Wd3(xi)を復元して、それをk倍した値からαβの小数点位置を知り、αβの小数点位置を調整する。
第1のサ−バxのCPU22は、図27に示すαβabの送信処理を実行する。即ち、ステップ141で、各サーバから対応するWa’(x)をk個集め、ステップ143で、αaを素数qを法として復元する。ステップ145で、各サーバから対応するWb’(x)をk個集め、ステップ147で、βbを素数qを法として復元する。ステップ149で、実数としてαβabを計算し、ステップ151で、αβabを復元装置16に送信する。このとき必要があれば、以下の処理を行う。
各サーバはWd2(xi)+Wd4(xi)を計算して、復元装置に送る。
復元装置はWd2(xi)+Wd4(xi)を復元して、その値からαβabの小数点位置を知り、αβabの小数点位置を調整する。
復元装置16は、図26のステップ135で、αβabを受信し、ステップ137で、αβで割って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を公開しても安全であるといえる。この特徴は請求項15に示される。
また、上記では小数点位置を表す値も秘密分散し、演算結果の小数点位置を調整したが、例えば小数点位置がある値に固定されている場合、小数点位置を表す分散値及び秘匿演算は省略できる。例えば、全てのパラメータは小数点第2位の実数と定められていれば、上記アルゴリズムではαβの小数点位置は2kであり、αβabの小数点位置は4であることは明らかである。
秘匿乗算は整数または実数に関わらず、秘匿乗算1によって実現できる。ただし、秘匿除算は第2の実施の形態で述べるように、秘匿乗算1を除算対応にするだけ(秘匿除算1)では実現できない。よって、秘匿乗算3は秘匿乗算と秘匿除算を同形態にする(秘匿除算3に対応させる)ためのものである。その特徴は第2の実施の形態において述べる。
以上は、以降の実施の形態についても同様である。
<第2の実施の形態>
次に、秘匿除算を行う場合を説明する。ここでは第2のディーラ装置12Bが持つ秘密情報bを第1のディーラ装置12Aが持つ秘密情報aで割る、即ちb/aを計算する場合を考える。
(秘匿除算1(基本形))
まず、秘匿除算1(基本形)について説明する。秘匿除算1(基本形)は、分散、除算、及び復元の処理により実行される。
[分散]
秘匿除算1(基本形)の分散は、秘匿乗算1の分散処理(図3、図5)と同様であるので、その説明を省略する。
[除算]
次に、除算を説明する。あるサ−バ14x、例えば、予め定められた第1のサ−バ14xのCPU22は、図7に示すαaの復元・送信処理を実行する(図8も参照)。即ち、Wa’(x)をk個集め(ステップ62)、αaを復元し(ステップ64)、αaを他のサ−バに分散する(ステップ66)。
各サ−バj(j=1,…,n)、即ち、第1のサ−バ14x〜第nのサ−バ14xの各々のCPU22は、図28(A)に示す除算処理実行する。即ち、ステップ128で、自分がもつWb’(x)をαaで割ってWab’(x)を生成する。
Wab’(x)=(β/αa)(b+b0,1+・・・+b0,k−1x k−1
n=4.k=3の場合の、第1のサーバ14x〜第4のサーバ14xにおけるWab’(x)は、図28(B)に示す通りである。
[復元]
次に、復元を説明する。
復元に参加するサ−バj(j=1,…,k)、即ち、例えば、第1のサーバ14x〜第kのサーバ14xの各CPU22は、図29のβ/αの復元・計算・送信処理を実行する。即ち、ステップ132(図30も参照)で、予め指定されたjに応じたWaj(xi)とWbj(xi)(i=1,…,k)を集め、ステップ134(図30も参照)で、1サ−バ当たりαとβを1つずつ復元する。
ステップ136(図30も参照)で、商β/αを計算し、ステップ138(図30も参照)で、Wab’(x)とβ/αを復元装置16に送信する。
n=4、k=3の場合、上記処理により、復元装置16には、図30に示す各データが送信されている。
復元者の復元装置16のCPU22は、図31の除算結果取得処理を実行する。即ち、ステップ142(図32も参照)で、k個のWab’(x)からβb/αaを復元し、ステップ144(図32も参照)で、β/α(j=1,…,k)からβ/αを合成する。ステップ146(図32も参照)で、βb/αaをβ/αで割ってb/aを得る。
以上より、秘匿除算も秘匿乗算と非常に似た処理で実現できることがわかる。よって、分散は請求項1で表現される。請求項2も同一であるが、具体的には「前記復元した第1の部分乱数と第2の部分乱数を合成する」仕方が異なる。すなわち、秘匿乗算ではαとβからαβを合成するが、秘匿除算ではβ/αを合成する。請求項3も同一であるが、具体的な行う所定の演算が異なる。請求項4も同一であるが、具体的には合成する乱数が異なる。
ただし、上記において各サーバはステップ136においてβ/αを計算し、ステップ138で復元装置に送ったが、ステップ136でα/βを計算し、ステップ138でそれを復元装置に送り、復元装置はステップ144でα/βからα/βを合成し、ステップ146でβb/αaにα/βをかけてb/aを得るようにすることもできる。
(秘匿除算2(繰り返し))
次に、秘匿除算2(繰り返し)を説明する。秘匿除算2(繰り返し)では、秘密情報cによる秘匿除算を連続させる。この場合、第1の実施の形態の秘匿乗算2の[乗算]と[復元]において、以下の変更を行うことにより実行できる。
[分散]
秘匿除算2(繰り返し)における分散は、秘匿乗算2の分散処理(図3、図5、図14)と同様であるので、その説明を省略する。
[除算]
各サ−バ14x〜14xのCPU22(A)は、前述した図23(A)に示す除算処理を実行して、Wab’(x)(図23(B))を計算する。
また、あるサ−バ、例えば、第1のサ−バ14xのCPU22は、前述した図16に示すγcの復元・分散処理を実行する。即ち、Wc’(x)をk個集め(ステップ102)、γcを復元し(ステップ104)、γcを他のサ−バに送信する(ステップ106)(図17も参照)。
サ−バj(j=1,…,n)、即ち、例えば、第1のサ−バ14x〜第nのサ−バ14xの各CPU22は、図33(A)の除算処理を実行する。即ち、ステップ148で、γcで自分がもつWab’(x)を割ってWabc’(x)を生成する
Wabc’(x)=(β/αaγc)(b+b0,1+・・・+b0,k−1 k−1
n=4、k=3の場合の、第1のサーバ14x〜第4のサーバ14xのWabc’(x)〜Wabc’(x)は、図33(B)に示す通りである。
[復元]
復元に参加するサーバ、例えば、予め定められたサ−バ14x〜14xの各CPU22は、図34のαβの復元・計算・送信処理を実行する。即ち、ステップ152(図35も参照)で、指定されたjに応じたWaj(x),Wbj(x),Wcj(x)を集め(i=1,…,k)、ステップ154(図35も参照)で、1サ−バ当たりα ,βj,γjを1つずつ復元する。
ステップ156(図35も参照)で、β/αγjを計算し、ステップ158で、Wabc’(x)とβ/αγjを復元装置16に送信する。
以上の処理により、復元装置16は、図35に示す各データが送信されている。
復元装置16のCPU22は、図36の乗算結果取得処理を実行する。即ち、ステップ162(図37も参照)で、k個のWabc’(x)から(β/αγ)(b/ac)を復元し、ステップ164(図37も参照)で、β/αγを合成し、ステップ166(図37も参照)で、(β/αγ)(b/ac)をβ/αγで割ってb/acを得る。
秘匿除算と乗算を組み合わせた連続の場合も同様の拡張が可能であることは明らかである。
(秘匿除算3(実数対応))
次に、パラメ−タが実数の場合の秘匿除算を説明する。加減算や乗算は上述したように、実数を整数表現し、素数pまたはqに対応してパラメータを設定することで対応可能である。
上記秘匿除算1においてはb/aが必ず割り切れる場合前記と同様で問題はない。しかし、b/aが割り切れない場合、実数対応にしなければ秘匿除算1では対応できない(素数qを法とする場合、必ず割り切れるため、実際の商と値が異なる)。よって、以下のようにする。秘匿乗算3で説明したように、a,b及びα,βも実数とし、その整数化した値が素数p以下となるようにする。以下では小数点位置は固定として小数点位置に関する処理を省略する。
[分散]
秘密情報a(実数)をもつ第1のディーラ装置12AのCPU22は、図3に示す分散処理を実行する。即ち、第1のディーラ装置12AのCPU22は、k個の乱数αを実数として生成し、その積α=α・α・・・αを実数計算する(ステップ42)。乱数αは、定められた小数点位置をもつ実数として表されるとする。
第1のディーラ装置12AのCPU22は、図3のステップ44で、以下の分散値を計算する。この場合、aとαを、整数表現すればp以下の整数で表せる定められた小数点位置をもつ実数とし、αaを実数計算した後αaを整数表現し、素数qを法として以下の分散値を計算する。また、αi(i=1,…,k)もp以下の整数の形にし、pを法として以下を計算する。
Wa’(x)=α(a+a0,1+・・・+a0,k−1 k−1
Wa1(x)=α+a1,1+・・・+a1,k−1 k−1

Wak(x)=αak,1+・・・+ak,k−1 k−1
ただし、ah,j(h=0,・・・,k、j=1,・・・,k−1)は乱数(整数),xはサ−バID(i=1,…,n)
図3のステップ46で、第1のサ−バ14x〜第nのサ−バ14xに送信する。
秘密情報b(実数)をもつオ−ナBの第2のディーラ装置12BのCPU22は、図5のステップ52で、k個の乱数βを実数として生成し、その積β=β・β・・・βを実数計算する。βiは、定められた小数点位置をもつ実数として表されるとする。
ステップ54で、以下の分散値を計算する。この場合、bとβを、整数表現すればp以下の整数で表せる定められた小数点位置をもつ実数とし、βbを実数計算した後、βbを整数表現し、素数qを法として以下の分散値を計算する。また、βi(i=1,…,k)もp以下の整数の形にし、pを法として以下を計算する。
Wb’(x)=β(b+b0,1+・・・+b0,k−1 k−1
Wb1(x)=β+b1,1+・・・+b1,k−1 k−1

Wbk(x)=β+bk,1+・・・+bk,k−1 k−1
ただし、bh,j(h=0,・・・,k、j=1,・・・,k−1)は乱数,xはサ−バID(i=1,…,n)
ステップ56で、第1のサ−バ14x〜第nのサ−バ14xに送信する。
[復元]
復元に参加するサーバ、例えば、予め定められた第1のサ−バ14x〜第kのサ−バ14xの各CPU22は、図38のβ/αの復元・送信処理を実行する。即ち、ステップ172(図39も参照)で、指定されたjに応じたWa(x)とWb(x)を集め、ステップ174(図39も参照)で、αとβを素数qを法として1つずつ復元する。ステップ176(図39も参照)で、実数化したαjとβjを用いてβ/αを素数qを実数演算し、ステップ178(図39も参照)で、計算したβ/αを復元装置16に送信する。
復元装置16のCPU22は、図40のβ/αの計算・送信処理を実行する。即ち、ステップ182で、β/α(j=1,…,k)を、実数演算で掛けてβ/αを計算する。
第1のサ−バxのCPU22は、図41(A)のステップ192(図41(B)も参照)で、Wa’(x)をk個集め、αaを素数qを法として復元する。ステップ94で、Wb’(x)をk個集めβbを素数qを法として復元する。ステップ196で、実数としてβb/αaを計算し、ステップ198で、βb/αaを復元装置16に送信する。
復元装置16は、図40のステップ186で、βb/αaを受信し、ステップ188で、βb/αaをβ/αで割ってb/aを得る。
秘匿除算3(実数対応)の特徴は、以下の通りである。秘匿乗算1や秘匿除算1では秘密情報a(p以下の整数)に作用させる乱数αは法演算を行うq(p2より大きな素数)以下の整数であり、その乗算結果はqで法演算されるため秘匿化秘密情報であるαaは実際の値と異なる。しかしこれによって、秘匿化秘密情報αaは乱数化され安全になる。その後、乗算ではαβabが計算されるが、この値も実際の値と異なる。乱数の削除時にはαβabをαjβjで割っていくが、αjβjの値も法演算されるため実際の値と異なる。しかし、αβabをαjβjで割る演算もqを法として行われるため、正しくαβが除去されその結果であるabは正しく復元される。よって、qを法とする演算上でなければ上記秘匿乗算及び秘匿除算は正しく実行されない。よって、秘匿乗算1及び秘匿除算1では最後まで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以下の2つの値の合成値より大きなqを法として秘密分散することはない(通常はどちらかまたは両方がq以下の整数)。そこで、実数演算と組み合わせることにより、αとaを絞れないようにしている。この特徴は、請求項15に示される。

秘匿乗算3は秘匿除算3が行われる際、同じ分散値を用いて乗算にも対応できるようにしたものである。
また、実数化されたcとの乗算を連続させる場合は、次のようにする。即ち、[復元]の図38のステップ172と174との間に、Wch(x)からγjを復元する処理を加え、図38のステップ176、ステップ178では、β/αγを計算かつ送信する。図40のステップ182、ステップ184では、復元装置16のCPU22はβ/αγを計算してサ−バxに送信し、図41のステップ194とステップ196との間に、Wc’(x)からγcを復元する処理を追加し、図41のステップ196で、第1のサ−バ14xのCPU22は、αaとβbとγcを実数としてβb/(αaγc)を計算し、復元装置16に送信する。端末装置16のCPU22は、図40のステップ188で、復元装置16はβb/(αaγc)をβ/αγで割ってb/acを得る。ただし、c及びそれに関連する値もa,bと同様の実数として、整数化して分散されているとする。さらに、秘匿除算2も実数の連続除算も同様に可能であることは明らかである。
以上より、秘匿除算も秘匿乗算と同様の処理で基本演算及び繰り返し演算が行え、実数に対しても全て対応できることがわかる。
上記において、[復元]におけるサ−バxは秘密情報a,b及び演算結果b/aに関する情報は得られないので、どのサ−バがなってもよい。
<第3の実施の形態>
次に、演算の連続の例として乗算と加算を連続させる積和演算ab+cについて示す。演算の基本は四則演算であり、加算と減算は代替可能で、第1の実施の形態及び第2の実施の形態より乗算と除算は容易に代替可能であるので、積和演算ができれば全ての演算の組合せに対応できることが言える。a=de+fとすれば(de+f)b+cとなり、f=0とすればdeb+cとなる。また、c=de+fとすればab+de+fとなり、種々の演算が可能である。ここでは、第1のディーラ装置12Aが持つ秘密情報aと第2のディーラ装置12Bが持つ秘密情報bと第3のディーラ装置12Cが持つ秘密情報cを用いてab+cを計算する場合を考える。ただし、今回は[積和]において復元装置16が秘匿演算に協力するが、復元装置16は第2の実施の形態の第1のサ−バ14xのように秘密情報や途中結果について何の情報も得られない。
(秘匿積和1(基本形))
まず、秘匿積和1(基本形)について説明する。秘匿積和1(基本形)は、分散、積和、及び復元により実行される。
[分散]
オ−ナA,B,Cのそれぞれは第1のディーラ装置12A〜第3のディーラ装置12Cを用いて、秘密情報a,b,cに対して独立に以下の分散値を計算し、n台のサ−バに分散保管する(i=1,…,n)(図3、図5、図14)。
Wa’(x)=α(a+a0,1+・・・+a0,k−1 k−1
Wb’(x)=β(b+b0,1+・・・+b0,k−1 k−1
Wc’(x)=γ(c+c0,1+・・・+c0,k−1 k−1
Wa1(x)=α+a1,1+・・・+a1,k−1 k−1

Wak(x)=α+ak,1x+・・・+ak,k−1 k−1
Wb1(x)=β1+b1,1+・・・+b1,k−1 k−1

Wbk(x)=β+bk,1+・・・+bk,k−1 k−1
Wc1(x)=γ1+c1,1+・・・+c1,k−1 k−1

Wck(x)=γk+ck,1+・・・+ck,k−1 k−1
[積和]及び[復元]
例えば、第1のサ−バ14xは、図7のαaの復元・分散処理を実行する。第1のサ−バ14x〜第kのサ−バ14xは、図9(A)の乗算処理を実行する。よって、第1のサ−バ14x〜第kのサ−バ14xは以下のWab’(x)を得る(図9(B)参照)。
Wab’(x)=αβa(b+ab0,1+・・・+ab0,k−1 k−1
第1のサ−バ14x〜第kのサ−バ14xのCPU22は、図42の積和処理を実行する。即ち、ステップ200で、指定されたjに応じたWa(x),Wb(x),Wc(x)(i=1,…,k)を集め、ステップ202で、α,β,γjを1つずつ復元する。
ステップ204で、乱数μjを生成し、αβ/μjとγj/μjを計算し、ステップ206で、αβ/μjとγj/μjを復元装置16に送信する。
復元装置16のCPU22は、図43の復元処理を実行する。即ち、ステップ222で、αβ/μjとγj/μjを受信し、ステップ224で、αβ/μとγ/μをかけてαβ/μとγ/μを計算し、ステップ226で、αβ/μとγ/μを各サ−バ、即ち、第1のサ−バ14x〜第kのサ−バ14xに送信する。
第1のサ−バ14x〜第kのサ−バ14xのCPU22は、図42のステップ208で、αβ/μとγ/μを受信し、ステップ210で、Wab’(x)をαβ/μで、Wc’(x)をγ/μで割り、Wab’(x)=μ(ab+ab0,1+・・・+ab0,k−1^k−1)とWc’(x)=μ(c+c0,1+・・・+c0,k−1 k−1)を計算する。
ステップ212で、Wabc’(x)=Wab’(x)+Wc’(x)=μ{(ab+c)+abc0,1+・・・+abc0,k−1 k−1}を計算し、ステップ214で、Wabc’(x)を復元装置16に送信し、ステップ216で、μjを復元装置16に送信する。
復元装置16のCPU22は、図43のステップ228で、第1のサ−バ14x〜第kのサ−バ14xから、Wabc’(x)を受信し、ステップ230で、μ(ab+c)を復元する。
ステップ232で、第1のサ−バ14x〜第kのサ−バ14xから、μjを受信し、ステップ234で、μ=μ1・μ2…μkを合成し、ステップ236で、μ(ab+c)をμで割って、(ab+c)を得る。
また、ここでは新たな乱数μjを用いたが、μjを生成せず図42のステップ204においてαjβj/γjを計算して205においてそれを送信し、復元装置16は図43のステップ222においてそれを受信し、224においてαβ/γを合成して226で各サーバにその値を戻し、図42のステップ208でそれを受信し、210でWab’(xi)をαβ/γで割る、またはWc(xi)にαβ/γをかけることにより、2つの分散値に係る乱数をμではなくαβまたはγに合わせることができる。
上記[積和]の図7のαβの復元・分散処理及び図9の乗算処理を実行せずに、以降bに関連する処理を省略すればa+cの和が計算できることがわかる。また、[積和]の図42の積和処理でcに関連する処理を行わなければabの積が計算できる。さらに、[積和]の図42のステップ212で得られたWabc’(x)をWa’(x)として処理を繰り返せば、(ab+c)b+cの秘匿演算が、Wabc’(x)をWc’(x)として処理を繰り返せばab+ab+cの秘匿演算が実現できることがわかる。
また、2回目の処理においてWabc’(x)をWa’(x)、Wb’(x)をWd’(x)、Wc’(x)をWe’(x)とすれば(ab+c)d+eが得られ、種々の演算が実現できることがわかる。さらに、秘匿積和1においてa,cに関する処理を省略すると、Wb’(x)にかかる乱数βをμに変更することができる。
μjは使い捨てにすることもできるが、サ−バjがμjを秘密分散して全サ−バでその分散値を保存すれば、必要なときに使うこともできる。また、パラメ−タが実数であっても今までの実施例から演算の連続に対応できることは明らかである。
上記における特徴は請求項5に示されるようにオーナA,B,Cが独立に設定したα,β,γのような乱数をαj,βj,γjを用いて、または新たにμjなどを用いて変換し、次の秘匿演算に便利な形に変換することである。
以上、第1の実施の形態〜第3の実施の形態により秘匿計算によって四則演算が実現できることが示された。
<第4の実施の形態>
第1の実施の形態に示した秘匿乗算は秘密情報に乱数をかけることにより秘匿化して、それを一旦復元することにより閾値kを変えない秘匿演算を可能にしている。第1の実施の形態の問題点は、秘密情報が0である場合、秘匿化秘密情報を一旦復元すれば、その値が0となるので秘密情報が0であることがわかる点である(秘匿化に用いられる乱数は0以外のため)。
ただし、第2の実施の形態に示す秘匿除算の場合は一旦復元した秘匿化秘密情報が0の場合、除算できないことがわかるためこの性質は有効である。
(秘匿乗算4(0対応))
以下、秘匿乗算において秘密情報に0を含む場合の手法を以下に示す。
[分散]
秘密情報aをもつオ−ナAの第1のディーラ装置12AのCPU22は、図3の分散処理を実行し、k個の乱数αを生成し、その積α=α・α・・・αを計算する(ステップ42)。
第1のディーラ装置12AのCPU22は、以下の分散値を計算し(ステップ44)、n個のサ−バに分散する(ステップ46)。
Wa(x)=a+a0,1+・・・+a0,k−1 k−1
Wa’(x)=α(a+a0,1(n+x)+・・・+a0,k−1(n+xk−1
Wa1(x)=α+a1,1+・・・+a1,k−1 k−1

Wak(x)=α+ak,1+・・・+ak,k−1 k−1
ただし、ah,j(h=0,・・・,k、j=1,・・・,k−1)は乱数,xはサ−バID(i=1,…,n)
秘密情報bをもつオ−ナBの第2のディーラ装置12BのCPU22は、図5の分散処理を実行し、k個の乱数βiを生成し、その積β=β・β・・・βを計算する(ステップ52)。
第2のディーラ装置12BのCPU22は、図5の分散処理を実行し、以下の分散値を計算し(ステップ54)、n個のサ−バに分散する(ステップ56)。
Wb(x)=b+b0,1+・・・+b0,k−1 k−1
Wb’(x)=β(b+b0,1(n+x)+・・・+b0,k−1(n+xk−1
Wb(x)=β+b1,1+・・・+b1,k−1 k−1

Wbk(x)=β+bk,1+・・・+bk,k−1 k−1
ただし、bh,j(h=0,・・・,k、j=1,・・・,k−1)は乱数,xはサ−バID(i=1,…,n)
[乗算]
第1のサ−バ14x〜第nのサ−バ14xの各CPU22は、図44の乗算処理を実行する。即ち、ステップ242で、Wab(x)=Wa(x)Wb(x)とWab’(x)=Wa’(x)Wb’(x)を計算する。
[復元]
復元に参加するサーバ、例えば、予め定められた第1のサ−バ14x〜第kのサ−バ14xの各CPU22は、図45のαβの復元処理を実行する。即ち、ステップ244で、指定されたjに応じたWa(x)とWb(x)を集め、ステップ246で、αとβを1つずつ復元する。
ステップ248で、αβを計算し、ステップ250で、Wab(x)とWab’(x)とαβを復元装置16に送信する。
復元装置16のCPU22は、図46の復元処理を実行する。即ち、ステップ252で、Wab(x)、Wab’(x)、αβを受信し、ステップ254で、全てのαβをかけてαβ=α・α…αβ・β…βを計算し、Wab’(x)/αβを計算する。
復元装置16のCPU22は、ステップ256で、Wab(x)とWab’(x)/αβから2k−1個の分散値を用いてabを復元する。
この方式は文献[2]の方式を改良し、安全にしたものである。よって、[分散]において1つのサ−バが2つの分散値Wa(x)とWb(x)を持ち、1つの分散値が乱数αまたはβによって秘匿化されるという点は同じである。文献[2]との違いは請求項1に示すように[分散]において各オ−ナがk個の乱数を生成し、その合成値α、βを秘密情報にかけて分散している点である。文献[2]では乱数αとβをαiやβiから合成せず、直接分散しているためαとβが直接復元者に知られる。よって、請求項1は従来法にない特徴となる。
文献[2]では復元者がαとβを知った後で、k/2台のサ−バを盗聴すればaとbに関するk個の分散値が集められるため、秘密情報であるa,bが漏洩する。また、文献[2]ではこの復元者による攻撃に対応するために、各サ−バが乱数を生成して交換し、合成乱数を生成してそれを分散値にかけて分散値を更新することを提案しているが、この乱数は攻撃者が1台のサ−バを盗聴しているだけでその過程が全て知られるので漏洩する。よって、文献[2]の手法は安全ではない。それに対して、秘匿乗算4は請求項2に示すようにk台のサ−バが各々異なる秘密情報を1つずつ復元して、その合成値を復元者に示すため1台のサ−バが安全(盗聴不能)であれば、攻撃者はαとβを直接知ることはできないため、攻撃者は秘密情報を得ることができず安全である。よって、請求項2も従来法にない特徴となる。
(秘匿乗算5(繰り返し))
上記秘匿乗算4は分散値同士の乗算となっているため次数変化が生じている。次に、連続演算に対応するために次数変換を行う場合を考える。
[分散]
秘密情報aを第1のディーラ装置12AのCPU22は、図47に示す分散処理を実行する。即ち、ステップ262で、k個の0以外の乱数α、ri(以降もα、riは0以外)を生成し、その積α=α・α・・・α、r=r・r・・・rを計算する。
ステップ264で、以下の分散値を計算する。なお、n+xに対する分散値はサ−バ14xのサ−バに送られる。よって、各サ−バ14xは、xとn+xに対する分散値をもつ。
Wa(x)=r(a+a0,1+・・・+a0,k−1 k−1
Wa’(x)=rα(a+a0,1(n+x)+・・・+a0,k−1(n+xk−1
Wa(x)=α+a1,1+・・・+a1,k−1 k−1

Wa(x)=α+ak,1+・・・+ak,k−1 k−1
Wr(x)=r1+ak+1,1+・・・+ak+1,k−1x k−1

Wr(x)=rk+a2k,1+・・・+a2k,k−1x k−1
ただし、ah,j(h=0,・・・,k、j=1,・・・,k−1)は乱数,xはサ−バID(i=1,…,n)である。
ステップ266で、分散値を第1のサ−バ14x〜第nのサ−バ14xに送信する。
秘密情報bをもつオ−ナBの第2のディーラ装置12BのCPU22は、図48の分散処理を実行する。即ち、ステップ272で、k個の0以外の乱数β、q(以降もβ、qは0以外)を生成し、その積β=β・β・・・β、q=q・q・・・q、を計算する。
ステップ274で、以下の分散値を計算する。
Wb(x)=q(b+b0,1+・・・+b0,k−1 k−1
Wb’(x)=qβ(b+b0,1(n+x)+・・・+b0,k−1(n+xk−1
Wb(x)=β+b1,1+・・・+b1,k−1 k−1

Wb(x)=β+bk,1+・・・+bk,k−1 k−1
Wq(x)=q1+bk+1,1+・・・+bk+1,k−1 k−1

Wq(x)=qk+b2k,1+・・・+b2k,k−1 k−1
ただし、bh,j(h=0,・・・,k、j=1,・・・,k−1)は乱数,xはサ−バID(i=1,…,n)である。
ステップ276で、分散値を第1のサ−バ14x〜第nのサ−バ14xに分散する。
[乗算]
第1のサ−バ14x〜第nのサ−バ14xの各CPU22は、図49の乗算処理を実行する。即ち、ステップ278で、Wab(x)=Wa(x)Wb(x)とWab’(x)=Wa’(x)Wb’(x)を計算する(i=1,…,n)。
[次数変換]
第1のサ−バ14x〜第kのサ−バ14xの各CPU22は、図50の次数変換処理を実行する。即ち、ステップ282で、指定されたjに応じたWa(x)とWb(x)を集め(i=1,…,k)、ステップ284で、αとβを1つずつ復元し、ステップ286で、αβを計算し、ステップ288で、αβを復元装置16に送信する。
復元装置16のCPU22は、図51のαβの計算送信処理を実行する。即ち、ステップ322で、第1のサ−バ14x〜第nのサ−バ14xからαβを受信し、ステップ324で、全てのαβをかけてαβを計算し、ステップ326で、αβを第1のサ−バ14x〜第nのサ−バ14xに送信する。
第1のサ−バ14x〜第kのサ−バ14xの各CPU22は、図50ステップ290で、αβを受信し、ステップ292で、αβでWab’(x)を割り、Wab(x+n)=Wab’(x)/αβを計算する。
式(8)に示すRjを秘密に計算するために、以下を計算する。まず、ステップ294で、Wab(x)とWab(x+n)にaxj,jとaxj+n,jを乗算したRj,j=axj,jWab(x)+an+xj,jWab(n+x)と、axj,j+nとan+xj,j+nを乗算したRj,j+n=axj,j+nWab(x)+an+xj,j+nWab(n+x)を計算する。
ここで、Ri,jにおけるiは式(7)の縦方向の最初の位置を表し、jは横方向の位置を表す。よって、iが1からnまでの縦方向の和がR=Σ(Rj,j+Rj,j+n)なる。
ステップ296で、乱数r1jとr2jを生成し、R’j,j=R j,j+r1jとR’j,j+n=R j,j+n+r2,jを計算し、ステップ298で、R’j,jと R’j,j+nとを予め定められた順番の次のサ−バ14x(j+1)に送信する。
ステップ300で、前のサーバ14x(j−1)から送信されたh番目(h=1,…,n−1)の2つの値、即ち、R’j−h,j−hとR’j−h,j+n−hを受信し、ステップ302で、h番目(h=1,…,n−1)の2つの値R’j−h,j−hとR’j−h,j+n−hに、R’j,j−h=axj,j−hWab(x)+an+xj,j−hWab(n+x)+r1jとRj+n,j−h=axj,j+n−hWab(x)+an+xj,j+n−hWab(n+x)+r2jを足して、R’j,jとR’j,j+nを計算し、ステップ304で、R’j,jとR’j,j+nを次の予め定められた順番のサ−バ14x(i+1)に送信する。
ステップ306で、全てのサ−バを回ってきた2つの値R’j,jとR’j,j+nを受信し、ステップ308で、R’j,jとR’j,j+nからをr1jとr2jを各々引いて、ステップ310で、R’j,jとR’j,j+nを予め定められた順番の次のサ−バ14x(i+1)に送信する。
ステップ312で、前のサ−バ14x(j−1)から送られてきた2つの値R’j−h,j−hとR’j−h,j+n−hを受信し、ステップ314で、R’j−h,j−hとR’j−h,j+n−hからr1jとr2jを各々引いて、ステップ316で、R’j−h,j−hとR’j−h,j+n−hを次のサ−バ14x(i+1)に送信する。
ステップ318で、全てのサ−バを回ってきた2つの値R’j,jとR’j,j+nを受信し、ステップ320で、R’j,jとR’j,j+nのR’j,j+nにαβをかけて、各々をR,Rj+nとして保存する。
[復元]
第1のサ−バ14x〜第kのサ−バ14xの各CPU22は、図52のrの復元・送信処理を実行する。即ち、ステップ332で、指定されたjに応じたWr(x)とWq(x)を集め(i=1,…,k)、ステップ334で、1サ−バ当たりrとqを1つずつ復元する。
ステップ336で、積rを計算し、ステップ338で、Rとrを復元装置16に送信する。
復元装置16のCPU22は、図53のステップ342で、Rとrを受信し、ステップ344で、全てのrをかけてrqを計算し、ステップ346で、Rをrqで割ってWab(x)=R/rqを計算する。
ステップ348で、Wab(x)からk−1個を用いてabを復元する。
本発明の[分散]における特徴は、秘密情報a,bを最後まで秘匿するために、a,bに最後まで秘匿する乱数rとqをかけていることである(請求項1に含む)。これによって、Wab(x)とWab’(n+x)は共通の乱数rqが常に係り、[次数変換]の図51のステップ324においてαβは復元装置16で計算されて知られるが、rqは最後まで復元装置16に知られない。よって、中間結果であるRj,Rj+nを攻撃者または復元者が得ても中間結果であるabは漏洩しない。ただし、従来と同様の安全性でよい場合、すなわち復元者による中間値取得を許可する場合、r,qを用いる必要はなく、[分散]を秘匿乗算1と同様にすることができる。この場合、図50のステップ292でWab’(x)をαβで割る代わりにWab(x)にαβをかけることにより、r,qの代わりにα,βを用いることができる。
また、[次数変換]における第1の特徴は、1つのサ−バが形の異なる2つの分散値を持つため、[次数変換]の図50のステップ282〜ステップ288、及び図51のステップ322〜ステップ324において乱数変換を行い、分散値にかかる乱数を同じにしている点である(請求項5に含む)。ここではαβを削除するが、rqは常にかかっている。また、前述のように従来と同じ安全性でよい場合にはr=q=1とすることができる。この特徴は請求項6に示される。
[次数変換]の図50のステップ292において、サ−バはWab’(x)をαβで割ったが、Wab(x)にαβをかけて、Wab(x)=αβWab(x),Wab(n+x)=Wab’(x)としてもよい。また、[次数変換]の図50のステップ320において、各サ−バはαβをかけたが、別の乱数をかけてもよい。
また、第2の特徴は、rqは最後には復元者に知られる(rqは知られるが、rとqは個別に知られないので秘密情報aとbは漏洩しない)ので、分散値Riを保存していれば、Wab(x)とWab’(n+x)から乱数rqを除いた値を復元装置16に知られる可能性がある。よって、Wab(x)とWab’(x+n)を秘匿するために、Wab(x)に乱数r1jを、Wab(x+n)に乱数r2jを足しこみ、元のWab(x)及びWab(x+n)を分からないようにして、サ−バを回していることである。これによって、[次数変換]の図50のステップ306で得られる全てのサ−バを回ってきた値R’j,jにはΣr1jが、R’j,j+nにはΣr2jが足されているので、[次数変換]の図50のステップ312〜ステップ316のサ−バ巡回でΣr1jとΣr2jを除去し、通常のRiを得ることができる。
また、加えた乱数Σr1j=0、Σr2j=0となるようにしておけば2回目のサーバ巡回は不要である。さらに、サーバ巡回させずに復元者に送信して、復元者が加算を行いその結果を各サーバに送り返すようにしてもよい。
さらに、Wab(x)とWab’(x+n)を秘匿するために、Wab(x)に乱数r1jを、Wab(x+n)に乱数r2jを足しこみ、元のWab(x)及びWab(x+n)を秘匿化して、それを解除するためにサ−バを回しているが、秘密情報を秘匿するための乱数r1j及びr2jを各々秘密分散して各サーバに配布し、各サーバは送られた分散値を加算して、Σr1j及びΣr2jを計算し、最終結果のR’j,jやR’j,j+nから引くことによってもr1j及びr2jを削除することができる。この特徴は請求項16に示される。
最後に、[次数変換]の図50のステップ318、320でRj(j=n+1〜2n)に相当するR’j,j+nにαβをかけて、[分散]に示す形に戻している。これによって、攻撃者がk−1個のサ−バを盗聴していたとしても、2k−2個のWiしか得られず、途中結果であるa・bが漏えいすることはない。
また、今までは秘匿乗算のみ説明したが、秘匿乗算4のように分散が行われている場合、加減算はWa(xi)やWb(xi)に対してはそのまま加算すればよく、Wa’(xi)やWb’(xi)に対しては積和演算のときに説明したように分散値にかかる乱数を合わせて加算を行えばよい。また、除算は第2の実施の形態で説明したようにWa’(xi)やWb’(xi)を用いて除算を行う。この場合、Wa’(xi)を復元してαaを復元したとき、αa=0ならば0で割ることになるので除算を中止する。また、αaが0でないときWb’(xi)に対してはWb’(xi)/αaを計算した後、各サーバがαjとβjを復元してαjjを復元装置に送ってα/βが得られ、それをWb’(xi)/αaにかければ定数項にb/aをもつ分散値が出来上がる。そのとき、Wb(xi)もαaで割ってα/βを書ければ定数項にb/aを持ち、乱数として1/βをもつ分散値が得られる。これらの場合、復元は乱数がかかっていない分散値を用いて行えば、最終的な乱数除去は不要にすることができる。以上によって、本実施の形態によっても秘匿計算により四則演算が実現できることがわかる。
<第5の実施の形態>
まず、n台のサ−バ14x〜14xに対して閾値kを変えずに分散値を更新する場合を示す。第1の実施の形態〜第4の実施の形態に示すように秘密情報aに乱数αがかけられて分散されている場合を考える。今まで、乱数がかかった分散値の更新法は知られていない。
(秘匿更新1(乱数付き分散値更新))
第1のサ−バ14x〜第kのサ−バ14xの内から、復元処理を行うサーバ、例えば、第kのサ−バ14xがランダムに予め1台選ばれている。
第kのサ−バ14x以外のk−1台の第1のサ−バ14x〜第(k−1)のサ−バ14x(k−1)の各CPU22は、図54のUの計算・送信処理を実行する。即ち、サーバ14xiは現在の分散値として以下のWa’(x)をもつとする。
Wa’(x)=α(a+a+a +・・・+ak−1 k−1)(i=1,・・・,k−1)
ステップ356で、以下の新たな分散値として乱数Wa’iを生成する。aj’(j=1,…,k−1)は(4)で多項式を解く事によって得られる乱数である。
Wa’i=α(a+a1’+a2’ +・・・+ak−1’ k−1
ステップ358で、自分が持つ前の分散値Wa’(x)と新たに生成したWa’iとの差U’を次のように計算する。
’=Wa’(x)−Wa’=α{(a−a1’)x+(a−a2’)x +・・・+(ak−1−ak−1’)x k−1}
ステップ360で、差U’を第kのサ−バ14xに送信する。
第kのサ−バ14xは、図55のWj’の計算・送信処理を実行する。即ち、ステップ362で、差Ujを受信し、ステップ364で、k−1個の多項式を解き、α(a−a’),α(a−a’),・・・,α(ak−1−ak−1’)を求め、ステップ366で、残りのn−k台のサ−バに対する以下の差分値を求める。
Wj’=α{(a−a1’)x+(a−a2’)x2+・・・+(ak−1−ak−1’)x k−1} (ただし、j=k,・・・,n)
ステップ368で、差分値Wj’を第(k+1)のサ−バ14x(k+1)〜第nのサ−バ14xに送信する。
第(k+1)のサ−バ14x(k+1)〜第nのサ−バ14nは、図56の新たな分散値の記憶処理を実行する。即ち、ステップ370で、Wj’を受信し、ステップ372で、Wj’と前に持っていた分散値と足して新たな分散値とする。
以上の特徴は、乱数がかかった分散値に対して乱数を変えることなく、新たな乱数をそのまま新しい係数を持つ多項式からなる新たな分散値として更新できることである。この特徴は請求項10に示される。
文献[3]に示す従来法は乱数αがかかっていない通常の分散値に対する更新法であるが、それに対しても以下の違いがある。文献[3]では図56のステップ370の処理がなく、第1のサ−バ14x〜第(k−1)のサ−バ14x(k−1)は残りの第(k+1)のサ−バ14x(k+1)〜第nのサ−バ14xに差分値を送り、図55のステップ364及びステップ366の処理に対応する処理を第(k+1)のサ−バ14x(k+1)〜第nのサ−バ14xが行うことにより分散値の更新を行う。それに対して上記秘匿更新1は処理を行う第kのサ−バ14xを1台に指定し、第kのサ−バ14xだけが図54のステップ358及びステップ360の処理を行うため通信量と計算量が削減できるという特徴ももつ。
文献[3]はk−1台のサ−バがn−k+1台のサ−バに差分値を送るため、(k−1)(n−k+1)の通信が必要であり、n−k+1台のサ−バが図54のステップ358及びステップ360の処理に対応する処理を行うため(n−k+1)の多項式処理が必要である。それに対して、本発明は第kのサ−バ14xのみが図54のステップ358及びステップ360の処理を行い、その結果をn−kのサ−バに送るため、ステップ360での(k−1)の通信、ステップ370で(n−k)の通信が発生し、計n+1回の通信ですむ。本発明では、計算は1つの多項式処理のみでよい。
文献[3]の手法は復元処理を行うn−k+1台のサ−バの選択法に関して何の言及もないが、n−k+1台のサ−バを固定している場合、攻撃者がn−k+1台のサ−バのうちの1つを盗聴し続ければ、更新値は常に漏洩する。その漏洩を防ぐために、復元処理を行うサ−バをランダムに選択する。攻撃者が盗聴しているサ−バを第oのサーバ14xとすると、他の第kのサ−バ14xが指定されれば、その時点で攻撃者は他のサ−バの分散値を知っていたとしても、第kのサ−バ14xによる更新によって、第oのサーバ14x以外の新たな分散値を知ることはできない。また、ある時点で第oのサーバ14xが第kの他のサ−バ14xに選ばれたとしても、他のサ−バの分散値を知らないならば、その差分値が得られても新たな分散値はわからない。よって、上記方式は文献[3]に対して、汎用性を持たせ、かつ効率化と安全性向上を同時に実現している。
(秘匿更新法2(u≧k対応))
次に、n台のサ−バに対して閾値をkからu(u≧k)に増やす場合の更新法を示す。
第iのサ−バ14xのCPU22は、図57のδiの生成送信処理を実行する。即ち、ステップ382で、u−1個の乱数di1,・・・,diu−1を生成し、ステップ384で、以下の多項式を生成する。
δi(x)=di1x+di2+・・・diu−1u−1
ステップ386で、δi(x)のxに全サ−バIDを入れた値δi(x),δi(x),・・・,δi(x)を生成し、ステップ358で、δi(x)を第jのサ−バ14x(j=1,・・・,n)に送信する。
第jのサーバ14x、即ち、第1のサ−バ14x〜第nのサ−バ14xの各CPU22は、図58の更新処理を実行する。即ち、ステップ392で、δi(x)を受信し、ステップ394で、自分がもつ閾値kに対する分散値Wa’(x)に全ての値を足しこんで以下を計算する。
Wa’(x)=Wa’(x)+Σδj(x
=α(a+a+a +・・・+ak−1 k−1)+Σδj(x
=α{a+(a+Σdi1/α)x+・・・+(ak−1+Σdik−1/α)x k−1+・・・+(Σdiu−1/α)x u−1}
ステップ396で、Wa’(x)を新たな分散値として保存する。
提案法の特徴は従来のkではなくuを対象としたu−1次多項式をたててδi(x)を構成することである。提案法は[秘匿更新法1]の図55のステップ364の、多項式処理を行わないため、処理が簡易であり、どのサ−バを盗聴していても1つのサ−バの盗聴ではそのサ−バ以外の更新値はわからないという安全性をもつ。
秘匿更新1では分散値にかかる乱数を変えずに多項式のみ変更した。以下に、分散値にかかる乱数を変更して更新する場合を考える。秘匿更新1,2では秘密情報自体は変更しないため、この更新によってサ−バが得る情報はない。しかし、分散値にかかる乱数を直接変更すると、サ−バは秘密情報が何倍されたかという情報を得る。そこで、更新者がサ−バから分散値を集めて更新するが、サ−バに秘密情報が何倍されたかわからせずに更新する手法を示す。
(秘匿更新法3(乱数変更付き分散値更新))
予め定められたサーバ、例えば、第1のサ−バ14xのCPU22は、図59の更新処理を実行する。即ち、ステップ402で、第1のサ−バ14x〜第nのサ−バ14xから、第1のサ−バ14x〜第nのサ−バ14xに格納されている分散値W(x)を集め、ステップ404で、乱数βとk−1個の乱数d〜dk−1を生成し、ステップ406で、以下を計算する。
Wa’(x)=βWa’(x)+δ(x)=αβ{a+(a+d/β)x+・・・+(ak−1+dk−1/β)x k−1}
δ(x)=dx+d+・・・dk−1k−1
ステップ408で、Wa’(x)を各サ−バ、即ち、第1のサ−バ14x〜第nのサ−バ14xに送信する。第1のサ−バ14x〜第nのサ−バ14xは、受信したWa’(x)を新たな分散値として記憶する。
上記における特徴はW(x)はα倍されるが、さらにδ(x)が足されることにより、W’(x)/W(x)としてもαにならない、即ち何倍したかサ−バにわからないことである。δ(x)はk−1個集まらなければ解けない乱数であるが、サ−バはαがわからないので、一体化したW’(x)はk個集まってもαsしかわからず安全である。この特徴は請求項18に示される。
秘匿更新法4
以上の更新法は定数項を必ず0とするので、k-1次の多項式を用いていてもk-1個の分散値があれば更新に用いた多項式が解ける。すなわち、安全性に問題がある。よって、以下のように更新を行うことによりk個の分散値がなければ更新に用いた値がわからないようにすることができる。
[更新]
第iのサーバ14xiにおいては、xiを第1IDとし、また、xi'を、第2IDとして、x1〜xの中から、全てのサーバで第1IDと第2IDの重なりがなく、かつk−1個のサーバ内でその組合せが閉じることがないように、ランダムに定められている。例えば、n=kの場合、どのようなk−1個のサーバ内でその組合せは閉じない。なぜならば、i番目のサーバの第1IDと第2IDが同じとすると、残りのk−1台のサーバ内でIDの組合せが閉じていることになるが、この場合、全てのサーバで第1IDと第2IDの重なりがないという条件を満たしていない。よって、n=kの場合は全てのサーバで第1IDと第2IDの重なりがないように選択すればよい。それに対してn>kの場合、k−1個のサーバ内でその組合せは閉じていても、残り2台のサーバの第1IDと第2IDが逆になっていれば全てのサーバで第1IDと第2IDの重なりがないという条件を満たす。よってまず、x1のサーバがx1以外のサーバIDxj2をランダムに選び、選ばれたxj2のサーバがサーバIDxj3をランダムに選ぶことを順に行い、k−1台目のサーバになる前に選ばれたサーバが既に第2IDを選択したサーバでないようにすればよい。これは、第2IDを既に選択しているサーバは新たな第2IDを選択することができないので、そこで閉じることになるためである。各IDの情報は公開される。
第iのサーバ14xiのCPU22は、図60(A)の更新処理を実行する。即ち、ステップ381で、それぞれk個の乱数di0、di1、・・・、dik-1と、ri1、・・・、rik-1を生成し、以下の多項式を生成する。
δi(x)=di0+di1x+di2x2+・・・diu-1xu-1
λi(x)=di0+ri1x+ri2x2+・・・riu-1xu-1
ステップ383で、全サーバの第1IDを入れた値δi(x1)、δi(x2)、・・・、δi(xn)を成し、ステップ385で、δi(xj)を第jのサーバ14xj(j=1,・・・,n)に送信する。これにより、第iのサーバ14xiは、他のサーバから送信されたδj(xi)を受信する。
ステップ387で、xに全サーバの第2IDを入れた値λi(x1’)、λi(x2’)、・・・、λi(xn’)を生成して、ステップ389で、λi(xj’)を、第jのサーバ14xj(j=1,・・・,n)に送信する。これにより、第iのサーバ14xiは、他のサーバから送信されたλj(xi’)を受信する。
ステップ401で、自分がもつ分散値Wa’(xi)に、受信した全てのδ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
ステップ403で、受信した全てのλj(xi’)を足しこんで以下を計算し保存する。
λ(xi’)=Σλj(xi’)=(Σdi0)+(Σri1)xi’ +・・・+(Σrik-1)xi’k-1
[復元]
復元装置16のCPU22は、図60(B)の復元処理を実行する。即ち、ステップ411で、k個のサーバからWa’(xi)を集めて、解いて(a+Σdi0)を計算する。ステップ413で、k個のサーバからλ(xi’)を集めて、解いて(Σdi0)を計算する。
ステップ415で、(a+Σdi0)から(Σdi0)を引いて秘密情報aを計算する。
以上の特徴は従来定数項を0とする多項式によって更新されていたが、それを定数項を0としない。以上では更新処理だけではなく、それに伴い復元においても処理が必要になる。また、λ(xi)を保存するため記憶容量が増加する。しかし、攻撃者はk−1個のサーバを盗聴できたとしても、Wa’(xi)とλ(xi’)の秘密情報は全く得られないため、更新値もわからない。
この更新法は、kをu(>k)とすればkの拡大にも対応可能である。また、[復元]は以下のようにすることもできる。
(1)各サーバはλi(xj’)をサーバxj’に送信する。
(2)各サーバはWa’(xi)+λ(xi)を計算して復元装置16に送信する。
(3)復元装置16はk個のサーバからWa’(xi)+λ(xi)を集めて、解いてaを計算する。
また、第2IDをランダムに選ばなくても例えば、xiに対してxi+cを第2ID(cは1以上の整数)とすることもできる。さらに、秘匿更新法1に対応する手法を以下に示す。
秘匿更新5
[分散]
図61(A)を参照して、サーバが実行する分散処理を説明する。この処理では秘匿更新4と同様に各サーバは第1IDと第2IDをもつ。以下ではことわりがない限り、サーバIDは第1IDを指す。
第1のサーバ14x1〜第nのサーバ14xnの内、復元処理を行う1台のサーバがランダムに選択されている。選択されたサーバを、第dのサーバ14xとする。例えば、第(k+1)のサーバ14x(k+1)とする。
第dのサーバ14xを以下のk台のサーバに含めることもできるが、説明を簡単にするためk台のサーバは第dのサーバ14x以外とする。第dのサーバ14x以外のk台のサーバ、例えば、第1のサーバ14x〜第kのサーバ14xは、ステップ421で、乱数Wa’iを生成する。第1のサーバ14x〜第kのサーバ14xは、ステップ423で、自分が既に持つ分散値Wa’(xi)と新たに生成したWa’iとの差分Ui’を計算する。
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}
なお、aj’(j=1,…,k-1)は、ステップ427で多項式を解く事によって得られる乱数である。
第1のサーバ14x〜第kのサーバ14xは、ステップ425で、差分U’を第dのサーバ14xに送信する。
第dのサーバ14xは、ステップ427で、k個の多項式を解き、α(a-a’),α(a1-a1’),・・・,α(ak-1-ak-1’)を求め、残りのn−(k+1)台のサーバ14x、例えば、第(k+2)のサーバ14x(k+2)〜第nのサーバ14xと、自身の第dのサーバ14xに対する以下の差分値Wj’を計算する。
Wj’=α{(a1-a1’)xj+(a2-a2’)xj2+・・・+(ak-1-ak-1’)xjk-1} (ただし、j=k+1,・・・,n)
第dのサーバ14xは、ステップ429で、差分値Wj’をサーバ14x(j=k+1,・・・,n)に送信する。サーバ14xjは送られたWj’と、既に持っている分散値Wa’(xi)とを足して新たな分散値Wa’(xi)とする。
第dのサーバ14xは、ステップ433で、α(a1-a1’)を以下のように分散する。
Wd’(xi’)=α(a-a’)+d1xi’+d2xi’2+・・・+dk-1xi’k-1
第dのサーバ14xは、ステップ435で、サーバ14xi(i=1,・・・,n)に第2IDの値であるWd’(xi’)を送信する。なお、第dのサーバ14xは、自身のWa’(xk+1’)を、自身の記憶装置34に保存する。
[復元]
次に、図61(B)を参照して、各サーバ(第1のサーバ14x〜第nのサーバ14xm)が実行する復元処理を説明する。即ち、ステップ437で、Wd’(xi’)をサーバ14xi’に送信し、よって、ステップ439で、Wd’(xi)を受信する。
ステップ441で、Wd’(xi)+Wa’(xi)=α{a+(d1+a1’)xi+(d2+a2’)xi2+・・・+(dk-1+ak-1’)xik-1}を計算する。
第1のサーバ14x〜第nのサーバ14xmの内の、復元装置16から指示されたk個のサーバは、ステップ443で、Wd’(xi)+Wa’(xi)を復元装置16に送信する。
そして、復元装置16は、k個のサーバからWa’(xi)+Wd’(xi)を受信し、解いてαaを計算する。
この場合、Wd’(xi)+Wa’(xi)を新たな分散値として、秘匿演算を継続可能であることは明らかである。
秘匿更新4と5の特徴は、定数項を0としないk個の補正情報δj(xi)またはUj’から分散値の更新情報Σδj(xi)またはWj’を計算することであり、これによってk−1台の盗聴を行っても更新情報は得られない。このような手法は今まで提案されておらず、この特徴は請求項11に示される。
<第6の実施の形態>
次に、秘匿検索について示す。ここでは秘密情報を持つオ−ナが、秘密情報に対応する検索IDを分散して秘密情報の分散値とともにサ−バシステムに保管し、ある秘密情報の検索を希望するユ−ザは秘密情報に対応する検索IDを分散して、分散値同志で検索を行う。
(秘匿検索1(基本形:検索サーバ18を用いない))
[分散]
第1のディーラ装置12Aでは、m個の秘密情報(前述した第1の実施の形態〜第5の実施の形態の何れかの分散により上記のように分散されている)に対応するm個の検索IDをkj(j=1,…,m)としている。第1のディーラ装置12AのCPU22は、図62の分散処理を実行する。即ち、ステップ412で、検索IDごとの乱数rjを生成し、ステップ414で、下記の分散値F(x)、R(x)を計算する。
(x)=rj(k+aj1+aj2 +…+ajk−1 k−1)(i=1,…,n)
R(x)=r+rj1+rj2 …+rjk−1 k−1
ステップ416で、分散値F(x)、R(x)を第iのサ−バ14x(i=1,…,n)に送信して保管させる。
よって、各サ−バ、例えば、第1のサ−バ14xの記憶装置34には、図63(A)に示すように、検索IDであるk(j=1,2…,m/2,…m)に対応して、分散値F(x)、R(x)が記憶されている。ただし、分散値F(x)、R(x)は検索ID=kjに応じて昇順に並べられている。さらに、検索IDに対応する秘密情報に対する分散値もFj(xi)、Rj(xi)と並んで保存されている。
[検索]
各サ−バは保管している分散値の中央値、即ちj=m/2により識別される分散値から検索を始めるようになっている。
復元装置16のCPU22は、図64の検索処理を実行する。即ち、ステップ420で、検索を希望するユ−ザの操作に従って検索ID=k’を入力し、ステップ422で、検索ID=kj’に乱数qを乗じたq・kj’をオ−ナの第1のディーラ装置12Aに送信する。
第1のディーラ装置12Aは、図65の分散値F(x)の計算・送信処理を実行する。即ち、ステップ452で、q・kj’を受信し、ステップ454で、q・k’を、以下のように秘密分散するための分散値F’(x)を計算する。
j’(x)=q・k’+bj1+bj2 +…+bjk−1 k−1(i=1,…,k)
ステップ456で、分散値F’(x)を第iのサ−バ14xに送信する。
第iのサ−バ14x、即ち、第1のサ−バ14x〜第kのサ−バ14xの各CPU22は、図66の差tjの計算・送信処理を実行する。即ち、ステップ462で、分散値Fj’(x)を受信し、ステップ464で、検索IDのjを設定する。本処理が最初に実行されるとき、ステップ464では、jには、m/2が設定される。ステップ466で、jに対応する分散値F(x)、R(x)を、記憶装置34から読み出し、ステップ468で、分散値F(x)(i=1,…,k)をユ−ザの復元装置16に送信する。これにより、復元装置16は、図64のステップ424で、分散値F(x)を受信する。
図64のステップ426で、δ(0)=0となる多項式δ(x)を生成し、ステップ428で、以下の分散値F(x)を計算する。
(x)=q・F(x)+δ(x)(i=1,…,k)
ステップ430で、分散値F(x)を第iのサ−バ14xに送信する。これにより、第iのサ−バ14xは、図66のステップ470で、分散値F(x)を受信する。
ステップ472で、k個の分散値R(x)からrを復元する。
ステップ474で、乱数tjを生成し、以下の差t{F(x)−r’(x)}を計算する。
t{F(x)−r’(x)}=tj・rj・q{(k−k’)+(aj1−bj1)x+…+(ajk−1−bjk−1)x k−1}
ステップ476で、差t{F(x)−r’(x)}を復元装置16に送信する。
復元装置16は、図64のステップ432で、差t{F(x)−r’(x)}を受信し、ステップ434で、差t{F(x)−r’(x)}の多項式を解き、定数項を求め、ステップ436で、定数項r・q(k−kj’)が0か否かを判断する。定数項r・q(k−kj’)が0であると判断された場合には、検索IDが一致してとして、ステップ438で、検索IDを現在のjとする。定数項r・q(k−kj’)が0でないと判断された場合、ステップ440で、本処理(ステップ424〜436)が所定回数、例えば、logm回実行したか否かを判断する。本処理(ステップ424〜436)がlogm回実行したと判断された場合には、ステップ442で、検索IDなしとする。
本処理(ステップ424〜436)がlogm回実行したと判断されなかった場合には、ステップ444で、定数項r・q(k−kj’)は正か否かを判断する。定数項r・q(k−kj’)が正と判断された場合には、ステップ446で、jを、当該jより小さい値に設定して、第iのサーバ14xiに指示する。例えば、検索IDの検索領域をjより小さい領域として設定し、設定した検索領域の中央値をjに設定、設定されたjを、第iのサーバ14xiに指示する。その後、検索処理はステップ424に戻る。
定数項r・q(k−kj’)が正と判断されなかった場合には、ステップ448で、jを、当該jより大きい値に設定して、第iのサーバ14xiに指示する。例えば、検索IDの検索領域をjより大きい領域として設定し、設定した検索領域の中央値をjに設定、設定されたjを、第iのサーバ14xiに指示する。その後、検索処理はステップ424に戻る。
例えば、本処理(ステップ424〜436)が最初に実行され、定数項rj・q(kj−kj’)が正と判断された場合には、ステップ442で、検索IDの検索領域をjより小さい領域、1〜(m/2)−1として設定し、設定した検索領域の中央値、3m/4をjに設定する。本処理(ステップ424〜436)が再度実行され、定数項rj・q(kj−kj’)が正と判断されなかった場合には、ステップ448で、検索IDの検索領域(1〜(m/2)−1)をj=3m/4より大きい領域、(3m/4)+1〜(1〜(m/2)−1)として設定し、設定した検索領域の中央値をjに設定する。
上記のようにjの値が第iのサーバ14xiに対して指示されると、図66におけるステップ478のjが指示されたか否かの判定結果が肯定判定となって、差tjの計算処理はステップ464に戻る。これにより、図66のステップ464では、検索IDのjとして、上記指示された値を設定する。その後の処理(ステップ466〜ステップ476)は、上記設定されたjに基づいて、実行される。
第1の特徴は[分散]において、請求項7の1例として分散値を検索ID=kjに応じて昇順に並べ、[検索]において最初の検索をm個の検索IDの中央値、即ちj=m/2から始めることである。
また、請求項9の1例として[検索]で得られる定数項rj・q(kj−kj’)を出力する。rj・qは正の値であるので、その値が正であればkj−kj’>0、即ちkj>kj’を意味するので、kjの小さい方の中央値、即ちj=3m/4として再び検索を行う。もし、次の検索における定数項が同様に正であればやはりkj>kj’を意味するので、さらにkjの小さい方の中央値を検索する。逆に、次の検索における定数項が負であればkj<kj’を意味するので、kjの大きい方の中央値を検索する。即ち、mが大きくてもlog2m回の検索で終了する。よって、[検索]でlog2m回探索しても一致する検索IDがない場合は、その検索IDは保存されていないと判断できる。
第2の特徴は[検索]においてオ−ナはユ−ザからq・kj’を得るが、乱数qがかかっているためユ−ザの検索IDであるkj’はわからない。また、ユ−ザはサ−バからFj(x)を得るが、rjがかかっているのでサ−バの検索IDであるkjはわからない。さらに、ユ−ザはt{F(x)−rj’(x)}も得るが、F(x)以外不明であるのでrは得られない。また、サ−バはF(x)とFj’(x)とrを得るが、k個が結託しなければ秘密情報は復元されない。
上記[分散]において、分散値はkの昇順に並べるとしているが、降順に並べ[検索]の方向を逆にしてもよい。[検索]において、オ−ナがq・kj’を分散させるが、ユ−ザが分散してもよい。
秘匿検索1は単純であるが、オ−ナ、ユ−ザともに毎回検索に参加するため、1つのkj’に対する検索に対して、最大log2m回の演算を行う必要があり、最大負担が大きい。そこで、検索を専門に行う(計算能力が高い)検索部を設け、オ−ナ、ユ−ザともに1つの検索IDに対して1回の演算だけですむ方式を以下に示す。検索部はディーラ装置、サ−バシステム、復元装置と別の装置としてもよいが、サ−バシステムの中に存在するとしてもよい。
(秘匿検索2(検索サーバ18を用いる))
[分散]
オ−ナの第1のディーラ装置12Aは、m個の秘密情報(前述した第1の実施の形態〜第5の実施の形態の何れかの分散により上記のように分散されている)に対応するm個の検索IDをk(j=1,…,m)とし、共通の乱数rと検索IDごとの乱数rを生成して、下記分散値F(x)、R(x)を計算し、第iのサ−バ14x(i=1,…,n)、即ち、第1のサ−バ14x~第nのサ−バ14xに分散保管させる(aji,rji,tjiも乱数)。よって、例えば、第1のサーバ14xの記憶装置34には、図63(B)に示すように、各分散値F(x)、R(x)が記憶されている。さらに、検索IDに対応する秘密情報に対する分散値もFj(xi)、Rj(xi)と並んで保存されている。
(x)=rj・(k+t’j1+t’j2 +…+t’jk−1 k−1)(i=1,…,n)
Rj(x)=r・r+rj1+rj2 +…+rjk−1x k−1
ただし、分散値は検索IDであるkに応じて昇順に並べられているとする。
[検索]
各サ−バは保管している分散値の中央値、即ちj=m/2により識別される分散値から検索を始める。
復元装置16のCPU22は、図67の分散値Fu(x)の計算・送信処理を実行する。即ち、ステップ482で、検索を希望するユ−ザの操作に従って、検索IDであるk’を入力し、ステップ484で、検索IDであるk’に乱数qを乗じたq・k’を第1のディーラ装置12Aに送信する。
第1のディーラ装置12AのCPU22は、図68の分散値Fo(x)の計算・送信処理を実行する。即ち、ステップ502で、q・k’を受信する。
ステップ504で、tjを生成し、ステップ506でt・rを計算し、ステップ508で、t・rを復元装置16に送信する。これにより、復元装置16は、図67のステップ486で、t・rを受信する。
また、第1のディーラ装置12Aは、図68のステップ510で、以下の分散値Fo(x)を計算する。
Fo(x)=t・q・k’+bj1+bj2 +…+bjk−1 k−1(i=1,…,n)
第1のディーラ装置12Aは、ステップ512で、分散値F(x)を各サ−バ(14x〜14x)に送信する。
各サ−バは、図69の差の計算・送信処理を実行する。即ち、ステップ522で、分散値Fo(x)を受信する。
一方、復元装置16は、図67のステップ488で、以下の分散値F(x)を計算する。
(x)=t・r・q+cj1+cj2 +…+cjk−1 k−1(i=1,…,n)
ステップ490で、分散値F(x)を各サ−バに送信する。これにより、各サ−バは、図69のステップ524で、分散値F(x)を受信する。
各サーバは、ステップ525で、R(x)、T(x)を検索サーバ18に送信する。検索サーバ18のCPU22は、図70の検索処理を実行する。即ち、ステップ542で、各サーバが送信してR(x)とT(x)をk個集め、ステップ544で、r・rとr・kを復元し、ステップ546で、各サ−バに送信する。これにより、各サ−バは、図69のステップ526で、r・rとr・kを受信する。
各サ−バは、ステップ528で、以下の差を計算する。
・k・F(x)−r・r・F(x)=t・r・r・q{(k−k’)+(cj1−bj1)x+…+(cjk−1−bjk−1)x k−1}
ステップ530で、差を検索サーバ18に送信する。これにより、検索サーバ18は、図70のステップ548で、差を受信する。
検索サーバ18はステップ550で、差の多項式を解き、定数項を求め、ステップ552〜ステップ564を実行する。なお、ステップ552〜ステップ564は、図64のステップ436〜448と同様であるので、その説明を省略する。
図70のステップ562、564で上記指示がされると、図68、図67図69のステップ532が肯定判定となって、ステップ525〜532の処理が実行され、これに伴って、図70の検索処理が実行される。
上記の特徴はユーザの処理を1度で終わらせるために、ユーザは乱数qを生成して自分の検索IDkjを秘匿化してオーナに示し、オーナから送られた検索IDに関連する乱数tj・rに自分が定めた乱数qを乗じて返すことである。この特徴は請求項8に示される。
また、最初のオーナまたは異なるオーナが検索IDを追加する場合、そのオーナをユーザとし、追加IDをユーザの検索IDとして検索する。一致するIDがあった場合、そのユーザはその検索IDを変える。なければ、最終位置の隣接ID(追加IDが検索ID中にない場合、最後まで一致はしないが、最終位置では隣接IDの検索結果の方向が逆になり、追加IDがその中間位置に入るべきであることがわかる)の中間位置に追加IDの分散値を追加する。ただし、最初のオーナーが追加を行う場合はこれでよいが、異なるオーナがデータの追加を行う場合、データは昇順に並んでも、オーナーの順番がバラバラとなるため、検索のたびにオーナーの許可が必要となる。よってこの場合、オーナーはシステムに検索を許可するユーザの条件を示し、検索の許諾をシステムに委託するなどすれば効率的となる。以上の特徴は請求項17に示される。
ところで、第1の実施の形態〜第4の実施の形態に示した例では、α=α・・・αを生成するが、αは秘密情報毎に異なる乱数であるので、α=rjとすれば秘匿検索におけるTj(x)は秘匿演算のWa’(x)などと同じ形式の式となる。ただし、秘匿検索に対してはr・rjに対する分散値Rj(x)が増えるので、秘密情報と検索ID間の相互検索を行えるようにするためには、各サ−バは秘匿演算のために第1の実施の形態〜第4の実施の形態の[分散]に示すように1つの秘密情報に対してk+1個の分散値、秘匿検索のためにRj(x)に対応する分散値で、k+2個の分散値を保存する必要がある。これによって、秘匿演算と秘匿検索の2つが同時に実現できる。
<第7の実施の形態>
秘匿乗算1’(非対称秘密分散対応)
文献[4]に示される非対称秘密分散に適した秘匿乗算法を以下に示す。ただし、hは1〜k−1までの整数のうち、小型化を実現するための鍵サ−バ数を示すとする。ここでは、オ−ナがその鍵サ−バを持つとする。以下に説明する秘匿乗算i’などは秘匿乗算iに対応する手法である。以下では、秘密情報aをもつオ−ナAがh個の鍵サーバの処理を第1のディーラ装置12Aによって実行する場合を示すが、鍵サーバは外部にあって、そこから乱数を得ても実行することも可能である。また、秘密情報bをもつオ−ナBの処理もディーラ装置12Bで行うが、鍵サーバが外部にあってそこから乱数を得ても実行することが可能である。また、ディーラ装置がh個の鍵サーバの処理を実行する場合、h個の鍵サーバが各々管理する鍵(全部でh個)をディーラ装置が管理する1つの鍵を用いて鍵サーバのIDを暗号化するなどして、それを各鍵サーバの鍵としてもよい。この場合、ディーラ装置は1つの鍵を管理するだけでh台分の鍵サーバの役割を果たすことができる(具体例は後述の特徴参照)。
[分散]
秘密情報aをもつオ−ナAの第1のディーラ装置12AのCPU22は、図71の分散処理を実行する。即ち、ステップ572で、分散値Wa(x)〜Wa(x)(hはk−1以下の整数)として、管理する1つの鍵からh個の乱数を生成する。生成した乱数は、分散値Wa(x)〜Wa(x)として、第1のディーラ装置12Aの記憶装置34に記憶される。
ステップ574で、秘密情報aに対して、k−1−h個の乱数a0,h+1〜a0,k−1を定め、分散値Wa(x)〜Wa(x)を以下の多項式として解いて残りのh個の乱数a0,1〜a0,h-1を求める。
Wa(x)=a+a0,1+・・・+a0,k−1 k−1(i=1,・・・,h)
ステップ576で、aとa0,1〜a0,k−1を用いて、以下の式から第(h+1)のサーバ14x(h+1)〜第nのサーバ14xの分散値Wa(xi)を求める。
Wa(x)=a+a0,1xi+・・・+a0,k−1 k−1(i=h+1,・・・,n)
ステップ578で、ステップ576で求めら分散値Wa(x)を第(h+1)のサーバ14x(h+1)〜第nのサーバ14xに送信する。
また、秘密情報bを持つオ−ナBの第2のディーラ装置12BのCPU22は、上記説明した図71のステップ572〜ステップ578の各処理を独立に実行し、自らの分散値Wb(x)〜Wb(x)と、第(h+1)のサーバ14x(h+1)〜第nのサーバ14xnの分散値W(xh+1)〜W(x)を求め、第(h+1)のサーバ14x(h+1)〜第nのサーバ14xに送信する。ただし、上記乱数a0,iはb0,iになる。
[乗算]
第1のディーラ装置12AのCPU22は、図72の乗算処理を実行する。即ち、ステップ582で、k個の乱数α(i=1,・・・,k)を生成し、ステップ584で、その積α=α・α・…αを計算する。
ステップ586で、自身の第1のディーラ装置12Aを含むk個のサ−バから分散値Wa(xi)を集め、ステップ588で、k個の分散値Wa(x)を解き、aを求め、ステップ600で、aにαをかけたαaを求め、ステップ602で、αaを第1のサーバ14x1〜第nのサーバ14x及び第2のディーラ装置12Bに送信する。なお、第1のディーラ装置12Aの記憶装置34にk個の乱数αを記憶する。
第2のディーラ装置12BのCPU22は、図73の乗算処理を実行する。即ち、ステップ612で、k個の乱数β(i=1,・・・,k)を生成し、ステップ614で、その積β=β・β・…βを計算する。
ステップ616で、自身の第2のディーラ装置12Bを含むk個以上のサ−バから分散値Wb(x)を集め、ステップ618で、以下を計算する。ただし、δ(x)はδ(0)=0となるk−1次の多項式である。
Wab’(x)=αa・β・Wb(x)+δ(x
ステップ620で、分散値Wab’(x)を、元のサーバに送信する。なお、第2のディーラ装置12Bの記憶装置34にk個の乱数βを記憶する。
[復元]
第1のディーラ装置12Aは、自身の第1のディーラ装置12A及び第2のディーラ装置12Bを含むk個のサ−バx(j=1,・・・,k)にαを送信する。第2のディーラ装置12Bは、自身の第2のディーラ装置12Bと第1のディーラ装置12Aを含むk個のサ−バxj(j=1,・・・,k)にβを送信する。
ここで、k個のサ−バxには、第1のディーラ装置12A、第2のディーラ装置12B、及び第1のサーバ12x〜第(k−2)サーバ12xk−2が含まれる。ここでは簡単のため、j=k−1で、第1のディーラ装置12Aが識別され、j=kで、第2のディーラ装置12Bが識別されるとする。よって、第1のディーラ装置12Aには、α=αk−1、β=βk−1が送信され、第2のディーラ装置12Bには、α=α、β=βが送信される。
上記k個のサ−バxj(j=1,…,k)のCPU22は、図74のαjβjの計算・送信処理を実行する。即ち、ステップ622で、第1のディーラ装置からα(=αk−1)を受信し、ステップ624で、第2のディーラ装置からβを受信し、ステップ626で、積αβを計算する。ステップ628で、Wab’(x)とαβを復元装置16に送信する。
復元者の復元装置16のCPU22は図75の復元処理を実行する。即ち、ステップ630で、第1のディーラ装置12A及び第2のディーラ装置12Bを含むk個のサーバから、Wab’(x)、αβを受信し、ステップ632で、Wab’(x)からαβabを復元する。復元装置16は、ステップ634で、αβabをαβ(j=1,・・・,k)で割ってabを得る。
以上説明した提案方式の第1の特徴は、[分散]の図71のステップ572において、第1のディーラ装置12A及び第2のディーラ装置12Bが各々鍵を1つ管理するだけで、h台のサ−バが保存すべきだった分散値を削減できる点である。例えばサ−バIDであるx1〜xhを第1のディーラ装置12Aの鍵を用いて暗号化したものをk(j=1,・・・,h)とし、k用いてaのIDを暗号化したものをWa(x)とすることができる。即ち、第1のディーラ装置12Aは鍵1つを持つだけで[分散]の図71の処理が実現できる。第2のディーラ装置12Bも同様である。すなわち、第1のディーラ装置12Aと第2のディーラ装置12Bは分散値を保存しなくても計算によって求められるため、h台のサーバを不要にできる。これは、非対称秘密分散の特徴であるが、上記秘匿乗算においても有効であることがわかる。
第2の特徴は、請求項12に示すように上記特徴をもつシステムにおいて、ステップ572に示されるようにh個の乱数を分散値として、ステップ574で残りのサーバに対する分散値を計算する点である。よって、[分散]の図71のステップ578で1つの秘密情報aに対して、n−h台の各サ−バは1台当たり1個の分散値Wa(x)を記憶するだけでよい。秘匿乗算1では、aに対して全サ−バがk+1個の分散値(Wa’(x),Wah(x)(h=1,・・・.k))を記憶する必要があったが、秘匿乗算1’ではn−h台のサーバが1個のWa(xi)を記憶するだけでよい。る。よって、第1の特徴と合わせると、第7の実施の形態の分散は、秘匿乗算1に比べ大幅な記憶容量の削減が実現できる。以上が非対称秘密分散による記憶容量削減の特徴である。また、記憶容量削減に伴う通信量も削減できる。
秘匿乗算1では[分散]においてディーラ装置Aはn個のサ−バにk+1個の分散値を送る必要があった。これに対し、秘匿乗算1’では[分散]の図71のステップ578においてディーラ装置Aがn−h個のサ−バに1個の分散値を送るだけでよい。さらに、秘匿乗算1の[復元]ではk個のサ−バがk個の分散値を集める必要があるが、秘匿乗算1’では請求項12に示すように第1のディーラ装置12Aがステップ582でk個の乱数を生成し、k台のサ−バに各々1つの乱数を送信するだけでよい。ただし、その乱数はステップ584で合成され、ステップ600で秘匿化秘密情報αaを生成するために用いられる。これによって、通信量も大きく削減できることがわかる。[乗算]の図73のステップ616、ステップ618でWb(x)を集めてWab’(x)を送信するため2(n―h)回通信が増えるが、全体的には削減される。
計算量に関しては、秘匿乗算1[分散]においてk個のαの分散処理と[復元]においてその復元処理が不要になるが、秘匿乗算1’では[分散]の図71のステップ572において乱数生成(暗号化)とステップ574において多項式を解く処理が増す。よって、計算量に関してk,nの値により得失は拮抗する。
秘匿除算1において、秘密情報の[分散]処理を秘匿乗算1’と同様に実行し、α(j=1,・・・,k)などのk個の乱数及びそれを合成した乱数の生成、及びαa及びWab’(xi)の生成を秘匿乗算1’[乗算]と同様に演算中に行い、k個の乱数の配布を[復元]と同様にディーラ装置が直接行えば、そのまま秘匿除算1’が実現できることは明らかである。ただし、ステップ616ではWab’(x)=αa・β・Wb(x)+δ(x)ではなく、Wab’(x)=(β/αa)・Wb(x)+δ(x)を計算し、ステップ626でαjβjではなくβj/αjを計算する。
秘匿除算3’(非対称秘密分散及び実数対応)
実数による除算も以下のようにすれば実現できることも明らかである。以下では、b/aを計算する場合を説明する。
[分散]
図76を参照して、第1のディーラ装置12A、第2のディーラ装置12B、サーバx及び復元装置16が実行する復元処理を説明する。なお、サーバxには、後述する特定の1台のサーバxが含まれる。
秘匿除算3’の[分散]は、非対称秘密分散対応(図71)と同様であるので、その説明を省略する。
[復元]
第1のディーラ装置12Aは、ステップ642で、自身の第1のディーラ装置12Aが生成した実数αjを、k個のサーバx(j=1,…,k)に各々送信する。
第2のディーラ装置12Bは、ステップ644で、自身の第2のディーラ装置12Bが生成した実数βjを、k個のサーバx(j=1,…,k)に各々送信する。
各サ−バ14xj(j=1,…,k)は、ステップ646で、β/αを実数として計算し、ステップ648で、復元装置16にβ/αを送信する。
復元装置16は、ステップ650で、β/α(j=1,…,k)を実数として掛けてβ/αを計算する。
第1のディーラ装置12Aは、ステップ654で、サーバx(合計k個の装置)からWa(x)を集め、aを復元して実数化し、ステップ656で、実数αjからαを実数計算して、さらにαaを計算し、ステップ658で、特定のサーバxにαaを送信する。
第2のディーラ装置12Bは、ステップ660で、サーバxからWb(xi)を集め、bを復元して実数化し、ステップ662で、実数βjからβを実数計算して、さらにβbを計算し、ステップ664で、特定のサーバxにβbを送信する。
特定のサーバxは、ステップ666で、βbをαaで実数として割り、ステップ668で、βb/αaを復元装置16に送信する。
復元装置16は、ステップ670で、βb/αaをβ/αで割り実数、計算しb/aを得る。
実数演算に関して乗算や加算、積和にも同様に対応できることは明らかである。
以上説明した例では、第1のディーラ装置12Aは、実数αを、サーバxに送信し、第2のディーラ装置12Bは、実数βを、サーバxに送信する。即ち、第1のディーラ装置12Aは、実数αを、第2のディーラ装置12Bには送信せず、また、第2のディーラ装置12Bは、実数βを、第1のディーラ装置12Aに送信していない。しかし、第1のディーラ装置12Aは、実数αを、第2のディーラ装置12Bと、合計k−1個のサーバに送信し、第2のディーラ装置12Bは、実数βを、第1のディーラ装置12Aと、合計k−1個のサーバに送信して、以上と同様の処理をしてもよい。以下も同様である。
秘匿積和1’(非対称秘密分散対応)
演算の繰り返しに関して、秘匿積和は種々の演算に用いられるので、改めて非対称秘密分散を用いた場合を示す。これによって、かかる乱数が異なる秘匿分散値同士の和や乱数を変換した復元も同様に実現できることは明らかである。また、秘匿乗算2や秘匿除算2などの繰り返しも同様に実現できることは明らかである。
なお、以下では、a・b+cを計算する場合を説明する。
[分散]
オ−ナA,B,Cの各指示に従って、各々の第1のディーラ装置12A〜第3のディーラ装置12Cは、秘密情報a,b,cに対して独立に以下の分散値を計算し、n台のサ−バ14x〜14xに分散保管する(i=1,…,n)。すなわち、第3のディーラ装置14CのCPU22も図71の分散処理を実行する。なお、a0,jはc0,jとなる。
Wa(x)=a+a0,1+・・・+a0,k−1 k−1
Wb(x)=b+b0,1+・・・+b0,k−1 k−1
Wc(x)=c+c0,1+・・・+c0,k−1 k−1
[積和]
図77を参照して、第1のディーラ装置14A〜第3のディーラ装置14C、サーバx、及び復元装置16のCPU22が実行する積和処理及び復元処理を説明する。即ち、秘匿乗算1’の[分散]及び[乗算](図71及び図72の処理)を実行する。サ−バ14x(j=1,…,k)は、αaを受信し(図77のステップ602(図72も参照))、Wab’(x)=αa・β・Wb(x)+δ(x)を得る(図77のステップ620参照)。
第3のディーラ装置12Cは、図77のステップ672で、k個の乱数γi(i=1,・・・,k)を生成し、その積γを計算する。
第3のディーラ装置12Cは、ステップ674で、k個のサーバxから分散値Wc(x)を集めて、ステップ676で、以下の分散値Wc’(x)を計算し、ステップ678で、サーバxに分散値Wc’(x)送信する。ただし、δ2(x)はδ2(0)=0となるk−1次の多項式。
Wc’(x)=γ・Wc(x)+δ2(x
ディーラ装置12A,12B,12Cはそれぞれステップ678、680、682で、k個のサーバx(j=1,・・・,k)にそれぞれのα,γjを送信する。
サーバx(j=1,…,k)は、ステップ684で、乱数μを生成し、αβ/μを計算し、ステップ686で、αβ/μを復元装置16に送信する。サーバxjは、ステップ688で、γ/μを計算し、ステップ690で、γ/μを復元装置16に送信する。
復元装置16は、ステップ692で、各αβ/μとαβ/μをかけて、αβ/μとγ/μとを計算し、ステップ694で、αβ/μとγ/μとをサーバxに送信する。
サーバxj(j=1,…,k)は、ステップ696で、Wab’(x)をαβ/μで割り、Wc’(xj)をγ/μで割り、Wab’(x)=μ(ab+ab0,1+・・・+ab0,k−1^k−1)とWc’(x)=μ(c+c0,1+・・・+c0,k−1 k−1)を計算する。
サーバx(j=1,…,k)は、ステップ698で、Wabc’(x)=Wab’(x)+Wc’(x)=μ{(ab+c)+abc0,1xi+・・・+abc0,k−1xik−1}を計算する。
[復元]
復元者の復元装置16は、ステップ701で、サーバxからWabc’(xj)を得て、ステップ703で、μ(ab+c)を復元する。
復元装置16は、ステップ705で、サーバxからμを得て、ステップ707で、(ab+c)を計算する。
秘匿積和1’は、秘匿積和1に対応しても、α(j=1,・・・.k)などのk個の乱数が不要であるため、大きな記憶容量の削減が実現できる。また、それに伴う通信量の削減も実現できる。また、ここではμを用いて乱数変換を行ったが、例えばαjβjjを計算することにより、Wc’(xj)のみγをαβに乱数変換して、乱数をαβにそろえてもよい。
秘匿乗算4’
秘密情報として0を扱う秘匿乗算4に対しても以下のように変形すれば、秘匿乗算4’への対応も可能である。
[分散]
秘匿乗算1’(図71)と同じであるので(図78のステップ578も参照)、その説明を省略する。
図78(ステップ672以降)を参照して、サーバx及び復元装置16が実行する秘匿乗算(乗算及び復元)処理を説明する。
[乗算]
第1のディーラ装置12Aは、ステップ672で、k個の乱数α(i=1,・・・,k)を生成し、その積αを計算する。第2のディーラ装置12Bは、ステップ674で、k個の乱数β(i=1,・・・,k)を生成し、その積βを計算する。
第1のディーラ装置12Aは、ステップ676で、k個のサーバxから分散値Wa(x)を集め、ステップ678で、サ−バIDn+xiに対応する分散値Wa(x(n+xi))を計算し、ステップ680で、その分散値Wa(x(n+xi))にαをかけた分散値Wa’(x)をサーバxに送信する。
第2のディーラ装置12Bは、ステップ682で、k個のサーバxjから分散値Wb(x)を集めて、ステップ684で、サ−バIDn+xiに対応する分散値Wb(x(n+x))を計算し、ステップ686で、その分散値Wb(x(n+xi))にβをかけた分散値Wb’(x)をサーバxjに送信する。
サーバxは、ステップ688で、Wab(x)=Wa(x)・Wb(x)とWab’(x)=Wa’(x)・Wb’(x)を計算する(i=1,…,n)。
[復元]
第1のディーラ装置12Aは、ステップ690で、第2のディーラ装置12Bを含むk個のサーバx(j=1,・・・,k)にαを送信する。
第2のディーラ装置12Bは、ステップ692で、第1のディーラ装置12Aを含むk個のサーバx(j=1,・・・,k)にβを送信する。
サーバx(j=1,…,k)は、ステップ694で、積αβを計算する。
サーバx(j=1,…,k)は、ステップ696で、Wab(x)とWab’(x)とαβを復元者の復元装置16に送信する。
復元装置16は、ステップ698で、全てのαβをかけてαβを計算し、Wab’(x)を割って、Wab’(x)/αβを計算する。
復元装置16は、ステップ700で、Wab(x)とWab’(x)/αβから2k−1個の分散値を用いてabを復元する。
秘匿乗算5に関しても演算中、αなどと同様にr,qを処理すればよい。[次数変換]に関しても、αを直接ディーラ装置からもらうようにすればよい。
秘匿更新1については以下のようにする。非対称秘密分散の特徴の1つはオ−ナが秘匿
演算に参加可能という点である。よって、k−1台のサ−バをオ−ナとし、オ−ナが直接他のサ−バに対する差分値を計算すればサ−バxは不要となる。オ−ナの計算負荷は増えるが、オ−ナは異なる乱数を今までの鍵を用いて出力する、または自分が管理する鍵を変えて異なる乱数を出力するだけで更新ができる。秘匿更新2〜5においてもオーナが更新処理(乱数発生と計算処理など)を行えば安全性は向上する。
秘匿検索2’(検索サーバ18を利用する)
秘匿検索に対しても、T(x)とR(x)のうちh個をオ−ナが1つの鍵から生成できるため、h台のサ−バの削減ができる。また、各サ−バが保存する情報も秘密情報に相当するkを秘匿化せずに秘密分散した分散値1つだけであるので、記憶容量は削減される。また、計算量もR(x)を解くことがないため削減される。
ただし、乱数rに対する分散値R(x)が必要なため、他の実施例と同様にR(xi)も削除する場合は以下のようになる。これにより、非対称秘密分散では秘匿検索に対しても1つの秘密情報に対して1つの分散値を記憶していればよい。以下では実用的な秘匿検索2に対する手法を示すが、秘匿検索1に対しても同様の対応ができることは明らかである。
[分散]
オ−ナの第1のディーラ装置12AのCPU22は、m個の秘密情報に対する検索IDをk(j=1,…,m)として、第7の実施の形態の秘匿乗算1’(図71のステップ572〜578)の各処理を実行する。即ち、1つの鍵から下記の形を持つ自らの分散値T(x)〜T(x)を生成し、それらと秘密情報を用いて他のサ−バxh+1〜xが持つ分散値T(xh+1)〜T(x)を求め、各サ−バに送る(hはk−1以下の整数)。ただし、分散値は検索IDであるkに応じて昇順に並べられているとする。
(x)=k+t’j1+t’j2 +…+t’jk−1 k−1
(i=1,…,n)
[検索]
ユーザの復元装置16のCPU22は、図65のステップ482〜490の処理を実行し、オーナの第1のディーラ装置12AのCPU22は、図79の分散値の計算・送信処理を実行し、第iのサーバ14xiのCPU22は、図80の差の計算・送信処理を実行し、検索サーバ18のCPU22は、図81の検索処理を実行する。なお、図79の分散値の計算・送信処理のステップ502〜512は、図66のステップ502〜512とほぼ同様である。
検索を希望するユ−ザの復元装置16は、検索ID=k’に乱数qを乗じたq・k’をオ−ナの第1のディーラ装置12Aに送信する(図65のステップ482、484)。
第1のディーラ装置12Aは、図79のステップ502で、q・kj’を受信し、ステップ504で、tとrを生成し、ステップ506で、t・rを計算し、ステップ508で、t・rを復元装置16に送信する。第1のディーラ装置12Aは、ステップ510で、q・k’にtをかけて以下の分散値F0を計算し、ステップ512で、分散値F0をサ−バに送信する。
o(x)=t・q・k’+bj1+bj2 +…+bjk−1 k−1
よって、第iのサーバ14xは、図80のステップ522で、分散値Fo(x)を受信する。
復元装置16は、t・rにqをかけて以下の分散値F(x)を計算し(図65のステップ488)、分散値F(x)を各サ−バに送信する(ステップ490)。
(x)=t・r・q+cj1+cj2 +…+cjk−1 k−1
よって、第iのサーバ14xは、図80のステップ524で、分散値F(x)を受信する。
第iのサーバ14x(i=1、2、・・・k)は、ステップ525Aで、T(xi)を第1のディーラ装置12Aに送信する。第1のディーラ装置12Aは、図79のステップ513で、T(x)を、k個集めて、ステップ515で、以下の分散値T’(x)を計算し、ステップ517で、分散値T’(x)を第iのサーバ14xに送信する。
T’(x)=r・T(x)+δ(x
ただし、rはk毎に定まる乱数であり、δ(x)はδ(0)=0となるk−1次の多項式である。
第iのサーバ14xは、図80のステップ527で、分散値T’(x)を受信する。
第1のディーラ装置12Aは、図79のステップ519で、r・rを第iのサーバ14xiに送信する。第iのサーバ14xiは、図80のステップ529で、r・rを受信し、ステップ530Aで、分散値T’(x)を検索サーバ18に送信する。
検索サーバ18は、図81のステップ541で、T’(xi)を受信し、ステップ543で、r・kを計算し、ステップ545で、r・kを第iのサーバ14xに送信する。
第iのサーバ14xiは、図80のステップ531で、r・kを受信し、ステップ533で、以下の差を計算して、ステップ535で、差を検索サーバ18に送信する。
r・k・F(x)−r・r・Fo(x)=t・r・r・q{(k−k’)+(cj1−bj1)x+…+(cjk−1−jk−1)x k−1}
検索サーバ18は、図81のステップ547で、差を受信し、ステップ549で、差の多項式を解いて定数項を求める。
以後、検索サーバ18のCPU22は、ステップ551〜563の処理を実行する。なお、ステップ551〜563は、図68のステップ552〜564に対応するので、その説明を省略する。なお、検索サーバ18が、図81のステップ561、563でjを指示すると、第iのサーバ14xiは、jの指示を受信し、これにより、図80のステップ537だ肯定判定され、差の計算・送信処理はステップ525Aに戻る。
<第8の実施の形態>
分散値の記憶容量を削減する手法としてランプ型秘密分散法が知られている。ランプ型秘密分散法は秘密情報SをL(≦k)個に分割してs1,・・・,sLとし、aL+1,・・・,ak-1を乱数としてk-1次多項式の係数とする。すなわち、以下の多項式を立て、W(xi)を第iのサーバ14xiの分散値とする。この場合、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が復元されるという特徴をもつ。
秘匿乗算1”(ランプ型基本形)
秘匿乗算1に対応するランプ型秘密分散を用いた秘匿乗算を以下に示す。ただし、秘密情報a,bをe進数d桁で表される素数p(>ed)未満の整数とし、a,bをL分割したah,j,bh,j、パラメータα,β,αj,βjなどは素数p’(>e(d/L))未満の整数とし、秘密分散に関する演算は素数q’(>p’u:uは1以上の整数)を法として行われる。以下に示す秘匿乗算1”において、上記以外は秘匿乗算1と同様である。よって、実数演算に対しても秘密情報a,b(実数)を整数表現してp以下の整数とすれば同様に対応できる。
[分散]
秘密情報aをもつオーナAの第1のディーラ装置12AのCPU22は、図82に示す分散処理を実行する。即ち、ステップ702で、素数p’未満のk個の乱数αiを生成し、q’を法としてその積αを計算する。
α=α1・α2・・・αk
ステップ704で、素数p未満の秘密情報aをL分散して素数p’未満のa0,0,・・・,a0,L-1とし、以下の分散値を計算する。
Wa’(xi)=α(a0,0+a0,1xi+・・・+a0,k-1xi k-1)
Wa1(xi)=α1+a1,1xi+・・・+a1,k-1xi k-1

Wak(xi)=αk+ak,1xi+・・・+ak,k-1xi k-1
ただし、ah,j(h=0,j=L,・・・,k-1とh=1,・・・,k、j=1,・・・,k-1)はp’未満の乱数,xiはq’未満のサーバID(i=1,…,n)である。
ステップ706で、分散値Wa’(xi)、Wak(xi)を、第1のサーバ14x〜第nのサーバ14に送信する。
秘密情報bをもつオーナBの第2のディーラ装置12BのCPU22は、図83に示す分散処理を実行する。即ち、ステップ712で、素数p’未満のk個の乱数βiを生成し、q’を法としてその積βを計算する。
β=β1・β2・・・βk
ステップ714で、素数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)である。
ステップ716で、分散値Wb’(xi)、Wb1(x)〜Wb(x)を第1のサーバ14x〜第nのサーバ14xに送信する。
[復元]
図84を参照して、サーバシステムのサーバ及び復元装置16が実行する復元処理を説明する。サーバシステム内の1つの第dのサーバ14xdは、図84のステップ722で、他の第jのサーバ14x(j=1,・・・,k)からWa’(xi)をk個集め、ステップ724で、q’を法としてαa0,j (j=0,・・・,k-1)を復元し、桁合わせを考慮してαa0,jを加算しながらαaを計算する。
第dのサーバ14xdは、ステップ726で、他の第jのサーバ14x(j=1,・・・,k)からWb’(xi)をk個集め、ステップ728で、q’を法としてβb0,j (j=0,・・・,k-1)を復元し、桁合わせを考慮してβb0,jを加算しながらβbを計算する。
復元に参加する第jのサーバ14x(j=1,…,k)は、ステップ730、734のそれぞれで、指定されたjに応じたWaj(xi)とWbj(xi)を集め(i=1,…,k)、ステップ732、736で、q’を法として1サーバ当たりαjとβjを1つずつ復元する
第jのサーバ14x(j=1,…,k)は、ステップ738で、積αjβjを計算し、ステップ740で、復元装置16に送信する。復元装置16は、ステップ742で、αjβjからαβを合成する。
第dのサーバ14xdは、ステップ744で、αaとβbとの積αaβbを計算し、ステップ746で、αβabを復元装置16に送信する。復元装置16は、ステップ748で、αβでαβabを割ってabを計算する。
以下に、以上の処理の具体例を示す。秘密情報を10進数2桁のa=12, b=20の場合を考える。よって、p=101(>102),p’=11(>10),q'=101(>102),k=n=2とする。
[分散]
(図82のステップ702)
k=2より、オーナAの第1のディーラ装置12Aは、2つの乱数をα1=2、α2=2としα=α1・α2=2×2=4を計算する。
(ステップ704)
a(=12)を2分割して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
(図83のステップ712)
β1=1,β2=2とし、β=β1・β2=1×2=2を計算する。
(ステップ714)
b(=20)を2分割して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
[復元]
(図84のステップ722、724)
Wa'(1)=12=s1+s2、Wa'(2)=16=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を得る。
(ステップ726、728)
βb0,1=4、βb0,0=4-4=0を復元し、βb0,1*10+b0,0=4*10+0=40を得る。
(ステップ730〜736)
第1のサーバ14xは、α1=2、β1=1を復元し、第2のサーバ14xは、α2=2、β2=2を復元する。
(ステップ738、740)
第1のサーバ14x1は、α11=2*1=2を、第2のサーバ14xは、α22=2*2=4を計算し、復元装置16に送信する。
(ステップ744、746)
αa*βb=48*40=1920を復元装置16に送信する。
(ステップ742、748)
1920/(2*4)=240を計算する。
秘匿乗算1では十進数3桁で考えてaを0〜999とすると、pは103より大きいp=1009とすることができる。よって、最も小さなqはq(>106)の素数であるのでq=1000003となる。よって、[分散]では1000003以下の分散値をk+1個記憶する必要がある。
それに対して、秘匿乗算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とすることができる。よって、秘匿乗算1”の[分散]では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が得られる。これらの特徴は請求項14に示される。
また提案方式の記憶容量削減以外の利点として、各係数はαやβなどの乱数が最後までかかるので、従来のランプ型と異なり、k-L個以上の分散値があっても情報が漏洩せず、安全性が向上する。また、以下のように鍵rでxを暗号化する暗号e_r(x)を用いることにより、さらに安全性向上を向上させることができる。同じサイズの暗号文を作る手法としては、秘密情報と同じサイズの乱数をEXORする、またはq’を法として乱数をかけるなどが考えられる。
秘匿乗算1”(ランプ型拡張形)
[分散]
(ランプ型拡張形)の秘匿乗算1”では、ランプ型基本形の図82のステップ702,706、図83のステップ712、716を実行するが、第1に、図82のステップ704に代えて、以下の処理を実行する。即ち、鍵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)xi k-1
Wr1(xi)=r1+r1,1xi+・・・+r1,k-1xi k-1
ただし、ah,j(h=0,j=L,・・・,k-1とh=1,・・・,k、j=1,・・・,k-1)はp’未満の乱数,xiはq’未満のサーバID(i=1,…,n)
第2に、図83のステップ714に代えて、以下の処理を実行する。即ち、鍵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)xi k-1
Wr2(xi)=r2+r2,1xi+・・・+r2,k-1xi k-1
ただし、ah,j(h=0,j=L,・・・,k-1とh=1,・・・,k、j=1,・・・,k-1)はp’未満の乱数,xiはq’未満のサーバID(i=1,…,n)
[復元]
図85を参照して、サーバシステム内のサーバ、及び復元装置16が実行する復元処理を説明する。
サーバシステム内の1つの第dのサーバ14xdは、図85のステップ722’、726’のそれぞれで、他のサーバからWr1(xi)とWr2(xi)を各々k個集め、ステップ724’、728’で、r1とr2を復元する。
第dのサーバ14xdは、ステップ722”で、他のサーバからWa’(xi)をk個集め、ステップ724”で、e_r1(αa0,j)(j=0,・・・,k-1)を復元し、r1を用いてαa0,jを復元し、桁合わせを考慮してαa0,jを加算しながらαaを計算する。
第dのサーバ14xは、ステップ726”で、他のサーバからWb’(xi)をk個集め、ステップ728”で、qe_r2(βb0,j)(j=0,・・・,k-1)を復元し、r2を用いてβb0,jを復元し、桁合わせを考慮してβb0,jを加算しながらβbを計算する。
以後、秘匿乗算1”[復元]の図84のステップ730以降の処理と同様の処理を実行して、abを得る。
秘匿乗算の繰り返し(秘匿乗算2)に関しても、基本形、拡張系ともに途中段階で復元した際の桁合わせに考慮すれば同様に拡張できることは明らかである。
また、第2の実施の形態の秘匿除算、第3の実施の形態の演算の繰り返しに関しても、基本形、拡張系ともに途中段階で復元した際の桁合わせに考慮すれば同様に拡張できることは明らかである。ただし、分散値同士の加算は基本形では乱数変換を行えば桁毎の加算となっているため、そのまま適用できる。拡張系では桁毎にかかる乱数が異なるため、一度復元をして乱数を合わせて桁あわせをしながら加算する必要がある。以下に基本形のアルゴリズムを示す。
[分散]
オーナAの第1のディーラ装置12Aは、秘密情報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-1xi k-1
オーナBの第2のディーラ装置12Bは、秘密情報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)を第1のサーバ14x〜第nのサーバ14xに送信する。
[加算]
第iのサーバ14xi(i=1,・・・,n)は以下を計算する。
Wab(xi)=Wa(xi)+Wb(xi)=(a0,0+b0,0)+(a0,1+b0,1)xi+・・・+(a0,k-1+b0,k-1)xi k-1
[復元]
復元装置16は第iのサーバ14xiの中のk個のサーバからk個の分散値の和Wab(xi)を集め、それを解いて(a0,0+b0,0),・・・,(a0,L+b0,L)を得る。
復元装置16は(a0,0+b0,0),・・・,(a0,L+b0,L)を桁合わせしながら加算してa+bを得る。
第4の実施の形態の分散値同士の乗算の場合、途中段階で復元しないためそのまま適用できない。しかし、例えば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となり、各係数はそのまま積の各桁を表す。よって、以下のようにして秘匿乗算が実現できる。ただし、[復元]における桁合わせ(ステップ724”、728”)は上記のように各係数を各桁の値として扱うことである。
秘匿乗算3”(0対応)
[分散]
秘匿乗算1”における図82のステップ704に、Wa(xi)=a0,0+a0,1xi+・・・+a0,k-1xik-1、図83のステップ714に、Wb(xi)=b0,0+b0,1xi+・・・+b0,k-1xi k-1を計算する処理を追加する。
[乗算]
秘匿乗算3と同様であるので、その説明を省略する。
[復元]
復元者の復元装置16は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以下の分散値から秘密情報が部分的に漏れるという問題点がなくなり、安全性が向上する。
第5の実施の形態の更新では秘密情報Sは変更しないので、定数項以外の係数を操作した。ランプ型では秘密情報は定数項以外の係数にもあるので、秘密情報を含まない係数を操作することによって基本形は同様に実現できる。よって、秘匿乗算1の[分散]のように秘密情報が分散されているとすると、秘匿更新1は乱数を生成するサーバをk-L台とし、差分値を受けるサーバをn-k+L台とすればよい。また、秘匿更新2ではu-L個の乱数diL,・・・,diu-1からδi(x)=diLxL+diL+1xL+1+・・・diu-1xu-1を生成すればよい。秘匿更新3もδ(x)をδi(x)と同様の形にすればよい。拡張形において暗号の復元が必要な部分は秘密情報が含まれる係数であって、この部分は更新されない。また、乱数部分は形式上暗号化を行ったが暗号化する必要はない。よって、乱数部分の更新は基本形と同様に可能である。さらに、秘匿更新4,5においても同様に実現できることは明らかである。
秘匿検索1”(基本形:検索装置18を利用しない)
第6の実施の形態にある秘匿検索では検索IDであるkjをL分割して各係数の一致不一致を確認すれば、以下のように部分検索が可能になる。
[分散]
第1のディーラ装置12AのCPU22は、図86(A)の分散処理を実行する。即ち、ステップ752で、m個の秘密情報(上記各実施の形態における分散により分散されている)に対応するm個の検索IDを、kj(j=1,…,m)をL分割し、kj0,・・・,kjL-1とし、ステップ754で、kj毎の乱数rjを生成し、ステップ756で、下記分散値Tj(xi) 、Rj(xi)を計算する(rji,tjiも乱数)。
Tj(xi)=rj・(kj0+・・・+kjL-1xi L-1+tjLxi L+…+tjk-1xi k-1)(i=1,…,n)
Rj(xi)=rj+rj1xi+rj2xi 2+…+rjk-1xi k-1
ステップ758で、分散値Tj(xi) 、Rj(xi)をサーバxi(i=1,…,n)に送信して、分散保管させる。
分散値は検索IDであるkjに応じて昇順に並べられているとする。例えば、第1のサーバ14x1の記憶装置34には、図86(B)に示すように、分散値Tj(xi)、Rj(xi)が、kjに応じて昇順に並べて、記憶されている。なお、分散値Tj(xi)、Rj(xi)に対応して、秘密情報に対応する分散値が対応付けられている。
[検索]
復元装置16のCPU22は、図87のjの指示処理を実行し、第1のディーラ装置12AのCPU22は、図88のFj'(xi)の計算送信処理を実行し、第iのサーバ14xi(第1のサーバ14x〜第のサーバ14x)のCPU22は図89の検索処理を実行する。第iのサーバ14xは保管分散値の中央値、すなわちj=m/2から検索を始める。
復元装置16は、図87のステップ762で、検索を希望するユーザの操作に従って、検索IDであるkj’を入力し、ステップ764で、kj’をL分割し、ステップ766で、kj’に乱数qを乗じたq・k’ji(i=0,・・・, L-1)を計算し、ステップ768で、q・k’jiを第1のディーラ装置12Aに送信する。
第1のディーラ装置12Aは、図88のステップ804で、q・k’jiを受信し、ステップ806、808で、q・k’jiをランプ型秘密分散する。即ち、第1のディーラ装置12Aは、ステップ806で、以下のFj'(xi)を計算し(L次以上の乱数はb’ji=q・bjiとなる)、ステップ808で、Fj'(xi)を第iのサーバ14xiに送信する。
j'(xi)=q(k’j0+・・・+kjL-1xi L-1+bjLxi L+・・・+bjk-1xi k-1)(i=1,…,n)
第iのサーバ14xiは、図89のステップ812で、第1のディーラ装置12AからFj'(xi)を受信し、ステップ814で、jを設定する。なお、本処理が最初に実行されるとき、jは、m/2に設定される。ステップ816で、jに対応するTj(xi)(i=1,…,k)を読み出し、ステップ818で、Tj(xi)をユーザの復元装置16に送信する。
復元装置16は、図87のステップ770で、Tj(xi)を受信し、ステップ772で、δ(x)=dLxi L+・・・+dk-1xi k-1を生成し、ステップ774で、以下のFj(xi)を計算し、ステップ776で、Fj(xi)を第iのサーバ14xに送信する。
Fj(xi)=q・Tj(xi)+δ(xi) (i=1,…,k)
第iのサーバ14xは、図89のステップ820で、復元装置16からFj(xi)を受信し、ステップ822で、Rj(xi)からrjを復元する。
ステップ824で、乱数tjを生成し、ステップ826で、以下の差を計算し、ステップ828で、差を復元装置16に送信する。
tj{Fj(xi)-rjFj’(xi)}=tj・rj・q{(k’j0-kj0)+・・・+(k’jL-1-kjL-1)xi L-1+(bjL-t’jL)xi L+・・・+(bjk-1- t’jk-1)xi k-1}
ただし、t’ji=tji+di/q
復元装置16は、図87のステップ778で、差を受信し、ステップ780で、差の多項式を解いて、定数項を求め、ステップ782で、何れかの定数項の係数差分が0か否かを判断する。部分一致が1つでよいとする場合には、ステップ782以降を図81のステップ551以降の処理と同様の処理を実行することができる。しかし、最初に見つかった部分一致検索IDに連続してその上位の部分検索IDが一致しているかを見る場合の処理を以下に説明する。これも中央値から検索すとする。また、第5の実施の形態のL個に分解していない検索IDの差分は上位桁の結果が支配的であるので、全体の検索位置は最上位桁の差分値を第5の実施の形態における全体の差分値と同様にみなして検索を行う。また、部分一致があった場合、簡単のためそのIDの上位桁のIDの部分一致を検索するとする。
上記のように、ステップ782で、係数差分による検索を行って、どこかの係数差分に0があるか否かを判断する。どこかの係数差分に0がなければ最上位桁の係数差分を全体の差分として第5の実施の形態と同様に、jを1インクリメントして、次の検索位置を定め、ステップ770にに戻る。
(1)ステップ782で、0となる係数差分があると判断されれば、そのIDの下位桁の係数差分を見る。以降簡単のため、最初に見つかった部分検索IDをkjiとし、その上位桁の部分検索IDをkji-1として説明を行う。即ち、ステップ786では、桁を識別する変数iを1デクリメントする。
ステップ788で、下位の桁iの係数差分が0か否かを判断する、下位の桁iが0と判断された場合には、ステップ790で、検索IDをjとして本処理を終了する。下位の桁iが0と判断されなかった場合には、ステップ792で、下位の桁iにおけるkji-1の係数差分は正か否かを判断する。正と判断されれば、ステップ794で、検索位置jを1インクリメントし、負と判断されれば、ステップ796で、検索位置を1デクリメントする。
ステップ798で、前回と今回とのkjiの係数差分が0のままであるか否かを判断する。
(2)前回と今回とのkjiの係数差分が0でない場合には、条件を満たさないとして、ステップ800で、検索IDなしとして、処理を終了し、前回と今回とのkjiの係数差分が0であれば、ステップ794又はステップ796におけるjを指示して、本処理はステップ770に戻って、係数差分により検索を行う。
上記はある部分一致とその上位桁の連続一致としたが、一致する部分検索IDを指定する場合、ステップ782で、「指定された係数差分が0であるか?」とすればよい。また、上位桁の連続一致であればkji-1の係数差分による次の検索方向を逆(i←i+1)にすればよい。更に、連続一致でなくてもよい場合、ステップ786の「i←i−1」を「i←r(r=1,・・・L,i≠r)」とし、ステップ788)の「下位桁の係数差分」を「その他の係数差分」とし、ステップ788の「下位桁iの係数差分が0が」を「どこかに係数差分が0となるkjrがあるか」とし、ステップ790では、「予め定められた方向に検索位置を1ずらして係数差分による検索を行う。」とする。また、3つ以上の一致を見たい場合は2つ一致している状態を1つ一致している状態に置き換えて処理を繰り返せばよい。
ところで、上記[検索]を秘匿検索1[検索]と同様の処理とし、検索ID全ての差分が0となる分散値を検索するようにすれば、通常の秘匿検索が実現できる。また、通常の秘匿検索を行い、完全に一致する検索IDが見つからないときに、検索課程で最も部分一致が多かった位置に戻り、上記定数項の係数差分の判定処理(ステップ782以降の処理)の部分検索の拡大処理を行うこともできる。さらに、[検索]においてユーザがq・k’ji(i=0,・・・, L-1)をオーナの第1のディーラ装置12Aに送るときに、その重要度をq・k’ji(i=0,・・・, L-1)毎に指示していればその重要度に応じた部分検索も可能である。例えば、k’j3が最も重要である場合、検索課程においてその前後のk’j2やk’j4などにおいて部分一致があった場合、その中間を検索することによりk’j3の部分一致に絞り込んでいくことも可能である。
また、拡張形に対しては暗号e_r(x)がAESのような暗号である場合適用は難しいが、例えば係数aiに乱数tiをかけることによって暗号化する場合には以下のような拡張が可能である。
秘匿検索1”(拡張形:検索装置18を利用しない)
[分散]
分散処理は、上記図86(A)と同様である。即ち、オーナの第1のディーラ装置12Aは、m個の秘密情報に対応するm個の検索IDを、kj(j=1,…,m)をL分割してkj0,・・・,
kjL-1とし(ステップ752)、kj毎の乱数rjとtを生成し(ステップ754)、下記分散値Tj(xi)を計算し(ステップ756)、分散値Tj(xi)、Rj(xi)を第iのサーバ14xi(i=1,…,n)に分散保管させる(rji,tjiも乱数)(ステップ758)。
j(xi)=rj・(kj0+・・・+tL-1kjL-1xi L-1+tLtjLxi L+…+tk-1tjk-1xi k-1)(i=1,…,n)
Rj(xi)=rj+rj1xi+rj2xi 2+…+rjk-1xi k-1
ただし、分散値は検索IDであるkjに応じて昇順に並べられているとする。
[検索]
復元装置16のCPU22は、図87に示すjの指示処理を実行し、第1のディーラ装置12AのCPU22は、図88のF’(x)の計算・送信処理を実行し、第iのサーバ14xのCPU22は、図89の検索処理を実行する。
検索を希望するユーザの復元装置16は、検索IDであるkj’をL分割して乱数qを乗じたq・k’ji(i=0,・・・, L-1)をオーナの第1のディーラ装置12Aに送信する(図87のステップ762〜768)。
オーナの第1のディーラ装置12Aは、q・k’ji0にtiをかけてランプ型秘密分散して以下を第iのサーバ14xに送信する(L次以上の乱数はb’ji=tiq・bjiとなる)(図88のステップ804〜808)。
Fj’(xi)=q(k’j0+・・・+tL-1kjL-1xi L-1+tLbjLxi L+・・・+tk-1bjk-1xi k-1)(i=1,…,n)
第iのサーバ14xは保存しているTj(xi)(i=1,…,k)をユーザの復元装置16に送信する(図89のステップ814〜818)。
復元装置16は、δ(x)=dLxi L+・・・+dk-1xi k-1を生成し、以下を計算して第iのサーバ14xに送信する(図87のステップ770〜776)。
Fj(xi)=q・Tj(xi)+δ(xi) (i=1,…,k)
第iのサーバ14xは、Rj(xi)からrjを復元する(図89のステップ822)。
第iのサーバ14xは、乱数tjを生成し、以下の差を計算して復元装置16に送信する(ステップ826、828)。
tj{Fj(xi)-rjFj’(xi)}=tj・rj・q{(k’j0-kj0)+・・・+tL-1(k’jL-1-kjL-1)xi L-1+tL(bjL-t’jL)xi L+・・・+tk-1(bjk-1- t’jk-1)xi k-1} ただし、t’ji=tji+di/q
以後の処理(図87のステップ782以降)は、秘匿検索1”[検索]と同様である。
次に、第7の実施の形態の小型化と第8の実施の形態のランプ型による小型化は両立可能であることを説明する。例えばk=3である場合、サーバの削減数はk-1=2、秘密情報の分割はk=3まで可能であるので、L=2として秘密情報を2分割し、サーバ台数を1台削減することが可能である。すなわち、サーバの削減数をh、分割数をLとするとh+L≦kとすれば両立できる。以下、例としてh+L=kとなる場合について示す。
秘匿乗算1”(非対称秘密分散対応)
[分散]
秘密情報aをもつオーナAの第1のディーラ装置12Aは、管理する1つの鍵からh個の乱数を生成し、それを自身が持つ分散値Wa(x1)〜Wa(xh)とする(hはk-1以下の整数)(図71のステップ572)。
第1のディーラ装置12Aは、秘密情報aをL=k-h分割してa0,0〜a0,L-1とし、h個の分散値Wa(x1)〜Wa(xh)を以下の多項式として解いて残りのk-L=h個の乱数a0,L〜a0,k-1を求める(図71のステップ574)。
Wa(xi)=a0,0+a0,1xi+・・・+a0,k-1xik-1 (i=1,・・・,h)
第1のディーラ装置12Aは、Wa(xi)を用いて残りの第(h+1)のサーバ14xh+1〜14xnの分散値を求め、第iのサーバ14xに送信する(ステップ576)。
Wa(xi)=a0,0+a0,1xi+・・・+a0,k-1xi k-1 (i=h+1,・・・,n)
秘密情報bを持つオーナBの第2のディーラ装置12Bは、管理する1つの鍵を用いて、上記の図71のステップ572〜578の処理を独立に実行し、自らの分散値Wb(x1)〜Wb(xh)と、サーバxh+1〜xnが持つ分散値Wb(xh+1)〜Wb(xn)を求め、各サーバに送る。
[乗算]
第1のディーラ装置12Aは、k個の乱数αi(i=1,・・・,k)を生成し、その積αを計算する(図72のステップ582、584)。
第2のディーラ装置12Bは、k個の乱数βi(i=1,・・・,k)を生成し、その積βを計算する(図73のステップ612、614)。
第1のディーラ装置12Aは、自身を含むk個のサーバから分散値Wa(xi)を集め、k個の分散値Wa(xi)を解き、ai,jを求めて桁あわせをしながらaを計算し、αをかけたαaを復元装置16に送信する(図72のステップ586〜602)。
第2のディーラ装置12Bは、自身を含むk個のサーバから分散値Wb(xi)を集め、k個の分散値Wb(xi)を解き、bi,jを求めて桁あわせをしながらbを計算し、βをかけたβbを復元装置16に送信する(図73の616〜620)。
[復元]
第1のディーラ装置12Aは、自身と第2のディーラ装置12Bを含むk個のサーバxj(j=1,・・・,k)にαjを送信する(図74のステップ622)。
第2のディーラ装置12Bは自身と第1のディーラ装置12Aを含むk個のサーバxj(j=1,・・・,k)にβjを送信する(ステップ624)。
上記k個のサーバxj(j=1,…,k)は積αjβjを計算する(ステップ626)。
サーバxj(j=1,…,k)はWab’(xj)とαjβjを復元装置16に送信する(ステップ628)。
復元装置16は、αjβj(j=1,・・・,k)をかけてαβを計算する(図75のステップ630、632)。
復元装置16は、αa・βb/αβを計算してabを得る(図75のステップ634)。
このように、第7の実施の形態の小型化と第8の実施の形態のランプ型による小型化は両立可能である。
<第9の実施の形態>
(k,n)閾値秘密分散法における計算量を少なくする方式として、秘密情報をビット列として扱いXORによる演算だけで秘密分散を実現する手法(以降XOR法)が提案されている。このXOR法は準同型性を持たないため,秘匿計算に対応できないという問題がある。それに対してXOR法を拡張し、秘密情報をビット列ではなく多値の数値として扱い、XORの代わりに加減算のみで秘密分散が行える手法(以降、多値化法)を提案されている[5]。しかし、[5]の手法は法とする数が大きく効率的でない。さらに、この手法は秘密情報の分散法、復元法、及び加減算は提案されているが、乗算法は提案されていない。
よって、法を最適な値とした基本的な多値化法の分散と復元アルゴリズムを以下に示す。
S(<ed)を素数p未満のe進数d桁の整数とし、それをn-1分割したものをSi(<ed/(n-1))とし(i=1,・・・,n-1)、乱数ri jもSiと同サイズの整数とし、素数p’(<ed/(n-1))を法として演算が行われる([5]の手法はpを法として演算されている)。この特徴は請求項13に示される。
第9の実施の形態では、第nのサーバ14xnは、第0のサーバ14x0とする。
多値化法1(基本形)
[分散]
第1のディーラ装置12AのCPU22は、図90の分散処理を実行する。即ち、ステップ832で、秘密情報Sを、次のようにn−1個の部分秘密情報に分割する。ただし、S=0とする。
ステップ834で、Sと同じサイズの乱数rα βを全て独立に(k-1)n-1個生成する。
ステップ836で、部分分散情報W(i,j)を以下の式により0≦i≦n-1,0≦j≦n-2においてそれぞれ生成する。
ただし、i=1かつj=2,3,i≧2かつj=1のときのSj-iの符号を反転する。{ }はh=0からk-2までの加算(Σ)を意味する。
ステップ838で、0≦i≦n-1において各部分分散情報W(i,0),W(i,1),…,W(i,n-2)を連結して分散情報Wiを生成する。
ステップ840で、分散情報Wiを第iサーバ14xiに送信する。
[復元]
復元装置16のCPU22は、図91の復元処理を実行する。即ち、ステップ842で、復元に用いるk個の分散情報Wt0,…,Wtk-1(0≦t0≦…≦tk≦n-1)をk個のサーバから集める。ステップ844で、k個の分散情報Wt0,…,Wtk-1を、以下の部分分散情報に分割する。
ステップ846で、上記分割した部分分散情報を用いて2進数ベクトルV(ti,j)を生成する。
例えば、部分分散情報W(ti,j)の場合には、2進数ベクトルV(ti,j)は、次の通りである。
ステップ848で、ベクトルV(t0,0),…,V(tk-1,n-2)から以下の行列を生成する。
ステップ850で、部分分散情報を以下のベクトルW(t0,…,tk-1)のように表す。
ステップ852で、Gauss-Jordanの消去法を用いて

を2進数の

に変形することにより、全ての部分秘密情報のベクトルS(k,n)を求める。
G(k,n)は以下のように表す。
この際,(4)の式にGauss-Jordanの消去法を用いることで以下のような式が求まる。
S(k,n)=G(k,n) ・R(k,n)
また,S(k,n)は以下のように表せる。
S(k,n)=(S1,S2,…,Sn-1,*,…,*)T
よって,全ての部分秘密情報を得る。
ステップ854で、全ての部分秘密情報を連結し,秘密情報Sを得る。
以下、多値化法1(基本系)に対する例を説明する。
[分散]
以下に、上記に対する例として、k=3、n=5の場合について示す。秘密情報Sを、S=3582(0≦i≦4、0≦j≦3)とし、n-1個(桁毎)に分割する場合を考える。よって、S(<104)であり、Si(<10)となる。よって、演算はp’=11を法として行う([5]は104を超えるpを法としている)。
秘密情報S(=3582)は以下のように分割される(ステップ832)。
擬似乱数rを以下の値とする(ステップ834)。
ステップ836で、以下を計算する。なお、h=0からk−2=1までが加算されるので、以下のように、r 、j=1でのr i+jが加算される。

ただし、次の時にSj-iの符号を反転する。i=1かつj=2、3、i≧2かつj=1
以下の表1にユーザに配布される部分分散情報の構成表を示す。

部分分散情報の構成表
サーバPの分散情報Wは、6392となる。
サーバPの分散情報Wは、106910となる。
サーバPの分散情報Wは、0103となる。
サーバPの分散情報Wは、5592となる。
サーバPの分散情報Wは、24610となる。
[復元]
ユーザP、P、Pの分散情報W、W、Wが集まった場合(ステップ842)の復元処理を考える。
全ての部分分散情報を表すベクトルW(0,1,2),

は以下のようになる(ステップ844〜846)。
Gauss-Jordanの消去法を用いることによって

を、
に変形することにより,全ての部分秘密情報のベクトルS(3,5)を求める(ステップ852)。
よって,全ての部分秘密情報が復元されたので,これらを連結して秘密情報Sを復元する(ステップ854)。
秘匿加算1”’
次に、文献[5]に示される分散値同士の加算による秘密情報の秘匿加算について以下に示す。ただし、この場合、Siが素数p’(<ed/(n-1))未満の整数であるのでSi+Si’より大きな素数q(<ed/(n-1)+1)を法として演算が行われる。
[分散]
秘密情報aをもつオーナの第1のディーラ装置12AのCPU22は多値化法[分散]の図90のステップ832〜ステップ840を実行する。即ち、秘密情報Sに代えて秘密情報aをn-1個の部分秘密情報に分割してA1,・・・,An-1を生成し、第iのサーバ14xに対する分散値Wai=Wa(i,0),・・・,Wa(i,n-1)を計算し、第iのサーバ14xに送信する。
また、秘密情報bをもつオーナBの第2のディーラ装置12BのCPU22は多値化法[分散] の図90のステップ832〜ステップ840を実行する。即ち、秘密情報Sに代えて秘密情報bをn-1個の部分秘密情報に分割してB1,・・・,Bn-1を生成し、第iのサーバ14xに対する分散値Wbi=Wb(i,0),・・・,Wb(i,n-1)を計算し、第iのサーバ14xに送信する。
[加算]
第iのサーバ14xは以下を計算する。
Wabi=Wai+Wbi=W(i,0),W(i,1),・・・,W(i,n-1)
ただし、W(i,j)=Wa(i,j)+Wb(i,j)
[復元]
復元者の復元装置16のCPU22は、図92の復元処理を実行する。即ち、ステップ862で、Wabiを集め、ステップ864で、Wabjを用いて、以下の式に基づいて2進数ベクトルV(ti,j)を生成する。
ステップ866で、加算結果a+bを復元する。すなわち、W(ti,j)とR(k,n)の関係は上記のようになるので、Gauss-Jordanの消去法を用いてR(k,n)を求めることにより、(A1+B1,・・・,An-1+Bn-1,***)となる加算結果S=a+bを求める。
次に、多値化法の秘匿加算1”’に対する例を説明する。
以下にk=2,n=3,A=23,B=68の場合の例を示す。ここではA,Bとも2桁の値であるのでp=101とし、p’=11よりq=23とし、演算はqを法として行われるとする。
[分散]
ユーザAの第1のディーラ装置12Aは保持している秘密情報A=23を2分割してA1=2,A2=3とし、多値化法により秘密分散する(ただし、A0=0)(図90のステップ832〜ステップ840)。ここでは、(k-1)n-1=2個の乱数をr0=5,r1=4とする。
Wa0=(Wa00)(Wa01)=(A0+r0)(A1+r1)=(5)(6)を、第0のサーバ14xへ送信する。
Wa1=(Wa10)(Wa11)=(A2+r0)(A0+r1)=(8)(4)を、第1のサーバ14xへ送信する。
Wa2=(Wa20)(Wa21)=(A1+r0)(-A2+r1)=(7)(1)を、第2のサーバ14xへ送信する。
ユーザBは第2のディーラ装置12B保持している秘密情報B=68を2分割してB1=6,B2=8とし、多値化法により秘密分散する(ただし、B0=0)(図90のステップ832〜ステップ840)。ここでは、(k-1)n-1=2個の乱数をt0=7,t1=8とする。
Wb0=(Wb00)(Wb01)=(B0+t0)(B1+t1)=(7)(14) を、第0のサーバ14xへ送信する。
Wb1=(Wb10)(Wb11)=(B2+t0)(B0+t1)=(15)(8) を、第1のサーバ14xへ送信する。
Wb2=(Wb20)(Wb21)=(B1+t0)(-B2+t1)=(13)(0) を、第2のサーバ14xへ送信する。
[加算]
各サーバは以下を計算する。
第0のサーバ14x0は、Wab0を計算する。
Wab0=(Wa00+Wb00)(Wa01+Wb01)=(W00)(W01)= (5+7)(6+14)=(12)(20)
第1のサーバ14x1は、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) となるので、全体は以下のようになる。
Gauss-Jordanの消去法を用いて、上記を解くことにより以下が求まる。
よって、A1+B1=W01-W11=20-12=8、A2+B2=W10-W00=0-12=-12=11(mod23)となり、桁あわせをすると、8*10+11=91=23+68=A+Bとなる。
以上より、提案の多値化法によって秘密情報の分散、復元、加算(減算も同様)が実現できることが言える。
秘匿乗算1”’
次に、秘匿乗算を示す。
以降ではa,bをe進数d桁で、素数p(>ed)以下の整数とし、aをL分割してAi(i=1,・・・,L)としたとき、Aiは素数p’(>ed/L)以下の整数とする。秘密分散に関する演算は素数q’(>p’u:uは1以上の整数)上で演算が行われる。まず、定数乗算が可能であることを示す。
[分散]
秘密情報aをもつオーナAの第1のディーラ装置12AのCPU22は、図93に示す分散処理を実行する。即ち、ステップ872で、素数q未満のk個の乱数αiを生成し、q’を法としてその積αを計算する。
α=α1・α2・・・αk
ステップ874で、秘密情報aを分散したものにαをかけて、多値化法[分散]の処理(図87のステップ832〜ステップ840)を実行する。これにより、サーバ14x(i=0,…,n−1)に、分散値Wa’i=Wa’(i,0),・・・,Wa’(i,n-1)を送信する。ステップ876で、各αj(j=1,…,k)について、多値化法[分散]の処理(図90のステップ832〜ステップ840)を実行する。これにより、サーバ4x(i=1,…,n)に分散値Wαji=Wαj(i,0),・・・,Wαj(i,n-1)(j=1,…,k)を送信する。
秘密情報bをもつオーナBの第2のディーラ装置12AのCPU22は、図94に示す分散処理を実行する。即ち、ステップ882で、素数q未満のk個の乱数βiを生成し、q’を法としてその積βを計算する。
β=β1・β2・・・βk
ステップ848で、秘密情報bを分散したものにβをかけて、多値化法[分散]の処理(図90のステップ832〜ステップ840)を実行する。これにより、第iのサーバ14xi(i=1,…,n)に分散値Wb’i=Wb’(i,0),・・・,Wb’(i,n-1)を送信する。ステップ886で、各βj(j=1,…,k)について多値化法[分散]の処理(図90のステップ832〜ステップ840)を実行する。これにより、第iのサーバ14xi(i=0,…, n−1)に分散値Wβji=Wβj(i,0),・・・,Wβj(i,n-1)(j=1,…,k)送信する。
[乗算]
サーバシステム内の1つのサーバ14xのCPU22は、多値化法[復元]の処理(図91のステップ842〜ステップ854)を実行する。即ち、他のk個のサーバからWa’iを集め、αaを復元する。そして、サーバ14xは、αaを他のサーバ14x(j=1,…,n)に送信する。
サーバ14x(j=1,…,n)は自分がもつWb’jにαaをかけてWab’jを生成する。
Wab’j=Wab’(j,0),…,Wab’(j,n-1) ただし、Wab’(j,i)=αaWb’(j,i)
[復元]
復元に参加するサーバ14x(j=1,…,k)のCPU22は、図95のαjβjの計算送信処理を実行する。即ち、ステップ892で、Wαjiについて多値化法[復元]の処理(図91のステップ842〜ステップ854)を実行し、ステップ894で、Wβjiについて多値化法[復元]の処理(図88のステップ842〜ステップ854)を実行する。即ち、指定されたjに応じたWαjiとWβjiをk個集め(i=1,…,k)、多値化法[復元]により1サーバ当たりαjとβjを1つずつ復元する。
ステップ896で、積αjβjを計算し、ステップ898で、Wab'(xj)とαjβjを復元者に送信する。
復元者の復元装置16はk個のWab’jからαβabj(j=1,…,k)を復元し、桁合わせをしながらαβabを計算する。
復元装置16はαjβj(j=1,・・・,k)からαβを合成し、αβabを割ってabを得る。
次に、多値化法の秘匿乗算”’に対する例を説明する。以下では、k=2,n=3,a=23,b=68の場合の例を示す。a,bとも十進2桁の値であり、α,βも同サイズの整数とすると、分散するαa、βbは10進4桁の数であるのでp=10007とし、これを2分割するためp’=101、q’=10007より、演算はq’=10007を法として行われるとする。
[分散]
ユーザAの第1のディーラ装置12Aはα1=11,α2=2を生成し、α=α1・α2=22とする(図93のステップ872)。
ユーザAの第1のディーラ装置12Aは保持している秘密情報a=23を2分割してA2=2,A1=3とし、多値化法により秘密分散したWa0,Wa1,Wa2にαをかけてWa’0,Wa’1,Wa’2を得る(ただし、A0=0)(図93のステップ874)。ここでは、(k-1)n-1=2個の乱数をr0=4,r1=5とする。その他にαjを多値化法によりWαji(i=1,・・・,n)を計算・分散する(図93のステップ876)。
Wa0=(Wa00)(Wa01)=(A0+r0)(A1+r1)=(4)(8)に、22をかけたWa’0=(88)(176) を、第0のサーバ14xに送信する。
Wa1=(Wa10)(Wa11)=(A2+r0)(A0+r1)=(6)(5) に、22をかけたWa’1=(132)(110) を、第1のサーバ14xに送信する。
Wa2=(Wa20)(Wa21)=(A1+r0)(-A2+r1)=(7)(3) に、22をかけたWa’2=(154)(66) を、第2のサーバ14xに送信する。
ユーザBの第2のディーラ装置12Bはβ1=61,β2=51を生成し、β=3111とする(図94のステップ882)。
ユーザBの第2のディーラ装置12Bは保持している秘密情報b=68を2分割してB2=6,B1=8とし、多値化法により秘密分散する(ただし、B0=0)(図94のステップ884)。ここで、乱数をt0=37,t1=18とする。その他にβjを多値化法によりWb’0、Wb’2 、Wb’3計算・分散する(図94のステップ886)。
Wb0=(Wb00)(Wb01)=(B0+t0)(B1+t1)=(37)(26)に、
3111をかけたWb’0=(115107=5030)(80886=830)を、第0のサーバ14xに送信する。
Wb1=(Wb10)(Wb11)=(B2+t0)(B0+t1)=(43)(18) に、
3111をかけたWb’1=(133773=3682)(55998=5963) を第1のサーバ14xに送信する。
Wb2=(Wb20)(Wb21)=(B1+t0)(-B2+t1)=(45)(12) に、
3111をかけたWb’2=(139995=9904)(37332=7311) を第2のサーバ14xに送信する。
[乗算]
サーバ14xdは下記によりWa’0とWa’1からαA1=66とαA2=44を復元し、αA2*10+αA1= 506=αaを計算する。
サーバ14xjは下記によりWb’0とWb’1からβB1(=24888)=4874(modq’)とβB2(=18666) =8659(modq’)を復元し、βB2*10+βB1=91464=(211548=)βbを計算し、αa*βb=46280784=8416(modq’)を復元者に送る。
[復元]
サーバ14x1はα1=11、β1=61を復元し、サーバ14x2はα2=2、β2=51を復元する。
サーバ14x1はα1β1=11*61=671を、x2はα2β2=2*51=102を計算する。
サーバ14x1はα1β1を、x2はα2β2を復元装置16に送信する。
復元装置16はα1β1α2β2より68442=8400(modq’)を得て、q’を法としたその逆数である1974を計算し、αa*βb=8416にかけてq’で法をとると、ab=1564が得られる。
以上は秘匿計算1に対応したものであるが、Shamirの秘密分散法の部分を多値化法に置き換えたものといえる。よって、Shamirの秘密分散法を多値化法に置き換えれば第1の実施の形態〜第8の実施の形態の各手法に対応できることは明らかである。
第9の実施の形態における高速化は次の通りである。第8の実施の形態までのShamir法は多項式演算のため、復元には必ず多項式の連立方程式をとく、すなわち乗算やべき乗演算が必要であった。しかし、XOR型の復元はXORのみで処理ができる。第9の実施の形態では、XORを多値にしたものであり、秘匿乗算の場合、復元は加減算だけでよいので高速化が図られる。
また、法とする数については次の通りである。第7の実施の形態までは秘密情報Sのサイズまたはそのu倍のサイズで演算している。これに対し、第9の実施の形態では、Sを分解したサイズまたはそのu倍のサイズで演算する。よって、法とする数は大きくない。この特徴は請求項13に示される。
また、多値化法の分散値の大きさを1/Lにするランプ型秘密分散法も、Shamir法をランプ型にした第8の実施の形態と同様に可能であることは明らかであり、この場合S(<ed)を素数p未満のe進数d桁の整数とすると、それをL(n-1)分割したSi(<ed/L(n-1))を用いて、同様の処理が行われる。このとき、乱数ri jもSiと同サイズの整数とし、素数p’(<edu/L(n-1))(uは1以上の整数)を法として演算が行われる([5]の手法はpを法として演算されている)。この特徴は請求項13に示される。
以上のように、ランプ型多値化法は多値化法と同様に実現できるので、Shamirの秘密分散法をランプ型多値化法に置き換えれば第1の実施の形態〜第8の実施の形態の各手法に対応できることは明らかである。
また、ランプ型多値化法と多値化法の違いは、多値化法がSを分割したサイズで演算しても、最後はこれらを集めるため分散値は秘密情報を同じサイズに戻りるのに対し、ランプ型多値化法では、分散値を集めても元の秘密情報の1/Lになっており、高速化と記憶容量の削減も同時に実現している点にある。
2015年2月12日に出願された日本国特許出願2015−025825号の開示は、その全体が参照により本明細書に取り込まれる。
【0001】
技術分野
[0001]
本発明は、分散装置、演算・復元装置、及びプログラムに関する。
背景技術
[0002]
近年、新たなネットワーク技術としてクラウドコンピューティングが注目されている。クラウドコンピューティングとはユーザの持つデータをクラウドと呼ばれるネットワーク上の複数のサーバにより構成される仮想の大容量ストレージに分散・保管し、そのデータをどこからでもネットワーク経由でユーザが必要に応じてアクセスすることを可能にする技術である。さらに、保管データを有効活用するために、単にデータをストレージするだけでなく、クラウド上に分散・保管されたデータを用いて個々のデータを秘匿しながら任意の計算を行う秘匿計算を実現する技術が求められている。
[0003]
この秘匿計算を実現する技術の1つとして秘密分散法の利用が注目されている。秘密分散法とは1個の秘密情報をn個に分散し、n個に分散した分散値のうち、k個(k≦n)を集めることで元の秘密情報が復元できるという技術である。また、k個未満の分散値からは一切秘密情報に関する情報を得ることができない。この秘密分散法として、Shamirによる(k,n)秘密分散法が良く知られている。Shamirの(k,n)秘密分散法を含む従来の秘密分散システムは分散値を保存するn台のデータサーバと、秘密情報を分散するディーラまたは秘密情報を復元する復元端末からなる。すなわち、秘密分散時にオーナは自分が所有する秘密情報の分散をディーラに依頼し、ディーラは秘密分散法を用いてn個の分散値を計算して、その値を各々n個のデータサーバに分散保管する。一般に、ディーラは秘密分散時のみ存在するとされる。一方、復元を希望するユーザは復元したい秘密情報に対する分散値をk個のデータサーバから復元端末

Claims (18)

  1. nを整数、kをn以下の整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて分散値を計算する計算装置であって、
    k個以上の秘密情報の各々の分散値を計算する手段と、
    前記k個以上の秘密情報から合成値を生成する手段と、
    前記合成値を新たな秘密情報に作用させた秘匿化秘密情報を生成する手段と、
    を備える計算装置。
  2. nを整数、kをn以下の整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて秘匿演算をする計算装置であって、
    第1の秘匿化秘密情報に用いられた第1の乱数を構成する複数の乱数のうちの1部である第1の部分乱数の分散値と、第2の秘匿化秘密情報に用いられた第2の乱数を構成する複数の乱数うちの1部である第2の部分乱数の分散値とを集めて、前記第1の部分乱数と前記第2の部分乱数を復元する手段と、
    前記復元した第1の部分乱数と第2の部分乱数を合成する手段と、
    を備える計算装置。
  3. nを整数、kをn以下の整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて秘匿演算をする計算装置であって、
    k個以上の乱数を用いて秘匿化された秘匿化秘密情報を復元する手段と、
    前記復元した秘匿化秘密情報と他の値とに基づいて所定の演算をする手段と、
    を備える計算装置。
  4. nを整数、kをn以下の整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて秘密情報を復元する計算装置であって、
    k個以上の乱数を用いて秘匿化された秘匿化秘密情報を復元する手段と、
    前記乱数を合成する手段と、
    前記合成された乱数を用いて、前記復元された前記秘匿化秘密情報の秘匿化を解除する手段と、
    を備える計算装置。
  5. nを整数、kをn以下の整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて秘匿演算をする計算装置であって、
    k個以上の乱数を用いて秘匿化された秘匿化秘密情報における第1の合成乱数と、第2の合成乱数を構成するk個以上の乱数とを組み合わせて、前記第1の合成乱数を変換する手段
    を備える計算装置。
  6. nを整数、kをn以下の整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて秘匿演算をする計算装置であって、
    秘匿化されていない分散値に、別の秘匿化秘密情報を構成するk個以上の乱数を作用させて秘匿化する手段
    を備える計算装置。
  7. nを整数、kをn以下の整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて分散値を計算する計算装置であって、
    複数の新たな秘密情報を秘匿化して複数の分散値を計算する手段と、
    前記複数の分散値の各々の並び順を、前記秘匿化する前の前記複数の新たな秘密情報の予め定められた並び順に応じて指定する手段と、
    を備える計算装置。
  8. nを整数、kをn以下の整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて検索する秘密情報を指定する計算装置であって、
    検索用秘密情報に乱数を作用させ秘匿化する手段と、
    前記システムから受信した値に前記乱数を作用させる手段と、
    を備える計算装置。
  9. nを整数、kをn以下の整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて指定された秘密情報を検索する計算装置であって、
    前記秘密情報に対応する第1の検索用秘密情報を第1の乱数で秘匿化すると共に、入力された第2の検索用秘密情報を第2の乱数で秘匿化する手段と、
    前記秘匿化された前記第1の検索用秘密情報に基づく第1の値と前記秘匿化された前記第2の検索用秘密情報に基づく第2の値との差に基づいて、前記第1の検索用秘密情報と前記第2の検索用秘密情報との差を取得する手段と、
    を備える計算装置。
  10. nを整数、kをn以下の整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて分散値の更新を行う計算装置であって、
    乱数で秘密情報が秘匿化されて得られた分散値に対して、新たな乱数を生成し、前記生成した新たな乱数を新たな分散値として保存する手段
    を備える計算装置。
  11. nを整数、kをn以下の整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて分散値の更新を行う計算装置であって、
    k個以上の補正情報から秘密情報を更新する更新値を計算する手段
    を備える計算装置。
  12. nを整数、kをn以下の整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて分散値を計算する計算装置であって、
    生成されたh(1〜k−1までの整数)個の乱数を分散値として定め、前記h個の分散値と前記秘密情報とに基づいて、n−h個の分散値を計算する手段と、
    k個以上の秘密情報から合成値を生成する手段と、
    前記合成値を新たな秘密情報に作用させた秘匿化秘密情報を計算する手段と、
    を備える計算装置。
  13. nを整数、kをn以下の整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて分散値を計算する計算装置であって、
    秘密情報をe進数d桁の数値としたとき、前記秘密情報をL(n−1)分割を行ってe進数d/L(n−1)桁の数値とする手段と、
    前記数値とされた秘密情報の分散、復元、及び秘匿演算の少なくとも1つを、

    より大きな素数を法として、乗算及び除算を加算及び減算に分解することなく、加算と減算だけで行う手段と、
    を備える計算装置。
  14. nを整数、kをn以下の整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて秘匿演算または復元をする計算装置であって、
    秘匿化され複数の桁に分割された秘匿化秘密情報の桁に合わせて所定の演算を行う手段
    を備える計算装置。
  15. nを整数、kをn以下の整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて秘匿演算をする計算装置であって、
    前記秘密情報をp1以下の整数、乱数をp2以下の整数として、それらを乗算したp1*p2以下の秘匿化秘密情報をp1*p2より大きな素数を法として秘密分散または復号する手段
    を備える計算装置。
  16. nを整数、kをnより小さい整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおける秘匿演算または復元を行う計算装置であって、
    乱数の加算によって秘密情報を秘匿した秘匿化秘密情報と、前記乱数が秘密分散された分散値とを加減算する手段を備える計算装置。
  17. nを整数、kをn以下の整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて秘密情報の格納位置を検索する計算装置であって、
    第1の検索用秘密情報と第2の検索用秘密情報の差を取得する手段と、
    前記差に応じて前記格納位置を定める手段と、
    を備える計算装置。
  18. nを整数、kをn以下の整数、Lを1以上k以下の整数とし、秘密情報をn個に分散し、n個のうちk個の分散値を集めれば秘密情報を復元でき、k−L個以下では秘密情報を復元できない手段を用いて秘匿演算を行うシステムにおいて秘密情報を更新する計算装置であって、
    秘密情報の分散値に、予め定められた第1の乱数を乗算しかつ予め定められた第2の乱数を加算する手段
    を備える計算装置。
JP2016574708A 2015-02-12 2016-01-22 分散装置、演算・復元装置、及びプログラム Pending JPWO2016129363A1 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2015025825 2015-02-12
JP2015025825 2015-02-12
PCT/JP2016/051934 WO2016129363A1 (ja) 2015-02-12 2016-01-22 秘密分散を用いた秘匿演算システムに関する計算装置

Publications (1)

Publication Number Publication Date
JPWO2016129363A1 true JPWO2016129363A1 (ja) 2018-01-11

Family

ID=56615198

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016574708A Pending JPWO2016129363A1 (ja) 2015-02-12 2016-01-22 分散装置、演算・復元装置、及びプログラム

Country Status (2)

Country Link
JP (1) JPWO2016129363A1 (ja)
WO (1) WO2016129363A1 (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018135563A1 (ja) * 2017-01-20 2018-07-26 日本電信電話株式会社 秘密計算システム、秘密計算装置、秘密計算方法、プログラム
JP7027060B2 (ja) * 2017-08-03 2022-03-01 株式会社日立製作所 秘密分散システム及びその方法
JP7240037B2 (ja) * 2018-02-20 2023-03-15 惠市 岩村 入力者装置、演算支援装置、装置、秘匿演算装置、及びプログラム
JP7041951B2 (ja) * 2018-02-20 2022-03-25 惠市 岩村 入力者装置、演算支援装置、及びプログラム
US12010220B2 (en) * 2019-06-10 2024-06-11 Nippon Telegraph And Telephone Corporation Secure division system, secure computation apparatus, secure division method, and program
US20220399991A1 (en) * 2019-11-28 2022-12-15 Nec Corporation Shuffle system, shuffle method, and program
CN111246463B (zh) * 2020-02-10 2023-04-18 浙江机电职业技术学院 基于alpha稳定分布随机过程偏斜度参数的隐蔽通信方法
CN112217706B (zh) * 2020-12-02 2021-03-19 腾讯科技(深圳)有限公司 数据处理方法、装置、设备及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004287333A (ja) * 2003-03-25 2004-10-14 Oki Electric Ind Co Ltd 分散計算装置及び分散計算システム
JP2004341152A (ja) * 2003-05-15 2004-12-02 Oki Electric Ind Co Ltd 秘密分散方法、秘密分散システム、及び分散演算装置
JP2014138349A (ja) * 2013-01-18 2014-07-28 Nippon Telegr & Teleph Corp <Ntt> 秘密分散システム、データ分散装置、分散データ保有装置、秘密分散方法、およびプログラム

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004287333A (ja) * 2003-03-25 2004-10-14 Oki Electric Ind Co Ltd 分散計算装置及び分散計算システム
JP2004341152A (ja) * 2003-05-15 2004-12-02 Oki Electric Ind Co Ltd 秘密分散方法、秘密分散システム、及び分散演算装置
JP2014138349A (ja) * 2013-01-18 2014-07-28 Nippon Telegr & Teleph Corp <Ntt> 秘密分散システム、データ分散装置、分散データ保有装置、秘密分散方法、およびプログラム

Also Published As

Publication number Publication date
WO2016129363A1 (ja) 2016-08-18

Similar Documents

Publication Publication Date Title
WO2016129363A1 (ja) 秘密分散を用いた秘匿演算システムに関する計算装置
CN112989368B (zh) 多方联合进行隐私数据处理的方法及装置
JP6934963B2 (ja) データを暗号化する方法およびシステム
US20210157932A1 (en) Linking encrypted datasets using common identifiers
CN114661680B (zh) 一种私有数据隐匿共享方法
CN113987559B (zh) 保护数据隐私的双方联合进行数据处理的方法及装置
Gomathisankaran et al. Ensure privacy and security in the process of medical image analysis
Mishra et al. A medical image cryptosystem using bit-level diffusion with DNA coding
CN112182660A (zh) 一种数据排序方法及装置
CN107592298A (zh) 一种基于单服务器模型的序列比较算法安全外包方法、用户终端和服务器
CN115002291B (zh) 基于p张量秘密共享和多个数据隐藏器的信息隐藏方法
WO2021124520A1 (ja) 秘密乱数生成システム、秘密計算装置、秘密乱数生成方法、およびプログラム
Kumbhar et al. Privacy preserving mining of association rules on horizontally and vertically partitioned data: a review paper
JP7041951B2 (ja) 入力者装置、演算支援装置、及びプログラム
CN113992325A (zh) 一种隐私数据共享方法及装置
JP4623623B2 (ja) 復元制御型秘密情報分散装置
Calviño et al. Privacy-preserving distributed statistical computation to a semi-honest multi-cloud
Muthukumar et al. Modified secret sharing algorithm for secured medical data sharing in cloud environment
KumaraSwamy et al. Association rule sharing model for privacy preservation and collaborative data mining efficiency
Xuelong et al. A symmetric cryptography based on extended cellular automata
Sujan Securing Distributed Data Mechanism Based On Blockchain Technology
JP7396373B2 (ja) 秘密計算システム、秘密計算サーバ装置、秘密計算方法および秘密計算プログラム
Ling et al. P 2 FRPSI: Privacy-Preserving Feature Retrieved Private Set Intersection
JP2004274320A (ja) 秘密分散装置、秘密再構成装置、秘密分散再構成システム、秘密分散方法、及び秘密再構成方法
JP2015108682A (ja) 秘匿比較方法、プログラム、およびシステム

Legal Events

Date Code Title Description
A529 Written submission of copy of amendment under article 34 pct

Free format text: JAPANESE INTERMEDIATE CODE: A5211

Effective date: 20170810

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170824

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190115

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20190115

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190702

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20200107