プライバシーテック研究所

【技術】秘密分散法とは? 数式を用いて解説

2020.03.30

はじめに

この記事では「秘密分散法」についての簡単な紹介を行います。秘密分散法とは、データを「シェア」という特殊なパーツに分解して、複数パーティ間で共有する方法です。重要なのは、一つ一つのシェアからは元のデータに関する情報は得られず、一定数のシェアを集めることで初めて元のデータを復元できるという性質です。例えば、(t, n)秘密分散法と書けば、データをn個のシェアに分解して、t個以上のシェアを集めることで復元できることを意味します。ただし、t <= nであると定義します。tのことをしばしばしきい値と呼んだりします。以下では、秘密分散法の代表例である「加法的秘密分散」と「シャミア秘密分散」について紹介します。

加法的秘密分散

加法的秘密分散は最も直感的に理解しやすいであろう手法の一つです。加法的秘密分散法は、 (n, n) 秘密分散法です。つまり、全てのシェアを集めなければ元のデータを復元できません。

ある秘密情報sのシェア化は以下のように行われます。

パーティ集合 : {P_1, … , P_n}

s のシェア : {s_1, … , s_n}(s_i は P_i が所持するシェア)

  1. P_1 以外のパーティ P_i (i = 2, …, n) がそれぞれ乱数 r_i を生成する
  2. 秘密情報提供者 C に対し、P_1 以外のパーティ P_i が独立して r_i を送信する
  3. C は P_1 にm = s – r_2 – … – r_n を送信する
  4. P_1 は受け取った m を自分のシェアとする。つまり s_1 = m とする
  5. P_1 以外のパーティ P_i は s_i = r_i とする

上記のシェア化によって、元のデータsが復元できることを確かめるのは簡単です。加法的秘密分散法では、名前の通り全シェアを足し合わせることで復元できます。

s_1 + s_2 + … + s_n = (s – r_2 – … – r_n) + r_2 + … + r_n = s + (r_1 – r_1) + (r_2 – r_2) + … + (r_n – r_n) = s

シャミア秘密分散

こちらもとても有名な秘密分散手法です。シャミア秘密分散法は (t, n) 秘密分散手法です。1 < t <= n を満たすしきい値t を自由に設定できます。

シェア化の手順を説明する前に、シャミア秘密分散を理解する上で欠かせない事項について述べます。ここでは、t-1 次多項式 f(x) = a_(t-1)x^n + … + a_1x + a_0 について考えます。ネタ晴らしをすると、この f(x) の 0 次の項 a_0 に秘密情報 s が入ります。また、a_i (i=0, 1, …, n) は全て未知であることを前提としています。秘密情報s (= f(0) = a_0) を得るためには、f(x) 上のt個の点 (x_j, f(x_j)) (j = 1, 2, …, t) についての情報が必要です。ただし、j ≠ k の時 x_j ≠ x_kです。t 個の未知数 a_0, a_1, …, a_(t-1) を一意に求めるためには、t 個の一次独立な方程式が必要であることは自明です。実際の復元アルゴリズムの中でs (= f(0) = a_0) を求める際には、連立方程式を解かずにラグランジュ補間というものを用います。

ここまで読めば勘の良い読者は既に気付いていると思いますが、秘密情報 s のシェアは f(x) = a_(t-1) x^n + … + a_1 x + s 上の点として与えらます。つまり、n 個のパーティ P_i (i=1,…,n) に対し、シェア s_i = f(i) (i=1,…,n) を分配するということです。n 人の内いずれかt 人がシェアを開示することで、s を復元できます。ラグランジュ補間は、t-1 次多項式fにおいて、f 上の t 個の点を元に、f 上の任意の 1 点 (z, f(z)) を求めることが出来るアルゴリズムです。連立方程式を解くことでも s を求めることは可能です。しかし、連立方程式を解く代表的なアルゴリズムであるガウスの消去法の計算量が O(t^3) であるのに対し、ラグランジュ補間の計算量は O(t^2)(実装によっては O(t))であるため、この場面ではラグランジュ補間の方が優れています。

ある秘密情報sのシェア化は以下のように行われます。

パーティ : {P_1, … , P_n}

s のシェア {s_1, … , s_n}(s_i は P_i が所持するシェア)

  1. 秘密情報提供者 C は乱数 a_1, …, a_(t-1) を用いて t-1 次多項式 f(x) = a_(t-1) x^n + … + a_1 x + s を作成する
  2. C は各パーティ P_i に f(i) の値を送信する(i = 1, …, n)
  3. P_i は受け取った f(i) を自分のシェアとする。つまり、s_i = f(i) とする。

まとめ

この記事では、秘密分散法の中でも特に有名で理解しやすい 2 つの手法について簡単に説明しました。弊社が提供する一部サービスの根幹となる MPC とは、秘密分散法によってデータを分散したまま各種計算を行う技術です。なぜ分散した状態で計算可能であるのかはまた別の記事にて記していきます。