作者: Plot 邮箱:NoNeedToKnow@xxx.xx

2 BGV

在BFV中,密文的模数qq是不会发生改变的,我们称之为scale-invariant,scale-independent。 但在BGV中,密文的模数qq会随着计算发生改变,我们称之为scale-dependent。 BGV定义了一系列的模{p0,p1,,pL}\{p_0,p_1,\dots,p_L\},这些模使得密文构成了不同的level。对于一个模 ql(0lL)q_l (0\leq l \leq L) 的密文,我们称这个密文处在 ll level。被加密的明文首先会处在 LL level,随着计算的推进,会从 ll 降低到 l1l -1,最终到达level 0。

另外在BFV中,明文处在密文的顶端,即MSB(Most Significant Bits),这是通过缩放 Δ\Delta 实现的。 而在BGV中,明文处在密文的底端,即LSB(Least Significant Bits)。这在加密时详细讨论。

2.1 Plaintext and Ciphertext

与BFV相似,BGV的明文,密文空间如下:

  • Plaintext: P=Rt=Zt[x]/(xn+1)\mathcal{P} = R_t = \mathbb{Z}_t[x]/(x^n+1) , tZt \in \mathbb{Z}
  • Ciphertext: C=Rql×Rql\mathcal{C} = R_{q_l} \times R_{q_l} , RqlZql[x]/(xn+1)R_{q_l} \in \mathbb{Z}_{q_l}[x]/(x^n +1)qlZq_l \in \mathbb{Z} means level ll

一般,n=2kn = 2^k , kZk \in \mathbb{Z}。也就是说,一般为二次幂阶分圆多项式。 一般,qq 会远远大于tt,前者往往代表了可进行同态计算的空间。

2.2 Parameters

与BFV相似,BGV的参数除了包含1.1中(t,q,n)(t,q,n),还包含以下参数:

  • R2R_2:整数系数为{1,0,1}\{-1,0,1\}的n次多项式,用于生成密钥
  • X\mathcal{X} :离散高斯分布
  • RqR_qRqR_q的均匀随机分布

2.3 Plaintext Encoding and Decoding

与BFV相似,BGV可使用整数编码方案(The integer encoding scheme): 对于给定的Message mm, 我们通过如下操作将其转化为明文 MM

  1. 二进制表示mmm=an1a2a1a0m = a_{n-1}\dots a_2a_1a_0
  2. 转成多项式M=an1xn1++a2x2+a1x+a0M =a_{n-1}x^{n-1}+\dots+a_2x^2+a_1x+a_0 ,一般来说,n很大,没用的位会置0

在后续计算的过程中,系数和阶数都会增长,所以我们要确保

  1. 系数不超过tt的范围
  2. 阶数不超过nn的范围

2.4 Key Generation

SK : 从R2R_2中随机生成多项式,即系数为{1,0,1}\{-1,0,1\}的n次多项式

PK:是一对多项式(PK1PK_1, PK2PK_2

  • PK1=[1(aSK+te)]qLPK_1 = [-1(a\cdot\text{SK} + t\cdot e)]_{q_L}
  • PK2=aPK_2 =a

其中 aaRqZq[x]/(xn+1)R_q \in \mathbb{Z}_q[x]/(x^n +1) 中的一个随机多项式,ee是从X\mathcal{X}中随机抽样的误差多项式。[]q[\cdot]_q 意味着多项式系数要模qq。 BGV与BFV的区别在于,误差 ee 被放大了 tt 倍。

2.5 Encryption and Decryption

加密: 首先生成三个小的随机多项式,uu from R2R_2e1,e2e_1,e_2 from X\mathcal{X}

然后生成密文(Ciphertext)C=(C1,C2)C = (C_1,C_2)

  • C1=[PK1u+te1+M]qlC_1 = [PK_1\cdot u +t\cdot e_1+ M]_{q_l} :屏蔽的明文信息
  • C2=[PK2u+te2]qlC_2 = [PK_2 \cdot u +t\cdot e_2]_{q_l} :解密的辅助信息

在密文 C1C_1 中,噪音 ee 被放大了 tt 倍,而 MM 并没有缩放 Δ\Delta

对比BFV中的加密方式:

  • C1=[PK1u+e1+ΔM]qC_1 = [PK_1\cdot u +e_1+\Delta M]_q
  • C2=[PK2u+e2]qC_2 = [PK_2 \cdot u +e_2]_q

我们可以得到以下的密文结构对比图:

解密: 解密就是加密的逆过程,MM通过如下方式计算:

M=[[C1+C2SK]ql]tM = [[C_1+C_2\cdot SK]_{q_l}]_t

其中:

C1+C2SK=M+tvC_1 + C_2 \cdot SK = M + t\cdot v

因此得确保v<ql2t\|v\|_\infty < \frac{q_l}{2t},这样才不损坏 MM。原理与BFV相似。

2.6 Homomorphic Evaluation

2.6.1 EvalAdd

加法与BFV类似。

EvalAdd(C1,C2)=([C11+C12]ql,[C21+C22]ql)=(C13,C23)=C3EvalAdd(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

其证明较为简单,略。在最坏的情况,C3C^3中的噪音是C1C^1C2C^2的噪音相加。

2.6.2 EvalMult

与BFV中类似,我们先尝试将两个密文解密后相乘C1(SK)C2(SK)C^1(SK)\cdot C^2(SK)

C1(SK)=M1+tv1+qr1C2(SK)=M2+tv2+qr2\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}

那么,

(C1C2)(SK)=M1M2+t(M1v2+M2v1+tv1v2)\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}

可以发现,密文的噪音是以乘积 tv1v2t\cdot v_1 \cdot v_2 增长,即呈指数级增长(不同于BFV线性增长)。所以BGV中引入了 ModSwitch 技术来控制噪音的指数级增长。

同样的,BGV的乘法可用如下表示:

EvalMult(C1,C2)=([C11+C12]ql,[C11C22+C21C12]ql,[C21+C22]ql)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})

与BFV类似,在BGV中,密文多项式经过乘法后,由两项变为三项,所以需要用到重线性化的技术。

乘法在密文结构图上的表示如下:

2.7 Relinearization

与BFV类似,BGV的重线性化只是有模数的差别。 重线性化就是在乘法后,将三项密文变为两项。 问题可形式化为,对于密文C={C1,C2,C3}C = \{C_1,C_2,C_3\} ,找到一个密文C={C1,C2}C^* = \{C_1^*,C_2^*\} ,使得

[C1+C2SK+C3SK2]ql[C1+C2SK+r]ql[C_1 + C_2 \cdot SK + C_3 \cdot SK^2]_{q_l} \approx [C_1^* + C_2^*\cdot SK + r]_{q_l}

成立。

为了访问SK2SK^2,我们引入新的密钥 evaluation key EK=((aSK+e)+SK2,a)EK = (-(a\cdot SK + e)+SK^2,a) ,其中EK1+EK2SK=SK2eEK_1 +EK_2 \cdot SK = SK^2 -e 。然后,我们可以通过如下方式计算CC^*

C1=[C1+EK1C3]qlC2=[C2+EK2C3]ql\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}

我们可对CC^*进行验证:

C1+C2SK=C1+EK1C3+SK(C2+EK2C3)=C1+C2SK+C3(EK1+EK2SK)=C1+C2SK+C3SK2+C3e\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}

其中C3C_3的系数较大,但可以将其分解。

2.8 ModSwitch

模数变换(ModSwitch)用于控制乘法计算中的噪音增长。它的主要思想是将密文 CC 的模数 qq 降低为 qq',但不改变私钥 SKSK。其数学表达如下:

[C(SK)]q=[C(SK)]q[C(SK)]_q = [C'(SK)]_{q'}

细节上,这个变换是将密文 CC 的系数缩放 qq\frac{q'}{q} 并合适round,即

C=[qqC]C' = [\frac{q'}{q}\cdot C]

之前我们提到,BGV定义了一系列的模数 {p0,p1,,pL}\{p_0,p_1,\dots,p_L\} ,随着计算的推进,模数就从ll 降低为 l1l-1。 另外,模数的降低并不会影响加密的明文,因为对于qlq_l ,其中l{0,,L}l \in \{0,\dots,L\}

qlqLmod  tq_l \equiv q_L \mod t

可以简单理解为不影响密文中低 tt 位。

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.