なんとなく分かってもらうためのSPDZ解説(プリプロセスフェーズ編)
SPDZはsomewhat準同型暗号(以下SHE)を使うことで高い効率性と安全性を実現したマルチパーティ計算プロトコルです。
SHEによる効率的なプリプロセスフェーズの実現。
semi-honest secureよりも高い、active secureの効率的な実装。
active secureなので、n個のパーティのうちn-1がcorruptされていてもUC安全性が保障される。
のような性質を持っています。これについて解説します。
はじめに
ここから登場する記号は太字の場合はすべてである有限体上の次元ベクトルです。 そうでなければである有限体の要素です。
SHEとは加算と乗算に対して準同型性を持つが、計算回数が制限されたものです。SHEのなかでもBVというスキームを活用します。BVでは暗号文のまま十分な数と加算と1回の乗算を行うことが出来ます。暗号文での乗算が1回を超すと、正しく復号できなくなることに注意してください。
SPDZではSHEの準同型性を生かし、平文を暗号化し、暗号文の状態でブロードキャストや計算を行います。この時、
暗号文なので平文の情報は漏れない。
SHEの準同型性によって暗号文のまま計算ができる。
となります。こうして、プリプロセスフェーズで必要な情報を各パーティが使用可能な状態にしておくことで、オンラインフェーズでの計算量を減少させます。
加算と乗算
オンラインフェーズでも述べますが、加算と乗算の方法について説明します。 秘密分散方式として、加法的秘密分散を使っています。をを満たすようなに分割します。このことをと書き、各のことをシェアということにします。
例えばとして、とすると、
が明らかです。更にそのまま加算を行うこともできます。がにを足したい場合は、にを足します。実際、
なので加算できています。
乗算の場合はMultiplication Triplesを使います。Multiplication Triplesについては以下のサイトが参考になります。
ここではMultiplication Triplesのことをトリプルと呼ぶことにします。
MACでの認証
さて、SPDZには二つの値表現が登場します。SPDZではシェアをパーティの持つ秘密鍵やグローバル鍵で認証してあげることで、不正を検出します。この認証に使う認証子をMAC(Message Authentication Code)と呼ぶことにします。
はMACで認証されたシェアです。この値は単一の値を表現しているわけではなく、以下のような状態を表します。
は各パーティが個人で所持している値です。はすべてのパーティが参照できる値です。
なお、このMACはがないとチェックできないので計算が全て終わってからでないと誰かが不正したことを検出できません。
は秘密鍵で認証された値です。この値も単一の値を表現しているわけではなく、以下のような状態を表します。論文や図では〚〛を使用していますが、texで出す方法が分からないので以降は[]で代用しています。
は計算は各パーティの所持するシェアです。
はその計算における不正を検証するためのMACです。
この状態では、ブロードキャストしあってシェアを集めることでに認証されたを復元できます。例えば、下の図の赤く囲われた部分をブロードキャストしあって集めることでに認証されたを復元できます
を持っているなら値の正しさを検証できます。以外のについても同様です。
との違いはなしにを手にいられることです。そのため、オンラインフェーズでを公開するより前に値が必要な時に利用されています。
この表現はMACの認証に使用するグローバル鍵の公開を遅らせるために存在しています。各パーティががなければMACを確認することができないませんが、があると偽造できてしまいます。偽装を防ぐために各パーティの秘密鍵で認証させて、の公開を遅らせます。
サブプロトコル
プリプロセスフェーズでは同じような処理を繰り返し行う部分があるため、それを一般化したものを定義します。のようになっていますが、は各パーティのローカルに保持する値であることに注意してください。
平文のゼロ知識証明
任意の平文に対する正しい暗号文を共有するために以下の処理を行います。これをとしましょう。
各パーティはメッセージ空間からを選ぶ。各パーティの生成した平文の和はとなる。
各パーティがのように暗号化してブロードキャストする。
各パーティは暗号文に対応する平文を知っていることを証明する。
各パーティはを計算する。
暗号文に対応する平文を知っていることを証明する。
この処理によりを正しく共有し、を入手できます。
PAngle
は任意の平文に対するシェアを生成するために以下の処理を行います。これをとしましょう。
暗号文と、平文のシェアを入力にを生成する。各パーティはグローバル鍵の暗号文との積を計算し、を計算します。はで認証したMACの暗号文であり、これをReshareすればMACを共有できます。暗号文での乗算回数は1回です。
PBracket
は任意の平文に対するシェアを生成するために以下の処理を行います。これをとしましょう。
暗号文と、平文のシェアを入力にを生成します。各パーティは秘密鍵の暗号文との積を計算し、を計算します。はで認証したMACの暗号文であり、これをReshareすればMACを共有できます。暗号文での乗算回数は1回です。
Reshare
は暗号文からシェアを生成するプロトコルです。
暗号文に対応する平文のシェアを秘密分散します。第二引数にのコマンドを入力されると、平文を暗号化しているが暗号文のような暗号文も同時に生成します。暗号状態での乗算回数は0回です。
は乗算を1回も行わないので、やと組み合わせても乗算回数が1回を超えることがありません。
プリプロセス(オフライン)フェーズ
サブプロトコルを活用して平文の情報を一切明かすことなく、プロトコルの初期化やトリプルとペアの共有を行うことができます
具体的にはオンラインフェーズで利用する