作者: Plot 邮箱:NoNeedToKnow@xxx.xx
2 BGV 在BFV中,密文的模数q q q 是不会发生改变的,我们称之为scale-invariant,scale-independent。 但在BGV中,密文的模数q q q 会随着计算发生改变,我们称之为scale-dependent。 BGV定义了一系列的模{ p 0 , p 1 , … , p L } \{p_0,p_1,\dots,p_L\} { p 0 , p 1 , … , p L } ,这些模使得密文构成了不同的level。对于一个模 q l ( 0 ≤ l ≤ L ) q_l (0\leq l \leq L) q l ( 0 ≤ l ≤ L ) 的密文,我们称这个密文处在 l l l level。被加密的明文首先会处在 L L L level,随着计算的推进,会从 l l l 降低到 l − 1 l -1 l − 1 ,最终到达level 0。
另外在BFV中,明文处在密文的顶端,即MSB(Most Significant Bits),这是通过缩放 Δ \Delta Δ 实现的。 而在BGV中,明文处在密文的底端,即LSB(Least Significant Bits)。这在加密时详细讨论。
2.1 Plaintext and Ciphertext 与BFV相似,BGV的明文,密文空间如下:
Plaintext: P = R t = Z t [ x ] / ( x n + 1 ) \mathcal{P} = R_t = \mathbb{Z}_t[x]/(x^n+1) P = R t = Z t [ x ] / ( x n + 1 ) , t ∈ Z t \in \mathbb{Z} t ∈ Z Ciphertext: C = R q l × R q l \mathcal{C} = R_{q_l} \times R_{q_l} C = R q l × R q l , R q l ∈ Z q l [ x ] / ( x n + 1 ) R_{q_l} \in \mathbb{Z}_{q_l}[x]/(x^n +1) R q l ∈ Z q l [ x ] / ( x n + 1 ) ,q l ∈ Z q_l \in \mathbb{Z} q l ∈ Z means level l l l 一般,n = 2 k n = 2^k n = 2 k , k ∈ Z k \in \mathbb{Z} k ∈ Z 。也就是说,一般为二次幂阶分圆多项式。 一般,q q q 会远远大于t t t ,前者往往代表了可进行同态计算的空间。
2.2 Parameters 与BFV相似,BGV的参数除了包含1.1中( t , q , n ) (t,q,n) ( t , q , n ) ,还包含以下参数:
R 2 R_2 R 2 :整数系数为{ − 1 , 0 , 1 } \{-1,0,1\} { − 1 , 0 , 1 } 的n次多项式,用于生成密钥 X \mathcal{X} X :离散高斯分布 R q R_q R q :R q R_q R q 的均匀随机分布 2.3 Plaintext Encoding and Decoding 与BFV相似,BGV可使用整数编码方案(The integer encoding scheme): 对于给定的Message m m m , 我们通过如下操作将其转化为明文 M M M :
二进制表示m m m ,m = a n − 1 … a 2 a 1 a 0 m = a_{n-1}\dots a_2a_1a_0 m = a n − 1 … a 2 a 1 a 0 转成多项式M = a n − 1 x n − 1 + ⋯ + a 2 x 2 + a 1 x + a 0 M =a_{n-1}x^{n-1}+\dots+a_2x^2+a_1x+a_0 M = a n − 1 x n − 1 + ⋯ + a 2 x 2 + a 1 x + a 0 ,一般来说,n很大,没用的位会置0 在后续计算的过程中,系数和阶数都会增长,所以我们要确保
系数不超过t t t 的范围 阶数不超过n n n 的范围 2.4 Key Generation SK : 从R 2 R_2 R 2 中随机生成多项式,即系数为{ − 1 , 0 , 1 } \{-1,0,1\} { − 1 , 0 , 1 } 的n次多项式
PK :是一对多项式(P K 1 PK_1 P K 1 , P K 2 PK_2 P K 2 )
P K 1 = [ − 1 ( a ⋅ SK + t ⋅ e ) ] q L PK_1 = [-1(a\cdot\text{SK} + t\cdot e)]_{q_L} P K 1 = [ − 1 ( a ⋅ SK + t ⋅ e ) ] q L P K 2 = a PK_2 =a P K 2 = a 其中 a a a 是 R q ∈ Z q [ x ] / ( x n + 1 ) R_q \in \mathbb{Z}_q[x]/(x^n +1) R q ∈ Z q [ x ] / ( x n + 1 ) 中的一个随机多项式,e e e 是从X \mathcal{X} X 中随机抽样的误差多项式。[ ⋅ ] q [\cdot]_q [ ⋅ ] q 意味着多项式系数要模q q q 。 BGV与BFV的区别在于,误差 e e e 被放大了 t t t 倍。
2.5 Encryption and Decryption 加密: 首先生成三个小的 随机多项式,u u u from R 2 R_2 R 2 ,e 1 , e 2 e_1,e_2 e 1 , e 2 from X \mathcal{X} X 。
然后生成密文(Ciphertext)C = ( C 1 , C 2 ) C = (C_1,C_2) C = ( C 1 , C 2 ) :
C 1 = [ P K 1 ⋅ u + t ⋅ e 1 + M ] q l C_1 = [PK_1\cdot u +t\cdot e_1+ M]_{q_l} C 1 = [ P K 1 ⋅ u + t ⋅ e 1 + M ] q l :屏蔽的明文信息 C 2 = [ P K 2 ⋅ u + t ⋅ e 2 ] q l C_2 = [PK_2 \cdot u +t\cdot e_2]_{q_l} C 2 = [ P K 2 ⋅ u + t ⋅ e 2 ] q l :解密的辅助信息 在密文 C 1 C_1 C 1 中,噪音 e e e 被放大了 t t t 倍,而 M M M 并没有缩放 Δ \Delta Δ 。
对比BFV中的加密方式:
C 1 = [ P K 1 ⋅ u + e 1 + Δ M ] q C_1 = [PK_1\cdot u +e_1+\Delta M]_q C 1 = [ P K 1 ⋅ u + e 1 + Δ M ] q C 2 = [ P K 2 ⋅ u + e 2 ] q C_2 = [PK_2 \cdot u +e_2]_q C 2 = [ P K 2 ⋅ u + e 2 ] q 我们可以得到以下的密文结构对比图:
解密: 解密就是加密的逆过程,M M M 通过如下方式计算:
M = [ [ C 1 + C 2 ⋅ S K ] q l ] t M = [[C_1+C_2\cdot SK]_{q_l}]_t M = [[ C 1 + C 2 ⋅ S K ] q l ] t 其中:
C 1 + C 2 ⋅ S K = M + t ⋅ v C_1 + C_2 \cdot SK = M + t\cdot v C 1 + C 2 ⋅ S K = M + t ⋅ v 因此得确保∥ v ∥ ∞ < q l 2 t \|v\|_\infty < \frac{q_l}{2t} ∥ v ∥ ∞ < 2 t q l ,这样才不损坏 M M M 。原理与BFV相似。
2.6 Homomorphic Evaluation 2.6.1 EvalAdd 加法与BFV类似。
E v a l A d d ( C 1 , C 2 ) = ( [ C 1 1 + C 1 2 ] q l , [ C 2 1 + C 2 2 ] q l ) = ( C 1 3 , C 2 3 ) = C 3 EvalAdd(C^1,C^2) = ([C^1_1 + C^2_1]_{q_l},[C^1_2 +C^2_2]_{q_l}) = (C^3_1,C^3_2) = C^3 E v a l A dd ( C 1 , C 2 ) = ([ C 1 1 + C 1 2 ] q l , [ C 2 1 + C 2 2 ] q l ) = ( C 1 3 , C 2 3 ) = C 3 其证明较为简单,略。在最坏的情况,C 3 C^3 C 3 中的噪音是C 1 C^1 C 1 和C 2 C^2 C 2 的噪音相加。
2.6.2 EvalMult 与BFV中类似,我们先尝试将两个密文解密后相乘C 1 ( S K ) ⋅ C 2 ( S K ) C^1(SK)\cdot C^2(SK) C 1 ( S K ) ⋅ C 2 ( S K ) 。
C 1 ( S K ) = M 1 + t ⋅ v 1 + q ⋅ r 1 C 2 ( S K ) = M 2 + t ⋅ v 2 + q ⋅ r 2 \begin{aligned} C^1(SK) = M^1 +t\cdot v_1 + q\cdot r_1 \\ C^2(SK) = M^2 +t\cdot v_2 + q\cdot r_2 \end{aligned} C 1 ( S K ) = M 1 + t ⋅ v 1 + q ⋅ r 1 C 2 ( S K ) = M 2 + t ⋅ v 2 + q ⋅ r 2 那么,
( C 1 ⋅ C 2 ) ( S K ) = M 1 ⋅ M 2 + t ( M 1 ⋅ v 2 + M 2 ⋅ v 1 + t ⋅ v 1 ⋅ v 2 ) \begin{aligned} (C^1\cdot C^2)(SK) = M^1\cdot M^2 + t(M^1\cdot v_2 + M^2\cdot v_1 + t\cdot v_1 \cdot v_2) \end{aligned} ( C 1 ⋅ C 2 ) ( S K ) = M 1 ⋅ M 2 + t ( M 1 ⋅ v 2 + M 2 ⋅ v 1 + t ⋅ v 1 ⋅ v 2 ) 可以发现,密文的噪音是以乘积 t ⋅ v 1 ⋅ v 2 t\cdot v_1 \cdot v_2 t ⋅ v 1 ⋅ v 2 增长,即呈指数级增长(不同于BFV线性增长)。所以BGV中引入了 ModSwitch 技术来控制噪音的指数级增长。
同样的,BGV的乘法可用如下表示:
E v a l M u l t ( C 1 , C 2 ) = ( [ C 1 1 + C 1 2 ] q l , [ C 1 1 ⋅ C 2 2 + C 2 1 ⋅ C 1 2 ] q l , [ C 2 1 + C 2 2 ] q l ) EvalMult(C^1,C^2)=([C^1_1 + C^2_1]_{q_l},[C^1_1\cdot C^2_2 + C^1_2\cdot C^2_1]_{q_l},[C^1_2 + C^2_2]_{q_l}) E v a lM u lt ( C 1 , C 2 ) = ([ C 1 1 + C 1 2 ] q l , [ C 1 1 ⋅ C 2 2 + C 2 1 ⋅ C 1 2 ] q l , [ C 2 1 + C 2 2 ] q l ) 与BFV类似,在BGV中,密文多项式经过乘法后,由两项变为三项,所以需要用到重线性化的技术。
乘法在密文结构图上的表示如下:
2.7 Relinearization 与BFV类似,BGV的重线性化只是有模数的差别。 重线性化就是在乘法后,将三项密文变为两项。 问题可形式化为,对于密文C = { C 1 , C 2 , C 3 } C = \{C_1,C_2,C_3\} C = { C 1 , C 2 , C 3 } ,找到一个密文C ∗ = { C 1 ∗ , C 2 ∗ } C^* = \{C_1^*,C_2^*\} C ∗ = { C 1 ∗ , C 2 ∗ } ,使得
[ C 1 + C 2 ⋅ S K + C 3 ⋅ S K 2 ] q l ≈ [ C 1 ∗ + C 2 ∗ ⋅ S K + r ] q l [C_1 + C_2 \cdot SK + C_3 \cdot SK^2]_{q_l} \approx [C_1^* + C_2^*\cdot SK + r]_{q_l} [ C 1 + C 2 ⋅ S K + C 3 ⋅ S K 2 ] q l ≈ [ C 1 ∗ + C 2 ∗ ⋅ S K + r ] q l 成立。
为了访问S K 2 SK^2 S K 2 ,我们引入新的密钥 evaluation key E K = ( − ( a ⋅ S K + e ) + S K 2 , a ) EK = (-(a\cdot SK + e)+SK^2,a) E K = ( − ( a ⋅ S K + e ) + S K 2 , a ) ,其中E K 1 + E K 2 ⋅ S K = S K 2 − e EK_1 +EK_2 \cdot SK = SK^2 -e E K 1 + E K 2 ⋅ S K = S K 2 − e 。然后,我们可以通过如下方式计算C ∗ C^* C ∗ :
C 1 ∗ = [ C 1 + E K 1 ⋅ C 3 ] q l C 2 ∗ = [ C 2 + E K 2 ⋅ C 3 ] q l \begin{aligned} C_1^* = [C_1 + EK_1 \cdot C_3]_{q_l} \\ C_2^* = [C_2 + EK_2 \cdot C_3]_{q_l} \end{aligned} C 1 ∗ = [ C 1 + E K 1 ⋅ C 3 ] q l C 2 ∗ = [ C 2 + E K 2 ⋅ C 3 ] q l 我们可对C ∗ C^* C ∗ 进行验证:
C 1 ∗ + C 2 ∗ ⋅ S K = C 1 + E K 1 ⋅ C 3 + S K ⋅ ( C 2 + E K 2 ⋅ C 3 ) = C 1 + C 2 ⋅ S K + C 3 ⋅ ( E K 1 + E K 2 ⋅ S K ) = C 1 + C 2 ⋅ S K + C 3 ⋅ S K 2 + C 3 ⋅ e \begin{aligned} C_1^* +C_2^*\cdot SK &=C_1 + EK_1 \cdot C_3 + SK\cdot (C_2 + EK_2 \cdot C_3) \\ &= C_1 + C_2\cdot SK + C_3\cdot (EK_1 + EK_2 \cdot SK) \\ &= C_1 + C_2\cdot SK + C_3 \cdot SK^2 + C_3 \cdot e \end{aligned} C 1 ∗ + C 2 ∗ ⋅ S K = C 1 + E K 1 ⋅ C 3 + S K ⋅ ( C 2 + E K 2 ⋅ C 3 ) = C 1 + C 2 ⋅ S K + C 3 ⋅ ( E K 1 + E K 2 ⋅ S K ) = C 1 + C 2 ⋅ S K + C 3 ⋅ S K 2 + C 3 ⋅ e 其中C 3 C_3 C 3 的系数较大,但可以将其分解。
2.8 ModSwitch 模数变换(ModSwitch)用于控制乘法计算中的噪音增长。它的主要思想是将密文 C C C 的模数 q q q 降低为 q ′ q' q ′ ,但不改变私钥 S K SK S K 。其数学表达如下:
[ C ( S K ) ] q = [ C ′ ( S K ) ] q ′ [C(SK)]_q = [C'(SK)]_{q'} [ C ( S K ) ] q = [ C ′ ( S K ) ] q ′ 细节上,这个变换是将密文 C C C 的系数缩放 q ′ q \frac{q'}{q} q q ′ 并合适round,即
C ′ = [ q ′ q ⋅ C ] C' = [\frac{q'}{q}\cdot C] C ′ = [ q q ′ ⋅ C ] 之前我们提到,BGV定义了一系列的模数 { p 0 , p 1 , … , p L } \{p_0,p_1,\dots,p_L\} { p 0 , p 1 , … , p L } ,随着计算的推进,模数就从l l l 降低为 l − 1 l-1 l − 1 。 另外,模数的降低并不会影响加密的明文 ,因为对于q l q_l q l ,其中l ∈ { 0 , … , L } l \in \{0,\dots,L\} l ∈ { 0 , … , L }
q l ≡ q L m o d t q_l \equiv q_L \mod t q l ≡ q L mod t 可以简单理解为不影响密文中低 t t t 位。
Modswitch在密文结构图上的表示如下:
参考资料 Introduction to the BGV encryption scheme
Homomorphic encryption security standard
相关论文:
Brakerski, Zvika, Craig Gentry, and Vinod Vaikuntanathan. “(Leveled) fully homomorphic encryption without bootstrapping.” ACM Transactions on Computation Theory (TOCT) 6.3 (2014): 1-36.