Efficient Bootstrapping for Approximate Homomorphic Encryption with Non-Sparse Keys

CKKS Bootstrapping, CKKS-RNS, MultMatVecの話とか全部入りでかなりわかりやすそう

Abstract

  • 以前のBootStrappingより高速化
  • 近似的なReScalingを考慮したレベル消費量が最適な同型多項式評価のための汎用アルゴリズムを提案
    • “double hoisting”: キースイッチの手順を最適化して線形変換のための新たな手法
  • BootStrappingをパラメータ化するための体系的なアプローチ
  • lattigoに実装された
    のbootstrapに18s (x14.1)

1. Introduction

今までのBootstrappingは回路深さを削減するために sparse secret-keysを使ってた.
これは128bit securityを担保できていない.
ので規格化の際にBootstrapを除外している -> 実用性アレ

Homomorphic Polynomial Evaluation

Section3で紹介, RNS-variantではRescalingがモジュラス の係数
での除算のみに制限されているので2の累乗で行えずスケールのずれが生じる
多項式評価のような複雑な回路では誤差につながる
定数の平文を 次のrescaleの でrescaleすることで線形回路では自明に解決できる
-> 暗号文のスケールは演算後も変化しない
多項式は1次式の評価の組み合わせなので汎用化

レベル消費して 次多項式を評価できる
指定されたscaleからはじめ, 再帰的にscaleを伝播させ同じscaleですべての演算が行えることが保証される(=誤差が出ない)

Faster Matrix x Ciphertext Products

Section4, 演算で最もコストがかかるのはキースイッチだけど乗算, 回転演算, 共役で必須.
Bootstrappingでも大量の回転を伴う2つの線形変換が必要なのでキースイッチの数を最小限に抑えることは性能向上に貢献
の平文行列 と暗号化されたベクトル との積の計算には BSGS を使用して 回転で を計算
これらはKey-switchをブラックボックスで扱い実行回数を削減するので
hoisting を利用していない.
我々は回転鍵の新しいフォーマットと hoisting
をsecond-layerまで拡張する修正されたkey-switchingを提案することで BSGS を改善.
これは一般的に使えて, 暗号文の線形変換の複雑度(modular productの観点から(?))を削減
線形変換のコストを50%に

Improved Bootstrapping Procedure

Section 5

Parameterization and Evaluation

Section 6, CKKS schemeのパラメータ化とBooststrap回路について説明し, ユースケースに併せてパラメータを選択, 調整する手順を提案,
lattigo
に実装したよ
CKKS-RNSでのbootstrappingの最初のオープンソースの実装.
HEAAN.jl にもRNS-variantでBootstrap実装されていたような

2.1 The Full-RNS CKKS scheme

CKKS scheme の full-RNS variant というのは多項式の係数が
RNS表現
されていること.

Notation

2べき
の異なる素数
,

は 有限体

係数のcyclotomic多項式環
一意にRNS

が定まり, 元は

の係数の行列となる.
スカラはitallicで書き, ベクトルはboldで書く.
: ベクトルの 要素目, 多項式の 次目
: 無限ノルム
: ハミング重み
: 内積

: x % Q

Plaintext and Ciphertext Space

平文は多項式

, , , 2べき
平文: ,
暗号文: ,
: スケール係数

: レベル
のモジュラス( )

Scheme RNS-CKKS

(省略)


要素持つ
sample ,
returns key-switch key


, where

public encryption key

relinearization key

rotation keys

conjunction key

returns

基底

s.t.

returns


returns

2.2 CKKS Bootstrapping

レベル

の暗号文

bootstrappingの目標は

(レベル

,

: bootstrap回路の深さ) を計算すること. ここで,

, (

: 整数係数多項式) より, bootstrappingはCRT基底の拡張に相当(?).
そして, 同型で

する.
最初のbootstrappingでは

  1. 同型でencoding演算を計算
  1. 各slotでscaled 近似sin関数を評価
  1. decoding

modular reductionを試みた.
Cooley-Tukey アルゴリズムを準同型演算してEncodingを計算(深さは

)
encoding行列を

個のスパースな行列を因数分解する手法により2桁高速化
またチェビシェフ補間でサイン関数の近似を改善
最近ではCKKS-full RNSにbootstrapを移植
中間的なRNS分解でkey-switchingを一般化した.
平文の大きさを考慮して余弦関数と二重角で3倍高速化
HEAANで実装されている.

2.3 Security of Sparse Keys

これらはハミング重み

のスパースな秘密鍵を使用している

の小さい鍵を用いることで深さの浅いbootstrapが可能になり実用性高まる.
近年のRLWEの安全性研究ではスパースな鍵が安全性に影響を与えることが知られている.
それを考慮すると

の時

にするには

3. Homomorphic Polynomial Evaluation

3.1 The Baby-Step Giant-Step Algorithm

baby-step giant-stepアルゴリズム 参照

3.2 Errorless Polynomial Evaluation

BSGSアルゴリズムより高精度で多項式の評価をすることができるアルゴリズム
BSGSの準同型評価版みたいな?

などの係数はRNS表現だから行列になっている?
多項式の の評価においてrescalingでの誤差に対処する.
葉の単項式 が全て同じスケール
での加算で評価されるように葉の単項式をスケールする.

単項式評価の結果

のスケールを


のスケールを


をリスケールしたもののモジュラス

3.3 Depth-Optimal Polynomial Evaluation

4. Key-switch and Improved Matrix-Vector Product

key-switchは公開鍵の操作の一般的な操作.
秘密鍵 , から特定の公開鍵のkey-switch keyが作られる.
影響をキャンセルするために殆どの準同型演算でkey-switchingが必要になる.
特に準同型乗算では に戻す必要があり, 回転演算では 回転された に戻して再暗号化する必要がある.
key-switchはNTT, CRTを再構成するので重い.
4.1 で最適化されたkey-switchの鍵方式とアルゴリズムを提案
4.2 では hoisted-rotationを改良. そして, 4.3 で改良されたvec-mat演算を示す.

4.1 Improved Key-Switch keys

Supplementary Material B: KeySwitch Approaches

暗号文

( で復号できる)
key-switch鍵


にkey-switchするとは


は大きな誤差なので復元時にずれる. これに対して2パターンの解決策がある.

Type 1

を基底(?) として を分解する.

とすると

を計算.

になる(なぜ?)

Type 2

( 巨大な数) 計算,

)
となり,

はnegl (式変形なぜ?)
ハイブリッドなアプローチもある, より大きなパラメータに適している. key-switchingがとても効率的になった
モジュラス

が与えられ,

5. Bootstrapping for the Full-RNS CKKS Scheme

  • CKKS SchemeのBootstrapは誤差を減らすのではなく暗号文の係数を高いレベルにリセットすること
  • スロットの暗号文
    • s.t.
  • bootstrap後:
    • s.t.
  • はbootstrap回路の評価で より増える

ModRaise

CRTmap: に適用して にする

参考文献