Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Lifted-ElGamal 暗号による,Argmax とベクトルの内積近似計算の二者間秘匿計算プロトコルとその応用

herumi
January 24, 2024

Lifted-ElGamal 暗号による,Argmax とベクトルの内積近似計算の二者間秘匿計算プロトコルとその応用

herumi

January 24, 2024
Tweet

More Decks by herumi

Other Decks in Technology

Transcript

  1. 本発表の位置づけ 既存方式 FHE(完全準同型暗号, BGV/BFV/CKKSなど), Garbled circuit, 秘密分散など 既存方式と本発表方式 方式 オフライン処理

    通信回数 トータル通信量 CPU時間 FHE 不要 0 0 大きい 本発表 不要 ? ? ? 秘密分散 必要 多い 多い? 小さい 目的 Lifted ElGamal暗号+通信でどこまでできるのか, ?を埋めたい 3 / 19
  2. ベクトル検索の秘匿化 クライアントとサーバの入力 クライアントC : ベクトル サーバS : ベクトル 出力 コサイン類似度で

    に最も近いベクトル を探す CがSに を送り, Sは を求めて返す ※ 応用例は後述 これをAHE(Lifted ElGamal暗号)で実現するプロトコルの提案 4 / 19
  3. EOHVプロトコル OHV (One Hot Vector)とEOHV (Encrypted OHV) . OHV(m):= =(0,

    ..., 1, 0, ...) : 番目だけ1で残り0の 次元ベクトル mのOHVの暗号文 : EOHV(m):=(Enc( )) = (Enc(0), ..., Enc(1), Enc(0), ...) サーバがc=Enc(m)からEOHV(m)を計算する(SCIS2020縫田たち) クライアントはAHEの秘密鍵を持ち, サーバは対応する公開鍵を持つ 図はsemihonestモデル. maliciousモデルはSCIS2021光成, 縫田参照 5 / 19
  4. 関数評価 1変数整数値関数f(x)をEOHV(m)に適用する eval(f, EOHV(m)) := 「AHE+通信」で任意の計算ができる 注)1個のEOHV(m)に対して複数の を適用できる EOHV(m) →

    Enc( ), Enc( ) EOHVプロトコルのコスト 通信 サーバとクライアント : 個の暗号文を送りあう 演算 サーバ : 個の暗号文の乱数倍( は乱数無しの固定値でよい) クライアント : 個の暗号文の0判定と(事前計算可能な) 個の暗号文の生成 をEOHVプロトコルのサイズと呼ぶ 6 / 19
  5. max(a, b)の秘匿計算 max(Enc(a), Enc(b)) = Enc(max(a, b))を求める 一変数化 max(a, b)

    = max(a-b, 0)+b f(x):=max(x, 0)は一変数関数 プロトコル 1. Enc(a) - Enc(b) = Enc(a-b) 2. EOHVプロトコルによりEOHV(a-b)を計算 3. f(x)をEOHV(a-b)に適用してeval(f, EOHV(a-b)) = Enc(max(a-b, 0)) 4. Enc(max(a-b, 0)) + Enc(b) = Enc(max(a, b)) なら のとり得る範囲はその約2倍となり, このEOHVのサイズは 7 / 19
  6. select(c, a, b)の秘匿化 定義 select for ; が真(1)な , 偽(0)なら

    を返す関数 アイデア , を , の2進数展開とする( ) selectはビットごとに独立なので各 についてselect を実行すればよい 以下 , を1ビットの , とする として とする 1ビットselectの秘匿化プロトコル 1. Enc(a), Enc(b), Enc(c)が与えられたときC:=Enc(4c+2a+b)を計算 2. CのEOHV EOHV にf(x)を適用してEnc(f(4c+2a+b)) = Enc(select(c, a, b))を計算 このEOHVのサイズは8なので とすると全体のサイズは 8 / 19
  7. selectのargmaxへの適用 v[0], ..., v[N-1]に対する素朴なargmax m = v[0] idx = 0

    for i from 1 to N-1: m = max(v[i], m) idx = select(v[i] > m, i, idx) return idx i番目までの最大値mとそのときの添え字idxの両方の同時更新 のEOHVからEnc-maxとselectのcを算出 添え字の大きさは このまま比較するとEOHVのサイズは 添え字空間の縮小による改良 隣り合う添え字は上位ビットが同じなのでselect処理は不要 木構造で下位1ビットのselect, 下位2ビットのselectを実行 9 / 19
  8. 内積の近似計算 内積 の積 の近似を考える の近似値を求めたい( ) aの下位sビットを2進数展開してa= とする( ) 例

    の場合 一般化 : としてサイズを にする AHEによる計算 最初に送信する暗号文個数が 倍になるがそれ以降のコストに比べたら小さい 11 / 19
  9. 内積の近似計算の改善 修正2進数展開 近似計算は常に切り捨てなので結果が小さくなる方向にバイアスがある 2進数展開の代わりに近接偶数方向丸め =round(x)を使う # input : a, s

    # output: s+1次元ベクトルv for i from 0 to s: v[s-i] = round(x / 2**(s-i)) x = x - v[s-i] * 2**(s-i) return v 例 2 = [0, 0, 1 0]', 6 = [1, 0, -1, 0]', 7=[1, 0, 0, -1]' AHEによる計算 12 / 19
  10. CLIPでのコスト評価 パラメータ設定 N=8192個の正規化された512次元CLIPベクトル : 成分を256倍して整数に量子化 64個のクエリ文による数値実験 内積の分布 : , 内積の最大値の分布

    : 内積の近似計算 : 結果を で割る近似 区間圧縮関数 : , とすると圧縮後の内積分布区間は EOHVのサイズ 区間圧縮( ) + argmaxのselect( ) = 通信ラウンド : 16 / 19
  11. CLIPの内積argmaxの秘匿化演算コスト 推測値( ) 方式 オフライン ラウンド オンライン 通信量 client CPU(秒)

    server CPU(秒) FHE 0 0 0 0 ≧670000 本発表 0 15 2.7GiB 1700 2520 秘密分散 ≧2.8GiB? ≧78? 数十MB? ? ? FHEはTFHEで1BR(blind rotation)=10msecで「9ビット乗算をD個加算」をN回の見積もり 秘密分散のオンラインは17ビット内積計算でラウンドは 個のargmaxを次で評価 (A2B(2)+BitExt16(3)+selectl(1)) CPU負荷は小さいはず クライアント数が増えたときのサーバの負荷を考えるとオフライン処理のコストも重要 17 / 19
  12. (予備)EOHVに用いるLifted ElGamal暗号の演算評価 各種メソッドの速度(単位:usec) 関数 AlderLake M1 Mac enc 10.8 8.26

    add 0.355 0.434 mul 56 60 isZero* 26 30 128ビットセキュリティ(secp256k1)で暗号文1個あたり約64byte isZeroは暗号文が0か否かを秘密鍵を用いて判定する - 復号するよりは軽い処理 19 / 19