作者: Leo Ducas1, Daniele Micciancio2.
FHEW总结:
其实FHEW的主要贡献就在于使用了累加器的方法来做Bootstrapping,思路是在幂次上计算 X b + a s = X m X^{b+as}=X^{m} Xb+as=Xm,通过与一个test vector v ( X ) v(X) v(X)相乘就可以用来提取最高位,对于{0,1}的密文来说,提取了最高位就相当于做了刷新。
后续工作:
之后TFHE将FHEW中使用 R G S W \sf RGSW RGSW与 R G S W \sf RGSW RGSW内乘来做算 v ( x ) ⋅ X b + a s v(x)\cdot X^{b+as} v(x)⋅Xb+as改为了 R G S W \sf RGSW RGSW与 R L W E \sf RLWE RLWE的外乘,从而极大地提高了效率。
且FHEW中的testvector就是 v ( X ) = 1 + X + X 2 + . . . + X N − 1 v(X)=1+X+X^2+...+X^{N-1} v(X)=1+X+X2+...+XN−1。后续文章会有将 v ( X ) v(X) v(X)改为 v ( X ) = f ( 0 ) + f ( 1 ) X + . . . + f ( N − 1 ) X N − 1 v(X)=f(0)+f(1)X+...+f(N-1)X^{N-1} v(X)=f(0)+f(1)X+...+f(N−1)XN−1,就可以在做Bootstrapping的同时执行某个函数。详情可以看TFHE作者写的PBS这篇以及我们写的TOTA这篇文章。
目前所有FHE方案主要的瓶颈在于Gentry的Bootstrapping操作。在之前2014年HElib of Halevi and Shoup中,一次Bootstrapping操作需要6分钟3。我们发现了一种新的方法来刷新密文的噪声,在个人机器上只要半秒。
这篇文章考虑了1bit密文的刷新究竟能有多快,具体来说,考虑两个加密一比特的密文 E ( b 1 ) E(b_1) E(b1)和 E ( b 2 ) E(b_2) E(b2),我们想要同态地运算一个与非门(NAND),来得到 E ( b 1 ∧ ˉ b 2 ) E(b_1 \bar{\wedge} b_2) E(b1∧ˉb2)的结果。这里考虑的门电路是带bootstrapping的门电路,也就是在执行一次同态的与非门之后,要跟上一个bootstrapping,也就是对 E ( b 1 ∧ ˉ b 2 ) E(b_1 \bar{\wedge} b_2) E(b1∧ˉb2)运行一次同态地解密电路,使得 E ( b 1 ∧ ˉ b 2 ) E(b_1 \bar{\wedge} b_2) E(b1∧ˉb2)的噪声大小与 E ( b i ) , i ∈ { 0 , 1 } E(b_i),i\in \{0,1\} E(bi),i∈{0,1}一致。这样的一次同态的NAND门加上一次Bootstrapping操作在个人电脑上的耗时为半秒。
与HElib中的bootstrapping比起来,这篇文章中在每次bootstrapping之前只允许一次NAND操作,而HElib支持更加复杂的操作,而且HElib还考虑了SIMD技术,因此平均每个比特刷新的速度和本文是一个量级的。
这篇文章的提升主要基于两个技术,第一个是在两个LWE密文上计算NAND门的新算法。另一个是一种进行Bootstrapping的方法。
具体来说,考虑两个密文 E ( m 1 ) E(m_1) E(m1)和 E ( m 2 ) E(m_2) E(m2),同态加密运行进行同态加法得到一个噪声更大的密文 E ( m 1 + m 2 ) E(m_1+m_2) E(m1+m2)。当在模2下考虑时,就能够同态地两个比特的异或。实现NAND门的方法就是将模2扩展到模4。考虑以下的真值表:
m 1 m_1 m1 | m 2 m_2 m2 | m 1 ∧ ˉ m 2 m_1 \bar\wedge m_2 m1∧ˉm2 | [ m 1 + m 2 ] 4 [m_1 + m_2]_4 [m1+m2]4 |
---|---|---|---|
0 | 0 | 1 | 0 |
0 | 1 | 1 | 1 |
1 | 0 | 1 | 1 |
1 | 1 | 0 | 2 |
也就是说,当 E ( m ) = E ( m 1 ) + E ( m 2 ) E(m)=E(m_1)+E(m_2) E(m)=E(m1)+E(m2)的值为 m = 2 m=2 m=2时,代表 m 1 ∧ ˉ m 2 = 0 m_1 \bar \wedge m_2=0 m1∧ˉm2=0。当 m ∈ { 0 , 1 } m\in\{0,1\} m∈{0,1}时, m 1 ∧ ˉ m 2 = 1 m_1 \bar\wedge m_2=1 m1∧ˉm2=1。利用这个性质,就可以对 E ( m ) E(m) E(m)进行一个简单的仿射变换4来将密文变为 E ( m 1 ∧ ˉ m 2 ) E(m_1 \bar\wedge m_2) E(m1∧ˉm2)。这里用到的是 5 4 − 1 2 ( m 1 + m 2 ) \frac{5}{4}-\frac{1}{2}(m_1 + m_2) 45−21(m1+m2)。再考虑如下真值表:
m 1 m_1 m1 | m 2 m_2 m2 | 5 4 − 1 2 ( m 1 + m 2 ) \frac{5}{4}-\frac{1}{2}(m_1 +m_2) 45−21(m1+m2) | ⌊ 5 4 − 1 2 ( m 1 + m 2 ) ⌉ \lfloor \frac{5}{4} - \frac{1}{2}(m_1 + m_2) \rceil ⌊45−21(m1+m2)⌉ |
---|---|---|---|
0 | 0 | 5 4 \frac{5}{4} 45 | 1 |
0 | 1 | 3 4 \frac{3}{4} 43 | 1 |
1 | 0 | 3 4 \frac{3}{4} 43 | 1 |
1 | 1 | 1 4 \frac{1}{4} 41 | 0 |
通过这样的方式来构造的NAND门,比之前的方法(通过乘法构造)的噪音要低很多。因此,噪声刷新操作(bootstrapping)也更加简单。
本文的第二个关键技术时基于文章Faster Bootstrapping with Polynomial Error5,LWE密文的解密可以由一次模q的内积和一次取整操作得到。bootstrapping就是在密文上同态地执行模q的内积以及取整。文章5中使用了一个模q的加密算法,可以很快速的计算内积。具体的做法使用一个一比特的加密算法,将一个循环群中的元素 v ∈ C v\in C v∈C,加密为一个向量 E ( x 1 ) , . . . , E ( x ∣ C ∣ ) E(x_1),...,E(x_{|C|}) E(x1),...,E(x∣C∣),其中 x i = 1 x_i=1 xi=1当且仅当 i = v i=v i=v。本文将5中的方法扩张到了多项式环上,那就支持FFT来加速运算的操作,效率得到了进一步的提高。而且还利用了多项式环的性质,将循环群中元素直接映射到多项式环上: i → X i i \to X^i i→Xi,其中 i i i是模 q q q的原根。
另外,这篇文章还使用了binary value的私钥(也就是只有0,1),来减少key switching过程中的噪声。之前有文章证明过 s s s是0,1值的时候安全性与普通的LWE问题困难度一致。
先引入一个随机取整函数 χ : R → Z \chi:\mathbb{R}\to \mathbb{Z} χ:R→Z。这个函数将一个实数映射为一个整数,满足 χ ( x + n ) = χ ( x ) + n \chi(x+n)=\chi(x)+n χ(x+n)=χ(x)+n。将 χ ( x ) − x \chi(x)-x χ(x)−x称为rounding error。注意到如果 x ∈ Z x\in Z x∈Z,那么 χ ( x ) = x + χ ( 0 ) \chi(x) = x+\chi(0) χ(x)=x+χ(0), χ ( 0 ) \chi(0) χ(0)是一个固定的噪声分布。
记一个密文为
LWE s t / q ( m ) = ( a , χ ( a ⋅ s + m q / t ) m o d q ) ∈ Z q n + 1 \operatorname{LWE}_{\mathbf{s}}^{t/q}(m) = (\mathbf{a},\chi (\mathbf{a} \cdot \mathbf{s} + m q/t) \bmod q) \in \mathbb{Z}_q^{n+1} LWEst/q(m)=(a,χ(a⋅s+mq/t)modq)∈Zqn+1
可以通过如下方式解密:
m ′ = ⌊ t ( b − a ⋅ s ) / q ⌉ m o d t ∈ Z t m^{\prime}=\lfloor t(b-\mathbf{a}\cdot \mathbf{s})/q \rceil \bmod t \in \mathbb{Z}_t m′=⌊t(b−a⋅s)/q⌉modt∈Zt
要求error bound为 q / 2 t q/2t q/2t时才能正确解密,原因是:
⌊ t ( b − a ⋅ s ) / q ⌉ m o d t = ⌊ t q ⋅ ( q t m + e ) ⌉ = ⌊ m + t q e ⌉ = m m o d t \lfloor t(b-\mathbf{a}\cdot \mathbf{s})/q \rceil \bmod t = \left\lfloor \frac{t}{q} \cdot (\frac{q}{t}m + e) \right\rceil = \left\lfloor m+ \frac{t}{q}e \right\rceil= m \bmod t ⌊t(b−a⋅s)/q⌉modt=⌊qt⋅(tqm+e)⌉=⌊m+qte⌉=mmodt
这里就要求 ∣ t q e ∣ < 1 2 |\frac{t}{q}e| < \frac{1}{2} ∣qte∣<21,因此 ∣ e ∣ < q / 2 t |e| < q/2t ∣e∣<q/2t,记一个bound为 q / 2 t q/2t q/2t的密文为 L W E s t / q ( m , q / 2 t ) \mathsf{LWE}_{\mathbf{s}}^{t/q}(m,q/2t) LWEst/q(m,q/2t)。
可以将LWE密文从一个模数Q转换到另外一个模数 q q q,使用一个随机取整函数 [ ⋅ ] Q : q : Z Q → Z q [\cdot]_{Q:q}:\mathbb{Z}_Q \to \mathbb{Z}_q [⋅]Q:q:ZQ→Zq。
[ x ] Q : q = ⌊ q x / Q ⌋ + B , B ∈ { 0 , 1 } [x]_{Q:q} = \lfloor qx/Q \rfloor + B,B\in \{0,1\} [x]Q:q=⌊qx/Q⌋+B,B∈{0,1}
B B B是一个随机数, P r { B = 1 } = ( q x / Q ) − ⌊ q x / Q ⌋ Pr\{B=1\} = (qx/Q)-\lfloor qx/Q \rfloor Pr{B=1}=(qx/Q)−⌊qx/Q⌋,也就是 q x / Q qx/Q qx/Q的小数部分越大, B B B越可能是1。
定义ModSwitch:
ModSwitch ( a , b ) = [ ( a , b ) ] Q : q = ( ( [ a 1 ] Q : q , . . . , [ a n ] Q : q ) , [ b ] Q : q ) \operatorname{ModSwitch}(\mathbf{a},b) = [(\mathbf{a},b)]_{Q:q} = (([a_1]_{Q:q},...,[a_n]_{Q:q}),[b]_{Q:q}) ModSwitch(a,b)=[(a,b)]Q:q=(([a1]Q:q,...,[an]Q:q),[b]Q:q)
密钥替换允许将 L W E z t / q \mathsf{LWE}_{\mathbf{z}}^{t/q} LWEzt/q变为 L W E s t / q \mathsf{LWE}_{\mathbf{s}}^{t/q} LWEst/q,其中 z ∈ Z q N \mathbf{z}\in \mathbb{Z}_q^N z∈ZqN, s ∈ Z q n \mathbf{s} \in \mathbb{Z}_q^n s∈Zqn。
记 B k s B_{\mathsf{ks}} Bks是一个分解基数,记 d k s = ⌈ log B k s q ⌉ d_{\mathsf{ks}}=\lceil \log_{B_{\mathsf{ks}}}q \rceil dks=⌈logBksq⌉。 a i = ∑ j a i , j B k s j , j = 0 , . . . , d k s − 1 a_{i}=\sum_j a_{i,j} B_{\mathsf{ks}}^j,j=0,...,d_{\mathsf{ks}}-1 ai=∑jai,jBksj,j=0,...,dks−1。
对于 i = 1 , . . . , N , a i , j ∈ { 0 , . . . , B k s } , j = 0 , . . . , d k s − 1 i = 1,...,N,a_{i,j}\in\{0,...,B_{\mathsf{ks}}\},j=0,...,d_{\mathsf{ks}}-1 i=1,...,N,ai,j∈{0,...,Bks},j=0,...,dks−1。记 k i , j , a i , j = L W E s q / q ( a i , j z i B k s j ) \mathbf{k}_{i,j,a_{i,j}}=\mathsf{LWE}_{\mathbf{s}}^{q/q}(a_{i,j}z_i B_{\mathsf{ks}}^j) ki,j,ai,j=LWEsq/q(ai,jziBksj)。
记 K = { k i , j , a i , j } \mathfrak{K}=\{\mathbf{k}_{i,j,a_{i,j}}\} K={ki,j,ai,j},密文 ( a , b ) ∈ L W E z t / q ( m ) (\mathbf{a},b)\in \mathsf{LWE}_{\mathbf{z}}^{t/q}(m) (a,b)∈LWEzt/q(m),
K e y S w i t c h ( ( a , b ) , K ) = ( 0 , b ) − ∑ i , j k i , j , a i , j \mathsf{KeySwitch}((\mathbf{a},b),\mathfrak{K})=(\mathbf{0},b)-\sum_{i,j}\mathbf{k}_{i,j,a_{i,j}} KeySwitch((a,b),K)=(0,b)−i,j∑ki,j,ai,j
正确性:
记 ( a ′ , b ′ ) = ∑ i , j k i , j , a i , j (\mathbf{a}',b')=\sum_{i,j} \mathbf{k}_{i,j,a_{i,j}} (a′,b′)=∑i,jki,j,ai,j,则 b ′ − a ′ s = a ⋅ z b'-\mathbf{a'}s = \mathbf{a} \cdot \mathbf{z} b′−a′s=a⋅z
因此 c t x t ′ = K e y S w i t c h ( ( a , b ) = ( − a ′ , b − b ′ ) \mathsf{ctxt}' = \mathsf{KeySwitch}((\mathbf{a},b)=(-\mathbf{a}',b-b') ctxt′=KeySwitch((a,b)=(−a′,b−b′)
D e c ( c t x t ′ ) = t / q ⌊ b − ( b ′ − a ′ s ) ⌉ = m + t / q ( z ⋅ a + e − a ⋅ z ) = m \mathsf{Dec(ctxt')}= t/q\lfloor b-(b'-\mathbf{a}'s) \rceil=m+ t/q(\mathbf{z} \cdot \mathbf{a} + e-\mathbf{a\cdot z}) = m Dec(ctxt′)=t/q⌊b−(b′−a′s)⌉=m+t/q(z⋅a+e−a⋅z)=m
其中,将 a i a_i ai分解的目的是为了降低 K e y S w i t c h \mathsf{KeySwitch} KeySwitch过程中添加的噪声。
主要目的是为了做如下事情:给定 c i ∈ L W E s t / q ( m i , E ) , i = 0 , 1 c_i\in \mathsf{LWE}_{\mathbf{s}}^{t/q}(m_i,E),i=0,1 ci∈LWEst/q(mi,E),i=0,1,计算 c ∈ L W E s t / q ( m , E ) c\in \mathsf{LWE}_{\mathbf{s}}^{t/q}(m,E) c∈LWEst/q(m,E),其中 m = 1 − m 0 ⋅ m 1 = m 0 ∧ ˉ m 1 m=1-m_0 \cdot m_1=m_0 \bar\wedge m_1 m=1−m0⋅m1=m0∧ˉm1。
主要思想是将输入密文变为有一点点不同的形式: c i ∈ L W E s 4 / q ( m i , q / 16 ) c_i \in \mathsf{LWE}_{\mathbf{s}}^{4/q}(m_i,q/16) ci∈LWEs4/q(mi,q/16),这里明文模数 t = 4 t=4 t=4,噪声bound为 E = q / 16 E=q/16 E=q/16。(标准的LWE密文 t = 2 t=2 t=2, E = q / 4 E=q/4 E=q/4)
H o m N A N D : L W E s 4 / q ( m 0 , q / 16 ) × L W E s 4 / q ( m 1 , q / 16 ) → L W E s 2 / q ( m 0 ∧ ˉ m 1 , q / 4 ) \mathsf{HomNAND:LWE}_{\mathbf{s}}^{4/q}(m_0,q/16) \times \mathsf{LWE}_{\mathbf{s}}^{4/q}(m_1,q/16) \to \mathsf{LWE}_{\mathbf{s}}^{2/q}(m_0 \bar \wedge m_1 ,q/4) HomNAND:LWEs4/q(m0,q/16)×LWEs4/q(m1,q/16)→LWEs2/q(m0∧ˉm1,q/4)
可以通过如下方式构造:
( a , b ) = H o m N A N D ( ( a 0 , b 0 ) , ( a 1 , b 1 ) ) = ( − a 0 − a 1 , 5 q 8 − b 0 − b 1 ) (\mathbf{a}, b)=\mathsf{HomNAND}\left(\left(\mathbf{a}_{0}, b_{0}\right),\left(\mathbf{a}_{1}, b_{1}\right)\right)=\left(-\mathbf{a}_{0}-\mathbf{a}_{1}, \frac{5 q}{8}-b_{0}-b_{1}\right) (a,b)=HomNAND((a0,b0),(a1,b1))=(−a0−a1,85q−b0−b1)
要证明: ( a , b ) ∈ L W E s 2 / q ( 1 − m 0 m 1 , q / 4 ) (\mathbf{a},b)\in \mathsf{LWE}_{\mathbf{s}}^{2/q}(1-m_0m_1,q/4) (a,b)∈LWEs2/q(1−m0m1,q/4)。即证明 D e c s 2 / q ( a , b ) ≈ 1 − m 0 m 1 \mathsf{Dec}_{\mathbf{s}}^{2/q}(\mathbf{a},b) \approx 1-m_0m_1 Decs2/q(a,b)≈1−m0m1,且error bound为 q / 4 q/4 q/4。
考虑:
b − a ⋅ s − ( 1 − m 0 m 1 ) q 2 = 5 q 8 − b 0 − b 1 + a 0 ⋅ s + a 1 ⋅ s − q 2 + q 2 ⋅ m 0 m 1 = q 8 − q 4 m 0 − e 0 − q 4 m 1 − e 1 + q 2 m 0 m 1 = q 4 ( 1 2 − m 0 2 + 2 m 0 m 1 − m 1 2 ) − ( e 0 + e 1 ) = q 4 ( 1 2 − ( m 0 − m 1 ) 2 ) − ( e 0 + e 1 ) = ± q 8 − ( e 0 + e 1 ) \begin{aligned} b-\mathbf{a \cdot s} - (1-m_0m_1) \frac{q}{2} &= \frac{5q}{8}-b_0 - b_1 + \mathbf{a}_0 \cdot \mathbf{s} +\mathbf{a}_1 \cdot \mathbf{s} -\frac{q}{2}+\frac{q}{2}\cdot m_0m_1 \\ &=\frac{q}{8}-\frac{q}{4}m_0-e_0-\frac{q}{4}m_1-e_1 + \frac{q}{2}m_0m_1\\ &= \frac{q}{4}(\frac{1}{2}-m_0^2 +2m_0m_1 -m_1^2)-(e_0+e_1)\\ &= \frac{q}{4}(\frac{1}{2}-(m_0-m_1)^2)-(e_0+e_1)\\ & = \pm \frac{q}{8}-(e_0+e_1) \end{aligned} b−a⋅s−(1−m0m1)2q=85q−b0−b1+a0⋅s+a1⋅s−2q+2q⋅m0m1=8q−4qm0−e0−4qm1−e1+2qm0m1=4q(21−m02+2m0m1−m12)−(e0+e1)=4q(21−(m0−m1)2)−(e0+e1)=±8q−(e0+e1)
所以 b − a ⋅ s = q 2 ⋅ ( 1 − m 0 m 1 ) + e , e = ± q 8 − ( e 0 + e 1 ) b-\mathbf{a}\cdot \mathbf{s} = \frac{q}{2}\cdot(1-m_0m_1) + e,e= \pm\frac{q}{8}-(e_0+e_1) b−a⋅s=2q⋅(1−m0m1)+e,e=±8q−(e0+e1)
∣ e ∣ = ∣ ± q 8 − ( e 0 + e 1 ) ∣ < q 8 + q 16 + q 16 = q 4 |e|=|\pm\frac{q}{8}-(e_0+e_1)|<\frac{q}{8}+\frac{q}{16}+\frac{q}{16}=\frac{q}{4} ∣e∣=∣±8q−(e0+e1)∣<8q+16q+16q=4q
因此, ( a , b ) ∈ L W E s 2 / q ( 1 − m 0 m 1 , q / 4 ) (\mathbf{a},b)\in \mathsf{LWE}_{\mathbf{s}}^{2/q}(1-m_0m_1,q/4) (a,b)∈LWEs2/q(1−m0m1,q/4)。
对于执行完 c t x t = H o m N A N D ( ⋅ ) ∈ L W E s 2 / q ( m , q / 4 ) \mathsf{ctxt} = \mathsf{HomNAND}(\cdot) \in \mathsf{LWE}_{\mathbf{s}}^{2/q}(m,q/4) ctxt=HomNAND(⋅)∈LWEs2/q(m,q/4)的密文来说,要将其重新返回到 L W E s 4 / q ( m , q / 16 ) \mathsf{LWE}_{\mathbf{s}}^{4/q}(m,q/16) LWEs4/q(m,q/16)中,以便作为下一个NAND门的输入。因此要执行一个Refresh操作。
R e f r e s h : L W E s 2 / q ( m , q / 4 ) → L W E s 4 / q ( m , q / 16 ) \mathsf{Refresh}: \mathsf{LWE}_{\mathbf{s}}^{2/q}(m,q/4) \rightarrow \mathsf{LWE}_{\mathbf{s}}^{4/q}(m,q/16) Refresh:LWEs2/q(m,q/4)→LWEs4/q(m,q/16)
在之前的FHE中,Refresh是通过Gentry提出的Bootstrapping来做到的,对于一个LWE密文 ( a , b ) ∈ L W E s 2 / q ( m ) (\mathbf{a},b)\in \mathsf{LWE}_{\mathbf{s}}^{2/q}(m) (a,b)∈LWEs2/q(m)。我们的目的是得到一个新的密文 E ( m ) E(m) E(m),其中 E ( ⋅ ) E(\cdot) E(⋅)是一种满足同态性质的加密方案,其实在实践中就是 L W E \mathsf{LWE} LWE加密本身,但这里为了便于理解,写为 E E E。为了从一个 ( a , b ) (\mathbf{a},b) (a,b)中得到 E ( m ) E(m) E(m),需要在 ( a , b ) (\mathbf{a},b) (a,b)上同态地执行解密操作,具体来说,我们使用 E E E加密 s \mathbf{s} s得到 E ( s ) E(\mathbf{s}) E(s),然后计算
⌊ 2 / q ( b − a ⋅ E ( s ) ) ⌉ m o d 2 ≈ E ( m ) \lfloor 2/q (b-\mathbf{a} \cdot E(\mathbf{s}))\rceil \bmod 2 \approx E(m) ⌊2/q(b−a⋅E(s))⌉mod2≈E(m)
那如果 E E E就是一个LWE加密的话,就得到了 E ( m ) ∈ L W E ( m ) E(m) \in \mathsf{LWE}(m) E(m)∈LWE(m),且这个密文的噪声经过了刷新。
这里涉及到两个问题
**定义(同态累加器)**同态累加器由一个四元组构成 ( E , I n i t , I n c r , m s b E x t r a c t ) (E,\mathsf{Init,Incr,msbExtract}) (E,Init,Incr,msbExtract),四个算法都需要模数 t , q t,q t,q, E E E以及 m s b E x t r a c t \mathsf{msbExtract} msbExtract需要一些与 s \mathbf{s} s相关的密钥材料。为了书写简单,这里记 A C C ← v ⇔ A C C ← I n i t ( v ) \mathsf{ACC}\gets v \Leftrightarrow \mathsf{ACC}\gets \mathsf{Init}(v) ACC←v⇔ACC←Init(v), A C C ← + E ( v ) ⇔ A C C ← I n c r ( A C C , E ( v ) ) \mathsf{ACC} \stackrel{+}\gets E(v) \Leftrightarrow \mathsf{ACC} \gets \mathsf{Incr}(\mathsf{ACC},E(v)) ACC←+E(v)⇔ACC←Incr(ACC,E(v))。
对于一系列的数 v 0 , v 1 , . . . , v ℓ ∈ Z q v_0,v_1,...,v_{\ell}\in \mathbb{Z}_q v0,v1,...,vℓ∈Zq,在进行如下操作后:
A C C ← v 0 , A C C ← + E ( v i ) , i = 1 , . . . , l \mathsf{ACC}\gets v_0, \mathsf{ACC} \stackrel{+}\gets E(v_i), i= 1,...,l ACC←v0,ACC←+E(vi),i=1,...,l
称这样的 A C C \mathsf{ACC} ACC是一个 v v v的 ℓ − e n c r y p t i o n \ell-encryption ℓ−encryption,其中 v = ∑ i = 0 ℓ v i m o d q v=\sum_{i=0}^{\ell}v_i \bmod q v=∑i=0ℓvimodq。
我们称一个同态累加器是 E − c o r r e c t \mathcal{E}-correct E−correct的,当且仅当对于任意 v v v的一个 ℓ − e n c r y p t i o n \ell-encryption ℓ−encryption, c ← m s b E x t r a c t ( A C C ) \mathbf{c}\gets \mathsf{msbExtract(ACC)} c←msbExtract(ACC)有很大概率得到 c ∈ L W E s t / q ( v , E ( ℓ ) ) \mathbf{c}\in\mathsf{LWE}_{\mathbf{s}}^{t/q}(v,\mathcal{E}(\ell)) c∈LWEst/q(v,E(ℓ))。
在这里Refresh算法中使用到了累加器的参数为 t = 4 t=4 t=4, E ( ℓ ) ≤ q / 16 \mathcal{E}(\ell)\le q/16 E(ℓ)≤q/16。用到了一个分解系数 B r B_r Br,这里的 r r r下标指Refresh。刷新过程的输入为一个密文 ( a , b ) ∈ L W E s 2 / q ( m , q / 4 ) (\mathbf{a},b)\in \mathsf{LWE}_{\mathbf{s}}^{2/q}(m,q/4) (a,b)∈LWEs2/q(m,q/4),以及一个密钥材料 K i , j = E ( s i B r j m o d q ) K_{i,j}=E(s_i B_r^j \bmod q) Ki,j=E(siBrjmodq),在实际使用中,我们采用 K i , a i , j , j = a i , j E ( s i B r j m o d q ) = E ( a i , j s i B r j m o d q ) K_{i,a_{i,j},j}=a_{i,j}E(s_iB_r^j \bmod q)=E(a_{i,j}s_iB_r^j \bmod q) Ki,ai,j,j=ai,jE(siBrjmodq)=E(ai,jsiBrjmodq)。因为采用了标量乘法,所以要多 a i a_i ai进行分解 − a i = ∑ j a i , j B r j -a_i = \sum_j a_{i,j}B_r^j −ai=∑jai,jBrj,来降低 K i , a i , j , j K_{i,a_{i,j},j} Ki,ai,j,j的噪音。其中 a i , j ∈ { 0 , . . . , B r − 1 } a_{i,j}\in\{0,...,B_r-1\} ai,j∈{0,...,Br−1}, j = 0 , . . . , d r − 1 j=0,...,d_r-1 j=0,...,dr−1, d r = ⌈ log B r q ⌉ d_r=\lceil \log_{B_r}q \rceil dr=⌈logBrq⌉, i = 1 , . . . , n i=1,...,n i=1,...,n。
Algorithm R e f r e s h K ( a , b ) \mathsf{Refresh}_{\mathcal{K}}(\mathbf{a},b) RefreshK(a,b), for K = { K i , j } i ≤ n , j ≤ d r \mathcal{K}=\{K_{i,j}\}_{i\le n,j \le d_r} K={Ki,j}i≤n,j≤dr
A C C ← b + ( q / 4 ) \mathsf{ACC}\gets b+(q/4) ACC←b+(q/4)
for i = 1 , . . . , n i=1,...,n i=1,...,n do
计算 − a i = ∑ j B r j ⋅ a i , j ( m o d q ) -a_i=\sum_jB_r^j \cdot a_{i,j} \pmod q −ai=∑jBrj⋅ai,j(modq), K i , a i , j , j = a i , j E ( s i B r j ) = E ( a i , j s i B r j ) K_{i,a_{i,j},j}=a_{i,j}E(s_i B_r^j)=E(a_{i,j}s_i B_r^j) Ki,ai,j,j=ai,jE(siBrj)=E(ai,jsiBrj)
for j = 0 , . . . , d r − 1 j=0,...,d_r-1 j=0,...,dr−1 do A C C ← + K i , a i , j , j \mathsf{ACC} \stackrel{+}\gets K_{i,a_{i,j},j} ACC←+Ki,ai,j,j
end for
输出 m s b E x t r a c t ( A C C ) \mathsf{msbExtract(ACC)} msbExtract(ACC)
Theorem: 如果 ( E , I n i t , I n c r , m s b E x t r a c t ) (E,\mathsf{Init},\mathsf{Incr},\mathsf{msbExtract}) (E,Init,Incr,msbExtract)是一个正确的同态累加器,那么 R e f r e s h \mathsf{Refresh} Refresh算法,在输入任意密文 ( a , b ) ∈ L W E s 2 / q ( m , q / 4 ) (\mathbf{a},b)\in \mathsf{LWE}_{\mathbf{s}}^{2/q}(m,q/4) (a,b)∈LWEs2/q(m,q/4),以及有效的刷新密钥 K = { K i , j = E ( s i B r j ) } i , j \mathcal{K}=\{K_{i,j}=E(s_iB_r^j)\}_{i,j} K={Ki,j=E(siBrj)}i,j的情况下,会输出一个密文 R e f r e s h K ( c ) ∈ L W E s t / q ( m , E ( n d ) ) \mathsf{Refresh}_{\mathcal{K}}(\mathbf{c})\in \mathsf{LWE}_{\mathbf{s}}^{t/q}(m,\mathcal{E}(nd)) RefreshK(c)∈LWEst/q(m,E(nd))。
Proof. 刷新操作首先初始化累加器为 b + q / 4 b+q/4 b+q/4,然后进行了 n d nd nd次的加法 K i , a i , j , j = E ( a i , j s i B r j ) K_{i,a_{i,j},j}=E(a_{i,j}s_i B_r^j) Ki,ai,j,j=E(ai,jsiBrj)。所以最后的结果是一个噪声为 E ( n d ) \mathcal{E}(nd) E(nd)的LWE密文,累加器中的内容值 v v v为:
v − q 4 = b + ∑ i , j a i , j s i B r j = b + ∑ i s i ∑ j B r j a i , j = b + ( − ∑ i a i s i ) = q 2 m + e v-\frac{q}{4}=b+\sum_{i,j}a_{i,j}s_iB_r^j=b+\sum_i s_i \sum_j B_r^ja_{i,j} = b+(-\sum_i a_is_i)=\frac{q}{2}m+e v−4q=b+i,j∑ai,jsiBrj=b+i∑sij∑Brjai,j=b+(−i∑aisi)=2qm+e
v = q 2 m + e + q 4 v=\frac{q}{2}m+e+\frac{q}{4} v=2qm+e+4q,这里的 e e e是输入密文 ( a , b ) (\mathbf{a},b) (a,b)的噪声。根据假设 ∣ e ∣ < q / 4 \left|e\right| < q/4 ∣e∣<q/4,所以有 0 < e + q 4 < q 2 0
在构造同态累加器时,我们使用的参数为 t = 4 t=4 t=4, q = 2 k q=2^k q=2k, E E E是一个 Z q \mathbb{Z}_q Zq内的加密方案。这里的构造采用了Alperin-Sheriff5的思想。但是与他们不同的是,这篇文章直接将 Z q \mathbb{Z}_q Zq当做 R \mathcal{R} R的原根构成的乘法子环。
这个方案里面取一个模数 Q Q Q,多项式环的阶 N = 2 K N=2^K N=2K,满足 q ∣ 2 N q|2N q∣2N,为了方便理解,这篇笔记里采用 q = 2 N q=2N q=2N,一个分解系数 B g B_g Bg(这里 g g g指gadget)。这里假设 Q = B g d g Q=B_g^{d_g} Q=Bgdg,其中 B g B_g Bg是 p o w e r − o f − t h r e e power-of-three power−of−three。令 R = Z [ X ] / ( X N + 1 ) \mathcal{R}=\mathbb{Z}[X]/(X^N+1) R=Z[X]/(XN+1), R Q = ( R / Q R ) \mathcal{R}_Q=(\mathcal{R}/Q\mathcal{R}) RQ=(R/QR),以及一个额外的参数 u u u,这里 u u u是取一个 Z q \mathbb{Z}_q Zq内接近 Q / 2 t Q/2t Q/2t的可逆的数,因为 Q Q Q是3的幂次,所以 ⌊ Q / 2 t ⌋ \lfloor Q/2t \rfloor ⌊Q/2t⌋, ⌈ Q / 2 t ⌉ \lceil Q/2t \rceil ⌈Q/2t⌉中必有一个可逆,所以 ∣ u − Q / 2 t ∣ < 1 |u-Q/2t|<1 ∣u−Q/2t∣<1。
消息 m m m被加密为原根 X m ∈ R X^m\in \mathcal{R} Xm∈R的形式,原根构成一个循环群 G = ⟨ X ⟩ = { 1 , X , . . . , X N − 1 , − 1 , − X , . . . , − X N − 1 } \mathcal{G}=\langle X \rangle = \{1,X,...,X^{N-1},-1,-X,...,-X^{N-1}\} G=⟨X⟩={1,X,...,XN−1,−1,−X,...,−XN−1}。当 q = 2 N q=2N q=2N时, Z q ≃ ⟨ X ⟩ \mathbb{Z}_q\simeq \langle X \rangle Zq≃⟨X⟩。
− E z ( m ) -E_z(m) −Ez(m):输入为消息 m m m,密钥 z ∈ R z\in \mathcal{R} z∈R,
选取 a ∈ R Q 2 d g \mathbf{a}\in \mathcal{R}_{Q}^{2d_g} a∈RQ2dg是一个随机分布, e ∈ R 2 d g ≃ Z 2 d g N \mathbf{e} \in \mathcal{R}^{2d_g} \simeq \mathbb{Z}^{2d_gN} e∈R2dg≃Z2dgN是一个满足参数为 ς \varsigma ς的次高斯分布。输出
E z ( m ) = [ a , a ⋅ z + e ] + u X m G ∈ R Q 2 d g × 2 E_z(m)=[\mathbf{a},\mathbf{a}\cdot z + \mathbf{e}] + uX^m \mathbf{G} \in \mathcal{R}_Q^{2d_g \times 2} Ez(m)=[a,a⋅z+e]+uXmG∈RQ2dg×2
其中 G = ( I , B g I , . . . , B g d g − 1 I ) ∈ R 2 d g × 2 \mathbf{G} = (\mathbf{I},B_g\mathbf{I},...,B_g^{d_g-1}\mathbf{I})\in \mathcal{R}^{2d_g \times 2} G=(I,BgI,...,Bgdg−1I)∈R2dg×2。
− I n i t ( A C C ← v ) - \mathsf{Init}(\mathsf{ACC}\gets v) −Init(ACC←v):输入为 v ∈ Z q v\in \mathbb{Z}_q v∈Zq,
直接设定 A C C : = u X v ⋅ G ∈ R Q 2 d g × 2 \mathsf{ACC}:=u X^v\cdot \mathbf{G} \in \mathcal{R}_Q^{2d_g \times 2} ACC:=uXv⋅G∈RQ2dg×2。
− I n c r ( A C C ← + C ) -\mathsf{Incr}(\mathsf{ACC} \stackrel{+}\gets \mathbf{C}) −Incr(ACC←+C),输入为当前的 A C C ∈ R Q 2 d g × 2 \mathsf{ACC}\in\mathcal{R}_{Q}^{2d_g\times2} ACC∈RQ2dg×2,以及一个密文 C ∈ R Q 2 d g × 2 \mathbf{C}\in \mathcal{R}_Q^{2d_g\times 2} C∈RQ2dg×2,首先计算 u − 1 A C C u^{-1}\mathsf{ACC} u−1ACC的分解为 u − 1 A C C = ∑ i = 1 d g B g i − 1 D i u^{-1}\mathsf{ACC}=\sum_{i=1}^{d_g}B_g^{i-1}\mathbf{D}_i u−1ACC=∑i=1dgBgi−1Di(其中每个 D i ∈ R 2 d g × 2 \mathbf{D}_i\in \mathcal{R}^{2d_g\times 2} Di∈R2dg×2,每项的系数在 { 1 − B g 2 , . . . , B g − 1 2 } \{\frac{1-B_g}{2},...,\frac{B_g-1}{2}\} {21−Bg,...,2Bg−1}之内)。并更新累加器的值:
A C C : = [ D 1 , . . . , D d g ] ⋅ C \mathsf{ACC}:= [\mathbf{D}_1,...,\mathbf{D}_{d_g}]\cdot \mathbf{C} ACC:=[D1,...,Ddg]⋅C
− m s b E x t r a c t -\mathsf{msbExtract} −msbExtract:输入为一个 K e y S w i t c h \mathsf{KeySwitch} KeySwitch密钥 K \mathfrak{K} K,一个测试向量 t = − ∑ i = 0 N − 1 X i → \mathbf{t}=-\sum_{i=0}^{N-1} \overrightarrow{X^{i}} t=−∑i=0N−1Xi,其实 t = ( − 1 , − 1 , . . . , − 1 ) ∈ Z N \mathbf{t}=(-1,-1,...,-1) \in \mathbb{Z}^N t=(−1,−1,...,−1)∈ZN。最后提取的正确性在于: t ⋅ X v → \mathbf{t}\cdot \overrightarrow{X^v} t⋅Xv的值:如果 0 ≤ v < N 0\le v < N 0≤v<N,那么 t ⋅ X v → = − 1 \mathbf{t}\cdot \overrightarrow{X^v}=-1 t⋅Xv=−1,如果 N ≤ v < 2 N N\le v < 2N N≤v<2N,那么 t ⋅ X v → = 1 \mathbf{t}\cdot \overrightarrow{X^v}=1 t⋅Xv=1。具体算法如下:
两个符号: ⋅ → : a = a 0 + a 1 x + . . . + a N − 1 x N − 1 ∈ R \overrightarrow{\cdot}:a=a_0+a_1x+...+a_{N-1}x^{N-1}\in\mathcal{R} ⋅:a=a0+a1x+...+aN−1xN−1∈R, a → = ( a 0 , . . . , a N − 1 ) ∈ Z N \overrightarrow{a}=(a_0,...,a_{N-1})\in \mathbb{Z}^N a=(a0,...,aN−1)∈ZN。
⋅ ⇒ : a = a 0 + a 1 x + . . . + a N − 1 x N − 1 ∈ R \stackrel{\Rightarrow}{\cdot}: a=a_0+a_1x+...+a_{N-1}x^{N-1}\in \mathcal{R} ⋅⇒:a=a0+a1x+...+aN−1xN−1∈R, a ⇒ ∈ Z N × N \stackrel{\Rightarrow}{a}\in \mathbb{Z}^{N \times N} a⇒∈ZN×N是一个负循环矩阵, a ⇒ \stackrel{\Rightarrow}{a} a⇒的第一列为 a → \overrightarrow{a} a。
a ⇒ = [ a 0 − a N − 1 ⋯ − a 2 − a 1 a 1 a 0 − a N − 1 − a 2 ⋮ a 1 a 0 ⋱ ⋮ a N − 2 ⋱ ⋱ − a N − 1 a N − 1 a N − 2 ⋯ a 1 a 0 ] \stackrel{\Rightarrow}{a}=\left[\begin{array}{ccccc} a_{0} & -a_{N-1} & \cdots & -a_{2} & -a_{1} \\ a_{1} & a_{0} & -a_{N-1} & & -a_{2} \\ \vdots & a_{1} & a_{0} & \ddots & \vdots \\ a_{N-2} & & \ddots & \ddots & -a_{N-1} \\ a_{N-1} & a_{N-2} & \cdots & a_{1} & a_{0} \end{array}\right] a⇒=⎣⎢⎢⎢⎢⎢⎡a0a1⋮aN−2aN−1−aN−1a0a1aN−2⋯−aN−1a0⋱⋯−a2⋱⋱a1−a1−a2⋮−aN−1a0⎦⎥⎥⎥⎥⎥⎤
原文这里switching key有点错误,纠正一下
算法 m s b E x t r a c t K ( A C C ) \mathsf{msbExtract}_{\mathfrak{K}}(\mathsf{ACC}) msbExtractK(ACC), for K = { k i , j , w } i ≤ N , j ≤ d k s , w ≤ B k s \mathfrak{K}=\{\mathbf{k}_{i,j,w}\}_{i\le N,j\le d_{ks},w\le B_{ks}} K={ki,j,w}i≤N,j≤dks,w≤Bks。
需要一个switching key K = { k i , j , w } i , j , w \mathfrak{K}=\{\mathbf{k}_{i,j,w}\}_{i,j,w} K={ki,j,w}i,j,w是将密钥 z \mathbf{z} z替换为密钥 s \mathbf{s} s的: k i , j , w ← L W E s q / q ( w ⋅ z i ⋅ B k s j ) \mathbf{k}_{i,j,w}\gets \mathsf{LWE}_{\mathbf{s}}^{q/q}(w\cdot z_i \cdot B_{ks}^j) ki,j,w←LWEsq/q(w⋅zi⋅Bksj)。 A C C \mathsf{ACC} ACC是 v v v的一个 ℓ \ell ℓ-encryption。
1: [ a t , b t ] ← ( [ 0 → t , t t , 0 → t , … , 0 → t ] ⋅ A C C ⇒ ) ∈ Z Q 2 N / / A C C ⇒ ∈ Z 2 N d g × 2 N \left[\mathbf{a}^{t}, \mathbf{b}^{t}\right] \leftarrow([\overrightarrow{0}^{t}, \mathbf{t}^{t}, \overrightarrow{0}^{t}, \ldots, \overrightarrow{0}^{t}] \cdot \stackrel{\Rightarrow}{\mathsf{ACC}} ) \in \mathbb{Z}_{Q}^{2 N} \quad / / \stackrel{\Rightarrow}{\mathsf{ACC}} \in \mathbb{Z}^{2 N d_{\mathrm{g}} \times 2 N} [at,bt]←([0t,tt,0t,…,0t]⋅ACC⇒)∈ZQ2N//ACC⇒∈Z2Ndg×2N
2: c ← ( a , b 0 + u ) ∈ LWE z → t / Q ( msb ( v ) ) \mathbf{c} \leftarrow\left(\mathbf{a}, b_{0}+u\right)\quad\quad \in \operatorname{LWE}_{\overrightarrow{z}}^{t / Q}(\operatorname{msb}(v)) c←(a,b0+u)∈LWEzt/Q(msb(v))
3: c ′ ← K e y S w i t c h ( c , K ) ∈ L W E s t / Q ( msb ( v ) ) \mathbf{c}^{\prime} \gets \mathsf{KeySwitch} (\mathbf{c}, \mathfrak{K}) \in \mathsf{LWE}_{\mathbf{s}}^{t / Q}(\operatorname{msb}(v)) c′←KeySwitch(c,K)∈LWEst/Q(msb(v))
4: c ′ ′ ← M o d S w i t c h ( c ′ ) ∈ L W E s t / q ( msb ( v ) ) \mathbf{c}^{\prime \prime} \gets \mathsf{ModSwitch} \left(\mathbf{c}^{\prime}\right) \in \mathsf{LWE}_{\mathbf{s}}^{t / q}(\operatorname{msb}(v)) c′′←ModSwitch(c′)∈LWEst/q(msb(v))
5: Return c ′ \mathbf{c}^{\prime} c′.
噪声分析的部分就略过了,主要看一下流程的正确性。
首先理解一下 E z ( m ) E_z(m) Ez(m)的结构: E z ( m ) = [ a , a ⋅ z + e ] + u X m G ∈ R Q 2 d g × 2 E_z(m)=[\mathbf{a},\mathbf{a}\cdot z + \mathbf{e}] + uX^m \mathbf{G} \in \mathcal{R}_Q^{2d_g \times 2} Ez(m)=[a,a⋅z+e]+uXmG∈RQ2dg×2, G = ( I , B g I , . . . , B g d g − 1 I ) ∈ R 2 d g × 2 \mathbf{G} = (\mathbf{I},B_g\mathbf{I},...,B_g^{d_g-1}\mathbf{I})\in \mathcal{R}^{2d_g \times 2} G=(I,BgI,...,Bgdg−1I)∈R2dg×2
I = [ 1 0 0 1 ] , G = [ 1 0 0 1 B g 0 0 B g ⋮ ⋮ B g d g − 1 0 0 B g d g − 1 ] , u X m G = [ u X m 0 0 u X m B g u X m 0 0 B g u X m ⋮ ⋮ B g d g − 1 u X m 0 0 B g d g − 1 u X m ] \mathbf{I} = \begin{bmatrix} 1&0 \\ 0&1 \end{bmatrix},\mathbf{G}=\begin{bmatrix} 1&0 \\ 0&1 \\ B_g&0 \\ 0& B_g\\ \vdots &\vdots\\ B_g^{d_g-1}& 0\\ 0&B_g^{d_g-1} \end{bmatrix},uX^m\mathbf{G}=\begin{bmatrix} uX^m&0 \\ 0&uX^m \\ B_guX^m&0 \\ 0& B_guX^m\\ \vdots &\vdots\\ B_g^{d_g-1}uX^m& 0\\ 0&B_g^{d_g-1}uX^m \end{bmatrix} I=[1001],G=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡10Bg0⋮Bgdg−10010Bg⋮0Bgdg−1⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤,uXmG=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡uXm0BguXm0⋮Bgdg−1uXm00uXm0BguXm⋮0Bgdg−1uXm⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
[ a , a ⋅ z + e ] = [ a 0 a 0 z + e 0 a 1 a 1 z + e 1 a 2 a 2 z + e 2 a 3 a 3 z + e 3 ⋮ ⋮ a d g − 2 a d g − 2 z + e d g − 2 a d g − 1 a d g − 1 z + e d g − 1 ] , E z ( m ) = [ a 0 + u X m a 0 z + e 0 a 1 a 1 z + e 1 + u X m a 2 + B g u X m a 2 z + e 2 a 3 a 3 z + e 3 + B g u X m ⋮ ⋮ a d g − 2 + B g d g − 1 u X m a d g − 2 z + e d g − 2 a d g − 1 a d g − 1 z + e d g − 1 + B g d g − 1 u X m ] [\mathbf{a},\mathbf{a}\cdot z+\mathbf{e}]=\begin{bmatrix} a_0&a_0z+e_0 \\ a_1&a_1z+e_1 \\ a_2&a_2z+e_2 \\ a_3&a_3z+e_3\\ \vdots &\vdots\\ a_{d_g-2}&a_{d_g-2}z+e_{d_g-2}\\ a_{d_g-1}&a_{d_g-1}z+e_{d_g-1} \end{bmatrix} ,E_z(m)=\begin{bmatrix} a_0+uX^m&a_0z+e_0 \\ a_1&a_1z+e_1+uX^m \\ a_2+B_guX^m&a_2z+e_2 \\ a_3&a_3z+e_3+B_guX^m\\ \vdots &\vdots\\ a_{d_g-2}+B_g^{d_g-1}uX^m&a_{d_g-2}z+e_{d_g-2}\\ a_{d_g-1}&a_{d_g-1}z+e_{d_g-1}+B_g^{d_g-1}uX^m \end{bmatrix} [a,a⋅z+e]=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡a0a1a2a3⋮adg−2adg−1a0z+e0a1z+e1a2z+e2a3z+e3⋮adg−2z+edg−2adg−1z+edg−1⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤,Ez(m)=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡a0+uXma1a2+BguXma3⋮adg−2+Bgdg−1uXmadg−1a0z+e0a1z+e1+uXma2z+e2a3z+e3+BguXm⋮adg−2z+edg−2adg−1z+edg−1+Bgdg−1uXm⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
可以看出, E z ( m ) E_z(m) Ez(m)中的第二行,其实是 ( a 1 , a 1 z + e 1 + u X m ) ≈ R L W E z t / Q ( 1 2 X m ) (a_1,a_1z+e_1+uX^m)\approx\mathsf{RLWE}_{z}^{t/Q}(\frac{1}{2}X^m) (a1,a1z+e1+uXm)≈RLWEzt/Q(21Xm),因为
u ≈ Q / 2 t u\approx Q/2t u≈Q/2t, R L W E z t / q ( m ) = ( a , a z + e + Q / t m ) ≈ ( a , a z + e + 2 u m ) \mathsf{RLWE}_{z}^{t/q}(m)=(a,az+e+Q/tm)\approx (a,az+e+2um) RLWEzt/q(m)=(a,az+e+Q/tm)≈(a,az+e+2um)。
根据Fact 9,可以直接得到最后 A C C = [ a , a z + e ] + u X v G \mathsf{ACC}=[\mathbf{a},\mathbf{a}z+\mathbf{e}]+uX^v\mathbf{G} ACC=[a,az+e]+uXvG。这里 v = q 2 m + e + q 4 v=\frac{q}{2}m+e+\frac{q}{4} v=2qm+e+4q。 m = m s b ( v ) m=\mathsf{msb}(v) m=msb(v),这个性质是在之前**算法(Refresh)**中证明过。
在 m s b E x t r a c t \mathsf{msbExtract} msbExtract算法中,我们计算了 [ a t , b t ] ← ( [ 0 → t , t t , 0 → t , … , 0 → t ] ⋅ A C C ⇒ ) ∈ Z Q 2 N \left[\mathbf{a}^{t}, \mathbf{b}^{t}\right] \leftarrow([\overrightarrow{0}^{t}, \mathbf{t}^{t}, \overrightarrow{0}^{t}, \ldots, \overrightarrow{0}^{t}] \cdot \stackrel{\Rightarrow}{\mathsf{ACC}} ) \in \mathbb{Z}_{Q}^{2 N} [at,bt]←([0t,tt,0t,…,0t]⋅ACC⇒)∈ZQ2N,其实这里就是求了 t t \mathbf{t}^t tt和 A C C \mathsf{ACC} ACC中第二行的乘积,令 a , b ′ a,b' a,b′为ACC中第二行的值,满足 b ′ → = a ⇒ ⋅ z → + u ⋅ X v → + e → \overrightarrow{b'}=\stackrel{\Rightarrow}{a}\cdot \overrightarrow{z}+u\cdot \overrightarrow{X^v}+\overrightarrow{e} b′=a⇒⋅z+u⋅Xv+e。 b 0 b_0 b0为 b ′ b' b′的第一项,则 [ a t , b 0 ] ← t t ⋅ [ a ⇒ , b ′ → ] [\mathbf{a}^t,b_0] \gets \mathbf{t}^t\cdot\left[\stackrel{\Rightarrow}{a},\overrightarrow{b'}\right] [at,b0]←tt⋅[a⇒,b′]。
观察到 m = m s b ( v ) m=\mathsf{msb}(v) m=msb(v),当 m = 0 m=0 m=0, 0 ≤ v < N 0\le v
所以
c = ( a , b 0 + u ) = ( a , a ⋅ z → + t ⋅ e + u t t ⋅ X v → + u ) = ( a , a ⋅ z → + t ⋅ e + 2 u m s b ( v ) ) \mathbf{c}=(\mathbf{a},b_0+u) = (\mathbf{a},\mathbf{a}\cdot \overrightarrow{z} + \mathbf{t}\cdot \mathbf{e} +u\mathbf{t}^t \cdot \overrightarrow{X^v} + u)=(\mathbf{a},\mathbf{a}\cdot \overrightarrow{z} + \mathbf{t}\cdot \mathbf{e} +2u\mathsf{msb}(v)) c=(a,b0+u)=(a,a⋅z+t⋅e+utt⋅Xv+u)=(a,a⋅z+t⋅e+2umsb(v))
又因为 u = ⌊ Q / 2 t ⌉ u=\lfloor Q/2t \rceil u=⌊Q/2t⌉:
c = ( a , a ⋅ z → + t ⋅ e + ⌊ Q / t ⌉ m s b ( v ) ) ∈ L W E z → t / Q ( m s b ( v ) ) = L W E z → t / Q ( m ) \mathbf{c} = (\mathbf{a},\mathbf{a}\cdot \overrightarrow{z} + \mathbf{t}\cdot \mathbf{e} +\lfloor Q/t \rceil\mathsf{msb}(v))\in \mathsf{LWE}_{\overrightarrow{z}}^{t/Q}(\mathsf{msb}(v))=\mathsf{LWE}_{\overrightarrow{z}}^{t/Q}(m) c=(a,a⋅z+t⋅e+⌊Q/t⌉msb(v))∈LWEzt/Q(msb(v))=LWEzt/Q(m)
噪声的刷新可以粗略的理解一下,因为是通过提取msb的方式来取得m,所以新的密文与之前的噪声大小就无关了,所以refresh就相当于进行了bootstrapping。
FHEW刷新密文的思想,主要是考虑 q 2 m + e + q 4 \frac{q}{2}m+e+\frac{q}{4} 2qm+e+4q这样一个式子,其中 q = 2 N q=2N q=2N是2的幂次, ∣ e ∣ < q 4 |e|<\frac{q}{4} ∣e∣<4q,因此 m s b ( v ) = m msb(v)=m msb(v)=m,将这个 v v v编码到多项式的次数上 X v ∈ R X^v\in \mathcal{R} Xv∈R,当 m = 0 m=0 m=0, 0 ≤ v < N 0\le v < N 0≤v<N, X v X^v Xv的系数是正的,当 m = 1 m=1 m=1, N ≤ v < 2 N N\le v < 2N N≤v<2N, X v X^v Xv的系数是负的。通过这样的一个性质,结合GSW的技术,可以在密文上提取出 v v v的最高位。相当于做了一次密文刷新。
本人正在入门密码学,欢迎各位同学或老师加我微信交流:shenghua-adije
Centrum Wiskunde and Informatica, Amsterdam, Netherlands; [email protected] ↩︎
University of California, San Diego, California, USA; [email protected] ↩︎
也不知道这里的bootstrapping是指对bit-wise密文还是word-wise密文。之后看一看 ↩︎
所谓仿射变换,就是向量经过一次线性变换加一次平移变换,用公式可以表示为: q ⃗ = A p ⃗ + b ⃗ \vec{q}=A \vec{p}+\vec{b} q=Ap+b ↩︎
Alperin-Sheriff J., Peikert C. (2014) Faster Bootstrapping with Polynomial Error. In: Garay J.A., Gennaro R. (eds) Advances in Cryptology – CRYPTO 2014. CRYPTO 2014. Lecture Notes in Computer Science, vol 8616. Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-662-44371-2_17 ↩︎ ↩︎ ↩︎ ↩︎