14. A Buggy but Informative Construction
Gaussian 分布から キーをランプリングする. .
Encryption: . .
Learning with Errors (LWE) に帰着
ここの はまだ定義しない
sk ← χ
n
m ∈ , (e. g. , t = 2)Zt
a ← , e ←Z
n
q
χ
′
ctx = (a, b = m + e ? a ? sk mod q).
?
14
15. A Buggy but Informative Construction
Decryption,
なら正しく復号できる
ctx = (a, b = m + e ? a ? sk).
= b + a ? sk mod q. ?outputs? {m
~ 0?| ? 0| < | ? q/2|m
~
m
~
1?o.w.
|e| < q/4
15
19. 計算効率がいい FHE への道
Ring-LWE ベースなスキームの方が 準同型演算がより効率だ.
FFTにより
例えここの はすべて である
- 次数は 以下かつ係数は の多項式の集合
- '' '' は多項式環上の掛け算で定義される
O( ) → O(n log n)n
2
a, b, e ∈ [X]/( + 1)Zq X
n
ctx = (a, b = m + e ? a ? sk mod (q, + 1))X
n
n mod q
? 19
30. 技その3: reLinearization
- レングス 3 の暗号文はどう復号するのか?
main idea: を事前に暗号化して evaluation key に加える
1. Enc( ) = , i.e.,
2. .
3.
ノイズは増加される。
reLinearization( , , ) → ( , ), ?while?Dec(( , )) →a
′
b
′
c
′
a
′′
b
′′
a
′′
b
′′
m1 m2
? + ? sk + ?c
′
b
′
a
′
sk
2
sk
2
sk
2
(α, β) β + α ? sk → sk
2
= + β ? , = + α ?b
′′
c
′
a
′
a
′′
b
′
a
′
+ ? sk = + β ? + ( + α ? ) ? sk = + ? sk + ?b
′′
a
′′
c
′
a
′
b
′
a
′
c
′
b
′
a
′
sk
2
30
31. 技その3: reLinearization
計算のステップ を見直す
しかし は大きい値 ( ) をとりうるため累積ノイズがかなり増加しまう
bit-decomposition を使う
極端に (i.e., bit-decomposition).
だが 時 を保存するコストは高すぎ
実装上は など使う (HElib). あるいは (SEAL)
= + β ? , = + α ?b
′′
c
′
a
′
a
′′
b
′
a
′
α, β Z
n
q
α := , β := , ω ? q∑
k
αkω
k
∑
k
βkω
k
ω = 2
ω = 2 ,αk βk
ω > 2, k = 4 |ω| ≈ 2
16
31
32. 技その3: Key-Switching
暗号文のレングスを 2 に戻るため を暗号化する
もっと一般的な使い方がある. をある鍵 で の暗号文.
別の鍵 の暗号文に変換することができる。
例え
1. (i.e., reLinearization)
2. (i.e., automorphism. homomorphic rotation で使う. まだ議論する)
sk
2
(m)ctxsk
′ sk
′
m
KeySwitch : (m) → (m)ctxsk
′ ctxsk
sk
s =k
′
sk
2
s ( ) = sk(X)k
′
X
j
32
35. Bootstrapping の困難点
1. 丸めの操作は非線形. 復号関数の深さは厳しい
Cite from "Fully Homomorphic Encryption without Squashing Using Depth-3 Arithmetic Circuits"
2. 法 は大きい、e.g., . この暗号文を暗号化するため、もっと大きい FHE パラメー
タが必要
p p ≈ 2
1000
35
36. Bootstrapping の困難点 (Cont'd)
復号回路を BC 回路で表現する時深さは結構ある
Cite from "Bootstrapping in HElib"
That is, each level multiplication needs one bootstrapping10
36
40. Bootstrapping within 0.1sec [TFHE]
もっとも重要なトリック
の定数項 (i.e., )
なら定数項は 0
o.w. 定数項は 1
次はどう を多項式の次数に計算するについて
× (1 + X + ? + ) × × + mod + 1X
β
X
2
X
n?1
X
?n/2
2
?1
2
?1
X
n
??X
0
β > n/2
β = +b
??
a??
?
s?? 40
41. Bootstrapping within 0.1sec [TFHE]
三種類の暗号文
LWE( ) : (bootstrapping の対象)
RLWE( ): (中間表現役)
GSW( ): (boostrappingキーを暗号化)
m
( , b = m + e ? ), m ∈ {0, 1}? , ∈a?? a??
?
s?? a?? b
??
Z
n?1
q
m
′
( , = + ? )? , , ∈ [X]/( + 1)a
′
b
′
m
′
e
′
a
′
s
′
a
′
s
′
m
′
Zq X
n
m
′
+ H?(H?is a fixed poly matrix?)
?
?
?
?
(0)RLW Es
′
?
(0)RLW Es
′
?
?
?
? m
′
41
45. Bootstrapping within 0.1sec [TFHE]
TFHE Hack 1: approximate gadget decomposition
TFHE Hack 2: External Product
TFHE Hack 3: Extract LWE from RLWE
から定数項を の形で抽出できる。
1. , は秘密鍵
2. 抽出した とする.
3. (次数の逆順と符号 ip).
4. (多項式 の定数項)
を復号する時. を計算する
よって
RLW E(m )m
′
LW E(m [0])m
′
RLW E(m ) := ( , = m + ? )m
′
a
′
b
′
m
′
e
′
a
′
s
′
s
′
LW E(m [0]) := ( , d)m
′
c ??
= [? [n ? 1], ? [n ? 2], … , ? [0]]c ?? a
′
a
′
a
′
d = [0]b
′
b
′
( , d)c ?? d + c ??
?
s??
( )[0]a
′
s
′
d + = m [0] + [0]c ??
?
s?? m
′
e
′
45
46. Bootstrapping within 0.1sec
まとめ
1. LWE の秘密鍵 をGSWで暗号化. boostrappingキーとする
.
- GSW の鍵は? LWE と異なる鍵を使ったりする(この場合 KeySwitchが必要)
2. boostrapping の対象 LWE の暗号文 とする.
2.1 積を計算する。
- 整数 を次数に置くこともポイント
- ここでは ので, の場合
∈ {0, 1s?? }
n?1
bk := {GSW ( )s??i }i
( , b)a?? (|b + | q/4)a??
?
s?? >
?
(H + ? 1) ? GSW ( ) → GSW( )X
a??
i
s??i X
a??
i s ??
i
a??i
∈ {0, 1}s??i
= 1s??i
=X
a??
i
s??i X
a??
i s ??
i 46
47. Bootstrapping within 0.1sec
まとめ
1. LWE の秘密鍵 をGSWで暗号化. boostrappingキー .
2. boostrapping をするLWE の暗号文 とする.
2.1 積を計算する。
- ここでは ので, の場合
2.2 summation を計算する。
Decomp(RLWE ) GSW( ) RLWE( )
- 再帰的に RLWE( ) を計算できる
∈ {0, 1s?? }
n?1
bk := {GSW ( )s??i }i
( , b)a?? (|b + | q/4)a??
?
s?? >
?
(H + ? 1) ? GSW ( ) → GSW( )X
a??
i
s??i X
a??
i s ??
i
∈ {0, 1}s??i
= 1s??i
=X
a??
i
s??i X
a??
i s ??
i
( )X
b
X
a??
i s ??
i
→ X
b+a??
i s ??
i
X
b+a??
?
s ??
47
48. Bootstrapping within 0.1sec
1. LWE の秘密鍵 をGSWで暗号化. boostrappingキー .
- GSW の鍵は?
- LWE と異なる鍵を使ったりする(この場合 KeySwitchが必要)
2. boostrapping をするLWE の暗号文 とする.
2.1 積を計算する。
- ここでは ので, の場合
2.2 summation を計算する。Decomp(RLWE ) GSW( ) RLWE( )
- 再帰的に RLWE( ) を計算できる
2.3 トリック:RLWE(
2.4 定数項を抽出して LWE に戻る
ではなく の rescaling ステップは省略した
ノイズの解析は論文に参考
∈ {0, 1s?? }
n?1
bk := {GSW ( )s??i }i
( , b)a?? (|b + | q/4)a??
?
s?? >
?
(H + ? 1) ? GSW ( ) → GSW( )X
a??
i
s??i X
a??
i s ??
i
∈ {0, 1}s??i
= 1s??i
=X
a??
i
s??i X
a??
i s ??
i
( )X
b
? X
a??
i s ??
i
→ X
b+a??
i s ??
i
X
b+a??
?
s ??
) ? (1 + X + ? + ) ? × +X
b+a??
?
s ??
X
N?1
X
?N/2
2
?1
2
?1
q/4>
?
N/2>
?
48
56. 「FHE の計算を早くする」その 3: Single Instruction Multiple Data (SIMD)
によって前処理
SIMD は fan-in が大きいな回路に対する optimization
e.g., お互い独立な batch 処理
暗号化する前に をそれぞれ encode をかける
1. ,
2.
encodeすることによって -fan-in の回路は準同型掛け算は一回で済む
具体的には多項式版の Chinese Remainder Theorem を利用
{ }, { }ak bk
{ } → A → Enc(A)ak
{ } → B → Enc(B)bk
Enc(A) ? Enc(B) → Dec → AB → { ×ak bk }k
k
56
57. 多項式版 CRT
p.s.
A = 8 mod X + 15, A = 5 mod X + 9
A = 16 mod X + 2, A = 9 mod X + 8
→ A = 1 + X + 7 + 12X
2
X
3
[8, 5, 16, 9] ? A ∈ [X]/( + 1)Z17 X
4
+ 1 = (X + 15)(X + 9)(X + 2)(X + 8) mod 17X
4
57
75. Hack into SIMD (CSS'17 の内容)
目的:暗号化されたベクトルの内積をバッチ的に計算したい. 行列積を計算するため
は他のいい感じの分解ができる
の combination によって , e.g.,
すなわち、サイズ 256 のベクトル4個を一つの多項式にencodeすることができる
1 FHEcontext context(1024 * 2, 137, 1); // Phi_{2048}(X) = X^{1024} + 1
2 const EncryptedArray *ea = context.ea;
3 long ell = ea->size(); // 4
4 long d = ea->getDegree(); // 256
5 std::vector<NTL::ZZX> vectors(ell);
6 // ... fill in vectors
7 // e.g. vectors[0] = 1 + 2X + 3X^2 ... + 256X^{255}
8 NTL::ZZX poly;
9 ea->encode(poly, vectors);
→
+ 1 mod tX
n
n, t + 1 = + mod tX
n
∏
j
X
d
βj
+ 1 = ( + 10)( + 41)( + 96)( + 127) mod 137X
1024
X
256
X
256
X
256
X
256
75
76. Hack into SIMD (CSS'17 の内容)
目的:暗号化されたベクトルの内積をバッチ的に計算したい. 行列積を計算するため
の形にする理由: サイズ のベクトルの内積、準同型掛け算一回で済む
を例としましょう.
1.
2. の係数 34 はベクトル内積 になる
暗号化する前にベクトルを二通りで encoding すると内積の計算は早くできる
→
+ βX
d
d
+ 4X
3
(1 + 2X + 3 ) × (5 + 6X + 7 ) =. . . +34 mod + 4X
2
X
2
X
2
X
3
X
d?1
[1, 2, 3 [7, 6, 5]]
?
76
77. Hack into SIMD (CSS'17 の内容)
目的:暗号化されたベクトルの内積をバッチ的に計算したい. 行列積を計算するため
ベクトル
4 個の内積 , 準同型掛算一回で計算する (結果の暗号文も一つしかない)
1. encoding I:
2. encoding II:
3.
実際 , によって を調整することができる
1. e.g., なら サイズ 64 のベクトルを 64 個之挙咿zめる
→
{ , }, 1 ≤ i ≤ 4, | | = | | = 256a??i b
??
i a??i b
??
i
a??
?
i
b
??
i
[ , … ] → A(X)a??1 a??4
[ , … ] → B(X)b
??
1 b
??
4
Enc(A(X)) ? Enc(B(X)) → Dec → decode → { }a??
?
i
b
??
i
n ≥ 4096 t d
n = 4096, t = 82561 77
78. と 組み合わせはどう見つけるのか?
は security level に関連なので given とする。 は平文のサイズ. e.g, -bit 以上であれ
ば ok. (https://github.com/OpenSMP/SMP)
1 void DoublePacking(long m, long slots) { // slots 数を指定
2 long t = NTL::NextPrime(1 << 16); // 16-bit 以上
3 long n = phi_N(m); // assert(n * 2 == m)
4 while (true) {
5 long d = multOrd(t, m);
6 long s = n / d;
7 if (s == slots) {
8 FHEcontext context(m, t, 1);
9 const std::vector<NTL::ZZX> &ftrs = context.alMod.getFactorsOverZZ();
10 bool ok = true;
11 for (const auto& f : ftrs)
12 ok &= check(f); // check whether X^d + beta
13 if (ok) // all factors follow the form X^d + beta
14 break;
15 }
16 do { // try next prime
17 t = NTL::NextPrime(t + 2);
18 } while (m % t == 0);
19 }
20 }
n t
n t 16
78
79. SCIS, AsiaCCS'18 の内容
大小比較
TFHE のトリックと類似
から を作るのに のautomorphism を使う
1 sk.GenKeySWmatrix(1, 2n - 1, 0, 0);
2 ctx.smartAutomorph(2n - 1);// X^b --> X^{-b}
よって one-round な 決定木とU 検定の秘密計算プロトコルを作った
Enc( ), Enc( ) → Enc(a b)X
a
X
b
>
?
Enc( ) ? Enc( ) × (1 + X + + ? + ) × +X
a
X
?b
X
2
X
n?1
2
?1
2
?1
Enc( )X
b
Enc( )X
?b
j = 2n ? 1
( = = (?1 mod + 1X
b
)
2n?1
X
2nb?b
)
2b
X
?b
X
n
79
80. 少し展望
TFHE の利点は:パラメータ はかなり固定。GPU などの最適化に便利
GSW 方式 (so call 3rd gen FHE) もいい選択肢でしょう。
1. reLinearization が要らない. (so called evaluation key free)
2. mod-switch もなし ( atten, un attenでノイズをコントロール)
3. 暗号文は行列だが、0-1の行列なので、最適化の余地はまだあるでしょう.
m, q
80
81. References
[BV11a] Brakerski et al. Fully Homomorphic Encryption from ring-LWE and security for
key dependent messages.
[BV11b] Brakerski et al. E cient Fully Homomorphic Encryption from (Standard) LWE.
[BGV11] Brakerski et al. Fully Homomorphic Encryption without Bootstrapping.
[GHS12] Gentry et al. Homomorphic Evaluation of the AES Circuit.
[FV12] Fan et al. Somewhat Practical Fully Homomorphic Encryption
[SV11] Smart et al. Fully Homomorphic SIMD Operations
[BEHZ16] Bajard et al. A Full RNS Variant of FV like Somewhat Homomorphic Encryption
Schemes
[CBHHJLL18] Chen et al. Logistic regression over encrypted data from fully homomorphic
encryption 81