問題に戻る


弊社で実際に使われている加法的秘密分散法と言う技術を用いたアルゴリズムを紹介します。

加法的秘密分散法のアイデアを簡単に説明すると、登場人物が $M$ 人いる時、他者に知られたくない数 $x$ を $x^{(1)} + x^{(2)} + \cdots + x^{(M)} = x$ を満たすように $M$ 個の数 $x^{(1)}, x^{(2)},\dots,x^{(M)}$ 個に分割し、 $i$ 番目の人には $x^{(i)}$ だけを配布すると言うものです。

分割された $x^{(1)}, x^{(2)},\dots,x^{(M)}$ を $x$ の Share と呼び、逆に $x$ を Share $x^{(i)}$ の真値と呼びます。

今回の例に当てはめると、太郎くんは各 $1\leq i\leq n$ に対し $a_i$ を $a_i^{(1)} + a_i^{(2)} = a_i$ を満たすように二つの数に分割し、花子さんに $a_i^{(2)}$ のみを伝えます。

この時分割の方法は太郎くんしか知らないため、花子さんは $a_i^{(2)}$ から $a_i$ についての情報は一切得ることができません。

同様にして花子さんは 各 $1\leq i\leq n$ に対し $b_i$ を $b_i^{(1)} + b_i^{(2)} = b_i$ を満たすように二つの数に分割し、太郎くんに $b_i^{(1)}$ のみを伝えます。

次に以下で説明する BMT アルゴリズムを用いて、各 $1\leq i\leq n$ に対し $c_i \coloneqq a_ib_i$ の Share $c_i^{(1)}, c_i^{(2)}$ (すなわち $c_i^{(1)} + c_i^{(2)} = c_i = a_i b_i$ が成立)をそれぞれ太郎くんと花子さんに配布します。

最後に、太郎くんと花子さんはそれぞれ $\sum_{i=1}^n c_i^{(1)}$と $\sum_{i=1}^n c_i^{(2)}$ の値を公開します。

この時

$$ \begin{aligned}\sum_{i=1}^n c_i^{(1)} + \sum_{i=1}^n c_i^{(2)} &= \sum_{i=1}^n (c_i^{(1)} + c_i^{(2)})\\&=\sum_{i=1}^n a_ib_i\end{aligned} $$

より、内積 $\bm{a}\cdot\bm{b}$ を求めることが出来ます。

BMT(Beaver Multiplication Triples)

人1が Share $a^{(1)}, b^{(1)}$ 、人2が Share $a^{(2)},b^{(2)}$ を持っているとします。($a^{(1)} + a^{(2)} = a, b^{(1)} + b^{(2)} = b$ が成立)

この時, 各人の持っている数の値を完全に他者に秘密にしたまま、$c\coloneqq ab$ の Share $c^{(1)}, c^{(2)}$ をそれぞれ人1, 2に配布するアルゴリズムを以下で紹介します。

まず、人1でも人2でもないあなたが $xy = z$ を満たす $(x,y,z)$ を秘密裏に生成します。

次にそれらをそれぞれ Share $x^{(1)}, x^{(2)},y^{(1)}, y^{(2)},z^{(1)}, z^{(2)}$ に分割し, 人 $i$ に $x^{(i)}, y^{(i)}, z^{(i)}$ を配布します。

人 $i$ は Share を受け取り(それぞれ $a-x, b-y$ の Share である) $a^{(i)} - x^{(i)}, b^{(i)} - y^{(i)}$ を相手に公開します。(あなたには公開されません。あなたの役割は $x^{(i)}, y^{(i)}, z^{(i)}$ を配布したところまでです。)

この操作によって人が $a,b$ についての情報を一切得ることが出来ないことに注意してください。(例えば人2は $x^{(1)}$ を知らないため、公開された $a^{(1)}-x^{(1)}$ の値から $a^{(1)}$ の値を求めることが出来ません)