なんとなく分かってもらうための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回を超えることがありません。
プリプロセス(オフライン)フェーズ
サブプロトコルを活用して平文の情報を一切明かすことなく、プロトコルの初期化やトリプルとペアの共有を行うことができます
具体的にはオンラインフェーズで利用する