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. Lifted-ElGamal暗号による、Argmaxとベクトルの内積
    近似計算の二者間秘匿計算プロトコルとその応用
    サイボウズ・ラボ 光成滋生
    NTT社会情報研究所 上野真奈
    SCIS2024 3C2-4
    1 / 19

    View full-size slide

  2. クライアント・サーバ間の二者間秘密計算
    目的
    クライアントCが をサーバSに教えずに, Sから情報 を得る( はSの入力)
    制約
    クライアントCは について から分かる以上のことは分からない
    サーバSは について何も分からない
    2 / 19

    View full-size slide

  3. 本発表の位置づけ
    既存方式
    FHE(完全準同型暗号, BGV/BFV/CKKSなど), Garbled circuit, 秘密分散など
    既存方式と本発表方式
    方式 オフライン処理 通信回数 トータル通信量 CPU時間
    FHE 不要 0 0 大きい
    本発表 不要 ? ? ?
    秘密分散 必要 多い 多い? 小さい
    目的
    Lifted ElGamal暗号+通信でどこまでできるのか, ?を埋めたい
    3 / 19

    View full-size slide

  4. ベクトル検索の秘匿化
    クライアントとサーバの入力
    クライアントC : ベクトル
    サーバS : ベクトル
    出力
    コサイン類似度で に最も近いベクトル を探す
    CがSに を送り, Sは を求めて返す
    ※ 応用例は後述
    これをAHE(Lifted ElGamal暗号)で実現するプロトコルの提案
    4 / 19

    View full-size slide

  5. 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

    View full-size slide

  6. 関数評価
    1変数整数値関数f(x)をEOHV(m)に適用する
    eval(f, EOHV(m)) :=
    「AHE+通信」で任意の計算ができる
    注)1個のEOHV(m)に対して複数の を適用できる
    EOHV(m) → Enc( ), Enc( )
    EOHVプロトコルのコスト
    通信
    サーバとクライアント : 個の暗号文を送りあう
    演算
    サーバ : 個の暗号文の乱数倍( は乱数無しの固定値でよい)
    クライアント : 個の暗号文の0判定と(事前計算可能な) 個の暗号文の生成
    をEOHVプロトコルのサイズと呼ぶ 6 / 19

    View full-size slide

  7. 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

    View full-size slide

  8. 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

    View full-size slide

  9. 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

    View full-size slide

  10. argmaxのEOHVのサイズ
    select部分
    (実は)最上位ビットの入力値は平文 → 最上位ビットのselectにEOHVは不要
    回目から下位 ビットのselectにEOHVを利用
    として
    max部分
    内積値の区間集合が なら
    合計
    区間集合の大きさ が支配的 → を小さくすることを目指す
    10 / 19

    View full-size slide

  11. 内積の近似計算
    内積 の積 の近似を考える
    の近似値を求めたい( )
    aの下位sビットを2進数展開してa= とする( )
    例 の場合
    一般化 : としてサイズを にする
    AHEによる計算
    最初に送信する暗号文個数が 倍になるがそれ以降のコストに比べたら小さい 11 / 19

    View full-size slide

  12. 内積の近似計算の改善
    修正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

    View full-size slide

  13. 内積の近似計算の改善の効果
    精度が向上
    修正2進数展開は, 平均値が真値に近くなる
    の真値と近似計算の差の絶対値の平均(と括弧内は最大誤差)
    s 2進数 修正2進数
    3 0.531(2) 0.062(1)
    4 0.765(3) 0.125(1)
    5 1.007(4) 0.196(1)
    での平均値
    13 / 19

    View full-size slide

  14. 内積値の区間圧縮
    内積のargmax
    内積が負なら「近いベクトル」ではないのでargmaxの候補から外してよい
    より強く, 内積値が閾値 以下なら全て0としてよい
    更にargmaxの結果を変えない範囲で で割って区間を圧縮する
    は用途に応じて決定
    14 / 19

    View full-size slide

  15. 画像検索CLIPのクエリ秘匿化への応用
    CLIP
    文と画像の関連性を学習するモデルで, 関連する文と画像は似た512ビットベクトルになる
    文による画像検索が可能
    CLIPのクエリ秘匿化
    画像idxから画像本体を得るのはOTやObliviousRAMなどを利用(今回の対象外)
    15 / 19

    View full-size slide

  16. CLIPでのコスト評価
    パラメータ設定
    N=8192個の正規化された512次元CLIPベクトル : 成分を256倍して整数に量子化
    64個のクエリ文による数値実験
    内積の分布 : , 内積の最大値の分布 :
    内積の近似計算 : 結果を で割る近似
    区間圧縮関数 : , とすると圧縮後の内積分布区間は
    EOHVのサイズ
    区間圧縮( ) + argmaxのselect( ) =
    通信ラウンド :
    16 / 19

    View full-size slide

  17. 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

    View full-size slide

  18. まとめ
    Lifted-ElGamal暗号を用いたクライアント・サーバ型2PC秘匿計算
    ベクトルの内積の近似計算方法の提案
    効率的なargmaxの提案
    画像検索CLIPのクエリ秘匿化への応用
    18 / 19

    View full-size slide

  19. (予備)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

    View full-size slide