IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 日本電気株式会社の特許一覧

特許7480857秘密計算システム、秘密計算サーバ装置、秘密計算方法および秘密計算プログラム
<>
  • 特許-秘密計算システム、秘密計算サーバ装置、秘密計算方法および秘密計算プログラム 図1
  • 特許-秘密計算システム、秘密計算サーバ装置、秘密計算方法および秘密計算プログラム 図2
  • 特許-秘密計算システム、秘密計算サーバ装置、秘密計算方法および秘密計算プログラム 図3
  • 特許-秘密計算システム、秘密計算サーバ装置、秘密計算方法および秘密計算プログラム 図4
  • 特許-秘密計算システム、秘密計算サーバ装置、秘密計算方法および秘密計算プログラム 図5
  • 特許-秘密計算システム、秘密計算サーバ装置、秘密計算方法および秘密計算プログラム 図6
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-04-30
(45)【発行日】2024-05-10
(54)【発明の名称】秘密計算システム、秘密計算サーバ装置、秘密計算方法および秘密計算プログラム
(51)【国際特許分類】
   G09C 1/00 20060101AFI20240501BHJP
【FI】
G09C1/00 650Z
【請求項の数】 10
(21)【出願番号】P 2022555004
(86)(22)【出願日】2020-10-06
(86)【国際出願番号】 JP2020037870
(87)【国際公開番号】W WO2022074735
(87)【国際公開日】2022-04-14
【審査請求日】2023-04-05
(73)【特許権者】
【識別番号】000004237
【氏名又は名称】日本電気株式会社
(74)【代理人】
【識別番号】100080816
【弁理士】
【氏名又は名称】加藤 朝道
(74)【代理人】
【識別番号】100098648
【弁理士】
【氏名又は名称】内田 潔人
(72)【発明者】
【氏名】土田 光
【審査官】行田 悦資
(56)【参考文献】
【文献】松本 和馬 ほか,ユーザの結託による不正に強いハイブリッドP2P型MMOゲームフレームワーク,マルチメディア,分散,協調とモバイル(DICOMO2017)シンポジウム論文集,日本,一般社団法人情報処理学会,2017年06月21日,Vol. 2017, No.1,pp.340-346,情報処理学会シンポジウムシリーズ
【文献】千田 浩司 ほか,軽量検証可能3パーティ秘匿関数計算の再考,コンピュータセキュリティシンポジウム2010 論文集,日本,一般社団法人情報処理学会,2010年10月12日,Vol.2010, No.9,pp.555-560,情報処理学会シンポジウムシリーズ
(58)【調査した分野】(Int.Cl.,DB名)
G09C 1/00
(57)【特許請求の範囲】
【請求項1】
相互にネットワークで接続した少なくとも5台以上の秘密計算サーバ装置を備え、秘密分散して保持されている値の秘密計算をする秘密計算システムであって、
前記秘密計算サーバ装置のそれぞれが、
少なくとも3台以上の秘密計算サーバ装置から受信した同一の値となるはずの受信値を比較し、少なくとも2つ以上が同一である受信値を正しい値として採用する比較検証部を、
有する秘密計算システム。
【請求項2】
前記秘密計算サーバ装置のそれぞれが、
シードと識別子を入力として決定的に疑似乱数を生成し、前記疑似乱数を用いて、第1のインデックスに関する総和はゼロであり、第2のインデックスに関する総和はゼロではないマスクの組を作成する疑似ランダム関数計算部をさらに備え、
前記受信値は、前記マスクによって秘匿された状態で送信される、請求項1に記載の秘密計算システム。
【請求項3】
前記秘密計算サーバ装置のそれぞれに秘密分散された2つのシェア値の乗算を秘密計算する際に、前記乗算のシェア値として、前記第2のインデックスに関する総和を付加項として有し、前記乗算の結果を復元する際に、前記第1のインデックスに関する総和がゼロであることを用いて前記マスクを除去する、請求項2に記載の秘密計算システム。
【請求項4】
前記比較検証部は、前記受信値のハッシュ値が同一であることを判断して、前記受信値が正しい値であることを判断する、請求項1から請求項3のいずれか1項に記載の秘密計算システム。
【請求項5】
秘密分散して保持されている値の秘密計算をするために相互にネットワークで接続した少なくとも5台以上の秘密計算サーバ装置の一つであって、
少なくとも3台以上の秘密計算サーバ装置から受信した同一の値となるはずの受信値を比較し、少なくとも2つ以上が同一である受信値を正しい値として採用する比較検証部を、
有する秘密計算サーバ装置。
【請求項6】
相互にネットワークで接続した少なくとも5台以上の秘密計算サーバ装置を備え、秘密分散して保持されている値の秘密計算をする秘密計算方法であって、
前記秘密計算サーバ装置のそれぞれが、
少なくとも3台以上の秘密計算サーバ装置から受信した同一の値となるはずの受信値を比較し、少なくとも2つ以上が同一である受信値を正しい値として採用する秘密計算方法。
【請求項7】
シードと識別子を入力として決定的に疑似乱数を生成し、前記疑似乱数を用いて、第1のインデックスに関する総和はゼロであり、第2のインデックスに関する総和はゼロではないマスクの組を作成し、
前記受信値は、前記マスクによって秘匿された状態で送信される、請求項6に記載の秘密計算方法。
【請求項8】
前記秘密計算サーバ装置のそれぞれに秘密分散された2つのシェア値の乗算を秘密計算する際に、前記乗算のシェア値として、前記第2のインデックスに関する総和を付加項として有し、前記乗算の結果を復元する際に、前記第1のインデックスに関する総和がゼロであることを用いて前記マスクを除去する、請求項7に記載の秘密計算方法。
【請求項9】
前記受信値のハッシュ値が同一であることを判断して、前記受信値が正しい値であることを判断する、請求項6から請求項8のいずれか1項に記載の秘密計算方法。
【請求項10】
相互にネットワークで接続した少なくとも5台以上の秘密計算サーバ装置に、秘密分散して保持されている値の秘密計算をさせる秘密計算プログラムであって、
少なくとも3台以上の秘密計算サーバ装置から受信した同一の値となるはずの受信値を比較し、少なくとも2つ以上が同一である受信値を正しい値として採用する処理を有する秘密計算プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、秘密計算システム、秘密計算サーバ装置、秘密計算方法および秘密計算プログラムに関するものである。
【背景技術】
【0002】
近年、秘密計算と呼ばれる技術の研究開発が盛んに行われている。秘密計算は、第三者に対して計算過程とその結果を秘密にしつつ所定の処理を実行する技術の一つである。秘密計算における代表的な技術の一つとして、マルチパーティ計算技術が挙げられる。マルチパーティ計算技術では、秘密にするデータを複数のサーバ(秘密計算サーバ装置)に分散配置し、秘密にした状態を維持しながら当該データの任意の演算を実行する。なお、各秘密計算サーバ装置に分散配置したデータをシェアと呼ぶ。以降、特に断りがない限り、本書で「秘密計算」という語を用いた場合は、マルチパーティ計算技術を意味するものとする。
【0003】
一般に秘密計算と呼ばれる技術の中にも、達成されている安全性の程度には高低がある。例えば、秘密計算を行うマルチパーティの参加者の中に不正者が紛れたとする。その場合に、不正者の存在を検知し処理を中断することができる秘密計算の技術と、たとえ不正者が存在しても処理を中断することなく正しい計算結果を得ることができる秘密計算の技術とでは、後者の方が前者よりも安全性が高い。そして、後者の安全性を満たす秘密計算はGuaranteed Output Delivery (GOD)と呼ばれ、これを実現する秘密計算の例も知られている(例えば、非特許文献1参照)。
【先行技術文献】
【非特許文献】
【0004】
【文献】Byali, M., Chaudhari, H., Patra, A., & Suresh, A. (2020). FLASH: fast and robust framework for privacy-preserving machine learning. Proceedings on Privacy Enhancing Technologies, 2020(2), 459-480.
【発明の概要】
【発明が解決しようとする課題】
【0005】
なお、上記先行技術文献の各開示を、本書に引用をもって繰り込むものとする。以下の分析は、本発明者らによってなされたものである。
【0006】
ところで、秘密計算における安全性の評価には、達成できる安全性の効果だけではなく、前提条件も重要な意味を持つ。代表的な前提条件としてハッシュ関数のランダムオラクルモデルないしランダムオラクル仮定がある。
【0007】
ハッシュ関数は、入力に対し一意の出力を返す関数であるが、出力から入力を推定することが困難であるように構成されている。ここで、出力から入力を推定することが困難であるとはいうものの、絶対に不可能であるかというとその保証はできない。そこで、安全性の評価に際し、用いられているハッシュ関数が脆弱性を持たないという前提で安全性が評価される。この前提の安全性を「ランダムオラクルモデルにおいて安全」あるいは「ランダムオラクル仮定のもとで安全」という。そして、非特許文献1における秘密計算の安全性は「ランダムオラクルモデルにおいて安全」である。
【0008】
一方、「ランダムオラクルモデルにおいて安全」の対義語は、「標準モデルにおいて安全」である。すなわち、ハッシュ関数の出力から入力を推定することができたとしても、そのこと自体が秘密計算の脆弱性とはならないことをいう。当然のことながら、達成できる安全性が同じであれば、ランダムオラクルモデルにおける安全性よりも、標準モデルにおける安全性の方が高度な安全性が達成できることになる。
【0009】
本発明の目的は、上述した課題を鑑み、Delivered安全性を高めることに寄与する秘密計算システム、秘密計算サーバ装置、秘密計算方法および秘密計算プログラムを提供することにある。
【課題を解決するための手段】
【0010】
本発明の第1の視点では、相互にネットワークで接続した少なくとも5台以上の秘密計算サーバ装置を備え、秘密分散して保持されている値の秘密計算をする秘密計算システムであって、前記秘密計算サーバ装置のそれぞれが、少なくとも3台以上の秘密計算サーバ装置から受信した同一の値となるはずの受信値を比較し、少なくとも2つ以上が同一である受信値を正しい値として採用する比較検証部を有する秘密計算システムが提供される。
【0011】
本発明の第2の視点では、秘密分散して保持されている値の秘密計算をするために相互にネットワークで接続した少なくとも5台以上の秘密計算サーバ装置の一つであって、少なくとも3台以上の秘密計算サーバ装置から受信した同一の値となるはずの受信値を比較し、少なくとも2つ以上が同一である受信値を正しい値として採用する比較検証部を有する秘密計算サーバ装置が提供される。
【0012】
本発明の第3の視点では、相互にネットワークで接続した少なくとも5台以上の秘密計算サーバ装置を備え、秘密分散して保持されている値の秘密計算をする秘密計算方法であって、前記秘密計算サーバ装置のそれぞれが、少なくとも3台以上の秘密計算サーバ装置から受信した同一の値となるはずの受信値を比較し、少なくとも2つ以上が同一である受信値を正しい値として採用する秘密計算方法が提供される。
【0013】
本発明の第4の視点では、相互にネットワークで接続した少なくとも5台以上の秘密計算サーバ装置に、秘密分散して保持されている値の秘密計算をさせる秘密計算プログラムであって、少なくとも3台以上の秘密計算サーバ装置から受信した同一の値となるはずの受信値を比較し、少なくとも2つ以上が同一である受信値を正しい値として採用する処理を有する秘密計算プログラムが提供される。なお、このプログラムは、コンピュータが読み取り可能な記憶媒体に記録することができる。記憶媒体は、半導体メモリ、ハードディスク、磁気記録媒体、光記録媒体等の非トランジェント(non-transient)なものとすることができる。本発明は、コンピュータプログラム製品として具現することも可能である。
【発明の効果】
【0014】
本発明の各視点によれば、安全性を高めることに寄与する秘密計算システム、秘密計算サーバ装置、秘密計算方法および秘密計算プログラムを提供することができる。
【図面の簡単な説明】
【0015】
図1図1は、第1の実施形態における秘密計算システムの機能構成例を示すブロック図である。
図2図2は、第1の実施形態における秘密計算サーバ装置の機能構成例を示すブロック図である。
図3図3は、第2の実施形態における秘密計算システムの機能構成例を示すブロック図である。
図4図4は、秘密計算方法の手順の概略を示すフローチャートである。
図5図5は、第2の実施形態における秘密計算サーバ装置の機能構成例を示すブロック図である。
図6図6は、秘密計算サーバ装置のハードウェア構成例を示す図である。
【発明を実施するための形態】
【0016】
以下、図面を参照しながら、本発明の実施形態について説明する。ただし、以下に説明する実施形態により本発明が限定されるものではない。また、各図面において、同一または対応する要素には適宜同一の符号を付している。さらに、図面は模式的なものであり、各要素の寸法の関係、各要素の比率などは、現実のものとは異なる場合があることに留意する必要がある。図面の相互間においても、互いの寸法の関係や比率が異なる部分が含まれている場合がある。
【0017】
[第1の実施形態]
以下、図1図2を参照して、第1の実施形態に係る秘密計算システムおよび秘密計算サーバ装置について説明する。第1の実施形態は、本発明の基本的なコンセプトのみを説明する実施形態である。
【0018】
図1は、第1の実施形態における秘密計算システムの機能構成例を示すブロック図である。図1に示すように、第1の実施形態による秘密計算システム100は、第1の秘密計算サーバ装置100_0と第2の秘密計算サーバ装置100_1と第3の秘密計算サーバ装置100_2と第4の秘密計算サーバ装置100_3と第5の秘密計算サーバ装置100_4とを備えている。第1の秘密計算サーバ装置100_0、第2の秘密計算サーバ装置100_1、第3の秘密計算サーバ装置100_2、第4の秘密計算サーバ装置100_3、および第5の秘密計算サーバ装置100_4は、それぞれが互いにネットワーク経由で通信可能に接続されている。図1中央の丸印は、ネットワークを示す。
【0019】
第1~第5の秘密計算サーバ装置100_i(i=0,1,2,3,4)を備える秘密計算システム100においては、第1~第5の秘密計算サーバ装置100_i(i=0,1,2,3,4)の内のいずれかの秘密計算サーバ装置100_iが入力した値に対し、その入力や計算過程の値を知られることなく目的のシェアを計算し、その計算結果を第1~第5の秘密計算サーバ装置100_i(i=0,1,2,3,4)に分散して記憶することができる。
【0020】
また、第1~第5の秘密計算サーバ装置100_i(i=0,1,2,3,4)を備える秘密計算システム100においては、第1~第5の秘密計算サーバ装置100_i(i=0,1,2,3,4)に分散して記憶されているシェアに対し、その計算過程の値を知られることなく目的のシェアを計算し、その計算結果を第1~第5の秘密計算サーバ装置100_i(i=0,1,2,3,4)に分散して記憶することができる。
【0021】
なお、上記計算結果のシェアは、第1~第5の秘密計算サーバ装置100_0~100_4とシェアを送受信することで、復元してもよい。あるいは、第1~第5の秘密計算サーバ装置100_0~100_4ではない外部にシェアを送信することで、復元してもよい。
【0022】
さらに、第1~第5の秘密計算サーバ装置100_i(i=0,1,2,3,4)を備える秘密計算システム100においては、第1~第5の秘密計算サーバ装置100_i(i=0,1,2,3,4)のうち1つが不正者によって運営されている場合であっても、処理を停止することなく、正しい秘密計算を継続することができる。
【0023】
例えば上記のように、第1~第5の秘密計算サーバ装置100_i(i=0,1,2,3,4)のうち1つが不正者によって運営されている場合であっても、処理を停止することなく、正しい秘密計算を継続することができるシェアの構成として以下の構成を採用することができる。
【0024】
各参加者Pi (i = 0, 1, 2, 3, 4) に対する、位数nの剰余類環Zn のシェアを以下のように定める。
【0025】
位数nの剰余類環Znの元x∈Znの剰余類環Zn上のシェアを以下のように表す。ただし、mは2以上の整数とし、n=2mであるとする。つまり、位数2の剰余類環Z2は、位数nの剰余類環Znと区別する。
[x] = ([x]0, [x]1, [x]2, [x]3, [x]4)
位数nの剰余類環Znの元x∈Zn
x = x0 + x1 + x2 + x3 + x4 mod n
との関係を満たすように分解し、各参加者 Pi (i = 0, 1, 2, 3, 4)が分散保持する[x]iは、以下のようにする。
[x]i = (xi, xi+1, xi+2, xi+3), ただし、x4+1 = x0
【0026】
一方、位数2の剰余類環Z2の元x∈Z2の剰余類環Z2上のシェアは、上記剰余類環Zn上のシェアにおけるn=2の場合と同様の定義とするが、記法としては位数nの剰余類環Znと区別し、[x]Bのように表す。
【0027】
このように各参加者Pi (i = 0, 1, 2, 3, 4)が保持するシェア[x]0, [x]1, [x]2, [x]3, [x]4を定めると、各参加者Pi (i = 0, 1, 2, 3, 4)は、自己が保持するシェア[x]0, [x]1, [x]2, [x]3, [x]4からはxを復元することはできない。一方、参加者Pi (i = 0, 1, 2, 3, 4)のうち、すくなくとも2名が保持しているシェアを合わせるとxを復元することができるという秘密分散が実現する。なお、この秘密分散方式は、2-out-of-5複製型秘密分散(Additive Secret Sharing Scheme)と呼ばれている。
【0028】
ところで、この秘密分散方式では、xを復元する場合に限らず、秘密計算を実行する際に、参加者Piが、自己が保持していないシェアの値xi+4を他の参加者Pjから受信する状況が発生する。このとき、参加者Piが保持していないシェアの値xi+4は、他の参加者Pjの全てが保持しているはずなので、本来的には、他の参加者Pjの誰から参加者Piが保持していないシェアの値xi+4を受信しても構わないはずである。しかしながら、他の参加者Pjの中に不正者が紛れたとすると、本来は受信したい値xi+4の代わりに別の値が送信されてくることが起こり得る。すると、誤った値に基づいて秘密計算を実行することになり、誤った計算を得ることになったり、そもそも計算自体を正常に実行することができなくなったりする。
【0029】
そこで、本実施形態では、図2に示すように、各秘密計算サーバ装置100_iが比較検証部101_iを備え、少なくとも3台以上の秘密計算サーバ装置から受信した同一の値となるはずの受信値を比較し、少なくとも2つ以上が同一である受信値を正しい値として採用する。これにより、たとえ参加者の中に不正者が存在しても処理を中断することなく正しい計算結果を得ることができる。
【0030】
具体的には、次のような処理の例が考えられる。ここでは、参加者Piが、xを復元する場合に、自己が保持していないシェアの値xi+4を他の参加者Pjから受信する状況を考える。また、各参加者Pi (i = 0, 1, 2, 3, 4)は、秘密計算サーバ装置100_i(i = 0, 1, 2, 3, 4)を運用しており、実際の処理は、各参加者Pi (i = 0, 1, 2, 3, 4)が実行するのではなく、秘密計算サーバ装置100_i(i = 0, 1, 2, 3, 4)が実行する処理として行うものである。
【0031】
xを復元する場合、x = x0 + x1 + x2 + x3 + x4 mod nという関係式があるので、x0, x1, x2, x3, x4の全ての値が必要となる。しかしながら、参加者Piが保持しているシェアは、[x]i = (xi, xi+1, xi+2, xi+3), (where x4+1 = x0)であるので、xi+4を保持していない。そこで、参加者Piは、他の参加者Pjからxi+4を受信する必要がある。
【0032】
一方、シェアの構成の定義から、他の参加者Pjの全てがxi+4を保持している。したがって、他の参加者Pjのうち1人からxi+4を受信すればよいのであるが、ここでは、少なくとも3人の他の参加者Pjから同一となるはずのxi+4を受信する。なお、ここでは、3人の他の参加者Pjからxi+4を受信する場合を想定し、各参加者から受信した値を区別するために、xi+4,1, xi+4,2, xi+4,3と表記する。
【0033】
そして、参加者Piは、同一の値となるはずの受信値、xi+4,1, xi+4,2, xi+4,3を比較し、少なくとも2つ以上が同一である受信値を正しい値xi+4として採用する。
【0034】
例えば、xi+4,1 = xi+4,2またはxi+4,1 = xi+4,3であれば、xi+4,1を正しい値xi+4として採用する(xi+4 = xi+4,1)。また、xi+4,2 = xi+4,3であれば、xi+4,2を正しい値xi+4として採用する(xi+4 = xi+4,2)。このように、少なくとも2つ以上が同一である受信値を正しい値として採用すれば、受信したxi+4,1, xi+4,2, xi+4,3のうち、どれか1つが偽りの値であっても、正しい値を判別することができる。その後、正しい値xi+4を用いてx = x0 + x1 + x2 + x3 + x4 mod nを計算すれば、xを復元することが可能である。
【0035】
このように、少なくとも3人の他の参加者Pjから同一となるはずのxi+4を受信し、少なくとも2つ以上が同一である受信値を正しい値として採用することで、他の参加者Pjの中に不正者が紛れたとしても正しい値を判別することができる。すなわち、不正者が紛れたとしても処理を停止することなく、正しい計算を得ることができるGuaranteed Output Delivery (GOD)が実現されている。また、上記処理では、そもそもハッシュ関数を用いていないので、標準モデルにおいてGuaranteed Output Delivery (GOD)が実現されている。
【0036】
以上説明した第1の実施形態は、本発明の基本的なコンセプトのみを説明する実施形態である。したがって、本発明を実用的な実施形態に適用するためには、加算や乗算などを含む一連の処理において、上記説明したコンセプトを適用する必要がある。以下で説明する第2の実施形態は、上記説明したコンセプトを実用的な実施形態に適用したものである。
【0037】
[第2の実施形態]
以下、図3および図4を参照して、第2の実施形態に係る秘密計算システムおよび秘密計算サーバ装置について説明する。
【0038】
図3は、第2の実施形態における秘密計算システムの機能構成例を示すブロック図である。図3に示すように、第2の実施形態による秘密計算システム200は、第1の秘密計算サーバ装置200_0と第2の秘密計算サーバ装置200_1と第3の秘密計算サーバ装置200_2と第4の秘密計算サーバ装置200_3と第5の秘密計算サーバ装置200_4とを備えている。第1の秘密計算サーバ装置200_0、第2の秘密計算サーバ装置200_1、第3の秘密計算サーバ装置200_2、第4の秘密計算サーバ装置100_3、および第5の秘密計算サーバ装置200_4は、それぞれが互いにネットワーク経由で通信可能に接続されている。
【0039】
第1~第5の秘密計算サーバ装置200_i(i=0,1,2,3,4)を備える秘密計算システム200においては、第1~第5の秘密計算サーバ装置200_i(i=0,1,2,3,4)の内のいずれかの秘密計算サーバ装置200_iが入力した値に対し、その入力や計算過程の値を知られることなく目的のシェアを計算し、その計算結果を第1~第5の秘密計算サーバ装置200_i(i=0,1,2,3,4)に分散して記憶することができる。
【0040】
さらに、第1~第5の秘密計算サーバ装置200_i(i=0,1,2,3,4)を備える秘密計算システム200においては、第1~第5の秘密計算サーバ装置200_i(i=0,1,2,3,4)のうち1つが不正者によって運営されている場合であっても、処理を停止することなく、正しい秘密計算を継続することができる。
【0041】
図4は、秘密計算方法の手順の概略を示すフローチャートである。図4に示される秘密計算方法の手順は、説明を容易にするための秘密計算の手順の典型例に過ぎず、実際の秘密計算方法では、一部のステップのみの実施であったり、順序を変えて実施したり、一部のステップを繰り返すなどの変更がなされることが通常である。
【0042】
図4に示されるように、典型的な秘密計算では、準備ステップ(ステップS1)と、疑似乱数計算ステップ(ステップS2)と、入力ステップ(ステップS3)と、秘密計算ステップ(ステップS4)と、復元ステップ(ステップS5)とを備えている。
【0043】
例えば、準備ステップ(ステップS1)には、疑似乱数を生成するためのシードを各秘密計算サーバ装置200_i(i=0,1,2,3,4)で適切に共有するための処理が含まれる。疑似乱数計算ステップ(ステップS2)には、準備ステップ(ステップS1)で各秘密計算サーバ装置200_i(i=0,1,2,3,4)が共有したシードと識別子を用いて決定的に疑似乱数を生成する処理が含まれる。なお、生成された疑似乱数は、秘密計算ステップ(ステップS4)におけるマスクに用いられる。
【0044】
入力ステップ(ステップS3)は、秘密計算の対象となる入力を各秘密計算サーバ装置200_i(i=0,1,2,3,4)に分散して保持するためのステップである。秘密計算ステップ(ステップS4)は、各秘密計算サーバ装置200_i(i=0,1,2,3,4)に分散して保持されているシェアに対し、秘密状態を維持しながら所望の計算をするステップである。秘密計算ステップ(ステップS4)で行うことができる計算は任意の計算であるが、その中でも重要なものが乗算(掛け算)である。秘密計算ステップ(ステップS4)の結果は、一般にシェアであり秘密計算サーバ装置200_i(i=0,1,2,3,4)に分散して保持される。復元ステップ(ステップS5)では、秘密計算ステップ(ステップS4)の結果のシェアを復元するステップである。
【0045】
以下、各ステップに分けて具体的な処理の内容を説明する。
【0046】
[準備(シードの共有)]
準備ステップ(ステップS1)で生成するためのシードとは、疑似ランダム関数F,Fが決定的に疑似乱数を生成するためのものである。各秘密計算サーバ装置200_i(i=0,1,2,3,4)は、疑似乱数を生成するためのシードを適切に共有することで、各秘密計算サーバ装置200_i(i=0,1,2,3,4)が適切に対応付けられた疑似乱数を生成することができるようになる。各秘密計算サーバ装置200_i(i=0,1,2,3,4)が共有するシードは、初期設定として信頼できる第三者が各シードを各秘密計算サーバ装置200_i(i=0,1,2,3,4)に設定しても良いが、ここでは事後的に秘密を保持しながら各秘密計算サーバ装置200_i(i=0,1,2,3,4)でシードを共有するための手順を説明する。各秘密計算サーバ装置200_i(i=0,1,2,3,4)が協力してシードを共有する場合、例えば、図5に示すように、秘密計算サーバ装置200_iが比較検証部201_iを備え、比較検証部201_iが正しい値を採用することによって、標準モデルにおけるGuaranteed Output Delivery (GOD)を実現する。なお、比較検証部201_iは、後に説明するハードウェア構成において実行されるプログラムとして実現することも可能である。
【0047】
疑似ランダム関数F,Fとシードおよび識別子の関係は次の通りである。疑似ランダム関数F,Fは、セキュリティパラメータκに対して定められた2項演算である。
:{0,1}κ×{0,1}κ→{0,1}
:{0,1}κ×{0,1}κ→{0,1}
一方、シードseedi∈{0,1}κ(i=0, 1, 2, 3, 4)は、各秘密計算サーバ装置200_iが適切に共有している値であり、識別子vid∈{0,1}κはカウンタなどの公開された値である。これらシードと識別子を入力として、疑似ランダム関数F,Fは、決定的に疑似乱数を生成する。
【0048】
5つのシードseedi∈{0,1}κ(i=0, 1, 2, 3, 4)は、各秘密計算サーバ装置200_iが(seedi, seedi+1, seedi+2, seedi+3)を保持する。ただし、seed4+1 = seed0である。すなわち、各秘密計算サーバ装置200_iは、すべてのシードseediを保持するのではなく、秘密計算サーバ装置200_iは、シードseedi+4のみを保持していないという関係である。
【0049】
上記関係となるようにシードを共有するためには、各秘密計算サーバ装置200_iの間で情報の送受信が発生する。そして、秘密計算サーバ装置200_iの中に不正者によって運営されているものが紛れていると、適切なシードの共有が実現できないことになってしまう。そこで、本実施形態の準備ステップ(ステップS1)では、以下のような手順でシードの共有を実現する。
【0050】
ここでは、シードseediを作成する場合の例で説明する。シードseediを保持するべきは、参加者Pi, Pi+1, Pi+2, Pi+3であるので、この4人の参加者Pi, Pi+1, Pi+2, Pi+3が協力してシードseediを作成する。
【0051】
最初に、各々の参加者Pi, Pi+1, Pi+2, Pi+3が、si (i), si (i+1), si (i+2), si (i+3)∈{0,1}κをランダムに生成する。
【0052】
そして、参加者Piがsi (i)を他の参加者Pi+1, Pi+2, Pi+3へ送る。一方、参加者Pi+1, Pi+2, Pi+3は受信したsi (i)を相互に送受信しあう。参加者Pi+1, Pi+2, Pi+3は、相互に送受信したsi (i)に対して、以下のような判断を行う。
【0053】
(1)他の2人から得たsi (i)が一致していたら、2人から得たsi (i)を正しいものとして、acceptのメッセージを他の2人に送る。
(2)他の2人から得たsi (i)は一致しないが、自身の持つsi (i)とどちらかが一致したら、自身の持つsi (i)を正しいsi (i)とする。一致しなかったsi (i)を送った参加者には、reviseのメッセージと、自身の持つsi (i)を送信する。自身の持つsi (i)と一致した参加者には、acceptのメッセージを送信する。
(3)他の2人から得たsi (i)はそれぞれ一致せず、かつ、自身の持つsi (i)とも一致しなかった場合、(corrupted, Pi)のメッセージを他の2人に送る。
【0054】
そして、他の二人からacceptを得たら、次のステップに進み、reviseを受信したら、共に送られてきたsi (i)を正しいものとして、次に進む。一方、(corrupted, Pi)を受信した場合、参加者Piが不正者であるのだから、参加者Piを除外して、セミオネスト安全な4者秘密計算を行う。
【0055】
上記手順を参加者Pi+1, Pi+2, Pi+3についても行い、各参加者Pi, Pi+1, Pi+2, Pi+3がsi (i), si (i+1), si (i+2), si (i+3)∈{0,1}κを正しい値として共有する状態が実現する。そして、シードseediは、共有されたsi (i), si (i+1), si (i+2), si (i+3)から以下のように作成する。
【0056】
【数1】
【0057】
さらに、上記手順を5つのシードseedi∈{0,1}κ(i=0, 1, 2, 3, 4)に対して行うことで、各秘密計算サーバ装置200_iが正しく(seedi, seedi+1, seedi+2, seedi+3)を保持する状態が実現する。
【0058】
以上のようなシードの共有方法では、少なくとも3人の他の参加者Pjから同一となるはずのsi (i)を受信し、少なくとも2つ以上が同一である受信値を正しい値として採用することで、他の参加者Pjの中に不正者が紛れたとしても正しい値を判別することができる。すなわち、不正者が紛れたとしても処理を停止することなく、正しい計算を得ることができるGuaranteed Output Delivery (GOD)が実現されている。また、上記処理では、そもそもハッシュ関数を用いていないので、標準モデルにおいてGuaranteed Output Delivery (GOD)が実現されている。
【0059】
[疑似乱数計算(マスク作成)]
疑似乱数計算ステップ(ステップS2)では、準備ステップ(ステップS1)で作成したシードと識別子を用いて決定的に疑似乱数を生成する。疑似乱数計算ステップ(ステップS2)で生成する疑似乱数は、後の秘密計算において送信する値を秘匿するためのマスクとして用いられる。このために、以下に示すような法則に従う疑似乱数(Correlated Randomness)を作成する。例えば、以下に示すような法則に従う疑似乱数を作成するために、図5に示すように、秘密計算サーバ装置200_iのそれぞれが、疑似ランダム関数計算部202_iを備え、各疑似ランダム関数計算部202_iが以下に示すような法則に従う疑似乱数を作成する構成とすることができる。ただし、疑似ランダム関数計算部202_iは、後に説明するハードウェア構成において実行されるプログラムとして実現することも可能である。
【0060】
ここでは、参加者Pi+4からは乱数に見えて除去できないが、残りの参加者Pi, Pi+1, Pi+2, Pi+3にとっては決定的に計算可能であるような、Correlated Randomnessを参加者Pi, Pi+1, Pi+2, Pi+3で協力して作る場合を考える。そのためには、参加者Pi+4がシードseedi+3を保持していないことに着目すると、疑似ランダム関数Fnの入力としてシードseedi+3を用いれば以下の疑似乱数は条件を満たす。
αk = Fn(vidk, seedi+3)- Fn(vidk+1, seedi+3) mod n
【0061】
また、識別子vidkにおけるインデックスkをk=0からk=4まで変化させると、αkは5つ作成することが可能である。そこで、これらαkの組を以下のように定める。このように定めたα0, α1, α2, α3, α4がα01234=0を満たすことは容易に確かめることができる。
0, α1, α2, α3, α4) = CR(i+4, {vidk}4 k=0, seedi+3)
【0062】
このように作成された疑似乱数α0, α1, α2, α3, α4は、参加者Pi+4からは乱数に見えて除去できないが、残りの参加者Pi, Pi+1, Pi+2, Pi+3にとっては決定的に計算可能である。一方、参加者Pi+4にとっても、各疑似乱数α0, α1, α2, α3, α4は除去できないが、すべての疑似乱数α0, α1, α2, α3, α4が揃うと総和は0であり除去可能になるという性質がある。
【0063】
さらに、上記疑似乱数の作成は、すべての参加者Pi+4に対しても同様に行うことができる。具体的には、以下のように定めればよい。
i,0, αi,1, αi,2, αi,3, αi,4) = CR(i, {vidk}4 k=0, seedi+4) for i=0,1,2,3,4
αi,k = Fn(vidk, seedi+4)- Fn(vidk+1, seedi+4) mod n for i=0,1,2,3,4
【0064】
このように作成された疑似乱数の組は以下のようになる。
【表1】
【0065】
上記疑似乱数の表では、第1のインデックス(縦方向)に関する総和はゼロであり、第2のインデックス(横方向)に関する総和はゼロではないという性質を有する。
【0066】
なお、疑似乱数の組は、5つのシードseedi∈{0,1}κ(i=0, 1, 2, 3, 4)を適切に各秘密計算サーバ装置200_iで共有しておくことで、各秘密計算サーバ装置200_iが形成することが可能である。つまり、各疑似乱数αi,k自体を各秘密計算サーバ装置200_i間で送受信する必要はないので、正しい値であるか否かの判定をする必要はない。
【0067】
[入力]
入力ステップ(ステップS3)は、秘密計算の対象となる入力を各秘密計算サーバ装置200_i(i=0,1,2,3,4)に分散して保持するためのステップである。ここでは、Input dealerを参加者Piとし,x∈Znのシェア[x]を作ることを考える。以下で説明する入力ステップ(ステップS3)の処理は、例えば、図5に示すように、秘密計算サーバ装置200_iが比較検証部201_iを備え、比較検証部201_iが正しい値を採用することによって、標準モデルにおけるGuaranteed Output Delivery (GOD)を実現する。なお、比較検証部201_iは、後に説明するハードウェア構成において実行されるプログラムとして実現することも可能である。
【0068】
参加者Piは、疑似ランダム関数を用いて以下のようにri, ri+1, ri+2, ri+3を計算する。
ri = Fn(vidi, seedi)
そして、これらri, ri+1, ri+2, ri+3を用いて以下のようにx∈Znからx4を計算する。
x4 = x-ri-ri+1-ri+2-ri+3 mod n
【0069】
その後、参加者Piは、自己が保持するシェア[x]iを[x]i=(xi+1, xi+2, xi+3, xi+4)=(ri+1, ri+2, ri+3, ri+4)とする。一方、参加者Piは、x4を他の参加者Pi+1, Pi+2, Pi+3, Pi+4に送信する。
【0070】
ここで、記載を容易にするため、参加者Pi+1, Pi+2, Pi+3, Pi+4をRj, Rj+1, Rj+2, Rj+3とおく。ただし、Rj+4=Rjであり、Rj-4=Rj+3とする。また、受信したxi+4について、Rj, Rj+1, Rj+2, Rj+3が計算したハッシュ値をそれぞれhj, hj+1, hj+2, hj+3とする。ただし、hi+4 = hjとする。ここで、ハッシュ値を計算する理由は通信の効率化のためであり、ランダムオラクル性を仮定せず、衝突耐性を有するハッシュ関数であれば十分に利用することが可能である。
【0071】
各Rj(k=j, j+1, j+2, j+3)は、Rk-1に対して自身が受信したxi+4をmkとして送信する。また、各Rj(k=j, j+1, j+2, j+3)は、Rk-2とRk-3に対してhkを送信する。各Rjは、自身の持つhkと、受信したmk+1のハッシュ値hk+1、hk+2およびhk+3とを比較し、3つ以上同じ値が含まれているかを検証する。その結果に従って、以下のような処理の場合分けを行う。
【0072】
(1)同じ値が2つ以下しか含まれていない場合、Piが攻撃者である。したがってPi(と初期入力)を除外し、セミオネスト安全な4者秘密計算を実行する。
(2)同じ値が3つ以上含まれていて、かつ、その中にmkが含まれていた場合、mkを正しいxi+4とする。
(3)同じ値が3つ以上含まれていて、かつ、その中にmkが含まれていない場合、mk+1を正しいxi+4とする。
【0073】
最終的に、各Rj(k=j, j+1, j+2, j+3; j=i+1 mod 5)は、以下のようにシェア[x]kを得る。
【数2】

【0074】
以上のような入力方法では、少なくとも3人の他の参加者Pjから同一となるはずのxi+4(のハッシュ値)を受信し、少なくとも3つ以上が同一である受信値を正しい値として採用することで、他の参加者Pjの中に不正者が紛れたとしても正しい値を判別することができる。すなわち、不正者が紛れたとしても処理を停止することなく、正しい計算を得ることができるGuaranteed Output Delivery (GOD)が実現されている。また、上記処理では、ハッシュ関数を用いているが、出力から入力が推定されたとしても安全性に影響を与えないので、標準モデルにおいてGuaranteed Output Delivery (GOD)が実現されている。
【0075】
[秘密計算(乗算)]
秘密計算ステップ(ステップS4)は、各秘密計算サーバ装置200_i(i=0,1,2,3,4)に分散して保持されているシェアに対し、秘密状態を維持しながら所望の計算をするステップである。ここでは、秘密計算の重要な因子である乗算について説明し、その後に、加算や定数乗算などの他の秘密計算について説明する。以下で説明する秘密計算ステップ(ステップS4)の処理は、例えば、図5に示すように、秘密計算サーバ装置200_iが比較検証部201_iを備え、比較検証部201_iが正しい値を採用することによって、標準モデルにおけるGuaranteed Output Delivery (GOD)を実現する。なお、比較検証部201_iは、後に説明するハードウェア構成において実行されるプログラムとして実現することも可能である。
【0076】
ここでは、2つのシェア[x],[y]から[z]=[x・y]=[x]・[y]を計算することを考える。また、x,y,zは以下のように分解されているとする。
【数3】



【0077】
参加者Pi(i=0,1,2,3,4)は、以下のようなtmpzkを計算する。このtmpzkは参加者Piがzkを計算するためにはxk・yi+4が足りない(保持しているシェアから計算できない)ので、代わりに計算する値である。
【数4】

【0078】
なお、αj,kは、疑似乱数計算ステップ(ステップS2)で作成された疑似乱数であり、ここに再掲する。なお、第1のインデックス(縦方向)は、参加者Piにとって乱数であるものを並べている。一方、第2のインデックス(横方向)は、zkを計算するために用いられるもの並べてある。
【0079】
【表2】
【0080】
ここで、送信者集合Si={Pi+2, Pi+3, Pi+4}, Si+1={Pi+3, Pi+4, Pi+1}, Si+2={Pi+4, Pi+1, Pi+2}, Si+3={Pi+1, Pi+2, Pi+3}を定める。するとSkに属する参加者は、xkyi+4を保持しているシェアから計算することができる。そこで、例えば、送信者集合Si={Pi+2, Pi+3, Pi+4}に属する参加者Pi+2, Pi+3, Pi+4は、xk・yi+4を上記疑似乱数αi,kでマスクをしたmk,i+2, mk,i+3, mk,i+4を計算する。
Pi+2: mk,i+2 = αi,k + xk・yi+4 mod n
Pi+3: mk,i+3 = αi,k + xk・yi+4 mod n
Pi+4: mk,i+4 = αi,k + xk・yi+4 mod n
【0081】
そして、送信者集合Si={Pi+2, Pi+3, Pi+4}に属する参加者Pi+2, Pi+3, Pi+4は、例えば、参加者Pi+2, Pi+3がmk,i+2, mk,i+3をそのまま参加者Piに送信し、参加者Pi+4がmk,i+4のハッシュ値hk,i+4を参加者Piに送信する。ここで、mk,i+2, mk,i+3, mk,i+4は疑似乱数αi,kでマスクをしているのでxkyi+4が漏洩することはない。つまり、ここではハッシュ関数も用いているが、これは安全性の確保のためではなく、通信コストを削減するためである。なお、ここでの通信コストは、Amortizedな通信量で、zkを1つ計算するのに1ラウンドかつ2n[bits]であり、1人の参加者がzkを4つ分持つので、4倍の8n[bits]である。さらに参加者は5名いるので、5倍で、合計1ラウンドかつ40n[bits]である。
【0082】
その後、mk,i+2, mk,i+3およびmk,i+4のハッシュ値hk,i+4を受信した参加者Piは、mk,i+2, mk,i+3およびmk,i+4のハッシュ値hk,i+4の比較検証を行う。まず、参加者Piは、mk,i+2, mk,i+3のハッシュ値hk,i+2, hk,i+3を計算する。そして、hk,i+2=hk,i+3またはhk,i+2=hk,i+4であれば、mk = mk,i+2とする。一方、hk,i+3=hk,i+4であれば、mk = mk,i+2とする。
【0083】
上記のようにxkyi+4を参加者Piへ受け渡せば、少なくとも3人の他の参加者Pjから同一となるはずのmk(のハッシュ値)を受信し、少なくとも2つ以上が同一である受信値を正しい値として採用することで、他の参加者Pjの中に不正者が紛れたとしても正しい値を判別することができる。
【0084】
その後、参加者Piは、正しい値であることが判定されたmkを用いて、zk = tmpzk + mk mod n (k=i,i+1,i+2,i+3)を計算する。
【数5】


【0085】
このように計算されたzkは、余計な付加項が含まれているが、[z]=[xy]=[x][y]の計算結果のシェア[z]i=(zi, zi+1, zi+2, zi+3)として機能する。それは、実際に以下のようにz=z0+z1+z2+z3+z4を計算すると明らかとなる。
【0086】
【数6】
【0087】
ここで、疑似乱数αi,kが消去される理由は、疑似乱数の構成から以下の関係式が成り立つからである。
【数7】
【0088】
すなわち、疑似乱数計算ステップ(ステップS2)の説明で述べたように、本構成の疑似乱数は、第1のインデックス(縦方向)に関する総和はゼロであり、第2のインデックス(横方向)に関する総和はゼロではないという性質を有する。zk = tmpzk + mk mod n (k=i,i+1,i+2,i+3)の計算結果に表れていた付加項は、第2のインデックス(横方向)に関する総和であり、ゼロとはならないが、[z]=[x・y]=[x]・[y]の計算結果を復元する際には、第1のインデックス(縦方向)に関する総和がゼロになるという性質を用いて、結果的に付加項(マスク)の影響を除去することが可能になる。つまり、上記計算されたzkは、余計な付加項が含まれているが、[z]=[x・y]=[x]・[y]の計算結果のシェア[z]i=(zi, zi+1, zi+2, zi+3)として機能する。
【0089】
以上、上記のような[z]=[x・y]=[x]・[y]の計算結果のシェア[z]i=(zi, zi+1, zi+2, zi+3)は、少なくとも3人の他の参加者Pjから同一となるはずのmk(のハッシュ値)を受信し、少なくとも2つ以上が同一である受信値を正しい値として採用することで、他の参加者Pjの中に不正者が紛れたとしても正しい値を判別することができる。つまり、参加者の中に不正者が紛れたとしても処理を停止することなく、正しい計算を得ることができるGuaranteed Output Delivery (GOD)が実現されている。また、上記処理では、ハッシュ関数を用いているが、出力から入力が推定されたとしても安全性に影響を与えないので、標準モデルにおいてGuaranteed Output Delivery (GOD)が実現されている。
【0090】
[秘密計算(加算など)]
秘密計算ステップ(ステップS4)では、加算や定数乗算など、乗算以外の秘密計算をすることも可能である。ここでは、これら乗算以外の秘密計算について説明する。
【0091】
(定数加算)
定数c∈Znを各参加者Piが共有している状況を仮定する。このとき、定数加算[x]+c=[x+c]は、[x]iとcを用いて、[x+c]i=(x’i, x’i+1, x’i+2, x’i+3)を計算すればよい。ここでx’i= x0+x mod n (i=0)、x’i= xi (i≠0)である。
【0092】
(定数乗算)
定数c∈Znを各参加者Piが共有している状況を仮定する。このとき、定数乗算[x]・c=[x・c]は、[x]iとcを用いて、[x・c]i=(x’i, x’i+1, x’i+2, x’i+3)を計算すればよい。ここでx’i= c・xi mod nである。
【0093】
(シェア同士の加算)
シェア同士の加算[x]+[y]=[z]は、[z]i=(zi, zi+1, zi+2, zi+3)を計算すればよい。ここでzi= xi + yi mod nである。
【0094】
(内積)
シェアのベクトルの内積は、シェア同士の乗算の単純な拡張であるが、localな乗算が発生しないので、zkを送信する際に、単にまとめて送るだけでよい。
【数8】
【0095】
[復元]
復元ステップ(ステップS5)では、秘密計算ステップ(ステップS4)の結果のシェアを復元するステップである。復元ステップ(ステップS5)は、実質的に第一実施形態での処理と同じであるが、ここではハッシュ関数と組み合わせた処理を説明する。以下で説明する復元ステップ(ステップS5)の処理は、例えば、図5に示すように、秘密計算サーバ装置200_iが比較検証部201_iを備え、比較検証部201_iが正しい値を採用することによって、標準モデルにおけるGuaranteed Output Delivery (GOD)を実現する。なお、比較検証部201_iは、後に説明するハードウェア構成において実行されるプログラムとして実現することも可能である。
【0096】
参加者Piが、xを復元する場合に、自己が保持していないシェアの値xi+4を他の参加者Pi+1, Pi+2, Pi+3から受信する状況を考える。参加者Pi+1, Pi+2は、値xi+4をそのまま参加者Piへ送信し、参加者Pi+3は、値xi+4のハッシュ値hi+4を参加者Piへ送信する。そして、参加者Piは、参加者Pi+1, Pi+2から受信したxi+4のハッシュ値をhi+1、Pi+2から受信したxi+4のハッシュ値をhi+2として計算する。
【0097】
このとき、hi+1 = hi+2またはhi+1 = hi+3であれば、参加者Pi+1から受信したxi+4を正しい値として採用する。また、hi+2 = hi+3であれば、参加者Pi+2から受信したxi+4を正しい値として採用する。このように、少なくとも2つ以上が同一である受信値を正しい値として採用すれば、どれか1つが偽りの値であっても、正しい値を判別することができる。その後、正しい値xi+4を用いてx = x0 + x1 + x2 + x3 + x4 mod nを計算すれば、xを復元することが可能である。
【0098】
以上のような復元方法では、少なくとも3人の他の参加者Pjから同一となるはずのxi+4(のハッシュ値)を受信し、少なくとも2つ以上が同一である受信値を正しい値として採用することで、他の参加者Pjの中に不正者が紛れたとしても正しい値を判別している。すなわち、不正者が紛れたとしても処理を停止することなく、正しい計算を得ることができるGuaranteed Output Delivery (GOD)が実現されている。また、上記処理では、ハッシュ関数を用いているが、出力から入力が推定されたとしても安全性に影響を与えないので、標準モデルにおいてGuaranteed Output Delivery (GOD)が実現されている。
【0099】
以上、図4に示される典型的な秘密計算の各ステップについて説明してきたが、上記したようにすべてのステップにわたって、たとえ不正者が紛れたとしても処理を停止することなく、正しい計算を得ることができるGuaranteed Output Delivery (GOD)が実現されている。
【0100】
[ハードウェア構成例]
図6は、秘密計算サーバ装置のハードウェア構成例を示す図である。すなわち、図6に示すハードウェア構成例は、秘密計算サーバ装置100_i,200_i(i=0,1,2,3,4)のハードウェア構成例である。図6に示すハードウェア構成を採用した情報処理装置(コンピュータ)は、上記説明した秘密計算方法をプログラムとして実行することで、秘密計算サーバ装置100_i,200_i(i=0,1,2,3,4)の各機能を実現することを可能にする。
【0101】
ただし、図6に示すハードウェア構成例は、秘密計算サーバ装置100_i,200_i(i=0,1,2,3,4)の各機能を実現するハードウェア構成の一例であり、秘密計算サーバ装置100_i,200_i(i=0,1,2,3,4)のハードウェア構成を限定する趣旨ではない。秘密計算サーバ装置100_i,200_i(i=0,1,2,3,4)は、図6に示さないハードウェアを含むことができる。
【0102】
図6に示すように、秘密計算サーバ装置100_i,200_i(i=0,1,2,3,4)が採用し得るハードウェア構成10は、例えば内部バスにより相互に接続される、CPU(Central Processing Unit)11、主記憶装置12、補助記憶装置13、およびIF(Interface)部14を備える。
【0103】
CPU11は、秘密計算サーバ装置100_i,200_i(i=0,1,2,3,4)が実行する秘密計算プログラムに含まれる各指令を実行する。主記憶装置12は、例えばRAM(Random Access Memory)であり、秘密計算サーバ装置100_i,200_i(i=0,1,2,3,4)が実行する秘密計算プログラムなどの各種プログラムなどをCPU11が処理するために一時記憶する。
【0104】
補助記憶装置13は、例えば、HDD(Hard Disk Drive)であり、秘密計算サーバ装置100_i,200_i(i=0,1,2,3,4)が実行する秘密計算プログラムなどの各種プログラムなどを中長期的に記憶しておくことが可能である。秘密計算プログラムなどの各種プログラムは、非一時的なコンピュータ可読記録媒体(non-transitory computer-readable storage medium)に記録されたプログラム製品として提供することができる。補助記憶装置13は、非一時的なコンピュータ可読記録媒体に記録された秘密計算プログラムなどの各種プログラムを中長期的に記憶することに利用することが可能である。IF部14は、秘密計算サーバ装置100_i,200_i(i=0,1,2,3,4)間の入出力に関するインターフェイスを提供する。
【0105】
上記のようなハードウェア構成10を採用した情報処理装置は、先述した秘密計算方法をプログラムとして実行することで、秘密計算サーバ装置100_i,200_i(i=0,1,2,3,4)の各機能を実現する。
【0106】
上記の実施形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限られない。
[付記1]
相互にネットワークで接続した少なくとも5台以上の秘密計算サーバ装置を備え、秘密分散して保持されている値の秘密計算をする秘密計算システムであって、
前記秘密計算サーバ装置のそれぞれが、
少なくとも3台以上の秘密計算サーバ装置から受信した同一の値となるはずの受信値を比較し、少なくとも2つ以上が同一である受信値を正しい値として採用する比較検証部を、
有する秘密計算システム。
[付記2]
前記秘密計算サーバ装置のそれぞれが、
シードと識別子を入力として決定的に疑似乱数を生成し、前記疑似乱数を用いて、第1のインデックスに関する総和はゼロであり、第2のインデックスに関する総和はゼロではないマスクの組を作成する疑似ランダム関数計算部をさらに備え、
前記受信値は、前記マスクによって秘匿された状態で送信される、付記1に記載の秘密計算システム。
[付記3]
前記秘密計算サーバ装置のそれぞれに秘密分散された2つのシェア値の乗算を秘密計算する際に、前記乗算のシェア値として、前記第2のインデックスに関する総和を付加項として有し、前記乗算の結果を復元する際に、前記第1のインデックスに関する総和がゼロであることを用いて前記マスクを除去する、付記2に記載の秘密計算システム。
[付記4]
前記比較検証部は、前記受信値のハッシュ値が同一であることを判断して、前記受信値が正しい値であることを判断する、付記1から付記3のいずれか1つに記載の秘密計算システム。
[付記5]
秘密分散して保持されている値の秘密計算をするために相互にネットワークで接続した少なくとも5台以上の秘密計算サーバ装置の一つであって、
少なくとも3台以上の秘密計算サーバ装置から受信した同一の値となるはずの受信値を比較し、少なくとも2つ以上が同一である受信値を正しい値として採用する比較検証部を、
有する秘密計算サーバ装置。
[付記6]
相互にネットワークで接続した少なくとも5台以上の秘密計算サーバ装置を備え、秘密分散して保持されている値の秘密計算をする秘密計算方法であって、
前記秘密計算サーバ装置のそれぞれが、
少なくとも3台以上の秘密計算サーバ装置から受信した同一の値となるはずの受信値を比較し、少なくとも2つ以上が同一である受信値を正しい値として採用する秘密計算方法。
[付記7]
シードと識別子を入力として決定的に疑似乱数を生成し、前記疑似乱数を用いて、第1のインデックスに関する総和はゼロであり、第2のインデックスに関する総和はゼロではないマスクの組を作成し、
前記受信値は、前記マスクによって秘匿された状態で送信される、付記6に記載の秘密計算方法。
[付記8]
前記秘密計算サーバ装置のそれぞれに秘密分散された2つのシェア値の乗算を秘密計算する際に、前記乗算のシェア値として、前記第2のインデックスに関する総和を付加項として有し、前記乗算の結果を復元する際に、前記第1のインデックスに関する総和がゼロであることを用いて前記マスクを除去する、付記7に記載の秘密計算方法。
[付記9]
前記受信値のハッシュ値が同一であることを判断して、前記受信値が正しい値であることを判断する、付記6から付記8のいずれか1つに記載の秘密計算方法。
[付記10]
相互にネットワークで接続した少なくとも5台以上の秘密計算サーバ装置に、秘密分散して保持されている値の秘密計算をさせる秘密計算プログラムであって、
少なくとも3台以上の秘密計算サーバ装置から受信した同一の値となるはずの受信値を比較し、少なくとも2つ以上が同一である受信値を正しい値として採用する処理を有する秘密計算プログラム。
【0107】
なお、引用した上記の特許文献等の各開示は、本書に引用をもって繰り込むものとする。本発明の全開示(請求の範囲を含む)の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の全開示の枠内において種々の開示要素(各請求項の各要素、各実施形態ないし実施例の各要素、各図面の各要素等を含む)の多様な組み合わせ、ないし、選択(部分的削除を含む)が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。さらに、上記引用した文献の各開示事項は、必要に応じ、本発明の趣旨に則り、本発明の開示の一部として、その一部又は全部を、本書の記載事項と組み合わせて用いることも、本願の開示事項に含まれるものと、みなされる。
【符号の説明】
【0108】
100,200 秘密計算システム
100_i,200_i 秘密計算サーバ装置
101_i,201_i 比較検証部
202_i 疑似ランダム関数計算部
10 ハードウェア構成
11 CPU(Central Processing Unit)
12 主記憶装置
13 補助記憶装置
14 IF(Interface)部
図1
図2
図3
図4
図5
図6