秘密分散方式のモデル化とマルチパーティ計算手法について解説
- 参考論文 Secret-sharing:a survey https://www.researchgate.net/profile/Amos_Beimel/publication/220776045_Secret-Sharing_Schemes_A_Survey/links/09e41513f14a20f236000000.pdf
この論文は暗号の中でも秘密分散法に焦点を当てたサーベイ論文。秘密分散法方式ををモデル化し、マルチパーティ計算を行う手法について述べる。 その後、モデル化した秘密分散法によってその秘密分散方式のシェアの長さの下界を求める。この論文に書いてあることを関連性に注目しながらざっとまとめた。
用語
シェア
秘密分散方式においては、秘密をのように分割して、パーティに共有するが、このをシェアとここでは呼ぶ。
アクセス構造
アクセス構造とは秘密を復元可能なパーティの集合の集合のこと。秘密を復元可能な集合とは、その集合に属するパーティのシェアを全て集めると秘密を復元できるような集合のこと。
monotone
をアクセス構造とする。は復元できるユーザの集合の集合族である。この時、であるときならのとき、Aをmonotone(単調族)という。以後はmonotoneなアクセス構造を単調アクセス構造と呼ぶ。秘密分散はmonotoneでなければならない。monotoneであるとは、例えばパーティ1,2が集まると秘密が復元可能とする。すると、パーティ1,2,3も当然復元可能である。これがmonotoneである。
情報比
秘密とその秘密に対するシェアの長さの比を情報比(information ratio)という。なお、情報比は1(つまり秘密とシェアの長さが同じ)が最適であり、1より大きくならない(つまりシェアは秘密以上の長さになる)ことが知られている。
秘密分散法について
(k,n)閾値法
ポピュラーな方式で多くのサイトや書籍で解説されているので以下のようなサイトを参考にしてほしい。
https://www.slideshare.net/AkitoTabira/ss-56244856
自分で実装したこともあった。
なお、この秘密分散方式はシェア長が秘密と同じ長さになる、つまり最適である。このように秘密が一定の閾値に達しなければ何も情報が漏洩しない方式を完全秘密分散方式という。 だが、シェアの情報量が多いと伝達効率が悪いので、伝達効率が良くなるように考えられたランプ型というものがある。これは、シェアが短くなる代わり閾値よりも小さい値で少しずつ秘密情報が漏洩することを許容する方式である。この方式ではt-out-of-n(n個のうちt個が集まったら秘密が復元できる)つまり という限られたアクセス構造しか実現できない。
無向グラフによる構成方法[15]
閾値秘密分散方式とは異なる秘密分散方式の実現方法である。 アクセス構造をグラフ頂点の集合によって表現する手法。無向グラフを利用したをから到達できる頂点の集合、をi<jとしパーティを表すとする。この時、辺の集合(パーティの集合)がに到達できる経路を持つなら、辺の集合はアクセス構造である。
秘密分散の構成法
を0か1の二値をとる秘密情報とする。ディーラーはかつとし、からまでは一様乱数を使う。辺に対応するシェアはである。
シェアから以下の方法で秘密を再構成できる。この方法は集めたシェア(辺)にに到達できる経路がない、すなわちアクセス構造に含まれない時、秘密を復元できない。
伊藤、西関、斎藤の手法
任意の単調アクセス構造に対して、秘密分散方式を構築する方法を示した。以外のアクセス構造でも実現可能である。
秘密分散方式の構成法
を単調アクセス構造とし、秘密を復元可能な集合をとする。ディーラーは[tex:B={p{i_1},\dots,p{i_l}}]ごとにをシェアとして分割する。
- 個の一様な乱数ビットを選択する。
- を計算する。
- をに与える。
この時、[tex:p{i_1}]は、[tex:p{i_2}]ははを持つ。 この方式はあるパーティがかつであるとき、のシェアとのシェアを保持することになり効率が悪い。必要最低限にだけ共有する方法があるが、そのBの数が多いとやはり効率が悪くなる。
BenalohとLeichterの手法
西関らの手法を更に一般化した効率的な手法。アクセス構造の表現力がより高くなる。最低限のパーティにシェアを配ることを考える。ただし、この手法を使ってもシェアの長さがパーティ数に従う指数関数になる。
秘密分散方式の構成法
以下のアルゴリズムを再帰的に用いて構成する。 、を単調アクセス構造とする。この二つにはminimum authorized setに属さないパーティがある可能性があるのでかのどちらかだけであれば、かつであればとしてそれを排除する。
の時、秘密分散スキームを用いて、独立に秘密を分散する。これは二つのアクセス構造に冗長なパーティが無かったことを意味する。
の時、秘密分散スキームを用いて、一様乱数に選び、を計算し、を使ってにを分散する。この時、はを計算でき、秘密を復元できる。これは以外はを復元できず、かのどちらかしか復元できないことを意味する。
Monotone-span-program
線形秘密分散方式の情報比の下限値はmonotone-span-programのシェアのサイズの下限値に帰着できるという。このことを使って下限値を証明すれば、線形秘密分散方式の下限値を証明できる。 monotone-span-programによって構成されたスキームの情報比はとなる。
定義
三つ組で表す。は有限体、は上の行列、は列番号とパーティ番号を対応させる関数である。 例えばとなったら、1行目をパーティと対応させ、となったら、2,3行目をパーティと対応させる。この時、パーティと対応する行をと書く。 をに対してを適用した部分行列とする。は全単射とは限らないのでの行数がとは限らない(行数が減るかもしれない)。
- 行列がspanであるとは(日本語で言うと「張る」)
となるようないくつかのベクトルが存在するようなのことをspanな行列という。また、その行列は完全階数となっている必要がある。がに対してspanであることと、が集合をacceptすることと、集合はminimum authorized setであることは同値である。なおがアクセス構造に含まれているときだけ受け入れられるなら、アクセス構造はを受け入れる。
Multi-linear Monotone-span-program
今までは秘密は一つの体で定義された一要素のものに限られていた。この手法では二つ以上の体の要素からなる秘密でも秘密分散方式を実現できるmonotone-span-programを構成する。 この構成では、通常の線形秘密分散方式と比べ情報比が効率化される。具体的にはを秘密の次元数とすると、となる。
定義 多重線形モノトーンスパンプログラムはの4つ組で表される。ここでは有限体であり,は体上の行行列であり, はの各行をパーティと対応付ける。はに含まれるベクトルの集合であり,,1≤c<bを満たす。
- の行は の各ベクトルに対してspanである。この場合、MがAを受け入れると言う。
- の各行はに対してspanであるような線形空間の非ゼロのベクトルに対してspanである。
マルチパーティ計算
このマルチパーティ計算では、honest-but-curiousを仮定する。つまり最初は全てのパーティはプロトコルに従うが、プロトコルの最後にパーティの何人かが結託して得られたメッセージから情報を得ようとるする、という敵対者に対して情報理論的安全性を実現するようなマルチパーティ計算を構成する。
マルチパーティ計算の実現法
と をそれぞれシェア とを生成する最大 の次数の多項式とする。ととする。ここで、 はn個の非ゼロの異なり、かつ全てのパーティから既知の値である。例えば、であるようなnが素数なら、を得る。
とすると、
(とを使った。)
(とを使った。)
となるのでこれはシェアの和になっている。これを使えば各パーティに秘密,のシェア,をそれぞれ計算し、を計算することで、足し算ができる。
加算の実現方法
各パーティは,から計算されたとを受け取る。
各パーティはを計算する。
を集めて秘密を復元すると、それはになっている。このように加算においては通信が発生しない
乗算の実現方法
各パーティは,から計算されたとを受け取る。
各パーティはを計算する。その結果からシェアを計算して、それをとしてに送る。
は、Shamirの(2t + 1)-out-of-nスキームにおける秘密の再構成のための定数である。各パーティはを計算する。
はの演算結果で、これだけでは復元が出来ない。ステップ2で各パーティはを手に入れ、(は最初から持っている。一番目のインデックスはここではシェアを送ってきたパーティ$のになる)、それからを計算できる。
つまり最終的には、各パーティはというから計算されたシェアを保持していることになる。
マルチパーティ計算による任意回路の計算方法
回路への入力時に各パーティに秘密をシェアする。一つのゲートが進むごとに全ての各パーティが計算を行うので、一つのゲートを全パーティが共有していると考える。例えば、次に出てくるの処理は各パーティで行う処理である。なお、各シェアはならが持っているの秘密のシェアと読める。
各パーティは秘密一つにつき一つのシェアを保持する。つまりについてはだけを持つ。とだったらとを持つ。
初期化ステップ
まず各パーティはからシェアを計算する。のシェアを[tex:q{i,1},q{i,2},\dots,q_{i,n}]とし、はにに送る。 つまり各パーティが最初に持っているのは、のシェアの一部であるである。これらは個の入力ゲートに入力されたものである。
計算ステップ
ゲートの入力辺がとの二つだとする。なおここj,k<iである。つまりとからへの経路が存在し、はとより後ろにある。各パーティが入力されたシェア はの出力ではの出力である。
が加算ゲートの場合、各パーティはその場でを計算し、これをの出力とする。
が乗算ゲートの場合、各パーティは入力の積を取るために、上記に述べた乗算方法を利用する。
秘密の復元
各パーティ は自分のシェア を に送る.パーティ はシェア から秘密を復元し、すべてのパーティにを送信する。各パーティはこのを出力する。 どの個のパーティも(t+1)-out-of-n秘密共有スキームの最大個のシェアしか見られないので、そのパーティの個の集合はシェアの入力の集合と和から秘密の情報を一切得られない。
まとめ
マルチパーティ計算と秘密分散に関する論文についてまとめた。秘密分散にも多くの実現方法があることが確認できたのでよし!