特許第6973868号(P6973868)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

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

▶ 日本電気株式会社の特許一覧 ▶ バー イラン ユニバーシティーの特許一覧

<>
  • 特許6973868-秘密計算方法、装置、およびプログラム 図000006
  • 特許6973868-秘密計算方法、装置、およびプログラム 図000007
  • 特許6973868-秘密計算方法、装置、およびプログラム 図000008
  • 特許6973868-秘密計算方法、装置、およびプログラム 図000009
  • 特許6973868-秘密計算方法、装置、およびプログラム 図000010
  • 特許6973868-秘密計算方法、装置、およびプログラム 図000011
  • 特許6973868-秘密計算方法、装置、およびプログラム 図000012
  • 特許6973868-秘密計算方法、装置、およびプログラム 図000013
  • 特許6973868-秘密計算方法、装置、およびプログラム 図000014
  • 特許6973868-秘密計算方法、装置、およびプログラム 図000015
  • 特許6973868-秘密計算方法、装置、およびプログラム 図000016
  • 特許6973868-秘密計算方法、装置、およびプログラム 図000017
  • 特許6973868-秘密計算方法、装置、およびプログラム 図000018
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6973868
(24)【登録日】2021年11月8日
(45)【発行日】2021年12月1日
(54)【発明の名称】秘密計算方法、装置、およびプログラム
(51)【国際特許分類】
   G09C 1/00 20060101AFI20211118BHJP
【FI】
   G09C1/00 650Z
【請求項の数】15
【全頁数】22
(21)【出願番号】特願2019-563914(P2019-563914)
(86)(22)【出願日】2017年5月18日
(65)【公表番号】特表2020-519969(P2020-519969A)
(43)【公表日】2020年7月2日
(86)【国際出願番号】JP2017018747
(87)【国際公開番号】WO2018211676
(87)【国際公開日】20181122
【審査請求日】2019年11月15日
(73)【特許権者】
【識別番号】000004237
【氏名又は名称】日本電気株式会社
(73)【特許権者】
【識別番号】591150007
【氏名又は名称】バー イラン ユニバーシティー
(74)【代理人】
【識別番号】100080816
【弁理士】
【氏名又は名称】加藤 朝道
(74)【代理人】
【識別番号】100098648
【弁理士】
【氏名又は名称】内田 潔人
(72)【発明者】
【氏名】荒木 俊則
(72)【発明者】
【氏名】大原 一真
(72)【発明者】
【氏名】古川 潤
(72)【発明者】
【氏名】ヤフダ、 リンデル
(72)【発明者】
【氏名】アリエル、 ノフ
【審査官】 行田 悦資
(56)【参考文献】
【文献】 特開2000−228060(JP,A)
【文献】 特開2013−142927(JP,A)
【文献】 FURUKAWA, J. et al,High-Throughput Secure Three-Party Computation for Malicious Adversaries and an Honest Majority,2017年12月13日,pp.1-35,[online],[令和3年1月15日検索],インターネット<URL:https://eprint.iacr.org/2016/944>
(58)【調査した分野】(Int.Cl.,DB名)
G09C 1/00
(57)【特許請求の範囲】
【請求項1】
複数のパーティを構成する複数のコンピュータ装置の各々が、各々の入力を他のパーティのコンピュータ装置に明かすことなく、所定の関数をそれぞれ計算するマルチパーティ計算方法であって、
前記複数のパーティを構成する前記複数のコンピュータ装置の各々が、前記関数の計算が正しく実行されたことを確認する確認ステップを含み、
前記確認ステップは、
複数の検証済みの乗算三つ組(multiplication triple)を用意しておき、要求されると、少なくとも1つの乗算三つ組を第2のステップに供給する第1のステップと、
前記第1のステップで生成されランダムに選択された乗算三つ組を消費する前記第2のステップと、
を含み、
前記第1のステップにおいて
各パーティの前記コンピュータ装置は、
生成した複数の乗算三つ組のうち所定個の乗算三つ組について検証を行い、残りを複数のベクトルに分割し、
前記複数のベクトルの各々を等しいサイズの複数の部分配列に分割し、
各部分配列に含まれる前記乗算三つ組の順序を共同でランダムに並び替え、さらに、
前記複数の部分配列の順序を共同で並び替え、
過半数のパーティの前記コンピュータ装置において、前記部分配列に含まれる最初の所定個の乗算三つ組を開き乗算が成り立つか検証する、ことを特徴とするマルチパーティ計算方法。
【請求項2】
複数のパーティを構成する複数のコンピュータ装置の各々が、各々の入力を他のパーティのコンピュータ装置に明かすことなく、所定の関数をそれぞれ計算するマルチパーティ計算方法であって、
前記複数のパーティを構成する前記複数のコンピュータ装置の各々が、前記関数の計算が正しく実行されたことを確認する確認ステップを含み、
前記確認ステップは、
複数の確認済みの乗算三つ組(multiplication triple)を用意しておき、要求されると、少なくとも1つの乗算三つ組を第2のステップに供給する第1のステップと、
前記第1のステップで生成されランダムに選択された乗算三つ組を消費する前記第2のステップと、
を含み、
前記第1のステップにおいて
各パーティの前記コンピュータ装置は、
複数個(N個)の乗算三つ組で第1及び第2のバッファを満たし、
前記第1及び第2のバッファを所定サイズの複数の部分配列に分割し、
前記第1のバッファからランダムに選択された前記部分配列の乗算三つ組に基づき、乗算の計算が正しく実行されたことの検証を行い、
前記第1のバッファの前記部分配列ランダムに選択され検証に用いられた後、前記第2のバッファから補充される、ことを特徴とするマルチパーティ計算方法。
【請求項3】
前記第1のステップにおいて各パーティの前記コンピュータ装置は、
複数個(N個)の乗算三つ組で第1及び第2のバッファを満たし、
前記第1及び第2のバッファを所定サイズの複数の部分配列に分割し、
前記第1のバッファからランダムに選択された前記部分配列の乗算三つ組に基づき、乗算の計算が正しく実行されたことの検証を行い、
前記第1のバッファの前記部分配列ランダムに選択され検証に用いられた後、前記第2のバッファから補充される、ことを特徴とする請求項1に記載のマルチパーティ計算方法。
【請求項4】
ランダムに選択されシャッフルされた要素が検証に用いられた直後、前記第1のバッファの前記部分配列は、前記第2のバッファから補充され、前記乗算三つ組(triple)が選択される前記第1のバッファのサイズを同じに保つ、ことを特徴とする請求項2又は3に記載のマルチパーティ計算方法。
【請求項5】
前記第2のバッファ内の乗算三つ組は、予め設定されたサイズのチャンクによって消費され補充される、ことを特徴とする請求項2乃至のいずれか一項に記載の方法。
【請求項6】
前記第1のステップは、複数の乗算三つ組を用いて1つの乗算三つ組を検証する、ことを特徴とする請求項2乃至のいずれか一項に記載の方法。
【請求項7】
メモリを有し、所定の関数のマルチパーティ計算が正しく実行されていることを確認するための回路確認プロセス(circuit validation process)を実行するプロセッサを含み、
前記回路確認プロセスは、
複数の確認済みの乗算三つ組(multiplication triple)を用意しておき、要求されると、少なくとも1つの乗算三つ組を第2の処理に供給する第1の処理と、
前記第1の処理で生成され、ランダムに選択された乗算三つ組を消費する前記第2の処理と、
を含み、
前記第1の処理では、前記生成された乗算三つ組のシャッフルを、1つの列内でのシャッフルと、列のシャッフルと、のうち少なくとも一つにて行
前記第1の処理において各パーティの前記プロセッサは、
生成した複数の乗算三つ組のうち所定個の乗算三つ組について検証を行い、残りを複数のベクトルに分割し、
前記複数のベクトルの各々を等しいサイズの複数の部分配列に分割し、
各部分配列に含まれる前記乗算三つ組の順序を共同でランダムに並び替え、さらに、前記複数の部分配列の順序を共同で並び替え、
過半数のパーティの前記プロセッサにおいて、前記部分配列に含まれる最初の所定個の乗算三つ組を開き乗算が成り立つか検証する、ことを特徴とするマルチパーティ計算装置。
【請求項8】
メモリを有し、所定の関数のマルチパーティ計算が正しく実行されていることを確認するための回路確認プロセス(circuit validation process)を実行するプロセッサを含み、
前記回路確認プロセスは、
複数の確認済みの乗算三つ組を用意し、要求されると、少なくとも1つの乗算三つ組(multiplication triple)を第2の処理に供給する第1の処理と、
前記第1の処理で生成され、ランダムに選択された乗算三つ組(multiplication triple)を消費する前記第2の処理と、
を含み、
前記第1の処理において各パーティの前記プロセッサは、
複数個(N個)の乗算三つ組で第1及び第2のバッファを満たし、
前記第1及び第2のバッファを所定サイズの複数の部分配列に分割し、
前記第1のバッファからランダムに選択された前記部分配列の乗算三つ組に基づき、乗算の計算が正しく実行されたことの検証を行い、
前記第1のバッファの前記部分配列ランダムに選択され検証に用いられた後、前記第2のバッファから補充される、ことを特徴とするマルチパーティ計算装置。
【請求項9】
前記第1の処理において各パーティの前記プロセッサは、
複数個(N個)の乗算三つ組で第1及び第2のバッファを満たし、
前記第1及び第2のバッファを所定サイズの複数の部分配列に分割し、
前記第1のバッファからランダムに選択された前記部分配列の乗算三つ組に基づき、乗算の計算が正しく実行されたことの検証を行い、
前記第1のバッファの前記部分配列ランダムに選択され検証に用いられた後、前記第2のバッファから補充される、ことを特徴とする請求項に記載のマルチパーティ計算装置。
【請求項10】
前記第2の処理は、前記関数に相当する回路のゲートの三つ組(triple)が生成された後、前記第1のバッファに格納された前記乗算三つ組をランダムに選択する、ことを特徴とする請求項又はに記載のマルチパーティ計算装置。
【請求項11】
前記第2の処理は、ランダムに選択されシャッフルされた要素が検証に用いられた直後、前記第1のバッファの前記部分配列は、前記第2のバッファから補充され、前記乗算三つ組(triple)が選択される前記第1のバッファのサイズを同じに保つ、ことを特徴とする請求項乃至1のいずれか一項に記載のマルチパーティ計算装置。
【請求項12】
前記第2の処理は、前記第2のバッファ内の前記乗算の三つ組(triple)を、予め設定されたサイズのチャンクによって消費し補充する、ことを特徴とする請求項乃至1のいずれか一項に記載のマルチパーティ計算装置。
【請求項13】
前記第1の処理は、複数の乗算三つ組を用いて1つの乗算三つ組を検証する、ことを特徴とする請求項乃至1のいずれか一項に記載のマルチパーティ計算装置。
【請求項14】
所定の関数のマルチパーティ計算が正しく実行されていることを確認する回路確認プロセスをコンピュータに実行させるプログラムであって、
前記回路確認プロセスは、
複数の確認済みの乗算三つ組(multiplication triple)を用意し、要求されると少なくとも1つの乗算三つ組を第2の処理に供給する第1の処理と、
前記第1の処理で生成され、ランダムに選択された乗算三つ組を消費する前記第2の処理と、
を含み、
前記第1の処理において各パーティの前記コンピュータは、
生成した複数の乗算三つ組のうち所定個の乗算三つ組について検証を行い、残りを複数のベクトルに分割し、
前記複数のベクトルの各々を等しいサイズの複数の部分配列に分割し、
各部分配列に含まれる前記乗算三つ組の順序を共同でランダムに並び替え、さらに、前記複数の部分配列の順序を共同で並び替え、
過半数のパーティの前記コンピュータにおいて、前記部分配列に含まれる最初の所定個の乗算三つ組を開き乗算が成り立つか検証する、ことを特徴とするプログラム。
【請求項15】
所定の関数のマルチパーティ計算が正しく実行されていることを確認する回路確認プロセスをコンピュータに実行させるプログラムであって、
前記回路確認プロセスは、
複数の確認済みの乗算三つ組(multiplication triple)を用意し、要求されると、少なくとも1つの乗算三つ組を第2の処理に供給する第1の処理と、
前記第1の処理で生成され、ランダムに選択された乗算三つ組(multiplication triple)を消費する前記第2の処理と、
を含み、
前記第1の処理において各パーティの前記コンピュータは、
複数個(N個)の乗算三つ組で第1及び第2のバッファを満たし、
前記第1及び第2のバッファを所定サイズの複数の部分配列に分割し、
前記第1のバッファからランダムに選択された前記部分配列の乗算三つ組に基づき、乗算の計算が正しく実行されたことの検証を行い、
前記第1のバッファの前記部分配列ランダムに選択され検証に用いられた後、前記第2のバッファから補充される、ことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は秘密計算(multiparty computation;MPC)方法、装置、およびプログラムに関する。
【背景技術】
【0002】
MPCでは、プライベートデータをそれぞれ持つ所定の数のパーティは、各々がその入力を他者へ明かすことなく入力としてプライベートデータの関数を計算することができる。
【先行技術文献】
【非特許文献】
【0003】
【非特許文献1】Tal Rabin, Michael Ben-Or, "Verifiable Secret Sharing and Multiparty Protocols with Honest Majority", (Extended Abstract). STOC 1989: 73-85.
【非特許文献2】Oded Goldreich, Ronen Vainish, "How to Solve any Protocol Problem - An Efficiency Improvement", CRYPTO 1987: 73-86.
【非特許文献3】Ivan Damgaard, Valerio Pastro, Nigel P. Smart, Sarah Zakarias, "Multiparty Computation from Somewhat Homomorphic Encryption", CRYPTO 2012: 643-662.
【非特許文献4】Toshinori Araki, Jun Furukawa, Yehuda Lindell, Ariel Nof and Kazuma Ohara, "High-Throughput Semi-Honest Secure Three-Party Computation with an Honest Majority", CCS ‘16 Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security, Pages 805-817.
【非特許文献5】Jun Furukawa, Yehuda Lindell, Ariel Nof and Or Weinstein, "High-Throughput Secure Three-Party Computation for Malicious Adversaries and an Honest Majority", Advances in Cryptology - EUROCRYPT 2017. EUROCRYPT 2017. Lecture Notes in Computer Science, vol.10211. Springer, Cham
【発明の概要】
【発明が解決しようとする課題】
【0004】
非特許文献1や非特許文献2などの関連技術は、すべてのパーティが関連するプロトコルに従う場合にのみ安全であり、正直に(honestly)当該プロトコルに従わないパーティに対しては安全ではない。すなわち、すべてのパーティは、プロトコルに正直に従う限り、他のパーティから受信したデータから何も学習しない。そのようなプロトコルは、セミオネスト(semi-honest)な秘匿性を実現すると言われている。
【0005】
非特許文献3に開示されている関連技術は、プロトコルを正直に従わないパーティに対して安全だが、重い事前計算が必要になる。
【0006】
従って、本発明の目的は、多くの事前計算を必要とせず、悪意を持つ攻撃者に対して安全な秘密計算方法、装置、方法、プログラムを提供することにある。
【課題を解決するための手段】
【0007】
本発明の1つの側面によれば、複数のパーティの各々が、各々の入力を他のパーティに明かすことなく、予め設定された関数をそれぞれ計算する秘密計算のための方法であり、
前記複数のパーティの各々が前記関数の計算が正しく実行されたことを検証する検証ステップを含み、
前記検証ステップは、
複数の検証済みの乗算三つ組(multiplication triple)を用意し、要求があれば、少なくとも1つの乗算三つ組(multiplication triple)を第2のステップに供給する第1のステップと、
前記第1のステップで生成されランダムに選択された乗算三つ組(multiplication triple)を消費する前記第2のステップと、
を含み、
前記第1のステップは、前記生成された乗算三つ組(multiplication triple)のシャッフルを、1つの列内でのシャッフルと列のシャッフルとのうち少なくとも1つで行う、方法が提供される。
【0008】
本発明の他の側面によれば、複数のパーティの各々が、各々の入力を他のパーティに明かすことなく、予め設定された関数をそれぞれ計算する秘密計算のための方法であり、
前記複数のパーティの各々が前記関数の計算が正しく実行されたことを検証する検証ステップを含み、
前記検証ステップは、
複数の検証済みの乗算三つ組(multiplication triple)を用意し、要求されると少なくとも1つの乗算三つ組(multiplication triple)を第2のステップに供給する第1のステップと、
前記第1のステップで生成され、ランダムに選択された 乗算三つ組(multiplication triple)を消費する前記第2のステップと、
を含み、
前記第1のステップは、要求があれば、全体の中からランダムに選択された乗算三つ組(multiplication triple)を提供する第1のバッファを用い、前記第1のバッファは、第2のバッファから順次補充される方法が提供される。
【0009】
本発明の1つの側面によれば、メモリを有し、予め設定された関数の秘密計算が正しく実行されていることを検証する回路検証プロセスを実行するプロセッサを含み、
前記回路検証プロセスは、複数の検証済みの乗算三つ組(multiplication triple)を用意し、要求されると、少なくとも1つの乗算三つ組(multiplication triple)を第2の処理に供給する第1の処理と、
前記第1の処理で生成されランダムに選択された乗算三つ組(multiplication triple)を消費する前記第2の処理と、
を含み、前記第1の処理では、1つの列内でのシャッフルと列のシャッフルとのうち少なくとも1つで、前記生成された乗算三つ組(multiplication triple)のシャッフルを行う秘密計算装置が提供される。
【0010】
本発明の他の側面によれば、メモリを有し、予め設定された関数の秘密計算が正しく実行されていることを検証するための回路検証プロセスを実行するプロセッサを含み、前記回路検証プロセスは、複数の検証済みの乗算三つ組(multiplication triple)を用意し、要求されると、少なくとも1つの乗算三つ組(multiplication triple)を第2の処理に供給する第1の処理と、
前記第1の処理で生成され、ランダムに選択された乗算三つ組(multiplication triple)を消費する前記第2の処理と、
を含み、前記第1の処理は、要求されると、全体の中からランダムに選択された乗算三つ組(multiplication triple)を提供する第1のバッファを含み、
前記第1のバッファは第2のバッファから順次補充される秘密計算装置が提供される。
【0011】
本発明の1つの側面によれば、予め設定された関数の秘密計算が正しく実行されていることを検証する回路検証プロセスをコンピュータに実行させるプログラムであり、前記回路検証プロセスは、複数の検証済みの乗算三つ組(multiplication triple)を用意し、要求されると、少なくとも1つの乗算三つ組(multiplication triple)を第2の処理に供給する第1の処理と、前記第1の処理で生成されランダムに選択された乗算三つ組(multiplication triple)を消費する前記第2の処理と、
を含み、前記第1の処理では、1つの列内でのシャッフルと列のシャッフルとのうち少なくとも1つで、前記生成された乗算三つ組(multiplication triple)のシャッフルを行うプログラムが提供される。
【0012】
本発明の他の側面によれば、予め設定された関数の秘密計算が正しく実行されていることを検証する回路検証プロセスをコンピュータに実行させるプログラムであり、前記回路検証プロセスは、複数の検証済みの乗算三つ組(multiplication triple)を用意し、要求されると少なくとも1つの乗算三つ組(multiplication triple)を第2の処理に供給する第1の処理と、前記第1の処理で生成されランダムに選択された乗算三つ組(multiplication triple)を消費する前記第2の処理とを含み、前記第1の処理は、要求されると全体の中からランダムに選択された乗算三つ組(multiplication triple)を提供する第1のバッファを用い、前記第1のバッファは第2のバッファから順次補充されるプログラムが提供される。
【0013】
本発明の他の側面によれば、RAM(Random Access Memory)、ROM(Read Only Memory)、EEPROM(Electrically Erasable Programmable Read-Only Memory)、USB(Universal Serial Bus)デバイス、SSD(Solid State Device)などの半導体メモリ、又は例えばHDD(Hard Disk Drive)、CD(Compact Disc)又はDVD(Digital Versatile Disc)などの記憶装置などのような、上記のプログラムを記録した、非一時的なコンピュータ読み出し可能な記録媒体が提供される。
【発明の効果】
【0014】
本発明によれば、悪意を持つ攻撃者に対して安全な秘密計算が、事前計算を必要とせず可能となる。
本発明のさらに他の特徴及び利点は、本発明を実施することが企図されている最良の形態の単なる例示により、本発明の実施形態のみを図示及び説明した添付の図面と併せて以下の詳細な説明から当業者には容易に明らかになるであろう。理解されるように、本発明は、他の異なる実施形態が可能であり、そのいくつかの詳細は、本発明から逸脱することなく、様々な明白な点において変更可能である。したがって、図面及び説明は、本質的に例示的であるとみなされるべきであり、限定的ではないとみなされるべきである。
【図面の簡単な説明】
【0015】
図1A】(2,3)秘密分散方式を説明する図である。
図1B】(2,3)秘密分散方式を説明する図である。
図2】本発明の第1の実施形態の動作を示すフローチャートである。
図3】本発明の第1の実施形態の構成を示す図である。
図4】本発明の第1の実施形態における三つ組(triple)生成の動作を示すフローチャートである。
図5】本発明の第1の実施形態における三つ組(triple)を生成するためのメモリ構成を模式的に示す図である。
図6】本発明の第1の実施形態における三つ組(triple)を生成するためのメモリ構成を模式的に示す図である。
図7】本発明の第1の実施形態における三つ組(triple)を生成するためのメモリ構成を模式的に示す図である。
図8】本発明の第1の実施形態における回路計算の動作を示すフローチャートである。
図9】本発明の第1の実施形態における回路計算を模式的に示す図である。
図10】本発明の第1の実施形態における回路検証の動作を示すフローチャートである。
図11】本発明の第1の実施形態における回路検証のためのバッファ構成を模式的に示す図である。
図12】本発明の第2の実施形態の構成を示す図である。
【発明を実施するための形態】
【0016】
例示的な実施形態を図面を参照して説明する。以下、本発明の実施形態の基本について概説する。秘密計算(MPC)のプロトコルは、攻撃者に対する閾値の要件を持つ。例えば、パーティの数がnで、攻撃者によって汚染されたパーティの数をtとした場合、MPCプロトコルは、t < n = 3、または、t < n = 2を必要とする。nを、MPCプロトコルに参加するパーティの数とし、P(1)、..、P(n)を、これらn個のパーティそれぞれを表すとする。
【0017】
Rを、加算と乗算とが定義されている環(ring)とする。環は、2^nを法とする環(^は2のべき乗の演算子)または任意の有限体でもよい。3^(-1)が存在する任意の有限体と環では、すべてが成り立つ。
【0018】
SecretShare()を、Rの要素が与えられると、シェア(share)と呼ばれるx(1),...,x(n)を出力する(t、n)-秘密分散方式の関数とする。
【0019】
これらのシェアは、以下を満たす。
(i)n個のシェアのうち、任意のt個のシェアの組が入力されると、xを出力する関数Reconstruct()が存在し、
(ii)任意のt-1個のシェアの組からは、xの任意の部分を復元することが、計算上実行不可能である。
【0020】
i(= 1、...、n)の各々について、P(i)がx(i)を持つ場合、xは秘密分散(secretly shared)されていると言う。これを[x]と表す。すなわち、値xがP(1)〜P(n)などの複数のパーティ間において秘密分散されていることを示すために、[x]という表記を用いる。
【0021】
<(2,3)-秘密分散方式>
以下に(2,3)−秘密分散の例を説明する。要素v mod 2 ^ nを分散するため、ディーラーは、次の条件の下、3つのランダムな要素r(1)、r(2)、r(3)を選ぶ。
r(1)+ r(2)+ r(3) = 0
【0022】
P(1)のシェアは、x(1)=(r(1), t(1))になり(ただし、t(1)= r(3)-v)、
P(2)のシェアは、x(2)=(r(2), t(2))になり(ただし、t(2)= r(1)-v)、
P(3)のシェアは、x(3)=(r(3), t(3))になる(ただし、t(3)= r(2)-v)。
単一のパーティのシェアは秘密(secret)vについて何も明らかにしないことは明白である。
【0023】
関数Reconstruct()に関して、例えば、x(1)=(r(1), t(1))およびx(2)=(r(2), t(2))が与えられた場合、1つのパーティ(例えばP(1))は、v = r(1)-t(2)= r(1)-(r(1)-v)を計算することができる。
【0024】
同様に、P(2)は、x(2)とx(3)の組からvを計算できる(すなわち、v = r(2)-(r(2)-v)。そしてP(3)は、x(3)およびx(1)の組からvを計算できる(すなわち、v = r(3)-(r(3)-v)。上記秘密分散方式に従って値vの3つのうち2つの分散を[v]で表記する 。なお、秘密vは、1つのビットでもよく、r(1)、r(2)、r(3)は、
の条件の下、
となる3つのランダムビットになり、ここで、円に「+」はビット毎の排他的論理和を示す。この場合、
(非特許文献4を参照)。
【0025】
vを復元するのに必要なデータのすべてが、パーティのシェアとして分散されており、すべてのデータがこれらのパーティのいずれかに収集され、各パーティが、Reconstruct()を用いてvを復元できる場合、パーティの組が[v]を開く(open)と言い、サブプロシージャ:「open([v])」は以下のように定義できる。
秘密値vのシェアが{(r(1), t(i))}(i = 1、...、3)で表記される場合、各パーティP(i)は、t(i)をP(i + 1)に送信し、P(4)はP(1)に送信し、各P(i)は、v = r(i)-t(i-1)(すなわち、
)を出力する(ただし、t(0)はt(3))。
【0026】
[x]と[y]が与えられるとき、n個のパーティP(1),...,P(n)は、MPCによって、互い通信せずに、セミオネストな秘匿性(semi-honest secrecy)で、[z] = [x + y] を計算可能とされる。この手順は、[z] = [x] + [y]で表される。
【0027】
以下、MPCの加算の例を説明する。xとyが(2,3)-秘密分散方式によって秘密分散されているとする。より具体的には、
P(1)のxのシェアは、(x(11), x(12))であり(ただし、x(12)=x(31)-x)、
P(2)のxのシェアは、(x(21), x(22))であり(ただし、x(22)=x(11)-x)、
P(3)のxのシェアは、(x(31), x(32))である(ただし、x(32)=x(21)-x)。
【0028】
P(1)のyのシェアは、(y(11), y(12))であり(ただし、y(12)=y(31)-y)、
P(2)のyのシェアは、(y(21), y(22))であり(ただし、y(22)=y(11)-y)、
P(3)のyのシェアは、(y(31), y(32))である(ただし、y(32)=x(21)-y)。
【0029】
すると、
P(1)のx + yのシェアは、(x(11)+y(11), x(12)+y(12))、
P(2)のx + yのシェアは、(x(21)+y(21), x(22)+y(22))、
P(3)のx + yのシェアは、(x(31)+y(31), x(32)+y(32))
となる。
【0030】
x + yは、(x(11)+y(11), x(12)+y(12))と、(x(21)+y(21), x(22)+y(22))の組から以下のとおり復元できる。
x+y = x(11)+y(11) - (x(22)+y(22))
= x(11)+y(11) - ( x(11)-x + y(11)-y)
【0031】
[x]とyが与えられ、yが各パーティに知られているとき、n個のパーティP(1)、...、P(n)は、MPCによって、互い通信せずにセミオネストな秘匿性で、[z]=[x+y]を計算可能とされる。この手順は、[z]=[x]+y または[z]=y+[x]で表される。
【0032】
以下、MPC加算の例を説明する。xが上記(2,3)-秘密分散方式によって秘密に分散され、yが各パーティに知られているとする。より具体的には、
P(1)のxのシェアは、(x(11), x(12))であり(ただし、x(12)=x(31)-x)、
P(2)のxのシェアは、(x(21), x(22))であり(ただし、x(22)=x(11)-x)、
P(3)のxのシェアは、(x(31), x(32))である(ただし、x(32)=x(21)-x)。
【0033】
すると、
P(1)のx + yのシェアは、(x(11), x(12)-y)、
P(2)のx + yのシェアは、(x(21), x(22)-y)、
P(3)のx + yのシェアは、(x(31), x(32)-y)となる。
x + yは、(x(11), x(12)-y)、及び(x(21),x(22)-y)の組から以下のとおり復元できる。
x+y = x(11) - (x(22) - y) = x(11) - ((x(11) - x) - y)
【0034】
[x]とyが与えられ、yが各パーティに知られているとき、P(1)、...、P(n)は、MPCによって、互い通信せずに、セミオネストな秘匿性で、[z]=[xy] を計算可能とされる。この手順は、[z]=[x]y または[z]=y[x]で表される。
【0035】
以下、このMPCの乗算の例を説明する。
xが上記(2,3)-秘密分散方式によって秘密に分散され、yが各パーティに知られているとする。より具体的には、
P(1)のxのシェアは(x(11), x(12))であり(x(12)=x(31)/x)、
P(2)のxのシェアは(x(21), x(22))であり(x(22)=x(11)/x)、
P(3)のxのシェアは(x(31), x(32))である(x(32)=x(21)/x)。
【0036】
すると、
P(1)のxyのシェアは、(x(11)y, x(12))、
P(2)のxyのシェアは、(x(21)y, x(22))、
P(3)のxyのシェアは、(x(31)y, x(32))である。
xyは、(x(11)y, x(12))、及び(x(21)y, x(22))の組から以下のとおり復元できる。
xy = (x(11)y)/x(22) = (x(11)y)/(x(11)/x)
【0037】
[x]と[y]が与えられるとき、P(1)、...、P(n)それぞれは、MPCを用い、若干の通信により、semi-honestな秘匿性で、[z] = [xy]を計算可能とされる。この手順は、[z]=[x]*[y]で表される。
【0038】
以下、MPCの乗算の例を説明する。xとyが上記(2,3)-秘密分散方式によって秘密分散されているとする。
より具体的には、
P(1)のxのシェアは、(x(11), x(12))であり、
P(2)のxのシェアは、(x(21), x(22))であり、
P(3)のxのシェアは、(x(31), x(32))であり、
P(1)のyのシェアは、(y(11), y(12))であり、
P(2)のyのシェアは、(y(21), y(22))であり、
P(3)のyのシェアは、(y(31), y(32))である。
【0039】
ランダムに選択され、r(1)+ r(2)+ r(3)= 0を満たす、r(1)、r(2)、r(3)の組が存在するとする。また、P(1)がr(1)を持ち、P(2)がr(2)を持ち、P(3)はr(3)を持つものとする。
P(1)は、t(1) = (-x(11)y(11) + x(12)y(12) + r(1))/3 を計算し、t(1)をP(2)に送信する。
P(2)は、t(2) = (-x(21)y(21) + x(22)y(22) + r(2))/3 を計算し、t(2)をP(3)に送信する。
P(3)は、t(3) = (-x(31)y(31) + x(32)y(32) + r(3))/3 を計算し、t(3)をP(1)に送信する。
【0040】
P(1)のxyのシェアは、(z1 = t(3)-t(1), c1=-2t(3)-t(1))であり、
P(2)のxyのシェアは、(z2 = t(1)-t(2), c2=-2t(1)-t(2))であり、
P(3)のxyのシェアは、(z3 = t(2)-t(3), c3=-2t(2)-t(3))である。
【0041】
x(12)y(12) = (x(31) - x)(y(31) - y) = x(31)y(31) - x(31)y - y(31)x + xy
x(22)y(22) = (x(11) - x)(y(11) - y) = x(11)y(11) - x(11)y - y(11)x + xy
x(32)y(32) = (x(21) - x)(y(21) - y) = x(21)y(21) - x(21)y - y(21)x + xy
従って、
3(t(1)+t(2)+t(3)) = -x(11)y(11) + x(12)y(12) + r(1)
- x(21)y(21) + x(22)y(22) + r(2)
-x(31)y(31) + x(32)y(32) + r(3)
= x(12)y(12)+x(22)y(22)+x(32)y(32)-x(11)y(11)-x(21)y(21)-x(31)y(31)
= 3xy-x(y(11)+y(21)+y(31))-y(x(11)+x(21)+x(31))
= 3xy
【0042】
n個のパーティP(1)からP(n)が、それぞれ、Rのランダムな要素を、互いに通信せず他の誰にも開示せずに、必要なだけシェア(共有)できるものとする。
【0043】
以下、3つのパーティ間で共有されるランダム要素の例を説明する。複数の乱数種(random seeds)S(1)、S(2)、及びS(3)が既に以下のように共有されているものとする。
P(1)は、S(3)とS(1)とを持ち、
P(2)は、S(1)とS(2)とを持ち、
P(3)は、S(2)とS(3)とを持つ。
【0044】
HashR()をRの要素を出力する暗号学的ハッシュ関数とする。
P(1)は、i番目のランダム要素r(1i)のシェアを、HashR(S(3),i)-HashR(S(1),i)として生成する。
P(2)は、i番目のランダム要素r(2i)のシェアを、HashR(S(1),i)-HashR(S(2),i)として生成する。
P(3)は、i番目のランダム要素r(3i)のシェアを、HashR(S(2),i)-HashR(S(3),i)として生成する。
【0045】
図2は、本発明の実施形態による動作を例示するフローチャートである。図2は、例示的な実施形態による(2,3)秘密分散方式に基づいて秘密を分散する各パーティによって実行される回路検証(circuit validation)の動作を示す。
【0046】
図2を参照すると、各パーティによるステップS1(第1のプロセス)は、複数の検証された乗算三つ組(multiplication triple:乗算トリプル)を用意し、要求されると少なくとも1つの乗算三つ組をステップS2に供給する。
【0047】
各パーティによるステップS2(第2のプロセス)において、ステップS1で生成され、ランダムに選択された乗算三つ組を消費する。
【0048】
各パーティによるステップS1(第1のプロセス)において、生成された乗算三つ組のシャッフルを行い、1つの列の三つ組(triple)が三つ組単位でシャッフルされる列におけるシャッフル(並べ替え)か、列が列単位でシャッフルされる列のシャッフルかの少なくとも1つのシャッフルが行われる。
【0049】
あるいは、各パーティによるステップS1(第1のプロセス)は、要求されると全体の中からランダムに選択された乗算三つ組を提供する第1のバッファを使用または含んでもよく、第1のバッファは第2のバッファから、順次、補充される。
【0050】
図3は、1つの実施形態による1つのパーティの構成の一例を示す図である。パーティ(nパーティ、n=3)は同じ構成を有するので、1つのパーティの構成が図3に示されている。図3を参照すると、パーティ100は、図3に不図示のメモリを有するプロセッサと通信インタフェースを含み、乗算三つ組生成プロセス102、回路計算プロセス104、および回路検証(circuit validation)プロセス106を実行する。
【0051】
乗算三つ組生成プロセス102は、検証されたN個の乗算三つ組を生成する。
【0052】
ゲートの入力配線(input wire)へのシェアを与えられたパーティの回路計算プロセス104は、ゲートの入力配線についての関数fを計算する。ゲートの出力配線(output wire)における結果は、パーティのシェアとして定義されてもよい。
【0053】
回路検証プロセス106は、秘密計算が正しく実行されたことを検証する。
【0054】
例示的な実施形態について、図面を参照してより詳細に説明する。
【0055】
<三つ組の検証(Triple Verification)>
以下、乗算三つ組の検証について説明する。この検証方法に関して、例えば非特許文献5が参照できる。
【0056】
B組(タプル)の乗算三つ組、([a(1)]、[b(1)]、[c(1)])、...、([a(B)]、[b(B)]、[c(B)])が与えられる。ただし、[a(i)]、[b(i)]、[c(i)](i = 1、...、B)は、a(i)、b(i)、c(i)(i = 1、...、B)が、それぞれ、パーティ間で秘密分散されていることを表す。各i番目の乗算三つ組について、a(i)* b(i)= c(i)が成り立たないとすると、ある程度高い確率で検出される。もし、([a(i)]、[b(i)]、[c(i)])が、[a(i)] * [b(i)] = [c(i)]の関係を満たさないとすると、以下のテストでは、より高い確率で検出できる。
【0057】
このテストの後、a(1)、b(1)、c(1)は、他のシェア、([a(2)]、[b(2)]、[c(2)])、...、([a(B)]、[b(B)]、[c(B)])が開かれない限り、秘密に分散され続ける。
【0058】
i = 2、...、Bについて、各パーティは、[a(i)+ a(1)]及び[b(i)+ b(1)]を、ローカルに計算し、それぞれr(i)およびs(i)として開く。ここで「開く」とは、過半数のパーティの各組がそれらを開くことを意味する。
【0059】
そして、各パーティは、r(i)及びs(i)(i = 2、...、B)について学習したことに基づき、それぞれのシェア
[c'(i)] = r(i)*s(i) - r(i)*[b(i)] - s(i)*[a(i)] + [c(i)]
=([a(i)+a(1)])*([b(i)+b(1)])-([a(i)+a(1)])*[b(i)]-([b(i)+b(1)])*[a(i)]+[c(i)]
=[a(1)]*[b(1)] - [a(i)]*[b(i)] + [c(i)]
を計算し、以下を開いてチェックする。
[c'(i)-c(i)]=[c'(i)]-[c(i)]
【0060】
この等式は、a(i)b(i)= c(i)がすべてのiに対して成り立つか、iに対して成り立たない場合(either for all i or for no i)に成り立つ。したがって、このテストに合格する確率は、やや高い確率の積に近くなる。
【0061】
以下、本実施形態によるプロトコルを説明する。まず最初に、乗算三つ組の秘密生成について、図4を参照して説明する。
【0062】
<三つ組の生成(Generating Triples)>
パーティの乗算三つ組生成プロセス102によるN個の乗算三つ組の生成動作を、図4を参照して説明する。
【0063】
<ステップS101>
生成される三つ組の個数Nが入力される。N =(X-C)* Lとなる補助パラメータB、C、X、及びLが入力される。
ただし、Xは、各部分配列のサイズ、
Cは、各部分配列で開かれた三つ組の数、
Bは、バケットの数、
Lは、1つのバケット内の部分配列の数である。
【0064】
<M個のランダム値のシェアリング生成(Generating sharing of M random values)(ステップS102)>
各パーティの乗算三つ組生成プロセス102は、2M個のランダム値のシェアリングを生する。
2M = 2(N + C*L)*(B -1) + 2N= 2(N + C*L)*Bは、パーティが受け取るシェア[([a(i)]、[b(i)])](i = 1、...、M)によって示される。各パーティは、どのパーティも知らないランダムな秘密値vのシェアリングを生成できる。
【0065】
<乗算三つ組の生成 (ステップS103)>
各パーティの乗算三つ組生成プロセス102は、セミオネストな乗算プロトコルを実行し、[c(i)] = [a(i)]*[b(i)]を計算する。D = [([ai]; [bi]; [ci])] (i=1,..., M = (N + C*L)*B)となり、[c(i)]は上記プロトコルの結果であり、必ずしも正しいとは限らない。
【0066】
<カット及びバケット(Cut and bucket)(ステップS104)>
各パーティの乗算三つ組生成プロセス102は、いくつかの三つ組(C個の三つ組)を開き、三つ組が正しく生成されているか、最初の検証を行い、残りを複数のバケット(buckets)へランダムに分割する。
【0067】
(a)各パーティの乗算三つ組生成プロセス102は、(N + C*L)*(B - 1) + N個の三つ組を有するDを、D'(1)、...、D'(B)のベクトルに分割し、図5に示すように、D'(1)がN個の三つ組を含み、各D'(j)(j = 2、...、B)が(N + C * L)個の三つ組を含むようにする。ここで、各パーティは、他のパーティも同じことを行うという前提で、Dの自身のシェアのみを分割する。
【0068】
(b)k = 2〜Bについて、各パーティの乗算三つ組生成プロセス102は、D'(k)を、等しいサイズXのL個の部分配列に分割する(L *(X-C)= N)。図6に示すように、等しいサイズXのL個の部分配列は、D''(k、1)、...、D ''(k、L)となる。ここでも各パーティは、自身のシェアのみを分割する。図6では、D''(k、1)、...、D''(k、L)(k=1,...,B)それぞれにおけるC個の三つ組が、開かれるべき三つ組となる。
【0069】
(c)k = 2、...、B、及びj = 1、...、Lについて、各パーティの乗算三つ組生成プロセス102は、D ''(k、j)に含まれる三つ組の順序を共同でランダムに並べ替える。ここで、各パーティは、それぞれのシェアのみをランダムに並べ替える。ただし、すべてのパーティが同意するランダム性を使用することにより、すべての順列が同じになるように調整される。
【0070】
(d)k = 2、...、Bについて、各パーティの乗算三つ組生成プロセス102は、D ''(k、1)、...、D ''(k、L)間のL個の部分配列の順序を共同で並べ替える。
【0071】
(e)k = 2、...、B、及びj = 1、...、Lについて、 過半数のパーティそれぞれの乗算三つ組生成プロセス102は、図6に示すように、D''(k, j)に含まれる最初のC個の三つ組を開き、a(i)b(i)=c(i)が成り立つか否か検証する(インデックスiは、選択した三つ組のインデックス)。
【0072】
上記のように、各過半数のパーティのうち少なくとも1つのパーティは、a(i)、b(i)、c(i)を復元し、当該パーティは次の方程式を検証できる。a(i)b(i)= c(i)
【0073】
いずれの過半数のパーティの組もこれを拒否しない場合、すべてのパーティはD''(k、j)からこれらを削除する。
【0074】
過半数のパーティの組のいずれかが、検証を拒否した場合、他のパーティに「停止(Abort)」を送信し、プロトコルとして「停止」を出力する。
【0075】
(f)残りの三つ組は、図7に示すように、それぞれBのサイズの(B個の三つ組を含む)N組の三つ組 E '(1)、...、E'(N)に分割される。
【0076】
<バケットのチェック(Check buckets)(ステップS105)>
ベクトルdの長さをNとする。i= 1、...、Nについて、E '(i)では、B個の三つ組のうち、最初の三つ組 ([a(1)], [b(1)], [c(1)])は、残りのB -1個の三つ組 ([a(j)], [b(j)], [c(j)]) (j=2,...,B)を用いて、上記の三つ組検証方法にて検証される。図7に示すように、パーティは、長さNのベクトルdのi番目のエントリd(i)に([a(1)], [b(1)], [c(1)])を設定する。
【0077】
<ステップS106>
現時点で、各パーティにおいて、N個の乗算三つ組がベクトルdに用意されている。パーティは、N個の乗算三つ組を出力する。
【0078】
追加のN個の三つ組が必要な場合には、常に、上記のプロトコルを実行して取得できる(ステップS101〜S106)。
【0079】
<回路計算(Circuit Computation)>
図8を参照して、各パーティの回路計算プロセス104の動作を説明する。
【0080】
回路および回路への入力のシェアが入力される(ステップS201)。回路にはゲートと配線が含まれる。各ゲートは、乗算または加算ゲートのいずれかになる。各乗算ゲートと加算ゲートとは、2本の入力配線と1本の出力配線を有する。
【0081】
図9に示すように、入力配線のぞれぞれは、回路への入力またはゲートの出力のいずれかとなることができる。出力配線のそれぞれは、回路の出力、他のゲートへの入力、またはその両方になることができる。入力配線と出力配線はそれぞれ、1つの秘密シェアに関連付けられている。したがって、各ゲートは、秘密のシェア入力(例えば[x]、[y]、...)が与えられると、秘密のシェア出力(例えば [z]、..)を生成する。
【0082】
回路における計算段階の開始時、秘密シェアの組である入力が回路へ与えられ、各値はゲートへの入力となる(ステップS202)。
【0083】
両方の入力配線の秘密シェアが既に生成されている各ゲートにおいて、その出力配線の秘密値は、セミオネストな秘密計算(セミオネストな攻撃者に対する安全なマルチパーティ計算)によって生成することができる(ステップS203)。
【0084】
秘密シェアがその入力配線のために用意されたすべてのゲートに対してステップS203の手順を繰り返すことにより(ステップS204)、回路のすべての出力の秘密値が生成できる(ステップS205)。
【0085】
<回路検証(Circuit Validation)>
各パーティの回路検証(circuit validation)プロセス106の動作を、図10を参照して説明する。
【0086】
各パーティの回路検証プロセス106は、それぞれN個の三つ組の、2つのバッファベクトルV及びV'を用意する。回路検証プロセス106は、乗算三つ組生成プロセス102によって生成されたN個の三つ組で2つのバッファベクトルV及びV'を満たす(N=(X-C)*L)(ステップS301)。
【0087】
各パーティの回路検証プロセス106は、バッファベクトルV及びV'を満たすのに十分な数の三つ組を生成するのに必要な回数だけ乗算三つ組生成プロセス102を実行する。
【0088】
図11に示すように、各パーティの回路検証プロセス106は、バッファベクトルV及びV'を、それぞれのサイズがX'=X-CであるL個の部分配列V(1)、...、V(L)、及びV'(1)、...、V'(L)にそれぞれ分割する(ステップS302)。
【0089】
回路計算プロセス104による回路計算の結果は、それぞれが秘密分散入力(secrete shared inputs)および秘密分散出力(secrete shared outputs)を含む一連のゲートとして見ることができる。
【0090】
加算ゲートの場合、非対話型プロトコルであるため、ゲートが他のパーティのデータを操作できるという意味で、いずれのパーティも他のパーティに対して効果的に悪意を持つことはできない。
【0091】
乗算ゲートの場合、パーティは効果的に悪意のある動作をすることができる。したがって、一連の乗算ゲートの妥当性のみを検証すれば十分である。ここで、一連の乗算ゲートをQと称する。
【0092】
一連の乗算ゲートの数をM'とし、L'に対して、M'=X'L'+K(ただし、X'=X-C、及び、K < X')。
【0093】
図11に示すように、Qを、順次Q(1)、...、Q(L')、及びQ(L' + 1)に分割し、Q(1)、...、Q(L')はサイズX'であり、Q(L'+1)はサイズKである(ステップS303)。
【0094】
i=1〜L'+1について(ステップS304)、以下のステップS305乃至S308を実行する。
【0095】
<ステップS305>
各パーティの回路検証プロセス106は、バッファベクトルV'から1つの部分配列をランダムに選ぶ。この部分配列をランダムにシャッフルしてもよい。これを部分配列S(i)と称する。
【0096】
<ステップS306〜S307>
j=1〜X'の場合、各パーティの回路検証プロセス106は、S(i)のj番目の組(乗算三つ組)を用いて、Q(i)のj番目の組(回路内のゲートのj番目の三つ組)を検証する。i = L'+ 1の場合、jはX'ではなくKまでである。例えば、([x], [y])がj番目の三つ組への入力配線のシェアであり、[z]がj番目のfQ(i)の出力配線のシェアであるとすると、パーティは、([x], [y], [z])及び([a(j)], [b(j)], [c(j)])に対して三つ組の検証を行い、([x], [y], [z])を検証する。すなわち、関連するゲートの計算が正しく実行されたことを検証する。いずれかのパーティがすべての処理を受け入れない場合、当該パーティは「停止(Abort)」を他のパーティに送信する。
【0097】
<ステップS308>
各パーティの回路検証プロセス106は、V'のS(i)をV(i)に置き換え、VのV(i)を削除する。
【0098】
<ステップS309〜S310>
上記の処理が完了すると、j=L'+2〜M’の全てについて、各パーティの回路検証プロセス106は、V(j)をV(j-L'+1)にリネーム(rename)する。ここで、M'は、V(M' + 1)が空になる。
【0099】
なお、上記の改名ステップ(S309〜S310)では、V(j)が補充されない限り、一部のjに対してV(j)は空になる。
【0100】
上記の処理により、バッファベクトルV内のすべての部分配列(subarray)が削除される。そして、これは、乗算三つ組生成プロセス102により補充できる。バッファベクトルV内の三つ組は、予め設定された大きいサイズのチャンクによってのみ消費され補充される。
【0101】
M/2個の三つ組が、LK+M個の三つ組から選択され、上記のように検証されたものとする。GとTを適切な値として、この検証で正しく生成されていない三つ組を検出しない確率は、1/T個を超える三つ組が正しく生成されない場合、G未満になる。
【0102】
上記の実施形態において、1つの三つ組を検証するためにB-1個の三つ組を用いるため、乗算三つ組生成プロセス102の出力が、(1/T)^B個を超える数の正しく生成されていない三つ組を含む確率はGになる(^はべき乗演算子)。
【0103】
選択されたGが非常に小さい確率なため、システムのユーザはTを増大させることでこれを無視できるとする(これは常に可能である)。ユーザは、正しく生成されていない三つ組の予想数を(このような悪意のある三つ組の生成が検出されない場合)、Bを増大させることによって減らすことができる。
【0104】
バッファベクトルV'に格納されている三つ組は、回路内のゲートの三つ組が生成された後にランダムに選択されるため、悪意のあるパーティは、バッファベクトルV'の三つ組の非常に小さな部分が正しく生成されない場合でも、検出される危険を冒さずに上記ゲートの計算を偽ることはできない。
【0105】
バッファベクトルV'は、その要素(V'(i):ランダムに選ばれシャッフルされる)が検証に用いられた後、常にバッファベクトルVから補充されるため、三つ組が選択される集合のサイズは、同じで十分な大きさのままである。これにより、悪意のあるゲート計算を検出する能力は高く保たれる。さらに、この処理では、消費された三つ組が即座に補充されるため、バッファベクトルV'における消費された三つ組の位置を記憶するためのメモリは必要ない。
【0106】
バッファベクトルV内の乗算三つ組は、予め設定された(大きい)サイズのチャンクによってのみ消費され補充される。消費される三つ組は、バッファベクトルV内でランダムに分散される訳ではなく、最後に消費された三つ組の位置を使用して順番に消費されるため、バッファ管理が簡単になる。
【0107】
シャッフル操作は2つの方法で実行される。その内の1つは、短い列における細かいシャッフルである。列を十分に短くすることにより、キャッシュメモリに置き、高速操作を達成することができる。
【0108】
他の1つの方法は、シャッフルされる単位が上記の列である長い列の粗いシャッフルである。データのみが特定のサイズのチャンク内で移動するため、各三つ組に対する操作コストは小さくなる。
【0109】
上記の2つのシャッフルの組み合わせは、全体として完全なシャッフルにはならないが、本発明の実施形態が関与する秘匿性には十分である。したがって、高速操作で十分に高い秘匿性が得られる。
【0110】
本発明の実施形態により、各パーティは、他のパーティの入力を知ることなく、分散した方法で入力の任意の関数を計算することが可能になる。
【0111】
あるパーティがプロトコルに従わない場合、他のパーティはこれを検知できる。このような計算方法は、マシンのマルウェア又はマシンの操作者がデータを盗もうとする可能性がある、機密データが処理されるサービスに適用できる。
【0112】
上記のパーティは、例えば図12に示されるようなコンピュータシステム上で実現されてもよい。図12を参照すると、コンピュータ装置110は、プロセッサ(Central Processing Unit)112と、例えば半導体メモリ(例えばRAM(Random Access Memory)、ROM(Read Only Memory)、EEPROM(Electrically Erasable Programmable ROM))、及び/又はHDD(Hard Disk Drive)、CD(Compact Disc)、DVD(Digital Versatile Disc)のうち少なくとも1つを含む記憶装置などを含むメモリ114と、表示装置116(ディスプレイ)と、通信インタフェース118とを含む。通信インタフェース118(ネットワークインタフェースコントローラ(Network Interface Controller;NIC)など)は、他のパーティと通信するように構成されてもよい。図2のパーティの処理を実行するプログラムは、メモリ114に記憶されており、プロセッサ112が、メモリからプログラムを読み取り、プログラムを実行して秘密計算を行うパーティを実現する。
【0113】
なお、上記非特許文献1乃至5の各開示を、本書に引用をもって繰り込むものとする。本発明の全開示(請求の範囲を含む)の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素の多様な組み合わせ乃至選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
【符号の説明】
【0114】
100 パーティ
102 乗算三つ組生成プロセス
104 回路計算プロセス
106 回路検証プロセス
110 コンピュータ装置
112 プロセッサ
114 メモリ
116 表示装置
118 通信インタフェース
図1A
図1B
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12