EVA: An Encrypted Vector Arithmetic Language and Compiler for Efficient Homomorphic Computation

1. Introduction

  • CKKS scheme とか乗算でノイズ増えないようにReScalingを手動でやる必要
  • 暗号化ベクトル演算(EVA) というFHE用の汎用言語を提案
    • EVAは他のDSLコンパイラのバックエンド(中間表現)となるようにも設計されている
    • 固定幅ベクトルとスカラーの演算をサポート → SIMDとかで最適化
    • 複雑なスキームのコンテキストを隠している
    • ReScalingとかmodulus-switchingを最適に挿入
    • EVA用のPythonフロントエンドも実装して機械学習とか画像認識(Harrisのコーナ検出)アプリケーションを実装してみた

2. Background and Motivation

2.1 FHE

  • schemeがある
  • Ring-LWE 上に構築されている
  • 積和ができる
  • batching: 演算のsimd性
    • batchingができるschemeはrotationができる(回転鍵と呼ばれる公開鍵が必要)

2.2 Challenges in Using FHE

  • mult depth
    • 回路が深くなると複合できなくなる
  • Relinearization: 暗号文の乗算は3つの多項式 → 2つにする(タイミングを最適化するのはNP-Hard)
  • CKKSと近似固定小数点(Q小さく保つ&&誤差切り上げるためにReScaling) (要: 同レベルの暗号2つ)
  • 準同型暗号の専門家でも適切な ReScaling と modulus-switching を挿入するのは困難なプロセス
  • RNS表現を用いた実装ではReScalingに使えるQ’ はひとつだけ → ReScalingする場所の選択が複雑
  • 暗号化パラメータの選択が困難
    • パラメータに関連して, scaleが決まる

2.3 SEAL

2.4 Threat Model

3. EVA language

Types and Values

  • Cipher 固定小数点のリスト
  • Vector Vec<f64>
  • Scalar f64
  • Integer i32

concat を ++ と書く,

Instructions

  • NEGATE: C -> C
  • ADD: C -> C -> C
  • SUB: C -> C -> C
  • MULT: C -> C -> C
  • ROTATELEFT: C -> I -> C
  • ROTATERIGHT: C -> I -> C
  • RELINEARIZE: C -> C
  • MODSWITCH: C -> C
  • RESCALE: C -> S -> C

Execusion Semantics

適当な暗号スキーム id を考える。Cipher に Vectorの値そのまま入れる. つまり Encrypt と Decrypt は identity

ProtoBufなシリアライズ表現を使用している(言語に依存しない)

  • EVAのOpcodeとRNS-CKKSスキームとは一対一の関係があるが直接実行することは出来ない → 暗号化パラメータとの兼ね合いで実行時に例外がthrowされるかも
  • すべてのRNS-CKKSのCiphertext の係数は mod q: vec, Q = \prod q とする
  • スケールはそれに関連している
  • ちなみにSEALは q_i は2の累乗に近い素数 → 2の累乗として扱う

SEALでは、係数係数qiが2のべき乗に近い素数であれば、その係数qiは2のべき乗に対応すると仮定します。EVAコンパイラ(およびこの論文の残りの部分)では、qiが2乗に近い素数であると仮定しています。この矛盾を解決するために、RESCALE命令がスケールを素数で割ると、スケールは2乗で割ったように調整されます。

前提: scaleもmodulusも小さいほど計算早い → 効率

  • 変数にスケール(合わせるためにReScaling)とモジュラス(合わせるためにMod-Switching)がある

4. Overview of EVA Compiler

4.1 Using the Compiler

4.2 Motivataion & Constraints

  1. +, -, *: modulusが同じ
  2. +, -: scaleが同じ

効率化の流れ

  • 具体例

  • (a) 普通にやるとQ = 2^210 以上となる

    • まず毎回掛け算の後にrescale入れる
  • (b) はmodulus制約満たしてない: 2^30 * 2^60 は出来ない

  • (c) のようにmod-switch入れて2^60 → 2^30 にする

  • (d) Q = 2^150 以上なので改善出来ている

  • 命令の制約が原因で発生する複雑さの例
    Ciphertext (scale: )の式 を計算することを考える

(b) だと Q = 2^60+, scale = 2

x^2 のscaleは s_x^2 となりスケールが合わないので計算できない

→ より高い方に合わせるため 1(scale: s_x)x にかけると

x^2(s_x) + x(s_x) * 1(s_x) となり計算可能

しかしこれだと暗号文のスケールとノイズが指数関数的に増加してしまう

(c) も 2^60+ だが modulusの長さ r が違うので 小さい r 選べば(c) のほうが効率的 scale = 2^60 だからおそくなるのでは

(??? rescale ないから?)

出力のスケールは にしたいとする

→ rescale で低く保つ

rescale(x^2) + x = (s_x)

  • Rescale命令を挿入するとおかしくなるかも
  • rescale(x^2) + modswitch(x) で解決(????)

掛け算には違う制約もある

k poly * l poly = (k + l + 1) poly となるので

掛け算の上のノードはなるべく増やしたくない

をrescaleすると最大値とする(SEAL: s_f = 2

これらの制約を満たしながらライブラリを使うのは大変

要約すると、FHE スキーム(またはライブラリ)は、すべての暗号制約のため、プログラマが推論するのは面倒です。プログラマーは、性能を最適化する方法で制約を満足させることは、さらに厄介なことです。EVA コンパイラはこのような暗号の詳細をプログラムマーから隠し、プログラムを最適化します。

4.3 Execution Flow of the Compiler

  • EVA コンパイラは式を Abstract Semantic Graph で表現(以下 graph)
  • コンパイラはこのグラフを変換、検証、パラメータ選択、回転選択をしながら最適化していく
  • 検証しているので実行時は絶対制約違反しない
  • 変換はsection5で説明
  • 最後に出力プログラムに対して暗号化パラメータとRotationKeyのためのビットサイズとかを決定
  • (グラフは変わらないよ) Section6で説明

5. Transformations in EVA Compiler

これが書き換え規則です

5.1 Graph Rewriting Framework

  • step1: forward pass 親を書き換えた後子を: 上から下に

  • step2 backward pass 下から上に書き換える

  • 6つの最適化がある

  • EAGER-MODSWITCH: backwardのみ → 先やる

  • WATERLINE-RESCALE

  • EAGER-MODSWITCH

  • MATCH-SCALE

  • RELINEARIZE

5.2 Relinearize Insertion Pass

  • RELINEARIZE
  • すべてのCiphertextは2+の多項式で表されている
  • 2多項式の暗号文どうしの掛け算で3つの多項式になる relinearizeで2つに
  • 最適な配置を考えるとNP Hard なのでシンプルに常に2になるように

5.3 Rescale and ModSwitch Insertion Passes

formalにinsertionを書いている

  • +, * の親はすべてmodulusを同じにしなければならない
  • N, r が大きいとコストが高くなる

6. Analysis in EVA Compiler

7. Frontends of EVA

8. Experimental Evaluation

  • CHET との比較
    • latency
  • HE kernels
    • 3d path length
    • linear regression
    • polynomial regression
    • multivariate regression
    • sobel filter detection
    • harris corner detection