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

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

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

特許7517478秘密計算システム、秘密計算サーバ装置、秘密計算方法および秘密計算プログラム
<>
  • 特許-秘密計算システム、秘密計算サーバ装置、秘密計算方法および秘密計算プログラム 図1
  • 特許-秘密計算システム、秘密計算サーバ装置、秘密計算方法および秘密計算プログラム 図2
  • 特許-秘密計算システム、秘密計算サーバ装置、秘密計算方法および秘密計算プログラム 図3
  • 特許-秘密計算システム、秘密計算サーバ装置、秘密計算方法および秘密計算プログラム 図4
  • 特許-秘密計算システム、秘密計算サーバ装置、秘密計算方法および秘密計算プログラム 図5
  • 特許-秘密計算システム、秘密計算サーバ装置、秘密計算方法および秘密計算プログラム 図6
  • 特許-秘密計算システム、秘密計算サーバ装置、秘密計算方法および秘密計算プログラム 図7
  • 特許-秘密計算システム、秘密計算サーバ装置、秘密計算方法および秘密計算プログラム 図8
  • 特許-秘密計算システム、秘密計算サーバ装置、秘密計算方法および秘密計算プログラム 図9
  • 特許-秘密計算システム、秘密計算サーバ装置、秘密計算方法および秘密計算プログラム 図10
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-07-08
(45)【発行日】2024-07-17
(54)【発明の名称】秘密計算システム、秘密計算サーバ装置、秘密計算方法および秘密計算プログラム
(51)【国際特許分類】
   G06F 21/60 20130101AFI20240709BHJP
【FI】
G06F21/60
【請求項の数】 10
(21)【出願番号】P 2022577826
(86)(22)【出願日】2021-01-26
(86)【国際出願番号】 JP2021002598
(87)【国際公開番号】W WO2022162726
(87)【国際公開日】2022-08-04
【審査請求日】2023-07-25
(73)【特許権者】
【識別番号】000004237
【氏名又は名称】日本電気株式会社
(74)【代理人】
【識別番号】100080816
【弁理士】
【氏名又は名称】加藤 朝道
(74)【代理人】
【識別番号】100098648
【弁理士】
【氏名又は名称】内田 潔人
(72)【発明者】
【氏名】土田 光
【審査官】中里 裕正
(56)【参考文献】
【文献】特表2007-510947(JP,A)
【文献】特開2008-20871(JP,A)
【文献】国際公開第2018/212015(WO,A1)
【文献】国際公開第2020/075273(WO,A1)
【文献】岩崎淳,秘密分散法を用いたマルチパーティ計算における低ラウンド大小比較アルゴリズム,2021年 暗号と情報セキュリティシンポジウム予稿集,2021年01月19日,pp.1-6
【文献】NISHIIDE, T. and OHTA, K.,Multiparty Computation for Interval, Equality, and Comparison Without Bit-Decomposition Protocol,Lecture Notes in Computer Science,Vol.4450,2007年,pp.343-360
【文献】REISTAD, T. I.,MULTIPARTY COMPARISON An Improved Multiparty Protocol for Comparison of Secret-shared Values,Proceedings of the International Conference on Security and Cryptography,Volume 1: SECRYPT,[online],2009年,pp.325-330,DOI: 10.5220/0002233603250330
(58)【調査した分野】(Int.Cl.,DB名)
G06F 21/60
JSTPlus/JMEDPlus/JST7580(JDreamIII)
IEEE Xplore
(57)【特許請求の範囲】
【請求項1】
相互にネットワークで接続した5台の秘密計算サーバ装置を備え、第1ビット列に関するシェアと平文の値との入力から大小比較の結果のシェアを得る秘密計算システムであって、
前記秘密計算サーバ装置のそれぞれが、
前記第1ビット列と前記平文の値をビット列に変換した第2ビット列とを、ビットごとに一致するか否かを判定し、n番目のビットでは前記第1ビット列が1であり、かつ、前記第2ビット列が0であり、n+1番目より高位のビットでは前記第1ビット列と前記第2ビット列が一致している場合に0となる判別式の配列を計算する判別式計算部と、
前記判別式の配列をシャッフルすることで、何番目のビットに関して前記判別式が0になっているかの情報を秘匿するシャッフル部と、
前記判別式のシャッフルにおいて発生する通信において、前記5台の秘密計算サーバ装置のうち少なくとも3台以上の秘密計算サーバ装置から受信した同一の値となるはずの受信値を比較し、少なくとも2つ以上が同一である受信値を正しい値として採用する比較検証部と、
を備える、秘密計算システム。
【請求項2】
前記シャッフル部は、前記5台の秘密計算サーバ装置のうち4台の秘密計算サーバ装置によって共有されている共有置換を用いて、前記5台の秘密計算サーバ装置における他の1台の秘密計算サーバ装置におけるシェアの置換を計算して構成されたミニシャッフルを、前記5台の秘密計算サーバ装置のうち4台の秘密計算サーバ装置を選択する5つの組み合わせに関して合成し、
前記比較検証部は、前記4台の秘密計算サーバ装置のうち少なくとも3台以上の秘密計算サーバ装置から受信した同一の値となるはずの前記シェアの置換を比較し、少なくとも2つ以上が同一であるものを正しい置換として採用する、
請求項1に記載の秘密計算システム。
【請求項3】
前記判別式にゼロでない乱数を乗算することで、判別式が0でない配列における値を秘匿する、請求項1または請求項2に記載の秘密計算システム。
【請求項4】
前記第1ビット列は、乱数でマスクされた入力値から最上位ビットを除いた値であり、
前記第2ビット列は、乱数から最上位ビットを除いた値であり、
前記第1ビット列と前記第2ビット列との大小比較の結果に基づいて、前記入力値から最上位ビットを除いた値の計算の補正を行い、前記補正された入力値から最上位ビットを除いた値を入力値から減算することで入力値の最上位ビットを計算する、請求項1から請求項3のいずれか1項に記載の秘密計算システム。
【請求項5】
第1ビット列に関するシェアと平文の値との入力から大小比較の結果のシェアを得るために、相互にネットワークで接続した5台の秘密計算サーバ装置の一つであって、
前記第1ビット列と前記平文の値をビット列に変換した第2ビット列とを、ビットごとに一致するか否かを判定し、n番目のビットでは前記第1ビット列が1であり、かつ、前記第2ビット列が0であり、n+1番目より高位のビットでは前記第1ビット列と前記第2ビット列が一致している場合に0となる判別式の配列を計算する判別式計算部と、
前記判別式の配列をシャッフルすることで、何番目のビットに関して前記判別式が0になっているかの情報を秘匿するシャッフル部と、
前記判別式のシャッフルにおいて発生する通信において、前記5台の秘密計算サーバ装置のうち少なくとも3台以上の秘密計算サーバ装置から受信した同一の値となるはずの受信値を比較し、少なくとも2つ以上が同一である受信値を正しい値として採用する比較検証部と、
を備える、秘密計算サーバ装置。
【請求項6】
相互にネットワークで接続した5台の秘密計算サーバ装置を用いて第1ビット列に関するシェアと平文の値との入力から大小比較の結果のシェアを得る秘密計算方法であって、
前記秘密計算サーバ装置のそれぞれが、
前記第1ビット列と前記平文の値をビット列に変換した第2ビット列とを、ビットごとに一致するか否かを判定し、n番目のビットでは前記第1ビット列が1であり、かつ、前記第2ビット列が0であり、n+1番目より高位のビットでは前記第1ビット列と前記第2ビット列が一致している場合に0となる判別式の配列を計算し、
前記判別式の配列をシャッフルすることで、何番目のビットに関して前記判別式が0になっているかの情報を秘匿し、
前記判別式のシャッフルにおいて発生する通信において、前記5台の秘密計算サーバ装置のうち少なくとも3台以上の秘密計算サーバ装置から受信した同一の値となるはずの受信値を比較検証し、少なくとも2つ以上が同一である受信値を正しい値として採用する、
秘密計算方法。
【請求項7】
前記シャッフルは、前記5台の秘密計算サーバ装置のうち4台の秘密計算サーバ装置によって共有されている共有置換を用いて、前記5台の秘密計算サーバ装置における他の1台の秘密計算サーバ装置におけるシェアの置換を計算して構成されたミニシャッフルを、前記5台の秘密計算サーバ装置のうち4台の秘密計算サーバ装置を選択する5つの組み合わせに関して合成し、
前記比較検証は、前記4台の秘密計算サーバ装置のうち少なくとも3台以上の秘密計算サーバ装置から受信した同一の値となるはずの前記シェアの置換を比較し、少なくとも2つ以上が同一であるものを正しい置換として採用する、
請求項6に記載の秘密計算方法。
【請求項8】
前記判別式にゼロでない乱数を乗算することで、判別式が0でない配列における値を秘匿する、請求項6または請求項7に記載の秘密計算方法。
【請求項9】
前記第1ビット列は、乱数でマスクされた入力値から最上位ビットを除いた値であり、
前記第2ビット列は、乱数から最上位ビットを除いた値であり、
前記第1ビット列と前記第2ビット列との大小比較の結果に基づいて、前記入力値から最上位ビットを除いた値の計算の補正を行い、前記補正された入力値から最上位ビットを除いた値を入力値から減算することで入力値の最上位ビットを計算する、請求項6から請求項8のいずれか1項に記載の秘密計算方法。
【請求項10】
第1ビット列に関するシェアと平文の値との入力から大小比較の結果のシェアを得るために、相互にネットワークで接続した5台の秘密計算サーバ装置に秘密計算をさせる秘密計算プログラムであって、
前記第1ビット列と前記平文の値をビット列に変換した第2ビット列とを、ビットごとに一致するか否かを判定し、n番目のビットでは前記第1ビット列が1であり、かつ、前記第2ビット列が0であり、n+1番目より高位のビットでは前記第1ビット列と前記第2ビット列が一致している場合に0となる判別式の配列を計算し、
前記判別式の配列をシャッフルすることで、何番目のビットに関して前記判別式が0になっているかの情報を秘匿し、
前記判別式のシャッフルにおいて発生する通信において、前記5台の秘密計算サーバ装置のうち少なくとも3台以上の秘密計算サーバ装置から受信した同一の値となるはずの受信値を比較検証し、少なくとも2つ以上が同一である受信値を正しい値として採用する、
秘密計算プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、秘密計算システム、秘密計算サーバ装置、秘密計算方法および秘密計算プログラムに関するものである。
【背景技術】
【0002】
近年、秘密計算と呼ばれる技術の研究開発が盛んに行われている。秘密計算は、第三者に対して計算過程とその結果を秘密にしつつ所定の処理を実行する技術の一つである。秘密計算における代表的な技術の一つとして、マルチパーティ計算技術が挙げられる。マルチパーティ計算技術では、秘密にするデータを複数のサーバ(秘密計算サーバ装置)に分散配置し、秘密にした状態を維持しながら当該データの任意の演算を実行する。なお、各秘密計算サーバ装置に分散配置したデータをシェアと呼ぶ。以下、特に断りがない限り、「秘密計算」という語を用いた場合は、マルチパーティ計算技術を意味するものとする。
【0003】
このような秘密計算には、四則演算だけではなく、特定用途の計算プロトコルも実装することが一般的である。その特定用途の計算プロトコルの一つとして、ある種の大小比較プロトコルがある。その一つとして、Private Compareとも呼ばれることもある、ビット分解されて秘密分散されている値と秘密にされていない値との大小比較がある。このPrivate Compareとも呼ばれる大小比較は、それ単体で利用されることは少ないが、最上位ビット抽出や数値の切り捨て(truncation)などの処理の内部処理として利用されている。そこで、このPrivate Compareとも呼ばれる大小比較は、秘密計算のシステムにおいて別途のビルディングブロックとして実装するメリットがある。
【先行技術文献】
【非特許文献】
【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】
ところで、一般に秘密計算と呼ばれる技術の中にも、達成されている安全性の程度には高低がある。例えば、秘密計算を行うマルチパーティの参加者の中に不正者が紛れたとする。その場合に、不正者の存在を検知し処理を中断することができる秘密計算の技術と、たとえ不正者が存在しても処理を中断することなく正しい計算結果を得ることができる秘密計算の技術とでは、後者の方が前者よりも安全性が高い。そして、後者の安全性を満たす秘密計算はGuaranteed Output Delivery (GOD)と呼ばれ、これを実現する秘密計算の例も知られている(例えば、非特許文献1参照)。
【0007】
また、秘密計算における安全性の評価には、達成できる安全性の効果だけではなく、前提条件も重要な意味を持つ。代表的な前提条件としてハッシュ関数のランダムオラクルモデルないしランダムオラクル仮定がある。
【0008】
ハッシュ関数は、入力に対し一意の出力を返す関数であるが、出力から入力を推定することが困難であるように構成されている。ここで、出力から入力を推定することが困難であるとはいうものの、絶対に不可能であるかというとその保証はできない。そこで、安全性の評価に際し、用いられているハッシュ関数が脆弱性を持たないという前提で安全性が評価される。この前提の安全性を「ランダムオラクルモデルにおいて安全」あるいは「ランダムオラクル仮定のもとで安全」という。そして、非特許文献1における秘密計算の安全性は「ランダムオラクルモデルにおいて安全」である。
【0009】
一方、「ランダムオラクルモデルにおいて安全」の対義語は、「標準モデルにおいて安全」である。すなわち、ハッシュ関数の出力から入力を推定することができたとしても、そのこと自体が秘密計算の脆弱性とはならないことをいう。当然のことながら、達成できる安全性が同じであれば、ランダムオラクルモデルにおける安全性よりも、標準モデルにおける安全性の方が高度な安全性が達成できることになる。
【0010】
したがって、Private Compareとも呼ばれる大小比較のビルディングブロックにおいても標準モデルにおいてGuaranteed Output Delivery (GOD)を達成することが望ましいことになる。最上位ビット抽出や数値の切り捨て(truncation)などの処理においてGuaranteed Output Delivery (GOD)を達成するためには、その内部処理としてのビルディングブロックにおいても標準モデルにおいてGuaranteed Output Delivery (GOD)を達成することが必要だからである。
【0011】
本発明の目的は、上述した課題を鑑み、標準モデルにおいてGuaranteed Output Delivery (GOD)を達成する大小比較の実現に寄与する秘密計算システム、秘密計算サーバ装置、秘密計算方法および秘密計算プログラムを提供することである。
【課題を解決するための手段】
【0012】
本発明の第1の視点では、相互にネットワークで接続した5台の秘密計算サーバ装置を備え、第1ビット列に関するシェアと平文の値との入力から大小比較の結果のシェアを得る秘密計算システムであって、前記秘密計算サーバ装置のそれぞれが、前記第1ビット列と前記平文の値をビット列に変換した第2ビット列とを、ビットごとに一致するか否かを判定し、n番目のビットでは前記第1ビット列が1であり、かつ、前記第2ビット列が0であり、n+1番目より高位のビットでは前記第1ビット列と前記第2ビット列が一致している場合に0となる判別式の配列を計算する判別式計算部と、前記判別式の配列をシャッフルすることで、何番目のビットに関して前記判別式が0になっているかの情報を秘匿するシャッフル部と、前記判別式のシャッフルにおいて発生する通信において、前記5台の秘密計算サーバ装置のうち少なくとも3台以上の秘密計算サーバ装置から受信した同一の値となるはずの受信値を比較し、少なくとも2つ以上が同一である受信値を正しい値として採用する比較検証部とを備える秘密計算システムが提供される。
【0013】
本発明の第2の視点では、第1ビット列に関するシェアと平文の値との入力から大小比較の結果のシェアを得るために、相互にネットワークで接続した5台の秘密計算サーバ装置の一つであって、前記第1ビット列と前記平文の値をビット列に変換した第2ビット列とを、ビットごとに一致するか否かを判定し、n番目のビットでは前記第1ビット列が1であり、かつ、前記第2ビット列が0であり、n+1番目より高位のビットでは前記第1ビット列と前記第2ビット列が一致している場合に0となる判別式の配列を計算する判別式計算部と、前記判別式の配列をシャッフルすることで、何番目のビットに関して前記判別式が0になっているかの情報を秘匿するシャッフル部と、前記判別式のシャッフルにおいて発生する通信において、前記5台の秘密計算サーバ装置のうち少なくとも3台以上の秘密計算サーバ装置から受信した同一の値となるはずの受信値を比較し、少なくとも2つ以上が同一である受信値を正しい値として採用する比較検証部とを備える秘密計算サーバ装置が提供される。
【0014】
本発明の第3の視点では、相互にネットワークで接続した5台の秘密計算サーバ装置を用いて第1ビット列に関するシェアと平文の値との入力から大小比較の結果のシェアを得る秘密計算方法であって、前記秘密計算サーバ装置のそれぞれが、前記第1ビット列と前記平文の値をビット列に変換した第2ビット列とを、ビットごとに一致するか否かを判定し、n番目のビットでは前記第1ビット列が1であり、かつ、前記第2ビット列が0であり、n+1番目より高位のビットでは前記第1ビット列と前記第2ビット列が一致している場合に0となる判別式の配列を計算し、前記判別式の配列をシャッフルすることで、何番目のビットに関して前記判別式が0になっているかの情報を秘匿し、前記判別式のシャッフルにおいて発生する通信において、前記5台の秘密計算サーバ装置のうち少なくとも3台以上の秘密計算サーバ装置から受信した同一の値となるはずの受信値を比較検証し、少なくとも2つ以上が同一である受信値を正しい値として採用する、秘密計算方法が提供される。
【0015】
本発明の第4の視点では、第1ビット列に関するシェアと平文の値との入力から大小比較の結果のシェアを得るために、相互にネットワークで接続した5台の秘密計算サーバ装置に秘密計算をさせる秘密計算プログラムであって、前記第1ビット列と前記平文の値をビット列に変換した第2ビット列とを、ビットごとに一致するか否かを判定し、n番目のビットでは前記第1ビット列が1であり、かつ、前記第2ビット列が0であり、n+1番目より高位のビットでは前記第1ビット列と前記第2ビット列が一致している場合に0となる判別式の配列を計算し、前記判別式の配列をシャッフルすることで、何番目のビットに関して前記判別式が0になっているかの情報を秘匿し、前記判別式のシャッフルにおいて発生する通信において、前記5台の秘密計算サーバ装置のうち少なくとも3台以上の秘密計算サーバ装置から受信した同一の値となるはずの受信値を比較検証し、少なくとも2つ以上が同一である受信値を正しい値として採用する秘密計算プログラムが提供される。なお、このプログラムは、コンピュータが読み取り可能な記憶媒体に記録することができる。記憶媒体は、半導体メモリ、ハードディスク、磁気記録媒体、光記録媒体等の非トランジェント(non-transient)なものとすることができる。本発明は、コンピュータプログラム製品として具現することも可能である。
【発明の効果】
【0016】
本発明の各視点によれば、標準モデルにおいてGuaranteed Output Delivery (GOD)を達成する大小比較の実現に寄与する秘密計算システム、秘密計算サーバ装置、秘密計算方法および秘密計算プログラムを提供することができる。
【図面の簡単な説明】
【0017】
図1図1は、第1の実施形態における秘密計算システムの機能構成例を示すブロック図である。
図2図2は、第1の実施形態における秘密計算サーバ装置の機能構成例を示すブロック図である。
図3図3は、秘密計算方法の手順の概略を示すフローチャートである。
図4図4は、第2の実施形態における秘密計算システムの機能構成例を示すブロック図である。
図5図5は、第2の実施形態における秘密計算サーバ装置の機能構成例を示すブロック図である。
図6図6は、大小比較(Private Compare)のプロトコルの手順を示すフローチャートである。
図7図7は、第3の実施形態における秘密計算システムの機能構成例を示すブロック図である。
図8図8は、第3の実施形態における秘密計算サーバ装置の機能構成例を示すブロック図である。
図9図9は、最上位ビット抽出のプロトコルの手順を示すフローチャートである
図10図10は、秘密計算サーバ装置のハードウェア構成例を示す図である。
【発明を実施するための形態】
【0018】
以下、図面を参照しながら、本発明の実施形態について説明する。ただし、以下に説明する実施形態により本発明が限定されるものではない。また、各図面において、同一または対応する要素には適宜同一の符号を付している。さらに、図面は模式的なものであり、各要素の寸法の関係、各要素の比率などは、現実のものとは異なる場合があることに留意する必要がある。図面の相互間においても、互いの寸法の関係や比率が異なる部分が含まれている場合がある。
【0019】
[第1の実施形態]
以下、図1図2を参照して、第1の実施形態に係る秘密計算システムおよび秘密計算サーバ装置について説明する。第1の実施形態は、本発明の基本的なコンセプトのみを説明する実施形態である。
【0020】
図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は、それぞれが互いにネットワーク経由で通信可能に接続されている。
【0021】
第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)に分散して記憶することができる。
【0022】
また、第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)に分散して記憶することができる。
【0023】
なお、上記計算結果のシェアは、第1~第5の秘密計算サーバ装置100_0~100_4とシェアを送受信することで、復元してもよい。あるいは、第1~第5の秘密計算サーバ装置100_0~100_4ではない外部にシェアを送信することで、復号してもよい。
【0024】
さらに、第1~第5の秘密計算サーバ装置100_i(i=0,1,2,3,4)を備える秘密計算システム100においては、第1~第5の秘密計算サーバ装置100_i(i=0,1,2,3,4)のうち1つが不正者によって運営されている場合であっても、処理を停止することなく、正しい秘密計算を継続することができる。
【0025】
例えば上記のように、第1~第5の秘密計算サーバ装置100_i(i=0,1,2,3,4)のうち1つが不正者によって運営されている場合であっても、処理を停止することなく、正しい秘密計算を継続することができるシェアの構成として以下の構成を採用することができる。
【0026】
位数nの剰余類環Znの元x∈Znの剰余類環Zn上のシェア(以下、これを算術シェアということがある)を以下のように定義する。ただし、mは2以上の整数とし、n=2mであるとする。つまり、位数2の剰余類環Z2は、位数nの剰余類環Znと区別する。
【0027】
位数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
【0028】
一方、位数2の剰余類環Z2の元x∈Z2の剰余類環Z2上のシェア(以下、これを論理シェアということがある)は、上記剰余類環Zn上のシェアにおけるn=2の場合と同様の定義であるが、記法としては位数nの剰余類環Znと区別し、[x]Bのように表す。すなわち、具体的には以下のように定める。
【0029】
位数2の剰余類環Zの元x∈Zを以下のように分解する。なお、〇で囲まれた+は排他的論理和を表す。
【0030】
【数1】
【0031】
そして、各参加者 Pi (i = 0, 1, 2, 3, 4)が分散保持する[x]B iは、以下のようにする。
[x]B i = (xi, xi+1, xi+2, xi+3), ただし、x4+1 = x0
【0032】
このように各参加者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複製型秘密分散(Replicated Secret Sharing Scheme)と呼ばれている。
【0033】
ところで、この秘密分散方式の秘密計算では、xを復元する場合に限らず、大小比較をする場合でも、各参加者が、自己が保持していないサブシェアの値を他の参加者から直接ないし間接的に受信する状況が発生する。したがって、他の参加者の中に不正者が紛れたとすると、本来は受信したい値の代わりに別の値が送信されてくることが起こり得る。すると、誤った値に基づいて秘密計算を実行することになり、誤った計算結果を得ることになったり、そもそも計算自体を正常に実行することができなくなったりする。
【0034】
このような問題に対し、本実施形態秘密計算システム100では、図2に示すように、第1~第5の秘密計算サーバ装置100_i(i=0,1,2,3,4)が、判別式計算部101_iとシャッフル部102_iと比較検証部103_iを備える。図2は、第1の実施形態における秘密計算サーバ装置の機能構成例を示すブロック図である。本実施形態秘密計算システム100は、第1~第5の秘密計算サーバ装置100_i(i=0,1,2,3,4)が、判別式計算部101_iとシャッフル部102_iと比較検証部103_iを備えることで、第1ビット列に関するシェアと平文の値との入力から大小比較の結果のシェアを得ることができる。
【0035】
判別式計算部101_iは、第1ビット列と平文の値をビット列に変換した第2ビット列とを、ビットごとに一致するか否かを判定し、n番目のビットでは第1ビット列が1であり、かつ、第2ビット列が0であり、n+1番目より高位のビットでは第1ビット列と第2ビット列が一致している場合に0となる判別式の配列を計算する。
【0036】
シャッフル部102_iは、判別式の配列をシャッフルすることで、何番目のビットに関して判別式が0になっているかの情報を秘匿する。一方、比較検証部103_iは、判別式のシャッフルにおいて発生する通信において、5台の秘密計算サーバ装置のうち少なくとも3台以上の秘密計算サーバ装置から受信した同一の値となるはずの受信値を比較し、少なくとも2つ以上が同一である受信値を正しい値として採用する。
【0037】
ここで、上記構成の意義を具体的な数字の大小比較を用いて説明する。なお、実際は、ビット分解されて秘密分散されている値(シェア)と秘密にされていない値(平文)との大小比較を行うが、ここでは説明を容易にするために、どちらも平文の状態で例示する。
【0038】
ビット分解されて秘密分散されている値(シェア)をx=40とし、比較対象である秘密にされていない値(平文)をr=32とする。このとき、x=40とr=32をビット分解して表記(2進数表記)すると以下のようになる。
x=40=(00101000)
r=32=(00100000)
【0039】
上記ビット列の比較から解るように、4番目のビットでは第1ビット列(x)が1であり、かつ、第2ビット列(r)が0であり、5番目より高位のビットでは第1ビット列(x)と第2ビット列(r)が一致している。xがrより大きいということは、n番目のビットでは第1ビット列が1であり、かつ、第2ビット列が0であり、n+1番目より高位のビットでは第1ビット列と第2ビット列が一致するというnが存在していることと同値であり、x=40とr=32の場合は、そのnが4であるということである。
【0040】
この性質を用いて、判別式計算部101_iは、第1ビット列と平文の値をビット列に変換した第2ビット列とを、ビットごとに一致するか否かを判定し、n番目のビットでは第1ビット列が1であり、かつ、第2ビット列が0であり、n+1番目より高位のビットでは第1ビット列と第2ビット列が一致している場合に0となる判別式の配列を計算する。
【0041】
具体的には、判別式は以下のように構成することができる。ただし、以下の判別式は平文の場合の判別式であり、実際の判別式は後に提示する。また、数式中「|」は、l番目のビットを意味する。
【0042】
【数2】

【0043】
このような判別式をx=40とr=32の場合に計算すると以下のようになる。ただし、「*」はゼロではない値を意味している。
x=40=(00101000)
r=32=(00100000)
c = (****0***)
【0044】
このように、判別式cは、配列の中に0となるものが存在していることが、x>rであることと同値になるように構成されている。
【0045】
ここで、判別式cは、配列の中に0となるものが存在していることを用いて、x>rであることを判別することができるが、過剰な情報を含んでしまっている。それは、配列の中に0となるものの位置は、xとrの差の情報を含んでしまっているのである。そこで、シャッフル部102_iは、判別式の配列をシャッフルすることで、何番目のビットに関して判別式が0になっているかの情報を秘匿する。
【0046】
さらに、比較検証部103_iは、判別式のシャッフルにおいて発生する通信において、5台の秘密計算サーバ装置のうち少なくとも3台以上の秘密計算サーバ装置から受信した同一の値となるはずの受信値を比較し、少なくとも2つ以上が同一である受信値を正しい値として採用することで、標準モデルにおいてGuaranteed Output Delivery (GOD)を達成する。
【0047】
なお、本実施形態を秘密計算方法として捉えると、以下のようになる。図3は、秘密計算方法の手順の概略を示すフローチャートである。
【0048】
図3に示すように、本実施形態に係る秘密計算方法は、判別式計算ステップ(S11)とシャッフルステップ(S12)と比較検証ステップ(S13)とを有する。判別式計算ステップ(S11)では、第1ビット列と平文の値をビット列に変換した第2ビット列とを、ビットごとに一致するか否かを判定し、n番目のビットでは第1ビット列が1であり、かつ、第2ビット列が0であり、n+1番目より高位のビットでは第1ビット列と第2ビット列が一致している場合に0となる判別式の配列を計算する。シャッフルステップ(S12)では、判別式の配列をシャッフルすることで、何番目のビットに関して判別式が0になっているかの情報を秘匿する。そして、比較検証ステップ(S13)では、判別式のシャッフルにおいて発生する通信において、5台の秘密計算サーバ装置のうち少なくとも3台以上の秘密計算サーバ装置から受信した同一の値となるはずの受信値を比較し、少なくとも2つ以上が同一である受信値を正しい値として採用する。
【0049】
このように、本実施形態の秘密計算システム100および秘密計算方法は、少なくとも3人の他の参加者から同一となるはずの受信値を受信し、少なくとも2つ以上が同一である受信値を正しい値として採用することで、他の参加者の中に不正者が紛れたとしても正しい値を判別することができる。すなわち、不正者が紛れたとしても処理を停止することなく、正しい計算を得ることができるGuaranteed Output Delivery (GOD)が実現されている。また、上記処理では、そもそもハッシュ関数を用いていないので、標準モデルにおいてGuaranteed Output Delivery (GOD)が実現されている。
【0050】
以上説明した第1の実施形態は、本発明の基本的なコンセプトのみを説明する実施形態である。以下で説明する第2の実施形態は、上記説明したコンセプトを実用的な実施形態に適用したものである。
【0051】
[第2の実施形態]
以下、図4および図5を参照して、第2の実施形態に係る秘密計算システムおよび秘密計算サーバ装置について説明する。
【0052】
図4は、第2の実施形態における秘密計算システムの機能構成例を示すブロック図である。図4に示すように、第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の秘密計算サーバ装置200_3、および第5の秘密計算サーバ装置200_4は、それぞれが互いにネットワーク経由で通信可能に接続されている。
【0053】
第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)に分散して記憶することができる。
【0054】
さらに、第1~第5の秘密計算サーバ装置200_i(i=0,1,2,3,4)を備える秘密計算システム200においては、第1~第5の秘密計算サーバ装置200_i(i=0,1,2,3,4)のうち1つが不正者によって運営されている場合であっても、処理を停止することなく、正しい秘密計算を継続することができる。
【0055】
図5は、第2の実施形態における秘密計算サーバ装置の機能構成例を示すブロック図である。本実施形態秘密計算システム200では、図5に示すように、第1~第5の秘密計算サーバ装置200_i(i=0,1,2,3,4)が、判別式計算部201_iとシャッフル部202_iと比較検証部203_iを備える。本実施形態秘密計算システム200は、第1~第5の秘密計算サーバ装置200_i(i=0,1,2,3,4)が、判別式計算部201_iとシャッフル部202_iと比較検証部203_iを備えることで、第1ビット列に関するシェアと平文の値との入力から大小比較の結果のシェアを得ることができる。
【0056】
以下、本実施形態における大小比較の実施に用いられるビルディングブロックについて説明する。なお、以下では大小比較の実施に用いられるビルディングブロックの全てを説明することはしない。基本となる四則演算の秘密計算のうち、自明ではない乗算を中心に説明を行う。さらに、後述する大小比較において利用するシャッフル、ビット変換、再分散、および復元についても説明する。
【0057】
[疑似乱数の生成とシードの共有]
疑似ランダム関数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は、決定的に疑似乱数を生成する。
【0058】
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のみを保持していないという関係となっている。これらシードの共有は、例えば、各秘密計算サーバ装置200_iにおける事前の設定として管理者などが適切に設定することができる。
【0059】
[マスク作成]
ここでは、参加者Pi+4からは乱数に見えて除去できないが、残りの参加者Pi, Pi+1, Pi+2, Pi+3にとっては決定的に計算可能であるような、疑似乱数(Correlated Randomness)を作成し、これを後に説明する乗算の秘密計算においてマスクとして用いる。
【0060】
まず、参加者Pi+4がシードseedi+3を保持していないことに着目すると、疑似ランダム関数Fnの入力としてシードseedi+3を用いれば以下の疑似乱数は上記条件を満たす。すなわち、下記αkは、参加者Pi+4からは乱数に見えて除去できないが、残りの参加者Pi, Pi+1, Pi+2, Pi+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に対しても同様に行うことができる。具体的には、以下のようにように定めればよい。
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】
このように作成された疑似乱数の組は以下のようになる。
【0065】
【表1】
【0066】
上記疑似乱数の表では、第1のインデックス(縦方向)に関する総和はゼロであり、第2のインデックス(横方向)に関する総和はゼロではないという性質を有する。
【0067】
[秘密計算(乗算)]
次に、秘密計算の重要な因子である乗算について説明する。つまり、2つのシェア[x],[y]から[z]=[x・y]=[x]・[y]を計算する秘密計算の具体例を説明する。なお、x,y,zは以下のように分解されているとする。
【0068】
【数3】



【0069】
参加者Pi(i=0,1,2,3,4)は、以下のようなtmpzkを計算する。このtmpzkは参加者Piがzkを計算するためにはxk・yi+4が足りない(保持しているシェアから計算できない)ので、代わりに計算する値である。なお、αj,kは、上述の[マスク作成]の項目にて説明した疑似乱数である。
【0070】
【数4】

【0071】
ここで、送信者集合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
【0072】
そして、送信者集合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が漏洩することはない。つまり、ここではハッシュ関数も用いているが、これは安全性の確保のためではなく、通信コストを削減するためである。
【0073】
その後、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とする。
【0074】
上記のようにxkyi+4を参加者Piへ受け渡せば、少なくとも3人の他の参加者Pjから同一となるはずのmk(のハッシュ値)を受信し、少なくとも2つ以上が同一である受信値を正しい値として採用することで、他の参加者Pjの中に不正者が紛れたとしても正しい値を判別することができる。
【0075】
その後、参加者Piは、正しい値であることが判定されたmkを用いて、zk = tmpzk + mk mod n (k=i,i+1,i+2,i+3)を計算する。
【0076】
【数5】


【0077】
このように計算されたzkは、余計な付加項が含まれているが、[z]=[xy]=[x][y]の計算結果のシェア[z]i=(zi, zi+1, zi+2, zi+3)として機能する。それは、実際に以下のようにz=z0+z1+z2+z3+z4を計算すると明らかとなる。
【0078】
【数6】



【0079】
ここで、疑似乱数αi,kが消去される理由は、疑似乱数の構成から以下の関係式が成り立つからである。
【0080】
【数7】
【0081】
すなわち、上述の[マスク作成]の項目にて説明したように、本構成の疑似乱数は、第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)として機能する。
【0082】
以上、上記のような[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)が実現されている。
【0083】
[再分散]
本実施形態で用いられる再分散は、以下のように定義される。すなわち、参加者Pi,Pi+1,Pi+2が値cを保持していた場合に、シードと識別子から決定的に定められる再分散である。
【0084】
【数8】


【0085】
ただし、rj = Fn(vidk, seedi+2)かつr´j = Fn(vidk+1, seedi+3)であり、シードseedi∈{0,1}κ(i=0, 1, 2, 3, 4)は、先述の[疑似乱数の生成とシードの共有]の項で説明した性質のシードである。したがって、参加者Pi+3は、seedi+2を知らず、また、参加者Pi+4は、seedi+3を知らない。つまり、参加者Pi+3, Pi+4は、自分でci+3,ci+4を計算することができず、参加者Pi,Pi+1,Pi+2からci+3,ci+4を受信する必要がある。
【0086】
ここで、通信を伴った秘密計算が発生するので、参加者Pi+3, Pi+4は、参加者Pi,Pi+1,Pi+2から受信した同一の値となるはずの受信値ci+3,ci+4を比較し、少なくとも2つ以上が同一である受信値を正しい値として採用する。具体的には、以下のように行うことができる。
【0087】
参加者Pi,Pi+1は、cj+1,cj+2,cj+3(j=i+3)を参加者Pi+3に送信する。一方、参加者Pi+2は、cj+1,cj+2,cj+3(j=i+3)のハッシュ値を各参加者に送信する。さらに、参加者Pi,Pi+1は、cj´+1,cj´+2,cj´+3(j´=i+3)を参加者Pi+4に送信する。一方、参加者Pi+2は、cj´+1,cj´+2,cj´+3(j´=i+3)を各参加者に送信する。そして、参加者Pi+3, Pi+4は、参加者Pi,Pi+1,Pi+2から受信した受信値のうち少なくとも2つ以上が同一である受信値を正しい値として採用する。
【0088】
次に、上記説明した再分散をビット変換の中でどのように用いるかを説明する。
【0089】
[ビット変換]
ビット変換とは、位数2の剰余類環Z上の論理シェア[x]Bから位数nの剰余類環Z上の算術シェア[x]を得るビット変換:[x]←BC([x]B)である。まず、参加者P3,P4,P0および参加者P0,P1,P2は、それぞれ以下のように、論理シェア[x]Bにおけるサブシェアxiから計算された一時的変数y0,y1を計算する。
【0090】
【数9】

【0091】
次に、参加者P3,P4,P0および参加者P0,P1,P2は、一時的変数y0,y1を再分散する。
【0092】
【数10】



なお、上記再分散は、通信を伴った秘密計算であるので、既に説明したように、参加者Pi+3, Pi+4は、参加者Pi,Pi+1,Pi+2から受信した受信値のうち少なくとも2つ以上が同一である受信値を正しい値として採用する。
【0093】
一方、各参加者Pi(i=0,1,2,3,4)は以下のように、[x4]iを設定する。なお、この処理は通信を伴った秘密計算ではないので、検証は必要ない。
P0: [x4]0 = (0, 0, 0, 0)
P1: [x4]1 = (0, 0, 0, x4)
P2: [x4]2 = (0, 0, x4, 0)
P3: [x4]3 = (0, x4, 0, 0)
P4: [x4]4 = (x4, 0, 0, 0)
【0094】
そして、最終的に、一時的変数y0,y1の算術シェアと算術シェア[x4]i(i=0,1,2,3,4)とを用いて、前記論理シェアをビット変換した算術シェアを以下のように秘密計算する。
【0095】
【数11】

【0096】
なお、ここでも、上記秘密計算は、乗算の秘密計算を含むので、上述の[秘密計算(乗算)]を用い、少なくとも3台以上の秘密計算サーバ装置から受信した同一の値となるはずの受信値を比較し、少なくとも2つ以上が同一である受信値を正しい値として採用することで、通信を伴った秘密計算における受信値を検証する。
【0097】
以上のように、第2の実施形態の秘密計算システム200および秘密計算方法は、少なくとも3人の他の参加者から同一となるはずの受信値を受信し、少なくとも2つ以上が同一である受信値を正しい値として採用することで、他の参加者の中に不正者が紛れたとしても正しい値を判別することができる。すなわち、不正者が紛れたとしても処理を停止することなく、正しい計算を得ることができるGuaranteed Output Delivery (GOD)が実現されている。
【0098】
また、上記処理では、ハッシュ関数を用いているが、通信量の削減を目的として利用しているのであり、出力から入力が推定されたとしても安全性に影響を与えないので、標準モデルにおいてGuaranteed Output Delivery (GOD)が実現されている。さらに、本実施形態の秘密計算システム200および秘密計算方法は、最初に通信を伴うことなく再分散(ローカル再分散)を行い、その後に通信を伴った秘密計算を行うので、通信コストが低減されている。
【0099】
[シャッフル]
まず、参加者Pi (i = 0, 1, 2, 3, 4)のうち、参加者Pi (i = 1, 2, 3, 4)が共有している置換を用いて、参加者P0の置換を代わりに計算し、これを参加者P0に送信する例を考える。
【0100】
参加者Pi (i = 1, 2, 3, 4)が共有する置換σ0∈SMを、次のように構成する。先述したように、各参加者Pi (i = 0, 1, 2, 3, 4)は、シード(seedi, seedi+1, seedi+2, seedi+3)を保持している。これを言い換えると、各参加者Pi (i = 0, 1, 2, 3, 4)は、シードseedi+4のみを保持していないことになる。つまり、参加者P0は、シードseed4を保持していない一方、他の参加者Pi (i = 1, 2, 3, 4)は、シードseed4を保持している。そこで、シードseed4を用いて生成した疑似乱数を用いて参加者Pi (i = 1, 2, 3, 4)が共有する置換σ0∈SMを構成する。すると、置換σ0∈SMは、参加者Pi (i = 1, 2, 3, 4)にとっては、どのような置き換えが起きたのかの追跡可能である一方、参加者P0にとっては、追跡不可能な置換となる。
【0101】
次に、このように構成した置換σ0∈SMと疑似乱数rkを用いて、参加者Pi (i = 1, 2, 3, 4)が参加者P0の置換を代わりに計算し、これを以下のように参加者P0に送信する。なお、ここで注意すべきことは、秘密分散のシェアの構成方法から、参加者Pi (i = 1, 2, 3, 4)と参加者P0との間で共有されているシェアが存在しており、参加者Pi (i = 1, 2, 3, 4)が参加者P0の置換を代わりに計算することが可能であるということである。
【0102】
【数12】







【0103】
ここで、上記送信では、参加者P2, P3, P4が同一の値を参加者P0に送信し、参加者P1, P3, P4が同一の値を参加者P0に送信し、参加者P1, P2, P4が同一の値を参加者P0に送信し、参加者P1, P2, P3が同一の値を参加者P0に送信することに注意する。この性質から、参加者P0は、3人の参加者から受信した同一の値となるはずのシェアの置換を比較し、少なくとも2つ以上が同一であるものを正しい置換として採用することが可能である。つまり、他の参加者の中に不正者が紛れたとしても正しい値を判別することができ、不正者が紛れたとしても処理を停止することなく、正しい計算を得ることができるGuaranteed Output Delivery (GOD)が実現されている。
【0104】
また、上記送信では、参加者Pi (i = 1, 2, 3, 4)が共有するハッシュ関数を用いて以下のようにハッシュ値を送信することで通信量を減らすことができる。まず、3人の参加者のうち、1名はハッシュ関数を用いて送信する値を変換し、ハッシュ値を参加者P0に送信する。一方、残りの2名の参加者は、ハッシュ値ではなく、そのままの値を送信し、受信した参加者P0がハッシュ関数を用いてハッシュ値へ変換する。そして、参加者P0は、ハッシュ値同士を比較し、2つ以上が一致した場合を正しい値として用いる。
【0105】
上記のような処理を行うことで、参加者Pi (i = 1, 2, 3, 4)にとっては計算可能である一方、参加者P0にとっては、計算不可能な置換σ0∈SMに対応したシェアが以下のように構成できる。これをミニシャッフルとする。
【0106】
【数13】




【0107】
上記ミニシャッフルの構成では、参加者Pi (i = 0, 1, 2, 3, 4)のうち、参加者Pi (i = 1, 2, 3, 4)が共有している置換を用いて、参加者P0の置換を代わりに計算し、これを参加者P0に送信する例を考えたが、4人の参加者Piと1人の参加者P0の組み合わせを変更することができる。すると、5通りのミニシャッフルを構成することが可能である。また、このように構成した5通りのミニシャッフルのそれぞれは、各参加者Pi (i = 0, 1, 2, 3, 4)のいずれかにとっては追跡不可能な置換となっている。
【0108】
したがって、参加者Pi (i = 0, 1, 2, 3, 4)にとっては追跡不可能な置換σi (i = 0, 1, 2, 3, 4)∈SMをすべて合成すると、すべての参加者Pi (i = 0, 1, 2, 3, 4)にとって追跡不可能な置換σ(シャッフル)を構成することができる。
【0109】
【数14】
【0110】
[復元]
参加者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として計算する。
【0111】
このとき、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を復元することが可能である。
【0112】
以上のような復元方法では、少なくとも3人の他の参加者Pjから同一となるはずのxi+4(のハッシュ値)を受信し、少なくとも2つ以上が同一である受信値を正しい値として採用することで、他の参加者Pjの中に不正者が紛れたとしても正しい値を判別している。すなわち、不正者が紛れたとしても処理を停止することなく、正しい計算を得ることができるGuaranteed Output Delivery (GOD)が実現されている。また、上記処理では、ハッシュ関数を用いているが、出力から入力が推定されたとしても安全性に影響を与えないので、標準モデルにおいてGuaranteed Output Delivery (GOD)が実現されている。
【0113】
〔大小比較(Private Compare)〕
ここで、上記説明したビルディングブロックを用いて、Private Compareとも呼ばれることもある、ビット列に関するシェアと平文の値との入力から大小比較の結果のシェアを得る秘密計算のプロトコルの説明を行う。すなわち、下記のようなビット分解されて秘密分散されているシェア[x]と秘密にされていない値rとの入力から、大小比較の結果のシェア[x>r]2を得る秘密計算について説明する。
【0114】
【数15】


【0115】
図6は、大小比較(Private Compare)のプロトコルの手順を示すフローチャートである。大小比較(Private Compare)のプロトコルは、非ゼロ乱数の計算ステップ(S21)とランダムビットの計算ステップ(S22)と判別式の計算ステップ(S23)と非ゼロ乱数の乗算ステップ(S24)とシャッフルステップ(S25)と値の変換ステップ(S26)とを含んでいる。以下、大小比較(Private Compare)のプロトコルを各ステップに分けて説明する。
【0116】
(非ゼロ乱数の計算ステップ:S21)
非ゼロ乱数の計算ステップ(S21)では、以下の数式に示すように、非ゼロ乱数のシェア[sl]pと[s’l]pを計算する。なお、非ゼロ乱数の計算ステップはオフラインで実行することができる。具体的には、ステップ2からステップ8において、各参加者Piが、シードと識別子を入力として決定的に非ゼロ乱数sl,jとs’l,jを生成する。その後、ステップ9からステップ13において、各参加者Piが、非ゼロ乱数sl,jとs’l,jを用いて形式的なシェアを構成する。ただし、ステップ9からステップ13において構成された形式的なシェアは、本当のシェアではない。各参加者Piは、自己が生成した非ゼロ乱数sl,jとs’l,jを用いて形式的に分配したのみなので、各参加者Piが自己のシェアの値を知っているからである。そこで、次のステップ14からステップ21において、各参加者Piが保持している形式的なシェアを乗算することで、各参加者Piの誰も知ることができない非ゼロ乱数のシェア[sl]pと[s’l]pを計算する。なお、非ゼロ乱数のシェア[sl]pと[s’l]pを得るための乗算は、既に説明した[秘密計算(乗算)]のビルディングブロックを用いることができる。
【0117】
【数16】
【0118】
(ランダムビットの計算ステップ:S22)
ランダムビットの計算ステップ(S22)では、以下の数式に示すように、ランダムビットのシェア[b]2と[b]pを計算する。なお、ランダムビットの計算(S22)はオフラインで実行することができる。具体的には、ステップ23において、各参加者Piが、疑似ランダム関数とシードを用いてランダムビットのシェア[b]2を生成し、生成したランダムビットのシェア[b]2をビット変換することで[b]pを計算する。ここで、ランダムビットのシェア[b]2から[b]pを計算するビット変換は、既に説明した[ビット変換]のビルディングブロックを用いることができる。
【0119】
【数17】
【0120】
(判別式の計算ステップ:S23)
判別式の計算ステップ(S23)では、以下の数式に示すように、第1ビット列[x|l]と平文の値rをビット列に変換した第2ビット列r|lとを、ビットごとに一致するか否かを判定し、n番目のビットでは第1ビット列が1であり、かつ、第2ビット列が0であり、n+1番目より高位のビットでは第1ビット列と第2ビット列が一致している場合に0となる判別式の配列を計算する。なお、判別式の計算ステップ(S23)以降は、オンラインで実行する。
【0121】
まず、ステップ28からステップ30とステップ31からステップ33とで、ランダムビットの計算ステップ(S22)で計算したランダムビットbが0であるか1であるかによって場合分けを行う。ただし、ランダムビットbが0であるか1であるかは参加者Piが知ることができないので、ランダムビットbが0である場合と1である場合の両方の判別式[c|l]p, [c’|l]pを計算し、後に適切に選択する。
【0122】
ランダムビットbが0である場合、x>rである場合に0となる判別式[c|l]pを含む配列を計算し、ランダムビットbが0である場合、x≦rである場合に0となる判別式[c’|l]pを含む配列を計算する。ただし、x≦rであることを直接計算するのは不便なので、x<r+1として計算をする。このために、ステップ26で、t=r+1を計算している。
【0123】
【数18】
【0124】
上記計算において、ステップ29は、排他的論理和と同値の計算であり、第1ビット列[x|l]pと第2ビット列r|lの各ビットの一致および不一致を計算している。そして、ステップ30におけるr|l-[x|l]p+1は、l番目のビットでは第1ビット列が1であり、かつ、第2ビット列が0である場合に0となる項であり、総和Σの項は、l+1番目より高位のビットでは第1ビット列[x|l]pと第2ビット列r|lが一致している場合に0となる項である。ステップ31およびステップ32は、x<r+1についてこれと同様の計算をしたものである。
【0125】
(非ゼロ乱数の乗算ステップ:S24)
非ゼロ乱数の乗算ステップ(S24)では、以下の数式に示すように、判別式[c|l]p, [c’|l]pに非ゼロ乱数のシェア[sl]pと[s’l]pを乗算することで、判別式[c|l]p, [c’|l]pが0でない配列における値を秘匿する。なお、この乗算には、既に説明した[秘密計算(乗算)]のビルディングブロックを用いることができる。
【0126】
【数19】
【0127】
(シャッフルステップ:S25)
シャッフルステップ(S25)では、以下の数式に示すように、判別式[c|l]p, [c’|l]pに非ゼロ乱数のシェア[sl]pと[s’l]pを乗算した配列[sl c|l]p, [s’l c’|l]pをシャッフルすることで、何番目のビットに関して判別式が0になっているかの情報を秘匿する。なお、この乗算には、既に説明した[シャッフル]のビルディングブロックを用いることができる。
【0128】
【数20】
【0129】
(値の変換ステップ:S26)
上記のように得られた判別式[d|l]p, [d’|l]pは、x>rであるか否かの情報を含むものであるが、大小比較の結果のシェア[x>r]2ではない。そこで、以下の数式に示すように、判別式[d|l]p, [d’|l]pから大小比較の結果のシェア[x>r]2を導く計算を行う。
【0130】
【数21】
【0131】
まず、ステップ40では、bが0か1の場合に応じて[d|l]pと[d’|l]pのうち適切な値の方を選択する。そして、ステップ41からステップ42において、選択された判別式[d’’|l]pの値を参加者P0,P1,P2に対して復元する。なお、この復元には、既に説明した[復元]のビルディングブロックを用いることができる。
【0132】
そして、ステップ45では、参加者P0,P1,P2が、復元された判別式d’’|lのなかにd’’|l=0となるようなlが存在している場合、b’=1を再分散する。一方、復元された判別式d’’|lのなかにd’’|l=0となるようなlが存在していない場合、b’=0を再分散する。なお、この復元には、既に説明した[再分散]のビルディングブロックを用いることができる。
【0133】
最終的に、ステップ46で[b’]2と[b]2の排他的論理和を計算すると、大小比較の結果のシェア[x>r]2を得ることができる。
【0134】
以上のように、ビット分解されて秘密分散されているシェア[x]と秘密にされていない値rとの入力から、大小比較の結果のシェア[x>r]2を得ることができる。上記秘密計算では、用いたビルディングブロックにおいて、標準モデルにおいてGuaranteed Output Delivery (GOD)を達成している。したがって、これらビルディングブロックを組み合わせて秘密計算を行った大小比較の秘密計算も標準モデルにおいてGuaranteed Output Delivery (GOD)を達成している。
【0135】
[第3の実施形態]
以下、図7および図8を参照して、第3の実施形態に係る秘密計算システムおよび秘密計算サーバ装置について説明する。第3の実施形態は、第1の実施形態または第2の実施形態を最上位ビット抽出プロトコルに適用した実施形態である。最上位ビット抽出とは、各秘密計算サーバ装置に分散して保持されている値(シェア)から、秘密状態を維持したまま当該値の最上位ビットを計算するプロトコルである。
【0136】
図7は、第3の実施形態における秘密計算システムの機能構成例を示すブロック図である。図7に示すように、第3の実施形態による秘密計算システム300は、第1の秘密計算サーバ装置300_0と第2の秘密計算サーバ装置300_1と第3の秘密計算サーバ装置300_2と第4の秘密計算サーバ装置300_3と第5の秘密計算サーバ装置300_4とを備えている。第1の秘密計算サーバ装置300_0、第2の秘密計算サーバ装置300_1、第3の秘密計算サーバ装置300_2、第4の秘密計算サーバ装置300_3、および第5の秘密計算サーバ装置300_4は、それぞれが互いにネットワーク経由で通信可能に接続されている。
【0137】
第1~第5の秘密計算サーバ装置300_i(i=0,1,2,3,4)を備える秘密計算システム300においては、第1~第5の秘密計算サーバ装置300_i(i=0,1,2,3,4)の内のいずれかの秘密計算サーバ装置300_iが入力した値に対し、その入力や計算過程の値を知られることなく目的のシェアを計算し、その計算結果を第1~第5の秘密計算サーバ装置300_i(i=0,1,2,3,4)に分散して記憶することができる。
【0138】
さらに、第1~第5の秘密計算サーバ装置300_i(i=0,1,2,3,4)を備える秘密計算システム300においては、第1~第5の秘密計算サーバ装置300_i(i=0,1,2,3,4)のうち1つが不正者によって運営されている場合であっても、処理を停止することなく、正しい秘密計算を継続することができる。
【0139】
図8は、第3の実施形態における秘密計算サーバ装置の機能構成例を示すブロック図である。本実施形態秘密計算システム300では、図8に示すように、第1~第5の秘密計算サーバ装置300_i(i=0,1,2,3,4)が、乱数生成部301_iと大小比較部302_iと繰り上がり補正部303_iと最上位ビット計算部304_iを備える。
【0140】
乱数生成部301_iは、入力値をマスクするための乱数を生成し、大小比較部302_iは、乱数でマスクされた入力値から最上位ビットを除いた値と乱数から最上位ビットを除いた値との大小比較を行う、繰り上がり補正部303_iは、大小比較の結果に基づいて、入力値から最上位ビットを除いた値の計算の補正を行い、最上位ビット計算部304_iは、補正された入力値から最上位ビットを除いた値を入力値から減算することで入力値の最上位ビットを計算する。
【0141】
最上位ビット抽出プロトコルでは、入力値を乱数でマスクした情報を通信および処理する必要があるが、入力値に乱数を加算することで、最上位ビットが繰り上がってしまうことが起こり得る。これに対し、本実施形態秘密計算システム300では、第1~第5の秘密計算サーバ装置300_i(i=0,1,2,3,4)が、乱数生成部301_iと大小比較部302_iと繰り上がり補正部303_iと最上位ビット計算部304_iを備えることで、入力値に乱数を加算することで起こる最上位ビットの繰り上がりを補正することができる。
【0142】
図9は、最上位ビット抽出のプロトコルの手順を示すフローチャートである。最上位ビット抽出のプロトコルは、乱数生成ステップ(S31)と大小比較ステップ(S32)と繰り上がり補正ステップ(S33)と最上位ビット計算ステップ(S34)とを含んでいる。以下、最上位ビット抽出のプロトコルを各ステップに分けて説明する。なお、最上位ビット抽出のプロトコルにおける入力と出力は以下のように表す。
【0143】
【数22】

【0144】
(乱数生成ステップ:S31)
乱数生成ステップ(S31)では、以下の数式に示すように、マスクに用いるための乱数のシェアを計算する。なお、乱数生成ステップ(S31)は、オフラインで処理を行うことができる。各参加者Piは、シードの入力として決定的に乱数を生成し、生成した乱数をビット分解することで、乱数のビット列のシェアを作成する。また、乱数rの最上位ビットをmsb(r)とする。
【0145】
【数23】
【0146】
(大小比較ステップ:S32)
大小比較ステップ(S32)では、以下の数式に示すように、乱数でマスクされた入力値から最上位ビットを除いた値と乱数から最上位ビットを除いた値との大小比較を行う。なお、大小比較ステップ(S32)以降は、オンラインで実行する。そして、下記ステップ15で実行する大小比較は、第1の実施形態および第2の実施形態で説明した[大小比較(Private Compare)]のプロトコルをビルディングブロックとして用いることができる。
【0147】
【数24】
【0148】
(繰り上がり補正ステップ:S33)
繰り上がり補正ステップ(S33)では、以下の数式に示すように、大小比較ステップ(S32)の結果に基づいて、入力値から最上位ビットを除いた値の計算の補正を行う。これにより、乱数でマスクをしたことによる最上位ビットの繰り上がりを補正することができる。
【0149】
【数25】
【0150】
(最上位ビット計算ステップ:S34)
最後に、最上位ビット計算ステップ(S34)では、以下の数式に示すように、乱数rの最上位ビットmsb(r)と入力値aの最上位ビットmsb(a)との排他的論理和を復元し、マスクとしての乱数rの最上位ビットmsb(r)を除去する計算を行う。なお、このステップ20で実行する復元は、既に説明した[復元]のプロトコルをビルディングブロックとして用いることができる。
【0151】
【数26】
【0152】
以上のように、秘密分散して保持されている値から、秘密状態を維持したまま当該値の最上位ビットを計算する最上位ビット抽出のプロトコルが実現できる。上記秘密計算では、用いた大小比較(Private Compare)などのビルディングブロックにおいて、標準モデルにおいてGuaranteed Output Delivery (GOD)を達成している。したがって、これらビルディングブロックを組み合わせて秘密計算を行った大小比較の秘密計算も標準モデルにおいてGuaranteed Output Delivery (GOD)を達成している。
【0153】
[ハードウェア構成例]
図10は、秘密計算サーバ装置のハードウェア構成例を示す図である。すなわち、図10に示すハードウェア構成例は、秘密計算サーバ装置100_i,200_i,300_i(i=0,1,2,3,4)のハードウェア構成例である。図10に示すハードウェア構成を採用した情報処理装置(コンピュータ)は、上記説明した秘密計算方法をプログラムとして実行することで、秘密計算サーバ装置100_i,200_i,300_i(i=0,1,2,3,4)の各機能を実現することを可能にする。
【0154】
ただし、図10に示すハードウェア構成例は、秘密計算サーバ装置100_i,200_i,300_i(i=0,1,2,3,4)の各機能を実現するハードウェア構成の一例であり、秘密計算サーバ装置100_i,200_i,300_i(i=0,1,2,3,4)のハードウェア構成を限定する趣旨ではない。秘密計算サーバ装置100_i,200_i,300_i(i=0,1,2,3,4)は、図10に示さないハードウェアを含むことができる。
【0155】
図10に示すように、秘密計算サーバ装置100_i,200_i,300_i(i=0,1,2,3,4)が採用し得るハードウェア構成10は、例えば内部バスにより相互に接続される、CPU(Central Processing Unit)11、主記憶装置12、補助記憶装置13、およびIF(Interface)部14を備える。
【0156】
CPU11は、秘密計算サーバ装置100_i,200_i,300_i(i=0,1,2,3,4)が実行する秘密計算プログラムに含まれる各指令を実行する。主記憶装置12は、例えばRAM(Random Access Memory)であり、秘密計算サーバ装置100_i,200_i,300_i(i=0,1,2,3,4)が実行する秘密計算プログラムなどの各種プログラムなどをCPU11が処理するために一時記憶する。
【0157】
補助記憶装置13は、例えば、HDD(Hard Disk Drive)であり、秘密計算サーバ装置100_i,200_i,300_i(i=0,1,2,3,4)が実行する秘密計算プログラムなどの各種プログラムなどを中長期的に記憶しておくことが可能である。秘密計算プログラムなどの各種プログラムは、非一時的なコンピュータ可読記録媒体(non-transitory computer-readable storage medium)に記録されたプログラム製品として提供することができる。補助記憶装置13は、非一時的なコンピュータ可読記録媒体に記録された秘密計算プログラムなどの各種プログラムを中長期的に記憶することに利用することが可能である。IF部14は、秘密計算サーバ装置100_i,200_i,300_i(i=0,1,2,3,4)間の入出力に関するインターフェイスを提供する。
【0158】
上記のようなハードウェア構成10を採用した情報処理装置は、先述した秘密計算方法をプログラムとして実行することで、秘密計算サーバ装置100_i,200_i,300_i(i=0,1,2,3,4)の各機能を実現する。
【0159】
上記の実施形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限られない。
[付記1]
相互にネットワークで接続した5台の秘密計算サーバ装置を備え、第1ビット列に関するシェアと平文の値との入力から大小比較の結果のシェアを得る秘密計算システムであって、
前記秘密計算サーバ装置のそれぞれが、
前記第1ビット列と前記平文の値をビット列に変換した第2ビット列とを、ビットごとに一致するか否かを判定し、n番目のビットでは前記第1ビット列が1であり、かつ、前記第2ビット列が0であり、n+1番目より高位のビットでは前記第1ビット列と前記第2ビット列が一致している場合に0となる判別式の配列を計算する判別式計算部と、
前記判別式の配列をシャッフルすることで、何番目のビットに関して前記判別式が0になっているかの情報を秘匿するシャッフル部と、
前記判別式のシャッフルにおいて発生する通信において、前記5台の秘密計算サーバ装置のうち少なくとも3台以上の秘密計算サーバ装置から受信した同一の値となるはずの受信値を比較し、少なくとも2つ以上が同一である受信値を正しい値として採用する比較検証部と、
を備える、秘密計算システム。
[付記2]
前記シャッフル部は、前記5台の秘密計算サーバ装置のうち4台の秘密計算サーバ装置によって共有されている共有置換を用いて、前記5台の秘密計算サーバ装置における他の1台の秘密計算サーバ装置におけるシェアの置換を計算して構成されたミニシャッフルを、前記5台の秘密計算サーバ装置のうち4台の秘密計算サーバ装置を選択する5つの組み合わせに関して合成し、
前記比較検証部は、前記4台の秘密計算サーバ装置のうち少なくとも3台以上の秘密計算サーバ装置から受信した同一の値となるはずの前記シェアの置換を比較し、少なくとも2つ以上が同一であるものを正しい置換として採用する、
付記1に記載の秘密計算システム。
[付記3]
前記判別式にゼロでない乱数を乗算することで、判別式が0でない配列における値を秘匿する、付記1または付記2に記載の秘密計算システム。
[付記4]
前記第1ビット列は、乱数でマスクされた入力値から最上位ビットを除いた値であり、
前記第2ビット列は、乱数から最上位ビットを除いた値であり、
前記第1ビット列と前記第2ビット列との大小比較の結果に基づいて、前記入力値から最上位ビットを除いた値の計算の補正を行い、前記補正された入力値から最上位ビットを除いた値を入力値から減算することで入力値の最上位ビットを計算する、付記1から付記3のいずれか1に記載の秘密計算システム。
[付記5]
第1ビット列に関するシェアと平文の値との入力から大小比較の結果のシェアを得るために、相互にネットワークで接続した5台の秘密計算サーバ装置の一つであって、
前記第1ビット列と前記平文の値をビット列に変換した第2ビット列とを、ビットごとに一致するか否かを判定し、n番目のビットでは前記第1ビット列が1であり、かつ、前記第2ビット列が0であり、n+1番目より高位のビットでは前記第1ビット列と前記第2ビット列が一致している場合に0となる判別式の配列を計算する判別式計算部と、
前記判別式の配列をシャッフルすることで、何番目のビットに関して前記判別式が0になっているかの情報を秘匿するシャッフル部と、
前記判別式のシャッフルにおいて発生する通信において、前記5台の秘密計算サーバ装置のうち少なくとも3台以上の秘密計算サーバ装置から受信した同一の値となるはずの受信値を比較し、少なくとも2つ以上が同一である受信値を正しい値として採用する比較検証部と、
を備える、秘密計算サーバ装置。
[付記6]
相互にネットワークで接続した5台の秘密計算サーバ装置を用いて第1ビット列に関するシェアと平文の値との入力から大小比較の結果のシェアを得る秘密計算方法であって、
前記秘密計算サーバ装置のそれぞれが、
前記第1ビット列と前記平文の値をビット列に変換した第2ビット列とを、ビットごとに一致するか否かを判定し、n番目のビットでは前記第1ビット列が1であり、かつ、前記第2ビット列が0であり、n+1番目より高位のビットでは前記第1ビット列と前記第2ビット列が一致している場合に0となる判別式の配列を計算し、
前記判別式の配列をシャッフルすることで、何番目のビットに関して前記判別式が0になっているかの情報を秘匿し、
前記判別式のシャッフルにおいて発生する通信において、前記5台の秘密計算サーバ装置のうち少なくとも3台以上の秘密計算サーバ装置から受信した同一の値となるはずの受信値を比較検証し、少なくとも2つ以上が同一である受信値を正しい値として採用する、
秘密計算方法。
[付記7]
前記シャッフルは、前記5台の秘密計算サーバ装置のうち4台の秘密計算サーバ装置によって共有されている共有置換を用いて、前記5台の秘密計算サーバ装置における他の1台の秘密計算サーバ装置におけるシェアの置換を計算して構成されたミニシャッフルを、前記5台の秘密計算サーバ装置のうち4台の秘密計算サーバ装置を選択する5つの組み合わせに関して合成し、
前記比較検証は、前記4台の秘密計算サーバ装置のうち少なくとも3台以上の秘密計算サーバ装置から受信した同一の値となるはずの前記シェアの置換を比較し、少なくとも2つ以上が同一であるものを正しい置換として採用する、
付記6に記載の秘密計算方法。
[付記8]
前記判別式にゼロでない乱数を乗算することで、判別式が0でない配列における値を秘匿する、付記6または付記7に記載の秘密計算方法。
[付記9]
前記第1ビット列は、乱数でマスクされた入力値から最上位ビットを除いた値であり、
前記第2ビット列は、乱数から最上位ビットを除いた値であり、
前記第1ビット列と前記第2ビット列との大小比較の結果に基づいて、前記入力値から最上位ビットを除いた値の計算の補正を行い、前記補正された入力値から最上位ビットを除いた値を入力値から減算することで入力値の最上位ビットを計算する、付記6から付記8のいずれか1に記載の秘密計算方法。
[付記10]
第1ビット列に関するシェアと平文の値との入力から大小比較の結果のシェアを得るために、相互にネットワークで接続した5台の秘密計算サーバ装置に秘密計算をさせる秘密計算プログラムであって、
前記第1ビット列と前記平文の値をビット列に変換した第2ビット列とを、ビットごとに一致するか否かを判定し、n番目のビットでは前記第1ビット列が1であり、かつ、前記第2ビット列が0であり、n+1番目より高位のビットでは前記第1ビット列と前記第2ビット列が一致している場合に0となる判別式の配列を計算し、
前記判別式の配列をシャッフルすることで、何番目のビットに関して前記判別式が0になっているかの情報を秘匿し、
前記判別式のシャッフルにおいて発生する通信において、前記5台の秘密計算サーバ装置のうち少なくとも3台以上の秘密計算サーバ装置から受信した同一の値となるはずの受信値を比較検証し、少なくとも2つ以上が同一である受信値を正しい値として採用する、
秘密計算プログラム。
【0160】
なお、引用した上記の非特許文献等の各開示は、本書に引用をもって繰り込むものとする。本発明の全開示(請求の範囲を含む)の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の全開示の枠内において種々の開示要素(各請求項の各要素、各実施形態ないし実施例の各要素、各図面の各要素等を含む)の多様な組み合わせ、ないし、選択(部分的削除を含む)が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。さらに、上記引用した文献の各開示事項は、必要に応じ、本発明の趣旨に則り、本発明の開示の一部として、その一部又は全部を、本書の記載事項と組み合わせて用いることも、本願の開示事項に含まれるものと、みなされる。
【符号の説明】
【0161】
100,200,300 秘密計算システム
100_i,200_i,300_i 秘密計算サーバ装置
101_i,201_i 判別式計算部
102_i,202_i シャッフル部
103_i,203_i 比較検証部
301_i 乱数生成部
302_i 大小比較部
303_i 繰り上がり部
304_i 最上位ビット計算部
10 ハードウェア構成
11 CPU(Central Processing Unit)
12 主記憶装置
13 補助記憶装置
14 IF(Interface)部
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10