相互通信を排除したマルチパーティ計算モデル※随時更新
NIMPC
NIMPC(Non-Interactive-Multi-party-Computation)はマルチパーティ計算モデルの一つ。2014年、任意関数のNIMPCが実現された。従来のマルチパーティ計算モデルでは計算時の通信回数がボトルネックになっていたのが、NIMPCでは相互通信が排除されている。この記事では、自分が分かりにくいと感じたところを実例を交えながら紹介する。 ※このマルチパーティ計算モデルのマルチパーティ計算モデルにおける性能と先行研究についてはまだ調査不足
- NIMPC
- 簡単な流れ
- NIMPCに登場する定義一覧
- NIMPCの構成
- T-robustの安全性
- NIMPCプロトコル
- NIMPCプロトコルの指示関数による読み替え
- 指示関数の上位プロトコル
- まとめ
- 参考文献
簡単な流れ
NIMPCモデルを提案しよう!
NIMPCモデルからNIMPCプロトコルを作ろう!
指示関数を束ねて、指示関数のNIMPCプロトコルをサブルーチンとしてもつようなNIMPCプロトコルで真偽関数を実現してみよう!
※ここでは指示関数は定義域の唯一の値に対して1を出力し、それ以外は0を返すような関数。
NIMPCに登場する定義一覧
- 添え字の集合
例えばパーティが1からnまであるとすれば、
- 添え字の部分集合
例えばに対して、、
- 関数の入力空間
の直積で表される空間。とすると、]であるようなの持つ入力空間は
- 乱数空間
の直積で表される空間。
- メッセージ空間
局所符号化関数の終域。局所符号化関数の始域はとの直積となる。
- 出力空間
復号関数の終域。復号関数の始域はである。
書き方は構成によってちょっとずつ違う。rは乱数、xは入力、mはメッセージであることは変わらない。
NIMPCの構成
関数族に対して、以下のようにNIMPCは以下のようなモデルである。
NIMPCの何がうれしいのかと言えば非対話的であるところだ。モデルを見ると乱数を生成し、メッセージを生成して送るだけで任意関数の評価ができると言っているのである。以下は任意関数を評価しつつ、このモデルが安全であることを示そう。なお、マルチパーティ計算においての安全性は入力と出力から得られる情報以外は何も得られず、臨んだ出力が得られることが求められる。これをprivacyとcorrectnessというが詳しくは別に解説記事を出す。
具体例
例えば多入力関数をのように総乗を計算する関数とする。この時、はをもとにまでの一様な乱数と、を生成する。この時、はの積の逆数となっているので、必ずになる。局所符号化関数をとする。この時、
つまり、結果はである。ちなみに論文内ではこれを総和で計算する方法が紹介されている。なのでは関係のある乱数である。
T-robustの安全性
NMPCにおける安全性は関数というものを用いて、シミュレートできるかどうかで判定する。 とすると、t-robustであるとはすべてのサイズt以下のTに対してT-robustならt-robustという。fully robustというのはn-robust(つまり全サイズにおいてrobustである)のことを言う。また、関数族hに対してt-robustならt-robust NIMPCプロトコルという。 大きさがtの結託したパーティをTとし、のうちの入力を固定したものを とする。このとき、ができる、つまり、Tが と知っている情報を使ってを入手できれば、T-robustである。 インフォーマルにはT-robustはパーティTに関数から漏れる情報以上のことは何も情報を漏らしていないということを意味している。
具体例
ここで、かつ,であるとしよう。
を入手できた。 次にをランダムに選ぶ。のみ、とする。 このときを使って、とをシミュレーションできる。
実際、知っている情報とを用いることで、
であるので、シュミレーションできている。2行目ではをつかって、を消去している。
NIMPCプロトコル
NIMPCモデルをもとに、対話通信するプロトコルを定義する。をn人のプレイヤーと各プレイヤーが持つがあるプロトコルとする。この時、という入力がなく出力をするだけのサーバを作る。は追加の入力とする。
- 準備フェーズ
関数を、関係のあるn個のを生成する。これを各が受け取る。
- 対話通信フェーズ
各プレイヤーはによって、秘密とを使って、メッセージを生成しに送る。(各での処理)
- 出力フェーズ
は受け取ったn個のメッセージからでを再構成する。
NIMPCプロトコルの指示関数による読み替え
指示関数を用いて構成する
1. 指示関数の族からNIMPCを構成する。
2. 指示関数の和から指示関数のNIMPCを構成する。NIMPCをもとにNIMPCを構成する。
はいくつかのとからなる族である。この族に含まれるは以下のように分類される。
この指示関数族によって構成する。 すべてのサイズtの連合Tが必要な情報だけ得られる。我々ものモデルではのメッセージから多くの出力を計算できる。 mとrを明らかにすることが、T以外のパーティの入力を得るのと同じ。つまり、T以外のパーティの入力を固定したh以上の情報を得られない。
指示関数のNIMPC
をn人のプレイヤーと各プレイヤーが持つがあるプロトコルとする。この時、という入力がなく出力をするだけのサーバを作る。は追加の入力とする。また、である。
準備フェーズ
なら、s個の次元ベクトルからなる集合を生成する。
なら、s個の次元ベクトルからなる集合をに対してを満たすように選ぶ。(例えば、はランダムに選び、とすることでそれは実現できる)
そして、次元ベクトルを各に送る。
対話通信フェーズ
各プレイヤーは、を持っている。を関数に入力したいとすればであるようなをとおいて、に送る。(各での処理)
出力フェーズ
は受け取った個のメッセージからを計算する。結果が0なら1、そうでなければ0をは出力する。 の和は、かつなら0になるように選ばれているので0、は1を出力する。それ以外は0を出力する。つまり、が、が...というように各パーティがを入力し、全体としてになっているときだけは1を出力する。
具体例
準備フェーズ
とすると、のときに対し、を満たすように
をランダムに生成する。このとき、はランダムに選び、とする。そして、はに送られる。
対話通信フェーズ
プレイヤーで考える。を持っている。プレイヤーがを関数に入力したいとすればを、を関数に入力したいとすればをとおいて(入力は)、に送る。この時、がそれぞれを入力していればを入力したことになる。
計算フェーズ
プレイヤーが受け取ったがだとすれば、
でありは1を出力する。これはつまりを計算したことになる。
指示関数の上位プロトコル
指示関数族のうち、ある入力によって1になるだけ集めて族を構成する。つまり、。この構築方法には二つの問題点がある。
- 関数が1を返すような1の個数が分かってしまう。NIMPCにおいては関数を隠すことを考える。その時、 で指示関数を和から関数を作ると、となる関数の個数から計算している関数が推測できてしまうので和にを含める。具体的にはならにし、ならとし、と定義しなおす。
- となったとき、なので自分の入力と合わせて他のパーティの入力が分かってしまう。置換を使って入力を隠す。置換はに含まれるの順番を並び替える。
任意の真偽関数評価
をn人のプレイヤーと各プレイヤーが持つがあるプロトコルとする。この時、という入力がなく出力をするだけのサーバを作る。は追加の入力とする。
準備フェーズ
- はとなるようなxの集合とする。
となるようなは今回の構成では複数存在しているので、そのようなとごとに行う。
- その後、行列を生成する。この行列はを行に持つような行列で行列である。例えば、
(の列)を各に送る。
対話通信フェーズ
各プレイヤーはを入力するために、行列を作る。はを各要素とする行列として定義される。
の行であるをに送る。(各での処理)
出力フェーズ
あるbに対し、を出力し、残りは0になる。ここで1を返すようなつまり、
出力フェーズであるbとなっているのは、前回と違って、一つのに対して値を返すわけではないこと、またbが置換されていること、が影響している。
具体例
準備フェーズ
OR関数のように和で表すことを考えよう。として、である。
入力x | 入力y | x or y |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
になるようなはである。よって、となる。 このままだと1の個数が分かってしまうので、に0を返すことを保証する関数(後でわかるが、置換するため何も返さないようなが欲しい)を含め、とする。この関数のひとつひとつに対して、NIMPCプロトコルを呼び出してる。つまりこのNIMPCプロトコルは、関数の含む関数の数、つまり4つだけ、並列にが動いている。
定義から、明らかにであり、である。
、つまりについて